{"version":3,"mappings":"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","names":["ArrowRightLine","props","React.createElement","PhotoUploadLine","SidebarHideLine","SidebarShowLine","KeyboardShortcuts","styled","HeaderTitle","Title","color","ShortcutGroup","ShortcutRow","Text","ShortCutRowNoBorder","ShortcutKeySpan","DrawerOverlay","Drawer","DrawerHeader","DrawerBody","spacing","KeyboardShortcutsSidebar","open","onClose","mediaType","intl","useIntl","browser","detect","commandOrControl","keyboardMessages","getShortcutMessages","supportsAnnotations","MediaType","CommentsShortcutRowStyle","isClosing","setIsClosing","useState","content","jsx","jsxs","IconButton","UIIcon","CloseLine","isImageLike","Fragment","isAVType","ExpandableIconButton","KeyboardShortcutsMenu","loggingClient","useViewerPageContext","sidebarOpen","setSidebarOpen","React","toggleSidebar","prevSidebarOpen","hotkeys","KeyboardLine","StatusContainer","SpinnerContainer","DownloadSnackbar","error","ReelSnackbar","Snackbar","Spinner","SpinnerWrapper","MenuSegment","Menu","DownloadButtonWrapper","DownloadIcon","resolutionOrder","resolutionText","pendingStatusList","proxyContainerFormat","getDownloadButtonStrings","InnerDownloadButton","buttonType","triggerProps","triggerRef","translatedStrings","Tooltip","Button","DirectDownloadButton","onClick","DownloadButton","mediaMetadata","shareToken","downloadsEnabled","BaseDownloadButton","useProxyQuery","pollToCompletion","backoff","useBackoff","proxiesEnabled","grantBook","useGrantBook","query","useQuery","replayApi","getProxyUrls","a","b","_a","_b","data","hasPending","result","menuOpen","setMenuOpen","snackbarOpen","setSnackbarOpen","downloadError","setDownloadError","supportedProxies","proxiesLoaded","openErrorSnackbar","useErrorSnackbar","areAllProxiesGenerated","proxy","mediaAction","useMemo","downloadVideo","resolution","link","extension","PAP_Select_ReelMediaAction","res","getVideoDownloadLink","download","handleDownloadProxy","handleDownloadAllProxies","url","getProxyZipUrl","ReplayError","ReplayErrorCategory","handleToggle","isOpen","selectorText","downloadMenu","getContentProps","getTriggerProps","FormattedMessage","supportedProxy","resolutionTag","_c","documentDownloadButton","TooltipFocusWrapper","StyledTitle","StyledText","ToolTipButton","FeedbackTooltip","ThemeProvider","ThemeContainer","ViewerCountDropdown","ZeroViewerCountDropdown","ViewerCountButton","viewerCount","useViewerCountQuery","isUserInCollabSession","useSyncCollabSharedState","viewerCountLabel","teamMemberCountLabel","guestsCountLabel","ShowLine","ResetTutorialMenuItem","setPublishActions","updateViewerOnboardingActions","useViewerPageOnboardingContext","isVideoRoute","matchPath","VIDEO_ROUTE_MATCH","isDropboxer","getCurrentUser","resetOnboardingActions","resetOnboarding","updatedPublishActions","getUserPublishActions","updatedOnboardingActions","listOnboardingActions","onResetTutorialClick","ButtonSeparator","HeaderLink","Link","RightButtonsContainer","VERY_SMALL_SCREEN_WIDTH_BREAKPOINT","PeopleFeaturesSection","areCommentsEnabled","canCreateShareLinks","isImage","isWatermarkedLink","showDownloadButton","viewOnlyProjectMember","isSharePage","useVersionsContext","isSmallScreenSize","useViewport","isViewOnlyLinkAccess","hideShareButton","params","dismissedFeedback","setDismissedFeedback","renderFeedback","dismissFeedback","VersionsAwareShareFeatures","ViewerPageHeader","showDownloadsInHeader","backToUrl","hasEditAccess","isMobileDevice","liveReviewImprovsIsOn","projectName","uploadTimestamp","folderName","fileExtension","setProjectName","projectId","handleHeaderLinkClick","showLeftNavSubtitle","CommonHeaderLayout","BackChevron","HeaderReplayLogo","OnboardingChecklist","HelpMenu","SurfaceType","MediaTitleAndInfo","VIDEO_TITLE_HEIGHT","EditableMediaTitle","CommonTitle","RenameProjectIcon","MediaRenameInput","ReplayTextInput","EditableTitleRow","NonEditableTitleRow","FileExtensionLabel","LeftNavSubtitleContainer","ContainedButton","LeftNavText","BackToTutorialsButton","LeftNavSubtitle","navigationSidebarDisplayState","setNavigationSidebarDisplayState","useAtom","navigationSidebarDisplayStateAtom","textRef","useViewerPageLoggingClient","replayStorage","NavigationSidebarDisplayState","leftNavText","tooltipText","title","id","lastUpdatedTimestamp","onRename","fileExt","titleRef","timeAgoLocale","useReelAppGlobalState","matchesTutorials","handleClickBackToTutorials","useMatchesTutorialsRoute","projects","useAtomValue","viewerReadFolderListingAtom","versionsContext","currentProjectIndex","project","hasMultipleProjects","lastUpdated","getUploadedTimeForDisplay","getTooltipStyle","lastUpdatedText","TutorialsLabelText","formattedFileExt","CommonInfoSection","EditablePageTitleComponent","EditablePageTitleComponentWithButtons","NavigationButtons","LoadingTile","CommonLastUpdatedText","PreviousButtonWrapper","NextButtonWrapper","Tile","ButtonText","ButtonLoadingNonMemo","SkeletonRectangle","navigateToMedia","nextButtonOnclick","nextProject","previousButtonOnclick","nextToggleAriaLabel","previousToggleAriaLabel","ArrowLeftLine","e","name","isHoveringTitle","setIsHoveringTitle","isEditingTitle","setIsEditingTitle","editingValue","setEditingValue","hideModifyItemSnackbar","useSetAtom","hideModifyItemsSnackbarAtom","setModifyItemSnackbar","modifyItemsSnackbarAtom","nameRef","onMouseEnter","onMouseLeave","onClickTitle","handleRename","newName","renameProject","ItemType","rightSide","EditLine","ClickOutside","MAX_PROJECT_LENGTH","event","ModifyItemSnackbar","ContinueButton","ModalWrapper","DigModal","TextFormFooter","RowWrapper","NAME_INPUT_ID","GuestLogInForm","isGuestModalOpen","pendingDrawing","fullName","setFullName","sessionContext","pendingPost","setPendingPost","mobileKeyboardState","useMobileKeyboardState","onNameChange","createGuestUserInfo","splitName","lastWord","onContinueClicked","guestInfo","hideGuestForm","authUrl","useSigninUrl","messages","txt","FormRow","TeamFilmmakersHero","aspectRatio","altText","inverse","rest","viewBox","classNames","intlMessages","defineMessages","ModalHeader","Modal","ModalTitle","IllustrationContainer","StartButton","OnboardingWelcome","handleOnStart","useLoggingClient","handleToggleChecklist","useOnboardingChecklist","isWelcomeModalOpen","setIsWelcomeModalOpen","isWelcomeModalOpenAtom","onboardingType","onboardingTypeAtom","showProToolsConnectionUI","showProToolsConnectionUIAtom","handleOnRequestClose","useCallback","handleOnStartOnboarding","ONBOARDING_TYPE","ONBOARDING_OPEN_SOURCE","OnboardingWelcomeForVideo","videoPlayerInstance","useVideoViewerContext","handleCompleteStep","handlePlayVideo","STEPS","getDueDateText","dueDate","dueDateTimeframe","getDueDateTimeframe","dueDateTime","hoursToDueDate","getHoursToDueDate","DueDateTimeframe","dueDateDay","DueDateBanner","editable","isLoading","onRequestClose","bannerProps","setBannerProps","dueDateText","withCloseButtonText","WarningLine","InfoLine","Banner","DueDateSnackbar","handleCloseSnackbar","taskState","currentTaskStateAtom","FormattedDate","chunks","FullScreenButton","isFullscreen","onToggleFullscreenClick","shortcutMessages","ReelControlTooltip","FullscreenExitLine","FullscreenLine","StatusDropdownWithConsumer","buttonSize","StatusDropdown","onChange","versionStatus","SnapshotSnackbar","status","SetThumbnailButton","BaseSetThumbnailButton","snackbarStatus","setSnackbarStatus","onClickSetThumbnail","video_version_id","current_time","setThumbnail","VideoTitle","TopRow","SMALL_SCREEN_WIDTH_BREAKPOINT","$isImage","$isSmallScreenSize","$isInAdobeExtension","css","TopRowLeftSide","TopRowRightSide","LeftMargin","ViewerTopRow","statusDropdownSlot","versionSelectorSlot","dueDateSlot","sidebarSlot","visible","fullScreenButtonSlot","currentUserIsOwner","viewerSidebarDisplayState","setViewerSidebarDisplayState","viewerSidebarDisplayStateAtom","isDueDateProvisioned","useReelProvisioningEnabled","dueDateTriggerRef","showDueDatePremiumTooltip","setShowDueDatePremiumTooltip","tooltipTimeout","setTooltipTimeout","versionSummaries","showContextMenu","folderId","navigate","useNavigate","onRemove","itemType","itemId","showViewerSidebar","ViewerSidebarDisplayState","contextMenu","ContextMenu","isViewOnly","versionIsReady","showSetThumbnail","isInAdobeExtension","isInExtension","timeout","PremiumTooltip","InfoButton","ViewerSidebarToggle","Container","NEW_THREAD_COMPOSER_HEIGHT","COMMENT_PROMPT_BANNER_HEIGHT","ImageViewerTopContainer","prop","IMAGE_VIEW_DUEDATE_BANNER_HEIGHT_DUEDATE_BANNER_HEIGHT","DueDateBannerContainer","Content","ImageViewer","isHovered","image","currentUserHasEdit","selectedThreadId","useCommentsContext","showDueDate","useIsReplayInGA","isDueDateModalOpen","setIsDueDateModalOpen","clearTask","clearTaskStateAtom","showDueDateVersionModal","setShowDueDateVersionModal","dueDateVersionModalAtom","showDueDateVersionModalErrorText","setShowDueDateVersionModalErrorText","dueDateDeleteRequestInProgress","setDueDateDeleteRequestInProgress","hoverCursorIsEnabled","drawOnFileFocusStyles","useFocusRing","containerRef","fullscreenEnabled","toggleFullscreen","useFullscreen","handleToggleFullscreenClick","handleRemoveDueDate","deleteTask","handleCloseDueDateVersionModal","showDueDateSnackbar","setShowDueDateSnackbar","dismissDueDateSnackbar","showDueDateBanner","setShowDueDateBanner","handleRemoveDueDateBanner","versionSelector","VersionSelectorWithConsumer","doesDueDateExist","dueDateBanner","prevState","DueDate","showControls","Image","AddDueDateModal","DueDateVersionModal","CenteredContainer","PdfLoading","PAP_Select_SidebarPreviewIcon","properties","ThumbnailSidebar","thumbnailSidebarDisplayState","setThumbnailSidebarDisplayState","thumbnailSidebarDisplayStateAtom","mapMediaTypeToLoggingType","PDF","lazy","__vitePreload","module","PdfViewerTopContainer","breakpointSmall","getFullScreenScale","pdfRect","pdfScale","screenWidth","pdfWidth","viewportWidth","PdfViewer","setPdfScale","pdfCurrentScaleAtom","pdfCurrentPage","pdfCurrentPageAtom","getPages","useAtomCallback","get","pdfPagesAtom","updatePdfScale","scale","pdfMetadata","mediaAsDocument","Suspense","stepMilestones","useOnboardingVideoWalkthrough","completedSteps","completedStepsAtom","lastCompletedStep","lastCompletedStepAtom","setShouldFillInOnboardingComment","shouldFillInOnboardingCommentAtom","isChecklistOpen","setIsChecklistOpen","isChecklistOpenAtom","currOpenStep","setCurrOpenStep","currOpenStepAtom","isOnOnboardingVideoWalkthroughPage","useIsOnOnboardingVideoWalkthroughPage","frameRate","stepToPause","setStepToPause","currentTime","isPlaying","currOpenStepMilestone","stepToPauseMilestone","useEffect","nextStep","nextCurrOpenStepMilestone","pauseForNextStep","isFirstTime","hasCompletedDrawStep","isTransitioningFromViewToDrawStep","pauseVideoAtTime","MOBILE_KEYBOARD_IS_OPEN_CLASSNAME","CONTROL_BAR_HEIGHT","SMALL_SCREEN_HEIGHT_BREAKPOINT","VideoViewer","videoIsPlayingWhileTyping","setVideoIsPlayingWhileTyping","liveReviewVideoIsDetached","setLiveReviewVideoIsDetached","playerStatus","hosts","iAmHost","shouldShowLiveReviewImprovs","hasCompletedAnyPreviousOnboardingActions","hasCompletedAnyPreviousOnboardingActionsAtom","hasOnboardingWalkthrough","handleSetOnboardingTypeByMediaType","pauseWhileTypingEnabled","justCompletedOnboardingStep","wasPlaying","TimeBasedMediaVersionSelectorWithConsumer","NEW_THREAD_COMPOSER_CLASSNAME","showTopRow","PLAYER_STATUS","shouldShowLiveReviewBorder","FocusTab","Video","getPlaylistUrl","Annotations","FileSharedSnackbar","setIsOpen","isFileSharedSnackbarOpenAtom","firstMentionName","firstMentionNameInCommentComposerAtom","totalMentions","totalMentionsInCommentComposerAtom","msg","otherMentions","SnackbarCloseMessage","ERROR_COOKIE_SNACKBAR_HEIGHT","ErrorBannerContainer","CommentErrorBanner","deleteComment","replyToThread","resolveThread","setError","unresolveThread","setCurrentlyEditingComment","postText","deleteText","resolveText","unresolveText","editText","unknownText","errorMessage","ReplayCommentErrorType","ReplayThreadErrorType","onRetry","retryable","FailLine","StepActions","LiveReviewErrorTooltip","AvatarList","AvatarWrapper","MAX_FACEPILE_LENGTH","FacepileAvatar","Avatar","FacepileWrapper","FacepileItemWrapper","Facepile","WithFacepileTooltip","avatar","backgroundColor","stackIndex","SyncCollabFacepile","participants","isAnonymousUser","locale","setIsGuestModalOpen","hasOverflow","visibleParticipants","onAvatarClick","participant","idx","getUserInitials","NEW_MAX_FACEPILE_LENGTH","SyncCollabWatchersFacepile","consentTriggerRef","index","WatcherWrapper","radius","LiveWrapper","CapitalizedText","StyledButton","WatcherCountDropdown","ParticipantRow","NameSection","LineDivider","HostSettingsWrapper","HostSettingRow","StyledToggle","Toggle","LiveCircleSVG","SyncCollabWatchers","joinLeaveOnClick","showCursors","setShowCursors","sendShowCursorsSetting","openSession","setOpenSession","sendOpenSessionSetting","onShowCursorsSettingToggle","newValue","onOpenSessionSettingToggle","reel.LiveReviewUserRole","SyncCollabConsentTooltip","viewingAlone","str","viewingWithOneOther","otherViewerName","viewingWithMultipleOthers","numOtherParticipants","viewingWithOneOtherWhoLeaves","viewerJoinedYou","newViewerName","viewerJoinedYouAndOneOther","viewerJoinedYouAndMultipleOthers","userDisconnectedDueToShutdown","secsToShutdown","date","getMinutesMsg","minutesLeft","getSecondsMsg","secondsLeft","othersWatching","SyncCollabWrapper","SyncCollabEntrypoint","disabledProp","setShowInviteTooltip","joinState","setJoinState","shutdownState","setShutdownState","getCurrentSessionId","subscribeToMessages","markCollabOnboardingStepComplete","preloadVideoToFirstFrame","location","useLocation","snackbarMsg","setSnackbarMsg","liveLink","participantText","JoinState","messages.othersWatching","firstParticipantSnackbarMsg","messages.viewingAlone","fetchLink","getReelLink","currentSessionId","participantCount","otherParticipants","otherViewer","messages.viewingWithOneOther","displayNameForParticipant","messages.viewingWithOneOtherWhoLeaves","messages.viewingWithMultipleOthers","userJoin","newViewerFullName","messages.viewerJoinedYou","messages.viewerJoinedYouAndOneOther","messages.viewerJoinedYouAndMultipleOthers","closeSnackbar","consentTooltipOpen","setConsentTooltipOpen","showErrorTooltip","tooltipTitle","tooltipMessage","messages.userDisconnectedDueToShutdown","closeTooltip","joinLiveReviewSession","startLiveReviewSession","linkBlobPromise","reportException","USER_METADATA_FIELD","JoinLeaveButton","joinButtonText","startMessage","joinMessage","PersonLeaveLine","PersonMultipleLine","VersionsAwareSyncCollabEntrypoint","canUserSyncVersions","PortalledSyncCollabEntryPoint","mounted","setMounted","portalledElementRef","portalTo","ReactDOM","PDFThumbnailSidebar","PageContainer","$thumbnailSidebarOpen","ViewerWrapper","$isImageViewer","$isVersionLoading","MobileTitleHeaderContainer","MobileTitle","MobileLeftNavSubtitleArea","MobileSidebarWrapper","MobileTitleHeader","extensionType","Truncate","ViewerPageContent","queryClient","useQueryClient","createThread","threads","isInitialized","viewerAtom","browseToFolder","viewerBrowseToFolderAtom","useImageViewer","managePeopleInfoQuery","useGetManagePeopleInfoForAssetVersionQuery","upsellModalIsOpen","setUpsellModalIsOpen","upsellModalIsOpenAtom","modifyPeopleModalIsOpen","setModifyPeopleModalIsOpen","modifyPeopleModalIsOpenAtom","shareRecipients","useTeamProjectShareRecipients","showUpsellModal","setViewNewUploadFunction","viewNewUploadFunctionAtom","upload","hasNonReactionComments","thread","showCommmentComposer","composer","NewThreadComposer","setTaskState","setLoadingTask","loadingTaskStateAtom","updated_task","getTasksForItem","async_task_state","videoRef","className","selectedDraftCommentAndFrame","selectedDraftCommentAndFrameAtom","ViewerSidebar","ManageAccessModal","BasicAddOnUpsellModal","PlaybackLengthSnackbar","MainContent","LoadingWrapper","PendingVersionActionViewer","loadingText","previousMediaType","versionNumber","videoId","VersionSelector","VersionsAwareViewerPageContent","videoVersionId","isLiveCollabDisabled","useIsLiveCollabDisabled","ViewerProvider","ImageViewerProvider","VideoViewerProvider","AnnotationsProvider","CommentsProvider","SyncCommentsProvider","isInWebView","currentVersionNumber","pendingVersionAction","currentVersionStatus","HeaderContainer","HeaderTopRowContainer","BreadcrumbContainer","HeaderLoadingBreadcrumbsNonMemo","HeaderLoadingBreadcrumbs","HeaderBreadcrumbsNonMemo","folderChain","viewerGetBrowseStateAtom","renderBreadcrumb","folder","onBrowse","Breadcrumb","HeaderBreadcrumbs","HeaderTopRowNonMemo","onHide","HeaderTopRow","NavigationSidebarHeaderNonMemo","currentFolder","viewerGetCurrentFolderAtom","NavigationSidebarHeader","MediaTooltip","TooltipContent","PosterWrapper","$background","$hovered","MediaTypeAndDurationWrapper","AVTypeAndDurationWrapper","ImageTypeAndDurationWrapper","MediaTitle","MediaSubtitle","FooterContainer","IconsContainer","IconAndTextContainer","NavigationSidebarMediaPreviewTooltipNonMemo","commentCount","mediaName","thumbnailUrl","timeForDisplay","updatedAt","ImageLine","VideoPoster","AudioPoster","ImagePoster","CommentLine","GifLine","StatusLabel","NavigationSidebarMediaPreviewTooltip","ListContainer","$loading","$selected","PosterContainer","HoverPlayIcon","PosterInfoWrapper","TileTitle","TileSubtitle","FileCountText","SelectedText","VersionAndDurationWrapper","Separator","ProjectTileNonMemo","selected","setIsHovered","avActiveText","imgActiveText","PlayFill","ProjectTile","FolderTileNonMemo","numberOfProjects","fileCountString","FolderLine","FolderTile","LoadingTileNonMemo","opacity","NavigationSidebarLoadingListNonMemo","NavigationSidebarLoadingList","NavigationSidebarListNonMemo","folders","viewerReadBrowseListingAtom","selectedProjectId","setSidebarState","handleProjectClick","projectWithVideos","handleFolderClick","isUploadedFolder","media","mediaTypeTagToMediaType","getTimeForDisplay","findMediaProjectLatestUpdateTime","NavigationSidebarList","Sidebar","TRANSITION_DURATION_MS","NavigationSidebarNonMemo","cleanup","cleanupNavigationSidebarAtom","CSSTransition","NavigationSidebar","Integrations","StyledVideo","guessIntegration","creatorTool","CreatorToolCalloutModal","setOpen","isCalloutEnabled","StormcrowIsOn","onboardingActions","updateOnboardingActions","useOnboardingContext","isOnboardingEnabled","useE2eFeatureIsOn","handleClose","integration","PAP_Select_ModalAction","updateIntegrationState","handleNavigate","handleOpen","PAP_Shown_Modal","state","s3_static_url","Centered","isVideoNotFoundError","tag","IS_LOADING","ViewerPage","encodedVideoId","encodedProjectId","useParams","setVideoId","setSidebarPanelState","viewerSidebarPanelAtom","videoInfo","setVideoInfo","getVideoError","setGetVideoError","videoFetcher","getVideo","currentVersionInfo","dueDateModalCurrentVersionInfoAtom","setDateModalCurrentVersionInfoAtom","projectNavigator","mediaId","versionId","ViewerSidebarPanel","VERSION_ID_QUERY_STRING_KEY","logView","defaultInitalVideoId","getInitialVersionId","videoIdentifier","PageMissingPage","ErrorPage","backButtonStyle","LoadingViewerPageHeader","webContent","Page","PageContentContainer","YourRootText","integrationContent","projectAccess","ViewerPageLoggingProvider","VersionsAwareViewerPageProvider","ViewerPageOnboardingProvider","SyncCollabProvider"],"ignoreList":[0,1,2,3,13,24],"sources":["../../node_modules/@dropbox/dig-icons/dist/mjs/assets/ui-icon/line/arrow-right.js","../../node_modules/@dropbox/dig-icons/dist/mjs/assets/ui-icon/line/photo-upload.js","../../node_modules/@dropbox/dig-icons/dist/mjs/assets/ui-icon/line/sidebar-hide.js","../../node_modules/@dropbox/dig-icons/dist/mjs/assets/ui-icon/line/sidebar-show.js","../../src/pages/viewer_page/components/keyboard_shortcuts/keyboard_shortcuts_sidebar.tsx","../../src/pages/viewer_page/components/keyboard_shortcuts/keyboard_shortcuts_menu.tsx","../../src/pages/viewer_page/components/downloads/video_download_snackbar.tsx","../../src/pages/viewer_page/components/downloads/video_download_button.tsx","../../src/pages/viewer_page/components/feedback_tooltip.tsx","../../src/pages/viewer_page/components/view_counter.tsx","../../src/pages/viewer_page/reset_onboarding.tsx","../../src/pages/viewer_page/viewer_page_header.tsx","../../src/components/guest_log_in_form.tsx","../../node_modules/@dropbox/dig-illustrations/dist/mjs/hero/team-filmmakers.js","../../src/components/onboarding_v2/onboarding_welcome.tsx","../../src/components/onboarding_v2/onboarding_welcome_for_video.tsx","../../src/components/due_date/due_date_banner.tsx","../../src/components/due_date/due_date_snackbar.tsx","../../src/components/full_screen_button.tsx","../../src/pages/viewer_page/components/status_dropdown_with_consumer.tsx","../../src/pages/viewer_page/components/set_thumbnail_button.tsx","../../src/pages/viewer_page/components/viewer_top_row.tsx","../../src/pages/viewer_page/components/image_viewer.tsx","../../src/pages/viewer_page/components/documents/pdf_loading.tsx","../../node_modules/pap-events/replay/select_sidebar_preview_icon.js","../../src/pages/viewer_page/components/thumbnail_sidebar.tsx","../../src/pages/viewer_page/components/pdf_viewer.tsx","../../src/lib/onboarding_v2/use_onboarding_video_walkthrough.ts","../../src/pages/viewer_page/components/video_viewer/video_viewer.tsx","../../src/pages/viewer_page/components/comments/comment_composers/file_shared_snackbar.tsx","../../src/pages/viewer_page/components/comments/comments_error_banner.tsx","../../src/pages/viewer_page/components/sync_collab/live_review_error_tooltip.tsx","../../src/pages/viewer_page/components/sync_collab/facepile.tsx","../../src/pages/viewer_page/components/sync_collab/sync_collab_watchers.tsx","../../src/pages/viewer_page/components/sync_collab/sync_collab_consent_tooltip.tsx","../../src/pages/viewer_page/components/sync_collab/sync_collab_messages.tsx","../../src/pages/viewer_page/components/sync_collab/sync_collab_entrypoint.tsx","../../src/pages/viewer_page/viewer_page_content.tsx","../../src/pages/browse_page/components/navigation_sidebar_header.tsx","../../src/pages/browse_page/components/navigation_sidebar_media_preview_tooltip.tsx","../../src/pages/browse_page/components/navigation_sidebar_list.tsx","../../src/pages/browse_page/components/navigation_sidebar.tsx","../../src/pages/viewer_page/components/creator_tool_callouts/creator_tool_callouts.tsx","../../src/pages/viewer_page/viewer_page.tsx"],"sourcesContent":["import * as React from 'react';\n/**\n *\n * Original name: arrow right\n *\n * Figma URL: https://www.figma.com/file/RPY7Gy4EixfwdOtVIf2PaX/_Global---Icons?node-id=400%3A1087\n *\n */\nexport const ArrowRightLine = (props) => (React.createElement(\"svg\", { viewBox: \"0 0 24 24\", fill: \"none\", ...props },\n React.createElement(\"path\", { d: \"M5 11.75h12m-5.25-6.5 6.25 6.5-6.25 6.5\", stroke: \"currentColor\", strokeWidth: 1.5, strokeMiterlimit: 10, vectorEffect: \"non-scaling-stroke\" })));\n","import * as React from 'react';\n/**\n *\n * Original name: photo upload\n *\n * Figma URL: https://www.figma.com/file/RPY7Gy4EixfwdOtVIf2PaX/_Global---Icons?node-id=2916%3A1083\n *\n */\nexport const PhotoUploadLine = (props) => (React.createElement(\"svg\", { viewBox: \"0 0 24 24\", fill: \"none\", ...props },\n React.createElement(\"path\", { d: \"m18.25 3.46-2.86 2.75 1.04 1.08 1.07-1.029V10H19V6.261l1.07 1.03 1.04-1.082-2.86-2.75ZM8.5 10a1.393 1.393 0 0 0 1.5 1.5 1.392 1.392 0 0 0 1.5-1.5A1.392 1.392 0 0 0 10 8.5 1.393 1.393 0 0 0 8.5 10Z\", fill: \"currentColor\", vectorEffect: \"non-scaling-stroke\" }),\n React.createElement(\"path\", { fillRule: \"evenodd\", clipRule: \"evenodd\", d: \"m18.51 12.451.49.489V19H5V5h9.213v1.5h-7.71v6.366a2.224 2.224 0 0 1 2.7.356l.378.378a.75.75 0 0 0 1.061 0l2.173-2.17a3.253 3.253 0 0 1 4.595 0l1.1 1.021ZM6.5 14.864V17.5h11l-.002-3.938-.03-.03-1.1-1.021a1.76 1.76 0 0 0-2.495-.02l-2.171 2.172a2.253 2.253 0 0 1-3.182 0l-.379-.379a.75.75 0 0 0-1.061 0l-.58.58Z\", fill: \"currentColor\", vectorEffect: \"non-scaling-stroke\" })));\n","import * as React from 'react';\n/**\n *\n * Original name: sidebar hide\n *\n * Figma URL: https://www.figma.com/file/RPY7Gy4EixfwdOtVIf2PaX/_Global---Icons?node-id=2916%3A1103\n *\n */\nexport const SidebarHideLine = (props) => (React.createElement(\"svg\", { viewBox: \"0 0 24 24\", fill: \"none\", ...props },\n React.createElement(\"path\", { d: \"M5 5v13.5h13.5V5H5Zm1.5 1.5H11V17H6.5V6.5ZM17 17h-4.5V6.5H17V17Z\", fill: \"currentColor\", vectorEffect: \"non-scaling-stroke\" })));\n","import * as React from 'react';\n/**\n *\n * Original name: sidebar show\n *\n * Figma URL: https://www.figma.com/file/RPY7Gy4EixfwdOtVIf2PaX/_Global---Icons?node-id=2916%3A1000\n *\n */\nexport const SidebarShowLine = (props) => (React.createElement(\"svg\", { viewBox: \"0 0 24 24\", fill: \"none\", ...props },\n React.createElement(\"path\", { d: \"M12.5 5H5v13.5h13.5V5h-6ZM17 17h-4.5V6.5H17V17Z\", fill: \"currentColor\", vectorEffect: \"non-scaling-stroke\" })));\n","import {useState} from 'react';\n\nimport {detect} from 'detect-browser';\nimport {useIntl} from 'react-intl';\nimport styled from 'styled-components';\n\nimport {Drawer} from '@dropbox/dig-components/drawer';\nimport {Text, Title} from '@dropbox/dig-components/typography';\nimport {UIIcon} from '@dropbox/dig-icons';\nimport {CloseLine} from '@dropbox/dig-icons/assets';\n\nimport {IconButton} from '~/components/button';\nimport {color, spacing} from '~/components/styled';\nimport {MediaType} from '~/lib/api';\nimport {isAVType, isImageLike} from '~/lib/helpers';\nimport {getShortcutMessages} from '~/pages/viewer_page/components/keyboard_shortcuts/keyboard_shortcuts_messages';\n\nconst KeyboardShortcuts = styled.div`\n height: calc(100vh - 64px);\n overflow-y: auto;\n position: absolute;\n right: 0;\n top: 64px;\n width: 370px;\n`;\n\nconst HeaderTitle = styled(Title)`\n color: ${color('Text Base')};\n margin: 0;\n`;\n\nconst ShortcutGroup = styled.div`\n background: ${color('Background Base')};\n border-radius: 10px;\n margin: 12px 0 24px;\n padding: 0 16px;\n`;\n\nconst ShortcutRow = styled(Text)`\n align-content: center;\n border-bottom: 1px solid ${color('Border Subtle')};\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n padding: 8px 0;\n`;\n\nconst ShortCutRowNoBorder = styled(ShortcutRow)`\n border-bottom: none;\n`;\n\nconst ShortcutKeySpan = styled.span`\n background-color: ${color('Background Raised')};\n padding: 4px 6px;\n margin: 0 3px;\n`;\n\nconst DrawerOverlay = styled(Drawer.OverlayDrawer)`\n border: none;\n`;\n\nconst DrawerHeader = styled(Drawer.Header)`\n background-color: ${color('Background Raised')};\n`;\n\nconst DrawerBody = styled(Drawer.Body)`\n padding: ${spacing('Macro Medium')} ${spacing('Macro Small')};\n background-color: ${color('Background Raised')};\n`;\n\ntype KeyboardShortcutsSidebarProps = {\n /** Whether or not the sidebar is open */\n open: boolean;\n /** Callback for when user clicks to close sidebar */\n onClose: () => void;\n /** Type of media shortcuts should be filtered for */\n mediaType: MediaType;\n};\n\nexport const KeyboardShortcutsSidebar = ({\n open,\n onClose,\n mediaType,\n}: KeyboardShortcutsSidebarProps) => {\n const intl = useIntl();\n const browser = detect();\n const commandOrControl =\n browser?.os === 'Mac OS'\n ? '⌘'\n : intl.formatMessage({\n defaultMessage: 'Ctrl',\n id: 'tDzWZJ',\n description:\n 'Text that describes the Control key on a keyboard, as part of a keyboard shortcut.',\n });\n const keyboardMessages = getShortcutMessages(intl);\n const supportsAnnotations = mediaType !== MediaType.Document && mediaType !== MediaType.Audio;\n const CommentsShortcutRowStyle = supportsAnnotations ? ShortcutRow : ShortCutRowNoBorder;\n const [isClosing, setIsClosing] = useState(false);\n\n const content = (\n <DrawerOverlay\n alignment=\"right\"\n isOpen={open}\n isPortaled={true}\n onDidClose={() => setIsClosing(false)}\n onWillClose={() => setIsClosing(true)}\n role=\"dialog\"\n width=\"100%\"\n >\n <Drawer.Container>\n <DrawerHeader>\n <Drawer.Layout>\n <Drawer.LayoutItem width=\"fill\">\n <HeaderTitle size=\"small\" tagName=\"h3\" weightVariant=\"emphasized\">\n {keyboardMessages.title}\n </HeaderTitle>\n </Drawer.LayoutItem>\n <Drawer.LayoutItem shift=\"right\">\n <IconButton\n aria-label={keyboardMessages.close}\n onClick={onClose}\n variant=\"transparent\"\n >\n <UIIcon src={CloseLine} />\n </IconButton>\n </Drawer.LayoutItem>\n </Drawer.Layout>\n </DrawerHeader>\n\n <DrawerBody>\n <Text isBold>{keyboardMessages.viewingShortcutsTitle}</Text>\n {isImageLike(mediaType) && (\n <>\n <ShortcutGroup>\n <ShortcutRow>\n <span>{keyboardMessages.zoomOut}</span>\n <code>\n <ShortcutKeySpan>{commandOrControl}</ShortcutKeySpan>+\n <ShortcutKeySpan>-</ShortcutKeySpan>\n </code>\n </ShortcutRow>\n <ShortcutRow>\n <span>{keyboardMessages.zoomIn}</span>\n <code>\n <ShortcutKeySpan>{commandOrControl}</ShortcutKeySpan>+\n <ShortcutKeySpan>=</ShortcutKeySpan>\n </code>\n </ShortcutRow>\n <ShortcutRow>\n <span>{keyboardMessages.zoomTo100}</span>\n <code>\n <ShortcutKeySpan>{commandOrControl}</ShortcutKeySpan>+\n <ShortcutKeySpan>0</ShortcutKeySpan>\n </code>\n </ShortcutRow>\n <ShortcutRow>\n <span>{keyboardMessages.fitToWindow}</span>\n <code>\n {/* eslint-disable-next-line @calm/react-intl/missing-formatted-message */}\n <ShortcutKeySpan>b</ShortcutKeySpan>\n </code>\n </ShortcutRow>\n <ShortcutRow>\n <span>{keyboardMessages.fitToHeight}</span>\n <code>\n {/* eslint-disable-next-line @calm/react-intl/missing-formatted-message */}\n <ShortcutKeySpan>h</ShortcutKeySpan>\n </code>\n </ShortcutRow>\n <ShortcutRow>\n <span>{keyboardMessages.fitToWidth}</span>\n <code>\n {/* eslint-disable-next-line @calm/react-intl/missing-formatted-message */}\n <ShortcutKeySpan>w</ShortcutKeySpan>\n </code>\n </ShortcutRow>\n <ShortcutRow>\n <span>{keyboardMessages.toggleFullscreen}</span>\n <code>\n {/* eslint-disable-next-line @calm/react-intl/missing-formatted-message */}\n <ShortcutKeySpan>f</ShortcutKeySpan>\n </code>\n </ShortcutRow>\n <ShortcutRow>\n <span>{keyboardMessages.panImage}</span>\n <code>\n <ShortcutKeySpan>{commandOrControl}</ShortcutKeySpan>+\n <ShortcutKeySpan>{keyboardMessages.drag}</ShortcutKeySpan>\n </code>\n </ShortcutRow>\n <ShortcutRow>\n <span>{keyboardMessages.selectZoomArea}</span>\n <code>\n {/* eslint-disable-next-line @calm/react-intl/missing-formatted-message */}\n <ShortcutKeySpan>z</ShortcutKeySpan>+\n <ShortcutKeySpan>{keyboardMessages.drag}</ShortcutKeySpan>\n </code>\n </ShortcutRow>\n <ShortcutRow>\n <span>{keyboardMessages.zoomWithWheel}</span>\n <code>\n <ShortcutKeySpan>{commandOrControl}</ShortcutKeySpan>+\n <ShortcutKeySpan>{keyboardMessages.mouseWheel}</ShortcutKeySpan>\n </code>\n </ShortcutRow>\n <ShortcutRow>\n <span>{keyboardMessages.zoomWithPinch}</span>\n <code>\n <ShortcutKeySpan>{commandOrControl}</ShortcutKeySpan>+\n <ShortcutKeySpan>{keyboardMessages.pinch}</ShortcutKeySpan>\n </code>\n </ShortcutRow>\n <ShortCutRowNoBorder>\n <span>{keyboardMessages.toggleMap}</span>\n <code>\n {/* eslint-disable-next-line @calm/react-intl/missing-formatted-message */}\n <ShortcutKeySpan>m</ShortcutKeySpan>\n </code>\n </ShortCutRowNoBorder>\n </ShortcutGroup>\n </>\n )}\n\n {isAVType(mediaType) && (\n <>\n <ShortcutGroup>\n <ShortcutRow>\n <span>{keyboardMessages.playPause}</span>\n <code>\n <ShortcutKeySpan>{keyboardMessages.space}</ShortcutKeySpan>\n {keyboardMessages.or}\n {/* eslint-disable-next-line @calm/react-intl/missing-formatted-message */}\n <ShortcutKeySpan>k</ShortcutKeySpan>\n </code>\n </ShortcutRow>\n <ShortcutRow>\n <span>{keyboardMessages.mute}</span>\n <code>\n {/* eslint-disable-next-line @calm/react-intl/missing-formatted-message */}\n <ShortcutKeySpan>m</ShortcutKeySpan>\n </code>\n </ShortcutRow>\n <ShortcutRow>\n <span>{keyboardMessages.toggleFullscreen}</span>\n <code>\n {/* eslint-disable-next-line @calm/react-intl/missing-formatted-message */}\n <ShortcutKeySpan>f</ShortcutKeySpan>\n </code>\n </ShortcutRow>\n <ShortcutRow>\n <span>{keyboardMessages.stepBackward1Frame}</span>\n <code>\n <ShortcutKeySpan>â†</ShortcutKeySpan>\n {keyboardMessages.or}\n <ShortcutKeySpan>,</ShortcutKeySpan>\n </code>\n </ShortcutRow>\n <ShortcutRow>\n <span>{keyboardMessages.stepForward1Frame}</span>\n <code>\n <ShortcutKeySpan>→</ShortcutKeySpan>\n {keyboardMessages.or}\n <ShortcutKeySpan>.</ShortcutKeySpan>\n </code>\n </ShortcutRow>\n <ShortcutRow>\n <span>{keyboardMessages.stepBackward10Frames}</span>\n <code>\n <ShortcutKeySpan>{keyboardMessages.shift}</ShortcutKeySpan>+\n <ShortcutKeySpan>â†</ShortcutKeySpan>\n {keyboardMessages.or}\n <ShortcutKeySpan><</ShortcutKeySpan>\n </code>\n </ShortcutRow>\n <ShortcutRow>\n <span>{keyboardMessages.stepForward10Frames}</span>\n <code>\n <ShortcutKeySpan>{keyboardMessages.shift}</ShortcutKeySpan>+\n <ShortcutKeySpan>→</ShortcutKeySpan>\n {keyboardMessages.or}\n <ShortcutKeySpan>></ShortcutKeySpan>\n </code>\n </ShortcutRow>\n <ShortcutRow>\n <span>{keyboardMessages.stepBackward5Seconds}</span>\n <code>\n {/* eslint-disable-next-line @calm/react-intl/missing-formatted-message */}\n <ShortcutKeySpan>j</ShortcutKeySpan>\n </code>\n </ShortcutRow>\n <ShortcutRow>\n <span>{keyboardMessages.stepForward5Seconds}</span>\n <code>\n {/* eslint-disable-next-line @calm/react-intl/missing-formatted-message */}\n <ShortcutKeySpan>l</ShortcutKeySpan>\n </code>\n </ShortcutRow>\n <ShortcutRow>\n <span>{keyboardMessages.stepBackward10Seconds}</span>\n <code>\n {/* eslint-disable-next-line @calm/react-intl/missing-formatted-message */}\n <ShortcutKeySpan>J</ShortcutKeySpan>\n </code>\n </ShortcutRow>\n <ShortCutRowNoBorder>\n <span>{keyboardMessages.stepForward10Seconds}</span>\n <code>\n {/* eslint-disable-next-line @calm/react-intl/missing-formatted-message */}\n <ShortcutKeySpan>L</ShortcutKeySpan>\n </code>\n </ShortCutRowNoBorder>\n </ShortcutGroup>\n </>\n )}\n\n {mediaType === MediaType.Document && (\n <>\n <ShortcutGroup>\n <ShortcutRow>\n <span>{keyboardMessages.zoomOut}</span>\n <code>\n <ShortcutKeySpan>{commandOrControl}</ShortcutKeySpan>+\n <ShortcutKeySpan>-</ShortcutKeySpan>\n </code>\n </ShortcutRow>\n <ShortcutRow>\n <span>{keyboardMessages.zoomIn}</span>\n <code>\n <ShortcutKeySpan>{commandOrControl}</ShortcutKeySpan>+\n <ShortcutKeySpan>=</ShortcutKeySpan>\n </code>\n </ShortcutRow>\n <ShortcutRow>\n <span>{keyboardMessages.zoomTo100}</span>\n <code>\n <ShortcutKeySpan>{commandOrControl}</ShortcutKeySpan>+\n <ShortcutKeySpan>0</ShortcutKeySpan>\n </code>\n </ShortcutRow>\n <ShortcutRow>\n <span>{keyboardMessages.toggleFullscreen}</span>\n <code>\n {/* eslint-disable-next-line @calm/react-intl/missing-formatted-message */}\n <ShortcutKeySpan>f</ShortcutKeySpan>\n </code>\n </ShortcutRow>\n <ShortcutRow>\n <span>{keyboardMessages.pageSelect}</span>\n <code>\n {/* eslint-disable-next-line @calm/react-intl/missing-formatted-message */}\n <ShortcutKeySpan>p</ShortcutKeySpan>\n </code>\n </ShortcutRow>\n <ShortcutRow>\n <span>{keyboardMessages.scrollUp}</span>\n <code>\n <ShortcutKeySpan>↑</ShortcutKeySpan>\n </code>\n </ShortcutRow>\n <ShortcutRow>\n <span>{keyboardMessages.scrollDown}</span>\n <code>\n <ShortcutKeySpan>↓</ShortcutKeySpan>\n </code>\n </ShortcutRow>\n <ShortcutRow>\n <span>{keyboardMessages.scrollLeft}</span>\n <code>\n <ShortcutKeySpan>â†</ShortcutKeySpan>\n </code>\n </ShortcutRow>\n <ShortCutRowNoBorder>\n <span>{keyboardMessages.scrollRight}</span>\n <code>\n <ShortcutKeySpan>→</ShortcutKeySpan>\n </code>\n </ShortCutRowNoBorder>\n </ShortcutGroup>\n </>\n )}\n\n <Text isBold>\n {supportsAnnotations\n ? keyboardMessages.commentingAnnotatingTitle\n : keyboardMessages.commentingOnlyTitle}\n </Text>\n <ShortcutGroup>\n <CommentsShortcutRowStyle>\n <span>{keyboardMessages.addComment}</span>\n <code>\n {/* eslint-disable-next-line @calm/react-intl/missing-formatted-message */}\n <ShortcutKeySpan>c</ShortcutKeySpan>\n </code>\n </CommentsShortcutRowStyle>\n <CommentsShortcutRowStyle>\n <span>{keyboardMessages.postComment}</span>\n <code>\n <ShortcutKeySpan>{commandOrControl}</ShortcutKeySpan>+\n <ShortcutKeySpan>↵</ShortcutKeySpan>\n </code>\n </CommentsShortcutRowStyle>\n {supportsAnnotations && (\n <ShortCutRowNoBorder>\n <span>{keyboardMessages.undoDrawing}</span>\n <code>\n <ShortcutKeySpan>{commandOrControl}</ShortcutKeySpan>+\n {/* eslint-disable-next-line @calm/react-intl/missing-formatted-message */}\n <ShortcutKeySpan>z</ShortcutKeySpan>\n </code>\n </ShortCutRowNoBorder>\n )}\n </ShortcutGroup>\n\n <Text isBold>{keyboardMessages.applicationTitle}</Text>\n <ShortcutGroup>\n <ShortcutRow>\n <span>{keyboardMessages.toggleProjectNavigation}</span>\n <code>\n <ShortcutKeySpan>{commandOrControl}</ShortcutKeySpan>+\n <ShortcutKeySpan>{keyboardMessages.shift}</ShortcutKeySpan>+\n {/* eslint-disable-next-line @calm/react-intl/missing-formatted-message */}\n <ShortcutKeySpan>p</ShortcutKeySpan>\n </code>\n </ShortcutRow>\n <ShortCutRowNoBorder>\n <span>{keyboardMessages.toggleShortcutsSidebar}</span>\n <code>\n <ShortcutKeySpan>{commandOrControl}</ShortcutKeySpan>+\n <ShortcutKeySpan>/</ShortcutKeySpan>\n </code>\n </ShortCutRowNoBorder>\n </ShortcutGroup>\n </DrawerBody>\n </Drawer.Container>\n </DrawerOverlay>\n );\n\n return (\n <KeyboardShortcuts style={{display: open || isClosing ? 'block' : 'none'}}>\n {content}\n </KeyboardShortcuts>\n );\n};\n","import React from 'react';\n\nimport {detect} from 'detect-browser';\nimport hotkeys from 'hotkeys-js';\nimport {useIntl} from 'react-intl';\nimport styled from 'styled-components';\n\nimport {UIIcon} from '@dropbox/dig-icons';\nimport {KeyboardLine} from '@dropbox/dig-icons/assets';\n\nimport {IconButton} from '~/components/button';\nimport {color} from '~/components/styled';\nimport type {MediaType} from '~/lib/api';\nimport {KeyboardShortcutsSidebar} from '~/pages/viewer_page/components/keyboard_shortcuts/keyboard_shortcuts_sidebar';\nimport {useViewerPageContext} from '~/pages/viewer_page/viewer_page_context';\n\ntype KeyboardShortcutsMenuProps = {\n /** Type of media shortcuts should be filtered for */\n mediaType: MediaType;\n};\n\nconst ExpandableIconButton = styled(IconButton)`\n &[aria-expanded='true'] {\n color: ${color('Primary Base')};\n }\n`;\n\nexport const KeyboardShortcutsMenu = ({mediaType}: KeyboardShortcutsMenuProps) => {\n const browser = detect();\n const commandOrControl = browser?.os === 'Mac OS' ? 'cmd' : 'ctrl';\n const {loggingClient} = useViewerPageContext();\n const [sidebarOpen, setSidebarOpen] = React.useState(false);\n\n const toggleSidebar = React.useCallback(() => {\n setSidebarOpen((prevSidebarOpen) => !prevSidebarOpen);\n // eslint-disable-next-line deprecation/deprecation\n loggingClient.logEvent('select_keyboard_shortcut_menu');\n }, [loggingClient]);\n\n React.useEffect(() => {\n hotkeys(`${commandOrControl}+/`, toggleSidebar);\n\n return () => {\n hotkeys.unbind(`${commandOrControl}+/`, toggleSidebar);\n };\n }, [commandOrControl, toggleSidebar]);\n\n const intl = useIntl();\n\n return (\n <div>\n <ExpandableIconButton\n aria-expanded={sidebarOpen}\n aria-haspopup=\"dialog\"\n aria-label={intl.formatMessage({\n defaultMessage: 'Toggle keyboard shortcuts dialog',\n id: 'yvc/Gt',\n description:\n 'A button with a keyboard that when clicked will toggle the appearance of a dialog containing keyboard shortcuts',\n })}\n onClick={toggleSidebar}\n variant=\"transparent\"\n >\n <UIIcon src={KeyboardLine} />\n </ExpandableIconButton>\n\n <KeyboardShortcutsSidebar mediaType={mediaType} onClose={toggleSidebar} open={sidebarOpen} />\n </div>\n );\n};\n","import {useIntl} from 'react-intl';\nimport styled from 'styled-components';\n\nimport {Spinner} from '@dropbox/dig-components/progress_indicators';\nimport {Snackbar} from '@dropbox/dig-components/snackbar';\nimport {Text} from '@dropbox/dig-components/typography';\n\nimport {ReelSnackbar} from '~/components/snackbar';\n\ntype DownloadSnackbarProps = {\n open: boolean;\n error?: string;\n onClose: () => void;\n};\n\nconst StatusContainer = styled.div`\n display: flex;\n align-items: center;\n`;\n\nconst SpinnerContainer = styled.div`\n margin-right: var(--spacing__unit--2);\n`;\n\nexport const DownloadSnackbar = ({open, onClose, error}: DownloadSnackbarProps) => {\n const intl = useIntl();\n return (\n <ReelSnackbar onRequestClose={onClose} open={open} timeout={error ? 5000 : 0}>\n <Snackbar.Message>\n {!error && (\n <StatusContainer>\n <SpinnerContainer>\n <Spinner />\n </SpinnerContainer>\n <Text color=\"standard\" inverse>\n {intl.formatMessage({\n defaultMessage: 'Generating download...',\n id: 'H863El',\n description: 'Message indicating download is being generated',\n })}\n </Text>\n </StatusContainer>\n )}\n {error && (\n <Text color=\"error\" inverse>\n {error}\n </Text>\n )}\n </Snackbar.Message>\n </ReelSnackbar>\n );\n};\n","import React, {useMemo} from 'react';\n\nimport {useQuery} from '@tanstack/react-query';\nimport type {FileType} from 'pap-events/enums/file_type';\nimport {\n PAP_Select_ReelMediaAction,\n type Select_ReelMediaAction,\n} from 'pap-events/replay/select_reel_media_action';\nimport {FormattedMessage, type IntlShape} from 'react-intl';\nimport {useIntl} from 'react-intl';\nimport styled from 'styled-components';\n\nimport type {reel} from '@dropbox/api-v2-client';\nimport type {WrapperOnToggle, WrapperTriggerProps} from '@dropbox/dig-components/menu';\nimport {Menu} from '@dropbox/dig-components/menu';\nimport type {OverlayAnchorRef} from '@dropbox/dig-components/overlay';\nimport {Spinner} from '@dropbox/dig-components/progress_indicators';\nimport {Tooltip} from '@dropbox/dig-components/tooltips';\nimport {UIIcon} from '@dropbox/dig-icons';\n\nimport {Button, IconButton} from '~/components/button';\nimport {useGrantBook} from '~/components/password_cache_provider';\nimport {useErrorSnackbar} from '~/components/snackbar/error_snackbar';\nimport {getProxyZipUrl, type MediaProp} from '~/lib/api';\nimport {getProxyUrls, getVideoDownloadLink, MediaType} from '~/lib/api';\nimport {download} from '~/lib/download';\nimport {ReplayError, ReplayErrorCategory} from '~/lib/error_reporting';\nimport type {LoggingClient} from '~/lib/logging/logger';\nimport type {QualityOptionsTypes} from '~/lib/logging/logger_types';\nimport {replayApi} from '~/lib/query_client';\nimport {useBackoff} from '~/lib/use-backoff';\n\nimport {DownloadSnackbar} from './video_download_snackbar';\nimport {useViewerPageContext} from '../../viewer_page_context';\n\nconst SpinnerWrapper = styled.div`\n display: flex;\n justify-content: center;\n`;\n\nconst MenuSegment = styled(Menu.Segment)`\n // Prevent text from wrapping since these are not portaled menus\n & .dig-Menu-segment-label {\n white-space: nowrap;\n }\n`;\n\nconst DownloadButtonWrapper = styled.div`\n z-index: 12;\n`;\n\nconst DownloadIcon = (props: React.SVGProps<SVGSVGElement>) => {\n return (\n <svg fill=\"none\" height=\"14\" viewBox=\"0 0 15 14\" width=\"15\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M3.53473 5.66246L6.65614 8.61948L7.5 9.41891V8.2565V1H8V8.2565V9.41891L8.84387 8.61948L11.9653 5.66246L12.3088 6.02529L7.75 10.3442L3.19123 6.02529L3.53473 5.66246ZM1 13.5V13H14.5V13.5H1Z\"\n stroke={props.stroke || '#F7F5F2'}\n />\n </svg>\n );\n};\n\nconst resolutionOrder: {[key in string]: number} = {\n res_1080_p: 0,\n res_1080p: 0,\n res_720_p: 1,\n res_720p: 1,\n res_480_p: 2,\n res_480p: 2,\n res_360_p: 3,\n res_360p: 3,\n other: 4,\n proxy_res_not_set: 5,\n};\n\nconst resolutionText: {[key in string]: QualityOptionsTypes} = {\n res_1080_p: '1080P',\n res_1080p: '1080P',\n res_720_p: '720P',\n res_720p: '720P',\n res_480_p: '480P',\n res_480p: '480P',\n res_360_p: '360P',\n res_360p: '360P',\n other: 'Other',\n proxy_res_not_set: 'Unknown',\n};\n\nconst pendingStatusList = ['in_progress', 'retryable_failure', 'proxy_status_not_set'];\n\nconst proxyContainerFormat = 'mp4';\n\nconst getDownloadButtonStrings = (intl: IntlShape) => {\n return {\n tooltipTitle: intl.formatMessage({\n defaultMessage: 'Download',\n id: 'UFpCJN',\n description: 'Tooltip text for the button to download a file.',\n }),\n tooltipAriaLabel: intl.formatMessage({\n defaultMessage: 'Download',\n id: 'KChiUq',\n description: 'Aria label for the button to download a file.',\n }),\n downloadFileMsg: intl.formatMessage({\n description: 'Text for button that opens dropdown menu to download file',\n defaultMessage: 'Download file',\n id: 'M5kFqP',\n }),\n };\n};\n\nconst InnerDownloadButton = (props: {\n triggerProps: WrapperTriggerProps;\n intl: IntlShape;\n buttonType: 'collaborator' | 'admin';\n triggerRef: OverlayAnchorRef;\n}) => {\n const {buttonType, intl, triggerProps, triggerRef} = props;\n const translatedStrings = getDownloadButtonStrings(intl);\n\n if (buttonType === 'admin') {\n return (\n <Tooltip placement=\"bottom\" title={translatedStrings.tooltipTitle} triggerRef={triggerRef}>\n <IconButton\n {...triggerProps}\n aria-label={translatedStrings.tooltipAriaLabel}\n data-safe-to-unmask-name=\"preview-download-button\"\n data-testid=\"preview-download-button\"\n variant=\"transparent\"\n >\n <UIIcon src={DownloadIcon} />\n </IconButton>\n </Tooltip>\n );\n }\n\n return (\n <Button\n {...triggerProps}\n aria-label={translatedStrings.downloadFileMsg}\n data-testid=\"preview-download-button\"\n variant=\"outline\"\n withDropdownIcon\n withIconStart={<UIIcon src={DownloadIcon} />}\n >\n {translatedStrings.downloadFileMsg}\n </Button>\n );\n};\n\nconst DirectDownloadButton = (props: {\n intl: IntlShape;\n buttonType: 'collaborator' | 'admin';\n onClick: () => void;\n}) => {\n const {buttonType, intl, onClick} = props;\n const translatedStrings = getDownloadButtonStrings(intl);\n\n if (buttonType === 'admin') {\n return (\n <Tooltip placement=\"bottom\" title={translatedStrings.tooltipTitle}>\n <IconButton\n aria-label={translatedStrings.tooltipAriaLabel}\n onClick={onClick}\n variant=\"transparent\"\n >\n <UIIcon src={DownloadIcon} />\n </IconButton>\n </Tooltip>\n );\n }\n\n return (\n <Button\n aria-label={translatedStrings.downloadFileMsg}\n onClick={onClick}\n variant=\"outline\"\n withIconStart={<UIIcon src={DownloadIcon} />}\n >\n {translatedStrings.downloadFileMsg}\n </Button>\n );\n};\n\nexport const DownloadButton = (props: {buttonType: 'collaborator' | 'admin'}) => {\n const {mediaMetadata, loggingClient, shareToken, downloadsEnabled} = useViewerPageContext();\n return (\n <BaseDownloadButton\n buttonType={props.buttonType}\n downloadsEnabled={downloadsEnabled}\n loggingClient={loggingClient}\n mediaMetadata={mediaMetadata}\n shareToken={shareToken}\n />\n );\n};\n\nfunction useProxyQuery({\n mediaMetadata,\n shareToken,\n pollToCompletion,\n}: {\n mediaMetadata: MediaProp;\n shareToken: string | undefined;\n pollToCompletion: boolean;\n}) {\n const backoff = useBackoff();\n const proxiesEnabled = mediaMetadata.mediaType === MediaType.Video;\n const grantBook = useGrantBook(shareToken);\n\n const query = useQuery({\n queryKey: replayApi.getProxyUrls(mediaMetadata.id, {grantBook, shareToken}),\n queryFn: async () => {\n const proxyResult = await getProxyUrls({\n videoVersionId: mediaMetadata.id,\n resolutions: [],\n onlyRetrieveStatus: true,\n shareToken,\n grantBook,\n });\n\n const proxyUrls = proxyResult.proxy_urls ?? [];\n return proxyUrls.sort(\n (a, b) =>\n resolutionOrder[a.resolution?.['.tag']!] - resolutionOrder[b.resolution?.['.tag']!],\n );\n },\n enabled: proxiesEnabled,\n refetchInterval: (data) => {\n const hasPending = (data ?? []).some((result) =>\n pendingStatusList.includes(result.status?.['.tag']!),\n );\n\n if (!pollToCompletion || !hasPending) {\n backoff.reset();\n return false;\n }\n\n return backoff.next();\n },\n });\n\n return {data: query.data ?? [], isLoading: query.isLoading};\n}\n\ninterface BaseDownloadButtonProps {\n buttonType: 'collaborator' | 'admin';\n mediaMetadata: MediaProp;\n loggingClient: LoggingClient;\n shareToken: string | undefined;\n downloadsEnabled: boolean;\n}\n\nconst BaseDownloadButton = ({\n mediaMetadata,\n buttonType,\n loggingClient,\n shareToken,\n downloadsEnabled,\n}: BaseDownloadButtonProps) => {\n const [menuOpen, setMenuOpen] = React.useState(false);\n const [snackbarOpen, setSnackbarOpen] = React.useState<boolean>(false);\n const [downloadError, setDownloadError] = React.useState<string | undefined>(undefined);\n\n const proxiesEnabled = mediaMetadata.mediaType === MediaType.Video;\n const grantBook = useGrantBook(shareToken);\n const intl = useIntl();\n const {data: supportedProxies, isLoading: proxiesLoaded} = useProxyQuery({\n mediaMetadata,\n shareToken,\n pollToCompletion: menuOpen,\n });\n const {openErrorSnackbar} = useErrorSnackbar();\n\n const areAllProxiesGenerated =\n supportedProxies.length > 0 &&\n supportedProxies.every((proxy) => proxy.status?.['.tag']! === 'success');\n\n const mediaAction: Select_ReelMediaAction['properties'] = useMemo(\n () => ({\n accessType: buttonType === 'admin' ? 'admin' : shareToken ? 'reviewer' : 'owner',\n\n creatorId: mediaMetadata.ownerUid,\n deviceId: loggingClient.deviceId,\n videoId: mediaMetadata.videoIdForAmplitude,\n videoVersionId: mediaMetadata.id,\n projectId: mediaMetadata.projectId,\n\n fileCategory: 'video',\n reelMediaAction: 'download_option',\n }),\n [buttonType, loggingClient.deviceId, mediaMetadata, shareToken],\n );\n\n const downloadVideo = React.useCallback(\n async (resolution?: reel.ProxyResolution) => {\n try {\n let link = '';\n let extension = '';\n\n if (resolution) {\n loggingClient.logPap(PAP_Select_ReelMediaAction({...mediaAction, actionDetail: 'proxy'}));\n const res = await getProxyUrls({\n videoVersionId: mediaMetadata.id,\n resolutions: [resolution],\n onlyRetrieveStatus: false,\n shareToken,\n grantBook,\n analyticsData: {\n logger: loggingClient,\n creatorId: mediaMetadata.ownerUid,\n papAccessType: buttonType === 'admin' ? 'admin' : shareToken ? 'reviewer' : 'owner',\n videoId: mediaMetadata.videoIdForAmplitude,\n projectId: mediaMetadata.projectId,\n fileType: mediaMetadata.fileExtension as FileType,\n },\n });\n if (!res.proxy_urls || res.proxy_urls.length !== 1) {\n throw new Error('Received invalid proxy url response');\n }\n link = res.proxy_urls[0].url!;\n extension = proxyContainerFormat;\n } else {\n loggingClient.logPap(\n PAP_Select_ReelMediaAction({...mediaAction, actionDetail: 'original'}),\n );\n const res = await getVideoDownloadLink({\n videoId: mediaMetadata.videoId,\n videoVersionId: mediaMetadata.id,\n shareToken,\n grantBook,\n analyticsData: {\n logger: loggingClient,\n papAccessType: buttonType === 'admin' ? 'admin' : shareToken ? 'reviewer' : 'owner',\n creatorId: mediaMetadata.ownerUid,\n projectId: mediaMetadata.projectId,\n },\n });\n link = res['link'];\n extension = res['extension'];\n }\n\n if (!link) {\n throw new Error('No link');\n }\n\n download({\n url: link,\n filename: `${mediaMetadata.projectName} - V${mediaMetadata.versionNum}.${extension}`,\n });\n\n setSnackbarOpen(false);\n } catch (e: any) {\n setDownloadError('Failed to create download link');\n }\n },\n [mediaMetadata, loggingClient, mediaAction, shareToken, grantBook, buttonType],\n );\n\n const handleDownloadProxy = (resolution?: reel.ProxyResolution) => {\n setSnackbarOpen(true);\n setDownloadError(undefined);\n downloadVideo(resolution);\n };\n\n const handleDownloadAllProxies = async () => {\n loggingClient.logPap(PAP_Select_ReelMediaAction({...mediaAction, actionDetail: 'all_proxies'}));\n\n try {\n const url = await getProxyZipUrl({\n videoVersionId: mediaMetadata.id,\n resolutions: supportedProxies.map((proxy) => proxy.resolution!),\n common: {\n grant_book: grantBook,\n share_token: shareToken,\n },\n analyticsData: {\n logger: loggingClient,\n creatorId: mediaMetadata.ownerUid,\n videoId: mediaMetadata.videoIdForAmplitude,\n papAccessType: buttonType === 'admin' ? 'admin' : shareToken ? 'reviewer' : 'owner',\n projectId: mediaMetadata.projectId,\n },\n });\n\n download({\n url,\n filename: `${mediaMetadata.projectName}.zip}`,\n });\n } catch (error) {\n openErrorSnackbar(\n intl.formatMessage({\n defaultMessage: 'Failed to download all proxies',\n id: 'hpIJAi',\n description: 'Error message when we fail to download all proxies',\n }),\n );\n reportError(\n new ReplayError({\n error,\n severity: 'non-critical',\n tags: ['get_proxy_zip_url_failed'],\n category: ReplayErrorCategory.UncaughtException,\n }),\n );\n }\n };\n\n const handleToggle: WrapperOnToggle = async ({isOpen}: {isOpen: boolean}) => {\n setMenuOpen(isOpen);\n // eslint-disable-next-line deprecation/deprecation\n loggingClient.logEvent('select_reel_download_menu');\n };\n\n const selectorText =\n mediaMetadata.mediaType === MediaType.Audio\n ? mediaMetadata.containerFormat.toUpperCase()\n : mediaMetadata.containerFormat.toUpperCase() +\n ' ' +\n mediaMetadata.mediaMetadata.resolutionWidth +\n 'x' +\n mediaMetadata.mediaMetadata.resolutionHeight;\n\n if (!downloadsEnabled) return null;\n\n const downloadMenu = (\n <Menu.Wrapper isPortaled={false} onToggle={handleToggle}>\n {({getContentProps, getTriggerProps, triggerRef}) => (\n <>\n <InnerDownloadButton\n buttonType={buttonType}\n intl={intl}\n triggerProps={getTriggerProps()}\n triggerRef={triggerRef}\n />\n <Menu.Content {...getContentProps()}>\n <MenuSegment\n withLabel={intl.formatMessage({\n defaultMessage: 'Download Original',\n id: '8xDvnO',\n description: 'Label for the option to download the original file.',\n })}\n >\n <Menu.ActionItem\n onClick={() => {\n handleDownloadProxy();\n }}\n >\n {selectorText}\n </Menu.ActionItem>\n </MenuSegment>\n {proxiesEnabled &&\n ((proxiesLoaded && supportedProxies.length > 0) || !proxiesLoaded) ? (\n <MenuSegment\n withLabel={intl.formatMessage({\n defaultMessage: 'Download Proxy',\n id: '3Zd376',\n description:\n 'Label for a set of options to download proxy versions of a file at different quality levels.',\n })}\n >\n {areAllProxiesGenerated && (\n <Menu.ActionItem onClick={handleDownloadAllProxies} value=\"all\">\n <FormattedMessage\n defaultMessage=\"Download All\"\n description=\"Button to download all video proxies\"\n id=\"E2fvds\"\n />\n </Menu.ActionItem>\n )}\n\n {supportedProxies.length > 0 ? (\n supportedProxies.map((supportedProxy) => {\n const resolutionTag = resolutionText[supportedProxy.resolution!['.tag']];\n\n return (\n <Menu.ActionItem\n disabled={supportedProxy.status?.['.tag']! !== 'success'}\n key={`download-resolution-${resolutionTag}`}\n onClick={() => {\n handleDownloadProxy(supportedProxy.resolution);\n }}\n value={resolutionTag}\n withSubtitle={\n pendingStatusList.includes(supportedProxy.status?.['.tag']!)\n ? intl.formatMessage({\n defaultMessage: 'Generating file...',\n id: 'ctHH/A',\n description: 'Text that appears while the file is being generated.',\n })\n : supportedProxy.status?.['.tag']! === 'failed'\n ? intl.formatMessage({\n defaultMessage: 'Failed to generate file',\n id: '839r2i',\n description: 'Text that appears if file generation has failed.',\n })\n : ''\n }\n >\n {proxyContainerFormat.toUpperCase()} {resolutionTag}\n </Menu.ActionItem>\n );\n })\n ) : (\n <SpinnerWrapper>\n <Spinner />\n </SpinnerWrapper>\n )}\n </MenuSegment>\n ) : null}\n </Menu.Content>\n </>\n )}\n </Menu.Wrapper>\n );\n\n const documentDownloadButton = (\n <DirectDownloadButton\n buttonType={buttonType}\n intl={intl}\n onClick={() => handleDownloadProxy()}\n />\n );\n\n return (\n <DownloadButtonWrapper>\n {mediaMetadata.mediaType === MediaType.Document ||\n mediaMetadata.mediaType === MediaType.CreativeDoc\n ? documentDownloadButton\n : downloadMenu}\n <DownloadSnackbar\n error={downloadError}\n onClose={() => setSnackbarOpen(false)}\n open={snackbarOpen}\n />\n </DownloadButtonWrapper>\n );\n};\n","import {FormattedMessage} from 'react-intl';\nimport styled from 'styled-components';\n\nimport type {OverlayAnchorRef} from '@dropbox/dig-components/overlay';\nimport {Tooltip} from '@dropbox/dig-components/tooltips';\nimport {Text, Title} from '@dropbox/dig-components/typography';\nimport {ThemeContainer, ThemeProvider} from '@dropbox/dig-foundations';\n\nimport {Button} from '~/components/button';\n\ntype PlgExp1Props = {\n isOpen: boolean;\n triggerRef: OverlayAnchorRef;\n onClose: () => void;\n};\n\nconst TooltipFocusWrapper = styled.div`\n outline: none;\n padding: var(--dig-spacing__micro__large) var(--dig-spacing__micro__medium);\n`;\n\nconst StyledTitle = styled(Title)`\n margin-top: 0;\n margin-bottom: 0;\n`;\n\nconst StyledText = styled(Text)`\n margin-top: var(--dig-spacing__micro__small);\n margin-bottom: var(--dig-spacing__micro__large);\n`;\n\nconst ToolTipButton = styled(Button)`\n border-radius: 0;\n margin-left: 185px;\n`;\n\nexport const FeedbackTooltip = (props: PlgExp1Props) => {\n return (\n <ThemeProvider mode=\"bright\" overrides=\"reset\" theme=\"vis2023\">\n <ThemeContainer>\n <Tooltip.Control\n auto\n maxWidth={272}\n open={props.isOpen}\n placement=\"bottom-end\"\n triggerRef={props.triggerRef}\n >\n <TooltipFocusWrapper>\n <StyledTitle>\n <FormattedMessage\n defaultMessage=\"Want feedback on this file?\"\n description=\"A header describing the share function\"\n id=\"RzZ0F8\"\n />\n </StyledTitle>\n <StyledText color=\"standard\" tagName=\"p\">\n <FormattedMessage\n defaultMessage=\"Share to track comments and collaborate with anyone—no Dropbox account required.\"\n description=\"Message describing specific features of Replay share and that Replay projects can be shared with users without Dropbox accounts\"\n id=\"myK7vd\"\n />\n </StyledText>\n <ToolTipButton onClick={props.onClose} variant=\"outline\">\n <FormattedMessage\n defaultMessage=\"Got it\"\n description=\"Message for a button acknowledging and dismissing information text\"\n id=\"yYS4gn\"\n />\n </ToolTipButton>\n </TooltipFocusWrapper>\n </Tooltip.Control>\n </ThemeContainer>\n </ThemeProvider>\n );\n};\n","import {useIntl} from 'react-intl';\nimport styled from 'styled-components';\n\nimport {Menu} from '@dropbox/dig-components/menu';\nimport {Text, Title} from '@dropbox/dig-components/typography';\nimport {UIIcon} from '@dropbox/dig-icons';\nimport {ShowLine} from '@dropbox/dig-icons/assets';\n\nimport {Button} from '~/components/button';\n\nimport {useSyncCollabSharedState} from './sync_collab/shared_state';\nimport {useViewerCountQuery} from '../viewer_page_context';\n\nconst ViewerCountDropdown = styled('div')`\n margin-left: 16px;\n margin-right: 64px;\n max-width: 246px;\n`;\n\nconst ZeroViewerCountDropdown = styled('div')`\n margin: 8px 16px 16px 16px;\n width: 200px;\n`;\n\nexport const ViewerCountButton = () => {\n const {data: viewerCount} = useViewerCountQuery();\n const {isUserInCollabSession} = useSyncCollabSharedState();\n const intl = useIntl();\n if (!viewerCount || isUserInCollabSession) {\n return null;\n }\n const viewerCountLabel = intl.formatMessage(\n {\n defaultMessage: '{count, plural, one{# viewed} other{# viewed}}',\n id: 'OgLpxA',\n description: 'Text that shows view count on a video',\n },\n {count: viewerCount.guests + viewerCount.teamMembers},\n );\n\n const teamMemberCountLabel = intl.formatMessage(\n {\n defaultMessage: '{count, plural, one{# project member} other{# project members}}',\n id: '7Br7Jj',\n description: 'Text that shows view count of team members on a video',\n },\n {count: viewerCount.teamMembers},\n );\n\n const guestsCountLabel = intl.formatMessage(\n {\n defaultMessage: '{count, plural, one{# guest} other{# guests}}',\n id: 'qkrbdB',\n description: 'Text that shows view count of guests on a video',\n },\n {count: viewerCount.guests},\n );\n\n return (\n <>\n <Menu.Wrapper>\n {({getTriggerProps, getContentProps}) => (\n <>\n <Button\n {...getTriggerProps()}\n aria-label={viewerCountLabel}\n variant=\"opacity\"\n withDropdownIcon\n withIconLeft={\n <UIIcon\n data-safe-to-unmask-name=\"viewer-count-button\"\n size=\"standard\"\n src={ShowLine}\n />\n }\n >\n {viewerCountLabel}\n </Button>\n <Menu.Content {...getContentProps()} placement=\"bottom-end\">\n {viewerCount.guests + viewerCount.teamMembers === 0 ? (\n <Menu.Segment>\n <ZeroViewerCountDropdown>\n <Title size=\"small\" style={{marginTop: 0}}>\n {intl.formatMessage({\n defaultMessage: 'No views yet',\n id: 'Y9E1RE',\n description: 'Text indicating no one has viewed a video',\n })}\n </Title>\n <Text\n size=\"small\"\n style={{overflowWrap: 'break-word'}}\n tagName=\"p\"\n variant=\"label\"\n >\n {intl.formatMessage({\n defaultMessage:\n 'Share your file with others and see who has viewed it here.',\n id: 'Jk7AMf',\n description: 'Message asking users to share a video',\n })}\n </Text>\n </ZeroViewerCountDropdown>\n </Menu.Segment>\n ) : (\n <Menu.Segment>\n <ViewerCountDropdown>\n <Text color=\"subtle\" size=\"xsmall\" tagName=\"p\" variant=\"label\">\n {intl.formatMessage({\n defaultMessage: 'Viewed by',\n id: 'yH2aWV',\n description: 'Label indicating how many viewers have viewed a video',\n })}\n </Text>\n <Text size=\"medium\" style={{marginTop: '2px'}} tagName=\"p\" variant=\"label\">\n {teamMemberCountLabel}\n </Text>\n <Text size=\"medium\" style={{marginTop: '2px'}} tagName=\"p\" variant=\"label\">\n {guestsCountLabel}\n </Text>\n </ViewerCountDropdown>\n </Menu.Segment>\n )}\n </Menu.Content>\n </>\n )}\n </Menu.Wrapper>\n </>\n );\n};\n","import React from 'react';\n\nimport {FormattedMessage} from 'react-intl';\nimport {matchPath} from 'react-router';\n\nimport {Menu} from '@dropbox/dig-components/menu';\n\nimport {getUserPublishActions, listOnboardingActions, resetOnboarding} from '~/lib/api';\n\nimport {useViewerPageContext, useViewerPageOnboardingContext} from './viewer_page_context';\nimport {DBX_BUILD_MODE} from '../../context_utils';\nimport {getCurrentUser} from '../../lib/client';\nimport {VIDEO_ROUTE_MATCH} from '../../route_path_matches';\n\nexport const ResetTutorialMenuItem = () => {\n const {setPublishActions} = useViewerPageContext();\n const {updateViewerOnboardingActions} = useViewerPageOnboardingContext();\n\n const isVideoRoute = !!matchPath(\n {\n path: VIDEO_ROUTE_MATCH,\n end: true,\n },\n window.location.pathname,\n );\n\n const isDropboxer = getCurrentUser()?.is_dropboxer ?? false;\n\n const resetOnboardingActions = React.useCallback(() => {\n (async () => {\n await resetOnboarding();\n const updatedPublishActions = await getUserPublishActions();\n setPublishActions(updatedPublishActions);\n const updatedOnboardingActions = await listOnboardingActions();\n updateViewerOnboardingActions(updatedOnboardingActions);\n })();\n }, [updateViewerOnboardingActions, setPublishActions]);\n\n const onResetTutorialClick = () => {\n resetOnboardingActions();\n };\n\n if (isVideoRoute && (DBX_BUILD_MODE === 'local' || isDropboxer)) {\n return (\n <Menu.Segment>\n <Menu.ActionItem onClick={onResetTutorialClick}>\n <FormattedMessage\n defaultMessage=\"Reset tutorial\"\n description=\"Link that resets tutorial onboarding tooltips.\"\n id=\"K0RjW+\"\n />\n </Menu.ActionItem>\n </Menu.Segment>\n );\n }\n\n return null;\n};\n","/* eslint-disable deprecation/deprecation */\nimport React, {useMemo} from 'react';\n\nimport {useAtom, useAtomValue, useSetAtom} from 'jotai';\nimport {FormattedMessage, useIntl} from 'react-intl';\nimport styled from 'styled-components';\n\nimport type {reel} from '@dropbox/api-v2-client';\nimport {ClickOutside} from '@dropbox/dig-components/click_outside';\nimport {Tooltip} from '@dropbox/dig-components/tooltips';\nimport {Link} from '@dropbox/dig-components/typography';\nimport {Text} from '@dropbox/dig-components/typography';\nimport {UIIcon} from '@dropbox/dig-icons';\nimport {ArrowLeftLine, ArrowRightLine, EditLine} from '@dropbox/dig-icons/assets';\n\nimport {Button, IconButton} from '~/components/button';\nimport {ItemType} from '~/components/common';\nimport {ModifyItemSnackbar} from '~/components/modify_item_snackbar';\nimport {OnboardingChecklist} from '~/components/onboarding_v2/onboarding_checklist';\nimport {ReplayTextInput} from '~/components/text_input';\nimport {useViewport, VERY_SMALL_SCREEN_WIDTH_BREAKPOINT} from '~/components/viewport_context';\nimport {useReelAppGlobalState} from '~/context';\nimport {renameProject} from '~/lib/api';\nimport {isImageLike} from '~/lib/helpers';\nimport {useMatchesTutorialsRoute} from '~/lib/onboarding_v2/use_matches_tutorials_route';\nimport {getUploadedTimeForDisplay} from '~/lib/time';\nimport {useQuery} from '~/lib/use-query';\nimport {KeyboardShortcutsMenu} from '~/pages/viewer_page/components/keyboard_shortcuts/keyboard_shortcuts_menu';\nimport {VersionsAwareShareFeatures} from '~/pages/viewer_page/components/share_features';\nimport {useViewerPageContext} from '~/pages/viewer_page/viewer_page_context';\nimport {hideModifyItemsSnackbarAtom, modifyItemsSnackbarAtom} from '~/state/browse';\nimport {\n NavigationSidebarDisplayState,\n navigationSidebarDisplayStateAtom,\n viewerReadFolderListingAtom,\n} from '~/state/viewer';\n\nimport {DownloadButton} from './components/downloads/video_download_button';\nimport {FeedbackTooltip} from './components/feedback_tooltip';\nimport {useSyncCollabSharedState} from './components/sync_collab/shared_state';\nimport type {VersionsContextValue} from './components/versions_context';\nimport {useVersionsContext} from './components/versions_context';\nimport {ViewerCountButton} from './components/view_counter';\nimport {ResetTutorialMenuItem} from './reset_onboarding';\nimport {useViewerPageLoggingClient} from './viewer_page_logging_context';\nimport {SkeletonRectangle} from '../../components/skeleton';\nimport {MAX_PROJECT_LENGTH} from '../../lib/constants';\nimport {SurfaceType} from '../../lib/logging/logger_types';\nimport {replayStorage} from '../../lib/storage';\nimport {\n BackChevron,\n CommonHeaderLayout,\n CommonInfoSection,\n CommonLastUpdatedText,\n CommonTitle,\n HeaderReplayLogo,\n} from '../layout/components/common_header';\nimport {HelpMenu} from '../layout/components/help_menu';\n\ntype ViewerPageHeaderProps = {\n showDownloadsInHeader: boolean;\n areCommentsEnabled: boolean;\n backToUrl: string | null;\n hasEditAccess: boolean; // Owner or project admin access\n sidebarOpen?: boolean;\n viewOnlyProjectMember: boolean;\n};\n\ntype PeopleFeaturesProps = {\n isWatermarkedLink: boolean;\n isImage: boolean;\n showDownloadButton: boolean;\n areCommentsEnabled: boolean;\n canCreateShareLinks: boolean;\n isSmallScreenSize: boolean;\n viewOnlyProjectMember: boolean;\n};\n\nconst ButtonSeparator = styled('div')`\n height: 32px;\n border-right: 1px solid rgba(247, 245, 242, 0.3);\n`;\n\nconst HeaderLink = styled(Link)`\n text-decoration: none;\n`;\n\nconst RightButtonsContainer = styled.div`\n display: flex;\n flex-direction: row;\n grid-gap: var(--spacing__unit--1);\n\n @media screen and (max-width: ${VERY_SMALL_SCREEN_WIDTH_BREAKPOINT}px) {\n display: none;\n }\n`;\n\nconst PeopleFeaturesSection = (props: PeopleFeaturesProps) => {\n const triggerRef = React.useRef<HTMLDivElement>(null);\n const {\n areCommentsEnabled,\n canCreateShareLinks,\n isImage,\n isWatermarkedLink,\n showDownloadButton,\n viewOnlyProjectMember,\n } = props;\n const {isSharePage} = useVersionsContext();\n\n const {isSmallScreenSize} = useViewport();\n const isViewOnlyLinkAccess = !areCommentsEnabled;\n\n // For the old share modal, the share button is hidden for view-only project members and view-only share links\n const hideShareButton =\n (!isSharePage && viewOnlyProjectMember) || (isSharePage && isViewOnlyLinkAccess);\n\n const params = useQuery();\n const [dismissedFeedback, setDismissedFeedback] = React.useState(false);\n\n const renderFeedback = params.get('plg_exp_1') === 'true';\n const dismissFeedback = React.useCallback(() => {\n setDismissedFeedback(true);\n }, []);\n\n return (\n <>\n {!isImage && areCommentsEnabled && (\n <>\n <div id=\"sync-collab-join-button-portal\"></div>\n {!isSmallScreenSize && <ButtonSeparator />}\n </>\n )}\n {!isSmallScreenSize && isSharePage && showDownloadButton && !isWatermarkedLink && (\n <DownloadButton buttonType=\"collaborator\" />\n )}\n {(!viewOnlyProjectMember || isSharePage || !hideShareButton) && (\n <div onClick={dismissFeedback} ref={triggerRef}>\n <VersionsAwareShareFeatures\n canCreateLinks={canCreateShareLinks}\n focusRing={renderFeedback && !dismissedFeedback}\n isViewOnlyLinkAccess={isViewOnlyLinkAccess}\n location=\"video_page_header\"\n shareButtonVariant=\"primary\"\n />\n </div>\n )}\n {renderFeedback && (\n <FeedbackTooltip\n isOpen={!dismissedFeedback}\n onClose={dismissFeedback}\n triggerRef={triggerRef}\n />\n )}\n </>\n );\n};\n\nexport const ViewerPageHeader = ({\n showDownloadsInHeader,\n areCommentsEnabled,\n backToUrl,\n hasEditAccess,\n sidebarOpen,\n viewOnlyProjectMember,\n}: ViewerPageHeaderProps) => {\n const {isSharePage} = useVersionsContext();\n const {isSmallScreenSize, isMobileDevice} = useViewport();\n const {isUserInCollabSession, liveReviewImprovsIsOn} = useSyncCollabSharedState();\n const {\n isWatermarkedLink,\n loggingClient,\n mediaMetadata: {mediaType, projectName, uploadTimestamp, folderName, fileExtension},\n setProjectName,\n } = useViewerPageContext();\n const {projectId} = useVersionsContext();\n\n const handleHeaderLinkClick = React.useCallback(() => {\n loggingClient.logEvent('select_logged_out_marketing_page');\n }, [loggingClient]);\n\n const showLeftNavSubtitle = !isSharePage && folderName && folderName.length > 0;\n\n return (\n <CommonHeaderLayout\n leftSectionLink={\n backToUrl ? (\n <BackChevron backToUrl={backToUrl} loggingClient={loggingClient} />\n ) : (\n <HeaderLink\n href=\"https://replay.dropbox.com\"\n onClick={handleHeaderLinkClick}\n target=\"_blank\"\n >\n <HeaderReplayLogo />\n </HeaderLink>\n )\n }\n rightSection={\n <>\n <OnboardingChecklist resizeForSmallScreenSize={false} />\n {!isSmallScreenSize && !(liveReviewImprovsIsOn && isUserInCollabSession) && (\n <ViewerCountButton />\n )}\n <PeopleFeaturesSection\n areCommentsEnabled={areCommentsEnabled}\n canCreateShareLinks={hasEditAccess}\n isImage={isImageLike(mediaType)}\n isSmallScreenSize={isSmallScreenSize}\n isWatermarkedLink={isWatermarkedLink}\n showDownloadButton={showDownloadsInHeader}\n viewOnlyProjectMember={viewOnlyProjectMember}\n />\n {!(isSmallScreenSize && isUserInCollabSession) && (\n <RightButtonsContainer>\n {!isMobileDevice && !isSmallScreenSize && (\n <KeyboardShortcutsMenu mediaType={mediaType} />\n )}\n <HelpMenu\n resetOnboardingMenuItem={<ResetTutorialMenuItem />}\n surfaceType={SurfaceType.Video}\n />\n </RightButtonsContainer>\n )}\n </>\n }\n sidebarOpen={sidebarOpen}\n title={\n // Don't duplicate the Replay logo if it's already in the spot for the\n // link to go back\n isSmallScreenSize && backToUrl ? (\n <HeaderReplayLogo />\n ) : isSmallScreenSize && !backToUrl ? null : (\n <MediaTitleAndInfo\n fileExt={fileExtension}\n folderName={showLeftNavSubtitle ? folderName : undefined}\n hasEditAccess={hasEditAccess}\n id={projectId}\n lastUpdatedTimestamp={uploadTimestamp}\n onRename={setProjectName}\n title={projectName}\n />\n )\n }\n />\n );\n};\n\nconst VIDEO_TITLE_HEIGHT = '24px';\n\nconst EditableMediaTitle = styled(CommonTitle)<{$isHoveringTitle: boolean}>`\n margin: ${(props) => (props.$isHoveringTitle ? '0 2px 0 0' : '0 8px 0 0')};\n cursor: text;\n outline: ${(props) =>\n props.$isHoveringTitle ? 'thin solid var(--dig-color__border__base)' : 'none'};\n max-height: ${VIDEO_TITLE_HEIGHT};\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n`;\n\nconst RenameProjectIcon = styled(UIIcon)`\n color: var(--dig-color__text__base);\n height: ${VIDEO_TITLE_HEIGHT}; // set height to prevent shifting of elements on hover\n`;\n\nconst MediaRenameInput = styled(ReplayTextInput)`\n &&& {\n font-family: var(--type__title__standard--fontfamily);\n font-size: 16px;\n height: 100%; // set height to prevent shifting of elements on click\n }\n`;\n\nconst EditableTitleRow = styled.div`\n align-items: center;\n display: flex;\n flex-direction: row;\n`;\n\nconst NonEditableTitleRow = styled.div`\n align-items: center;\n display: flex;\n flex-direction: row;\n`;\n\nconst FileExtensionLabel = styled(Text)<{$hasEditAccess: boolean}>`\n ${(props) => (props.$hasEditAccess ? '' : 'margin-left: 8px')};\n margin-right: 8px;\n`;\n\nconst LeftNavSubtitleContainer = styled.div`\n flex-basis: auto;\n display: flex;\n align-items: center;\n max-width: 100%;\n`;\n\nconst ContainedButton = styled(Button)`\n max-width: 100%;\n`;\n\nconst LeftNavText = styled(Text)`\n margin: 0;\n overflow: hidden;\n padding: 0;\n text-overflow: ellipsis;\n`;\n\nconst BackToTutorialsButton = styled(Button)`\n && {\n display: flex;\n margin-top: 2px;\n }\n`;\n\nexport const LeftNavSubtitle = ({folderName}: {folderName: string}) => {\n const [navigationSidebarDisplayState, setNavigationSidebarDisplayState] = useAtom(\n navigationSidebarDisplayStateAtom,\n );\n const textRef = React.useRef<HTMLAnchorElement>(null);\n const intl = useIntl();\n const loggingClient = useViewerPageLoggingClient();\n\n const onClick = () => {\n replayStorage.setHasClickedLeftNav(true);\n if (navigationSidebarDisplayState === NavigationSidebarDisplayState.SHOWING) {\n loggingClient.logEvent('close_viewer_navbar', {close_source: 'header_subtitle'});\n setNavigationSidebarDisplayState(NavigationSidebarDisplayState.HIDDEN);\n } else {\n loggingClient.logEvent('open_viewer_navbar');\n setNavigationSidebarDisplayState(NavigationSidebarDisplayState.SHOWING);\n }\n };\n\n const leftNavText = intl.formatMessage(\n {\n defaultMessage: 'More in {folderName}',\n id: '4CsHQC',\n description:\n 'Header subtitle that can be clicked to open a sidebar with more files in the currently open project',\n },\n {\n folderName,\n },\n );\n\n const tooltipText = intl.formatMessage({\n defaultMessage: 'Quickly navigate to other files in this project',\n id: 'a3dQYI',\n description:\n 'Tooltip text explaining that a button opens a file nav bar to allow users to navigate their project without leaving the page',\n });\n\n let content = (\n <ContainedButton onClick={onClick} variant=\"transparent\">\n <LeftNavText>{leftNavText}</LeftNavText>\n </ContainedButton>\n );\n if (!replayStorage.getHasClickedLeftNav()) {\n content = (\n <Tooltip openDelay={600} title={tooltipText} triggerRef={textRef}>\n {content}\n </Tooltip>\n );\n }\n\n return <LeftNavSubtitleContainer>{content}</LeftNavSubtitleContainer>;\n};\n\nexport const MediaTitleAndInfo = (props: {\n title: string;\n id?: string;\n hasEditAccess: boolean;\n onRename: (newName: string) => void;\n lastUpdatedTimestamp?: string;\n folderName?: string;\n fileExt?: string;\n}) => {\n const {isSmallScreenSize} = useViewport();\n const {title, id, hasEditAccess, lastUpdatedTimestamp, onRename, folderName, fileExt} = props;\n const titleRef = React.useRef<HTMLHeadingElement>(null);\n const {timeAgoLocale} = useReelAppGlobalState();\n const {matchesTutorials, handleClickBackToTutorials} = useMatchesTutorialsRoute();\n\n const projects = useAtomValue(viewerReadFolderListingAtom);\n const versionsContext = useVersionsContext();\n const currentProjectIndex = projects.findIndex(\n ({project}) => project?.id === versionsContext.projectId,\n );\n\n const hasMultipleProjects = projects.length > 1;\n\n const intl = useIntl();\n const lastUpdated = useMemo(() => {\n if (lastUpdatedTimestamp) {\n return getUploadedTimeForDisplay(new Date(lastUpdatedTimestamp), intl, timeAgoLocale);\n }\n return undefined;\n }, [intl, lastUpdatedTimestamp, timeAgoLocale]);\n\n const getTooltipStyle = React.useCallback(() => {\n if (titleRef.current) {\n const overflowed = titleRef.current.scrollWidth > titleRef.current.clientWidth;\n const visibility = overflowed ? ('visible' as const) : ('hidden' as const);\n return {visibility: visibility};\n }\n return {visibility: 'hidden' as const};\n }, [titleRef]);\n\n const lastUpdatedText = intl.formatMessage(\n {\n defaultMessage: 'Updated {lastUpdated}',\n id: 'Avy7Nu',\n description:\n 'Text including a date and time indicating when the Replay file was last updated.',\n },\n {\n lastUpdated: lastUpdated,\n },\n );\n\n const TutorialsLabelText = intl.formatMessage(\n {\n defaultMessage: 'More in {tutorialsFolder}',\n id: '8tAg7O',\n description: 'Text telling user to go back to Tutorials',\n },\n {\n tutorialsFolder: 'Replay Tutorials',\n },\n );\n\n const formattedFileExt = fileExt?.substring(1).toUpperCase();\n\n return (\n <CommonInfoSection>\n {id && !isSmallScreenSize && hasEditAccess ? (\n <React.Suspense\n fallback={<EditablePageTitleComponent id={id} name={title} onRename={onRename} />}\n >\n <EditablePageTitleComponentWithButtons\n fileExt={formattedFileExt}\n folderName={folderName}\n hasEditAccess={hasEditAccess}\n id={id}\n name={title}\n onRename={onRename}\n >\n {title}\n </EditablePageTitleComponentWithButtons>\n </React.Suspense>\n ) : (\n <NonEditableTitleRow>\n <Tooltip openDelay={600} style={getTooltipStyle()} title={title} triggerRef={titleRef}>\n <CommonTitle\n ref={titleRef}\n style={{overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap'}}\n >\n {title}\n </CommonTitle>\n </Tooltip>\n <FileExtensionLabel $hasEditAccess={hasEditAccess} color=\"faint\" size=\"xsmall\">\n {formattedFileExt}\n </FileExtensionLabel>\n\n {folderName ? null : !hasMultipleProjects ? null : !projects[currentProjectIndex] ? (\n <LoadingTile />\n ) : (\n <NavigationButtons\n currentProjectIndex={currentProjectIndex}\n projects={projects}\n versionsContext={versionsContext}\n />\n )}\n </NonEditableTitleRow>\n )}\n\n {!isSmallScreenSize && !folderName && !matchesTutorials && (\n <CommonLastUpdatedText color=\"faint\" size=\"small\">\n {lastUpdatedText}\n </CommonLastUpdatedText>\n )}\n {!isSmallScreenSize && !folderName && matchesTutorials && (\n <BackToTutorialsButton\n color=\"faint\"\n onClick={handleClickBackToTutorials}\n variant=\"transparent\"\n >\n {TutorialsLabelText}\n </BackToTutorialsButton>\n )}\n {folderName && <LeftNavSubtitle folderName={folderName} />}\n </CommonInfoSection>\n );\n};\n\nconst PreviousButtonWrapper = styled.div`\n margin: 0px var(--spacing__unit--0_5);\n z-index: 12;\n`;\n\nconst NextButtonWrapper = styled.div`\n margin: 0px var(--spacing__unit--0_5);\n z-index: 12;\n`;\n\nconst Tile = styled.div`\n display: flex;\n flex-direction: row;\n background: 'transparent';\n`;\n\nconst ButtonText = styled.span`\n color: var(--dig-color__text__base);\n`;\n\nconst ButtonLoadingNonMemo = () => {\n return (\n <Tile style={{opacity: 1}}>\n <SkeletonRectangle style={{height: 12, width: 120}} />\n </Tile>\n );\n};\nconst LoadingTile = React.memo(ButtonLoadingNonMemo);\n\ntype NavigationButtonsProps = {\n versionsContext: VersionsContextValue;\n projects: reel.ProjectWithVideos[];\n currentProjectIndex: number;\n};\n\nconst NavigationButtons = ({\n versionsContext,\n projects,\n currentProjectIndex,\n}: NavigationButtonsProps) => {\n const navigateToMedia = React.useMemo(\n () => (versionsContext.areVersionsEnabled ? versionsContext.navigateToNewMedia : () => {}),\n [versionsContext],\n );\n\n const nextButtonOnclick = React.useCallback(() => {\n if (!projects) {\n return;\n }\n const nextProject =\n projects[currentProjectIndex < projects.length - 1 ? currentProjectIndex + 1 : 0];\n\n if (nextProject.videos?.[0].video_id) {\n navigateToMedia(nextProject.videos[0].video_id);\n }\n }, [currentProjectIndex, navigateToMedia, projects]);\n\n const previousButtonOnclick = React.useCallback(() => {\n if (!projects) {\n return;\n }\n const nextProject =\n projects[currentProjectIndex > 0 ? currentProjectIndex - 1 : projects.length - 1];\n\n if (nextProject.videos?.[0].video_id) {\n navigateToMedia(nextProject.videos[0].video_id);\n }\n }, [currentProjectIndex, navigateToMedia, projects]);\n\n const intl = useIntl();\n\n const nextToggleAriaLabel = intl.formatMessage({\n defaultMessage: 'next',\n id: 'T2qvln',\n description: 'Aria label for button to go to the next project',\n });\n\n const previousToggleAriaLabel = intl.formatMessage({\n defaultMessage: 'previous',\n id: '4ttvw/',\n description: 'Aria label for button to go to the previous project',\n });\n\n // up above, it seems like we default to () => {} if this isn't avail\n // we should probably just remove the buttons if they're not\n // gonna do anything\n if (!versionsContext.areVersionsEnabled) {\n return null;\n }\n\n return (\n <>\n <PreviousButtonWrapper>\n <IconButton onClick={previousButtonOnclick} size=\"small\" variant=\"transparent\">\n <UIIcon aria-label={previousToggleAriaLabel} src={ArrowLeftLine} />\n </IconButton>\n </PreviousButtonWrapper>\n <ButtonText>\n {currentProjectIndex + 1} \n <FormattedMessage\n defaultMessage=\"of\"\n description=\"Text describing the index of the current projects within the current folder\"\n id=\"Yr7+Bp\"\n />\n {projects.length}\n </ButtonText>\n <NextButtonWrapper>\n <IconButton\n onClick={nextButtonOnclick}\n onMouseDown={(e: React.MouseEvent) => e.preventDefault()}\n size=\"small\"\n variant=\"transparent\"\n >\n <UIIcon aria-label={nextToggleAriaLabel} src={ArrowRightLine} />\n </IconButton>\n </NextButtonWrapper>\n </>\n );\n};\n\ntype EditableTitleWithButtonsProps = {\n name: string;\n id: string;\n onRename: (newName: string) => void;\n folderName?: string;\n fileExt?: string;\n hasEditAccess: boolean;\n};\n\nconst EditablePageTitleComponentWithButtons = ({\n name,\n id,\n onRename,\n folderName,\n fileExt,\n hasEditAccess,\n}: React.PropsWithChildren<EditableTitleWithButtonsProps>) => {\n const [isHoveringTitle, setIsHoveringTitle] = React.useState<boolean>(false);\n const [isEditingTitle, setIsEditingTitle] = React.useState<boolean>(false);\n const [editingValue, setEditingValue] = React.useState<string>(name);\n const loggingClient = useViewerPageLoggingClient();\n\n const hideModifyItemSnackbar = useSetAtom(hideModifyItemsSnackbarAtom);\n const setModifyItemSnackbar = useSetAtom(modifyItemsSnackbarAtom);\n\n const projects = useAtomValue(viewerReadFolderListingAtom);\n const versionsContext = useVersionsContext();\n const currentProjectIndex = projects.findIndex(\n ({project}) => project?.id === versionsContext.projectId,\n );\n\n const hasMultipleProjects = projects.length > 1;\n\n const nameRef = React.useRef(name);\n\n React.useEffect(() => {\n setEditingValue(name);\n }, [name]);\n\n // nameRef and this effect are used to fix an issue where state was stale in the handleRename\n // callback coming from ClickOutside dig-component\n React.useEffect(() => {\n nameRef.current = editingValue;\n }, [editingValue]);\n\n const onMouseEnter = () => {\n setIsHoveringTitle(true);\n };\n\n const onMouseLeave = () => {\n setIsHoveringTitle(false);\n };\n\n const onClickTitle = () => {\n setIsEditingTitle(true);\n\n loggingClient.logEvent('select_rename_video');\n };\n\n const handleRename = async () => {\n setIsEditingTitle(false); // Always set to false immediately to disable click outside\n setIsHoveringTitle(false);\n hideModifyItemSnackbar();\n\n const newName = nameRef.current.trim();\n\n if (!newName) {\n setEditingValue(name);\n return;\n }\n\n if (newName !== name) {\n try {\n await renameProject(id, newName);\n setModifyItemSnackbar({\n type: 'rename',\n status: 'success',\n itemType: ItemType.PROJECT,\n originalName: name,\n newName,\n });\n onRename(newName);\n\n loggingClient.logEvent('rename_reel_video');\n } catch (e) {\n console.error(e);\n setEditingValue(name);\n setModifyItemSnackbar({\n type: 'rename',\n status: 'error',\n itemType: ItemType.PROJECT,\n originalName: name,\n newName,\n });\n }\n }\n };\n\n let rightSide;\n if (isHoveringTitle) {\n rightSide = <RenameProjectIcon size=\"large\" src={EditLine} />;\n } else {\n rightSide = null;\n }\n\n const intl = useIntl();\n\n if (isEditingTitle) {\n return (\n <ClickOutside isActive onClickOutside={handleRename} shouldPropagateMouseEvents>\n <span\n style={{\n display: 'inline-flex',\n height: VIDEO_TITLE_HEIGHT, // set height to prevent shifting of elements on click\n alignItems: 'center',\n maxWidth: '100%',\n }}\n >\n <MediaRenameInput\n aria-label={intl.formatMessage({\n defaultMessage: 'Rename file',\n id: 'w6lb4w',\n description: 'Rename the title of the file currently being displayed',\n })}\n isTransparent={true}\n maxLength={MAX_PROJECT_LENGTH}\n onChange={(event) => setEditingValue(event.target.value)}\n onEnter={handleRename}\n style={{width: editingValue.length.toString().concat('ch')}}\n value={editingValue}\n />\n </span>\n </ClickOutside>\n );\n } else {\n return (\n <EditableTitleRow>\n <Tooltip\n placement=\"bottom-end\"\n title={intl.formatMessage({\n defaultMessage: 'Rename file',\n id: 'mjrEun',\n description: 'Click to rename the file',\n })}\n >\n <span style={{display: 'inline-flex', maxWidth: 'calc(100% - 90px)'}}>\n <EditableMediaTitle\n $isHoveringTitle={isHoveringTitle}\n data-testid=\"common-title\"\n onClick={onClickTitle}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n >\n {editingValue}\n </EditableMediaTitle>\n </span>\n </Tooltip>\n {rightSide}\n <FileExtensionLabel $hasEditAccess={hasEditAccess} color=\"faint\" size=\"xsmall\">\n {fileExt}\n </FileExtensionLabel>\n {!folderName ? null : !projects[currentProjectIndex] ? (\n <LoadingTile />\n ) : hasMultipleProjects ? (\n <NavigationButtons\n currentProjectIndex={currentProjectIndex}\n projects={projects}\n versionsContext={versionsContext}\n />\n ) : null}\n <ModifyItemSnackbar />\n </EditableTitleRow>\n );\n }\n};\n\ntype EditableTitleProps = {\n name: string;\n id: string;\n onRename: (newName: string) => void;\n};\n\nconst EditablePageTitleComponent = ({name, id, onRename}: EditableTitleProps) => {\n const [isHoveringTitle, setIsHoveringTitle] = React.useState<boolean>(false);\n const [isEditingTitle, setIsEditingTitle] = React.useState<boolean>(false);\n const [editingValue, setEditingValue] = React.useState<string>(name);\n\n const hideModifyItemSnackbar = useSetAtom(hideModifyItemsSnackbarAtom);\n const setModifyItemSnackbar = useSetAtom(modifyItemsSnackbarAtom);\n\n const nameRef = React.useRef(name);\n\n React.useEffect(() => {\n setEditingValue(name);\n }, [name]);\n\n // nameRef and this effect are used to fix an issue where state was stale in the handleRename\n // callback coming from ClickOutside dig-component\n React.useEffect(() => {\n nameRef.current = editingValue;\n }, [editingValue]);\n\n const onMouseEnter = () => {\n setIsHoveringTitle(true);\n };\n\n const onMouseLeave = () => {\n setIsHoveringTitle(false);\n };\n\n const onClickTitle = () => {\n setIsEditingTitle(true);\n };\n\n const handleRename = async () => {\n setIsEditingTitle(false); // Always set to false immediately to disable click outside\n setIsHoveringTitle(false);\n hideModifyItemSnackbar();\n\n const newName = nameRef.current;\n\n if (newName !== name) {\n try {\n await renameProject(id, newName);\n setModifyItemSnackbar({\n type: 'rename',\n status: 'success',\n itemType: ItemType.PROJECT,\n originalName: name,\n newName,\n });\n onRename(newName);\n } catch (e) {\n console.error(e);\n setEditingValue(name);\n setModifyItemSnackbar({\n type: 'rename',\n status: 'error',\n itemType: ItemType.PROJECT,\n originalName: name,\n newName,\n });\n }\n }\n };\n\n let rightSide;\n if (isHoveringTitle) {\n rightSide = <RenameProjectIcon size=\"large\" src={EditLine} />;\n } else {\n rightSide = null;\n }\n\n const intl = useIntl();\n\n if (isEditingTitle) {\n return (\n <ClickOutside isActive onClickOutside={handleRename} shouldPropagateMouseEvents>\n <span\n style={{\n display: 'inline-flex',\n height: VIDEO_TITLE_HEIGHT, // set height to prevent shifting of elements on click\n alignItems: 'center',\n maxWidth: '100%',\n }}\n >\n <MediaRenameInput\n aria-label={intl.formatMessage({\n defaultMessage: 'Rename file',\n id: 'w6lb4w',\n description: 'Rename the title of the file currently being displayed',\n })}\n isTransparent={true}\n maxLength={MAX_PROJECT_LENGTH}\n onChange={(event) => setEditingValue(event.target.value)}\n onEnter={handleRename}\n style={{width: editingValue.length.toString().concat('ch')}}\n value={editingValue}\n />\n </span>\n </ClickOutside>\n );\n } else {\n return (\n <EditableTitleRow>\n <Tooltip\n placement=\"bottom-end\"\n title={intl.formatMessage({\n defaultMessage: 'Rename file',\n id: 'mjrEun',\n description: 'Click to rename the file',\n })}\n >\n <span style={{display: 'inline-flex', maxWidth: 'calc(100% - 36px)'}}>\n <EditableMediaTitle\n $isHoveringTitle={isHoveringTitle}\n onClick={onClickTitle}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n >\n {editingValue}\n </EditableMediaTitle>\n </span>\n </Tooltip>\n {rightSide}\n <ModifyItemSnackbar />\n </EditableTitleRow>\n );\n }\n};\n","import React from 'react';\n\nimport {FormattedMessage, useIntl} from 'react-intl';\nimport styled from 'styled-components';\n\nimport {FormRow} from '@dropbox/dig-components/form_row';\nimport {Modal as DigModal} from '@dropbox/dig-components/modal';\nimport {Link, Text, Title} from '@dropbox/dig-components/typography';\n\nimport {Button} from '~/components/button';\nimport {useReelAppGlobalState} from '~/context';\nimport type {GuestUserInfo} from '~/context';\nimport type {LoggingClient} from '~/lib/logging/logger';\n\nimport {ReplayTextInput} from './text_input';\nimport {useSigninUrl} from '../lib/use_signin_url';\nimport {useMobileKeyboardState} from '../pages/viewer_page/components/use_mobile_keyboard_state';\n\nconst ContinueButton = styled(Button)`\n float: right;\n`;\n\nconst ModalWrapper = styled(DigModal)<{$pageTop?: number}>`\n &&& {\n ${(props) => props.$pageTop && `top: ${props.$pageTop}px`}\n }\n & .dig-Modal-footer {\n padding: 10px;\n }\n`;\n\nconst TextFormFooter = styled(Text)`\n padding-top: 30px;\n`;\n\nconst RowWrapper = styled.div`\n padding-top: 10px;\n`;\n\ninterface GuestLogInFormProps {\n isGuestModalOpen?: boolean;\n onClose?: (createPost?: boolean) => void;\n pendingDrawing?: boolean;\n loggingClient?: LoggingClient;\n}\n\nconst NAME_INPUT_ID = 'guest-login-name-input-6xj011';\n\nexport function GuestLogInForm({\n onClose,\n isGuestModalOpen = false,\n pendingDrawing = false,\n loggingClient,\n}: GuestLogInFormProps) {\n const intl = useIntl();\n const [fullName, setFullName] = React.useState('');\n const sessionContext = useReelAppGlobalState();\n const [pendingPost, setPendingPost] = React.useState(false);\n const mobileKeyboardState = useMobileKeyboardState(`#${NAME_INPUT_ID}`);\n\n function onNameChange(event: React.FormEvent<HTMLInputElement>) {\n setFullName(event.currentTarget.value);\n }\n\n function createGuestUserInfo(): GuestUserInfo | undefined {\n const splitName = fullName.trim().split(/\\s/);\n const lastWord = splitName.pop();\n if (lastWord) {\n if (!fullName.length) {\n // If the name is only one word, assume it is the first name\n return {firstName: lastWord, lastName: null, email: null};\n } else {\n // If the name is multiple words, assume there are one or more first names and only one last name\n return {firstName: splitName.join(' '), lastName: lastWord, email: null};\n }\n }\n return undefined;\n }\n\n function onContinueClicked() {\n if (sessionContext.status === 'logged out') {\n const guestInfo = createGuestUserInfo();\n\n if (loggingClient) {\n // eslint-disable-next-line deprecation/deprecation\n loggingClient.logEvent('select_continue_without_login', {surface: 'modal'});\n }\n\n if (guestInfo) {\n sessionContext.setGuestUserInfo(guestInfo);\n }\n if (guestInfo && pendingDrawing) {\n setPendingPost(true);\n } else onClose?.(false);\n }\n }\n\n React.useEffect(() => {\n if (pendingPost) {\n setPendingPost(false);\n onClose?.(true);\n }\n }, [onClose, pendingPost]);\n\n function hideGuestForm() {\n onClose?.();\n }\n\n const authUrl = useSigninUrl();\n\n const messages = {\n close: intl.formatMessage({\n defaultMessage: 'Close modal',\n id: 'ByZQ4S',\n description: 'Text that indicates what the button that closes the guest login modal does.',\n }),\n namePlaceholder: intl.formatMessage({\n defaultMessage: 'Enter your name',\n id: 'VY57Uf',\n description: 'The text displayed inside the name input for the guest log in form.',\n }),\n privacyNotice: intl.formatMessage(\n {\n defaultMessage:\n \"Your name will appear next to your comment, and your data will be handled in accordance with Dropbox's <pplink>Privacy Policy</pplink>.\",\n id: 'VFY/25',\n description:\n 'The text displayed at the bottom of the guest log in form. The text informs users how their data will be used.',\n },\n {\n pplink: (txt: React.ReactNode) => (\n <Link href=\"https://www.dropbox.com/privacy\" target=\"_blank\" variant=\"monochromatic\">\n {txt}\n </Link>\n ),\n },\n ),\n };\n\n return (\n <ModalWrapper\n $pageTop={mobileKeyboardState.status === 'open' ? mobileKeyboardState.pageTop : undefined}\n isCentered\n onRequestClose={hideGuestForm}\n open={isGuestModalOpen}\n width=\"small\"\n withCloseButton={messages.close}\n >\n <DigModal.Header hasBottomSpacing=\"title-small\">\n <Title>\n <FormattedMessage\n defaultMessage=\"Enter your name\"\n description=\"Header on modal that informs the user that the form is used to sign into Dropbox.\"\n id=\"kgrHeJ\"\n />\n </Title>\n </DigModal.Header>\n <DigModal.Body>\n <FormRow>\n <ReplayTextInput\n data-testid=\"comment-guest-name-input\"\n fontSize={16}\n id={NAME_INPUT_ID}\n onChange={onNameChange}\n onEnter={onContinueClicked}\n placeholder={messages.namePlaceholder}\n value={fullName}\n />\n </FormRow>\n <RowWrapper>\n <FormRow>\n <Button disabled={authUrl === null} href={authUrl ?? undefined} variant=\"transparent\">\n <FormattedMessage\n defaultMessage=\"or sign in with Dropbox\"\n description=\"Text on a button that when pressed attempts to sign the user into Dropbox\"\n id=\"R3ew9K\"\n />\n </Button>\n <ContinueButton\n data-testid=\"comment-guest-name-submit\"\n disabled={!fullName.trim()}\n onClick={onContinueClicked}\n size=\"standard\"\n variant=\"primary\"\n >\n <FormattedMessage\n defaultMessage=\"Continue\"\n description=\"Text on a button to submit the guest log in form.\"\n id=\"czGUcI\"\n />\n </ContinueButton>\n </FormRow>\n </RowWrapper>\n <TextFormFooter color=\"faint\" size=\"small\" tagName=\"p\" variant=\"label\">\n {messages.privacyNotice}\n </TextFormFooter>\n </DigModal.Body>\n <DigModal.Footer></DigModal.Footer>\n </ModalWrapper>\n );\n}\n","// @generated -- This file is automatically synced from dig-illustrations\n// tslint:disable\nimport * as React from 'react';\n/**\n * Render an svg illustration from the illustration library\n *\n * Original name: team filmmakers\n *\n * Figma URL: https://www.figma.com/file/knsTCchTBQGLcCWQCXFhTq/_Global---Illustrations?node-id=2942%3A8\n *\n */\nexport const TeamFilmmakersHero = ({ aspectRatio, altText, inverse, ...rest }) => {\n let viewBox = undefined;\n switch (aspectRatio) {\n case '16:9':\n viewBox = '0 0 1696 954';\n break;\n case '1:1':\n viewBox = '371 0 954 954';\n break;\n case '5:6':\n viewBox = '450 0 795 954';\n break;\n }\n const classNames = `dig-Illustration dig-Illustration-hero${inverse ? ' dig-Illustration--inverse' : ''}`;\n return (React.createElement(\"svg\", { role: \"presentation\", ...rest, className: classNames, viewBox: viewBox, fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\" },\n React.createElement(\"title\", null, altText),\n React.createElement(\"g\", { fillRule: \"evenodd\", clipRule: \"evenodd\" },\n React.createElement(\"path\", { d: \"M534.7 493.9c-7 .9-45.6-.8-51.2.7-11.4 1.8-14.1-2.2-23 7.9-4.8 5.1-6.4 8.3-5.4 10.2 4.5 9.2 11.5 18.5 21.8 29.5 12.3 13.7 26.3 30.1 39.3 44.4 10.1 11.5 9.9 10.2 26.4 10.8 12.7-2.9 20.4 12 29.2 17.3 1.3.5 2 1 1.8 1.5-.8 8.3-1.9 25.7 10.3 29.5 3.6 1.8 4.2 1.4 3.7 5.2-.7 2.7 2 8.8 2 11.4 0 1.5-.3 1.8-2.7 2.8-9.1 3-6.7 13-17.5 15.3-9.8 2.1-5.5 16.3 2.9 16.5 7.2.8 7.2.4-1.4 7-15.7 12.6-28 26.4-29.9 37.7-17 3.1-48 1.8-68.1 1.8-24.4-.2-50.2-2.4-57.7 21.6l-1.6 4.7c.1 10 0 30.2 0 40.2 1.9 9.7 6.4 17.6 12.1 24.4 8.9 10.9 26.9 5.1 40.8 5.1 25.4-1.8 44-2.7 69.3-2.2 17.8 0 32.5 1.4 46.4 9.1 5.8 3.6 11.3 5.7 14.3 11.4 1.6 1.8 1.9 2.3 1.2 2.7-2.2 2.5 9.4 1.6 10 3.8 12 4.8 35.2 5.9 50.9 7.5 21.9 2.1 51 3.7 76.2 1.6 15.6-1.8 26.9-2 38.6-3.6 6.7-5 18-12 19-22.5 4.2-11.1 8.8-28.8 6.4-39.4 7.1-1.1 28.3 15 23-6.4.5-4.1-.8-5.4-9.4-9.6-7.2-3.3-6.5-3.7-10.9-6-1.7-.8-2.2-1.3-2.2-2.3-.3-4.7-4.2-4.9-6.7-9.1-3.5-3.6-5.5-10.5-10.4-10.9-.9 0-1.2-.3-1.2-1.5 0-1.7-1-2.7-19.1-19.7-6.1-5.7-12.2-11.7-13.6-13.2-17.8-17.3-31-41.9-53.8-44.5-5.7-1.6-8.3-3.6-9.9-7.5-1.1-5.7-17.4.6-25.8-2.2-11.6-2.6-23-3.3-22.8-9.7-.4-2.4-1.2-4.2-3.3-7.2-4.1-3.3 5.2-25.2.1-29-3.8-9.5-17.4-5.4-24.9-9.2-8-2.5-21.8-6-29.7-7.6-1.1.2-1.3.1-1-.9.9-3.3 1.5-8.4 1.2-10.1-1.1-6.1-7.2-4.9-5.6 1.6 1.4 8.1-1.6 1.1-7.6-3.9-6.4-6.5-7.3-7.6-5.8-7.2 8.1 1 17.7 6.3 26.2 6.6 1.9 0 6-.8 14.7-2.8 7.8-3 20.8-13.2 13.3-22.4-7.5-14.4-19.8-30.1-29.1-43.5-4.7-7.3-24.3-30.1-27-31.4-5.5-2.4-15.3-5.5-22.8-4.3Z\", fill: \"#9B6400\" }),\n React.createElement(\"path\", { d: \"M1051.3 48.9c-14 2.6-32.7 5.7-48.5 11.5-32.8 16-63.1 51.9-72.8 88.7.3 10.1-.7 39.8 1.3 41.8 2.1 13.1 10.6 26.1 10.8 42 1.8 4.8-8.7 37.2-4.8 46.5 2.8 4.6 12.7 9.5 20.1 9.4 6.7.4 7.9 1.1 9.2 5.3.8 5.6 8.1 9.3 13 9.3.8-.5.7.3-.3 3-3.7 14.4 12.6 11.7 13 22.8 10.7 32.6 29.5 33.7 58.1 21.1 14.3-8.2 23.1 1.4 34.9 10.6 5.2 5.4 4.8.3 13.2-4.7 10.1-7.6 9.9-7.5 17.8-10.5 17.2-8.4 23.3-9.7 37.4-29.6 12.4-16 24.3-29.2 39.1-40.4-22.8-41.6-37.1-27.2-26.1-85.8 3.7-20.2 3.8-23.5.5-35.8-3.6-15.2-10.5-42.4-15.4-52.6-22.8-51.6-54.5-54.3-100.5-52.6Zm34.3 321.2c-1.4 1-.4 1.9.7.7 1.2-1.2.7-1.8-.7-.7Z\", fill: \"#C3672D\" }),\n React.createElement(\"path\", { d: \"M825.2 289.1c-2.4.9-1.1 1.9-3.6 1.9s-4.8 1.1-7.4 1.4c-4.6.8-15 14-18.3 18.9-4.7 7-5.5 7.6-10.4 7-5.9-.7-6-.7-7.3-7.3-.9-4.5-3.7-11.4-5.4-13.3-3.5-3.7-14.9 2.8-22.3 9-7.9 6.8-30 20.2-41.6 25.3-7.7 3.7-13.8 4.5-22.1 8.7-8 3.9-11.6 1.6-18.9 3.6-4.3 1.2-10.6 1.5-11.6.5-4.5-1.6-2.7 9-1.6 11 5.1 5 7.9 4.6 11.4 15.2 3.1 9.2 5.6 10.2 11 16 0 14.5-5.8 28.3 13.6 28.1 2 7.8-4.4 18.2 6.2 21 2.6.8 2.9 1 2.6 2-2.1 6 2.2 14.4 8.4 15.8 1.6.4 1.6.5 1.9 5.6.4 6 1.8 13 3 15.3 7.2 13.8 30.7 9.3 43 6.9 3.6 10 11.6 21.3 16.6 26.9 2.7 4.7 4.2 5.8 10.1 7.2 7.8 2.9 24.3-2 29.3-3.6 2.9-1.8 7-5 10.7-6.9 19.2-10.4 25.2-25.3 41.3-41 13.8-15.3 20-21 35.5-35.4 5.6-5.4 11-10.4 12.1-11.1 6.5-4 2.9-13-4.2-8.4-3.4 1.5-13.5 4.4-15.8-1.1-9.7-12-20.3-24.6-28.9-37.4-4.7-7.3-9.3-15.7-14.6-22.2-1-.4-1-2.2.1-10.1 1.3-9.3.6-26.3-1.2-31.7-.9-6.8-7.6-14.9-13.1-18.4-2.3-.5-6.4-.4-8.5.6ZM614.5 553.2c-7 3.5-6.6 11.7-1.2 17.9 3.4 5.3 5.9 12.6 11.3 17.4 7.1 7.1 8.7 4.7 16.3 5.9 5.8 1 11.6.5 17.1 1.7-3 2.1-8.4 2.1-11.8 3.6-3.7 1-9.9 2.6-13.5 2.9-.8-.5-6.3-1-22-2.1-6.6-.4-12.8-1-13.8-1.3-12.3-3-25-14.1-36.4-11.7-21.6 5.3-7.3 23.6 13.7 28.1 13.6 3.9 17.2 5.1 17.2 5.8-1.9 4.9 33.5 11.3 37.7 14.6-1.3 1.9-10.3 2.1-12.3 4.9-3.7 5.2 5.2 17.2 11.5 19.9 5.7 4 9.7 12.2 16.4 15.4 6.7 5 22 2.9 30.9 4.3 6.3 1 8.6 1.6 10.6-3.7 8.8-28.7 21.6-61.6 29.1-88.6-.4-2.8-2-4-5.1-4.2-6.2-.4-17.2-5.5-23.5-11-4.3-3.8-12.2-6.1-17.8-5.1-5.7 1-31.5-1.2-35-3-4.4-2.5-15.9-14.6-19.4-11.7Zm-49 225.9c-9.3 5.4-10.8 20.2-18.5 28.7-5.9 7-15.6 22.5-19.7 28.1.3-5.3 6.1-21.1 3.2-25.9-1.3-2.2-4.8-4.3-7-4.3-8.1.4-9.7 8.9-13.5 9.9-3.5-.8-11.9 18.3-14.1 20.2-.6.1-11.2 1.3-11.8 2.1-10.9 9.7-1.7 33.4 14.2 31.2 6.2 23.6 17.3 14 22.5 23.8 1.7 4.6 5 9.8 10.5 9.2 9.2.9 8 10.9 26 4.4 26-8.8 27.9-39.7 46.2-58.4 8.5-8.2 11.1-22-.8-25.9-3.7.4 8.4-14 3.8-24.1-3.9-8.6-12.6-5.4-18.2-.7-1.1 1.2-2.9 3.9-12.3 19.1-2.5 4.3-25.1 36.6-14.3 18.9 3.7-6.4 16.1-24 17.8-32 4.6-11.1.3-29.5-14-24.3Zm-53 78.3c-2 2.5-.2-2.7.4-1.5.2.3 0 1-.4 1.5Z\", fill: \"#DBA889\" }),\n React.createElement(\"path\", { d: \"M841.4 283c-1.8 3.6-9.9-.4-10.5 3.6-.4 1.5 1 3 4.2 4.1 9.4 5.7 12.9 21.1 12.5 33.9-.1 10.5-1.1 11.2-4.7 17.4-1.8 2.5-2.1 4-1.1 5.5 1.7 2.6 3.3 1.9 9.3-4.3 10-8.7 9.9-19 11.9-30.1 1.1-10.3 2.5-13.6-5.3-22.4-6.4-7.5-11-12.3-16.3-7.7Zm-46.8 6.7c-6.5 2.8-24 2.6-26.2 5.4-6.4 4.7-2.6 20.6 1.9 26.7 3.6 6.4 10.7 7.1 11.8 14.4 4.3 10 4.1 35.4-2.1 43.9-1.2 2.1-3.6 6.2-5.2 9.1-5.2 9.2-15.9 24.3-16.9 32.5-.6 3-1.6 5.9-2.3 6.9-5.4 5.7-11.9 17.5-18.3 16.8-5.5.5-12.5 2.6-17.3 5.3-2.1 1.6-8.8 3.8-10.1 3.3-5.7 1.1-6.9 13.2-4.9 18.7 15.9 31.4 56.8 15.2 83.1-7.1 14.2-11.9 16.4-18.5 21-26.2 3.1-3.5 3.2-3.7 5.5-10.6 5.1-13.4 5.8-18.5 1.9-38.2-1.5-19-7.5-39.2-14.7-54.9-12.9-19.9 36.5-55.3-7.2-46ZM707.8 410c-16.3.4-32.6 31.8-9.3 26.2 12-1.2 9.9-3.3 26.6-3 6.7-.8 9.4 9.2 15.5 4.2 4.6-4.7-4.9-20.5-7.3-23.4-4.8-2.9-18.6-6.7-25.5-4Z\", fill: \"#965128\" }),\n React.createElement(\"path\", { d: \"M1138.8 37.5c-4.6.4-12.6 2.6-16.2 4.5-1.5.6-6.9 8.1-8.6 8.4-10.9-2.7-21.7-7.8-38.3-9.9-38.3-5.6-91.7 20.7-115.8 52.1-13.3 13.8-28.1 34.4-30.8 54.4-1.4 8.1.9 5.6 2.9 10.2 3.9 10.6 12.1 26.9 23 36.4 12.8 12.2 26.2 23.1 41.9 26.6 15.7 2.9 34.7-3.7 42.7-20.1 1.6-3.5 1.7-3.7 1.3-9.3-.3-5.5-.3-6 1.2-9.4 2.1-7.3 5.1-9.7 14.3-11.7 13.9-1.8 19.9 14.2 19.6 30.3.4 17.2 1.3 16.5-2.9 19.4-1.6.5 4.4 10.9 2.8 11.4-1 1.8-.7 7.1.5 9.4 11.2 14 38.9 25 56.3 21.9 8.3-.4 16.1-6.2 22.2-9.7 8.7 32.3 21.8 63.1 52.6 84.1 16 12 30 24.7 48.7 38.1 5.4 3.1 15 10.6 19 10.6 2.3 0 4.6 1.8 7 2.1 8.3 2.7 12.1 39.2 17.8 42.9 2.8 1.8 3.7 1 8-8.3 7.8-12.3 7.1-33.4 5-46.1-7.4-51.3-30.9-109.3-63.7-153.2-30.1-45.9-23.3-109.6-51.4-156.5-10.7-18.9-40.6-30.3-59.1-28.6ZM961.1 183.9c16.9 11.9 55.2 22 69.4 18.9-21.5 25.4-59.1-.6-76.4-20-2-2.3-6.7-9-6.7-9.5 3.1 2.2 8.6 7.6 13.7 10.6Z\", fill: \"#422608\" }),\n React.createElement(\"g\", { fill: \"currentColor\" },\n React.createElement(\"path\", { d: \"M942.2 54.5c-17.1 6.9-44.7 10.7-67.1 18.2-10.6 2.4-39.4 14.4-46.1 13.5-.5-.5 3.2-3.4.7-2.3-1.7.8-1.3-1.8-2.6-1.9-1.5-1-5.4 25.5-7.6 33.9-3.6 18.6-8.7 39-11.5 56.6-.9 3.4 2.3 2 3.6.8 1.4-1.4 1.6-2.5.4-1.5-.7.6-.7.4-.1-1.5 5.8-24 10.1-53.7 16-77.4.5-5.1 16.3 7.3 18.4 11.4 15.7 15.3 18.5 41.2 18.2 67.5-.3 11.7-1.7 24.6-3.1 28.1-.7 1.9-3.1 10.3-2.1 12.2.6 2.3 1.6 3.5 1.2 1.4 1.6-11.1 7.8-18.5 8.1-36.4 2-22.8-1.8-57.7-18-71.7-4.9-8.8-17.9-12.4-23.2-16.9 23.4-5.7 50.7-15.9 74.8-21.6 13.3-2.5 26.6-6.6 39.2-9.5 3.5-.3 7.1-1.7 7.1-2.8-1.9-2-3.2-2.1-6.3-.1ZM831.6 83.6c.4.2.9.1 1.1 0 .4-.5-2.2-.4-1.1 0Zm-380.5 78.9c-.9 6-4 19-4.1 23.3-.4 2-.9 10-3.6 8.9-1.2-.2-6.7-1.3-6.5.9-.2 5.4-6.4 26.6-3.5 31.1.7.5 1.7 1 2.2 1 2.6-1.7-1.8 10.4-.9 11.4.4 1.5-.4 1.6-3.3.4-2.1-.9-7.7-1.4-8.3-.7-1.2 2.2-2 6.6 2 7.1 4.6 1.3 29.4 7.8 31.4 4.1.2-1.2 3.1-4.1 4.2-5.4-3.6 3.3-9.8-1.1-13.8-1.5-2.4-.2 1.3-12.1 1.1-13 4-4.2 27.9 5.7 27.2-3.9.3-3.1-.1-6.6 4.1-6.2 2.5 0 4.4 1 2.8 1.5-2.8 1.3 8.5 12.8 7.9 4 .2-2.6.7-3.3 1.6-2.1 18.6 4.4 39 4.6 59.1 8.8 14.4 1.8 29.2 5.6 43.2 7.1 21 1.8 26.3 2.8 40 6.7-2.7 8.8-3.3 37.5-4.4 43.7-1.1 4.3 1.9 16.3-3.9 18.6-15.9 11.2-32.2 26.8-48.3 37.1-17.5 7.1-9 27.3 11 18.5 9.8-3.7 23.7-12.6 33.4-17.2 11.3.4 35.3 1.4 43.3 1.4 23.2.1 57.4-19.2 77.6-32.8 9.4-4.5 29.3-23.9 33.7-18.3-.2.9 1.2.9 2-.1.4-.5 2.5-.9 6-1.1 3.5.2 7.5-1.7 7.9-.2-.1 1.1 2.2 1.2 2.2.1 0-1.1.3-1.2 3.8-1.7 2.8-.4 3-.4 2.6.8-.3 1-.1 1.2 1.1 1.2 1 0 1.4-.3 1.4-1-1.1-1.2 6.5-3.1 5.9-.6-.5 1.7 1.6 1.4 2.5-.4 3.4-3.6 11.1-3.2 16.8-4.8 4.9-1.7 29.7-5.4 19.8-9.5-2.5.9-1-7-1-7.8 26.2 7.6 47.5 12 79.6 16l-.4-3.1c-30.6-5.1-32.3-5.2-56-10.2-15.9-4.1-24.2-3.7-24.6-8.9-2.2-23.3-12.7-47.5-28.8-63.9-17.9-21.2-56.6-28.3-82.7-30.5-4.5-.1-5.6-.4-6.6-1.3-4.4-3.3-12.7-6.2-18.5-1.7-6.7 3.7.2 5.7-9 7.1-19.7 5.6-48 23.3-57.7 43.5-1.8 3.7-6 15-6 15.8 0 .5-2.5.1-6.2-.9-29.9-5-80.2-12.6-108.2-14.9-27.3-3.1-18.8-3-31-8.9-1.9-.5-2.8-1.1-4.1-3-1.6-3.2-6.6-4.1-6.2-7.9-2-8 5.8-12.6 8.7-17.9.5-2.1-.2-5.1-2.3-9.5-3.6-11.7-15.4-4.5-23-6.8-12.7-3.9-13.2-4-13.2-2.4Zm5.9 1.6c.5.3.5 1.1-.1 3.4-1 3.5-1.2 8.7-1.9 12.2-.5 2.8-2.7 16.1-4.3 16.3.4-5.9 2.6-14.2 3.4-20.6 1.3-2.7-.3-13.6 2.9-11.3Zm9.5 4.3c1.1 1.2 13 .6 16.7.5 13.4 11.3-7.5 12.2-4 27.4-.8 8.9 10.5 12.5 5.2 12.6-1.4 0-1.8.3-2.3 1.7-.3 2.4-3.2 1.2-4.2.8-.4-1.2-.1-7.2-2-7.8-3.6-3.8-14.3-1-18.1-6.6 1.9-4.8 3.5-13.2 5-22.2 1.1-8.2.9-7.8 3.7-6.4Zm258.2.7c4.9 3.3-4.9 1.6-8.6 2.4-5.9.4-6 .4-4.8-.6 4.9-3.8 9.1-3.9 13.4-1.8Zm7 6.3c2.3 1.5.1-.3.3-1.1 14.5-4 60.2 10.5 75.8 20.7 15.5 12.7 25.4 28.6 30.1 49 3.1 8.4 1.9 30.3 7.1 34.9 1.4.6 1 .8-5.5 2.5-17.5 4.5-33.6 6.9-51.3 8.8-3.3.2-33.4 3.7-38.7-.1 2.1-16.4.2-30.3-1.3-43.4-.1-7.5-5.3-43.4-11.4-52-3.5-5.5-5.7-12.8-11.2-17.1-5.4-4.3 2-4.6 6.1-2.2Zm-9.1 1.7c7.1 11.5 11.5 19.6 14 34.8 1.2 9.7 4.4 17.4 4.9 28.1.7 16.2 4.4 15.7 3.7 36.1-1.5 18.2 4.9 15.1-12.5 15.5-33.9-.5-54.6 1.7-82.6 7.5-16.7 2.2-19.5 10.3-16.1-8.8 3.3-43.2 4.6-80.4 50-103.6 7.2-4.3 21.5-9.3 30.1-11.3 4.9-1.3 5-2.1 8.5 1.7Zm-29.8 16.1c-9.8 5 9.9 5.3 8.6 1.8-2.4-2.3-5-4.3-8.6-1.8Zm5.4 1.6c-1.3.7-4.6 1.2-6.4 1.4l1.3-1.1c.1-1 8.2-1.7 5.1-.3Zm77.8.5c-2.6 4.6 7.7 6.2 10.2 4.8 3.5-2.1-8.1-9-10.2-4.8Zm6.8 1c6 2.6-6.7 3.4-6 1.4 0-1.9 2.7-2.6 6-1.4Zm-329.7 3.5c-.2.2-.7.2-1.1 0-1-.3 1.7-.4 1.1 0Zm6.8 2.2c8.1.7 11.5.9 15.5 2.1.2 4.3-.5 10.8-1.8 14.5-.9 1.7-.5 7.2-2.7 7.8-3.9 1.8-17.1-.3-23.2-1.5-5.8-1-6.1-1.3-4.7-5 6.7-23.2-4-19.7 16.9-17.9Zm-9.2 2.9c-3.7.7-2.5 6.5-3.7 9.5-4.2 10.2 14.9 10.8 21.6 11.7 2.6-4.8 1.9-13 2.6-17.9 1.7-4.7-18.1-3.2-20.5-3.3Zm17 5.3c-.6 2.4-.1 13.3-4.9 11.8-5.3 1.5.3-9.8 0-12.7-.3-1.4 5.5-2.2 4.9.9Zm2.8-1.9c0 .7-1.1.7-1.1 0-.1-.7 1.1-.7 1.1 0Zm-13.3 1.1c0 .6-.5 2.1-1.1 3.4-3.8 5.9 4.5 9.7-3.9 7.6-4.9-.8-1.4-2.6-1.8-6.3.4-4.2 1.7-5.8 4.7-5.8 1.7 0 2.1.2 2.1 1.1Zm24.9 7.3c.2 1.8-2.5.2-3.3.4-2.7.1-1.9-2.2-1.1-3.9 1.2.8 4.6 2.2 4.4 3.5Zm14.4 2.7c0 .6-3 .6-5 0-2.6-.8 5.8-.6 5 0Zm15.2.8c28.7 4.4 42.8 3.4 67.3 9.1 17.1 3.2 38.3 4.9 56 9-.3 1.5.2 4.4-1.8 4.2-3.4-.3-9-2-12.4-2.7-21.6-3.5-54-8.1-77.3-12.7-6.6-1.3-10.6-1.9-28.5-4.1-13.7-1.7-14.4-1.8-14.6-3-.1-1.5-.3-1.5 11.3.2Zm398.1 8c-15 3.3-19.8 2.3-36.9 10.1-6 3.2-16.8 2.4-21.6 5.5-4.3 1.5 1.4 2.5.6 1.6 2-3.6 21.4-4.1 25.7-7.1 10.7-5.7 25-7.3 36.7-9.3 3.3-.8-1.4 3 3.4.5 6-2.8-6.2-1.8-7.9-1.3ZM416.7 237c0 1.6 1.5 4.2 2.7 4.9 1.4.8 1.8.2.8-1.5-.5-1.2-2.6-6.9-3.5-3.4Zm-6.1 1.9c.2 2.7 6.2 7.8 6.6 10.4-3 1.5-7.6.4-10.3-2.6-7.7-6.6.9 5.5 3 4.6.6-.4 11 5.5 11.5 5.3 0-.5-5.8-4.1-7.1-5l2-.2c1.5-1.3 8.2 5.7 6.1 2-3.6-3.8 7.4-.6 8.7-2.2 8.8-2.7-11.8-1-11.2-2-.6-.9-8.2-12.3-9.3-10.3Zm510.8.8c-12.7 4.1-19.3 8.2-39.8 9.8-9.6 1.8-17.6-.1-13.9 5.6 1.6-1.9.6-4.3 5-3.8 3.8 0 25.5-2.6 30.1-3.6 1.8-.3 30.2-9.2 18.6-8Zm-485 3.9c1.8.8-1 .5-1.4 0-1-.6-.1-.6 1.4 0Zm23.6 6.7c-9.7 3.8 2.4 1.4 3.6-.1.5-.9-.7-.9-3.6.1Zm-22.4 2.4c1.3 1.4 1.5.6 1.4 4.5-1 5.8 5.8 10.3 9.6 10.6 1.5 0 1.4-.1-.8-.8-2.5-.6-5.8-4.1-7.9-6.2.8-8.8.8-6.6 7.6-2.1 1.9 1.7 4.7 3.6 5.5 3.6-.7-1-4.1-3-5-4.5l1.6.3c3.2.8-3.8-2.1-3.3-2.4-.1-.4-3.8-2.8-2-.9.5.7-.4.3-2.9-1-4-2.2-4.3-2.3-3.8-1.1Zm17.9 1.1c-.8.9-.6 1 2.3.8 2.2-.5 8.2 3.8 8.5 2.8-.4-.7-1.8-.4-2.2-1 .2-.8 6.5.3.8-.9-3.2 0-7.7-3.8-9.4-1.7Zm-27 4.1L425 260c-4.5-.1-20.7.2-20.9-1.7-1.4-1-5.4-2.6-2.8-.1.9 3.9 17.5 3.5 20.6 4.5-1 1.5-.5 1.9 1.4 1.1 4-1.3 8.3-5.6 10.9-6.5-.3-1.7-1.6-2.2-5.7.6Zm24.9.7c-6.2 4.7 11.2 2.2 11.8 4.3.9 1 .9 1.1.1 1.1-1 .2-2.4-2.1-3.2-1.2-.8.8 2.4 1.8 5.3 1.7 3.5-.1-.8-.4-1-1.4-.6-3.2-14.1-1.5-12.5-3.3.4-.5 1.2-1.1 1.9-1.3 2.4-.9-1.8-.4-2.4.1Zm-18 4.2c-.6 1-1.1 10.4 1.5 10.6-1-.2.9-13.3-1.5-10.6Zm-34.6 2.3c1.3 1 4.3 2.1 4.3 1.5.4-.5-7.6-4.5-4.3-1.5Zm26.5 2c-3.3 1.9-2.2 1.6-5.4 3.6-2.3.9-3.2 3.8-5.1 3-.7-.4-2.1-.2-5.6.8-14.6 3.9-5.1 5 2.6 1.2 2.8-1.3 3.3-1.4 3.7-.6 1 1.7 2.1 1.2 9.3-4.1 2.3-1.7 4.4-3.2 4.7-3.4.5-.4-.5-2.1-1.3-2.1-.3.2-1.6.8-2.9 1.6Zm26.9-.9c-2.8 1.7 9.6 2.1 9.1 3.2 1.1.7 1 .5-.3-.6-1.1-1-5.4-3.4-8.8-2.6Zm-42.9.9c-3.7 1-5.2 1.8-4.9 2.6-1 1.9 11.7-2.5 13.1-2.4 1-1.2-5.4-1.3-8.2-.2Zm29.2 2c-.1 3.4 6.9 5.1 9.1 7.1.7 1 .9 1 .9.3.3-2.3-7.1-3.4-7.8-6.3-.7-2.1-2.2-2.9-2.2-1.1Zm23 3.5c5.9 3.8 5.2-1.9 3.5-.2-.2.5-.7.5-2.3-.3-3-1.4-3.7-1.1-1.2.5Zm-66.3.4c-2.4 2.2 7 3.8 7.1 2.5.3-.5-.1-.6-1.8-.4-7.1.6-2.6-4.3-5.3-2.1Zm124.1 1.7c-2.1 10.5 1.1 23 .4 33.3-1.5 24.8.5 36.6 1.1 60.9.7 29.3 1 33.4.7 68.3-.1 10.9 0 12.1.8 12.3 3 2 1.6-30.3 2.1-45.1 8.7.2 18.5-1.8 28.4-.6 13.9 1.3 22.9-2.2 35.3-.5 10.2 2.1 20.2-4.2 27.4-.6 1.5-.2 1.4-.3-1.3-1.2-10.1-3.1-18.5 3.3-31.2.7-4.8-1.1-22.9 1.3-27.9.9-3.9-.6-18.8-.4-24.7.3-3 .4-5.6.5-5.8.4-.2-.6-1-32.1-1.1-32.7-.2-20.2-1.6-29.5-1.6-54.6.1-26.7-.7-19.2-1.9-36.4-.2-6.3-.4-7.5-.7-5.4Zm-96.7.8c-3.4 2.3-3.7 1.7-8.8 6.7-1.5 1.5-2 1.6-3.9 1.3-2.2-.3-11.2 1-12.9 2-2 1.1 1.2 1.1 7 0 12.9-3.3 5 2.5 10.2-.5 3.3-1.3 18.2-13.9 8.4-9.5Zm8.7-.3c2.1 4.6 10.1 12.6 14.7 15.2.9 0 .9-.1-.1-.5-1.5-.6-10.7-10.5-12.2-13.1-1.1-2.1-2.4-2.9-2.4-1.6Zm8.4 1.2c.8 1.6 10.8 9 9.7 6.9-2-2-5-3-7.2-5.5-2.9-3-5.2-4.2-2.5-1.4Zm11-.9c.9 2.5 19.2 2 5.6.1-2.5-.2-5-.6-5.7-.8-1.2-.4-1.2-.4.1.7Zm7.9 5.4c8.1 6.5 7.7-2.3 5.3.4-.8 1-.8 1-2.3-.1-.9-.9-4.5-2.1-3-.3Zm-64.1.7c1.3.9 10.5 2.6 3.6.6-5.2-1.7-6.1-1.8-3.6-.6Zm460.6 1.9c6.9 4.1 19.5 3.8 31.9 7.8 19.4 3.7 41 10.3 59 12.7-.2-6-26.8-8.3-32.7-10.8-8.7-2.2-21.7-4.2-30.5-6.4-6.9-.9-23.5-5.5-27.7-3.3Zm-429.2 2.6c-5.5 2.5-8 5.4-3 3.9 4.1-1.2 14.8-9.1 3-3.9Zm19.9-.9c-.2 1.1 11.5 1.8 12.5.2.8-.8.4-.9-6-.8-4.4 0-6.8.3-6.5.6Zm-30.7 2.3c-6 2.6-2.4 4.5 3.4 1.4 6.2-2.6 1.3-3.8-3.4-1.4Zm19.3 1.3c1.1 3.5 3.9 7.6 6.2 9.1 1.3.8 1.2.7-.5-1.5-1.1-.8-6.3-11.6-5.7-7.6Zm21.4 1 1.3 1c-2.8-.5-11 .2-11.1 1.5 3.3 1 14.1-.3 15.6.4 1.3.4 1.5-1.4.4-1.3-.6.4-9.8-4.8-6.2-1.6Zm-66.2 1.4c-1.8.8-1.5 1.2 2.1 2.8 4.6 2 10 2.1 8.8.3.6-1 3.6-.4 5.2-1.2 8-3.3-19.6 2.4-14.9-1.7.9-1.1.9-1.1-1.2-.2Zm434.5.4c-.6.4-.3.4 1.1.2 4.8-.9.1-1.1-1.1-.2Zm340.5 2.8c-7.6 7.1-26.3 26.4-29.4 30.8-5.3 7.3-10.4 11.5-22.1 18.5-10.8 7.3-24.8 13.3-26 19 .3 1.3-.1 2.2-2.2 4.8-3.1 3.9-5.9 9.9-8.5 13.9-1.2 1.8-18.4 33.4-8.9 25.7 5.2-6.2 6.3 4.7 8.7 8.5 1.9 3.7 1.9 3.9.6 3.6-.9-.2-2.6 1.8-2.8 3.1-.6 1.3-1.4 1.7-2.6 4.2-8.5 13.3-17 24.8-19.4 35.1-1 4.4-3.6 9.9-4.7 13.6-1.2 5.8-3.8.3-7.2-3.2-5.6-5.5-15.2-19-22-21.8-.4.1-2.7-2.1-1.7-2.4.6-.2-1.3-.6-2.7-.4-1-.1-8.9-4.6-11.1-5.8l-.7-3.3c-.8-3.4-1-15.2-.7-41-.6-8.8 1.5-14.4-1.4-15.7-1.2 0-1.1-.8-1.6 11.6-.8 14-1.9 33.8-.7 46-2.4.9-27.1-11.5-33.7-12.7-14.7-4.8-16.1-8-29.9-13.7-6.3-3.1-8.1-3.8-10.3-3.8-2.1 0-2.8-.2-3.5-1.2-.9-1.5-3.8-1.5-1.5.8 1.1 1.4 1.5 1.5 3.5 1.4 1.9-.2 3.1.2 7 2.4 5.9 3.3 11.8 5.2 17.5 8.8 3.8 2.4 13 6.1 15.2 6.1 2.3 1 26.5 10.7 28.9 11.6 5.2 1.5 20.1 10.4 26.3 12.9 4 .9 7.2 7.7 11.4 11.6 5.1 5.4 11.7 13.2 15.5 18.9-5.6 11.8-15.1 28.7-20.8 40.3-3.7 6.5-8.7 13.3-12.8 19.7-1.9 4.1-4 10.1-4.7 15.1.7 1.5-4.8.6-4.9 1.5-.6 1.7-28 14.1-34.3 17.1-.6-3.9 20.5-34.9 25.1-43.5 15.2-25.8 13.3-27.5-5.4 4-5.2 8.6-7.2 11.1-12.1 18.3-20.3 32.9-4.1 17.9-37.5 42-3.4 2.9-3.9 2.9-2.9-.2 6.4-19.2 10.9-40.9 15-62.5 2.7-11.3 3.9-25.5 1.1-20.1-3.2 16.2-9.2 40.8-12.8 57.2-4.1 15.9-12.4 41-13 53.5-.1.2-.2.7-.3 1.1-1.6-10.3-.6-25.4 1.7-42.3 2-24.2 6.1-58.9 12.2-74.4 1.5-1.6.4-6.6-2.1-2.5-6.6 16.3-11.2 35.1-12.5 55.1-2.1 22.5-5.3 42.7-3.5 64.8 2.6 29.6-3.2 58.8-6.9 88.1-.9 8.3-1.9 8.9.5 9.5 3-11.3 7.4-48.2 9.2-61l.8-6.9 5.8-11.3c10.3-19.2 18.4-36.7 28.9-53.8 5.4-8.2 17.8-11.5 26.1-15.9 7.9-3.3 14.5-6.7 16.6-8.4 2.3-1.7 4-2 2.9 2-2.4 8.2-3.5 44.2-.9 59.3 2 16.6 8.2 45.8 9.2 59.4 2 47.3-2.3 97.7-7.3 144.5-1.4 15.2-1.9 26.4-2.8 41.6-.6 13.4-.5 16.7.4 16.4 4.1-11.7 2.5-18.6 4.9-36.6 2.4-29.4 4.6-41.5 6.4-64.8 3.1-30.2 4.3-73.9 3.2-102.5 1.3 1.3 8 21.6 13.1 25.5 3.3.4-1.1-5.3-3.4-10.9-11.2-18.5-16.9-50-20.3-79.2-.9-13.3-.7-48.9 4.3-59.7.5-.8.6-1.5.3-1.8-.8-1.4 1.4-6.7 1.6-8.5 5.4-14.5 12.4-19 20.4-35.6 6.4-11.8 9-17.3 15-27.9.6-3 4.5-1.8 2.7-3.8-1.1-.9 9.1-18.6 10-22 1.3-4.2 9-14.8 11.2-19.5 2.7-4.1 8.8-15.4 8.3-19.2-.3-1.7.6-.4 2 2.5 5 11.2 6.2 13.2 7.9 13.8.9.3 1.7.9 1.7 1.3-4.4 10.6-13 28.5-16.3 39.1-5 15.8-13.7 33.5-14.6 49.3-7.5 39-9 76.7-10.3 116-2.2 57-5.5 114.2-7.2 170.8 4.5-1.9 6.3-36.4 6.6-52.9.9-38 3.1-69.2 4.4-104.4 1.5-36.8 2.1-76.5 8.1-116 1.3-5.3.6-13.9 2.4-15.4 2.4 64.8-.2 116 3.4 179.6 0 5.8 2.1 6.1 5.3 9.5-5-46.5-2.8-136.9-6-180.1-.4-4.5-.8-8.7-.8-9.2-.1-1.5-2-2.3-1.4-4.3.3-1.9 6.3-19.9 9.3-28.1 7.7-22.6 19.9-49.6 29.3-71.8 5.2-8.3 11.9-16.9 18-23.6 13.9-6.4 14.8-8.4 39-.4 7.5 2.3 11.6 4.7 23 13.2 16.4 12.5 33.3 21.6 40.2 38.1 2.5 5 9 15.8 12.9 21.7 2.7 4 3 5.2 1.7 6.3-1.1.9-.1 2.2 1.7 2.2 6.5 4.7 7.9 37.3 7.5 44.4-.2 3-.9 7.1-1.9 9-.1.6-1.9 5.3-1.5 5.9.2.2 0 .3-.3.3-1.3 2.6-3.2 13.5-5.3 17.4-6.5 14.4-17.7 39.7-25 54.3-6.3 10.7-10 27-16.6 40.5-2.9 4.9-1.5 2.7-3.1 7.1-7.4 23.6-7.3 48-10.3 72.3-2.9 16.9-4.4 32.4-7.7 49.9-.7 6.5-10.1 46.4-5.2 47.7 1.6 0 2.4-1.8 3-6.8 1.9-14.6 3.6-26.1 6.2-37.3 3.8-19.5 6.3-36.8 9.4-58.1 2.2-23.9 2.6-40.9 7.3-64.2 12.7-36.6 35.5-75.6 47.6-107.6 1.9-6.4 4.6-17.5 6.7-24.9.2-.6.3-.6.7.3 3.6-10.9-.2-39.2-7.2-52.7 0-.9 10.7-7.5 17.8-10.9 23.7-11.2 35.1-23.5 54.6-35.5 2.1-1.8 1.5 12.2 2.7 21.2 3.9 37.8-4.4 87.4-12.2 125.4-3.5 20.4-10.2 37.3-12.8 56.8-5.2 30.5-12.9 61.8-16 92.9 1.3 2.5-9.4 22.1-13.4 28.4-8.4 14.6-18.1 31.8-27.4 46.5-.2.1-.4.5-.4.9.1.8-3.4 5.1-3.3 5.8-.4 1.1-1.1.5-1.9 2.3-.6 1-1.3 2-1.6 2.2 2.1.2 3.6-1.2 7.1-6 11.7-16.3 29.5-47.7 37-62.1 5.2-11.4 2.8-4 3.6 7.1.1 13.8.3 18.2 1.2 22.2 6.2 29 12.2 50.5 20.8 78.4 2.1 6.8 4.6 11.8 5.3 18.1 0 1.8.7 2.4 1.6 1.3 2.4-7.9-4.9-22.3-6.7-31.3-4.8-16.3-7.3-27.6-11-42.9-10.8-39.8-6.7-76.2.6-114.9 3.1-15.4 8.4-45.1 10.2-58.2 4.4-19.8 9.1-34.7 11.4-45.9 11.2-49.6 18-99.1 11.3-148.5-.1-1.6-.4-3.2-.5-3.5-.3-.5 2.4-3.5 4.7-5 1.2-.8 1.2-.9.4-2.6-1.4-4.3-4.2.6-6.3.1-.5-.6-1.1-2.6-2.9-10.6-.7-3.1-1.6-5.6-1.9-5.5-2 1.7-3.4 3.2-2.2 6.8 3.6 15.3 6.1 12.4-14.1 26.3-17.2 11-20.3 17.2-38.4 26-7.4 3.8-13.2 7.3-19 11.4-14.1-19.1-18-38.7-41.6-52.2-18.8-13.3-26.5-22-52.3-27.5-12.8-3.8-16.7-1.7-25.3 1.8-.6-.6 13.8-17.1 21.7-24.9 5.6-4.5 6.1-9.5 10.9-10.4 3.1.6 22.2-11.5 26.4-10.8 5.3-.7 17.8-9 23.2-12.6 3.3-1.1.9-2.8-.5-4.4-9.3 5.1-16.6 12.6-27.2 15-3.3.5-9.1 4.1-10.5 3.3.2-.4.2-.8 0-.8s-.6.6-.9 1.4c.1 4.5-36.6-6.7-41.2-6.6-4.8-.6-3.3-.9.4-3.3 8.4-4.9 13.5-12.8 19.8-20.2 16.2-18.2 29.2-29.9 19.2-28.3Zm-739.6.3c-1.6.4-7.7 4.4-8.7 5.9-2.2 3 4.3.4 9-3.5 1.9-1.6 1.8-2.8-.3-2.4Zm8 3.8c.1 2.1 10.1 13.6 5.2 6.6-.7-1.2-9.3-16.4-5.2-6.6Zm-17.4-2.2c-1 .4-12 2.6-8.1 3.6 5 .3 19.7-6.2 8.1-3.6Zm27.2.2c3 7 9.6 2.6 13.3 5 1.8 1.4 4.6 1.6 4.6.3 0-.6-.3-.8-.9-.5-1 .8-6.8-5.4-6.9-3.1-.2.6 2.3 2.3 0 1.6-2-.8-7 .8-7.6-2.3-.9-2.2-3-2.9-2.5-1Zm315.9.2c-7.3 6.1-26.2 15.2-31.8 20.2-16.8 12-41.1 22.1-61.5 27-23-.3-48.8-.9-65.9-2.5-1.4-.4-14.4 2.1-13.6.9 17.4-13.2 29.9-21.7 45.1-34.3 7.1-6.4 14.5-4.1 26.9-7.2 31.2-6.3 72.7-4.8 100.8-4.1Zm7.8 2c-2.2 1.4 2.2 1 1.9 0-.4-.7-.8-.6-1.9 0Zm-377.8.5c0 .7 5.7 3.4 8 3.8 3 .4.8-.9 5.3-1.7 9.1-2.3-.8-3.4-4.7-1.4l-3.2 1.1c-1.2-.8-5.5-3.3-5.4-1.8Zm50.2 3.6c1.4 2.6 9.8 6 11.2 5.5.3-.3-10.1-5-9.8-5.3-.3-.5-3.4-2.7-1.4-.2Zm468.6.1c-.5 3-1.4 43.2-2.2 44.8-.4 11.5-4.1 34.7-2.1 45.8 4.9 2.1 4.2-38.6 5.7-46.9-.2-7.5 2.8-48.4-1.4-43.7Zm15 6.4c-1.1 29-12.6 70.6-3.4 85.8 0-18.7-.1-35 2.5-53.4 2.4-14.1 3-55.2.9-32.4Zm-492-4.7c1 4.3 2.5 9.9 6 12l-.9-1.4c-3.2-4.9 4 2.6 5.8 1.9 5.6 1.4 5.5.1-.4-2.1-6.1-2.4-6.3-2.5-7.1-5.7 0-1.7-3.5-7.9-3.4-4.7Zm-43.5-.1c0 .7 5.8 3.1 7.3 3.1 2 0 1.9.4-1 2.9-2.3 2.5-6.1 2.6-9.4 3.1 3.3-.1 9.4.1 11.2-1.7 3-1.8 9.2-4.7 10.1-6.8.5-2.5-6.3 1.6-8 2.6-2-.8-10.9-4.4-10.2-3.2Zm21.9 1.3c-6 3-8.6 7.7 1.6 2.3 2.7-1.3 5.3-2.2 5.8-2 .7.2.6.1-.2-.5-1.4-1.1-4.5-1-7.2.2Zm16.9 3.2c0 3.5 1.9 10.3 3.2 11.3.7.6.8.6.6-.4-.4-1.9-3.3-21.7-3.8-10.9Zm-7.1 1.5c-2.6 4.9-3 5.9-2.4 6.9-1.7 4.1-11.6 12.7-9.6 16.1.2.3.8-.3 1.3-1.3 1.8-3.3 2.8-3.9 5.7-7.9 1.6-2.1 3.1-4 3.4-4.2.9-1.6.7-3.5 2.4-6 3-4.3 4.2-12.4-.8-3.6Zm31.9-2.1c2 4.2 10.2 2.8 5.8 1.4-2.2-.7-4.4-4.2-7.3-3.3l1.5 1.9Zm-39.9 5.2c-3.9 2.8-10.1 8.1-6.5 8.4 2.2-2 10.2-8.4 11.8-8.5 1.3-2.2-1.8-2.7-5.3.1Zm-9.5 0c-2.2 1.4-6.7 6.8-9.3 6.6-2.2 0-7.8 2.5-7.3 3.3-.4 2.6 11.3-5.2 6.9-.8-.6.5-1 1.2-.8 1.4.4.6-3.6 4.1-4.3 3.9-1.5 0-3.5 2.4-.3 2.1 2.3 0 8.9-5 7.3-5.5-.7-.2-.4-.7 1.6-2.2 5.6-4 14.9-14.3 6.2-8.8Zm46.7 2.5c1.3 1.1 6.6 3.8 7.2 1.4-.6-.8-2.3.1-4-1.1-2.7-1.4-4.1-1.5-3.2-.3Zm-26.9 4.5c-.8 3.9-2.6 26.2 1.1 28.3 1.7-7.4-2.6-22 1.1-29.6.7-1.7-1.9-.3-2.2 1.3Zm-21.2.5c-1.9 1.2-8.4 8.5-9 10.1-.3.7-.3 1.7-.2 2.1.4 1 6.5-5.2 9.5-9.6 2.6-3.6 2.5-4.4-.3-2.6Zm34.3-.1c1.1 4.3 9.4 7 11.3 11.3 1.2 2.3 3.9 4.4 5.3 4.1 2.7-1.1-1.4-1.9-3-4.7-2.3-3.1-3.3-2.6-5.3-4-1.7-1.6-4.3-2.5-6.2-4.8-1.1-1.4-2-2.2-2.1-1.9Zm14.4 2.5c1.7 2.9 8.8 2.3 4.9.8-1.3-.2-4.5-3.1-6-3-1.2.1-1.1.3 1.1 2.2Zm-20-.8c.7 1.3 5.6 6.1 5.8 5.8.7.3-6.3-7-5.8-5.8Zm-29 7.8c-4.7 4.9-4.9 9.2-1 5.8 3.2-3.4 8.1-14.3 1-5.8Zm28.8-2c-1.8-.3 5.7 16.6 2.8 6-.9-1.4-.9-8.2-2.8-6Zm-17.1 4.3c-.6 2.2-.8 3.9-1.5 6.8-1.2 3.7.4 7.5 2 6.6 0-3.3 3.4-13.9 1.9-13.6-.9-1.1-2.1-1-2.4.2Zm-8.5 2.2c-2.7 4.3-3.9 6.6-1.2 7.9 1.3-.3 8.1-16.6 1.2-7.9Zm-11.7.3c-1.3 2.1-1.5 4.2-.5 4.2 2.6.8 6.8-10.7.5-4.2Zm49.5 1.5c1.1 4.6 5.6 9.1 6.9 5.1 0-1.2-.1-1.3-.8-.7-.9.8-1.7.1-3.3-2.9-.4-1-3.7-4-2.8-1.5Zm-15.1.6c-2.3 1.2-.4 19.5 3.2 18.6 1.5 0 2-1 .9-1.8-1.2-.9-2.4-6.9-3.1-8.1-.7-1.4-.2-7.5.7-8.7.9-1.2-1.4-.6-1.7 0Zm-28.5 1.4c-1.2 1.3-2.6 4.3-2.6 5.3 1.5 4.3 6.5-10.2 2.6-5.3Zm35.8 2.8c1 2.6 2.5 9.7 6.4 6.7 0-.3-.2-.5-.5-.3-.7.6-5.9-10.7-5.9-6.4Zm-27.9 2.3c-1.1 2.2-1.6 6.5-.9 7.7 2.8 2.7 1.8-4.7 2.8-6.7 1.2-4.6-.4-3.7-1.9-1Zm11.1 2.7c-.8 2.3-1.3 9.1 2.1 9.9 1.1.2 1.2 0 .8-1.1-1-1.1.9-13.8-2.9-8.8Zm194.1-.5c3.3.5-1.3 2.1-3 1-4.8-1.5-.6-1.8 3-1Zm518.8 3.3c2.6 1.1 31.9 6.5 29.9 7-26.9 18.8-54.2 50.4-66.9 82.1-4-6.4-6.8-13.8-11-21.3-3.4-7-4.4-10-9.6-13.6 1.1-2.8 6-12.7 7.7-16.2 4.8-8.6 13-26.7 14.1-21.9.2.7.3.4.3-.9.1-2.4.6-2.9 6.5-6.7 9.4-5.7 17-13.3 29-8.5Zm-553.4 2.8c-2 1.7-2.8 2-2.8 1.1 0-.9 7.1-4.9 2.8-1.1Zm13.3 5.8c0 .4-2.4 1.3-4.3 1.6-2.6.5 4.7-2.9 4.3-1.6Zm-17.5 2.4c.3 1 3.8 1.3 2.5 1.8-4.5 1.1-7-5.2-2.5-1.8Zm308.3 36.7c-.6.7-.6.8.1.7 1.8-.4 1.1 7-1.6 16.6-4.1 17.3-12.7 46.6-19.4 54.4-20 26.3-70.1 71.4-95 26.4.2-2.5 1.2-13.3 1.1-13.9-3-.2-2.7 3.8-3.1 5.8-1.1 3.2-.8-5.7-3.5-2.6-2 .4 1.7 10.6 2.3 11.9 1 1.9 1 3.4.9 25.8.1 18.9-.4 23.7 1.1 33.3.8 14.3 15.3 32.3 29.8 22.2 24.6-28.8 45.8-60.3 63.3-95.1.4-2.9 12.2-15.6 17.2-21.6 7.1-7.9 14.3-17.4 20.5-25.2 6.9-8.7 15.9-21.3 26.5-24.2 1.5-.4 1.6-.4.3-.5-11.5-6.2-23.8 15-31.5 23.5-7 8.1-14.5 17.8-21.2 25.5 3.9-10.8 10.2-31.8 13.9-46.6 1.1-2.5 2.7-20-1.7-16.4Zm-508.9 33.1c-.2 32 1.8 29.6 3.7 52.1 2.5 36.6 2.5 34.6 4.5 58.4 2.8 44.9-1.9 113.7 3.6 156.4 2.9 5.9 2.5-.1 1.6-5.9-4.4-38.4.5-97.8-2.8-152.7-2.8-25.1-2.7-48.7-6.3-73.9-2.6-1.7-1.6-51.8-3.5-58.3-1-.9-1 .2-.8 23.9Zm692.6 18.3c-.5.9-1.2 1.8-1.5 2.1-.3.2-.1-.6.7-1.9 1.4-2.6 2.2-2.7.8-.2ZM631.6 461c-1.3 2.5-16.7 1.7-20.1 1.5-8.3-1-20.4 1.9-28.4 1.9-1.9.4-3.2 1.1-5.4.9 2.3.8 3.7.9 7 .5 5.7-.8 12.3-.3 18.5-1.4 5.3-1.5 18.1.9 22.9-.2 1.5-.3 3.6-.4 4.7-.3 4 1.6 3.2-6.9.8-2.9Zm71.8 6.1c-19.7 9.6-24.3 7.5-38.9 19.3-17.1 16.2-27.2 44.7-28.7 69.2-2 10.1 2.5 16.7 4.2 1.7 3.5-36.9 18.7-71.8 56.2-83.3 3.6-2.4 20.3-10.3 7.2-6.9Zm517.8 18.8c-5 16.9-14.4 33.1-23.6 48.7-9.1 18.6-25.7 43.9-34.7 59.8-.4.9-8.2 12.6-9.4 14-1.8 2.2-.8 1.9 1.6-.3 14.6-16.2 9.7-12.8 22.6-32.1 7.8-12 12.8-19.9 19.3-32.6 8.7-15.8 23.2-39.4 26.4-55.2 0-1.1 0-1.1 1.2-.1s1.2 1 .3-.1c-.5-.6-1-1.8-1-2.6-.5-2.4-2.2-3.1-2.7.5Zm-367.9-.1c-16.4 33-36.9 61.9-57.6 87.9-11.5 16.3-26.3-3-28.3-15.2-2-12.7-2.3-41.1-1-54.6 18.7 18.7 48.7 12.1 68.2-2.2 7.4-5.4 14.1-12 19.1-17.1 0-.1-.1.5-.4 1.2Zm-142.5 13.4c-.7 14 4.6 82.9 2.1 85.2-5.2 14.3-9.4 38.6-15.6 56.3-3 9.4-7.1 19.6-10.9 29.8-3.6 9.4-3.6 9.4-2.5 9 2.6-.1 5.6 2.2 9 2.9 6.6 1.4 17.3 9.3 23.2 9.2.9-.3-2.9-2.5-5.5-3.1-6.2-2.1-13-6.6-18-7.4-6-1.6-6.6-2-5.3-3.9 1-1.5 2.3-4.6 7-16 11.1-25.1 15-47.1 22.3-72.2.3-1.2.7-2.3.8-2.4 9.1 2.8 18.4 11.3 29 16.6 5.4 2.5 19 13 24.9 18.4 6.7 10.4 20.3 24.4 29.8 30.6 17.6 12.2 33.8 22.6 55.9 39 7.5 4 22.1 24.5 30.7 29.3 4.5 2.6 13.8 6.7 20.5 8.5 8.9 2.3 24.7 13.2 31.7 17.6 3.4 2.5 16.2 10.8 16.9 11.7 2.6 2.9 1.8-4.9.4-5.2-9.3-7.8-26.8-18.9-38.6-25.3 2.4-5.5 8.3 1.6 31.7 11.6 4.8 2.3 8.9 4.2 9.2 4.2.4 0 2.5-3.3 2.2-3.5-7.3-3.6-15.7-7-23.2-10.3-4.7-1.9-12.5-6-16.3-6-1.2 0-3.7 2.9-4.8 4-8.8-3.4-19.4-6.5-27.4-11.8-1.9-.9-6.2-5.2-15.1-14.7-4.2-5.3-13.7-11.7-16-15.6 2.7-10.8 9.2-27.4 10.8-38.3.9-5.2 4.2-18.3 5.9-23.1 1.5-4.1 1.7-5.3.8-4.5-1.4 1.4-5.9 17.8-9.2 33.4-1.2 7.2-7.2 22.7-7.4 25.4 0 1.5-1.8 6.1-2.5 6.4-.7.3-13-7.5-17.9-11.3 3.4-12.2 3.8-19.4 8.7-32 5.8-13 8.1-17.4 14.1-33.4 8.1-20.9 15-34.9 20.1-53.2 2.4-8.3 4.2-13.3 6.6-20.7.4-1 .3-1-.4 0-7.4 16.1-11.6 37.4-19.6 53.5-5.5 11.8-12.5 33-18.7 46-5.5 9.5-9.2 31.1-12.4 38.6-16.2-12.3-48.8-31.7-56.6-46.3-11.3-16.8-23.4-21.8-39.7-30.9-10.3-6-18.2-9.8-21.7-10.6-1.7-.4-3.2-1.1-3.5-1.5-.4-2.2-1.3-32.6-1.4-35-.6-13.9-1.3-34.7-2.8-48.4-.2-1.7-1.2-2.1-1.3-.6Zm-24.8 8.3c-.2 4 4.8 47.5 5.8 57.7 1.2 7.8 0 15.1 3.4 14.4 2.5-3.6-2.5-26.4-2.3-31.8-.8-1.2-4.7-50.1-6.9-40.3Zm536.5 19.4c-.2.6-.2 1.3 0 1.5.5.2.2-1.6.9-1.5.4 12.9-.1 6.9-8 44.4-7.2 34.7-14 58.1-26.1 91.5-9.3 25.2-15.8 59.9-24.9 79.1-2 5.1-10.8 26.8-4.7 22.3 1.4.8 3.3-1.2 4-2.8-13 14.4 16.6-50.7 14.8-53.5 13.4-49.8 31.6-88.8 41.2-144.7 3.6-15.9 8.3-40.4 2.8-36.3Zm-503.1 12c.5.1 1.3.1 1.7 0 .9-.4-3.1-.4-1.7 0Zm236.4 52.8c-6.3 10.8-23.6 46.6-29.4 58.1.1-12.4 3.9-26.9 6.1-39.9.9-5 17.5-17.2 23.3-18.2Zm-78.4 26c-.8 1.7 1.2-.4.7-.7-.2-.2-.5.1-.7.7Zm325.9 33.6c.4.2.9.1 1.1 0 .5-.5-2.2-.4-1.1 0ZM716 694.6c-.4.5-.1 1 1.4 2 1.1.7 4.2 4.3 6.9 8 6.8 9.1 5.4 7.7 13.6 16.1 3.3 3.8 10.2 9.1 6.5 8.5-6.6-.4-6.8 1.1-.3 2.5 7.8 1.4 13.6 12.5 17.8 13.9 9 4.2 6.9 12.4 10.3 15.9.3-.1-1.6-7.8-1.3-7.9 7.8 6.2 22.1 22.5 30.6 31.9-8.6-2.7 7.2 6.7 9.8 10 17.1 16 15.9 14.7 15.6 16.6-4.9 20-8.8 41.1-16.9 56.5-4 7.6-7.7 26.8-1.5 11.3 7.3-21.1 13.2-32.3 17.4-55.9 2.7-12.7 2.5-12.1 3-12.1 6 5.8 12.4 13.3 20.3 19.9 12.7 11.4 28.6 27.5 41.4 36 7.1 5.2 25.5 13.9 32.6 19.3 2.8 3.9 18.6 9.5 20.7 7.7 1.9-1-14.3-3.3-15.4-5.9-2.1-1.5-1.6-1.7 1.6-.7 2.5 1.3 11.5.8 6.3-.8C870.5 857.6 822.7 796.5 770 746c-7.3-6.6-35.9-35.8-38.8-39.7-5.1-5.3-9.5-14.1-15.2-11.7Zm6 12.9c0 .7 3 3.5 3.7 3.5 1.4 0 1.4-1.1 0-2.5-1.3-1.3-3.7-1.9-3.7-1Zm190 31.1c13.3 14 33.5 42.6 41.4 57.5.7-3.3 2-5.4-.1-8.6-3.3-7.9-35.6-53.4-41.3-48.9ZM597.7 863c-.9 9.6-2.3 21-3.9 32.2.7.5 2.5 2.3 3.1 1.6.7-.7 1.2-5 .6-5-.3 0-.3-1.7.1-4.5-.2 1.4 4.1-31.3.1-24.3Zm9.9 4.4c-.3 2.7-4.1 25.3-4.1 28 .3 5.7-20-.5-18.6-1.4.3-.5-2.4-1.1-4.8-1.1-1.4 0-1.6.1-.9.9 19 11.8 45.7 4 63.7-5.8 10.4-6.9 26.3-7.4 36.3-14.9.8 8.3-1.5 26.6 0 34.2.2 1.5.3 7 .3 9.3 1.1.2 4.2 1.8 4.5.6.7-4.5.5-25.3.8-30.8.3-6.8-.4-9.6-1-14.3-.7-5.4-9.1.4-12.5.9-9.4 4.1-22.9 6.4-32.7 11.3-8.7 4.7-22.3 11.4-26.3 11.6-5.5.8-5.8.6-5.2-2.7.9-4.9 2.6-18 3-22.8.7-5.8-2.4-8-2.5-3Z\" }),\n React.createElement(\"path\", { d: \"M513.4 2.1c-.2.2-.3.5-.3.7 2.4 3 12.7 12.9 15.5 16.8 8.7 11.5 20.6 20.8 27.5 32.6 8.2 12.2 17.9 20.9 26.6 33.1 5.8 8 12.8 15 18.8 23.2 3.4 4.4 6.6 8.2 7 8.2.4-.1 3.2-2.5 4-3.1-6.9-9.9-19.9-22-26.2-30.4-6.5-9.3-18.9-21.8-25.2-30.1-5.7-9.6-19.5-23-28.2-32.9-5.7-5.9-17.7-19.6-19.5-18.1Zm856 15.1c-44 38-90.9 73.7-133.8 113.3l1.9 1.9c16-11.7 29.3-26.6 43.7-38.2 18.8-17.2 47.2-37.7 68.3-54.3 9.3-7.2 17.2-15.1 27.9-21.1-.1-1.6-3.8-4.5-4.9-4.3-.3.1-1.7 1.3-3.1 2.7ZM9 20.3c-1.8.5-3.2 1.5-4.4 2.6C60 44.3 117.4 68.3 175.9 83.6c38.4 10.2 48.1 14.4 81.5 29 4.8 2.3 15.5 6.1 25 8.9 15 4.4 31.1 13.6 46.1 18.2 1.4.5 2.6.9 2.7.9.1-.4 1.3-3-.1-3-15.8-5-24.9-12.6-42-18-25.9-7.5-39.1-15.9-61.8-23.8-24.7-9.7-55.2-16-83.1-27.8-21.8-8.7-48.7-17.3-70.9-25.8-22.7-8-33.5-13.7-53.2-20.2-6.2-1.9-7-3.1-11.1-1.7Zm1570.8 8.6c-17.9 7.4-38.3 23.2-52.9 31.5-33.8 18.2-63.1 36.6-94.3 57.1-3.1 2.4-7.8 3.4-6.2 6.1 1.3 2.4 3.4-1 6.2-1.9 16.1-8.7 35.9-24.5 50.7-33.8 24.3-15.3 47.4-26.8 70.8-42.2 2.5-3 24.3-11.7 31.8-15.6.8-.5-.8-3.4-1.3-3.5-.2.1-2.4 1.1-4.8 2.3ZM1692.9 46c-31.6 21.4-68.1 34.9-100.3 56.1-23.1 12.1-47.7 26.3-71.1 39.5-6.3 3.7-13.9 7.6-15 7.6-.7 1.8.6 2.9-3.6 4.7-3.5 2.1-11.2-.2-14.9-1.2-13.5 1.7-36.3-1.2-50.5-1.2-2.6.6-19-1.4-17.4.7 1.4 2.6-20-.7-18.8-.3-7.9-1.1-11.6-1.2-23.4-1.5-3.9-.1-4.8 0-4.8.5s-.2.5-.8.3c-1.2-.5-28.2-1.4-61.5-1.9-22.9-.9-13.8 1.5-31 1.7-7.5 0-10.5.4-8.2 1.1 3 2 106.5-.8 100.3 1.2 15.3 2.2 41.9 3.9 56.7 2.2 17.3-3.7 19-1.2 34.5-1.6 15-.4 17.9.4 24.3 2.5 1.7.2 2.1 0 2.3-.7.8-1.8 9.4.3 12.2 0-1.9 85.5-.8 158.1-1.7 231.4-.4 5.4-.1 5.7 3.5 3.7-1.3-79.3-.3-162.2 3.3-236.4 19.5-9.5 44.3-26 62-35.4 8.8-3.6 31.5-15.9 39.2-21.8 6-3.7 27.9-14.7 36.8-18.9 7.6-3.3 11.3-5.9 17.3-9.2 8.2-4.8 22.8-11.2 30.5-16.8 2.1-1.9 4.5-2.7 5.8-4.7 1-1.3-.5-3.4-1.7-3.8-.5.3-2.3 1.1-4 2.2Zm-1232 89.6c-19 2.1-50.3 3.1-71.9 1.3-4.3 3.8-5.7 1.7-8.9 3.1 2.6 1.4 5.9-.6.9 3.1.5-2.4 1.5-2.1-4.5-2.3-5.9-.2-9.1-.4-13.2-1.1-4.4-1-5.2 1.1-7.1 4 6.4 1.4 13.5 3.3 19.5 5.4 2.2 22.7 3.8 100.1-1.2 134.2-1.6 19.8 2.8 22.3.7 48.4.6 7-3.4 43.8 1.6 39.2.9-.6.9-1.6 1-24.4.1-27.3 1.5-34.3.5-56.4 3.6-35.8 3.4-42 3.7-88.3.1-29.9.4-39 .3-51.3-.1-2.9-.2-3.4-1-3.7-2.1.1 3.6-5.1 4.3-6.1 29.7.8 61.7-.2 83-1.8 39.6 1.5 78.9 1.6 108.9 3.3 5.9-.3 37.5 1.5 42.5.5 8.1-1.3 9.9-1.2 20.9-1.5 30.2.9 80.7 3.3 118.3 2.6.9-6.6-4.6-4.7-8.9-4.5-14.6.7-18.9-.4-39.4-.3-40.1 1.1-58.6-6.8-92.7-1.3-50.8 2.5-109.2-2.2-157.3-2.1Zm-404.1 74c-1.5 1.2 1.8 1 4.3 1.1 6.4.1 20.1 2.8 26.4 3.8 17.7 5 36.9 12.6 55.6 14.5 26.3 1.3 51.4 17.4 76.7 21 3.1-.3 4-.8 3-1.7-16.7-5.1-38-12.5-55.2-17.6-11.9-4.5-26.9-2.1-39.6-7.1-22.2-5.5-48.5-15.6-71.2-14Zm1219.1 51.7c-1.8.3-.7 1.8.4 1.3 3.8-.7 14.8-.3 19 1 18.8 2.8 49.8 3.8 68.3 1.8 17.2-2.6 46.1 3.8 63.8 2.6 4-1.3 1.6-1.7-17.8-2.4-16.5-.4-31.7-3.1-45.6-1.1-4 .6-8.4.7-20.1.7-18-.5-30.9-.7-46.1-2.9-2.4-1.2-18.9-1.5-21.9-1Zm351.5 22.7c-4.5-.2-21 6.6-26.8 8.4-7.2 1.8-30.4 5.6-31.9 7.2-4.3 2.2-9.7 1.7-11.2 3.3 9.1 1.8 20-4 30.2-5.1 17-1.9 31.4-7.5 47.2-13.7-2.3-.3-4.9-.4-7.5-.1Zm-1366 46.4c-9.5 6.1-38.5 8.5-41.6 10.7-18 4.5-36.5 12.4-53.9 18.7-11.7 3.2-17.1 5.7-23.5 11-2.9 4.6-2.5 12.7-4.3 18.1-2 3.7 1.3 3.6-.5 4.8-.5.3-.8.8-.7 1-16.3 3.2-48.2-5.6-64.5-7.5-3.9-1-27.9-.4-30.4-1.8-3.2-2.2-15 .2-18.2 2.2-.5 12.7-1.9 28.7-2.4 37.6.7 9.6 12 9.2 19.5 11 11 1.5 21.6 4.3 30.3 5.9 2.8 1.4 6.1-.1 5.5 3.1-.2 2.3.6 20.3 1.1 21.7.1 1.4 2.8 1 4 1.1-2.3 61.5.1 139.6-.7 200.9-2.1 22.2-2.1 47.7-1.1 79.3-8.7 0-29.3 0-35.6 2.8-1.7.3-18.4.1-23 .1-8.2 2.7-15.5 4.9-20.9 4.4v4.6c11.6.6 14.8-5.9 31-4.8 9.6 0 11.9-.1 15.5-1.1 5.7-1.7 22.1-2 28.1-2.9 1.9-.3 2-.2 1.5.7-3.9 5.8-16.9 14.8-23.1 21.1-7.5 7.7-10.3 10.5-15.7 15.6-15.5 14.3-13.3 13.9-23.3 24.4-3.5 3.7-4.7 4.6-5.2 7.2 2.7-.4 6.1-.7 8.2.6-17.5 3.1 59 25.7 62.4 28.5 1.4.9-.5 3.1-.3 5.1-.8 4.7 3.8 7.1 7.8 5.2 16.3-6.9 1.3-12.4 10.1-19.7 4.1-2.6 13.7-7.2 18-7.9 3.3 1.3 3.3-2.9 6.4-4.5 5.2-3.7 11.6-8.1 16.8-9.5 11.1-4 19.5-8.5 34.9-15.4 8.2-3.4 8.1-4.6 9.9-2.9-11 10.8-21.4 17-34.4 18.8-12.3 4.6-43.8 18.4-50.9 25.3 11.7-1.9 38.2-20.5 52.4-22.8 15.4-1.9 28.3-14.1 40.3-23.6-11.5-13.4-39.8-39-52-51.9 1.7-1.6 30.1-2.1 30.1-1.4.3.2 9.5 1.6 11.3 1.7 2.9.4 9.9-2.1 2.9-3.2-2.7-.3-5.8-1.5-5.5-2.1 4.2-.4 6.6.9 4.4-5.2-.3-.7-1.2-.8-7.1-.6-10.1.3-16.9.6-18.4.8-29.8 5.9-19.2 7.8-42-10.7-.5-25.3-1.9-67.2-3.6-90.7-.3-54.6 2.5-124.7.8-179.6.3-5.9-3-1.9-3.3-6 0-1.1.1-1.1 2-.8 8.1 2.2 17.6 5.1 24.2 4.6-.1 9.7 7.5 11.9 11.2 21.4 4.6 9.4 9.1 13.5 14.9 21.7 5.5 10.4 16.4 29.7 24.3 37.6 7 8.3 13.8 16.3 16.2 14.1 17.9-7.1 13.8-23.2 19.9-34.6 3.2-7.4 4.7-11.5 7.8-18.2 3.9-7.1 4.8-19.7 10.2-27.3-1.9 21.6-5.3 49.1-7.4 70.6-.4 32.4-.9 78.5-4.9 107.3-1.6 11.7-.7 26.5-8.1 36.9-4.1 8.3-13.2 16.2-20.3 27.1-4.3 6.9-7.4 12.3-11.8 19.7-2.7 4.3 1.8 3.4 4.5 5.3.9 1.2-7.5-1.4-4.2.6 2 .6 13.5 4.1 15.3 5.5 5.6 2.8 13.2 7.6 19.5 8.1-3 7.8 11.7 9.7 13.2 3.5 1-2.3 8.1-2.2 12-3.9 20.6-5.9 42.7-9.1 57.6-15.1.9-.6 1-.9.6-1.8.9-5.8-.9-8.4-7.5-11.4-23.7-11.5-43.2-30.4-63-45.6.7-15.1 3-26.2 4.5-39 2-19.3 2.8-46.8 4.7-67.4 3.8-43.1 8.8-75.4 7.4-123.8 6.7 19.8 13.7 36.3 23.2 59.2 4.9 16.2 6.4 28.2 15.6 42 4.2 1.6 7.8 1.9 13.4-1.4 10.4-6 17.3-13.5 29.7-15.7 3.1-.9 2-1.4 2.9-4.6.3-1.6 1.6-6 2.8-9.9 7.1-23.7 18.1-48.2 27-69.1 4.4-9.8 7.9-23.4 11.9-31 2.4-4.2 7.1-14.7 7.1-15.7-2.9-5.4-13.1-4-25.9-3.8-5.3.4-5.5.4-8-.8-15.9-7-17.2-15.4-38.7-14.2-9.4 7.3-22.3 10.9-32.7 15.7-6.1 3.2-14.3 6.7-15.2 6.4-.6-.2-2.1.8-2.1 1.4-3.5 4.2-8.9 17.9-11.9 24.8-5.7 10.8-8.2 21.1-13.5 33.3-2.3 7.5-6.1 13.6-7 20.8-1.2 10.8-8.2 22.9-12.7 33.6-2.8 6.1-4.3 10.6-6.1 18.9-.7 5.4-3.6 7.5-6.7 9.6-13.6-12.6-27.4-29.8-36.3-44.7-5.1-9.1-15-17.8-18.7-26.6-2-6.3-14.9-18-10.3-20.2 8.3 2 24.3 9.3 31.9 11 1.7.3 2.7-.1 10.1-3.8 8.7-4.3 10.9-5.7 10.5-6.3-.8-1.5-9.4-3.8-11.7-5.8-3.2-2.4-6.7-1.8-9.1-4.6-1-1.1-2.2-1.5-7.2-2.7.7-1.1-21.3-.4-21-2 0-1 .5-1.1 7.5-1.9 12.5-2.7 29.4 6.7 38.5-.4 1.6-5.3 3.9-13.7 5.4-19.4 2.3-7.8-6.2-9.8-11.5-12.1-1.5-.8 10.8-.1 11.2-1.9 3.4-1.7 3.7-4 1.3-6.6-1.1-1-1.3-1-9.2-.7-7.2.4-35.1.7-39 2.4-1.3.7-8.6-3.4-5.8-3.7 6.1-1.2 3.8-14.8 5.8-19.5-.2-11.9 21.9-11.8 31.5-17.1 13-5.3 28.1-10.6 41.3-14.1 4.8-2.3 31.4-4.5 40.5-9.5 3.3-1.7 3.2-1 5.5 2.1 4 5.1 7.4 8.7 7.9 16.1.9 3-2 10.5-3.1 12.9-3.6 7.6-4.1 18.6-8.4 29.1-1.9 5.5-2.3 7.1-1.8 7.4 2.8.4 6.7-.4 7.3-5.9 1.5-6 4-14.7 5-20.6-.6-2.3 6.7-16.8 6.4-23.9.8-8.1-4.2-14.6-9-20-1.1-.3-6.8-.4-8.5.2ZM1329.7 377c-1.5.9-1.5.9-.8 2.7 1.3 5.1 5.2 28.7 5.9 33.5 1.9 11.7 3.3 15.3 6.3 26 4.6 19.9 8.1 39.2 12.2 56.8 1.8 10.4 2.3 9.8 4.5 19.7 1.7 5.8 1.4 9.9 4.6 12.8 12.4 1.3 27 2 40 4.7 20.4 2.5 17 6.2 33.7 6.8 15.2 0 13-.2 14.4-14 .1-5.8 3.1-30.1 5.7-36.5 1.4-4 1.1-4.7-1.5-3.5-5.6 3.9-4.1 28.5-6.9 36.2-1.8 10.3-2.7 14.4-3.1 14.8-4.5.4-13.2-.2-18.4-2.3-19.6-5-34.9-6.3-58.1-7.2 21.6-21.8 52.4-53.3 71.7-75-6.7-1.8-8.6 4.5-17.3 13.6-10.1 12-36.6 36.5-50.4 51.3-10 11.2-5.9 4.9-9.9-5.6-8.5-26.4-12.1-58.5-20.2-87.3-1.6-4.6-6.5-34.9-9.1-45.5 4.1-.1 18.9 4.3 26.5 4.4 11 .7 18 1.4 21.4 2.2 16.9 4 32.9 10.4 46.9 17.8 6.7 3.1 12.7 7.3 20.9 7.9 4.2.6 3.5-2.5.2-2.5-15.8-5.1-28.5-14.8-45.1-19.8-13.9-6.2-35.7-6.3-52.3-9-3.2-1.2-15.7-2.5-18.2-3.6-.6-.7-2-.5-3.6.6Zm-1002.5 5.4c5.4 3.5 14.1 9.6 18.7 11.2-3.9 12.4-16.4 37.9-18.5 45.8-1.2 4.4-14.7 32.5-17.9 44.8-7.1 17.9-8.7 36.2-18.8 51.6-.7.1-5.7-10-6.1-12.1-3-15.7-19.2-52.7-23.7-66.7-2.8-6.4-5-14.9-5.7-21.3-.5-.9-3.8.1-3-1.6 3.6-7.8 10-20.5 12.7-28.6.3-1.1.6-1.3 2.1-1.3 2.8 0 9.9-2.6 19.3-7.2 10.9-5 19.2-6.6 29.3-13.3 3.9-2.9 7.8-2.4 11.6-1.3Zm1017 2.3c-1.4.3-1.1 1.3.4 1.4 12.6 3.2 32.2 11.3 44.6 15 6.6 2.9 18.6 11 25.6 11.5 16.4 2.7 14.6 19.6 19.1 32 .6 2.3 6.2 2.8 4.9-1.2-3.4-12.7-6.2-29.4-22-31.3-8.3-.3-21.4-11.7-28.3-13.6-12.9-4.9-30.5-14.5-44.3-13.8ZM38.1 386.5c.2 1.2-2.6 1.5-3.2 2.4-.9.8-.9.8.2.5 6.1-1.7 3.6.6 3.8 5-.5 13-.9 27.4-3.1 38.6-13.7.7-8-14.1-7.8-23 .8-6.1 1.1-16.1 2.3-21.5.8-.1 7-3.9 7.8-2Zm24.3 2.6c18.5 1.9 24.7 5.8 48.3 9.4 2.2.5 22.5.7 24.6 1.1 5.6 2.1 2.4 5.6 2.9 12.2.7 7.2-3.5 15.3-1.5 19.7 2.1 4.3 0 13.3-1.8 17.9-5.8-.6-19.7-5.1-26.5-3.6v-26.2c2-1.1 6.8-3.1 7-5.7-.2-4.1-2.7-8.9-6.8-10.2-7.1-1.9-24.2 3.4-21.3 12.7.7 1.7 4.4 5.2 5.8 5.6 1.2.3 1.5 1.2 1.6 5.4.2 5.2 1.3 10.1 1.3 15.5-.9-.2-4.9.6-3.6-.9 1.8-1.5-12.6-2.9-14.6-3.6-9.1-1.6-22-3.2-31-4.8-4.5-.8-4.9-.9-5.2-2 .8-10.9.8-33.1 2.3-43 1.4.2 17.1-.1 18.5.5Zm1489.4 1c-12.7.8-24 13-26.9 23.4-7.6-8.8-11.1-11-23.2-9.2-1.2.3-1.7.2-1.5-.1.5-.7-3.2-.6-5.1.1-15.2 8-18.4 29.6-1.6 37.9 10.1 4.4 27.7.9 30.8-12 1-4 1.6-.3 2.3.7 5.3 7.2 15.2 17.1 25.7 16.6-14.5.4-44 3.5-58 1 .5-.6.3-.7-.9-.7-1.8-.4-2 1.9-2.9 2.3-.2 0-.3.3-.1.7-1.5 12.9-1.8 27.1-2.2 41.6 6.5-.2 14.3-2 21.5-1.4-1.6 6.1 4.5 12.2 10.6 11.5 3.3-.6-.6 10-2.5 10.5-1.5.8-1.7 1.5-.6 1.5 1.2-1 .4 9.7.4 11.5l5.1.5c-6.7 1.1-23.5 2-27.7 3.1-1.2.3-1.6.6-1.2.9.5.3.4.5-.3.7-.8.3-.9.6-.7 3 1 6-1.6 9.6-2.7 14.5-1.7 7.5-5.2 18.7-6.7 26.2-7.5 28.1-13.4 48.7-21.4 77.2-4.6 14.9-7.5 26.6-11.5 41.3-1 6.5-1.5 17.3-2.9 23.7-1.1 11.7-2.5 19.9-4.3 24.7-.7 2.5-2.7 7.3.5 7 6.9-.8 4.8-5.3 7.5-12.7 7.9-33.4 10-33.5 15-53.9 7.3-33.6 22.2-60.9 32.2-92.7 1.1 11.3-2.2 58.8-3.3 76.5-3.2 34.9-4.4 30.5-4.4 70.3 1 25.1-3.2 31.1 5.8 28.3 2.4-.7 3.6-11.7 4-14.3.7-6.8 2.1-18.7 2.3-26.5 1.2-26 4.7-44.3 8.5-69.2 1.8-13.2 4.8-13.1 7-26.3 4.9-33.2 3.2-27.7 14.6-70.2 1.3-3.9 4.6-21 5.4-15.8 0 3.6 6.6 24.7 10.2 33.1 1.5 3.4 5.3 15.7 5.4 17.5-.4 14.2-2.1 29.9-4.1 43.4-4.1 31.6-3.1 69.6-4 100-.5 6.6-1.5 18.5-1.9 1.9-1.3-16.2-3.7-42.1-4.7-60.6-1.7-23-3.9-38.3-7.5-59.2-2-6.7-.2-22-4.6-24.2-2.9-1.5-3.8-.4-2.5 3.2 1.4 2.8 2.8 16.2 4.6 22.6 5.2 24.3 7 53.8 8.8 78.2 1 6 .5 20.1 1.9 24.8.9 7.6 2 13.2 1 22.8-1.1 7.7 9.2 6.4 7.8-2.9.5-10.4.9-10 1-26.8.5-22.1 1-45.9 2-63.4 1.5-16 4.7-34.7 5.1-51.5.1-.1 2.9 7 4.3 11.1 1.6 3.4 5.7 17.9 7 21.6.8 5.8 3.3 16.4 6.3 20.8 9.8 25.9 17.7 53.7 27.5 79.7 1.6 6.5 6.4 16 1.9 13.6-12.2-2.5-26.6-7.2-38.8-12-4.8-1.3-7.5-4.1-10.6-3.3-1.4.9-1.4 2-.1 2.9 16.7 8.6 37.4 12 54 20.7 1.1 1.9 4.1 9 5.5 8.5 3.3-.1 4.6-5.1 8.4-2 10.5 4.8 26.8 8.1 37.7 13.8 7.9 3.6 17.6 6.8 25.2 12.1 2 2.7 3.8-2.8 3.5-3.4-8.9-6.3-22-10.9-32-15.5-8.1-3.3-28.3-7.6-37.6-13.2-6.3-19.8-11-37.6-18.8-55.4-6.2-12.2-8.3-34.6-13.8-47.2-2.6-2.9-2.7-17.9-3-22.1-.9-5.3-5.8-23.1-7.5-30.8-2.8-15.4-8.3-29.2-10.9-44.6-2.1-9-5.1-18.4 1.2-26.5-1-.5-6.8-2.5-6-3.1 3.4-2.2-38.2-1.7-39.4-2.1-.7-12.3-1.2-9 10.7-9.2 0 2.3.2 6.1.2 8.9.9-.1 2.8-.3 3.4-.8 1.1-1.1.7-10.8-.4-12.1-1.2-2.1-.8-7.1-.7-10.1 5.5.1 8.1-6.7 6.8-11.3 6.4.8 20.9 1 21.3-1.8 1.4-4.2-.1-24.1-.1-32.2 0-5.3.1-5.9.9-6.5 1.2-.9 1.2-1.5-.1-1.5-1.2-.2-5.1-1.2-1-1.8 7.5-1 18.2-13.8 19.7-18.5 1.7-4.7 1.8-13.3 1.8-19.7-5.2-13.6-17.2-20.2-31.6-18.1Zm13.1 2.9c15.2 7.1 18.7 22.9 12.9 37.7-5.6 6.4-15.9 19.2-27.4 14.3-8.7-2.7-15.3-10.2-19.1-17.7-1.4-2.1-1.1-14.5-.4-17.2 1.6-6.6 11.1-14.4 17-17.5 2.4-1.8 14.7-1.3 17 .4Zm-1210.1 3.6c4.5 2.1 20.6-3.9 25.4.1-.1 1.6-2.5 6.3-3.1 7.9-7.1 14.8-11.7 34.2-19.4 50.8-9.6 23.3-21.1 48.9-27 71.7-8.5 2-14.5 4.2-21 10-12.4 10.7-21.6 11-12-5.2 6.9-13.8 12.5-38.2 18.3-53.4 5.4-17.3 12.1-29.6 17.5-45.5 2.9-9 11.5-25.9 16-38.6 1.5 1 3.1 1.7 5.3 2.2ZM55 395.9c-4.1 2.3-3.1 4.9-3.5 12.1.3 3.1-1.2 13.2-.5 15.4 6.5.7 6-2.7 6.8-19.9.2-9.2.3-9-2.8-7.6Zm135.1 2.5c1.7 2 .8 1.9-3.3 2-3.6 0-6.9.6-10 1.5l-6.8-3.3c5.2-.5 15.6-1.9 20.1-.2Zm-125.9 1.5c-4.3 6.5-5.3 17.7-6.2 25.5 6.5.3 4.8-7.8 6-12.6-.3-2 5.1-18.9.2-12.9Zm89.2-.7c-.5.2-5.2 2.3-5.2 1 .2-1.7 5.1-1.2 5.2-1Zm10.8 2.3c31.1 14.5 27.3 5.9 21.1 34.1-7.1 1-17.2-3-27-2.4-2.8.6-11.7 1.2-14.2 1.7-1.1.3-1.1.3-.8-1.7.6-7.2 3.2-21.8 3.1-29 5.8-2.5 11.7-4.4 17.8-2.7Zm-92.1 1.4c-2.4 1.5-3 9.8-3.9 13.1-.1 3.1-3.8 11.9-1 12 6.9-1.6 4.8-13.7 6.6-19.5.1-3.7 2.6-7.7-1.7-5.6Zm70.1 8.5c-.9 5.3-1.4 12.4-2.1 16.8-.7 3.9-1.8 1.4-1.2-2.8 1.3-6.4 2.8-16.2 3-23.4.5 3.1.8 5.8.3 9.4Zm1368.9-5.3c5.3 3.4 13.9 11 11.7 18.6-.2 12.2-11.4 20-22.6 17-23-7.6-13.5-42.2 10.9-35.6Zm-1406.4.6c3.8.9 6.9 9.1 4.7 10.5-.4.1-.6-.3-.6-1.1 0-1.8-1.7-5.2-3-5.9-3.6-1.3-9.7-.1-13.1 2 1.1 5.8-.3 6.3-1.3.1.3-5.4 9.2-7.4 13.3-5.6Zm-4.2 5.4c3.3.5 4.2 6.3 2.7 8.2-2 8.6 2.2 10.3 1.1 25.1-.2 11.6.5 10.2.9 17 .5 2.6-2.5 1.7-3.6 1.4-1.2-6-1.2-17.2-2-24.2-.3-4.9-1.6-16.8-1-18.7-1.1 0-1.7-3.7-.6-4 .8-.6.8-.7.1-2.7-1.2-2.7-.9-3 2.4-2.1Zm1348.1.9c1.1 2.1 7 6.5 7.9 9.4 2 3.8 2.7 3.4 3.4 7-2.9 0-10.3-.1-11.8.7-3 1.1-2.7 7.8 1.2 7.5 3 .5 13.4-.1 16.1 1.1-1 1.1.7 72.5-1.2 83.7-2.5 36.4-4 79.4-5.4 116.1-1.9 9.2 1.8 14 3.6 4.7.2-37.6 2.8-83.8 3.8-121.3 1-10.4 1.7-64.3 2.2-69.5.7-2.7-.7-14.8 2-14.3 5.3-2 4.5-6.9-1.6-6.4-4.2.3-9.7-4.7-4.9-7.2-3.3-5.1-11-13.6-15.3-11.5Zm10.4 18.9c3.4.4 2.1 1.2 4.7 1.4 1.3.1 5.5.2 5.2 2-.2 1-.4 1-7 1.1-7.4.1-9.4-.1-9.4-.9.5-4.7 1.9-4.5 6.5-3.6Zm-1208.1 8.8c0 1.9-.1 2.3-.8 2.3-1.1 0-1.2 1.6-1.5 13.6-.3 14.9-1 12.2-1.5 30-4 47.8-8.8 89.3-10.8 138.4-1 14-3.3 29.4-4.9 43.2.1 2.5-2.3 8.9.2 8.7 7.6 3.2 27.7 23 35.3 27.9 10.5 10.5 25.2 15.5 32.1 24.9-5.5 1.6-6.9-1.4-11.4-4.3-6.5-4.4-8.8-6.1-14.1-10.6-9.7-7.5-19.8-16.4-30.3-23.2-2.5-1.7-8-4.7-8-7.5-.6-5-8.4-.4-10.5 1.7-12.2 13.3-18.5 19.8-28.5 38.6-3.1 5.7-4.2 7.4-4.9 7.4-3.7-.5-.8-1.4.1-3.9 5.6-11.6 18.5-29.8 27.5-40 8.3-12.4 10.8-20.2 11.4-34.9 2.6-32.9 5.1-62.9 5.6-100 .6-19 2.4-30.8 3.8-53.1 1.5-10.9 1.5-31.7 4.2-45 1.1-2.2 7-17.2 7-16.5-.1 0-.1 1 0 2.3Zm1208.2 12.1c-.3 41.3-2.8 93.2-3.8 132.8-.3 8.6-2.8 41.5-2 55.4.3 2.3.3 3.2-.2 3.5-1.7 2.3-2.3 6.8-3.9 8.7-9 9.6-34.9 36-41.6 41.4-5.2 4.7-12.3 8.4-9.4 13.1 2 1.2 3.1-2.3 3.8-3.3 3.8 0 10.3-5.9 15.6-10.6 10.3-11.9 33.3-36.2 40.4-45.1.7-1.8-2.3-.4-3.2.7-1 .9-1.6 1.2-1.5.8-.2-1.7 2.4-2.6 4-3-1.3-31.3 1.9-52.8 2.1-83.2-.1-16.8.6-16.4 1.7-29-.6-6.7 2.4-91.9-1.3-94-.6-.3-.7.7-.7 11.8ZM162.2 442.6c3.4.7 4.3 1.2 5.7 2.8 5 3.3 13.4 6.5 18.8 9.1.5.4-.6 1.1-5.2 3.2-3.2 1.5-6.3 2.7-7 2.7-9.9-2.7-22.6-8.9-32.7-11-2.4-.3-2.5-.3-2.2-1.8.4-1.3.2-5.4 1.9-5.7 3.9-.6 15.5-.6 20.7.7ZM83.9 445c1.2.4 1.5.7 1.4 1.8-.1 2.5.5 15.2 1.1 19.1l-4.7-.3c-1.2-4.1-1.3-15-1.5-21 1.1-.2 2.4-.1 3.7.4Zm9.6.5c1.6.3 2.9.6 3 .6.3.2.7 16.2.4 17.2.3 1.8-6.2 1.4-7.1 2-1 .3 2.6-2.1 2.1-2.3-1.3-3.8-1.7-3.7-2.1-11.8-.3-5.4-2.1-7.2 3.7-5.7Zm1463.6 2.1c-.5.1-1.2.1-1.7 0-1-.2 2.9-.2 1.7 0Zm-.8 3.3 1.6.4c.2 12.5 3 26 .6 37.9-21.4-.8-44.8-.8-65.5 1.7-.3-1.4.3-24.3 1.2-39.9.4-.4 12.7-.3 19 .1 8.4-.2 33.5-1.5 43.1-.2ZM107.1 471.4c-1.8 65.1-2.1 145.7 1 206-.4 19.4 2.6 30.4 1.1 45.3-7.6 1.2-11.5 2.2-17.3 10.3-.4-20 3.1-27.6 3-48.6-.9-82.5-2.2-137.2-3-216.9.7 0-.1.8.1.9 1.4.3 12-1.6 13-2.5 4-2.7 1.6.1 2.1 5.5ZM87.4 473c0 60 2.6 169.1 2 225.5-2.1 15.2-3.1 16.9-3 37.6-1.8 55.2 4.1 28 1.9 68.3-.4 4.3-.7 5.9-1.3 6.5-2 3.3-.5 11.1-.3 13.3.5.9 1.5 20.8.3 10.4-3.2-14.3-4-62-2.7-82 .2-40.9-1.1-58.9 1.3-81.9 2.8-62.3-2.8-137.3.6-202.5 1.8-.8.8 1.9 1.2 4.8Zm1449.1 19.6c.2 6.1 1.1 7.8-7.9 8-10.4 1.3-13.8-2.7-15.3-9.4 1.1-.5 17.1-1.2 22.7-1.1l.5 2.5Zm-6 14.3c0 4.6.2 4.6 1.4 6.3 0 .4-6.3.3-8.6 0-4.3-.3 1.9-5.2 0-11h7.2v4.7Zm18.2 21.8c6 .6 10.3-.7 10.3 1.6-.2 1.6-3.7 1.9-21.2 2.2-14.7.2-26.2.5-38.4.9 2.1-4.4-1.3-2.9 9.4-3.6 18.3-.7 16-2 39.9-1.1Zm9.3 6c-1.5 6.6 2.3 13 3.1 19.1 1.7 8.8 4.5 20.1 7.3 29.3 3.3 16.6 8.9 35 11.7 51.6.5 2.7.4 16.4 1.8 18.3 2.3 5.2 2.5 6.4 4.5 12.4 4.5 28.3 20.1 57.4 27.3 83.4 1.4 6.8 3.4 8.8 3.2 12.3-.6 1.5-1.1 1.2-1.9-.2-1.5-2.9-4.2-6-2.3-9.1-2.4-1.3-2.2-.4-4.2-6.6-11.2-29-20.7-63.3-30.3-91.4-7-14.9-3.2-13.2-10.7-34.1-4.2-13.5-8.4-22.9-12-34.8-4-11.2-11.1-29.4-13.8-41.1-1-9.1-4-2.2-3.3-6.2 1-5.7 2.8-2.7 8.2-3.6 3 0 6.6-.2 8-.5 4-.4 3.7-.5 3.4 1.2Zm-24.2-.1c1.5 3.9-1.7 14.2-2.8 18.9-2.8 13.4-7.9 31.3-10.4 44.9-2.5 11.5-2.6 21.6-5.5 34-3.4 10.6-7 19.5-8.1 30.5-6.4 32-4.7 68.5-11.4 100.1-.7.7-1.1-.7-1.4-4-1.3-29.3.5-64.9 3.7-92.8 1.6-28.9 6.8-96.3 1.7-131.2.9.2 7-.5 4.8.8-.8.7-.8.7.4 0 1.1-.6 3.5-.8 14.1-1 9.4 0 11.7-.8 14.9-.2Zm-37 10c.9 10.9 1.8 25.6 2 36.9.2 4.8.2 4.8-.9 4.8-4.2.2-3.6 10.5-6.3 16-3.1 9.1-6 16-9.5 24.6-14.5 35-22.2 68.5-31.8 104.5-.9 2.8-4.7 20.3-5 14.2 6.7-18.7 5.7-40.1 11.2-60.2 4.1-16.6 9.4-33.2 13.5-48.4 5.2-22.6 11.7-42.1 17.2-64.1.4-1.6 8.7-36.3 9.6-28.3ZM1396 610.3c-10.3 2.6-8.1 3.8 3.7 3.4 8.6 0 16.3-.1 16.1-3.3-1.1-.3-17-.5-19.8-.1Zm235.2 3.8-1.8 1.1c4.6 3.4 19.6 7.2 27.5 10.4 13.1-2.4 4.4-7-3.6-8.3-4-.2-18.4-6.3-22.1-3.2Zm-1399.3 80c-.1 13.2-2.2 47.5-.5 58.4.7 0-1.9 2.3-2.6 2.3-1-.3-5.9-3.1-4.5-4.8.6-.4.3-2 .9-2.2.4 0 .4-1.1.5-10 .2-6.3-.3-5.3 2.2-6.3-1.3-.5-2.4-.3-1.9-2.4.5-4.4 1.1-14.3 1.5-17.4.7-2.6.2-22.2 3.4-27.3 2.6-4.4.6 3.2 1 9.7Zm1190.8-9.6c-2.2 3.2-13.4 14.2-18.5 16.5-.6-.6 12.8-11 15.3-13.8 1.8-1.7 4.1-4.5 3.2-2.7Zm-1181.5 8.7c14.5 11 28.6 24.2 43.6 35.1-23.8.6-34.9-.1-50.3-.3.4-12.3.9-17.3 1-29.5.5-11.8-1.3-9.5 5.7-5.3Zm-17.6 3.7c-.9 13.7-.6 22.6-1.7 33.5-23.3-.4-27.9 1.3.1 2-.2 1.2.5 9-.8 7.6-4.1-1.8-21.4-7.1-24.5-7.6 6.5-12.4 16.5-29.3 26.2-39.4 1.7-2.8.6.6.7 3.9ZM392.4 708c-4.4 1.4-13.8 1.7-19.5 2.7-11.3 3.8-21.8 4.1-32.9 5.6-8.5 1.5-16.4 2.2-24.1 3.4-.6 3.7.2 5.7 6.3 4.3 16.9-4 28.4-3.2 47.2-7.5 3-.7 9-1.8 13-2.3 2.6-.7 2.1 1 2.6 2.6 34.9-2.8 58.6 1 95.9.6 21.9-.2 29.6 1.4 44.1.6 1.8-.6 5.7.2 7-1.7 3.7-3.8-4.3-5.8-8.5-4.1-18.2 1.7-94.9 1.2-117.4 0-8.1.4-14.4.6-13.5.4 2.4-.1.3-4.9-.2-4.6Zm999.9 3.3c-1.4 2-7.2 6.2-7.9 7.9 1.5.7 6 2 7.5.3 3.4-1.9 4.1-1.6 8.1-5.1 3.5-3 3.8-3.4 3.1-4-2.8-.8-8.2-3.4-10.8.9Zm25 9.4c-36.5 3.2-82.2-1.1-119.5 1.2-.9.3-1.1 2.3-1.9 3-.9 1 .1 1 .6.4.1-.2 1.6-.2 3.2 0 21.8.4 47.4-.6 73.6.2 29.3.2 43.5 1.4 47.6-1.3 6.3-1.6-3.8-3.9-3.6-3.5Zm94.3 1.6c.5.3 2.3-.2.6-.2-.7-.1-.9 0-.6.2Zm7.2 1c0 .3-.5.5-1.1.5-1.1 0-2.8 1.2-3.7 2 3.7 1.8 6.1.8 11 2.4 5.7 1.5 7.8 1.5 8.1-1.5-1.6-.7-12.1-2.5-14.3-3.4ZM107 726.2c2 .9 1.2 3 3.5 3.2 2.9.6 9.2 7.4 12.3 9.3 2.4 1 21.7 20.1 26.5 24.7 3.7 3.9-2.2-1-5-2.7-9.2-6-16.1-10.6-17.9-11.9-3.9-3.9-14.6-14-18.8-13.6.5-2-5.5.8-6.8.9-1.5.4-1.9.7-1.3.9 1.5.3-5.5 4.4-6.4 5.2-.4-2-1.4-6.3.4-5.6 6.3.3 7.3-14.7 13.5-10.4Zm158.2 4.1c27.8.6 27.1-1 8.9 4.3-10.4 3.3-27.7 7.8-38.5 8.9 4.1 2.6 35.6-6.3 43.9-8.5 5.6-2.1 18.4-3.2 24-5.2-3.8 4.3-20.2 6.5-27.5 8.9-8.8 2.3-32.8 8.6-40.6 10.3-1.3 1.9-.7-16.8-.8-19.8 9.7.6 18.6.9 30.6 1.1Zm-58.3 7.4c16.1 5.7 14.8 5.2 14.7 6.6-.1 2.3-.5 1.4-2.8.5-7.3-2.9-13.6-6-21.8-8.5-5.1-1.4-5.6-1.6-4.2-1.8 4.8-.5 6.7.8 14.1 3.2Zm-98.4.2c2.2 1.1 4.2 2.8 7.6 6.8 6.7 7.4 33.9 25.8 40.7 32.7 7.7 7.3 9.7 9.3 12.8 13.6 3.1 3.4 3 5.9 7.7 6.7-21.1 12.7-43.1 19.2-58.4 28.9-3.3-20.9-5.9-56.1-10.2-77.1-1.2-4-1-12.1-2.9-11.2-1.8.6-1.8-.3.3 13.1.4 2.3.8 4.8.9 5.4 2.1 11.8 4.3 47.1 6.2 62.2 1.2 8.1 1.5 10.4 1.3 10.7-1.9 1.8-12.9 6-17 8.1-1.6.9-3 1.6-3.1 1.5-1-.9-1.6-13.1-1.9-15.3 1.5-4.3 2.4-14.4 2.4-19.6 2.3-18.7-3.1-37.7-2.1-57.9 1.3-1.1 6.2-5.6 6.7-5.7.5 6.2.9 26.1 2 32.2 1.5 19.2 3.4 35.4 2.3 55.7-.8 7.2.8 4.9 4.2 3.4.4-21-.9-43.1-2.8-62.9-.3-.3-2.6-32.3-2.8-30.2.5-1.8 4-2.6 6.1-1.1Zm-29.1 15.9c-.5 10.1-14.2 11.9-20.4 22.7-5.5 7.6-11.7 12.8-16.3 19.4-5.7 8.3-14.2 14.4-21.6 18.5 3.7-9 24.8-27.9 32.8-36.3 1-1.3 24-24.3 24.8-25.6.6-1.2.9-.1.7 1.3Zm-.9 18.3c.2 4.3.3 14.1.2 21.7-.2 36.8-.4 31.1 1.2 41.7-17.8-3.1-28.3-11.4-49.7-15.5-12-2.4-6.4-1.3-.3-6.6 14.3-8.3 25.1-22.7 35.4-35.4 5.5-7.3 8-10.5 12.6-13.8.1 0 .4 3.5.6 7.9Zm-58.2 44c-1 .8-2.6.9-2.6.3 0-.6 4.7-1.7 2.6-.3Zm10.3 7.9c10 2.2 16.7 6.1 25.3 9.5 2.8 1.3 19.1 6.1 22.4 6.6 2.6-.2 1.6 2.7 1.8 4.5-8.2-2.3-46.1-14.2-58.5-22.7 1.9.5 4.1 1 9 2.1ZM89 846.1c-.2 3-.2 3.5.5 3.7 1.2-.1 1.4 7.3 0 7.1-3.9 3.6-7.1-6.7-3.7-7.7 2.8-1.1.7-2.4-1-2.9 2.3-2.4 5-6.5 4.2-.2Z\" })),\n React.createElement(\"path\", { d: \"M1138.3 43.8c-2.3.7-11.2 2.8-12.3 5.5-1.6 1.9-2.5 2.5-3.7 2.5-1.8 0-1.9 1.2-.1 1.6.6.1.8 0 .6-.4-.2-.3-.1-.6.2-.6.8 0 .7.6-.2 1.6-1.2 1.4-5.8 13.4-6.5 16.8-2.5 11.6 8-14.9 9-14.1 3.3-4.9 3.7-4.8 16.9 5.4 12.3 8.3 20.2 31.3 25.1 46.8 8.3 28 13.6 55.3 19.7 84 5.5 24.6 12.8 46.2 20.1 69 8.1 19.7 19.9 40 30.3 59 2.2 6.2 15.2 29.2 19.9 39.6 3.9 6.4 8.2 19 14 23-15.8-39.2-52.2-95.3-65.7-141.5-13-38.6-18.9-79-29.4-117.9-4.7-17.9-15.2-52.7-29.6-61.3-4.5-3.3-10.4-8.4-15-9.6-2.6-.8-2.9-1-2.4-1.9 1.8-3.3 9.3-6.6 15.2-6.7 55.4 1.5 60.2 103.5 71.2 144.8 5.9 28.5 22.9 51.9 35.4 75.8 4.4 9.9 15.3 30.5 17.2 35.2 6.8 16.8 13.4 36.6 18.9 50.4 7.7 19.6 7.5 23.3 13.2 46.4 1.8 9.6 5.6 19.2 3 19.9-.8-.3-.8-.2-.2.4 1.2 1.2 2.3-.9 2.3-4.5 0-4.1-.7-8.6-3-18.5-4.1-21.9-11.1-44.2-19.6-65.3-6.5-20.8-15.7-41.6-26.5-62.4-8.1-19.1-18.5-30.5-27.5-51.9-22.3-48.1-16.1-175.1-90.5-171.1Zm-65.6 1.9c-.2.4 1.4 1.7.9.7-.6-.9-.1-.8 4.2.7 7 3.3 31.1 3.5 30.8 10.3-3.5 5-1 6.9-9.4 4.9-22.7-4.4-40.1-3-64.2.2-8.7-.4-39.4 12.1-52.1 13.5-7 .1-2.3 1.5 2.2 1.3 9.2 0 24.2-6.6 33.4-8.8 6.4-2.3 26.4-5.1 35.1-6.1 11.1-1.4 39.8-.8 49.7 2.3 1.5-.3.2 4.6-.7 7.1-16.5-.1-44.5 1.8-53.7 3.8-3.6.3-24.9 4.4-19.2 5.3 9.2-2.6 44-7 60.8-7 11.1-.3 11.4-.3 11.7.8.3 1.2 0 8.8-.4 12.5-.4 3.2-.4 11.8 0 14.9.4 2.7.4 2.7-2.1 4.5-11.5 9.9-28.5 20.8-45.1 27.1-28.8 15.9-78.9-13-94.4-30.3-1.7-2.5 2.7 1.1 2.8 1.6 2.4 1.6-4.1-5.6-5.5-3.5 4.3 10.5 25.8 20.6 38 28 13.4 6.1 42.7 15.5 58.9 7.2 15-5 38.3-18.8 46.5-27.4 1.7-1.8 2.1-1.8 2.1.2.1 1.7 1.7 8.6 2.3 10 5.4 12.7 5.2 9.8-3.8 21.2-9 11.5-22.7 30.5-38.6 25.7-1.2-1.1-3.7 1.6-7.2 1.6-6.6 1-8.4 1.7-11.1 4.1-2.7 6.1-27.8-11.2-36.4-15.4-21.5-12.7-38.3-24.5-57.5-42.8-18.1-13.8 17.8 20.9 29.5 28 14.7 10.3 29.3 19.1 43.4 26.5 13.3 7.1 7.5 2.9 0 7.4-5.7 2.4-10 5-15.2 6.7-21.6-7.6-54.4-31.1-68.9-48.4-12.7-8.8 17.3 21.2 19.9 22.3 8.3 7.2 20.6 14.9 36.7 22.9 9 4.5 10 5.1 9.1 5.8-2.5 1.5-3.9 1.8-10.3 5.5-4.7 2.6-8.8 4.7-9.1 4.7-11.9 7.5-26 14.6-37.8 22.6-.9 1-10.2 6.5-11.2 7.3-.9.6-1.5.2-4.7-3.3-4.1-4.4-5.6-4.9-9-3.1-3.5 1.8-1.5 4.8 11.7 18.4 11.3 9.1 16.1 26.6 26 18.1 0-1.6-3-3 0-4 7.7-5.5-3.2-10.2-9.1-6.4-1.8-2.3-5.1-5.5-6.4-7.6-.6-1.3-9.9-9.7-6.3-10.3 1.3-1 8.9-5.2 9.3-5.2 1.3 3.5-2.1 4.4-5.2 5.3 2.9 6.2 4.9 4 10.3 1.8 1.3 1.3 3.8 3.7 5.1 4.5 2.2.9.1 3.8-1.5 4-1.2.2-.8.5 2.7 2.2 4.1 1.9 6.6 2.8 6.6 2.3 0-1.9-3.2-2.8-5-3 .8-1.7 3-3.3 3.3-4.7.4-1.3 1.1-1 2.2-3.3 1.1-2 1.2-2.6.6-3.3-1.4-3.1-4.9 3.5-5.9 4.1-10.2-8.7-2.4-3.9 8.8-12.3-3.8-3.6-4.6-1.4-10.9 1.3-3.6 1.8-6.7 3.2-6.9 3.1-.7-3.4-1.9-4.1 3.6-7.3 15.7-10.1 34.1-20 55.4-29.9 7.6 2.8 16.6 5.5 24.5 7.3.1 2.3 2.5 7.9 2.7 2.6-.7-3.2 2.1-2 4-2.2.1 3-1 11.3 1.1 11.8 2.1 2.7 10.2 1.6 10.4 7.8.1 4.6-8.4 17.2-1.6 17.9 3.1.9 3.4.8 3.4-1.1.3-3.8-2.1 2.2-2.1-1.3.8-4.8 2.2-12.9 2-19.1-4.2-3.7-10.1-.5-9-8.9.2-8.5 3.6-20.2 12.7-20.4 3.1-.3 3.5-.3 4.7 1 1.4 1.5 3.3 1.9 3.3.7-1.8-4.1-13.5-3.8-17.3-2-1.8.8-4.5 5.1-6.8 10.6-.8 2-1 2.1-2.9 1.9-4.7.3-.3-11.3.3-12 1.4-5.5 11.8 1.4 10.8-3.6-.9-2-.6 2-4.3 0-1.4-.5-2.6-1-2.6-1.1 0-.6 3.6-3.6 5.5-4.6 2.3-1.2 10.9-2.9 15-2.9 5.5-.1 10.3 5.5 11.9 13.7 1.3 6.7.5 14.3-1.3 16.6.8 1.4-1.9 11.2-1.9 12.3.3.1.2 1.9-.2 4.6-1.3 7.4 1.4 12.9-.5 20.4-1.1 4-5.4 8.4-3.3 12.9 2.9-3.4 6.1-7.6 7.8-11.4.7.8 2 2.4 2.6 3.2-2.2.6-2.6.4 1.4 2.9 19.6 11.5 14 12.7 15.4 32.4 7.1-13.1.2-26.1 12.3 1.1.4 2.6 2.5 3.4-1.4 4.3-6.7 1.1-4.9 6.9-1.7 9.7 4.3 2.3 8.8-2.8 9.9-6.8 2.3.3 12.4 10.1 14.4 13.8 1.4.2 6.8 14.5 7.4 7.2-.3-6-14.1-21.3-20.7-23-1.2-.3-1.5-.8-2.1-3.5-2-9.7-7.2-19.3-13.3-25.4-.5-.9-.3-.9 2.4 0 9.1 4 41.4-6.3 46.2-20 5.6 11.2 13.3 31.5 18.8 36.9-4.1-9.2-12.4-29.9-15.9-37.1-2-2.3-2.4-13.6.2-5.8 31 82.7-12.7-57.3-22.5-75.9-11.5-27.2-22.7-51.8-17.9-79.6.2-3.3 0-4.2-.6-4.2-.5 0-.8.7-.8 2.1 0 2.3 0 2.1-1.5 7.9-2.6 9.3-.6 29.1 3.6 41.1 1.3 1.8-1.7 1.1-1.5 2.9-1.5 5.1-3.8-6.6-5-13.7-1.4-5.5-2.7-33.6 1-31.9 5.4-1.3-4.1-1.3-.8-7.8l.7-2.5c1.5 0 8.1.4 8.5 0 0-.7-3.4-2-5.2-2-4.2.6-1.4-3.8 0-4.6.4.1.5-.3.3-.9-.3-1.3 1.8-4.4 2.9-4.4 1.9-1.2-2.5-1.6-3.9.1l-1.5 1.2c-6.5-5.1-23.3-6.7-32.6-9-3.5-1.7-4.2-1.8-4.2-1.1Zm73.6 3.7c2.2 9.4 21.3 32 26 47.9 14.9 41.2 23.5 86.9 39.1 128.6 12.7 34 17.1 50.3 34.6 84.8 9.4 21.8 23.9 42.8 30 63.9-.1 4.8 15 27.8 6.5 9.3-7.3-15.5-9.5-29.7-18-42.5-5.4-9.6-12.3-24.4-18.3-36.1-15.6-30.8-22.4-54.1-33-82.9-13.4-38.1-20.9-71.1-33.5-111.4-7.7-27-21.5-40.7-31.9-60.5-.6-2.1-1.5-2.7-1.5-1.1ZM1122 65.7c12 28 25.1 61.7 32.1 92.2 7.1 25 9.2 42.3 15.8 66.4 4.1 14.5 7.9 25.8 15 43.4 9.3 20.3 18.8 35.5 28.3 53.5 4 7.9 11.1 20 13.4 23 3.9 4.1 1.7-2-.1-4.3-15.4-28.9-41.8-76.7-50.4-108.9-8.1-30.8-14.5-65.8-24.3-95.9-3.9-15.5-18.6-52-26.3-66-1.5-2.5-2.1-4-3.5-3.4Zm-28.2 23.9c-29.9 18.8-60.7 14.1-94.9 14-6.3.5-18.1-4.5-19.3-7.8.4-.2.3-.3-.4-.3-.6 0-2.7-.9-4.7-2-12.1-6.3-.2 4.8-3 .7-1.2-1.8-1-1.9 1.7-.3 4 1.8-1.5 1.8 1.5 2.1 14.9 7.7 18 11 47.7 10.5 16.7-.2 27.8 1.3 41.6-1.4 10.5-3.2 33.3-7.2 29.8-15.5Zm23.7 38.8c10.7 26.4 23 55.8 30.4 82.7.5 1.7 1.6 4.5 2 6.3 1.1 2.3-2.8-1.9-3.4-1.8-2.5-1.9-4.9-14.5-5.6-15.7-1.2-4.1-2.8-9.4-4.4-14.5-1.7-7.3-12-28.4-15.8-36.4-2.7-6.1-5.5-12.6-5.3-19.2.1-6.6.1-6.9 2.1-1.4Zm-6.1 9c-2.3 24-8.3 48.1-26.7 64.4-2.9-2.9-3.2-1.6-2.8-8.7.6-11.5-2.3-20-12-24.9 22.8 0 42.7-43.9 41.5-30.8Zm4.9 11c10.7 25.4 24.7 38.7 10.9 68.2-8.6 17.3-10.2 26.6-24.2 29.2-2.4 0-2.6-.1-2.9-1.7-1.5-7.3-4.3-13.9-9.4-22-2.5-4-2.6-4.2-1.6-5 9.5-9.6-9.6-9.3 2.5-18.4 22.9-19.5 21-63.8 24.7-50.3Zm-76.5 28.3c-.2.2-.7.2-1.1 0-1-.4 1.6-.4 1.1 0Zm-13.2 4.5c4.7 2.8 11.2-4.3 9.5 5.7-.7 2.6.2 4.4-1.3 5-2.1 0-18.8-5.6-20-6.7-.1-1.2 6.9-3.5 7.7-4.1 2.2-1 2.1-1 4.1.1Zm10.8.4c-.2.9-1.7 1.2-.8 0 .7-.8 1.3-1.3.8 0Zm-83 17.4c-4.6.4-9.5 0-13.6 3.1-2.8 1.2-6.7 3.5-1.9 5.5 2.2 1 3.2.9 14.1-1.5 4.1-1.3 15.7-2.2 16.8-4.7-2.4-3.4-10-3.1-15.4-2.4Zm183.7 2.9c3.6 10.7 1.7 8.4 8.5 24 1.4 3.3 1.4 3.5.6 6-2.2 14.4-40.1 30.3-46.1 16.6.1-1 .5-1.3 2.9-1.6 6.6-.9 12-4 15.9-9 2.9-3.9 15.2-27.5 16.3-36.5.4-2.9 1-2.7 1.9.5Zm-87.3-1.6c-2.2.9-3.1 2.1-2.5 3.1.6 1.4 5.8-2 6.9-1.9 4-1.8-1.5-2.7-4.4-1.2Zm32.4 1.6c-.2.8-1.8-1-1.7-1.4.2-.8 1.8 1 1.7 1.4Zm-2.8 12.9c5.2 7.6 18.4 31.3 12.1 29.7-2.4-.4-15.2-6.2-11.6-8.8 1.1-.4-2.2 0-2.5 0 1.1-3-3.8-29.7 2-20.9Zm2.1 21.5c.4.2.9.1 1.1 0 .5-.5-2.2-.4-1.1 0ZM958.4 247c3.7 6.2-7-.6-4.4-1.3 1-.3 3.3.4 4.4 1.3Zm136.5.1c1.8 2.6-3-.2-3.1-.7-.4-.7 2.7 0 3.1.7Zm27.2 5.9c-3.9 2.3 2.5 5.3 1.1 3.2-2.6-8.1 12.2 4.7 14.6 9.9 2.1 3.4 5.5 10.7 6.6 14.1 1.3 4.1 2.1 3.3 1.8-1.9-.7-13.3-15.5-28.7-24.1-25.3Zm42.5 1.6c0 .7 1.1.7 1.1 0s-1.1-.7-1.1 0Zm-199.9 10.9c5.4 11.9-8.6 12.5-12.6 18.1 1.8 1.5 3.4 1.7 6.3-.4 2.3-1.8 10.3-4.6 12.2-6.3 2.4-2.8-1.6-15.6-7-13.9l1.1 2.5Zm103.1 18.8c-.8 5.6-3.5 17.2-4.3 19.2.7 3.1 7.4-13 7.8-17 1-3.1.6-5.1-2.3-6.4-.3-.1-.9 1.8-1.2 4.2Zm43.7-1.2c.4 2.5.5 5.9-1.5 7.9-7.5-5.2-1.8-11.5 1.5-7.9Zm-262 5.6c-2 2.2-7.6 2.3-6.2 2.9 3.2 3.5 16.1-8.9 6.2-2.9Zm147.8 2.2c-4.4 1.2-38.5 6.4-18 10.6 3.4.2-.5 1.7-.8 2.8 0 .7 3.9 2.3 4.6 1.8 3.8-2.2 17.9-11.6 19.3-12.9 2.6-2.3-4.1-3-5.1-2.3Zm-166.2.5c1.3 1.5 6.2 2.3 6.1 5.5 2.6 7.6 4.1 13.4 2.9 24 0 10.6-9.4 14.5-8.2 23.2 1 5.6 9.4-15 11.1-15.9-.1-6.7.5-22.3-1.5-25.2-2.3-5.9-.9-8-7.5-11.2-1.9-.9-2.9-1-2.9-.4Zm-4.8.8c-16.7 6.3-4.3 20.7-8.4 30.7-4.6 6.3 2.2 6.4 1 13.5l-.2 4.4c8 1.1 9.9-4.8 13-13.7.7-2.1 1.9-4.9 2.9-6.2 5.3-7.5-7.8-11.9-13.4-10.1 0-2.9-.1-8.8.8-10.8 1.2-5.8 13.3-9.9 4.3-7.8Zm28.1 3c-9 6.6-6.9-3.2-9.9-.9-1.5 1 1.7 3.4 2.2 4.8 1.3 2.9 6.5 3.5 10.2 3.8-2.7 2.1-6 2.5-9.4 1.8 13.4 8.4 17.9-1.1 12.5 1.7-2.3 2.2-8.4 0-4.5-.7 2.2-.4 6.8-4.8 6.6-6.3-1.6-4.1-8.8 5.6-11.4 1.2-2.3-1.9-2.2-2.5.2-2.5 5 .8 11.7-8.3 3.5-2.9Zm136.8.3c-2.9 1.4-6.7 5.6-10.2 4.3-4.9-.9-4.3-1.7 2.7-3.5 3-.5 12.3-3.5 7.5-.8Zm-182.5 1.3c-.2.5-.7 2.5-1.2 4.5-1.4 5.9-.3 5.1 2.1-1.7 2-4.3.7-4.4-.9-2.8Zm-8.3.4c-3 9.7-5.3 17.7-4.7 20 1.5-2.4 11.3-24.7 4.7-20Zm-8.6 6.2c-.5 3.5-1 8.7-1.6 5.8 0-1.2-1.9-8.5-2.5-9.4-.5-.8 1-.3.5-1.1-3.6-1.9-3 .9-2.1 3.3 1.4 4.4 2 14.7 1.9 20.6-4.7-3.9-7.1-10.9-9.7-23.2-.1-.7-.6-1.2-1.1-1.2-3.4 3.2 4.5 24.1 9 24.8 2.5.7 2.3 5.8.1 2.9-9.1-7.3-3.6 6.4-.4 12.3 6.6 12-3 .9 3.8 13 1.5 2.9 2.7 5.3 2.6 5.4-1-.1-7.3-2.9-6.2-.6 0 .4 8.1 14.5 8.1 14.9-.7-.2-14.4-9.8-10.6-3.4 2.5 4.1 4.4 8.1 4 8.1-2.1-1.4-7.1-4.1-4.4.8.4.4.4.1.2-.8-.4-1.2 0-1 2.8 1.4 5 4.3 5.2 4.5 9.8 12.1 9.9 18.7 11 2.9 12.8 16.5-7.4-7.6-23-18.8-28-18.5-4.9.1.2 3.3 3.1 8 2.9 3.6 5.2 6.6 5.1 6.7-2-.8-13.3-6.5-13.8-4.1-.9.7-.6 1.2 4.7 6.2 3.9 3.7 5.3 5.3 4.3 5-6-1.6-8.8-2-11.6.7-.3.2 11.4 11.3 17.5 16.6-5.6-1.1-16.1-9.3-21.9-11.6-3 2.1 20.1 14.3 24.2 14.6 7.2 2.1 10.5 2.4 12.1 1.2.9-.7.8-.8-2-1.1-9.7.3-24.5-16.2-27.7-20.1 6.2-1.4 16.6 6.1 22.7 11.3 4.6 4.4 6 5.4 7.5 5.1 2.3-.8.7 3 3.1 2.6 1.1 0 1.4-.3 1.5-1.4 3.1-16.4 2.5 1.7-2.3 6.6 0 2.2-16.9.4-19.5-2-7.3-4.4-23.9-9.6-29.6-7.5 4.6 5 24.8 8.9 31.6 10.5 8.4 2.3 16.2 6 1.2 5.5-9.2.3-32.3-8.9-33.9-5.5 0 1.4 6.1 3.3 16.1 4.9 12.3 2 16.2 3 18.7 4.5 7.4 7.1-18.8 2.6-24.6-1.2-16.8-7.2-12.2-2.3 4.6 3.3 17.2 6.4-3.2 1.5-6.4.2-.6.8-14.2-5.6-5.8-3.6-1.9-1.3-8.3-4-5.8-1.3.4.4.3.8-.6 1.3-2.5 1.2 2.6 2.8-2.3 2.6-9.1.5 12.6 16.1 16.2 17 2.3 1 4.1 2.1 4.1 2.3-12.7 11.6-16.7-14.5-24.5-13.4-.8 6.1 15.8 15.7 10.7 21.2-1.2 2.2-3.3 3-5.3 2-4-.6-8.7-14.6-12-15.3-2.4-.1-6.2-5.1-5 1.1-.5 2.5 6.2 14.2 6.5 16.6-1.7 10.9-8-.8-11.9-11.1-1.7-4.5-2.2-6.1-5.1-6.3-1.7 2.5-.1 20.5 2.8 22.4 2.2 2.7 6.4 2.6 6.4-.1 0-1.9.5-2.1 2.3-.8 8.7 5.1 5.2-1.2 8.7-1.9 3.7 1.7 4.9.1 4.2-2.7-1-3.5-1.1-3.4 1.6-1.8 7.7 4.3 10.7-1 9.5-7.5 3.6 1.3 11 3.2 14.4.1 2.7-1.9 3-2 3-1.2-1.1 2.4-7.3 4.7-9.9 6-3.8 2.3-10.4 5.8-14.2 7.9 1.2-.2 3.8-.4 4.7-.7 1.8-.5 0 8 2.9 4.9 1.4-.2 0-5.5-1.2-5.4-1.6 0 1-1.4 4.5-2.4 4.4-1.3 3-1.7 7-4 1.6-.7 5.8-4.6 5.6-3.8-.7.9-.7 1.1 0 1.5 1.9 1.5 2.3-1 5.5-3.8 7-7 13.8-9.3 19.8-18.4 1.7-2.5 4.6-8.2 4.6-9.1 2.8-4.2 6-7.1 7.5-12.6 5.7-14.2 3.2-28.9.3-39.7 2-1-3.1-10.9-4.7-12.8-.4-.6-.4-.9.3-1.3 2.5-2-1-7-2.4-9.5-3.9-7.5-16.1-13.1-17.4-21.9-1.4-5.8 4.5 8 4.9 7.2 9.7 2-7.1-16.1-5.2-21.4 0-6.2.4-5.8 7.6 9 1.5 3 2.7 5.1 2.8 4.7-.1-1.4-5-18.1-9.1-19.2-.9 0-1.1-.9-.3-1.4 1.2-.8 2.6-8.3 3-17 .9-8.1-2.1-7-2.4.9Zm-22.3-3.7c-3.9 4.2 5.9 24.3 10.9 23.1 1.7.4 1.7.4.4-.5-3.9-2.1-10.5-20.2-9.8-21.9.4-1.1.2-1.2-1.5-.7Zm81 11.6c0 .7 4.6 2.8 6.1 2.8 1.1 0 1-.2-.7-.8-1.5 0-5.2-3.4-5.4-2Zm-23.9 1.2c4.9 2.6 6.3 5.5 4.1 8-1.7.9-4.9 15.9-7.6 17.4 1-10.9-2.5-5.6-2.3-12 .1-2.9 2.4-3.5 1.9-6.3-.8-3.5-2.3-10.8 3.9-7.1Zm164.5 2.8c-3.5 4-3.6 5.2 0 5.1 1.4.2 2.1-.5 4.2-4.2 1.4-2.5 1.5-2.6.4-3.2-1.6-.8-1.7-.7-4.6 2.3Zm-141.6 2.8c-2.5 2.3 3.1 6.7 5.1 7.1 1.2 0 1-.3-1.5-2.7-3.9-2.8-1.3-6.4-3.6-4.4Zm-.7 8.5c0 3 3.4 8.1 4.6 7 .7-1.3-2.9-4.7-2.7-6.4-.4-2.3-1.9-2.8-1.9-.6Zm-59.8 7.6c.4 3.4-2.5-4.9-.8-2.2.4.6.8 1.6.8 2.2Zm-65.2 5.1c-6 1.7-30.3 2.4-29.4 10.1 1.1.7 1.4.6 1.8-.4.2-1.5 6.4 0 7.3.1 6.6-.1 32.7-3.7 34.5-2.7 1.7.3 1.8.2 1.2-.8-3.2-5.6-11.7-4-18.1-4.9 3.7 0 18.3-.6 18.3.9.8.6 1.8.9 2.5.7 2.9-2.3-10.1-3.7-18.1-3Zm-5.7 2.6c0 .5-1.7.8-2 .3-.4-.7 2.1-.5 2-.3ZM838 344c-8.8 11.2-6.9 8.9-19.5 10.6-1.2.7-1.1.7 1.8 1.4 15.6 4.2 24.4-19.9 17.7-12Zm-123.9-1.4c-.2.4-2.3-.2-.7-.3.5 0 .9.1.7.3Zm10.6 1c-3.4 1-20.7 3.5-20.1 2.9 6-1.6 16.2-3.7 22.5-3.7l-2.4.8Zm69.6 6.7c2.4 1.2 17.2 19.6 13.1 19.7-2.9-5-11.1-9.6-13.8-15.7-2.9-5.6-2.7-6.7.7-4Zm-142.9.2c-1.5 1.4 14.4 4.4 11.6 4.9-2.8 0-18.9-5-10-1.3.4 1.3 20.3 3.7 17.4 5.8-.8.5-8 .2-8.8.9 0 .8 3.2 2.3 4.7 2.3 1.5-.2 5 2.6 6.2 2.8 2.3 0-2.1-4 .7-3.1 2.1 1.3 2.5 4.4 2.7 18.5 0 3 .9 8.2 2.3 4.7 2.1-7.5 1.6-20.7-5.7-26.2-.7-.6-.9-1-.5-1 .9 0 .9-1.7.1-1.7-1.4-.3-9.1-5.9-10.9-5.8-1.6 0-9.8-2.1-9.8-.8Zm78.1-.2c-7 2.2-18.5 3.6-25.6 4.3-2.2 2.4 12.1 1.8 8.8 4.4-.9 1.1-.4 1.8 1.9 2.5 3.1 1 12.5-2.5 12.5-4.7 0-1.1-1.8-1.2-3.6-.1-1.9 1.8-4.2-.8-1.7-1.2 2.7-.7 7.3-3 11-3.2 3.4-.3 4.1-.6 3.7-1.2-.6-.7-4.8-1.2-7-.8Zm-71.9 1.7c-.2.2-.7.2-1.1 0-1.1-.4 1.6-.5 1.1 0Zm134.2 6c3 1.2 18.8 30.6 19.4 28.3 1.6.3 2.6 6.3 2.5 6.6-3.3-5.5-11.9-15-15.8-20.4-4.7-8.8-13.2-19.8-6.1-14.5Zm-86.8 6.5c5.2 4.1 14 9.4 20 9.2-7.5-2.1-15.4-6.9-20.4-9.9-.4 0-.2.3.4.7Zm98.6 4.7c2.9 3.8 7.3 11.1 6.9 11.4-.4.4-2.6-2.6-6.8-9.3-4-6.4-4-7.2-.1-2.1Zm-11.5 3.4c7.8 5.8 12.5 15.1 17.2 22.5-7.9-5.4-15.8-14.7-21.3-24.7-.9-1.6-.5-1.4 4.1 2.2Zm-1.4 21c5.7 5.5 22.1 15.2 18.3 23.6-.7-.1-1.3-4.3-2.7-2.9-.1 1.4-7.2-5.1-7.3-4.8-3.2-4-30.1-31.9-8.3-15.9Zm-78.1 1c2.5 4 2.4 13.3-3 11.3-2.1-2.6-15.6 2.5-13.7 4.6 3.9-.4 5 1.4 10.5 1.3 4.4.1 5 0 7-1.4 13.2-7.7-6.2-25.7-.8-15.8Zm101.8 5.4c.4 9.8-2.2-2.4-4.8-4.2 1.2 0 3.5.1 4.7.2l.1 4Zm-22.4 7.3c5.8 4.9 10.8 9.6 14.7 14.4-.1 4.1-29.9-23-28.8-23 0-.8 9.1 4.7 14.1 8.6Zm-83.6-.5c-.5.9-3.8 2.1-5.6 2.1-4.9.3 7.7-3.8 5.6-2.1Zm10 7.2c-.4 3.7-1.2 17.3 3.8 16.9 2-.2 2.7 1.4 2.2 2.6.2 1.4-25.3 4.8-20.7 6.5 7.8 2.3 14.5-1.6 24.2-2.6 5.7-.1 4.5-3.8 9.3-2.5 2.5 1.5-6.4-13.3-6.3-16.5-.4-1.9-3.3-3-3-.2-.4 6-.7 17.4-2.4 3.2-1.3-9-1.2-8.8-2.8-8.8-1.4 0-1.4.1-1.4 5.1-.1 4.6-.1 4.9-.6 2.6-.6-1.5.7-10.8-2.3-6.3Zm-17.7 1.2c-1.7 1-8.1 18.3-1.4 18.5 1.5.4 3.7-6.4 4.6-8.4.2 1.8-.1 7.2 1.4 7.4 2.7 2.6 5.1-4.1 6.4-7.9.2 2 .3 6.5 2.3 6.3.6.1.7-.9.6-5.3-.2-11.6-.2-11.5-1.2-11.7-1.8-1-4.6 18.3-6.8 16.9-.2-.2.1-3.6.6-7.6.9-7 .8-8.9-.3-8.9-.4-1.3-8.5 21.7-7.7 14.9-.4-5 1.7-13.7 3.4-14.3 2.3-.9-1.1-1.2-1.9.1Zm-7.2 3.3c-2.6 2.9-5.3 13.5-2.2 16.6 1.3 1.3 1.9 1 1.3-.7-2.9-6 7.4-23.5.9-15.9Zm81.4 8.3c30.6 10.5-8.3 1.5-12.7-1.5-1-.9 7.3.1 12.7 1.5Zm-41.3 5.3c-6.2 3.6-3.8-1.3-3.3-5.6.8 1.1 3.3 4.9 3.3 5.6Zm37.5 4.7c7.4 2.1-8.5-.8-8-1.1-.5-.5 4.6.1 8 1.1Zm32.4-.8c9.2.2-17.3 26.8-16.7 23.3-.2-.5 4.2-5.1 2.5-5.3-1.4-2.4-3.6-3.4-6.7-4.7 9.1 1 22.7.3 7.3-7.1 4-.5 18.7.2 10.5-3.9-8.8-4.9.3-1.8 3.1-2.3Zm-46.7 7.6c3.5 3 13.7 4.5 18.1 9.1 4.5 4.2 3.5 5.2-3.2 3.1-6.1-2.3-9.9-4.5-15-8.8-4-2.9-2.9-5.7.1-3.4Zm6.2 1.2c1.6 1.2 2.6 1.4 1.7.3-.4-.7-4.5-2.2-1.7-.3Zm-37.1 3c-4.9 2.8-10.5 4.7-14.1 4.7-6.6 1.4 7.4 2.6 11 1.1 5.3-1.8 20.3-7 9.3-8.8-.5 0-3.3 1.4-6.2 3Zm29.6-.8c2.2 2.4 11.5 7.9 17 10.1 1.4.6 2.2 1.3 2.4 2.2.9 5.1-7 3.3-12 0-5.4-3.2-21.3-17.9-7.4-12.3Zm26.2 4.2c6.1.2.3 2.6-1.5 4.6-1.7-1.4-5.2-4.3-6.9-5.7 2.5.4 5.7.8 8.4 1.1Zm-28.5 7.5 1 1.8c-1.2-1.3-3.9-4.1-4.1-5.4-.7-2.4 2.7 2.9 3.1 3.6Zm31.1-2.5c-1 1.6-4.1 4.7-4.1 4.1 0-.2 1-1.6 2.3-3.3 2.3-2.9 3.6-3.6 1.8-.8Zm-6.4 2.9c-.4 2.6-3.9-1.6-1.1-.7.6.2 1.1.5 1.1.7Zm-61.7.9c-.9 2.4 1.4 20.5 6.5 21.8 1.5.7-2.7-5-2.6-6.3-.8-2.6-2.1-11.7-1.9-12.8.4-1.2-.5-6.8-2-2.7Zm23.2 4.2c2.3 6.5-1.2 1.9-2.1-2.9-.3-1.8-.3-1.8.4-.8.4.6 1.2 2.2 1.7 3.7Zm-9.8 8.8c1.6 5 2.5 6.8.6 9.2-3.3-1.2-8.9-36.2-.6-9.2Zm44.5-8.1c0 .3-1.1 1.1-1.1.3-.1-.6.9-.8 1.1-.3Zm-28.9 6.6c.9 2.8 1.2 4.5 1.1 6.6-3-2.3-2.5-5.5-3.5-8.8-2.1-5.5.4-3.6 2.4 2.2Zm-4.2-2.2c.4 1.3-.9.1-.8-.3.1-.8.5-.6.8.3Zm23.1 9.1c0 2.4.5 3.3 1.7 3 3.1-.6-1.6-7.6-1.7-3Zm-291.4 20.8c-1.5.3-2 2.9-1.5 4 1.9-.1 14.4 2 12.6-2.2 0-3.5-10-1.9-11.1-1.8Zm40.6 1.3c-6.2 4.7 5.5 4 10 5 2.7.2 2.7.1 3.4-1.9 3.2-4.8-11.9-3.3-13.4-3.1Zm-54.3 8.9c-6.8 4.9 2 15.2.5 8-.5-1.6-.9-3.3-1.2-4.9 18.6.4 33.5.9 51.5 1.4 20.6.9 25.5 1.8 40.2 8.5 3.9 3 4.1 3.2 8.2 10.2 5.8 10.3 23.6 35.5 30.1 43 8.6 10.4 10.3 14.7 7.1 18-2.5 2.6-.5 1.7 2.5-1.1 7.1-5.6-1.5-12.3-4.9-17.5 1.9.2 18.4-12.3 13.1-11.8-3.8 1.4-9.2 8-13.6 11.1-2.5-3.8-14.2-19.9-17.2-25.9-.4-.2 11.8-10.8 11.6-10.9 0-1.6-9.5 4.8-11.4 7.8-2.5 3.8-3.2-1.5-9.9-12.5-3.5-6.3-10-18.1-12.9-16.6-.7.9-.8.9-1.9-.6-7.3-6.6-11.3-3.7-27.1-4.5-19.7.3-47.3-2.7-60.4-3-2.6.1-3.4.3-4.3 1.3Zm22.2 6.1c-4.4 2.4-10.8 10.8-13.1 14.8-1.1.7.2 2 3 2.9.5 1.4 17 .1 16.5 1.7-.3.9 2.4 4.3 1 4.7-1.1.7-7.9-.1-8.4-1-.6-1-2.5-1-3.4 0-1.3 1.3-3.6.4-4.6-1.6-1.6-2.8-6.4-4.9-3.9.6.6 1.3 3.2 2.5 5.4 2.5 1.5.9-1.7 1.3-5.4.6-16.8-3.9-19.4 14.5-3.3 17.4 7.1 2.3 5.5 5 15.9 5 6.5.7 9.1-1 13.1-3.2 2.1-1.7-4.5-2.2-6.9-.5-4.3 2.7-10.4 4.2-13.5-.4 3.8.2 9.5-4 6.6-6.6-5.1-2.4-15.4-5.3-13.7 4.9-3-1.2-6.8-4-6.6-7 .8-7.6 2.4-9.6 11.5-7.8 8.8 1.1 5.5-3.6 20.4-.9 4.3 1.1 6.1-3.7 9.5-5.6 2.7-2.1 7.1-7.5 7.6-9.2.5-1.4-2.6-6.5-2.5-7.8-1.9-5.6-11.2-2.3-16.4-1.9-8.6.7-9.6 5-1.7 2.7 1.5-.8 9.4-1.4 11.1-1.9 5.9-1.5-12.3 14.4-12.9 14.5-.3.4-15.9.9-15.2-.4-1.8-2.8 20.2-21.1 9.9-16.5Zm22.7 9c-.2 5.1-6.5 9.4-10.8 13-.7-3.6-4.3-2.8-1.2-4.5 1.7 0 11.7-13.3 12-8.5Zm63.2.2c-3 2.2-3.9 1.6.5 7.1 3.6 3.9 5.7 10.8 9.7 4.7 2.4-4.5-6.1-14.3-10.2-11.8Zm-25.2 1.5c-3.9.1-4.6 2.2-7.3 2.9-1.7 0-4.9 1.5-5.2 2.5-.6 1.5.3 1.6 1.5.1 1-1.2 1.6-1.5 3.9-1.5 2.9-1.6 13.9 10.5 11.1 12.2-.3.3-.7-.1-.9-1.2-.5-3.6-9.6-11-13.1-8.4 2.8 2.2 9.5 7.1 9.8 9.9 2.1 8.4-12.1-4.3-12-7.3 0-1.5-1-1.9-2.1-.8-3.4 5.8 8.9 14.3 12.8 12.3 1.7-.3 7.9-4.5 8.8-6 1.7-1.5-2.2-6.2-1.3-8 1.2-3.4-1.8-7.6-6-6.7Zm.3 2c3.3 2.5-3.5.4-3.3-.4.7-.6 2.2-.4 3.3.4Zm9.3 21.8c-6.8 2.5-2.6 9.3.8 12.6 1.2 1 5.2.9 7.8-.2 9.9-4-1.1-17.3-8.6-12.4Zm5.9 2.2c1.3 1.3 3.1 5.5 2.6 6-.9-.7-3.9-5.3-5.7-5.4-4.1-.9 1.5-3.6 3.1-.6Zm-82.1 1c.2 1.2-1.5 2.9-2.4 3.7-.8-2.4 1.2-7.8 2.4-3.7Zm79 3.3c1.7 2.7 2 3.7 1.5 4.5-1.4 1.7-5.9-11-1.5-4.5Zm35.8-1.6c-4.8.6-3.1 5.7.4 5.8 4.9.4 4.5-7.2-.4-5.8Zm29.7 1.4c-2.8 2.8 7.6 11.8 8.9 11.9 1.2 0 3.5-1.8 3.5-2.7-.5-2.1-3.4 2.9-4.7-.3-2.3-1.7-4.7-11.9-7.7-8.9Zm22.2 18c-2.1 4.1-3.2 6.3-4.2 9.4 2.8-1.5 7.1-8.2 8-11.1.2-3.7-1-4.3-3.8 1.7ZM550.9 588c-3.3 6.4-7.6 21.1-10.7 27.1-6.1-.2-14.2-.3-16.7 3.9-4.5 4.9-5 11.4-1 13.2 7.6 2.6 12.9.5 17.9-7.7 7.9-15.9 6.8 8 30.8 10.2 3.3.6 6.3-.6 7.9-2.4-1.2-1.3-4.6-2.2-6.4-.6-8.2 5.7-16.8-8.9-24.3-13.2-2.5-1.2-3.5-2-3.1-2.4 1.5-1.9 6.3-18.1 7.2-22.2 3.9-2.5 11.3 5.1 13.9 8.2 1.6 2.3-.8 3-2.8 3.5-1.6.2-2.5-.1-5.8-2.2-8.6-6.2-3.9 1.1 2.8 5 1.7.9 1.9.9 3.7-.1 6.8-4.8 2.4-9.4-3.7-14-6.8-6.4-8.7 2.8-8.1-3.9.1-2.8-.2-3.3-1.6-2.4Zm81 6c-.8.6-.7 7.8.1 7.8 3.4 0 5.6-10.4-.1-7.8Zm-23.7 13.4c-.6 2.5-5 16-.7 17 .2.1 2.4-18.8.7-17Zm-5.3 3.4c-.5 3.5-3.3 12.1 0 12.6 2.1 2.3 2.9-19.8 0-12.6Zm8.3 4.8c.3 1.1-1 4.3-.1 3.6 1.3-1.3.7-9.6.1-3.6Zm-72.1 2.1c-17.2 30.6-20.6-.7-1.9-.9 2.5-.1 2.6 0 1.9.9Zm44.7 2.3c.4 2.5 23 11.8 27.7 13.1-1.6 11.2 4.3 24.4 15.1 27.2 7.5 1.7 11.1 19 18.8 19.3 2 0 2.5-.8.8-1.3-.6-.2-2.6-2.5-4.6-5.1-5.5-7.2-5.6-7.6-4.8-8.9.5-5.7-12-6.6-15.5-11.5-5.9-5.3-7.9-12.4-8.3-18.6.3-.3 8.2 1.4 9.4 2 2.9 1.5 3.8-1.6 1-3.3-5.6-2-13.7-3.8-19.5-5.9-5.5-1.1-16.2-8.4-20.1-7Zm52.7 3.7c1.7 6.5 33.1 10.2 37.5 6.3-8.6-.2-30.3-5.2-37.5-6.3Zm3.7 34.1c-1.1 5.5 24 8.8 26.7 5.7 2.9-1.4 5.4-4.2 3.2-3.5-9.4 2.2-14.4.7-27.2-2.1-2.1-.8-2.4-.8-2.7-.1Zm-47.9 7.5c-3 .4-4.8.8-6.9 1.5 7 1.3 12.9-.7 22.2-.2 6.7 0 9.6.2 12.2-.6-2.8-1.7-20.9-1.3-27.5-.7Zm76.4 7.3c-.9.9-17.5 1.7-19.5.9-2.3-.9-2 .7.5 2.2 2.7 2.9 20.9-.4 19-3.1Zm-65.3 8.8c-.7.4-33.1.9-33.8 1.4-4.3.9 7.3 1.3 25.8.9 18.9-1.2 34.9 1.5 28.9-1.4-1.8-.6-20.4-1.4-20.9-.9Zm-28.9 13.7c-1.2 3.3 68.5 4 70 3.1 14.3.8 33.1 1 49.4.6 7.4-.4 16.3.7 13.4-1.8-1.3-1-4.8-1.1-28.8-.8-29 .6-85-2.6-104-1.1Zm5.8 7.3c-2.8.9-3.3 1.6-4.8 1.9-.9-.4 2.5-1.7.6-1.9-2.9-.7-5 3.9-7.1 5.6-9.1 8.7-4.6 9.4 4.3 15.5 7.1 5.7 26.2 7.5 37 7.5 12-5 23.3-15.3 35.5-16.7 3.8-.4-2.2 7.9 10.2 8.3 8.9 2.1 10-14.8 14.3-7.6 1.8 4.2 8.2 9.7 12.3 5.1 2.5-2.5 3.1-6.7 7.1-6.9 3.5.8 4.8 8.9 11.2 7.5 4.6.7 5.5-5.9 8.2-8.1.5-.6 14.3-1.7 14.8-1.9 0-.3-2.2-3.1-2.8-3.8-24.7.8-12.9 2.5-22.4 9.4-4.5 1.5-2.9-4-8-6.3-3.8-1.7-9.9-.8-11.1 3.9-.4 2.3-5.9 5.4-5.5 2 0-2-3.9-5.9-6.6-6.7-7-3.4-7.7 8.9-13.1 9.4-2.4.2-2.8 0-2.8-2-7-17.9-35 6.2-46.2 10.8-13.2.2-26.5-.6-37-8.3-4.8-1.4 2.5-8.3 4.6-10.4 13 3.9 14.8 3.9 47.8 5.6 3.2.1 4.1-.3 2.9-1.5-.3-1.2-23.7-2.5-31.5-2.8-6.1-.3-16.6-1.9-16.6-2.4-.8-.3 15.7-7.4 10.2-6.6-1 .2-3.6.7-5.5 1.4Zm120.5 23.8c-.4.4-10.6.8-48.1 1.9-18.4.5-20.4.8-27 4.1-5.9 2.1-13.4 14.2-14.5 17.1 0 1.1-.1 1.1-6.4 0-8-1.4-9.9-1.4-7.9.2 1.4 1.5 16.6 3.4 20.4 4.9 1.7 1.4 4-.2 2.3 3.4-1.2 3.1-1.6 19.5-2.6 23.2-3.1 14.8-.9 24.4.5 37.3.6 11.1 3.2 15.1 12.6 19.8 7.3 3.6 11.7 4.1 22.7 2.9 9.7-1.1 15.1-2.6 17.1-4.7 4.8-1.9 3.8-49.5 4.7-48.5 16 1 44.2 8 62.1 10.1 27.9 3.3 58.1 12 85.7 13.1.7-1.8.4-3.5-2.7-3.6-5.7-.8-9.6-1.6-17-2.3-21.6-3.2-52.1-9.5-71.9-12.3.1-3.6 3.8-10.7 4.8-14.5 20.1 2.7 45 7.5 65 10.6 2.3.9 2.1.3-.8-2 .2-2.6-23.2-5.1-25.3-6.3-.6-3.8-.8-16.9-2.7-18.6-.6-.6-.6-.1-.1 2.7.8 4.6.6 10.7-.3 15.5-28.3-2.9-65-13.1-96-16.7-2.7-.2-1-8.7-3-8.1-.9.3-1-.1-1-5.1.6-7.9-4.3-14.4-13.4-14.3-7-.2-35.2 15.7-36.7 19-9.3-6-9.6-2.8-1.7-11.2 6.6-12.1 34-12.1 53.9-12.7 14.6-.8 26.4-2 43.5-2.2 16-.1 19.5-.6 17.2-2.3-5.9-.9-29.8-.5-33.4-.4ZM557 728.1c-2.9.8-4.3 2.2-7.6 3.4-9 3.9 4.6 2.1 7.2-.4 5.8-4 23.5 2.4 27.8 4.3 1.5.4 2.2 3.1 3.5 3.3.4-.1.5.1.3.4.2 1 5.5 9.7 5.8 12.2 5.1 14.9 5.6 12 5.8 37.4 0 3.9.2 4.7.9 4.9 1.2.2 1.7-4.9 1.4-15.3-.5-19.1-3.2-23.5-10.6-36.8-2.6-5-2.8-5.2-6.6-7.2-4.6-2.2-19.5-8.2-27.9-6.2Zm181 1.6c-.1.6 1.3.8.8 0-.3-.6-.7-.8-.8 0Zm-73.8 9.2c4.6.2 2.5 18.3 2.2 21.8-11.9 1.2-25.8-9.2-35.1-.1-3.4 4-5.4 8-2.5 13.4 2.2 3.6 4.6 9.1 9.2 8.6 7 .6 5.9 2.8 16 2.2 7.2-.2 8.9.6 13.5 1.1 3.9 0 4.1.8 2.9 9.9-1 7.2.7 39.6-5.4 38.8-11.6 4-45.6 9.6-43.3-12.5 0-4.4-.3-6.5-1.6-12.5-2.1-15.1 1.4-24.6 1.1-38.8.6-11.8-1.7-12.9 5-16.3 4.3-1.7 29.1-16.8 38-15.6Zm-110.1 2c-2.7.9.4 1.5 2.9 3.7 9.1 6.3 17.5 17.2 19.8 29.4 2.9 10.1-1.1 5.7-5.8 4.2-3.3 1-8.1 3.8-10.4 5.6.1-15-1.1-33-16.5-39.1-4.8-1.2-5.2-1.3-4.8-.7.2.3 1.1.6 1.9.6 1.5 0 2.8.9 8.3 6.2 6.9 5.2 8.2 21.4 9.1 31.6 1.7 5.6-5.2 13.2-7.9 18.4-2.2 2-14.8 28.4-11 13 5.8-25 3.5-60.5-21.8-70.2-6.9.6-31.2-1.4-31.5-.1 19.2 20.3 18 67.2 9.8 89.1-2.2 8.8-5.9 13 .6 10.8 4.7 1.5 14.9-32.5 18.4-31.3 0 .2.4.1.8-.3 1.6-1.1.5 1.1 0 2.4-2.3 5.4.7 11 6.3 11.8 1.9.3 2.3.5 1.9 1.2-.8 1.9-2.6 7.4-5.5 17.4-4.4 13.9-6.3 21.9-13.5 13.6-1.2-2.2-7.8-5.6-7.8-3.9-.5 2 8 7.9 10 9.3.2.3-10.8 5.8-10.5 6.1 4.1 3.7 20-6 19.1-7.1 2.8-5.8 6.7-14.3 10.5-20.2 7-10.7 17.4-21.4 22.3-31.6 4.3-8.4 6.9-12.6 11.1-19.8 2.5-4.2 3.6-6.4 2.6-1.2-3.2 9 4.9 16.3 10.7 10.5 4.7-3.2 5-20.4-.6-6.8-8.6 20.3-8.8-10.8-1.5-12.8 4-2.1 7 1.8 8.4 4.9 2.6-15.3-3.4-31.9-16.2-41.3-1.6-1.1-1.8-1.4-.8-1.1 18.3 6.4 27.4 26.8 26.6 46.2-.2 12.2 1.2 7.3 2.1.1 3.5-20.7-12.7-53.8-37.1-48.6ZM453 743.5c12.6 12.7 15.9 17.2 20.3 35.8 1.8 17.2 2.4 39.5-7.8 53.6-7.1 11.6 6-2.3 6.5-6.5 10.4-23.8 8.9-72-19-82.9Zm59.3 1.5c5.3.2 9.2.6 9.6 1 2.5 2 11.7 14.8 11.7 16.3-5 .7-24.3-1.2-33-.8-.5-1.1-2.6-4.7-2-5.4 5.3-.4 30.6 1.6 30.3.1-3.8-2.2-24-1.4-31.2-1.7-1.2-2.3-6.1-7.1-.7-5.8 2.8.3 14.6 1.4 17.3 1.8 9 1.3 16.7.5 3.9-1.4-7.9-2.5-24.1.3-28.5-4.2 1.2-2.1 17.5.5 22.6.1Zm-81.9 5.8c-1.8.6-2.2 1.8 0 .7 7.1-3.6 20.3 7.6 21.8 14.4 3.7 8.1 8.7 61.4-3.2 66.7-3.6 2.6-9.4 4.8-10.7 4.1-.8-.4-1-.4-.7.3.5 1.2 2.7.8 7.9-1.4 16.7-8.3 14.1-15 15.3-38.6-.8-20.3 1.2-27.4-9-39.4-5.4-5.1-14.9-8.9-21.4-6.8Zm-.1 9.3c-11.8 6.1-10.2 22.9-11.5 35.2-1.5 17.6 8.5 35.7 26.2 28.2 6.6-9.1 8.2-13.5 7.6-30.4-1.3-18.5.8-24-10-30.3-4.3-1.7-7.7-4.3-12.3-2.7Zm6.4 1.8c2.3 2.6 6.8 4.4 7.9 8.9 1.2 2.9 3.3 13 1.5 11.3 0-.8-.1-1.1-.8-4.9-.6-3.6-2-4.1-4.5-3.9.5-2.5 2.6-6.7-1.4-6.1-2.9-.3-.2-2-4.8-1.7-4.1-.7-4.3 2.4-6.2 3.9-1.6-1.8 5.7-13 8.3-7.5Zm209.4-1c13.5.5 11.1 14.9 1.5 19.9-2.6 1.2-2.7 1.2-6 .4-3.6-1.4-5.8.8-8.3-1.8-9-7.8 2.9-22.7 12.8-18.5Zm-8.9 1.8c-7.9 2.9-3.2 20.2 5.2 15.9 4.4-2 5.1-3 5-7.7-.1-4.1-.9-6.7-2-6.1-.3-3-3.9-5.2-8.2-2.1Zm19.1.1c18.4 3.7 45.1 7.6 66 12.4 5.2 1.3 8.2 1.1 10.2 2.5-.8 1.8-4.1 8.2-4.5 10.7-.7 3-1 3.3-3 3.2-5.8-.6-15.4-1.8-20.8-2.9-12.9-3.2-24.4-4.9-38.2-6.6-5.9-1.6-14.9.3-12.9-1 2.3-3.2 3.7-3.8 3.6-9.6 1.2-5.3-5-10.9-.4-8.7Zm-136.2 1.3c8.4.2 12.4.2 12.6-.2.8-1.2 1.4-.4 2.7 3.7 5.9 19.1 6.1 50.4-7.5 67-2.9 5.6-1.9 2.2-1.3-3 1-8.5 6.5-13.3 3.8-21.2-2.6 3.2-3.8 9.7-6.6 12.9-3.6 4.6-4.8-3.2-4.9-6.3.1-3.3 1.4-8.7 2.2-9.2.3-.2 0-.4-.7-.4-2.5 0-2.1 4.8-5 1.5-.8-1.7-8.2-1.2-10.9-1.2.1-1.4.3-4.3.4-5.7 7.8 0 25.7 2.8 32 1.1.8-.9-26.3-2.2-31.4-2.6-.9-.2-.7-4.5-.7-5.8 8.1-.7 24.6 3.7 32 1.5.6-.7.1-.9-3.9-1.2-5.8-.5-23.8-2.9-27-1.7-2 1.6-.7-5.7-.8-7.2 43.2 1.4 41.6-1.6-.1-2-1.5-8.2-.6-5.7 9.7-5.8 26 1.3 32.4-1.7 2-1.8-13.9-.7-12.3 2-13.8-6.7l9.8.4c17.4.8 23.9.6 22.7-.7 1.2-.9-29.2-1.1-32.6-1.7-.4-.4-1.6-4.5-1.3-4.8 4.5.3 9.5 1 18.6 1.1Zm124.9 4.3c1.2 2.7-8 10.4-9.5 6.2-2.8-4.3 8.7-16.3 9.5-6.2Zm-218 16.7c.6 1.8-.7 3.4.5 3.6 2.2 1.3 1.2 6.2 4.2 5.5 2.3.3 1.7-1.8 3.2-2.3 1.4-.3 1.8-5.8 3.6-5.5 2.9-.4.4 3 4.8 2.3 5.5.9 2-5.5 3.5-4.5.7-.2 1.8 16.7 0 15.3-.7 1.3-10.9 2.3-10.2 4.4 0 1.6-1.1 1.8-1.5.2-.2-.9-.8-1.1-2.4-1.1-7.9-.4-2.6 16 4.7 13.8-1.8.7-4.3 2.7-2.3 4.3.5 1.6 9.2-2.1 6.1 1-3.7 3.1-9.5-.3-12.1-6.1-4.4-1.6-5.1-42.7-2.1-30.9Zm152.8 13.1c-9.8 16.3-20.2 41.8-30.3 55.2-.5 2.3-18.7 21.4-14.4 20.7 5.9-3.2 18.9-20.1 22.3-25.8 0-1.2 9.3-18.7 13.6-25.5 1.1-.2 18.8-39.5 8.8-24.6Zm12.1.1c-2.2 3.5-5.6 11.5-3 15.3 4.4 4.3 13.1 3.6 14.5-5 1.9-6.2.8-8.4-3.6-.3-2.1 3.5-5 8.7-7.5 6.1-1.1-1.3-.4-9.8 1.1-13.5 1.5-3.3 1.8-6.7-1.5-2.6ZM769.4 809c4.3 38.5-15.5 36.2-45.2 38.4-18.4 1.6-16 2.2-38.8 2.3-24.1-.1-31.3 2.5-52.8 1.1-5.8-.4-6.7-.6-8-1.8-1.2-1.1-1.3-1.2-.3-.7 2.1 1 2.1.7.2-1.2-3.4-3.3-7.2-9.2-7.2-11.2.1-2.3-1.1-1.9-1.1-4.1-.4-4-2.6.3-2.4 3.6-.7 4.6 6.6 10.6 10.4 14.5 3 3.1 3.5 3.3 7.9 3.7 9.1.9 13.4 3.1 23.6 1.5 15.4-1.2 66.2-2.4 76.2-4.3 29.4-1.5 43.1-3.4 39.5-40.6.1-7-2.7-7.6-2-1.2Zm-256.3-.1c-1.2 1.9-7.6 7.2-9.3 3.9-1.4-5.7 6.7-4.9 9.3-3.9Zm-66.7 2.2c-.4 2.5-1 3.2-1.9 5.4-3.3 6.9 3.1-13.9 1.9-5.4Zm113.3-1.5c1.1.8 2.4.3 3.3 1.4.8 1 1.7 1.1 1.7.3.6-.6-6-2.8-5-1.7Zm-53.2 5.9c-.3 2.2-5.2 7-3 .4.2-.7 3-1.1 3-.4Zm-3.4 5.9c0 .4-.4 1.3-.8 2.1-1.9 3.3.1-5.3.8-2.1Zm92.5 3c-12 14.1-18.5 36.3-34.5 50.3-5.9 6-12.3 15.2-4.3 10.2 7.9-10.6 15.7-17.5 22.7-27.9 4.4-6 15.2-31.8 13.5-22.8-1.7 12.2 16.3 4.6 14.9-3.9 0-1.7-.2-1.9-1.2-1.8-2.3 1.1-4.1 9.8-7.8 10.7-3.5 1.1-3.6-5.2-.1-11.1 3-5.4 2.1-1.1 3.2-2.4-.2-3.4-4.3-1-5.9 2-.6 1-1.3 1.8-1.6 1.8-1.5-.4 9.8-12.1 1.1-5.1Zm-15.4-.6c-.6 1.5 5.2 3.1 5.5 2-1.2-.7-5-3.2-5.5-2Zm-67.6 5.7c.4.4 3.3 1 1.7 0-.5-.4-3.4-1-1.7 0Zm3.4 1.6c.8 1.2 1.3 1.4 1.8.6.4-1-3.6-2.8-1.8-.6Zm74.1 17.9c-.5 2.6 3.6 4.6 4.7 3 0-1.3-2.1 1.6-2.6-2.4-.7-3-2.1-3.4-2.1-.6Z\", fill: \"#1E1919\" }))));\n};\n","import {useCallback} from 'react';\n\nimport {useAtom, useAtomValue} from 'jotai';\nimport {defineMessages, FormattedMessage} from 'react-intl';\nimport styled from 'styled-components';\n\nimport {Modal} from '@dropbox/dig-components/modal';\nimport {Text, Title} from '@dropbox/dig-components/typography';\nimport {TeamFilmmakersHero} from '@dropbox/dig-illustrations/hero/team-filmmakers';\n\nimport {Button} from '~/components/button';\nimport {useViewport} from '~/components/viewport_context';\nimport {useOnboardingChecklist} from '~/lib/onboarding_v2/use_onboarding_checklist';\nimport {useLoggingClient} from '~/lib/use_logging_client';\nimport {\n isWelcomeModalOpenAtom,\n ONBOARDING_OPEN_SOURCE,\n ONBOARDING_TYPE,\n onboardingTypeAtom,\n} from '~/state/onboarding_v2';\nimport {showProToolsConnectionUIAtom} from '~/state/pro_tools';\n\nconst intlMessages = defineMessages({\n modalTitle: {\n defaultMessage: 'Get to know Dropbox Replay',\n id: 'O0s/n3',\n description: 'Modal title of onboarding modal for Dropbox Replay',\n },\n modalBody: {\n defaultMessage:\n 'Learn all about Dropbox Replay and its unique features with an interactive experience.',\n id: 'RU3ZDi',\n description:\n 'Description that gives an intro about the onboarding experience with a warning about volume',\n },\n modalBodyWithWarning: {\n defaultMessage:\n 'Learn all about Dropbox Replay and its unique features with an interactive video experience. The video will automatically start, but it may take a moment to load.',\n id: 'IIo6jJ',\n description:\n 'Description that gives an intro about the onboarding experience with a warning about volume',\n },\n dismissCopy: {\n defaultMessage: 'Dismiss',\n id: 'tAmLxE',\n description: 'Button to exit the onboarding experience',\n },\n startCopy: {\n defaultMessage: 'Start',\n id: 'YeGUhR',\n description: 'Button to start the onboarding experience',\n },\n});\n\nconst ModalHeader = styled(Modal.Header)`\n padding-top: var(--spacing__unit--4);\n padding-bottom: var(--spacing__unit--2);\n`;\n\nconst ModalTitle = styled(Title)`\n margin: 0;\n`;\n\nconst IllustrationContainer = styled.div`\n background-color: var(--dig-color__background__raised);\n max-width: 100%;\n\n & svg {\n max-width: 100%;\n max-height: 338px;\n color: var(--dig-color__text__base);\n }\n`;\n\nconst StartButton = styled(Button)`\n // override to keep the blue\n &.start-button {\n background-color: rgb(48, 128, 255);\n color: var(--dig-color__text__base);\n }\n\n &:hover.start-button {\n color: var(--dig-color__primary-cta__on-base);\n }\n`;\n\ntype OnboardingWelcomeProps = {\n // This is optional because we need this specific for video. Videos have an extra step to play when\n // pressing 'Start' in the modal. Images don't need to play anything.\n handleOnStart?: () => void;\n};\n\nconst OnboardingWelcome = ({handleOnStart = () => {}}: OnboardingWelcomeProps) => {\n // eslint-disable-next-line deprecation/deprecation\n const {isSmallScreenSize} = useViewport();\n const loggingClient = useLoggingClient();\n const {handleToggleChecklist} = useOnboardingChecklist({\n // eslint-disable-next-line deprecation/deprecation\n logEvent: loggingClient.logEvent.bind(loggingClient),\n });\n const [isWelcomeModalOpen, setIsWelcomeModalOpen] = useAtom(isWelcomeModalOpenAtom);\n const onboardingType = useAtomValue(onboardingTypeAtom) as ONBOARDING_TYPE;\n const showProToolsConnectionUI = useAtomValue(showProToolsConnectionUIAtom);\n\n const handleOnRequestClose = useCallback(() => {\n // eslint-disable-next-line deprecation/deprecation\n loggingClient.logEvent('dismiss_onboarding_welcome_modal', {\n onboarding_type: onboardingType,\n });\n setIsWelcomeModalOpen(false);\n }, [onboardingType, setIsWelcomeModalOpen, loggingClient]);\n\n const handleOnStartOnboarding = () => {\n // eslint-disable-next-line deprecation/deprecation\n loggingClient.logEvent('start_onboarding_welcome_modal', {\n onboarding_type: onboardingType,\n });\n setIsWelcomeModalOpen(false);\n\n if (onboardingType !== ONBOARDING_TYPE.IMAGE_WITH_FILE) {\n handleToggleChecklist(ONBOARDING_OPEN_SOURCE.WELCOME_MODAL);\n }\n\n handleOnStart();\n };\n\n return (\n <Modal\n isCentered\n open={isWelcomeModalOpen && !showProToolsConnectionUI && !isSmallScreenSize}\n shouldCloseOnOverlayClick={false}\n width={600}\n >\n <IllustrationContainer>\n <TeamFilmmakersHero aspectRatio=\"16:9\" />\n </IllustrationContainer>\n <ModalHeader hasBottomSpacing=\"title-small\">\n <ModalTitle size=\"medium\">\n <FormattedMessage {...intlMessages.modalTitle} />\n </ModalTitle>\n </ModalHeader>\n <Modal.Body>\n <Text>\n <FormattedMessage\n {...(onboardingType === ONBOARDING_TYPE.VIDEO_WITHOUT_FILE\n ? intlMessages.modalBodyWithWarning\n : intlMessages.modalBody)}\n />\n </Text>\n </Modal.Body>\n <Modal.Footer>\n <Button inverse={false} onClick={handleOnRequestClose} variant=\"opacity\">\n <FormattedMessage {...intlMessages.dismissCopy} />\n </Button>\n <StartButton className=\"start-button\" onClick={handleOnStartOnboarding} variant=\"primary\">\n <FormattedMessage {...intlMessages.startCopy} />\n </StartButton>\n </Modal.Footer>\n </Modal>\n );\n};\n\nexport {OnboardingWelcome};\n","import {useAtomValue} from 'jotai';\n\nimport {OnboardingWelcome} from '~/components/onboarding_v2/onboarding_welcome';\nimport {useOnboardingChecklist} from '~/lib/onboarding_v2/use_onboarding_checklist';\nimport {useLoggingClient} from '~/lib/use_logging_client';\nimport {useVideoViewerContext} from '~/pages/viewer_page/video_viewer_context';\nimport {ONBOARDING_TYPE, onboardingTypeAtom, STEPS} from '~/state/onboarding_v2';\n\nconst OnboardingWelcomeForVideo = () => {\n const {videoPlayerInstance} = useVideoViewerContext();\n const loggingClient = useLoggingClient();\n const {handleCompleteStep} = useOnboardingChecklist({\n // eslint-disable-next-line deprecation/deprecation\n logEvent: loggingClient.logEvent.bind(loggingClient),\n });\n const onboardingType = useAtomValue(onboardingTypeAtom) as ONBOARDING_TYPE;\n\n // if a user clicks Start and they're on the demo video, play the video\n const handlePlayVideo = () => {\n if (onboardingType === ONBOARDING_TYPE.VIDEO_WITHOUT_FILE) {\n if (videoPlayerInstance) {\n videoPlayerInstance.play();\n handleCompleteStep(STEPS.VIEW_FILE);\n }\n }\n };\n\n return <OnboardingWelcome handleOnStart={handlePlayVideo} />;\n};\n\nexport {OnboardingWelcomeForVideo};\n","import React from 'react';\n\nimport {useIntl} from 'react-intl';\nimport type {IntlShape} from 'react-intl';\n\nimport {Banner, type BannerProps} from '@dropbox/dig-components/banner';\nimport {UIIcon} from '@dropbox/dig-icons';\nimport {InfoLine, WarningLine} from '@dropbox/dig-icons/assets';\n\nimport {Button} from '~/components/button';\nimport {\n DueDateTimeframe,\n getDueDateTimeframe,\n getHoursToDueDate,\n} from '~/components/due_date/due_date_utils';\n\nconst getDueDateText = (intl: IntlShape, dueDate?: Date) => {\n if (!dueDate) {\n return;\n }\n\n const dueDateTimeframe = getDueDateTimeframe(dueDate);\n const dueDateTime = intl.formatTime(dueDate.getTime(), {hour: 'numeric'});\n const hoursToDueDate = getHoursToDueDate(dueDate);\n\n switch (dueDateTimeframe) {\n case DueDateTimeframe.OVERDUE_MORE_THAN_2_DAYS:\n case DueDateTimeframe.OVERDUE_LESS_THAN_2_DAYS:\n return intl.formatMessage({\n defaultMessage: 'Feedback is overdue. Consider disabling the due date for this file.',\n id: 'v5+aAV',\n description: 'Text that is shown when the due date to give feedback has passed.',\n });\n case DueDateTimeframe.WITHIN_5_HOURS:\n return intl.formatMessage(\n {\n defaultMessage: 'Feedback due in {hours} {hours, plural, one{hour} other{hours}}.',\n id: 'nNwWQp',\n description: 'Text that is shown when the due date is within 5 hours.',\n },\n {\n hours: hoursToDueDate,\n },\n );\n case DueDateTimeframe.TODAY:\n return intl.formatMessage(\n {\n defaultMessage: 'Feedback due today by {time}.',\n id: 'fGEt99',\n description: 'Text that is shown when the due date to give feedback is today.',\n },\n {\n time: dueDateTime,\n },\n );\n case DueDateTimeframe.TOMORROW:\n return intl.formatMessage(\n {\n defaultMessage: 'Feedback due tomorrow by {time}.',\n id: 'UySjct',\n description: 'Text that is shown when the due date to give feedback is tomorrow.',\n },\n {\n time: dueDateTime,\n },\n );\n case DueDateTimeframe.FUTURE:\n const dueDateDay = intl.formatDate(dueDate, {month: 'short', day: 'numeric'});\n return intl.formatMessage(\n {\n defaultMessage: 'Feedback due on {date}.',\n id: 'kXa71C',\n description: 'Text that shows what day feedback on a file is due.',\n },\n {\n date: dueDateDay,\n },\n );\n }\n};\n\ntype DueDateBannerProps = {\n editable: Boolean;\n isLoading: boolean;\n onRequestClose: () => void;\n dueDate?: Date;\n isImage?: boolean;\n onClick?: () => void;\n};\n\nexport const DueDateBanner: React.FC<DueDateBannerProps> = (props) => {\n const {editable, isLoading, dueDate, onClick, onRequestClose} = props;\n const intl = useIntl();\n const [bannerProps, setBannerProps] = React.useState<BannerProps>();\n const dueDateTimeframe = dueDate ? getDueDateTimeframe(dueDate) : '';\n const dueDateText = getDueDateText(intl, dueDate);\n\n const withCloseButtonText = intl.formatMessage({\n defaultMessage: 'Close',\n id: 'EFkGCy',\n description: 'aria-label to close the dueDate banner.',\n });\n\n React.useEffect(() => {\n if (\n dueDateTimeframe === DueDateTimeframe.OVERDUE_MORE_THAN_2_DAYS ||\n dueDateTimeframe === DueDateTimeframe.OVERDUE_LESS_THAN_2_DAYS ||\n dueDateTimeframe === DueDateTimeframe.WITHIN_5_HOURS\n ) {\n setBannerProps({\n type: 'warning',\n withLeftIcon: <UIIcon src={WarningLine} />,\n onRequestClose,\n withCloseButton: withCloseButtonText,\n });\n } else {\n setBannerProps({\n type: 'neutral',\n withLeftIcon: <UIIcon src={InfoLine} />,\n onRequestClose,\n withCloseButton: withCloseButtonText,\n });\n }\n }, [dueDateTimeframe, onRequestClose, withCloseButtonText]);\n\n if (isLoading || (!editable && !dueDate)) {\n return null;\n }\n\n return (\n <Banner {...bannerProps}>\n <Banner.Message> {dueDateText}</Banner.Message>\n <Banner.Actions>\n <Button onClick={onClick} variant=\"transparent\">\n {intl.formatMessage({\n defaultMessage: 'Manage due date',\n id: 'E4Meyv',\n description: 'Button label to manage due date',\n })}\n </Button>\n </Banner.Actions>\n </Banner>\n );\n};\n","import React from 'react';\n\nimport {useAtom} from 'jotai';\nimport {FormattedDate, FormattedMessage} from 'react-intl';\n\nimport {Snackbar} from '@dropbox/dig-components/snackbar';\n\nimport {Button} from '~/components/button';\nimport {ReelSnackbar} from '~/components/snackbar';\nimport {currentTaskStateAtom} from '~/state/task';\n\ntype DueDateSnackbarProps = {\n open: boolean;\n handleCloseSnackbar: () => void;\n};\n\nexport const DueDateSnackbar = (props: DueDateSnackbarProps) => {\n const {open, handleCloseSnackbar} = {...props};\n const [taskState] = useAtom(currentTaskStateAtom);\n\n return (\n <ReelSnackbar onRequestClose={handleCloseSnackbar} open={open} timeout={5000}>\n <Snackbar.Message>\n {!taskState.isLoading && taskState.task?.dueDate ? (\n <FormattedMessage\n defaultMessage=\"Due date has been set to <b>{formattedDueDate}</b>.\"\n description=\"Text for snackbar message describing the updated due date.\"\n id=\"aq6zPU\"\n values={{\n formattedDueDate: (\n <FormattedDate day=\"numeric\" month=\"numeric\" value={taskState.task?.dueDate} />\n ),\n b: (chunks: React.ReactNode) => <b>{chunks}</b>,\n }}\n />\n ) : (\n <FormattedMessage\n defaultMessage=\"Due date has been removed.\"\n description=\"Text for snackbar message describing due date removal.\"\n id=\"nhB3Ey\"\n />\n )}\n </Snackbar.Message>\n <Snackbar.Actions>\n <Button inverse onClick={handleCloseSnackbar} variant=\"transparent\">\n <FormattedMessage\n defaultMessage=\"Dismiss\"\n description=\"Text for button to dismiss the due date snackbar.\"\n id=\"8QA7f2\"\n />\n </Button>\n </Snackbar.Actions>\n </ReelSnackbar>\n );\n};\n","import React from 'react';\n\nimport {useIntl} from 'react-intl';\n\nimport {UIIcon} from '@dropbox/dig-icons';\nimport {FullscreenExitLine, FullscreenLine} from '@dropbox/dig-icons/assets';\n\nimport {ReelControlTooltip} from '~/pages/viewer_page/components/video_controls/reel_control_tooltip';\n\nimport {IconButton} from './button';\nimport {getShortcutMessages} from '../pages/viewer_page/components/keyboard_shortcuts/keyboard_shortcuts_messages';\n\ntype FullScreenButtonProps = {\n isFullscreen: boolean;\n onToggleFullscreenClick: () => void;\n};\n\nexport const FullScreenButton = ({\n isFullscreen,\n onToggleFullscreenClick,\n}: FullScreenButtonProps) => {\n const intl = useIntl();\n const shortcutMessages = React.useMemo(() => getShortcutMessages(intl), [intl]);\n return (\n <ReelControlTooltip description={shortcutMessages.toggleFullscreen} shortcutText=\"f\">\n <IconButton onClick={onToggleFullscreenClick} variant=\"transparent\">\n <UIIcon\n aria-label={shortcutMessages.toggleFullscreen}\n src={isFullscreen ? FullscreenExitLine : FullscreenLine}\n />\n </IconButton>\n </ReelControlTooltip>\n );\n};\n","import type {VersionStatus} from '~/components/status/status';\nimport {StatusDropdown} from '~/components/status/status_dropdown';\nimport type {NewVersionStatusType} from '~/lib/logging/logger_types';\nimport {useVersionsContext} from '~/pages/viewer_page/components/versions_context';\n\nimport {useViewerPageContext} from '../viewer_page_context';\n\ntype StatusDropdownVideoPageProps = {\n buttonSize: 'small' | 'standard';\n buttonType: 'outline' | 'opacity' | 'transparent';\n};\n\nexport const StatusDropdownWithConsumer = (props: StatusDropdownVideoPageProps) => {\n const {buttonSize, buttonType} = props;\n const versionsContext = useVersionsContext();\n const {loggingClient} = useViewerPageContext();\n\n if (!versionsContext.areVersionsEnabled) {\n return null;\n }\n\n if (versionsContext.currentVersionSummaries.isLoading) {\n return (\n <StatusDropdown\n buttonSize={buttonSize}\n buttonType={buttonType}\n disabled\n versionStatus={versionsContext.currentVersionStatus}\n />\n );\n }\n\n const onChange = (versionStatus: VersionStatus) => {\n versionsContext.setVersionStatus(versionStatus);\n // eslint-disable-next-line deprecation/deprecation\n loggingClient.logEvent('select_version_status', {\n new_version_status: versionStatus.toLowerCase() as NewVersionStatusType,\n });\n };\n\n return (\n <StatusDropdown\n buttonSize={buttonSize}\n buttonType={buttonType}\n disabled={false}\n onChange={onChange}\n versionStatus={versionsContext.currentVersionStatus}\n />\n );\n};\n","import React from 'react';\n\nimport {FormattedMessage, useIntl} from 'react-intl';\nimport type VideoJsPlayer from 'video.js/dist/types/player';\n\nimport {Snackbar} from '@dropbox/dig-components/snackbar';\nimport {Tooltip} from '@dropbox/dig-components/tooltips';\nimport {Text} from '@dropbox/dig-components/typography';\nimport {UIIcon} from '@dropbox/dig-icons';\nimport {PhotoUploadLine} from '@dropbox/dig-icons/assets';\n\nimport {Button, IconButton} from '~/components/button';\nimport {ReelSnackbar} from '~/components/snackbar';\nimport type {MediaProp} from '~/lib/api';\nimport {setThumbnail} from '~/lib/api';\nimport type {LoggingClient} from '~/lib/logging/logger';\nimport {useVideoViewerContext} from '~/pages/viewer_page/video_viewer_context';\nimport {useViewerPageContext} from '~/pages/viewer_page/viewer_page_context';\n\ntype SnackbarStatus = 'in_progress' | 'success' | 'failed';\n\ntype SnapshotSnackbarProps = {\n open: boolean;\n onClose: () => void;\n status: SnackbarStatus;\n};\n\nexport const SnapshotSnackbar = (props: SnapshotSnackbarProps) => {\n const {open, onClose, status} = props;\n return (\n <ReelSnackbar onRequestClose={onClose} open={open} timeout={5000}>\n <Snackbar.Message>\n {status === 'in_progress' ? (\n <Text color=\"standard\" inverse>\n <FormattedMessage\n defaultMessage=\"Saving frame as new thumbnail\"\n description=\"Message indicating that the user action to save the current frame of the video as the thumbnail is in progress\"\n id=\"TrMqzG\"\n />\n </Text>\n ) : status === 'success' ? (\n <Text color=\"standard\" inverse>\n <FormattedMessage\n defaultMessage=\"Saved frame as new thumbnail\"\n description=\"Message indicating that the user action to save the current frame of the video as the thumbnail was successful\"\n id=\"PaAPIu\"\n />\n </Text>\n ) : (\n <Text color=\"error\" inverse>\n <FormattedMessage\n defaultMessage=\"Failed to save frame as new thumbnail\"\n description=\"Message indicating that the user action to save the current frame of the video as the thumbnail failed\"\n id=\"luEZnh\"\n />\n </Text>\n )}\n </Snackbar.Message>\n <Snackbar.Actions>\n <Button onClick={onClose} variant=\"transparent\">\n <FormattedMessage\n defaultMessage=\"Dismiss\"\n description=\"Text for button to dismiss the new thumbnail snackbar.\"\n id=\"CvFsQR\"\n />\n </Button>\n </Snackbar.Actions>\n </ReelSnackbar>\n );\n};\n\nexport const SetThumbnailButton = () => {\n const {mediaMetadata, loggingClient} = useViewerPageContext();\n const {videoPlayerInstance} = useVideoViewerContext();\n return (\n <BaseSetThumbnailButton\n loggingClient={loggingClient}\n mediaMetadata={mediaMetadata}\n videoPlayerInstance={videoPlayerInstance}\n />\n );\n};\n\nexport const BaseSetThumbnailButton = (props: {\n mediaMetadata: MediaProp;\n loggingClient: LoggingClient;\n videoPlayerInstance: VideoJsPlayer | undefined;\n}) => {\n const {mediaMetadata, loggingClient, videoPlayerInstance} = props;\n const [snackbarOpen, setSnackbarOpen] = React.useState<boolean>(false);\n const [snackbarStatus, setSnackbarStatus] = React.useState<SnackbarStatus>('in_progress');\n const intl = useIntl();\n\n const onClickSetThumbnail = async () => {\n // eslint-disable-next-line deprecation/deprecation\n loggingClient.logEvent('select_set_thumbnail');\n setSnackbarStatus('in_progress');\n setSnackbarOpen(true);\n if (videoPlayerInstance) {\n const video_version_id = mediaMetadata.id;\n const current_time = videoPlayerInstance.currentTime();\n try {\n await setThumbnail(video_version_id, current_time);\n setSnackbarStatus('success');\n } catch (e) {\n setSnackbarStatus('failed');\n }\n }\n };\n\n return (\n <>\n <Tooltip\n placement=\"bottom\"\n title={intl.formatMessage({\n defaultMessage: 'Set frame as thumbnail',\n id: 'p35DxH',\n description:\n 'Tooltip text for the button that saves the current video frame as the new video thumbnail image.',\n })}\n >\n <IconButton\n aria-label={intl.formatMessage({\n defaultMessage: 'Set frame as thumbnail',\n id: 'QruClD',\n description:\n 'Aria label text for the button that saves the current video frame as the new video thumbnail image.',\n })}\n data-safe-to-unmask-name=\"set-thumbnail-button\"\n onClick={onClickSetThumbnail}\n variant=\"transparent\"\n >\n <UIIcon src={PhotoUploadLine} />\n </IconButton>\n </Tooltip>\n <SnapshotSnackbar\n onClose={() => setSnackbarOpen(false)}\n open={snackbarOpen}\n status={snackbarStatus}\n />\n </>\n );\n};\n","/* eslint-disable deprecation/deprecation */\nimport React from 'react';\n\nimport {useAtom} from 'jotai';\nimport {useNavigate} from 'react-router-dom';\nimport styled, {css} from 'styled-components';\n\nimport {Title} from '@dropbox/dig-components/typography';\n\nimport {ItemType} from '~/components/common';\nimport {spacing} from '~/components/styled';\nimport {SMALL_SCREEN_WIDTH_BREAKPOINT} from '~/components/viewport_context';\nimport {useViewport} from '~/components/viewport_context';\nimport {useReelAppGlobalState} from '~/context';\nimport {MediaType} from '~/lib/api';\nimport {useReelProvisioningEnabled} from '~/lib/utils';\nimport {BackChevron} from '~/pages/layout/components/common_header';\nimport {ContextMenu} from '~/pages/viewer_page/components/context_menu';\nimport {DownloadButton} from '~/pages/viewer_page/components/downloads/video_download_button';\nimport {InfoButton} from '~/pages/viewer_page/components/info_button';\nimport {SetThumbnailButton} from '~/pages/viewer_page/components/set_thumbnail_button';\nimport {VersionsAwareShareFeatures} from '~/pages/viewer_page/components/share_features';\nimport {useVersionsContext} from '~/pages/viewer_page/components/versions_context';\nimport {ViewerSidebarToggle} from '~/pages/viewer_page/components/viewer_sidebar';\nimport {useViewerPageContext} from '~/pages/viewer_page/viewer_page_context';\nimport {ViewerSidebarDisplayState, viewerSidebarDisplayStateAtom} from '~/state/viewer';\nimport {isInAdobeExtension, isInExtension} from '~/use_extensions';\n\nimport {PremiumTooltip} from '../../layout/components/premium_tooltip';\n\nconst VideoTitle = styled(Title)`\n margin-left: 32px;\n max-width: calc(100vw - 420px);\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n`;\n\nconst TopRow = styled.div<{\n $isSmallScreenSize: boolean;\n $isImage: boolean;\n $isInAdobeExtension: boolean;\n}>`\n display: flex;\n align-content: flex-start;\n justify-content: space-between;\n width: 100%;\n\n @media screen and (max-width: ${SMALL_SCREEN_WIDTH_BREAKPOINT}px) {\n left: 0;\n margin-bottom: 8px;\n padding: 0 12px;\n position: absolute;\n right: 0;\n top: 8px;\n width: calc(100% - 24px);\n z-index: 11;\n }\n\n .panelMode & {\n position: absolute;\n width: calc(100% - 32px);\n z-index: 11;\n background-color: var(--dig-color__background__base);\n padding: 8px 16px 8px 16px;\n align-items: center;\n }\n\n // By default, these backgrounds are transparent, but on the image page and\n // on mobile, the buttons float in front of user content, so we must get the\n // opaque equivalents on a similar background\n // However, in the Adobe extensions, we want to keep the transparent background\n ${({$isImage, $isSmallScreenSize, $isInAdobeExtension}) =>\n !$isInAdobeExtension &&\n ($isImage || $isSmallScreenSize) &&\n css`\n && .dig-Button,\n & .dig-IconButton {\n background: #2b2929;\n }\n & .dig-Menu .dig-Button:disabled,\n & .dig-IconButton:disabled,\n & .dig-Menu .dig-Button[aria-disabled='true'],\n & .dig-IconButton[aria-disabled='true'] {\n background: #302b2b;\n }\n `}\n`;\n\nconst TopRowLeftSide = styled.div`\n display: flex;\n align-items: center;\n`;\n\nconst TopRowRightSide = styled.div`\n display: flex;\n gap: ${spacing('Micro XSmall')};\n`;\n\nconst LeftMargin = styled.div`\n margin-left: 8px;\n @media screen and (max-width: ${SMALL_SCREEN_WIDTH_BREAKPOINT}px) {\n margin-left: 0;\n margin-right: 8px;\n }\n`;\n\nexport const ViewerTopRow = ({\n statusDropdownSlot,\n versionSelectorSlot,\n dueDateSlot,\n sidebarSlot,\n visible,\n fullScreenButtonSlot,\n}: {\n versionSelectorSlot: React.ReactElement;\n statusDropdownSlot: React.ReactElement;\n dueDateSlot?: React.ReactElement;\n sidebarSlot?: React.ReactElement;\n fullScreenButtonSlot?: React.ReactElement;\n visible: boolean;\n}) => {\n const {mediaMetadata, setProjectName, loggingClient, currentUserIsOwner} = useViewerPageContext();\n const versionsContext = useVersionsContext();\n\n const {isSmallScreenSize} = useViewport();\n const [viewerSidebarDisplayState, setViewerSidebarDisplayState] = useAtom(\n viewerSidebarDisplayStateAtom,\n );\n const sessionContext = useReelAppGlobalState();\n const isProvisioningEnabled = useReelProvisioningEnabled();\n const isDueDateProvisioned =\n !isProvisioningEnabled ||\n (sessionContext.status === 'logged in' && sessionContext.provisions.deadlines_and_tasks);\n const dueDateTriggerRef = React.useRef(null);\n const [showDueDatePremiumTooltip, setShowDueDatePremiumTooltip] = React.useState<boolean>(false);\n const [tooltipTimeout, setTooltipTimeout] = React.useState<NodeJS.Timeout>();\n\n const versionSummaries =\n versionsContext.areVersionsEnabled &&\n !versionsContext.currentVersionSummaries.isLoading &&\n versionsContext.currentVersionSummaries.versionSummaries;\n\n const {showContextMenu, projectId} = versionsContext;\n\n const {\n mediaMetadata: {folderId},\n } = useViewerPageContext();\n\n const navigate = useNavigate();\n const onRemove = (itemType: ItemType, [itemId]: string[]) => {\n if (itemType == ItemType.VERSION) {\n if (versionsContext.areVersionsEnabled) {\n versionsContext.deleteVersionById(itemId);\n }\n } else {\n navigate('/');\n }\n };\n\n const showViewerSidebar = () => {\n if (viewerSidebarDisplayState === ViewerSidebarDisplayState.REDCARPET) {\n return;\n }\n\n loggingClient.logEvent('select_toggle_comments_pane', {show: 'true'});\n setViewerSidebarDisplayState({\n viewerSidebarDisplayState: ViewerSidebarDisplayState.SHOWING,\n isManuallySet: true,\n });\n };\n\n const contextMenu =\n showContextMenu && projectId ? (\n <ContextMenu\n accessLevel={mediaMetadata.accessLevel!}\n isSmallScreen={isSmallScreenSize}\n loggingClient={loggingClient}\n name={mediaMetadata.projectName}\n numVersions={versionSummaries ? versionSummaries.length : 0}\n onProjectRename={setProjectName}\n onProjectsDelete={onRemove}\n ownerUid={mediaMetadata.ownerUid}\n projectId={projectId}\n versionNumber={mediaMetadata.versionNum}\n videoId={mediaMetadata.videoId}\n videoVersionId={mediaMetadata.id}\n />\n ) : null;\n\n const isViewOnly = viewerSidebarDisplayState === ViewerSidebarDisplayState.DISABLED;\n const versionIsReady =\n !versionsContext.areVersionsEnabled || versionsContext.pendingVersionAction === 'none';\n\n const isSharePage = versionsContext.isSharePage;\n\n let showSetThumbnail: boolean;\n if (!mediaMetadata.accessLevel || mediaMetadata.accessLevel === 'none') {\n showSetThumbnail = currentUserIsOwner;\n } else {\n showSetThumbnail =\n mediaMetadata.accessLevel === 'owner' ||\n mediaMetadata.accessLevel === 'admin' ||\n mediaMetadata.accessLevel === 'super_admin';\n }\n\n return (\n <TopRow\n $isImage={mediaMetadata.type === 'image'}\n $isInAdobeExtension={isInAdobeExtension()}\n $isSmallScreenSize={isSmallScreenSize}\n style={{visibility: visible ? 'visible' : 'hidden'}}\n >\n <TopRowLeftSide>\n {isInExtension() && (\n <BackChevron\n backToUrl={folderId ? `/folder/${folderId}` : '/'}\n loggingClient={loggingClient}\n />\n )}\n {!isSmallScreenSize && <LeftMargin>{sidebarSlot}</LeftMargin>}\n <LeftMargin>{versionSelectorSlot}</LeftMargin>\n <LeftMargin>{statusDropdownSlot}</LeftMargin>\n {!isSmallScreenSize && (\n <LeftMargin\n onMouseEnter={() => {\n if (!isDueDateProvisioned) {\n const timeout = setTimeout(() => setShowDueDatePremiumTooltip(true), 200);\n\n setTooltipTimeout(timeout);\n }\n }}\n onMouseLeave={() => clearTimeout(tooltipTimeout)}\n ref={dueDateTriggerRef}\n >\n {dueDateSlot}\n </LeftMargin>\n )}\n {isInExtension() && (\n <VideoTitle data-testid=\"common-title\">{mediaMetadata.projectName}</VideoTitle>\n )}\n <PremiumTooltip\n onClose={() => setShowDueDatePremiumTooltip(false)}\n open={showDueDatePremiumTooltip}\n placement=\"bottom\"\n triggerRef={dueDateTriggerRef}\n />\n </TopRowLeftSide>\n <TopRowRightSide>\n {fullScreenButtonSlot}\n {isInExtension() && (\n <VersionsAwareShareFeatures\n canCreateLinks={currentUserIsOwner}\n isViewOnlyLinkAccess={isViewOnly}\n location=\"red_carpet\"\n shareButtonVariant=\"primary\"\n />\n )}\n {!isInExtension() &&\n !isViewOnly &&\n versionIsReady &&\n (!isSharePage || isSmallScreenSize) && <DownloadButton buttonType=\"admin\" />}\n {!isInExtension() &&\n versionIsReady &&\n showSetThumbnail &&\n !isSmallScreenSize &&\n mediaMetadata.mediaType === MediaType.Video && <SetThumbnailButton />}\n {!isInExtension() && versionIsReady && !isSmallScreenSize && (\n <InfoButton loggingClient={loggingClient} mediaMetadata={mediaMetadata} />\n )}\n {versionIsReady && contextMenu}\n {viewerSidebarDisplayState !== ViewerSidebarDisplayState.DISABLED &&\n viewerSidebarDisplayState !== ViewerSidebarDisplayState.REDCARPET &&\n viewerSidebarDisplayState !== ViewerSidebarDisplayState.SHOWING && (\n <ViewerSidebarToggle clickHandler={showViewerSidebar} />\n )}\n </TopRowRightSide>\n </TopRow>\n );\n};\n","/* eslint-disable deprecation/deprecation */\nimport React from 'react';\n\nimport {useAtom, useAtomValue, useSetAtom} from 'jotai';\nimport styled from 'styled-components';\n\nimport {\n COMMENT_PROMPT_BANNER_HEIGHT,\n IMAGE_VIEW_DUEDATE_BANNER_HEIGHT_DUEDATE_BANNER_HEIGHT,\n} from '~/components/common';\nimport {DueDate} from '~/components/due_date/due_date';\nimport {DueDateBanner} from '~/components/due_date/due_date_banner';\nimport {\n AddDueDateModal,\n DueDateVersionModal,\n dueDateVersionModalAtom,\n} from '~/components/due_date/due_date_modal';\nimport {DueDateSnackbar} from '~/components/due_date/due_date_snackbar';\nimport {FullScreenButton} from '~/components/full_screen_button';\nimport {SMALL_SCREEN_WIDTH_BREAKPOINT, useViewport} from '~/components/viewport_context';\nimport {useReelAppGlobalState} from '~/context';\nimport {deleteTask} from '~/lib/api';\nimport type {FocusStyles} from '~/lib/onboarding_v2/use_focus_ring';\nimport {useFocusRing} from '~/lib/onboarding_v2/use_focus_ring';\nimport useFullscreen from '~/lib/use-fullscreen';\nimport {useIsReplayInGA} from '~/lib/utils';\nimport {Image} from '~/pages/viewer_page/components/images/image';\nimport {StatusDropdownWithConsumer} from '~/pages/viewer_page/components/status_dropdown_with_consumer';\nimport {VersionSelectorWithConsumer} from '~/pages/viewer_page/components/versions/versions_dropdown';\nimport {ViewerTopRow} from '~/pages/viewer_page/components/viewer_top_row';\nimport {useViewerPageContext} from '~/pages/viewer_page/viewer_page_context';\nimport {STEPS} from '~/state/onboarding_v2';\nimport {clearTaskStateAtom, currentTaskStateAtom} from '~/state/task';\nimport {ViewerSidebarDisplayState, viewerSidebarDisplayStateAtom} from '~/state/viewer';\nimport {isInExtension} from '~/use_extensions';\n\nimport {NEW_THREAD_COMPOSER_HEIGHT} from './comments/comment_composers/comment_composers';\nimport {useCommentsContext} from '../comments_context';\n\nconst Container = styled.div`\n height: 100%;\n width: 100%;\n display: flex;\n flex-direction: column;\n margin: auto;\n position: relative;\n overflow: hidden;\n\n @media screen and (min-width: ${SMALL_SCREEN_WIDTH_BREAKPOINT}px) {\n height: calc(100% - ${NEW_THREAD_COMPOSER_HEIGHT + COMMENT_PROMPT_BANNER_HEIGHT}px);\n }\n`;\n\ntype ImageViewerTopContainerProps = {\n $isBannerShowing: boolean;\n};\n\nconst ImageViewerTopContainer = styled.div<ImageViewerTopContainerProps>`\n position: absolute;\n left: 20px;\n right: 20px;\n top: ${(prop) =>\n prop.$isBannerShowing\n ? IMAGE_VIEW_DUEDATE_BANNER_HEIGHT_DUEDATE_BANNER_HEIGHT\n : 24}px; // This changes depending on if the duedate banner is displayed\n z-index: 15;\n\n @media screen and (max-width: ${SMALL_SCREEN_WIDTH_BREAKPOINT}px) {\n z-index: 4; // This sets the version dropdown above the comment editor and the image controls\n top: 0;\n left: 0;\n right: 0;\n }\n`;\n\nconst DueDateBannerContainer = styled.div`\n margin-left: var(--dig-spacing__dimension__36);\n margin-right: var(--dig-spacing__dimension__20);\n`;\n\ntype ContentProps = {\n $focusStyles: FocusStyles;\n};\nconst Content = styled.div<ContentProps>`\n flex-grow: 1;\n max-height: 100%;\n position: relative;\n\n .panelMode & {\n margin-bottom: 0;\n margin-top: 0;\n }\n\n ${(props) => props.$focusStyles};\n`;\n\nContent.displayName = 'Content';\n\nexport const ImageViewer = () => {\n const {\n isHovered,\n mediaMetadata: image,\n currentUserHasEdit,\n loggingClient,\n currentUserIsOwner,\n } = useViewerPageContext();\n\n const {isSmallScreenSize} = useViewport();\n const {selectedThreadId} = useCommentsContext();\n const viewerSidebarDisplayState = useAtomValue(viewerSidebarDisplayStateAtom);\n const taskState = useAtomValue(currentTaskStateAtom);\n const showDueDate = useIsReplayInGA();\n const [isDueDateModalOpen, setIsDueDateModalOpen] = React.useState(false);\n const clearTask = useSetAtom(clearTaskStateAtom);\n const [showDueDateVersionModal, setShowDueDateVersionModal] = useAtom(dueDateVersionModalAtom);\n const [showDueDateVersionModalErrorText, setShowDueDateVersionModalErrorText] =\n React.useState(false);\n const [dueDateDeleteRequestInProgress, setDueDateDeleteRequestInProgress] = React.useState(false);\n const sessionContext = useReelAppGlobalState();\n const hoverCursorIsEnabled =\n sessionContext.status === 'logged in'\n ? sessionContext.preferenceSettingMetadata.REPLAY_SETTINGS_COMMENTS_SHOW_ICON_ON_HOVER\n : 'ON';\n const drawOnFileFocusStyles = useFocusRing([STEPS.DRAW_ON_FILE]);\n\n const containerRef = React.useRef<HTMLDivElement>(null);\n const {fullscreenEnabled, isFullscreen, toggleFullscreen} = useFullscreen({\n fullScreenElementRef: containerRef,\n });\n const handleToggleFullscreenClick = React.useCallback(() => {\n const mediaType = image.mediaType;\n toggleFullscreen(loggingClient, mediaType, 'control_bar_button')();\n }, [image.mediaType, loggingClient, toggleFullscreen]);\n\n const handleRemoveDueDate = async () => {\n setShowDueDateVersionModalErrorText(false);\n setDueDateDeleteRequestInProgress(true);\n\n try {\n if (!taskState.isLoading && taskState.task?.taskId) {\n await deleteTask(taskState.task.taskId);\n clearTask(image.videoId);\n\n loggingClient.logEvent('remove_due_date');\n setShowDueDateVersionModal(false);\n } else {\n throw new Error('Task ID is missing.');\n }\n } catch (e) {\n setShowDueDateVersionModalErrorText(true);\n }\n\n setDueDateDeleteRequestInProgress(false);\n };\n const handleCloseDueDateVersionModal = () => {\n setShowDueDateVersionModal(false);\n };\n const [showDueDateSnackbar, setShowDueDateSnackbar] = React.useState(false);\n const dismissDueDateSnackbar = () => setShowDueDateSnackbar(false);\n const [showDueDateBanner, setShowDueDateBanner] = React.useState(false);\n\n const handleRemoveDueDateBanner = () => {\n setShowDueDateBanner(false);\n };\n\n const statusDropdownSlot =\n viewerSidebarDisplayState !== ViewerSidebarDisplayState.DISABLED || isInExtension() ? (\n <StatusDropdownWithConsumer buttonSize=\"standard\" buttonType=\"opacity\" />\n ) : (\n <div />\n );\n const versionSelector =\n viewerSidebarDisplayState !== ViewerSidebarDisplayState.DISABLED || isInExtension() ? (\n <VersionSelectorWithConsumer loggingClient={loggingClient} mediaMetadata={image} />\n ) : (\n <div />\n );\n\n React.useEffect(() => {\n const doesDueDateExist =\n currentUserIsOwner &&\n (viewerSidebarDisplayState !== ViewerSidebarDisplayState.DISABLED || isInExtension()) &&\n (!taskState.isLoading ? (taskState.task?.dueDate ? true : false) : false) &&\n !isSmallScreenSize;\n\n setShowDueDateBanner(doesDueDateExist);\n }, [currentUserIsOwner, isSmallScreenSize, showDueDate, taskState, viewerSidebarDisplayState]);\n\n const dueDateBanner = showDueDateBanner ? (\n <DueDateBannerContainer>\n <DueDateBanner\n dueDate={!taskState.isLoading ? taskState.task?.dueDate : undefined}\n editable={currentUserHasEdit}\n isImage={true}\n isLoading={taskState.isLoading}\n onClick={() => {\n setIsDueDateModalOpen((prevState) => !prevState);\n }}\n onRequestClose={handleRemoveDueDateBanner}\n />\n </DueDateBannerContainer>\n ) : (\n <div />\n );\n\n const dueDateSlot =\n showDueDate &&\n !currentUserIsOwner &&\n (viewerSidebarDisplayState !== ViewerSidebarDisplayState.DISABLED || isInExtension()) ? (\n <DueDate\n dueDate={!taskState.isLoading ? taskState.task?.dueDate : undefined}\n editable={currentUserHasEdit}\n isImage={true}\n isLoading={taskState.isLoading}\n onClick={() => {\n setIsDueDateModalOpen((prevState) => !prevState);\n\n loggingClient.logEvent('select_open_due_date', {source: 'image_page'});\n }}\n />\n ) : (\n <div />\n );\n\n React.useEffect(() => {\n const searchParams = new URLSearchParams(window.location.search);\n const showDueDateSearchParam = searchParams.get('show_due_date');\n if (showDueDateSearchParam === 'true') {\n setIsDueDateModalOpen(true);\n }\n }, []);\n\n const fullScreenButtonSlot = fullscreenEnabled() ? (\n <FullScreenButton\n isFullscreen={isFullscreen}\n onToggleFullscreenClick={handleToggleFullscreenClick}\n />\n ) : (\n <div />\n );\n\n const showControls = !isInExtension() || isHovered || Boolean(selectedThreadId);\n\n // Narrow the type to only ImageProp\n if (image.type !== 'image') {\n return null;\n }\n\n return (\n <Container data-testid=\"image-viewer-container\" ref={containerRef}>\n {dueDateBanner}\n <ImageViewerTopContainer $isBannerShowing={showDueDateBanner}>\n <ViewerTopRow\n dueDateSlot={dueDateSlot}\n fullScreenButtonSlot={fullScreenButtonSlot}\n statusDropdownSlot={statusDropdownSlot}\n versionSelectorSlot={versionSelector}\n visible={showControls}\n />\n </ImageViewerTopContainer>\n <Content $focusStyles={drawOnFileFocusStyles}>\n <Image\n commentsSidebarOpen={viewerSidebarDisplayState === ViewerSidebarDisplayState.SHOWING}\n hoverCursorIsEnabled={hoverCursorIsEnabled}\n imageViewerRef={containerRef}\n src={image.fullSizeUrl}\n thumbnailSrc={image.thumbnailUrl}\n />\n </Content>\n <AddDueDateModal\n handleCloseModal={() => setIsDueDateModalOpen(false)}\n handleShowDueDateSnackbar={() => setShowDueDateSnackbar(true)}\n logEvent={loggingClient.logEvent.bind(loggingClient)}\n open={isDueDateModalOpen}\n videoId={image.videoId}\n />\n <DueDateVersionModal\n currentVersion={image.versionNum}\n handleCloseModal={handleCloseDueDateVersionModal}\n handleRemoveDueDate={handleRemoveDueDate}\n isOpen={showDueDateVersionModal}\n projectName={image.projectName}\n requestInProgress={dueDateDeleteRequestInProgress}\n showErrorText={showDueDateVersionModalErrorText}\n />\n <DueDateSnackbar handleCloseSnackbar={dismissDueDateSnackbar} open={showDueDateSnackbar} />\n </Container>\n );\n};\n","import styled from 'styled-components';\n\nimport {Spinner} from '@dropbox/dig-components/progress_indicators';\n\nconst CenteredContainer = styled.div`\n height: 100%;\n align-items: center;\n display: flex;\n justify-content: center;\n`;\n\nexport const PdfLoading = () => (\n <CenteredContainer>\n <Spinner monochromatic size=\"large\" />\n </CenteredContainer>\n);\n","export function PAP_Select_SidebarPreviewIcon(properties) {\n return {\n class: 'replay',\n action: 'select',\n object: 'sidebar_preview_icon',\n properties,\n };\n}\n//# sourceMappingURL=select_sidebar_preview_icon.js.map","import {useAtom} from 'jotai';\nimport {PAP_Select_SidebarPreviewIcon} from 'pap-events/replay/select_sidebar_preview_icon';\nimport {useIntl} from 'react-intl';\n\nimport {UIIcon} from '@dropbox/dig-icons';\nimport {SidebarHideLine, SidebarShowLine} from '@dropbox/dig-icons/assets';\n\nimport {IconButton} from '~/components/button';\nimport {MediaType} from '~/lib/api';\nimport {mapMediaTypeToLoggingType} from '~/lib/logging/logger_types';\nimport {useLoggingClient} from '~/lib/use_logging_client';\nimport {thumbnailSidebarDisplayStateAtom} from '~/state/pdf_viewer_state';\n\nexport const ThumbnailSidebar = () => {\n const intl = useIntl();\n const loggingClient = useLoggingClient();\n const [thumbnailSidebarDisplayState, setThumbnailSidebarDisplayState] = useAtom(\n thumbnailSidebarDisplayStateAtom,\n );\n\n const onClick = () => {\n setThumbnailSidebarDisplayState(\n thumbnailSidebarDisplayState === 'showing' ? 'hidden' : 'showing',\n );\n // eslint-disable-next-line deprecation/deprecation\n loggingClient.logEvent('select_sidebar_preview_icon', {\n show: thumbnailSidebarDisplayState === 'showing' ? 'true' : 'false',\n media_type: mapMediaTypeToLoggingType(MediaType.Document),\n });\n loggingClient.logPap(\n PAP_Select_SidebarPreviewIcon({\n show: thumbnailSidebarDisplayState === 'showing',\n mediaType: MediaType.Document,\n }),\n );\n };\n\n return (\n <IconButton\n aria-label={intl.formatMessage({\n defaultMessage: 'Toggle Thumbnail Sidebar',\n id: '2RiC2p',\n description: 'Aria label for the button to display pdf page thumbnails.',\n })}\n onClick={onClick}\n size=\"standard\"\n variant=\"opacity\"\n >\n <UIIcon\n src={thumbnailSidebarDisplayState === 'showing' ? SidebarHideLine : SidebarShowLine}\n />\n </IconButton>\n );\n};\n","/* eslint-disable deprecation/deprecation */\nimport React, {Suspense} from 'react';\n\nimport {useAtom, useAtomValue} from 'jotai';\nimport {useAtomCallback} from 'jotai/utils';\nimport styled, {css} from 'styled-components';\n\nimport {FullScreenButton} from '~/components/full_screen_button';\nimport {breakpointSmall, spacing} from '~/components/styled';\nimport {SMALL_SCREEN_WIDTH_BREAKPOINT, useViewport} from '~/components/viewport_context';\nimport {mediaAsDocument} from '~/lib/api';\nimport {lazy} from '~/lib/lazy';\nimport {useFocusRing} from '~/lib/onboarding_v2/use_focus_ring';\nimport type {FocusStyles} from '~/lib/onboarding_v2/use_focus_ring';\nimport useFullscreen from '~/lib/use-fullscreen';\nimport {useCommentsContext} from '~/pages/viewer_page/comments_context';\nimport {PdfLoading} from '~/pages/viewer_page/components/documents/pdf_loading';\nimport {StatusDropdownWithConsumer} from '~/pages/viewer_page/components/status_dropdown_with_consumer';\nimport {ThumbnailSidebar} from '~/pages/viewer_page/components/thumbnail_sidebar';\nimport {VersionSelectorWithConsumer} from '~/pages/viewer_page/components/versions/versions_dropdown';\nimport {ViewerTopRow} from '~/pages/viewer_page/components/viewer_top_row';\nimport {useViewerPageContext} from '~/pages/viewer_page/viewer_page_context';\nimport {STEPS} from '~/state/onboarding_v2';\nimport {pdfCurrentPageAtom, pdfCurrentScaleAtom, pdfPagesAtom} from '~/state/pdf_viewer_state';\nimport {ViewerSidebarDisplayState, viewerSidebarDisplayStateAtom} from '~/state/viewer';\nimport {isInExtension} from '~/use_extensions';\n\nconst PDF = lazy(() =>\n import(/* webpackChunkName: 'pdf-viewer' */ './documents/pdf').then((module) => ({\n default: module.PDF,\n })),\n);\n\nconst Container = styled.div`\n height: 36vh;\n width: 100%;\n display: flex;\n flex-direction: column;\n position: relative;\n\n // Not using \"breakpointSmall\" here as useViewport is entangled\n // with the viewer page and comment composer too deeply\n @media (min-width: ${SMALL_SCREEN_WIDTH_BREAKPOINT + 1}px) {\n height: 100%;\n }\n`;\n\nconst PdfViewerTopContainer = styled.div`\n position: absolute;\n top: ${spacing('Micro Small')};\n left: ${spacing('Micro XLarge')};\n right: ${spacing('Micro XLarge')};\n z-index: 15;\n\n ${breakpointSmall(css`\n top: ${spacing('Macro Small')};\n `)}\n`;\n\ntype ContentProps = {\n $focusStyles: FocusStyles;\n};\n\nconst Content = styled.div<ContentProps>`\n flex-grow: 1;\n max-height: 100%;\n position: relative;\n\n .panelMode & {\n margin-bottom: 0px;\n margin-top: 0px;\n }\n\n ${(props) => props.$focusStyles};\n`;\n\nexport const getFullScreenScale = (\n pdfRect: DOMRect | undefined,\n pdfScale: number,\n screenWidth: number,\n) => {\n const maxScale = 1.75;\n const fallbackWidth = 612; // Width of default pdf page in pixels\n const pdfWidth = pdfRect?.width ? pdfRect.width / pdfScale : fallbackWidth;\n const dimensionErrorMargin = 16; // scrollbar\n const viewportWidth = screenWidth - dimensionErrorMargin;\n const scale = Math.min(maxScale, viewportWidth / pdfWidth);\n return scale;\n};\n\nconst PdfViewer = () => {\n const {isHovered, mediaMetadata, loggingClient} = useViewerPageContext();\n const {selectedThreadId} = useCommentsContext();\n const viewerSidebarDisplayState = useAtomValue(viewerSidebarDisplayStateAtom);\n const drawOnFileFocusStyles = useFocusRing([STEPS.DRAW_ON_FILE]);\n const containerRef = React.useRef<HTMLDivElement>(null);\n const {width: screenWidth} = useViewport();\n const [pdfScale, setPdfScale] = useAtom(pdfCurrentScaleAtom);\n const pdfCurrentPage = useAtomValue(pdfCurrentPageAtom);\n const getPages = useAtomCallback(React.useCallback((get) => get(pdfPagesAtom), []));\n const {fullscreenEnabled, isFullscreen, toggleFullscreen} = useFullscreen({\n fullScreenElementRef: containerRef,\n });\n\n const updatePdfScale = React.useCallback(() => {\n const pdfRect = getPages().get(pdfCurrentPage)?.current?.getBoundingClientRect();\n const scale = getFullScreenScale(pdfRect, pdfScale, screenWidth);\n setPdfScale(isFullscreen ? 1 : scale);\n }, [getPages, pdfCurrentPage, pdfScale, screenWidth, setPdfScale, isFullscreen]);\n\n const handleToggleFullscreenClick = React.useCallback(() => {\n toggleFullscreen(loggingClient, mediaMetadata.mediaType, 'control_bar_button')();\n updatePdfScale();\n }, [loggingClient, mediaMetadata.mediaType, toggleFullscreen, updatePdfScale]);\n\n const pdfMetadata = mediaAsDocument(mediaMetadata);\n\n const statusDropdownSlot =\n viewerSidebarDisplayState !== ViewerSidebarDisplayState.DISABLED || isInExtension() ? (\n <StatusDropdownWithConsumer buttonSize=\"standard\" buttonType=\"opacity\" />\n ) : (\n <div />\n );\n\n const versionSelector =\n viewerSidebarDisplayState !== ViewerSidebarDisplayState.DISABLED || isInExtension() ? (\n <VersionSelectorWithConsumer loggingClient={loggingClient} mediaMetadata={pdfMetadata} />\n ) : (\n <div />\n );\n\n const sidebarSlot =\n (viewerSidebarDisplayState !== ViewerSidebarDisplayState.DISABLED || isInExtension()) &&\n !isFullscreen ? (\n <ThumbnailSidebar />\n ) : (\n <div />\n );\n\n const showControls = !isInExtension() || isHovered || Boolean(selectedThreadId);\n\n const fullScreenButtonSlot = fullscreenEnabled() ? (\n <FullScreenButton\n isFullscreen={isFullscreen}\n onToggleFullscreenClick={handleToggleFullscreenClick}\n />\n ) : (\n <div />\n );\n\n return (\n <Container ref={containerRef}>\n <PdfViewerTopContainer>\n <ViewerTopRow\n fullScreenButtonSlot={fullScreenButtonSlot}\n sidebarSlot={sidebarSlot}\n statusDropdownSlot={statusDropdownSlot}\n versionSelectorSlot={versionSelector}\n visible={showControls}\n />\n </PdfViewerTopContainer>\n <Content $focusStyles={drawOnFileFocusStyles}>\n <Suspense fallback={<PdfLoading />}>\n <PDF\n height={pdfMetadata.documentMetadata.height}\n isFullscreen={isFullscreen}\n src={pdfMetadata.pdfPreviewUrl}\n totalPages={pdfMetadata.documentMetadata.pages}\n />\n </Suspense>\n </Content>\n </Container>\n );\n};\n\nexport default PdfViewer;\n","import {useEffect, useMemo, useState} from 'react';\n\nimport {useAtom, useAtomValue, useSetAtom} from 'jotai';\n\nimport {useIsOnOnboardingVideoWalkthroughPage} from '~/lib/onboarding_v2/use_is_on_onboarding_video_walkthrough_page';\nimport {pauseVideoAtTime} from '~/pages/viewer_page/video_utils';\nimport {useVideoViewerContext} from '~/pages/viewer_page/video_viewer_context';\nimport {useViewerPageContext} from '~/pages/viewer_page/viewer_page_context';\nimport {\n completedStepsAtom,\n currOpenStepAtom,\n isChecklistOpenAtom,\n lastCompletedStepAtom,\n shouldFillInOnboardingCommentAtom,\n STEPS,\n} from '~/state/onboarding_v2';\n\nexport const stepMilestones: {\n [key: string]: {\n start: number;\n end: number | null;\n nextStep?: STEPS;\n pauseForNextStep?: boolean;\n };\n} = {\n [STEPS.VIEW_FILE]: {\n start: 0,\n end: null,\n nextStep: STEPS.DRAW_ON_FILE,\n pauseForNextStep: false,\n },\n [STEPS.DRAW_ON_FILE]: {\n start: 13,\n end: 29,\n nextStep: STEPS.COMMENT_ON_FILE,\n pauseForNextStep: true,\n },\n [STEPS.COMMENT_ON_FILE]: {\n start: 29,\n end: 56,\n nextStep: STEPS.UPLOAD_FILE,\n pauseForNextStep: true,\n },\n [STEPS.UPLOAD_FILE]: {\n start: 56,\n end: null,\n },\n};\n\nconst useOnboardingVideoWalkthrough = () => {\n const completedSteps = useAtomValue(completedStepsAtom);\n const lastCompletedStep = useAtomValue(lastCompletedStepAtom);\n\n const setShouldFillInOnboardingComment = useSetAtom(shouldFillInOnboardingCommentAtom);\n const [isChecklistOpen, setIsChecklistOpen] = useAtom(isChecklistOpenAtom);\n const [currOpenStep, setCurrOpenStep] = useAtom(currOpenStepAtom);\n\n const isOnOnboardingVideoWalkthroughPage = useIsOnOnboardingVideoWalkthroughPage();\n const {frameRate} = useViewerPageContext();\n const {videoPlayerInstance} = useVideoViewerContext();\n const [stepToPause, setStepToPause] = useState<STEPS | null>(null);\n const currentTime = Math.floor(videoPlayerInstance?.currentTime() || 0);\n\n const isPlaying = videoPlayerInstance && !videoPlayerInstance.paused();\n\n const currOpenStepMilestone = useMemo(\n () => currOpenStep && stepMilestones[currOpenStep],\n [currOpenStep],\n );\n const stepToPauseMilestone = useMemo(\n () => stepToPause && stepMilestones[stepToPause],\n [stepToPause],\n );\n\n useEffect(() => {\n if (isOnOnboardingVideoWalkthroughPage) {\n if (!currOpenStepMilestone || !videoPlayerInstance) {\n return;\n }\n\n const nextStep = currOpenStepMilestone.nextStep;\n const nextCurrOpenStepMilestone = nextStep && stepMilestones[nextStep];\n const pauseForNextStep = stepToPauseMilestone?.pauseForNextStep;\n\n // Play the video if a step is newly completed and video is paused\n if (currOpenStep !== stepToPause) {\n const isFirstTime = stepToPause === null;\n setStepToPause(currOpenStep);\n\n // Special edge case where we're transitioning to the draw step, but we don't wanna skip\n // directly to the draw step in the video\n const hasCompletedDrawStep = completedSteps.includes(STEPS.DRAW_ON_FILE);\n const isTransitioningFromViewToDrawStep =\n stepToPause === STEPS.VIEW_FILE &&\n currOpenStep === STEPS.DRAW_ON_FILE &&\n !hasCompletedDrawStep;\n\n // Time will skip if a step is completed early, or a user selects a step in the checklist to view\n if (currentTime !== currOpenStepMilestone.start && !isTransitioningFromViewToDrawStep) {\n videoPlayerInstance.currentTime(currOpenStepMilestone.start);\n }\n\n if (!isFirstTime) {\n // This makes sure we're not always playing the video the first time around on page load\n videoPlayerInstance.play();\n }\n } else if (\n currOpenStep === stepToPause &&\n isPlaying &&\n !pauseForNextStep &&\n nextCurrOpenStepMilestone &&\n currentTime === nextCurrOpenStepMilestone.start\n ) {\n // This is a special case where a user transitions from a step that has no pause,\n // to a paused step and we wanna open the checklist to the correct step.\n // For instance, the VIEW_FILE step is completed, but has no pause point between that and\n // the DRAW FILE step, so we want to just open the checklist\n setCurrOpenStep(nextStep);\n } else if (currOpenStep === stepToPause && lastCompletedStep === currOpenStep && nextStep) {\n // This is a special case where a user redoes a step that has been previously completed.\n // in the current checklist, it won't count as \"re-completing\", so we manually go to the next step here\n setCurrOpenStep(nextStep);\n }\n }\n }, [\n completedSteps,\n currOpenStep,\n currOpenStepMilestone,\n currentTime,\n isOnOnboardingVideoWalkthroughPage,\n isPlaying,\n setCurrOpenStep,\n stepToPause,\n stepToPauseMilestone,\n videoPlayerInstance,\n lastCompletedStep,\n ]);\n\n // Pause the video at a certain amount of seconds for a current step\n useEffect(() => {\n if (\n isOnOnboardingVideoWalkthroughPage &&\n isPlaying &&\n currOpenStepMilestone &&\n currentTime === currOpenStepMilestone.end\n ) {\n pauseVideoAtTime(videoPlayerInstance, {\n frameRate,\n timeSecs: currentTime,\n });\n\n // on pause for the COMMENT step, we need to fill in the comment input. this atom helps us denote when\n if (currOpenStep === STEPS.COMMENT_ON_FILE) {\n setShouldFillInOnboardingComment(true);\n }\n\n if (!isChecklistOpen) {\n setIsChecklistOpen(true);\n }\n }\n }, [\n currOpenStep,\n currentTime,\n frameRate,\n isOnOnboardingVideoWalkthroughPage,\n isChecklistOpen,\n isPlaying,\n setIsChecklistOpen,\n setShouldFillInOnboardingComment,\n currOpenStepMilestone,\n videoPlayerInstance,\n ]);\n};\n\nexport {useOnboardingVideoWalkthrough};\n","/* eslint-disable deprecation/deprecation */\nimport React from 'react';\n\nimport {useAtom, useAtomValue, useSetAtom} from 'jotai';\nimport {FormattedMessage} from 'react-intl';\nimport styled from 'styled-components';\n\nimport {DueDate} from '~/components/due_date/due_date';\nimport {DueDateBanner} from '~/components/due_date/due_date_banner';\nimport {\n AddDueDateModal,\n DueDateVersionModal,\n dueDateVersionModalAtom,\n} from '~/components/due_date/due_date_modal';\nimport {DueDateSnackbar} from '~/components/due_date/due_date_snackbar';\nimport {FocusTab} from '~/components/focus_tab';\nimport {color, spacing} from '~/components/styled';\nimport {\n SMALL_SCREEN_HEIGHT_BREAKPOINT,\n SMALL_SCREEN_WIDTH_BREAKPOINT,\n} from '~/components/viewport_context';\nimport {useViewport} from '~/components/viewport_context';\nimport {useReelAppGlobalState} from '~/context';\nimport {deleteTask} from '~/lib/api';\nimport type {FocusStyles} from '~/lib/onboarding_v2/use_focus_ring';\nimport {useFocusRing} from '~/lib/onboarding_v2/use_focus_ring';\nimport {useIsOnOnboardingVideoWalkthroughPage} from '~/lib/onboarding_v2/use_is_on_onboarding_video_walkthrough_page';\nimport {useOnboardingChecklist} from '~/lib/onboarding_v2/use_onboarding_checklist';\nimport {useOnboardingVideoWalkthrough} from '~/lib/onboarding_v2/use_onboarding_video_walkthrough';\nimport {PLAYER_STATUS} from '~/lib/ui_types';\nimport {getPlaylistUrl, useIsReplayInGA} from '~/lib/utils';\nimport {useCommentsContext} from '~/pages/viewer_page/comments_context';\nimport {Annotations} from '~/pages/viewer_page/components/annotations/annotations';\nimport {NEW_THREAD_COMPOSER_CLASSNAME} from '~/pages/viewer_page/components/comments/comment_composers/comment_composers';\nimport {CONTROL_BAR_HEIGHT} from '~/pages/viewer_page/components/reel_video_controls';\nimport {StatusDropdownWithConsumer} from '~/pages/viewer_page/components/status_dropdown_with_consumer';\nimport {useSyncCollabSharedState} from '~/pages/viewer_page/components/sync_collab/shared_state';\nimport {useMobileKeyboardState} from '~/pages/viewer_page/components/use_mobile_keyboard_state';\nimport {TimeBasedMediaVersionSelectorWithConsumer} from '~/pages/viewer_page/components/versions/versions_dropdown';\nimport {\n MOBILE_KEYBOARD_IS_OPEN_CLASSNAME,\n Video,\n} from '~/pages/viewer_page/components/video_viewer/video';\nimport {ViewerTopRow} from '~/pages/viewer_page/components/viewer_top_row';\nimport {useVideoViewerContext} from '~/pages/viewer_page/video_viewer_context';\nimport {\n useViewerPageContext,\n useViewerPageOnboardingContext,\n} from '~/pages/viewer_page/viewer_page_context';\nimport {\n currOpenStepAtom,\n hasCompletedAnyPreviousOnboardingActionsAtom,\n lastCompletedStepAtom,\n ONBOARDING_TYPE,\n onboardingTypeAtom,\n STEPS,\n} from '~/state/onboarding_v2';\nimport {clearTaskStateAtom, currentTaskStateAtom} from '~/state/task';\nimport {ViewerSidebarDisplayState, viewerSidebarDisplayStateAtom} from '~/state/viewer';\nimport {isInExtension} from '~/use_extensions';\n\nconst Container = styled.div`\n height: 100%;\n width: 100%;\n display: flex;\n flex-direction: column;\n margin: auto;\n\n .${MOBILE_KEYBOARD_IS_OPEN_CLASSNAME} {\n position: absolute;\n top: 0;\n }\n`;\n\ntype ContentProps = {\n $focusStyles: FocusStyles;\n $shouldHighlightLiveReview: boolean;\n};\nconst Content = styled.div<ContentProps>`\n position: relative;\n flex-grow: 1;\n max-height: 100%;\n overflow: hidden;\n position: relative;\n margin-top: ${(props) => (props.$shouldHighlightLiveReview ? `0` : spacing('Macro Small'))};\n margin-bottom: ${CONTROL_BAR_HEIGHT}px;\n .panelMode & {\n margin-bottom: 0px;\n margin-top: 0px;\n }\n @media screen and (max-width: ${SMALL_SCREEN_WIDTH_BREAKPOINT}px) {\n margin-bottom: 0;\n margin-top: 0;\n flex-grow: 0;\n }\n @media screen and (max-width: ${SMALL_SCREEN_WIDTH_BREAKPOINT}px) and (max-height: ${SMALL_SCREEN_HEIGHT_BREAKPOINT}px) {\n flex-grow: 1;\n }\n\n ${(props) => props.$focusStyles};\n\n ${(props) =>\n props.$shouldHighlightLiveReview &&\n `\n border: ${spacing('2')} solid ${color('Identity On Purple')};\n border-bottom: none;\n border-radius: ${spacing('2')};\n `}\n`;\n\nconst DueDateBannerContainer = styled.div`\n padding-bottom: var(--dig-spacing__dimension__10);\n margin-left: var(--dig-spacing__dimension__16);\n`;\n\nContent.displayName = 'Content';\n\nexport const VideoViewer = () => {\n const {\n currentUserHasEdit,\n mediaMetadata,\n loggingClient,\n isHovered,\n videoIsPlayingWhileTyping,\n setVideoIsPlayingWhileTyping,\n currentUserIsOwner,\n liveReviewVideoIsDetached,\n setLiveReviewVideoIsDetached,\n } = useViewerPageContext();\n const {selectedThreadId} = useCommentsContext();\n const {playerStatus, videoPlayerInstance} = useVideoViewerContext();\n const {isUserInCollabSession, hosts, iAmHost, liveReviewImprovsIsOn} = useSyncCollabSharedState();\n const shouldShowLiveReviewImprovs = liveReviewImprovsIsOn && isUserInCollabSession;\n\n const {isSmallScreenSize} = useViewport();\n const viewerSidebarDisplayState = useAtomValue(viewerSidebarDisplayStateAtom);\n const taskState = useAtomValue(currentTaskStateAtom);\n const showDueDate = useIsReplayInGA();\n const [isDueDateModalOpen, setIsDueDateModalOpen] = React.useState(false);\n const clearTask = useSetAtom(clearTaskStateAtom);\n const [showDueDateVersionModal, setShowDueDateVersionModal] = useAtom(dueDateVersionModalAtom);\n\n const lastCompletedStep = useAtomValue(lastCompletedStepAtom);\n const currOpenStep = useAtomValue(currOpenStepAtom);\n const onboardingType = useAtomValue(onboardingTypeAtom);\n const hasCompletedAnyPreviousOnboardingActions = useAtomValue(\n hasCompletedAnyPreviousOnboardingActionsAtom,\n );\n const drawOnFileFocusStyles = useFocusRing([STEPS.DRAW_ON_FILE]);\n const hasOnboardingWalkthrough = useIsOnOnboardingVideoWalkthroughPage();\n const {updateViewerOnboardingActions} = useViewerPageOnboardingContext();\n useOnboardingVideoWalkthrough();\n const {handleSetOnboardingTypeByMediaType} = useOnboardingChecklist({\n logEvent: loggingClient.logEvent.bind(loggingClient),\n });\n\n const [showDueDateVersionModalErrorText, setShowDueDateVersionModalErrorText] =\n React.useState(false);\n const [dueDateDeleteRequestInProgress, setDueDateDeleteRequestInProgress] = React.useState(false);\n const [showDueDateBanner, setShowDueDateBanner] = React.useState(false);\n const handleRemoveDueDate = async () => {\n setShowDueDateVersionModalErrorText(false);\n setDueDateDeleteRequestInProgress(true);\n\n try {\n if (!taskState.isLoading && taskState.task?.taskId) {\n await deleteTask(taskState.task.taskId);\n clearTask(mediaMetadata.videoId);\n\n loggingClient.logEvent('remove_due_date');\n setShowDueDateVersionModal(false);\n } else {\n throw new Error('Task ID is missing.');\n }\n } catch (e) {\n setShowDueDateVersionModalErrorText(true);\n }\n\n setDueDateDeleteRequestInProgress(false);\n };\n const handleCloseDueDateVersionModal = () => {\n setShowDueDateVersionModal(false);\n };\n const [showDueDateSnackbar, setShowDueDateSnackbar] = React.useState(false);\n const dismissDueDateSnackbar = () => setShowDueDateSnackbar(false);\n\n const sessionContext = useReelAppGlobalState();\n\n const pauseWhileTypingEnabled =\n sessionContext.status === 'logged in'\n ? sessionContext.preferenceSettingMetadata.REPLAY_SETTINGS_COMMENTS_PAUSE_WHEN_TYPING\n : 'OFF';\n\n React.useEffect(() => {\n // we don't want to force pause after commenting or completing drawomg while doing onboarding so we can go to the next step\n const justCompletedOnboardingStep =\n !videoPlayerInstance?.paused() &&\n hasOnboardingWalkthrough &&\n !!lastCompletedStep &&\n [STEPS.DRAW_ON_FILE, STEPS.COMMENT_ON_FILE].includes(lastCompletedStep);\n\n if (\n videoIsPlayingWhileTyping &&\n pauseWhileTypingEnabled === 'ON' &&\n videoPlayerInstance &&\n !justCompletedOnboardingStep\n ) {\n const wasPlaying = !videoPlayerInstance.paused();\n videoPlayerInstance.pause();\n setVideoIsPlayingWhileTyping(false);\n // consider the detachment only if the video was playing and we don't want to interrupt it\n if (wasPlaying && shouldShowLiveReviewImprovs && !iAmHost) {\n setLiveReviewVideoIsDetached(true);\n }\n }\n }, [\n currOpenStep,\n hasOnboardingWalkthrough,\n iAmHost,\n lastCompletedStep,\n pauseWhileTypingEnabled,\n setLiveReviewVideoIsDetached,\n setVideoIsPlayingWhileTyping,\n shouldShowLiveReviewImprovs,\n videoIsPlayingWhileTyping,\n videoPlayerInstance,\n ]);\n\n React.useEffect(() => {\n if (mediaMetadata.isDemo) {\n loggingClient.logEvent('succeed_open_replay_demo');\n if (sessionContext.status === 'logged in') {\n // if a user has the new onboarding walkthrough video set and the flags, but the type not set and has not completed previous onboarding, then set the onboarding type to show the checklist\n if (\n hasOnboardingWalkthrough &&\n !onboardingType &&\n !hasCompletedAnyPreviousOnboardingActions\n ) {\n handleSetOnboardingTypeByMediaType(undefined, ONBOARDING_TYPE.VIDEO_WITHOUT_FILE);\n } else {\n updateViewerOnboardingActions({browse_demo_prompt_actioned: true});\n }\n }\n }\n }, [\n handleSetOnboardingTypeByMediaType,\n hasCompletedAnyPreviousOnboardingActions,\n hasOnboardingWalkthrough,\n loggingClient,\n mediaMetadata,\n onboardingType,\n sessionContext.status,\n updateViewerOnboardingActions,\n ]);\n\n const statusDropdownSlot =\n viewerSidebarDisplayState !== ViewerSidebarDisplayState.DISABLED || isInExtension() ? (\n <StatusDropdownWithConsumer buttonSize=\"standard\" buttonType=\"opacity\" />\n ) : (\n <div />\n );\n const versionSelector =\n viewerSidebarDisplayState !== ViewerSidebarDisplayState.DISABLED || isInExtension() ? (\n <TimeBasedMediaVersionSelectorWithConsumer\n loggingClient={loggingClient}\n mediaMetadata={mediaMetadata}\n videoPlayerInstance={videoPlayerInstance}\n />\n ) : (\n <div />\n );\n\n const handleRemoveDueDateBanner = () => {\n setShowDueDateBanner(false);\n };\n\n React.useEffect(() => {\n const doesDueDateExist =\n currentUserIsOwner &&\n (viewerSidebarDisplayState !== ViewerSidebarDisplayState.DISABLED || isInExtension()) &&\n (!taskState.isLoading ? (taskState.task?.dueDate ? true : false) : false) &&\n !isSmallScreenSize;\n\n setShowDueDateBanner(doesDueDateExist);\n }, [currentUserIsOwner, isSmallScreenSize, showDueDate, taskState, viewerSidebarDisplayState]);\n\n const dueDateBanner = showDueDateBanner ? (\n <DueDateBannerContainer>\n <DueDateBanner\n dueDate={!taskState.isLoading ? taskState.task?.dueDate : undefined}\n editable={currentUserHasEdit}\n isLoading={taskState.isLoading}\n onClick={() => {\n setIsDueDateModalOpen((prevState) => !prevState);\n }}\n onRequestClose={handleRemoveDueDateBanner}\n />\n </DueDateBannerContainer>\n ) : (\n <div />\n );\n\n const dueDateSlot =\n showDueDate &&\n !currentUserIsOwner &&\n (viewerSidebarDisplayState !== ViewerSidebarDisplayState.DISABLED || isInExtension()) ? (\n <DueDate\n dueDate={!taskState.isLoading ? taskState.task?.dueDate : undefined}\n editable={currentUserHasEdit}\n isLoading={taskState.isLoading}\n onClick={() => {\n setIsDueDateModalOpen((prevState) => !prevState);\n\n loggingClient.logEvent('select_open_due_date', {source: 'video_page'});\n }}\n />\n ) : (\n <div />\n );\n\n React.useEffect(() => {\n const searchParams = new URLSearchParams(window.location.search);\n const showDueDateSearchParam = searchParams.get('show_due_date');\n if (showDueDateSearchParam === 'true') {\n setIsDueDateModalOpen(true);\n }\n }, []);\n\n const showControls = !isInExtension() || isHovered || Boolean(selectedThreadId);\n\n const mobileKeyboardState = useMobileKeyboardState(`.${NEW_THREAD_COMPOSER_CLASSNAME}`);\n\n const showTopRow =\n !isSmallScreenSize ||\n (playerStatus !== PLAYER_STATUS.PLAYING && mobileKeyboardState.status !== 'open');\n\n // Narrow the type to only AVProp\n if (mediaMetadata.type !== 'av') {\n return null;\n }\n\n const shouldShowLiveReviewBorder = shouldShowLiveReviewImprovs && !liveReviewVideoIsDetached;\n return (\n <Container\n className={mobileKeyboardState.status === 'open' ? MOBILE_KEYBOARD_IS_OPEN_CLASSNAME : ''}\n data-testid=\"video-viewer\"\n >\n {dueDateBanner}\n <ViewerTopRow\n dueDateSlot={dueDateSlot}\n statusDropdownSlot={statusDropdownSlot}\n versionSelectorSlot={versionSelector}\n visible={showControls && showTopRow}\n />\n {shouldShowLiveReviewBorder && (\n <FocusTab fillColor={color('Identity On Purple')} textColor={color('Identity Purple')}>\n {iAmHost ? (\n <FormattedMessage\n defaultMessage=\"Following you\"\n description=\"Label on focus tab indicating live review session is hosted by current user\"\n id=\"F5I3zy\"\n />\n ) : hosts.length ? (\n <FormattedMessage\n defaultMessage=\"Following {hostName}\"\n description=\"Label on focus tab indicating live review session is hosted by someone else\"\n id=\"0bRlT6\"\n values={{hostName: hosts[0].name}}\n />\n ) : (\n <FormattedMessage\n defaultMessage=\"Following host\"\n description=\"Label on focus tab indicating live review session is hosted by someone else but we don't know the name\"\n id=\"cHL+6K\"\n />\n )}\n </FocusTab>\n )}\n <Content\n $focusStyles={drawOnFileFocusStyles}\n $shouldHighlightLiveReview={shouldShowLiveReviewBorder}\n >\n <Video showControls={showControls} url={getPlaylistUrl(mediaMetadata.transcodeUrl)} />\n <Annotations />\n </Content>\n <AddDueDateModal\n handleCloseModal={() => setIsDueDateModalOpen(false)}\n handleShowDueDateSnackbar={() => setShowDueDateSnackbar(true)}\n logEvent={loggingClient.logEvent.bind(loggingClient)}\n open={isDueDateModalOpen}\n videoId={mediaMetadata.videoId}\n />\n <DueDateVersionModal\n currentVersion={mediaMetadata.versionNum}\n handleCloseModal={handleCloseDueDateVersionModal}\n handleRemoveDueDate={handleRemoveDueDate}\n isOpen={showDueDateVersionModal}\n projectName={mediaMetadata.projectName}\n requestInProgress={dueDateDeleteRequestInProgress}\n showErrorText={showDueDateVersionModalErrorText}\n />\n <DueDateSnackbar handleCloseSnackbar={dismissDueDateSnackbar} open={showDueDateSnackbar} />\n </Container>\n );\n};\n","import {useAtom, useAtomValue} from 'jotai';\nimport {useIntl} from 'react-intl';\n\nimport {Snackbar} from '@dropbox/dig-components/snackbar';\n\nimport {Button} from '~/components/button';\nimport {ReelSnackbar, SnackbarCloseMessage} from '~/components/snackbar';\n\nimport {\n firstMentionNameInCommentComposerAtom,\n isFileSharedSnackbarOpenAtom,\n totalMentionsInCommentComposerAtom,\n} from './comment_composers_state';\n\nexport const FileSharedSnackbar = () => {\n const intl = useIntl();\n const [isOpen, setIsOpen] = useAtom(isFileSharedSnackbarOpenAtom);\n const firstMentionName = useAtomValue(firstMentionNameInCommentComposerAtom);\n const totalMentions = useAtomValue(totalMentionsInCommentComposerAtom);\n const onClose = () => setIsOpen(false);\n\n let msg;\n if (totalMentions === 0) {\n return null;\n } else if (totalMentions === 1) {\n msg = intl.formatMessage(\n {\n defaultMessage: 'Shared file with {firstMentionName}',\n id: 'ncbYI2',\n description:\n 'Snackbar text that tells the user that the file has been shared with the person mentioned in the comment',\n },\n {\n firstMentionName: firstMentionName,\n },\n );\n } else {\n const otherMentions = totalMentions - 1;\n msg = intl.formatMessage(\n {\n defaultMessage:\n 'Shared file with {firstMentionName} and {otherMentions, plural, one {1 other} other {# others}}',\n id: 'x2WCdJ',\n description:\n 'Snackbar text that tells the user that the file has been shared with the person mentioned in the comment and other people',\n },\n {\n firstMentionName: firstMentionName,\n otherMentions: otherMentions,\n },\n );\n }\n\n return (\n <ReelSnackbar onRequestClose={onClose} open={isOpen} timeout={7000}>\n <Snackbar.Message>{msg}</Snackbar.Message>\n <Snackbar.Actions>\n <Button onClick={onClose} variant=\"transparent\">\n <SnackbarCloseMessage />\n </Button>\n </Snackbar.Actions>\n </ReelSnackbar>\n );\n};\n","import React from 'react';\n\nimport {FormattedMessage, useIntl} from 'react-intl';\nimport styled from 'styled-components';\n\nimport {Snackbar} from '@dropbox/dig-components/snackbar';\nimport {UIIcon} from '@dropbox/dig-icons';\nimport {FailLine} from '@dropbox/dig-icons/assets';\n\nimport {Button} from '~/components/button';\nimport {SnackbarCloseMessage} from '~/components/snackbar';\nimport {useCommentsContext} from '~/pages/viewer_page/comments_context';\nimport {\n ReplayCommentErrorType,\n ReplayThreadErrorType,\n} from '~/pages/viewer_page/comments_view_types.d';\n\nconst ERROR_COOKIE_SNACKBAR_HEIGHT = 10;\n\nconst ErrorBannerContainer = styled('div')<{$isActive: boolean}>`\n position: absolute;\n left: 0;\n right: 0;\n bottom: ${(props) => (props.$isActive ? ERROR_COOKIE_SNACKBAR_HEIGHT : 0) + 50}px;\n margin: auto;\n width: 60%;\n z-index: 10000;\n visibility: ${(props) => (props.$isActive ? 'visible' : 'hidden')};\n`;\n\nexport const CommentErrorBanner = () => {\n const {\n deleteComment,\n error,\n replyToThread,\n resolveThread,\n setError,\n unresolveThread,\n setCurrentlyEditingComment,\n } = useCommentsContext();\n\n const intl = useIntl();\n const postText = intl.formatMessage({\n defaultMessage: 'We were unable to post the comment.',\n id: '1kZ2Yy',\n description: 'Error text that is displayed when posting a comment fails',\n });\n const deleteText = intl.formatMessage({\n defaultMessage: 'We were unable to delete the comment.',\n id: 'ezUPip',\n description: 'Error text that is displayed when deleting a comment fails',\n });\n const resolveText = intl.formatMessage({\n defaultMessage: 'We were unable to resolve the thread.',\n id: '09xl+g',\n description: 'Error text that displays when marking a comment thread as resolved fails',\n });\n const unresolveText = intl.formatMessage({\n defaultMessage: 'We were unable to unresolve the thread.',\n id: '9UWDem',\n description: 'Error text that displays when marking a comment thread as not resolved fails',\n });\n const editText = intl.formatMessage({\n defaultMessage: 'We were unable to edit the comment.',\n id: 'TX6I9h',\n description: 'Error text that displays when editing the content of a comment fails',\n });\n const unknownText = intl.formatMessage({\n defaultMessage: 'We received an unexpected error.',\n id: 'tYF0au',\n description:\n 'Error text that displays when an unknown error is encountered when performing a comment action',\n });\n\n // To be localized in the future\n let errorMessage = '';\n if (error) {\n switch (error.errorType) {\n case ReplayCommentErrorType.CREATE_COMMENT:\n errorMessage = postText;\n break;\n case ReplayThreadErrorType.CREATE_THREAD:\n errorMessage = error.errorReason ? `${postText} ${error.errorReason}` : postText;\n break;\n case ReplayCommentErrorType.DELETE_COMMENT:\n errorMessage = deleteText;\n break;\n case ReplayThreadErrorType.RESOLVE_THREAD:\n errorMessage = resolveText;\n break;\n case ReplayThreadErrorType.UNRESOLVE_THREAD:\n errorMessage = unresolveText;\n break;\n case ReplayCommentErrorType.EDIT_COMMENT:\n errorMessage = editText;\n break;\n default:\n errorMessage = unknownText;\n break;\n }\n }\n\n const onRetry = async () => {\n if (!error) {\n return;\n }\n setError(null);\n switch (error.errorType) {\n case ReplayCommentErrorType.CREATE_COMMENT:\n if (error.comment) {\n await replyToThread(\n error.comment.mentions,\n error.comment.content,\n error.comment.threadID,\n error.isPrivateComment,\n );\n }\n break;\n case ReplayThreadErrorType.CREATE_THREAD:\n if (error.thread) {\n // TODO(alan): Make this work -- grab it from the draft comments state.\n }\n break;\n case ReplayCommentErrorType.DELETE_COMMENT:\n if (error.comment) {\n await deleteComment(error.comment, error.isPrivateComment);\n }\n break;\n case ReplayThreadErrorType.RESOLVE_THREAD:\n if (error.thread) {\n await resolveThread(error.thread.id);\n }\n break;\n case ReplayThreadErrorType.UNRESOLVE_THREAD:\n if (error.thread) {\n await unresolveThread(error.thread.id);\n }\n\n break;\n case ReplayCommentErrorType.EDIT_COMMENT:\n if (error.comment) {\n setCurrentlyEditingComment(error.comment);\n }\n break;\n default:\n break;\n }\n };\n\n const onClose = () => setError(null);\n\n const retryable = React.useMemo(() => {\n if (!error) {\n return false;\n }\n switch (error.errorType) {\n case ReplayCommentErrorType.CREATE_COMMENT:\n case ReplayCommentErrorType.DELETE_COMMENT:\n case ReplayCommentErrorType.EDIT_COMMENT:\n return Boolean(error.comment);\n case ReplayThreadErrorType.MARK_THREAD_READ:\n case ReplayThreadErrorType.RESOLVE_THREAD:\n case ReplayThreadErrorType.UNRESOLVE_THREAD:\n case ReplayThreadErrorType.PIN_THREAD:\n case ReplayThreadErrorType.UNPIN_THREAD:\n return Boolean(error.thread);\n case ReplayThreadErrorType.CREATE_THREAD:\n return false;\n }\n }, [error]);\n\n return (\n <ErrorBannerContainer $isActive={!!error}>\n <Snackbar open preferComposition>\n <Snackbar.Accessory>\n <UIIcon src={FailLine} />\n </Snackbar.Accessory>\n <Snackbar.Content>\n <Snackbar.Message>{errorMessage}</Snackbar.Message>\n <Snackbar.Actions>\n {retryable ? (\n <Button inverse onClick={onRetry} variant=\"transparent\">\n <FormattedMessage\n defaultMessage=\"Retry\"\n description=\"Button that allows a user to retry a failed comment action\"\n id=\"6l4Xp2\"\n />\n </Button>\n ) : null}\n <Button inverse onClick={onClose} variant=\"transparent\">\n <SnackbarCloseMessage />\n </Button>\n </Snackbar.Actions>\n </Snackbar.Content>\n </Snackbar>\n </ErrorBannerContainer>\n );\n};\n","import {FormattedMessage} from 'react-intl';\nimport styled from 'styled-components';\n\nimport type {OverlayAnchorRef} from '@dropbox/dig-components/overlay';\nimport {Tooltip} from '@dropbox/dig-components/tooltips';\nimport {Text, Title} from '@dropbox/dig-components/typography';\n\nimport {Button} from '~/components/button';\n\nconst StepActions = styled('div')`\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n`;\n\nexport const LiveReviewErrorTooltip = (props: {\n title: string;\n message: string;\n open: boolean;\n onClose: () => void;\n triggerRef: OverlayAnchorRef;\n}) => {\n return (\n <Tooltip.Control\n auto\n maxWidth={272}\n open={props.open}\n placement=\"bottom-end\"\n triggerRef={props.triggerRef}\n variant=\"rich\"\n >\n <Title inverse size=\"medium\">\n {props.title}\n </Title>\n <Text color=\"standard\" inverse tagName=\"p\">\n {props.message}\n </Text>\n <StepActions>\n <Button autoFocus inverse onClick={props.onClose} variant=\"outline\">\n <FormattedMessage\n defaultMessage=\"Got it\"\n description=\"Text on the action button of the Live Review onboarding tooltip to acknowledge that the user has read the tooltip's message. Clicking the button dismisses the tooltip.\"\n id=\"2TCfvL\"\n />\n </Button>\n </StepActions>\n </Tooltip.Control>\n );\n};\n","import React from 'react';\n\nimport styled from 'styled-components';\n\nimport {Avatar, Facepile} from '@dropbox/dig-components/avatar';\nimport {Tooltip} from '@dropbox/dig-components/tooltips';\n\nimport {color, spacing} from '~/components/styled';\nimport {useViewport} from '~/components/viewport_context';\nimport {useReelAppGlobalState} from '~/context';\nimport {getUserInitials} from '~/lib/facepile_utils';\nimport type {Locale} from '~/lib/i18n';\nimport type {ParticipantInfo} from '~/lib/sync_collab/types';\n\nimport {useViewerPageContext} from '../../viewer_page_context';\n\nconst AvatarList = styled.div`\n display: flex;\n margin-left: 20px;\n z-index: 2;\n`;\n\nconst AvatarWrapper = styled.div<{$backgroundColor: string; $zIndex: number}>`\n display: inline-block;\n margin-left: -10px;\n position: relative;\n z-index: ${(props) => props.$zIndex};\n\n & .tooltip {\n align-items: center;\n background-color: ${(props) => props.$backgroundColor};\n box-sizing: border-box;\n display: none;\n height: 26px;\n justify-content: center;\n left: 50%;\n min-width: 136px;\n padding: 0 25px;\n position: absolute;\n top: calc(100% + 10px);\n transform: translateX(-50%);\n }\n & .tooltip span {\n inline-size: max-content;\n }\n &:hover .tooltip {\n display: flex;\n }\n &:hover .tooltip:before {\n border-color: transparent transparent ${(props) => props.$backgroundColor};\n border-style: solid;\n border-width: 0 5px 5px 5px;\n content: '';\n display: block;\n height: 0;\n left: 50%;\n margin-top: 5px;\n position: absolute;\n top: -10px;\n transform: translateX(-50%);\n width: 0;\n }\n`;\n\nconst MAX_FACEPILE_LENGTH = 5;\n\nconst FacepileAvatar = styled(Avatar)<{$clickable?: boolean}>`\n /* Override the default border, which is set to the standard background\n * color. We need the border to be the faint background color because it has\n * to match the background of the app header where the facepile displays */\n border: 2px solid var(--dig-color__background__subtle);\n cursor: ${(props) => (!!props.$clickable ? 'pointer' : 'default')};\n`;\n\nconst FacepileWrapper = styled.div`\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: flex-end;\n width: max-content;\n margin-left: ${spacing('Micro Small')};\n`;\n\nconst FacepileItemWrapper = styled(Facepile.Item)`\n .dig-Avatar {\n background: ${color('Identity On Purple')};\n }\n`;\n\nconst WithFacepileTooltip = (props: {\n avatar: React.ReactNode;\n backgroundColor: string;\n stackIndex: number;\n tooltipText: string;\n}) => {\n const {avatar, backgroundColor, stackIndex, tooltipText} = props;\n\n return (\n <Tooltip title={tooltipText}>\n <AvatarWrapper $backgroundColor={backgroundColor} $zIndex={stackIndex}>\n {avatar}\n </AvatarWrapper>\n </Tooltip>\n );\n};\n\nexport const SyncCollabFacepile = (props: {participants: ParticipantInfo[]}) => {\n const {participants} = props;\n const {isAnonymousUser, locale} = useReelAppGlobalState();\n const {setIsGuestModalOpen} = useViewerPageContext();\n // eslint-disable-next-line deprecation/deprecation\n const {isSmallScreenSize} = useViewport();\n\n const hasOverflow = participants.length > MAX_FACEPILE_LENGTH;\n\n const visibleParticipants = hasOverflow\n ? participants.slice(0, MAX_FACEPILE_LENGTH - 1)\n : participants;\n\n const onAvatarClick = React.useCallback(() => {\n if (isAnonymousUser) {\n setIsGuestModalOpen(true);\n }\n }, [isAnonymousUser, setIsGuestModalOpen]);\n\n return (\n <AvatarList>\n {visibleParticipants.map((participant, idx) => (\n <WithFacepileTooltip\n avatar={\n <FacepileAvatar\n $clickable={(participant.isMe && isAnonymousUser) || undefined}\n alt={`${participant.name} user avatar`}\n backgroundColor={participant.color}\n onClick={participant.isMe && isAnonymousUser ? onAvatarClick : undefined}\n size={isSmallScreenSize ? 'xsmall' : 'standard'}\n src={participant.photoUrl}\n >\n {getUserInitials(participant.name, locale)}\n </FacepileAvatar>\n }\n backgroundColor={participant.color}\n key={participant.sessionId}\n stackIndex={participants.length - idx + 2}\n // add 2 because that is the minimum z-index for the avatar to show\n // up over the comments pane\n tooltipText={participant.name}\n />\n ))}\n {hasOverflow && (\n <WithFacepileTooltip\n avatar={\n <FacepileAvatar>{participants.length - visibleParticipants.length}</FacepileAvatar>\n }\n backgroundColor=\"var(--dig-color__background__raised)\"\n key=\"overflow\"\n stackIndex={2}\n tooltipText={`${participants.length - visibleParticipants.length} other users`}\n />\n )}\n </AvatarList>\n );\n};\n\nconst NEW_MAX_FACEPILE_LENGTH = 4;\n\ntype SyncCollabWatchersFacepileProps = {\n consentTriggerRef: React.RefObject<HTMLDivElement>;\n participants: ParticipantInfo[];\n locale: Locale;\n};\n\nexport const SyncCollabWatchersFacepile = (props: SyncCollabWatchersFacepileProps) => {\n const {consentTriggerRef, participants, locale} = props;\n\n const hasOverflow = participants.length > NEW_MAX_FACEPILE_LENGTH;\n\n const visibleParticipants = hasOverflow\n ? participants.slice(0, NEW_MAX_FACEPILE_LENGTH - 1)\n : participants;\n\n return (\n <FacepileWrapper ref={consentTriggerRef}>\n {participants.length > 0 ? (\n <Facepile size=\"small\">\n {visibleParticipants.map((participant, index) => {\n return (\n <FacepileItemWrapper\n alt={`${participant.name} user avatar`}\n backgroundColor={participant.color}\n key={index}\n src={participant.photoUrl}\n >\n {getUserInitials(participant.name, locale)}\n </FacepileItemWrapper>\n );\n })}\n {hasOverflow && (\n <FacepileItemWrapper>\n {participants.length - visibleParticipants.length}\n </FacepileItemWrapper>\n )}\n </Facepile>\n ) : null}\n </FacepileWrapper>\n );\n};\n","import React from 'react';\n\nimport {FormattedMessage} from 'react-intl';\nimport styled from 'styled-components';\n\nimport * as reel from '@dropbox/api-v2-client/proto/reel_collab/reel_collab_pb';\nimport {Avatar} from '@dropbox/dig-components/avatar';\nimport {Toggle} from '@dropbox/dig-components/controls';\nimport {Menu} from '@dropbox/dig-components/menu';\nimport {Tooltip} from '@dropbox/dig-components/tooltips';\nimport {Text} from '@dropbox/dig-components/typography';\n\nimport {Button} from '~/components/button';\nimport {color, radius, spacing} from '~/components/styled';\nimport {useReelAppGlobalState} from '~/context';\nimport {getUserInitials} from '~/lib/facepile_utils';\nimport {SyncCollabWatchersFacepile} from '~/pages/viewer_page/components/sync_collab/facepile';\nimport {useSyncCollabSharedState} from '~/pages/viewer_page/components/sync_collab/shared_state';\n\nconst WatcherWrapper = styled.div`\n display: flex;\n flex-direction: row;\n align-items: center;\n background: ${color('Identity On Purple')};\n border-radius: ${radius('Medium')};\n`;\n\nconst LiveWrapper = styled.div`\n display: flex;\n flex-direction: row;\n align-items: center;\n background: rgba(255, 255, 255, 0.4);\n padding: ${spacing('Micro Small')} 10px;\n gap: 6px;\n border-radius: ${radius('Small')};\n`;\n\nconst CapitalizedText = styled(Text)`\n text-transform: uppercase;\n`;\n\nconst StyledButton = styled(Button)`\n margin: ${spacing('Micro XSmall')};\n`;\n\nconst WatcherCountDropdown = styled.div`\n display: flex;\n flex-direction: column;\n margin-left: ${spacing('Micro Small')};\n`;\n\nconst ParticipantRow = styled.div`\n display: flex;\n flex-direction: row;\n align-items: center;\n margin: 0 ${spacing('Micro Large')} ${spacing('Micro XSmall')} ${spacing('Micro Small')};\n`;\n\nconst NameSection = styled.div`\n display: flex;\n flex-direction: column;\n align-items: start;\n padding: 7px 0 7px ${spacing('Micro Small')};\n`;\n\nconst LineDivider = styled.div`\n height: 1px;\n align-self: stretch;\n background: ${color('Border Subtle')};\n`;\n\nconst HostSettingsWrapper = styled.div`\n display: flex;\n flex-direction: column;\n padding: ${spacing('Micro Small')} 0;\n`;\n\nconst HostSettingRow = styled.div`\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n flex-grow: 1;\n padding: ${spacing('Micro Small')} ${spacing('Micro Medium')} ${spacing('Micro Small')}\n ${spacing('Micro Small')};\n`;\n\nconst StyledToggle = styled(Toggle)`\n margin-left: ${spacing('Micro Small')};\n`;\n\nconst LiveCircleSVG = () => {\n return (\n <svg fill=\"none\" height=\"6\" viewBox=\"0 0 6 6\" width=\"6\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"3\" cy=\"3\" fill=\"#9B0032\" r=\"3\" />\n </svg>\n );\n};\n\ntype SyncCollabWatchersProps = {\n consentTriggerRef: React.RefObject<HTMLDivElement>;\n joinLeaveOnClick: () => void;\n};\n\nexport const SyncCollabWatchers = (props: SyncCollabWatchersProps) => {\n const {consentTriggerRef, joinLeaveOnClick} = props;\n const {\n iAmHost,\n participants,\n showCursors,\n setShowCursors,\n sendShowCursorsSetting,\n openSession,\n setOpenSession,\n sendOpenSessionSetting,\n } = useSyncCollabSharedState();\n const {locale} = useReelAppGlobalState();\n\n const onShowCursorsSettingToggle = React.useCallback(() => {\n const newValue = !showCursors;\n sendShowCursorsSetting(newValue);\n // Set state directly here since message does not echo back to host\n setShowCursors(newValue);\n }, [sendShowCursorsSetting, setShowCursors, showCursors]);\n\n const onOpenSessionSettingToggle = React.useCallback(() => {\n const newValue = !openSession;\n sendOpenSessionSetting(newValue);\n // Set state directly here since message does not echo back to host\n setOpenSession(newValue);\n }, [sendOpenSessionSetting, setOpenSession, openSession]);\n\n return (\n <>\n <Menu.Wrapper>\n {({getTriggerProps, getContentProps}) => (\n <>\n <WatcherWrapper {...getTriggerProps()}>\n <LiveWrapper>\n <LiveCircleSVG />\n <CapitalizedText inverse size=\"small\" variant=\"label\">\n <FormattedMessage\n defaultMessage=\"Live\"\n description=\"Text displayed next to record icon in watcher to indicate live review is in progress. This will be displayed in all caps (when applicable) so text should be kept short.\"\n id=\"h6FRlF\"\n />\n </CapitalizedText>\n </LiveWrapper>\n <SyncCollabWatchersFacepile\n consentTriggerRef={consentTriggerRef}\n locale={locale}\n participants={Array.from(participants.values())}\n />\n <Button inverse variant=\"borderless\" withDropdownIcon>\n <FormattedMessage\n defaultMessage=\"{count} watching\"\n description=\"Text that shows number of participants watching live review\"\n id=\"1UcADT\"\n values={{\n count: participants.size,\n }}\n />\n </Button>\n <Tooltip\n openDelay={600}\n title={\n participants.size > 1 ? (\n <FormattedMessage\n defaultMessage=\"Leave live review\"\n description=\"Tooltip explaining to users the button to leave a live review session if there are more participants remaining\"\n id=\"1ON10O\"\n />\n ) : (\n <FormattedMessage\n defaultMessage=\"End live review\"\n description=\"Tooltip explaining to users the button to end a live review session if there are no more participants remaining\"\n id=\"HQLfJZ\"\n />\n )\n }\n >\n <StyledButton inverse onClick={joinLeaveOnClick} size=\"small\" variant=\"primary\">\n {participants.size > 1 ? (\n <FormattedMessage\n defaultMessage=\"Leave\"\n description=\"Text for button to leave a live review session if there are more participants remaining\"\n id=\"eMsUXR\"\n />\n ) : (\n <FormattedMessage\n defaultMessage=\"End\"\n description=\"Text for button to end a live review session if there are no more participants remaining\"\n id=\"A9XxRU\"\n />\n )}\n </StyledButton>\n </Tooltip>\n </WatcherWrapper>\n <Menu.Content\n {...getContentProps()}\n auto={false}\n minWidth=\"matchContainingWidth\"\n placement=\"bottom-end\"\n >\n <Menu.Segment>\n <WatcherCountDropdown>\n {Array.from(participants.values())\n .sort((a, b) => a.joinTimestamp - b.joinTimestamp)\n .map((participant, index) => {\n return (\n <ParticipantRow key={index}>\n <Avatar\n alt={`${participant.name} user avatar`}\n backgroundColor={participant.color}\n hasNoOutline\n key={index}\n size=\"small\"\n src={participant.photoUrl}\n >\n {getUserInitials(participant.name, locale)}\n </Avatar>\n <NameSection>\n <Text color=\"standard\" variant=\"label\">\n {participant.name}\n </Text>\n {participant.role === reel.LiveReviewUserRole.HOST && (\n <Text color=\"subtle\" size=\"small\" variant=\"label\">\n <FormattedMessage\n defaultMessage=\"Host\"\n description=\"Label indicating participant is a host\"\n id=\"RLf3wq\"\n />\n </Text>\n )}\n </NameSection>\n </ParticipantRow>\n );\n })}\n {iAmHost && (\n <>\n <LineDivider />\n <HostSettingsWrapper>\n <HostSettingRow>\n <Text color=\"standard\" variant=\"label\">\n <FormattedMessage\n defaultMessage=\"Show cursors\"\n description=\"Text to indicator toggle setting to show cursors for live review\"\n id=\"/BbaRR\"\n />\n </Text>\n <StyledToggle\n isToggled={showCursors}\n onChange={onShowCursorsSettingToggle}\n />\n </HostSettingRow>\n <HostSettingRow>\n <Text color=\"standard\" variant=\"label\">\n <FormattedMessage\n defaultMessage=\"Anyone can control the screen\"\n description=\"Text to indicator toggle setting to allow anyone to control screens for live review\"\n id=\"HSCyMY\"\n />\n </Text>\n <StyledToggle\n isToggled={openSession}\n onChange={onOpenSessionSettingToggle}\n />\n </HostSettingRow>\n </HostSettingsWrapper>\n </>\n )}\n </WatcherCountDropdown>\n </Menu.Segment>\n </Menu.Content>\n </>\n )}\n </Menu.Wrapper>\n </>\n );\n};\n","import {FormattedMessage} from 'react-intl';\nimport styled from 'styled-components';\n\nimport type {OverlayAnchorRef} from '@dropbox/dig-components/overlay';\nimport {Tooltip} from '@dropbox/dig-components/tooltips';\nimport {Text, Title} from '@dropbox/dig-components/typography';\n\nimport {Button} from '~/components/button';\n\nconst StepActions = styled('div')`\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n`;\n\nexport const SyncCollabConsentTooltip = (props: {\n open: boolean;\n onClose: () => void;\n triggerRef: OverlayAnchorRef;\n}) => {\n return (\n <Tooltip.Control\n auto\n maxWidth={240}\n open={props.open}\n placement=\"bottom-end\"\n triggerRef={props.triggerRef}\n variant=\"rich\"\n >\n <Title inverse size=\"medium\">\n <FormattedMessage\n defaultMessage=\"Just a reminder\"\n description=\"Tooltip title for reminding the user of consent during a live collab session\"\n id=\"QQJuwE\"\n />\n </Title>\n <Text color=\"standard\" inverse tagName=\"p\">\n <FormattedMessage\n defaultMessage=\"Your name and photo are visible in live review.\"\n description=\"Text on the body of the tooltip to indicate what other participants will see during a live review session\"\n id=\"/FpIzW\"\n />\n </Text>\n <StepActions>\n <Button autoFocus inverse onClick={props.onClose} variant=\"outline\">\n <FormattedMessage\n defaultMessage=\"Got it\"\n description=\"Text on the action button of the Live Review onboarding tooltip to acknowledge that the user has read the tooltip's message. Clicking the button dismisses the tooltip.\"\n id=\"2TCfvL\"\n />\n </Button>\n </StepActions>\n </Tooltip.Control>\n );\n};\n","import React from 'react';\n\nimport type {IntlShape} from 'react-intl';\n\nimport {Link} from '@dropbox/dig-components/typography';\n\nimport type {MediaType} from '~/lib/api';\nimport type {LoggingClient} from '~/lib/logging/logger';\n\nexport const viewingAlone = (intl: IntlShape, loggingClient: LoggingClient) => (link?: string) => {\n if (link) {\n return intl.formatMessage(\n {\n defaultMessage:\n 'You’ve started a live review session. A live review link has been copied to your clipboard. <copy>Copy link</copy>',\n id: 'gnMDd/',\n description:\n 'Snackbar message that appears when a user joins or starts a live review session and they are the only one in the session, and a sharing link has been copied to the clipboad. Also includes a button to copy the link again.',\n },\n {\n link: link,\n copy: (str: React.ReactNode) => (\n <Link\n href=\"#\"\n onClick={() => {\n // eslint-disable-next-line deprecation/deprecation\n loggingClient.logEvent('copy_reel_share_link', {\n access_type: 'review',\n link_item_type: 'file',\n is_onboarding_share_step: 'false',\n replay_media_type: 'none',\n experiment_variant: 'none',\n });\n navigator.clipboard.writeText(link);\n }}\n >\n {str}\n </Link>\n ),\n },\n );\n } else {\n return intl.formatMessage({\n defaultMessage: 'You’ve started a live review session.',\n id: 'b/DIBV',\n description:\n 'Snackbar message that appears when a user joins or starts a live review session and they are the only one in the session',\n });\n }\n};\n\nexport const viewingWithOneOther = (\n intl: IntlShape,\n {\n mediaType,\n otherViewerName,\n }: {\n mediaType: MediaType.Audio | MediaType.Video;\n otherViewerName: string;\n },\n) =>\n intl.formatMessage(\n {\n defaultMessage:\n 'You are {mediaType, select, audio {listening} other {watching}} with {otherViewerName}. {mediaType, select, audio {Audio playback is synchronized, and comments are visible to everyone in the live review session.} other {Video playback is synchronized, and drawings are visible to everyone in the live review session.}}',\n id: '5d6HKf',\n description:\n 'Snackbar message that appears when a user joins a live review session and there is one other person already in the session',\n },\n {\n otherViewerName,\n mediaType,\n },\n );\n\nexport const viewingWithMultipleOthers = (\n intl: IntlShape,\n {\n mediaType,\n numOtherParticipants,\n }: {\n mediaType: MediaType;\n numOtherParticipants: number;\n },\n) =>\n intl.formatMessage(\n {\n defaultMessage:\n 'You are {mediaType, select, audio {listening} other {watching}} with {numOtherParticipants, plural, one {{numOtherParticipants} other participant} other {{numOtherParticipants} others}}. {mediaType, select, audio {Audio playback is synchronized, and comments are visible to everyone in the live review session.} other {Video playback is synchronized, and drawings are visible to everyone in the live review session.}}',\n id: 'mYKiAW',\n description:\n 'Snackbar message that appears when a user joins a live review session and there are multiple other people already in the session.',\n },\n {\n mediaType,\n numOtherParticipants,\n },\n );\n\nexport const viewingWithOneOtherWhoLeaves = (\n intl: IntlShape,\n {mediaType}: {mediaType: MediaType},\n) =>\n intl.formatMessage(\n {\n defaultMessage:\n 'You are in a live review session. {mediaType, select, audio {Audio playback is synchronized, and comments are visible to everyone in the session.} other {Video playback is synchronized, and drawings are visible to everyone in the session.}}',\n id: 'wXMn3f',\n description:\n 'Snackbar message that appears when a user joins a live review session and the one other participant who was in it leaves the session before this message can appear, so they are in the session by themselves.',\n },\n {mediaType},\n );\n\nexport const viewerJoinedYou = (\n intl: IntlShape,\n {\n newViewerName,\n }: {\n newViewerName: string;\n },\n) =>\n intl.formatMessage(\n {\n defaultMessage: '{new_viewer_name} joined you in the live review session',\n id: '+4VVQh',\n description:\n 'Snackbar message that appears when another user joins the current user in a live session that is currently in progress and the live session only had the current user in it already',\n },\n {new_viewer_name: newViewerName},\n );\n\nexport const viewerJoinedYouAndOneOther = (\n intl: IntlShape,\n {\n newViewerName,\n otherViewerName,\n }: {\n newViewerName: string;\n otherViewerName: string;\n },\n) =>\n intl.formatMessage(\n {\n defaultMessage:\n '{new_viewer_name} joined you and {other_viewer_name} in the live review session',\n id: 'Q/2cee',\n description:\n 'Snackbar message that appears when another user joins the current user in a live session that is currently in progress and the live session had the current user and one other user in it already',\n },\n {\n new_viewer_name: newViewerName,\n other_viewer_name: otherViewerName,\n },\n );\n\nexport const viewerJoinedYouAndMultipleOthers = (\n intl: IntlShape,\n {\n numOtherParticipants,\n newViewerName,\n }: {\n numOtherParticipants: number;\n newViewerName: string;\n },\n) =>\n intl.formatMessage(\n {\n defaultMessage:\n '{new_viewer_name} joined you and {num_other_participants, plural, one {{num_other_participants} other participant} other {{num_other_participants} others}} in the live review session',\n id: 'dsf5Nm',\n description:\n 'Snackbar message that appears when another user joins the current user in a live session that is currently in progress and the live session had more than 1 other participants besides the current user in the session already',\n },\n {\n new_viewer_name: newViewerName,\n num_other_participants: numOtherParticipants,\n },\n );\n\nexport const userDisconnectedDueToShutdown = (\n intl: IntlShape,\n {\n secsToShutdown,\n }: {\n secsToShutdown: number;\n },\n) => {\n const date = new Date(0);\n date.setSeconds(secsToShutdown);\n\n const getMinutesMsg = (minutesLeft: number) =>\n intl.formatMessage(\n {\n defaultMessage:\n 'Review session will shut down in {minutes_left, plural, one {{minutes_left} minute} other {{minutes_left} minutes}} for maintenance. Please save any unsaved drawings or comments to avoid losing any data.',\n id: 'SHQ1Sh',\n description:\n 'Tooltip content when the service is restarting for maintenance in more than 1 minute',\n },\n {\n minutes_left: minutesLeft,\n },\n );\n\n const getSecondsMsg = (secondsLeft: number) =>\n intl.formatMessage(\n {\n defaultMessage:\n 'Review session will shut down in {seconds_left, plural, one {{seconds_left} second} other {{seconds_left} seconds}} for maintenance. Please save any unsaved drawings or comments to avoid losing any data.',\n id: 'LI/v2P',\n description:\n 'Tooltip content when the service is restarting for maintenance in less than 1 minute',\n },\n {\n seconds_left: secondsLeft,\n },\n );\n\n return date.getMinutes() >= 1\n ? getMinutesMsg(date.getMinutes())\n : getSecondsMsg(date.getSeconds());\n};\n\nexport const othersWatching = (\n intl: IntlShape,\n {numOtherParticipants}: {numOtherParticipants: number},\n) =>\n intl.formatMessage(\n {\n defaultMessage:\n '{num_other_participants, plural, one {{num_other_participants} watching} other {{num_other_participants} watching now}}',\n id: 'zkN/SU',\n description:\n 'Text that sits next to the list of other current participants in an active live review session that summarizes how many other participants there are',\n },\n {\n num_other_participants: numOtherParticipants,\n },\n );\n","import React from 'react';\n\nimport ReactDOM from 'react-dom';\nimport {FormattedMessage, useIntl} from 'react-intl';\nimport {useLocation} from 'react-router';\nimport styled from 'styled-components';\n\nimport {Snackbar} from '@dropbox/dig-components/snackbar';\nimport {Text} from '@dropbox/dig-components/typography';\nimport {UIIcon} from '@dropbox/dig-icons';\nimport {PersonLeaveLine, PersonMultipleLine} from '@dropbox/dig-icons/assets';\n\nimport {Button} from '~/components/button';\nimport {displayNameForParticipant} from '~/components/common';\nimport {ReelSnackbar} from '~/components/snackbar';\nimport {useViewport} from '~/components/viewport_context';\nimport {useReelAppGlobalState} from '~/context';\nimport {getReelLink, MediaType} from '~/lib/api';\nimport {ReplayError, ReplayErrorCategory, reportException} from '~/lib/error_reporting';\nimport {USER_METADATA_FIELD} from '~/lib/provisions';\nimport {JoinState} from '~/lib/sync_collab/types';\nimport {LiveReviewErrorTooltip} from '~/pages/viewer_page/components/sync_collab/live_review_error_tooltip';\nimport {useSyncCollabSharedState} from '~/pages/viewer_page/components/sync_collab/shared_state';\nimport {SyncCollabWatchers} from '~/pages/viewer_page/components/sync_collab/sync_collab_watchers';\nimport {useViewerPageContext} from '~/pages/viewer_page/viewer_page_context';\n\nimport {SyncCollabFacepile} from './facepile';\nimport {SyncCollabConsentTooltip} from './sync_collab_consent_tooltip';\nimport * as messages from './sync_collab_messages';\nimport {useVideoViewerContext} from '../../video_viewer_context';\nimport {useVersionsContext} from '../versions_context';\n\nconst SyncCollabWrapper = styled('div')`\n display: flex;\n align-items: center;\n`;\n\nconst FacepileWrapper = styled('div')`\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: flex-end;\n width: max-content;\n`;\n\ntype SyncCollabEntrypointProps = {\n disabled: boolean;\n};\n\nconst SyncCollabEntrypoint = ({disabled: disabledProp}: SyncCollabEntrypointProps) => {\n const {\n participants,\n setShowInviteTooltip,\n joinState,\n setJoinState,\n shutdownState,\n setShutdownState,\n getCurrentSessionId,\n subscribeToMessages,\n } = useSyncCollabSharedState();\n const {loggingClient, markCollabOnboardingStepComplete, mediaMetadata} = useViewerPageContext();\n const {preloadVideoToFirstFrame} = useVideoViewerContext();\n const sessionContext = useReelAppGlobalState();\n const {liveReviewImprovsIsOn} = useSyncCollabSharedState();\n const {currentUserIsOwner} = useViewerPageContext();\n\n const location = useLocation();\n const [snackbarMsg, setSnackbarMsg] = React.useState<React.ReactNode | string | null>(null);\n const liveLink = React.useRef<string | undefined>(undefined);\n\n const intl = useIntl();\n\n const participantText = React.useMemo(() => {\n switch (joinState) {\n case JoinState.JOINED:\n return messages.othersWatching(intl, {numOtherParticipants: participants.size});\n default:\n return '';\n }\n\n return null;\n }, [intl, joinState, participants.size]);\n\n const firstParticipantSnackbarMsg = messages.viewingAlone(intl, loggingClient);\n\n const fetchLink = React.useCallback(async () => {\n return getReelLink(mediaMetadata.videoId, false, true, 'file');\n }, [mediaMetadata.videoId]);\n\n React.useEffect(() => {\n const {mediaType} = mediaMetadata;\n\n if (mediaType !== MediaType.Video && mediaType !== MediaType.Audio) return;\n\n return subscribeToMessages((msg) => {\n const currentSessionId = getCurrentSessionId();\n const participantCount = participants.size;\n if (!currentSessionId) {\n return;\n }\n const otherParticipants = new Map(participants);\n otherParticipants.delete(currentSessionId);\n\n if (msg.messageType.case === 'replayEnd' && msg.messageType.value) {\n if (currentUserIsOwner) {\n // eslint-disable-next-line deprecation/deprecation\n loggingClient.logEvent('succeed_live_review_session_start', {\n participants: participantCount,\n });\n } else {\n // eslint-disable-next-line deprecation/deprecation\n loggingClient.logEvent('succeed_live_review_session_join', {\n participants: participantCount,\n is_guest: sessionContext.status === 'logged in' ? 'false' : 'true',\n });\n }\n if (participantCount === 1 && participants.has(currentSessionId)) {\n // We only want the first owner that joins the session to see the 'copy live review link' message.\n setSnackbarMsg(\n firstParticipantSnackbarMsg(currentUserIsOwner ? liveLink.current : undefined),\n );\n } else if (participantCount === 2) {\n const otherViewer =\n otherParticipants.size > 0 ? Array.from(otherParticipants.values())[0] : null;\n if (otherViewer) {\n setSnackbarMsg(\n messages.viewingWithOneOther(intl, {\n mediaType,\n otherViewerName: displayNameForParticipant(otherViewer.name),\n }),\n );\n } else {\n // Fall back to this message if the one other participant leaves right as the snackbar appears\n setSnackbarMsg(messages.viewingWithOneOtherWhoLeaves(intl, {mediaType}));\n }\n } else if (participantCount > 2) {\n setSnackbarMsg(\n messages.viewingWithMultipleOthers(intl, {\n mediaType,\n numOtherParticipants: participantCount - 1,\n }),\n );\n }\n } else if (msg.messageType.case === 'join' && msg.messageType.value) {\n // TODO: Handle logged in users.\n const userJoin = msg.messageType.value;\n const newViewerFullName =\n userJoin.user.case === 'userInfo' ? userJoin.user.value.name : userJoin.user.value;\n const newViewerName = displayNameForParticipant(newViewerFullName!);\n if (otherParticipants.size === 1) {\n setSnackbarMsg(messages.viewerJoinedYou(intl, {newViewerName}));\n } else if (otherParticipants.size === 2) {\n const otherViewer =\n otherParticipants.size > 0 ? Array.from(otherParticipants.values())[0] : null;\n if (otherViewer) {\n setSnackbarMsg(\n messages.viewerJoinedYouAndOneOther(intl, {\n newViewerName,\n otherViewerName: displayNameForParticipant(otherViewer.name),\n }),\n );\n } else {\n // Fall back to this message if the one other participant leaves right as the snackbar appears\n setSnackbarMsg(\n intl.formatMessage(\n {\n defaultMessage: '{new_viewer_name} joined the live review session',\n id: '6Rj32D',\n description:\n 'Snackbar message that appears when another user joins the current user in a live session that is currently in progress and the live session had the current user and one other user in it already, but the one other user leaves right as the new user is joining',\n },\n {\n new_viewer_name: newViewerName,\n },\n ),\n );\n }\n } else if (participantCount > 2) {\n setSnackbarMsg(\n messages.viewerJoinedYouAndMultipleOthers(intl, {\n newViewerName,\n numOtherParticipants: participantCount - 1,\n }),\n );\n }\n }\n });\n });\n\n const closeSnackbar = () => {\n if (snackbarMsg === firstParticipantSnackbarMsg()) {\n if (participants.size === 1) {\n setShowInviteTooltip(true);\n }\n }\n setSnackbarMsg(null);\n };\n\n // Consent Tooltip\n const consentTriggerRef = React.useRef<HTMLDivElement>(null);\n const [consentTooltipOpen, setConsentTooltipOpen] = React.useState(false);\n\n const triggerRef = React.useRef<HTMLButtonElement>(null);\n\n const showErrorTooltip = React.useMemo(() => {\n return (\n joinState === JoinState.DISCONNECTED ||\n joinState === JoinState.CONNECTION_ERROR ||\n joinState === JoinState.ERROR_OLD_VERSION ||\n joinState === JoinState.AUTH_FAILED ||\n shutdownState.showShutdownMessage\n );\n }, [joinState, shutdownState]);\n\n const tooltipTitle = React.useMemo(() => {\n if (joinState === JoinState.DISCONNECTED) {\n return intl.formatMessage({\n defaultMessage: 'Lost Connection',\n id: 'sCuDY5',\n description:\n 'Tooltip title when something goes wrong and the user disconnects from the current live session due to a lost connection',\n });\n } else if (joinState === JoinState.CONNECTION_ERROR) {\n return intl.formatMessage({\n defaultMessage: 'Service Unavailable',\n id: 'K0oB8Y',\n description:\n 'Tooltip title when something goes wrong and the user cannot connect to the current live session due to the service being down',\n });\n } else if (joinState === JoinState.AUTH_FAILED) {\n return intl.formatMessage({\n defaultMessage: 'Auth Failed',\n id: 'tbs1NU',\n description:\n \"Tooltip title when the live review session rejects the user's attempt to authenticate with it\",\n });\n } else if (joinState === JoinState.ERROR_OLD_VERSION) {\n return intl.formatMessage({\n defaultMessage: 'Client out of date',\n id: 'FTa0Ap',\n description:\n 'Tooltip title when something goes wrong and the user cannot connect to the current live session due to the client being out of date',\n });\n } else if (shutdownState.showShutdownMessage) {\n return intl.formatMessage({\n defaultMessage: 'Shutdown in progress',\n id: 'CTiXwO',\n description:\n 'Tooltip title when the user disconnects from the current live session due to the service restarting for maintenance',\n });\n }\n\n return '';\n }, [intl, joinState, shutdownState.showShutdownMessage]);\n\n const tooltipMessage = React.useMemo(() => {\n if (joinState === JoinState.DISCONNECTED) {\n return intl.formatMessage({\n defaultMessage: 'Please check your internet connection and try again.',\n id: 'neMh6p',\n description:\n 'Tooltip content when something goes wrong and the user disconnects from the current live session due to a lost connection',\n });\n } else if (joinState === JoinState.CONNECTION_ERROR) {\n return intl.formatMessage({\n defaultMessage: 'Please try again later.',\n id: 'uNW0Dd',\n description:\n \"Tooltip content when the live review session rejects the user's attempt to authenticate with it\",\n });\n } else if (joinState === JoinState.AUTH_FAILED) {\n return intl.formatMessage({\n defaultMessage: 'Please reload and try again.',\n id: '3Etzin',\n description: 'Tooltip content when the live review service rejects ',\n });\n } else if (joinState === JoinState.ERROR_OLD_VERSION) {\n return intl.formatMessage({\n defaultMessage: 'Please refresh your browser before joining.',\n id: 'fYALC/',\n description:\n 'Tooltip content when something goes wrong and the user cannot connect to the current live session due to the client being out of date',\n });\n } else if (shutdownState.showShutdownMessage) {\n return messages.userDisconnectedDueToShutdown(intl, {\n secsToShutdown: shutdownState.timeToShutdown,\n });\n }\n return '';\n }, [intl, joinState, shutdownState.showShutdownMessage, shutdownState.timeToShutdown]);\n\n const closeTooltip = React.useCallback(() => {\n if (shutdownState.showShutdownMessage) {\n setShutdownState({showShutdownMessage: false, timeToShutdown: shutdownState.timeToShutdown});\n } else if (showErrorTooltip) {\n setJoinState(JoinState.LEFT);\n }\n }, [\n setJoinState,\n setShutdownState,\n showErrorTooltip,\n shutdownState.showShutdownMessage,\n shutdownState.timeToShutdown,\n ]);\n\n const joinLiveReviewSession = React.useCallback(() => {\n loggingClient.setIsLiveReview(true);\n // eslint-disable-next-line deprecation/deprecation\n loggingClient.logEvent('select_live_review_join');\n setJoinState(JoinState.PRELOADING);\n preloadVideoToFirstFrame().then(() => setJoinState(JoinState.AUTHING));\n }, [loggingClient, preloadVideoToFirstFrame, setJoinState]);\n\n const startLiveReviewSession = React.useCallback(async () => {\n loggingClient.setIsLiveReview(true);\n // eslint-disable-next-line deprecation/deprecation\n loggingClient.logEvent('select_live_review_start');\n setJoinState(JoinState.PRELOADING);\n preloadVideoToFirstFrame().then(() => setJoinState(JoinState.AUTHING));\n // eslint-disable-next-line deprecation/deprecation\n loggingClient.logEvent('create_reel_link', {\n access_type: 'review',\n link_item_type: 'file',\n location: 'video_page_header',\n });\n\n const linkBlobPromise = fetchLink().then((link) => {\n if (!link) {\n // This error should already have been dispatched to the snackbar\n return Promise.reject('link_is_empty');\n }\n liveLink.current = link;\n return new Blob([link], {type: 'text/plain'});\n });\n\n if (typeof ClipboardItem === 'undefined') {\n // ClipboardItem introduced in Firefox 127, playwright\n // currently at 125, can be removed starting in 2025\n return;\n }\n\n try {\n // Safari treats user activation differently, but Chromium doesn't support Promise as a clipboardItem arg,\n // until Chrome 98\n // https://bugs.webkit.org/show_bug.cgi?id=222262.\n // https://chromestatus.com/feature/5733949474078720#details\n await navigator.clipboard.write([\n new ClipboardItem({\n 'text/plain': linkBlobPromise,\n }),\n ]);\n // eslint-disable-next-line deprecation/deprecation\n loggingClient.logEvent('copy_reel_share_link', {\n access_type: 'review',\n link_item_type: 'file',\n is_onboarding_share_step: 'false',\n replay_media_type: 'none',\n experiment_variant: 'none',\n });\n } catch {\n // Chromium < 98\n await navigator.clipboard\n .write([\n new ClipboardItem({\n 'text/plain': await linkBlobPromise,\n }),\n ])\n .catch((e) => {\n reportException(\n new ReplayError({\n error: e,\n severity: 'non-critical',\n tags: ['copy_to_clipboard_failed'],\n category: ReplayErrorCategory.UncaughtException,\n }),\n );\n });\n }\n }, [fetchLink, loggingClient, preloadVideoToFirstFrame, setJoinState]);\n\n const joinLeaveOnClick = React.useCallback(() => {\n if (![JoinState.LEFT, JoinState.NONE, JoinState.JOINED].includes(joinState)) {\n return;\n }\n\n markCollabOnboardingStepComplete(3);\n if (sessionContext.status === 'logged in') {\n sessionContext.setMetadata(USER_METADATA_FIELD.REPLAY_FIRST_LIVE_REVIEW_HOSTED, true);\n }\n\n if (joinState === JoinState.JOINED) {\n setJoinState(JoinState.LEAVING);\n setSnackbarMsg(\n intl.formatMessage({\n defaultMessage: 'You left the live review session and are watching privately 👻',\n id: '1aD08a',\n description: 'Snackbar text that appears when the user leaves a live review session',\n }),\n );\n return;\n }\n if (joinState === JoinState.LEFT || joinState === JoinState.NONE) {\n if (!sessionContext.isAnonymousUser) {\n setConsentTooltipOpen(true);\n }\n if (currentUserIsOwner) {\n startLiveReviewSession();\n } else {\n joinLiveReviewSession();\n }\n }\n }, [\n sessionContext,\n joinState,\n markCollabOnboardingStepComplete,\n setJoinState,\n intl,\n currentUserIsOwner,\n startLiveReviewSession,\n joinLiveReviewSession,\n ]);\n\n React.useEffect(() => {\n const isLiveLink = Boolean(new URLSearchParams(location.search).get('live'));\n\n if (isLiveLink) {\n joinLeaveOnClick();\n }\n // NOTE: only run this if location changes.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [location]);\n\n return (\n <>\n {liveReviewImprovsIsOn ? (\n <>\n {joinState !== JoinState.JOINED ? (\n <JoinLeaveButton\n disabledProp={disabledProp}\n joinLeaveOnClick={joinLeaveOnClick}\n joinState={joinState}\n mediaType={mediaMetadata.mediaType}\n showErrorTooltip={showErrorTooltip}\n triggerRef={triggerRef}\n />\n ) : (\n <SyncCollabWatchers\n consentTriggerRef={consentTriggerRef}\n joinLeaveOnClick={joinLeaveOnClick}\n />\n )}\n </>\n ) : (\n <SyncCollabWrapper>\n <FacepileWrapper ref={consentTriggerRef}>\n <Text color=\"faint\" size=\"small\" style={{whiteSpace: 'nowrap'}}>\n {participantText}\n </Text>\n {participants.size > 0 ? (\n <SyncCollabFacepile\n participants={Array.from(participants.values()).sort(\n (a, b) => a.joinTimestamp - b.joinTimestamp,\n )}\n />\n ) : null}\n </FacepileWrapper>\n <JoinLeaveButton\n disabledProp={disabledProp}\n joinLeaveOnClick={joinLeaveOnClick}\n joinState={joinState}\n mediaType={mediaMetadata.mediaType}\n showErrorTooltip={showErrorTooltip}\n triggerRef={triggerRef}\n />\n <LiveReviewErrorTooltip\n message={tooltipMessage}\n onClose={closeTooltip}\n open={showErrorTooltip}\n title={tooltipTitle}\n triggerRef={triggerRef}\n />\n <SyncCollabConsentTooltip\n onClose={() => setConsentTooltipOpen(false)}\n open={consentTooltipOpen}\n triggerRef={consentTriggerRef}\n />\n </SyncCollabWrapper>\n )}\n <ReelSnackbar onRequestClose={closeSnackbar} open={snackbarMsg !== null} timeout={5000}>\n <Snackbar.Message>{snackbarMsg}</Snackbar.Message>\n <Snackbar.Actions>\n <Button inverse onClick={closeSnackbar} variant=\"transparent\">\n <FormattedMessage\n defaultMessage=\"OK\"\n description=\"Text on a button on the Live Review snackbar that dismisses the snackbar when clicked\"\n id=\"iJQrLQ\"\n />\n </Button>\n </Snackbar.Actions>\n </ReelSnackbar>\n </>\n );\n};\n\ntype JoinLeaveButtonProps = {\n disabledProp: boolean;\n showErrorTooltip: boolean;\n mediaType: MediaType;\n joinState: JoinState;\n joinLeaveOnClick: () => void;\n triggerRef: React.RefObject<HTMLButtonElement>;\n};\n\nconst JoinLeaveButton = (props: JoinLeaveButtonProps) => {\n const {disabledProp, showErrorTooltip, mediaType, joinState, joinLeaveOnClick, triggerRef} =\n props;\n\n const intl = useIntl();\n const {currentUserIsOwner} = useViewerPageContext();\n // eslint-disable-next-line deprecation/deprecation\n const {isSmallScreenSize} = useViewport();\n\n const joinButtonText = React.useMemo(() => {\n const startMessage = intl.formatMessage({\n defaultMessage: 'Start live review',\n id: 'QUZhy7',\n description:\n 'Text for button to join or start a new live review session when the current user is the owner of the video',\n });\n\n const joinMessage = intl.formatMessage({\n defaultMessage: 'Join live review',\n id: 'kzuili',\n description:\n 'Text for button to join or start a new live review session when the current user is not the owner of the video',\n });\n\n switch (joinState) {\n case JoinState.LEFT:\n case JoinState.NONE:\n return currentUserIsOwner ? startMessage : joinMessage;\n case JoinState.JOINING:\n case JoinState.AUTHING:\n case JoinState.PRELOADING:\n return intl.formatMessage({\n defaultMessage: 'Joining...',\n id: 'QkF+oD',\n description:\n \"Text for button to join or leave live review session right after a user has clicked 'join' and is still joining the current session\",\n });\n case JoinState.JOINED:\n return intl.formatMessage({\n defaultMessage: 'Leave',\n id: 'h+TksM',\n description: 'Text for button to leave current live review session',\n });\n }\n return null;\n }, [joinState, currentUserIsOwner, intl]);\n\n return (\n <Button\n aria-label={joinButtonText || ''}\n data-safe-to-unmask-name=\"start-live-review-button\"\n disabled={disabledProp || showErrorTooltip || mediaType === MediaType.Document}\n isLoading={\n joinState === JoinState.PRELOADING ||\n joinState === JoinState.JOINING ||\n joinState === JoinState.AUTHING ||\n joinState === JoinState.LEAVING\n }\n onClick={joinLeaveOnClick}\n ref={triggerRef}\n variant=\"opacity\"\n withIconLeft={\n <UIIcon src={joinState === JoinState.JOINED ? PersonLeaveLine : PersonMultipleLine} />\n }\n >\n {!isSmallScreenSize && joinButtonText}\n </Button>\n );\n};\n\nconst VersionsAwareSyncCollabEntrypoint = (props: {}) => {\n const versionsContext = useVersionsContext();\n\n // The sync collab join button can only sync the user's version with the collab\n // service if\n // 1. the current version summaries are all loaded and\n // 2. the user is not currently switching versions\n const canUserSyncVersions =\n versionsContext.areVersionsEnabled &&\n versionsContext.currentVersionSummaries.isLoading === false &&\n versionsContext.pendingVersionAction === 'none';\n\n return <SyncCollabEntrypoint {...props} disabled={!canUserSyncVersions} />;\n};\n\nexport const PortalledSyncCollabEntryPoint = () => {\n const [mounted, setMounted] = React.useState(false);\n const portalledElementRef = React.useRef<null | React.ReactElement>(null);\n\n React.useEffect(() => {\n const portalTo = document.getElementById('sync-collab-join-button-portal');\n if (portalTo) {\n portalledElementRef.current = ReactDOM.createPortal(\n <VersionsAwareSyncCollabEntrypoint />,\n portalTo,\n );\n setMounted(true);\n }\n }, []);\n\n return mounted ? portalledElementRef.current : null;\n};\n","/* eslint-disable deprecation/deprecation */\nimport React, {Suspense, useEffect} from 'react';\n\nimport {useQueryClient} from '@tanstack/react-query';\nimport {useAtom, useAtomValue, useSetAtom} from 'jotai';\nimport {useIntl} from 'react-intl';\nimport styled from 'styled-components';\n\nimport {Spinner} from '@dropbox/dig-components/progress_indicators';\nimport {Truncate} from '@dropbox/dig-components/truncate';\nimport {Text} from '@dropbox/dig-components/typography';\n\nimport {BasicAddOnUpsellModal} from '~/components/add_on_upsell_modal';\nimport {GuestLogInForm} from '~/components/guest_log_in_form';\nimport {ManageAccessModal} from '~/components/manage_access_modal';\nimport {OnboardingWelcome} from '~/components/onboarding_v2/onboarding_welcome';\nimport {OnboardingWelcomeForVideo} from '~/components/onboarding_v2/onboarding_welcome_for_video';\nimport {useGrantBook} from '~/components/password_cache_provider';\nimport type {VersionStatus} from '~/components/status/status';\nimport {StatusDropdown} from '~/components/status/status_dropdown';\nimport {color, spacing} from '~/components/styled';\nimport {SyncCommentsProvider} from '~/components/sync_comments_context';\nimport {\n SMALL_SCREEN_HEIGHT_BREAKPOINT,\n SMALL_SCREEN_WIDTH_BREAKPOINT,\n useViewport,\n} from '~/components/viewport_context';\nimport {getTasksForItem, MediaType} from '~/lib/api';\nimport {useGetManagePeopleInfoForAssetVersionQuery} from '~/lib/api_queries';\nimport {isAVType, isImageLike} from '~/lib/helpers';\nimport {lazy} from '~/lib/lazy';\nimport {replayApi} from '~/lib/query_client';\nimport type {UploadInfo} from '~/lib/uploads/types';\nimport {useIsLiveCollabDisabled} from '~/lib/utils';\nimport {CommonTitle} from '~/pages/layout/components/common_header';\nimport {AnnotationsProvider} from '~/pages/viewer_page/annotations_context';\nimport {CommentsProvider, useCommentsContext} from '~/pages/viewer_page/comments_context';\nimport {ImageViewer} from '~/pages/viewer_page/components/image_viewer';\nimport PdfViewer from '~/pages/viewer_page/components/pdf_viewer';\nimport {VersionSelector} from '~/pages/viewer_page/components/versions/versions_dropdown';\nimport {useVersionsContext} from '~/pages/viewer_page/components/versions_context';\nimport {PlaybackLengthSnackbar} from '~/pages/viewer_page/components/video_controls/playback_length_indicators';\nimport {VideoViewer} from '~/pages/viewer_page/components/video_viewer/video_viewer';\nimport {ViewerSidebar} from '~/pages/viewer_page/components/viewer_sidebar';\nimport {ViewerTopRow} from '~/pages/viewer_page/components/viewer_top_row';\nimport {ImageViewerProvider} from '~/pages/viewer_page/image_viewer_context';\nimport {VideoViewerProvider} from '~/pages/viewer_page/video_viewer_context';\nimport {useViewerPageContext} from '~/pages/viewer_page/viewer_page_context';\nimport {selectedDraftCommentAndFrameAtom} from '~/state/draft_comments';\nimport {thumbnailSidebarDisplayStateAtom} from '~/state/pdf_viewer_state';\nimport {currentTaskStateAtom, loadingTaskStateAtom} from '~/state/task';\nimport {viewNewUploadFunctionAtom} from '~/state/uploads';\nimport {\n modifyPeopleModalIsOpenAtom,\n NavigationSidebarDisplayState,\n upsellModalIsOpenAtom,\n viewerAtom,\n viewerBrowseToFolderAtom,\n ViewerSidebarDisplayState,\n viewerSidebarDisplayStateAtom,\n} from '~/state/viewer';\nimport {isInExtension, isInWebView} from '~/use_extensions';\n\nimport {NewThreadComposer} from './components/comments/comment_composers/comment_composers';\nimport {FileSharedSnackbar} from './components/comments/comment_composers/file_shared_snackbar';\nimport {CommentErrorBanner} from './components/comments/comments_error_banner';\nimport {useTeamProjectShareRecipients} from './components/comments/use_team_project_share_recipients';\nimport {PortalledSyncCollabEntryPoint} from './components/sync_collab/sync_collab_entrypoint';\nimport {LeftNavSubtitle} from './viewer_page_header';\n\nconst PDFThumbnailSidebar = lazy(\n () => import(/* webpackChunkName: 'pdf-viewer' */ './components/documents/pdf_thumbnail_sidebar'),\n);\n\ninterface PageContainerDivProps {\n $thumbnailSidebarOpen: boolean;\n}\n\nconst PageContainer = styled.div<PageContainerDivProps>`\n margin-left: ${({$thumbnailSidebarOpen}) => ($thumbnailSidebarOpen ? 200 : 0)}px;\n display: flex;\n height: 100%;\n overflow: hidden;\n @media screen and (max-width: ${SMALL_SCREEN_WIDTH_BREAKPOINT}px) {\n height: 100%;\n flex-direction: column;\n overflow: visible;\n }\n`;\n\nPageContainer.displayName = 'PageContainer';\n\nconst ViewerWrapper = styled.div<{$isVersionLoading: boolean; $isImageViewer: boolean}>`\n flex-grow: 1;\n min-width: 0;\n padding: ${({$isImageViewer, $isVersionLoading}) =>\n $isImageViewer && !$isVersionLoading\n ? `0 ${spacing('Micro Large')} ${spacing('Micro Large')}`\n : spacing('Micro Large')};\n position: relative;\n background-color: ${({$isImageViewer}) => ($isImageViewer ? '#1e1919' : 'transparent')};\n\n &.panelMode {\n padding: 0;\n }\n\n @media screen and (max-width: ${SMALL_SCREEN_WIDTH_BREAKPOINT}px) {\n padding: 0;\n background-color: ${color('Background Raised')};\n flex-grow: 0;\n }\n @media screen and (max-width: ${SMALL_SCREEN_WIDTH_BREAKPOINT}px) and (max-height: ${SMALL_SCREEN_HEIGHT_BREAKPOINT}px) {\n flex-grow: 0;\n }\n\n display: flex;\n flex-direction: column;\n align-items: center;\n`;\n\nconst MobileTitleHeaderContainer = styled.div`\n background: var(--dig-color__background__base);\n z-index: 1; // Required to sit above images when zoomed\n`;\n\nconst MobileTitle = styled(CommonTitle)`\n display: inline-flex;\n gap: ${spacing('Micro Small')};\n align-items: center;\n margin: 0;\n padding: ${spacing('Micro Large')} ${spacing('Micro Large')} 0;\n overflow-x: hidden;\n white-space: nowrap;\n`;\n\nconst MobileLeftNavSubtitleArea = styled.div`\n margin-left: ${spacing('Micro Large')};\n margin-top: ${spacing('Micro Small')};\n`;\n\nconst MobileSidebarWrapper = styled.div`\n display: flex;\n flex-direction: column;\n overflow-y: auto;\n`;\n\ntype MobiletitleHeaderProps = {\n title: string;\n folderName?: string;\n extensionType?: string;\n};\n\nexport const MobileTitleHeader = ({title, folderName, extensionType}: MobiletitleHeaderProps) => {\n return (\n <MobileTitleHeaderContainer>\n <MobileTitle>\n <Truncate data-testid=\"common-title\" maxWidth={250}>\n {title}\n </Truncate>\n <Text color=\"subtle\" size=\"xsmall\">\n {extensionType}\n </Text>\n </MobileTitle>\n {folderName && (\n <MobileLeftNavSubtitleArea>\n <LeftNavSubtitle folderName={folderName} />\n </MobileLeftNavSubtitleArea>\n )}\n </MobileTitleHeaderContainer>\n );\n};\n\nViewerWrapper.displayName = 'ViewerWrapper';\n\nconst ViewerPageContent = ({areCommentsEnabled}: {areCommentsEnabled: boolean}) => {\n const queryClient = useQueryClient();\n\n const {isGuestModalOpen, setIsGuestModalOpen, mediaMetadata, shareToken} = useViewerPageContext();\n const versionsContext = useVersionsContext();\n const {pendingDrawing, loggingClient} = useViewerPageContext();\n const {createThread, threads, isInitialized} = useCommentsContext();\n\n const {isSmallScreenSize, isMobileDevice} = useViewport();\n const [viewerSidebarDisplayState, setViewerSidebarDisplayState] = useAtom(\n viewerSidebarDisplayStateAtom,\n );\n const {navigationSidebarDisplayState} = useAtomValue(viewerAtom);\n const thumbnailSidebarDisplayState = useAtomValue(thumbnailSidebarDisplayStateAtom);\n\n const browseToFolder = useSetAtom(viewerBrowseToFolderAtom);\n const useImageViewer = mediaMetadata.type == 'image';\n const extensionType = mediaMetadata.fileExtension.toUpperCase().replace(/\\./g, '');\n\n const managePeopleInfoQuery = useGetManagePeopleInfoForAssetVersionQuery(mediaMetadata);\n const [upsellModalIsOpen, setUpsellModalIsOpen] = useAtom(upsellModalIsOpenAtom);\n const [modifyPeopleModalIsOpen, setModifyPeopleModalIsOpen] = useAtom(\n modifyPeopleModalIsOpenAtom,\n );\n\n const shareRecipients = useTeamProjectShareRecipients(mediaMetadata);\n\n const showUpsellModal = !isMobileDevice;\n\n // for upload drawer\n const setViewNewUploadFunction = useSetAtom(viewNewUploadFunctionAtom);\n useEffect(() => {\n setViewNewUploadFunction({\n fn: (upload: UploadInfo) => {\n if (versionsContext.areVersionsEnabled && upload.videoId) {\n versionsContext.navigateToNewMedia(upload.videoId, upload.versionId);\n }\n },\n });\n\n return () => {\n setViewNewUploadFunction({fn: null});\n };\n }, [setViewNewUploadFunction, versionsContext]);\n\n React.useEffect(() => {\n const hasNonReactionComments = threads.some((thread) => !thread.isQuickReaction);\n\n if (isInExtension()) {\n setViewerSidebarDisplayState({\n viewerSidebarDisplayState: ViewerSidebarDisplayState.REDCARPET,\n isManuallySet: false,\n });\n } else if (versionsContext.isSharePage) {\n if (!areCommentsEnabled) {\n setViewerSidebarDisplayState({\n viewerSidebarDisplayState: ViewerSidebarDisplayState.DISABLED,\n isManuallySet: false,\n });\n } else if (isSmallScreenSize) {\n // If comments are enabled, we should always show them on mobile as there is no sidebar to expand/collapse\n setViewerSidebarDisplayState({\n viewerSidebarDisplayState: ViewerSidebarDisplayState.SHOWING,\n isManuallySet: false,\n });\n } else {\n if (isInitialized) {\n setViewerSidebarDisplayState({\n viewerSidebarDisplayState:\n threads.length && hasNonReactionComments\n ? ViewerSidebarDisplayState.SHOWING\n : ViewerSidebarDisplayState.HIDDEN,\n isManuallySet: false,\n });\n }\n }\n } else {\n if (threads.length === 0 || !hasNonReactionComments) {\n setViewerSidebarDisplayState({\n viewerSidebarDisplayState: ViewerSidebarDisplayState.HIDDEN,\n isManuallySet: false,\n });\n } else if (navigationSidebarDisplayState === NavigationSidebarDisplayState.SHOWING) {\n // Do nothing. (If navigation sidebar is open, we do not want to automatically close.)\n } else {\n setViewerSidebarDisplayState({\n viewerSidebarDisplayState: ViewerSidebarDisplayState.SHOWING,\n isManuallySet: false,\n });\n }\n }\n // We only want this to set the initial sidebar state, so it should run only when the comment thread initialization changes\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isInitialized]);\n\n React.useEffect(() => {\n if (isInExtension()) {\n setViewerSidebarDisplayState({\n viewerSidebarDisplayState: ViewerSidebarDisplayState.REDCARPET,\n isManuallySet: false,\n });\n }\n }, [setViewerSidebarDisplayState]);\n\n const showCommmentComposer =\n viewerSidebarDisplayState !== ViewerSidebarDisplayState.DISABLED &&\n viewerSidebarDisplayState !== ViewerSidebarDisplayState.REDCARPET;\n\n const composer = React.useMemo(() => {\n return showCommmentComposer && <NewThreadComposer panelMode={false} />;\n }, [showCommmentComposer]);\n\n const [taskState, setTaskState] = useAtom(currentTaskStateAtom);\n const setLoadingTask = useSetAtom(loadingTaskStateAtom);\n const grantBook = useGrantBook(shareToken);\n\n React.useEffect(() => {\n (async () => {\n const updated_task = await getTasksForItem(mediaMetadata.videoId, shareToken, grantBook);\n const async_task_state = {\n isLoading: false,\n videoId: mediaMetadata.videoId,\n task: updated_task,\n };\n setTaskState(async_task_state);\n })();\n }, [grantBook, setTaskState, shareToken, mediaMetadata.videoId]);\n\n React.useEffect(() => {\n if (!taskState.isLoading && mediaMetadata.videoId !== taskState.videoId) {\n setLoadingTask();\n }\n }, [setLoadingTask, taskState, mediaMetadata.videoId]);\n\n React.useEffect(() => {\n if (mediaMetadata.folderId && mediaMetadata.folderName) {\n browseToFolder({\n folder: {\n id: mediaMetadata.folderId,\n name: mediaMetadata.folderName,\n },\n isInitialLoad: true,\n });\n }\n }, [browseToFolder, mediaMetadata.folderId, mediaMetadata.folderName]);\n\n const videoRef = React.useRef<HTMLDivElement | null>(null);\n const className = isInExtension() ? 'panelMode' : '';\n\n const selectedDraftCommentAndFrame = useAtomValue(selectedDraftCommentAndFrameAtom);\n\n const onClose = React.useCallback(\n (pendingPost?: boolean) => {\n setIsGuestModalOpen(false);\n if (pendingPost && selectedDraftCommentAndFrame) {\n createThread(selectedDraftCommentAndFrame.draft, selectedDraftCommentAndFrame.frameRange);\n }\n },\n [createThread, selectedDraftCommentAndFrame, setIsGuestModalOpen],\n );\n\n return (\n <>\n {mediaMetadata.type === 'document' && (\n <Suspense fallback={null}>\n <PDFThumbnailSidebar pdfMetadata={mediaMetadata} />\n </Suspense>\n )}\n <PageContainer\n $thumbnailSidebarOpen={\n mediaMetadata.mediaType === MediaType.Document &&\n thumbnailSidebarDisplayState === 'showing'\n }\n id=\"main\"\n >\n <ViewerWrapper\n $isImageViewer={useImageViewer}\n $isVersionLoading={false}\n className={className}\n ref={videoRef}\n >\n {useImageViewer ? (\n <ImageViewer />\n ) : mediaMetadata.mediaType === MediaType.Document ? (\n <PdfViewer />\n ) : (\n <VideoViewer />\n )}\n {!isSmallScreenSize && composer}\n </ViewerWrapper>\n {!isSmallScreenSize &&\n viewerSidebarDisplayState !== ViewerSidebarDisplayState.DISABLED &&\n viewerSidebarDisplayState !== ViewerSidebarDisplayState.REDCARPET && <ViewerSidebar />}\n {isSmallScreenSize && (\n <MobileSidebarWrapper>\n <MobileTitleHeader\n extensionType={extensionType}\n folderName={mediaMetadata.folderName}\n title={mediaMetadata.projectName}\n />\n {viewerSidebarDisplayState !== ViewerSidebarDisplayState.DISABLED &&\n viewerSidebarDisplayState !== ViewerSidebarDisplayState.REDCARPET && (\n <ViewerSidebar />\n )}\n {composer}\n </MobileSidebarWrapper>\n )}\n <GuestLogInForm\n isGuestModalOpen={isGuestModalOpen}\n loggingClient={loggingClient}\n onClose={onClose}\n pendingDrawing={pendingDrawing}\n />\n <ManageAccessModal\n accessLevel={mediaMetadata.accessLevel ?? 'other'}\n allowSuperAdminRights={managePeopleInfoQuery.data?.allow_super_admin_rights}\n logEvent={loggingClient.logEvent.bind(loggingClient)}\n modalType=\"manage_access_combo\"\n open={modifyPeopleModalIsOpen}\n requestClose={() => {\n setModifyPeopleModalIsOpen(false);\n }}\n settingsChangeCallback={() => {\n queryClient.invalidateQueries({\n queryKey: replayApi.getManagePeopleInfoForAssetVersion(mediaMetadata.id),\n });\n }}\n shareRecipients={shareRecipients}\n teamFolderId={mediaMetadata.folderId || ''}\n teamFolderName={mediaMetadata.teamProjectName || ''}\n />\n {showUpsellModal && (\n <BasicAddOnUpsellModal\n clickSource=\"post_comment_menu\"\n onClose={() => {\n setUpsellModalIsOpen(false);\n }}\n open={upsellModalIsOpen}\n variant=\"team_only_commenting\"\n />\n )}\n <PlaybackLengthSnackbar />\n <CommentErrorBanner />\n <FileSharedSnackbar />\n </PageContainer>\n </>\n );\n};\n\nconst MainContent = styled.div`\n align-items: center;\n display: flex;\n height: 100%;\n justify-content: center;\n width: 100%;\n`;\n\nconst LoadingWrapper = styled.div`\n align-items: center;\n display: flex;\n flex-direction: column;\n`;\n\nconst PendingVersionActionViewer = ({\n loadingText,\n previousMediaType,\n versionNumber,\n versionStatus,\n videoId,\n}: {\n previousMediaType: MediaType;\n versionStatus: VersionStatus;\n versionNumber: number;\n loadingText: string;\n videoId: string;\n}) => {\n const {mediaMetadata, loggingClient} = useViewerPageContext();\n return (\n <PageContainer $thumbnailSidebarOpen={false}>\n <ViewerWrapper $isImageViewer={isImageLike(previousMediaType)} $isVersionLoading={true}>\n <ViewerTopRow\n statusDropdownSlot={\n <StatusDropdown\n buttonSize=\"standard\"\n buttonType=\"transparent\"\n disabled\n versionStatus={versionStatus}\n />\n }\n versionSelectorSlot={\n <VersionSelector\n currentVersionNumber={versionNumber}\n disabled\n loggingClient={loggingClient}\n mediaMetadata={mediaMetadata}\n />\n }\n visible={true}\n />\n <MainContent>\n <LoadingWrapper>\n <Spinner />\n <p>\n <Text>{loadingText}</Text>\n </p>\n </LoadingWrapper>\n </MainContent>\n </ViewerWrapper>\n </PageContainer>\n );\n};\n\nexport const VersionsAwareViewerPageContent = ({\n areCommentsEnabled,\n}: {\n areCommentsEnabled: boolean;\n}) => {\n const queryClient = useQueryClient();\n const versionsContext = useVersionsContext();\n const {mediaMetadata, shareToken} = useViewerPageContext();\n const {mediaType, videoId, id: videoVersionId} = mediaMetadata;\n const isLiveCollabDisabled = useIsLiveCollabDisabled();\n const browseToFolder = useSetAtom(viewerBrowseToFolderAtom);\n\n // On new asset load, invalidate this query so we fetch up to date share permissions\n React.useEffect(() => {\n queryClient.invalidateQueries({\n queryKey: replayApi.getManagePeopleInfoForAssetVersion(mediaMetadata.id),\n });\n }, [mediaMetadata.id, queryClient]);\n\n const ViewerProvider =\n mediaMetadata.type === 'document'\n ? React.Fragment\n : mediaMetadata.type === 'image'\n ? ImageViewerProvider\n : VideoViewerProvider;\n const intl = useIntl();\n\n React.useEffect(() => {\n if (mediaMetadata.folderId) {\n browseToFolder({\n folder: {\n id: mediaMetadata.folderId,\n name: mediaMetadata.folderName,\n },\n isInitialLoad: true,\n shareToken,\n });\n }\n }, [browseToFolder, mediaMetadata.folderId, mediaMetadata.folderName, shareToken]);\n\n if (\n versionsContext.areVersionsEnabled === false ||\n versionsContext.pendingVersionAction === 'none'\n ) {\n return (\n <AnnotationsProvider>\n <CommentsProvider>\n <SyncCommentsProvider videoId={videoId} videoVersionId={videoVersionId}>\n <ViewerProvider>\n {mediaType === MediaType.Image ? (\n <OnboardingWelcome />\n ) : mediaType === MediaType.Video ? (\n <OnboardingWelcomeForVideo />\n ) : null}\n <ViewerPageContent areCommentsEnabled={areCommentsEnabled} />\n {!isLiveCollabDisabled && isAVType(mediaType) && !isInWebView() && (\n <PortalledSyncCollabEntryPoint />\n )}\n </ViewerProvider>\n </SyncCommentsProvider>\n </CommentsProvider>\n </AnnotationsProvider>\n );\n }\n\n const {currentVersionNumber, pendingVersionAction, currentVersionStatus} = versionsContext;\n\n return (\n <PendingVersionActionViewer\n loadingText={\n pendingVersionAction === 'create'\n ? intl.formatMessage({\n defaultMessage: 'Creating new version…',\n id: 'bQXeQ3',\n description: 'Text to display while a new version is being created.',\n })\n : intl.formatMessage(\n {\n defaultMessage: 'Loading V{currentVersionNumber}…',\n id: 'xV+oBB',\n description: 'Text to display while a version is being loaded.',\n },\n {\n currentVersionNumber: currentVersionNumber,\n },\n )\n }\n previousMediaType={mediaType}\n versionNumber={currentVersionNumber}\n versionStatus={currentVersionStatus}\n videoId={videoId}\n />\n );\n};\n","import React from 'react';\n\nimport {useAtomValue, useSetAtom} from 'jotai';\nimport {FormattedMessage} from 'react-intl';\nimport styled from 'styled-components';\n\nimport type {reel} from '@dropbox/api-v2-client';\nimport {Breadcrumb} from '@dropbox/dig-components/breadcrumb';\nimport {Truncate} from '@dropbox/dig-components/truncate';\nimport {Text, Title} from '@dropbox/dig-components/typography';\nimport {UIIcon} from '@dropbox/dig-icons';\nimport {CloseLine} from '@dropbox/dig-icons/assets';\n\nimport {IconButton} from '~/components/button';\nimport {SkeletonRectangle} from '~/components/skeleton';\nimport {\n NavigationSidebarDisplayState,\n navigationSidebarDisplayStateAtom,\n viewerBrowseToFolderAtom,\n viewerGetBrowseStateAtom,\n viewerGetCurrentFolderAtom,\n} from '~/state/viewer';\n\nimport {useViewerPageLoggingClient} from '../../viewer_page/viewer_page_logging_context';\n\nconst HeaderContainer = styled.div`\n border-bottom: 1px solid var(--dig-color__border__subtle);\n display: flex;\n flex-direction: column;\n padding: 24px 16px;\n`;\n\nconst HeaderTitle = styled(Title)`\n margin: 4px 0 0;\n`;\n\nconst HeaderTopRowContainer = styled.div`\n display: flex;\n flex-direction: row;\n align-items: center;\n`;\n\nconst BreadcrumbContainer = styled.div`\n flex-grow: 1;\n max-width: 100%;\n`;\n\nconst HeaderLoadingBreadcrumbsNonMemo = () => {\n return (\n <BreadcrumbContainer>\n <SkeletonRectangle style={{width: 160}} />\n </BreadcrumbContainer>\n );\n};\nconst HeaderLoadingBreadcrumbs = React.memo(HeaderLoadingBreadcrumbsNonMemo);\n\nconst HeaderBreadcrumbsNonMemo = () => {\n const {folderChain} = useAtomValue(viewerGetBrowseStateAtom);\n const browseToFolder = useSetAtom(viewerBrowseToFolderAtom);\n const loggingClient = useViewerPageLoggingClient();\n\n if (folderChain.length === 1) {\n return (\n <BreadcrumbContainer>\n <Text color=\"faint\">\n <FormattedMessage\n defaultMessage=\"More files in this project\"\n description=\"Text that displays in place of breadcrumbs in a navigation sidebar when a user is at the top folder level\"\n id=\"Ro7KIr\"\n />\n </Text>\n </BreadcrumbContainer>\n );\n }\n\n const renderBreadcrumb = (folder: reel.Folder): React.ReactElement => {\n const onBrowse = () => {\n // eslint-disable-next-line deprecation/deprecation\n loggingClient.logEvent('viewer_navbar_navigate_action', {action: 'select_breadcrumb'});\n browseToFolder({folder});\n };\n\n return (\n <Breadcrumb.Link\n isCurrentPath={folder.id === folderChain[folderChain.length - 1].id}\n key={folder.id}\n onClick={onBrowse}\n >\n {folder.name}\n </Breadcrumb.Link>\n );\n };\n\n return (\n <BreadcrumbContainer>\n <Breadcrumb>{folderChain.map(renderBreadcrumb)}</Breadcrumb>\n </BreadcrumbContainer>\n );\n};\nconst HeaderBreadcrumbs = React.memo(HeaderBreadcrumbsNonMemo);\n\nconst HeaderTopRowNonMemo = () => {\n const setNavigationSidebarDisplayState = useSetAtom(navigationSidebarDisplayStateAtom);\n const loggingClient = useViewerPageLoggingClient();\n\n const onHide = () => {\n // eslint-disable-next-line deprecation/deprecation\n loggingClient.logEvent('open_viewer_navbar');\n setNavigationSidebarDisplayState(NavigationSidebarDisplayState.HIDDEN);\n };\n\n return (\n <HeaderTopRowContainer>\n <React.Suspense fallback={<HeaderLoadingBreadcrumbs />}>\n <HeaderBreadcrumbs />\n </React.Suspense>\n <IconButton onClick={onHide} variant=\"transparent\">\n <UIIcon size=\"large\" src={CloseLine} />\n </IconButton>\n </HeaderTopRowContainer>\n );\n};\nconst HeaderTopRow = React.memo(HeaderTopRowNonMemo);\n\nconst NavigationSidebarHeaderNonMemo = () => {\n const currentFolder = useAtomValue(viewerGetCurrentFolderAtom);\n\n return (\n <HeaderContainer>\n <HeaderTopRow />\n <HeaderTitle>\n <Truncate tooltipControlProps={{placement: 'bottom'}}>{currentFolder.name}</Truncate>\n </HeaderTitle>\n </HeaderContainer>\n );\n};\nexport const NavigationSidebarHeader = React.memo(NavigationSidebarHeaderNonMemo);\n","import React from 'react';\n\nimport {FormattedMessage} from 'react-intl';\nimport styled from 'styled-components';\n\nimport {Tooltip} from '@dropbox/dig-components/tooltips';\nimport {Truncate} from '@dropbox/dig-components/truncate';\nimport {Text} from '@dropbox/dig-components/typography';\nimport {UIIcon} from '@dropbox/dig-icons';\nimport {CommentLine, GifLine, ImageLine} from '@dropbox/dig-icons/assets';\n\nimport {MediaType} from '~/lib/api';\nimport {isAVType, isImageLike} from '~/lib/helpers';\nimport {StatusLabel} from '~/pages/browse_page/components/common';\nimport {AudioPoster, ImagePoster, VideoPoster} from '~/pages/browse_page/components/tiles/poster';\n\nconst MediaTooltip = styled(Tooltip.Control)`\n cursor: pointer;\n\n & .dig-Tooltip-content {\n padding: 0;\n }\n`;\n\nconst TooltipContent = styled.div`\n padding: 8px;\n width: 200px;\n`;\n\nconst PosterWrapper = styled.div<{$background?: string; $hovered?: boolean}>`\n align-items: center;\n background: ${({$background}) => $background || 'none'};\n display: flex;\n height: 105px;\n justify-content: center;\n opacity: ${({$hovered}) => ($hovered ? 0.5 : 1)};\n position: relative;\n width: 200px;\n`;\n\nconst MediaTypeAndDurationWrapper = styled.div`\n align-items: center;\n background: var(--dig-color__background__base);\n color: var(--dig-color__text__base);\n display: flex;\n left: 8px;\n position: absolute;\n top: 8px;\n z-index: 1;\n`;\n\nconst AVTypeAndDurationWrapper = styled(MediaTypeAndDurationWrapper)`\n padding: 1px 5px;\n`;\nconst ImageTypeAndDurationWrapper = styled(MediaTypeAndDurationWrapper)`\n padding: 8px;\n`;\n\nconst MediaTitle = styled.div`\n color: var(--color__inverse__standard__text);\n font-size: 12px;\n font-weight: 500;\n margin-top: 6px;\n`;\n\nconst MediaSubtitle = styled.div`\n color: var(--dig-color__secondary__on-surface);\n font-size: 12px;\n font-weight: 400;\n margin-bottom: 16px;\n`;\n\nconst FooterContainer = styled.div`\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n`;\n\nconst IconsContainer = styled.div`\n display: flex;\n flex-direction: row;\n`;\n\nconst IconAndTextContainer = styled.div`\n display: flex;\n flex-direction: row;\n font-size: 12px;\n margin-right: 6px;\n`;\n\nconst StyledText = styled.span`\n color: var(--dig-color__secondary__on-surface);\n font-size: 10px;\n line-height: 15px;\n`;\n\ntype NavigationSidebarMediaPreviewTooltipProps = {\n commentCount: number;\n mediaName: string;\n mediaType?: MediaType;\n onClick: () => void;\n open: boolean;\n status?: number;\n thumbnailUrl?: string;\n timeForDisplay: string;\n triggerRef: React.RefObject<HTMLDivElement>;\n updatedAt: string;\n versionNumber?: number;\n};\n\nconst NavigationSidebarMediaPreviewTooltipNonMemo = ({\n commentCount,\n mediaName,\n mediaType,\n onClick,\n open,\n status,\n thumbnailUrl,\n timeForDisplay,\n triggerRef,\n updatedAt,\n versionNumber,\n}: NavigationSidebarMediaPreviewTooltipProps) => {\n return (\n <MediaTooltip\n auto\n onClick={onClick}\n open={open}\n placement=\"right\"\n triggerRef={triggerRef}\n variant=\"rich\"\n >\n <TooltipContent>\n <PosterWrapper>\n <Text size=\"small\" variant=\"label\">\n {isImageLike(mediaType) ? (\n <ImageTypeAndDurationWrapper>\n <UIIcon size=\"small\" src={ImageLine} />\n </ImageTypeAndDurationWrapper>\n ) : isAVType(mediaType) ? (\n <AVTypeAndDurationWrapper>{timeForDisplay}</AVTypeAndDurationWrapper>\n ) : null}\n </Text>\n {mediaType === MediaType.Video ? (\n <VideoPoster src={thumbnailUrl} />\n ) : mediaType === MediaType.Audio ? (\n <AudioPoster waveformUrl={thumbnailUrl} />\n ) : (\n <ImagePoster src={thumbnailUrl} variant=\"small\" />\n )}\n </PosterWrapper>\n <MediaTitle>\n <Truncate>{mediaName}</Truncate>\n </MediaTitle>\n <MediaSubtitle>{updatedAt}</MediaSubtitle>\n <FooterContainer>\n <IconsContainer>\n <IconAndTextContainer>\n <UIIcon size=\"small\" src={CommentLine} />\n <StyledText>{commentCount}</StyledText>\n </IconAndTextContainer>\n {versionNumber && (\n <IconAndTextContainer>\n <UIIcon size=\"small\" src={GifLine} />\n <StyledText>\n <FormattedMessage\n defaultMessage=\"V{versionNumber}\"\n description=\"Text describing the version number for media preview tooltips in the project navigation sidebar.\"\n id=\"f/c6H5\"\n values={{versionNumber: versionNumber}}\n />\n </StyledText>\n </IconAndTextContainer>\n )}\n </IconsContainer>\n <StatusLabel\n dotSize={8}\n dotTextSpacing={8}\n status={status || 0}\n textColor=\"faint\"\n textInverse\n textSize=\"small\"\n />\n </FooterContainer>\n </TooltipContent>\n </MediaTooltip>\n );\n};\nexport const NavigationSidebarMediaPreviewTooltip = React.memo(\n NavigationSidebarMediaPreviewTooltipNonMemo,\n);\n","import React from 'react';\n\nimport {useAtomValue, useSetAtom} from 'jotai';\nimport {FormattedMessage, useIntl} from 'react-intl';\nimport styled from 'styled-components';\n\nimport type {reel} from '@dropbox/api-v2-client';\nimport {Truncate} from '@dropbox/dig-components/truncate';\nimport {Text} from '@dropbox/dig-components/typography';\nimport {UIIcon} from '@dropbox/dig-icons';\nimport {FolderLine, GifLine} from '@dropbox/dig-icons/assets';\n\nimport {SkeletonRectangle} from '~/components/skeleton';\nimport {useViewport} from '~/components/viewport_context';\nimport {useReelAppGlobalState} from '~/context';\nimport {MediaType, mediaTypeTagToMediaType} from '~/lib/api';\nimport {isAVType, isImageLike} from '~/lib/helpers';\nimport {JoinState} from '~/lib/sync_collab/types';\nimport {getTimeForDisplay, getUploadedTimeForDisplay} from '~/lib/time';\nimport {\n findMediaProjectLatestUpdateTime,\n isUploadedFolder,\n} from '~/pages/browse_page/components/common';\nimport {NavigationSidebarMediaPreviewTooltip} from '~/pages/browse_page/components/navigation_sidebar_media_preview_tooltip';\nimport {AudioPoster, ImagePoster, VideoPoster} from '~/pages/browse_page/components/tiles/poster';\nimport {useVersionsContext} from '~/pages/viewer_page/components/versions_context';\nimport {PlayFill} from '~/pages/viewer_page/components/video_controls/player_icons';\nimport {\n NavigationSidebarDisplayState,\n navigationSidebarDisplayStateAtom,\n viewerBrowseToFolderAtom,\n viewerReadBrowseListingAtom,\n} from '~/state/viewer';\n\nimport {useSyncCollabSharedState} from '../../viewer_page/components/sync_collab/shared_state';\nimport {useViewerPageLoggingClient} from '../../viewer_page/viewer_page_logging_context';\n\nconst ListContainer = styled.div`\n display: flex;\n flex-direction: column;\n`;\n\nconst Tile = styled.div<{$hovered?: boolean; $loading?: boolean; $selected?: boolean}>`\n display: flex;\n flex-direction: row;\n padding: 12px 16px;\n border-bottom: 1px solid var(--dig-color__border__subtle);\n cursor: ${({$loading, $selected}) => ($loading || $selected ? 'default' : 'pointer')};\n background: ${({$hovered, $selected}) =>\n $selected\n ? 'rgba(57, 132, 255, 0.16)'\n : $hovered\n ? 'var(--dig-color__opacity__surface)'\n : 'transparent'};\n`;\n\nconst PosterContainer = styled.div`\n position: relative;\n`;\n\nconst PosterWrapper = styled.div<{$background?: string; $hovered?: boolean}>`\n align-items: center;\n background: ${({$background}) => $background || 'none'};\n display: flex;\n height: 33px;\n justify-content: center;\n min-width: 50px;\n opacity: ${({$hovered}) => ($hovered ? 0.5 : 1)};\n position: relative;\n width: 50px;\n`;\n\nconst HoverPlayIcon = styled.div`\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--dig-color__text__base);\n`;\n\nconst PosterInfoWrapper = styled.div`\n display: flex;\n flex-direction: column;\n margin-left: 8px;\n overflow: hidden;\n`;\n\nconst TileTitle = styled(Text)<{$isSmallScreenSize: boolean}>`\n font-size: ${({$isSmallScreenSize}) => ($isSmallScreenSize ? '14px' : '12px')};\n font-weight: 500;\n line-height: 14px;\n`;\n\nconst TileSubtitle = styled.div<{$isSmallScreenSize: boolean}>`\n color: var(--dig-color__text__subtle);\n font-size: ${({$isSmallScreenSize}) => ($isSmallScreenSize ? '12px' : '10px')};\n`;\n\nconst FileCountText = styled(Text)`\n color: var(--dig-color__text__subtle);\n font-size: 12px;\n`;\n\nconst SelectedText = styled(Text)`\n font-size: 10px;\n`;\n\nconst VersionAndDurationWrapper = styled.div`\n display: flex;\n flex-direction: row;\n margin: 4px 0 0 -2px;\n`;\n\nconst StyledText = styled.span`\n color: var(--dig-color__text__subtle);\n font-size: 10px;\n line-height: 15px;\n`;\n\nconst Separator = styled.span`\n margin: 0 4px;\n`;\n\ntype ProjectTileProps = {\n commentCount: number;\n isSmallScreenSize: boolean;\n mediaName: string;\n mediaType?: MediaType;\n onClick?: () => void;\n selected: boolean;\n status?: number;\n thumbnailUrl?: string;\n timeForDisplay: string;\n updatedAt: string;\n versionNumber?: number;\n};\nconst ProjectTileNonMemo = ({\n commentCount,\n isSmallScreenSize,\n mediaName,\n mediaType,\n onClick,\n selected,\n status,\n thumbnailUrl,\n timeForDisplay,\n updatedAt,\n versionNumber,\n}: ProjectTileProps) => {\n const triggerRef = React.useRef<HTMLDivElement>(null);\n const [isHovered, setIsHovered] = React.useState(false);\n const intl = useIntl();\n\n const avActiveText = intl.formatMessage({\n defaultMessage: 'Now playing',\n id: 'a6ooWj',\n description: 'Message on a project navigation tile that designates the current active project',\n });\n const imgActiveText = intl.formatMessage({\n defaultMessage: 'Now viewing',\n id: 'wklCzh',\n description: 'Message on a project navigation tile that designates the current active project',\n });\n\n return (\n <div\n onClick={onClick}\n onMouseEnter={() => setIsHovered(!selected)}\n onMouseLeave={() => setIsHovered(false)}\n >\n <Tile $hovered={isHovered} $selected={selected} ref={triggerRef}>\n <PosterContainer>\n <PosterWrapper $hovered={isHovered}>\n {mediaType === MediaType.Video ? (\n <VideoPoster src={thumbnailUrl} />\n ) : mediaType === MediaType.Audio ? (\n <AudioPoster variant=\"small\" waveformUrl={thumbnailUrl} />\n ) : (\n <ImagePoster src={thumbnailUrl} variant=\"small\" />\n )}\n </PosterWrapper>\n {isHovered && (\n <HoverPlayIcon>\n <UIIcon size=\"standard\" src={PlayFill} />\n </HoverPlayIcon>\n )}\n </PosterContainer>\n <PosterInfoWrapper>\n <TileTitle $isSmallScreenSize={isSmallScreenSize}>\n <Truncate>{mediaName}</Truncate>\n </TileTitle>\n <TileSubtitle $isSmallScreenSize={isSmallScreenSize}>\n {selected ? (\n <SelectedText>{isImageLike(mediaType) ? imgActiveText : avActiveText}</SelectedText>\n ) : (\n versionNumber && (\n <VersionAndDurationWrapper>\n <UIIcon size=\"small\" src={GifLine} />\n <StyledText>\n <FormattedMessage\n defaultMessage=\"V{versionNumber}\"\n description=\"Text describing the version number for media in the project navigation sidebar.\"\n id=\"CNYrGY\"\n values={{versionNumber: versionNumber}}\n />\n </StyledText>\n {isAVType(mediaType) ? (\n <StyledText>\n <Separator>·</Separator>\n {timeForDisplay}\n </StyledText>\n ) : null}\n </VersionAndDurationWrapper>\n )\n )}\n </TileSubtitle>\n </PosterInfoWrapper>\n </Tile>\n <NavigationSidebarMediaPreviewTooltip\n commentCount={commentCount}\n mediaName={mediaName}\n mediaType={mediaType}\n onClick={() => setIsHovered(false)}\n open={isHovered}\n status={status}\n thumbnailUrl={thumbnailUrl}\n timeForDisplay={timeForDisplay}\n triggerRef={triggerRef}\n updatedAt={updatedAt}\n versionNumber={versionNumber}\n />\n </div>\n );\n};\nconst ProjectTile = React.memo(ProjectTileNonMemo);\n\ntype FolderTileProps = {\n folderName: string;\n numberOfProjects: number;\n onClick: () => void;\n isSmallScreenSize: boolean;\n};\nconst FolderTileNonMemo = ({\n folderName,\n isSmallScreenSize,\n numberOfProjects,\n onClick,\n}: FolderTileProps) => {\n const intl = useIntl();\n\n const [isHovered, setIsHovered] = React.useState(false);\n\n const fileCountString = intl.formatMessage(\n {\n defaultMessage: '{numberOfProjects} {numberOfProjects, plural, one {file} other {files}}',\n id: 'dzH8/v',\n description: 'Displays how many files are contained within the current folder or project',\n },\n {numberOfProjects},\n );\n\n return (\n <div\n onClick={onClick}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n >\n <Tile $hovered={isHovered} onClick={onClick}>\n <PosterWrapper $background=\"var(--dig-color__background__raised)\">\n <UIIcon color=\"var(--dig-color__border__base)\" src={FolderLine} />\n </PosterWrapper>\n <PosterInfoWrapper>\n <TileTitle $isSmallScreenSize={isSmallScreenSize}>\n <Truncate>{folderName}</Truncate>\n </TileTitle>\n <TileSubtitle $isSmallScreenSize={isSmallScreenSize}>\n <FileCountText>{fileCountString}</FileCountText>\n </TileSubtitle>\n </PosterInfoWrapper>\n </Tile>\n </div>\n );\n};\nconst FolderTile = React.memo(FolderTileNonMemo);\n\ntype LoadingTileProps = {\n opacity?: number;\n};\nconst LoadingTileNonMemo = ({opacity}: LoadingTileProps) => {\n return (\n <Tile $loading style={{opacity: opacity || 1}}>\n <SkeletonRectangle style={{height: 33, width: 50}} />\n <div>\n <SkeletonRectangle style={{height: 12, width: 120, margin: '0 0 8px 8px'}} />\n <SkeletonRectangle style={{height: 10, width: 50, marginLeft: '8px'}} />\n </div>\n </Tile>\n );\n};\nconst LoadingTile = React.memo(LoadingTileNonMemo);\n\nconst NavigationSidebarLoadingListNonMemo = () => {\n return (\n <ListContainer>\n <LoadingTile key=\"tile-loading-skeleton-1\" />\n <LoadingTile key=\"tile-loading-skeleton-2\" opacity={0.8} />\n <LoadingTile key=\"tile-loading-skeleton-3\" opacity={0.4} />\n </ListContainer>\n );\n};\nexport const NavigationSidebarLoadingList = React.memo(NavigationSidebarLoadingListNonMemo);\n\nconst NavigationSidebarListNonMemo = () => {\n const {folders, projects} = useAtomValue(viewerReadBrowseListingAtom);\n const browseToFolder = useSetAtom(viewerBrowseToFolderAtom);\n const {projectId: selectedProjectId} = useVersionsContext();\n const loggingClient = useViewerPageLoggingClient();\n const intl = useIntl();\n const {timeAgoLocale} = useReelAppGlobalState();\n\n const versionsContext = useVersionsContext();\n const navigateToMedia = versionsContext.areVersionsEnabled\n ? versionsContext.navigateToNewMedia\n : () => {};\n const {setJoinState, joinState} = useSyncCollabSharedState();\n const setSidebarState = useSetAtom(navigationSidebarDisplayStateAtom);\n // eslint-disable-next-line deprecation/deprecation\n const {isSmallScreenSize} = useViewport();\n\n const handleProjectClick = (projectWithVideos: reel.ProjectWithVideos) => {\n if (projectWithVideos.project?.id === selectedProjectId) return;\n\n if (projectWithVideos.videos && projectWithVideos.videos.length > 0) {\n if (projectWithVideos.videos[0].video_id) {\n navigateToMedia(projectWithVideos.videos[0].video_id);\n // eslint-disable-next-line deprecation/deprecation\n loggingClient.logEvent('viewer_navbar_navigate_action', {action: 'select_file'});\n if ([JoinState.JOINED, JoinState.JOINING].includes(joinState)) {\n setJoinState(JoinState.LEAVING); // TODO - remove this when sync collab supports navigation\n }\n if (isSmallScreenSize) {\n setSidebarState(NavigationSidebarDisplayState.HIDDEN);\n }\n }\n }\n };\n\n const handleFolderClick = (folder: reel.Folder) => {\n // eslint-disable-next-line deprecation/deprecation\n loggingClient.logEvent('viewer_navbar_navigate_action', {action: 'select_folder'});\n browseToFolder({folder});\n };\n\n return (\n <ListContainer>\n {folders.filter(isUploadedFolder).map((folder) => {\n const folderName = folder.name || '';\n const numberOfProjects = folder.num_projects || 0;\n\n return (\n <FolderTile\n folderName={folderName}\n isSmallScreenSize={isSmallScreenSize}\n key={folder.id}\n numberOfProjects={numberOfProjects}\n onClick={() => handleFolderClick(folder)}\n />\n );\n })}\n {projects.map((projectWithVideos) => {\n const project = projectWithVideos.project;\n const media = projectWithVideos.videos?.[0];\n\n if (!project || !media || !media.media_type) {\n return null;\n }\n\n const projectId = project.id;\n const mediaName = project.name || '';\n const mediaType = mediaTypeTagToMediaType(media.media_type);\n const commentCount = media.comments_info?.num_comments || 0;\n const status = media.status;\n const timeForDisplay = getTimeForDisplay(media.video_metadata?.duration_precise);\n const thumbnailUrl =\n mediaType === MediaType.Audio ? media.waveform_url : media.thumbnail_url;\n const updatedAt = getUploadedTimeForDisplay(\n findMediaProjectLatestUpdateTime(projectWithVideos) || new Date(),\n intl,\n timeAgoLocale,\n );\n const versionNumber = media.version_num;\n\n const selected = projectId === selectedProjectId;\n\n return (\n <ProjectTile\n commentCount={commentCount}\n isSmallScreenSize={isSmallScreenSize}\n key={projectId}\n mediaName={mediaName}\n mediaType={mediaType}\n onClick={() => handleProjectClick(projectWithVideos)}\n selected={selected}\n status={status}\n thumbnailUrl={thumbnailUrl}\n timeForDisplay={timeForDisplay}\n updatedAt={updatedAt}\n versionNumber={versionNumber}\n />\n );\n })}\n </ListContainer>\n );\n};\nexport const NavigationSidebarList = React.memo(NavigationSidebarListNonMemo);\n","import React from 'react';\n\nimport {detect} from 'detect-browser';\nimport hotkeys from 'hotkeys-js';\nimport {useAtom, useSetAtom} from 'jotai';\nimport {CSSTransition} from 'react-transition-group';\nimport styled from 'styled-components';\n\nimport {TRANSITION_DURATION_MS} from '~/components/viewport_context';\nimport {\n cleanupNavigationSidebarAtom,\n NavigationSidebarDisplayState,\n navigationSidebarDisplayStateAtom,\n} from '~/state/viewer';\n\nimport {NavigationSidebarHeader} from './navigation_sidebar_header';\nimport {NavigationSidebarList, NavigationSidebarLoadingList} from './navigation_sidebar_list';\nconst Sidebar = styled.div`\n background-color: var(--dig-color__background__subtle);\n border-right: 1px solid var(--dig-color__border__subtle);\n display: block;\n height: 100%;\n overflow-y: auto;\n position: absolute;\n left: -300px;\n top: 0;\n width: 300px;\n z-index: 17; // Navigation left rail is z-index 16\n\n &.enter {\n left: -300px;\n }\n &.enter-active {\n left: 0;\n transition-duration: ${TRANSITION_DURATION_MS}ms;\n }\n &.enter-done {\n left: 0;\n }\n &.exit {\n left: 0;\n }\n &.exit-active {\n left: -300px;\n transition-duration: ${TRANSITION_DURATION_MS}ms;\n }\n &.exit-done {\n left: -300px;\n }\n`;\n\nconst NavigationSidebarNonMemo = () => {\n const browser = detect();\n const [navigationSidebarDisplayState, setNavigationSidebarDisplayState] = useAtom(\n navigationSidebarDisplayStateAtom,\n );\n const cleanup = useSetAtom(cleanupNavigationSidebarAtom);\n\n // reset state on cleanup\n React.useEffect(() => {\n return cleanup;\n }, [cleanup]);\n\n const commandOrControl = browser?.os === 'Mac OS' ? '⌘' : 'Ctrl';\n\n // Attach Cmd + Shift + p to open sidebar\n React.useEffect(() => {\n const toggleSidebar = () =>\n setNavigationSidebarDisplayState(\n navigationSidebarDisplayState === NavigationSidebarDisplayState.SHOWING\n ? NavigationSidebarDisplayState.HIDDEN\n : NavigationSidebarDisplayState.SHOWING,\n );\n\n hotkeys(`${commandOrControl}+Shift+p`, toggleSidebar);\n\n return () => {\n hotkeys.unbind(`${commandOrControl}+Shift+p`, toggleSidebar);\n };\n }, [commandOrControl, navigationSidebarDisplayState, setNavigationSidebarDisplayState]);\n\n return (\n <CSSTransition\n in={navigationSidebarDisplayState === NavigationSidebarDisplayState.SHOWING}\n timeout={TRANSITION_DURATION_MS}\n >\n <Sidebar>\n <NavigationSidebarHeader />\n <React.Suspense fallback={<NavigationSidebarLoadingList />}>\n <NavigationSidebarList />\n </React.Suspense>\n </Sidebar>\n </CSSTransition>\n );\n};\nexport const NavigationSidebar = React.memo(NavigationSidebarNonMemo);\n","import React, {useCallback} from 'react';\n\nimport type {Integration} from 'pap-events/enums/integration';\nimport {PAP_Select_ModalAction} from 'pap-events/replay/select_modal_action';\nimport {PAP_Shown_Modal} from 'pap-events/replay/shown_modal';\nimport {FormattedMessage} from 'react-intl';\nimport styled from 'styled-components';\n\nimport type {reel} from '@dropbox/api-v2-client';\nimport {Modal} from '@dropbox/dig-components/modal';\n\nimport {Button} from '~/components/button';\nimport {useOnboardingContext} from '~/components/onboarding_v2/onboarding_provider';\nimport {s3_static_url} from '~/lib/static_urls';\nimport {StormcrowIsOn} from '~/lib/stormcrow';\nimport {useLoggingClient} from '~/lib/use_logging_client';\nimport {useE2eFeatureIsOn} from '~/state/e2e_features';\n\nimport {useViewerPageContext} from '../../viewer_page_context';\n\ntype IntegrationKey = 'ADOBE_PREMIERE_PRO' | 'ADOBE_AFTER_EFFECTS' | 'DAVINCI' | 'PRO_TOOLS';\ntype IntegrationStateKey =\n | 'integration_premierepro'\n | 'integration_aftereffects'\n | 'integration_davinci'\n | 'integration_protools';\ntype IntegrationInfo = {\n name: string;\n url: string;\n stateKey: IntegrationStateKey;\n PAPIntegration: Integration;\n};\ntype IntegrationDictionary = Record<IntegrationKey, IntegrationInfo>;\n\nconst Integrations: IntegrationDictionary = {\n ADOBE_PREMIERE_PRO: {\n name: 'Adobe Premiere Pro',\n url: 'https://exchange.adobe.com/apps/cc/107770/dropbox-replay',\n stateKey: 'integration_premierepro',\n PAPIntegration: 'adobe_premiere_pro',\n },\n ADOBE_AFTER_EFFECTS: {\n name: 'Adobe After Effects',\n url: 'https://exchange.adobe.com/apps/cc/107770/dropbox-replay',\n stateKey: 'integration_aftereffects',\n PAPIntegration: 'adobe_after_effects',\n },\n DAVINCI: {\n name: 'DaVinci Resolve',\n url: 'https://help.dropbox.com/integrations/dropbox-replay-davinci-resolve',\n stateKey: 'integration_davinci',\n PAPIntegration: 'blackmagic_davinci',\n },\n PRO_TOOLS: {\n name: 'Pro Tools',\n url: 'https://help.dropbox.com/integrations/dropbox-replay-avid-pro-tools',\n stateKey: 'integration_protools',\n PAPIntegration: 'avid_pro_tools',\n },\n};\n\nconst StyledVideo = styled.video`\n width: 100%;\n height: 100%;\n object-fit: fill;\n`;\n\nconst guessIntegration = (creatorTool: string): IntegrationInfo | null => {\n if (creatorTool.includes('Premiere Pro')) {\n return Integrations['ADOBE_PREMIERE_PRO'];\n }\n\n if (creatorTool.includes('Photoshop')) {\n return Integrations['ADOBE_AFTER_EFFECTS'];\n }\n\n if (creatorTool.includes('DaVinci')) {\n return Integrations['DAVINCI'];\n }\n\n if (creatorTool.includes('Pro Tools')) {\n return Integrations['PRO_TOOLS'];\n }\n\n return null;\n};\n\n/**\n * TODOs\n * - Make sure the modal doesn't show up on top of other modals or onboarding processes\n */\nexport function CreatorToolCalloutModal() {\n const {mediaMetadata} = useViewerPageContext();\n const [open, setOpen] = React.useState(true);\n const isCalloutEnabled = StormcrowIsOn.useReplayCreatorToolCallout();\n const {onboardingActions, updateOnboardingActions} = useOnboardingContext();\n const isOnboardingEnabled = useE2eFeatureIsOn('onboarding');\n const loggingClient = useLoggingClient();\n\n const handleClose = (integration: IntegrationInfo) => {\n loggingClient.logPap(\n PAP_Select_ModalAction({\n modal: 'integration_callout',\n modalAction: 'cancel',\n integration: integration.PAPIntegration,\n }),\n );\n updateIntegrationState(integration, {'.tag': 'integration_onboarding_dismissed'});\n setOpen(false);\n };\n const handleNavigate = (integration: IntegrationInfo) => {\n loggingClient.logPap(\n PAP_Select_ModalAction({\n modal: 'integration_callout',\n modalAction: 'get_integration',\n integration: integration.PAPIntegration,\n }),\n );\n updateIntegrationState(integration, {'.tag': 'integration_onboarding_completed'});\n setOpen(false);\n };\n\n const handleOpen = (integration: IntegrationInfo) => {\n // log modal when shown\n loggingClient.logPap(\n PAP_Shown_Modal({\n modal: 'integration_callout',\n integration: integration.PAPIntegration,\n }),\n );\n };\n\n const updateIntegrationState = useCallback(\n (integration: IntegrationInfo, state: reel.ReelIntegrationOnboardingStatus) => {\n (async () => {\n await updateOnboardingActions({\n [integration.stateKey]: state,\n });\n })();\n },\n [updateOnboardingActions],\n );\n\n if (\n !isOnboardingEnabled ||\n !isCalloutEnabled ||\n mediaMetadata?.isDemo || // Do NOT show the CretorToolCalloutModal in demo files\n !mediaMetadata?.mediaMetadata.creatorTool\n ) {\n return null;\n }\n\n const integration = guessIntegration(mediaMetadata.mediaMetadata.creatorTool);\n\n // No need to show the modal if we don't have a creator tool to promote\n if (\n !integration ||\n onboardingActions?.[integration.stateKey]?.['.tag'] !== 'integration_onboarding_not_set'\n ) {\n return null;\n }\n\n return (\n <Modal\n aria-labelledby=\"CreatorToolCallout\"\n isCentered\n onAfterOpen={() => handleOpen(integration)}\n onRequestClose={() => handleClose(integration)}\n open={open}\n >\n <Modal.FullBleed>\n <StyledVideo\n autoPlay\n loop\n muted\n poster={s3_static_url('/images/video-tool-integration.png')}\n >\n <source src={s3_static_url('/images/video-tool-integration.webm')} type=\"video/webm\" />\n <source src={s3_static_url('/images/video-tool-integration.mov')} type=\"video/mov\" />\n <source src={s3_static_url('/images/video-tool-integration.mp4')} type=\"video/mp4\" />\n </StyledVideo>\n </Modal.FullBleed>\n <Modal.Header hasBottomSpacing=\"title-standard\">\n <Modal.Title id=\"CreatorToolCallout\">\n <FormattedMessage\n defaultMessage=\"Enhance your editing experience\"\n description=\"Title for modal that encourages users to download and use Replay integrations for their creative tools\"\n id=\"bbP5u2\"\n />\n </Modal.Title>\n </Modal.Header>\n\n <Modal.Body>\n <FormattedMessage\n defaultMessage=\"Download the free Dropbox Replay integration for {integrationName} to get projects reviewed and approved faster. \"\n description=\"Body text for modal that encourages users to download and use Replay integrations for their creative tools\"\n id=\"qv2tfF\"\n values={{integrationName: integration.name}}\n />\n </Modal.Body>\n\n <Modal.Footer>\n <Button\n autoFocus\n data-testid=\"creator-tool-modal-dismiss-button\"\n onClick={() => handleClose(integration)}\n variant=\"opacity\"\n >\n <FormattedMessage\n defaultMessage=\"Dismiss\"\n description=\"Button to close modal\"\n id=\"CT7Q45\"\n />\n </Button>\n <Button\n href={integration.url}\n onClick={() => handleNavigate(integration)}\n target=\"_blank\"\n variant=\"primary\"\n >\n <FormattedMessage\n defaultMessage=\"Get integration\"\n description=\"Button to take the user to the page where they can download a Replay integration\"\n id=\"zq+GQ8\"\n />\n </Button>\n </Modal.Footer>\n </Modal>\n );\n}\n","import React from 'react';\n\nimport {useAtomValue, useSetAtom} from 'jotai';\nimport {useParams} from 'react-router';\nimport styled from 'styled-components';\n\nimport type {reel} from '@dropbox/api-v2-client';\nimport {Spinner} from '@dropbox/dig-components/progress_indicators';\n\nimport {getVideo, logView, MediaType} from '~/lib/api';\nimport type {MediaProp} from '~/lib/api';\nimport {useOnboardingChecklist} from '~/lib/onboarding_v2/use_onboarding_checklist';\nimport {getInitialVersionId, VERSION_ID_QUERY_STRING_KEY} from '~/lib/url_utils';\nimport {useLoggingClient} from '~/lib/use_logging_client';\nimport {NavigationSidebar} from '~/pages/browse_page/components/navigation_sidebar';\nimport {ErrorPage} from '~/pages/error_page';\nimport {PageMissingPage} from '~/pages/page_missing_page';\nimport {SyncCollabProvider} from '~/pages/viewer_page/components/sync_collab/shared_state';\nimport {VersionsAwareViewerPageProvider} from '~/pages/viewer_page/components/versions_context';\nimport {VersionsAwareViewerPageContent} from '~/pages/viewer_page/viewer_page_content';\nimport {onboardingTypeAtom} from '~/state/onboarding_v2';\nimport {STEPS} from '~/state/onboarding_v2';\nimport {\n NavigationSidebarDisplayState,\n navigationSidebarDisplayStateAtom,\n ViewerSidebarPanel,\n viewerSidebarPanelAtom,\n} from '~/state/viewer';\n\nimport {CreatorToolCalloutModal} from './components/creator_tool_callouts/creator_tool_callouts';\nimport {PageContentContainer} from './components/page_content_container';\nimport {ViewerPageOnboardingProvider} from './viewer_page_context';\nimport {ViewerPageHeader} from './viewer_page_header';\nimport {ViewerPageLoggingProvider} from './viewer_page_logging_context';\nimport {dueDateModalCurrentVersionInfoAtom} from '../../components/due_date/due_date_modal';\nimport {useViewport} from '../../components/viewport_context';\nimport {getCurrentUser} from '../../lib/client';\nimport type {VideoPageRouteParams} from '../../route_path_matches';\nimport {isInExtension} from '../../use_extensions';\nimport {YourRootText} from '../browse_page/components/header/browse_page_folder_header';\nimport {Page} from '../components/page';\nimport {LoadingViewerPageHeader} from '../layout/components/common_header';\n\nexport const Centered = styled.div`\n align-items: center;\n display: flex;\n height: 100%;\n justify-content: center;\n position: absolute;\n width: 100%;\n`;\n\nfunction isVideoNotFoundError(error: any): error is reel.GetVideoErrorVideoNotFound {\n const tag = error?.error && error.error['.tag'];\n if (!tag) {\n return false;\n }\n return tag === 'other' || tag === 'video_not_found';\n}\n\nconst IS_LOADING = 'is_loading' as const;\n\nexport const ViewerPage = () => {\n const {videoId: encodedVideoId, projectId: encodedProjectId} =\n useParams() as VideoPageRouteParams;\n const [videoId, setVideoId] = React.useState(decodeURIComponent(encodedVideoId));\n const projectId = decodeURIComponent(encodedProjectId);\n const navigationSidebarDisplayState = useAtomValue(navigationSidebarDisplayStateAtom);\n const setSidebarPanelState = useSetAtom(viewerSidebarPanelAtom);\n // eslint-disable-next-line deprecation/deprecation\n const {isSmallScreenSize} = useViewport();\n const loggingClient = useLoggingClient();\n const {handleCompleteStep} = useOnboardingChecklist({\n // eslint-disable-next-line deprecation/deprecation\n logEvent: loggingClient.logEvent.bind(loggingClient),\n });\n const onboardingType = useAtomValue(onboardingTypeAtom);\n\n const [videoInfo, setVideoInfo] = React.useState<MediaProp | typeof IS_LOADING>(IS_LOADING);\n const [getVideoError, setGetVideoError] = React.useState<Error | null>(null);\n\n const sidebarOpen =\n navigationSidebarDisplayState === NavigationSidebarDisplayState.SHOWING && !isSmallScreenSize;\n\n const videoFetcher = React.useCallback(\n (videoVersionId: string) => getVideo(videoId, videoVersionId),\n [videoId],\n );\n\n const currentVersionInfo = useAtomValue(dueDateModalCurrentVersionInfoAtom);\n const setDateModalCurrentVersionInfoAtom = useSetAtom(dueDateModalCurrentVersionInfoAtom);\n\n const projectNavigator = React.useCallback(\n async (mediaId: string, versionId?: string): Promise<MediaProp | null> => {\n try {\n setSidebarPanelState(ViewerSidebarPanel.COMMENTS);\n const result = await getVideo(mediaId, versionId);\n if (result) {\n setVideoInfo(result);\n if (mediaId !== videoId) {\n const params = new URLSearchParams(window.location.search);\n if (versionId) {\n params.set(VERSION_ID_QUERY_STRING_KEY, versionId);\n } else {\n params.delete(VERSION_ID_QUERY_STRING_KEY);\n }\n history.replaceState(\n null,\n '',\n `/project/${result.projectId}/video/${result.videoId}?${params.toString()}`,\n );\n }\n } else {\n throw new Error('No video returned from api');\n }\n logView(mediaId);\n return result;\n } catch (e) {\n setGetVideoError(e);\n }\n return null;\n },\n [videoId, setSidebarPanelState],\n );\n\n React.useEffect(() => {\n if (videoInfo !== IS_LOADING) {\n setVideoId(videoInfo.videoId);\n\n if (videoInfo.mediaType === MediaType.Image) {\n handleCompleteStep(STEPS.VIEW_FILE);\n }\n }\n }, [videoInfo, onboardingType, handleCompleteStep]);\n\n React.useEffect(() => {\n // When uploading new versions in the project tile/list views,\n // the displayed information may vary depending on the tile/column you hover over.\n // Because there are multiple ways to navigate to a project: by clicking into a project,\n // creating a new version, or being in a project upon app load.\n // We are taking steps to ensure that the correct videoID\n // is used to navigate to the intended project.\n const defaultInitalVideoId =\n currentVersionInfo.videoId !== '' ? currentVersionInfo.videoId : videoId;\n\n (async () => await projectNavigator(defaultInitalVideoId, getInitialVersionId()))();\n // Only run once when initial page loads\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n React.useEffect(() => {\n // Reset this for the next version uploaded via project tile/list views,\n if (currentVersionInfo.videoId !== '') {\n setDateModalCurrentVersionInfoAtom({\n videoId: '',\n projectName: '',\n projectId: '',\n versionNumber: 0,\n });\n }\n }, [currentVersionInfo, setDateModalCurrentVersionInfoAtom, videoId]);\n\n const videoIdentifier = React.useMemo(\n () => ({\n type: 'video_id' as const,\n videoId,\n }),\n [videoId],\n );\n\n if (getVideoError && isVideoNotFoundError(getVideoError)) {\n return <PageMissingPage />;\n }\n\n if (getVideoError) {\n return <ErrorPage errorToReport={getVideoError} />;\n }\n\n // Before the video loads, show only the header with skeleton components where text would be and help link\n if (videoInfo === IS_LOADING) {\n const backButtonStyle = Boolean(getCurrentUser()) ? 'chevron' : 'logo';\n return (\n <>\n <LoadingViewerPageHeader backButtonStyle={backButtonStyle} />\n <Centered>\n <Spinner monochromatic />\n </Centered>\n </>\n );\n }\n\n const webContent = (\n <Page title={videoInfo.projectName}>\n <>\n <ViewerPageHeader\n areCommentsEnabled={true} // On non-share pages, comments are always shown\n backToUrl={videoInfo.folderId ? `/folder/${videoInfo.folderId}` : '/'}\n hasEditAccess={\n videoInfo.accessLevel === 'owner' ||\n videoInfo.accessLevel === 'admin' ||\n videoInfo.accessLevel === 'super_admin' ||\n videoInfo.accessLevel === 'none' // On a non-share page, access level of none means the folder has not been shared yet\n }\n showDownloadsInHeader={false}\n sidebarOpen={sidebarOpen}\n viewOnlyProjectMember={videoInfo.accessLevel === 'reviewer'}\n />\n <PageContentContainer sidebarOpen={sidebarOpen}>\n <VersionsAwareViewerPageContent areCommentsEnabled={true} />\n </PageContentContainer>\n {videoInfo.folderName && videoInfo.folderName !== YourRootText && <NavigationSidebar />}\n <CreatorToolCalloutModal />\n </>\n </Page>\n );\n\n const integrationContent = <VersionsAwareViewerPageContent areCommentsEnabled={true} />;\n\n let projectAccess;\n switch (videoInfo.accessLevel) {\n case undefined:\n case 'none':\n projectAccess = 'owner' as const;\n break;\n case 'owner':\n case 'admin':\n case 'reviewer':\n case 'super_admin':\n projectAccess = videoInfo.accessLevel;\n break;\n default:\n projectAccess = 'other' as const;\n }\n\n return (\n <ViewerPageLoggingProvider\n accessType={projectAccess}\n mediaType={videoInfo.mediaType}\n pageSource=\"video_page\"\n videoId={videoInfo.videoIdForAmplitude}\n >\n <VersionsAwareViewerPageProvider\n areVersionsEnabled\n downloadsEnabled={true}\n initialVersionInfo={videoInfo}\n projectId={projectId}\n projectNavigator={projectNavigator}\n showContextMenu={videoInfo.accessLevel !== 'reviewer'}\n videoIdentifier={videoIdentifier}\n videoVersionFetcher={videoFetcher}\n >\n <ViewerPageOnboardingProvider>\n <SyncCollabProvider>\n {isInExtension() ? integrationContent : webContent}\n </SyncCollabProvider>\n </ViewerPageOnboardingProvider>\n </VersionsAwareViewerPageProvider>\n </ViewerPageLoggingProvider>\n );\n};\n"],"file":"static/viewer_page-CAHLPhlD.js"}