@snapcall/stream-ui 1.29.1 → 1.31.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/stream-ui.esm.js +2214 -885
- package/dist/stream-ui.js +2210 -881
- package/dist/types.d.ts +75 -8
- package/package.json +4 -2
package/dist/stream-ui.js
CHANGED
|
@@ -24,6 +24,8 @@ var $jQDcL$snapcalldesignsystemform = require("@snapcall/design-system/form");
|
|
|
24
24
|
var $jQDcL$reacthookform = require("react-hook-form");
|
|
25
25
|
var $jQDcL$reactdom = require("react-dom");
|
|
26
26
|
var $jQDcL$qrcode = require("qrcode");
|
|
27
|
+
var $jQDcL$reactmarkdown = require("react-markdown");
|
|
28
|
+
var $jQDcL$reacttypeanimation = require("react-type-animation");
|
|
27
29
|
|
|
28
30
|
|
|
29
31
|
function $parcel$interopDefault(a) {
|
|
@@ -364,27 +366,27 @@ const $393bda1b33846dfc$export$604ba5624273df44 = ()=>{
|
|
|
364
366
|
|
|
365
367
|
|
|
366
368
|
var $20859e1dad0fd138$exports = {};
|
|
367
|
-
$20859e1dad0fd138$exports = JSON.parse('{"header":{"free":"Free version"},"loader":{"connection":"Connecting..."},"common":{"new":"new"},"notifications":{"error":"Error","screensharingError":"An error occured when trying to toggle screensharing","microphoneError":"An error occured when trying to toggle the microphone","cameraError":"An error occured when trying to toggle the camera","cameraRotateError":"An error occured when trying to rotate the camera","noCamera":"No camera available","blockedMicrophonePopupTitle":"Camera and microphone are blocked","blockedMicrophonePopup":"SnapCall requires access to your camera and microphone. Click the camera blocked icon in your browser\'s address bar.","reload":"Reload","criticalError":"A critical error has occurred (error {{code}}).","agentJoinError":"An error occured while trying to join the room as an agent","close":"Close","connectedTo":"Connected to {{name}}","recording":"Recording in progress","invitationSentToFailed":"Sent to {{ name }} failed.","errorOccuredCode":"An error occured (error {{code}})."},"recordingPopup":{"recordingStartTitle":"Recording about to start.","recordingStartText":"This call will be recorded shortly. If you\u2019d rather not be recorded, you\u2019re welcome to leave the call at this time.","dismiss":"Dismiss"},"requestAccess":{"wantToJoin":"<bold>{{name}}</bold> wants to join!","deny":"Deny","admit":"Admit","defaultName":"An user"},"endView":{"goBack":"Go back to call","callEnded":"The call has ended","callNoLongerActive":"This call is no longer active. Thank you for participating.","callLeft":"You have left the call","ifMistakeRejoin":"If this was a mistake, you can rejoin using the button below.","full":"You can\'t join this call","fullDescription":"The room is full. Please try to join the call later.","invalidLink":"Invalid link","invalidOrExpired":"This link is invalid or expired.","openDashboard":"Open dashboard","howWasYourExperience":"How was your experience?","pleaseRateYourExperienceBelow":"Please rate your experience below","thankYouForYourFeedback":"Thank you for your feedback.","yourFeedbackHelpsUs":"Your feedback helps us improve. See you soon!","addAdditionalMedia":"Add additional media","allowsYouToShareMoreMedia":"This option allows you to share one or more media to add more context."},"menu":{"title":"Menu","new":"NEW","openNewTab":"Open new tab","quickConnect":"Quick Connect","pictureInPicture":"Picture-in-Picture","screenSharing":"Screen sharing","stopRecord":"Stop record","startRecord":"Record call"},"blockedFeature":{"titleConnected":"Upgrade to Pro","titleGuest":"Feature not available","descriptionConnected":"On a free plan, you can\'t use this feature. Upgrade your plan to enjoy all in-call features.","descriptionGuest":"You are participating in a call created with a free version of SnapCall. This feature is only available with a Pro version.","dismissGuest":"Okay","dismissConnected":"Upgrade to Pro"},"copyLink":{"title":"Copy link","description":"Copy link into clipboard","error":"An error occured when trying to copy to clipboard","copied":"Link copied to clipboard","copy":"Copy"},"quickConnect":{"title":"Quick Connect","scanTitle":"Scan QR Code","scan":"Scan this QR code with your phone camera to open the call."},"settings":{"title":"Settings","preferences":"Preferences","language":"Language","devices":"Devices","help":"Help","helpCenter":"Go to help center","selectYourMicrophone":"Select your preferred microphone","selectYourCamera":"Select your preferred camera","selectYourLanguage":"Select your preferred language"},"audioMenu":{"title":"Audio","blockedMicrophone":"Microphone is blocked.","microphonePermissions":"Please accept microphone sharing before accessing these options."},"videoMenu":{"title":"Video","lowDef":"Low definition (240p)","standardDef":"Standard definition (480p)","highDef":"High definition (720p)","blockedCamera":"Camera is blocked.","cameraPermissions":"Please accept camera sharing before accessing these options.","sendResolution":"Send Resolution (maximum)"},"shareLink":{"title":"Share link","title2":"Share a link","invalid":"Invalid link","sentToUsers":"Link sent to users","sentToUser":"Link sent to {{user}}","failed":"Failed to send link","poweredBy":"Powered by","invoice":"{{user}} sent you an invoice.","pay":"Pay"},"invitePeople":{"PublicLink":"Public link","invitePeople":"Invite people","joinTheCall":"Join the call","inviteRecordClip":"Invite to record clip","inviteRecordVideo":"Record a video","inviteRecordAudio":"Record an audio","inviteRecordScreen":"Record a screen","inviteRecordPhoto":"Take a photo","inviteCall":"Invite to join call","sharePublicLink":"Share public link","inviteByEmail":"Invite by email","inviteByEmailOrNumber":"Invite by email or sms","emailsOrNumberPlaceholder":"Eg. john@acme.com or +33612345678","addEmailToInvite":"Add an email to invite.","email":"Email","emailPlaceholder":"Eg. john@acme.com","invite":"Invite","linkToJoinCall":"Link to join the call","linkToRecordAClip":"Link to record a clip","invalidEmail":"Invalid email format.","invalidEmailOrNumber":"Invalid email or number format.","addEmails":"Add emails...","invitationSentTo_one":"Sent to {{ name }}","invitationSentTo_other":"Sent to {{ name }} and {{ otherEmailsCount }}+","error":"Failed to send, please try again later.","inviteCallDefaultMessage":"Hey! You\'re invited to join our video call. Click the link to connect instantly.","inviteClipDefaultMessage":"Hey! Please record your video now and provide us with more context to assist you better.","inviteClipVideoDefaultMessage":"Hey! Please record your video now and provide us with more context to assist you better.","inviteClipAudioDefaultMessage":"Hey! Please record an audio message now and provide us with more context to assist you better.","inviteClipScreenDefaultMessage":"Hey! Please record your screen now and provide us with more context to assist you better.","inviteClipPhotoDefaultMessage":"Hey! Please take a photo and provide us with more context to assist you better.","message":"Message"},"youtube":{"title":"Watch Together","url":"YOUTUBE URL","invalid":"Invalid YouTube URL","share":"Watch now"},"sharedHistory":{"shared":"Shared with you"},"snapshot":{"title":"Snapshot","shared":"Snapshot shared.","sentToUsers":"Snapshot sent to users.","sentToUser":"Snapshot sent to {{user}}","save":"Save photo","error":"An error occured when trying to send the snapshot","aSnapshotHasBeenShared":"A snapshot has been shared."},"gdpr":{"recordedWarning":"To improve the quality of our service, this call will be recorded."},"requestDevice":{"requestInput":"Request input devices","request":"{{user}} would like you to share your {{device}}","timedOut":"Your request has timed out.","declined":"Your request has been declined.","userDeclined":"{{user}} has declined your request.","askForDevice":"Ask for {{device}}","waitingForDevice":"Waiting for {{name}}\'s {{device}}","deviceActivated":"{{device}} activated","deviceActivationDeclined":"{{device}} activation declined","userWouldLikeYouToActivateYourDevice":"{{name}} would like you to activate your {{device}}."},"leave":{"title":"Leave","leaveCall":"Leave call","endCall":"End call for all"},"virtualBackground":{"title":"Virtual Background","setBackground":"Set Background"},"misc":{"someone":"Someone","camera":"Camera","microphone":"Microphone","photo":"Photo","video":"Video","screen":"Screen","screenshot":"Screenshot","speaker":"Speaker","user":"User","open":"Open","from":"From","accept":"Accept","decline":"Decline","you":"You","cancel":"Cancel","confirm":"Confirm","remove":"Remove","proceed":"Proceed","audio":"Audio","download":"Download","add":"Add"},"greeting":{"mainTitle":"Welcome to SnapCall","sideTitle":"Hold tight, you\'re next!","sideDescription":"Please enter your name and adjust your camera and microphone","namePlaceholder":"Eg. Lucy or Peter","nameSubmit":"Join Conversation","footerTitle":"Powered by SnapCall","footerDescription":"Meet SnapCall, the easiest way to add real-time video to platform, product or service.","cameraDisabled":"Camera is Off","microphoneDisabled":"Microphone is Off","cameraEnabled":"Camera is On","microphoneEnabled":"Microphone is On","scheduleACall":"Schedule a call","requestACall":"Request a call","name":"Name","nameDescription":"This name will be displayed to all participants in the call.","setting":"Settings","askToJoin":"Ask to join","youWillJoinWhenSomeoneLetsYou":"You will join the call when someone from {{ companyName }} lets you in.","cantJoinCall":"You can\u2019t join this call","someoneDenied":"Someone in the call denied your request to join.","askingLetIn":"Asking to be let in...","takeFewMinute":"This may take a few minutes depending on the availability of the participants.","cantWait":"Can\'t wait?","whatYouCanDo":"Here\u2019s what you can do","leaveMessage":"Leave a message","cantWaitLeaveMessage":"Can\u2019t wait? You can leave a message and you will be contacted as soon as possible.","recordVideo":"Record video","recordVoice":"Record voice","canceledCallRequest":"The call request will be canceled and you will be redirected to the call scheduling page.","mediaDenied":"Microphone and camera access denied","clickOnLock":"Click on the <1></1> lock icon in your browser\'s bar."},"recorder":{"addMore":"Add more","addNewClip":"Add new clip","limit":"Video recording limited to 5 min.","replyAttached":"Your reply has been attached","elementRecordedAndAttached":"Your clip has been sent and attached to the thread.","goBackToTicket":"Go back to ticket","openThread":"Open thread","clipSubmissionTitle_one":"Your clip has been sent","clipSubmissionTitle_other":"Your clips have been sent","clipSubmissionDescription":"Thank you for using SnapCall.","submissionTitle":"Thank you for your submission!","submissionDescription":"Your photo/video has been successfully submitted. We will review it and get back to you shortly.","confirmRemovalTitle":"Confirm deletion","confirmRemovalDescription":"Are you sure you want to delete this photo/video? This action cannot be undone.","elementBeingProcessed":"Please wait while your {{ type }} is being processed...","waitVideo":"A video may take up to 15 seconds to be ready.","elementCaptureSuccess":"{{ type }} captured successfully","takeNewElement":"Capture a new {{ type }}","send":"Send","sendElements_one":"Send {{ type }}","sendElements_other":"Send {{ count }} elements","clipCount_one":"{{ count }} clip","clipCount_other":"{{ count }} clips","attachElements_one":"Attach {{ type }} to ticket","attachElements_other":"Attach {{ count }} elements","allowAccess":"Allow access","okay":"Okay","allowCamMicAccess":"Allow access to cam/mic","allowScreenShareAccess":"Allow access to screen sharing","permissionDeniedTitle":"Something went wrong!","permissionDeniedDescription":"Without access to the camera and microphone, you won\'t be able to capture photos or videos to share with the support team. Please grant access in your browser settings.","photoInstructionsTitle":"Ready to snap a photo?","videoInstructionsTitle":"Ready to record a video?","screenShareInstructionsTitle":"Ready to share your screen?","audioInstructionsTitle":"Ready to record a voice message?","instructions":{"selectScreenshare":"Tap Record my screen and select the screen or window you want to record.","speakDuringRecord":"You can speak while recording to add details.","stopScreenOnFinish":"Press the Stop button when finished. The video will be sent to us automatically.","allowAccessOnPrompt":"When prompted, <bold>allow access</bold> to camera and microphone.","multiplePhotos":"Take a <bold>photo or multiple</bold> for detail, then review.","reviewAndSendPhotos":"<bold>Validate your photos</bold>, and they will be sent to us automatically.","tapVideoButton":"<bold>Tap the record button</bold> to begin and feel free to provide commentary.","videoSpeech":"You can <bold>talk during</bold> the recording to provide additional information.","tapStopVideoButton":"<bold>Tap stop</bold> when you are done.","reviewAndSendVideos":"<bold>Review your videos</bold>, and they will be sent to us automatically.","screenShareInstruction":"Select the screen or window you wish to record.","privacyPolicy":"By proceeding, you agree to our <bold>Privacy Policy</bold>.","tapAudioButton":"<bold>Tap the record button</bold> to start recording your audio message.","speakClearly":"<bold>Speak clearly</bold> and say what you need to convey.","reviewAndSendAudios":"<bold>Review your audios</bold>, and they will be sent to us automatically."},"switchToMobileTitle":"Switch to your mobile device","switchToMobileDescription":"Experience greater convenience by using your phone to take photos and record videos.","useDesktopVersion":"Use the desktop version","scanQRCode":"Scan this QR code with a compatible device.","startScreenShareButton":"Record my screen","stopScreenShareButton":"Stop recording","screenTitle":"Ready to capture your screen?","loggedAs":"Logged as","logIn":"Log in","audioLevelNotification":{"shortVideo":{"title":"Short video.","description":"This video is too short to get context."},"noSound":{"title":"No sound detected.","description":"Make sure your microphone is activated."},"spokenWordsQuestion":{"title":"Spoken words.","description":"Does your video include enough spoken details?"},"spokenWordsWarning":{"title":"No spoken words.","description":"The clip includes barely any spoken words."}},"audioLevelToast":{"continueSpeaking":"Continue speaking for clearer context.","rememberSpeaking":"Remember to speak to provide context.","noSound":"No sound detected."},"chooseWhatYouWantToShare":"Choose what you want to share","startScreenRecording":"Start screen recording","noCameraAndMicrophoneAccess":"No camera & microphone access","noCameraAccess":"No camera access","noMicrophoneAccess":"No microphone access","chooseWhatYouWantToShareDescription":"Select the screen or tab you want to share and start recording.","noCameraAndMicrophoneAccessDescription":"No camera & microphone access Allow microphone and camera access in your browser.","noMicrophoneAccessDescription":"No microphone access Allow microphone access in your browser.","noCameraAccessDescription":"No camera access Allow camera access in your browser.","mediaCount_one":"{{ count }} media","mediaCount_other":"{{ count }} media","mediaSent_one":"Your media has been sent","mediaSent_other":"Your media has been sent","showQrCode":"Show QR code","upload":"Upload"}}');
|
|
369
|
+
$20859e1dad0fd138$exports = JSON.parse('{"header":{"free":"Free version"},"loader":{"connection":"Connecting..."},"common":{"new":"new"},"notifications":{"error":"Error","screensharingError":"An error occured when trying to toggle screensharing","microphoneError":"An error occured when trying to toggle the microphone","cameraError":"An error occured when trying to toggle the camera","cameraRotateError":"An error occured when trying to rotate the camera","noCamera":"No camera available","blockedMicrophonePopupTitle":"Camera and microphone are blocked","blockedMicrophonePopup":"SnapCall requires access to your camera and microphone. Click the camera blocked icon in your browser\'s address bar.","reload":"Reload","criticalError":"A critical error has occurred (error {{code}}).","agentJoinError":"An error occured while trying to join the room as an agent","close":"Close","connectedTo":"Connected to {{name}}","recording":"Recording in progress","invitationSentToFailed":"Sent to {{ name }} failed.","errorOccuredCode":"An error occured (error {{code}})."},"recordingPopup":{"recordingStartTitle":"Recording about to start.","recordingStartText":"This call will be recorded shortly. If you\u2019d rather not be recorded, you\u2019re welcome to leave the call at this time.","dismiss":"Dismiss"},"requestAccess":{"wantToJoin":"<bold>{{name}}</bold> wants to join!","deny":"Deny","admit":"Admit","defaultName":"An user"},"endView":{"goBack":"Go back to call","callEnded":"The call has ended","callNoLongerActive":"This call is no longer active. Thank you for participating.","callLeft":"You have left the call","ifMistakeRejoin":"If this was a mistake, you can rejoin using the button below.","full":"You can\'t join this call","fullDescription":"The room is full. Please try to join the call later.","invalidLink":"Invalid link","invalidOrExpired":"This link is invalid or expired.","openDashboard":"Open dashboard","howWasYourExperience":"How was your experience?","pleaseRateYourExperienceBelow":"Please rate your experience below","thankYouForYourFeedback":"Thank you for your feedback.","yourFeedbackHelpsUs":"Your feedback helps us improve. See you soon!","addAdditionalMedia":"Add additional media","allowsYouToShareMoreMedia":"This option allows you to share one or more media to add more context."},"menu":{"title":"Menu","new":"NEW","openNewTab":"Open new tab","quickConnect":"Quick Connect","pictureInPicture":"Picture-in-Picture","screenSharing":"Screen sharing","stopRecord":"Stop record","startRecord":"Record call"},"blockedFeature":{"titleConnected":"Upgrade to Pro","titleGuest":"Feature not available","descriptionConnected":"On a free plan, you can\'t use this feature. Upgrade your plan to enjoy all in-call features.","descriptionGuest":"You are participating in a call created with a free version of SnapCall. This feature is only available with a Pro version.","dismissGuest":"Okay","dismissConnected":"Upgrade to Pro"},"copyLink":{"title":"Copy link","description":"Copy link into clipboard","error":"An error occured when trying to copy to clipboard","copied":"Link copied to clipboard","copy":"Copy"},"quickConnect":{"title":"Quick Connect","scanTitle":"Scan QR Code","scan":"Scan this QR code with your phone camera to open the call."},"settings":{"title":"Settings","preferences":"Preferences","language":"Language","devices":"Devices","help":"Help","helpCenter":"Go to help center","selectYourMicrophone":"Select your preferred microphone","selectYourCamera":"Select your preferred camera","selectYourLanguage":"Select your preferred language"},"audioMenu":{"title":"Audio","blockedMicrophone":"Microphone is blocked.","microphonePermissions":"Please accept microphone sharing before accessing these options."},"videoMenu":{"title":"Video","lowDef":"Low definition (240p)","standardDef":"Standard definition (480p)","highDef":"High definition (720p)","blockedCamera":"Camera is blocked.","cameraPermissions":"Please accept camera sharing before accessing these options.","sendResolution":"Send Resolution (maximum)"},"shareLink":{"title":"Share link","title2":"Share a link","invalid":"Invalid link","sentToUsers":"Link sent to users","sentToUser":"Link sent to {{user}}","failed":"Failed to send link","poweredBy":"Powered by","invoice":"{{user}} sent you an invoice.","pay":"Pay"},"invitePeople":{"PublicLink":"Public link","invitePeople":"Invite people","joinTheCall":"Join the call","inviteRecordClip":"Invite to record clip","inviteRecordVideo":"Record a video","inviteRecordAudio":"Record an audio","inviteRecordScreen":"Record a screen","inviteRecordPhoto":"Take a photo","inviteCall":"Invite to join call","sharePublicLink":"Share public link","inviteByEmail":"Invite by email","inviteByEmailOrNumber":"Invite by email or sms","emailsOrNumberPlaceholder":"Eg. john@acme.com or +33612345678","addEmailToInvite":"Add an email to invite.","email":"Email","emailPlaceholder":"Eg. john@acme.com","invite":"Invite","linkToJoinCall":"Link to join the call","linkToRecordAClip":"Link to record a clip","invalidEmail":"Invalid email format.","invalidEmailOrNumber":"Invalid email or number format.","addEmails":"Add emails...","invitationSentTo_one":"Sent to {{ name }}","invitationSentTo_other":"Sent to {{ name }} and {{ otherEmailsCount }}+","error":"Failed to send, please try again later.","inviteCallDefaultMessage":"Hey! You\'re invited to join our video call. Click the link to connect instantly.","inviteClipDefaultMessage":"Hey! Please record your video now and provide us with more context to assist you better.","inviteClipVideoDefaultMessage":"Hey! Please record your video now and provide us with more context to assist you better.","inviteClipAudioDefaultMessage":"Hey! Please record an audio message now and provide us with more context to assist you better.","inviteClipScreenDefaultMessage":"Hey! Please record your screen now and provide us with more context to assist you better.","inviteClipPhotoDefaultMessage":"Hey! Please take a photo and provide us with more context to assist you better.","message":"Message"},"youtube":{"title":"Watch Together","url":"YOUTUBE URL","invalid":"Invalid YouTube URL","share":"Watch now"},"sharedHistory":{"shared":"Shared with you"},"snapshot":{"title":"Snapshot","shared":"Snapshot shared.","sentToUsers":"Snapshot sent to users.","sentToUser":"Snapshot sent to {{user}}","save":"Save photo","error":"An error occured when trying to send the snapshot","aSnapshotHasBeenShared":"A snapshot has been shared."},"gdpr":{"recordedWarning":"To improve the quality of our service, this call will be recorded."},"requestDevice":{"requestInput":"Request input devices","request":"{{user}} would like you to share your {{device}}","timedOut":"Your request has timed out.","declined":"Your request has been declined.","userDeclined":"{{user}} has declined your request.","askForDevice":"Ask for {{device}}","waitingForDevice":"Waiting for {{name}}\'s {{device}}","deviceActivated":"{{device}} activated","deviceActivationDeclined":"{{device}} activation declined","userWouldLikeYouToActivateYourDevice":"{{name}} would like you to activate your {{device}}."},"leave":{"title":"Leave","leaveCall":"Leave call","endCall":"End call for all"},"virtualBackground":{"title":"Virtual Background","setBackground":"Set Background"},"misc":{"someone":"Someone","camera":"Camera","microphone":"Microphone","photo":"Photo","video":"Video","screen":"Screen","screenshot":"Screenshot","speaker":"Speaker","user":"User","open":"Open","from":"From","accept":"Accept","decline":"Decline","you":"You","cancel":"Cancel","confirm":"Confirm","remove":"Remove","proceed":"Proceed","audio":"Audio","download":"Download","add":"Add"},"greeting":{"mainTitle":"Welcome to SnapCall","sideTitle":"Hold tight, you\'re next!","sideDescription":"Please enter your name and adjust your camera and microphone","namePlaceholder":"Eg. Lucy or Peter","nameSubmit":"Join Conversation","footerTitle":"Powered by SnapCall","footerDescription":"Meet SnapCall, the easiest way to add real-time video to platform, product or service.","cameraDisabled":"Camera is Off","microphoneDisabled":"Microphone is Off","cameraEnabled":"Camera is On","microphoneEnabled":"Microphone is On","scheduleACall":"Schedule a call","requestACall":"Request a call","name":"Name","nameDescription":"This name will be displayed to all participants in the call.","setting":"Settings","askToJoin":"Ask to join","youWillJoinWhenSomeoneLetsYou":"You will join the call when someone from {{ companyName }} lets you in.","cantJoinCall":"You can\u2019t join this call","someoneDenied":"Someone in the call denied your request to join.","askingLetIn":"Asking to be let in...","takeFewMinute":"This may take a few minutes depending on the availability of the participants.","cantWait":"Can\'t wait?","whatYouCanDo":"Here\u2019s what you can do","leaveMessage":"Leave a message","cantWaitLeaveMessage":"Can\u2019t wait? You can leave a message and you will be contacted as soon as possible.","recordVideo":"Record video","recordVoice":"Record voice","canceledCallRequest":"The call request will be canceled and you will be redirected to the call scheduling page.","mediaDenied":"Microphone and camera access denied","clickOnLock":"Click on the <1></1> lock icon in your browser\'s bar."},"networkIssue":{"title":"Network issue","description":"The clip information may be damaged."},"recorder":{"addMore":"Add more","addNewClip":"Add new clip","limit":"Video recording limited to 5 min.","replyAttached":"Your reply has been attached","elementRecordedAndAttached":"Your clip has been sent and attached to the thread.","goBackToTicket":"Go back to ticket","openThread":"Open thread","clipSubmissionTitle_one":"Your clip has been sent","clipSubmissionTitle_other":"Your clips have been sent","clipSubmissionDescription":"Thank you for using SnapCall.","submissionTitle":"Thank you for your submission!","submissionDescription":"Your photo/video has been successfully submitted. We will review it and get back to you shortly.","confirmRemovalTitle":"Confirm deletion","confirmRemovalDescription":"Are you sure you want to delete this photo/video? This action cannot be undone.","elementBeingProcessed":"Please wait while your {{ type }} is being processed...","waitVideo":"A video may take up to 15 seconds to be ready.","elementCaptureSuccess":"{{ type }} captured successfully","takeNewElement":"Capture a new {{ type }}","send":"Send","sendElements_one":"Send {{ type }}","sendElements_other":"Send {{ count }} elements","clipCount_one":"{{ count }} clip","clipCount_other":"{{ count }} clips","attachElements_one":"Attach {{ type }} to ticket","attachElements_other":"Attach {{ count }} elements","allowAccess":"Allow access","okay":"Okay","allowCamMicAccess":"Allow access to cam/mic","allowScreenShareAccess":"Allow access to screen sharing","permissionDeniedTitle":"Something went wrong!","permissionDeniedDescription":"Without access to the camera and microphone, you won\'t be able to capture photos or videos to share with the support team. Please grant access in your browser settings.","photoInstructionsTitle":"Ready to snap a photo?","videoInstructionsTitle":"Ready to record a video?","screenShareInstructionsTitle":"Ready to share your screen?","audioInstructionsTitle":"Ready to record a voice message?","instructions":{"selectScreenshare":"Tap Record my screen and select the screen or window you want to record.","speakDuringRecord":"You can speak while recording to add details.","stopScreenOnFinish":"Press the Stop button when finished. The video will be sent to us automatically.","allowAccessOnPrompt":"When prompted, <bold>allow access</bold> to camera and microphone.","multiplePhotos":"Take a <bold>photo or multiple</bold> for detail, then review.","reviewAndSendPhotos":"<bold>Validate your photos</bold>, and they will be sent to us automatically.","tapVideoButton":"<bold>Tap the record button</bold> to begin and feel free to provide commentary.","videoSpeech":"You can <bold>talk during</bold> the recording to provide additional information.","tapStopVideoButton":"<bold>Tap stop</bold> when you are done.","reviewAndSendVideos":"<bold>Review your videos</bold>, and they will be sent to us automatically.","screenShareInstruction":"Select the screen or window you wish to record.","privacyPolicy":"By proceeding, you agree to our <bold>Privacy Policy</bold>.","tapAudioButton":"<bold>Tap the record button</bold> to start recording your audio message.","speakClearly":"<bold>Speak clearly</bold> and say what you need to convey.","reviewAndSendAudios":"<bold>Review your audios</bold>, and they will be sent to us automatically."},"switchToMobileTitle":"Switch to your mobile device","switchToMobileDescription":"Experience greater convenience by using your phone to take photos and record videos.","useDesktopVersion":"Use the desktop version","scanQRCode":"Scan this QR code with a compatible device.","startScreenShareButton":"Record my screen","stopScreenShareButton":"Stop recording","screenTitle":"Ready to capture your screen?","loggedAs":"Logged as","logIn":"Log in","audioLevelNotification":{"shortVideo":{"title":"Short video.","description":"This video is too short to get context."},"noSound":{"title":"No sound detected.","description":"Make sure your microphone is activated."},"spokenWordsQuestion":{"title":"Spoken words.","description":"Does your video include enough spoken details?"},"spokenWordsWarning":{"title":"No spoken words.","description":"The clip includes barely any spoken words."}},"audioLevelToast":{"continueSpeaking":"Continue speaking for clearer context.","rememberSpeaking":"Remember to speak to provide context.","noSound":"No sound detected."},"chooseWhatYouWantToShare":"Choose what you want to share","startScreenRecording":"Start screen recording","noCameraAndMicrophoneAccess":"No camera & microphone access","noCameraAccess":"No camera access","noMicrophoneAccess":"No microphone access","chooseWhatYouWantToShareDescription":"Select the screen or tab you want to share and start recording.","noCameraAndMicrophoneAccessDescription":"No camera & microphone access Allow microphone and camera access in your browser.","noMicrophoneAccessDescription":"No microphone access Allow microphone access in your browser.","noCameraAccessDescription":"No camera access Allow camera access in your browser.","mediaCount_one":"{{ count }} media","mediaCount_other":"{{ count }} media","mediaSent_one":"Your media has been sent","mediaSent_other":"Your media has been sent","showQrCode":"Show QR code","upload":"Upload","startByClickingOnTheButton":"Start by clicking on the round button below! \uD83D\uDC47","feelFreeToTalkGiveMoreContext":"\uD83D\uDDE3\uFE0F Feel free to talk to give me more context.","yourMedia":"Your media","thanksForYourMedia":"Thanks for your media!","videoBotThinking":"Thinking...","videoBotError":"Sorry, an error has occured.","mySuggestion":"My suggestion","recordNewMedia":"Record new media"}}');
|
|
368
370
|
|
|
369
371
|
|
|
370
372
|
var $a8febdc80ac5353b$exports = {};
|
|
371
|
-
$a8febdc80ac5353b$exports = JSON.parse('{"audioMenu":{"blockedMicrophone":"Microphone is blocked.","microphonePermissions":"Please accept microphone sharing before accessing these options.","title":"Audio"},"blockedFeature":{"descriptionConnected":"On a free plan, you can\'t use this feature. Upgrade your plan to enjoy all in-call features.","descriptionGuest":"You are participating in a call created with a free version of SnapCall. This feature is only available with a Pro version.","dismissConnected":"Upgrade to Pro","dismissGuest":"Okay","titleConnected":"Upgrade to Pro","titleGuest":"Feature not available"},"common":{"new":"new"},"copyLink":{"copied":"Link copied to clipboard","copy":"Copy","description":"Copy link into clipboard","error":"An error occured when trying to copy to clipboard","title":"Copy link"},"endView":{"addAdditionalMedia":"Add additional media","allowsYouToShareMoreMedia":"This option allows you to share one or more media to add more context.","callEnded":"The call is now ended","callIsOver":"The call is over or deleted","callLeft":"You left the call","callNoLongerActive":"This call is no longer active. Thank you for participating.","full":"You can\'t join this call","fullDescription":"The room is full. Please try to join the call later.","goBack":"Go back to call","howWasYourExperience":"How was your experience?","ifMistakeRejoin":"If this was a mistake, you can rejoin using the button below.","invalidLink":"Invalid link","invalidOrExpired":"This link is invalid or expired.","openDashboard":"Open dashboard","pleaseRateYourExperienceBelow":"Please rate your experience below","thankYouForYourFeedback":"Thank you for your feedback.","tooLate":"You arrived too late","yourFeedbackHelpsUs":"Your feedback helps us improve. See you soon!"},"gdpr":{"recordedWarning":"To improve the quality of our service, this call will be recorded."},"greeting":{"askToJoin":"Ask to join","askingLetIn":"Asking to be let in...","cameraDisabled":"Camera is Off","cameraEnabled":"Camera is On","canceledCallRequest":"The call request will be canceled and you will be redirected to the call scheduling page.","cantJoinCall":"You can\u2019t join this call","cantWait":"Can\'t wait?","cantWaitLeaveMessage":"Can\u2019t wait? You can leave a message and you will be contacted as soon as possible.","clickOnLock":"Click on the <1></1> lock icon in your browser\'s bar.","footerDescription":"Meet SnapCall, the easiest way to add real-time video to platform, product or service.","footerTitle":"Powered by SnapCall","leaveMessage":"Leave a message","mainTitle":"Welcome to SnapCall","mediaDenied":"Microphone and camera access denied","microphoneDisabled":"Microphone is Off","microphoneEnabled":"Microphone is On","name":"Name","nameDescription":"This name will be displayed to all participants in the call.","namePlaceholder":"Eg. Lucy or Peter","nameSubmit":"Join Conversation","recordVideo":"Record video","recordVoice":"Record voice","requestACall":"Request a call","scheduleACall":"Schedule a call","setting":"Settings","sideDescription":"Please enter your name and adjust your camera and microphone","sideTitle":"Hold tight, you\'re next!","someoneDenied":"Someone in the call denied your request to join.","takeFewMinute":"This may take a few minutes depending on the availability of the participants.","whatYouCanDo":"Here\u2019s what you can do","youWillJoinWhenSomeoneLetsYou":"You will join the call when someone from {{ companyName }} lets you in."},"header":{"free":"Free version"},"invitePeople":{"PublicLink":"Public link","addEmailToInvite":"Add an email to invite.","addEmails":"Add emails...","copyCallLinkDescription":"Copy this link and send it to anyone you wish to invite to join the call.","copyClipLinkDescription":"Copy this link and send it to anyone you wish to invite to record a clip.","email":"Email","emailPlaceholder":"Eg. john@acme.com","emailsOrNumberPlaceholder":"Eg. john@acme.com or +33612345678","error":"Failed to send, please try again later.","invalidEmail":"Invalid email format.","invalidEmailOrNumber":"Invalid email or number format.","invitationSentTo_one":"Sent to {{ name }}","invitationSentTo_other":"Sent to {{ name }} and {{ otherEmailsCount }}+","invite":"Invite","inviteByEmail":"Invite by email","inviteByEmailOrNumber":"Invite by email or sms","inviteCall":"Invite to join call","inviteCallDefaultMessage":"Hey! You\'re invited to join our video call. Click the link to connect instantly.","inviteClipAudioDefaultMessage":"Hey! Please record an audio message now and provide us with more context to assist you better.","inviteClipDefaultMessage":"Hey! Please record your video clip now and provide us with more context to assist you better.","inviteClipPhotoDefaultMessage":"Hey! Please take a photo and provide us with more context to assist you better.","inviteClipScreenDefaultMessage":"Hey! Please record your screen now and provide us with more context to assist you better.","inviteClipVideoDefaultMessage":"Hey! Please record your video now and provide us with more context to assist you better.","invitePeople":"Invite people","inviteRecordAudio":"Record an audio","inviteRecordClip":"Invite to record clip","inviteRecordPhoto":"Take a photo","inviteRecordScreen":"Record a screen","inviteRecordVideo":"Record a video","joinTheCall":"Join the call","linkToJoinCall":"Link to join the call","linkToRecordAClip":"Link to record a clip","message":"Message","sharePublicLink":"Share public link"},"leave":{"endCall":"End call for all","leaveCall":"Leave call","title":"Leave"},"loader":{"connection":"Connecting..."},"menu":{"new":"NEW","openNewTab":"Open new tab","pictureInPicture":"Picture-in-Picture","quickConnect":"Quick Connect","screenSharing":"Screen sharing","startRecord":"Record call","stopRecord":"Stop record","title":"Menu"},"misc":{"accept":"Accept","add":"Add","audio":"Audio","camera":"Camera","cancel":"Cancel","confirm":"Confirm","decline":"Decline","download":"Download","from":"From","microphone":"Microphone","open":"Open","photo":"Photo","proceed":"Proceed","remove":"Remove","screen":"Screen","screenshot":"Screenshot","someone":"Someone","speaker":"Speaker","user":"User","video":"Video","you":"You"},"notifications":{"agentJoinError":"An error occured while trying to join the room as an agent","blockedMicrophonePopup":"SnapCall requires access to your camera and microphone. Click the camera blocked icon in your browser\'s address bar.","blockedMicrophonePopupTitle":"Camera and microphone are blocked","cameraError":"An error occured when trying to toggle the camera","cameraRotateError":"An error occured when trying to rotate the camera","close":"Close","connectedTo":"Connected to {{name}}","criticalError":"A critical error has occurred (error {{code}}).","error":"Error","errorOccuredCode":"An error occured (error {{code}}).","invitationSentToFailed":"Sent to {{ name }} failed.","microphoneError":"An error occured when trying to toggle the microphone","noCamera":"No camera available","recording":"Recording in progress","reload":"Reload","screensharingError":"An error occured when trying to toggle screensharing","uploadError":"An error occured during the upload, please try again later."},"quickConnect":{"scan":"Scan this QR code with your phone camera to open the call.","scanTitle":"Scan QR Code","title":"Quick Connect"},"recorder":{"addMore":"Add more","addNewClip":"Add new clip","allowAccess":"Allow access","allowCamMicAccess":"Allow access to cam/mic","allowScreenShareAccess":"Allow access to screen sharing","attachElements_one":"Attach {{ type }} to ticket","attachElements_other":"Attach {{ count }} elements","audioInstructionsTitle":"Ready to record a voice message?","audioLevelNotification":{"noSound":{"description":"Make sure your microphone is activated.","title":"No sound detected."},"shortVideo":{"description":"This video is too short to get context.","title":"Short video."},"spokenWordsQuestion":{"description":"Does your video include enough spoken details?","title":"Spoken words."},"spokenWordsWarning":{"description":"The clip includes barely any spoken words.","title":"No spoken words."}},"audioLevelToast":{"continueSpeaking":"Continue speaking for clearer context.","noSound":"No sound detected.","rememberSpeaking":"Remember to speak to provide context."},"chooseWhatYouWantToShare":"Choose what you want to share","chooseWhatYouWantToShareDescription":"Select the screen or tab you want to share and start recording.","clipCount_one":"{{ count }} clip","clipCount_other":"{{ count }} clips","clipSubmissionDescription":"Thank you for using SnapCall.","clipSubmissionTitle_one":"Your clip has been sent","clipSubmissionTitle_other":"Your clips have been sent","confirmRemovalDescription":"Are you sure you want to delete this photo/video? This action cannot be undone.","confirmRemovalTitle":"Confirm deletion","elementBeingProcessed":"Please wait while your {{ type }} is being processed...","elementCaptureSuccess":"{{ type }} captured successfully","elementRecordedAndAttached":"Your clip has been sent and attached to the thread.","goBackToTicket":"Go back to ticket","instructions":{"allowAccessOnPrompt":"When prompted, <bold>allow access</bold> to camera and microphone.","multiplePhotos":"Take a <bold>photo or multiple</bold> for detail, then review.","privacyPolicy":"By proceeding, you agree to our <bold>Privacy Policy</bold>.","reviewAndSendAudios":"<bold>Review your audios</bold>, and they will be sent to us automatically.","reviewAndSendPhotos":"<bold>Validate your photos</bold>, and they will be sent to us automatically.","reviewAndSendVideos":"<bold>Review your videos</bold>, and they will be sent to us automatically.","screenShareInstruction":"Select the screen or window you wish to record.","selectScreenshare":"Tap Record my screen and select the screen or window you want to record.","speakClearly":"<bold>Speak clearly</bold> and say what you need to convey.","speakDuringRecord":"You can speak while recording to add details.","stopScreenOnFinish":"Press the Stop button when finished. The video will be sent to us automatically.","tapAudioButton":"<bold>Tap the record button</bold> to start recording your audio message.","tapStopVideoButton":"<bold>Tap stop</bold> when you are done.","tapVideoButton":"<bold>Tap the record button</bold> to begin and feel free to provide commentary.","videoSpeech":"You can <bold>talk during</bold> the recording to provide additional information."},"limit":"Video recording limited to 5 min.","logIn":"Log in","loggedAs":"Logged as","mediaCount_one":"{{ count }} media","mediaCount_other":"{{ count }} media","mediaSent_one":"Your media has been sent","mediaSent_other":"Your media has been sent","noCameraAccess":"No camera access","noCameraAccessDescription":"No camera access Allow camera access in your browser.","noCameraAndMicrophoneAccess":"No camera & microphone access","noCameraAndMicrophoneAccessDescription":"No camera & microphone access Allow microphone and camera access in your browser.","noMicrophoneAccess":"No microphone access","noMicrophoneAccessDescription":"No microphone access Allow microphone access in your browser.","okay":"Okay","openThread":"Open thread","permissionDeniedDescription":"Without access to the camera and microphone, you won\'t be able to capture photos or videos to share with the support team. Please grant access in your browser settings.","permissionDeniedTitle":"Something went wrong!","photoInstructionsTitle":"Ready to snap a photo?","replyAttached":"Your reply has been attached","scanQRCode":"Scan this QR code with a compatible device.","screenShareInstructionsTitle":"Ready to share your screen?","screenTitle":"Ready to capture your screen?","send":"Send","sendElements_one":"Send {{ type }}","sendElements_other":"Send {{ count }} elements","showQrCode":"Show QR code","startScreenRecording":"Start screen recording","startScreenShareButton":"Record my screen","stopScreenShareButton":"Stop recording","submissionDescription":"Your photo/video has been successfully submitted. We will review it and get back to you shortly.","submissionTitle":"Thank you for your submission!","switchToMobileDescription":"Experience greater convenience by using your phone to take photos and record videos.","switchToMobileTitle":"Switch to your mobile device","takeNewElement":"Capture a new {{ type }}","upload":"Upload","useDesktopVersion":"Use the desktop version","videoInstructionsTitle":"Ready to record a video?","waitVideo":"A video may take up to 15 seconds to be ready."},"recordingPopup":{"dismiss":"Dismiss","recordingStartText":"This call will be recorded shortly. If you\u2019d rather not be recorded, you\u2019re welcome to leave the call at this time.","recordingStartTitle":"Recording about to start."},"requestAccess":{"admit":"Admit","defaultName":"An user","deny":"Deny","wantToJoin":"<bold>{{name}}</bold> wants to join!"},"requestDevice":{"askForDevice":"Ask for {{device}}","declined":"Your request has been declined.","deviceActivated":"{{device}} activated","deviceActivationDeclined":"{{device}} activation declined","request":"{{user}} would like you to share your {{device}}","requestInput":"Request input devices","timedOut":"Your request has timed out.","userDeclined":"{{user}} has declined your request.","userWouldLikeYouToActivateYourDevice":"{{name}} would like you to activate your {{device}}.","waitingForDevice":"Waiting for {{name}}\'s {{device}}"},"settings":{"devices":"Devices","help":"Help","helpCenter":"Go to help center","language":"Language","preferences":"Preferences","selectYourCamera":"Select your preferred camera","selectYourLanguage":"Select your preferred language","selectYourMicrophone":"Select your preferred microphone","title":"Settings"},"shareLink":{"failed":"Failed to send link","invalid":"Invalid link","invoice":"{{user}} sent you an invoice.","pay":"Pay","poweredBy":"Powered by","sentToUser":"Link sent to {{user}}","sentToUsers":"Link sent to users","title":"Share link","title2":"Share a link"},"sharedHistory":{"shared":"Shared with you"},"snapshot":{"aSnapshotHasBeenShared":"A snapshot has been shared.","error":"An error occured when trying to send the snapshot","save":"Save photo","sentToUser":"Snapshot sent to {{user}}","sentToUsers":"Snapshot sent to users.","shared":"Snapshot shared.","title":"Snapshot"},"videoMenu":{"blockedCamera":"Camera is blocked.","cameraPermissions":"Please accept camera sharing before accessing these options.","highDef":"High definition (720p)","lowDef":"Low definition (240p)","sendResolution":"Send Resolution (maximum)","standardDef":"Standard definition (480p)","title":"Video"},"virtualBackground":{"setBackground":"Set Background","title":"Virtual Background"},"youtube":{"invalid":"Invalid YouTube URL","share":"Watch now","title":"Watch Together","url":"YOUTUBE URL"}}');
|
|
373
|
+
$a8febdc80ac5353b$exports = JSON.parse('{"audioMenu":{"blockedMicrophone":"Microphone is blocked.","microphonePermissions":"Please accept microphone sharing before accessing these options.","title":"Audio"},"blockedFeature":{"descriptionConnected":"On a free plan, you can\'t use this feature. Upgrade your plan to enjoy all in-call features.","descriptionGuest":"You are participating in a call created with a free version of SnapCall. This feature is only available with a Pro version.","dismissConnected":"Upgrade to Pro","dismissGuest":"Okay","titleConnected":"Upgrade to Pro","titleGuest":"Feature not available"},"common":{"new":"new"},"copyLink":{"copied":"Link copied to clipboard","copy":"Copy","description":"Copy link into clipboard","error":"An error occured when trying to copy to clipboard","title":"Copy link"},"endView":{"addAdditionalMedia":"Add additional media","allowsYouToShareMoreMedia":"This option allows you to share one or more media to add more context.","callEnded":"The call is now ended","callIsOver":"The call is over or deleted","callLeft":"You left the call","callNoLongerActive":"This call is no longer active. Thank you for participating.","full":"You can\'t join this call","fullDescription":"The room is full. Please try to join the call later.","goBack":"Go back to call","howWasYourExperience":"How was your experience?","ifMistakeRejoin":"If this was a mistake, you can rejoin using the button below.","invalidLink":"Invalid link","invalidOrExpired":"This link is invalid or expired.","openDashboard":"Open dashboard","pleaseRateYourExperienceBelow":"Please rate your experience below","thankYouForYourFeedback":"Thank you for your feedback.","tooLate":"You arrived too late","yourFeedbackHelpsUs":"Your feedback helps us improve. See you soon!"},"gdpr":{"recordedWarning":"To improve the quality of our service, this call will be recorded."},"greeting":{"askToJoin":"Ask to join","askingLetIn":"Asking to be let in...","cameraDisabled":"Camera is Off","cameraEnabled":"Camera is On","canceledCallRequest":"The call request will be canceled and you will be redirected to the call scheduling page.","cantJoinCall":"You can\u2019t join this call","cantWait":"Can\'t wait?","cantWaitLeaveMessage":"Can\u2019t wait? You can leave a message and you will be contacted as soon as possible.","clickOnLock":"Click on the <1></1> lock icon in your browser\'s bar.","footerDescription":"Meet SnapCall, the easiest way to add real-time video to platform, product or service.","footerTitle":"Powered by SnapCall","leaveMessage":"Leave a message","mainTitle":"Welcome to SnapCall","mediaDenied":"Microphone and camera access denied","microphoneDisabled":"Microphone is Off","microphoneEnabled":"Microphone is On","name":"Name","nameDescription":"This name will be displayed to all participants in the call.","namePlaceholder":"Eg. Lucy or Peter","nameSubmit":"Join Conversation","recordVideo":"Record video","recordVoice":"Record voice","requestACall":"Request a call","scheduleACall":"Schedule a call","setting":"Settings","sideDescription":"Please enter your name and adjust your camera and microphone","sideTitle":"Hold tight, you\'re next!","someoneDenied":"Someone in the call denied your request to join.","takeFewMinute":"This may take a few minutes depending on the availability of the participants.","whatYouCanDo":"Here\u2019s what you can do","youWillJoinWhenSomeoneLetsYou":"You will join the call when someone from {{ companyName }} lets you in."},"header":{"free":"Free version"},"invitePeople":{"PublicLink":"Public link","addEmailToInvite":"Add an email to invite.","addEmails":"Add emails...","copyCallLinkDescription":"Copy this link and send it to anyone you wish to invite to join the call.","copyClipLinkDescription":"Copy this link and send it to anyone you wish to invite to record a clip.","email":"Email","emailPlaceholder":"Eg. john@acme.com","emailsOrNumberPlaceholder":"Eg. john@acme.com or +33612345678","error":"Failed to send, please try again later.","invalidEmail":"Invalid email format.","invalidEmailOrNumber":"Invalid email or number format.","invitationSentTo_one":"Sent to {{ name }}","invitationSentTo_other":"Sent to {{ name }} and {{ otherEmailsCount }}+","invite":"Invite","inviteByEmail":"Invite by email","inviteByEmailOrNumber":"Invite by email or sms","inviteCall":"Invite to join call","inviteCallDefaultMessage":"Hey! You\'re invited to join our video call. Click the link to connect instantly.","inviteClipAudioDefaultMessage":"Hey! Please record an audio message now and provide us with more context to assist you better.","inviteClipDefaultMessage":"Hey! Please record your video clip now and provide us with more context to assist you better.","inviteClipPhotoDefaultMessage":"Hey! Please take a photo and provide us with more context to assist you better.","inviteClipScreenDefaultMessage":"Hey! Please record your screen now and provide us with more context to assist you better.","inviteClipVideoDefaultMessage":"Hey! Please record your video now and provide us with more context to assist you better.","invitePeople":"Invite people","inviteRecordAudio":"Record an audio","inviteRecordClip":"Invite to record clip","inviteRecordPhoto":"Take a photo","inviteRecordScreen":"Record a screen","inviteRecordVideo":"Record a video","joinTheCall":"Join the call","linkToJoinCall":"Link to join the call","linkToRecordAClip":"Link to record a clip","message":"Message","sharePublicLink":"Share public link"},"leave":{"endCall":"End call for all","leaveCall":"Leave call","title":"Leave"},"loader":{"connection":"Connecting..."},"menu":{"new":"NEW","openNewTab":"Open new tab","pictureInPicture":"Picture-in-Picture","quickConnect":"Quick Connect","screenSharing":"Screen sharing","startRecord":"Record call","stopRecord":"Stop record","title":"Menu"},"misc":{"accept":"Accept","add":"Add","audio":"Audio","camera":"Camera","cancel":"Cancel","confirm":"Confirm","decline":"Decline","download":"Download","from":"From","microphone":"Microphone","open":"Open","photo":"Photo","proceed":"Proceed","remove":"Remove","screen":"Screen","screenshot":"Screenshot","someone":"Someone","speaker":"Speaker","user":"User","video":"Video","you":"You"},"networkIssue":{"description":"The clip information may be damaged.","title":"Network issue"},"notifications":{"agentJoinError":"An error occured while trying to join the room as an agent","blockedMicrophonePopup":"SnapCall requires access to your camera and microphone. Click the camera blocked icon in your browser\'s address bar.","blockedMicrophonePopupTitle":"Camera and microphone are blocked","cameraError":"An error occured when trying to toggle the camera","cameraRotateError":"An error occured when trying to rotate the camera","close":"Close","connectedTo":"Connected to {{name}}","criticalError":"A critical error has occurred (error {{code}}).","error":"Error","errorOccuredCode":"An error occured (error {{code}}).","invitationSentToFailed":"Sent to {{ name }} failed.","microphoneError":"An error occured when trying to toggle the microphone","noCamera":"No camera available","recording":"Recording in progress","reload":"Reload","screensharingError":"An error occured when trying to toggle screensharing","uploadError":"An error occured during the upload, please try again later."},"quickConnect":{"scan":"Scan this QR code with your phone camera to open the call.","scanTitle":"Scan QR Code","title":"Quick Connect"},"recorder":{"addMore":"Add more","addNewClip":"Add new clip","allowAccess":"Allow access","allowCamMicAccess":"Allow access to cam/mic","allowScreenShareAccess":"Allow access to screen sharing","attachElements_one":"Attach {{ type }} to ticket","attachElements_other":"Attach {{ count }} elements","audioInstructionsTitle":"Ready to record a voice message?","audioLevelNotification":{"noSound":{"description":"Make sure your microphone is activated.","title":"No sound detected."},"shortVideo":{"description":"This video is too short to get context.","title":"Short video."},"spokenWordsQuestion":{"description":"Does your video include enough spoken details?","title":"Spoken words."},"spokenWordsWarning":{"description":"The clip includes barely any spoken words.","title":"No spoken words."}},"audioLevelToast":{"continueSpeaking":"Continue speaking for clearer context.","noSound":"No sound detected.","rememberSpeaking":"Remember to speak to provide context."},"chooseWhatYouWantToShare":"Choose what you want to share","chooseWhatYouWantToShareDescription":"Select the screen or tab you want to share and start recording.","clipCount_one":"{{ count }} clip","clipCount_other":"{{ count }} clips","clipSubmissionDescription":"Thank you for using SnapCall.","clipSubmissionTitle_one":"Your clip has been sent","clipSubmissionTitle_other":"Your clips have been sent","confirmRemovalDescription":"Are you sure you want to delete this photo/video? This action cannot be undone.","confirmRemovalTitle":"Confirm deletion","elementBeingProcessed":"Please wait while your {{ type }} is being processed...","elementCaptureSuccess":"{{ type }} captured successfully","elementRecordedAndAttached":"Your clip has been sent and attached to the thread.","feelFreeToTalkGiveMoreContext":"\uD83D\uDDE3\uFE0F Feel free to talk to give me more context.","goBackToTicket":"Go back to ticket","instructions":{"allowAccessOnPrompt":"When prompted, <bold>allow access</bold> to camera and microphone.","multiplePhotos":"Take a <bold>photo or multiple</bold> for detail, then review.","privacyPolicy":"By proceeding, you agree to our <bold>Privacy Policy</bold>.","reviewAndSendAudios":"<bold>Review your audios</bold>, and they will be sent to us automatically.","reviewAndSendPhotos":"<bold>Validate your photos</bold>, and they will be sent to us automatically.","reviewAndSendVideos":"<bold>Review your videos</bold>, and they will be sent to us automatically.","screenShareInstruction":"Select the screen or window you wish to record.","selectScreenshare":"Tap Record my screen and select the screen or window you want to record.","speakClearly":"<bold>Speak clearly</bold> and say what you need to convey.","speakDuringRecord":"You can speak while recording to add details.","stopScreenOnFinish":"Press the Stop button when finished. The video will be sent to us automatically.","tapAudioButton":"<bold>Tap the record button</bold> to start recording your audio message.","tapStopVideoButton":"<bold>Tap stop</bold> when you are done.","tapVideoButton":"<bold>Tap the record button</bold> to begin and feel free to provide commentary.","videoSpeech":"You can <bold>talk during</bold> the recording to provide additional information."},"limit":"Video recording limited to 5 min.","logIn":"Log in","loggedAs":"Logged as","mediaCount_one":"{{ count }} media","mediaCount_other":"{{ count }} media","mediaSent_one":"Your media has been sent","mediaSent_other":"Your media has been sent","mySuggestion":"My suggestion","noCameraAccess":"No camera access","noCameraAccessDescription":"No camera access Allow camera access in your browser.","noCameraAndMicrophoneAccess":"No camera & microphone access","noCameraAndMicrophoneAccessDescription":"No camera & microphone access Allow microphone and camera access in your browser.","noMicrophoneAccess":"No microphone access","noMicrophoneAccessDescription":"No microphone access Allow microphone access in your browser.","okay":"Okay","openThread":"Open thread","permissionDeniedDescription":"Without access to the camera and microphone, you won\'t be able to capture photos or videos to share with the support team. Please grant access in your browser settings.","permissionDeniedTitle":"Something went wrong!","photoInstructionsTitle":"Ready to snap a photo?","recordNewMedia":"Record new media","replyAttached":"Your reply has been attached","scanQRCode":"Scan this QR code with a compatible device.","screenShareInstructionsTitle":"Ready to share your screen?","screenTitle":"Ready to capture your screen?","send":"Send","sendElements_one":"Send {{ type }}","sendElements_other":"Send {{ count }} elements","showQrCode":"Show QR code","startByClickingOnTheButton":"Start by clicking on the round button below! \uD83D\uDC47","startScreenRecording":"Start screen recording","startScreenShareButton":"Record my screen","stopScreenShareButton":"Stop recording","submissionDescription":"Your photo/video has been successfully submitted. We will review it and get back to you shortly.","submissionTitle":"Thank you for your submission!","switchToMobileDescription":"Experience greater convenience by using your phone to take photos and record videos.","switchToMobileTitle":"Switch to your mobile device","takeNewElement":"Capture a new {{ type }}","thanksForYourMedia":"Thanks for your media!","upload":"Upload","useDesktopVersion":"Use the desktop version","videoBotError":"Sorry, an error has occured.","videoBotThinking":"Thinking...","videoInstructionsTitle":"Ready to record a video?","waitVideo":"A video may take up to 15 seconds to be ready.","yourMedia":"Your media"},"recordingPopup":{"dismiss":"Dismiss","recordingStartText":"This call will be recorded shortly. If you\u2019d rather not be recorded, you\u2019re welcome to leave the call at this time.","recordingStartTitle":"Recording about to start."},"requestAccess":{"admit":"Admit","defaultName":"An user","deny":"Deny","wantToJoin":"<bold>{{name}}</bold> wants to join!"},"requestDevice":{"askForDevice":"Ask for {{device}}","declined":"Your request has been declined.","deviceActivated":"{{device}} activated","deviceActivationDeclined":"{{device}} activation declined","request":"{{user}} would like you to share your {{device}}","requestInput":"Request input devices","timedOut":"Your request has timed out.","userDeclined":"{{user}} has declined your request.","userWouldLikeYouToActivateYourDevice":"{{name}} would like you to activate your {{device}}.","waitingForDevice":"Waiting for {{name}}\'s {{device}}"},"settings":{"devices":"Devices","help":"Help","helpCenter":"Go to help center","language":"Language","preferences":"Preferences","selectYourCamera":"Select your preferred camera","selectYourLanguage":"Select your preferred language","selectYourMicrophone":"Select your preferred microphone","title":"Settings"},"shareLink":{"failed":"Failed to send link","invalid":"Invalid link","invoice":"{{user}} sent you an invoice.","pay":"Pay","poweredBy":"Powered by","sentToUser":"Link sent to {{user}}","sentToUsers":"Link sent to users","title":"Share link","title2":"Share a link"},"sharedHistory":{"shared":"Shared with you"},"snapshot":{"aSnapshotHasBeenShared":"A snapshot has been shared.","error":"An error occured when trying to send the snapshot","save":"Save photo","sentToUser":"Snapshot sent to {{user}}","sentToUsers":"Snapshot sent to users.","shared":"Snapshot shared.","title":"Snapshot"},"videoMenu":{"blockedCamera":"Camera is blocked.","cameraPermissions":"Please accept camera sharing before accessing these options.","highDef":"High definition (720p)","lowDef":"Low definition (240p)","sendResolution":"Send Resolution (maximum)","standardDef":"Standard definition (480p)","title":"Video"},"virtualBackground":{"setBackground":"Set Background","title":"Virtual Background"},"youtube":{"invalid":"Invalid YouTube URL","share":"Watch now","title":"Watch Together","url":"YOUTUBE URL"}}');
|
|
372
374
|
|
|
373
375
|
|
|
374
376
|
var $32156cf38812b83d$exports = {};
|
|
375
|
-
$32156cf38812b83d$exports = JSON.parse('{"audioMenu":{"blockedMicrophone":"Votre micro est bloqu\xe9.","microphonePermissions":"Please accept microphone sharing before accessing these options.","title":"Audio"},"blockedFeature":{"descriptionConnected":"Vous n\'avez pas acc\xe8s \xe0 cette fonctionnalit\xe9. Souscrivez au plan Pro pour d\xe9bloquer toutes les fonctionnalit\xe9s de SnapCall.","descriptionGuest":"Vous participez \xe0 un appel cr\xe9\xe9 avec la version gratuite de SnapCall. Cette fonctionnalit\xe9 n\'est disponible qu\'avec une version Pro.","dismissConnected":"Souscrire \xe0 Pro","dismissGuest":"D\'accord","titleConnected":"Souscrire au plan Pro","titleGuest":"Fonctionnalit\xe9 non disponible"},"common":{"new":"new"},"copyLink":{"copied":"Lien copi\xe9 dans le presse-papier","copy":"Copier","description":"Copier le lien dans le presse-papiers","error":"Une erreur est survenue pendant la copie du lien dans le presse-papier","title":"Copier le lien"},"endView":{"addAdditionalMedia":"Add additional media","allowsYouToShareMoreMedia":"This option allows you to share one or more media to add more context.","callEnded":"Cet appel est termin\xe9","callIsOver":"Cet appel est termin\xe9 ou supprim\xe9","callLeft":"Vous avez quitt\xe9 l\'appel","callNoLongerActive":"This call is no longer active. Thank you for participating.","full":"Impossible de rejoindre l\'appel","fullDescription":"Limite d\'utilisateurs atteinte. Merci de rejoindre l\'appel ult\xe9rieurement.","goBack":"Retourner dans l\'appel","howWasYourExperience":"How was your experience?","ifMistakeRejoin":"If this was a mistake, you can rejoin using the button below.","invalidLink":"Invalid link","invalidOrExpired":"This link is invalid or expired.","openDashboard":"Open dashboard","pleaseRateYourExperienceBelow":"Please rate your experience below","thankYouForYourFeedback":"Thank you for your feedback.","tooLate":"Vous \xeates arriv\xe9 trop tard","yourFeedbackHelpsUs":"Your feedback helps us improve. See you soon!"},"gdpr":{"recordedWarning":"Pour am\xe9liorer la qualit\xe9 de notre service, cet appel va \xeatre enregistr\xe9."},"greeting":{"askToJoin":"Demander \xe0 rejoindre","askingLetIn":"Demande de participation...","cameraDisabled":"Cam\xe9ra d\xe9sactiv\xe9e","cameraEnabled":"Cam\xe9ra activ\xe9e","canceledCallRequest":"La demande d\'appel sera annul\xe9e et vous serez redirig\xe9 vers la page de planification des appels.","cantJoinCall":"Vous ne pouvez pas rejoindre cet appel","cantWait":"Vous ne souhaitez pas attendre ?","cantWaitLeaveMessage":"Vous ne pouvez pas attendre ? Vous pouvez laisser un message et vous serez contact\xe9 dans les plus brefs d\xe9lais.","clickOnLock":"Cliquez sur l\'ic\xf4ne de verrouillage <1></1> dans la barre de votre navigateur.","footerDescription":"D\xe9couvrez SnapCall, ajoutez de la vid\xe9o en temps r\xe9el \xe0 n\'importe quelle plateforme, produit ou service.","footerTitle":"Propuls\xe9 par SnapCall","leaveMessage":"Laisser un message","mainTitle":"Bienvenue sur SnapCall","mediaDenied":"Acc\xe8s au microphone et \xe0 la cam\xe9ra refus\xe9","microphoneDisabled":"Microphone d\xe9sactiv\xe9","microphoneEnabled":"Microphone activ\xe9","name":"Nom","nameDescription":"Ce nom sera affich\xe9 \xe0 tous les participants","namePlaceholder":"Ex. Lucie ou Pierre","nameSubmit":"Rejoindre la conversation","recordVideo":"Enregistrer une vid\xe9o","recordVoice":"Enregistrer un message vocal","requestACall":"Solliciter un appel maintenant","scheduleACall":"Planifier un appel","setting":"Param\xe8tres","sideDescription":"Veuillez entrer votre nom et configurer votre cam\xe9ra et microphone.","sideTitle":"C\'est bient\xf4t votre tour !","someoneDenied":"Quelqu\'un lors de l\'appel a refus\xe9 votre demande de participation.","takeFewMinute":"Cela peut prendre quelques minutes selon la disponibilit\xe9 des participants.","whatYouCanDo":"Voici ce que vous pouvez faire","youWillJoinWhenSomeoneLetsYou":"Votre acc\xe8s \xe0 l\'appel sera autoris\xe9 par un membre de l\'\xe9quipe {{ companyName }}."},"header":{"free":"Version gratuite"},"invitePeople":{"PublicLink":"Public link","addEmailToInvite":"Ajoutez un e-mail pour inviter.","addEmails":"Ajouter des e-mails...","copyCallLinkDescription":"Copiez ce lien et envoyez-le \xe0 toute personne que vous souhaitez inviter \xe0 rejoindre l\'appel.","copyClipLinkDescription":"Copiez ce lien et envoyez-le \xe0 toute personne que vous souhaitez inviter \xe0 enregistrer un clip.","email":"Email","emailPlaceholder":"Ex. jean@acme.com","emailsOrNumberPlaceholder":"Eg. john@acme.com or +33612345678","error":"\xc9chec de l\'envoi, veuillez r\xe9essayer plus tard.","invalidEmail":"Format d\'email invalide.","invalidEmailOrNumber":"Invalid email or number format.","invitationSentTo_one":"Envoy\xe9 \xe0 {{ name }}","invitationSentTo_other":"Envoy\xe9 \xe0 {{ name }} et {{ otherEmailsCount }}+","invite":"Inviter","inviteByEmail":"Inviter par email","inviteByEmailOrNumber":"Invite by email or sms","inviteCall":"Inviter \xe0 rejoindre l\'appel","inviteCallDefaultMessage":"Vous \xeates invit\xe9 \xe0 rejoindre notre appel vid\xe9o. Cliquez sur le lien pour vous connecter instantan\xe9ment.","inviteClipAudioDefaultMessage":"Hey! Please record an audio message now and provide us with more context to assist you better.","inviteClipDefaultMessage":"Veuillez enregistrer votre clip vid\xe9o maintenant et nous fournir plus de contexte pour mieux vous aider.","inviteClipPhotoDefaultMessage":"Hey! Please take a photo and provide us with more context to assist you better.","inviteClipScreenDefaultMessage":"Hey! Please record your screen now and provide us with more context to assist you better.","inviteClipVideoDefaultMessage":"Hey! Please record your video now and provide us with more context to assist you better.","invitePeople":"Invite people","inviteRecordAudio":"Record an audio","inviteRecordClip":"Inviter \xe0 enregistrer un clip","inviteRecordPhoto":"Take a photo","inviteRecordScreen":"Record a screen","inviteRecordVideo":"Record a video","joinTheCall":"Join the call","linkToJoinCall":"Lien pour rejoindre l\'appel","linkToRecordAClip":"Lien pour enregistrer un clip","message":"Message","sharePublicLink":"Partager le lien public"},"leave":{"endCall":"Terminer l\'appel","leaveCall":"Quitter l\'appel","title":"Quitter"},"loader":{"connection":"Connexion..."},"menu":{"new":"NOUVEAU","openNewTab":"Ouvrir un nouvel onglet","pictureInPicture":"Picture-in-Picture","quickConnect":"Quick Connect","screenSharing":"Partage d\'\xe9cran","startRecord":"Enregistrer l\'appel","stopRecord":"Arr\xeater l\'enregistrement","title":"Menu"},"misc":{"accept":"Accepter","add":"Add","audio":"Audio","camera":"Cam\xe9ra","cancel":"Annuler","confirm":"Confirmer","decline":"D\xe9cliner","download":"Download","from":"Depuis","microphone":"Micro","open":"Ouvrir","photo":"Photo","proceed":"Proc\xe9der","remove":"Enlever","screen":"\xc9cran","screenshot":"Capture d\'\xe9cran","someone":"Quelqu\'un","speaker":"Haut-parleur","user":"Utilisateur","video":"Vid\xe9o","you":"Vous"},"notifications":{"agentJoinError":"Une erreur est survenue en essayant de rejoindre la salle en tant qu\'agent","blockedMicrophonePopup":"SnapCall a besoin d\'acc\xe9der \xe0 votre cam\xe9ra et micro. Cliquez sur l\'ic\xf4ne de cam\xe9ra bloqu\xe9e dans la barre d\'adresse du navigateur.","blockedMicrophonePopupTitle":"Votre cam\xe9ra et micro sont bloqu\xe9s","cameraError":"Une erreur est survenue pendant l\'activation de la cam\xe9ra","cameraRotateError":"Une erreur est survenue pendant la rotation de la cam\xe9ra","close":"Fermer","connectedTo":"Connect\xe9 \xe0 {{name}}","criticalError":"Une erreur critique est survenue (erreur {{code}}).","error":"Error","errorOccuredCode":"An error occured (error {{code}}).","invitationSentToFailed":"Sent to {{ name }} failed.","microphoneError":"Une erreur est survenue pendant l\'activation du micro","noCamera":"Aucune cam\xe9ra disponible","recording":"Enregistrement en cours","reload":"Recharger","screensharingError":"Une erreur est survenue pendant l\'activation du partage d\'\xe9cran","uploadError":"An error occured during the upload, please try again later."},"quickConnect":{"scan":"Scannez ce QR code avec votre t\xe9l\xe9phone pour ouvrir l\'appel.","scanTitle":"Scannez le QR Code","title":"Quick Connect"},"recorder":{"addMore":"Ajouter plus","addNewClip":"Ajouter un nouveau clip","allowAccess":"Autoriser l\'acc\xe8s","allowCamMicAccess":"Autoriser acc\xe8s cam\xe9ra/micro","allowScreenShareAccess":"Autoriser l\'acc\xe8s au partage d\'\xe9cran","attachElements_one":"Joindre {{ type }} au ticket","attachElements_other":"Joindre {{ count }} \xe9l\xe9ments","audioInstructionsTitle":"Pr\xeat \xe0 enregistrer un message vocal\xa0?","audioLevelNotification":{"noSound":{"description":"Assurez-vous que votre microphone est activ\xe9.","title":"Aucun son d\xe9tect\xe9."},"shortVideo":{"description":"Cette vid\xe9o semble assez courte, ne fournit pas assez de d\xe9tails.","title":"Vid\xe9o courte."},"spokenWordsQuestion":{"description":"Votre vid\xe9o offre-t-elle une explication d\xe9taill\xe9e et claire ?","title":"Avez-vous tout expliqu\xe9 ?"},"spokenWordsWarning":{"description":"La vid\xe9o ne comprend pratiquement aucun mot prononc\xe9.","title":"Aucun mot prononc\xe9."}},"audioLevelToast":{"continueSpeaking":"Continuez \xe0 parler pour expliquer.","noSound":"Aucun son d\xe9tect\xe9.","rememberSpeaking":"Veuillez parler \xe0 voix-haute."},"chooseWhatYouWantToShare":"Choose what you want to share","chooseWhatYouWantToShareDescription":"Select the screen or tab you want to share and start recording.","clipCount_one":"{{ count }} clip","clipCount_other":"{{ count }} clips","clipSubmissionDescription":"Merci d\'utiliser SnapCall.","clipSubmissionTitle_one":"Votre clip a \xe9t\xe9 envoy\xe9","clipSubmissionTitle_other":"Vos clips ont \xe9t\xe9 envoy\xe9s","confirmRemovalDescription":"Voulez-vous vraiment supprimer cette photo/vid\xe9o ? Cette action ne peut pas \xeatre annul\xe9e.","confirmRemovalTitle":"Confirmer la suppression","elementBeingProcessed":"Veuillez patienter un moment pendant que votre {{ type }} est en cours de traitement...","elementCaptureSuccess":"{{ type }} captur\xe9(e) avec succ\xe8s","elementRecordedAndAttached":"Votre clip a \xe9t\xe9 envoy\xe9 et joint au fil de discussion.","goBackToTicket":"Revenir au billet","instructions":{"allowAccessOnPrompt":"<bold>Autorisez l\'acc\xe8s</bold> \xe0 la cam\xe9ra et au micro lorsque demand\xe9.","multiplePhotos":"Prenez <bold>une ou plusieurs photos</bold> pour donner plus de d\xe9tails.","privacyPolicy":"En continuant, vous acceptez notre <bold>Politique de confidentialit\xe9</bold>.","reviewAndSendAudios":"<bold>V\xe9rifiez vos audios</bold>, et ils seront envoy\xe9s automatiquement \xe0 nous.","reviewAndSendPhotos":"<bold>Validez vos photos</bold>, et elles nous seront envoy\xe9es automatiquement.","reviewAndSendVideos":"<bold>Validez vos vid\xe9os</bold>, et elles nous seront envoy\xe9es automatiquement.","screenShareInstruction":"S\xe9lectionnez l\'\xe9cran ou la fen\xeatre que vous souhaitez enregistrer.","selectScreenshare":"Tap Record my screen and select the screen or window you want to record.","speakClearly":"<bold>Parlez clairement</bold> et dites ce que vous devez transmettre.","speakDuringRecord":"You can speak while recording to add details.","stopScreenOnFinish":"Press the Stop button when finished. The video will be sent to us automatically.","tapAudioButton":"<bold>Appuyez sur le bouton d\'enregistrement</bold> pour commencer \xe0 enregistrer votre message audio.","tapStopVideoButton":"<bold>Appuyez sur Arr\xeat</bold> lorsque vous avez termin\xe9.","tapVideoButton":"<bold>Appuyez sur Enregistrer</bold>. Pensez \xe0 commenter.","videoSpeech":"Vous pouvez <bold>parler pendant</bold> l\'enregistrement pour ajouter des d\xe9tails."},"limit":"Enregistrement vid\xe9o limit\xe9 \xe0 5 min.","logIn":"Se connecter","loggedAs":"Connect\xe9 en tant que","mediaCount_one":"{{ count }} media","mediaCount_other":"{{ count }} media","mediaSent_one":"Your media has been sent","mediaSent_other":"Your media has been sent","noCameraAccess":"No camera access","noCameraAccessDescription":"No camera access Allow camera access in your browser.","noCameraAndMicrophoneAccess":"No camera & microphone access","noCameraAndMicrophoneAccessDescription":"No camera & microphone access Allow microphone and camera access in your browser.","noMicrophoneAccess":"No microphone access","noMicrophoneAccessDescription":"No microphone access Allow microphone access in your browser.","okay":"D\'accord","openThread":"Ouvrir le fil de discussion","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.","permissionDeniedTitle":"Quelque chose s\'est mal pass\xe9 !","photoInstructionsTitle":"Pr\xeat \xe0 prendre une photo ?","replyAttached":"Votre r\xe9ponse a \xe9t\xe9 jointe","scanQRCode":"Scannez ce code QR avec un appareil compatible.","screenShareInstructionsTitle":"Pr\xeat \xe0 partager votre \xe9cran ?","screenTitle":"Pr\xeat \xe0 capturer votre \xe9cran ?","send":"Envoyer","sendElements_one":"Envoyer la {{ type }}","sendElements_other":"Envoyer {{ count }} \xe9l\xe9ments","showQrCode":"Show QR code","startScreenRecording":"Start screen recording","startScreenShareButton":"Enregistrer \xe9cran","stopScreenShareButton":"Stop enregistrement","submissionDescription":"Votre photo/vid\xe9o a \xe9t\xe9 envoy\xe9e avec succ\xe8s. Nous l\'examinerons et reviendrons vers vous bient\xf4t.","submissionTitle":"Merci pour votre soumission !","switchToMobileDescription":"Profitez d\'une exp\xe9rience encore plus pratique en utilisant votre t\xe9l\xe9phone pour prendre des photos et enregistrer des vid\xe9os.","switchToMobileTitle":"Passez sur votre mobile","takeNewElement":"Prendre une nouvelle {{ type }}","upload":"Upload","useDesktopVersion":"Continuer","videoInstructionsTitle":"Pr\xeat \xe0 enregistrer une vid\xe9o ?","waitVideo":"Cela peut prendre jusqu\'\xe0 15 secondes pour qu\'une vid\xe9o soit pr\xeate."},"recordingPopup":{"dismiss":"Fermer","recordingStartText":"Cet appel sera enregistr\xe9 sous peu. Si vous pr\xe9f\xe9rez ne pas \xeatre enregistr\xe9, vous \xeates libre de quitter l\'appel \xe0 tout moment.","recordingStartTitle":"L\'enregistrement va commencer."},"requestAccess":{"admit":"Accepter","defaultName":"Un utilisateur","deny":"Refuser","wantToJoin":"{{name}} souhaite rejoindre!"},"requestDevice":{"askForDevice":"Ask for {{device}}","declined":"Votre requ\xeate a \xe9t\xe9 refus\xe9.","deviceActivated":"{{device}} activated","deviceActivationDeclined":"{{device}} activation declined","request":"{{user}} voudrait que vous partagiez votre {{device}}","requestInput":"Demander l\'activation","timedOut":"Votre requ\xeate n\'a pas eu de r\xe9ponse","userDeclined":"{{user}} a d\xe9clin\xe9 votre requ\xeate.","userWouldLikeYouToActivateYourDevice":"{{name}} would like you to activate your {{device}}.","waitingForDevice":"Waiting for {{name}}\'s {{device}}"},"settings":{"devices":"Appareils","help":"Aide","helpCenter":"Acc\xe9der au centre d\'aide","language":"Langage","preferences":"Pr\xe9f\xe9rences","selectYourCamera":"Select your preferred camera","selectYourLanguage":"Select your preferred language","selectYourMicrophone":"Select your preferred microphone","title":"Param\xe8tres"},"shareLink":{"failed":"Une erreur est survenue pendant l\'envoi du lien","invalid":"Lien invalide","invoice":"{{user}} vous a envoy\xe9 une facture.","pay":"Payer","poweredBy":"Propos\xe9 par","sentToUser":"Lien envoy\xe9 \xe0 {{user}}","sentToUsers":"Lien envoy\xe9 aux participants","title":"Partager un lien","title2":"Partager un lien"},"sharedHistory":{"shared":"Partag\xe9 avec vous"},"snapshot":{"aSnapshotHasBeenShared":"A snapshot has been shared.","error":"Une erreur est survenue pendant l\'envoi du snapshot","save":"Sauvegarder l\'image","sentToUser":"Snapshot envoy\xe9 \xe0 {{user}}","sentToUsers":"Snapshot envoy\xe9 aux participants.","shared":"Snapshot envoy\xe9.","title":"Snapshot"},"videoMenu":{"blockedCamera":"Votre cam\xe9ra est bloqu\xe9.","cameraPermissions":"Please accept camera sharing before accessing these options.","highDef":"Haute d\xe9finition (720p)","lowDef":"Basse d\xe9finition (240p)","sendResolution":"R\xe9solution envoy\xe9e (max)","standardDef":"D\xe9finition standard (480p)","title":"Video"},"virtualBackground":{"setBackground":"Mettre l\'arri\xe8re plan","title":"Arri\xe8re plan virtuel"},"youtube":{"invalid":"URL YouTube invalide","share":"Regarder maintenant","title":"Regardons Ensemble","url":"URL YOUTUBE"}}');
|
|
377
|
+
$32156cf38812b83d$exports = JSON.parse('{"audioMenu":{"blockedMicrophone":"Votre micro est bloqu\xe9.","microphonePermissions":"Please accept microphone sharing before accessing these options.","title":"Audio"},"blockedFeature":{"descriptionConnected":"Vous n\'avez pas acc\xe8s \xe0 cette fonctionnalit\xe9. Souscrivez au plan Pro pour d\xe9bloquer toutes les fonctionnalit\xe9s de SnapCall.","descriptionGuest":"Vous participez \xe0 un appel cr\xe9\xe9 avec la version gratuite de SnapCall. Cette fonctionnalit\xe9 n\'est disponible qu\'avec une version Pro.","dismissConnected":"Souscrire \xe0 Pro","dismissGuest":"D\'accord","titleConnected":"Souscrire au plan Pro","titleGuest":"Fonctionnalit\xe9 non disponible"},"common":{"new":"nouveau"},"copyLink":{"copied":"Lien copi\xe9 dans le presse-papier","copy":"Copier","description":"Copier le lien dans le presse-papiers","error":"Une erreur est survenue pendant la copie du lien dans le presse-papier","title":"Copier le lien"},"endView":{"addAdditionalMedia":"Ajouter des m\xe9dias suppl\xe9mentaires","allowsYouToShareMoreMedia":"Cette option vous permet de partager un ou plusieurs m\xe9dias pour ajouter plus de contexte.","callEnded":"Cet appel est termin\xe9","callIsOver":"Cet appel est termin\xe9 ou supprim\xe9","callLeft":"Vous avez quitt\xe9 l\'appel","callNoLongerActive":"Cet appel n\u2019est plus actif. Merci de votre participation.","full":"Impossible de rejoindre l\'appel","fullDescription":"Limite d\'utilisateurs atteinte. Merci de rejoindre l\'appel ult\xe9rieurement.","goBack":"Retourner dans l\'appel","howWasYourExperience":"Comment s\'est d\xe9roul\xe9e votre exp\xe9rience ?","ifMistakeRejoin":"S\'il s\'agit d\'une erreur, vous pouvez retourner dans l\'appel en utilisant le bouton ci-dessous.","invalidLink":"Lien invalide","invalidOrExpired":"Ce lien n\'est pas valide ou a expir\xe9.","openDashboard":"Ouvrir le dashboard","pleaseRateYourExperienceBelow":"Veuillez \xe9valuer votre exp\xe9rience ci-dessous","thankYouForYourFeedback":"Nous vous remercions pour votre avis.","tooLate":"Vous \xeates arriv\xe9 trop tard","yourFeedbackHelpsUs":"Vos commentaires nous aident \xe0 nous am\xe9liorer. A bient\xf4t !"},"gdpr":{"recordedWarning":"Pour am\xe9liorer la qualit\xe9 de notre service, cet appel va \xeatre enregistr\xe9."},"greeting":{"askToJoin":"Demander \xe0 rejoindre","askingLetIn":"Demande de participation...","cameraDisabled":"Cam\xe9ra d\xe9sactiv\xe9e","cameraEnabled":"Cam\xe9ra activ\xe9e","canceledCallRequest":"La demande d\'appel sera annul\xe9e et vous serez redirig\xe9 vers la page de planification des appels.","cantJoinCall":"Vous ne pouvez pas rejoindre cet appel","cantWait":"Vous ne souhaitez pas attendre ?","cantWaitLeaveMessage":"Vous ne pouvez pas attendre ? Vous pouvez laisser un message et vous serez contact\xe9 dans les plus brefs d\xe9lais.","clickOnLock":"Cliquez sur l\'ic\xf4ne de verrouillage <1></1> dans la barre de votre navigateur.","footerDescription":"D\xe9couvrez SnapCall, ajoutez de la vid\xe9o en temps r\xe9el \xe0 n\'importe quelle plateforme, produit ou service.","footerTitle":"Propuls\xe9 par SnapCall","leaveMessage":"Laisser un message","mainTitle":"Bienvenue sur SnapCall","mediaDenied":"Acc\xe8s au microphone et \xe0 la cam\xe9ra refus\xe9","microphoneDisabled":"Microphone d\xe9sactiv\xe9","microphoneEnabled":"Microphone activ\xe9","name":"Nom","nameDescription":"Ce nom sera affich\xe9 \xe0 tous les participants","namePlaceholder":"Ex. Lucie ou Pierre","nameSubmit":"Rejoindre la conversation","recordVideo":"Enregistrer une vid\xe9o","recordVoice":"Enregistrer un message vocal","requestACall":"Solliciter un appel maintenant","scheduleACall":"Planifier un appel","setting":"Param\xe8tres","sideDescription":"Veuillez entrer votre nom et configurer votre cam\xe9ra et microphone.","sideTitle":"C\'est bient\xf4t votre tour !","someoneDenied":"Quelqu\'un lors de l\'appel a refus\xe9 votre demande de participation.","takeFewMinute":"Cela peut prendre quelques minutes selon la disponibilit\xe9 des participants.","whatYouCanDo":"Voici ce que vous pouvez faire","youWillJoinWhenSomeoneLetsYou":"Votre acc\xe8s \xe0 l\'appel sera autoris\xe9 par un membre de l\'\xe9quipe {{ companyName }}."},"header":{"free":"Version gratuite"},"invitePeople":{"PublicLink":"Lien public","addEmailToInvite":"Ajoutez un e-mail pour inviter.","addEmails":"Ajouter des e-mails...","copyCallLinkDescription":"Copiez ce lien et envoyez-le \xe0 toute personne que vous souhaitez inviter \xe0 rejoindre l\'appel.","copyClipLinkDescription":"Copiez ce lien et envoyez-le \xe0 toute personne que vous souhaitez inviter \xe0 enregistrer un clip.","email":"Email","emailPlaceholder":"Ex. jean@acme.com","emailsOrNumberPlaceholder":"Par exemple: john@acme.com ou +33612345678","error":"\xc9chec de l\'envoi, veuillez r\xe9essayer plus tard.","invalidEmail":"Format d\'email invalide.","invalidEmailOrNumber":"Format d\'email ou de num\xe9ro invalide.","invitationSentTo_one":"Envoy\xe9 \xe0 {{ name }}","invitationSentTo_other":"Envoy\xe9 \xe0 {{ name }} et {{ otherEmailsCount }}+","invite":"Inviter","inviteByEmail":"Inviter par email","inviteByEmailOrNumber":"Inviter par e-mail ou SMS","inviteCall":"Inviter \xe0 rejoindre l\'appel","inviteCallDefaultMessage":"Vous \xeates invit\xe9 \xe0 rejoindre notre appel vid\xe9o. Cliquez sur le lien pour vous connecter instantan\xe9ment.","inviteClipAudioDefaultMessage":"Veuillez enregistrer un message audio et nous fournir plus de contexte pour mieux vous aider.","inviteClipDefaultMessage":"Veuillez enregistrer votre clip vid\xe9o et nous fournir plus de contexte pour mieux vous aider.","inviteClipPhotoDefaultMessage":"Veuillez prendre une photo et nous fournir plus de contexte pour mieux vous aider.","inviteClipScreenDefaultMessage":"Veuillez enregistrer votre \xe9cran et nous fournir plus de contexte pour mieux vous aider.","inviteClipVideoDefaultMessage":"Enregistrez votre vid\xe9o et donnez-nous plus de d\xe9tails pour que nous puissions mieux vous aider.","invitePeople":"Inviter des personnes","inviteRecordAudio":"Enregistrer un audio","inviteRecordClip":"Inviter \xe0 enregistrer un clip","inviteRecordPhoto":"Prendre une photo","inviteRecordScreen":"Enregistrer l\'\xe9cran","inviteRecordVideo":"Enregistrer une vid\xe9o","joinTheCall":"Rejoindre l\u2019appel","linkToJoinCall":"Lien pour rejoindre l\'appel","linkToRecordAClip":"Lien pour enregistrer un clip","message":"Message","sharePublicLink":"Partager le lien public"},"leave":{"endCall":"Terminer l\'appel","leaveCall":"Quitter l\'appel","title":"Quitter"},"loader":{"connection":"Connexion..."},"menu":{"new":"NOUVEAU","openNewTab":"Ouvrir un nouvel onglet","pictureInPicture":"Picture-in-Picture","quickConnect":"Quick Connect","screenSharing":"Partage d\'\xe9cran","startRecord":"Enregistrer l\'appel","stopRecord":"Arr\xeater l\'enregistrement","title":"Menu"},"misc":{"accept":"Accepter","add":"Ajouter","audio":"Audio","camera":"Cam\xe9ra","cancel":"Annuler","confirm":"Confirmer","decline":"D\xe9cliner","download":"T\xe9l\xe9charger","from":"Depuis","microphone":"Micro","open":"Ouvrir","photo":"Photo","proceed":"Proc\xe9der","remove":"Enlever","screen":"\xc9cran","screenshot":"Capture d\'\xe9cran","someone":"Quelqu\'un","speaker":"Haut-parleur","user":"Utilisateur","video":"Vid\xe9o","you":"Vous"},"networkIssue":{"description":"The clip information may be damaged.","title":"Network issue"},"notifications":{"agentJoinError":"Une erreur est survenue en essayant de rejoindre la salle en tant qu\'agent","blockedMicrophonePopup":"SnapCall a besoin d\'acc\xe9der \xe0 votre cam\xe9ra et micro. Cliquez sur l\'ic\xf4ne de cam\xe9ra bloqu\xe9e dans la barre d\'adresse du navigateur.","blockedMicrophonePopupTitle":"Votre cam\xe9ra et micro sont bloqu\xe9s","cameraError":"Une erreur est survenue pendant l\'activation de la cam\xe9ra","cameraRotateError":"Une erreur est survenue pendant la rotation de la cam\xe9ra","close":"Fermer","connectedTo":"Connect\xe9 \xe0 {{name}}","criticalError":"Une erreur critique est survenue (erreur {{code}}).","error":"Erreur","errorOccuredCode":"Une erreur s\'est produite (erreur {{code}}).","invitationSentToFailed":"L\'envoi \xe0 {{ name }} a \xe9chou\xe9.","microphoneError":"Une erreur est survenue pendant l\'activation du micro","noCamera":"Aucune cam\xe9ra disponible","recording":"Enregistrement en cours","reload":"Recharger","screensharingError":"Une erreur est survenue pendant l\'activation du partage d\'\xe9cran","uploadError":"Une erreur s\'est produite pendant le t\xe9l\xe9chargement, veuillez r\xe9essayer plus tard."},"quickConnect":{"scan":"Scannez ce QR code avec votre t\xe9l\xe9phone pour ouvrir l\'appel.","scanTitle":"Scannez le QR Code","title":"Quick Connect"},"recorder":{"addMore":"Ajouter plus","addNewClip":"Ajouter un nouveau clip","allowAccess":"Autoriser l\'acc\xe8s","allowCamMicAccess":"Autoriser acc\xe8s cam\xe9ra/micro","allowScreenShareAccess":"Autoriser l\'acc\xe8s au partage d\'\xe9cran","attachElements_one":"Joindre {{ type }} au ticket","attachElements_other":"Joindre {{ count }} \xe9l\xe9ments","audioInstructionsTitle":"Pr\xeat \xe0 enregistrer un message vocal\xa0?","audioLevelNotification":{"noSound":{"description":"Assurez-vous que votre microphone est activ\xe9.","title":"Aucun son d\xe9tect\xe9."},"shortVideo":{"description":"Cette vid\xe9o semble assez courte, ne fournit pas assez de d\xe9tails.","title":"Vid\xe9o courte."},"spokenWordsQuestion":{"description":"Votre vid\xe9o offre-t-elle une explication d\xe9taill\xe9e et claire ?","title":"Avez-vous tout expliqu\xe9 ?"},"spokenWordsWarning":{"description":"La vid\xe9o ne comprend pratiquement aucun mot prononc\xe9.","title":"Aucun mot prononc\xe9."}},"audioLevelToast":{"continueSpeaking":"Continuez \xe0 parler pour expliquer.","noSound":"Aucun son d\xe9tect\xe9.","rememberSpeaking":"Veuillez parler \xe0 voix-haute."},"chooseWhatYouWantToShare":"Choisissez ce que vous souhaitez partager","chooseWhatYouWantToShareDescription":"S\xe9lectionnez l\'\xe9cran ou l\'onglet que vous souhaitez partager et commencez l\'enregistrement.","clipCount_one":"{{ count }} clip","clipCount_other":"{{ count }} clips","clipSubmissionDescription":"Merci d\'utiliser SnapCall.","clipSubmissionTitle_one":"Votre clip a \xe9t\xe9 envoy\xe9","clipSubmissionTitle_other":"Vos clips ont \xe9t\xe9 envoy\xe9s","confirmRemovalDescription":"Voulez-vous vraiment supprimer cette photo/vid\xe9o ? Cette action ne peut pas \xeatre annul\xe9e.","confirmRemovalTitle":"Confirmer la suppression","elementBeingProcessed":"Veuillez patienter un moment pendant que votre {{ type }} est en cours de traitement...","elementCaptureSuccess":"{{ type }} captur\xe9(e) avec succ\xe8s","elementRecordedAndAttached":"Votre clip a \xe9t\xe9 envoy\xe9 et joint au fil de discussion.","feelFreeToTalkGiveMoreContext":"\uD83D\uDDE3\uFE0F Feel free to talk to give me more context.","goBackToTicket":"Revenir au billet","instructions":{"allowAccessOnPrompt":"<bold>Autorisez l\'acc\xe8s</bold> \xe0 la cam\xe9ra et au micro lorsque demand\xe9.","multiplePhotos":"Prenez <bold>une ou plusieurs photos</bold> pour donner plus de d\xe9tails.","privacyPolicy":"En continuant, vous acceptez notre <bold>Politique de confidentialit\xe9</bold>.","reviewAndSendAudios":"<bold>V\xe9rifiez vos audios</bold>, et ils seront envoy\xe9s automatiquement \xe0 nous.","reviewAndSendPhotos":"<bold>Validez vos photos</bold>, et elles nous seront envoy\xe9es automatiquement.","reviewAndSendVideos":"<bold>Validez vos vid\xe9os</bold>, et elles nous seront envoy\xe9es automatiquement.","screenShareInstruction":"S\xe9lectionnez l\'\xe9cran ou la fen\xeatre que vous souhaitez enregistrer.","selectScreenshare":"Appuyez sur Enregistrer mon \xe9cran et s\xe9lectionnez l\'\xe9cran ou la fen\xeatre que vous souhaitez enregistrer.","speakClearly":"<bold>Parlez clairement</bold> et dites ce que vous devez transmettre.","speakDuringRecord":"Vous pouvez parler pendant l\'enregistrement pour ajouter des d\xe9tails.","stopScreenOnFinish":"Appuyez sur le bouton Stop lorsque vous avez termin\xe9. La vid\xe9o nous sera envoy\xe9e automatiquement.","tapAudioButton":"<bold>Appuyez sur le bouton d\'enregistrement</bold> pour commencer \xe0 enregistrer votre message audio.","tapStopVideoButton":"<bold>Appuyez sur Arr\xeat</bold> lorsque vous avez termin\xe9.","tapVideoButton":"<bold>Appuyez sur Enregistrer</bold>. Pensez \xe0 commenter.","videoSpeech":"Vous pouvez <bold>parler pendant</bold> l\'enregistrement pour ajouter des d\xe9tails."},"limit":"Enregistrement vid\xe9o limit\xe9 \xe0 5 min.","logIn":"Se connecter","loggedAs":"Connect\xe9 en tant que","mediaCount_one":"{{ count }} m\xe9dia","mediaCount_other":"{{ count }} m\xe9dias","mediaSent_one":"Votre m\xe9dia a \xe9t\xe9 envoy\xe9","mediaSent_other":"Votre m\xe9dia a \xe9t\xe9 envoy\xe9","mySuggestion":"My suggestion","noCameraAccess":"Pas d\'acc\xe8s \xe0 la cam\xe9ra","noCameraAccessDescription":"Pas d\'acc\xe8s \xe0 la cam\xe9ra Autoriser l\'acc\xe8s \xe0 la cam\xe9ra dans votre navigateur.","noCameraAndMicrophoneAccess":"Pas d\'acc\xe8s \xe0 la cam\xe9ra et au microphone","noCameraAndMicrophoneAccessDescription":"Pas d\'acc\xe8s \xe0 la cam\xe9ra et au microphone Autoriser l\'acc\xe8s au microphone et \xe0 la cam\xe9ra dans votre navigateur.","noMicrophoneAccess":"Pas d\'acc\xe8s au microphone","noMicrophoneAccessDescription":"Pas d\'acc\xe8s au microphone Autoriser l\'acc\xe8s au microphone dans votre navigateur.","okay":"D\'accord","openThread":"Ouvrir le fil de discussion","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.","permissionDeniedTitle":"Quelque chose s\'est mal pass\xe9 !","photoInstructionsTitle":"Pr\xeat \xe0 prendre une photo ?","recordNewMedia":"Record new media","replyAttached":"Votre r\xe9ponse a \xe9t\xe9 jointe","scanQRCode":"Scannez ce code QR avec un appareil compatible.","screenShareInstructionsTitle":"Pr\xeat \xe0 partager votre \xe9cran ?","screenTitle":"Pr\xeat \xe0 capturer votre \xe9cran ?","send":"Envoyer","sendElements_one":"Envoyer la {{ type }}","sendElements_other":"Envoyer {{ count }} \xe9l\xe9ments","showQrCode":"Afficher le QR code","startByClickingOnTheButton":"Start by clicking on the round button below! \uD83D\uDC47","startScreenRecording":"D\xe9marrer l\'enregistrement de l\'\xe9cran","startScreenShareButton":"Enregistrer \xe9cran","stopScreenShareButton":"Stop enregistrement","submissionDescription":"Votre photo/vid\xe9o a \xe9t\xe9 envoy\xe9e avec succ\xe8s. Nous l\'examinerons et reviendrons vers vous bient\xf4t.","submissionTitle":"Merci pour votre soumission !","switchToMobileDescription":"Profitez d\'une exp\xe9rience encore plus pratique en utilisant votre t\xe9l\xe9phone pour prendre des photos et enregistrer des vid\xe9os.","switchToMobileTitle":"Passez sur votre mobile","takeNewElement":"Prendre une nouvelle {{ type }}","thanksForYourMedia":"Thanks for your media!","upload":"Importer","useDesktopVersion":"Continuer","videoBotError":"Sorry, an error has occured.","videoBotThinking":"Thinking...","videoInstructionsTitle":"Pr\xeat \xe0 enregistrer une vid\xe9o ?","waitVideo":"Cela peut prendre jusqu\'\xe0 15 secondes pour qu\'une vid\xe9o soit pr\xeate.","yourMedia":"Your media"},"recordingPopup":{"dismiss":"Fermer","recordingStartText":"Cet appel sera enregistr\xe9 sous peu. Si vous pr\xe9f\xe9rez ne pas \xeatre enregistr\xe9, vous \xeates libre de quitter l\'appel \xe0 tout moment.","recordingStartTitle":"L\'enregistrement va commencer."},"requestAccess":{"admit":"Accepter","defaultName":"Un utilisateur","deny":"Refuser","wantToJoin":"{{name}} souhaite rejoindre!"},"requestDevice":{"askForDevice":"Demander l\'activation de {{device}}","declined":"Votre requ\xeate a \xe9t\xe9 refus\xe9.","deviceActivated":"{{device}} activ\xe9","deviceActivationDeclined":"{{device}} - activation refus\xe9e","request":"{{user}} voudrait que vous partagiez votre {{device}}","requestInput":"Demander l\'activation","timedOut":"Votre requ\xeate n\'a pas eu de r\xe9ponse","userDeclined":"{{user}} a d\xe9clin\xe9 votre requ\xeate.","userWouldLikeYouToActivateYourDevice":"{{name}} souhaite que vous activiez votre {{device}}.","waitingForDevice":"En attente du {{device}} de {{name}}"},"settings":{"devices":"Appareils","help":"Aide","helpCenter":"Acc\xe9der au centre d\'aide","language":"Langage","preferences":"Pr\xe9f\xe9rences","selectYourCamera":"S\xe9lectionnez votre cam\xe9ra pr\xe9f\xe9r\xe9","selectYourLanguage":"S\xe9lectionnez votre langue pr\xe9f\xe9r\xe9e","selectYourMicrophone":"S\xe9lectionnez votre microphone pr\xe9f\xe9r\xe9","title":"Param\xe8tres"},"shareLink":{"failed":"Une erreur est survenue pendant l\'envoi du lien","invalid":"Lien invalide","invoice":"{{user}} vous a envoy\xe9 une facture.","pay":"Payer","poweredBy":"Propos\xe9 par","sentToUser":"Lien envoy\xe9 \xe0 {{user}}","sentToUsers":"Lien envoy\xe9 aux participants","title":"Partager un lien","title2":"Partager un lien"},"sharedHistory":{"shared":"Partag\xe9 avec vous"},"snapshot":{"aSnapshotHasBeenShared":"Un instantan\xe9 a \xe9t\xe9 partag\xe9.","error":"Une erreur est survenue pendant l\'envoi du snapshot","save":"Sauvegarder l\'image","sentToUser":"Snapshot envoy\xe9 \xe0 {{user}}","sentToUsers":"Snapshot envoy\xe9 aux participants.","shared":"Snapshot envoy\xe9.","title":"Snapshot"},"videoMenu":{"blockedCamera":"Votre cam\xe9ra est bloqu\xe9.","cameraPermissions":"Please accept camera sharing before accessing these options.","highDef":"Haute d\xe9finition (720p)","lowDef":"Basse d\xe9finition (240p)","sendResolution":"R\xe9solution envoy\xe9e (max)","standardDef":"D\xe9finition standard (480p)","title":"Video"},"virtualBackground":{"setBackground":"Mettre l\'arri\xe8re plan","title":"Arri\xe8re plan virtuel"},"youtube":{"invalid":"URL YouTube invalide","share":"Regarder maintenant","title":"Regardons Ensemble","url":"URL YOUTUBE"}}');
|
|
376
378
|
|
|
377
379
|
|
|
378
|
-
var $
|
|
379
|
-
$2cbf9baa8030dfd2$exports = JSON.parse('{"audioMenu":{"blockedMicrophone":"Il tuo microfono \xe8 bloccato.","microphonePermissions":"Si prega di accettare la condivisione del microfono prima di accedere a queste opzioni.","title":"Audio"},"blockedFeature":{"descriptionConnected":"Su un piano gratuito, non puoi utilizzare questa funzione. Aggiorna il tuo piano per usufruire di tutte le funzionalit\xe0 in chiamata.","descriptionGuest":"Stai partecipando a una chiamata creata con una versione gratuita di SnapCall. Questa funzione \xe8 disponibile solo con una versione Pro.","dismissConnected":"L\'aggiornamento a Pro","dismissGuest":"Okay","titleConnected":"L\'aggiornamento a Pro","titleGuest":"Funzione non disponibile"},"common":{"new":"new"},"copyLink":{"copied":"Link copiato negli Appunti","copy":"Copia","description":"Copia il link negli appunti","error":"Si \xe8 verificato un errore durante la copia negli Appunti","title":"Copia il link"},"endView":{"addAdditionalMedia":"Add additional media","allowsYouToShareMoreMedia":"This option allows you to share one or more media to add more context.","callEnded":"Questa chiamata \xe8 finita","callIsOver":"Questa chiamata \xe8 finita o \xe8 stata eliminata","callLeft":"Hai lasciato la chiamata","callNoLongerActive":"This call is no longer active. Thank you for participating.","full":"Impossibile partecipare alla chiamata","fullDescription":"Limite d\'uso attenente.","goBack":"Torna alla chiamata","howWasYourExperience":"How was your experience?","ifMistakeRejoin":"If this was a mistake, you can rejoin using the button below.","invalidLink":"Invalid link","invalidOrExpired":"This link is invalid or expired.","openDashboard":"Open dashboard","pleaseRateYourExperienceBelow":"Please rate your experience below","thankYouForYourFeedback":"Thank you for your feedback.","tooLate":"Sei arrivato troppo tardi","yourFeedbackHelpsUs":"Your feedback helps us improve. See you soon!"},"gdpr":{"recordedWarning":"Per migliorare la qualit\xe0 del nostro servizio, questa chiamata verr\xe0 registrata."},"greeting":{"askToJoin":"Chiedi di partecipare","askingLetIn":"Chiedo di essere fatto entrare...","cameraDisabled":"Fotocamera \xe8 spenta","cameraEnabled":"Fotocamera \xe8 accesa","canceledCallRequest":"La richiesta di chiamata verr\xe0 annullata e verrai reindirizzato alla pagina di pianificazione delle chiamate","cantJoinCall":"Non puoi partecipare a questa chiamata","cantWait":"Non vedo l\'ora?","cantWaitLeaveMessage":"Non vedi l\'ora? Puoi lasciare un messaggio e sarai contattato il prima possibile.","clickOnLock":"Fai clic sull\'icona del lucchetto <1></1> nella barra del browser.","footerDescription":"Incontrare SnapCall, il modo pi\xf9 semplice per aggiungere video in tempo reale a piattaforma, prodotto o servizio.","footerTitle":"Offerto da SnapCall","leaveMessage":"Lascia un messaggio","mainTitle":"Benvenuto a SnapCall","mediaDenied":"Accesso al microfono e alla fotocamera negato","microphoneDisabled":"Microfono \xe8 spento","microphoneEnabled":"Microfono \xe8 acceso","name":"Nome","nameDescription":"Questo nome verr\xe0 visualizzato a tutti i partecipanti alla chiamata.","namePlaceholder":"Per esempio. Lucia o Pietro","nameSubmit":"Partecipa alla conversazione","recordVideo":"Registra video","recordVoice":"Registra voce","requestACall":"Richiedi una chiamata","scheduleACall":"Pianifica una chiamata","setting":"Impostazioni","sideDescription":"Inserisci il tuo nome e regola la fotocamera e il microfono","sideTitle":"Tieni duro, il prossimo sei tu!","someoneDenied":"Qualcuno nella chiamata ha rifiutato la tua richiesta di partecipazione.","takeFewMinute":"L\'operazione potrebbe richiedere alcuni minuti a seconda della disponibilit\xe0 dei partecipanti.","whatYouCanDo":"Ecco cosa puoi fare","youWillJoinWhenSomeoneLetsYou":"Parteciperai alla chiamata quando qualcuno di {{ companyName }} ti far\xe0 entrare."},"header":{"free":"Versione gratuita"},"invitePeople":{"PublicLink":"Public link","addEmailToInvite":"Aggiungi un\'e-mail per invitare.","addEmails":"Aggiungi email...","copyCallLinkDescription":"Copia questo link e invialo a chiunque desideri invitare a partecipare alla chiamata.","copyClipLinkDescription":"Copia questo collegamento e invialo a chiunque desideri invitare a registrare una clip.","email":"Email","emailPlaceholder":"Es. john@acme.com","emailsOrNumberPlaceholder":"Eg. john@acme.com or +33612345678","error":"Impossibile inviare, riprova pi\xf9 tardi.","invalidEmail":"Formato email non valido.","invalidEmailOrNumber":"Invalid email or number format.","invitationSentTo_one":"Inviato a {{ name }}","invitationSentTo_other":"Inviato a {{ name }} e {{ otherEmailsCount }}+","invite":"Invita","inviteByEmail":"Invita via email","inviteByEmailOrNumber":"Invite by email or sms","inviteCall":"Invita a partecipare alla chiamata","inviteCallDefaultMessage":"Sei invitato a partecipare alla nostra videochiamata. Fare clic sul collegamento per connettersi immediatamente.","inviteClipAudioDefaultMessage":"Hey! Please record an audio message now and provide us with more context to assist you better.","inviteClipDefaultMessage":"Registra subito il tuo videoclip e forniscici pi\xf9 contesto per assisterti meglio.","inviteClipPhotoDefaultMessage":"Hey! Please take a photo and provide us with more context to assist you better.","inviteClipScreenDefaultMessage":"Hey! Please record your screen now and provide us with more context to assist you better.","inviteClipVideoDefaultMessage":"Hey! Please record your video now and provide us with more context to assist you better.","invitePeople":"Invite people","inviteRecordAudio":"Record an audio","inviteRecordClip":"Invita a registrare la clip","inviteRecordPhoto":"Take a photo","inviteRecordScreen":"Record a screen","inviteRecordVideo":"Record a video","joinTheCall":"Join the call","linkToJoinCall":"Link per partecipare alla chiamata","linkToRecordAClip":"Collegamento per registrare una clip","message":"Messaggio","sharePublicLink":"Condividi link"},"leave":{"endCall":"Termina la chiamata per tutti","leaveCall":"Lascia la chiamata","title":"Lasciare"},"loader":{"connection":"Connessione..."},"menu":{"new":"NUOVO","openNewTab":"Apri una nuova scheda","pictureInPicture":"Immagine nell\'immagine","quickConnect":"Connessione Rapida","screenSharing":"Condivisione dello schermo","startRecord":"Registra chiamata","stopRecord":"Interrompere la registrazione","title":"Men\xf9"},"misc":{"accept":"Accettare","add":"Add","audio":"Audio","camera":"Telecamera","cancel":"Annulla","confirm":"Confermare","decline":"Declinare","download":"Download","from":"Da","microphone":"Microfono","open":"Aprire","photo":"Foto","proceed":"Procedere","remove":"Rimuovere","screen":"Schermo","screenshot":"Schermata","someone":"Qualcuno","speaker":"Altoparlante","user":"Utente","video":"Video","you":"Voi"},"notifications":{"agentJoinError":"Si \xe8 verificato un errore cercando di entrare nella conversazione come agente","blockedMicrophonePopup":"SnapCall ha bisogno di accedere alla fotocamera e al microfono. Fare clic sull\'icona della fotocamera bloccata nella barra degli indirizzi del browser.","blockedMicrophonePopupTitle":"La tua fotocamera e il tuo microfono sono bloccati","cameraError":"Si \xe8 verificato un errore durante l\'attivazione della fotocamera","cameraRotateError":"Si \xe8 verificato un errore durante la rotazione della fotocamera","close":"Chiudere","connectedTo":"Connesso a {{name}}","criticalError":"Si \xe8 verificato un errore critico (errore {{code}}).","error":"Error","errorOccuredCode":"An error occured (error {{code}}).","invitationSentToFailed":"Sent to {{ name }} failed.","microphoneError":"Si \xe8 verificato un errore durante l\'attivazione del microfono","noCamera":"Nessuna fotocamera disponibile","recording":"Registrazione in corso","reload":"Ricaricare","screensharingError":"Si \xe8 verificato un errore durante l\'attivazione della condivisione dello schermo","uploadError":"An error occured during the upload, please try again later."},"quickConnect":{"scan":"Scansiona questo codice QR con il telefono per aprire la chiamata.","scanTitle":"Scansiona il codice QR","title":"Connessione Rapida"},"recorder":{"addMore":"Aggiungere altro","addNewClip":"Aggiungi una nuova clip","allowAccess":"Consenti accesso","allowCamMicAccess":"Consenti l\'accesso a cam/mic","allowScreenShareAccess":"Consenti accesso alla condivisione dello schermo","attachElements_one":"Allega {{ type }} al biglietto","attachElements_other":"Allega {{ count }} elementi","audioInstructionsTitle":"Pronti per registrare un messaggio vocale?","audioLevelNotification":{"noSound":{"description":"Assicurati che il microfono sia attivato.","title":"Nessun suono rilevato."},"shortVideo":{"description":"Questo video \xe8 troppo breve per avere un contesto.","title":"Breve video."},"spokenWordsQuestion":{"description":"Il tuo video include abbastanza dettagli parlati?","title":"Parole pronunciate."},"spokenWordsWarning":{"description":"La clip include a malapena parole pronunciate.","title":"Nessuna parola detta."}},"audioLevelToast":{"continueSpeaking":"Continua a parlare per un contesto pi\xf9 chiaro.","noSound":"Nessun suono rilevato.","rememberSpeaking":"Ricordati di parlare per fornire il contesto."},"chooseWhatYouWantToShare":"Choose what you want to share","chooseWhatYouWantToShareDescription":"Select the screen or tab you want to share and start recording.","clipCount_one":"{{ count }} clip","clipCount_other":"{{ count }} clips","clipSubmissionDescription":"Grazie per aver utilizzato SnapCall.","clipSubmissionTitle_one":"La tua clip \xe8 stata inviata","clipSubmissionTitle_other":"I tuoi clip sono stati inviati","confirmRemovalDescription":"Sei sicuro di voler rimuovere questa foto/video? Questa azione non pu\xf2 essere annullata.","confirmRemovalTitle":"Conferma rimozione","elementBeingProcessed":"Attendi un momento mentre il tuo {{ type }} viene elaborato...","elementCaptureSuccess":"{{ type }} catturato con successo","elementRecordedAndAttached":"La tua clip \xe8 stata inviata e allegata al thread.","goBackToTicket":"Torna al biglietto","instructions":{"allowAccessOnPrompt":"<bold>Consenti l\'accesso</bold> alla fotocamera e al microfono.","multiplePhotos":"Scatta <bold>una foto o pi\xf9</bold> di una per i dettagli.","privacyPolicy":"Procedendo, accetti la nostra <bold>Politica sulla Privacy.</bold>","reviewAndSendAudios":"<bold>Rivedi i tuoi audio</bold> e verranno inviati automaticamente a noi.","reviewAndSendPhotos":"<bold>Convalida le tue foto</bold> e verranno inviate automaticamente a noi.","reviewAndSendVideos":"<bold>Convalida i tuoi video</bold> e verranno inviati automaticamente a noi.","screenShareInstruction":"Seleziona lo schermo o la finestra che desideri registrare.","selectScreenshare":"Tap Record my screen and select the screen or window you want to record.","speakClearly":"<bold>Parla chiaramente</bold> e d\xec ci\xf2 che devi comunicare.","speakDuringRecord":"You can speak while recording to add details.","stopScreenOnFinish":"Press the Stop button when finished. The video will be sent to us automatically.","tapAudioButton":"<bold>Premi il pulsante di registrazione</bold> per iniziare a registrare il tuo messaggio vocale.","tapStopVideoButton":"<bold>Premi Stop</bold> quando hai finito.","tapVideoButton":"<bold>Premi Registra</bold>. Ricordati di commentare.","videoSpeech":"Puoi <bold>parlare durante</bold> la registrazione per aggiungere dettagli."},"limit":"Registrazione video limitata a 5 min.","logIn":"Login","loggedAs":"Registrato come","mediaCount_one":"{{ count }} media","mediaCount_other":"{{ count }} media","mediaSent_one":"Your media has been sent","mediaSent_other":"Your media has been sent","noCameraAccess":"No camera access","noCameraAccessDescription":"No camera access Allow camera access in your browser.","noCameraAndMicrophoneAccess":"No camera & microphone access","noCameraAndMicrophoneAccessDescription":"No camera & microphone access Allow microphone and camera access in your browser.","noMicrophoneAccess":"No microphone access","noMicrophoneAccessDescription":"No microphone access Allow microphone access in your browser.","okay":"Okay","openThread":"Apri il thread","permissionDeniedDescription":"Senza l\'accesso alla fotocamera e al microfono, non \xe8 possibile scattare foto o registrare video da condividere con il team di supporto. Si prega di concedere l\'accesso nelle impostazioni del browser.","permissionDeniedTitle":"Qualcosa \xe8 andato storto!","photoInstructionsTitle":"Pronto a scattare una foto?","replyAttached":"La tua risposta \xe8 stata allegata","scanQRCode":"Scansiona questo codice QR con un dispositivo compatibile.","screenShareInstructionsTitle":"Pronto a condividere il tuo schermo?","screenTitle":"Pronto a catturare il tuo schermo?","send":"Invia","sendElements_one":"Invia {{ type }}","sendElements_other":"Invia {{ count }} elementi","showQrCode":"Show QR code","startScreenRecording":"Start screen recording","startScreenShareButton":"Registra il mio schermo","stopScreenShareButton":"Ferma registrazione","submissionDescription":"La tua foto/video \xe8 stata inviata con successo. La esamineremo e ti risponderemo al pi\xf9 presto.","submissionTitle":"Grazie per il tuo invio!","switchToMobileDescription":"Goditi un\'esperienza ancora pi\xf9 pratica utilizzando il tuo telefono per scattare foto e registrare video.","switchToMobileTitle":"Passa al tuo dispositivo mobile","takeNewElement":"Cattura un nuovo {{ type }}","upload":"Upload","useDesktopVersion":"Usa la versione desktop","videoInstructionsTitle":"Pronto a registrare un video?","waitVideo":"Potrebbero essere necessari fino a 15 secondi affinch\xe9 un video sia pronto."},"recordingPopup":{"dismiss":"Chiudi","recordingStartText":"Questa chiamata verr\xe0 registrata a breve. Se preferisci non essere registrato, sei libero di lasciare la chiamata in questo momento.","recordingStartTitle":"Registrazione in procinto di iniziare."},"requestAccess":{"admit":"Ammettere","defaultName":"Un utente","deny":"Negare","wantToJoin":"<bold>{{name}}</bold> vuole unirsi!"},"requestDevice":{"askForDevice":"Ask for {{device}}","declined":"La tua richiesta \xe8 stata rifiutata.","deviceActivated":"{{device}} activated","deviceActivationDeclined":"{{device}} activation declined","request":"{{user}} vorrebbe condividere il tuo {{device}}","requestInput":"Richiesta di attivazione","timedOut":"La tua richiesta non ha ricevuto risposta","userDeclined":"{{user}} ha rifiutato la tua richiesta","userWouldLikeYouToActivateYourDevice":"{{name}} would like you to activate your {{device}}.","waitingForDevice":"Waiting for {{name}}\'s {{device}}"},"settings":{"devices":"Dispositivi","help":"Aiuto","helpCenter":"Accedi all\'Assistenza","language":"Linguaggio","preferences":"Preferenze","selectYourCamera":"Select your preferred camera","selectYourLanguage":"Select your preferred language","selectYourMicrophone":"Select your preferred microphone","title":"Impostazioni"},"shareLink":{"failed":"Si \xe8 verificato un errore durante l\'invio del link","invalid":"Collegamento non valido","invoice":"{{user}} ti ha inviato una fattura.","pay":"Paga","poweredBy":"Proposto da","sentToUser":"Link inviato a {{user}}","sentToUsers":"Link inviato ai partecipanti","title":"Condividi un link","title2":"Condividi un link"},"sharedHistory":{"shared":"Condiviso con te"},"snapshot":{"aSnapshotHasBeenShared":"A snapshot has been shared.","error":"Si \xe8 verificato un errore durante l\'invio della schermata","save":"Salva l\'immagine","sentToUser":"Schermata inviata a {{user}}","sentToUsers":"Schermanta inviata ai partecipanti","shared":"Schermata inviata","title":"Schermata"},"videoMenu":{"blockedCamera":"La fotocamera \xe8 bloccata.","cameraPermissions":"Si prega di accettare la condivisione della fotocamera prima di accedere a queste opzioni.","highDef":"Alta definizione (720p)","lowDef":"Definizione bassa (240p)","sendResolution":"Risoluzione inviata (max)","standardDef":"Definizione standard (480p)","title":"Video"},"virtualBackground":{"setBackground":"Imposta sfondo","title":"Sfondo virtuale"},"youtube":{"invalid":"URL YouTube non valido","share":"Guarda ora","title":"Vedere Assieme","url":"URL YOUTUBE"}}');
|
|
380
|
+
var $988a925d2edf1eb7$exports = {};
|
|
381
|
+
$988a925d2edf1eb7$exports = JSON.parse('{"audioMenu":{"blockedMicrophone":"Das Mikrofon ist blockiert.","microphonePermissions":"Bitte akzeptieren Sie die gemeinsame Nutzung des Mikrofons, bevor Sie auf diese Optionen zugreifen.","title":"Audio"},"blockedFeature":{"descriptionConnected":"Bei einem kostenlosen Tarif kannst du diese Funktion nicht nutzen. Aktualisieren Sie Ihren Tarif, um alle In-Call-Funktionen nutzen zu k\xf6nnen.","descriptionGuest":"Sie nehmen an einem Anruf teil, der mit einer kostenlosen Version von SnapCall erstellt wurde. Diese Funktion ist nur in einer Pro-Version verf\xfcgbar.","dismissConnected":"Auf Pro upgraden","dismissGuest":"Okay","titleConnected":"Auf Pro upgraden","titleGuest":"Funktion nicht verf\xfcgbar"},"common":{"new":"New"},"copyLink":{"copied":"Link in die Zwischenablage kopiert","copy":"Copy","description":"Link in die Zwischenablage kopieren","error":"Beim Versuch, in die Zwischenablage zu kopieren, ist ein Fehler aufgetreten","title":"LINK KOPIEREN"},"endView":{"addAdditionalMedia":"Add additional media","allowsYouToShareMoreMedia":"This option allows you to share one or more media to add more context.","callEnded":"Der Anruf ist beendet","callIsOver":"Der Anruf ist beendet oder gel\xf6scht","callLeft":"Sie haben den Anruf verlassen","callNoLongerActive":"Dieser Anruf ist nicht mehr aktiv. Danke f\xfcr Ihre Teilnahme.","full":"Sie k\xf6nnen an diesem Anruf nicht teilnehmen","fullDescription":"Das Zimmer ist voll. Bitte versuchen Sie sp\xe4ter, dem Anruf beizutreten.","goBack":"Geh zur\xfcck zum Anruf","howWasYourExperience":"How was your experience?","ifMistakeRejoin":"Wenn dies ein Fehler war, k\xf6nnen Sie \xfcber die Schaltfl\xe4che unten erneut beitreten.","invalidLink":"Ung\xfcltiger Link","invalidOrExpired":"Dieser Link ist ung\xfcltig oder abgelaufen.","openDashboard":"Dashboard \xf6ffnen","pleaseRateYourExperienceBelow":"Please rate your experience below","thankYouForYourFeedback":"Thank you for your feedback.","tooLate":"Du bist zu sp\xe4t gekommen","yourFeedbackHelpsUs":"Your feedback helps us improve. See you soon!"},"gdpr":{"recordedWarning":"Um die Qualit\xe4t unseres Service zu verbessern, wird dieser Anruf aufgezeichnet."},"greeting":{"askToJoin":"Bitten Sie um Beitritt","askingLetIn":"Ich bitte darum, eingelassen zu werden...","cameraDisabled":"Kamera ist aus","cameraEnabled":"Kamera ist an","canceledCallRequest":"Die Anrufanfrage wird storniert und Sie werden auf die Seite zur Anrufplanung weitergeleitet.","cantJoinCall":"Sie k\xf6nnen an diesem Anruf nicht teilnehmen","cantWait":"Kannst du es kaum erwarten?","cantWaitLeaveMessage":"Kannst du es kaum erwarten? Sie k\xf6nnen eine Nachricht hinterlassen und Sie werden so schnell wie m\xf6glich kontaktiert.","clickOnLock":"Klicken Sie in der Leiste Ihres Browsers auf das <1> </1> Schlosssymbol.","footerDescription":"Lernen Sie SnapCall kennen, den einfachsten Weg, um Echtzeitvideos zu einer Plattform, einem Produkt oder einer Dienstleistung hinzuzuf\xfcgen.","footerTitle":"Bereitgestellt von SnapCall","leaveMessage":"Hinterlassen Sie eine Nachricht","mainTitle":"Willkommen bei SnapCall","mediaDenied":"Zugriff auf Mikrofon und Kamera verweigert","microphoneDisabled":"Mikrofon ist aus","microphoneEnabled":"Mikrofon ist an","name":"Nome","nameDescription":"Dieser Name wird allen Teilnehmern des Anrufs angezeigt.","namePlaceholder":"z. B. Lucy oder Peter","nameSubmit":"An der Konversation teilnehmen","recordVideo":"Video aufzeichnen","recordVoice":"Stimme aufnehmen","requestACall":"Fordern Sie einen Anruf an","scheduleACall":"Einen Anruf vereinbaren","setting":"Einstellungen","sideDescription":"Bitte gib deinen Namen ein und passe deine Kamera und dein Mikrofon an","sideTitle":"Halt dich fest, du bist der N\xe4chste!","someoneDenied":"Jemand in dem Anruf hat Ihre Beitrittsanfrage abgelehnt.","takeFewMinute":"Dies kann je nach Verf\xfcgbarkeit der Teilnehmer einige Minuten dauern.","whatYouCanDo":"Folgendes k\xf6nnen Sie tun","youWillJoinWhenSomeoneLetsYou":"Sie nehmen an dem Anruf teil, wenn Sie jemand von {{ companyName }} hereinl\xe4sst."},"header":{"free":"Kostenlose Version"},"invitePeople":{"PublicLink":"\xd6ffentlicher Link","addEmailToInvite":"F\xfcgen Sie eine E-Mail zur Einladung hinzu.","addEmails":"E-Mails hinzuf\xfcgen...","copyCallLinkDescription":"Kopieren Sie diesen Link und senden Sie ihn an alle, die Sie zur Teilnahme an der Telefonkonferenz einladen m\xf6chten.","copyClipLinkDescription":"Kopieren Sie diesen Link und senden Sie ihn an alle, die Sie zur Aufnahme eines Clips einladen m\xf6chten.","email":"E-Mail","emailPlaceholder":"Z. B. john@acme.com","emailsOrNumberPlaceholder":"Z. B. john@acme.com oder +33612345678","error":"Fehler beim Senden, bitte versuchen Sie es sp\xe4ter erneut.","invalidEmail":"Ung\xfcltiges E-Mail-Format.","invalidEmailOrNumber":"Ung\xfcltiges E-Mail- oder Zahlenformat.","invitationSentTo_one":"Gesendet an {{ name }}","invitationSentTo_other":"Gesendet an {{ name }} und {{ otherEmailsCount }} +","invite":"Einladen","inviteByEmail":"Per E-Mail einladen","inviteByEmailOrNumber":"Per E-Mail oder SMS einladen","inviteCall":"Zum Telefongespr\xe4ch einladen","inviteCallDefaultMessage":"Hallo! Du bist eingeladen, an unserem Videoanruf teilzunehmen. Klicken Sie auf den Link, um sofort eine Verbindung herzustellen.","inviteClipAudioDefaultMessage":"Hallo! Bitte nehmen Sie jetzt eine Audionachricht auf und geben Sie uns mehr Kontext, um Ihnen besser helfen zu k\xf6nnen.","inviteClipDefaultMessage":"Hallo! Bitte nehmen Sie jetzt Ihr Video auf und geben Sie uns mehr Kontext, um Ihnen besser helfen zu k\xf6nnen.","inviteClipPhotoDefaultMessage":"Hallo! Bitte machen Sie ein Foto und geben Sie uns mehr Kontext, um Ihnen besser helfen zu k\xf6nnen.","inviteClipScreenDefaultMessage":"Hallo! Bitte nehmen Sie jetzt Ihren Bildschirm auf und geben Sie uns mehr Kontext, um Ihnen besser helfen zu k\xf6nnen.","inviteClipVideoDefaultMessage":"Hallo! Bitte nehmen Sie jetzt Ihr Video auf und geben Sie uns mehr Kontext, um Ihnen besser helfen zu k\xf6nnen.","invitePeople":"Leute einladen","inviteRecordAudio":"Nehmen Sie ein Audio auf","inviteRecordClip":"Laden Sie zum Aufnehmen eines Clips ein","inviteRecordPhoto":"Mache ein Foto","inviteRecordScreen":"Nehmen Sie einen Bildschirm auf","inviteRecordVideo":"Nehmen Sie ein Video auf","joinTheCall":"Nehmen Sie an der Telefonkonferenz teil","linkToJoinCall":"Link, um an der Telefonkonferenz teilzunehmen","linkToRecordAClip":"Link zum Aufnehmen eines Clips","message":"Nachricht","sharePublicLink":"\xd6ffentlichen Link teilen"},"leave":{"endCall":"Anruf f\xfcr alle beenden","leaveCall":"Anruf hinterlassen","title":"Verlassen Sie"},"loader":{"connection":"Verbindung wird hergestellt..."},"menu":{"new":"New","openNewTab":"Neuen Tab \xf6ffnen","pictureInPicture":"Bild-im-Bild","quickConnect":"Schnelle Verbindung","screenSharing":"Bildschirm\xfcbertragung","startRecord":"Anruf aufzeichnen","stopRecord":"Aufnahme beenden","title":"Men\xfc"},"misc":{"accept":"Akzeptieren","add":"Add","audio":"Audio","camera":"Kamera","cancel":"Abbrechen","confirm":"Confirm","decline":"R\xfcckgang","download":"Download","from":"vom","microphone":"Mikrofon","open":"\xd6ffnen Sie","photo":"Foto","proceed":"Proceed","remove":"entfernen","screen":"Bildschirm","screenshot":"Bildschirmfoto","someone":"Jemand","speaker":"Sprecher","user":"Nutzer","video":"Video","you":"Du"},"networkIssue":{"description":"The clip information may be damaged.","title":"Network issue"},"notifications":{"agentJoinError":"Beim Versuch, dem Raum als Agent beizutreten, ist ein Fehler aufgetreten","blockedMicrophonePopup":"SnapCall ben\xf6tigt Zugriff auf Ihre Kamera und Ihr Mikrofon. Klicken Sie in der Adressleiste Ihres Browsers auf das Symbol \u201EKamera blockiert\u201C.","blockedMicrophonePopupTitle":"Kamera und Mikrofon sind blockiert","cameraError":"Beim Versuch, die Kamera umzuschalten, ist ein Fehler aufgetreten","cameraRotateError":"Beim Versuch, die Kamera zu drehen, ist ein Fehler aufgetreten","close":"Schlie\xdfen","connectedTo":"Verbunden mit {{name}}","criticalError":"Ein kritischer Fehler ist aufgetreten (Fehler{{code}}).","error":"Fehler ","errorOccuredCode":"Ein Fehler ist aufgetreten (Fehler{{code}}).","invitationSentToFailed":"Gesendet an {{ name }} fehlgeschlagen.","microphoneError":"Beim Versuch, das Mikrofon umzuschalten, ist ein Fehler aufgetreten","noCamera":"Keine Kamera verf\xfcgbar","recording":"Aufnahme l\xe4uft","reload":" Erneut laden ","screensharingError":"Beim Versuch, die Bildschirm\xfcbertragung umzuschalten, ist ein Fehler aufgetreten","uploadError":"Beim Upload ist ein Fehler aufgetreten. Bitte versuchen Sie es sp\xe4ter erneut."},"quickConnect":{"scan":"Scannen Sie diesen QR-Code mit Ihrer Handykamera, um den Anruf zu \xf6ffnen.","scanTitle":"QR-Code scannen","title":"Schnelle Verbindung"},"recorder":{"addMore":"Weitere hinzuf\xfcgen","addNewClip":"Neuen Clip hinzuf\xfcgen","allowAccess":"Zugriff erlauben","allowCamMicAccess":"Zugriff auf Kamera/Mikrofon erlauben","allowScreenShareAccess":"Zugriff auf Bildschirm\xfcbertragung zulassen","attachElements_one":"Dem Ticket {{ type }} beif\xfcgen","attachElements_other":"{{ count }}Elemente anh\xe4ngen","audioInstructionsTitle":"Bereit, eine Sprachnachricht aufzunehmen?","audioLevelNotification":{"noSound":{"description":"Vergewissern Sie sich, dass Ihr Mikrofon aktiviert ist.","title":"Es wurde kein Ton erkannt."},"shortVideo":{"description":"Dieses Video ist zu kurz, um den Kontext zu verstehen.","title":"Kurzes Video."},"spokenWordsQuestion":{"description":"Enth\xe4lt Ihr Video gen\xfcgend gesprochene Details?","title":"Gesprochene Worte."},"spokenWordsWarning":{"description":"Der Clip enth\xe4lt kaum gesprochene Worte.","title":"Keine gesprochenen Worte."}},"audioLevelToast":{"continueSpeaking":"Sprechen Sie weiter, um einen klareren Kontext zu erhalten.","noSound":"Es wurde kein Ton erkannt.","rememberSpeaking":"Denken Sie daran, zu sprechen, um den Kontext zu vermitteln."},"chooseWhatYouWantToShare":"W\xe4hle aus, was du teilen m\xf6chtest","chooseWhatYouWantToShareDescription":"W\xe4hlen Sie den Bildschirm oder die Registerkarte aus, die Sie teilen m\xf6chten, und starten Sie die Aufnahme.","clipCount_one":"{{ count }}Clip","clipCount_other":"{{ count }}Clips","clipSubmissionDescription":"Vielen Dank, dass Sie SnapCall verwenden.","clipSubmissionTitle_one":"Ihr Clip wurde gesendet","clipSubmissionTitle_other":"Deine Clips wurden gesendet","confirmRemovalDescription":"Bist du sicher, dass du dieses Foto/Video l\xf6schen m\xf6chtest? Diese Aktion kann nicht r\xfcckg\xe4ngig gemacht werden.","confirmRemovalTitle":"L\xf6schen best\xe4tigen","elementBeingProcessed":"Bitte warten Sie, Ihre {{ type }} wird bearbeitet...","elementCaptureSuccess":"{{ type }}erfolgreich erfasst","elementRecordedAndAttached":"Ihr Clip wurde gesendet und an den Thread angeh\xe4ngt.","feelFreeToTalkGiveMoreContext":"\uD83D\uDDE3\uFE0F Feel free to talk to give me more context.","goBackToTicket":"Gehe zur\xfcck zum Ticket","instructions":{"allowAccessOnPrompt":"<bold>Erlauben Sie den Zugriff auf Kamera und Mikrofon</bold>, wenn Sie dazu aufgefordert werden.","multiplePhotos":"Nehmen Sie ein oder mehrere <bold> Fotos auf, </bold> um weitere Informationen zu erhalten, und \xfcberpr\xfcfen Sie es dann.","privacyPolicy":"Indem Sie fortfahren, stimmen Sie unseren <bold> Datenschutzbestimmungen zu</bold>.","reviewAndSendAudios":"<bold>\xdcberpr\xfcfe deine Audios </bold> und sie werden automatisch an uns gesendet.","reviewAndSendPhotos":"<bold>Best\xe4tigen Sie Ihre Fotos </bold> und sie werden automatisch an uns gesendet.","reviewAndSendVideos":"<bold>\xdcberpr\xfcfe deine Videos </bold> und sie werden automatisch an uns gesendet.","screenShareInstruction":"W\xe4hlen Sie den Bildschirm oder das Fenster aus, das Sie aufnehmen m\xf6chten.","selectScreenshare":"Tippen Sie auf Meinen Bildschirm aufnehmen und w\xe4hlen Sie den Bildschirm oder das Fenster aus, das Sie aufnehmen m\xf6chten.","speakClearly":"<bold>Sprechen Sie deutlich </bold> und sagen Sie, was Sie vermitteln m\xfcssen.","speakDuringRecord":"Sie k\xf6nnen w\xe4hrend der Aufnahme sprechen, um Details hinzuzuf\xfcgen.","stopScreenOnFinish":"Dr\xfccken Sie die Stopp-Taste, wenn Sie fertig sind. Das Video wird automatisch an uns gesendet.","tapAudioButton":"<bold>Tippen Sie auf die Aufnahmetaste</bold>, um mit der Aufnahme Ihrer Audionachricht zu beginnen.","tapStopVideoButton":"<bold>Tippe auf Stopp</bold>, wenn du fertig bist.","tapVideoButton":"<bold>Tippen Sie auf die Aufnahmetaste</bold>, um zu beginnen, und Sie k\xf6nnen gerne einen Kommentar abgeben.","videoSpeech":"Sie k\xf6nnen w\xe4hrend </bold> der Aufnahme <bold> sprechen, um zus\xe4tzliche Informationen bereitzustellen."},"limit":"Videoaufnahme begrenzt auf 5 min.","logIn":"LOG IN","loggedAs":"Eingeloggt als","mediaCount_one":"{{ count }}Medien","mediaCount_other":"{{ count }}Medien","mediaSent_one":"Ihre Medien wurden gesendet","mediaSent_other":"Ihre Medien wurden gesendet","mySuggestion":"My suggestion","noCameraAccess":"Kein Kamerazugriff","noCameraAccessDescription":"Kein Kamerazugriff Erlauben Sie den Kamerazugriff in Ihrem Browser.","noCameraAndMicrophoneAccess":"Kein Kamera- und Mikrofonzugang","noCameraAndMicrophoneAccessDescription":"Kein Zugriff auf Kamera und Mikrofon Erlauben Sie den Zugriff auf Mikrofon und Kamera in Ihrem Browser.","noMicrophoneAccess":"Kein Mikrofonzugang","noMicrophoneAccessDescription":"Kein Mikrofonzugriff Erlauben Sie den Mikrofonzugriff in Ihrem Browser.","okay":"Okay","openThread":"Thread \xf6ffnen","permissionDeniedDescription":"Ohne Zugriff auf Kamera und Mikrofon k\xf6nnen Sie keine Fotos oder Videos aufnehmen, um sie mit dem Support-Team zu teilen. Bitte gew\xe4hren Sie Zugriff in Ihren Browsereinstellungen.","permissionDeniedTitle":"Etwas ist schief gelaufen!","photoInstructionsTitle":"Bereit, ein Foto zu machen?","recordNewMedia":"Record new media","replyAttached":"Ihre Antwort wurde angeh\xe4ngt","scanQRCode":"Scannen Sie diesen QR-Code mit einem kompatiblen Ger\xe4t.","screenShareInstructionsTitle":"Bereit, deinen Bildschirm zu teilen?","screenTitle":"Bereit, deinen Bildschirm aufzunehmen?","send":"Absschicken","sendElements_one":"Senden {{ type }}","sendElements_other":"{{ count }}Elemente senden","showQrCode":"QR Code anzeigen","startByClickingOnTheButton":"Start by clicking on the round button below! \uD83D\uDC47","startScreenRecording":"Bildschirmaufnahme starten","startScreenShareButton":"Meinen Bildschirm aufnehmen","stopScreenShareButton":"Aufnahme beenden","submissionDescription":"Ihr Foto/Video wurde erfolgreich eingereicht. Wir werden es \xfcberpr\xfcfen und uns in K\xfcrze bei Ihnen melden.","submissionTitle":"Danke f\xfcr deine Einreichung!","switchToMobileDescription":"Erleben Sie mehr Komfort, indem Sie Ihr Telefon zum Aufnehmen von Fotos und Videos verwenden.","switchToMobileTitle":"Wechseln Sie zu Ihrem Mobilger\xe4t","takeNewElement":"Erfassen Sie ein neues {{ type }}","thanksForYourMedia":"Thanks for your media!","upload":"Upload","useDesktopVersion":"Verwenden Sie die Desktop-Version","videoBotError":"Sorry, an error has occured.","videoBotThinking":"Thinking...","videoInstructionsTitle":"Bereit, ein Video aufzunehmen?","waitVideo":"Es kann bis zu 15 Sekunden dauern, bis ein Video fertig ist.","yourMedia":"Your media"},"recordingPopup":{"dismiss":"Abweisen","recordingStartText":"Dieser Anruf wird in K\xfcrze aufgezeichnet. Wenn Sie nicht aufgezeichnet werden m\xf6chten, k\xf6nnen Sie den Anruf gerne zu diesem Zeitpunkt verlassen.","recordingStartTitle":"Die Aufnahme beginnt gleich."},"requestAccess":{"admit":"Gib zu","defaultName":"Ein Nutzer","deny":"Verweigern","wantToJoin":"<bold>{{name}}</bold>will mitmachen!"},"requestDevice":{"askForDevice":"Ask for {{device}}","declined":"Ihre Anfrage wurde abgelehnt.","deviceActivated":"{{device}} activated","deviceActivationDeclined":"{{device}} activation declined","request":"{{user}}Ich m\xf6chte, dass du deine teilst {{device}}","requestInput":"Eingabeger\xe4te anfordern","timedOut":"Ihre Anfrage ist abgelaufen.","userDeclined":"{{user}}hat Ihre Anfrage abgelehnt.","userWouldLikeYouToActivateYourDevice":"{{name}} would like you to activate your {{device}}.","waitingForDevice":"Waiting for {{name}}\'s {{device}}"},"settings":{"devices":"Ger\xe4te","help":"Hilfe","helpCenter":"Gehe zum Hilfecenter","language":"Sprache","preferences":"Pr\xe4ferenzen","selectYourCamera":"W\xe4hlen Sie Ihre bevorzugte Kamera","selectYourLanguage":"W\xe4hlen Sie Ihre gew\xfcnschte Sprache","selectYourMicrophone":"W\xe4hlen Sie Ihr bevorzugtes Mikrofon","title":"Einstellungen"},"shareLink":{"failed":"Link konnte nicht gesendet werden","invalid":"Ung\xfcltiger Link","invoice":"{{user}}Ich habe dir eine Rechnung geschickt.","pay":"Zahlen","poweredBy":"Angetrieben von","sentToUser":"Link gesendet an {{user}}","sentToUsers":"Link an Benutzer gesendet","title":"Link teilen","title2":"Einen Link teilen"},"sharedHistory":{"shared":"Mit dir geteilt"},"snapshot":{"aSnapshotHasBeenShared":"A snapshot has been shared.","error":"Beim Versuch, den Snapshot zu senden, ist ein Fehler aufgetreten","save":"Foto speichern","sentToUser":"Snapshot gesendet an {{user}}","sentToUsers":"Snapshot wurde an Benutzer gesendet.","shared":"Schnappschuss geteilt.","title":"Schnappschuss"},"videoMenu":{"blockedCamera":"Die Kamera ist blockiert.","cameraPermissions":"Bitte akzeptieren Sie die gemeinsame Nutzung von Kameras, bevor Sie auf diese Optionen zugreifen.","highDef":"Hochaufl\xf6send (720p)","lowDef":"Niedrige Aufl\xf6sung (240p)","sendResolution":"Aufl\xf6sung senden (maximal)","standardDef":"Standardaufl\xf6sung (480p)","title":"Video"},"virtualBackground":{"setBackground":"Hintergrund festlegen","title":"Virtueller Hintergrund"},"youtube":{"invalid":"Ung\xfcltige YouTube-URL","share":"Jetzt ansehen","title":"Zusammen ansehen","url":"YOUTUBE-URL"}}');
|
|
380
382
|
|
|
381
383
|
|
|
382
|
-
var $
|
|
383
|
-
$22b1236afc8abe7b$exports = JSON.parse('{"audioMenu":{"blockedMicrophone":"El micr\xf3fono est\xe1 bloqueado.","microphonePermissions":"Please accept microphone sharing before accessing these options.","title":"Audio"},"blockedFeature":{"descriptionConnected":"On a free plan, you can\'t use this feature. Upgrade your plan to enjoy all in-call features.","descriptionGuest":"You are participating in a call created with a free version of SnapCall. This feature is only available with a Pro version.","dismissConnected":"Upgrade to Pro","dismissGuest":"Okay","titleConnected":"Upgrade to Pro","titleGuest":"Feature not available"},"common":{"new":"new"},"copyLink":{"copied":"Link copied to clipboard","copy":"Copy","description":"Copy link into clipboard","error":"An error occured when trying to copy to clipboard","title":"Copy link"},"endView":{"addAdditionalMedia":"Add additional media","allowsYouToShareMoreMedia":"This option allows you to share one or more media to add more context.","callEnded":"The call has ended","callIsOver":"The call is over or deleted","callLeft":"You have left the call","callNoLongerActive":"This call is no longer active. Thank you for participating.","full":"You can\'t join this call","fullDescription":"The room is full. Please try to join the call later.","goBack":"Go back to call","howWasYourExperience":"How was your experience?","ifMistakeRejoin":"If this was a mistake, you can rejoin using the button below.","invalidLink":"Invalid link","invalidOrExpired":"This link is invalid or expired.","openDashboard":"Open dashboard","pleaseRateYourExperienceBelow":"Please rate your experience below","thankYouForYourFeedback":"Thank you for your feedback.","tooLate":"You arrived too late","yourFeedbackHelpsUs":"Your feedback helps us improve. See you soon!"},"gdpr":{"recordedWarning":"To improve the quality of our service, this call will be recorded."},"greeting":{"askToJoin":"Ask to join","askingLetIn":"Asking to be let in...","cameraDisabled":"Camera is Off","cameraEnabled":"Camera is On","canceledCallRequest":"The call request will be canceled and you will be redirected to the call scheduling page.","cantJoinCall":"You can\u2019t join this call","cantWait":"Can\'t wait?","cantWaitLeaveMessage":"Can\u2019t wait? You can leave a message and you will be contacted as soon as possible.","clickOnLock":"Click on the <1></1> lock icon in your browser\'s bar.","footerDescription":"Meet SnapCall, the easiest way to add real-time video to platform, product or service.","footerTitle":"Powered by SnapCall","leaveMessage":"Leave a message","mainTitle":"Welcome to SnapCall","mediaDenied":"Microphone and camera access denied","microphoneDisabled":"Microphone is Off","microphoneEnabled":"Microphone is On","name":"Name","nameDescription":"This name will be displayed to all participants in the call.","namePlaceholder":"Eg. Lucy or Peter","nameSubmit":"Join Conversation","recordVideo":"Record video","recordVoice":"Record voice","requestACall":"Request a call","scheduleACall":"Schedule a call","setting":"Settings","sideDescription":"Please enter your name and adjust your camera and microphone","sideTitle":"Hold tight, you\'re next!","someoneDenied":"Someone in the call denied your request to join.","takeFewMinute":"This may take a few minutes depending on the availability of the participants.","whatYouCanDo":"Here\u2019s what you can do","youWillJoinWhenSomeoneLetsYou":"You will join the call when someone from {{ companyName }} lets you in."},"header":{"free":"Free version"},"invitePeople":{"PublicLink":"Public link","addEmailToInvite":"Add an email to invite.","addEmails":"Add emails...","copyCallLinkDescription":"Copy this link and send it to anyone you wish to invite to join the call.","copyClipLinkDescription":"Copy this link and send it to anyone you wish to invite to record a clip.","email":"Email","emailPlaceholder":"Eg. john@acme.com","emailsOrNumberPlaceholder":"Eg. john@acme.com or +33612345678","error":"Failed to send, please try again later.","invalidEmail":"Invalid email format.","invalidEmailOrNumber":"Invalid email or number format.","invitationSentTo_one":"Sent to {{ name }}","invitationSentTo_other":"Sent to {{ name }} and {{ otherEmailsCount }}+","invite":"Invite","inviteByEmail":"Invite by email","inviteByEmailOrNumber":"Invite by email or sms","inviteCall":"Invite to join call","inviteCallDefaultMessage":"Hey! You\'re invited to join our video call. Click the link to connect instantly.","inviteClipAudioDefaultMessage":"Hey! Please record an audio message now and provide us with more context to assist you better.","inviteClipDefaultMessage":"Hey! Please record your video now and provide us with more context to assist you better.","inviteClipPhotoDefaultMessage":"Hey! Please take a photo and provide us with more context to assist you better.","inviteClipScreenDefaultMessage":"Hey! Please record your screen now and provide us with more context to assist you better.","inviteClipVideoDefaultMessage":"Hey! Please record your video now and provide us with more context to assist you better.","invitePeople":"Invite people","inviteRecordAudio":"Record an audio","inviteRecordClip":"Invite to record clip","inviteRecordPhoto":"Take a photo","inviteRecordScreen":"Record a screen","inviteRecordVideo":"Record a video","joinTheCall":"Join the call","linkToJoinCall":"Link to join the call","linkToRecordAClip":"Link to record a clip","message":"Message","sharePublicLink":"Share public link"},"leave":{"endCall":"End call for all","leaveCall":"Leave call","title":"Leave"},"loader":{"connection":"Connecting..."},"menu":{"new":"NEW","openNewTab":"Open new tab","pictureInPicture":"Picture-in-Picture","quickConnect":"Quick Connect","screenSharing":"Screen sharing","startRecord":"Record call","stopRecord":"Stop record","title":"Menu"},"misc":{"accept":"Accept","add":"Add","audio":"Audio","camera":"Camera","cancel":"Cancel","confirm":"Confirm","decline":"Decline","download":"Download","from":"From","microphone":"Microphone","open":"Open","photo":"Photo","proceed":"Proceed","remove":"Remove","screen":"Screen","screenshot":"Screenshot","someone":"Someone","speaker":"Speaker","user":"User","video":"Video","you":"You"},"notifications":{"agentJoinError":"An error occured while trying to join the room as an agent","blockedMicrophonePopup":"SnapCall requires access to your camera and microphone. Click the camera blocked icon in your browser\'s address bar.","blockedMicrophonePopupTitle":"Camera and microphone are blocked","cameraError":"An error occured when trying to toggle the camera","cameraRotateError":"An error occured when trying to rotate the camera","close":"Close","connectedTo":"Connected to {{name}}","criticalError":"A critical error has occurred (error {{code}}).","error":"Error","errorOccuredCode":"An error occured (error {{code}}).","invitationSentToFailed":"Sent to {{ name }} failed.","microphoneError":"An error occured when trying to toggle the microphone","noCamera":"No camera available","recording":"Recording in progress","reload":"Reload","screensharingError":"An error occured when trying to toggle screensharing","uploadError":"An error occured during the upload, please try again later."},"quickConnect":{"scan":"Scan this QR code with your phone camera to open the call.","scanTitle":"Scan QR Code","title":"Quick Connect"},"recorder":{"addMore":"Add more","addNewClip":"Add new clip","allowAccess":"Allow access","allowCamMicAccess":"Allow access to cam/mic","allowScreenShareAccess":"Allow access to screen sharing","attachElements_one":"Attach {{ type }} to ticket","attachElements_other":"Attach {{ count }} elements","audioInstructionsTitle":"Ready to record a voice message?","audioLevelNotification":{"noSound":{"description":"Make sure your microphone is activated.","title":"No sound detected."},"shortVideo":{"description":"This video is too short to get context.","title":"Short video."},"spokenWordsQuestion":{"description":"Does your video include enough spoken details?","title":"Spoken words."},"spokenWordsWarning":{"description":"The clip includes barely any spoken words.","title":"No spoken words."}},"audioLevelToast":{"continueSpeaking":"Continue speaking for clearer context.","noSound":"No sound detected.","rememberSpeaking":"Remember to speak to provide context."},"chooseWhatYouWantToShare":"Choose what you want to share","chooseWhatYouWantToShareDescription":"Select the screen or tab you want to share and start recording.","clipCount_one":"{{ count }} clip","clipCount_other":"{{ count }} clips","clipSubmissionDescription":"Thank you for using SnapCall.","clipSubmissionTitle_one":"Your clip has been sent","clipSubmissionTitle_other":"Your clips have been sent","confirmRemovalDescription":"Are you sure you want to delete this photo/video? This action cannot be undone.","confirmRemovalTitle":"Confirm deletion","elementBeingProcessed":"Please wait while your {{ type }} is being processed...","elementCaptureSuccess":"{{ type }} captured successfully","elementRecordedAndAttached":"Your clip has been sent and attached to the thread.","goBackToTicket":"Go back to ticket","instructions":{"allowAccessOnPrompt":"When prompted, <bold>allow access</bold> to camera and microphone.","multiplePhotos":"Take a <bold>photo or multiple</bold> for detail, then review.","privacyPolicy":"By proceeding, you agree to our <bold>Privacy Policy</bold>.","reviewAndSendAudios":"<bold>Review your audios</bold>, and they will be sent to us automatically.","reviewAndSendPhotos":"<bold>Validate your photos</bold>, and they will be sent to us automatically.","reviewAndSendVideos":"<bold>Review your videos</bold>, and they will be sent to us automatically.","screenShareInstruction":"Select the screen or window you wish to record.","selectScreenshare":"Tap Record my screen and select the screen or window you want to record.","speakClearly":"<bold>Speak clearly</bold> and say what you need to convey.","speakDuringRecord":"You can speak while recording to add details.","stopScreenOnFinish":"Press the Stop button when finished. The video will be sent to us automatically.","tapAudioButton":"<bold>Tap the record button</bold> to start recording your audio message.","tapStopVideoButton":"<bold>Tap stop</bold> when you are done.","tapVideoButton":"<bold>Tap the record button</bold> to begin and feel free to provide commentary.","videoSpeech":"You can <bold>talk during</bold> the recording to provide additional information."},"limit":"Video recording limited to 5 min.","logIn":"Log in","loggedAs":"Logged as","mediaCount_one":"{{ count }} media","mediaCount_other":"{{ count }} media","mediaSent_one":"Your media has been sent","mediaSent_other":"Your media has been sent","noCameraAccess":"No camera access","noCameraAccessDescription":"No camera access Allow camera access in your browser.","noCameraAndMicrophoneAccess":"No camera & microphone access","noCameraAndMicrophoneAccessDescription":"No camera & microphone access Allow microphone and camera access in your browser.","noMicrophoneAccess":"No microphone access","noMicrophoneAccessDescription":"No microphone access Allow microphone access in your browser.","okay":"Okay","openThread":"Open thread","permissionDeniedDescription":"Without access to the camera and microphone, you won\'t be able to capture photos or videos to share with the support team. Please grant access in your browser settings.","permissionDeniedTitle":"Something went wrong!","photoInstructionsTitle":"Ready to snap a photo?","replyAttached":"Your reply has been attached","scanQRCode":"Scan this QR code with a compatible device.","screenShareInstructionsTitle":"Ready to share your screen?","screenTitle":"Ready to capture your screen?","send":"Send","sendElements_one":"Send {{ type }}","sendElements_other":"Send {{ count }} elements","showQrCode":"Show QR code","startScreenRecording":"Start screen recording","startScreenShareButton":"Record my screen","stopScreenShareButton":"Stop recording","submissionDescription":"Your photo/video has been successfully submitted. We will review it and get back to you shortly.","submissionTitle":"Thank you for your submission!","switchToMobileDescription":"Experience greater convenience by using your phone to take photos and record videos.","switchToMobileTitle":"Switch to your mobile device","takeNewElement":"Capture a new {{ type }}","upload":"Upload","useDesktopVersion":"Use the desktop version","videoInstructionsTitle":"Ready to record a video?","waitVideo":"A video may take up to 15 seconds to be ready."},"recordingPopup":{"dismiss":"Dismiss","recordingStartText":"This call will be recorded shortly. If you\u2019d rather not be recorded, you\u2019re welcome to leave the call at this time.","recordingStartTitle":"Recording about to start."},"requestAccess":{"admit":"Admit","defaultName":"An user","deny":"Deny","wantToJoin":"<bold>{{name}}</bold> wants to join!"},"requestDevice":{"askForDevice":"Ask for {{device}}","declined":"Your request has been declined.","deviceActivated":"{{device}} activated","deviceActivationDeclined":"{{device}} activation declined","request":"{{user}} would like you to share your {{device}}","requestInput":"Request input devices","timedOut":"Your request has timed out.","userDeclined":"{{user}} has declined your request.","userWouldLikeYouToActivateYourDevice":"{{name}} would like you to activate your {{device}}.","waitingForDevice":"Waiting for {{name}}\'s {{device}}"},"settings":{"devices":"Devices","help":"Help","helpCenter":"Go to help center","language":"Language","preferences":"Preferences","selectYourCamera":"Select your preferred camera","selectYourLanguage":"Select your preferred language","selectYourMicrophone":"Select your preferred microphone","title":"Settings"},"shareLink":{"failed":"Failed to send link","invalid":"Invalid link","invoice":"{{user}} sent you an invoice.","pay":"Pay","poweredBy":"Powered by","sentToUser":"Link sent to {{user}}","sentToUsers":"Link sent to users","title":"Share link","title2":"Share a link"},"sharedHistory":{"shared":"Shared with you"},"snapshot":{"aSnapshotHasBeenShared":"A snapshot has been shared.","error":"An error occured when trying to send the snapshot","save":"Save photo","sentToUser":"Snapshot sent to {{user}}","sentToUsers":"Snapshot sent to users.","shared":"Snapshot shared.","title":"Snapshot"},"videoMenu":{"blockedCamera":"Camera is blocked.","cameraPermissions":"Please accept camera sharing before accessing these options.","highDef":"High definition (720p)","lowDef":"Low definition (240p)","sendResolution":"Send Resolution (maximum)","standardDef":"Standard definition (480p)","title":"Video"},"virtualBackground":{"setBackground":"Set Background","title":"Virtual Background"},"youtube":{"invalid":"Invalid YouTube URL","share":"Watch now","title":"Watch Together","url":"YOUTUBE URL"}}');
|
|
384
|
+
var $2cbf9baa8030dfd2$exports = {};
|
|
385
|
+
$2cbf9baa8030dfd2$exports = JSON.parse('{"audioMenu":{"blockedMicrophone":"Il tuo microfono \xe8 bloccato.","microphonePermissions":"Si prega di accettare la condivisione del microfono prima di accedere a queste opzioni.","title":"Audio"},"blockedFeature":{"descriptionConnected":"Su un piano gratuito, non puoi utilizzare questa funzione. Aggiorna il tuo piano per usufruire di tutte le funzionalit\xe0 in chiamata.","descriptionGuest":"Stai partecipando a una chiamata creata con una versione gratuita di SnapCall. Questa funzione \xe8 disponibile solo con una versione Pro.","dismissConnected":"L\'aggiornamento a Pro","dismissGuest":"Okay","titleConnected":"L\'aggiornamento a Pro","titleGuest":"Funzione non disponibile"},"common":{"new":"new"},"copyLink":{"copied":"Link copiato negli Appunti","copy":"Copia","description":"Copia il link negli appunti","error":"Si \xe8 verificato un errore durante la copia negli Appunti","title":"Copia il link"},"endView":{"addAdditionalMedia":"Add additional media","allowsYouToShareMoreMedia":"This option allows you to share one or more media to add more context.","callEnded":"Questa chiamata \xe8 finita","callIsOver":"Questa chiamata \xe8 finita o \xe8 stata eliminata","callLeft":"Hai lasciato la chiamata","callNoLongerActive":"This call is no longer active. Thank you for participating.","full":"Impossibile partecipare alla chiamata","fullDescription":"Limite d\'uso attenente.","goBack":"Torna alla chiamata","howWasYourExperience":"How was your experience?","ifMistakeRejoin":"If this was a mistake, you can rejoin using the button below.","invalidLink":"Invalid link","invalidOrExpired":"This link is invalid or expired.","openDashboard":"Open dashboard","pleaseRateYourExperienceBelow":"Please rate your experience below","thankYouForYourFeedback":"Thank you for your feedback.","tooLate":"Sei arrivato troppo tardi","yourFeedbackHelpsUs":"Your feedback helps us improve. See you soon!"},"gdpr":{"recordedWarning":"Per migliorare la qualit\xe0 del nostro servizio, questa chiamata verr\xe0 registrata."},"greeting":{"askToJoin":"Chiedi di partecipare","askingLetIn":"Chiedo di essere fatto entrare...","cameraDisabled":"Fotocamera \xe8 spenta","cameraEnabled":"Fotocamera \xe8 accesa","canceledCallRequest":"La richiesta di chiamata verr\xe0 annullata e verrai reindirizzato alla pagina di pianificazione delle chiamate","cantJoinCall":"Non puoi partecipare a questa chiamata","cantWait":"Non vedo l\'ora?","cantWaitLeaveMessage":"Non vedi l\'ora? Puoi lasciare un messaggio e sarai contattato il prima possibile.","clickOnLock":"Fai clic sull\'icona del lucchetto <1></1> nella barra del browser.","footerDescription":"Incontrare SnapCall, il modo pi\xf9 semplice per aggiungere video in tempo reale a piattaforma, prodotto o servizio.","footerTitle":"Offerto da SnapCall","leaveMessage":"Lascia un messaggio","mainTitle":"Benvenuto a SnapCall","mediaDenied":"Accesso al microfono e alla fotocamera negato","microphoneDisabled":"Microfono \xe8 spento","microphoneEnabled":"Microfono \xe8 acceso","name":"Nome","nameDescription":"Questo nome verr\xe0 visualizzato a tutti i partecipanti alla chiamata.","namePlaceholder":"Per esempio. Lucia o Pietro","nameSubmit":"Partecipa alla conversazione","recordVideo":"Registra video","recordVoice":"Registra voce","requestACall":"Richiedi una chiamata","scheduleACall":"Pianifica una chiamata","setting":"Impostazioni","sideDescription":"Inserisci il tuo nome e regola la fotocamera e il microfono","sideTitle":"Tieni duro, il prossimo sei tu!","someoneDenied":"Qualcuno nella chiamata ha rifiutato la tua richiesta di partecipazione.","takeFewMinute":"L\'operazione potrebbe richiedere alcuni minuti a seconda della disponibilit\xe0 dei partecipanti.","whatYouCanDo":"Ecco cosa puoi fare","youWillJoinWhenSomeoneLetsYou":"Parteciperai alla chiamata quando qualcuno di {{ companyName }} ti far\xe0 entrare."},"header":{"free":"Versione gratuita"},"invitePeople":{"PublicLink":"Public link","addEmailToInvite":"Aggiungi un\'e-mail per invitare.","addEmails":"Aggiungi email...","copyCallLinkDescription":"Copia questo link e invialo a chiunque desideri invitare a partecipare alla chiamata.","copyClipLinkDescription":"Copia questo collegamento e invialo a chiunque desideri invitare a registrare una clip.","email":"Email","emailPlaceholder":"Es. john@acme.com","emailsOrNumberPlaceholder":"Eg. john@acme.com or +33612345678","error":"Impossibile inviare, riprova pi\xf9 tardi.","invalidEmail":"Formato email non valido.","invalidEmailOrNumber":"Invalid email or number format.","invitationSentTo_one":"Inviato a {{ name }}","invitationSentTo_other":"Inviato a {{ name }} e {{ otherEmailsCount }}+","invite":"Invita","inviteByEmail":"Invita via email","inviteByEmailOrNumber":"Invite by email or sms","inviteCall":"Invita a partecipare alla chiamata","inviteCallDefaultMessage":"Sei invitato a partecipare alla nostra videochiamata. Fare clic sul collegamento per connettersi immediatamente.","inviteClipAudioDefaultMessage":"Hey! Please record an audio message now and provide us with more context to assist you better.","inviteClipDefaultMessage":"Registra subito il tuo videoclip e forniscici pi\xf9 contesto per assisterti meglio.","inviteClipPhotoDefaultMessage":"Hey! Please take a photo and provide us with more context to assist you better.","inviteClipScreenDefaultMessage":"Hey! Please record your screen now and provide us with more context to assist you better.","inviteClipVideoDefaultMessage":"Hey! Please record your video now and provide us with more context to assist you better.","invitePeople":"Invite people","inviteRecordAudio":"Record an audio","inviteRecordClip":"Invita a registrare la clip","inviteRecordPhoto":"Take a photo","inviteRecordScreen":"Record a screen","inviteRecordVideo":"Record a video","joinTheCall":"Join the call","linkToJoinCall":"Link per partecipare alla chiamata","linkToRecordAClip":"Collegamento per registrare una clip","message":"Messaggio","sharePublicLink":"Condividi link"},"leave":{"endCall":"Termina la chiamata per tutti","leaveCall":"Lascia la chiamata","title":"Lasciare"},"loader":{"connection":"Connessione..."},"menu":{"new":"NUOVO","openNewTab":"Apri una nuova scheda","pictureInPicture":"Immagine nell\'immagine","quickConnect":"Connessione Rapida","screenSharing":"Condivisione dello schermo","startRecord":"Registra chiamata","stopRecord":"Interrompere la registrazione","title":"Men\xf9"},"misc":{"accept":"Accettare","add":"Add","audio":"Audio","camera":"Telecamera","cancel":"Annulla","confirm":"Confermare","decline":"Declinare","download":"Download","from":"Da","microphone":"Microfono","open":"Aprire","photo":"Foto","proceed":"Procedere","remove":"Rimuovere","screen":"Schermo","screenshot":"Schermata","someone":"Qualcuno","speaker":"Altoparlante","user":"Utente","video":"Video","you":"Voi"},"networkIssue":{"description":"The clip information may be damaged.","title":"Network issue"},"notifications":{"agentJoinError":"Si \xe8 verificato un errore cercando di entrare nella conversazione come agente","blockedMicrophonePopup":"SnapCall ha bisogno di accedere alla fotocamera e al microfono. Fare clic sull\'icona della fotocamera bloccata nella barra degli indirizzi del browser.","blockedMicrophonePopupTitle":"La tua fotocamera e il tuo microfono sono bloccati","cameraError":"Si \xe8 verificato un errore durante l\'attivazione della fotocamera","cameraRotateError":"Si \xe8 verificato un errore durante la rotazione della fotocamera","close":"Chiudere","connectedTo":"Connesso a {{name}}","criticalError":"Si \xe8 verificato un errore critico (errore {{code}}).","error":"Error","errorOccuredCode":"An error occured (error {{code}}).","invitationSentToFailed":"Sent to {{ name }} failed.","microphoneError":"Si \xe8 verificato un errore durante l\'attivazione del microfono","noCamera":"Nessuna fotocamera disponibile","recording":"Registrazione in corso","reload":"Ricaricare","screensharingError":"Si \xe8 verificato un errore durante l\'attivazione della condivisione dello schermo","uploadError":"An error occured during the upload, please try again later."},"quickConnect":{"scan":"Scansiona questo codice QR con il telefono per aprire la chiamata.","scanTitle":"Scansiona il codice QR","title":"Connessione Rapida"},"recorder":{"addMore":"Aggiungere altro","addNewClip":"Aggiungi una nuova clip","allowAccess":"Consenti accesso","allowCamMicAccess":"Consenti l\'accesso a cam/mic","allowScreenShareAccess":"Consenti accesso alla condivisione dello schermo","attachElements_one":"Allega {{ type }} al biglietto","attachElements_other":"Allega {{ count }} elementi","audioInstructionsTitle":"Pronti per registrare un messaggio vocale?","audioLevelNotification":{"noSound":{"description":"Assicurati che il microfono sia attivato.","title":"Nessun suono rilevato."},"shortVideo":{"description":"Questo video \xe8 troppo breve per avere un contesto.","title":"Breve video."},"spokenWordsQuestion":{"description":"Il tuo video include abbastanza dettagli parlati?","title":"Parole pronunciate."},"spokenWordsWarning":{"description":"La clip include a malapena parole pronunciate.","title":"Nessuna parola detta."}},"audioLevelToast":{"continueSpeaking":"Continua a parlare per un contesto pi\xf9 chiaro.","noSound":"Nessun suono rilevato.","rememberSpeaking":"Ricordati di parlare per fornire il contesto."},"chooseWhatYouWantToShare":"Choose what you want to share","chooseWhatYouWantToShareDescription":"Select the screen or tab you want to share and start recording.","clipCount_one":"{{ count }} clip","clipCount_other":"{{ count }} clips","clipSubmissionDescription":"Grazie per aver utilizzato SnapCall.","clipSubmissionTitle_one":"La tua clip \xe8 stata inviata","clipSubmissionTitle_other":"I tuoi clip sono stati inviati","confirmRemovalDescription":"Sei sicuro di voler rimuovere questa foto/video? Questa azione non pu\xf2 essere annullata.","confirmRemovalTitle":"Conferma rimozione","elementBeingProcessed":"Attendi un momento mentre il tuo {{ type }} viene elaborato...","elementCaptureSuccess":"{{ type }} catturato con successo","elementRecordedAndAttached":"La tua clip \xe8 stata inviata e allegata al thread.","feelFreeToTalkGiveMoreContext":"\uD83D\uDDE3\uFE0F Feel free to talk to give me more context.","goBackToTicket":"Torna al biglietto","instructions":{"allowAccessOnPrompt":"<bold>Consenti l\'accesso</bold> alla fotocamera e al microfono.","multiplePhotos":"Scatta <bold>una foto o pi\xf9</bold> di una per i dettagli.","privacyPolicy":"Procedendo, accetti la nostra <bold>Politica sulla Privacy.</bold>","reviewAndSendAudios":"<bold>Rivedi i tuoi audio</bold> e verranno inviati automaticamente a noi.","reviewAndSendPhotos":"<bold>Convalida le tue foto</bold> e verranno inviate automaticamente a noi.","reviewAndSendVideos":"<bold>Convalida i tuoi video</bold> e verranno inviati automaticamente a noi.","screenShareInstruction":"Seleziona lo schermo o la finestra che desideri registrare.","selectScreenshare":"Tap Record my screen and select the screen or window you want to record.","speakClearly":"<bold>Parla chiaramente</bold> e d\xec ci\xf2 che devi comunicare.","speakDuringRecord":"You can speak while recording to add details.","stopScreenOnFinish":"Press the Stop button when finished. The video will be sent to us automatically.","tapAudioButton":"<bold>Premi il pulsante di registrazione</bold> per iniziare a registrare il tuo messaggio vocale.","tapStopVideoButton":"<bold>Premi Stop</bold> quando hai finito.","tapVideoButton":"<bold>Premi Registra</bold>. Ricordati di commentare.","videoSpeech":"Puoi <bold>parlare durante</bold> la registrazione per aggiungere dettagli."},"limit":"Registrazione video limitata a 5 min.","logIn":"Login","loggedAs":"Registrato come","mediaCount_one":"{{ count }} media","mediaCount_other":"{{ count }} media","mediaSent_one":"Your media has been sent","mediaSent_other":"Your media has been sent","mySuggestion":"My suggestion","noCameraAccess":"No camera access","noCameraAccessDescription":"No camera access Allow camera access in your browser.","noCameraAndMicrophoneAccess":"No camera & microphone access","noCameraAndMicrophoneAccessDescription":"No camera & microphone access Allow microphone and camera access in your browser.","noMicrophoneAccess":"No microphone access","noMicrophoneAccessDescription":"No microphone access Allow microphone access in your browser.","okay":"Okay","openThread":"Apri il thread","permissionDeniedDescription":"Senza l\'accesso alla fotocamera e al microfono, non \xe8 possibile scattare foto o registrare video da condividere con il team di supporto. Si prega di concedere l\'accesso nelle impostazioni del browser.","permissionDeniedTitle":"Qualcosa \xe8 andato storto!","photoInstructionsTitle":"Pronto a scattare una foto?","recordNewMedia":"Record new media","replyAttached":"La tua risposta \xe8 stata allegata","scanQRCode":"Scansiona questo codice QR con un dispositivo compatibile.","screenShareInstructionsTitle":"Pronto a condividere il tuo schermo?","screenTitle":"Pronto a catturare il tuo schermo?","send":"Invia","sendElements_one":"Invia {{ type }}","sendElements_other":"Invia {{ count }} elementi","showQrCode":"Show QR code","startByClickingOnTheButton":"Start by clicking on the round button below! \uD83D\uDC47","startScreenRecording":"Start screen recording","startScreenShareButton":"Registra il mio schermo","stopScreenShareButton":"Ferma registrazione","submissionDescription":"La tua foto/video \xe8 stata inviata con successo. La esamineremo e ti risponderemo al pi\xf9 presto.","submissionTitle":"Grazie per il tuo invio!","switchToMobileDescription":"Goditi un\'esperienza ancora pi\xf9 pratica utilizzando il tuo telefono per scattare foto e registrare video.","switchToMobileTitle":"Passa al tuo dispositivo mobile","takeNewElement":"Cattura un nuovo {{ type }}","thanksForYourMedia":"Thanks for your media!","upload":"Upload","useDesktopVersion":"Usa la versione desktop","videoBotError":"Sorry, an error has occured.","videoBotThinking":"Thinking...","videoInstructionsTitle":"Pronto a registrare un video?","waitVideo":"Potrebbero essere necessari fino a 15 secondi affinch\xe9 un video sia pronto.","yourMedia":"Your media"},"recordingPopup":{"dismiss":"Chiudi","recordingStartText":"Questa chiamata verr\xe0 registrata a breve. Se preferisci non essere registrato, sei libero di lasciare la chiamata in questo momento.","recordingStartTitle":"Registrazione in procinto di iniziare."},"requestAccess":{"admit":"Ammettere","defaultName":"Un utente","deny":"Negare","wantToJoin":"<bold>{{name}}</bold> vuole unirsi!"},"requestDevice":{"askForDevice":"Ask for {{device}}","declined":"La tua richiesta \xe8 stata rifiutata.","deviceActivated":"{{device}} activated","deviceActivationDeclined":"{{device}} activation declined","request":"{{user}} vorrebbe condividere il tuo {{device}}","requestInput":"Richiesta di attivazione","timedOut":"La tua richiesta non ha ricevuto risposta","userDeclined":"{{user}} ha rifiutato la tua richiesta","userWouldLikeYouToActivateYourDevice":"{{name}} would like you to activate your {{device}}.","waitingForDevice":"Waiting for {{name}}\'s {{device}}"},"settings":{"devices":"Dispositivi","help":"Aiuto","helpCenter":"Accedi all\'Assistenza","language":"Linguaggio","preferences":"Preferenze","selectYourCamera":"Select your preferred camera","selectYourLanguage":"Select your preferred language","selectYourMicrophone":"Select your preferred microphone","title":"Impostazioni"},"shareLink":{"failed":"Si \xe8 verificato un errore durante l\'invio del link","invalid":"Collegamento non valido","invoice":"{{user}} ti ha inviato una fattura.","pay":"Paga","poweredBy":"Proposto da","sentToUser":"Link inviato a {{user}}","sentToUsers":"Link inviato ai partecipanti","title":"Condividi un link","title2":"Condividi un link"},"sharedHistory":{"shared":"Condiviso con te"},"snapshot":{"aSnapshotHasBeenShared":"A snapshot has been shared.","error":"Si \xe8 verificato un errore durante l\'invio della schermata","save":"Salva l\'immagine","sentToUser":"Schermata inviata a {{user}}","sentToUsers":"Schermanta inviata ai partecipanti","shared":"Schermata inviata","title":"Schermata"},"videoMenu":{"blockedCamera":"La fotocamera \xe8 bloccata.","cameraPermissions":"Si prega di accettare la condivisione della fotocamera prima di accedere a queste opzioni.","highDef":"Alta definizione (720p)","lowDef":"Definizione bassa (240p)","sendResolution":"Risoluzione inviata (max)","standardDef":"Definizione standard (480p)","title":"Video"},"virtualBackground":{"setBackground":"Imposta sfondo","title":"Sfondo virtuale"},"youtube":{"invalid":"URL YouTube non valido","share":"Guarda ora","title":"Vedere Assieme","url":"URL YOUTUBE"}}');
|
|
384
386
|
|
|
385
387
|
|
|
386
|
-
var $
|
|
387
|
-
$f712a7b52924c1d6$exports = JSON.parse('{"audioMenu":{"blockedMicrophone":"Mikrofon jest zablokowany.","microphonePermissions":"Please accept microphone sharing before accessing these options.","title":"Audio"},"blockedFeature":{"descriptionConnected":"On a free plan, you can\'t use this feature. Upgrade your plan to enjoy all in-call features.","descriptionGuest":"You are participating in a call created with a free version of SnapCall. This feature is only available with a Pro version.","dismissConnected":"Upgrade to Pro","dismissGuest":"Okay","titleConnected":"Upgrade to Pro","titleGuest":"Feature not available"},"common":{"new":"new"},"copyLink":{"copied":"Link copied to clipboard","copy":"Copy","description":"Copy link into clipboard","error":"An error occured when trying to copy to clipboard","title":"Copy link"},"endView":{"addAdditionalMedia":"Add additional media","allowsYouToShareMoreMedia":"This option allows you to share one or more media to add more context.","callEnded":"The call has ended","callIsOver":"The call is over or deleted","callLeft":"You have left the call","callNoLongerActive":"This call is no longer active. Thank you for participating.","full":"You can\'t join this call","fullDescription":"The room is full. Please try to join the call later.","goBack":"Go back to call","howWasYourExperience":"How was your experience?","ifMistakeRejoin":"If this was a mistake, you can rejoin using the button below.","invalidLink":"Invalid link","invalidOrExpired":"This link is invalid or expired.","openDashboard":"Open dashboard","pleaseRateYourExperienceBelow":"Please rate your experience below","thankYouForYourFeedback":"Thank you for your feedback.","tooLate":"You arrived too late","yourFeedbackHelpsUs":"Your feedback helps us improve. See you soon!"},"gdpr":{"recordedWarning":"To improve the quality of our service, this call will be recorded."},"greeting":{"askToJoin":"Ask to join","askingLetIn":"Asking to be let in...","cameraDisabled":"Camera is Off","cameraEnabled":"Camera is On","canceledCallRequest":"The call request will be canceled and you will be redirected to the call scheduling page.","cantJoinCall":"You can\u2019t join this call","cantWait":"Can\'t wait?","cantWaitLeaveMessage":"Can\u2019t wait? You can leave a message and you will be contacted as soon as possible.","clickOnLock":"Click on the <1></1> lock icon in your browser\'s bar.","footerDescription":"Meet SnapCall, the easiest way to add real-time video to platform, product or service.","footerTitle":"Powered by SnapCall","leaveMessage":"Leave a message","mainTitle":"Welcome to SnapCall","mediaDenied":"Microphone and camera access denied","microphoneDisabled":"Microphone is Off","microphoneEnabled":"Microphone is On","name":"Name","nameDescription":"This name will be displayed to all participants in the call.","namePlaceholder":"Eg. Lucy or Peter","nameSubmit":"Join Conversation","recordVideo":"Record video","recordVoice":"Record voice","requestACall":"Request a call","scheduleACall":"Schedule a call","setting":"Settings","sideDescription":"Please enter your name and adjust your camera and microphone","sideTitle":"Hold tight, you\'re next!","someoneDenied":"Someone in the call denied your request to join.","takeFewMinute":"This may take a few minutes depending on the availability of the participants.","whatYouCanDo":"Here\u2019s what you can do","youWillJoinWhenSomeoneLetsYou":"You will join the call when someone from {{ companyName }} lets you in."},"header":{"free":"Free version"},"invitePeople":{"PublicLink":"Public link","addEmailToInvite":"Add an email to invite.","addEmails":"Add emails...","copyCallLinkDescription":"Copy this link and send it to anyone you wish to invite to join the call.","copyClipLinkDescription":"Copy this link and send it to anyone you wish to invite to record a clip.","email":"Email","emailPlaceholder":"Eg. john@acme.com","emailsOrNumberPlaceholder":"Eg. john@acme.com or +33612345678","error":"Failed to send, please try again later.","invalidEmail":"Invalid email format.","invalidEmailOrNumber":"Invalid email or number format.","invitationSentTo_one":"Sent to {{ name }}","invitationSentTo_other":"Sent to {{ name }} and {{ otherEmailsCount }}+","invite":"Invite","inviteByEmail":"Invite by email","inviteByEmailOrNumber":"Invite by email or sms","inviteCall":"Invite to join call","inviteCallDefaultMessage":"Hey! You\'re invited to join our video call. Click the link to connect instantly.","inviteClipAudioDefaultMessage":"Hey! Please record an audio message now and provide us with more context to assist you better.","inviteClipDefaultMessage":"Hey! Please record your video now and provide us with more context to assist you better.","inviteClipPhotoDefaultMessage":"Hey! Please take a photo and provide us with more context to assist you better.","inviteClipScreenDefaultMessage":"Hey! Please record your screen now and provide us with more context to assist you better.","inviteClipVideoDefaultMessage":"Hey! Please record your video now and provide us with more context to assist you better.","invitePeople":"Invite people","inviteRecordAudio":"Record an audio","inviteRecordClip":"Invite to record clip","inviteRecordPhoto":"Take a photo","inviteRecordScreen":"Record a screen","inviteRecordVideo":"Record a video","joinTheCall":"Join the call","linkToJoinCall":"Link to join the call","linkToRecordAClip":"Link to record a clip","message":"Message","sharePublicLink":"Share public link"},"leave":{"endCall":"End call for all","leaveCall":"Leave call","title":"Leave"},"loader":{"connection":"Connecting..."},"menu":{"new":"NEW","openNewTab":"Open new tab","pictureInPicture":"Picture-in-Picture","quickConnect":"Quick Connect","screenSharing":"Screen sharing","startRecord":"Record call","stopRecord":"Stop record","title":"Menu"},"misc":{"accept":"Accept","add":"Add","audio":"Audio","camera":"Camera","cancel":"Cancel","confirm":"Confirm","decline":"Decline","download":"Download","from":"From","microphone":"Microphone","open":"Open","photo":"Photo","proceed":"Proceed","remove":"Remove","screen":"Screen","screenshot":"Screenshot","someone":"Someone","speaker":"Speaker","user":"User","video":"Video","you":"You"},"notifications":{"agentJoinError":"An error occured while trying to join the room as an agent","blockedMicrophonePopup":"SnapCall requires access to your camera and microphone. Click the camera blocked icon in your browser\'s address bar.","blockedMicrophonePopupTitle":"Camera and microphone are blocked","cameraError":"An error occured when trying to toggle the camera","cameraRotateError":"An error occured when trying to rotate the camera","close":"Close","connectedTo":"Connected to {{name}}","criticalError":"A critical error has occurred (error {{code}}).","error":"Error","errorOccuredCode":"An error occured (error {{code}}).","invitationSentToFailed":"Sent to {{ name }} failed.","microphoneError":"An error occured when trying to toggle the microphone","noCamera":"No camera available","recording":"Recording in progress","reload":"Reload","screensharingError":"An error occured when trying to toggle screensharing","uploadError":"An error occured during the upload, please try again later."},"quickConnect":{"scan":"Scan this QR code with your phone camera to open the call.","scanTitle":"Scan QR Code","title":"Quick Connect"},"recorder":{"addMore":"Add more","addNewClip":"Add new clip","allowAccess":"Allow access","allowCamMicAccess":"Allow access to cam/mic","allowScreenShareAccess":"Allow access to screen sharing","attachElements_one":"Attach {{ type }} to ticket","attachElements_other":"Attach {{ count }} elements","audioInstructionsTitle":"Ready to record a voice message?","audioLevelNotification":{"noSound":{"description":"Make sure your microphone is activated.","title":"No sound detected."},"shortVideo":{"description":"This video is too short to get context.","title":"Short video."},"spokenWordsQuestion":{"description":"Does your video include enough spoken details?","title":"Spoken words."},"spokenWordsWarning":{"description":"The clip includes barely any spoken words.","title":"No spoken words."}},"audioLevelToast":{"continueSpeaking":"Continue speaking for clearer context.","noSound":"No sound detected.","rememberSpeaking":"Remember to speak to provide context."},"chooseWhatYouWantToShare":"Choose what you want to share","chooseWhatYouWantToShareDescription":"Select the screen or tab you want to share and start recording.","clipCount_one":"{{ count }} clip","clipCount_other":"{{ count }} clips","clipSubmissionDescription":"Thank you for using SnapCall.","clipSubmissionTitle_one":"Your clip has been sent","clipSubmissionTitle_other":"Your clips have been sent","confirmRemovalDescription":"Are you sure you want to delete this photo/video? This action cannot be undone.","confirmRemovalTitle":"Confirm deletion","elementBeingProcessed":"Please wait while your {{ type }} is being processed...","elementCaptureSuccess":"{{ type }} captured successfully","elementRecordedAndAttached":"Your clip has been sent and attached to the thread.","goBackToTicket":"Go back to ticket","instructions":{"allowAccessOnPrompt":"When prompted, <bold>allow access</bold> to camera and microphone.","multiplePhotos":"Take a <bold>photo or multiple</bold> for detail, then review.","privacyPolicy":"By proceeding, you agree to our <bold>Privacy Policy</bold>.","reviewAndSendAudios":"<bold>Review your audios</bold>, and they will be sent to us automatically.","reviewAndSendPhotos":"<bold>Validate your photos</bold>, and they will be sent to us automatically.","reviewAndSendVideos":"<bold>Review your videos</bold>, and they will be sent to us automatically.","screenShareInstruction":"Select the screen or window you wish to record.","selectScreenshare":"Tap Record my screen and select the screen or window you want to record.","speakClearly":"<bold>Speak clearly</bold> and say what you need to convey.","speakDuringRecord":"You can speak while recording to add details.","stopScreenOnFinish":"Press the Stop button when finished. The video will be sent to us automatically.","tapAudioButton":"<bold>Tap the record button</bold> to start recording your audio message.","tapStopVideoButton":"<bold>Tap stop</bold> when you are done.","tapVideoButton":"<bold>Tap the record button</bold> to begin and feel free to provide commentary.","videoSpeech":"You can <bold>talk during</bold> the recording to provide additional information."},"limit":"Video recording limited to 5 min.","logIn":"Log in","loggedAs":"Logged as","mediaCount_one":"{{ count }} media","mediaCount_other":"{{ count }} media","mediaSent_one":"Your media has been sent","mediaSent_other":"Your media has been sent","noCameraAccess":"No camera access","noCameraAccessDescription":"No camera access Allow camera access in your browser.","noCameraAndMicrophoneAccess":"No camera & microphone access","noCameraAndMicrophoneAccessDescription":"No camera & microphone access Allow microphone and camera access in your browser.","noMicrophoneAccess":"No microphone access","noMicrophoneAccessDescription":"No microphone access Allow microphone access in your browser.","okay":"Okay","openThread":"Open thread","permissionDeniedDescription":"Without access to the camera and microphone, you won\'t be able to capture photos or videos to share with the support team. Please grant access in your browser settings.","permissionDeniedTitle":"Something went wrong!","photoInstructionsTitle":"Ready to snap a photo?","replyAttached":"Your reply has been attached","scanQRCode":"Scan this QR code with a compatible device.","screenShareInstructionsTitle":"Ready to share your screen?","screenTitle":"Ready to capture your screen?","send":"Send","sendElements_one":"Send {{ type }}","sendElements_other":"Send {{ count }} elements","showQrCode":"Show QR code","startScreenRecording":"Start screen recording","startScreenShareButton":"Record my screen","stopScreenShareButton":"Stop recording","submissionDescription":"Your photo/video has been successfully submitted. We will review it and get back to you shortly.","submissionTitle":"Thank you for your submission!","switchToMobileDescription":"Experience greater convenience by using your phone to take photos and record videos.","switchToMobileTitle":"Switch to your mobile device","takeNewElement":"Capture a new {{ type }}","upload":"Upload","useDesktopVersion":"Use the desktop version","videoInstructionsTitle":"Ready to record a video?","waitVideo":"A video may take up to 15 seconds to be ready."},"recordingPopup":{"dismiss":"Dismiss","recordingStartText":"This call will be recorded shortly. If you\u2019d rather not be recorded, you\u2019re welcome to leave the call at this time.","recordingStartTitle":"Recording about to start."},"requestAccess":{"admit":"Admit","defaultName":"An user","deny":"Deny","wantToJoin":"<bold>{{name}}</bold> wants to join!"},"requestDevice":{"askForDevice":"Ask for {{device}}","declined":"Your request has been declined.","deviceActivated":"{{device}} activated","deviceActivationDeclined":"{{device}} activation declined","request":"{{user}} would like you to share your {{device}}","requestInput":"Request input devices","timedOut":"Your request has timed out.","userDeclined":"{{user}} has declined your request.","userWouldLikeYouToActivateYourDevice":"{{name}} would like you to activate your {{device}}.","waitingForDevice":"Waiting for {{name}}\'s {{device}}"},"settings":{"devices":"Devices","help":"Help","helpCenter":"Go to help center","language":"Language","preferences":"Preferences","selectYourCamera":"Select your preferred camera","selectYourLanguage":"Select your preferred language","selectYourMicrophone":"Select your preferred microphone","title":"Settings"},"shareLink":{"failed":"Failed to send link","invalid":"Invalid link","invoice":"{{user}} sent you an invoice.","pay":"Pay","poweredBy":"Powered by","sentToUser":"Link sent to {{user}}","sentToUsers":"Link sent to users","title":"Share link","title2":"Share a link"},"sharedHistory":{"shared":"Shared with you"},"snapshot":{"aSnapshotHasBeenShared":"A snapshot has been shared.","error":"An error occured when trying to send the snapshot","save":"Save photo","sentToUser":"Snapshot sent to {{user}}","sentToUsers":"Snapshot sent to users.","shared":"Snapshot shared.","title":"Snapshot"},"videoMenu":{"blockedCamera":"Camera is blocked.","cameraPermissions":"Please accept camera sharing before accessing these options.","highDef":"High definition (720p)","lowDef":"Low definition (240p)","sendResolution":"Send Resolution (maximum)","standardDef":"Standard definition (480p)","title":"Video"},"virtualBackground":{"setBackground":"Set Background","title":"Virtual Background"},"youtube":{"invalid":"Invalid YouTube URL","share":"Watch now","title":"Watch Together","url":"YOUTUBE URL"}}');
|
|
388
|
+
var $df871c254c81277d$exports = {};
|
|
389
|
+
$df871c254c81277d$exports = JSON.parse('{"audioMenu":{"blockedMicrophone":"O microfone est\xe1 bloqueado.","microphonePermissions":"Aceite o compartilhamento do microfone antes de acessar essas op\xe7\xf5es.","title":"\xc1udio"},"blockedFeature":{"descriptionConnected":"Em um plano gratuito, voc\xea n\xe3o pode usar esse recurso. Atualize seu plano para aproveitar todos os recursos de chamada.","descriptionGuest":"Voc\xea est\xe1 participando de uma chamada criada com uma vers\xe3o gratuita do SnapCall. Esse recurso s\xf3 est\xe1 dispon\xedvel com a vers\xe3o Pro.","dismissConnected":"Atualize para o Pro","dismissGuest":"OK","titleConnected":"Atualize para o Pro","titleGuest":"Recurso n\xe3o dispon\xedvel"},"common":{"new":"Novo"},"copyLink":{"copied":"Link copiado para \xe1rea de transfer\xeancia","copy":"Copiar","description":"Copie o link para a prancheta","error":"Ocorreu um erro ao tentar copiar para a \xe1rea de transfer\xeancia","title":"Copiar link"},"endView":{"addAdditionalMedia":"Adicionar m\xeddia adicional","allowsYouToShareMoreMedia":"Essa op\xe7\xe3o permite que voc\xea compartilhe uma ou mais m\xeddias para adicionar mais contexto.","callEnded":"A chamada terminou","callIsOver":"A chamada foi encerrada ou exclu\xedda","callLeft":"Voc\xea deixou a liga\xe7\xe3o","callNoLongerActive":"Essa chamada n\xe3o est\xe1 mais ativa. Obrigado por participar.","full":"Voc\xea n\xe3o pode participar desta chamada","fullDescription":"A sala est\xe1 cheia. Tente participar da chamada mais tarde.","goBack":"Volte a ligar","howWasYourExperience":"Como foi sua experi\xeancia?","ifMistakeRejoin":"Se isso foi um erro, voc\xea pode entrar novamente usando o bot\xe3o abaixo.","invalidLink":"Link inv\xe1lido","invalidOrExpired":"Esse link \xe9 inv\xe1lido ou expirou.","openDashboard":"Abra o painel","pleaseRateYourExperienceBelow":"Avalie sua experi\xeancia abaixo","thankYouForYourFeedback":"Obrigado pelo seu feedback.","tooLate":"Voc\xea chegou tarde demais","yourFeedbackHelpsUs":"Seu feedback nos ajuda a melhorar. Te vejo em breve!"},"gdpr":{"recordedWarning":"Para melhorar a qualidade do nosso servi\xe7o, essa chamada ser\xe1 gravada."},"greeting":{"askToJoin":"Pe\xe7a para participar","askingLetIn":"Pedindo permiss\xe3o para entrar...","cameraDisabled":"A c\xe2mera est\xe1 desligada","cameraEnabled":"A c\xe2mera est\xe1 ligada","canceledCallRequest":"A solicita\xe7\xe3o de chamada ser\xe1 cancelada e voc\xea ser\xe1 redirecionado para a p\xe1gina de agendamento de chamadas.","cantJoinCall":"Voc\xea n\xe3o pode participar desta chamada","cantWait":"Mal posso esperar?","cantWaitLeaveMessage":"Mal posso esperar? Voc\xea pode deixar uma mensagem e ser\xe1 contatado o mais r\xe1pido poss\xedvel.","clickOnLock":"Clique no \xedcone de <1> </1> cadeado na barra do seu navegador.","footerDescription":"Conhe\xe7a o SnapCall, a maneira mais f\xe1cil de adicionar v\xeddeo em tempo real \xe0 plataforma, produto ou servi\xe7o.","footerTitle":"Desenvolvido por SnapCall","leaveMessage":"Deixe uma mensagem","mainTitle":"Bem-vindo ao SnapCall","mediaDenied":"Acesso negado ao microfone e \xe0 c\xe2mera","microphoneDisabled":"O microfone est\xe1 desligado","microphoneEnabled":"O microfone est\xe1 ligado","name":"Nome","nameDescription":"Esse nome ser\xe1 exibido para todos os participantes da chamada.","namePlaceholder":"Ex. Lucy ou Peter","nameSubmit":"Participe da conversa","recordVideo":"Gravar v\xeddeo","recordVoice":"Gravar voz","requestACall":"Solicite uma liga\xe7\xe3o","scheduleACall":"Agende uma liga\xe7\xe3o","setting":"Configura\xe7\xf5es","sideDescription":"Digite seu nome e ajuste sua c\xe2mera e microfone","sideTitle":"Aguente firme, voc\xea \xe9 o pr\xf3ximo!","someoneDenied":"Algu\xe9m na liga\xe7\xe3o negou sua solicita\xe7\xe3o de ades\xe3o.","takeFewMinute":"Isso pode levar alguns minutos, dependendo da disponibilidade dos participantes.","whatYouCanDo":"Aqui est\xe1 o que voc\xea pode fazer","youWillJoinWhenSomeoneLetsYou":"Voc\xea participar\xe1 da chamada quando algu\xe9m {{ companyName }} deixar voc\xea entrar."},"header":{"free":"Vers\xe3o gratuita"},"invitePeople":{"PublicLink":"Link p\xfablico","addEmailToInvite":"Adicione um e-mail para convidar.","addEmails":"Adicionar e-mails...","copyCallLinkDescription":"Copie este link e envie-o para qualquer pessoa que voc\xea queira convidar para participar da chamada.","copyClipLinkDescription":"Copie este link e envie-o para qualquer pessoa que voc\xea queira convidar para gravar um clipe.","email":"E-mail","emailPlaceholder":"Por exemplo, john@acme.com","emailsOrNumberPlaceholder":"Por exemplo, john@acme.com ou +33612345678","error":"Falha ao enviar, tente novamente mais tarde.","invalidEmail":"Formato de e-mail inv\xe1lido.","invalidEmailOrNumber":"Formato de e-mail ou n\xfamero inv\xe1lido.","invitationSentTo_one":"Enviado para {{ name }}","invitationSentTo_other":"Enviado para {{ name }} e {{ otherEmailsCount }} +","invite":"Convide","inviteByEmail":"Convide por e-mail","inviteByEmailOrNumber":"Convide por e-mail ou sms","inviteCall":"Convide para participar da chamada","inviteCallDefaultMessage":"Ei! Voc\xea est\xe1 convidado a participar da nossa videochamada. Clique no link para se conectar instantaneamente.","inviteClipAudioDefaultMessage":"Ei! Grave uma mensagem de \xe1udio agora e forne\xe7a mais contexto para ajud\xe1-lo melhor.","inviteClipDefaultMessage":"Ei! Grave seu v\xeddeo agora e forne\xe7a mais contexto para ajud\xe1-lo melhor.","inviteClipPhotoDefaultMessage":"Ei! Tire uma foto e forne\xe7a mais contexto para ajud\xe1-lo melhor.","inviteClipScreenDefaultMessage":"Ei! Grave sua tela agora e nos forne\xe7a mais contexto para ajud\xe1-lo melhor.","inviteClipVideoDefaultMessage":"Ei! Grave seu v\xeddeo agora e forne\xe7a mais contexto para ajud\xe1-lo melhor.","invitePeople":"Convide pessoas","inviteRecordAudio":"Grave um \xe1udio","inviteRecordClip":"Convide para gravar clipe","inviteRecordPhoto":"Tirar uma fotografia","inviteRecordScreen":"Gravar uma tela","inviteRecordVideo":"Grave um v\xeddeo","joinTheCall":"Participe da chamada","linkToJoinCall":"Link para participar da chamada","linkToRecordAClip":"Link para gravar um clipe","message":"Mensagem","sharePublicLink":"Compartilhar link p\xfablico"},"leave":{"endCall":"Encerrar chamada para todos","leaveCall":"Sair da chamada","title":"Deixar"},"loader":{"connection":"Conectando..."},"menu":{"new":"Novo","openNewTab":"Abrir nova aba","pictureInPicture":"Imagem em imagem","quickConnect":"Conex\xe3o r\xe1pida","screenSharing":"Compartilhamento de tela","startRecord":"Gravar chamada","stopRecord":"Pare o registro","title":"Menu"},"misc":{"accept":"Aceitar","add":"Adicione","audio":"\xc1udio","camera":"C\xe2mera","cancel":"Cancel","confirm":"Confirme","decline":"Decl\xednio","download":"FA\xc7A O DOWNLOAD","from":"De","microphone":"Microfone","open":"Abrir","photo":"foto","proceed":"Proceder","remove":"Remover","screen":"Ecr\xe3","screenshot":"Captura de tela","someone":"Algu\xe9m","speaker":"Alto-falante","user":"Utilizador","video":"V\xeddeo","you":"voc\xea"},"networkIssue":{"description":"The clip information may be damaged.","title":"Network issue"},"notifications":{"agentJoinError":"Ocorreu um erro ao tentar entrar na sala como agente","blockedMicrophonePopup":"O SnapCall requer acesso \xe0 sua c\xe2mera e microfone. Clique no \xedcone de c\xe2mera bloqueada na barra de endere\xe7o do seu navegador.","blockedMicrophonePopupTitle":"A c\xe2mera e o microfone est\xe3o bloqueados","cameraError":"Ocorreu um erro ao tentar alternar a c\xe2mera","cameraRotateError":"Ocorreu um erro ao tentar girar a c\xe2mera","close":"Fechar","connectedTo":"Conectado a {{name}}","criticalError":"Ocorreu um erro cr\xedtico (erro{{code}}).","error":"Erro","errorOccuredCode":"Ocorreu um erro (erro{{code}}).","invitationSentToFailed":"Enviado para {{ name }} falhou.","microphoneError":"Ocorreu um erro ao tentar alternar o microfone","noCamera":"Nenhuma c\xe2mera dispon\xedvel","recording":"Grava\xe7\xe3o em andamento","reload":"Recarregue","screensharingError":"Ocorreu um erro ao tentar ativar o compartilhamento de tela","uploadError":"Ocorreu um erro durante o carregamento. Tente novamente mais tarde."},"quickConnect":{"scan":"Digitalize esse c\xf3digo QR com a c\xe2mera do telefone para abrir a chamada.","scanTitle":"Digitalize o c\xf3digo QR","title":"Conex\xe3o r\xe1pida"},"recorder":{"addMore":"Adicione mais","addNewClip":"Adicionar novo clipe","allowAccess":"Permitir acesso","allowCamMicAccess":"Permitir acesso \xe0 cam/microfone","allowScreenShareAccess":"Permitir acesso ao compartilhamento de tela","attachElements_one":"Anexar {{ type }} ao t\xedquete","attachElements_other":"Anexar {{ count }} elementos","audioInstructionsTitle":"Pronto para gravar uma mensagem de voz?","audioLevelNotification":{"noSound":{"description":"Verifique se o microfone est\xe1 ativado.","title":"Nenhum som detectado."},"shortVideo":{"description":"Este v\xeddeo \xe9 muito curto para contextualizar.","title":"V\xeddeo curto."},"spokenWordsQuestion":{"description":"Seu v\xeddeo inclui detalhes falados suficientes?","title":"Palavras faladas."},"spokenWordsWarning":{"description":"O clipe quase n\xe3o inclui palavras faladas.","title":"Sem palavras faladas."}},"audioLevelToast":{"continueSpeaking":"Continue falando para obter um contexto mais claro.","noSound":"Nenhum som detectado.","rememberSpeaking":"Lembre-se de falar para fornecer contexto."},"chooseWhatYouWantToShare":"Escolha o que voc\xea quer compartilhar","chooseWhatYouWantToShareDescription":"Selecione a tela ou guia que voc\xea deseja compartilhar e comece a gravar.","clipCount_one":"{{ count }}clipe","clipCount_other":"{{ count }}clipes","clipSubmissionDescription":"Obrigado por usar o SnapCall.","clipSubmissionTitle_one":"Seu clipe foi enviado","clipSubmissionTitle_other":"Seus clipes foram enviados","confirmRemovalDescription":"Tem certeza de que deseja excluir esta foto/v\xeddeo? Essa a\xe7\xe3o n\xe3o pode ser desfeita.","confirmRemovalTitle":"Confirme a exclus\xe3o","elementBeingProcessed":"Aguarde enquanto o seu {{ type }} est\xe1 sendo processado...","elementCaptureSuccess":"{{ type }}capturado com sucesso","elementRecordedAndAttached":"Seu clipe foi enviado e anexado ao t\xf3pico.","feelFreeToTalkGiveMoreContext":"\uD83D\uDDE3\uFE0F Feel free to talk to give me more context.","goBackToTicket":"Voltar ao ingresso","instructions":{"allowAccessOnPrompt":"Quando solicitado, <bold> permita o acesso </bold> \xe0 c\xe2mera e ao microfone.","multiplePhotos":"Tire uma <bold> foto ou v\xe1rias </bold> para obter detalhes e revise.","privacyPolicy":"Ao continuar, voc\xea concorda com nossa <bold> Pol\xedtica de Privacidade</bold>.","reviewAndSendAudios":"<bold>Revise seus \xe1udios </bold> e eles ser\xe3o enviados para n\xf3s automaticamente.","reviewAndSendPhotos":"<bold>Valide suas fotos </bold> e elas ser\xe3o enviadas para n\xf3s automaticamente.","reviewAndSendVideos":"<bold>Revise seus v\xeddeos </bold> e eles ser\xe3o enviados para n\xf3s automaticamente.","screenShareInstruction":"Selecione a tela ou janela que voc\xea deseja gravar.","selectScreenshare":"Toque em Gravar minha tela e selecione a tela ou janela que voc\xea deseja gravar.","speakClearly":"<bold>Fale com clareza </bold> e diga o que voc\xea precisa transmitir.","speakDuringRecord":"Voc\xea pode falar durante a grava\xe7\xe3o para adicionar detalhes.","stopScreenOnFinish":"Pressione o bot\xe3o Parar quando terminar. O v\xeddeo ser\xe1 enviado para n\xf3s automaticamente.","tapAudioButton":"<bold>Toque no bot\xe3o de grava\xe7\xe3o </bold> para come\xe7ar a gravar sua mensagem de \xe1udio.","tapStopVideoButton":"<bold>Toque em parar </bold> quando terminar.","tapVideoButton":"<bold>Toque no bot\xe3o de grava\xe7\xe3o </bold> para come\xe7ar e sinta-se \xe0 vontade para comentar.","videoSpeech":"Voc\xea pode <bold> conversar durante </bold> a grava\xe7\xe3o para fornecer informa\xe7\xf5es adicionais."},"limit":"Grava\xe7\xe3o de v\xeddeo limitada a 5 min.","logIn":"Log in","loggedAs":"Registrado como","mediaCount_one":"{{ count }}m\xeddia","mediaCount_other":"{{ count }}m\xeddia","mediaSent_one":"Sua m\xeddia foi enviada","mediaSent_other":"Sua m\xeddia foi enviada","mySuggestion":"My suggestion","noCameraAccess":"Sem acesso \xe0 c\xe2mera","noCameraAccessDescription":"Sem acesso \xe0 c\xe2mera Permita o acesso \xe0 c\xe2mera em seu navegador.","noCameraAndMicrophoneAccess":"Sem acesso \xe0 c\xe2mera e ao microfone","noCameraAndMicrophoneAccessDescription":"Sem acesso \xe0 c\xe2mera e ao microfone Permita o acesso ao microfone e \xe0 c\xe2mera no seu navegador.","noMicrophoneAccess":"Sem acesso ao microfone","noMicrophoneAccessDescription":"Sem acesso ao microfone Permita o acesso ao microfone em seu navegador.","okay":"OK","openThread":"T\xf3pico aberto","permissionDeniedDescription":"Sem acesso \xe0 c\xe2mera e ao microfone, voc\xea n\xe3o poder\xe1 capturar fotos ou v\xeddeos para compartilhar com a equipe de suporte. Conceda acesso nas configura\xe7\xf5es do seu navegador.","permissionDeniedTitle":"Algo correu mal!","photoInstructionsTitle":"Pronto para tirar uma foto?","recordNewMedia":"Record new media","replyAttached":"Sua resposta foi anexada","scanQRCode":"Escaneie esse c\xf3digo QR com um dispositivo compat\xedvel.","screenShareInstructionsTitle":"Pronto para compartilhar sua tela?","screenTitle":"Pronto para capturar sua tela?","send":"Enviar","sendElements_one":"Enviar {{ type }}","sendElements_other":"Enviar {{ count }} elementos","showQrCode":"Mostrar c\xf3digo QR","startByClickingOnTheButton":"Start by clicking on the round button below! \uD83D\uDC47","startScreenRecording":"Iniciar grava\xe7\xe3o de tela","startScreenShareButton":"Gravar minha tela","stopScreenShareButton":"Pare de gravar","submissionDescription":"Sua foto/v\xeddeo foi enviada com sucesso. Vamos analis\xe1-lo e entrar em contato com voc\xea em breve.","submissionTitle":"Obrigado por sua submiss\xe3o!","switchToMobileDescription":"Experimente maior comodidade ao usar seu telefone para tirar fotos e gravar v\xeddeos.","switchToMobileTitle":"Mude para o seu dispositivo m\xf3vel","takeNewElement":"Capture um novo {{ type }}","thanksForYourMedia":"Thanks for your media!","upload":"upload","useDesktopVersion":"Use a vers\xe3o para desktop","videoBotError":"Sorry, an error has occured.","videoBotThinking":"Thinking...","videoInstructionsTitle":"Pronto para gravar um v\xeddeo?","waitVideo":"Um v\xeddeo pode levar at\xe9 15 segundos para ficar pronto.","yourMedia":"Your media"},"recordingPopup":{"dismiss":"Ignorar","recordingStartText":"Essa liga\xe7\xe3o ser\xe1 gravada em breve. Se voc\xea preferir n\xe3o ser gravado, sinta-se \xe0 vontade para sair da liga\xe7\xe3o neste momento.","recordingStartTitle":"A grava\xe7\xe3o est\xe1 prestes a come\xe7ar."},"requestAccess":{"admit":"Admitem","defaultName":"Um usu\xe1rio","deny":"Negar","wantToJoin":"<bold>{{name}}</bold>quer se juntar!"},"requestDevice":{"askForDevice":"Pergunte por {{device}}","declined":"Sua solicita\xe7\xe3o foi recusada.","deviceActivated":"{{device}}ativado","deviceActivationDeclined":"{{device}}ativa\xe7\xe3o declinada","request":"{{user}}gostaria que voc\xea compartilhasse seu {{device}}","requestInput":"Solicitar dispositivos de entrada","timedOut":"Sua solicita\xe7\xe3o atingiu o tempo limite.","userDeclined":"{{user}}recusou sua solicita\xe7\xe3o.","userWouldLikeYouToActivateYourDevice":"{{name}}gostaria que voc\xea ativasse seu{{device}}.","waitingForDevice":"Esperando por {{name}} n\xf3s {{device}}"},"settings":{"devices":"Dispositivos","help":"Socorro","helpCenter":"Acesse a Central de Ajuda","language":"Idioma","preferences":"Prefer\xeancias","selectYourCamera":"Selecione sua c\xe2mera preferida","selectYourLanguage":"Selecione seu idioma preferido","selectYourMicrophone":"Selecione seu microfone preferido","title":"Configura\xe7\xf5es"},"shareLink":{"failed":"Falha ao enviar o link","invalid":"Link inv\xe1lido","invoice":"{{user}}enviou uma fatura para voc\xea.","pay":"Pagar","poweredBy":"Desenvolvido por","sentToUser":"Link enviado para {{user}}","sentToUsers":"Link enviado aos usu\xe1rios","title":"Compartilhar link","title2":"Compartilhe um link"},"sharedHistory":{"shared":"Compartilhado com voc\xea"},"snapshot":{"aSnapshotHasBeenShared":"Um instant\xe2neo foi compartilhado.","error":"Ocorreu um erro ao tentar enviar o instant\xe2neo","save":"Salvar foto","sentToUser":"Instant\xe2neo enviado para {{user}}","sentToUsers":"Instant\xe2neo enviado aos usu\xe1rios.","shared":"Instant\xe2neo compartilhado.","title":"Instant\xe2neo"},"videoMenu":{"blockedCamera":"A c\xe2mera est\xe1 bloqueada.","cameraPermissions":"Aceite o compartilhamento da c\xe2mera antes de acessar essas op\xe7\xf5es.","highDef":"Alta defini\xe7\xe3o (720p)","lowDef":"Baixa defini\xe7\xe3o (240p)","sendResolution":"Resolu\xe7\xe3o de envio (m\xe1xima)","standardDef":"Defini\xe7\xe3o padr\xe3o (480p)","title":"V\xeddeo"},"virtualBackground":{"setBackground":"Definir plano de fundo","title":"Plano de fundo virtual"},"youtube":{"invalid":"URL inv\xe1lida do YouTube","share":"Assista agora","title":"Assista juntos","url":"URL DO YOUTUBE"}}');
|
|
388
390
|
|
|
389
391
|
|
|
390
392
|
const $b45c0bcc142f0b5e$export$150b732325d14d04 = {
|
|
@@ -400,17 +402,17 @@ const $b45c0bcc142f0b5e$export$150b732325d14d04 = {
|
|
|
400
402
|
name: "Fran\xe7ais",
|
|
401
403
|
translation: (0, (/*@__PURE__*/$parcel$interopDefault($32156cf38812b83d$exports)))
|
|
402
404
|
},
|
|
405
|
+
de: {
|
|
406
|
+
name: 'Deutsch',
|
|
407
|
+
translation: (0, (/*@__PURE__*/$parcel$interopDefault($988a925d2edf1eb7$exports)))
|
|
408
|
+
},
|
|
403
409
|
it: {
|
|
404
410
|
name: 'Italiano',
|
|
405
411
|
translation: (0, (/*@__PURE__*/$parcel$interopDefault($2cbf9baa8030dfd2$exports)))
|
|
406
412
|
},
|
|
407
|
-
|
|
408
|
-
name: "
|
|
409
|
-
translation: (0, (/*@__PURE__*/$parcel$interopDefault($
|
|
410
|
-
},
|
|
411
|
-
pl: {
|
|
412
|
-
name: 'Polski',
|
|
413
|
-
translation: (0, (/*@__PURE__*/$parcel$interopDefault($f712a7b52924c1d6$exports)))
|
|
413
|
+
'pt-BR': {
|
|
414
|
+
name: "Portugu\xeas",
|
|
415
|
+
translation: (0, (/*@__PURE__*/$parcel$interopDefault($df871c254c81277d$exports)))
|
|
414
416
|
}
|
|
415
417
|
};
|
|
416
418
|
(0, ($parcel$interopDefault($jQDcL$i18next))).use((0, $jQDcL$reacti18next.initReactI18next)).init({
|
|
@@ -947,6 +949,7 @@ class $d582bbc5717818b4$export$2e2bcd8739ae039 {
|
|
|
947
949
|
stream: undefined,
|
|
948
950
|
track: undefined
|
|
949
951
|
};
|
|
952
|
+
this.isAskingPermissions = false;
|
|
950
953
|
}
|
|
951
954
|
getAudioTrack() {
|
|
952
955
|
return this.audio.track;
|
|
@@ -969,7 +972,13 @@ class $d582bbc5717818b4$export$2e2bcd8739ae039 {
|
|
|
969
972
|
audio: needToAskAudio,
|
|
970
973
|
video: needToAskVideo
|
|
971
974
|
});
|
|
972
|
-
|
|
975
|
+
let res = undefined;
|
|
976
|
+
try {
|
|
977
|
+
this.isAskingPermissions = true;
|
|
978
|
+
res = await $d582bbc5717818b4$export$9b072140089cdb1b(constraintsCopy);
|
|
979
|
+
} finally{
|
|
980
|
+
this.isAskingPermissions = false;
|
|
981
|
+
}
|
|
973
982
|
if (!res) console.warn("requestMediaPermissions : no media stream. User probably didn't give permissions.");
|
|
974
983
|
else {
|
|
975
984
|
if (needToAskAudio) {
|
|
@@ -1278,7 +1287,7 @@ const $96c060f28b764056$export$df987b50509121ea = async (url, streamToken, file)
|
|
|
1278
1287
|
|
|
1279
1288
|
|
|
1280
1289
|
var $7f16567c4f721486$require$Buffer = $jQDcL$buffer.Buffer;
|
|
1281
|
-
const $7f16567c4f721486$export$bfc52a1c1f84ba66 = async (apiUrl, { token: token, base64Image: base64Image })=>{
|
|
1290
|
+
const $7f16567c4f721486$export$bfc52a1c1f84ba66 = async (apiUrl, { token: token, base64Image: base64Image, recordingGroup: recordingGroup })=>{
|
|
1282
1291
|
const file = `${(0, $jQDcL$uuid.v4)()}.jpeg`;
|
|
1283
1292
|
const uploadBody = $7f16567c4f721486$require$Buffer.from(String(base64Image).replace(/^data:image\/\w+;base64,/, ''), 'base64');
|
|
1284
1293
|
const { url: url, headers: headers, filename: filename } = await fetch(`${apiUrl}/public/streams/${token}/events/upload`, {
|
|
@@ -1289,7 +1298,8 @@ const $7f16567c4f721486$export$bfc52a1c1f84ba66 = async (apiUrl, { token: token,
|
|
|
1289
1298
|
body: JSON.stringify({
|
|
1290
1299
|
type: 'image',
|
|
1291
1300
|
filename: file,
|
|
1292
|
-
contentLength: uploadBody.length
|
|
1301
|
+
contentLength: uploadBody.length,
|
|
1302
|
+
recordingGroup: recordingGroup
|
|
1293
1303
|
})
|
|
1294
1304
|
}).then((res)=>res.json());
|
|
1295
1305
|
await fetch(url, {
|
|
@@ -1332,7 +1342,7 @@ const $3898fb88b880f5ba$export$de363e709c412c8a = (fn, wait = 300)=>{
|
|
|
1332
1342
|
|
|
1333
1343
|
|
|
1334
1344
|
|
|
1335
|
-
const $987c962fd22b0c93$export$6ad2c48011488f7 = async (apiUrl, { file: file, token: token, type: type })=>{
|
|
1345
|
+
const $987c962fd22b0c93$export$6ad2c48011488f7 = async (apiUrl, { file: file, token: token, type: type, recordingGroup: recordingGroup })=>{
|
|
1336
1346
|
if (!file) throw new Error(`Missing file on "${file}"`);
|
|
1337
1347
|
const upload = await fetch(`${apiUrl}/public/streams/${token}/events/upload`, {
|
|
1338
1348
|
method: 'POST',
|
|
@@ -1342,7 +1352,8 @@ const $987c962fd22b0c93$export$6ad2c48011488f7 = async (apiUrl, { file: file, to
|
|
|
1342
1352
|
body: JSON.stringify({
|
|
1343
1353
|
filename: file.name,
|
|
1344
1354
|
contentLength: file.size,
|
|
1345
|
-
type: type
|
|
1355
|
+
type: type,
|
|
1356
|
+
recordingGroup: recordingGroup
|
|
1346
1357
|
})
|
|
1347
1358
|
});
|
|
1348
1359
|
const { url: url, headers: headers, filename: filename } = await upload.json();
|
|
@@ -1380,6 +1391,340 @@ const $54d9e0891cb8e108$export$c30017717ce2168e = async (apiUrl, token, asset)=>
|
|
|
1380
1391
|
|
|
1381
1392
|
|
|
1382
1393
|
|
|
1394
|
+
|
|
1395
|
+
const $7ecd162d9d84ca18$var$log = new (0, $d0c6baf97675ab49$export$2e2bcd8739ae039)('TransportMonitor');
|
|
1396
|
+
const $7ecd162d9d84ca18$var$debugLevel = {
|
|
1397
|
+
audio: 0,
|
|
1398
|
+
video: 0,
|
|
1399
|
+
'ice-network': 0,
|
|
1400
|
+
'outbound-rtp': 0
|
|
1401
|
+
};
|
|
1402
|
+
const $7ecd162d9d84ca18$var$DURATION_MS = 3000;
|
|
1403
|
+
const $7ecd162d9d84ca18$var$MONITOR_INTERVAL_DURATION_MS = 200;
|
|
1404
|
+
const $7ecd162d9d84ca18$var$RECENT_STATS_ARRAY_SIZE = $7ecd162d9d84ca18$var$DURATION_MS / $7ecd162d9d84ca18$var$MONITOR_INTERVAL_DURATION_MS;
|
|
1405
|
+
const $7ecd162d9d84ca18$var$RTX_PERCENT_THRESHOLD = 5;
|
|
1406
|
+
const $7ecd162d9d84ca18$var$RTT_MS_THRESHOLD = 400;
|
|
1407
|
+
const $7ecd162d9d84ca18$var$transportStatTypes = [
|
|
1408
|
+
'audio',
|
|
1409
|
+
'video',
|
|
1410
|
+
'ice-network',
|
|
1411
|
+
'outbound-rtp'
|
|
1412
|
+
];
|
|
1413
|
+
class $7ecd162d9d84ca18$export$2e2bcd8739ae039 {
|
|
1414
|
+
constructor(transport, listener, description){
|
|
1415
|
+
this.monitoringIntervals = {};
|
|
1416
|
+
this.enabledMonitors = {
|
|
1417
|
+
audio: false,
|
|
1418
|
+
video: false,
|
|
1419
|
+
'ice-network': false,
|
|
1420
|
+
'outbound-rtp': false
|
|
1421
|
+
};
|
|
1422
|
+
this.activeMonitors = 0;
|
|
1423
|
+
this.monitorFuncs = {
|
|
1424
|
+
audio: this.monitorAudio.bind(this),
|
|
1425
|
+
video: this.monitorVideo.bind(this),
|
|
1426
|
+
'ice-network': this.monitorIceNetwork.bind(this),
|
|
1427
|
+
'outbound-rtp': this.monitorOutboundRtp.bind(this)
|
|
1428
|
+
};
|
|
1429
|
+
this.isConnected = false;
|
|
1430
|
+
this.issues = 0;
|
|
1431
|
+
// ice disconnections
|
|
1432
|
+
this.disconnectsCount = 0;
|
|
1433
|
+
this.disconnectsThreshold = 4;
|
|
1434
|
+
// RTT
|
|
1435
|
+
this.allTimeAverageRTT = 0;
|
|
1436
|
+
this.lastStateRttOk = true;
|
|
1437
|
+
this.rttCollects = 0;
|
|
1438
|
+
// RTX for all media sources
|
|
1439
|
+
this.mediaSourceStats = {};
|
|
1440
|
+
this.outboundRtpCollects = 0;
|
|
1441
|
+
this.transport = transport;
|
|
1442
|
+
this.description = description;
|
|
1443
|
+
this.listener = listener;
|
|
1444
|
+
this.transport.on('connectionstatechange', this.onConnectionStateChange.bind(this));
|
|
1445
|
+
this.recentRTTs = new Array($7ecd162d9d84ca18$var$RECENT_STATS_ARRAY_SIZE).fill(0);
|
|
1446
|
+
}
|
|
1447
|
+
isTransportConnected() {
|
|
1448
|
+
return this.isConnected;
|
|
1449
|
+
}
|
|
1450
|
+
setDisconnectsThreshold(threshold) {
|
|
1451
|
+
this.disconnectsThreshold = Math.min(1, threshold);
|
|
1452
|
+
}
|
|
1453
|
+
getDisconnectsThreshold() {
|
|
1454
|
+
return this.disconnectsThreshold;
|
|
1455
|
+
}
|
|
1456
|
+
getCurrentDisconnectsCount() {
|
|
1457
|
+
return this.disconnectsCount;
|
|
1458
|
+
}
|
|
1459
|
+
getTransport() {
|
|
1460
|
+
return this.transport;
|
|
1461
|
+
}
|
|
1462
|
+
resetStats() {
|
|
1463
|
+
this.issues = 0;
|
|
1464
|
+
this.disconnectsCount = 0;
|
|
1465
|
+
this.recentRTTs = new Array($7ecd162d9d84ca18$var$RECENT_STATS_ARRAY_SIZE).fill(0);
|
|
1466
|
+
this.rttCollects = 0;
|
|
1467
|
+
this.lastStateRttOk = true;
|
|
1468
|
+
this.mediaSourceStats = {};
|
|
1469
|
+
this.outboundRtpCollects = 0;
|
|
1470
|
+
}
|
|
1471
|
+
async onConnectionStateChange(state) {
|
|
1472
|
+
$7ecd162d9d84ca18$var$log.log('onConnectionStateChange', `\nTransport ${this.transport.id} connection state changed to:`, state);
|
|
1473
|
+
switch(state){
|
|
1474
|
+
case 'connected':
|
|
1475
|
+
this.isConnected = true;
|
|
1476
|
+
this.updateTransportState({
|
|
1477
|
+
isConnected: true
|
|
1478
|
+
});
|
|
1479
|
+
this.startAllEnabledMonitorings();
|
|
1480
|
+
break;
|
|
1481
|
+
case 'disconnected':
|
|
1482
|
+
this.isConnected = false;
|
|
1483
|
+
this.disconnectsCount++;
|
|
1484
|
+
this.updateTransportState({
|
|
1485
|
+
isConnected: false
|
|
1486
|
+
});
|
|
1487
|
+
this.stopAllMonitorings();
|
|
1488
|
+
if (this.disconnectsCount === this.disconnectsThreshold) this.listener?.onTransportManyDisconnections(this.transport);
|
|
1489
|
+
break;
|
|
1490
|
+
case 'failed':
|
|
1491
|
+
this.isConnected = false;
|
|
1492
|
+
this.updateTransportState({
|
|
1493
|
+
isConnected: false
|
|
1494
|
+
});
|
|
1495
|
+
this.stopAllMonitorings();
|
|
1496
|
+
$7ecd162d9d84ca18$var$log.warn('onConnectionStateChange', `\nTransport ${this.transport.id} failed. Closed all monitorings.`);
|
|
1497
|
+
break;
|
|
1498
|
+
case 'closed':
|
|
1499
|
+
this.stopAllMonitorings();
|
|
1500
|
+
$7ecd162d9d84ca18$var$log.log('onConnectionStateChange', `\nTransport ${this.transport.id} closed. Closed all monitorings.`);
|
|
1501
|
+
break;
|
|
1502
|
+
}
|
|
1503
|
+
}
|
|
1504
|
+
updateTransportState({ isRttOk: isRttOk, isRtxOk: isRtxOk, isConnected: isConnected }) {
|
|
1505
|
+
const previousIssues = this.issues;
|
|
1506
|
+
if (isRttOk !== undefined) this.issues += isRttOk ? -1 : 1;
|
|
1507
|
+
if (isRtxOk !== undefined) this.issues += isRtxOk ? -1 : 1;
|
|
1508
|
+
if (isConnected !== undefined) this.issues += isConnected ? -1 : 1;
|
|
1509
|
+
this.issues = Math.max(0, this.issues); // protection against desync states
|
|
1510
|
+
if (previousIssues * this.issues === 0) this.listener?.onTransportStateChangeNetwork(this.transport, Boolean(this.issues === 0));
|
|
1511
|
+
}
|
|
1512
|
+
async startGetStats() {
|
|
1513
|
+
if (this.statsInterval) return;
|
|
1514
|
+
this.statsInterval = setInterval(async ()=>{
|
|
1515
|
+
if (!this.transport.closed) this.rtcStatsReports = await this.transport.getStats();
|
|
1516
|
+
}, $7ecd162d9d84ca18$var$MONITOR_INTERVAL_DURATION_MS);
|
|
1517
|
+
}
|
|
1518
|
+
stopGetStats() {
|
|
1519
|
+
clearInterval(this.statsInterval);
|
|
1520
|
+
this.statsInterval = undefined;
|
|
1521
|
+
this.rtcStatsReports = undefined;
|
|
1522
|
+
}
|
|
1523
|
+
async setMonitoringEnabled(type, enabled) {
|
|
1524
|
+
this.enabledMonitors[type] = enabled;
|
|
1525
|
+
if (enabled && this.transport.connectionState === 'connected') this.startMonitoring(type);
|
|
1526
|
+
else this.stopMonitoring(type);
|
|
1527
|
+
}
|
|
1528
|
+
startAllEnabledMonitorings() {
|
|
1529
|
+
$7ecd162d9d84ca18$var$transportStatTypes.forEach((type)=>{
|
|
1530
|
+
if (this.enabledMonitors[type]) this.startMonitoring(type);
|
|
1531
|
+
});
|
|
1532
|
+
}
|
|
1533
|
+
disableAllMonitorings() {
|
|
1534
|
+
$7ecd162d9d84ca18$var$transportStatTypes.forEach((type)=>{
|
|
1535
|
+
this.enabledMonitors[type] = false;
|
|
1536
|
+
});
|
|
1537
|
+
this.stopAllMonitorings();
|
|
1538
|
+
}
|
|
1539
|
+
stopMonitoring(type) {
|
|
1540
|
+
if (!this.monitoringIntervals[type]) return;
|
|
1541
|
+
clearInterval(this.monitoringIntervals[type]);
|
|
1542
|
+
delete this.monitoringIntervals[type];
|
|
1543
|
+
this.activeMonitors--;
|
|
1544
|
+
if (this.activeMonitors === 0) this.stopGetStats();
|
|
1545
|
+
}
|
|
1546
|
+
stopAllMonitorings() {
|
|
1547
|
+
this.stopGetStats();
|
|
1548
|
+
$7ecd162d9d84ca18$var$transportStatTypes.forEach((type)=>{
|
|
1549
|
+
clearInterval(this.monitoringIntervals[type]);
|
|
1550
|
+
delete this.monitoringIntervals[type];
|
|
1551
|
+
});
|
|
1552
|
+
this.activeMonitors = 0;
|
|
1553
|
+
}
|
|
1554
|
+
async startMonitoring(type) {
|
|
1555
|
+
if (this.monitoringIntervals[type]) return true;
|
|
1556
|
+
const stats = await this.transport.getStats();
|
|
1557
|
+
let canMonitor = false;
|
|
1558
|
+
stats.forEach((stat)=>{
|
|
1559
|
+
switch(stat.type){
|
|
1560
|
+
case 'media-source':
|
|
1561
|
+
if (type === stat.kind) canMonitor = true;
|
|
1562
|
+
break;
|
|
1563
|
+
case 'candidate-pair':
|
|
1564
|
+
if (type === 'ice-network') canMonitor = true;
|
|
1565
|
+
break;
|
|
1566
|
+
case 'outbound-rtp':
|
|
1567
|
+
if (type === 'outbound-rtp') canMonitor = true;
|
|
1568
|
+
break;
|
|
1569
|
+
}
|
|
1570
|
+
});
|
|
1571
|
+
if (!canMonitor) $7ecd162d9d84ca18$var$log.warn('startMonitoring', `\nCannot monitor ${type} for transport:`, this.transport.id);
|
|
1572
|
+
else {
|
|
1573
|
+
$7ecd162d9d84ca18$var$log.log('startMonitoring', `\nStarting ${type} monitoring for transport:`, this.transport.id);
|
|
1574
|
+
if (this.activeMonitors === 0 || !this.statsInterval) this.startGetStats();
|
|
1575
|
+
this.activeMonitors++;
|
|
1576
|
+
this.monitoringIntervals[type] = setInterval(()=>{
|
|
1577
|
+
this.monitorFuncs[type]();
|
|
1578
|
+
}, $7ecd162d9d84ca18$var$MONITOR_INTERVAL_DURATION_MS);
|
|
1579
|
+
}
|
|
1580
|
+
return canMonitor;
|
|
1581
|
+
}
|
|
1582
|
+
async monitorAudio() {
|
|
1583
|
+
if (!this.rtcStatsReports) return;
|
|
1584
|
+
this.rtcStatsReports.forEach((stat)=>{
|
|
1585
|
+
if (stat.type === 'media-source' && stat.kind === 'audio') {
|
|
1586
|
+
if ($7ecd162d9d84ca18$var$debugLevel['audio'] >= 2) console.log(`Audio stats for transport (description: ${this.description}):
|
|
1587
|
+
- ssrc: ${stat.ssrc}
|
|
1588
|
+
- audioLevel: ${stat.audioLevel}
|
|
1589
|
+
- totalAudioEnergy: ${stat.totalAudioEnergy}`);
|
|
1590
|
+
}
|
|
1591
|
+
});
|
|
1592
|
+
}
|
|
1593
|
+
async monitorVideo() {
|
|
1594
|
+
if (!this.rtcStatsReports) return;
|
|
1595
|
+
this.rtcStatsReports.forEach((stat)=>{
|
|
1596
|
+
if (stat.type === 'media-source' && stat.kind === 'video') {
|
|
1597
|
+
if ($7ecd162d9d84ca18$var$debugLevel['video'] >= 2) console.log(`Video stats for transport (description: ${this.description}):
|
|
1598
|
+
- ssrc: ${stat.ssrc}
|
|
1599
|
+
- Frames: ${stat.frames}
|
|
1600
|
+
- FPS: ${stat.framesPerSecond}
|
|
1601
|
+
- width: ${stat.width}
|
|
1602
|
+
- height: ${stat.height}`);
|
|
1603
|
+
}
|
|
1604
|
+
});
|
|
1605
|
+
}
|
|
1606
|
+
async monitorIceNetwork() {
|
|
1607
|
+
if (!this.rtcStatsReports) return;
|
|
1608
|
+
let succeeded = 0;
|
|
1609
|
+
this.rtcStatsReports.forEach((stat)=>{
|
|
1610
|
+
if (stat.type === 'candidate-pair' && stat.state === 'succeeded') {
|
|
1611
|
+
if (succeeded === 0) {
|
|
1612
|
+
if ($7ecd162d9d84ca18$var$debugLevel['ice-network'] >= 2) console.log(`Network stats for transport (description: ${this.description}):
|
|
1613
|
+
- RTT (ms): ${stat.currentRoundTripTime * 1000}
|
|
1614
|
+
- Packets sent: ${stat.packetsSent}
|
|
1615
|
+
- Packets discarded on send: ${stat.packetsDiscardedOnSend}`);
|
|
1616
|
+
this.recentRTTs.shift();
|
|
1617
|
+
this.recentRTTs.push(stat.currentRoundTripTime);
|
|
1618
|
+
this.allTimeAverageRTT = stat.totalRoundTripTime * 1000 / stat.responsesReceived;
|
|
1619
|
+
succeeded++;
|
|
1620
|
+
} else console.warn(`Multiple candidate pairs succeeded for transport:`, this.transport.id, '\nIgnoring.'); // this should not happen
|
|
1621
|
+
}
|
|
1622
|
+
});
|
|
1623
|
+
if (succeeded === 0) {
|
|
1624
|
+
if ($7ecd162d9d84ca18$var$debugLevel['ice-network'] >= 2) console.warn('monitorIceNetwork', `No candidate-pair found (yet) for transport:`, this.transport.id);
|
|
1625
|
+
return;
|
|
1626
|
+
}
|
|
1627
|
+
this.rttCollects++;
|
|
1628
|
+
if (this.rttCollects % $7ecd162d9d84ca18$var$RECENT_STATS_ARRAY_SIZE === 0) {
|
|
1629
|
+
this.checkIceNetwork();
|
|
1630
|
+
this.rttCollects = 0;
|
|
1631
|
+
}
|
|
1632
|
+
}
|
|
1633
|
+
checkIceNetwork() {
|
|
1634
|
+
const rttSum = this.recentRTTs.reduce((a, b)=>a + b, 0);
|
|
1635
|
+
const rttAverageMs = Math.round(1000 * rttSum / $7ecd162d9d84ca18$var$RECENT_STATS_ARRAY_SIZE);
|
|
1636
|
+
const isRttOk = Boolean(rttAverageMs <= $7ecd162d9d84ca18$var$RTT_MS_THRESHOLD);
|
|
1637
|
+
if (isRttOk !== this.lastStateRttOk) {
|
|
1638
|
+
console.warn(`Transport: ${this.transport.id}\nRTT state changed to:`, isRttOk);
|
|
1639
|
+
this.updateTransportState({
|
|
1640
|
+
isRttOk: isRttOk
|
|
1641
|
+
});
|
|
1642
|
+
}
|
|
1643
|
+
this.lastStateRttOk = isRttOk;
|
|
1644
|
+
this.listener?.onNetworkLog(this.transport, {
|
|
1645
|
+
rtt: rttAverageMs
|
|
1646
|
+
});
|
|
1647
|
+
if ($7ecd162d9d84ca18$var$debugLevel['ice-network'] >= 1) {
|
|
1648
|
+
console.log(`Last ${$7ecd162d9d84ca18$var$DURATION_MS}ms average RTT: ${rttAverageMs}ms`, `\nAll time average RTT: ${this.allTimeAverageRTT}ms`);
|
|
1649
|
+
if (!isRttOk) console.warn(`High RTT detected:`, rttAverageMs);
|
|
1650
|
+
}
|
|
1651
|
+
}
|
|
1652
|
+
async monitorOutboundRtp() {
|
|
1653
|
+
if (!this.rtcStatsReports) return;
|
|
1654
|
+
this.rtcStatsReports.forEach((stat)=>{
|
|
1655
|
+
if (stat.type === 'outbound-rtp') {
|
|
1656
|
+
if ($7ecd162d9d84ca18$var$debugLevel['outbound-rtp'] >= 2) console.log(`Outbound RTP stats for transport (description: ${this.description}):
|
|
1657
|
+
- ssrc: ${stat.ssrc}
|
|
1658
|
+
- kind: ${stat.kind}
|
|
1659
|
+
- packets sent: ${stat.packetsSent}
|
|
1660
|
+
- packets rtx: ${stat.retransmittedPacketsSent}
|
|
1661
|
+
- retransmission %: ${100 * stat.retransmittedPacketsSent / stat.packetsSent}
|
|
1662
|
+
- sli count: ${stat.sliCount}
|
|
1663
|
+
- nack count: ${stat.nackCount}`);
|
|
1664
|
+
if (!this.mediaSourceStats[stat.ssrc]) this.mediaSourceStats[stat.ssrc] = {
|
|
1665
|
+
ssrc: stat.ssrc,
|
|
1666
|
+
kind: stat.kind,
|
|
1667
|
+
averagesRtxPercent: [],
|
|
1668
|
+
recentPacketsSent: new Array($7ecd162d9d84ca18$var$RECENT_STATS_ARRAY_SIZE).fill(0),
|
|
1669
|
+
recentPacketsRtx: new Array($7ecd162d9d84ca18$var$RECENT_STATS_ARRAY_SIZE).fill(0),
|
|
1670
|
+
lastStateRtxOK: true
|
|
1671
|
+
};
|
|
1672
|
+
const mss = this.mediaSourceStats[stat.ssrc];
|
|
1673
|
+
mss.recentPacketsSent.shift();
|
|
1674
|
+
mss.recentPacketsRtx.shift();
|
|
1675
|
+
mss.recentPacketsSent.push(stat.packetsSent);
|
|
1676
|
+
mss.recentPacketsRtx.push(stat.retransmittedPacketsSent);
|
|
1677
|
+
}
|
|
1678
|
+
});
|
|
1679
|
+
this.outboundRtpCollects++;
|
|
1680
|
+
if (this.outboundRtpCollects % $7ecd162d9d84ca18$var$RECENT_STATS_ARRAY_SIZE === 0) {
|
|
1681
|
+
Object.values(this.mediaSourceStats).forEach((mss)=>{
|
|
1682
|
+
this.checkOutboundRtp(mss);
|
|
1683
|
+
});
|
|
1684
|
+
this.outboundRtpCollects = 0;
|
|
1685
|
+
}
|
|
1686
|
+
}
|
|
1687
|
+
checkOutboundRtp(mss) {
|
|
1688
|
+
const packetsSentSum = mss.recentPacketsSent[mss.recentPacketsSent.length - 1] - mss.recentPacketsSent[0];
|
|
1689
|
+
const packetsRtxSum = mss.recentPacketsRtx[mss.recentPacketsRtx.length - 1] - mss.recentPacketsRtx[0];
|
|
1690
|
+
const rtxPercent = packetsSentSum === 0 ? 0 : 100 * packetsRtxSum / packetsSentSum;
|
|
1691
|
+
const rtxPercentAllTime = 100 * mss.recentPacketsRtx[mss.recentPacketsRtx.length - 1] / mss.recentPacketsSent[mss.recentPacketsSent.length - 1];
|
|
1692
|
+
mss.averagesRtxPercent.push(rtxPercent);
|
|
1693
|
+
const isRtxOk = Boolean(rtxPercent <= $7ecd162d9d84ca18$var$RTX_PERCENT_THRESHOLD);
|
|
1694
|
+
if (isRtxOk !== mss.lastStateRtxOK) {
|
|
1695
|
+
console.warn(`Transport: ${this.transport.id}\n[ssrc ${mss.ssrc} ${mss.kind || '?'}] RTX state changed to:`, isRtxOk);
|
|
1696
|
+
this.updateTransportState({
|
|
1697
|
+
isRtxOk: isRtxOk
|
|
1698
|
+
});
|
|
1699
|
+
}
|
|
1700
|
+
mss.lastStateRtxOK = isRtxOk;
|
|
1701
|
+
this.listener?.onNetworkLog(this.transport, {
|
|
1702
|
+
rtxPercent: rtxPercent,
|
|
1703
|
+
kind: mss.kind
|
|
1704
|
+
});
|
|
1705
|
+
if ($7ecd162d9d84ca18$var$debugLevel['outbound-rtp'] >= 1) {
|
|
1706
|
+
console.log(`[ssrc ${mss.ssrc} ${mss.kind || '?'}] For the last ${$7ecd162d9d84ca18$var$DURATION_MS}ms:
|
|
1707
|
+
- packets sent: ${packetsSentSum}
|
|
1708
|
+
- packets rtx: ${packetsRtxSum}
|
|
1709
|
+
- rtx %: ${Math.round(100 * rtxPercent) / 100}`, `\nAll time average rtx %:`, Math.round(100 * rtxPercentAllTime) / 100);
|
|
1710
|
+
if (!isRtxOk) console.warn(`High ${mss.kind || ''} packets rtx % detected:`, Math.round(100 * rtxPercent) / 100);
|
|
1711
|
+
}
|
|
1712
|
+
}
|
|
1713
|
+
}
|
|
1714
|
+
|
|
1715
|
+
|
|
1716
|
+
const $f0e58d5d03fc26c4$export$e1228c246580bf68 = async (apiUrl, token, recordingGroup)=>{
|
|
1717
|
+
const answer = await fetch(`${apiUrl}/public/streams/${token}/live/${recordingGroup}`, {
|
|
1718
|
+
method: 'GET',
|
|
1719
|
+
headers: {
|
|
1720
|
+
'Content-Type': 'application/json'
|
|
1721
|
+
}
|
|
1722
|
+
});
|
|
1723
|
+
if (answer.ok) return answer.json();
|
|
1724
|
+
throw new Error(` request failed ${answer.status} `);
|
|
1725
|
+
};
|
|
1726
|
+
|
|
1727
|
+
|
|
1383
1728
|
const $1dedebd5ff3002eb$var$log = new (0, $d0c6baf97675ab49$export$2e2bcd8739ae039)('StreamerClient');
|
|
1384
1729
|
const $1dedebd5ff3002eb$export$103bedf43ba882db = {
|
|
1385
1730
|
WEBRTC_FAILED: 'WRTC1',
|
|
@@ -1390,6 +1735,7 @@ const $1dedebd5ff3002eb$export$103bedf43ba882db = {
|
|
|
1390
1735
|
SOCKET_LOST: 'SOCK1',
|
|
1391
1736
|
USER_LIMIT: 'USERLIMIT'
|
|
1392
1737
|
};
|
|
1738
|
+
const $1dedebd5ff3002eb$var$SENTRY_WHITELIST_ERROR_CAUSE = 'getUserMedia error';
|
|
1393
1739
|
const $1dedebd5ff3002eb$export$d21ffcc5eb136bfa = {
|
|
1394
1740
|
qvga: {
|
|
1395
1741
|
width: {
|
|
@@ -1428,6 +1774,7 @@ const $1dedebd5ff3002eb$export$d21ffcc5eb136bfa = {
|
|
|
1428
1774
|
qualityIndex: 2
|
|
1429
1775
|
}
|
|
1430
1776
|
};
|
|
1777
|
+
const $1dedebd5ff3002eb$var$ONE_TRANSPORT_FOR_ALL_MEDIAS = true;
|
|
1431
1778
|
const $1dedebd5ff3002eb$var$WEBCAM_SIMULCAST_ENCODINGS = [
|
|
1432
1779
|
{
|
|
1433
1780
|
scaleResolutionDownBy: 4,
|
|
@@ -1498,6 +1845,7 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
|
|
|
1498
1845
|
device: null,
|
|
1499
1846
|
muted: false
|
|
1500
1847
|
};
|
|
1848
|
+
this.screenshare = {};
|
|
1501
1849
|
this.roomId = '';
|
|
1502
1850
|
this.companyId = 0;
|
|
1503
1851
|
this.peerId = '';
|
|
@@ -1520,7 +1868,8 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
|
|
|
1520
1868
|
},
|
|
1521
1869
|
screenshare: {
|
|
1522
1870
|
enabled: false
|
|
1523
|
-
}
|
|
1871
|
+
},
|
|
1872
|
+
isAskingPermissions: this.tracksHandler.isAskingPermissions
|
|
1524
1873
|
};
|
|
1525
1874
|
peer.producersData.forEach((producer)=>{
|
|
1526
1875
|
if (producer.deviceType === 'microphone') deviceState.microphone.enabled = true;
|
|
@@ -1549,23 +1898,31 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
|
|
|
1549
1898
|
};
|
|
1550
1899
|
}
|
|
1551
1900
|
onStartSpeak() {
|
|
1552
|
-
|
|
1553
|
-
|
|
1554
|
-
|
|
1555
|
-
|
|
1556
|
-
|
|
1557
|
-
|
|
1558
|
-
|
|
1559
|
-
|
|
1901
|
+
try {
|
|
1902
|
+
if (this.micProducer && !this.micProducer.paused) {
|
|
1903
|
+
const event = new $1dedebd5ff3002eb$var$SnapcallEvent('localStartSpeak', {
|
|
1904
|
+
cancelable: true,
|
|
1905
|
+
bubbles: true,
|
|
1906
|
+
detail: {}
|
|
1907
|
+
});
|
|
1908
|
+
this.dispatchEvent(event);
|
|
1909
|
+
this.protoo?.notify('startSpeak');
|
|
1910
|
+
}
|
|
1911
|
+
} catch (err) {
|
|
1912
|
+
console.error('failed to send startSpeak event', err);
|
|
1560
1913
|
}
|
|
1561
1914
|
}
|
|
1562
1915
|
onStopSpeak() {
|
|
1563
|
-
|
|
1564
|
-
|
|
1565
|
-
|
|
1566
|
-
|
|
1567
|
-
|
|
1568
|
-
|
|
1916
|
+
try {
|
|
1917
|
+
if (this.micProducer && !this.micProducer.paused) {
|
|
1918
|
+
const event = new $1dedebd5ff3002eb$var$SnapcallEvent('localStopSpeak', {
|
|
1919
|
+
detail: {}
|
|
1920
|
+
});
|
|
1921
|
+
this.dispatchEvent(event);
|
|
1922
|
+
this.protoo?.notify('stopSpeak');
|
|
1923
|
+
}
|
|
1924
|
+
} catch (err) {
|
|
1925
|
+
console.error('failed to send stopSpeak event', err);
|
|
1569
1926
|
}
|
|
1570
1927
|
}
|
|
1571
1928
|
onCriticalError(code) {
|
|
@@ -1642,7 +1999,7 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
|
|
|
1642
1999
|
events: '0'
|
|
1643
2000
|
});
|
|
1644
2001
|
if (options.authKey) searchParams.append('authKey', options.authKey);
|
|
1645
|
-
const recorderPath = this.joinOptions.recorder ? '
|
|
2002
|
+
const recorderPath = this.joinOptions.recorder ? 'recorder' : '';
|
|
1646
2003
|
url = `${this.config.streamerServer}/${instanceId}/v2/${recorderPath}?${searchParams}`;
|
|
1647
2004
|
} catch (roomError) {
|
|
1648
2005
|
console.error('init', roomError);
|
|
@@ -1891,14 +2248,16 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
|
|
|
1891
2248
|
closeWebrtcTransport(key) {
|
|
1892
2249
|
const transport = this.mediasoupTransport[key];
|
|
1893
2250
|
if (transport) {
|
|
1894
|
-
transport
|
|
1895
|
-
|
|
2251
|
+
transport.transport?.close();
|
|
2252
|
+
transport.transportMonitor?.disableAllMonitorings(); // FIX: somehow, the 'closed' event is not triggered, manually shutting down the monitor.
|
|
2253
|
+
clearTimeout(transport.disconnectTimeout);
|
|
1896
2254
|
delete this.mediasoupTransport[key];
|
|
1897
2255
|
}
|
|
1898
2256
|
}
|
|
1899
2257
|
async getTransport(kind, direction) {
|
|
1900
2258
|
if (!this.streamerMediasoup || !this.protoo) throw new Error('streamerMediasoup not initialized');
|
|
1901
|
-
|
|
2259
|
+
const transportKey = $1dedebd5ff3002eb$var$ONE_TRANSPORT_FOR_ALL_MEDIAS ? direction : `${kind}-${direction}`;
|
|
2260
|
+
let transport = this.mediasoupTransport[transportKey];
|
|
1902
2261
|
if (!transport) {
|
|
1903
2262
|
try {
|
|
1904
2263
|
const promise = this.streamerMediasoup.createTransport(this.protoo, direction);
|
|
@@ -1907,9 +2266,16 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
|
|
|
1907
2266
|
kind: kind,
|
|
1908
2267
|
createPromise: promise
|
|
1909
2268
|
};
|
|
1910
|
-
this.mediasoupTransport[
|
|
2269
|
+
this.mediasoupTransport[transportKey] = transport;
|
|
1911
2270
|
transport.transport = await promise;
|
|
1912
|
-
if (transport.transport)
|
|
2271
|
+
if (transport.transport) {
|
|
2272
|
+
this.listenWebRTCTransportStates(transport);
|
|
2273
|
+
transport.transportMonitor = new (0, $7ecd162d9d84ca18$export$2e2bcd8739ae039)(transport.transport, this, transportKey);
|
|
2274
|
+
if (direction === 'send') {
|
|
2275
|
+
transport.transportMonitor?.setMonitoringEnabled('ice-network', true);
|
|
2276
|
+
transport.transportMonitor?.setMonitoringEnabled('outbound-rtp', true);
|
|
2277
|
+
}
|
|
2278
|
+
}
|
|
1913
2279
|
} catch (err) {
|
|
1914
2280
|
this.onCriticalError($1dedebd5ff3002eb$export$103bedf43ba882db.CREATE_TRANSPORT_FAILED);
|
|
1915
2281
|
throw err;
|
|
@@ -1919,13 +2285,18 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
|
|
|
1919
2285
|
else return transport.createPromise;
|
|
1920
2286
|
}
|
|
1921
2287
|
listenWebRTCTransportStates(transport) {
|
|
2288
|
+
console.log('listenWebRTCTransportStates', transport);
|
|
1922
2289
|
if (!transport.transport) throw new Error('can not listen states of undefined transport');
|
|
1923
2290
|
transport.transport.on('connectionstatechange', (event)=>{
|
|
1924
2291
|
if (transport.transport && !transport.transport.closed) {
|
|
1925
2292
|
$1dedebd5ff3002eb$var$log.log('recv connectionstatechange: ', event);
|
|
1926
2293
|
if (event === 'disconnected') transport.disconnectTimeout = setTimeout(()=>{
|
|
1927
2294
|
$1dedebd5ff3002eb$var$log.log('listenWebRTCTransportStats', `trying to restart transport for ${transport.kind}`);
|
|
1928
|
-
if (transport.transport)
|
|
2295
|
+
if (transport.transport) {
|
|
2296
|
+
$1dedebd5ff3002eb$var$log.warn('listenWebRTCTransportStats', `webrtc transport state disconnected for transport : ${transport}
|
|
2297
|
+
restarting transport in 5 seconds...`);
|
|
2298
|
+
this.restartIce(transport.transport);
|
|
2299
|
+
}
|
|
1929
2300
|
}, 5000);
|
|
1930
2301
|
else if (event === 'connected') clearTimeout(transport.disconnectTimeout);
|
|
1931
2302
|
else if (event === 'failed') {
|
|
@@ -1936,6 +2307,26 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
|
|
|
1936
2307
|
}
|
|
1937
2308
|
});
|
|
1938
2309
|
}
|
|
2310
|
+
onTransportManyDisconnections(transport) {
|
|
2311
|
+
$1dedebd5ff3002eb$var$log.warn('onTransportManyDisconnections', transport.id);
|
|
2312
|
+
}
|
|
2313
|
+
onTransportStateChangeNetwork(transport, isOk) {
|
|
2314
|
+
$1dedebd5ff3002eb$var$log.warn('onTransportStateChangeNetwork', '\nid:', transport.id, '\nisOk:', isOk);
|
|
2315
|
+
const event = new $1dedebd5ff3002eb$var$SnapcallEvent('networkStateChange', {
|
|
2316
|
+
detail: {
|
|
2317
|
+
isOk: isOk
|
|
2318
|
+
}
|
|
2319
|
+
});
|
|
2320
|
+
this.dispatchEvent(event);
|
|
2321
|
+
}
|
|
2322
|
+
onNetworkLog(transport, log) {
|
|
2323
|
+
this.protoo?.notify('networkLog', {
|
|
2324
|
+
roomId: this.roomId,
|
|
2325
|
+
peerId: this.peerId,
|
|
2326
|
+
agentEmail: this.agentIdentity?.email,
|
|
2327
|
+
...log
|
|
2328
|
+
});
|
|
2329
|
+
}
|
|
1939
2330
|
async setAgentIdentity({ apiKey: apiKey, email: email }) {
|
|
1940
2331
|
if (apiKey) {
|
|
1941
2332
|
this.joinOptions.apiKey = apiKey;
|
|
@@ -2161,54 +2552,73 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
|
|
|
2161
2552
|
}
|
|
2162
2553
|
}
|
|
2163
2554
|
async enableMicrophone({ deviceId: deviceId } = {}) {
|
|
2164
|
-
|
|
2165
|
-
|
|
2166
|
-
|
|
2167
|
-
|
|
2168
|
-
|
|
2169
|
-
|
|
2170
|
-
|
|
2171
|
-
|
|
2172
|
-
|
|
2173
|
-
this.
|
|
2174
|
-
|
|
2175
|
-
|
|
2176
|
-
|
|
2177
|
-
|
|
2178
|
-
|
|
2179
|
-
|
|
2180
|
-
|
|
2181
|
-
|
|
2182
|
-
|
|
2183
|
-
|
|
2184
|
-
|
|
2185
|
-
|
|
2186
|
-
|
|
2187
|
-
|
|
2188
|
-
|
|
2189
|
-
|
|
2190
|
-
appData: {
|
|
2191
|
-
deviceType: deviceType
|
|
2192
|
-
}
|
|
2193
|
-
});
|
|
2194
|
-
micProducer.on('transportclose', ()=>{
|
|
2195
|
-
$1dedebd5ff3002eb$var$log.log('enableMicrophone', 'micproducer transportclose');
|
|
2196
|
-
});
|
|
2197
|
-
track.addEventListener('ended', ()=>{
|
|
2198
|
-
$1dedebd5ff3002eb$var$log.log('enableMicrophone', 'track ended!');
|
|
2199
|
-
});
|
|
2200
|
-
micProducer.on('trackended', async ()=>{
|
|
2201
|
-
$1dedebd5ff3002eb$var$log.log('enableMicrophone', 'microphone disconnected!');
|
|
2202
|
-
if (navigator.mediaDevices.ondevicechange === undefined) this.closeMicrophoneProducer();
|
|
2203
|
-
});
|
|
2204
|
-
this.micProducer = micProducer;
|
|
2205
|
-
this.microphone.device = device || null;
|
|
2206
|
-
this.microphone.muted = false;
|
|
2207
|
-
const event = new $1dedebd5ff3002eb$var$SnapcallEvent('microphoneEnabled', {
|
|
2208
|
-
detail: {}
|
|
2555
|
+
await this._enableMicrophone({
|
|
2556
|
+
deviceId: deviceId
|
|
2557
|
+
}).catch((error)=>{
|
|
2558
|
+
this.audioLevel?.release();
|
|
2559
|
+
this.audioLevel = undefined;
|
|
2560
|
+
this.audioMedia = undefined;
|
|
2561
|
+
this.microphone.device = null;
|
|
2562
|
+
this.microphone.muted = true;
|
|
2563
|
+
this.closeMicrophoneProducer();
|
|
2564
|
+
this.microphone.error = error;
|
|
2565
|
+
if (error.cause !== $1dedebd5ff3002eb$var$SENTRY_WHITELIST_ERROR_CAUSE) $jQDcL$sentrybrowser.captureException(error);
|
|
2566
|
+
throw error;
|
|
2567
|
+
});
|
|
2568
|
+
this.microphone.error = undefined;
|
|
2569
|
+
}
|
|
2570
|
+
async _enableMicrophone({ deviceId: deviceId } = {}) {
|
|
2571
|
+
if (this.micProducer && !this.micProducer.closed) return;
|
|
2572
|
+
await this.processMediaPermissionsAndResolveRequests({
|
|
2573
|
+
audio: {
|
|
2574
|
+
deviceId: deviceId,
|
|
2575
|
+
noiseSuppression: true,
|
|
2576
|
+
echoCancellation: true
|
|
2577
|
+
}
|
|
2578
|
+
}).catch((error)=>{
|
|
2579
|
+
throw new Error(error, {
|
|
2580
|
+
cause: $1dedebd5ff3002eb$var$SENTRY_WHITELIST_ERROR_CAUSE
|
|
2209
2581
|
});
|
|
2210
|
-
|
|
2211
|
-
|
|
2582
|
+
});
|
|
2583
|
+
if (!this.tracksHandler.audio.stream || !this.tracksHandler.audio.track) throw new Error('enableMicrophone : no stream or audio track');
|
|
2584
|
+
this.devicesList = await navigator.mediaDevices.enumerateDevices();
|
|
2585
|
+
const transport = await this.getTransport('audio', 'send');
|
|
2586
|
+
this.audioLevel = new (0, $6a90fae7e584afd4$export$ea669869acd8f177)(this.tracksHandler.audio.stream, this);
|
|
2587
|
+
this.audioLevel.analyse();
|
|
2588
|
+
this.audioMedia = this.audioMedia || new (0, $93041e14f6aa3f24$export$22ddc20344c01547)();
|
|
2589
|
+
const track = this.tracksHandler.audio.track;
|
|
2590
|
+
this.audioMedia.addTrack('mic', track);
|
|
2591
|
+
const trackSettings = track.getSettings();
|
|
2592
|
+
const device = this.devicesList.find((it)=>it.deviceId === trackSettings.deviceId && it.kind === 'audioinput');
|
|
2593
|
+
const deviceType = 'microphone';
|
|
2594
|
+
const micProducer = await transport.produce({
|
|
2595
|
+
track: this.audioMedia.getFinalTrack(),
|
|
2596
|
+
codecOptions: {
|
|
2597
|
+
opusStereo: true,
|
|
2598
|
+
opusDtx: true
|
|
2599
|
+
},
|
|
2600
|
+
stopTracks: false,
|
|
2601
|
+
appData: {
|
|
2602
|
+
deviceType: deviceType
|
|
2603
|
+
}
|
|
2604
|
+
});
|
|
2605
|
+
micProducer.on('transportclose', ()=>{
|
|
2606
|
+
$1dedebd5ff3002eb$var$log.log('enableMicrophone', 'micproducer transportclose');
|
|
2607
|
+
});
|
|
2608
|
+
track.addEventListener('ended', ()=>{
|
|
2609
|
+
$1dedebd5ff3002eb$var$log.log('enableMicrophone', 'track ended!');
|
|
2610
|
+
});
|
|
2611
|
+
micProducer.on('trackended', async ()=>{
|
|
2612
|
+
$1dedebd5ff3002eb$var$log.log('enableMicrophone', 'microphone disconnected!');
|
|
2613
|
+
if (navigator.mediaDevices.ondevicechange === undefined) this.closeMicrophoneProducer();
|
|
2614
|
+
});
|
|
2615
|
+
this.micProducer = micProducer;
|
|
2616
|
+
this.microphone.device = device || null;
|
|
2617
|
+
this.microphone.muted = false;
|
|
2618
|
+
const event = new $1dedebd5ff3002eb$var$SnapcallEvent('microphoneEnabled', {
|
|
2619
|
+
detail: {}
|
|
2620
|
+
});
|
|
2621
|
+
this.dispatchEvent(event);
|
|
2212
2622
|
}
|
|
2213
2623
|
muteMicrophone() {
|
|
2214
2624
|
if (this.micProducer) {
|
|
@@ -2328,8 +2738,13 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
|
|
|
2328
2738
|
}
|
|
2329
2739
|
async processMediaPermissionsAndResolveRequests(constraints) {
|
|
2330
2740
|
let error;
|
|
2741
|
+
const event = new $1dedebd5ff3002eb$var$SnapcallEvent('requestAccessUpdate', {
|
|
2742
|
+
detail: {}
|
|
2743
|
+
});
|
|
2331
2744
|
try {
|
|
2332
|
-
|
|
2745
|
+
const promise = this.tracksHandler.requestMediaPermissions(constraints);
|
|
2746
|
+
this.dispatchEvent(event);
|
|
2747
|
+
await promise;
|
|
2333
2748
|
} catch (err) {
|
|
2334
2749
|
error = err;
|
|
2335
2750
|
} finally{
|
|
@@ -2337,6 +2752,7 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
|
|
|
2337
2752
|
const videoOK = Boolean(this.tracksHandler.video.stream && this.tracksHandler.video.track);
|
|
2338
2753
|
if (constraints.audio) this.resolvePendingDeviceRequest('microphone', audioOK, audioOK ? undefined : 'no permission');
|
|
2339
2754
|
if (constraints.video) this.resolvePendingDeviceRequest('webcam', videoOK, videoOK ? undefined : 'no permission');
|
|
2755
|
+
this.dispatchEvent(event);
|
|
2340
2756
|
if (error) throw error;
|
|
2341
2757
|
}
|
|
2342
2758
|
}
|
|
@@ -2508,6 +2924,15 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
|
|
|
2508
2924
|
this.dispatchEvent(event);
|
|
2509
2925
|
}
|
|
2510
2926
|
async enableVideo(config) {
|
|
2927
|
+
await this._enableVideo(config).catch((error)=>{
|
|
2928
|
+
this.disableVideo();
|
|
2929
|
+
this.webcam.error = error;
|
|
2930
|
+
if (error.cause !== $1dedebd5ff3002eb$var$SENTRY_WHITELIST_ERROR_CAUSE) $jQDcL$sentrybrowser.captureException(error);
|
|
2931
|
+
throw error;
|
|
2932
|
+
});
|
|
2933
|
+
this.webcam.error = undefined;
|
|
2934
|
+
}
|
|
2935
|
+
async _enableVideo(config) {
|
|
2511
2936
|
$1dedebd5ff3002eb$var$log.log('enableVideo', config);
|
|
2512
2937
|
await this.updateWebcams();
|
|
2513
2938
|
const optionalParam = {};
|
|
@@ -2531,6 +2956,10 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
|
|
|
2531
2956
|
...optionalParam,
|
|
2532
2957
|
...usedResolution
|
|
2533
2958
|
}
|
|
2959
|
+
}).catch((error)=>{
|
|
2960
|
+
throw new Error(error, {
|
|
2961
|
+
cause: $1dedebd5ff3002eb$var$SENTRY_WHITELIST_ERROR_CAUSE
|
|
2962
|
+
});
|
|
2534
2963
|
});
|
|
2535
2964
|
if (!this.tracksHandler.video.stream || !this.tracksHandler.video.track) throw new Error('enableVideo : no stream or video track');
|
|
2536
2965
|
const trackSettings = this.tracksHandler.video.track.getSettings();
|
|
@@ -2654,6 +3083,17 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
|
|
|
2654
3083
|
}
|
|
2655
3084
|
async enableScreenshare(options = {
|
|
2656
3085
|
audioTransportOption: 'classic'
|
|
3086
|
+
}) {
|
|
3087
|
+
await this._enableScreenshare(options).catch((error)=>{
|
|
3088
|
+
this.disableScreenshare();
|
|
3089
|
+
this.screenshare.error = error;
|
|
3090
|
+
if (error.cause !== $1dedebd5ff3002eb$var$SENTRY_WHITELIST_ERROR_CAUSE) $jQDcL$sentrybrowser.captureException(error);
|
|
3091
|
+
throw error;
|
|
3092
|
+
});
|
|
3093
|
+
this.screenshare.error = undefined;
|
|
3094
|
+
}
|
|
3095
|
+
async _enableScreenshare(options = {
|
|
3096
|
+
audioTransportOption: 'classic'
|
|
2657
3097
|
}) {
|
|
2658
3098
|
if (!this.permissions.find((permission)=>permission === 'screen_sharing')) throw new Error('feature not allowed');
|
|
2659
3099
|
if (options.audioTransportOption === 'mix' && !this.micProducer) throw new Error('microphone not activated and audio mix transport requested');
|
|
@@ -2673,8 +3113,12 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
|
|
|
2673
3113
|
max: 30
|
|
2674
3114
|
}
|
|
2675
3115
|
}
|
|
2676
|
-
}))
|
|
2677
|
-
|
|
3116
|
+
})).catch((error)=>{
|
|
3117
|
+
throw new Error(error, {
|
|
3118
|
+
cause: $1dedebd5ff3002eb$var$SENTRY_WHITELIST_ERROR_CAUSE
|
|
3119
|
+
});
|
|
3120
|
+
});
|
|
3121
|
+
if (!stream) throw new Error('enableScreenshare : no stream');
|
|
2678
3122
|
const deviceType = 'screen';
|
|
2679
3123
|
const audioTransport = await this.getTransport('audio', 'send');
|
|
2680
3124
|
const audioTrack = stream.getAudioTracks()[0];
|
|
@@ -2772,14 +3216,16 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
|
|
|
2772
3216
|
async saveCapture(base64Image) {
|
|
2773
3217
|
return (0, $7f16567c4f721486$export$bfc52a1c1f84ba66)(this.config.apiUrl, {
|
|
2774
3218
|
token: this.roomId,
|
|
2775
|
-
base64Image: base64Image
|
|
3219
|
+
base64Image: base64Image,
|
|
3220
|
+
recordingGroup: this.recordingGroup
|
|
2776
3221
|
});
|
|
2777
3222
|
}
|
|
2778
3223
|
async uploadAsset(file, type) {
|
|
2779
3224
|
return (0, $987c962fd22b0c93$export$6ad2c48011488f7)(this.config.apiUrl, {
|
|
2780
3225
|
token: this.roomId,
|
|
2781
3226
|
type: type,
|
|
2782
|
-
file: file
|
|
3227
|
+
file: file,
|
|
3228
|
+
recordingGroup: this.recordingGroup
|
|
2783
3229
|
});
|
|
2784
3230
|
}
|
|
2785
3231
|
createEvents(assets) {
|
|
@@ -2789,9 +3235,20 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
|
|
|
2789
3235
|
stepToken: this.stepToken
|
|
2790
3236
|
};
|
|
2791
3237
|
const events = assets.map((asset)=>{
|
|
3238
|
+
let geolocation;
|
|
3239
|
+
if (asset.geolocation) geolocation = {
|
|
3240
|
+
accuracy: asset.geolocation?.coords.accuracy,
|
|
3241
|
+
altitude: asset.geolocation?.coords.altitude,
|
|
3242
|
+
altitudeAccuracy: asset.geolocation?.coords.altitudeAccuracy,
|
|
3243
|
+
heading: asset.geolocation?.coords.heading,
|
|
3244
|
+
latitude: asset.geolocation?.coords.latitude,
|
|
3245
|
+
longitude: asset.geolocation?.coords.longitude,
|
|
3246
|
+
speed: asset.geolocation?.coords.speed
|
|
3247
|
+
};
|
|
2792
3248
|
return {
|
|
2793
3249
|
...asset,
|
|
2794
|
-
...baseEvent
|
|
3250
|
+
...baseEvent,
|
|
3251
|
+
geolocation: geolocation
|
|
2795
3252
|
};
|
|
2796
3253
|
});
|
|
2797
3254
|
return (0, $54d9e0891cb8e108$export$c30017717ce2168e)(this.config.apiUrl, this.roomId, events);
|
|
@@ -2954,15 +3411,19 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
|
|
|
2954
3411
|
microphone: {
|
|
2955
3412
|
enabled: microphoneEnabled,
|
|
2956
3413
|
muted: this.microphone.muted,
|
|
2957
|
-
device: this.microphone.device
|
|
3414
|
+
device: this.microphone.device,
|
|
3415
|
+
error: this.microphone.error
|
|
2958
3416
|
},
|
|
2959
3417
|
camera: {
|
|
2960
3418
|
enabled: cameraEnabled,
|
|
2961
|
-
device: this.webcam.device
|
|
3419
|
+
device: this.webcam.device,
|
|
3420
|
+
error: this.webcam.error
|
|
2962
3421
|
},
|
|
2963
3422
|
screenshare: {
|
|
2964
|
-
enabled: screenshareEnabled
|
|
2965
|
-
|
|
3423
|
+
enabled: screenshareEnabled,
|
|
3424
|
+
error: this.screenshare.error
|
|
3425
|
+
},
|
|
3426
|
+
isAskingPermissions: this.tracksHandler.isAskingPermissions
|
|
2966
3427
|
};
|
|
2967
3428
|
}
|
|
2968
3429
|
getCustomMessageEventChunks(event) {
|
|
@@ -3099,6 +3560,61 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
|
|
|
3099
3560
|
getPermissions() {
|
|
3100
3561
|
return this.permissions;
|
|
3101
3562
|
}
|
|
3563
|
+
async frameUploadedToGroup(body) {
|
|
3564
|
+
const { recordingGroup: recordingGroup } = await fetch(`${this.config.apiUrl}/public/streams/${this.roomId}/live/frames`, {
|
|
3565
|
+
method: 'POST',
|
|
3566
|
+
headers: {
|
|
3567
|
+
'Content-Type': 'application/json'
|
|
3568
|
+
},
|
|
3569
|
+
body: JSON.stringify({
|
|
3570
|
+
...body,
|
|
3571
|
+
recordingGroup: this.recordingGroup
|
|
3572
|
+
})
|
|
3573
|
+
}).then((response)=>{
|
|
3574
|
+
if (response.ok) return response.json();
|
|
3575
|
+
throw new Error('Invalid agent info');
|
|
3576
|
+
});
|
|
3577
|
+
return recordingGroup;
|
|
3578
|
+
}
|
|
3579
|
+
async readRecordingGroupAnswer() {
|
|
3580
|
+
if (!this.recordingGroup) return {
|
|
3581
|
+
status: 'error'
|
|
3582
|
+
};
|
|
3583
|
+
return (0, $f0e58d5d03fc26c4$export$e1228c246580bf68)(this.config.apiUrl, this.roomId, this.recordingGroup);
|
|
3584
|
+
}
|
|
3585
|
+
async createRecordingGroup({ type: type, language: language }) {
|
|
3586
|
+
const { recordingGroup: recordingGroup } = await fetch(`${this.config.apiUrl}/public/streams/${this.roomId}/live/recording-group`, {
|
|
3587
|
+
method: 'POST',
|
|
3588
|
+
headers: {
|
|
3589
|
+
'Content-Type': 'application/json'
|
|
3590
|
+
},
|
|
3591
|
+
body: JSON.stringify({
|
|
3592
|
+
type: type,
|
|
3593
|
+
language: language,
|
|
3594
|
+
stepToken: this.stepToken
|
|
3595
|
+
})
|
|
3596
|
+
}).then((response)=>{
|
|
3597
|
+
if (response.ok) return response.json();
|
|
3598
|
+
throw new Error('Invalid agent info');
|
|
3599
|
+
});
|
|
3600
|
+
this.recordingGroup = recordingGroup;
|
|
3601
|
+
return recordingGroup;
|
|
3602
|
+
}
|
|
3603
|
+
async doLiveAnalysis() {
|
|
3604
|
+
try {
|
|
3605
|
+
if (this.recordingGroup) {
|
|
3606
|
+
const image = await this.captureVideo();
|
|
3607
|
+
const result = await this.saveCapture(image);
|
|
3608
|
+
console.log(result);
|
|
3609
|
+
const description = await this.frameUploadedToGroup({
|
|
3610
|
+
filename: result.filename
|
|
3611
|
+
});
|
|
3612
|
+
console.log('[doLiveAnalysis] image description :', description);
|
|
3613
|
+
}
|
|
3614
|
+
} catch (err) {
|
|
3615
|
+
console.error('frames capture failed', err);
|
|
3616
|
+
}
|
|
3617
|
+
}
|
|
3102
3618
|
async startRecord() {
|
|
3103
3619
|
if (this.micProducer?.rtpSender?.transport?.iceTransport.state !== 'connected') try {
|
|
3104
3620
|
this.onCriticalError($1dedebd5ff3002eb$export$103bedf43ba882db.WEBRTC_BAD_STATE_ERROR);
|
|
@@ -3118,9 +3634,19 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
|
|
|
3118
3634
|
} catch (err) {
|
|
3119
3635
|
$jQDcL$sentrybrowser.captureException(err);
|
|
3120
3636
|
}
|
|
3121
|
-
await this.protoo?.request('startRecord',
|
|
3637
|
+
await this.protoo?.request('startRecord', {
|
|
3638
|
+
recordingGroup: this.recordingGroup,
|
|
3639
|
+
iceTransportState: this.micProducer?.rtpSender?.transport?.iceTransport.state
|
|
3640
|
+
});
|
|
3641
|
+
if (this.recordingGroup) {
|
|
3642
|
+
this.doLiveAnalysis().catch(console.log);
|
|
3643
|
+
this.liveInterval = window.setInterval(()=>{
|
|
3644
|
+
this.doLiveAnalysis().catch(console.log);
|
|
3645
|
+
}, 2000);
|
|
3646
|
+
}
|
|
3122
3647
|
}
|
|
3123
3648
|
async stopRecord() {
|
|
3649
|
+
clearInterval(this.liveInterval);
|
|
3124
3650
|
await this.protoo?.request('stopRecord');
|
|
3125
3651
|
}
|
|
3126
3652
|
async getPublicPage(token) {
|
|
@@ -5394,10 +5920,13 @@ const $bdd080364d556ec5$export$1712c8fcb05f49a6 = ({ modalState: modalState, ...
|
|
|
5394
5920
|
};
|
|
5395
5921
|
|
|
5396
5922
|
|
|
5923
|
+
|
|
5397
5924
|
const $e1930b467e7d8845$var$multiPiP = new (0, $21395e477f83709c$export$45fabd1ce5e673de)();
|
|
5398
5925
|
const $e1930b467e7d8845$var$browser = $jQDcL$bowser.parse(window.navigator.userAgent);
|
|
5399
5926
|
const $e1930b467e7d8845$var$Header = ()=>{
|
|
5400
5927
|
const { t: t } = (0, $jQDcL$reacti18next.useTranslation)();
|
|
5928
|
+
const { toast: toastV2 } = (0, $jQDcL$snapcalldesignsystem.useToast)();
|
|
5929
|
+
const [networkToast, setNetworkToast] = (0, $jQDcL$react.useState)(undefined);
|
|
5401
5930
|
const { setIsQuickConnectPopupVisible: setIsQuickConnectPopupVisible, setIsSettingsMenuVisible: setIsSettingsMenuVisible, setIsVirtualBackgroundPopupVisible: setIsVirtualBackgroundPopupVisible, options: options, muted: muted, streaming: streaming, permissions: permissions, plan: plan, setBlockedFeaturePopupOpen: setBlockedFeaturePopupOpen, isAgent: isAgent, videoRecording: videoRecording, setVideoRecording: setVideoRecording, clientInitResult: clientInitResult } = (0, $jQDcL$react.useContext)((0, $8b39f32976a7698a$export$2e2bcd8739ae039));
|
|
5402
5931
|
const { streams: streams } = (0, $3f6e908c45fcc5b3$export$b5633a7cfbe42d9f)();
|
|
5403
5932
|
const [extraOptions, setExtraOptions] = (0, $jQDcL$react.useState)(options.extraSettingsOptions || []);
|
|
@@ -5406,6 +5935,11 @@ const $e1930b467e7d8845$var$Header = ()=>{
|
|
|
5406
5935
|
const { extraOptions: newExtraOptions } = event.detail;
|
|
5407
5936
|
setExtraOptions(newExtraOptions);
|
|
5408
5937
|
};
|
|
5938
|
+
(0, $jQDcL$react.useEffect)(()=>{
|
|
5939
|
+
return ()=>{
|
|
5940
|
+
networkToast?.dismiss();
|
|
5941
|
+
};
|
|
5942
|
+
});
|
|
5409
5943
|
const onPipClick = ()=>{
|
|
5410
5944
|
$e1930b467e7d8845$var$multiPiP.start();
|
|
5411
5945
|
};
|
|
@@ -5423,6 +5957,31 @@ const $e1930b467e7d8845$var$Header = ()=>{
|
|
|
5423
5957
|
window.removeEventListener('streamUISetExtraSettingsOptions', onSetExtraSettingsOptions);
|
|
5424
5958
|
};
|
|
5425
5959
|
}, []);
|
|
5960
|
+
(0, $jQDcL$react.useEffect)(()=>{
|
|
5961
|
+
const onNetworkStateChange = (event)=>{
|
|
5962
|
+
if (!event?.detail?.isOk) setNetworkToast(toastV2({
|
|
5963
|
+
hideClose: true,
|
|
5964
|
+
duration: Infinity,
|
|
5965
|
+
title: t('networkIssue.title'),
|
|
5966
|
+
icon: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("div", {
|
|
5967
|
+
className: "bg-amber-700 p-1 rounded-md",
|
|
5968
|
+
children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$snapcalldesignsystemicons.WifiOffIcon), {
|
|
5969
|
+
size: 16,
|
|
5970
|
+
className: "text-black "
|
|
5971
|
+
})
|
|
5972
|
+
})
|
|
5973
|
+
}));
|
|
5974
|
+
else networkToast?.dismiss();
|
|
5975
|
+
};
|
|
5976
|
+
(0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).addEventListener('networkStateChange', onNetworkStateChange);
|
|
5977
|
+
return ()=>{
|
|
5978
|
+
(0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).removeEventListener('networkStateChange', onNetworkStateChange);
|
|
5979
|
+
};
|
|
5980
|
+
}, [
|
|
5981
|
+
networkToast,
|
|
5982
|
+
t,
|
|
5983
|
+
toastV2
|
|
5984
|
+
]);
|
|
5426
5985
|
const baseCategories = (0, $jQDcL$react.useMemo)(()=>{
|
|
5427
5986
|
const onCopyCallLinkClick = async ()=>{
|
|
5428
5987
|
try {
|
|
@@ -6297,8 +6856,8 @@ const $ef17b5a1f7753247$export$49a6790f61a9785b = ()=>{
|
|
|
6297
6856
|
else await (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).enableMicrophone();
|
|
6298
6857
|
} else if (deviceRequest.deviceType === 'webcam') await (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).enableVideo();
|
|
6299
6858
|
else if (deviceRequest.deviceType === 'screen') await (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).enableScreenshare();
|
|
6300
|
-
} catch (
|
|
6301
|
-
console.
|
|
6859
|
+
} catch (error) {
|
|
6860
|
+
console.error('enable media error', error);
|
|
6302
6861
|
}
|
|
6303
6862
|
setDeviceRequest(null);
|
|
6304
6863
|
state.close();
|
|
@@ -10902,6 +11461,7 @@ const $e3bb2c5d0e5b45b5$export$914ddf2021ea8ee6 = (0, ($parcel$interopDefault($j
|
|
|
10902
11461
|
|
|
10903
11462
|
|
|
10904
11463
|
|
|
11464
|
+
|
|
10905
11465
|
const $098350f721a0bb52$export$784df5c7a561530 = (0, $jQDcL$react.createContext)({});
|
|
10906
11466
|
const $098350f721a0bb52$export$2174f25d572f9f31 = ()=>{
|
|
10907
11467
|
const context = (0, $jQDcL$react.useContext)($098350f721a0bb52$export$784df5c7a561530);
|
|
@@ -10915,17 +11475,6 @@ const $098350f721a0bb52$export$2174f25d572f9f31 = ()=>{
|
|
|
10915
11475
|
|
|
10916
11476
|
|
|
10917
11477
|
|
|
10918
|
-
const $30ad72ee44a52bf1$export$7f78f4f57f8852d5 = (seconds)=>{
|
|
10919
|
-
const d = [
|
|
10920
|
-
Math.floor(seconds / 60),
|
|
10921
|
-
Math.round(seconds % 60)
|
|
10922
|
-
].map((n)=>`${n < 10 ? '0' : ''}${n}`);
|
|
10923
|
-
return d.join(':');
|
|
10924
|
-
};
|
|
10925
|
-
|
|
10926
|
-
|
|
10927
|
-
|
|
10928
|
-
|
|
10929
11478
|
|
|
10930
11479
|
|
|
10931
11480
|
|
|
@@ -10979,7 +11528,7 @@ const $ccbd73eb953b0bd0$var$generateVideoThumbnail = (file)=>{
|
|
|
10979
11528
|
const $ccbd73eb953b0bd0$export$b3fd96a52c80b3af = ()=>{
|
|
10980
11529
|
const { recorderOptions: recorderOptions, clientInitResult: clientInitResult } = (0, $jQDcL$react.useContext)((0, $8b39f32976a7698a$export$2e2bcd8739ae039));
|
|
10981
11530
|
const { t: t } = (0, $jQDcL$reacti18next.useTranslation)();
|
|
10982
|
-
const {
|
|
11531
|
+
const { videoBotState: videoBotState, addAsset: addAsset, setIncomingAsset: setIncomingAsset, isRecording: isRecording } = (0, $098350f721a0bb52$export$2174f25d572f9f31)();
|
|
10983
11532
|
const reportError = (0, $8dfcca373a03b9e8$export$5a5695b638d078e7)();
|
|
10984
11533
|
const fileInputRef = (0, $jQDcL$react.useRef)(null);
|
|
10985
11534
|
const isMedium = window.matchMedia('(min-width: 768px)').matches;
|
|
@@ -10995,7 +11544,7 @@ const $ccbd73eb953b0bd0$export$b3fd96a52c80b3af = ()=>{
|
|
|
10995
11544
|
mode: mode,
|
|
10996
11545
|
createdAt: createdAt
|
|
10997
11546
|
});
|
|
10998
|
-
|
|
11547
|
+
videoBotState.open();
|
|
10999
11548
|
try {
|
|
11000
11549
|
let thumbnailUrl;
|
|
11001
11550
|
const data = await (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).uploadAsset(file, type);
|
|
@@ -11008,9 +11557,10 @@ const $ccbd73eb953b0bd0$export$b3fd96a52c80b3af = ()=>{
|
|
|
11008
11557
|
mode: mode,
|
|
11009
11558
|
url: url,
|
|
11010
11559
|
thumbnailUrl: thumbnailUrl || url,
|
|
11011
|
-
createdAt: createdAt
|
|
11560
|
+
createdAt: createdAt,
|
|
11561
|
+
networkIssue: false
|
|
11012
11562
|
});
|
|
11013
|
-
|
|
11563
|
+
videoBotState.open();
|
|
11014
11564
|
} catch (error) {
|
|
11015
11565
|
console.log(error);
|
|
11016
11566
|
reportError({
|
|
@@ -11058,6 +11608,7 @@ const $ccbd73eb953b0bd0$export$b3fd96a52c80b3af = ()=>{
|
|
|
11058
11608
|
|
|
11059
11609
|
|
|
11060
11610
|
|
|
11611
|
+
|
|
11061
11612
|
const $9277d94be7423d29$var$SheetDialogContext = /*#__PURE__*/ (0, $jQDcL$react.createContext)({
|
|
11062
11613
|
type: 'dialog',
|
|
11063
11614
|
showClose: true
|
|
@@ -11281,16 +11832,30 @@ const $c1f57aebcca9b882$export$9f1846b6ccad1893 = ()=>{
|
|
|
11281
11832
|
|
|
11282
11833
|
|
|
11283
11834
|
|
|
11835
|
+
|
|
11284
11836
|
const $e10783d7d081fd73$export$20144d37f30919ab = ()=>{
|
|
11285
11837
|
const queryClient = (0, $jQDcL$tanstackreactquery.useQueryClient)();
|
|
11838
|
+
const reportError = (0, $8dfcca373a03b9e8$export$5a5695b638d078e7)();
|
|
11286
11839
|
return (0, $jQDcL$tanstackreactquery.useMutation)({
|
|
11287
|
-
mutationFn: (device)=>{
|
|
11288
|
-
|
|
11289
|
-
|
|
11290
|
-
|
|
11291
|
-
|
|
11292
|
-
|
|
11293
|
-
|
|
11840
|
+
mutationFn: async (device)=>{
|
|
11841
|
+
try {
|
|
11842
|
+
if (device.kind === 'audioinput') {
|
|
11843
|
+
await (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).switchMicrophone(device.deviceId);
|
|
11844
|
+
return;
|
|
11845
|
+
} else if (device.kind === 'videoinput') {
|
|
11846
|
+
await (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).switchWebcam({
|
|
11847
|
+
device: device
|
|
11848
|
+
});
|
|
11849
|
+
return;
|
|
11850
|
+
} else if (device.kind === 'audiooutput') throw new Error('Audio output not supported');
|
|
11851
|
+
throw new Error('Unsupported device info');
|
|
11852
|
+
} catch (error) {
|
|
11853
|
+
console.error('useUpdateDevice', error);
|
|
11854
|
+
reportError({
|
|
11855
|
+
code: 'SWTCH_DEV_1',
|
|
11856
|
+
error: error
|
|
11857
|
+
});
|
|
11858
|
+
}
|
|
11294
11859
|
},
|
|
11295
11860
|
onSettled: ()=>queryClient.invalidateQueries({
|
|
11296
11861
|
queryKey: [
|
|
@@ -11314,6 +11879,10 @@ const $8229feab219a258c$export$15073df9b5e6c63e = (constraints)=>{
|
|
|
11314
11879
|
optimisticVideoState: false
|
|
11315
11880
|
})=>{
|
|
11316
11881
|
const devicesState = (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).getDevicesState();
|
|
11882
|
+
if (devicesState.camera.error) {
|
|
11883
|
+
console.error('handleVideoState - devicesState.camera.error:', devicesState.camera.error);
|
|
11884
|
+
return;
|
|
11885
|
+
}
|
|
11317
11886
|
if (constraints.video && !devicesState.camera.enabled && !optimisticVideoState) {
|
|
11318
11887
|
optimisticPermissions.current.video = true;
|
|
11319
11888
|
try {
|
|
@@ -11361,7 +11930,7 @@ const $8229feab219a258c$export$15073df9b5e6c63e = (constraints)=>{
|
|
|
11361
11930
|
retry: false,
|
|
11362
11931
|
enabled: Boolean(constraints.audio) || Boolean(constraints.video),
|
|
11363
11932
|
queryFn: async ()=>{
|
|
11364
|
-
await (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).
|
|
11933
|
+
await (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).processMediaPermissionsAndResolveRequests(constraints);
|
|
11365
11934
|
handleVideoState();
|
|
11366
11935
|
handleMicrophoneState();
|
|
11367
11936
|
return {
|
|
@@ -11691,78 +12260,6 @@ const $e9d4b4657e98cb84$export$c197ce1a352372f = ({ state: state })=>{
|
|
|
11691
12260
|
};
|
|
11692
12261
|
|
|
11693
12262
|
|
|
11694
|
-
const $48ac80173d63a751$var$browser = (0, ($parcel$interopDefault($jQDcL$bowser))).parse(window.navigator.userAgent);
|
|
11695
|
-
const $48ac80173d63a751$export$aa00db7a33d4c484 = ()=>{
|
|
11696
|
-
const { t: t } = (0, $jQDcL$reacti18next.useTranslation)();
|
|
11697
|
-
const { mode: mode, isRecording: isRecording, openQRCodeModal: openQRCodeModal } = (0, $098350f721a0bb52$export$2174f25d572f9f31)();
|
|
11698
|
-
const [showQrCodeToast, setShowQrCodeToast] = (0, $jQDcL$react.useState)($48ac80173d63a751$var$browser.platform.type === 'desktop');
|
|
11699
|
-
const [timer, setTimer] = (0, $jQDcL$react.useState)(0);
|
|
11700
|
-
const timerInterval = (0, $jQDcL$react.useRef)(0);
|
|
11701
|
-
const settingsDialogState = (0, $jQDcL$reactstately.useOverlayTriggerState)({});
|
|
11702
|
-
const isMedium = window.matchMedia('(min-width: 768px)').matches;
|
|
11703
|
-
(0, $jQDcL$react.useEffect)(()=>{
|
|
11704
|
-
if (isRecording) {
|
|
11705
|
-
clearInterval(timerInterval.current);
|
|
11706
|
-
timerInterval.current = window.setInterval(()=>setTimer((t)=>t + 1), 1000);
|
|
11707
|
-
} else {
|
|
11708
|
-
clearInterval(timerInterval.current);
|
|
11709
|
-
setTimer(0);
|
|
11710
|
-
}
|
|
11711
|
-
}, [
|
|
11712
|
-
isRecording
|
|
11713
|
-
]);
|
|
11714
|
-
return /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("div", {
|
|
11715
|
-
className: "flex items-start justify-between z-50",
|
|
11716
|
-
children: [
|
|
11717
|
-
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $ccbd73eb953b0bd0$export$b3fd96a52c80b3af), {}),
|
|
11718
|
-
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("div", {
|
|
11719
|
-
className: "flex flex-col items-center gap-4 overflow-hidden",
|
|
11720
|
-
children: [
|
|
11721
|
-
mode !== 'photo' && /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("div", {
|
|
11722
|
-
className: "flex items-center gap-2.5 px-3.5 py-2 text-md text-black font-medium border rounded-2xl bg-gray-100/50 border-black/10 backdrop-blur-lg",
|
|
11723
|
-
children: [
|
|
11724
|
-
isRecording && /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("span", {
|
|
11725
|
-
className: "w-2 h-2 rounded-full bg-red-700 pulse-red-700"
|
|
11726
|
-
}),
|
|
11727
|
-
(0, $30ad72ee44a52bf1$export$7f78f4f57f8852d5)(timer)
|
|
11728
|
-
]
|
|
11729
|
-
}),
|
|
11730
|
-
showQrCodeToast && mode !== 'screen' && /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$snapcalldesignsystem.RawToast), {
|
|
11731
|
-
className: "bg-gray-25",
|
|
11732
|
-
children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$snapcalldesignsystem.ToastContent), {
|
|
11733
|
-
title: t('recorder.switchToMobileTitle'),
|
|
11734
|
-
icon: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$snapcalldesignsystemicons.QrCode1Icon), {}),
|
|
11735
|
-
onClose: ()=>setShowQrCodeToast(false),
|
|
11736
|
-
actions: [
|
|
11737
|
-
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$snapcalldesignsystem.ToastAction), {
|
|
11738
|
-
altText: t('recorder.showQrCode'),
|
|
11739
|
-
variant: "primary",
|
|
11740
|
-
onClick: openQRCodeModal,
|
|
11741
|
-
children: t('recorder.showQrCode')
|
|
11742
|
-
}, "showQrCode")
|
|
11743
|
-
]
|
|
11744
|
-
})
|
|
11745
|
-
})
|
|
11746
|
-
]
|
|
11747
|
-
}),
|
|
11748
|
-
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)((0, $jQDcL$snapcalldesignsystem.Button), {
|
|
11749
|
-
variant: "roundedGlass",
|
|
11750
|
-
icon: !isMedium,
|
|
11751
|
-
onClick: settingsDialogState.open,
|
|
11752
|
-
children: [
|
|
11753
|
-
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$snapcalldesignsystemicons.Settings1Icon), {
|
|
11754
|
-
size: 18
|
|
11755
|
-
}),
|
|
11756
|
-
isMedium && t('settings.title')
|
|
11757
|
-
]
|
|
11758
|
-
}),
|
|
11759
|
-
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $e9d4b4657e98cb84$export$c197ce1a352372f), {
|
|
11760
|
-
state: settingsDialogState
|
|
11761
|
-
})
|
|
11762
|
-
]
|
|
11763
|
-
});
|
|
11764
|
-
};
|
|
11765
|
-
|
|
11766
12263
|
|
|
11767
12264
|
|
|
11768
12265
|
|
|
@@ -11772,61 +12269,48 @@ const $48ac80173d63a751$export$aa00db7a33d4c484 = ()=>{
|
|
|
11772
12269
|
|
|
11773
12270
|
|
|
11774
12271
|
|
|
11775
|
-
const $
|
|
11776
|
-
|
|
11777
|
-
|
|
11778
|
-
|
|
11779
|
-
|
|
11780
|
-
|
|
11781
|
-
|
|
11782
|
-
'photo'
|
|
11783
|
-
];
|
|
11784
|
-
const $a33432a0233f49a9$export$ca9d588768f0d0da = ({ children: children })=>{
|
|
11785
|
-
const { t: t } = (0, $jQDcL$reacti18next.useTranslation)();
|
|
11786
|
-
const reportError = (0, $8dfcca373a03b9e8$export$5a5695b638d078e7)();
|
|
11787
|
-
const { mode: mode } = (0, $098350f721a0bb52$export$2174f25d572f9f31)();
|
|
11788
|
-
const hasAudio = $a33432a0233f49a9$var$audioModes.includes(mode);
|
|
11789
|
-
const hasVideo = $a33432a0233f49a9$var$videoModes.includes(mode);
|
|
11790
|
-
const getUserMedia = (0, $8229feab219a258c$export$15073df9b5e6c63e)({
|
|
11791
|
-
audio: hasAudio,
|
|
11792
|
-
video: hasVideo
|
|
11793
|
-
});
|
|
11794
|
-
const hasDeniedPermissions = getUserMedia.error?.message.includes('denied');
|
|
11795
|
-
const devicesState = (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).getDevicesState();
|
|
11796
|
-
if (mode !== 'screen' && getUserMedia.isSuccess || devicesState.screenshare.enabled) return children;
|
|
11797
|
-
return /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("div", {
|
|
11798
|
-
className: "flex flex-col items-center gap-8 text-center max-w-[500px] mx-auto p-8 bg-gray-50 border border-gray-200 rounded-2xl shadow-sm",
|
|
12272
|
+
const $6446d38daa66a4a3$export$18ae0c9fd28c991e = ()=>{
|
|
12273
|
+
return /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("svg", {
|
|
12274
|
+
width: "24",
|
|
12275
|
+
height: "25",
|
|
12276
|
+
viewBox: "0 0 24 25",
|
|
12277
|
+
fill: "none",
|
|
12278
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
11799
12279
|
children: [
|
|
11800
|
-
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.
|
|
11801
|
-
|
|
11802
|
-
|
|
11803
|
-
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("h2", {
|
|
11804
|
-
className: "text-lg text-black font-semibold",
|
|
11805
|
-
children: mode === 'screen' ? t('recorder.chooseWhatYouWantToShare') : hasAudio && hasVideo ? t('recorder.noCameraAndMicrophoneAccess') : hasAudio ? t('recorder.noMicrophoneAccess') : hasVideo ? t('recorder.noCameraAccess') : '/'
|
|
11806
|
-
}),
|
|
11807
|
-
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("p", {
|
|
11808
|
-
className: "text-sm text-gray-900",
|
|
11809
|
-
children: mode === 'screen' ? t('recorder.chooseWhatYouWantToShareDescription') : hasAudio && hasVideo ? t('recorder.noCameraAndMicrophoneAccessDescription') : hasAudio ? t('recorder.noMicrophoneAccessDescription') : hasVideo ? t('recorder.noCameraAccessDescription') : '/'
|
|
11810
|
-
})
|
|
11811
|
-
]
|
|
12280
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("path", {
|
|
12281
|
+
d: "M8.84204 3.15789C8.84204 0.557368 9.39941 0 11.9999 0C14.6005 0 15.1578 0.557368 15.1578 3.15789C15.1578 5.75842 14.6005 6.31579 11.9999 6.31579C9.39941 6.31579 8.84204 5.75842 8.84204 3.15789Z",
|
|
12282
|
+
fill: "#121212"
|
|
11812
12283
|
}),
|
|
11813
|
-
|
|
11814
|
-
|
|
11815
|
-
|
|
11816
|
-
|
|
11817
|
-
|
|
11818
|
-
|
|
11819
|
-
})
|
|
11820
|
-
|
|
11821
|
-
|
|
11822
|
-
|
|
11823
|
-
|
|
11824
|
-
|
|
11825
|
-
|
|
11826
|
-
|
|
11827
|
-
|
|
11828
|
-
|
|
11829
|
-
|
|
12284
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("rect", {
|
|
12285
|
+
x: "10.7368",
|
|
12286
|
+
y: "3.15771",
|
|
12287
|
+
width: "2.52632",
|
|
12288
|
+
height: "5.05263",
|
|
12289
|
+
fill: "#121212"
|
|
12290
|
+
}),
|
|
12291
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("path", {
|
|
12292
|
+
fillRule: "evenodd",
|
|
12293
|
+
clipRule: "evenodd",
|
|
12294
|
+
d: "M12 7.5791C2.118 7.5791 0 9.02826 0 15.7896C0 22.551 2.118 24.0002 12 24.0002C21.882 24.0002 24 22.551 24 15.7896C24 9.02826 21.882 7.5791 12 7.5791ZM12 10.1054C4.29136 10.1054 2.63917 11.38 2.63917 15.7896C2.63917 20.1992 4.29136 21.4738 12 21.4738C19.7086 21.4738 21.3608 20.1992 21.3608 15.7896C21.3608 11.38 19.7086 10.1054 12 10.1054Z",
|
|
12295
|
+
fill: "#121212"
|
|
12296
|
+
}),
|
|
12297
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("path", {
|
|
12298
|
+
d: "M2.52637 15.7897C2.52637 11.1087 4.19847 10.1055 12.0001 10.1055C19.8016 10.1055 21.4737 11.1087 21.4737 15.7897C21.4737 20.4706 19.8016 21.4739 12.0001 21.4739C4.19847 21.4739 2.52637 20.4706 2.52637 15.7897Z",
|
|
12299
|
+
fill: "white"
|
|
12300
|
+
}),
|
|
12301
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("ellipse", {
|
|
12302
|
+
cx: "7.89462",
|
|
12303
|
+
cy: "15.7895",
|
|
12304
|
+
rx: "1.57895",
|
|
12305
|
+
ry: "2.52632",
|
|
12306
|
+
fill: "#121212"
|
|
12307
|
+
}),
|
|
12308
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("ellipse", {
|
|
12309
|
+
cx: "16.1053",
|
|
12310
|
+
cy: "15.7895",
|
|
12311
|
+
rx: "1.57895",
|
|
12312
|
+
ry: "2.52632",
|
|
12313
|
+
fill: "#121212"
|
|
11830
12314
|
})
|
|
11831
12315
|
]
|
|
11832
12316
|
});
|
|
@@ -11837,144 +12321,6 @@ const $a33432a0233f49a9$export$ca9d588768f0d0da = ({ children: children })=>{
|
|
|
11837
12321
|
|
|
11838
12322
|
|
|
11839
12323
|
|
|
11840
|
-
function $b758582ffbe79e9a$var$useForwardedRef(ref) {
|
|
11841
|
-
const innerRef = (0, $jQDcL$react.useRef)(null);
|
|
11842
|
-
(0, $jQDcL$react.useEffect)(()=>{
|
|
11843
|
-
if (!ref) return;
|
|
11844
|
-
if (typeof ref === 'function') ref(innerRef.current);
|
|
11845
|
-
else ref.current = innerRef.current;
|
|
11846
|
-
});
|
|
11847
|
-
return innerRef;
|
|
11848
|
-
}
|
|
11849
|
-
const $b758582ffbe79e9a$export$8c410456846722ea = /*#__PURE__*/ (0, $jQDcL$react.forwardRef)((props, forwardedRef)=>{
|
|
11850
|
-
const ref = $b758582ffbe79e9a$var$useForwardedRef(forwardedRef);
|
|
11851
|
-
(0, $jQDcL$react.useEffect)(()=>{
|
|
11852
|
-
const onScreenshareEnabled = ()=>{
|
|
11853
|
-
if (!ref?.current) return;
|
|
11854
|
-
(0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).requestLocalScreenshare(ref.current);
|
|
11855
|
-
};
|
|
11856
|
-
if (ref.current) (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).requestLocalScreenshare(ref.current);
|
|
11857
|
-
(0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).addEventListener('screenshareEnabled', onScreenshareEnabled);
|
|
11858
|
-
return ()=>{
|
|
11859
|
-
(0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).removeEventListener('screenshareEnabled', onScreenshareEnabled);
|
|
11860
|
-
};
|
|
11861
|
-
}, [
|
|
11862
|
-
ref
|
|
11863
|
-
]);
|
|
11864
|
-
return /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("video", {
|
|
11865
|
-
autoPlay: true,
|
|
11866
|
-
muted: true,
|
|
11867
|
-
playsInline: true,
|
|
11868
|
-
ref: ref,
|
|
11869
|
-
className: "rounded-[10px] mx-auto h-full object-fit",
|
|
11870
|
-
children: props.children
|
|
11871
|
-
});
|
|
11872
|
-
});
|
|
11873
|
-
const $b758582ffbe79e9a$export$287f8fcc69caf433 = /*#__PURE__*/ (0, $jQDcL$react.forwardRef)((_, forwardedRef)=>{
|
|
11874
|
-
const ref = $b758582ffbe79e9a$var$useForwardedRef(forwardedRef);
|
|
11875
|
-
const [facingMode, setFacingMode] = (0, $jQDcL$react.useState)('user');
|
|
11876
|
-
(0, $jQDcL$react.useEffect)(()=>{
|
|
11877
|
-
const requestVideo = (video)=>{
|
|
11878
|
-
const { facingMode: newFacingMode } = (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).requestLocalVideo(video);
|
|
11879
|
-
setFacingMode(newFacingMode);
|
|
11880
|
-
};
|
|
11881
|
-
const onLocalVideoChange = (event)=>{
|
|
11882
|
-
if (!event.detail?.camera?.device || !ref.current) return;
|
|
11883
|
-
requestVideo(ref.current);
|
|
11884
|
-
};
|
|
11885
|
-
const deviceState = (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).getDevicesState();
|
|
11886
|
-
if (deviceState.camera.enabled && ref.current) requestVideo(ref.current);
|
|
11887
|
-
(0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).addEventListener('localVideoAvailable', onLocalVideoChange);
|
|
11888
|
-
(0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).addEventListener('localVideoChange', onLocalVideoChange);
|
|
11889
|
-
return ()=>{
|
|
11890
|
-
(0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).removeEventListener('localVideoAvailable', onLocalVideoChange);
|
|
11891
|
-
(0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).removeEventListener('localVideoChange', onLocalVideoChange);
|
|
11892
|
-
};
|
|
11893
|
-
}, [
|
|
11894
|
-
ref
|
|
11895
|
-
]);
|
|
11896
|
-
return /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("video", {
|
|
11897
|
-
autoPlay: true,
|
|
11898
|
-
muted: true,
|
|
11899
|
-
playsInline: true,
|
|
11900
|
-
ref: ref,
|
|
11901
|
-
className: (0, ($parcel$interopDefault($jQDcL$classnames)))('w-full h-full object-cover rounded-[inherit]', {
|
|
11902
|
-
'scale-x-[-1]': facingMode === 'user'
|
|
11903
|
-
})
|
|
11904
|
-
});
|
|
11905
|
-
});
|
|
11906
|
-
|
|
11907
|
-
|
|
11908
|
-
|
|
11909
|
-
|
|
11910
|
-
|
|
11911
|
-
|
|
11912
|
-
const $c6c03cb1324fb0c3$var$canvasWidth = 300;
|
|
11913
|
-
const $c6c03cb1324fb0c3$var$canvasHeight = 180;
|
|
11914
|
-
const $c6c03cb1324fb0c3$var$barWidth = 4;
|
|
11915
|
-
const $c6c03cb1324fb0c3$var$spaceBetween = 12;
|
|
11916
|
-
const $c6c03cb1324fb0c3$var$dpi = window.devicePixelRatio;
|
|
11917
|
-
const $c6c03cb1324fb0c3$var$drawCanvasBase = (ctx)=>{
|
|
11918
|
-
const numberOfDots = ($c6c03cb1324fb0c3$var$canvasWidth + $c6c03cb1324fb0c3$var$spaceBetween * 2) / ($c6c03cb1324fb0c3$var$barWidth + $c6c03cb1324fb0c3$var$spaceBetween);
|
|
11919
|
-
ctx.restore();
|
|
11920
|
-
ctx.save();
|
|
11921
|
-
ctx.scale($c6c03cb1324fb0c3$var$dpi, $c6c03cb1324fb0c3$var$dpi);
|
|
11922
|
-
ctx.clearRect(0, 0, $c6c03cb1324fb0c3$var$canvasWidth, $c6c03cb1324fb0c3$var$canvasHeight);
|
|
11923
|
-
ctx.beginPath();
|
|
11924
|
-
for(let i = 0; i < numberOfDots; i++){
|
|
11925
|
-
const paddingLeft = i > 0 ? $c6c03cb1324fb0c3$var$spaceBetween * i : 0;
|
|
11926
|
-
const x = $c6c03cb1324fb0c3$var$barWidth * (i + 1) + paddingLeft - $c6c03cb1324fb0c3$var$barWidth / 2;
|
|
11927
|
-
const y = ($c6c03cb1324fb0c3$var$canvasHeight - $c6c03cb1324fb0c3$var$barWidth / 2) / 2;
|
|
11928
|
-
const radius = $c6c03cb1324fb0c3$var$barWidth / 2;
|
|
11929
|
-
ctx.arc(x, y, radius, 0, Math.PI * 2, true);
|
|
11930
|
-
}
|
|
11931
|
-
ctx.closePath();
|
|
11932
|
-
ctx.fillStyle = 'rgba(255, 255, 255, 0.25)';
|
|
11933
|
-
ctx.fill();
|
|
11934
|
-
};
|
|
11935
|
-
const $c6c03cb1324fb0c3$export$e9b744e15e8fe06f = ()=>{
|
|
11936
|
-
const animationFrameId = (0, $jQDcL$react.useRef)(0);
|
|
11937
|
-
const canvasRef = (0, $jQDcL$react.useRef)(null);
|
|
11938
|
-
(0, $jQDcL$react.useEffect)(()=>{
|
|
11939
|
-
const canvas = canvasRef.current;
|
|
11940
|
-
const canvasCtx = canvas?.getContext('2d');
|
|
11941
|
-
const animate = ()=>{
|
|
11942
|
-
if ((0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).audioLevel && canvasCtx) {
|
|
11943
|
-
$c6c03cb1324fb0c3$var$drawCanvasBase(canvasCtx);
|
|
11944
|
-
const data = (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).audioLevel.getFrequencyData();
|
|
11945
|
-
canvasCtx.beginPath();
|
|
11946
|
-
for(let i = 0; i < data.length; i++){
|
|
11947
|
-
const barHeight = data[i];
|
|
11948
|
-
const paddingLeft = i > 0 ? $c6c03cb1324fb0c3$var$spaceBetween * i : 0;
|
|
11949
|
-
const x = $c6c03cb1324fb0c3$var$barWidth * (i + 1) + paddingLeft - $c6c03cb1324fb0c3$var$barWidth;
|
|
11950
|
-
const y = ($c6c03cb1324fb0c3$var$canvasHeight - barHeight) / 2;
|
|
11951
|
-
canvasCtx.roundRect(x, y, $c6c03cb1324fb0c3$var$barWidth, barHeight, 80);
|
|
11952
|
-
}
|
|
11953
|
-
canvasCtx.closePath();
|
|
11954
|
-
canvasCtx.fillStyle = `rgb(255, 255, 255)`;
|
|
11955
|
-
canvasCtx.fill();
|
|
11956
|
-
}
|
|
11957
|
-
animationFrameId.current = requestAnimationFrame(animate);
|
|
11958
|
-
};
|
|
11959
|
-
if (canvasCtx) $c6c03cb1324fb0c3$var$drawCanvasBase(canvasCtx);
|
|
11960
|
-
animationFrameId.current = requestAnimationFrame(animate);
|
|
11961
|
-
return ()=>{
|
|
11962
|
-
cancelAnimationFrame(animationFrameId.current);
|
|
11963
|
-
};
|
|
11964
|
-
}, []);
|
|
11965
|
-
return /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("canvas", {
|
|
11966
|
-
ref: canvasRef,
|
|
11967
|
-
width: $c6c03cb1324fb0c3$var$canvasWidth * $c6c03cb1324fb0c3$var$dpi,
|
|
11968
|
-
height: $c6c03cb1324fb0c3$var$canvasHeight * $c6c03cb1324fb0c3$var$dpi,
|
|
11969
|
-
style: {
|
|
11970
|
-
width: `${$c6c03cb1324fb0c3$var$canvasWidth}px`,
|
|
11971
|
-
height: `${$c6c03cb1324fb0c3$var$canvasHeight}px`
|
|
11972
|
-
}
|
|
11973
|
-
});
|
|
11974
|
-
};
|
|
11975
|
-
|
|
11976
|
-
|
|
11977
|
-
|
|
11978
12324
|
|
|
11979
12325
|
|
|
11980
12326
|
|
|
@@ -11989,65 +12335,15 @@ const $c6c03cb1324fb0c3$export$e9b744e15e8fe06f = ()=>{
|
|
|
11989
12335
|
|
|
11990
12336
|
|
|
11991
12337
|
|
|
11992
|
-
const $
|
|
12338
|
+
const $4297106db9395067$export$520a0918a6dd04fd = ({ state: state, onDelete: onDelete })=>{
|
|
11993
12339
|
const { t: t } = (0, $jQDcL$reacti18next.useTranslation)();
|
|
11994
|
-
return /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$snapcalldesignsystem.
|
|
12340
|
+
return /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$snapcalldesignsystem.AlertDialog), {
|
|
11995
12341
|
open: state.isOpen,
|
|
11996
|
-
onOpenChange:
|
|
11997
|
-
|
|
11998
|
-
|
|
11999
|
-
|
|
12000
|
-
|
|
12001
|
-
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("div", {
|
|
12002
|
-
className: "flex flex-col items-center justify-center overflow-hidden",
|
|
12003
|
-
children: [
|
|
12004
|
-
mode === 'photo' && /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("img", {
|
|
12005
|
-
src: url,
|
|
12006
|
-
className: "flex-1 object-contain rounded-[10px] max-h-[90%] max-w-[90%] mb-[9px]",
|
|
12007
|
-
alt: ""
|
|
12008
|
-
}),
|
|
12009
|
-
(mode === 'video' || mode === 'screen') && /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("video", {
|
|
12010
|
-
src: url,
|
|
12011
|
-
playsInline: true,
|
|
12012
|
-
autoPlay: true,
|
|
12013
|
-
controls: true,
|
|
12014
|
-
className: "flex-1 rounded-[10px] min-w-full max-h-[90%] max-w-[90%] pb-[9px]"
|
|
12015
|
-
}),
|
|
12016
|
-
mode === 'audio' && /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("audio", {
|
|
12017
|
-
src: url,
|
|
12018
|
-
controls: true,
|
|
12019
|
-
className: "text-center w-full sm:w-1/2"
|
|
12020
|
-
})
|
|
12021
|
-
]
|
|
12022
|
-
}),
|
|
12023
|
-
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$snapcalldesignsystem.DialogFooter), {
|
|
12024
|
-
className: "flex items-end sm:justify-center grow-0",
|
|
12025
|
-
children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$snapcalldesignsystem.Button), {
|
|
12026
|
-
size: "md",
|
|
12027
|
-
onClick: state.close,
|
|
12028
|
-
className: "w-full sm:w-1/2",
|
|
12029
|
-
children: t('notifications.close')
|
|
12030
|
-
})
|
|
12031
|
-
})
|
|
12032
|
-
]
|
|
12033
|
-
})
|
|
12034
|
-
});
|
|
12035
|
-
};
|
|
12036
|
-
|
|
12037
|
-
|
|
12038
|
-
|
|
12039
|
-
|
|
12040
|
-
|
|
12041
|
-
|
|
12042
|
-
const $2c9fb579e7fb951f$export$520a0918a6dd04fd = ({ state: state, onDelete: onDelete })=>{
|
|
12043
|
-
const { t: t } = (0, $jQDcL$reacti18next.useTranslation)();
|
|
12044
|
-
return /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$snapcalldesignsystem.AlertDialog), {
|
|
12045
|
-
open: state.isOpen,
|
|
12046
|
-
onOpenChange: (open)=>{
|
|
12047
|
-
!open && state.close();
|
|
12048
|
-
},
|
|
12049
|
-
children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)((0, $jQDcL$snapcalldesignsystem.AlertDialogContent), {
|
|
12050
|
-
className: "rounded-xl",
|
|
12342
|
+
onOpenChange: (open)=>{
|
|
12343
|
+
!open && state.close();
|
|
12344
|
+
},
|
|
12345
|
+
children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)((0, $jQDcL$snapcalldesignsystem.AlertDialogContent), {
|
|
12346
|
+
className: "rounded-xl",
|
|
12051
12347
|
children: [
|
|
12052
12348
|
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)((0, $jQDcL$snapcalldesignsystem.AlertDialogHeader), {
|
|
12053
12349
|
children: [
|
|
@@ -12088,185 +12384,62 @@ const $2c9fb579e7fb951f$export$520a0918a6dd04fd = ({ state: state, onDelete: onD
|
|
|
12088
12384
|
|
|
12089
12385
|
|
|
12090
12386
|
|
|
12091
|
-
|
|
12092
|
-
|
|
12093
|
-
|
|
12094
|
-
|
|
12095
|
-
|
|
12096
|
-
|
|
12097
|
-
const $c42fbc742adf8306$var$Notification = ({ title: title, description: description, icon: icon })=>{
|
|
12098
|
-
return /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("div", {
|
|
12099
|
-
className: "flex w-full gap-2 p-4 border border-amber-700 rounded-md bg-amber-100",
|
|
12100
|
-
children: [
|
|
12101
|
-
/*#__PURE__*/ (0, $jQDcL$react.cloneElement)(icon, {
|
|
12102
|
-
className: 'text-amber-700',
|
|
12103
|
-
size: 18
|
|
12104
|
-
}),
|
|
12105
|
-
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("div", {
|
|
12106
|
-
className: "flex flex-col w-full gap-1 text-sm text-gray-1000",
|
|
12107
|
-
children: [
|
|
12108
|
-
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("span", {
|
|
12109
|
-
className: "font-semibold",
|
|
12110
|
-
children: title
|
|
12111
|
-
}),
|
|
12112
|
-
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("span", {
|
|
12113
|
-
children: description
|
|
12114
|
-
})
|
|
12115
|
-
]
|
|
12116
|
-
})
|
|
12117
|
-
]
|
|
12118
|
-
});
|
|
12119
|
-
};
|
|
12120
|
-
const $c42fbc742adf8306$export$1ea93f9eface5983 = ({ duration: duration = 0, averageAudioLevel: averageAudioLevel = 0 })=>{
|
|
12121
|
-
const { t: t } = (0, $jQDcL$reacti18next.useTranslation)();
|
|
12122
|
-
if (duration < 5) return /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)($c42fbc742adf8306$var$Notification, {
|
|
12123
|
-
title: t('recorder.audioLevelNotification.shortVideo.title'),
|
|
12124
|
-
description: t('recorder.audioLevelNotification.shortVideo.description'),
|
|
12125
|
-
icon: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$snapcalldesignsystemicons.Hourglass3Icon), {
|
|
12126
|
-
duotone: true
|
|
12127
|
-
})
|
|
12128
|
-
});
|
|
12129
|
-
if (averageAudioLevel <= 0) return /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)($c42fbc742adf8306$var$Notification, {
|
|
12130
|
-
title: t('recorder.audioLevelNotification.noSound.title'),
|
|
12131
|
-
description: t('recorder.audioLevelNotification.noSound.description'),
|
|
12132
|
-
icon: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$snapcalldesignsystemicons.MicrophoneOffIcon), {
|
|
12133
|
-
duotone: true
|
|
12134
|
-
})
|
|
12135
|
-
});
|
|
12136
|
-
if (averageAudioLevel <= 1) return /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)($c42fbc742adf8306$var$Notification, {
|
|
12137
|
-
title: t('recorder.audioLevelNotification.spokenWordsWarning.title'),
|
|
12138
|
-
description: t('recorder.audioLevelNotification.spokenWordsWarning.description'),
|
|
12139
|
-
icon: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$snapcalldesignsystemicons.AlertTriangleIcon), {
|
|
12140
|
-
duotone: true
|
|
12141
|
-
})
|
|
12142
|
-
});
|
|
12143
|
-
if (averageAudioLevel <= 3) return /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)($c42fbc742adf8306$var$Notification, {
|
|
12144
|
-
title: t('recorder.audioLevelNotification.spokenWordsQuestion.title'),
|
|
12145
|
-
description: t('recorder.audioLevelNotification.spokenWordsQuestion.description'),
|
|
12146
|
-
icon: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$snapcalldesignsystemicons.InfoCircleIcon), {
|
|
12147
|
-
duotone: true
|
|
12148
|
-
})
|
|
12149
|
-
});
|
|
12150
|
-
return null;
|
|
12387
|
+
const $30ad72ee44a52bf1$export$7f78f4f57f8852d5 = (seconds)=>{
|
|
12388
|
+
const d = [
|
|
12389
|
+
Math.floor(seconds / 60),
|
|
12390
|
+
Math.round(seconds % 60)
|
|
12391
|
+
].map((n)=>`${n < 10 ? '0' : ''}${n}`);
|
|
12392
|
+
return d.join(':');
|
|
12151
12393
|
};
|
|
12152
12394
|
|
|
12153
12395
|
|
|
12154
|
-
const $
|
|
12155
|
-
|
|
12156
|
-
|
|
12157
|
-
|
|
12158
|
-
});
|
|
12159
|
-
const $ed315b68f9410130$var$assetInfoModesMap = {
|
|
12160
|
-
photo: {
|
|
12161
|
-
extension: '.jpeg',
|
|
12162
|
-
thumbnailIcon: (0, $jQDcL$snapcalldesignsystemicons.Camera1Icon)
|
|
12163
|
-
},
|
|
12164
|
-
video: {
|
|
12165
|
-
extension: '.mp4',
|
|
12166
|
-
thumbnailIcon: (0, $jQDcL$snapcalldesignsystemicons.PlayIcon)
|
|
12167
|
-
},
|
|
12168
|
-
audio: {
|
|
12169
|
-
extension: '.mp3',
|
|
12170
|
-
thumbnailIcon: (0, $jQDcL$snapcalldesignsystemicons.Recording2Icon)
|
|
12171
|
-
},
|
|
12172
|
-
screen: {
|
|
12173
|
-
extension: '.mp4',
|
|
12174
|
-
thumbnailIcon: (0, $jQDcL$snapcalldesignsystemicons.Monitor2Icon)
|
|
12175
|
-
}
|
|
12396
|
+
const $fb1be0914e6993db$var$getCardType = (mode)=>{
|
|
12397
|
+
if (mode === 'audio') return 'audio';
|
|
12398
|
+
else if (mode === 'photo') return 'image';
|
|
12399
|
+
return 'video';
|
|
12176
12400
|
};
|
|
12177
|
-
const $
|
|
12178
|
-
|
|
12179
|
-
const resizedThumbnailUrl = (0, $jQDcL$react.useMemo)(()=>{
|
|
12180
|
-
if (thumbnailUrl) try {
|
|
12181
|
-
const url = new URL(thumbnailUrl);
|
|
12182
|
-
if (url.host === 'image.snapcall.io') {
|
|
12183
|
-
url.searchParams.set('width', '128');
|
|
12184
|
-
return url.href;
|
|
12185
|
-
}
|
|
12186
|
-
} catch (err) {
|
|
12187
|
-
console.error(err);
|
|
12188
|
-
}
|
|
12189
|
-
return thumbnailUrl;
|
|
12190
|
-
}, [
|
|
12191
|
-
thumbnailUrl
|
|
12192
|
-
]);
|
|
12193
|
-
return /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("div", {
|
|
12194
|
-
className: (0, ($parcel$interopDefault($jQDcL$classnames)))('rounded-lg cursor-pointer shrink-0 border-2', minimal ? 'w-12 h-12 border-white/10' : 'w-[70px] h-[70px] border-gray-200'),
|
|
12195
|
-
onClick: onClick,
|
|
12196
|
-
children: resizedThumbnailUrl ? /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("img", {
|
|
12197
|
-
className: "w-full h-full rounded-md object-cover",
|
|
12198
|
-
src: resizedThumbnailUrl,
|
|
12199
|
-
alt: ""
|
|
12200
|
-
}) : /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("div", {
|
|
12201
|
-
className: "flex items-center justify-center w-full h-full bg-gray-50 rounded-md dark-theme",
|
|
12202
|
-
children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)(FallbackIcon, {
|
|
12203
|
-
size: minimal ? 16 : 24,
|
|
12204
|
-
className: "text-white"
|
|
12205
|
-
})
|
|
12206
|
-
})
|
|
12207
|
-
});
|
|
12401
|
+
const $fb1be0914e6993db$var$isRecorderAsset = (asset)=>{
|
|
12402
|
+
return asset.filename !== undefined;
|
|
12208
12403
|
};
|
|
12209
|
-
const $
|
|
12404
|
+
const $fb1be0914e6993db$export$1885a2ec111b9681 = ({ asset: asset, index: index, size: size, showAction: showAction = true, onClick: onClick })=>{
|
|
12210
12405
|
const { t: t } = (0, $jQDcL$reacti18next.useTranslation)();
|
|
12211
12406
|
const { removeAsset: removeAsset } = (0, $098350f721a0bb52$export$2174f25d572f9f31)();
|
|
12212
|
-
const
|
|
12213
|
-
|
|
12214
|
-
const assetInfo = $ed315b68f9410130$var$assetInfoModesMap[asset.mode];
|
|
12215
|
-
return /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("div", {
|
|
12216
|
-
className: "flex flex-col gap-2",
|
|
12407
|
+
const deleteModalState = (0, $jQDcL$reactstately.useOverlayTriggerState)({});
|
|
12408
|
+
return /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)((0, $jQDcL$reactjsxruntime.Fragment), {
|
|
12217
12409
|
children: [
|
|
12218
|
-
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $
|
|
12219
|
-
state:
|
|
12220
|
-
mode: asset.mode,
|
|
12221
|
-
url: asset.url
|
|
12222
|
-
}),
|
|
12223
|
-
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $2c9fb579e7fb951f$export$520a0918a6dd04fd), {
|
|
12224
|
-
state: assetDeleteModalState,
|
|
12410
|
+
$fb1be0914e6993db$var$isRecorderAsset(asset) && /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $4297106db9395067$export$520a0918a6dd04fd), {
|
|
12411
|
+
state: deleteModalState,
|
|
12225
12412
|
onDelete: ()=>removeAsset(asset.filename)
|
|
12226
12413
|
}),
|
|
12227
|
-
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.
|
|
12228
|
-
className:
|
|
12229
|
-
|
|
12230
|
-
|
|
12231
|
-
|
|
12232
|
-
|
|
12233
|
-
|
|
12234
|
-
}),
|
|
12235
|
-
|
|
12236
|
-
|
|
12237
|
-
|
|
12238
|
-
|
|
12239
|
-
|
|
12240
|
-
|
|
12241
|
-
|
|
12242
|
-
|
|
12243
|
-
|
|
12244
|
-
|
|
12245
|
-
|
|
12246
|
-
|
|
12247
|
-
|
|
12248
|
-
|
|
12249
|
-
|
|
12250
|
-
|
|
12251
|
-
|
|
12252
|
-
|
|
12253
|
-
|
|
12254
|
-
}),
|
|
12255
|
-
canRemove && /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$snapcalldesignsystem.Button), {
|
|
12256
|
-
variant: "ghostRed",
|
|
12257
|
-
onClick: ()=>assetDeleteModalState.open(),
|
|
12258
|
-
icon: true,
|
|
12259
|
-
children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$snapcalldesignsystemicons.Trash3Icon), {
|
|
12260
|
-
className: "text-red-700",
|
|
12261
|
-
size: 18,
|
|
12262
|
-
duotone: true
|
|
12263
|
-
})
|
|
12414
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$snapcalldesignsystem.MediaCard), {
|
|
12415
|
+
className: (0, ($parcel$interopDefault($jQDcL$classnames)))('w-full', size === 'small' ? 'h-[150px]' : 'h-[226px]', {
|
|
12416
|
+
'cursor-pointer': $fb1be0914e6993db$var$isRecorderAsset(asset)
|
|
12417
|
+
}),
|
|
12418
|
+
type: $fb1be0914e6993db$var$getCardType(asset.mode),
|
|
12419
|
+
title: `Media ${index + 1}`,
|
|
12420
|
+
description: [
|
|
12421
|
+
t(`misc.${asset.mode}`),
|
|
12422
|
+
$fb1be0914e6993db$var$isRecorderAsset(asset) && asset.duration ? (0, $30ad72ee44a52bf1$export$7f78f4f57f8852d5)(asset.duration) : null
|
|
12423
|
+
].filter((it)=>it).join(" \xb7 "),
|
|
12424
|
+
size: "large",
|
|
12425
|
+
duration: $fb1be0914e6993db$var$isRecorderAsset(asset) ? asset.duration : undefined,
|
|
12426
|
+
image: asset.thumbnailUrl,
|
|
12427
|
+
isLoading: !$fb1be0914e6993db$var$isRecorderAsset(asset),
|
|
12428
|
+
onClick: onClick,
|
|
12429
|
+
action: showAction ? /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$snapcalldesignsystem.Button), {
|
|
12430
|
+
variant: "ghostRed",
|
|
12431
|
+
size: "sm",
|
|
12432
|
+
onClick: (e)=>{
|
|
12433
|
+
e.stopPropagation();
|
|
12434
|
+
deleteModalState.open();
|
|
12435
|
+
},
|
|
12436
|
+
icon: true,
|
|
12437
|
+
children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$snapcalldesignsystemicons.Trash3Icon), {
|
|
12438
|
+
size: 16,
|
|
12439
|
+
className: "text-red-700",
|
|
12440
|
+
duotone: true
|
|
12264
12441
|
})
|
|
12265
|
-
|
|
12266
|
-
}, asset.filename),
|
|
12267
|
-
asset.mode !== 'photo' && /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $c42fbc742adf8306$export$1ea93f9eface5983), {
|
|
12268
|
-
duration: asset.duration,
|
|
12269
|
-
averageAudioLevel: asset.averageAudioLevel
|
|
12442
|
+
}) : undefined
|
|
12270
12443
|
})
|
|
12271
12444
|
]
|
|
12272
12445
|
});
|
|
@@ -12276,6 +12449,8 @@ const $ed315b68f9410130$export$d70ec5859ea7c9bc = ({ asset: asset, canRemove: ca
|
|
|
12276
12449
|
|
|
12277
12450
|
|
|
12278
12451
|
|
|
12452
|
+
|
|
12453
|
+
|
|
12279
12454
|
const $8a7a24ac08dbc187$var$getStoredAssets = async ()=>{
|
|
12280
12455
|
try {
|
|
12281
12456
|
const storedAssets = JSON.parse(localStorage.getItem('snapcall_assets') || '[]');
|
|
@@ -12335,8 +12510,6 @@ const $8a7a24ac08dbc187$export$931d641a2a152cf = ()=>{
|
|
|
12335
12510
|
|
|
12336
12511
|
|
|
12337
12512
|
|
|
12338
|
-
|
|
12339
|
-
|
|
12340
12513
|
const $663f53e6b55f0d5a$export$f2bc44ad94513462 = ()=>{
|
|
12341
12514
|
const { clientInitResult: clientInitResult } = (0, $jQDcL$react.useContext)((0, $8b39f32976a7698a$export$2e2bcd8739ae039));
|
|
12342
12515
|
const flowSource = clientInitResult.flow?.steps?.[0].config?.source;
|
|
@@ -12354,149 +12527,817 @@ const $663f53e6b55f0d5a$export$f2bc44ad94513462 = ()=>{
|
|
|
12354
12527
|
}, [
|
|
12355
12528
|
flowSource
|
|
12356
12529
|
]);
|
|
12357
|
-
return {
|
|
12358
|
-
onRecorderEnd: onRecorderEnd
|
|
12359
|
-
};
|
|
12360
|
-
};
|
|
12530
|
+
return {
|
|
12531
|
+
onRecorderEnd: onRecorderEnd
|
|
12532
|
+
};
|
|
12533
|
+
};
|
|
12534
|
+
|
|
12535
|
+
|
|
12536
|
+
const $491ed7a769661ca2$var$eventTypes = {
|
|
12537
|
+
screen: 'screenshare',
|
|
12538
|
+
photo: 'image',
|
|
12539
|
+
video: 'video',
|
|
12540
|
+
audio: 'audio'
|
|
12541
|
+
};
|
|
12542
|
+
const $491ed7a769661ca2$export$ce05094b93c0f011 = ()=>{
|
|
12543
|
+
const reportError = (0, $8dfcca373a03b9e8$export$5a5695b638d078e7)();
|
|
12544
|
+
const flowSourceAction = (0, $663f53e6b55f0d5a$export$f2bc44ad94513462)();
|
|
12545
|
+
return (0, $jQDcL$tanstackreactquery.useMutation)({
|
|
12546
|
+
mutationKey: [
|
|
12547
|
+
'assets'
|
|
12548
|
+
],
|
|
12549
|
+
mutationFn: async (assets)=>{
|
|
12550
|
+
try {
|
|
12551
|
+
const events = assets.map((asset)=>{
|
|
12552
|
+
return {
|
|
12553
|
+
filename: asset.filename,
|
|
12554
|
+
type: $491ed7a769661ca2$var$eventTypes[asset.mode],
|
|
12555
|
+
geolocation: asset.geolocation
|
|
12556
|
+
};
|
|
12557
|
+
});
|
|
12558
|
+
const results = await (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).createEvents(events);
|
|
12559
|
+
let errors = results.filter((result)=>{
|
|
12560
|
+
if (result?.success) {
|
|
12561
|
+
(0, $8a7a24ac08dbc187$export$df987b50509121ea)(result.filename);
|
|
12562
|
+
return false;
|
|
12563
|
+
}
|
|
12564
|
+
return true;
|
|
12565
|
+
});
|
|
12566
|
+
if (errors.length > 0) {
|
|
12567
|
+
reportError({
|
|
12568
|
+
code: 'CRE_EV_1',
|
|
12569
|
+
error: 'failed to create assets'
|
|
12570
|
+
});
|
|
12571
|
+
throw new Error('some media not saved');
|
|
12572
|
+
}
|
|
12573
|
+
return results;
|
|
12574
|
+
} catch (error) {
|
|
12575
|
+
reportError({
|
|
12576
|
+
code: 'CRE_EV_1',
|
|
12577
|
+
error: 'failed to create assets'
|
|
12578
|
+
});
|
|
12579
|
+
console.log(error);
|
|
12580
|
+
throw error;
|
|
12581
|
+
}
|
|
12582
|
+
},
|
|
12583
|
+
onSuccess: ()=>{
|
|
12584
|
+
(0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).release();
|
|
12585
|
+
flowSourceAction.onRecorderEnd();
|
|
12586
|
+
},
|
|
12587
|
+
gcTime: Infinity
|
|
12588
|
+
});
|
|
12589
|
+
};
|
|
12590
|
+
|
|
12591
|
+
|
|
12592
|
+
|
|
12593
|
+
|
|
12594
|
+
|
|
12595
|
+
|
|
12596
|
+
const $f731043e2947c47f$export$271105bd919b31ea = ({ asset: asset, close: close })=>{
|
|
12597
|
+
const { t: t } = (0, $jQDcL$reacti18next.useTranslation)();
|
|
12598
|
+
return /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("div", {
|
|
12599
|
+
className: "flex flex-col gap-3 p-2 w-[360px] max-w-full",
|
|
12600
|
+
children: [
|
|
12601
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("div", {
|
|
12602
|
+
className: "flex items-center gap-4",
|
|
12603
|
+
children: [
|
|
12604
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$snapcalldesignsystem.Button), {
|
|
12605
|
+
variant: "outline",
|
|
12606
|
+
size: "xs",
|
|
12607
|
+
onClick: close,
|
|
12608
|
+
icon: true,
|
|
12609
|
+
children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$snapcalldesignsystemicons.ArrowLeftIcon), {
|
|
12610
|
+
size: 12
|
|
12611
|
+
})
|
|
12612
|
+
}),
|
|
12613
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("h4", {
|
|
12614
|
+
className: "text-lg font-semibold",
|
|
12615
|
+
children: "Name"
|
|
12616
|
+
})
|
|
12617
|
+
]
|
|
12618
|
+
}),
|
|
12619
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("div", {
|
|
12620
|
+
className: "border-2 border-gray-200 rounded-2xl *:rounded-[14px]",
|
|
12621
|
+
children: asset.mode === 'photo' ? /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("img", {
|
|
12622
|
+
alt: "",
|
|
12623
|
+
src: asset.url
|
|
12624
|
+
}) : asset.mode === 'audio' ? /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("div", {
|
|
12625
|
+
className: "flex justify-center items-center bg-black py-12",
|
|
12626
|
+
children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("audio", {
|
|
12627
|
+
src: asset.url,
|
|
12628
|
+
controls: true
|
|
12629
|
+
})
|
|
12630
|
+
}) : /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("video", {
|
|
12631
|
+
src: asset.url,
|
|
12632
|
+
controls: true
|
|
12633
|
+
})
|
|
12634
|
+
}),
|
|
12635
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$snapcalldesignsystem.Button), {
|
|
12636
|
+
onClick: close,
|
|
12637
|
+
className: "w-full",
|
|
12638
|
+
children: t('notifications.close')
|
|
12639
|
+
})
|
|
12640
|
+
]
|
|
12641
|
+
});
|
|
12642
|
+
};
|
|
12643
|
+
|
|
12644
|
+
|
|
12645
|
+
const $4ae70d9f97c4596f$export$2e401e47f78d3f3b = ()=>{
|
|
12646
|
+
const { t: t } = (0, $jQDcL$reacti18next.useTranslation)();
|
|
12647
|
+
const { assets: assets, incomingAsset: incomingAsset, videoBotState: videoBotState } = (0, $098350f721a0bb52$export$2174f25d572f9f31)();
|
|
12648
|
+
const sendAssets = (0, $491ed7a769661ca2$export$ce05094b93c0f011)();
|
|
12649
|
+
const [selectedAsset, setSelectedAsset] = (0, $jQDcL$react.useState)(null);
|
|
12650
|
+
const listSize = assets.length + (incomingAsset ? 1 : 0);
|
|
12651
|
+
if (selectedAsset) return /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $f731043e2947c47f$export$271105bd919b31ea), {
|
|
12652
|
+
asset: selectedAsset,
|
|
12653
|
+
close: ()=>setSelectedAsset(null)
|
|
12654
|
+
});
|
|
12655
|
+
return /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("div", {
|
|
12656
|
+
className: "flex flex-col gap-4 flex-1 w-[326px] max-w-full min-h-0",
|
|
12657
|
+
children: [
|
|
12658
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("div", {
|
|
12659
|
+
className: "flex items-center gap-2 text-lg font-semibold",
|
|
12660
|
+
children: sendAssets.isSuccess ? /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)((0, $jQDcL$reactjsxruntime.Fragment), {
|
|
12661
|
+
children: [
|
|
12662
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$snapcalldesignsystemicons.CheckCircleIcon), {
|
|
12663
|
+
size: 18,
|
|
12664
|
+
className: "text-green-700",
|
|
12665
|
+
duotone: true
|
|
12666
|
+
}),
|
|
12667
|
+
t('recorder.thanksForYourMedia')
|
|
12668
|
+
]
|
|
12669
|
+
}) : t('recorder.yourMedia')
|
|
12670
|
+
}),
|
|
12671
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("div", {
|
|
12672
|
+
className: "flex flex-col gap-2 max-w-full flex-1 min-h-0",
|
|
12673
|
+
children: [
|
|
12674
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("span", {
|
|
12675
|
+
className: "text-xs text-gray-900 font-medium",
|
|
12676
|
+
children: t('recorder.mediaCount', {
|
|
12677
|
+
count: listSize
|
|
12678
|
+
})
|
|
12679
|
+
}),
|
|
12680
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("div", {
|
|
12681
|
+
className: (0, ($parcel$interopDefault($jQDcL$classnames)))('grid gap-2 overflow-y-auto flex-1 min-h-0', listSize > 1 ? 'grid-cols-2' : 'grid-cols-1'),
|
|
12682
|
+
children: [
|
|
12683
|
+
assets.map((asset, index)=>/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $fb1be0914e6993db$export$1885a2ec111b9681), {
|
|
12684
|
+
asset: asset,
|
|
12685
|
+
index: index,
|
|
12686
|
+
size: listSize > 1 ? 'small' : 'large',
|
|
12687
|
+
showAction: !sendAssets.isSuccess,
|
|
12688
|
+
onClick: ()=>setSelectedAsset(asset)
|
|
12689
|
+
}, asset.filename)),
|
|
12690
|
+
incomingAsset && /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $fb1be0914e6993db$export$1885a2ec111b9681), {
|
|
12691
|
+
asset: incomingAsset,
|
|
12692
|
+
index: assets.length,
|
|
12693
|
+
size: listSize > 1 ? 'small' : 'large',
|
|
12694
|
+
showAction: false
|
|
12695
|
+
})
|
|
12696
|
+
]
|
|
12697
|
+
})
|
|
12698
|
+
]
|
|
12699
|
+
}),
|
|
12700
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("span", {
|
|
12701
|
+
className: "w-full h-[1px] bg-gray-200"
|
|
12702
|
+
}),
|
|
12703
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("div", {
|
|
12704
|
+
className: "flex flex-col gap-2",
|
|
12705
|
+
children: [
|
|
12706
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)((0, $jQDcL$snapcalldesignsystem.Button), {
|
|
12707
|
+
variant: "secondary",
|
|
12708
|
+
onClick: sendAssets.isSuccess ? ()=>window.location.reload() : videoBotState.close,
|
|
12709
|
+
children: [
|
|
12710
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$snapcalldesignsystemicons.PlusCircleIcon), {
|
|
12711
|
+
size: 18,
|
|
12712
|
+
duotone: true
|
|
12713
|
+
}),
|
|
12714
|
+
t('recorder.addMore')
|
|
12715
|
+
]
|
|
12716
|
+
}),
|
|
12717
|
+
!sendAssets.isSuccess && /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)((0, $jQDcL$snapcalldesignsystem.Button), {
|
|
12718
|
+
onClick: ()=>sendAssets.mutate(assets),
|
|
12719
|
+
isLoading: sendAssets.isPending,
|
|
12720
|
+
children: [
|
|
12721
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$snapcalldesignsystemicons.Send3Icon), {
|
|
12722
|
+
size: 18,
|
|
12723
|
+
className: "text-white"
|
|
12724
|
+
}),
|
|
12725
|
+
" ",
|
|
12726
|
+
t('recorder.send')
|
|
12727
|
+
]
|
|
12728
|
+
})
|
|
12729
|
+
]
|
|
12730
|
+
})
|
|
12731
|
+
]
|
|
12732
|
+
});
|
|
12733
|
+
};
|
|
12734
|
+
|
|
12735
|
+
|
|
12736
|
+
|
|
12737
|
+
|
|
12738
|
+
|
|
12739
|
+
|
|
12740
|
+
|
|
12741
|
+
|
|
12742
|
+
|
|
12743
|
+
|
|
12744
|
+
/* eslint-disable jsx-a11y/heading-has-content */
|
|
12745
|
+
|
|
12746
|
+
|
|
12747
|
+
|
|
12748
|
+
|
|
12749
|
+
const $9dba7ce5a7239728$export$c1af8b9a956ce024 = ({ children: children, onTypingEnd: onTypingEnd, ...other })=>{
|
|
12750
|
+
const [animatedText, setAnimatedText] = (0, $jQDcL$react.useState)('');
|
|
12751
|
+
return /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("div", {
|
|
12752
|
+
...other,
|
|
12753
|
+
className: (0, ($parcel$interopDefault($jQDcL$classnames)))('whitespace-pre-line', other.className),
|
|
12754
|
+
children: [
|
|
12755
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$reacttypeanimation.TypeAnimation), {
|
|
12756
|
+
className: "hidden",
|
|
12757
|
+
sequence: [
|
|
12758
|
+
...children.split(' ').map((char, index)=>{
|
|
12759
|
+
const prefix = index > 0 ? ' ' : '';
|
|
12760
|
+
return [
|
|
12761
|
+
prefix + char,
|
|
12762
|
+
()=>setAnimatedText((prev)=>prev + prefix + char)
|
|
12763
|
+
];
|
|
12764
|
+
}),
|
|
12765
|
+
200,
|
|
12766
|
+
()=>onTypingEnd?.()
|
|
12767
|
+
].flat(),
|
|
12768
|
+
speed: 90
|
|
12769
|
+
}),
|
|
12770
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, ($parcel$interopDefault($jQDcL$reactmarkdown))), {
|
|
12771
|
+
components: {
|
|
12772
|
+
h1: ({ node: node, ...props })=>/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("h1", {
|
|
12773
|
+
...props,
|
|
12774
|
+
className: (0, ($parcel$interopDefault($jQDcL$classnames)))('font-medium', props.className)
|
|
12775
|
+
}),
|
|
12776
|
+
h2: ({ node: node, ...props })=>/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("h2", {
|
|
12777
|
+
...props,
|
|
12778
|
+
className: (0, ($parcel$interopDefault($jQDcL$classnames)))('font-medium', props.className)
|
|
12779
|
+
}),
|
|
12780
|
+
h3: ({ node: node, ...props })=>/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("h3", {
|
|
12781
|
+
...props,
|
|
12782
|
+
className: (0, ($parcel$interopDefault($jQDcL$classnames)))('font-medium', props.className)
|
|
12783
|
+
}),
|
|
12784
|
+
h4: ({ node: node, ...props })=>/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("h4", {
|
|
12785
|
+
...props,
|
|
12786
|
+
className: (0, ($parcel$interopDefault($jQDcL$classnames)))('font-medium', props.className)
|
|
12787
|
+
}),
|
|
12788
|
+
p: ({ node: node, ...props })=>/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("p", {
|
|
12789
|
+
...props,
|
|
12790
|
+
className: (0, ($parcel$interopDefault($jQDcL$classnames)))('text-sm', props.className)
|
|
12791
|
+
}),
|
|
12792
|
+
ul: ({ node: node, ...props })=>/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("ul", {
|
|
12793
|
+
...props,
|
|
12794
|
+
className: (0, ($parcel$interopDefault($jQDcL$classnames)))('list-disc list-outside pl-3 whitespace-normal', props.className)
|
|
12795
|
+
}),
|
|
12796
|
+
li: (options)=>{
|
|
12797
|
+
const { node: node, ...props } = options;
|
|
12798
|
+
return /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("li", {
|
|
12799
|
+
className: (0, ($parcel$interopDefault($jQDcL$classnames)))('font-medium text-sm pb-3 last:pb-0'),
|
|
12800
|
+
...props
|
|
12801
|
+
});
|
|
12802
|
+
},
|
|
12803
|
+
code: (options)=>{
|
|
12804
|
+
const { node: node, ...props } = options;
|
|
12805
|
+
return /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("code", {
|
|
12806
|
+
...props,
|
|
12807
|
+
className: (0, ($parcel$interopDefault($jQDcL$classnames)))('whitespace-pre-wrap', props.className)
|
|
12808
|
+
});
|
|
12809
|
+
}
|
|
12810
|
+
},
|
|
12811
|
+
children: animatedText
|
|
12812
|
+
})
|
|
12813
|
+
]
|
|
12814
|
+
});
|
|
12815
|
+
};
|
|
12816
|
+
|
|
12817
|
+
|
|
12818
|
+
|
|
12819
|
+
|
|
12820
|
+
|
|
12821
|
+
const $0be9cf31416047c4$export$9e0d280acd5f6679 = ({ title: title, link: link, imageUrl: imageUrl })=>{
|
|
12822
|
+
const [showImageFallback, setShowImageFallback] = (0, $jQDcL$react.useState)(false);
|
|
12823
|
+
return /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("div", {
|
|
12824
|
+
className: "flex items-center gap-3 p-3 bg-white border border-gray-200 rounded-lg",
|
|
12825
|
+
children: [
|
|
12826
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("div", {
|
|
12827
|
+
className: "[&>*]:w-12 [&>*]:h-12 [&>*]:rounded shrink-0",
|
|
12828
|
+
children: imageUrl && !showImageFallback ? /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("img", {
|
|
12829
|
+
alt: "",
|
|
12830
|
+
src: imageUrl,
|
|
12831
|
+
onError: ()=>setShowImageFallback(true)
|
|
12832
|
+
}) : /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("div", {
|
|
12833
|
+
className: "flex justify-center items-center bg-gray-50",
|
|
12834
|
+
children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$snapcalldesignsystemicons.Image1Icon), {
|
|
12835
|
+
size: 18,
|
|
12836
|
+
className: "text-gray-900",
|
|
12837
|
+
duotone: true
|
|
12838
|
+
})
|
|
12839
|
+
})
|
|
12840
|
+
}),
|
|
12841
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("div", {
|
|
12842
|
+
className: "flex flex-col gap-1 min-w-0",
|
|
12843
|
+
children: [
|
|
12844
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("h3", {
|
|
12845
|
+
className: "text-sm font-medium truncate",
|
|
12846
|
+
children: title
|
|
12847
|
+
}),
|
|
12848
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("a", {
|
|
12849
|
+
className: "text-xs text-blue-700 truncate",
|
|
12850
|
+
href: link,
|
|
12851
|
+
target: "_blank",
|
|
12852
|
+
rel: "noreferrer",
|
|
12853
|
+
children: link
|
|
12854
|
+
})
|
|
12855
|
+
]
|
|
12856
|
+
})
|
|
12857
|
+
]
|
|
12858
|
+
});
|
|
12859
|
+
};
|
|
12860
|
+
|
|
12861
|
+
|
|
12862
|
+
const $3d3ad2137b45be2d$export$79a9757e24013184 = ()=>{
|
|
12863
|
+
const { t: t } = (0, $jQDcL$reacti18next.useTranslation)();
|
|
12864
|
+
const [showArticles, setShowArticles] = (0, $jQDcL$react.useState)(false);
|
|
12865
|
+
const recordingGroupAnswer = (0, $jQDcL$tanstackreactquery.useQuery)({
|
|
12866
|
+
queryKey: [
|
|
12867
|
+
'answer'
|
|
12868
|
+
],
|
|
12869
|
+
queryFn: ()=>(0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).readRecordingGroupAnswer(),
|
|
12870
|
+
staleTime: Infinity,
|
|
12871
|
+
refetchInterval: (query)=>{
|
|
12872
|
+
const status = query.state.data?.status;
|
|
12873
|
+
if (status !== 'completed' && status !== 'error' && !query.state.error) return 500;
|
|
12874
|
+
return false;
|
|
12875
|
+
}
|
|
12876
|
+
});
|
|
12877
|
+
const status = recordingGroupAnswer.data?.status;
|
|
12878
|
+
const isCompletedErrored = status === 'completed' && !recordingGroupAnswer.data?.text;
|
|
12879
|
+
if (status === 'error' || isCompletedErrored) return /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("div", {
|
|
12880
|
+
className: "flex flex-col items-center gap-4 py-2 px-8",
|
|
12881
|
+
children: [
|
|
12882
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$snapcalldesignsystemicons.AlertTriangleIcon), {
|
|
12883
|
+
size: 24,
|
|
12884
|
+
className: "text-amber-700"
|
|
12885
|
+
}),
|
|
12886
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("span", {
|
|
12887
|
+
className: "text-sm text-gray-900",
|
|
12888
|
+
children: t('recorder.videoBotError')
|
|
12889
|
+
})
|
|
12890
|
+
]
|
|
12891
|
+
});
|
|
12892
|
+
else if (status === 'completed') return /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("div", {
|
|
12893
|
+
className: "flex flex-col gap-4 w-[326px] max-w-full overflow-y-auto",
|
|
12894
|
+
children: [
|
|
12895
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("h4", {
|
|
12896
|
+
className: "text-lg font-semibold",
|
|
12897
|
+
children: t('recorder.mySuggestion')
|
|
12898
|
+
}),
|
|
12899
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("div", {
|
|
12900
|
+
className: "flex flex-col gap-2 p-2 bg-gray-50 rounded-lg overflow-y-auto",
|
|
12901
|
+
children: [
|
|
12902
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $9dba7ce5a7239728$export$c1af8b9a956ce024), {
|
|
12903
|
+
className: "flex flex-col gap-3 p-3 bg-white border border-gray-200 rounded-lg shadow-sm overflow-y-scroll",
|
|
12904
|
+
style: {
|
|
12905
|
+
scrollbarWidth: 'thin',
|
|
12906
|
+
WebkitOverflowScrolling: 'touch'
|
|
12907
|
+
},
|
|
12908
|
+
onTypingEnd: ()=>setShowArticles(true),
|
|
12909
|
+
children: recordingGroupAnswer.data?.text || ''
|
|
12910
|
+
}),
|
|
12911
|
+
showArticles && recordingGroupAnswer.data?.recommendation?.links?.map((article, index)=>/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $0be9cf31416047c4$export$9e0d280acd5f6679), {
|
|
12912
|
+
title: article.title,
|
|
12913
|
+
link: article.link,
|
|
12914
|
+
imageUrl: article.img
|
|
12915
|
+
}, index))
|
|
12916
|
+
]
|
|
12917
|
+
}),
|
|
12918
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$snapcalldesignsystem.Button), {
|
|
12919
|
+
variant: "secondary",
|
|
12920
|
+
onClick: ()=>window.location.reload(),
|
|
12921
|
+
children: t('recorder.recordNewMedia')
|
|
12922
|
+
})
|
|
12923
|
+
]
|
|
12924
|
+
});
|
|
12925
|
+
else return /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("div", {
|
|
12926
|
+
className: "flex flex-col items-center gap-3 p-2",
|
|
12927
|
+
children: [
|
|
12928
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$snapcalldesignsystemicons.SpinnerIcon), {
|
|
12929
|
+
size: 24,
|
|
12930
|
+
className: "text-blue-700 animate-spin"
|
|
12931
|
+
}),
|
|
12932
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("span", {
|
|
12933
|
+
className: "text-sm font-medium",
|
|
12934
|
+
children: t('recorder.videoBotThinking')
|
|
12935
|
+
})
|
|
12936
|
+
]
|
|
12937
|
+
});
|
|
12938
|
+
};
|
|
12939
|
+
|
|
12940
|
+
|
|
12941
|
+
const $d3d8d40deedb1979$var$browser = (0, ($parcel$interopDefault($jQDcL$bowser))).parse(window.navigator.userAgent);
|
|
12942
|
+
const $d3d8d40deedb1979$var$PopoverArrow = ()=>/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("span", {
|
|
12943
|
+
className: "flex justify-center absolute top-0 inset-x-0 rotate-180 w-full",
|
|
12944
|
+
style: {
|
|
12945
|
+
transformOrigin: 'center 0px'
|
|
12946
|
+
},
|
|
12947
|
+
children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("svg", {
|
|
12948
|
+
width: "10",
|
|
12949
|
+
height: "5",
|
|
12950
|
+
viewBox: "0 0 30 10",
|
|
12951
|
+
preserveAspectRatio: "none",
|
|
12952
|
+
fill: "#fff",
|
|
12953
|
+
children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("polygon", {
|
|
12954
|
+
points: "0,0 30,0 15,10"
|
|
12955
|
+
})
|
|
12956
|
+
})
|
|
12957
|
+
});
|
|
12958
|
+
const $d3d8d40deedb1979$export$e3cee2ebbbe23463 = ()=>{
|
|
12959
|
+
const { t: t } = (0, $jQDcL$reacti18next.useTranslation)();
|
|
12960
|
+
const { streamUIContainerRef: streamUIContainerRef, clientInitResult: clientInitResult } = (0, $jQDcL$react.useContext)((0, $8b39f32976a7698a$export$2e2bcd8739ae039));
|
|
12961
|
+
const { videoBotState: videoBotState, mode: mode, showCountdown: showCountdown, isRecording: isRecording, assets: assets, incomingAsset: incomingAsset, openQRCodeModal: openQRCodeModal } = (0, $098350f721a0bb52$export$2174f25d572f9f31)();
|
|
12962
|
+
const [showQrCodeText, setShowQrCodeText] = (0, $jQDcL$react.useState)($d3d8d40deedb1979$var$browser.platform.type === 'desktop');
|
|
12963
|
+
const sendAssetsResult = (0, $jQDcL$tanstackreactquery.useMutationState)({
|
|
12964
|
+
filters: {
|
|
12965
|
+
mutationKey: [
|
|
12966
|
+
'assets'
|
|
12967
|
+
]
|
|
12968
|
+
},
|
|
12969
|
+
select: (mutation)=>({
|
|
12970
|
+
status: mutation.state.status,
|
|
12971
|
+
data: mutation.state.data
|
|
12972
|
+
})
|
|
12973
|
+
})?.[0] || {};
|
|
12974
|
+
const isOpen = sendAssetsResult.status === 'success' ? true : videoBotState.isOpen;
|
|
12975
|
+
const inRecordingState = showCountdown || isRecording;
|
|
12976
|
+
const hasAssets = assets.length > 0 || Boolean(incomingAsset);
|
|
12977
|
+
const isModal = !inRecordingState && hasAssets && isOpen;
|
|
12978
|
+
const sendAssetsEventId = sendAssetsResult.data?.[0]?.id;
|
|
12979
|
+
const hasAnswerEnabled = clientInitResult.flow?.steps?.[0].skills.some((it)=>it.name === 'answer');
|
|
12980
|
+
const showAnswer = hasAnswerEnabled && sendAssetsResult.status === 'success' && sendAssetsEventId;
|
|
12981
|
+
return /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)((0, $jQDcL$snapcalldesignsystem.Popover), {
|
|
12982
|
+
open: isOpen,
|
|
12983
|
+
onOpenChange: videoBotState.setOpen,
|
|
12984
|
+
children: [
|
|
12985
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$snapcalldesignsystem.PopoverTrigger), {
|
|
12986
|
+
className: "w-10 h-10 p-2 rounded-full bg-black z-40",
|
|
12987
|
+
children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $6446d38daa66a4a3$export$18ae0c9fd28c991e), {})
|
|
12988
|
+
}),
|
|
12989
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)((0, $jQDcL$snapcalldesignsystem.PopoverContent), {
|
|
12990
|
+
side: "bottom",
|
|
12991
|
+
sideOffset: 13,
|
|
12992
|
+
className: "flex flex-col border-0 rounded-2xl w-fit max-w-[90vw] max-h-[75vh] overflow-y-auto z-40",
|
|
12993
|
+
onInteractOutside: (e)=>{
|
|
12994
|
+
if (!isModal) e.preventDefault();
|
|
12995
|
+
},
|
|
12996
|
+
children: [
|
|
12997
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)($d3d8d40deedb1979$var$PopoverArrow, {}),
|
|
12998
|
+
inRecordingState ? /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("span", {
|
|
12999
|
+
className: "text-sm font-medium",
|
|
13000
|
+
children: t('recorder.feelFreeToTalkGiveMoreContext')
|
|
13001
|
+
}) : showAnswer ? /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $3d3ad2137b45be2d$export$79a9757e24013184), {}) : hasAssets ? /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $4ae70d9f97c4596f$export$2e401e47f78d3f3b), {}) : showQrCodeText && mode !== 'screen' ? /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("div", {
|
|
13002
|
+
className: "flex flex-col gap-3",
|
|
13003
|
+
children: [
|
|
13004
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("p", {
|
|
13005
|
+
className: "text-sm font-medium",
|
|
13006
|
+
children: t('recorder.switchToMobileTitle')
|
|
13007
|
+
}),
|
|
13008
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("div", {
|
|
13009
|
+
className: "flex flex-col gap-2",
|
|
13010
|
+
children: [
|
|
13011
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)((0, $jQDcL$snapcalldesignsystem.Button), {
|
|
13012
|
+
size: "sm",
|
|
13013
|
+
onClick: openQRCodeModal,
|
|
13014
|
+
children: [
|
|
13015
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$snapcalldesignsystemicons.QrCode1Icon), {
|
|
13016
|
+
size: 16
|
|
13017
|
+
}),
|
|
13018
|
+
t('recorder.showQrCode')
|
|
13019
|
+
]
|
|
13020
|
+
}),
|
|
13021
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$snapcalldesignsystem.Button), {
|
|
13022
|
+
size: "sm",
|
|
13023
|
+
variant: "outline",
|
|
13024
|
+
onClick: ()=>setShowQrCodeText(false),
|
|
13025
|
+
children: t('recordingPopup.dismiss')
|
|
13026
|
+
})
|
|
13027
|
+
]
|
|
13028
|
+
})
|
|
13029
|
+
]
|
|
13030
|
+
}) : /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("span", {
|
|
13031
|
+
className: "text-sm font-medium",
|
|
13032
|
+
children: t('recorder.startByClickingOnTheButton')
|
|
13033
|
+
})
|
|
13034
|
+
]
|
|
13035
|
+
}),
|
|
13036
|
+
isModal && streamUIContainerRef.current && /*#__PURE__*/ (0, $jQDcL$reactdom.createPortal)(/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("div", {
|
|
13037
|
+
className: "absolute inset-0 w-full h-full backdrop-blur-md z-[35]"
|
|
13038
|
+
}), streamUIContainerRef.current)
|
|
13039
|
+
]
|
|
13040
|
+
});
|
|
13041
|
+
};
|
|
13042
|
+
|
|
13043
|
+
|
|
13044
|
+
|
|
13045
|
+
|
|
13046
|
+
|
|
13047
|
+
|
|
13048
|
+
const $5eec995ea21e910d$export$a6c85b7a72deaeef = ()=>{
|
|
13049
|
+
const { mode: mode, isRecording: isRecording } = (0, $098350f721a0bb52$export$2174f25d572f9f31)();
|
|
13050
|
+
const [timer, setTimer] = (0, $jQDcL$react.useState)(0);
|
|
13051
|
+
const timerInterval = (0, $jQDcL$react.useRef)(0);
|
|
13052
|
+
(0, $jQDcL$react.useEffect)(()=>{
|
|
13053
|
+
if (isRecording) {
|
|
13054
|
+
clearInterval(timerInterval.current);
|
|
13055
|
+
timerInterval.current = window.setInterval(()=>setTimer((t)=>t + 1), 1000);
|
|
13056
|
+
} else {
|
|
13057
|
+
clearInterval(timerInterval.current);
|
|
13058
|
+
setTimer(0);
|
|
13059
|
+
}
|
|
13060
|
+
}, [
|
|
13061
|
+
isRecording
|
|
13062
|
+
]);
|
|
13063
|
+
return /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("div", {
|
|
13064
|
+
className: "flex flex-col items-center gap-4 overflow-hidden",
|
|
13065
|
+
children: mode !== 'photo' && /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("div", {
|
|
13066
|
+
className: "flex items-center gap-2.5 px-3.5 py-2 text-md text-black font-medium border rounded-2xl bg-gray-100/50 border-black/10 backdrop-blur-lg",
|
|
13067
|
+
children: [
|
|
13068
|
+
isRecording && /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("span", {
|
|
13069
|
+
className: "w-2 h-2 rounded-full bg-red-700 pulse-red-700"
|
|
13070
|
+
}),
|
|
13071
|
+
(0, $30ad72ee44a52bf1$export$7f78f4f57f8852d5)(timer)
|
|
13072
|
+
]
|
|
13073
|
+
})
|
|
13074
|
+
});
|
|
13075
|
+
};
|
|
13076
|
+
|
|
13077
|
+
|
|
13078
|
+
|
|
13079
|
+
const $48ac80173d63a751$var$browser = (0, ($parcel$interopDefault($jQDcL$bowser))).parse(window.navigator.userAgent);
|
|
13080
|
+
const $48ac80173d63a751$export$aa00db7a33d4c484 = ({ isVideoBotEnabled: isVideoBotEnabled })=>{
|
|
13081
|
+
const { t: t } = (0, $jQDcL$reacti18next.useTranslation)();
|
|
13082
|
+
const { isRecording: isRecording, mode: mode, openQRCodeModal: openQRCodeModal } = (0, $098350f721a0bb52$export$2174f25d572f9f31)();
|
|
13083
|
+
const [showQrCodeToast, setShowQrCodeToast] = (0, $jQDcL$react.useState)($48ac80173d63a751$var$browser.platform.type === 'desktop');
|
|
13084
|
+
const settingsDialogState = (0, $jQDcL$reactstately.useOverlayTriggerState)({});
|
|
13085
|
+
const isMedium = window.matchMedia('(min-width: 768px)').matches;
|
|
13086
|
+
return /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("div", {
|
|
13087
|
+
className: "flex items-start",
|
|
13088
|
+
children: [
|
|
13089
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("div", {
|
|
13090
|
+
className: "flex justify-start flex-1 z-30",
|
|
13091
|
+
children: isRecording ? /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $5eec995ea21e910d$export$a6c85b7a72deaeef), {}) : /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $ccbd73eb953b0bd0$export$b3fd96a52c80b3af), {})
|
|
13092
|
+
}),
|
|
13093
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("div", {
|
|
13094
|
+
className: "flex justify-center flex-1",
|
|
13095
|
+
children: isVideoBotEnabled ? /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $d3d8d40deedb1979$export$e3cee2ebbbe23463), {}) : showQrCodeToast && mode !== 'screen' && !isRecording ? /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$snapcalldesignsystem.RawToast), {
|
|
13096
|
+
className: "bg-gray-25 z-30",
|
|
13097
|
+
children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$snapcalldesignsystem.ToastContent), {
|
|
13098
|
+
title: t('recorder.switchToMobileTitle'),
|
|
13099
|
+
icon: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$snapcalldesignsystemicons.QrCode1Icon), {}),
|
|
13100
|
+
onClose: ()=>setShowQrCodeToast(false),
|
|
13101
|
+
actions: [
|
|
13102
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$snapcalldesignsystem.ToastAction), {
|
|
13103
|
+
altText: t('recorder.showQrCode'),
|
|
13104
|
+
variant: "primary",
|
|
13105
|
+
onClick: openQRCodeModal,
|
|
13106
|
+
children: t('recorder.showQrCode')
|
|
13107
|
+
}, "showQrCode")
|
|
13108
|
+
]
|
|
13109
|
+
})
|
|
13110
|
+
}) : null
|
|
13111
|
+
}),
|
|
13112
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("div", {
|
|
13113
|
+
className: "flex justify-end flex-1 z-30",
|
|
13114
|
+
children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)((0, $jQDcL$snapcalldesignsystem.Button), {
|
|
13115
|
+
variant: "roundedGlass",
|
|
13116
|
+
icon: !isMedium,
|
|
13117
|
+
onClick: settingsDialogState.open,
|
|
13118
|
+
children: [
|
|
13119
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$snapcalldesignsystemicons.Settings1Icon), {
|
|
13120
|
+
size: 18
|
|
13121
|
+
}),
|
|
13122
|
+
isMedium && t('settings.title')
|
|
13123
|
+
]
|
|
13124
|
+
})
|
|
13125
|
+
}),
|
|
13126
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $e9d4b4657e98cb84$export$c197ce1a352372f), {
|
|
13127
|
+
state: settingsDialogState
|
|
13128
|
+
})
|
|
13129
|
+
]
|
|
13130
|
+
});
|
|
13131
|
+
};
|
|
13132
|
+
|
|
13133
|
+
|
|
13134
|
+
|
|
13135
|
+
|
|
13136
|
+
|
|
13137
|
+
|
|
13138
|
+
|
|
13139
|
+
|
|
13140
|
+
|
|
13141
|
+
|
|
13142
|
+
const $a33432a0233f49a9$var$audioModes = [
|
|
13143
|
+
'video',
|
|
13144
|
+
'audio',
|
|
13145
|
+
'screen'
|
|
13146
|
+
];
|
|
13147
|
+
const $a33432a0233f49a9$var$videoModes = [
|
|
13148
|
+
'video',
|
|
13149
|
+
'photo'
|
|
13150
|
+
];
|
|
13151
|
+
const $a33432a0233f49a9$export$ca9d588768f0d0da = ({ children: children })=>{
|
|
13152
|
+
const { t: t } = (0, $jQDcL$reacti18next.useTranslation)();
|
|
13153
|
+
const reportError = (0, $8dfcca373a03b9e8$export$5a5695b638d078e7)();
|
|
13154
|
+
const { mode: mode } = (0, $098350f721a0bb52$export$2174f25d572f9f31)();
|
|
13155
|
+
const hasAudio = $a33432a0233f49a9$var$audioModes.includes(mode);
|
|
13156
|
+
const hasVideo = $a33432a0233f49a9$var$videoModes.includes(mode);
|
|
13157
|
+
const getUserMedia = (0, $8229feab219a258c$export$15073df9b5e6c63e)({
|
|
13158
|
+
audio: hasAudio,
|
|
13159
|
+
video: hasVideo
|
|
13160
|
+
});
|
|
13161
|
+
const hasDeniedPermissions = getUserMedia.error?.message.includes('denied');
|
|
13162
|
+
const devicesState = (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).getDevicesState();
|
|
13163
|
+
if (mode !== 'screen' && getUserMedia.isSuccess || devicesState.screenshare.enabled) return children;
|
|
13164
|
+
return /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("div", {
|
|
13165
|
+
className: "flex flex-col items-center gap-8 text-center max-w-[500px] mx-auto p-8 bg-gray-50 border border-gray-200 rounded-2xl shadow-sm",
|
|
13166
|
+
children: [
|
|
13167
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("div", {
|
|
13168
|
+
className: "flex flex-col gap-2",
|
|
13169
|
+
children: [
|
|
13170
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("h2", {
|
|
13171
|
+
className: "text-lg text-black font-semibold",
|
|
13172
|
+
children: mode === 'screen' ? t('recorder.chooseWhatYouWantToShare') : hasAudio && hasVideo ? t('recorder.noCameraAndMicrophoneAccess') : hasAudio ? t('recorder.noMicrophoneAccess') : hasVideo ? t('recorder.noCameraAccess') : '/'
|
|
13173
|
+
}),
|
|
13174
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("p", {
|
|
13175
|
+
className: "text-sm text-gray-900",
|
|
13176
|
+
children: mode === 'screen' ? t('recorder.chooseWhatYouWantToShareDescription') : hasAudio && hasVideo ? t('recorder.noCameraAndMicrophoneAccessDescription') : hasAudio ? t('recorder.noMicrophoneAccessDescription') : hasVideo ? t('recorder.noCameraAccessDescription') : '/'
|
|
13177
|
+
})
|
|
13178
|
+
]
|
|
13179
|
+
}),
|
|
13180
|
+
hasDeniedPermissions ? /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("p", {
|
|
13181
|
+
className: "text-sm text-gray-900",
|
|
13182
|
+
children: "Permissions blocked"
|
|
13183
|
+
}) : getUserMedia.isLoading ? /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$snapcalldesignsystemicons.SpinnerIcon), {
|
|
13184
|
+
size: 40,
|
|
13185
|
+
className: "text-blue-700 animate-spin"
|
|
13186
|
+
}) : /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$snapcalldesignsystem.Button), {
|
|
13187
|
+
onClick: ()=>{
|
|
13188
|
+
if (mode === 'screen') (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).enableScreenshare({
|
|
13189
|
+
audioTransportOption: 'mix'
|
|
13190
|
+
}).catch((error)=>reportError({
|
|
13191
|
+
code: 'SC_3',
|
|
13192
|
+
error: error
|
|
13193
|
+
}));
|
|
13194
|
+
else getUserMedia.refetch();
|
|
13195
|
+
},
|
|
13196
|
+
children: mode === 'screen' ? t('recorder.startScreenRecording') : t('recorder.allowAccess')
|
|
13197
|
+
})
|
|
13198
|
+
]
|
|
13199
|
+
});
|
|
13200
|
+
};
|
|
13201
|
+
|
|
13202
|
+
|
|
13203
|
+
|
|
13204
|
+
|
|
13205
|
+
|
|
13206
|
+
|
|
13207
|
+
function $b758582ffbe79e9a$var$useForwardedRef(ref) {
|
|
13208
|
+
const innerRef = (0, $jQDcL$react.useRef)(null);
|
|
13209
|
+
(0, $jQDcL$react.useEffect)(()=>{
|
|
13210
|
+
if (!ref) return;
|
|
13211
|
+
if (typeof ref === 'function') ref(innerRef.current);
|
|
13212
|
+
else ref.current = innerRef.current;
|
|
13213
|
+
});
|
|
13214
|
+
return innerRef;
|
|
13215
|
+
}
|
|
13216
|
+
const $b758582ffbe79e9a$export$8c410456846722ea = /*#__PURE__*/ (0, $jQDcL$react.forwardRef)((props, forwardedRef)=>{
|
|
13217
|
+
const ref = $b758582ffbe79e9a$var$useForwardedRef(forwardedRef);
|
|
13218
|
+
(0, $jQDcL$react.useEffect)(()=>{
|
|
13219
|
+
const onScreenshareEnabled = ()=>{
|
|
13220
|
+
if (!ref?.current) return;
|
|
13221
|
+
(0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).requestLocalScreenshare(ref.current);
|
|
13222
|
+
};
|
|
13223
|
+
if (ref.current) (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).requestLocalScreenshare(ref.current);
|
|
13224
|
+
(0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).addEventListener('screenshareEnabled', onScreenshareEnabled);
|
|
13225
|
+
return ()=>{
|
|
13226
|
+
(0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).removeEventListener('screenshareEnabled', onScreenshareEnabled);
|
|
13227
|
+
};
|
|
13228
|
+
}, [
|
|
13229
|
+
ref
|
|
13230
|
+
]);
|
|
13231
|
+
return /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("video", {
|
|
13232
|
+
autoPlay: true,
|
|
13233
|
+
muted: true,
|
|
13234
|
+
playsInline: true,
|
|
13235
|
+
ref: ref,
|
|
13236
|
+
className: "rounded-[10px] mx-auto h-full object-fit",
|
|
13237
|
+
children: props.children
|
|
13238
|
+
});
|
|
13239
|
+
});
|
|
13240
|
+
const $b758582ffbe79e9a$export$287f8fcc69caf433 = /*#__PURE__*/ (0, $jQDcL$react.forwardRef)((_, forwardedRef)=>{
|
|
13241
|
+
const ref = $b758582ffbe79e9a$var$useForwardedRef(forwardedRef);
|
|
13242
|
+
const [facingMode, setFacingMode] = (0, $jQDcL$react.useState)('user');
|
|
13243
|
+
(0, $jQDcL$react.useEffect)(()=>{
|
|
13244
|
+
const requestVideo = (video)=>{
|
|
13245
|
+
const { facingMode: newFacingMode } = (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).requestLocalVideo(video);
|
|
13246
|
+
setFacingMode(newFacingMode);
|
|
13247
|
+
};
|
|
13248
|
+
const onLocalVideoChange = (event)=>{
|
|
13249
|
+
if (!event.detail?.camera?.device || !ref.current) return;
|
|
13250
|
+
requestVideo(ref.current);
|
|
13251
|
+
};
|
|
13252
|
+
const deviceState = (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).getDevicesState();
|
|
13253
|
+
if (deviceState.camera.enabled && ref.current) requestVideo(ref.current);
|
|
13254
|
+
(0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).addEventListener('localVideoAvailable', onLocalVideoChange);
|
|
13255
|
+
(0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).addEventListener('localVideoChange', onLocalVideoChange);
|
|
13256
|
+
return ()=>{
|
|
13257
|
+
(0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).removeEventListener('localVideoAvailable', onLocalVideoChange);
|
|
13258
|
+
(0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).removeEventListener('localVideoChange', onLocalVideoChange);
|
|
13259
|
+
};
|
|
13260
|
+
}, [
|
|
13261
|
+
ref
|
|
13262
|
+
]);
|
|
13263
|
+
return /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("video", {
|
|
13264
|
+
autoPlay: true,
|
|
13265
|
+
muted: true,
|
|
13266
|
+
playsInline: true,
|
|
13267
|
+
ref: ref,
|
|
13268
|
+
className: (0, ($parcel$interopDefault($jQDcL$classnames)))('w-full h-full object-cover rounded-[inherit]', {
|
|
13269
|
+
'scale-x-[-1]': facingMode === 'user'
|
|
13270
|
+
})
|
|
13271
|
+
});
|
|
13272
|
+
});
|
|
12361
13273
|
|
|
12362
13274
|
|
|
12363
|
-
|
|
12364
|
-
|
|
12365
|
-
|
|
12366
|
-
|
|
12367
|
-
|
|
13275
|
+
|
|
13276
|
+
|
|
13277
|
+
|
|
13278
|
+
|
|
13279
|
+
const $c6c03cb1324fb0c3$var$canvasWidth = 300;
|
|
13280
|
+
const $c6c03cb1324fb0c3$var$canvasHeight = 180;
|
|
13281
|
+
const $c6c03cb1324fb0c3$var$barWidth = 4;
|
|
13282
|
+
const $c6c03cb1324fb0c3$var$spaceBetween = 12;
|
|
13283
|
+
const $c6c03cb1324fb0c3$var$dpi = window.devicePixelRatio;
|
|
13284
|
+
const $c6c03cb1324fb0c3$var$drawCanvasBase = (ctx)=>{
|
|
13285
|
+
const numberOfDots = ($c6c03cb1324fb0c3$var$canvasWidth + $c6c03cb1324fb0c3$var$spaceBetween * 2) / ($c6c03cb1324fb0c3$var$barWidth + $c6c03cb1324fb0c3$var$spaceBetween);
|
|
13286
|
+
ctx.restore();
|
|
13287
|
+
ctx.save();
|
|
13288
|
+
ctx.scale($c6c03cb1324fb0c3$var$dpi, $c6c03cb1324fb0c3$var$dpi);
|
|
13289
|
+
ctx.clearRect(0, 0, $c6c03cb1324fb0c3$var$canvasWidth, $c6c03cb1324fb0c3$var$canvasHeight);
|
|
13290
|
+
ctx.beginPath();
|
|
13291
|
+
for(let i = 0; i < numberOfDots; i++){
|
|
13292
|
+
const paddingLeft = i > 0 ? $c6c03cb1324fb0c3$var$spaceBetween * i : 0;
|
|
13293
|
+
const x = $c6c03cb1324fb0c3$var$barWidth * (i + 1) + paddingLeft - $c6c03cb1324fb0c3$var$barWidth / 2;
|
|
13294
|
+
const y = ($c6c03cb1324fb0c3$var$canvasHeight - $c6c03cb1324fb0c3$var$barWidth / 2) / 2;
|
|
13295
|
+
const radius = $c6c03cb1324fb0c3$var$barWidth / 2;
|
|
13296
|
+
ctx.arc(x, y, radius, 0, Math.PI * 2, true);
|
|
13297
|
+
}
|
|
13298
|
+
ctx.closePath();
|
|
13299
|
+
ctx.fillStyle = 'rgba(255, 255, 255, 0.25)';
|
|
13300
|
+
ctx.fill();
|
|
12368
13301
|
};
|
|
12369
|
-
const $
|
|
12370
|
-
const
|
|
12371
|
-
const
|
|
12372
|
-
|
|
12373
|
-
|
|
12374
|
-
|
|
12375
|
-
|
|
12376
|
-
|
|
12377
|
-
|
|
12378
|
-
|
|
12379
|
-
|
|
12380
|
-
|
|
12381
|
-
|
|
12382
|
-
|
|
12383
|
-
|
|
12384
|
-
|
|
12385
|
-
|
|
12386
|
-
return false;
|
|
12387
|
-
}
|
|
12388
|
-
return true;
|
|
12389
|
-
});
|
|
12390
|
-
if (errors.length > 0) {
|
|
12391
|
-
reportError({
|
|
12392
|
-
code: 'CRE_EV_1',
|
|
12393
|
-
error: 'failed to create assets'
|
|
12394
|
-
});
|
|
12395
|
-
throw new Error('some media not saved');
|
|
13302
|
+
const $c6c03cb1324fb0c3$export$e9b744e15e8fe06f = ()=>{
|
|
13303
|
+
const animationFrameId = (0, $jQDcL$react.useRef)(0);
|
|
13304
|
+
const canvasRef = (0, $jQDcL$react.useRef)(null);
|
|
13305
|
+
(0, $jQDcL$react.useEffect)(()=>{
|
|
13306
|
+
const canvas = canvasRef.current;
|
|
13307
|
+
const canvasCtx = canvas?.getContext('2d');
|
|
13308
|
+
const animate = ()=>{
|
|
13309
|
+
if ((0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).audioLevel && canvasCtx) {
|
|
13310
|
+
$c6c03cb1324fb0c3$var$drawCanvasBase(canvasCtx);
|
|
13311
|
+
const data = (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).audioLevel.getFrequencyData();
|
|
13312
|
+
canvasCtx.beginPath();
|
|
13313
|
+
for(let i = 0; i < data.length; i++){
|
|
13314
|
+
const barHeight = data[i];
|
|
13315
|
+
const paddingLeft = i > 0 ? $c6c03cb1324fb0c3$var$spaceBetween * i : 0;
|
|
13316
|
+
const x = $c6c03cb1324fb0c3$var$barWidth * (i + 1) + paddingLeft - $c6c03cb1324fb0c3$var$barWidth;
|
|
13317
|
+
const y = ($c6c03cb1324fb0c3$var$canvasHeight - barHeight) / 2;
|
|
13318
|
+
canvasCtx.roundRect(x, y, $c6c03cb1324fb0c3$var$barWidth, barHeight, 80);
|
|
12396
13319
|
}
|
|
12397
|
-
|
|
12398
|
-
|
|
12399
|
-
|
|
12400
|
-
code: 'CRE_EV_1',
|
|
12401
|
-
error: 'failed to create assets'
|
|
12402
|
-
});
|
|
12403
|
-
console.log(error);
|
|
12404
|
-
throw error;
|
|
13320
|
+
canvasCtx.closePath();
|
|
13321
|
+
canvasCtx.fillStyle = `rgb(255, 255, 255)`;
|
|
13322
|
+
canvasCtx.fill();
|
|
12405
13323
|
}
|
|
12406
|
-
|
|
12407
|
-
|
|
12408
|
-
|
|
12409
|
-
|
|
13324
|
+
animationFrameId.current = requestAnimationFrame(animate);
|
|
13325
|
+
};
|
|
13326
|
+
if (canvasCtx) $c6c03cb1324fb0c3$var$drawCanvasBase(canvasCtx);
|
|
13327
|
+
animationFrameId.current = requestAnimationFrame(animate);
|
|
13328
|
+
return ()=>{
|
|
13329
|
+
cancelAnimationFrame(animationFrameId.current);
|
|
13330
|
+
};
|
|
13331
|
+
}, []);
|
|
13332
|
+
return /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("canvas", {
|
|
13333
|
+
ref: canvasRef,
|
|
13334
|
+
width: $c6c03cb1324fb0c3$var$canvasWidth * $c6c03cb1324fb0c3$var$dpi,
|
|
13335
|
+
height: $c6c03cb1324fb0c3$var$canvasHeight * $c6c03cb1324fb0c3$var$dpi,
|
|
13336
|
+
style: {
|
|
13337
|
+
width: `${$c6c03cb1324fb0c3$var$canvasWidth}px`,
|
|
13338
|
+
height: `${$c6c03cb1324fb0c3$var$canvasHeight}px`
|
|
12410
13339
|
}
|
|
12411
13340
|
});
|
|
12412
|
-
const reportError = (0, $8dfcca373a03b9e8$export$5a5695b638d078e7)();
|
|
12413
|
-
const isMedium = window.matchMedia('(min-width: 768px)').matches;
|
|
12414
|
-
return /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $9277d94be7423d29$export$56d72fe406945300), {
|
|
12415
|
-
type: isMedium ? 'dialog' : 'sheet',
|
|
12416
|
-
showClose: !sendMutation.isSuccess,
|
|
12417
|
-
children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $9277d94be7423d29$export$e943710ec76a9465), {
|
|
12418
|
-
open: sendMutation.isSuccess ? true : state.isOpen,
|
|
12419
|
-
onOpenChange: sendMutation.isSuccess ? ()=>{} : state.setOpen,
|
|
12420
|
-
children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)((0, $9277d94be7423d29$export$4cf67c05c32f37ce), {
|
|
12421
|
-
className: "w-full max-h-[90vh] flex flex-col",
|
|
12422
|
-
children: [
|
|
12423
|
-
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)((0, $9277d94be7423d29$export$ae085f72dad73e20), {
|
|
12424
|
-
children: [
|
|
12425
|
-
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $9277d94be7423d29$export$5e9fc1357420b7eb), {
|
|
12426
|
-
className: "text-left flex items-center gap-2",
|
|
12427
|
-
children: sendMutation.isSuccess ? /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)((0, $jQDcL$reactjsxruntime.Fragment), {
|
|
12428
|
-
children: [
|
|
12429
|
-
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$snapcalldesignsystemicons.CheckCircleIcon), {
|
|
12430
|
-
size: 18,
|
|
12431
|
-
className: "text-green-700",
|
|
12432
|
-
duotone: true
|
|
12433
|
-
}),
|
|
12434
|
-
t('recorder.mediaSent', {
|
|
12435
|
-
count: assets.length
|
|
12436
|
-
})
|
|
12437
|
-
]
|
|
12438
|
-
}) : t('recorder.mediaCount', {
|
|
12439
|
-
count: assets.length
|
|
12440
|
-
})
|
|
12441
|
-
}),
|
|
12442
|
-
sendMutation.isSuccess && /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $9277d94be7423d29$export$51c201eb88940e0f), {
|
|
12443
|
-
children: t('recorder.clipSubmissionDescription')
|
|
12444
|
-
})
|
|
12445
|
-
]
|
|
12446
|
-
}),
|
|
12447
|
-
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("div", {
|
|
12448
|
-
className: "flex flex-col gap-4 overflow-y-auto",
|
|
12449
|
-
children: [
|
|
12450
|
-
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("div", {
|
|
12451
|
-
className: "flex flex-col min-w-0 gap-2 overflow-y-auto",
|
|
12452
|
-
children: [
|
|
12453
|
-
assets.map((asset)=>/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $ed315b68f9410130$export$d70ec5859ea7c9bc), {
|
|
12454
|
-
asset: asset,
|
|
12455
|
-
canRemove: !sendMutation.isSuccess
|
|
12456
|
-
}, asset.filename)),
|
|
12457
|
-
incomingAsset && /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("div", {
|
|
12458
|
-
className: "flex items-center justify-center p-2 border border-gray-200 rounded-lg",
|
|
12459
|
-
children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$snapcalldesignsystemicons.SpinnerIcon), {
|
|
12460
|
-
size: 24,
|
|
12461
|
-
className: "text-blue-700 animate-spin"
|
|
12462
|
-
})
|
|
12463
|
-
})
|
|
12464
|
-
]
|
|
12465
|
-
}),
|
|
12466
|
-
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)((0, $jQDcL$snapcalldesignsystem.Button), {
|
|
12467
|
-
className: "mt-1",
|
|
12468
|
-
variant: "secondary",
|
|
12469
|
-
onClick: sendMutation.isSuccess ? ()=>window.location.reload() : state.close,
|
|
12470
|
-
children: [
|
|
12471
|
-
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$snapcalldesignsystemicons.PlusCircleIcon), {
|
|
12472
|
-
size: 18
|
|
12473
|
-
}),
|
|
12474
|
-
" ",
|
|
12475
|
-
t('recorder.addNewClip')
|
|
12476
|
-
]
|
|
12477
|
-
})
|
|
12478
|
-
]
|
|
12479
|
-
}),
|
|
12480
|
-
!sendMutation.isSuccess && /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)((0, $jQDcL$snapcalldesignsystem.Button), {
|
|
12481
|
-
className: "w-full",
|
|
12482
|
-
onClick: ()=>{
|
|
12483
|
-
sendMutation.mutate();
|
|
12484
|
-
},
|
|
12485
|
-
children: [
|
|
12486
|
-
sendMutation.isPending ? /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$snapcalldesignsystemicons.SpinnerIcon), {
|
|
12487
|
-
size: 24,
|
|
12488
|
-
className: "text-blue-700 animate-spin"
|
|
12489
|
-
}) : /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$snapcalldesignsystemicons.Send3Icon), {
|
|
12490
|
-
size: 18,
|
|
12491
|
-
className: "text-white"
|
|
12492
|
-
}),
|
|
12493
|
-
t('recorder.send')
|
|
12494
|
-
]
|
|
12495
|
-
})
|
|
12496
|
-
]
|
|
12497
|
-
})
|
|
12498
|
-
})
|
|
12499
|
-
});
|
|
12500
13341
|
};
|
|
12501
13342
|
|
|
12502
13343
|
|
|
@@ -12510,19 +13351,25 @@ const $e399416dd32d3252$export$c01bb29adf88f117 = ({ state: state })=>{
|
|
|
12510
13351
|
|
|
12511
13352
|
|
|
12512
13353
|
|
|
13354
|
+
|
|
13355
|
+
|
|
13356
|
+
|
|
12513
13357
|
const $d0ded347a490aa03$export$aab864ee9e2aed8d = ()=>{
|
|
12514
13358
|
const { t: t } = (0, $jQDcL$reacti18next.useTranslation)();
|
|
12515
13359
|
const { recorderOptions: recorderOptions } = (0, $jQDcL$react.useContext)((0, $8b39f32976a7698a$export$2e2bcd8739ae039));
|
|
12516
|
-
const { mode: mode, setMode: setMode, hasVideo: hasVideo } = (0, $098350f721a0bb52$export$2174f25d572f9f31)();
|
|
13360
|
+
const { mode: mode, setMode: setMode, hasVideo: hasVideo, isVideoBotEnabled: isVideoBotEnabled } = (0, $098350f721a0bb52$export$2174f25d572f9f31)();
|
|
13361
|
+
const devicesState = (0, $c1f57aebcca9b882$export$9f1846b6ccad1893)();
|
|
13362
|
+
const queryClient = (0, $jQDcL$tanstackreactquery.useQueryClient)();
|
|
12517
13363
|
const enabledModes = recorderOptions?.enabledModes || [
|
|
12518
13364
|
'photo',
|
|
12519
13365
|
'video',
|
|
12520
13366
|
'audio',
|
|
12521
13367
|
'screen'
|
|
12522
13368
|
];
|
|
13369
|
+
const isScreenshareAvailable = typeof navigator.mediaDevices?.getDisplayMedia === 'function';
|
|
12523
13370
|
const availableModes = enabledModes.reduce((modes, mode)=>{
|
|
12524
|
-
const isScreenshareAvailable = navigator.mediaDevices?.getDisplayMedia;
|
|
12525
13371
|
if (mode === 'screen' && !isScreenshareAvailable) return modes;
|
|
13372
|
+
if (mode === 'photo' && isVideoBotEnabled) return modes;
|
|
12526
13373
|
return [
|
|
12527
13374
|
...modes,
|
|
12528
13375
|
{
|
|
@@ -12531,6 +13378,23 @@ const $d0ded347a490aa03$export$aab864ee9e2aed8d = ()=>{
|
|
|
12531
13378
|
}
|
|
12532
13379
|
];
|
|
12533
13380
|
}, []);
|
|
13381
|
+
if (enabledModes.length === 0) enabledModes.push('video');
|
|
13382
|
+
if (mode === 'screen' && !isScreenshareAvailable) setMode('video');
|
|
13383
|
+
(0, $jQDcL$react.useEffect)(()=>{
|
|
13384
|
+
const onRequestAccessUpdate = (event)=>{
|
|
13385
|
+
queryClient.invalidateQueries({
|
|
13386
|
+
queryKey: [
|
|
13387
|
+
'devicesState'
|
|
13388
|
+
]
|
|
13389
|
+
});
|
|
13390
|
+
};
|
|
13391
|
+
(0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).addEventListener('requestAccessUpdate', onRequestAccessUpdate);
|
|
13392
|
+
return ()=>{
|
|
13393
|
+
(0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).removeEventListener('requestAccessUpdate', onRequestAccessUpdate);
|
|
13394
|
+
};
|
|
13395
|
+
}, [
|
|
13396
|
+
queryClient
|
|
13397
|
+
]);
|
|
12534
13398
|
return /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("div", {
|
|
12535
13399
|
className: "flex flex-col w-full gap-6",
|
|
12536
13400
|
children: enabledModes.length > 1 && /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$snapcalldesignsystem.Tabs), {
|
|
@@ -12541,6 +13405,7 @@ const $d0ded347a490aa03$export$aab864ee9e2aed8d = ()=>{
|
|
|
12541
13405
|
children: availableModes.map((mode)=>/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$snapcalldesignsystem.TabsTrigger), {
|
|
12542
13406
|
className: (0, ($parcel$interopDefault($jQDcL$classnames)))('flex-1 rounded-xl text-black dark:data-[state=active]:text-white data-[state=active]:bg-black', hasVideo ? 'hover:bg-black/5' : 'hover:bg-gray-200'),
|
|
12543
13407
|
value: mode.value,
|
|
13408
|
+
disabled: devicesState.data?.isAskingPermissions,
|
|
12544
13409
|
children: mode.title
|
|
12545
13410
|
}, mode.value))
|
|
12546
13411
|
})
|
|
@@ -12622,10 +13487,14 @@ const $a9c4bfaa4df801e6$export$50c18ae22f50c0e = ()=>{
|
|
|
12622
13487
|
|
|
12623
13488
|
|
|
12624
13489
|
|
|
13490
|
+
|
|
12625
13491
|
const $9a3d89191e7070cd$export$53819c0e58f98d49 = (props)=>{
|
|
12626
13492
|
const [countdown, setCountdown] = (0, $jQDcL$react.useState)(props.initialValue);
|
|
12627
13493
|
(0, $jQDcL$react.useEffect)(()=>{
|
|
12628
|
-
if (countdown === 0)
|
|
13494
|
+
if (countdown === 0) {
|
|
13495
|
+
props.onFinish();
|
|
13496
|
+
setCountdown(-1);
|
|
13497
|
+
}
|
|
12629
13498
|
}, [
|
|
12630
13499
|
countdown,
|
|
12631
13500
|
props
|
|
@@ -12637,10 +13506,10 @@ const $9a3d89191e7070cd$export$53819c0e58f98d49 = (props)=>{
|
|
|
12637
13506
|
return ()=>clearInterval(t);
|
|
12638
13507
|
}, []);
|
|
12639
13508
|
return /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("div", {
|
|
12640
|
-
className: "absolute inset-0 w-full h-full flex justify-center items-center bg-white/60 z-
|
|
13509
|
+
className: "absolute inset-0 w-full h-full flex justify-center items-center bg-white/60 z-20",
|
|
12641
13510
|
children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("span", {
|
|
12642
13511
|
className: "text-black text-[96px] font-semibold",
|
|
12643
|
-
children: countdown
|
|
13512
|
+
children: countdown && countdown > 0 ? countdown : 0
|
|
12644
13513
|
})
|
|
12645
13514
|
});
|
|
12646
13515
|
};
|
|
@@ -12650,11 +13519,11 @@ const $9a3d89191e7070cd$export$53819c0e58f98d49 = (props)=>{
|
|
|
12650
13519
|
|
|
12651
13520
|
const $e86e3e83467d5bba$export$f9da3144ae2525a3 = ()=>{
|
|
12652
13521
|
const { streamUIContainerRef: streamUIContainerRef } = (0, $jQDcL$react.useContext)((0, $8b39f32976a7698a$export$2e2bcd8739ae039));
|
|
12653
|
-
const {
|
|
13522
|
+
const { i18n: i18n } = (0, $jQDcL$reacti18next.useTranslation)();
|
|
13523
|
+
const { mode: mode, showCountdown: showCountdown, setShowCountdown: setShowCountdown, isRecording: isRecording, setIsRecording: setIsRecording, isStoppingRecording: isStoppingRecording, setIsStoppingRecording: setIsStoppingRecording, videoElementRef: videoElementRef, addAsset: addAsset, setIncomingAsset: setIncomingAsset, videoBotState: videoBotState, isVideoBotEnabled: isVideoBotEnabled } = (0, $098350f721a0bb52$export$2174f25d572f9f31)();
|
|
12654
13524
|
const reportError = (0, $8dfcca373a03b9e8$export$5a5695b638d078e7)();
|
|
12655
13525
|
const recordButtonRef = (0, $jQDcL$react.useRef)(null);
|
|
12656
13526
|
const [showFlashAnimation, setShowFlashAnimation] = (0, $jQDcL$react.useState)(false);
|
|
12657
|
-
const [showCountdown, setShowCountdown] = (0, $jQDcL$react.useState)(false);
|
|
12658
13527
|
const devicesState = (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).getDevicesState();
|
|
12659
13528
|
const isRecordButtonActive = showCountdown || isRecording;
|
|
12660
13529
|
const canStartRecord = mode === 'photo' ? devicesState.camera.enabled : mode === 'audio' ? devicesState.microphone.enabled : mode === 'video' ? devicesState.camera.enabled && devicesState.microphone.enabled : mode === 'screen' ? devicesState.screenshare.enabled && devicesState.microphone.enabled : false;
|
|
@@ -12666,7 +13535,7 @@ const $e86e3e83467d5bba$export$f9da3144ae2525a3 = ()=>{
|
|
|
12666
13535
|
mode: 'photo',
|
|
12667
13536
|
createdAt: createdAt
|
|
12668
13537
|
});
|
|
12669
|
-
|
|
13538
|
+
videoBotState.open();
|
|
12670
13539
|
try {
|
|
12671
13540
|
const image = await (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).captureVideo(videoElementRef.current);
|
|
12672
13541
|
const { url: url, filename: filename } = await (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).saveCapture(image);
|
|
@@ -12675,7 +13544,8 @@ const $e86e3e83467d5bba$export$f9da3144ae2525a3 = ()=>{
|
|
|
12675
13544
|
mode: 'photo',
|
|
12676
13545
|
url: url,
|
|
12677
13546
|
thumbnailUrl: url,
|
|
12678
|
-
createdAt: createdAt
|
|
13547
|
+
createdAt: createdAt,
|
|
13548
|
+
networkIssue: false
|
|
12679
13549
|
});
|
|
12680
13550
|
} catch (error) {
|
|
12681
13551
|
reportError({
|
|
@@ -12684,12 +13554,13 @@ const $e86e3e83467d5bba$export$f9da3144ae2525a3 = ()=>{
|
|
|
12684
13554
|
});
|
|
12685
13555
|
setIncomingAsset(null);
|
|
12686
13556
|
}
|
|
12687
|
-
|
|
13557
|
+
videoBotState.open();
|
|
12688
13558
|
}
|
|
12689
13559
|
};
|
|
12690
13560
|
const onRecordClick = async ()=>{
|
|
12691
|
-
if (isRecording) {
|
|
12692
|
-
|
|
13561
|
+
if (isRecording && !isStoppingRecording) {
|
|
13562
|
+
setIsStoppingRecording(true);
|
|
13563
|
+
videoBotState.open();
|
|
12693
13564
|
try {
|
|
12694
13565
|
await (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).stopRecord();
|
|
12695
13566
|
if (mode === 'screen') (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).disableScreenshare().catch((error)=>reportError({
|
|
@@ -12702,7 +13573,7 @@ const $e86e3e83467d5bba$export$f9da3144ae2525a3 = ()=>{
|
|
|
12702
13573
|
error: error
|
|
12703
13574
|
});
|
|
12704
13575
|
}
|
|
12705
|
-
} else setShowCountdown((prev)=>{
|
|
13576
|
+
} else if (!isRecording) setShowCountdown((prev)=>{
|
|
12706
13577
|
const next = !prev;
|
|
12707
13578
|
const { screenshare: screenshare } = (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).getDevicesState();
|
|
12708
13579
|
if (next === false && screenshare.enabled) (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).disableScreenshare().catch((error)=>reportError({
|
|
@@ -12714,6 +13585,10 @@ const $e86e3e83467d5bba$export$f9da3144ae2525a3 = ()=>{
|
|
|
12714
13585
|
};
|
|
12715
13586
|
const onCountdownFinish = async ()=>{
|
|
12716
13587
|
try {
|
|
13588
|
+
if (isVideoBotEnabled) await (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).createRecordingGroup({
|
|
13589
|
+
type: 'video',
|
|
13590
|
+
language: i18n.language
|
|
13591
|
+
});
|
|
12717
13592
|
await (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).startRecord();
|
|
12718
13593
|
(0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).audioLevel?.startAverageAnalysis();
|
|
12719
13594
|
setShowCountdown(false);
|
|
@@ -12750,7 +13625,8 @@ const $e86e3e83467d5bba$export$f9da3144ae2525a3 = ()=>{
|
|
|
12750
13625
|
(0, $jQDcL$react.useEffect)(()=>{
|
|
12751
13626
|
setShowCountdown(false);
|
|
12752
13627
|
}, [
|
|
12753
|
-
mode
|
|
13628
|
+
mode,
|
|
13629
|
+
setShowCountdown
|
|
12754
13630
|
]);
|
|
12755
13631
|
return /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)((0, $jQDcL$reactjsxruntime.Fragment), {
|
|
12756
13632
|
children: [
|
|
@@ -12769,7 +13645,7 @@ const $e86e3e83467d5bba$export$f9da3144ae2525a3 = ()=>{
|
|
|
12769
13645
|
else onRecordClick();
|
|
12770
13646
|
}
|
|
12771
13647
|
},
|
|
12772
|
-
className: (0, ($parcel$interopDefault($jQDcL$classnames)))('flex items-center justify-center w-16 h-16 ring-[3px] ring-black rounded-full cursor-pointer transition-all duration-500', mode === 'photo' ? 'p-2' : 'p-5', isRecordButtonActive ? 'bg-red-700/60' : 'bg-transparent'),
|
|
13648
|
+
className: (0, ($parcel$interopDefault($jQDcL$classnames)))('flex items-center justify-center w-16 h-16 ring-[3px] ring-black rounded-full cursor-pointer transition-all duration-500', mode === 'photo' ? 'p-2' : 'p-5', isRecordButtonActive ? isStoppingRecording ? 'bg-gray-800/60' : 'bg-red-700/60' : 'bg-transparent'),
|
|
12773
13649
|
children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("div", {
|
|
12774
13650
|
className: (0, ($parcel$interopDefault($jQDcL$classnames)))('w-full h-full bg-black duration-700', {
|
|
12775
13651
|
'rounded-full': mode === 'photo',
|
|
@@ -12831,22 +13707,80 @@ const $d2c20674130d0e96$export$9ea2b4f70e201d7f = ({ className: className })=>{
|
|
|
12831
13707
|
d: "M577.855 68.286C577.855 56.3698 577.855 44.4543 577.858 32.5381C577.858 32.1789 577.852 31.8154 577.904 31.4627C578.178 29.6244 579.501 28.3626 581.362 28.3187C583.88 28.2597 586.4 28.2589 588.917 28.3208C590.809 28.3676 592.243 29.8173 592.411 31.6952C592.442 32.0285 592.445 32.3654 592.445 32.7008C592.446 56.4368 592.447 80.1727 592.442 103.908C592.442 104.433 592.434 104.97 592.333 105.482C592.01 107.11 590.721 108.225 589.041 108.287C587.579 108.341 586.115 108.309 584.652 108.312C583.692 108.314 582.733 108.319 581.773 108.308C581.415 108.304 581.049 108.297 580.7 108.227C578.971 107.878 577.979 106.678 577.863 104.824C577.847 104.562 577.856 104.297 577.856 104.033C577.856 92.117 577.856 80.2015 577.856 68.2853L577.855 68.286Z",
|
|
12832
13708
|
fill: "black"
|
|
12833
13709
|
})
|
|
12834
|
-
]
|
|
13710
|
+
]
|
|
13711
|
+
});
|
|
13712
|
+
};
|
|
13713
|
+
|
|
13714
|
+
|
|
13715
|
+
|
|
13716
|
+
|
|
13717
|
+
|
|
13718
|
+
|
|
13719
|
+
|
|
13720
|
+
|
|
13721
|
+
|
|
13722
|
+
|
|
13723
|
+
|
|
13724
|
+
const $a8f7f98371cac732$export$35dc49ae78ec5d63 = {
|
|
13725
|
+
photo: {
|
|
13726
|
+
extension: '.jpeg',
|
|
13727
|
+
thumbnailIcon: (0, $jQDcL$snapcalldesignsystemicons.Camera1Icon)
|
|
13728
|
+
},
|
|
13729
|
+
video: {
|
|
13730
|
+
extension: '.mp4',
|
|
13731
|
+
thumbnailIcon: (0, $jQDcL$snapcalldesignsystemicons.PlayIcon)
|
|
13732
|
+
},
|
|
13733
|
+
audio: {
|
|
13734
|
+
extension: '.mp3',
|
|
13735
|
+
thumbnailIcon: (0, $jQDcL$snapcalldesignsystemicons.Recording2Icon)
|
|
13736
|
+
},
|
|
13737
|
+
screen: {
|
|
13738
|
+
extension: '.mp4',
|
|
13739
|
+
thumbnailIcon: (0, $jQDcL$snapcalldesignsystemicons.Monitor2Icon)
|
|
13740
|
+
}
|
|
13741
|
+
};
|
|
13742
|
+
const $a8f7f98371cac732$export$a87fb02b17364ba7 = ({ mode: mode, thumbnailUrl: thumbnailUrl, minimal: minimal = false, onClick: onClick })=>{
|
|
13743
|
+
const FallbackIcon = $a8f7f98371cac732$export$35dc49ae78ec5d63[mode].thumbnailIcon;
|
|
13744
|
+
const resizedThumbnailUrl = (0, $jQDcL$react.useMemo)(()=>{
|
|
13745
|
+
if (thumbnailUrl) try {
|
|
13746
|
+
const url = new URL(thumbnailUrl);
|
|
13747
|
+
if (url.host === 'image.snapcall.io') {
|
|
13748
|
+
url.searchParams.set('width', '128');
|
|
13749
|
+
return url.href;
|
|
13750
|
+
}
|
|
13751
|
+
} catch (err) {
|
|
13752
|
+
console.error(err);
|
|
13753
|
+
}
|
|
13754
|
+
return thumbnailUrl;
|
|
13755
|
+
}, [
|
|
13756
|
+
thumbnailUrl
|
|
13757
|
+
]);
|
|
13758
|
+
return /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("div", {
|
|
13759
|
+
className: (0, ($parcel$interopDefault($jQDcL$classnames)))('rounded-lg cursor-pointer shrink-0 border-2', minimal ? 'w-12 h-12 border-white/10' : 'w-[70px] h-[70px] border-gray-200'),
|
|
13760
|
+
onClick: onClick,
|
|
13761
|
+
children: resizedThumbnailUrl ? /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("img", {
|
|
13762
|
+
className: "w-full h-full rounded-md object-cover",
|
|
13763
|
+
src: resizedThumbnailUrl,
|
|
13764
|
+
alt: ""
|
|
13765
|
+
}) : /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("div", {
|
|
13766
|
+
className: "flex items-center justify-center w-full h-full bg-gray-50 rounded-md dark-theme",
|
|
13767
|
+
children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)(FallbackIcon, {
|
|
13768
|
+
size: minimal ? 16 : 24,
|
|
13769
|
+
className: "text-white"
|
|
13770
|
+
})
|
|
13771
|
+
})
|
|
12835
13772
|
});
|
|
12836
13773
|
};
|
|
12837
13774
|
|
|
12838
13775
|
|
|
12839
13776
|
|
|
12840
13777
|
|
|
12841
|
-
|
|
12842
|
-
|
|
12843
|
-
|
|
12844
|
-
|
|
12845
|
-
|
|
12846
13778
|
const $385bdeffb4b25e1f$export$c7c44baae9d9f25f = ()=>{
|
|
12847
13779
|
const { t: t } = (0, $jQDcL$reacti18next.useTranslation)();
|
|
13780
|
+
const { toast: toast } = (0, $jQDcL$snapcalldesignsystem.useToast)();
|
|
12848
13781
|
const reportError = (0, $8dfcca373a03b9e8$export$5a5695b638d078e7)();
|
|
12849
|
-
const { mode: mode, isRecording: isRecording, assets: assets,
|
|
13782
|
+
const { mode: mode, isRecording: isRecording, assets: assets, videoBotState: videoBotState, setNetworkIssue: setNetworkIssue, networkIssue: networkIssue } = (0, $098350f721a0bb52$export$2174f25d572f9f31)();
|
|
13783
|
+
const [networkToast, setNetworkToast] = (0, $jQDcL$react.useState)(undefined);
|
|
12850
13784
|
const rotateVideo = ()=>{
|
|
12851
13785
|
const devicesState = (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).getDevicesState();
|
|
12852
13786
|
if (devicesState.camera.enabled) (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).rotateVideo().catch((error)=>reportError({
|
|
@@ -12854,18 +13788,55 @@ const $385bdeffb4b25e1f$export$c7c44baae9d9f25f = ()=>{
|
|
|
12854
13788
|
error: error
|
|
12855
13789
|
}));
|
|
12856
13790
|
};
|
|
13791
|
+
(0, $jQDcL$react.useEffect)(()=>{
|
|
13792
|
+
return ()=>{
|
|
13793
|
+
networkToast?.dismiss();
|
|
13794
|
+
};
|
|
13795
|
+
});
|
|
13796
|
+
(0, $jQDcL$react.useEffect)(()=>{
|
|
13797
|
+
const onNetworkStateChange = (event)=>{
|
|
13798
|
+
if (!event.detail.isOk && !networkToast) {
|
|
13799
|
+
setNetworkIssue(true);
|
|
13800
|
+
setNetworkToast(toast({
|
|
13801
|
+
hideClose: true,
|
|
13802
|
+
duration: Infinity,
|
|
13803
|
+
title: t('networkIssue.title'),
|
|
13804
|
+
icon: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("div", {
|
|
13805
|
+
className: "bg-amber-700 p-1 rounded-md",
|
|
13806
|
+
children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$snapcalldesignsystemicons.WifiOffIcon), {
|
|
13807
|
+
size: 16,
|
|
13808
|
+
className: "text-black "
|
|
13809
|
+
})
|
|
13810
|
+
})
|
|
13811
|
+
}));
|
|
13812
|
+
} else if (event.detail.isOk) {
|
|
13813
|
+
networkToast?.dismiss();
|
|
13814
|
+
setNetworkToast(undefined);
|
|
13815
|
+
}
|
|
13816
|
+
};
|
|
13817
|
+
(0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).addEventListener('networkStateChange', onNetworkStateChange);
|
|
13818
|
+
return ()=>{
|
|
13819
|
+
(0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).removeEventListener('networkStateChange', onNetworkStateChange);
|
|
13820
|
+
};
|
|
13821
|
+
}, [
|
|
13822
|
+
networkIssue,
|
|
13823
|
+
networkToast,
|
|
13824
|
+
setNetworkIssue,
|
|
13825
|
+
t,
|
|
13826
|
+
toast
|
|
13827
|
+
]);
|
|
12857
13828
|
return /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("div", {
|
|
12858
|
-
className: "flex flex-col items-center gap-6 md:gap-4 w-full max-w-[500px] mx-auto z-
|
|
13829
|
+
className: "flex flex-col items-center gap-6 md:gap-4 w-full max-w-[500px] mx-auto z-30",
|
|
12859
13830
|
children: [
|
|
12860
13831
|
(mode === 'photo' || mode === 'video') && /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $a9c4bfaa4df801e6$export$50c18ae22f50c0e), {}),
|
|
12861
13832
|
!isRecording && /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $d0ded347a490aa03$export$aab864ee9e2aed8d), {}),
|
|
12862
13833
|
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("div", {
|
|
12863
13834
|
className: "flex items-center justify-between w-full",
|
|
12864
13835
|
children: [
|
|
12865
|
-
assets.length > 0 ? /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $
|
|
13836
|
+
assets.length > 0 ? /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $a8f7f98371cac732$export$a87fb02b17364ba7), {
|
|
12866
13837
|
mode: assets[assets.length - 1].mode,
|
|
12867
13838
|
thumbnailUrl: assets[assets.length - 1].thumbnailUrl,
|
|
12868
|
-
onClick:
|
|
13839
|
+
onClick: videoBotState.open,
|
|
12869
13840
|
minimal: true
|
|
12870
13841
|
}) : /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("span", {
|
|
12871
13842
|
className: "w-12 h-12"
|
|
@@ -13003,7 +13974,7 @@ const $8add04fa81adf378$export$b916fa2db97921a4 = ({ state: state, flow: flow, c
|
|
|
13003
13974
|
!open && state.close();
|
|
13004
13975
|
},
|
|
13005
13976
|
children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)((0, $jQDcL$snapcalldesignsystem.AlertDialogContent), {
|
|
13006
|
-
className: "w-[334px] md:w-[334px] rounded-xl max-h-
|
|
13977
|
+
className: "w-[334px] md:w-[334px] rounded-xl max-h-[80vh] overflow-y-auto grid-rows-[1fr_min-content]",
|
|
13007
13978
|
children: [
|
|
13008
13979
|
flow.steps?.[0]?.config?.image_url ? /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("div", {
|
|
13009
13980
|
className: "relative rounded-xl",
|
|
@@ -13054,19 +14025,129 @@ const $8add04fa81adf378$export$b916fa2db97921a4 = ({ state: state, flow: flow, c
|
|
|
13054
14025
|
}) : /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$reactjsxruntime.Fragment), {}),
|
|
13055
14026
|
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$snapcalldesignsystem.AlertDialogHeader), {
|
|
13056
14027
|
children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$snapcalldesignsystem.AlertDialogTitle), {
|
|
14028
|
+
className: "line-clamp-2",
|
|
14029
|
+
style: {
|
|
14030
|
+
overflowWrap: 'anywhere'
|
|
14031
|
+
},
|
|
13057
14032
|
children: flow.steps?.[0]?.translation?.title || flow.steps?.[0]?.title
|
|
13058
14033
|
})
|
|
13059
14034
|
}),
|
|
13060
14035
|
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("p", {
|
|
13061
|
-
className: "text-sm text-gray-700
|
|
14036
|
+
className: "text-sm text-gray-700 overflow-y-scroll",
|
|
14037
|
+
style: {
|
|
14038
|
+
overflowWrap: 'anywhere'
|
|
14039
|
+
},
|
|
13062
14040
|
children: flow.steps?.[0]?.translation?.description || flow.steps?.[0]?.config?.description
|
|
13063
14041
|
}),
|
|
14042
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$snapcalldesignsystem.AlertDialogFooter), {
|
|
14043
|
+
className: "min-w-0",
|
|
14044
|
+
children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$snapcalldesignsystem.Button), {
|
|
14045
|
+
size: "sm",
|
|
14046
|
+
className: "w-full",
|
|
14047
|
+
onClick: state.close,
|
|
14048
|
+
children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("span", {
|
|
14049
|
+
className: "line-clamp-2",
|
|
14050
|
+
style: {
|
|
14051
|
+
overflowWrap: 'anywhere'
|
|
14052
|
+
},
|
|
14053
|
+
children: flow.steps?.[0]?.translation?.button || flow.steps?.[0]?.config?.button_text || t('notifications.close')
|
|
14054
|
+
})
|
|
14055
|
+
})
|
|
14056
|
+
}),
|
|
14057
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("p", {
|
|
14058
|
+
className: "text-xs text-[#707070] text-center",
|
|
14059
|
+
children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$reacti18next.Trans), {
|
|
14060
|
+
i18nKey: "recorder.instructions.privacyPolicy",
|
|
14061
|
+
components: {
|
|
14062
|
+
bold: // eslint-disable-next-line jsx-a11y/anchor-has-content
|
|
14063
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("a", {
|
|
14064
|
+
className: "font-semibold text-gray-1000 underline",
|
|
14065
|
+
href: "https://www.snapcall.io/privacy-policy",
|
|
14066
|
+
target: "_blank",
|
|
14067
|
+
rel: "noreferrer"
|
|
14068
|
+
})
|
|
14069
|
+
}
|
|
14070
|
+
})
|
|
14071
|
+
})
|
|
14072
|
+
]
|
|
14073
|
+
})
|
|
14074
|
+
});
|
|
14075
|
+
};
|
|
14076
|
+
|
|
14077
|
+
|
|
14078
|
+
|
|
14079
|
+
|
|
14080
|
+
|
|
14081
|
+
const $ae4a316f3f6b930e$export$54c6bcb39df9c9b9 = ({ state: state, flow: flow })=>{
|
|
14082
|
+
const { t: t } = (0, $jQDcL$reacti18next.useTranslation)();
|
|
14083
|
+
return /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$snapcalldesignsystem.AlertDialog), {
|
|
14084
|
+
open: state.isOpen,
|
|
14085
|
+
onOpenChange: state.setOpen,
|
|
14086
|
+
children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)((0, $jQDcL$snapcalldesignsystem.AlertDialogContent), {
|
|
14087
|
+
className: "w-[334px] md:w-[334px] rounded-xl max-h-screen overflow-y-auto",
|
|
14088
|
+
children: [
|
|
14089
|
+
flow.image_url ? /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("div", {
|
|
14090
|
+
className: "relative rounded-xl",
|
|
14091
|
+
children: [
|
|
14092
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("img", {
|
|
14093
|
+
className: "w-full h-[200px] object-cover rounded-[inherit]",
|
|
14094
|
+
src: flow.image_url,
|
|
14095
|
+
alt: ""
|
|
14096
|
+
}),
|
|
14097
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("div", {
|
|
14098
|
+
className: "absolute inset-0 ring-2 ring-inset ring-white/20 rounded-[inherit]"
|
|
14099
|
+
}),
|
|
14100
|
+
flow.logo_url && /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("div", {
|
|
14101
|
+
className: "absolute bottom-2 right-2 rounded-lg",
|
|
14102
|
+
children: [
|
|
14103
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("img", {
|
|
14104
|
+
className: "w-8 h-8 object-cover rounded-[inherit]",
|
|
14105
|
+
src: flow.logo_url,
|
|
14106
|
+
alt: ""
|
|
14107
|
+
}),
|
|
14108
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("div", {
|
|
14109
|
+
className: "absolute inset-0 ring-2 ring-inset ring-white/20 rounded-[inherit]"
|
|
14110
|
+
})
|
|
14111
|
+
]
|
|
14112
|
+
})
|
|
14113
|
+
]
|
|
14114
|
+
}) : flow.logo_url ? /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("div", {
|
|
14115
|
+
className: "h-[200px] bg-cover bg-center rounded-xl",
|
|
14116
|
+
style: {
|
|
14117
|
+
backgroundImage: `url(${flow.logo_url})`
|
|
14118
|
+
},
|
|
14119
|
+
children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("div", {
|
|
14120
|
+
className: "flex justify-center items-center w-full h-full backdrop-blur-[30px] rounded-[inherit]",
|
|
14121
|
+
children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("div", {
|
|
14122
|
+
className: "absolute rounded-2xl",
|
|
14123
|
+
children: [
|
|
14124
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("img", {
|
|
14125
|
+
className: "w-[100px] h-[100px] object-cover rounded-[inherit]",
|
|
14126
|
+
src: flow.logo_url,
|
|
14127
|
+
alt: ""
|
|
14128
|
+
}),
|
|
14129
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("div", {
|
|
14130
|
+
className: "absolute inset-0 ring-4 ring-inset ring-white/20 rounded-[inherit]"
|
|
14131
|
+
})
|
|
14132
|
+
]
|
|
14133
|
+
})
|
|
14134
|
+
})
|
|
14135
|
+
}) : /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$reactjsxruntime.Fragment), {}),
|
|
14136
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$snapcalldesignsystem.AlertDialogHeader), {
|
|
14137
|
+
children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$snapcalldesignsystem.AlertDialogTitle), {
|
|
14138
|
+
children: flow.title
|
|
14139
|
+
})
|
|
14140
|
+
}),
|
|
14141
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("p", {
|
|
14142
|
+
className: "text-sm text-gray-700 whitespace-pre-line",
|
|
14143
|
+
children: flow.text
|
|
14144
|
+
}),
|
|
13064
14145
|
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$snapcalldesignsystem.AlertDialogFooter), {
|
|
13065
14146
|
children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$snapcalldesignsystem.Button), {
|
|
13066
14147
|
size: "sm",
|
|
13067
14148
|
className: "w-full",
|
|
13068
14149
|
onClick: state.close,
|
|
13069
|
-
children:
|
|
14150
|
+
children: t('notifications.close')
|
|
13070
14151
|
})
|
|
13071
14152
|
}),
|
|
13072
14153
|
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("p", {
|
|
@@ -13092,111 +14173,331 @@ const $8add04fa81adf378$export$b916fa2db97921a4 = ({ state: state, flow: flow, c
|
|
|
13092
14173
|
|
|
13093
14174
|
|
|
13094
14175
|
|
|
14176
|
+
const $41ba1aff7c3d3165$export$ff0862a931001ac0 = async (options)=>{
|
|
14177
|
+
try {
|
|
14178
|
+
const result = await new Promise((resolve, reject)=>{
|
|
14179
|
+
navigator.geolocation.getCurrentPosition(resolve, reject, options);
|
|
14180
|
+
});
|
|
14181
|
+
return result;
|
|
14182
|
+
} catch (err) {
|
|
14183
|
+
console.warn('failed to get geolocation', err);
|
|
14184
|
+
}
|
|
14185
|
+
return undefined;
|
|
14186
|
+
};
|
|
14187
|
+
|
|
14188
|
+
|
|
14189
|
+
|
|
14190
|
+
|
|
14191
|
+
|
|
14192
|
+
|
|
14193
|
+
|
|
14194
|
+
|
|
14195
|
+
|
|
14196
|
+
|
|
14197
|
+
|
|
14198
|
+
|
|
14199
|
+
|
|
14200
|
+
|
|
14201
|
+
|
|
14202
|
+
const $ad0f2e3b2245bd2e$export$f56b3b5841ad32ae = ({ state: state, mode: mode, url: url })=>{
|
|
14203
|
+
const { t: t } = (0, $jQDcL$reacti18next.useTranslation)();
|
|
14204
|
+
return /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$snapcalldesignsystem.Dialog), {
|
|
14205
|
+
open: state.isOpen,
|
|
14206
|
+
onOpenChange: state.setOpen,
|
|
14207
|
+
children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)((0, $jQDcL$snapcalldesignsystem.DialogContent), {
|
|
14208
|
+
className: "h-screen max-w-full max-h-screen bg-gray-1000 border-gray-1000 md:w-screen",
|
|
14209
|
+
children: [
|
|
14210
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$snapcalldesignsystem.DialogHeader), {}),
|
|
14211
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("div", {
|
|
14212
|
+
className: "flex flex-col items-center justify-center overflow-hidden",
|
|
14213
|
+
children: [
|
|
14214
|
+
mode === 'photo' && /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("img", {
|
|
14215
|
+
src: url,
|
|
14216
|
+
className: "flex-1 object-contain rounded-[10px] max-h-[90%] max-w-[90%] mb-[9px]",
|
|
14217
|
+
alt: ""
|
|
14218
|
+
}),
|
|
14219
|
+
(mode === 'video' || mode === 'screen') && /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("video", {
|
|
14220
|
+
src: url,
|
|
14221
|
+
playsInline: true,
|
|
14222
|
+
autoPlay: true,
|
|
14223
|
+
controls: true,
|
|
14224
|
+
className: "flex-1 rounded-[10px] min-w-full max-h-[90%] max-w-[90%] pb-[9px]"
|
|
14225
|
+
}),
|
|
14226
|
+
mode === 'audio' && /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("audio", {
|
|
14227
|
+
src: url,
|
|
14228
|
+
controls: true,
|
|
14229
|
+
className: "text-center w-full sm:w-1/2"
|
|
14230
|
+
})
|
|
14231
|
+
]
|
|
14232
|
+
}),
|
|
14233
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$snapcalldesignsystem.DialogFooter), {
|
|
14234
|
+
className: "flex items-end sm:justify-center grow-0",
|
|
14235
|
+
children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$snapcalldesignsystem.Button), {
|
|
14236
|
+
size: "md",
|
|
14237
|
+
onClick: state.close,
|
|
14238
|
+
className: "w-full sm:w-1/2",
|
|
14239
|
+
children: t('notifications.close')
|
|
14240
|
+
})
|
|
14241
|
+
})
|
|
14242
|
+
]
|
|
14243
|
+
})
|
|
14244
|
+
});
|
|
14245
|
+
};
|
|
14246
|
+
|
|
14247
|
+
|
|
14248
|
+
|
|
14249
|
+
|
|
14250
|
+
|
|
14251
|
+
|
|
14252
|
+
|
|
14253
|
+
|
|
14254
|
+
|
|
14255
|
+
|
|
14256
|
+
const $c42fbc742adf8306$var$Notification = ({ title: title, description: description, icon: icon })=>{
|
|
14257
|
+
return /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("div", {
|
|
14258
|
+
className: "flex w-full gap-2 p-4 border border-amber-700 rounded-md bg-amber-100",
|
|
14259
|
+
children: [
|
|
14260
|
+
/*#__PURE__*/ (0, $jQDcL$react.cloneElement)(icon, {
|
|
14261
|
+
className: 'text-amber-700',
|
|
14262
|
+
size: 18
|
|
14263
|
+
}),
|
|
14264
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("div", {
|
|
14265
|
+
className: "flex flex-col w-full gap-1 text-sm text-gray-1000",
|
|
14266
|
+
children: [
|
|
14267
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("span", {
|
|
14268
|
+
className: "font-semibold",
|
|
14269
|
+
children: title
|
|
14270
|
+
}),
|
|
14271
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("span", {
|
|
14272
|
+
children: description
|
|
14273
|
+
})
|
|
14274
|
+
]
|
|
14275
|
+
})
|
|
14276
|
+
]
|
|
14277
|
+
});
|
|
14278
|
+
};
|
|
14279
|
+
const $c42fbc742adf8306$export$1ea93f9eface5983 = ({ duration: duration = 0, averageAudioLevel: averageAudioLevel = 0, networkIssue: networkIssue = false })=>{
|
|
14280
|
+
const { t: t } = (0, $jQDcL$reacti18next.useTranslation)();
|
|
14281
|
+
if (networkIssue) return /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)($c42fbc742adf8306$var$Notification, {
|
|
14282
|
+
title: t('networkIssue.title'),
|
|
14283
|
+
description: t('networkIssue.description'),
|
|
14284
|
+
icon: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$snapcalldesignsystemicons.WifiOffIcon), {})
|
|
14285
|
+
});
|
|
14286
|
+
if (duration < 5) return /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)($c42fbc742adf8306$var$Notification, {
|
|
14287
|
+
title: t('recorder.audioLevelNotification.shortVideo.title'),
|
|
14288
|
+
description: t('recorder.audioLevelNotification.shortVideo.description'),
|
|
14289
|
+
icon: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$snapcalldesignsystemicons.Hourglass3Icon), {
|
|
14290
|
+
duotone: true
|
|
14291
|
+
})
|
|
14292
|
+
});
|
|
14293
|
+
if (averageAudioLevel <= 0) return /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)($c42fbc742adf8306$var$Notification, {
|
|
14294
|
+
title: t('recorder.audioLevelNotification.noSound.title'),
|
|
14295
|
+
description: t('recorder.audioLevelNotification.noSound.description'),
|
|
14296
|
+
icon: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$snapcalldesignsystemicons.MicrophoneOffIcon), {
|
|
14297
|
+
duotone: true
|
|
14298
|
+
})
|
|
14299
|
+
});
|
|
14300
|
+
if (averageAudioLevel <= 1) return /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)($c42fbc742adf8306$var$Notification, {
|
|
14301
|
+
title: t('recorder.audioLevelNotification.spokenWordsWarning.title'),
|
|
14302
|
+
description: t('recorder.audioLevelNotification.spokenWordsWarning.description'),
|
|
14303
|
+
icon: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$snapcalldesignsystemicons.AlertTriangleIcon), {
|
|
14304
|
+
duotone: true
|
|
14305
|
+
})
|
|
14306
|
+
});
|
|
14307
|
+
if (averageAudioLevel <= 3) return /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)($c42fbc742adf8306$var$Notification, {
|
|
14308
|
+
title: t('recorder.audioLevelNotification.spokenWordsQuestion.title'),
|
|
14309
|
+
description: t('recorder.audioLevelNotification.spokenWordsQuestion.description'),
|
|
14310
|
+
icon: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$snapcalldesignsystemicons.InfoCircleIcon), {
|
|
14311
|
+
duotone: true
|
|
14312
|
+
})
|
|
14313
|
+
});
|
|
14314
|
+
return null;
|
|
14315
|
+
};
|
|
14316
|
+
|
|
14317
|
+
|
|
14318
|
+
|
|
14319
|
+
const $ed315b68f9410130$var$locale = window.navigator.language || 'default';
|
|
14320
|
+
const $ed315b68f9410130$var$dateFormatter = Intl.DateTimeFormat($ed315b68f9410130$var$locale, {
|
|
14321
|
+
dateStyle: 'short',
|
|
14322
|
+
timeStyle: 'short'
|
|
14323
|
+
});
|
|
14324
|
+
const $ed315b68f9410130$export$d70ec5859ea7c9bc = ({ asset: asset, canRemove: canRemove })=>{
|
|
14325
|
+
const { t: t } = (0, $jQDcL$reacti18next.useTranslation)();
|
|
14326
|
+
const { removeAsset: removeAsset } = (0, $098350f721a0bb52$export$2174f25d572f9f31)();
|
|
14327
|
+
const assetPreviewModalState = (0, $jQDcL$reactstately.useOverlayTriggerState)({});
|
|
14328
|
+
const assetDeleteModalState = (0, $jQDcL$reactstately.useOverlayTriggerState)({});
|
|
14329
|
+
const assetInfo = (0, $a8f7f98371cac732$export$35dc49ae78ec5d63)[asset.mode];
|
|
14330
|
+
return /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("div", {
|
|
14331
|
+
className: "flex flex-col gap-2",
|
|
14332
|
+
children: [
|
|
14333
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $ad0f2e3b2245bd2e$export$f56b3b5841ad32ae), {
|
|
14334
|
+
state: assetPreviewModalState,
|
|
14335
|
+
mode: asset.mode,
|
|
14336
|
+
url: asset.url
|
|
14337
|
+
}),
|
|
14338
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $4297106db9395067$export$520a0918a6dd04fd), {
|
|
14339
|
+
state: assetDeleteModalState,
|
|
14340
|
+
onDelete: ()=>removeAsset(asset.filename)
|
|
14341
|
+
}),
|
|
14342
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("div", {
|
|
14343
|
+
className: "flex items-center gap-2.5 p-2 border border-gray-200 rounded-lg",
|
|
14344
|
+
children: [
|
|
14345
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $a8f7f98371cac732$export$a87fb02b17364ba7), {
|
|
14346
|
+
mode: asset.mode,
|
|
14347
|
+
thumbnailUrl: asset.thumbnailUrl,
|
|
14348
|
+
onClick: ()=>assetPreviewModalState.open()
|
|
14349
|
+
}),
|
|
14350
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("div", {
|
|
14351
|
+
className: "flex flex-col flex-1 gap-0.5 min-w-0",
|
|
14352
|
+
children: [
|
|
14353
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("h4", {
|
|
14354
|
+
className: "text-md font-medium truncate",
|
|
14355
|
+
children: [
|
|
14356
|
+
t(`misc.${asset.mode}`),
|
|
14357
|
+
" \xb7 ",
|
|
14358
|
+
$ed315b68f9410130$var$dateFormatter.format(new Date(asset.createdAt))
|
|
14359
|
+
]
|
|
14360
|
+
}),
|
|
14361
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("span", {
|
|
14362
|
+
className: "text-sm text-gray-700 truncate",
|
|
14363
|
+
children: [
|
|
14364
|
+
assetInfo.extension,
|
|
14365
|
+
asset.duration && ` - ${(0, $30ad72ee44a52bf1$export$7f78f4f57f8852d5)(asset.duration)}`
|
|
14366
|
+
]
|
|
14367
|
+
})
|
|
14368
|
+
]
|
|
14369
|
+
}),
|
|
14370
|
+
canRemove && /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$snapcalldesignsystem.Button), {
|
|
14371
|
+
variant: "ghostRed",
|
|
14372
|
+
onClick: ()=>assetDeleteModalState.open(),
|
|
14373
|
+
icon: true,
|
|
14374
|
+
children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$snapcalldesignsystemicons.Trash3Icon), {
|
|
14375
|
+
className: "text-red-700",
|
|
14376
|
+
size: 18,
|
|
14377
|
+
duotone: true
|
|
14378
|
+
})
|
|
14379
|
+
})
|
|
14380
|
+
]
|
|
14381
|
+
}, asset.filename),
|
|
14382
|
+
asset.mode !== 'photo' && /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $c42fbc742adf8306$export$1ea93f9eface5983), {
|
|
14383
|
+
duration: asset.duration,
|
|
14384
|
+
averageAudioLevel: asset.averageAudioLevel,
|
|
14385
|
+
networkIssue: asset.networkIssue
|
|
14386
|
+
})
|
|
14387
|
+
]
|
|
14388
|
+
});
|
|
14389
|
+
};
|
|
14390
|
+
|
|
14391
|
+
|
|
13095
14392
|
|
|
13096
|
-
const $
|
|
14393
|
+
const $e399416dd32d3252$export$c01bb29adf88f117 = ({ state: state })=>{
|
|
13097
14394
|
const { t: t } = (0, $jQDcL$reacti18next.useTranslation)();
|
|
13098
|
-
|
|
13099
|
-
|
|
13100
|
-
|
|
13101
|
-
|
|
13102
|
-
|
|
13103
|
-
|
|
13104
|
-
|
|
13105
|
-
|
|
13106
|
-
|
|
13107
|
-
|
|
13108
|
-
|
|
13109
|
-
|
|
13110
|
-
|
|
13111
|
-
|
|
13112
|
-
|
|
13113
|
-
|
|
13114
|
-
|
|
13115
|
-
|
|
13116
|
-
|
|
13117
|
-
|
|
13118
|
-
|
|
13119
|
-
|
|
13120
|
-
|
|
13121
|
-
|
|
13122
|
-
|
|
13123
|
-
|
|
13124
|
-
|
|
13125
|
-
})
|
|
13126
|
-
|
|
13127
|
-
})
|
|
13128
|
-
]
|
|
13129
|
-
}) : flow.logo_url ? /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("div", {
|
|
13130
|
-
className: "h-[200px] bg-cover bg-center rounded-xl",
|
|
13131
|
-
style: {
|
|
13132
|
-
backgroundImage: `url(${flow.logo_url})`
|
|
13133
|
-
},
|
|
13134
|
-
children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("div", {
|
|
13135
|
-
className: "flex justify-center items-center w-full h-full backdrop-blur-[30px] rounded-[inherit]",
|
|
13136
|
-
children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("div", {
|
|
13137
|
-
className: "absolute rounded-2xl",
|
|
13138
|
-
children: [
|
|
13139
|
-
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("img", {
|
|
13140
|
-
className: "w-[100px] h-[100px] object-cover rounded-[inherit]",
|
|
13141
|
-
src: flow.logo_url,
|
|
13142
|
-
alt: ""
|
|
13143
|
-
}),
|
|
13144
|
-
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("div", {
|
|
13145
|
-
className: "absolute inset-0 ring-4 ring-inset ring-white/20 rounded-[inherit]"
|
|
14395
|
+
const { assets: assets, incomingAsset: incomingAsset } = (0, $098350f721a0bb52$export$2174f25d572f9f31)();
|
|
14396
|
+
const sendAssets = (0, $491ed7a769661ca2$export$ce05094b93c0f011)();
|
|
14397
|
+
const isMedium = window.matchMedia('(min-width: 768px)').matches;
|
|
14398
|
+
return /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $9277d94be7423d29$export$56d72fe406945300), {
|
|
14399
|
+
type: isMedium ? 'dialog' : 'sheet',
|
|
14400
|
+
showClose: !sendAssets.isSuccess,
|
|
14401
|
+
children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $9277d94be7423d29$export$e943710ec76a9465), {
|
|
14402
|
+
open: sendAssets.isSuccess ? true : state.isOpen,
|
|
14403
|
+
onOpenChange: sendAssets.isSuccess ? ()=>{} : state.setOpen,
|
|
14404
|
+
children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)((0, $9277d94be7423d29$export$4cf67c05c32f37ce), {
|
|
14405
|
+
className: "w-full max-h-[90vh] flex flex-col",
|
|
14406
|
+
children: [
|
|
14407
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)((0, $9277d94be7423d29$export$ae085f72dad73e20), {
|
|
14408
|
+
children: [
|
|
14409
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $9277d94be7423d29$export$5e9fc1357420b7eb), {
|
|
14410
|
+
className: "text-left flex items-center gap-2",
|
|
14411
|
+
children: sendAssets.isSuccess ? /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)((0, $jQDcL$reactjsxruntime.Fragment), {
|
|
14412
|
+
children: [
|
|
14413
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$snapcalldesignsystemicons.CheckCircleIcon), {
|
|
14414
|
+
size: 18,
|
|
14415
|
+
className: "text-green-700",
|
|
14416
|
+
duotone: true
|
|
14417
|
+
}),
|
|
14418
|
+
t('recorder.mediaSent', {
|
|
14419
|
+
count: assets.length
|
|
14420
|
+
})
|
|
14421
|
+
]
|
|
14422
|
+
}) : t('recorder.mediaCount', {
|
|
14423
|
+
count: assets.length
|
|
13146
14424
|
})
|
|
13147
|
-
|
|
13148
|
-
|
|
13149
|
-
|
|
13150
|
-
}) : /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$reactjsxruntime.Fragment), {}),
|
|
13151
|
-
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$snapcalldesignsystem.AlertDialogHeader), {
|
|
13152
|
-
children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$snapcalldesignsystem.AlertDialogTitle), {
|
|
13153
|
-
children: flow.title
|
|
13154
|
-
})
|
|
13155
|
-
}),
|
|
13156
|
-
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("p", {
|
|
13157
|
-
className: "text-sm text-gray-700 whitespace-pre-line",
|
|
13158
|
-
children: flow.text
|
|
13159
|
-
}),
|
|
13160
|
-
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$snapcalldesignsystem.AlertDialogFooter), {
|
|
13161
|
-
children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$snapcalldesignsystem.Button), {
|
|
13162
|
-
size: "sm",
|
|
13163
|
-
className: "w-full",
|
|
13164
|
-
onClick: state.close,
|
|
13165
|
-
children: t('notifications.close')
|
|
13166
|
-
})
|
|
13167
|
-
}),
|
|
13168
|
-
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("p", {
|
|
13169
|
-
className: "text-xs text-[#707070] text-center",
|
|
13170
|
-
children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$reacti18next.Trans), {
|
|
13171
|
-
i18nKey: "recorder.instructions.privacyPolicy",
|
|
13172
|
-
components: {
|
|
13173
|
-
bold: // eslint-disable-next-line jsx-a11y/anchor-has-content
|
|
13174
|
-
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("a", {
|
|
13175
|
-
className: "font-semibold text-gray-1000 underline",
|
|
13176
|
-
href: "https://www.snapcall.io/privacy-policy",
|
|
13177
|
-
target: "_blank",
|
|
13178
|
-
rel: "noreferrer"
|
|
14425
|
+
}),
|
|
14426
|
+
sendAssets.isSuccess && /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $9277d94be7423d29$export$51c201eb88940e0f), {
|
|
14427
|
+
children: t('recorder.clipSubmissionDescription')
|
|
13179
14428
|
})
|
|
13180
|
-
|
|
14429
|
+
]
|
|
14430
|
+
}),
|
|
14431
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("div", {
|
|
14432
|
+
className: "flex flex-col gap-4 overflow-y-auto",
|
|
14433
|
+
children: [
|
|
14434
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("div", {
|
|
14435
|
+
className: "flex flex-col min-w-0 gap-2 overflow-y-auto",
|
|
14436
|
+
children: [
|
|
14437
|
+
assets.map((asset)=>/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $ed315b68f9410130$export$d70ec5859ea7c9bc), {
|
|
14438
|
+
asset: asset,
|
|
14439
|
+
canRemove: !sendAssets.isSuccess
|
|
14440
|
+
}, asset.filename)),
|
|
14441
|
+
incomingAsset && /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("div", {
|
|
14442
|
+
className: "flex items-center justify-center p-2 border border-gray-200 rounded-lg",
|
|
14443
|
+
children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$snapcalldesignsystemicons.SpinnerIcon), {
|
|
14444
|
+
size: 24,
|
|
14445
|
+
className: "text-blue-700 animate-spin"
|
|
14446
|
+
})
|
|
14447
|
+
})
|
|
14448
|
+
]
|
|
14449
|
+
}),
|
|
14450
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)((0, $jQDcL$snapcalldesignsystem.Button), {
|
|
14451
|
+
className: "mt-1",
|
|
14452
|
+
variant: "secondary",
|
|
14453
|
+
onClick: sendAssets.isSuccess ? ()=>window.location.reload() : state.close,
|
|
14454
|
+
children: [
|
|
14455
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$snapcalldesignsystemicons.PlusCircleIcon), {
|
|
14456
|
+
size: 18
|
|
14457
|
+
}),
|
|
14458
|
+
" ",
|
|
14459
|
+
t('recorder.addNewClip')
|
|
14460
|
+
]
|
|
14461
|
+
})
|
|
14462
|
+
]
|
|
14463
|
+
}),
|
|
14464
|
+
!sendAssets.isSuccess && /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)((0, $jQDcL$snapcalldesignsystem.Button), {
|
|
14465
|
+
className: "w-full",
|
|
14466
|
+
onClick: ()=>{
|
|
14467
|
+
sendAssets.mutate(assets);
|
|
14468
|
+
},
|
|
14469
|
+
isLoading: sendAssets.isPending,
|
|
14470
|
+
disabled: assets.length === 0,
|
|
14471
|
+
children: [
|
|
14472
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$snapcalldesignsystemicons.Send3Icon), {
|
|
14473
|
+
size: 18,
|
|
14474
|
+
className: "text-white"
|
|
14475
|
+
}),
|
|
14476
|
+
t('recorder.send')
|
|
14477
|
+
]
|
|
13181
14478
|
})
|
|
13182
|
-
|
|
13183
|
-
|
|
14479
|
+
]
|
|
14480
|
+
})
|
|
13184
14481
|
})
|
|
13185
14482
|
});
|
|
13186
14483
|
};
|
|
13187
14484
|
|
|
13188
14485
|
|
|
13189
|
-
|
|
13190
|
-
|
|
13191
14486
|
const $3753c01d669182c5$var$browser = (0, ($parcel$interopDefault($jQDcL$bowser))).parse(window.navigator.userAgent);
|
|
13192
14487
|
const $3753c01d669182c5$export$336a011955157f9a = ()=>{
|
|
13193
14488
|
const { clientInitResult: clientInitResult, recorderOptions: recorderOptions } = (0, $jQDcL$react.useContext)((0, $8b39f32976a7698a$export$2e2bcd8739ae039));
|
|
13194
14489
|
const [mode, setMode] = (0, $jQDcL$react.useState)(recorderOptions?.defaultMode || 'photo');
|
|
13195
14490
|
const [assets, setAssets] = (0, $jQDcL$react.useState)([]);
|
|
14491
|
+
const [showCountdown, setShowCountdown] = (0, $jQDcL$react.useState)(false);
|
|
13196
14492
|
const [isRecording, setIsRecording] = (0, $jQDcL$react.useState)(false);
|
|
14493
|
+
const [isStoppingRecording, setIsStoppingRecording] = (0, $jQDcL$react.useState)(false);
|
|
14494
|
+
const [networkIssue, setNetworkIssue] = (0, $jQDcL$react.useState)(false);
|
|
13197
14495
|
const [incomingAsset, setIncomingAsset] = (0, $jQDcL$react.useState)(null);
|
|
13198
14496
|
const videoRef = (0, $jQDcL$react.useRef)(null);
|
|
13199
|
-
const
|
|
14497
|
+
const isVideoBotEnabled = Boolean(clientInitResult.flow?.steps?.[0].config?.video_bot);
|
|
14498
|
+
const videoBotState = (0, $jQDcL$reactstately.useOverlayTriggerState)({
|
|
14499
|
+
defaultOpen: isVideoBotEnabled
|
|
14500
|
+
});
|
|
13200
14501
|
const flowV0ModalState = (0, $jQDcL$reactstately.useOverlayTriggerState)({
|
|
13201
14502
|
defaultOpen: Boolean(clientInitResult.flowV0 && !clientInitResult.flow)
|
|
13202
14503
|
});
|
|
@@ -13210,14 +14511,26 @@ const $3753c01d669182c5$export$336a011955157f9a = ()=>{
|
|
|
13210
14511
|
const { company: company } = (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).getState();
|
|
13211
14512
|
const devicesState = (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).getDevicesState();
|
|
13212
14513
|
const hasVideo = devicesState.camera.enabled || devicesState.screenshare.enabled;
|
|
14514
|
+
const geolocation = (0, $jQDcL$tanstackreactquery.useQuery)({
|
|
14515
|
+
queryKey: [
|
|
14516
|
+
'geolocation'
|
|
14517
|
+
],
|
|
14518
|
+
queryFn: ()=>(0, $41ba1aff7c3d3165$export$ff0862a931001ac0)(),
|
|
14519
|
+
enabled: recorderOptions?.geolocation === true,
|
|
14520
|
+
staleTime: Infinity
|
|
14521
|
+
});
|
|
13213
14522
|
const addAsset = (0, $jQDcL$react.useCallback)((asset)=>{
|
|
13214
|
-
|
|
14523
|
+
const newAsset = asset;
|
|
14524
|
+
newAsset.geolocation = geolocation.data;
|
|
14525
|
+
(0, $8a7a24ac08dbc187$export$cfdbe7fcc2578443)(newAsset);
|
|
13215
14526
|
setAssets((currentAssets)=>[
|
|
13216
14527
|
...currentAssets,
|
|
13217
|
-
|
|
14528
|
+
newAsset
|
|
13218
14529
|
]);
|
|
13219
14530
|
setIncomingAsset(null);
|
|
13220
|
-
}, [
|
|
14531
|
+
}, [
|
|
14532
|
+
geolocation.data
|
|
14533
|
+
]);
|
|
13221
14534
|
const storedAssets = (0, $8a7a24ac08dbc187$export$931d641a2a152cf)();
|
|
13222
14535
|
(0, $jQDcL$react.useEffect)(()=>{
|
|
13223
14536
|
storedAssets.data?.forEach((storedAsset)=>{
|
|
@@ -13235,7 +14548,7 @@ const $3753c01d669182c5$export$336a011955157f9a = ()=>{
|
|
|
13235
14548
|
try {
|
|
13236
14549
|
(0, $8a7a24ac08dbc187$export$df987b50509121ea)(filename);
|
|
13237
14550
|
await (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).deleteAsset(filename);
|
|
13238
|
-
if (assets.length <= 1 && !incomingAsset)
|
|
14551
|
+
if (!isVideoBotEnabled && assets.length <= 1 && !incomingAsset) videoBotState.close();
|
|
13239
14552
|
setAssets((currentAssets)=>currentAssets.filter((asset)=>asset.filename !== filename));
|
|
13240
14553
|
} catch (error) {
|
|
13241
14554
|
reportError({
|
|
@@ -13246,6 +14559,7 @@ const $3753c01d669182c5$export$336a011955157f9a = ()=>{
|
|
|
13246
14559
|
};
|
|
13247
14560
|
(0, $jQDcL$react.useEffect)(()=>{
|
|
13248
14561
|
const onRecordStopped = async (event)=>{
|
|
14562
|
+
setIsStoppingRecording(false);
|
|
13249
14563
|
setIsRecording(false);
|
|
13250
14564
|
const { filename: filename, durationMs: durationMs, sizeInBytes: sizeInBytes, success: success } = event.detail;
|
|
13251
14565
|
const { url: url } = await (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).readAsset(filename);
|
|
@@ -13266,9 +14580,11 @@ const $3753c01d669182c5$export$336a011955157f9a = ()=>{
|
|
|
13266
14580
|
thumbnailUrl: incomingAsset.thumbnailUrl,
|
|
13267
14581
|
duration: durationSec,
|
|
13268
14582
|
averageAudioLevel: averageAudioLevel || 0,
|
|
13269
|
-
createdAt: incomingAsset.createdAt
|
|
14583
|
+
createdAt: incomingAsset.createdAt,
|
|
14584
|
+
networkIssue: networkIssue
|
|
13270
14585
|
});
|
|
13271
14586
|
}
|
|
14587
|
+
setNetworkIssue(false);
|
|
13272
14588
|
};
|
|
13273
14589
|
(0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).addEventListener('recordStopped', onRecordStopped);
|
|
13274
14590
|
return ()=>{
|
|
@@ -13277,11 +14593,13 @@ const $3753c01d669182c5$export$336a011955157f9a = ()=>{
|
|
|
13277
14593
|
}, [
|
|
13278
14594
|
addAsset,
|
|
13279
14595
|
reportError,
|
|
13280
|
-
incomingAsset
|
|
14596
|
+
incomingAsset,
|
|
14597
|
+
setNetworkIssue,
|
|
14598
|
+
networkIssue
|
|
13281
14599
|
]);
|
|
13282
14600
|
(0, $jQDcL$react.useEffect)(()=>{
|
|
13283
14601
|
const onScreenshareDisabled = ()=>{
|
|
13284
|
-
if (isRecording)
|
|
14602
|
+
if (isRecording) videoBotState.open();
|
|
13285
14603
|
};
|
|
13286
14604
|
(0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).addEventListener('screenshareDisabled', onScreenshareDisabled);
|
|
13287
14605
|
return ()=>{
|
|
@@ -13289,7 +14607,7 @@ const $3753c01d669182c5$export$336a011955157f9a = ()=>{
|
|
|
13289
14607
|
};
|
|
13290
14608
|
}, [
|
|
13291
14609
|
isRecording,
|
|
13292
|
-
|
|
14610
|
+
videoBotState
|
|
13293
14611
|
]);
|
|
13294
14612
|
(0, $jQDcL$react.useEffect)(()=>{
|
|
13295
14613
|
const screenshareState = (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).getDevicesState().screenshare;
|
|
@@ -13304,21 +14622,28 @@ const $3753c01d669182c5$export$336a011955157f9a = ()=>{
|
|
|
13304
14622
|
return /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("div", {
|
|
13305
14623
|
className: "antialiased inter dark-theme h-full",
|
|
13306
14624
|
children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("div", {
|
|
13307
|
-
className: "flex flex-col justify-between w-full h-full gap-6 p-6 bg-gray-25
|
|
14625
|
+
className: "flex flex-col justify-between w-full h-full gap-6 p-6 bg-gray-25 max-sm:gap-4 max-sm:p-4",
|
|
13308
14626
|
children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)((0, $098350f721a0bb52$export$784df5c7a561530).Provider, {
|
|
13309
14627
|
value: {
|
|
14628
|
+
isVideoBotEnabled: isVideoBotEnabled,
|
|
13310
14629
|
mode: mode,
|
|
13311
14630
|
setMode: setMode,
|
|
13312
14631
|
hasVideo: hasVideo,
|
|
14632
|
+
showCountdown: showCountdown,
|
|
14633
|
+
setShowCountdown: setShowCountdown,
|
|
13313
14634
|
isRecording: isRecording,
|
|
13314
14635
|
setIsRecording: setIsRecording,
|
|
14636
|
+
isStoppingRecording: isStoppingRecording,
|
|
14637
|
+
setIsStoppingRecording: setIsStoppingRecording,
|
|
13315
14638
|
videoElementRef: videoRef,
|
|
13316
14639
|
assets: assets,
|
|
13317
14640
|
addAsset: addAsset,
|
|
13318
14641
|
removeAsset: removeAsset,
|
|
13319
14642
|
incomingAsset: incomingAsset,
|
|
13320
14643
|
setIncomingAsset: setIncomingAsset,
|
|
13321
|
-
|
|
14644
|
+
videoBotState: videoBotState,
|
|
14645
|
+
networkIssue: networkIssue,
|
|
14646
|
+
setNetworkIssue: setNetworkIssue,
|
|
13322
14647
|
openQRCodeModal: switchToMobileModalState.open
|
|
13323
14648
|
},
|
|
13324
14649
|
children: [
|
|
@@ -13334,10 +14659,12 @@ const $3753c01d669182c5$export$336a011955157f9a = ()=>{
|
|
|
13334
14659
|
state: flowV0ModalState,
|
|
13335
14660
|
flow: clientInitResult.flowV0
|
|
13336
14661
|
}),
|
|
13337
|
-
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $e399416dd32d3252$export$c01bb29adf88f117), {
|
|
13338
|
-
state:
|
|
14662
|
+
!isVideoBotEnabled && /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $e399416dd32d3252$export$c01bb29adf88f117), {
|
|
14663
|
+
state: videoBotState
|
|
14664
|
+
}),
|
|
14665
|
+
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $48ac80173d63a751$export$aa00db7a33d4c484), {
|
|
14666
|
+
isVideoBotEnabled: isVideoBotEnabled
|
|
13339
14667
|
}),
|
|
13340
|
-
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $48ac80173d63a751$export$aa00db7a33d4c484), {}),
|
|
13341
14668
|
/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $a33432a0233f49a9$export$ca9d588768f0d0da), {
|
|
13342
14669
|
children: mode === 'photo' || mode === 'video' ? /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("div", {
|
|
13343
14670
|
className: "absolute inset-0",
|
|
@@ -14414,6 +15741,7 @@ const $ee8cb448c2c74888$var$StreamUI = ({ options: baseOptions })=>{
|
|
|
14414
15741
|
if (flowStep) {
|
|
14415
15742
|
const flowStepMode = flowStep.types.map((type)=>type === 'image' ? 'photo' : type);
|
|
14416
15743
|
setRecorderOptions({
|
|
15744
|
+
geolocation: flowStep.config?.geolocation,
|
|
14417
15745
|
enabledModes: flowStepMode,
|
|
14418
15746
|
enabled: true,
|
|
14419
15747
|
defaultMode: (flowStep.default_type === 'image' ? 'photo' : flowStep.default_type) || flowStepMode[0],
|
|
@@ -14671,7 +15999,7 @@ var $ee8cb448c2c74888$export$2e2bcd8739ae039 = $ee8cb448c2c74888$var$StreamUI;
|
|
|
14671
15999
|
|
|
14672
16000
|
|
|
14673
16001
|
var $54541b0286afc2de$exports = {};
|
|
14674
|
-
$54541b0286afc2de$exports = "*, :before, :after, ::backdrop {\n --tw-border-spacing-x: 0;\n --tw-border-spacing-y: 0;\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-rotate: 0;\n --tw-skew-x: 0;\n --tw-skew-y: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-pan-x: ;\n --tw-pan-y: ;\n --tw-pinch-zoom: ;\n --tw-scroll-snap-strictness: proximity;\n --tw-gradient-from-position: ;\n --tw-gradient-via-position: ;\n --tw-gradient-to-position: ;\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: #93c5fd80;\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 --tw-contain-size: ;\n --tw-contain-layout: ;\n --tw-contain-paint: ;\n --tw-contain-style: ;\n}\n\n.container {\n width: 100%;\n}\n\n@media (width >= 640px) {\n .container {\n max-width: 640px;\n }\n}\n\n@media (width >= 768px) {\n .container {\n max-width: 768px;\n }\n}\n\n@media (width >= 1024px) {\n .container {\n max-width: 1024px;\n }\n}\n\n@media (width >= 1280px) {\n .container {\n max-width: 1280px;\n }\n}\n\n@media (width >= 1536px) {\n .container {\n max-width: 1536px;\n }\n}\n\n.sr-only {\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border-width: 0;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n position: absolute;\n overflow: hidden;\n}\n\n.pointer-events-none {\n pointer-events: none;\n}\n\n.pointer-events-auto {\n pointer-events: auto;\n}\n\n.visible {\n visibility: visible;\n}\n\n.invisible {\n visibility: hidden;\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.inset-x-0 {\n left: 0;\n right: 0;\n}\n\n.inset-y-0 {\n top: 0;\n bottom: 0;\n}\n\n.-bottom-12 {\n bottom: -3rem;\n}\n\n.-left-12 {\n left: -3rem;\n}\n\n.-right-12 {\n right: -3rem;\n}\n\n.-top-12 {\n top: -3rem;\n}\n\n.bottom-0 {\n bottom: 0;\n}\n\n.bottom-2 {\n bottom: .5rem;\n}\n\n.left-0 {\n left: 0;\n}\n\n.left-1 {\n left: .25rem;\n}\n\n.left-1\\/2 {\n left: 50%;\n}\n\n.left-2 {\n left: .5rem;\n}\n\n.left-\\[50\\%\\] {\n left: 50%;\n}\n\n.right-0 {\n right: 0;\n}\n\n.right-1 {\n right: .25rem;\n}\n\n.right-2 {\n right: .5rem;\n}\n\n.right-6 {\n right: 1.5rem;\n}\n\n.top-0 {\n top: 0;\n}\n\n.top-1\\/2 {\n top: 50%;\n}\n\n.top-2 {\n top: .5rem;\n}\n\n.top-6 {\n top: 1.5rem;\n}\n\n.top-8 {\n top: 2rem;\n}\n\n.top-\\[50\\%\\] {\n top: 50%;\n}\n\n.top-auto {\n top: auto;\n}\n\n.z-20 {\n z-index: 20;\n}\n\n.z-40 {\n z-index: 40;\n}\n\n.z-50 {\n z-index: 50;\n}\n\n.z-\\[100\\] {\n z-index: 100;\n}\n\n.z-\\[150\\] {\n z-index: 150;\n}\n\n.-mx-1 {\n margin-left: -.25rem;\n margin-right: -.25rem;\n}\n\n.mx-1 {\n margin-left: .25rem;\n margin-right: .25rem;\n}\n\n.mx-auto {\n margin-left: auto;\n margin-right: auto;\n}\n\n.my-1 {\n margin-top: .25rem;\n margin-bottom: .25rem;\n}\n\n.-ml-4 {\n margin-left: -1rem;\n}\n\n.-mr-2 {\n margin-right: -.5rem;\n}\n\n.-mt-4 {\n margin-top: -1rem;\n}\n\n.mb-2 {\n margin-bottom: .5rem;\n}\n\n.mb-4 {\n margin-bottom: 1rem;\n}\n\n.mb-6 {\n margin-bottom: 1.5rem;\n}\n\n.mb-\\[9px\\] {\n margin-bottom: 9px;\n}\n\n.ml-1 {\n margin-left: .25rem;\n}\n\n.mr-2 {\n margin-right: .5rem;\n}\n\n.mr-2\\.5 {\n margin-right: .625rem;\n}\n\n.mr-9 {\n margin-right: 2.25rem;\n}\n\n.mt-1 {\n margin-top: .25rem;\n}\n\n.mt-2 {\n margin-top: .5rem;\n}\n\n.box-border {\n box-sizing: border-box;\n}\n\n.block {\n display: block;\n}\n\n.inline-block {\n display: inline-block;\n}\n\n.inline {\n display: inline;\n}\n\n.flex {\n display: flex;\n}\n\n.inline-flex {\n display: inline-flex;\n}\n\n.table {\n display: table;\n}\n\n.grid {\n display: grid;\n}\n\n.hidden {\n display: none;\n}\n\n.aspect-square {\n aspect-ratio: 1;\n}\n\n.h-1\\/3 {\n height: 33.3333%;\n}\n\n.h-10 {\n height: 2.5rem;\n}\n\n.h-12 {\n height: 3rem;\n}\n\n.h-14 {\n height: 3.5rem;\n}\n\n.h-16 {\n height: 4rem;\n}\n\n.h-2 {\n height: .5rem;\n}\n\n.h-3 {\n height: .75rem;\n}\n\n.h-4 {\n height: 1rem;\n}\n\n.h-6 {\n height: 1.5rem;\n}\n\n.h-8 {\n height: 2rem;\n}\n\n.h-9 {\n height: 2.25rem;\n}\n\n.h-\\[100px\\] {\n height: 100px;\n}\n\n.h-\\[16px\\] {\n height: 16px;\n}\n\n.h-\\[1px\\] {\n height: 1px;\n}\n\n.h-\\[200px\\] {\n height: 200px;\n}\n\n.h-\\[24px\\] {\n height: 24px;\n}\n\n.h-\\[36px\\] {\n height: 36px;\n}\n\n.h-\\[400px\\] {\n height: 400px;\n}\n\n.h-\\[45px\\] {\n height: 45px;\n}\n\n.h-\\[54px\\] {\n height: 54px;\n}\n\n.h-\\[70px\\] {\n height: 70px;\n}\n\n.h-\\[72px\\] {\n height: 72px;\n}\n\n.h-\\[8px\\] {\n height: 8px;\n}\n\n.h-\\[var\\(--radix-select-trigger-height\\)\\] {\n height: var(--radix-select-trigger-height);\n}\n\n.h-full {\n height: 100%;\n}\n\n.h-px {\n height: 1px;\n}\n\n.h-screen {\n height: 100vh;\n}\n\n.max-h-\\[180px\\] {\n max-height: 180px;\n}\n\n.max-h-\\[300px\\] {\n max-height: 300px;\n}\n\n.max-h-\\[70px\\] {\n max-height: 70px;\n}\n\n.max-h-\\[90\\%\\] {\n max-height: 90%;\n}\n\n.max-h-\\[90vh\\] {\n max-height: 90vh;\n}\n\n.max-h-full {\n max-height: 100%;\n}\n\n.max-h-screen {\n max-height: 100vh;\n}\n\n.min-h-0 {\n min-height: 0;\n}\n\n.min-h-9 {\n min-height: 2.25rem;\n}\n\n.min-h-\\[20px\\] {\n min-height: 20px;\n}\n\n.min-h-\\[80px\\] {\n min-height: 80px;\n}\n\n.w-1\\/3 {\n width: 33.3333%;\n}\n\n.w-10 {\n width: 2.5rem;\n}\n\n.w-12 {\n width: 3rem;\n}\n\n.w-16 {\n width: 4rem;\n}\n\n.w-2 {\n width: .5rem;\n}\n\n.w-3 {\n width: .75rem;\n}\n\n.w-3\\/4 {\n width: 75%;\n}\n\n.w-4 {\n width: 1rem;\n}\n\n.w-6 {\n width: 1.5rem;\n}\n\n.w-72 {\n width: 18rem;\n}\n\n.w-8 {\n width: 2rem;\n}\n\n.w-\\[100px\\] {\n width: 100px;\n}\n\n.w-\\[16px\\] {\n width: 16px;\n}\n\n.w-\\[24px\\] {\n width: 24px;\n}\n\n.w-\\[334px\\] {\n width: 334px;\n}\n\n.w-\\[36px\\] {\n width: 36px;\n}\n\n.w-\\[400px\\] {\n width: 400px;\n}\n\n.w-\\[42px\\] {\n width: 42px;\n}\n\n.w-\\[45px\\] {\n width: 45px;\n}\n\n.w-\\[54px\\] {\n width: 54px;\n}\n\n.w-\\[70px\\] {\n width: 70px;\n}\n\n.w-\\[72px\\] {\n width: 72px;\n}\n\n.w-\\[8px\\] {\n width: 8px;\n}\n\n.w-auto {\n width: auto;\n}\n\n.w-fit {\n width: fit-content;\n}\n\n.w-full {\n width: 100%;\n}\n\n.w-max {\n width: max-content;\n}\n\n.min-w-0 {\n min-width: 0;\n}\n\n.min-w-\\[144px\\] {\n min-width: 144px;\n}\n\n.min-w-\\[var\\(--radix-select-trigger-width\\)\\] {\n min-width: var(--radix-select-trigger-width);\n}\n\n.min-w-full {\n min-width: 100%;\n}\n\n.max-w-\\[315px\\] {\n max-width: 315px;\n}\n\n.max-w-\\[400px\\] {\n max-width: 400px;\n}\n\n.max-w-\\[500px\\] {\n max-width: 500px;\n}\n\n.max-w-\\[70px\\] {\n max-width: 70px;\n}\n\n.max-w-\\[800px\\] {\n max-width: 800px;\n}\n\n.max-w-\\[90\\%\\] {\n max-width: 90%;\n}\n\n.max-w-\\[90vw\\] {\n max-width: 90vw;\n}\n\n.max-w-full {\n max-width: 100%;\n}\n\n.flex-1 {\n flex: 1;\n}\n\n.flex-shrink-0, .shrink-0 {\n flex-shrink: 0;\n}\n\n.flex-grow, .grow {\n flex-grow: 1;\n}\n\n.grow-0 {\n flex-grow: 0;\n}\n\n.basis-full {\n flex-basis: 100%;\n}\n\n.caption-bottom {\n caption-side: bottom;\n}\n\n.border-collapse {\n border-collapse: collapse;\n}\n\n.-translate-x-1\\/2 {\n --tw-translate-x: -50%;\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-1\\/2 {\n --tw-translate-y: -50%;\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-x-0 {\n --tw-translate-x: 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-x-0\\.5 {\n --tw-translate-x: .125rem;\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-x-\\[-50\\%\\] {\n --tw-translate-x: -50%;\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-\\[-50\\%\\] {\n --tw-translate-y: -50%;\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\\], .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@keyframes flash {\n 0% {\n opacity: .9;\n }\n\n 100% {\n opacity: 0;\n }\n}\n\n.animate-flash {\n animation: .8s forwards flash;\n}\n\n@keyframes pulse {\n 50% {\n opacity: .5;\n }\n}\n\n.animate-pulse {\n animation: 2s cubic-bezier(.4, 0, .6, 1) infinite pulse;\n}\n\n@keyframes spin {\n to {\n transform: rotate(360deg);\n }\n}\n\n.animate-spin {\n animation: 1s linear infinite spin;\n}\n\n.cursor-default {\n cursor: default;\n}\n\n.cursor-not-allowed {\n cursor: not-allowed;\n}\n\n.cursor-pointer {\n cursor: pointer;\n}\n\n.select-none {\n -webkit-user-select: none;\n user-select: none;\n}\n\n.appearance-none {\n appearance: none;\n}\n\n.grid-cols-2 {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n}\n\n.flex-row {\n flex-direction: row;\n}\n\n.flex-row-reverse {\n flex-direction: row-reverse;\n}\n\n.flex-col {\n flex-direction: column;\n}\n\n.flex-col-reverse {\n flex-direction: column-reverse;\n}\n\n.flex-wrap {\n flex-wrap: wrap;\n}\n\n.items-start {\n align-items: flex-start;\n}\n\n.items-end {\n align-items: flex-end;\n}\n\n.items-center {\n align-items: center;\n}\n\n.items-stretch {\n align-items: stretch;\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-0 {\n gap: 0;\n}\n\n.gap-0\\.5 {\n gap: .125rem;\n}\n\n.gap-1 {\n gap: .25rem;\n}\n\n.gap-1\\.5 {\n gap: .375rem;\n}\n\n.gap-12 {\n gap: 3rem;\n}\n\n.gap-2 {\n gap: .5rem;\n}\n\n.gap-2\\.5 {\n gap: .625rem;\n}\n\n.gap-3 {\n gap: .75rem;\n}\n\n.gap-4 {\n gap: 1rem;\n}\n\n.gap-6 {\n gap: 1.5rem;\n}\n\n.gap-8 {\n gap: 2rem;\n}\n\n.gap-\\[inherit\\] {\n gap: inherit;\n}\n\n.space-x-1 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-x-reverse: 0;\n margin-right: calc(.25rem * var(--tw-space-x-reverse));\n margin-left: calc(.25rem * calc(1 - var(--tw-space-x-reverse)));\n}\n\n.space-y-1 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(.25rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(.25rem * var(--tw-space-y-reverse));\n}\n\n.space-y-1\\.5 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(.375rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(.375rem * var(--tw-space-y-reverse));\n}\n\n.space-y-4 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(1rem * var(--tw-space-y-reverse));\n}\n\n.space-y-5 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(1.25rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(1.25rem * var(--tw-space-y-reverse));\n}\n\n.space-y-6 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(1.5rem * var(--tw-space-y-reverse));\n}\n\n.divide-x > :not([hidden]) ~ :not([hidden]) {\n --tw-divide-x-reverse: 0;\n border-right-width: calc(1px * var(--tw-divide-x-reverse));\n border-left-width: calc(1px * calc(1 - var(--tw-divide-x-reverse)));\n}\n\n.divide-y > :not([hidden]) ~ :not([hidden]) {\n --tw-divide-y-reverse: 0;\n border-top-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));\n border-bottom-width: calc(1px * var(--tw-divide-y-reverse));\n}\n\n.divide-gray-200 > :not([hidden]) ~ :not([hidden]) {\n --tw-divide-opacity: 1;\n border-color: rgb(var(--color-gray-200) / var(--tw-divide-opacity));\n}\n\n.self-start {\n align-self: flex-start;\n}\n\n.self-end {\n align-self: flex-end;\n}\n\n.self-center {\n align-self: center;\n}\n\n.overflow-auto {\n overflow: auto;\n}\n\n.overflow-hidden {\n overflow: hidden;\n}\n\n.overflow-visible {\n overflow: visible;\n}\n\n.overflow-y-auto {\n overflow-y: auto;\n}\n\n.overflow-x-hidden {\n overflow-x: hidden;\n}\n\n.truncate {\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n}\n\n.whitespace-nowrap {\n white-space: nowrap;\n}\n\n.whitespace-pre-line {\n white-space: pre-line;\n}\n\n.rounded {\n border-radius: .25rem;\n}\n\n.rounded-2xl {\n border-radius: 1rem;\n}\n\n.rounded-3xl {\n border-radius: 1.5rem;\n}\n\n.rounded-\\[10px\\] {\n border-radius: 10px;\n}\n\n.rounded-\\[3px\\] {\n border-radius: 3px;\n}\n\n.rounded-\\[4px\\] {\n border-radius: 4px;\n}\n\n.rounded-\\[6px\\] {\n border-radius: 6px;\n}\n\n.rounded-\\[8px\\] {\n border-radius: 8px;\n}\n\n.rounded-\\[inherit\\] {\n border-radius: inherit;\n}\n\n.rounded-full {\n border-radius: 9999px;\n}\n\n.rounded-lg {\n border-radius: .5rem;\n}\n\n.rounded-md {\n border-radius: .375rem;\n}\n\n.rounded-xl {\n border-radius: .75rem;\n}\n\n.rounded-b-3xl {\n border-bottom-right-radius: 1.5rem;\n border-bottom-left-radius: 1.5rem;\n}\n\n.rounded-t-3xl {\n border-top-left-radius: 1.5rem;\n border-top-right-radius: 1.5rem;\n}\n\n.border {\n border-width: 1px;\n}\n\n.border-2 {\n border-width: 2px;\n}\n\n.border-b {\n border-bottom-width: 1px;\n}\n\n.border-l {\n border-left-width: 1px;\n}\n\n.border-r {\n border-right-width: 1px;\n}\n\n.border-t {\n border-top-width: 1px;\n}\n\n.border-amber-700 {\n --tw-border-opacity: 1;\n border-color: rgb(var(--color-amber-700) / var(--tw-border-opacity));\n}\n\n.border-black\\/10 {\n border-color: rgb(var(--color-black) / .1);\n}\n\n.border-blue-700 {\n --tw-border-opacity: 1;\n border-color: rgb(var(--color-blue-700) / var(--tw-border-opacity));\n}\n\n.border-gray-100 {\n --tw-border-opacity: 1;\n border-color: rgb(var(--color-gray-100) / var(--tw-border-opacity));\n}\n\n.border-gray-1000 {\n --tw-border-opacity: 1;\n border-color: rgb(var(--color-gray-1000) / var(--tw-border-opacity));\n}\n\n.border-gray-200 {\n --tw-border-opacity: 1;\n border-color: rgb(var(--color-gray-200) / var(--tw-border-opacity));\n}\n\n.border-gray-400 {\n --tw-border-opacity: 1;\n border-color: rgb(var(--color-gray-400) / var(--tw-border-opacity));\n}\n\n.border-gray-600 {\n --tw-border-opacity: 1;\n border-color: rgb(var(--color-gray-600) / var(--tw-border-opacity));\n}\n\n.border-red-700 {\n --tw-border-opacity: 1;\n border-color: rgb(var(--color-red-700) / var(--tw-border-opacity));\n}\n\n.border-white\\/10 {\n border-color: rgb(var(--color-white) / .1);\n}\n\n.bg-\\[\\#292929\\] {\n --tw-bg-opacity: 1;\n background-color: rgb(41 41 41 / var(--tw-bg-opacity));\n}\n\n.bg-amber-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-amber-100) / var(--tw-bg-opacity));\n}\n\n.bg-amber-200 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-amber-200) / var(--tw-bg-opacity));\n}\n\n.bg-amber-700 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-amber-700) / var(--tw-bg-opacity));\n}\n\n.bg-black {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-black) / var(--tw-bg-opacity));\n}\n\n.bg-black\\/25 {\n background-color: rgb(var(--color-black) / .25);\n}\n\n.bg-black\\/80 {\n background-color: rgb(var(--color-black) / .8);\n}\n\n.bg-blue-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-blue-100) / var(--tw-bg-opacity));\n}\n\n.bg-blue-300 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-blue-300) / var(--tw-bg-opacity));\n}\n\n.bg-blue-700 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-blue-700) / var(--tw-bg-opacity));\n}\n\n.bg-bronze-300 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-bronze-300) / var(--tw-bg-opacity));\n}\n\n.bg-brown-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-brown-100) / var(--tw-bg-opacity));\n}\n\n.bg-brown-300 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-brown-300) / var(--tw-bg-opacity));\n}\n\n.bg-brown-700 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-brown-700) / var(--tw-bg-opacity));\n}\n\n.bg-crimson-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-crimson-100) / var(--tw-bg-opacity));\n}\n\n.bg-crimson-300 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-crimson-300) / var(--tw-bg-opacity));\n}\n\n.bg-crimson-700 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-crimson-700) / var(--tw-bg-opacity));\n}\n\n.bg-cyan-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-cyan-100) / var(--tw-bg-opacity));\n}\n\n.bg-cyan-300 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-cyan-300) / var(--tw-bg-opacity));\n}\n\n.bg-cyan-700 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-cyan-700) / var(--tw-bg-opacity));\n}\n\n.bg-gold-300 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-gold-300) / var(--tw-bg-opacity));\n}\n\n.bg-grass-300 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-grass-300) / var(--tw-bg-opacity));\n}\n\n.bg-gray-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-gray-100) / var(--tw-bg-opacity));\n}\n\n.bg-gray-100\\/50 {\n background-color: rgb(var(--color-gray-100) / .5);\n}\n\n.bg-gray-1000 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-gray-1000) / var(--tw-bg-opacity));\n}\n\n.bg-gray-200 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-gray-200) / var(--tw-bg-opacity));\n}\n\n.bg-gray-25 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-gray-25) / var(--tw-bg-opacity));\n}\n\n.bg-gray-25\\/50 {\n background-color: rgb(var(--color-gray-25) / .5);\n}\n\n.bg-gray-300 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-gray-300) / var(--tw-bg-opacity));\n}\n\n.bg-gray-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-gray-50) / var(--tw-bg-opacity));\n}\n\n.bg-gray-600 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-gray-600) / var(--tw-bg-opacity));\n}\n\n.bg-gray-900 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-gray-900) / var(--tw-bg-opacity));\n}\n\n.bg-green-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-green-100) / var(--tw-bg-opacity));\n}\n\n.bg-green-300 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-green-300) / var(--tw-bg-opacity));\n}\n\n.bg-green-700 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-green-700) / var(--tw-bg-opacity));\n}\n\n.bg-indigo-300 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-indigo-300) / var(--tw-bg-opacity));\n}\n\n.bg-lime-300 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-lime-300) / var(--tw-bg-opacity));\n}\n\n.bg-orange-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-orange-100) / var(--tw-bg-opacity));\n}\n\n.bg-orange-700 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-orange-700) / var(--tw-bg-opacity));\n}\n\n.bg-plum-300 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-plum-300) / var(--tw-bg-opacity));\n}\n\n.bg-purple-300 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-purple-300) / var(--tw-bg-opacity));\n}\n\n.bg-red-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-red-100) / var(--tw-bg-opacity));\n}\n\n.bg-red-300 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-red-300) / var(--tw-bg-opacity));\n}\n\n.bg-red-700 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-red-700) / var(--tw-bg-opacity));\n}\n\n.bg-red-700\\/60 {\n background-color: rgb(var(--color-red-700) / .6);\n}\n\n.bg-teal-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-teal-100) / var(--tw-bg-opacity));\n}\n\n.bg-teal-300 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-teal-300) / var(--tw-bg-opacity));\n}\n\n.bg-teal-700 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-teal-700) / var(--tw-bg-opacity));\n}\n\n.bg-transparent {\n background-color: #0000;\n}\n\n.bg-violet-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-violet-100) / var(--tw-bg-opacity));\n}\n\n.bg-violet-300 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-violet-300) / var(--tw-bg-opacity));\n}\n\n.bg-violet-700 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-violet-700) / var(--tw-bg-opacity));\n}\n\n.bg-white {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-white) / var(--tw-bg-opacity));\n}\n\n.bg-white\\/60 {\n background-color: rgb(var(--color-white) / .6);\n}\n\n.bg-yellow-300 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-yellow-300) / var(--tw-bg-opacity));\n}\n\n.bg-cover {\n background-size: cover;\n}\n\n.bg-center {\n background-position: center;\n}\n\n.object-contain {\n object-fit: contain;\n}\n\n.object-cover {\n object-fit: cover;\n}\n\n.p-0 {\n padding: 0;\n}\n\n.p-1 {\n padding: .25rem;\n}\n\n.p-1\\.5 {\n padding: .375rem;\n}\n\n.p-2 {\n padding: .5rem;\n}\n\n.p-2\\.5 {\n padding: .625rem;\n}\n\n.p-3 {\n padding: .75rem;\n}\n\n.p-4 {\n padding: 1rem;\n}\n\n.p-5 {\n padding: 1.25rem;\n}\n\n.p-6 {\n padding: 1.5rem;\n}\n\n.p-8 {\n padding: 2rem;\n}\n\n.p-\\[11px\\] {\n padding: 11px;\n}\n\n.px-2 {\n padding-left: .5rem;\n padding-right: .5rem;\n}\n\n.px-2\\.5 {\n padding-left: .625rem;\n padding-right: .625rem;\n}\n\n.px-3 {\n padding-left: .75rem;\n padding-right: .75rem;\n}\n\n.px-3\\.5 {\n padding-left: .875rem;\n padding-right: .875rem;\n}\n\n.px-4 {\n padding-left: 1rem;\n padding-right: 1rem;\n}\n\n.py-0 {\n padding-top: 0;\n padding-bottom: 0;\n}\n\n.py-0\\.5 {\n padding-top: .125rem;\n padding-bottom: .125rem;\n}\n\n.py-1 {\n padding-top: .25rem;\n padding-bottom: .25rem;\n}\n\n.py-1\\.5 {\n padding-top: .375rem;\n padding-bottom: .375rem;\n}\n\n.py-12 {\n padding-top: 3rem;\n padding-bottom: 3rem;\n}\n\n.py-2 {\n padding-top: .5rem;\n padding-bottom: .5rem;\n}\n\n.py-2\\.5 {\n padding-top: .625rem;\n padding-bottom: .625rem;\n}\n\n.py-3 {\n padding-top: .75rem;\n padding-bottom: .75rem;\n}\n\n.pb-2 {\n padding-bottom: .5rem;\n}\n\n.pb-\\[9px\\] {\n padding-bottom: 9px;\n}\n\n.pl-2 {\n padding-left: .5rem;\n}\n\n.pl-4 {\n padding-left: 1rem;\n}\n\n.pr-2 {\n padding-right: .5rem;\n}\n\n.pt-1 {\n padding-top: .25rem;\n}\n\n.pt-10 {\n padding-top: 2.5rem;\n}\n\n.pt-4 {\n padding-top: 1rem;\n}\n\n.text-left {\n text-align: left;\n}\n\n.text-center {\n text-align: center;\n}\n\n.align-middle {\n vertical-align: middle;\n}\n\n.text-2xl {\n letter-spacing: -.02em;\n font-size: 24px;\n line-height: 32px;\n}\n\n.text-3xl {\n letter-spacing: -.02em;\n font-size: 30px;\n line-height: 38px;\n}\n\n.text-4xl {\n letter-spacing: -.02em;\n font-size: 36px;\n line-height: 44px;\n}\n\n.text-\\[10px\\] {\n font-size: 10px;\n}\n\n.text-\\[30px\\] {\n font-size: 30px;\n}\n\n.text-\\[96px\\] {\n font-size: 96px;\n}\n\n.text-lg {\n letter-spacing: -.02em;\n font-size: 18px;\n line-height: 22px;\n}\n\n.text-md {\n letter-spacing: -.02em;\n font-size: 16px;\n line-height: 20px;\n}\n\n.text-sm {\n letter-spacing: -.02em;\n font-size: 14px;\n line-height: 20px;\n}\n\n.text-xs {\n letter-spacing: -.02em;\n font-size: 12px;\n line-height: 16px;\n}\n\n.font-bold {\n font-weight: 700;\n}\n\n.font-medium {\n font-weight: 500;\n}\n\n.font-normal {\n font-weight: 400;\n}\n\n.font-semibold {\n font-weight: 600;\n}\n\n.leading-none {\n line-height: 1;\n}\n\n.text-\\[\\#707070\\] {\n --tw-text-opacity: 1;\n color: rgb(112 112 112 / var(--tw-text-opacity));\n}\n\n.text-amber-700 {\n --tw-text-opacity: 1;\n color: rgb(var(--color-amber-700) / var(--tw-text-opacity));\n}\n\n.text-black {\n --tw-text-opacity: 1;\n color: rgb(var(--color-black) / var(--tw-text-opacity));\n}\n\n.text-blue-700 {\n --tw-text-opacity: 1;\n color: rgb(var(--color-blue-700) / var(--tw-text-opacity));\n}\n\n.text-bronze-700 {\n --tw-text-opacity: 1;\n color: rgb(var(--color-bronze-700) / var(--tw-text-opacity));\n}\n\n.text-brown-700 {\n --tw-text-opacity: 1;\n color: rgb(var(--color-brown-700) / var(--tw-text-opacity));\n}\n\n.text-crimson-700 {\n --tw-text-opacity: 1;\n color: rgb(var(--color-crimson-700) / var(--tw-text-opacity));\n}\n\n.text-current {\n color: currentColor;\n}\n\n.text-cyan-700 {\n --tw-text-opacity: 1;\n color: rgb(var(--color-cyan-700) / var(--tw-text-opacity));\n}\n\n.text-gold-700 {\n --tw-text-opacity: 1;\n color: rgb(var(--color-gold-700) / var(--tw-text-opacity));\n}\n\n.text-grass-700 {\n --tw-text-opacity: 1;\n color: rgb(var(--color-grass-700) / var(--tw-text-opacity));\n}\n\n.text-gray-1000 {\n --tw-text-opacity: 1;\n color: rgb(var(--color-gray-1000) / var(--tw-text-opacity));\n}\n\n.text-gray-400 {\n --tw-text-opacity: 1;\n color: rgb(var(--color-gray-400) / var(--tw-text-opacity));\n}\n\n.text-gray-700 {\n --tw-text-opacity: 1;\n color: rgb(var(--color-gray-700) / var(--tw-text-opacity));\n}\n\n.text-gray-900 {\n --tw-text-opacity: 1;\n color: rgb(var(--color-gray-900) / var(--tw-text-opacity));\n}\n\n.text-green-700 {\n --tw-text-opacity: 1;\n color: rgb(var(--color-green-700) / var(--tw-text-opacity));\n}\n\n.text-indigo-700 {\n --tw-text-opacity: 1;\n color: rgb(var(--color-indigo-700) / var(--tw-text-opacity));\n}\n\n.text-inherit {\n color: inherit;\n}\n\n.text-lime-700 {\n --tw-text-opacity: 1;\n color: rgb(var(--color-lime-700) / var(--tw-text-opacity));\n}\n\n.text-orange-700 {\n --tw-text-opacity: 1;\n color: rgb(var(--color-orange-700) / var(--tw-text-opacity));\n}\n\n.text-plum-700 {\n --tw-text-opacity: 1;\n color: rgb(var(--color-plum-700) / 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-purple-700 {\n --tw-text-opacity: 1;\n color: rgb(var(--color-purple-700) / var(--tw-text-opacity));\n}\n\n.text-red-700 {\n --tw-text-opacity: 1;\n color: rgb(var(--color-red-700) / var(--tw-text-opacity));\n}\n\n.text-teal-700 {\n --tw-text-opacity: 1;\n color: rgb(var(--color-teal-700) / var(--tw-text-opacity));\n}\n\n.text-violet-700 {\n --tw-text-opacity: 1;\n color: rgb(var(--color-violet-700) / var(--tw-text-opacity));\n}\n\n.text-white {\n --tw-text-opacity: 1;\n color: rgb(var(--color-white) / var(--tw-text-opacity));\n}\n\n.text-yellow-700 {\n --tw-text-opacity: 1;\n color: rgb(var(--color-yellow-700) / 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-50 {\n opacity: .5;\n}\n\n.opacity-60 {\n opacity: .6;\n}\n\n.shadow-dropdown-sm {\n --tw-shadow: 0px 1px 2px 0px #1018280f, 0px 1px 3px 0px #1018281a;\n --tw-shadow-colored: 0px 1px 2px 0px var(--tw-shadow-color), 0px 1px 3px 0px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n\n.shadow-lg {\n --tw-shadow: 0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a;\n --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n\n.shadow-md {\n --tw-shadow: 0 4px 6px -1px #0000001a, 0 2px 4px -2px #0000001a;\n --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n\n.shadow-sm {\n --tw-shadow: 0 1px 2px 0 #0000000d;\n --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n\n.outline-none {\n outline-offset: 2px;\n outline: 2px solid #0000;\n}\n\n.outline {\n outline-style: solid;\n}\n\n.ring-1 {\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(1px + 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-2 {\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(2px + 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-4 {\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(4px + 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-\\[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-inset {\n --tw-ring-inset: inset;\n}\n\n.ring-amber-300 {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(var(--color-amber-300) / var(--tw-ring-opacity));\n}\n\n.ring-black {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(var(--color-black) / var(--tw-ring-opacity));\n}\n\n.ring-blue-300 {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(var(--color-blue-300) / var(--tw-ring-opacity));\n}\n\n.ring-blue-700 {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(var(--color-blue-700) / var(--tw-ring-opacity));\n}\n\n.ring-brown-300 {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(var(--color-brown-300) / var(--tw-ring-opacity));\n}\n\n.ring-crimson-300 {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(var(--color-crimson-300) / var(--tw-ring-opacity));\n}\n\n.ring-cyan-300 {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(var(--color-cyan-300) / var(--tw-ring-opacity));\n}\n\n.ring-gray-100 {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(var(--color-gray-100) / var(--tw-ring-opacity));\n}\n\n.ring-gray-200 {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(var(--color-gray-200) / var(--tw-ring-opacity));\n}\n\n.ring-gray-400 {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(var(--color-gray-400) / var(--tw-ring-opacity));\n}\n\n.ring-green-300 {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(var(--color-green-300) / var(--tw-ring-opacity));\n}\n\n.ring-orange-300 {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(var(--color-orange-300) / var(--tw-ring-opacity));\n}\n\n.ring-red-300 {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(var(--color-red-300) / var(--tw-ring-opacity));\n}\n\n.ring-teal-300 {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(var(--color-teal-300) / var(--tw-ring-opacity));\n}\n\n.ring-violet-300 {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(var(--color-violet-300) / var(--tw-ring-opacity));\n}\n\n.ring-white\\/20 {\n --tw-ring-color: rgb(var(--color-white) / .2);\n}\n\n.ring-offset-0 {\n --tw-ring-offset-width: 0px;\n}\n\n.ring-offset-white {\n --tw-ring-offset-color: rgb(var(--color-white) / 1);\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.backdrop-blur-\\[20px\\] {\n --tw-backdrop-blur: blur(20px);\n backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n}\n\n.backdrop-blur-\\[30px\\] {\n --tw-backdrop-blur: blur(30px);\n backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n}\n\n.backdrop-blur-lg {\n --tw-backdrop-blur: blur(16px);\n backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n}\n\n.backdrop-blur-sm {\n --tw-backdrop-blur: blur(4px);\n backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\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-all {\n transition-property: all;\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 {\n transition-property: transform;\n transition-duration: .15s;\n transition-timing-function: cubic-bezier(.4, 0, .2, 1);\n}\n\n.duration-200 {\n transition-duration: .2s;\n}\n\n.duration-500 {\n transition-duration: .5s;\n}\n\n.duration-700 {\n transition-duration: .7s;\n}\n\n.ease-in-out {\n transition-timing-function: cubic-bezier(.4, 0, .2, 1);\n}\n\n.ease-linear {\n transition-timing-function: linear;\n}\n\n.ease-out {\n transition-timing-function: cubic-bezier(0, 0, .2, 1);\n}\n\n.will-change-transform {\n will-change: transform;\n}\n\n@keyframes enter {\n from {\n opacity: var(--tw-enter-opacity, 1);\n transform: translate3d(var(--tw-enter-translate-x, 0), var(--tw-enter-translate-y, 0), 0) scale3d(var(--tw-enter-scale, 1), var(--tw-enter-scale, 1), var(--tw-enter-scale, 1)) rotate(var(--tw-enter-rotate, 0));\n }\n}\n\n@keyframes exit {\n to {\n opacity: var(--tw-exit-opacity, 1);\n transform: translate3d(var(--tw-exit-translate-x, 0), var(--tw-exit-translate-y, 0), 0) scale3d(var(--tw-exit-scale, 1), var(--tw-exit-scale, 1), var(--tw-exit-scale, 1)) rotate(var(--tw-exit-rotate, 0));\n }\n}\n\n.animate-in {\n --tw-enter-opacity: initial;\n --tw-enter-scale: initial;\n --tw-enter-rotate: initial;\n --tw-enter-translate-x: initial;\n --tw-enter-translate-y: initial;\n animation-name: enter;\n animation-duration: .15s;\n}\n\n.fade-in, .fade-in-0 {\n --tw-enter-opacity: 0;\n}\n\n.fade-out {\n --tw-exit-opacity: 0;\n}\n\n.zoom-in-95 {\n --tw-enter-scale: .95;\n}\n\n.duration-200 {\n animation-duration: .2s;\n}\n\n.duration-500 {\n animation-duration: .5s;\n}\n\n.duration-700 {\n animation-duration: .7s;\n}\n\n.ease-in-out {\n animation-timing-function: cubic-bezier(.4, 0, .2, 1);\n}\n\n.ease-linear {\n animation-timing-function: linear;\n}\n\n.ease-out {\n animation-timing-function: cubic-bezier(0, 0, .2, 1);\n}\n\n.paused {\n animation-play-state: paused;\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.pulse-red-700 {\n animation: 2s infinite pulse-red-700;\n transform: scale(1);\n box-shadow: 0 0 #e5484d;\n}\n\n@keyframes pulse-red-700 {\n 0% {\n transform: scale(.95);\n box-shadow: 0 0 #e5484db3;\n }\n\n 70% {\n transform: scale(1);\n box-shadow: 0 0 0 6px #e5484d00;\n }\n\n 100% {\n transform: scale(.95);\n box-shadow: 0 0 #e5484d00;\n }\n}\n\n.\\*\\:bg-blue-700 > * {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-blue-700) / var(--tw-bg-opacity));\n}\n\n.\\*\\:text-white > * {\n --tw-text-opacity: 1;\n color: rgb(var(--color-white) / var(--tw-text-opacity));\n}\n\n.\\*\\:opacity-100 > * {\n opacity: 1;\n}\n\n.placeholder\\:text-gray-700::placeholder {\n --tw-text-opacity: 1;\n color: rgb(var(--color-gray-700) / var(--tw-text-opacity));\n}\n\n.placeholder\\:text-gray-900::placeholder {\n --tw-text-opacity: 1;\n color: rgb(var(--color-gray-900) / var(--tw-text-opacity));\n}\n\n.focus-within\\:relative:focus-within {\n position: relative;\n}\n\n.focus-within\\:z-20:focus-within {\n z-index: 20;\n}\n\n.focus-within\\:border-gray-200:focus-within {\n --tw-border-opacity: 1;\n border-color: rgb(var(--color-gray-200) / var(--tw-border-opacity));\n}\n\n.focus-within\\:bg-gray-100:focus-within {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-gray-100) / var(--tw-bg-opacity));\n}\n\n.focus-within\\:outline:focus-within {\n outline-style: solid;\n}\n\n.focus-within\\:outline-\\[2px\\]:focus-within {\n outline-width: 2px;\n}\n\n.focus-within\\:outline-offset-\\[2px\\]:focus-within {\n outline-offset: 2px;\n}\n\n.focus-within\\:outline-blue-300:focus-within {\n outline-color: rgb(var(--color-blue-300) / 1);\n}\n\n.focus-within\\:outline-red-700:focus-within {\n outline-color: rgb(var(--color-red-700) / 1);\n}\n\n.hover\\:border-gray-600:hover {\n --tw-border-opacity: 1;\n border-color: rgb(var(--color-gray-600) / var(--tw-border-opacity));\n}\n\n.hover\\:bg-black\\/5:hover {\n background-color: rgb(var(--color-black) / .05);\n}\n\n.hover\\:bg-blue-100:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-blue-100) / var(--tw-bg-opacity));\n}\n\n.hover\\:bg-blue-50:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-blue-50) / var(--tw-bg-opacity));\n}\n\n.hover\\:bg-blue-800:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-blue-800) / var(--tw-bg-opacity));\n}\n\n.hover\\:bg-gray-100:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-gray-100) / var(--tw-bg-opacity));\n}\n\n.hover\\:bg-gray-100\\/75:hover {\n background-color: rgb(var(--color-gray-100) / .75);\n}\n\n.hover\\:bg-gray-200:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-gray-200) / var(--tw-bg-opacity));\n}\n\n.hover\\:bg-gray-50:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-gray-50) / var(--tw-bg-opacity));\n}\n\n.hover\\:bg-red-100:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-red-100) / var(--tw-bg-opacity));\n}\n\n.hover\\:bg-red-800:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-red-800) / var(--tw-bg-opacity));\n}\n\n.hover\\:text-amber-700:hover {\n --tw-text-opacity: 1;\n color: rgb(var(--color-amber-700) / var(--tw-text-opacity));\n}\n\n.hover\\:underline:hover {\n text-decoration-line: underline;\n}\n\n.hover\\:opacity-100:hover {\n opacity: 1;\n}\n\n.\\*\\:hover\\:bg-blue-700:hover > * {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-blue-700) / var(--tw-bg-opacity));\n}\n\n.\\*\\:hover\\:text-white:hover > * {\n --tw-text-opacity: 1;\n color: rgb(var(--color-white) / var(--tw-text-opacity));\n}\n\n.focus\\:bg-gray-100:focus {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-gray-100) / var(--tw-bg-opacity));\n}\n\n.focus\\:outline-none:focus {\n outline-offset: 2px;\n outline: 2px solid #0000;\n}\n\n.focus\\:ring-1:focus {\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(1px + 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.focus\\:ring-2:focus {\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(2px + 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.focus\\:ring-offset-2:focus {\n --tw-ring-offset-width: 2px;\n}\n\n.\\*\\:focus\\:bg-blue-700:focus > * {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-blue-700) / var(--tw-bg-opacity));\n}\n\n.\\*\\:focus\\:text-white:focus > * {\n --tw-text-opacity: 1;\n color: rgb(var(--color-white) / var(--tw-text-opacity));\n}\n\n.focus-visible\\:outline-none:focus-visible {\n outline-offset: 2px;\n outline: 2px solid #0000;\n}\n\n.focus-visible\\:ring-2:focus-visible {\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(2px + 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.focus-visible\\:ring-black:focus-visible {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(var(--color-black) / var(--tw-ring-opacity));\n}\n\n.focus-visible\\:ring-blue-1000:focus-visible {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(var(--color-blue-1000) / var(--tw-ring-opacity));\n}\n\n.focus-visible\\:ring-blue-300:focus-visible {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(var(--color-blue-300) / var(--tw-ring-opacity));\n}\n\n.focus-visible\\:ring-blue-700:focus-visible {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(var(--color-blue-700) / var(--tw-ring-opacity));\n}\n\n.focus-visible\\:ring-red-1000:focus-visible {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(var(--color-red-1000) / var(--tw-ring-opacity));\n}\n\n.focus-visible\\:ring-red-700:focus-visible {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(var(--color-red-700) / var(--tw-ring-opacity));\n}\n\n.focus-visible\\:ring-offset-2:focus-visible {\n --tw-ring-offset-width: 2px;\n}\n\n.active\\:bg-blue-200:active {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-blue-200) / var(--tw-bg-opacity));\n}\n\n.active\\:bg-blue-900:active {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-blue-900) / var(--tw-bg-opacity));\n}\n\n.active\\:bg-gray-100:active {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-gray-100) / var(--tw-bg-opacity));\n}\n\n.active\\:bg-gray-200:active {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-gray-200) / var(--tw-bg-opacity));\n}\n\n.active\\:bg-gray-300:active {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-gray-300) / var(--tw-bg-opacity));\n}\n\n.active\\:bg-gray-500:active {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-gray-500) / var(--tw-bg-opacity));\n}\n\n.active\\:bg-red-200:active {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-red-200) / var(--tw-bg-opacity));\n}\n\n.active\\:bg-red-900:active {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-red-900) / var(--tw-bg-opacity));\n}\n\n.active\\:text-blue-900:active {\n --tw-text-opacity: 1;\n color: rgb(var(--color-blue-900) / var(--tw-text-opacity));\n}\n\n.disabled\\:pointer-events-none:disabled {\n pointer-events: none;\n}\n\n.disabled\\:cursor-not-allowed:disabled {\n cursor: not-allowed;\n}\n\n.disabled\\:select-none:disabled {\n -webkit-user-select: none;\n user-select: none;\n}\n\n.disabled\\:opacity-40:disabled {\n opacity: .4;\n}\n\n.disabled\\:opacity-50:disabled {\n opacity: .5;\n}\n\n.group:focus-within .group-focus-within\\:bg-gray-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-gray-100) / var(--tw-bg-opacity));\n}\n\n.group:hover .group-hover\\:visible {\n visibility: visible;\n}\n\n.group:hover .group-hover\\:flex {\n display: flex;\n}\n\n.group:hover .group-hover\\:bg-gray-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-gray-50) / var(--tw-bg-opacity));\n}\n\n.group:active .group-active\\:bg-gray-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-gray-100) / var(--tw-bg-opacity));\n}\n\n.peer:hover ~ .peer-hover\\:text-amber-700 {\n --tw-text-opacity: 1;\n color: rgb(var(--color-amber-700) / var(--tw-text-opacity));\n}\n\n.peer:disabled ~ .peer-disabled\\:cursor-not-allowed {\n cursor: not-allowed;\n}\n\n.peer:disabled ~ .peer-disabled\\:opacity-70 {\n opacity: .7;\n}\n\n.aria-selected\\:rounded-md[aria-selected=\"true\"] {\n border-radius: .375rem;\n}\n\n.aria-selected\\:bg-blue-100[aria-selected=\"true\"], .\\*\\:aria-selected\\:bg-blue-100[aria-selected=\"true\"] > * {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-blue-100) / var(--tw-bg-opacity));\n}\n\n.\\*\\:aria-selected\\:text-blue-700[aria-selected=\"true\"] > * {\n --tw-text-opacity: 1;\n color: rgb(var(--color-blue-700) / var(--tw-text-opacity));\n}\n\n.first\\:aria-selected\\:rounded-l-md[aria-selected=\"true\"]:first-child {\n border-top-left-radius: .375rem;\n border-bottom-left-radius: .375rem;\n}\n\n.last\\:aria-selected\\:rounded-r-md[aria-selected=\"true\"]:last-child {\n border-top-right-radius: .375rem;\n border-bottom-right-radius: .375rem;\n}\n\n.data-\\[disabled\\]\\:pointer-events-none[data-disabled] {\n pointer-events: none;\n}\n\n.data-\\[side\\=bottom\\]\\:translate-y-1[data-side=\"bottom\"] {\n --tw-translate-y: .25rem;\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.data-\\[side\\=left\\]\\:-translate-x-1[data-side=\"left\"] {\n --tw-translate-x: -.25rem;\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.data-\\[side\\=right\\]\\:translate-x-1[data-side=\"right\"] {\n --tw-translate-x: .25rem;\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.data-\\[side\\=top\\]\\:-translate-y-1[data-side=\"top\"] {\n --tw-translate-y: -.25rem;\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.data-\\[state\\=checked\\]\\:translate-x-5[data-state=\"checked\"] {\n --tw-translate-x: 1.25rem;\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.data-\\[swipe\\=cancel\\]\\:translate-x-0[data-swipe=\"cancel\"] {\n --tw-translate-x: 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.data-\\[swipe\\=end\\]\\:translate-x-\\[var\\(--radix-toast-swipe-end-x\\)\\][data-swipe=\"end\"] {\n --tw-translate-x: var(--radix-toast-swipe-end-x);\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.data-\\[swipe\\=move\\]\\:translate-x-\\[var\\(--radix-toast-swipe-move-x\\)\\][data-swipe=\"move\"] {\n --tw-translate-x: var(--radix-toast-swipe-move-x);\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@keyframes accordion-up {\n from {\n height: var(--radix-accordion-content-height);\n }\n\n to {\n height: 0;\n }\n}\n\n.data-\\[state\\=closed\\]\\:animate-accordion-up[data-state=\"closed\"] {\n animation: .2s ease-out accordion-up;\n}\n\n@keyframes accordion-down {\n from {\n height: 0;\n }\n\n to {\n height: var(--radix-accordion-content-height);\n }\n}\n\n.data-\\[state\\=open\\]\\:animate-accordion-down[data-state=\"open\"] {\n animation: .2s ease-out accordion-down;\n}\n\n.data-\\[disabled\\=true\\]\\:cursor-not-allowed[data-disabled=\"true\"], .data-\\[disabled\\]\\:cursor-not-allowed[data-disabled] {\n cursor: not-allowed;\n}\n\n.data-\\[state\\=checked\\]\\:border-blue-700[data-state=\"checked\"], .data-\\[state\\=on\\]\\:border-blue-700[data-state=\"on\"] {\n --tw-border-opacity: 1;\n border-color: rgb(var(--color-blue-700) / var(--tw-border-opacity));\n}\n\n.data-\\[disabled\\]\\:data-\\[state\\=unchecked\\]\\:bg-gray-300[data-state=\"unchecked\"][data-disabled] {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-gray-300) / var(--tw-bg-opacity));\n}\n\n.data-\\[selected\\=true\\]\\:bg-gray-50[data-selected=\"true\"] {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-gray-50) / var(--tw-bg-opacity));\n}\n\n.data-\\[size\\=xxs\\]\\:bg-amber-700[data-size=\"xxs\"] {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-amber-700) / var(--tw-bg-opacity));\n}\n\n.data-\\[size\\=xxs\\]\\:bg-blue-700[data-size=\"xxs\"] {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-blue-700) / var(--tw-bg-opacity));\n}\n\n.data-\\[size\\=xxs\\]\\:bg-bronze-700[data-size=\"xxs\"] {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-bronze-700) / var(--tw-bg-opacity));\n}\n\n.data-\\[size\\=xxs\\]\\:bg-brown-700[data-size=\"xxs\"] {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-brown-700) / var(--tw-bg-opacity));\n}\n\n.data-\\[size\\=xxs\\]\\:bg-crimson-700[data-size=\"xxs\"] {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-crimson-700) / var(--tw-bg-opacity));\n}\n\n.data-\\[size\\=xxs\\]\\:bg-cyan-700[data-size=\"xxs\"] {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-cyan-700) / var(--tw-bg-opacity));\n}\n\n.data-\\[size\\=xxs\\]\\:bg-gold-700[data-size=\"xxs\"] {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-gold-700) / var(--tw-bg-opacity));\n}\n\n.data-\\[size\\=xxs\\]\\:bg-grass-700[data-size=\"xxs\"] {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-grass-700) / var(--tw-bg-opacity));\n}\n\n.data-\\[size\\=xxs\\]\\:bg-gray-700[data-size=\"xxs\"] {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-gray-700) / var(--tw-bg-opacity));\n}\n\n.data-\\[size\\=xxs\\]\\:bg-green-700[data-size=\"xxs\"] {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-green-700) / var(--tw-bg-opacity));\n}\n\n.data-\\[size\\=xxs\\]\\:bg-indigo-700[data-size=\"xxs\"] {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-indigo-700) / var(--tw-bg-opacity));\n}\n\n.data-\\[size\\=xxs\\]\\:bg-lime-700[data-size=\"xxs\"] {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-lime-700) / var(--tw-bg-opacity));\n}\n\n.data-\\[size\\=xxs\\]\\:bg-plum-700[data-size=\"xxs\"] {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-plum-700) / var(--tw-bg-opacity));\n}\n\n.data-\\[size\\=xxs\\]\\:bg-purple-700[data-size=\"xxs\"] {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-purple-700) / var(--tw-bg-opacity));\n}\n\n.data-\\[size\\=xxs\\]\\:bg-red-700[data-size=\"xxs\"] {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-red-700) / var(--tw-bg-opacity));\n}\n\n.data-\\[size\\=xxs\\]\\:bg-teal-700[data-size=\"xxs\"] {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-teal-700) / var(--tw-bg-opacity));\n}\n\n.data-\\[size\\=xxs\\]\\:bg-violet-700[data-size=\"xxs\"] {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-violet-700) / var(--tw-bg-opacity));\n}\n\n.data-\\[size\\=xxs\\]\\:bg-yellow-700[data-size=\"xxs\"] {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-yellow-700) / var(--tw-bg-opacity));\n}\n\n.data-\\[state\\=active\\]\\:bg-black[data-state=\"active\"] {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-black) / var(--tw-bg-opacity));\n}\n\n.data-\\[state\\=active\\]\\:bg-white[data-state=\"active\"] {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-white) / var(--tw-bg-opacity));\n}\n\n.data-\\[state\\=checked\\]\\:bg-blue-700[data-state=\"checked\"] {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-blue-700) / var(--tw-bg-opacity));\n}\n\n.data-\\[state\\=checked\\]\\:bg-gray-50[data-state=\"checked\"] {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-gray-50) / var(--tw-bg-opacity));\n}\n\n.data-\\[state\\=checked\\]\\:bg-white[data-state=\"checked\"] {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-white) / var(--tw-bg-opacity));\n}\n\n.data-\\[state\\=selected\\]\\:bg-gray-50[data-state=\"selected\"] {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-gray-50) / var(--tw-bg-opacity));\n}\n\n.data-\\[state\\=active\\]\\:text-blue-700[data-state=\"active\"] {\n --tw-text-opacity: 1;\n color: rgb(var(--color-blue-700) / var(--tw-text-opacity));\n}\n\n.data-\\[disabled\\=true\\]\\:opacity-50[data-disabled=\"true\"] {\n opacity: .5;\n}\n\n.data-\\[disabled\\]\\:opacity-40[data-disabled] {\n opacity: .4;\n}\n\n.data-\\[disabled\\]\\:opacity-50[data-disabled] {\n opacity: .5;\n}\n\n.data-\\[state\\=active\\]\\:shadow-sm[data-state=\"active\"] {\n --tw-shadow: 0 1px 2px 0 #0000000d;\n --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n\n.data-\\[swipe\\=move\\]\\:transition-none[data-swipe=\"move\"] {\n transition-property: none;\n}\n\n.data-\\[state\\=closed\\]\\:duration-300[data-state=\"closed\"] {\n transition-duration: .3s;\n}\n\n.data-\\[state\\=open\\]\\:duration-500[data-state=\"open\"] {\n transition-duration: .5s;\n}\n\n.data-\\[state\\=open\\]\\:animate-in[data-state=\"open\"] {\n --tw-enter-opacity: initial;\n --tw-enter-scale: initial;\n --tw-enter-rotate: initial;\n --tw-enter-translate-x: initial;\n --tw-enter-translate-y: initial;\n animation-name: enter;\n animation-duration: .15s;\n}\n\n.data-\\[state\\=closed\\]\\:animate-out[data-state=\"closed\"], .data-\\[swipe\\=end\\]\\:animate-out[data-swipe=\"end\"] {\n --tw-exit-opacity: initial;\n --tw-exit-scale: initial;\n --tw-exit-rotate: initial;\n --tw-exit-translate-x: initial;\n --tw-exit-translate-y: initial;\n animation-name: exit;\n animation-duration: .15s;\n}\n\n.data-\\[state\\=closed\\]\\:fade-out[data-state=\"closed\"], .data-\\[state\\=closed\\]\\:fade-out-0[data-state=\"closed\"] {\n --tw-exit-opacity: 0;\n}\n\n.data-\\[state\\=closed\\]\\:fade-out-80[data-state=\"closed\"] {\n --tw-exit-opacity: .8;\n}\n\n.data-\\[state\\=open\\]\\:fade-in-0[data-state=\"open\"] {\n --tw-enter-opacity: 0;\n}\n\n.data-\\[state\\=closed\\]\\:zoom-out-95[data-state=\"closed\"] {\n --tw-exit-scale: .95;\n}\n\n.data-\\[state\\=open\\]\\:zoom-in-95[data-state=\"open\"] {\n --tw-enter-scale: .95;\n}\n\n.data-\\[side\\=bottom\\]\\:slide-in-from-top-2[data-side=\"bottom\"] {\n --tw-enter-translate-y: -.5rem;\n}\n\n.data-\\[side\\=left\\]\\:slide-in-from-right-2[data-side=\"left\"] {\n --tw-enter-translate-x: .5rem;\n}\n\n.data-\\[side\\=right\\]\\:slide-in-from-left-2[data-side=\"right\"] {\n --tw-enter-translate-x: -.5rem;\n}\n\n.data-\\[side\\=top\\]\\:slide-in-from-bottom-2[data-side=\"top\"] {\n --tw-enter-translate-y: .5rem;\n}\n\n.data-\\[state\\=closed\\]\\:slide-out-to-bottom[data-state=\"closed\"], .data-\\[state\\=closed\\]\\:slide-out-to-bottom-\\[100\\%\\][data-state=\"closed\"] {\n --tw-exit-translate-y: 100%;\n}\n\n.data-\\[state\\=closed\\]\\:slide-out-to-left[data-state=\"closed\"] {\n --tw-exit-translate-x: -100%;\n}\n\n.data-\\[state\\=closed\\]\\:slide-out-to-left-1\\/2[data-state=\"closed\"], .data-\\[state\\=closed\\]\\:slide-out-to-left-\\[50\\%\\][data-state=\"closed\"] {\n --tw-exit-translate-x: -50%;\n}\n\n.data-\\[state\\=closed\\]\\:slide-out-to-right[data-state=\"closed\"] {\n --tw-exit-translate-x: 100%;\n}\n\n.data-\\[state\\=closed\\]\\:slide-out-to-top[data-state=\"closed\"] {\n --tw-exit-translate-y: -100%;\n}\n\n.data-\\[state\\=closed\\]\\:slide-out-to-top-\\[48\\%\\][data-state=\"closed\"] {\n --tw-exit-translate-y: -48%;\n}\n\n.data-\\[state\\=open\\]\\:slide-in-from-bottom[data-state=\"open\"], .data-\\[state\\=open\\]\\:slide-in-from-bottom-\\[100\\%\\][data-state=\"open\"] {\n --tw-enter-translate-y: 100%;\n}\n\n.data-\\[state\\=open\\]\\:slide-in-from-left[data-state=\"open\"] {\n --tw-enter-translate-x: -100%;\n}\n\n.data-\\[state\\=open\\]\\:slide-in-from-left-1\\/2[data-state=\"open\"], .data-\\[state\\=open\\]\\:slide-in-from-left-\\[50\\%\\][data-state=\"open\"] {\n --tw-enter-translate-x: -50%;\n}\n\n.data-\\[state\\=open\\]\\:slide-in-from-right[data-state=\"open\"] {\n --tw-enter-translate-x: 100%;\n}\n\n.data-\\[state\\=open\\]\\:slide-in-from-top[data-state=\"open\"] {\n --tw-enter-translate-y: -100%;\n}\n\n.data-\\[state\\=open\\]\\:slide-in-from-top-\\[48\\%\\][data-state=\"open\"] {\n --tw-enter-translate-y: -48%;\n}\n\n.data-\\[state\\=open\\]\\:slide-in-from-top-full[data-state=\"open\"] {\n --tw-enter-translate-y: -100%;\n}\n\n.data-\\[state\\=closed\\]\\:duration-300[data-state=\"closed\"] {\n animation-duration: .3s;\n}\n\n.data-\\[state\\=open\\]\\:duration-500[data-state=\"open\"] {\n animation-duration: .5s;\n}\n\n.group[data-state=\"open\"] .group-data-\\[state\\=open\\]\\:rotate-180 {\n --tw-rotate: 180deg;\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.group[data-disabled] .group-data-\\[disabled\\]\\:cursor-not-allowed {\n cursor: not-allowed;\n}\n\n.group[data-state=\"on\"] .group-data-\\[state\\=on\\]\\:border-blue-700 {\n --tw-border-opacity: 1;\n border-color: rgb(var(--color-blue-700) / var(--tw-border-opacity));\n}\n\n.group[data-state=\"checked\"] .group-data-\\[state\\=checked\\]\\:bg-gray-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-gray-50) / var(--tw-bg-opacity));\n}\n\n.group[data-state=\"off\"] .group-data-\\[state\\=off\\]\\:bg-transparent {\n background-color: #0000;\n}\n\n.group[data-state=\"off\"] .group-data-\\[state\\=off\\]\\:text-transparent {\n color: #0000;\n}\n\n.group[data-disabled] .group-data-\\[disabled\\]\\:opacity-50 {\n opacity: .5;\n}\n\n@media not all and (width >= 1024px) {\n .max-lg\\:mt-8 {\n margin-top: 2rem;\n }\n\n .max-lg\\:hidden {\n display: none;\n }\n\n .max-lg\\:h-\\[250px\\] {\n height: 250px;\n }\n\n .max-lg\\:w-full {\n width: 100%;\n }\n\n .max-lg\\:flex-col {\n flex-direction: column;\n }\n}\n\n@media not all and (width >= 640px) {\n .max-sm\\:gap-4 {\n gap: 1rem;\n }\n\n .max-sm\\:p-4 {\n padding: 1rem;\n }\n}\n\n@media (width >= 640px) {\n .sm\\:mt-0 {\n margin-top: 0;\n }\n\n .sm\\:w-1\\/2 {\n width: 50%;\n }\n\n .sm\\:max-w-sm {\n max-width: 24rem;\n }\n\n .sm\\:flex-row {\n flex-direction: row;\n }\n\n .sm\\:flex-col {\n flex-direction: column;\n }\n\n .sm\\:justify-end {\n justify-content: flex-end;\n }\n\n .sm\\:justify-center {\n justify-content: center;\n }\n\n .sm\\:space-x-2 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-x-reverse: 0;\n margin-right: calc(.5rem * var(--tw-space-x-reverse));\n margin-left: calc(.5rem * calc(1 - var(--tw-space-x-reverse)));\n }\n\n .data-\\[state\\=open\\]\\:sm\\:slide-in-from-bottom-full[data-state=\"open\"] {\n --tw-enter-translate-y: 100%;\n }\n}\n\n@media (width >= 768px) {\n .md\\:block {\n display: block;\n }\n\n .md\\:h-\\[550px\\] {\n height: 550px;\n }\n\n .md\\:w-\\[1000px\\] {\n width: 1000px;\n }\n\n .md\\:w-\\[300px\\] {\n width: 300px;\n }\n\n .md\\:w-\\[334px\\] {\n width: 334px;\n }\n\n .md\\:w-auto {\n width: auto;\n }\n\n .md\\:w-full {\n width: 100%;\n }\n\n .md\\:w-screen {\n width: 100vw;\n }\n\n .md\\:min-w-\\[500px\\] {\n min-width: 500px;\n }\n\n .md\\:max-w-\\[420px\\] {\n max-width: 420px;\n }\n\n .md\\:max-w-\\[90vw\\] {\n max-width: 90vw;\n }\n\n .md\\:flex-row {\n flex-direction: row;\n }\n\n .md\\:items-center {\n align-items: center;\n }\n\n .md\\:justify-start {\n justify-content: flex-start;\n }\n\n .md\\:gap-0 {\n gap: 0;\n }\n\n .md\\:gap-4 {\n gap: 1rem;\n }\n\n .md\\:gap-8 {\n gap: 2rem;\n }\n\n .md\\:divide-y > :not([hidden]) ~ :not([hidden]) {\n --tw-divide-y-reverse: 0;\n border-top-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));\n border-bottom-width: calc(1px * var(--tw-divide-y-reverse));\n }\n\n .md\\:border-0 {\n border-width: 0;\n }\n\n .md\\:bg-gray-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-gray-50) / var(--tw-bg-opacity));\n }\n\n .md\\:bg-transparent {\n background-color: #0000;\n }\n\n .md\\:p-0 {\n padding: 0;\n }\n\n .md\\:p-4 {\n padding: 1rem;\n }\n\n .md\\:p-6 {\n padding: 1.5rem;\n }\n\n .md\\:p-8 {\n padding: 2rem;\n }\n\n .md\\:pt-4 {\n padding-top: 1rem;\n }\n}\n\n@media (width >= 1024px) {\n .lg\\:flex-col {\n flex-direction: column;\n }\n\n .lg\\:items-center {\n align-items: center;\n }\n\n .lg\\:gap-2 {\n gap: .5rem;\n }\n\n .lg\\:gap-8 {\n gap: 2rem;\n }\n\n .lg\\:rounded-lg {\n border-radius: .5rem;\n }\n\n .lg\\:border {\n border-width: 1px;\n }\n\n .lg\\:border-gray-200 {\n --tw-border-opacity: 1;\n border-color: rgb(var(--color-gray-200) / var(--tw-border-opacity));\n }\n\n .lg\\:bg-pattern {\n background-image: radial-gradient(50% 50%, #006aff33 0%, #006aff00 100%), linear-gradient(#0000 0%, #fff 100%), linear-gradient(0deg, #0000 0%, #ffffffbf 100%), url(\"data:image/svg+xml,%3Csvg width='40' height='40' viewBox='0 0 40 40' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M40 40V41H41V40H40ZM39 0V40H41V0H39ZM40 39H0V41H40V39Z' fill='%23E8E8E8' mask='url(%23path-1-inside-1_124_242)'/%3E%3C/svg%3E\");\n }\n\n .lg\\:p-6 {\n padding: 1.5rem;\n }\n\n .lg\\:text-center {\n text-align: center;\n }\n\n .lg\\:text-4xl {\n letter-spacing: -.02em;\n font-size: 36px;\n line-height: 44px;\n }\n}\n\n@media (width >= 1280px) {\n .xl\\:rounded-none {\n border-radius: 0;\n }\n}\n\n.dark\\:text-black:where(.dark-theme, .dark-theme *), .dark\\:\\*\\:text-black > :where(.dark-theme, .dark-theme *), .dark\\:\\*\\:hover\\:text-black:hover > :where(.dark-theme, .dark-theme *), .dark\\:\\*\\:focus\\:text-black:focus > :where(.dark-theme, .dark-theme *) {\n --tw-text-opacity: 1;\n color: rgb(var(--color-black) / var(--tw-text-opacity));\n}\n\n.dark\\:data-\\[state\\=checked\\]\\:bg-black[data-state=\"checked\"]:where(.dark-theme, .dark-theme *) {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-black) / var(--tw-bg-opacity));\n}\n\n.dark\\:data-\\[state\\=active\\]\\:text-black[data-state=\"active\"]:where(.dark-theme, .dark-theme *) {\n --tw-text-opacity: 1;\n color: rgb(var(--color-black) / var(--tw-text-opacity));\n}\n\n.dark\\:data-\\[state\\=active\\]\\:text-white[data-state=\"active\"]:where(.dark-theme, .dark-theme *) {\n --tw-text-opacity: 1;\n color: rgb(var(--color-white) / var(--tw-text-opacity));\n}\n\n.aria-selected\\:\\[\\&\\.day-outside\\]\\:bg-blue-100\\/50.day-outside[aria-selected=\"true\"] {\n background-color: rgb(var(--color-blue-100) / .5);\n}\n\n.\\[\\&\\.day-range-end\\]\\:rounded-r-md.day-range-end, .aria-selected\\:\\[\\&\\.day-range-end\\]\\:rounded-r-md.day-range-end[aria-selected=\"true\"] {\n border-top-right-radius: .375rem;\n border-bottom-right-radius: .375rem;\n}\n\n.\\[\\&\\.day-range-start\\]\\:rounded-l-md.day-range-start {\n border-top-left-radius: .375rem;\n border-bottom-left-radius: .375rem;\n}\n\n.\\[\\&\\:has\\(\\[role\\=checkbox\\]\\)\\]\\:pr-0:has([role=\"checkbox\"]) {\n padding-right: 0;\n}\n\n.\\[\\&\\>\\*\\]\\:fill-black > * {\n fill: rgb(var(--color-black) / 1);\n}\n\n.\\[\\&\\>\\[role\\=checkbox\\]\\]\\:translate-y-\\[2px\\] > [role=\"checkbox\"] {\n --tw-translate-y: 2px;\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.\\[\\&\\>button\\]\\:w-full > button {\n width: 100%;\n}\n\n.\\[\\&\\>svg\\]\\:h-4 > svg {\n height: 1rem;\n}\n\n.\\[\\&\\>svg\\]\\:w-auto > svg {\n width: auto;\n}\n\n.\\[\\&\\>svg\\]\\:text-black > svg {\n --tw-text-opacity: 1;\n color: rgb(var(--color-black) / var(--tw-text-opacity));\n}\n\n.\\[\\&\\>svg\\]\\:text-blue-700 > svg {\n --tw-text-opacity: 1;\n color: rgb(var(--color-blue-700) / var(--tw-text-opacity));\n}\n\n.\\[\\&\\>svg\\]\\:text-red-700 > svg {\n --tw-text-opacity: 1;\n color: rgb(var(--color-red-700) / var(--tw-text-opacity));\n}\n\n.\\[\\&\\>svg\\]\\:text-white > svg {\n --tw-text-opacity: 1;\n color: rgb(var(--color-white) / var(--tw-text-opacity));\n}\n\n.\\[\\&\\>svg\\]\\:dark\\:text-black:where(.dark-theme, .dark-theme *) > svg {\n --tw-text-opacity: 1;\n color: rgb(var(--color-black) / var(--tw-text-opacity));\n}\n\n.\\[\\&_\\[cmdk-group-heading\\]\\]\\:px-2 [cmdk-group-heading] {\n padding-left: .5rem;\n padding-right: .5rem;\n}\n\n.\\[\\&_\\[cmdk-group-heading\\]\\]\\:py-1\\.5 [cmdk-group-heading] {\n padding-top: .375rem;\n padding-bottom: .375rem;\n}\n\n.\\[\\&_\\[cmdk-group-heading\\]\\]\\:text-sm [cmdk-group-heading] {\n letter-spacing: -.02em;\n font-size: 14px;\n line-height: 20px;\n}\n\n.\\[\\&_\\[cmdk-group-heading\\]\\]\\:font-medium [cmdk-group-heading] {\n font-weight: 500;\n}\n\n.\\[\\&_\\[cmdk-group-heading\\]\\]\\:text-black [cmdk-group-heading] {\n --tw-text-opacity: 1;\n color: rgb(var(--color-black) / var(--tw-text-opacity));\n}\n\n.\\[\\&_tr\\:active\\]\\:bg-gray-50 tr:active, .\\[\\&_tr\\:hover\\:active\\]\\:bg-gray-50 tr:hover:active {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-gray-50) / var(--tw-bg-opacity));\n}\n\n.\\[\\&_tr\\:hover\\]\\:bg-gray-25 tr:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-gray-25) / var(--tw-bg-opacity));\n}\n\n.\\[\\&_tr\\:last-child\\]\\:border-0 tr:last-child {\n border-width: 0;\n}\n\n.\\[\\&_tr\\]\\:border-b tr {\n border-bottom-width: 1px;\n}\n\n.dark-theme .\\[\\.dark-theme_\\&\\]\\:bg-gray-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-gray-50) / var(--tw-bg-opacity));\n}\n";
|
|
16002
|
+
$54541b0286afc2de$exports = "*, :before, :after, ::backdrop {\n --tw-border-spacing-x: 0;\n --tw-border-spacing-y: 0;\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-rotate: 0;\n --tw-skew-x: 0;\n --tw-skew-y: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-pan-x: ;\n --tw-pan-y: ;\n --tw-pinch-zoom: ;\n --tw-scroll-snap-strictness: proximity;\n --tw-gradient-from-position: ;\n --tw-gradient-via-position: ;\n --tw-gradient-to-position: ;\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: #93c5fd80;\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 --tw-contain-size: ;\n --tw-contain-layout: ;\n --tw-contain-paint: ;\n --tw-contain-style: ;\n}\n\n.container {\n width: 100%;\n}\n\n@media (width >= 640px) {\n .container {\n max-width: 640px;\n }\n}\n\n@media (width >= 768px) {\n .container {\n max-width: 768px;\n }\n}\n\n@media (width >= 1024px) {\n .container {\n max-width: 1024px;\n }\n}\n\n@media (width >= 1280px) {\n .container {\n max-width: 1280px;\n }\n}\n\n@media (width >= 1536px) {\n .container {\n max-width: 1536px;\n }\n}\n\n.sr-only {\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border-width: 0;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n position: absolute;\n overflow: hidden;\n}\n\n.pointer-events-none {\n pointer-events: none;\n}\n\n.pointer-events-auto {\n pointer-events: auto;\n}\n\n.visible {\n visibility: visible;\n}\n\n.invisible {\n visibility: hidden;\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.inset-x-0 {\n left: 0;\n right: 0;\n}\n\n.inset-y-0 {\n top: 0;\n bottom: 0;\n}\n\n.-bottom-12 {\n bottom: -3rem;\n}\n\n.-left-12 {\n left: -3rem;\n}\n\n.-right-12 {\n right: -3rem;\n}\n\n.-top-12 {\n top: -3rem;\n}\n\n.bottom-0 {\n bottom: 0;\n}\n\n.bottom-2 {\n bottom: .5rem;\n}\n\n.left-0 {\n left: 0;\n}\n\n.left-1 {\n left: .25rem;\n}\n\n.left-1\\/2 {\n left: 50%;\n}\n\n.left-2 {\n left: .5rem;\n}\n\n.left-\\[50\\%\\] {\n left: 50%;\n}\n\n.right-0 {\n right: 0;\n}\n\n.right-1 {\n right: .25rem;\n}\n\n.right-2 {\n right: .5rem;\n}\n\n.right-6 {\n right: 1.5rem;\n}\n\n.top-0 {\n top: 0;\n}\n\n.top-1\\/2 {\n top: 50%;\n}\n\n.top-2 {\n top: .5rem;\n}\n\n.top-6 {\n top: 1.5rem;\n}\n\n.top-8 {\n top: 2rem;\n}\n\n.top-\\[50\\%\\] {\n top: 50%;\n}\n\n.top-auto {\n top: auto;\n}\n\n.z-20 {\n z-index: 20;\n}\n\n.z-30 {\n z-index: 30;\n}\n\n.z-40 {\n z-index: 40;\n}\n\n.z-50 {\n z-index: 50;\n}\n\n.z-\\[100\\] {\n z-index: 100;\n}\n\n.z-\\[150\\] {\n z-index: 150;\n}\n\n.z-\\[35\\] {\n z-index: 35;\n}\n\n.-mx-1 {\n margin-left: -.25rem;\n margin-right: -.25rem;\n}\n\n.mx-1 {\n margin-left: .25rem;\n margin-right: .25rem;\n}\n\n.mx-auto {\n margin-left: auto;\n margin-right: auto;\n}\n\n.my-1 {\n margin-top: .25rem;\n margin-bottom: .25rem;\n}\n\n.-ml-4 {\n margin-left: -1rem;\n}\n\n.-mr-2 {\n margin-right: -.5rem;\n}\n\n.-mt-4 {\n margin-top: -1rem;\n}\n\n.mb-2 {\n margin-bottom: .5rem;\n}\n\n.mb-4 {\n margin-bottom: 1rem;\n}\n\n.mb-6 {\n margin-bottom: 1.5rem;\n}\n\n.mb-\\[9px\\] {\n margin-bottom: 9px;\n}\n\n.ml-1 {\n margin-left: .25rem;\n}\n\n.mr-2 {\n margin-right: .5rem;\n}\n\n.mr-2\\.5 {\n margin-right: .625rem;\n}\n\n.mr-9 {\n margin-right: 2.25rem;\n}\n\n.mt-1 {\n margin-top: .25rem;\n}\n\n.mt-2 {\n margin-top: .5rem;\n}\n\n.box-border {\n box-sizing: border-box;\n}\n\n.line-clamp-2 {\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n display: -webkit-box;\n overflow: hidden;\n}\n\n.block {\n display: block;\n}\n\n.inline-block {\n display: inline-block;\n}\n\n.inline {\n display: inline;\n}\n\n.flex {\n display: flex;\n}\n\n.inline-flex {\n display: inline-flex;\n}\n\n.table {\n display: table;\n}\n\n.grid {\n display: grid;\n}\n\n.hidden {\n display: none;\n}\n\n.aspect-square {\n aspect-ratio: 1;\n}\n\n.h-1\\/3 {\n height: 33.3333%;\n}\n\n.h-10 {\n height: 2.5rem;\n}\n\n.h-12 {\n height: 3rem;\n}\n\n.h-14 {\n height: 3.5rem;\n}\n\n.h-16 {\n height: 4rem;\n}\n\n.h-2 {\n height: .5rem;\n}\n\n.h-3 {\n height: .75rem;\n}\n\n.h-4 {\n height: 1rem;\n}\n\n.h-6 {\n height: 1.5rem;\n}\n\n.h-8 {\n height: 2rem;\n}\n\n.h-9 {\n height: 2.25rem;\n}\n\n.h-\\[100px\\] {\n height: 100px;\n}\n\n.h-\\[150px\\] {\n height: 150px;\n}\n\n.h-\\[16px\\] {\n height: 16px;\n}\n\n.h-\\[184px\\] {\n height: 184px;\n}\n\n.h-\\[1px\\] {\n height: 1px;\n}\n\n.h-\\[200px\\] {\n height: 200px;\n}\n\n.h-\\[226px\\] {\n height: 226px;\n}\n\n.h-\\[24px\\] {\n height: 24px;\n}\n\n.h-\\[36px\\] {\n height: 36px;\n}\n\n.h-\\[400px\\] {\n height: 400px;\n}\n\n.h-\\[45px\\] {\n height: 45px;\n}\n\n.h-\\[52px\\] {\n height: 52px;\n}\n\n.h-\\[54px\\] {\n height: 54px;\n}\n\n.h-\\[70px\\] {\n height: 70px;\n}\n\n.h-\\[72px\\] {\n height: 72px;\n}\n\n.h-\\[8px\\] {\n height: 8px;\n}\n\n.h-\\[var\\(--radix-select-trigger-height\\)\\] {\n height: var(--radix-select-trigger-height);\n}\n\n.h-full {\n height: 100%;\n}\n\n.h-px {\n height: 1px;\n}\n\n.h-screen {\n height: 100vh;\n}\n\n.max-h-\\[180px\\] {\n max-height: 180px;\n}\n\n.max-h-\\[300px\\] {\n max-height: 300px;\n}\n\n.max-h-\\[70px\\] {\n max-height: 70px;\n}\n\n.max-h-\\[75vh\\] {\n max-height: 75vh;\n}\n\n.max-h-\\[80vh\\] {\n max-height: 80vh;\n}\n\n.max-h-\\[90\\%\\] {\n max-height: 90%;\n}\n\n.max-h-\\[90vh\\] {\n max-height: 90vh;\n}\n\n.max-h-full {\n max-height: 100%;\n}\n\n.max-h-screen {\n max-height: 100vh;\n}\n\n.min-h-0 {\n min-height: 0;\n}\n\n.min-h-9 {\n min-height: 2.25rem;\n}\n\n.min-h-\\[20px\\] {\n min-height: 20px;\n}\n\n.min-h-\\[80px\\] {\n min-height: 80px;\n}\n\n.w-1\\/3 {\n width: 33.3333%;\n}\n\n.w-10 {\n width: 2.5rem;\n}\n\n.w-12 {\n width: 3rem;\n}\n\n.w-16 {\n width: 4rem;\n}\n\n.w-2 {\n width: .5rem;\n}\n\n.w-3 {\n width: .75rem;\n}\n\n.w-3\\/4 {\n width: 75%;\n}\n\n.w-4 {\n width: 1rem;\n}\n\n.w-6 {\n width: 1.5rem;\n}\n\n.w-72 {\n width: 18rem;\n}\n\n.w-8 {\n width: 2rem;\n}\n\n.w-\\[100px\\] {\n width: 100px;\n}\n\n.w-\\[16px\\] {\n width: 16px;\n}\n\n.w-\\[232px\\] {\n width: 232px;\n}\n\n.w-\\[240px\\] {\n width: 240px;\n}\n\n.w-\\[24px\\] {\n width: 24px;\n}\n\n.w-\\[326px\\] {\n width: 326px;\n}\n\n.w-\\[334px\\] {\n width: 334px;\n}\n\n.w-\\[360px\\] {\n width: 360px;\n}\n\n.w-\\[36px\\] {\n width: 36px;\n}\n\n.w-\\[400px\\] {\n width: 400px;\n}\n\n.w-\\[42px\\] {\n width: 42px;\n}\n\n.w-\\[45px\\] {\n width: 45px;\n}\n\n.w-\\[54px\\] {\n width: 54px;\n}\n\n.w-\\[70px\\] {\n width: 70px;\n}\n\n.w-\\[72px\\] {\n width: 72px;\n}\n\n.w-\\[8px\\] {\n width: 8px;\n}\n\n.w-auto {\n width: auto;\n}\n\n.w-fit {\n width: fit-content;\n}\n\n.w-full {\n width: 100%;\n}\n\n.w-max {\n width: max-content;\n}\n\n.min-w-0 {\n min-width: 0;\n}\n\n.min-w-\\[144px\\] {\n min-width: 144px;\n}\n\n.min-w-\\[var\\(--radix-select-trigger-width\\)\\] {\n min-width: var(--radix-select-trigger-width);\n}\n\n.min-w-full {\n min-width: 100%;\n}\n\n.max-w-\\[315px\\] {\n max-width: 315px;\n}\n\n.max-w-\\[400px\\] {\n max-width: 400px;\n}\n\n.max-w-\\[500px\\] {\n max-width: 500px;\n}\n\n.max-w-\\[70px\\] {\n max-width: 70px;\n}\n\n.max-w-\\[800px\\] {\n max-width: 800px;\n}\n\n.max-w-\\[90\\%\\] {\n max-width: 90%;\n}\n\n.max-w-\\[90vw\\] {\n max-width: 90vw;\n}\n\n.max-w-full {\n max-width: 100%;\n}\n\n.flex-1 {\n flex: 1;\n}\n\n.flex-shrink-0, .shrink-0 {\n flex-shrink: 0;\n}\n\n.flex-grow, .grow {\n flex-grow: 1;\n}\n\n.grow-0 {\n flex-grow: 0;\n}\n\n.basis-full {\n flex-basis: 100%;\n}\n\n.caption-bottom {\n caption-side: bottom;\n}\n\n.border-collapse {\n border-collapse: collapse;\n}\n\n.-translate-x-1\\/2 {\n --tw-translate-x: -50%;\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-1\\/2 {\n --tw-translate-y: -50%;\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-x-0 {\n --tw-translate-x: 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-x-0\\.5 {\n --tw-translate-x: .125rem;\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-x-\\[-50\\%\\] {\n --tw-translate-x: -50%;\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-\\[-50\\%\\] {\n --tw-translate-y: -50%;\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.rotate-180 {\n --tw-rotate: 180deg;\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\\], .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@keyframes flash {\n 0% {\n opacity: .9;\n }\n\n 100% {\n opacity: 0;\n }\n}\n\n.animate-flash {\n animation: .8s forwards flash;\n}\n\n@keyframes pulse {\n 50% {\n opacity: .5;\n }\n}\n\n.animate-pulse {\n animation: 2s cubic-bezier(.4, 0, .6, 1) infinite pulse;\n}\n\n@keyframes spin {\n to {\n transform: rotate(360deg);\n }\n}\n\n.animate-spin {\n animation: 1s linear infinite spin;\n}\n\n.cursor-default {\n cursor: default;\n}\n\n.cursor-not-allowed {\n cursor: not-allowed;\n}\n\n.cursor-pointer {\n cursor: pointer;\n}\n\n.select-none {\n -webkit-user-select: none;\n user-select: none;\n}\n\n.list-outside {\n list-style-position: outside;\n}\n\n.list-disc {\n list-style-type: disc;\n}\n\n.appearance-none {\n appearance: none;\n}\n\n.grid-cols-1 {\n grid-template-columns: repeat(1, minmax(0, 1fr));\n}\n\n.grid-cols-2 {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n}\n\n.grid-rows-\\[1fr_min-content\\] {\n grid-template-rows: 1fr min-content;\n}\n\n.flex-row {\n flex-direction: row;\n}\n\n.flex-row-reverse {\n flex-direction: row-reverse;\n}\n\n.flex-col {\n flex-direction: column;\n}\n\n.flex-col-reverse {\n flex-direction: column-reverse;\n}\n\n.flex-wrap {\n flex-wrap: wrap;\n}\n\n.items-start {\n align-items: flex-start;\n}\n\n.items-end {\n align-items: flex-end;\n}\n\n.items-center {\n align-items: center;\n}\n\n.items-stretch {\n align-items: stretch;\n}\n\n.justify-start {\n justify-content: flex-start;\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-0 {\n gap: 0;\n}\n\n.gap-0\\.5 {\n gap: .125rem;\n}\n\n.gap-1 {\n gap: .25rem;\n}\n\n.gap-1\\.5 {\n gap: .375rem;\n}\n\n.gap-12 {\n gap: 3rem;\n}\n\n.gap-2 {\n gap: .5rem;\n}\n\n.gap-2\\.5 {\n gap: .625rem;\n}\n\n.gap-3 {\n gap: .75rem;\n}\n\n.gap-4 {\n gap: 1rem;\n}\n\n.gap-6 {\n gap: 1.5rem;\n}\n\n.gap-8 {\n gap: 2rem;\n}\n\n.gap-\\[inherit\\] {\n gap: inherit;\n}\n\n.space-x-1 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-x-reverse: 0;\n margin-right: calc(.25rem * var(--tw-space-x-reverse));\n margin-left: calc(.25rem * calc(1 - var(--tw-space-x-reverse)));\n}\n\n.space-y-1 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(.25rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(.25rem * var(--tw-space-y-reverse));\n}\n\n.space-y-1\\.5 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(.375rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(.375rem * var(--tw-space-y-reverse));\n}\n\n.space-y-4 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(1rem * var(--tw-space-y-reverse));\n}\n\n.space-y-5 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(1.25rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(1.25rem * var(--tw-space-y-reverse));\n}\n\n.space-y-6 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(1.5rem * var(--tw-space-y-reverse));\n}\n\n.divide-x > :not([hidden]) ~ :not([hidden]) {\n --tw-divide-x-reverse: 0;\n border-right-width: calc(1px * var(--tw-divide-x-reverse));\n border-left-width: calc(1px * calc(1 - var(--tw-divide-x-reverse)));\n}\n\n.divide-y > :not([hidden]) ~ :not([hidden]) {\n --tw-divide-y-reverse: 0;\n border-top-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));\n border-bottom-width: calc(1px * var(--tw-divide-y-reverse));\n}\n\n.divide-gray-200 > :not([hidden]) ~ :not([hidden]) {\n --tw-divide-opacity: 1;\n border-color: rgb(var(--color-gray-200) / var(--tw-divide-opacity));\n}\n\n.self-start {\n align-self: flex-start;\n}\n\n.self-end {\n align-self: flex-end;\n}\n\n.self-center {\n align-self: center;\n}\n\n.overflow-auto {\n overflow: auto;\n}\n\n.overflow-hidden {\n overflow: hidden;\n}\n\n.overflow-visible {\n overflow: visible;\n}\n\n.overflow-y-auto {\n overflow-y: auto;\n}\n\n.overflow-x-hidden {\n overflow-x: hidden;\n}\n\n.overflow-y-scroll {\n overflow-y: scroll;\n}\n\n.truncate {\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n}\n\n.whitespace-normal {\n white-space: normal;\n}\n\n.whitespace-nowrap {\n white-space: nowrap;\n}\n\n.whitespace-pre-line {\n white-space: pre-line;\n}\n\n.whitespace-pre-wrap {\n white-space: pre-wrap;\n}\n\n.rounded {\n border-radius: .25rem;\n}\n\n.rounded-2xl {\n border-radius: 1rem;\n}\n\n.rounded-3xl {\n border-radius: 1.5rem;\n}\n\n.rounded-\\[10px\\] {\n border-radius: 10px;\n}\n\n.rounded-\\[3px\\] {\n border-radius: 3px;\n}\n\n.rounded-\\[4px\\] {\n border-radius: 4px;\n}\n\n.rounded-\\[6px\\] {\n border-radius: 6px;\n}\n\n.rounded-\\[8px\\] {\n border-radius: 8px;\n}\n\n.rounded-\\[inherit\\] {\n border-radius: inherit;\n}\n\n.rounded-full {\n border-radius: 9999px;\n}\n\n.rounded-lg {\n border-radius: .5rem;\n}\n\n.rounded-md {\n border-radius: .375rem;\n}\n\n.rounded-xl {\n border-radius: .75rem;\n}\n\n.rounded-b-3xl {\n border-bottom-right-radius: 1.5rem;\n border-bottom-left-radius: 1.5rem;\n}\n\n.rounded-t-3xl {\n border-top-left-radius: 1.5rem;\n border-top-right-radius: 1.5rem;\n}\n\n.border {\n border-width: 1px;\n}\n\n.border-0 {\n border-width: 0;\n}\n\n.border-2 {\n border-width: 2px;\n}\n\n.border-b {\n border-bottom-width: 1px;\n}\n\n.border-l {\n border-left-width: 1px;\n}\n\n.border-r {\n border-right-width: 1px;\n}\n\n.border-t {\n border-top-width: 1px;\n}\n\n.border-amber-700 {\n --tw-border-opacity: 1;\n border-color: rgb(var(--color-amber-700) / var(--tw-border-opacity));\n}\n\n.border-black\\/10 {\n border-color: rgb(var(--color-black) / .1);\n}\n\n.border-blue-700 {\n --tw-border-opacity: 1;\n border-color: rgb(var(--color-blue-700) / var(--tw-border-opacity));\n}\n\n.border-gray-100 {\n --tw-border-opacity: 1;\n border-color: rgb(var(--color-gray-100) / var(--tw-border-opacity));\n}\n\n.border-gray-1000 {\n --tw-border-opacity: 1;\n border-color: rgb(var(--color-gray-1000) / var(--tw-border-opacity));\n}\n\n.border-gray-200 {\n --tw-border-opacity: 1;\n border-color: rgb(var(--color-gray-200) / var(--tw-border-opacity));\n}\n\n.border-gray-400 {\n --tw-border-opacity: 1;\n border-color: rgb(var(--color-gray-400) / var(--tw-border-opacity));\n}\n\n.border-gray-600 {\n --tw-border-opacity: 1;\n border-color: rgb(var(--color-gray-600) / var(--tw-border-opacity));\n}\n\n.border-red-700 {\n --tw-border-opacity: 1;\n border-color: rgb(var(--color-red-700) / var(--tw-border-opacity));\n}\n\n.border-white\\/10 {\n border-color: rgb(var(--color-white) / .1);\n}\n\n.bg-\\[\\#292929\\] {\n --tw-bg-opacity: 1;\n background-color: rgb(41 41 41 / var(--tw-bg-opacity));\n}\n\n.bg-amber-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-amber-100) / var(--tw-bg-opacity));\n}\n\n.bg-amber-200 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-amber-200) / var(--tw-bg-opacity));\n}\n\n.bg-amber-700 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-amber-700) / var(--tw-bg-opacity));\n}\n\n.bg-black {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-black) / var(--tw-bg-opacity));\n}\n\n.bg-black\\/25 {\n background-color: rgb(var(--color-black) / .25);\n}\n\n.bg-black\\/50 {\n background-color: rgb(var(--color-black) / .5);\n}\n\n.bg-black\\/80 {\n background-color: rgb(var(--color-black) / .8);\n}\n\n.bg-blue-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-blue-100) / var(--tw-bg-opacity));\n}\n\n.bg-blue-300 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-blue-300) / var(--tw-bg-opacity));\n}\n\n.bg-blue-700 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-blue-700) / var(--tw-bg-opacity));\n}\n\n.bg-bronze-300 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-bronze-300) / var(--tw-bg-opacity));\n}\n\n.bg-brown-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-brown-100) / var(--tw-bg-opacity));\n}\n\n.bg-brown-300 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-brown-300) / var(--tw-bg-opacity));\n}\n\n.bg-brown-700 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-brown-700) / var(--tw-bg-opacity));\n}\n\n.bg-crimson-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-crimson-100) / var(--tw-bg-opacity));\n}\n\n.bg-crimson-300 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-crimson-300) / var(--tw-bg-opacity));\n}\n\n.bg-crimson-700 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-crimson-700) / var(--tw-bg-opacity));\n}\n\n.bg-cyan-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-cyan-100) / var(--tw-bg-opacity));\n}\n\n.bg-cyan-300 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-cyan-300) / var(--tw-bg-opacity));\n}\n\n.bg-cyan-700 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-cyan-700) / var(--tw-bg-opacity));\n}\n\n.bg-gold-300 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-gold-300) / var(--tw-bg-opacity));\n}\n\n.bg-grass-300 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-grass-300) / var(--tw-bg-opacity));\n}\n\n.bg-gray-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-gray-100) / var(--tw-bg-opacity));\n}\n\n.bg-gray-100\\/50 {\n background-color: rgb(var(--color-gray-100) / .5);\n}\n\n.bg-gray-1000 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-gray-1000) / var(--tw-bg-opacity));\n}\n\n.bg-gray-200 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-gray-200) / var(--tw-bg-opacity));\n}\n\n.bg-gray-25 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-gray-25) / var(--tw-bg-opacity));\n}\n\n.bg-gray-25\\/50 {\n background-color: rgb(var(--color-gray-25) / .5);\n}\n\n.bg-gray-300 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-gray-300) / var(--tw-bg-opacity));\n}\n\n.bg-gray-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-gray-50) / var(--tw-bg-opacity));\n}\n\n.bg-gray-600 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-gray-600) / var(--tw-bg-opacity));\n}\n\n.bg-gray-800\\/60 {\n background-color: rgb(var(--color-gray-800) / .6);\n}\n\n.bg-gray-900 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-gray-900) / var(--tw-bg-opacity));\n}\n\n.bg-green-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-green-100) / var(--tw-bg-opacity));\n}\n\n.bg-green-300 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-green-300) / var(--tw-bg-opacity));\n}\n\n.bg-green-700 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-green-700) / var(--tw-bg-opacity));\n}\n\n.bg-indigo-300 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-indigo-300) / var(--tw-bg-opacity));\n}\n\n.bg-lime-300 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-lime-300) / var(--tw-bg-opacity));\n}\n\n.bg-orange-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-orange-100) / var(--tw-bg-opacity));\n}\n\n.bg-orange-700 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-orange-700) / var(--tw-bg-opacity));\n}\n\n.bg-plum-300 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-plum-300) / var(--tw-bg-opacity));\n}\n\n.bg-purple-300 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-purple-300) / var(--tw-bg-opacity));\n}\n\n.bg-red-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-red-100) / var(--tw-bg-opacity));\n}\n\n.bg-red-300 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-red-300) / var(--tw-bg-opacity));\n}\n\n.bg-red-700 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-red-700) / var(--tw-bg-opacity));\n}\n\n.bg-red-700\\/60 {\n background-color: rgb(var(--color-red-700) / .6);\n}\n\n.bg-teal-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-teal-100) / var(--tw-bg-opacity));\n}\n\n.bg-teal-300 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-teal-300) / var(--tw-bg-opacity));\n}\n\n.bg-teal-700 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-teal-700) / var(--tw-bg-opacity));\n}\n\n.bg-transparent {\n background-color: #0000;\n}\n\n.bg-violet-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-violet-100) / var(--tw-bg-opacity));\n}\n\n.bg-violet-300 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-violet-300) / var(--tw-bg-opacity));\n}\n\n.bg-violet-700 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-violet-700) / var(--tw-bg-opacity));\n}\n\n.bg-white {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-white) / var(--tw-bg-opacity));\n}\n\n.bg-white\\/60 {\n background-color: rgb(var(--color-white) / .6);\n}\n\n.bg-yellow-300 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-yellow-300) / var(--tw-bg-opacity));\n}\n\n.bg-cover {\n background-size: cover;\n}\n\n.bg-center {\n background-position: center;\n}\n\n.fill-white {\n fill: rgb(var(--color-white) / 1);\n}\n\n.object-contain {\n object-fit: contain;\n}\n\n.object-cover {\n object-fit: cover;\n}\n\n.p-0 {\n padding: 0;\n}\n\n.p-1 {\n padding: .25rem;\n}\n\n.p-1\\.5 {\n padding: .375rem;\n}\n\n.p-2 {\n padding: .5rem;\n}\n\n.p-2\\.5 {\n padding: .625rem;\n}\n\n.p-3 {\n padding: .75rem;\n}\n\n.p-4 {\n padding: 1rem;\n}\n\n.p-5 {\n padding: 1.25rem;\n}\n\n.p-6 {\n padding: 1.5rem;\n}\n\n.p-8 {\n padding: 2rem;\n}\n\n.p-\\[11px\\] {\n padding: 11px;\n}\n\n.px-1 {\n padding-left: .25rem;\n padding-right: .25rem;\n}\n\n.px-2 {\n padding-left: .5rem;\n padding-right: .5rem;\n}\n\n.px-2\\.5 {\n padding-left: .625rem;\n padding-right: .625rem;\n}\n\n.px-3 {\n padding-left: .75rem;\n padding-right: .75rem;\n}\n\n.px-3\\.5 {\n padding-left: .875rem;\n padding-right: .875rem;\n}\n\n.px-4 {\n padding-left: 1rem;\n padding-right: 1rem;\n}\n\n.px-8 {\n padding-left: 2rem;\n padding-right: 2rem;\n}\n\n.py-0 {\n padding-top: 0;\n padding-bottom: 0;\n}\n\n.py-0\\.5 {\n padding-top: .125rem;\n padding-bottom: .125rem;\n}\n\n.py-1 {\n padding-top: .25rem;\n padding-bottom: .25rem;\n}\n\n.py-1\\.5 {\n padding-top: .375rem;\n padding-bottom: .375rem;\n}\n\n.py-12 {\n padding-top: 3rem;\n padding-bottom: 3rem;\n}\n\n.py-2 {\n padding-top: .5rem;\n padding-bottom: .5rem;\n}\n\n.py-2\\.5 {\n padding-top: .625rem;\n padding-bottom: .625rem;\n}\n\n.py-3 {\n padding-top: .75rem;\n padding-bottom: .75rem;\n}\n\n.pb-2 {\n padding-bottom: .5rem;\n}\n\n.pb-3 {\n padding-bottom: .75rem;\n}\n\n.pb-\\[9px\\] {\n padding-bottom: 9px;\n}\n\n.pl-2 {\n padding-left: .5rem;\n}\n\n.pl-3 {\n padding-left: .75rem;\n}\n\n.pl-4 {\n padding-left: 1rem;\n}\n\n.pr-2 {\n padding-right: .5rem;\n}\n\n.pr-3 {\n padding-right: .75rem;\n}\n\n.pr-3\\.5 {\n padding-right: .875rem;\n}\n\n.pt-1 {\n padding-top: .25rem;\n}\n\n.pt-10 {\n padding-top: 2.5rem;\n}\n\n.pt-4 {\n padding-top: 1rem;\n}\n\n.text-left {\n text-align: left;\n}\n\n.text-center {\n text-align: center;\n}\n\n.align-middle {\n vertical-align: middle;\n}\n\n.text-2xl {\n letter-spacing: -.02em;\n font-size: 24px;\n line-height: 32px;\n}\n\n.text-3xl {\n letter-spacing: -.02em;\n font-size: 30px;\n line-height: 38px;\n}\n\n.text-4xl {\n letter-spacing: -.02em;\n font-size: 36px;\n line-height: 44px;\n}\n\n.text-\\[10px\\] {\n font-size: 10px;\n}\n\n.text-\\[30px\\] {\n font-size: 30px;\n}\n\n.text-\\[96px\\] {\n font-size: 96px;\n}\n\n.text-lg {\n letter-spacing: -.02em;\n font-size: 18px;\n line-height: 22px;\n}\n\n.text-md {\n letter-spacing: -.02em;\n font-size: 16px;\n line-height: 20px;\n}\n\n.text-sm {\n letter-spacing: -.02em;\n font-size: 14px;\n line-height: 20px;\n}\n\n.text-xs {\n letter-spacing: -.02em;\n font-size: 12px;\n line-height: 16px;\n}\n\n.font-bold {\n font-weight: 700;\n}\n\n.font-medium {\n font-weight: 500;\n}\n\n.font-normal {\n font-weight: 400;\n}\n\n.font-semibold {\n font-weight: 600;\n}\n\n.leading-none {\n line-height: 1;\n}\n\n.text-\\[\\#707070\\] {\n --tw-text-opacity: 1;\n color: rgb(112 112 112 / var(--tw-text-opacity));\n}\n\n.text-amber-700 {\n --tw-text-opacity: 1;\n color: rgb(var(--color-amber-700) / var(--tw-text-opacity));\n}\n\n.text-black {\n --tw-text-opacity: 1;\n color: rgb(var(--color-black) / var(--tw-text-opacity));\n}\n\n.text-blue-700 {\n --tw-text-opacity: 1;\n color: rgb(var(--color-blue-700) / var(--tw-text-opacity));\n}\n\n.text-bronze-700 {\n --tw-text-opacity: 1;\n color: rgb(var(--color-bronze-700) / var(--tw-text-opacity));\n}\n\n.text-brown-700 {\n --tw-text-opacity: 1;\n color: rgb(var(--color-brown-700) / var(--tw-text-opacity));\n}\n\n.text-crimson-700 {\n --tw-text-opacity: 1;\n color: rgb(var(--color-crimson-700) / var(--tw-text-opacity));\n}\n\n.text-current {\n color: currentColor;\n}\n\n.text-cyan-700 {\n --tw-text-opacity: 1;\n color: rgb(var(--color-cyan-700) / var(--tw-text-opacity));\n}\n\n.text-gold-700 {\n --tw-text-opacity: 1;\n color: rgb(var(--color-gold-700) / var(--tw-text-opacity));\n}\n\n.text-grass-700 {\n --tw-text-opacity: 1;\n color: rgb(var(--color-grass-700) / var(--tw-text-opacity));\n}\n\n.text-gray-1000 {\n --tw-text-opacity: 1;\n color: rgb(var(--color-gray-1000) / var(--tw-text-opacity));\n}\n\n.text-gray-400 {\n --tw-text-opacity: 1;\n color: rgb(var(--color-gray-400) / var(--tw-text-opacity));\n}\n\n.text-gray-700 {\n --tw-text-opacity: 1;\n color: rgb(var(--color-gray-700) / var(--tw-text-opacity));\n}\n\n.text-gray-900 {\n --tw-text-opacity: 1;\n color: rgb(var(--color-gray-900) / var(--tw-text-opacity));\n}\n\n.text-green-700 {\n --tw-text-opacity: 1;\n color: rgb(var(--color-green-700) / var(--tw-text-opacity));\n}\n\n.text-indigo-700 {\n --tw-text-opacity: 1;\n color: rgb(var(--color-indigo-700) / var(--tw-text-opacity));\n}\n\n.text-inherit {\n color: inherit;\n}\n\n.text-lime-700 {\n --tw-text-opacity: 1;\n color: rgb(var(--color-lime-700) / var(--tw-text-opacity));\n}\n\n.text-orange-700 {\n --tw-text-opacity: 1;\n color: rgb(var(--color-orange-700) / var(--tw-text-opacity));\n}\n\n.text-plum-700 {\n --tw-text-opacity: 1;\n color: rgb(var(--color-plum-700) / 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-purple-700 {\n --tw-text-opacity: 1;\n color: rgb(var(--color-purple-700) / var(--tw-text-opacity));\n}\n\n.text-red-700 {\n --tw-text-opacity: 1;\n color: rgb(var(--color-red-700) / var(--tw-text-opacity));\n}\n\n.text-teal-700 {\n --tw-text-opacity: 1;\n color: rgb(var(--color-teal-700) / var(--tw-text-opacity));\n}\n\n.text-violet-700 {\n --tw-text-opacity: 1;\n color: rgb(var(--color-violet-700) / var(--tw-text-opacity));\n}\n\n.text-white {\n --tw-text-opacity: 1;\n color: rgb(var(--color-white) / var(--tw-text-opacity));\n}\n\n.text-yellow-700 {\n --tw-text-opacity: 1;\n color: rgb(var(--color-yellow-700) / 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-40 {\n opacity: .4;\n}\n\n.opacity-50 {\n opacity: .5;\n}\n\n.opacity-60 {\n opacity: .6;\n}\n\n.shadow-dropdown-sm {\n --tw-shadow: 0px 1px 2px 0px #1018280f, 0px 1px 3px 0px #1018281a;\n --tw-shadow-colored: 0px 1px 2px 0px var(--tw-shadow-color), 0px 1px 3px 0px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n\n.shadow-lg {\n --tw-shadow: 0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a;\n --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n\n.shadow-md {\n --tw-shadow: 0 4px 6px -1px #0000001a, 0 2px 4px -2px #0000001a;\n --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n\n.shadow-sm {\n --tw-shadow: 0 1px 2px 0 #0000000d;\n --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n\n.outline-none {\n outline-offset: 2px;\n outline: 2px solid #0000;\n}\n\n.outline {\n outline-style: solid;\n}\n\n.ring-1 {\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(1px + 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-2 {\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(2px + 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-4 {\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(4px + 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-\\[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-inset {\n --tw-ring-inset: inset;\n}\n\n.ring-amber-300 {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(var(--color-amber-300) / var(--tw-ring-opacity));\n}\n\n.ring-black {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(var(--color-black) / var(--tw-ring-opacity));\n}\n\n.ring-blue-300 {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(var(--color-blue-300) / var(--tw-ring-opacity));\n}\n\n.ring-blue-700 {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(var(--color-blue-700) / var(--tw-ring-opacity));\n}\n\n.ring-brown-300 {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(var(--color-brown-300) / var(--tw-ring-opacity));\n}\n\n.ring-crimson-300 {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(var(--color-crimson-300) / var(--tw-ring-opacity));\n}\n\n.ring-cyan-300 {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(var(--color-cyan-300) / var(--tw-ring-opacity));\n}\n\n.ring-gray-100 {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(var(--color-gray-100) / var(--tw-ring-opacity));\n}\n\n.ring-gray-200 {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(var(--color-gray-200) / var(--tw-ring-opacity));\n}\n\n.ring-gray-400 {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(var(--color-gray-400) / var(--tw-ring-opacity));\n}\n\n.ring-green-300 {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(var(--color-green-300) / var(--tw-ring-opacity));\n}\n\n.ring-orange-300 {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(var(--color-orange-300) / var(--tw-ring-opacity));\n}\n\n.ring-red-300 {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(var(--color-red-300) / var(--tw-ring-opacity));\n}\n\n.ring-teal-300 {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(var(--color-teal-300) / var(--tw-ring-opacity));\n}\n\n.ring-violet-300 {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(var(--color-violet-300) / var(--tw-ring-opacity));\n}\n\n.ring-white\\/20 {\n --tw-ring-color: rgb(var(--color-white) / .2);\n}\n\n.ring-offset-0 {\n --tw-ring-offset-width: 0px;\n}\n\n.ring-offset-white {\n --tw-ring-offset-color: rgb(var(--color-white) / 1);\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.backdrop-blur-\\[20px\\] {\n --tw-backdrop-blur: blur(20px);\n backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n}\n\n.backdrop-blur-\\[30px\\] {\n --tw-backdrop-blur: blur(30px);\n backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n}\n\n.backdrop-blur-lg {\n --tw-backdrop-blur: blur(16px);\n backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n}\n\n.backdrop-blur-md {\n --tw-backdrop-blur: blur(12px);\n backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n}\n\n.backdrop-blur-sm {\n --tw-backdrop-blur: blur(4px);\n backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\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-all {\n transition-property: all;\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 {\n transition-property: transform;\n transition-duration: .15s;\n transition-timing-function: cubic-bezier(.4, 0, .2, 1);\n}\n\n.duration-200 {\n transition-duration: .2s;\n}\n\n.duration-500 {\n transition-duration: .5s;\n}\n\n.duration-700 {\n transition-duration: .7s;\n}\n\n.ease-in-out {\n transition-timing-function: cubic-bezier(.4, 0, .2, 1);\n}\n\n.ease-linear {\n transition-timing-function: linear;\n}\n\n.ease-out {\n transition-timing-function: cubic-bezier(0, 0, .2, 1);\n}\n\n.will-change-transform {\n will-change: transform;\n}\n\n@keyframes enter {\n from {\n opacity: var(--tw-enter-opacity, 1);\n transform: translate3d(var(--tw-enter-translate-x, 0), var(--tw-enter-translate-y, 0), 0) scale3d(var(--tw-enter-scale, 1), var(--tw-enter-scale, 1), var(--tw-enter-scale, 1)) rotate(var(--tw-enter-rotate, 0));\n }\n}\n\n@keyframes exit {\n to {\n opacity: var(--tw-exit-opacity, 1);\n transform: translate3d(var(--tw-exit-translate-x, 0), var(--tw-exit-translate-y, 0), 0) scale3d(var(--tw-exit-scale, 1), var(--tw-exit-scale, 1), var(--tw-exit-scale, 1)) rotate(var(--tw-exit-rotate, 0));\n }\n}\n\n.animate-in {\n --tw-enter-opacity: initial;\n --tw-enter-scale: initial;\n --tw-enter-rotate: initial;\n --tw-enter-translate-x: initial;\n --tw-enter-translate-y: initial;\n animation-name: enter;\n animation-duration: .15s;\n}\n\n.fade-in, .fade-in-0 {\n --tw-enter-opacity: 0;\n}\n\n.fade-out {\n --tw-exit-opacity: 0;\n}\n\n.zoom-in-95 {\n --tw-enter-scale: .95;\n}\n\n.duration-200 {\n animation-duration: .2s;\n}\n\n.duration-500 {\n animation-duration: .5s;\n}\n\n.duration-700 {\n animation-duration: .7s;\n}\n\n.ease-in-out {\n animation-timing-function: cubic-bezier(.4, 0, .2, 1);\n}\n\n.ease-linear {\n animation-timing-function: linear;\n}\n\n.ease-out {\n animation-timing-function: cubic-bezier(0, 0, .2, 1);\n}\n\n.paused {\n animation-play-state: paused;\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.pulse-red-700 {\n animation: 2s infinite pulse-red-700;\n transform: scale(1);\n box-shadow: 0 0 #e5484d;\n}\n\n@keyframes pulse-red-700 {\n 0% {\n transform: scale(.95);\n box-shadow: 0 0 #e5484db3;\n }\n\n 70% {\n transform: scale(1);\n box-shadow: 0 0 0 6px #e5484d00;\n }\n\n 100% {\n transform: scale(.95);\n box-shadow: 0 0 #e5484d00;\n }\n}\n\n.\\*\\:rounded-\\[14px\\] > * {\n border-radius: 14px;\n}\n\n.\\*\\:bg-blue-700 > * {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-blue-700) / var(--tw-bg-opacity));\n}\n\n.\\*\\:text-white > * {\n --tw-text-opacity: 1;\n color: rgb(var(--color-white) / var(--tw-text-opacity));\n}\n\n.\\*\\:opacity-100 > * {\n opacity: 1;\n}\n\n.placeholder\\:text-gray-700::placeholder {\n --tw-text-opacity: 1;\n color: rgb(var(--color-gray-700) / var(--tw-text-opacity));\n}\n\n.placeholder\\:text-gray-900::placeholder {\n --tw-text-opacity: 1;\n color: rgb(var(--color-gray-900) / var(--tw-text-opacity));\n}\n\n.last\\:pb-0:last-child {\n padding-bottom: 0;\n}\n\n.focus-within\\:relative:focus-within {\n position: relative;\n}\n\n.focus-within\\:z-20:focus-within {\n z-index: 20;\n}\n\n.focus-within\\:border-gray-200:focus-within {\n --tw-border-opacity: 1;\n border-color: rgb(var(--color-gray-200) / var(--tw-border-opacity));\n}\n\n.focus-within\\:bg-gray-100:focus-within {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-gray-100) / var(--tw-bg-opacity));\n}\n\n.focus-within\\:outline:focus-within {\n outline-style: solid;\n}\n\n.focus-within\\:outline-\\[2px\\]:focus-within {\n outline-width: 2px;\n}\n\n.focus-within\\:outline-offset-\\[2px\\]:focus-within {\n outline-offset: 2px;\n}\n\n.focus-within\\:outline-blue-300:focus-within {\n outline-color: rgb(var(--color-blue-300) / 1);\n}\n\n.focus-within\\:outline-red-700:focus-within {\n outline-color: rgb(var(--color-red-700) / 1);\n}\n\n.hover\\:border-gray-600:hover {\n --tw-border-opacity: 1;\n border-color: rgb(var(--color-gray-600) / var(--tw-border-opacity));\n}\n\n.hover\\:bg-black\\/5:hover {\n background-color: rgb(var(--color-black) / .05);\n}\n\n.hover\\:bg-blue-100:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-blue-100) / var(--tw-bg-opacity));\n}\n\n.hover\\:bg-blue-50:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-blue-50) / var(--tw-bg-opacity));\n}\n\n.hover\\:bg-blue-800:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-blue-800) / var(--tw-bg-opacity));\n}\n\n.hover\\:bg-gray-100:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-gray-100) / var(--tw-bg-opacity));\n}\n\n.hover\\:bg-gray-100\\/75:hover {\n background-color: rgb(var(--color-gray-100) / .75);\n}\n\n.hover\\:bg-gray-200:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-gray-200) / var(--tw-bg-opacity));\n}\n\n.hover\\:bg-gray-25:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-gray-25) / var(--tw-bg-opacity));\n}\n\n.hover\\:bg-gray-50:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-gray-50) / var(--tw-bg-opacity));\n}\n\n.hover\\:bg-red-100:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-red-100) / var(--tw-bg-opacity));\n}\n\n.hover\\:bg-red-800:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-red-800) / var(--tw-bg-opacity));\n}\n\n.hover\\:text-amber-700:hover {\n --tw-text-opacity: 1;\n color: rgb(var(--color-amber-700) / var(--tw-text-opacity));\n}\n\n.hover\\:underline:hover {\n text-decoration-line: underline;\n}\n\n.hover\\:opacity-100:hover {\n opacity: 1;\n}\n\n.\\*\\:hover\\:bg-blue-700:hover > * {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-blue-700) / var(--tw-bg-opacity));\n}\n\n.\\*\\:hover\\:text-white:hover > * {\n --tw-text-opacity: 1;\n color: rgb(var(--color-white) / var(--tw-text-opacity));\n}\n\n.focus\\:bg-gray-100:focus {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-gray-100) / var(--tw-bg-opacity));\n}\n\n.focus\\:outline-none:focus {\n outline-offset: 2px;\n outline: 2px solid #0000;\n}\n\n.focus\\:ring-1:focus {\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(1px + 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.focus\\:ring-2:focus {\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(2px + 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.focus\\:ring-offset-2:focus {\n --tw-ring-offset-width: 2px;\n}\n\n.\\*\\:focus\\:bg-blue-700:focus > * {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-blue-700) / var(--tw-bg-opacity));\n}\n\n.\\*\\:focus\\:text-white:focus > * {\n --tw-text-opacity: 1;\n color: rgb(var(--color-white) / var(--tw-text-opacity));\n}\n\n.focus-visible\\:outline-none:focus-visible {\n outline-offset: 2px;\n outline: 2px solid #0000;\n}\n\n.focus-visible\\:ring-2:focus-visible {\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(2px + 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.focus-visible\\:ring-black:focus-visible {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(var(--color-black) / var(--tw-ring-opacity));\n}\n\n.focus-visible\\:ring-blue-1000:focus-visible {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(var(--color-blue-1000) / var(--tw-ring-opacity));\n}\n\n.focus-visible\\:ring-blue-300:focus-visible {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(var(--color-blue-300) / var(--tw-ring-opacity));\n}\n\n.focus-visible\\:ring-blue-700:focus-visible {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(var(--color-blue-700) / var(--tw-ring-opacity));\n}\n\n.focus-visible\\:ring-red-1000:focus-visible {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(var(--color-red-1000) / var(--tw-ring-opacity));\n}\n\n.focus-visible\\:ring-red-700:focus-visible {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(var(--color-red-700) / var(--tw-ring-opacity));\n}\n\n.focus-visible\\:ring-offset-2:focus-visible {\n --tw-ring-offset-width: 2px;\n}\n\n.active\\:bg-blue-200:active {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-blue-200) / var(--tw-bg-opacity));\n}\n\n.active\\:bg-blue-900:active {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-blue-900) / var(--tw-bg-opacity));\n}\n\n.active\\:bg-gray-100:active {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-gray-100) / var(--tw-bg-opacity));\n}\n\n.active\\:bg-gray-200:active {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-gray-200) / var(--tw-bg-opacity));\n}\n\n.active\\:bg-gray-300:active {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-gray-300) / var(--tw-bg-opacity));\n}\n\n.active\\:bg-gray-50:active {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-gray-50) / var(--tw-bg-opacity));\n}\n\n.active\\:bg-gray-500:active {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-gray-500) / var(--tw-bg-opacity));\n}\n\n.active\\:bg-red-200:active {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-red-200) / var(--tw-bg-opacity));\n}\n\n.active\\:bg-red-900:active {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-red-900) / var(--tw-bg-opacity));\n}\n\n.active\\:text-blue-900:active {\n --tw-text-opacity: 1;\n color: rgb(var(--color-blue-900) / var(--tw-text-opacity));\n}\n\n.disabled\\:pointer-events-none:disabled {\n pointer-events: none;\n}\n\n.disabled\\:cursor-not-allowed:disabled {\n cursor: not-allowed;\n}\n\n.disabled\\:select-none:disabled {\n -webkit-user-select: none;\n user-select: none;\n}\n\n.disabled\\:opacity-40:disabled {\n opacity: .4;\n}\n\n.disabled\\:opacity-50:disabled {\n opacity: .5;\n}\n\n.group\\/mediacard:focus-within .group-focus-within\\/mediacard\\:visible {\n visibility: visible;\n}\n\n.group:focus-within .group-focus-within\\:bg-gray-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-gray-100) / var(--tw-bg-opacity));\n}\n\n.group\\/mediacard:hover .group-hover\\/mediacard\\:visible, .group:hover .group-hover\\:visible {\n visibility: visible;\n}\n\n.group:hover .group-hover\\:flex {\n display: flex;\n}\n\n.group:hover .group-hover\\:bg-gray-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-gray-50) / var(--tw-bg-opacity));\n}\n\n.group:active .group-active\\:bg-gray-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-gray-100) / var(--tw-bg-opacity));\n}\n\n.peer:hover ~ .peer-hover\\:text-amber-700 {\n --tw-text-opacity: 1;\n color: rgb(var(--color-amber-700) / var(--tw-text-opacity));\n}\n\n.peer:disabled ~ .peer-disabled\\:cursor-not-allowed {\n cursor: not-allowed;\n}\n\n.peer:disabled ~ .peer-disabled\\:opacity-70 {\n opacity: .7;\n}\n\n.aria-selected\\:rounded-md[aria-selected=\"true\"] {\n border-radius: .375rem;\n}\n\n.aria-selected\\:bg-blue-100[aria-selected=\"true\"], .\\*\\:aria-selected\\:bg-blue-100[aria-selected=\"true\"] > * {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-blue-100) / var(--tw-bg-opacity));\n}\n\n.\\*\\:aria-selected\\:text-blue-700[aria-selected=\"true\"] > * {\n --tw-text-opacity: 1;\n color: rgb(var(--color-blue-700) / var(--tw-text-opacity));\n}\n\n.first\\:aria-selected\\:rounded-l-md[aria-selected=\"true\"]:first-child {\n border-top-left-radius: .375rem;\n border-bottom-left-radius: .375rem;\n}\n\n.last\\:aria-selected\\:rounded-r-md[aria-selected=\"true\"]:last-child {\n border-top-right-radius: .375rem;\n border-bottom-right-radius: .375rem;\n}\n\n.data-\\[disabled\\]\\:pointer-events-none[data-disabled] {\n pointer-events: none;\n}\n\n.data-\\[side\\=bottom\\]\\:translate-y-1[data-side=\"bottom\"] {\n --tw-translate-y: .25rem;\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.data-\\[side\\=left\\]\\:-translate-x-1[data-side=\"left\"] {\n --tw-translate-x: -.25rem;\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.data-\\[side\\=right\\]\\:translate-x-1[data-side=\"right\"] {\n --tw-translate-x: .25rem;\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.data-\\[side\\=top\\]\\:-translate-y-1[data-side=\"top\"] {\n --tw-translate-y: -.25rem;\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.data-\\[state\\=checked\\]\\:translate-x-5[data-state=\"checked\"] {\n --tw-translate-x: 1.25rem;\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.data-\\[swipe\\=cancel\\]\\:translate-x-0[data-swipe=\"cancel\"] {\n --tw-translate-x: 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.data-\\[swipe\\=end\\]\\:translate-x-\\[var\\(--radix-toast-swipe-end-x\\)\\][data-swipe=\"end\"] {\n --tw-translate-x: var(--radix-toast-swipe-end-x);\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.data-\\[swipe\\=move\\]\\:translate-x-\\[var\\(--radix-toast-swipe-move-x\\)\\][data-swipe=\"move\"] {\n --tw-translate-x: var(--radix-toast-swipe-move-x);\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@keyframes accordion-up {\n from {\n height: var(--radix-accordion-content-height);\n }\n\n to {\n height: 0;\n }\n}\n\n.data-\\[state\\=closed\\]\\:animate-accordion-up[data-state=\"closed\"] {\n animation: .2s ease-out accordion-up;\n}\n\n@keyframes accordion-down {\n from {\n height: 0;\n }\n\n to {\n height: var(--radix-accordion-content-height);\n }\n}\n\n.data-\\[state\\=open\\]\\:animate-accordion-down[data-state=\"open\"] {\n animation: .2s ease-out accordion-down;\n}\n\n.data-\\[disabled\\=true\\]\\:cursor-not-allowed[data-disabled=\"true\"], .data-\\[disabled\\]\\:cursor-not-allowed[data-disabled] {\n cursor: not-allowed;\n}\n\n.data-\\[state\\=checked\\]\\:border-blue-700[data-state=\"checked\"], .data-\\[state\\=on\\]\\:border-blue-700[data-state=\"on\"] {\n --tw-border-opacity: 1;\n border-color: rgb(var(--color-blue-700) / var(--tw-border-opacity));\n}\n\n.data-\\[disabled\\]\\:data-\\[state\\=unchecked\\]\\:bg-gray-300[data-state=\"unchecked\"][data-disabled] {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-gray-300) / var(--tw-bg-opacity));\n}\n\n.data-\\[selected\\=true\\]\\:bg-gray-50[data-selected=\"true\"] {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-gray-50) / var(--tw-bg-opacity));\n}\n\n.data-\\[size\\=xxs\\]\\:bg-amber-700[data-size=\"xxs\"] {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-amber-700) / var(--tw-bg-opacity));\n}\n\n.data-\\[size\\=xxs\\]\\:bg-blue-700[data-size=\"xxs\"] {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-blue-700) / var(--tw-bg-opacity));\n}\n\n.data-\\[size\\=xxs\\]\\:bg-bronze-700[data-size=\"xxs\"] {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-bronze-700) / var(--tw-bg-opacity));\n}\n\n.data-\\[size\\=xxs\\]\\:bg-brown-700[data-size=\"xxs\"] {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-brown-700) / var(--tw-bg-opacity));\n}\n\n.data-\\[size\\=xxs\\]\\:bg-crimson-700[data-size=\"xxs\"] {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-crimson-700) / var(--tw-bg-opacity));\n}\n\n.data-\\[size\\=xxs\\]\\:bg-cyan-700[data-size=\"xxs\"] {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-cyan-700) / var(--tw-bg-opacity));\n}\n\n.data-\\[size\\=xxs\\]\\:bg-gold-700[data-size=\"xxs\"] {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-gold-700) / var(--tw-bg-opacity));\n}\n\n.data-\\[size\\=xxs\\]\\:bg-grass-700[data-size=\"xxs\"] {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-grass-700) / var(--tw-bg-opacity));\n}\n\n.data-\\[size\\=xxs\\]\\:bg-gray-700[data-size=\"xxs\"] {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-gray-700) / var(--tw-bg-opacity));\n}\n\n.data-\\[size\\=xxs\\]\\:bg-green-700[data-size=\"xxs\"] {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-green-700) / var(--tw-bg-opacity));\n}\n\n.data-\\[size\\=xxs\\]\\:bg-indigo-700[data-size=\"xxs\"] {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-indigo-700) / var(--tw-bg-opacity));\n}\n\n.data-\\[size\\=xxs\\]\\:bg-lime-700[data-size=\"xxs\"] {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-lime-700) / var(--tw-bg-opacity));\n}\n\n.data-\\[size\\=xxs\\]\\:bg-plum-700[data-size=\"xxs\"] {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-plum-700) / var(--tw-bg-opacity));\n}\n\n.data-\\[size\\=xxs\\]\\:bg-purple-700[data-size=\"xxs\"] {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-purple-700) / var(--tw-bg-opacity));\n}\n\n.data-\\[size\\=xxs\\]\\:bg-red-700[data-size=\"xxs\"] {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-red-700) / var(--tw-bg-opacity));\n}\n\n.data-\\[size\\=xxs\\]\\:bg-teal-700[data-size=\"xxs\"] {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-teal-700) / var(--tw-bg-opacity));\n}\n\n.data-\\[size\\=xxs\\]\\:bg-violet-700[data-size=\"xxs\"] {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-violet-700) / var(--tw-bg-opacity));\n}\n\n.data-\\[size\\=xxs\\]\\:bg-yellow-700[data-size=\"xxs\"] {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-yellow-700) / var(--tw-bg-opacity));\n}\n\n.data-\\[state\\=active\\]\\:bg-black[data-state=\"active\"] {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-black) / var(--tw-bg-opacity));\n}\n\n.data-\\[state\\=active\\]\\:bg-white[data-state=\"active\"] {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-white) / var(--tw-bg-opacity));\n}\n\n.data-\\[state\\=checked\\]\\:bg-blue-700[data-state=\"checked\"] {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-blue-700) / var(--tw-bg-opacity));\n}\n\n.data-\\[state\\=checked\\]\\:bg-gray-50[data-state=\"checked\"] {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-gray-50) / var(--tw-bg-opacity));\n}\n\n.data-\\[state\\=checked\\]\\:bg-white[data-state=\"checked\"] {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-white) / var(--tw-bg-opacity));\n}\n\n.data-\\[state\\=selected\\]\\:bg-gray-50[data-state=\"selected\"] {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-gray-50) / var(--tw-bg-opacity));\n}\n\n.data-\\[state\\=active\\]\\:text-blue-700[data-state=\"active\"] {\n --tw-text-opacity: 1;\n color: rgb(var(--color-blue-700) / var(--tw-text-opacity));\n}\n\n.data-\\[disabled\\=true\\]\\:opacity-50[data-disabled=\"true\"] {\n opacity: .5;\n}\n\n.data-\\[disabled\\]\\:opacity-40[data-disabled] {\n opacity: .4;\n}\n\n.data-\\[disabled\\]\\:opacity-50[data-disabled] {\n opacity: .5;\n}\n\n.data-\\[state\\=active\\]\\:shadow-sm[data-state=\"active\"] {\n --tw-shadow: 0 1px 2px 0 #0000000d;\n --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n\n.data-\\[swipe\\=move\\]\\:transition-none[data-swipe=\"move\"] {\n transition-property: none;\n}\n\n.data-\\[state\\=closed\\]\\:duration-300[data-state=\"closed\"] {\n transition-duration: .3s;\n}\n\n.data-\\[state\\=open\\]\\:duration-500[data-state=\"open\"] {\n transition-duration: .5s;\n}\n\n.data-\\[state\\=open\\]\\:animate-in[data-state=\"open\"] {\n --tw-enter-opacity: initial;\n --tw-enter-scale: initial;\n --tw-enter-rotate: initial;\n --tw-enter-translate-x: initial;\n --tw-enter-translate-y: initial;\n animation-name: enter;\n animation-duration: .15s;\n}\n\n.data-\\[state\\=closed\\]\\:animate-out[data-state=\"closed\"], .data-\\[swipe\\=end\\]\\:animate-out[data-swipe=\"end\"] {\n --tw-exit-opacity: initial;\n --tw-exit-scale: initial;\n --tw-exit-rotate: initial;\n --tw-exit-translate-x: initial;\n --tw-exit-translate-y: initial;\n animation-name: exit;\n animation-duration: .15s;\n}\n\n.data-\\[state\\=closed\\]\\:fade-out[data-state=\"closed\"], .data-\\[state\\=closed\\]\\:fade-out-0[data-state=\"closed\"] {\n --tw-exit-opacity: 0;\n}\n\n.data-\\[state\\=closed\\]\\:fade-out-80[data-state=\"closed\"] {\n --tw-exit-opacity: .8;\n}\n\n.data-\\[state\\=open\\]\\:fade-in-0[data-state=\"open\"] {\n --tw-enter-opacity: 0;\n}\n\n.data-\\[state\\=closed\\]\\:zoom-out-95[data-state=\"closed\"] {\n --tw-exit-scale: .95;\n}\n\n.data-\\[state\\=open\\]\\:zoom-in-95[data-state=\"open\"] {\n --tw-enter-scale: .95;\n}\n\n.data-\\[side\\=bottom\\]\\:slide-in-from-top-2[data-side=\"bottom\"] {\n --tw-enter-translate-y: -.5rem;\n}\n\n.data-\\[side\\=left\\]\\:slide-in-from-right-2[data-side=\"left\"] {\n --tw-enter-translate-x: .5rem;\n}\n\n.data-\\[side\\=right\\]\\:slide-in-from-left-2[data-side=\"right\"] {\n --tw-enter-translate-x: -.5rem;\n}\n\n.data-\\[side\\=top\\]\\:slide-in-from-bottom-2[data-side=\"top\"] {\n --tw-enter-translate-y: .5rem;\n}\n\n.data-\\[state\\=closed\\]\\:slide-out-to-bottom[data-state=\"closed\"], .data-\\[state\\=closed\\]\\:slide-out-to-bottom-\\[100\\%\\][data-state=\"closed\"] {\n --tw-exit-translate-y: 100%;\n}\n\n.data-\\[state\\=closed\\]\\:slide-out-to-left[data-state=\"closed\"] {\n --tw-exit-translate-x: -100%;\n}\n\n.data-\\[state\\=closed\\]\\:slide-out-to-left-1\\/2[data-state=\"closed\"], .data-\\[state\\=closed\\]\\:slide-out-to-left-\\[50\\%\\][data-state=\"closed\"] {\n --tw-exit-translate-x: -50%;\n}\n\n.data-\\[state\\=closed\\]\\:slide-out-to-right[data-state=\"closed\"] {\n --tw-exit-translate-x: 100%;\n}\n\n.data-\\[state\\=closed\\]\\:slide-out-to-top[data-state=\"closed\"] {\n --tw-exit-translate-y: -100%;\n}\n\n.data-\\[state\\=closed\\]\\:slide-out-to-top-\\[48\\%\\][data-state=\"closed\"] {\n --tw-exit-translate-y: -48%;\n}\n\n.data-\\[state\\=open\\]\\:slide-in-from-bottom[data-state=\"open\"], .data-\\[state\\=open\\]\\:slide-in-from-bottom-\\[100\\%\\][data-state=\"open\"] {\n --tw-enter-translate-y: 100%;\n}\n\n.data-\\[state\\=open\\]\\:slide-in-from-left[data-state=\"open\"] {\n --tw-enter-translate-x: -100%;\n}\n\n.data-\\[state\\=open\\]\\:slide-in-from-left-1\\/2[data-state=\"open\"], .data-\\[state\\=open\\]\\:slide-in-from-left-\\[50\\%\\][data-state=\"open\"] {\n --tw-enter-translate-x: -50%;\n}\n\n.data-\\[state\\=open\\]\\:slide-in-from-right[data-state=\"open\"] {\n --tw-enter-translate-x: 100%;\n}\n\n.data-\\[state\\=open\\]\\:slide-in-from-top[data-state=\"open\"] {\n --tw-enter-translate-y: -100%;\n}\n\n.data-\\[state\\=open\\]\\:slide-in-from-top-\\[48\\%\\][data-state=\"open\"] {\n --tw-enter-translate-y: -48%;\n}\n\n.data-\\[state\\=open\\]\\:slide-in-from-top-full[data-state=\"open\"] {\n --tw-enter-translate-y: -100%;\n}\n\n.data-\\[state\\=closed\\]\\:duration-300[data-state=\"closed\"] {\n animation-duration: .3s;\n}\n\n.data-\\[state\\=open\\]\\:duration-500[data-state=\"open\"] {\n animation-duration: .5s;\n}\n\n.group[data-state=\"open\"] .group-data-\\[state\\=open\\]\\:rotate-180 {\n --tw-rotate: 180deg;\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.group[data-disabled] .group-data-\\[disabled\\]\\:cursor-not-allowed {\n cursor: not-allowed;\n}\n\n.group[data-state=\"on\"] .group-data-\\[state\\=on\\]\\:border-blue-700 {\n --tw-border-opacity: 1;\n border-color: rgb(var(--color-blue-700) / var(--tw-border-opacity));\n}\n\n.group[data-state=\"checked\"] .group-data-\\[state\\=checked\\]\\:bg-gray-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-gray-50) / var(--tw-bg-opacity));\n}\n\n.group[data-state=\"off\"] .group-data-\\[state\\=off\\]\\:bg-transparent {\n background-color: #0000;\n}\n\n.group[data-state=\"off\"] .group-data-\\[state\\=off\\]\\:text-transparent {\n color: #0000;\n}\n\n.group[data-disabled] .group-data-\\[disabled\\]\\:opacity-50 {\n opacity: .5;\n}\n\n@media not all and (width >= 1024px) {\n .max-lg\\:mt-8 {\n margin-top: 2rem;\n }\n\n .max-lg\\:hidden {\n display: none;\n }\n\n .max-lg\\:h-\\[250px\\] {\n height: 250px;\n }\n\n .max-lg\\:w-full {\n width: 100%;\n }\n\n .max-lg\\:flex-col {\n flex-direction: column;\n }\n}\n\n@media not all and (width >= 640px) {\n .max-sm\\:gap-4 {\n gap: 1rem;\n }\n\n .max-sm\\:p-4 {\n padding: 1rem;\n }\n}\n\n@media (width >= 640px) {\n .sm\\:mt-0 {\n margin-top: 0;\n }\n\n .sm\\:w-1\\/2 {\n width: 50%;\n }\n\n .sm\\:max-w-sm {\n max-width: 24rem;\n }\n\n .sm\\:flex-row {\n flex-direction: row;\n }\n\n .sm\\:flex-col {\n flex-direction: column;\n }\n\n .sm\\:justify-end {\n justify-content: flex-end;\n }\n\n .sm\\:justify-center {\n justify-content: center;\n }\n\n .sm\\:space-x-2 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-x-reverse: 0;\n margin-right: calc(.5rem * var(--tw-space-x-reverse));\n margin-left: calc(.5rem * calc(1 - var(--tw-space-x-reverse)));\n }\n\n .data-\\[state\\=open\\]\\:sm\\:slide-in-from-bottom-full[data-state=\"open\"] {\n --tw-enter-translate-y: 100%;\n }\n}\n\n@media (width >= 768px) {\n .md\\:block {\n display: block;\n }\n\n .md\\:h-\\[550px\\] {\n height: 550px;\n }\n\n .md\\:w-\\[1000px\\] {\n width: 1000px;\n }\n\n .md\\:w-\\[300px\\] {\n width: 300px;\n }\n\n .md\\:w-\\[334px\\] {\n width: 334px;\n }\n\n .md\\:w-auto {\n width: auto;\n }\n\n .md\\:w-full {\n width: 100%;\n }\n\n .md\\:w-screen {\n width: 100vw;\n }\n\n .md\\:min-w-\\[500px\\] {\n min-width: 500px;\n }\n\n .md\\:max-w-\\[420px\\] {\n max-width: 420px;\n }\n\n .md\\:max-w-\\[90vw\\] {\n max-width: 90vw;\n }\n\n .md\\:flex-row {\n flex-direction: row;\n }\n\n .md\\:items-center {\n align-items: center;\n }\n\n .md\\:justify-start {\n justify-content: flex-start;\n }\n\n .md\\:gap-0 {\n gap: 0;\n }\n\n .md\\:gap-4 {\n gap: 1rem;\n }\n\n .md\\:gap-8 {\n gap: 2rem;\n }\n\n .md\\:divide-y > :not([hidden]) ~ :not([hidden]) {\n --tw-divide-y-reverse: 0;\n border-top-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));\n border-bottom-width: calc(1px * var(--tw-divide-y-reverse));\n }\n\n .md\\:border-0 {\n border-width: 0;\n }\n\n .md\\:bg-gray-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-gray-50) / var(--tw-bg-opacity));\n }\n\n .md\\:bg-transparent {\n background-color: #0000;\n }\n\n .md\\:p-0 {\n padding: 0;\n }\n\n .md\\:p-4 {\n padding: 1rem;\n }\n\n .md\\:p-6 {\n padding: 1.5rem;\n }\n\n .md\\:p-8 {\n padding: 2rem;\n }\n\n .md\\:pt-4 {\n padding-top: 1rem;\n }\n}\n\n@media (width >= 1024px) {\n .lg\\:flex-col {\n flex-direction: column;\n }\n\n .lg\\:items-center {\n align-items: center;\n }\n\n .lg\\:gap-2 {\n gap: .5rem;\n }\n\n .lg\\:gap-8 {\n gap: 2rem;\n }\n\n .lg\\:rounded-lg {\n border-radius: .5rem;\n }\n\n .lg\\:border {\n border-width: 1px;\n }\n\n .lg\\:border-gray-200 {\n --tw-border-opacity: 1;\n border-color: rgb(var(--color-gray-200) / var(--tw-border-opacity));\n }\n\n .lg\\:bg-pattern {\n background-image: radial-gradient(50% 50%, #006aff33 0%, #006aff00 100%), linear-gradient(#0000 0%, #fff 100%), linear-gradient(0deg, #0000 0%, #ffffffbf 100%), url(\"data:image/svg+xml,%3Csvg width='40' height='40' viewBox='0 0 40 40' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M40 40V41H41V40H40ZM39 0V40H41V0H39ZM40 39H0V41H40V39Z' fill='%23E8E8E8' mask='url(%23path-1-inside-1_124_242)'/%3E%3C/svg%3E\");\n }\n\n .lg\\:p-6 {\n padding: 1.5rem;\n }\n\n .lg\\:text-center {\n text-align: center;\n }\n\n .lg\\:text-4xl {\n letter-spacing: -.02em;\n font-size: 36px;\n line-height: 44px;\n }\n}\n\n@media (width >= 1280px) {\n .xl\\:rounded-none {\n border-radius: 0;\n }\n}\n\n.dark\\:bg-white\\/50:where(.dark-theme, .dark-theme *) {\n background-color: rgb(var(--color-white) / .5);\n}\n\n.dark\\:fill-black:where(.dark-theme, .dark-theme *) {\n fill: rgb(var(--color-black) / 1);\n}\n\n.dark\\:text-black:where(.dark-theme, .dark-theme *), .dark\\:\\*\\:text-black > :where(.dark-theme, .dark-theme *), .dark\\:\\*\\:hover\\:text-black:hover > :where(.dark-theme, .dark-theme *), .dark\\:\\*\\:focus\\:text-black:focus > :where(.dark-theme, .dark-theme *) {\n --tw-text-opacity: 1;\n color: rgb(var(--color-black) / var(--tw-text-opacity));\n}\n\n.dark\\:data-\\[state\\=checked\\]\\:bg-black[data-state=\"checked\"]:where(.dark-theme, .dark-theme *) {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-black) / var(--tw-bg-opacity));\n}\n\n.dark\\:data-\\[state\\=active\\]\\:text-black[data-state=\"active\"]:where(.dark-theme, .dark-theme *) {\n --tw-text-opacity: 1;\n color: rgb(var(--color-black) / var(--tw-text-opacity));\n}\n\n.dark\\:data-\\[state\\=active\\]\\:text-white[data-state=\"active\"]:where(.dark-theme, .dark-theme *) {\n --tw-text-opacity: 1;\n color: rgb(var(--color-white) / var(--tw-text-opacity));\n}\n\n.aria-selected\\:\\[\\&\\.day-outside\\]\\:bg-blue-100\\/50.day-outside[aria-selected=\"true\"] {\n background-color: rgb(var(--color-blue-100) / .5);\n}\n\n.\\[\\&\\.day-range-end\\]\\:rounded-r-md.day-range-end, .aria-selected\\:\\[\\&\\.day-range-end\\]\\:rounded-r-md.day-range-end[aria-selected=\"true\"] {\n border-top-right-radius: .375rem;\n border-bottom-right-radius: .375rem;\n}\n\n.\\[\\&\\.day-range-start\\]\\:rounded-l-md.day-range-start {\n border-top-left-radius: .375rem;\n border-bottom-left-radius: .375rem;\n}\n\n.\\[\\&\\:has\\(\\[role\\=checkbox\\]\\)\\]\\:pr-0:has([role=\"checkbox\"]) {\n padding-right: 0;\n}\n\n.\\[\\&\\>\\*\\]\\:h-12 > * {\n height: 3rem;\n}\n\n.\\[\\&\\>\\*\\]\\:w-12 > * {\n width: 3rem;\n}\n\n.\\[\\&\\>\\*\\]\\:rounded > * {\n border-radius: .25rem;\n}\n\n.\\[\\&\\>\\*\\]\\:fill-black > * {\n fill: rgb(var(--color-black) / 1);\n}\n\n.\\[\\&\\>\\[role\\=checkbox\\]\\]\\:translate-y-\\[2px\\] > [role=\"checkbox\"] {\n --tw-translate-y: 2px;\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.\\[\\&\\>button\\]\\:w-full > button {\n width: 100%;\n}\n\n.\\[\\&\\>svg\\]\\:h-4 > svg {\n height: 1rem;\n}\n\n.\\[\\&\\>svg\\]\\:w-auto > svg {\n width: auto;\n}\n\n.\\[\\&\\>svg\\]\\:text-black > svg {\n --tw-text-opacity: 1;\n color: rgb(var(--color-black) / var(--tw-text-opacity));\n}\n\n.\\[\\&\\>svg\\]\\:text-blue-700 > svg {\n --tw-text-opacity: 1;\n color: rgb(var(--color-blue-700) / var(--tw-text-opacity));\n}\n\n.\\[\\&\\>svg\\]\\:text-red-700 > svg {\n --tw-text-opacity: 1;\n color: rgb(var(--color-red-700) / var(--tw-text-opacity));\n}\n\n.\\[\\&\\>svg\\]\\:text-white > svg {\n --tw-text-opacity: 1;\n color: rgb(var(--color-white) / var(--tw-text-opacity));\n}\n\n.\\[\\&\\>svg\\]\\:dark\\:text-black:where(.dark-theme, .dark-theme *) > svg {\n --tw-text-opacity: 1;\n color: rgb(var(--color-black) / var(--tw-text-opacity));\n}\n\n.\\[\\&_\\[cmdk-group-heading\\]\\]\\:px-2 [cmdk-group-heading] {\n padding-left: .5rem;\n padding-right: .5rem;\n}\n\n.\\[\\&_\\[cmdk-group-heading\\]\\]\\:py-1\\.5 [cmdk-group-heading] {\n padding-top: .375rem;\n padding-bottom: .375rem;\n}\n\n.\\[\\&_\\[cmdk-group-heading\\]\\]\\:text-sm [cmdk-group-heading] {\n letter-spacing: -.02em;\n font-size: 14px;\n line-height: 20px;\n}\n\n.\\[\\&_\\[cmdk-group-heading\\]\\]\\:font-medium [cmdk-group-heading] {\n font-weight: 500;\n}\n\n.\\[\\&_\\[cmdk-group-heading\\]\\]\\:text-black [cmdk-group-heading] {\n --tw-text-opacity: 1;\n color: rgb(var(--color-black) / var(--tw-text-opacity));\n}\n\n.\\[\\&_tr\\:active\\]\\:bg-gray-50 tr:active, .\\[\\&_tr\\:hover\\:active\\]\\:bg-gray-50 tr:hover:active {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-gray-50) / var(--tw-bg-opacity));\n}\n\n.\\[\\&_tr\\:hover\\]\\:bg-gray-25 tr:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-gray-25) / var(--tw-bg-opacity));\n}\n\n.\\[\\&_tr\\:last-child\\]\\:border-0 tr:last-child {\n border-width: 0;\n}\n\n.\\[\\&_tr\\]\\:border-b tr {\n border-bottom-width: 1px;\n}\n\n.dark-theme .\\[\\.dark-theme_\\&\\]\\:bg-gray-50 {\n --tw-bg-opacity: 1;\n background-color: rgb(var(--color-gray-50) / var(--tw-bg-opacity));\n}\n";
|
|
14675
16003
|
|
|
14676
16004
|
|
|
14677
16005
|
var $3243e6167f48b6be$exports = {};
|
|
@@ -14753,6 +16081,7 @@ const $e68207026aca356b$export$3f94917203ab7078 = {
|
|
|
14753
16081
|
skipOnboarding: false
|
|
14754
16082
|
};
|
|
14755
16083
|
if (options.recorder?.defaultMode === 'screen' && !isDesktop) options.recorder.defaultMode = 'video';
|
|
16084
|
+
if (options.recorder?.enabled) options.disableSessionFetching = true;
|
|
14756
16085
|
if (element?.nodeType !== window.Node.ELEMENT_NODE) throw new Error('The "element" property must be a valid element!');
|
|
14757
16086
|
const mergedOptions = (0, $6b4cf4c12c735fdf$export$6969335ea1e4e77c)($e68207026aca356b$var$defaultOptions, options);
|
|
14758
16087
|
const rootElement = (0, $jQDcL$reactdomclient.createRoot)(element);
|