{"version":3,"sources":["assets/images/avatar.png","assets/images/business-branding.png","assets/images/business-security.png","assets/images/business-sharing.png","assets/images/empty-bg.png","assets/images/empty-drag.png","assets/images/welcome-browse.png","assets/images/welcome-upload.png","assets/images/welcome-view.png","assets/locales lazy /^/.//.*//messages$/ groupOptions: {} namespace object","features/platform/index.ts","globals/config.ts","features/themes/styles.ts","features/device/index.ts","features/fonts/index.ts","features/themes/vectors.ts","features/common.ts","globals/types.ts","features/themes/light.ts","features/themes/dark.ts","features/themes/index.ts","store/app/selectors.ts","store/app/reducers.ts","store/app/index.ts","view/AppAlerts.tsx","globals/keys.ts","controls/Menu.tsx","hooks/useMenu.tsx","hooks/useMenuSort.tsx","hooks/useMenuFilter.tsx","controls/WebFrame.tsx","hooks/useModalUpsellStorage.tsx","controls/HoverButton.tsx","controls/IconButton.tsx","view/AppNotifications.tsx","features/filesystem/web/view.ts","features/filesystem/web/lib/hash/hash.worker.ts","features/filesystem/web/hash.ts","features/filesystem/web/lib/upload/upload.worker.ts","features/filesystem/web/upload.ts","features/filesystem/web/download.ts","features/filesystem/web/cookies.ts","globals/upload.ts","features/analytics/index.ts","store/files/selectors.ts","store/files/reducers.ts","store/files/index.ts","store/middleware.ts","store/index.ts","features/mediafire/index.ts","features/images/index.ts","store/app/effects.ts","store/files/effects.ts","view/AppMenu.tsx","controls/InputField.tsx","controls/Dialog.tsx","controls/Prompt.tsx","hooks/useModalCreateFolder.tsx","hooks/useModalUpsellProTrial.tsx","hooks/useModalUpdatePayment.tsx","hooks/useModalCustomAlert.tsx","view/modals/FilesModalWelcome.tsx","view/FilesNavigator.tsx","hooks/useModalShare.tsx","hooks/useModalUpsellFeature.tsx","view/modals/FilesModalBulkDownload.tsx","view/FilesHeader.tsx","hooks/useModalRename.tsx","hooks/useModalTrash.tsx","hooks/useModalPurge.tsx","hooks/useHotkeys.ts","hooks/useModalDescribe.tsx","hooks/useModalPrivate.tsx","hooks/useModalPasswordProtect.tsx","view/modals/FilesModalFileDrop.tsx","hooks/useMenuFiles.tsx","hooks/useModalFlags.tsx","hooks/useFileItem.tsx","view/FilesThumbnail.tsx","view/FilesListItem.tsx","view/FilesList.tsx","view/FilesGridItem.tsx","view/FilesGrid.tsx","view/FilesPathItem.tsx","view/FilesPath.tsx","view/FilesBar.tsx","view/Files.tsx","view/FilesPicker.tsx","hooks/useModalConflict.tsx","view/modals/FilesModalWebUpload.tsx","view/FilesUploader.tsx","features/filesystem/web/pick.ts","view/FilesPreviewer.tsx","view/FilesDownloader.tsx","features/i18n/index.ts","view/AppFrame.tsx","index.tsx"],"names":["map","webpackAsyncContext","req","__webpack_require__","o","Promise","resolve","then","e","Error","code","ids","id","t","keys","Object","module","exports","_customSubdomain","ORIGIN","SCOPE","HOSTS","LIVE","SANDBOX","SANDBOX_TWO","SANDBOX_APP","DEV","PREVIEW","LOCAL","KEYS","getHost","noSSL","protocol","isDev","isLive","isLocal","isSandbox2","isSandboxApp","isSandbox","getClient","isWeb","navigator","userAgent","slice","isAndroid","isWindows","isMacOS","isIOS","setCustomSubdomain","subdomain","isTouch","Platform","getType","window","maxTouchPoints","platform","isNative","location","origin","indexOf","Breakpoints","FontSizes","url","title","share","catch","reload","short","locale","language","split","shift","matchMedia","matches","dateTime","Intl","DateTimeFormat","resolvedOptions","isEnglish","toString","startsWith","isAmerica","timeZone","update","addEventListener","monospace","displayLight","displayRegular","displaySemibold","displayBold","Colors","brand","dark","medium","light","green","tan","tanner","yellow","orange","redOrange","brightRed","black","darker","mid","lighter","lightest","whitish","white","transparent","text","document","image","pdf","video","audio","spreadsheet","archive","presentation","Fonts","fontFamily","FontRefs","fontWeight","Vectors","logoFlame","logoFull","featInsights","featDeliver","featRequest","featSend","featSell","iconMin","iconAdd","iconArrowUp","iconArrowDown","iconTreeExpand","iconDropDown","iconBack","iconDanger","iconFeedback","iconAlert","iconAlertNew","iconCheck","iconClose","iconCopy","iconDescription","iconDevice","iconDownload","iconExit","iconEmptyTrash","iconFiledrop","iconFolder","iconFolderAdd","iconFileAdd","iconGear","iconList","iconGrid","iconHelp","iconHome","iconImage","iconMenu","iconMore","iconMoreHoriz","iconMove","iconPassword","iconPhone","iconPlus","iconPrivate","iconPublic","iconRecent","iconRename","iconRestoreTrash","iconRight","iconLeft","iconSave","iconSearch","iconShare","iconFollowing","iconSort","iconSortAlt","iconFilter","iconTrash","iconUpload","iconRadioOn","iconRadioOff","iconWarning","iconWeb","iconClock","iconPro","fileArchive","fileAudio","fileCode","fileDocument","fileFolder","fileGeneric","fileImage","filePDF","filePresentation","fileSpreadsheet","fileText","fileVideo","searchNotFound","bytesize","bytes","decimals","scale","sizes","dm","i","Math","floor","log","pow","toFixed","luminance","hexcolor","luminosity","String","replace","length","c","rgb","parseInt","substr","round","min","max","testBit","value","bit","AppUserGroup","FilesItemState","FilesItemFlag","FilesErrors","logoColor","fileIconColor","mainMenuBorder","headerBackground","contentBackground","borderSeparator","borderSeparatorLight","separator","listItemTitle","listItemNormalBackground","listItemNormalBorder","listItemHoverBackground","listItemHoverTreeBackground","listItemHoverSelectedBackground","listItemSelectBackground","listItemSelectBorder","listItemSelectText","listItemFocusBackground","listItemFocusSelectedBackground","listItemDraggingBackground","listItemDropBackground","listItemTreeBackground","listItemTreeHoverBackground","buttonPrimaryBorder","buttonPrimaryBackground","buttonPrimaryBackgroundHover","textButtonPrimary","buttonCancelBorder","buttonCancelBackground","buttonCancelBackgroundHover","textButtonCancel","buttonDestructiveBorder","buttonDestructiveBackground","buttonDestructiveBackgroundHover","textButtonDestructive","dialogBackground","dialogBorder","dialogText","dialogTitle","dialogInputText","dialogInputPlaceholder","dialogInputBackground","dialogBehind","menuText","menuTextDisabled","menuItemHover","menuBackground","menuBorder","menuHeaderText","menuHeaderBorder","menuHeaderBackground","menuHeaderMultiBorder","menuHeaderMultiBackground","menuHeaderMultiText","breadcrumbsText","breadcrumbsBorder","breadcrumbsBackground","breadcrumbsShareBackground","breadcrumbsShareBorder","navigatorText","navigatorBorder","navigatorBackground","filesBackground","filesTreeText","filesTreeBorder","filesTreeBackground","filesTreeHoverBackground","uploaderBarTitle","uploaderBarText","uploaderBarBorder","uploaderBarBackground","uploaderContentBackground","uploaderContentIcon","barSelectButtonBorder","diagnosticUploadTool","Default","device","isDarkMode","Dark","Light","x","store","isActive","createSelector","app","active","isLoggedIn","user","isMenuOpen","menuOpen","isTrial","email","isPremium","group","Pro","isBusiness","Business","getUser","getName","name","getEkey","ekey","getEmail","getLimits","limit","getAvatar","avatar","getRevision","revision","getViewport","viewport","getFeature","feature","getNotifications","notifications","getHeader","header","getAlerts","alerts","activate","state","action","payload","menu","open","resize","width","height","login","custom","colors","primary","MF","Trial","storage","used","logout","alert","type","push","clearAlerts","updateNotifications","count","createSlice","reducers","initialState","AppAlerts","props","useSelector","selectors","classes","root","styles","isOffset","isOffsetMore","offset","offsetMore","desktop","mobile","style","fail","Keys","Styles","createViewStyle","right","bottom","borderRadius","position","left","backgroundColor","createTextStyle","fontSize","color","marginTop","paddingVertical","paddingHorizontal","Menu","_mountedRefsMap","_onKeyPress","event","currentFocusedIndex","focusedIndex","keyCode","UpArrow","LeftArrow","DownArrow","RightArrow","menuItems","setState","_props","initialBuild","hoverCommand","undefined","this","focusFirst","focusFirt","prevProps","prevState","prevContext","focusItem","index","ref","requestFocus","item","command","_styles","multiMode","headerMulti","headerText","headerTextMulti","divider","buttonStyles","menuItemContainer","menuButtonStyles","textStyles","menuItemText","menuTextStyles","disabled","accessibilityLabel","disabledText","iconStyles","menuItemIcon","onPress","_onClickItem","onHoverStart","_onMouseEnter","onHoverEnd","_onMouseLeave","tabIndex","accessibilityTraits","Types","AccessibilityTrait","MenuItem","icon","restrictFocusWithin","disableTouchOpacityAnimation","onKeyPress","menuContainer","menuMulti","stopPropagation","onSelectItem","ComponentBase","paddingBottom","borderWidth","borderStyle","borderColor","createButtonStyle","minHeight","flexDirection","alignItems","justifyContent","flex","font","size12","marginRight","marginVertical","borderBottomWidth","marginBottom","textAlign","lineHeight","_modalMenu","useMenu","items","onSelect","anchor","anchorUpdate","positionPriorities","dismissIfShown","cacheable","useCallback","preventDefault","Popup","show","getAnchor","renderPopup","_anchorPosition","_anchorOffset","_popupWidth","_popupHeight","clientX","clientY","filter","dismiss","useMenuSort","sort","onSort","selectSort","category","order","viewBox","d","fillColor","close","useMenuFilter","onFilter","selectFilter","target","WebFrame","isProTrialSignup","contentProTrial","content","Dialog","scalesPageToFit","onMessage","onError","console","debug","onLoad","sandbox","WebViewTypes","WebViewSandboxMode","AllowTopNavigation","AllowSameOrigin","AllowScripts","AllowPopups","AllowForms","top","_modalId","useModalUpsellStorage","Modal","message","data","needed","path","query","HoverButton","_onPress","_onHoverStart","isHovering","_onHoverEnd","button","onRenderChild","Component","padding","IconButton","_onRenderButton","buttonStyle","iconStyle","textStyle","mode","textPrimary","buttonPrimary","buttonPrimaryHover","textCancel","buttonCancel","buttonCancelHover","textDestructive","buttonDestructive","buttonDestructiveHover","buttonHoverStyle","textHoverStyle","spacer","minWidth","size11","modalAppSort","AppNotifications","base","inner","floatRight","maximized","noop","iframe","shadowOffset","shadowColor","shadowRadius","elevation","paddingTop","paddingLeft","viewFile","_fromUrl","_name","_dispatch","_actions","a","Worker_fn","Worker","workers","hashFile","file","progress","cancelId","reject","hasher","HashWorker","onmessage","terminate","onerror","postMessage","cancelHashing","uploadFile","info","upload","UploadWorker","cancelUpload","_id","getSecureCookies","clearCookies","cookie","FileState","HashState","gtag","loaded","amplitude","fullstory","bugsnag","Unregistered","appName","userId","userGroup","Bugsnag","start","apiKey","appVersion","process","appType","context","maxBreadcrumbs","enabledBreadcrumbTypes","addMetadata","FullStory","amp","getInstance","init","setUserId","setUserProperties","user_id","dimension7","dimension1","Free","params","logEvent","screen_name","leaveBreadcrumb","error","notify","orgId","recordCrossDomainIFrames","premium_bool","LIMIT_FILE_SIZE","ReqError","captureStackTrace","constructor","stack","NetError","StallError","HashError","CheckError","InstantError","VerifyError","Uploader","token","availableStorage","session","queuedStorage","files","Map","hashes","listeners","retries","hasDisabledHashing","isHashingSupported","batchRetries","signals","fallback","loadFallback","watchdog","lastChange","Date","now","stallTime","uploaded","hashed","stalled","intervals","hash","check","verify","queues","dupe","authenticate","setInterval","processHashQueue","processCheckQueue","processUploadQueue","processVerifyQueue","clearInterval","forEach","get","Hashing","dest","list","hasFile","Array","prototype","call","size","sanitizeName","addFile","listener","applyAll","updateFile","Queued","transfer","resolution","unshift","has","Completed","delete","Conflict","sendAbort","Aborted","slots","getFreeHashSlots","b","fileA","fileB","splice","input","bytesUploaded","bytesTotal","Uploading","set","fails","sendFailure","getFreeUploadSlots","transferred","key","sendVerify","retryDelay","setTimeout","request","uploads","JSON","stringify","hasHash","filename","folder_key","resumable","preemptive","xhr","checks","res","upload_checks","checkData","host","hostAlt","urls","upload_url","simple","simple_fallback","resumable_fallback","conflict","file_exists","exists","hash_exists","resumable_upload","upload_key","all_units_ready","unitCount","number_of_units","unitSize","unit_size","unitBitmap","bitmap","preemptive_quickkey","quickkey","duplicateQuickkey","duplicate_quickkey","available_space","storage_limit_exceeded","exceededStorage","result","instant","indexes","el","pop","join","doupload","douploads","uploadData","status","fileerror","virusDetected","exceededFileSize","sendCompleted","Verifying","total","hashing","timeNow","timeFromChange","hasUploaded","hasHashed","hasStalledFully","hasProgress","hasStalledHashing","sessionData","parse","from","entries","analytics","hasSentHashStall","getParams","getQuery","getUploadUrl","encodeURIComponent","saved","saveFallback","opt","lifespan","action_token","opts","body","FormData","append","fetch","method","json","response","sendBatchFailure","processDupeQueue","complete","failure","isNetError","Failed","sendReport","hasSentNetError","failureBatch","fragments","folder","r","random","urlNormal","actionFallback","urlFallback","activeBytes","activeFiles","freeSlots","cores","hardwareConcurrency","extra","response_format","session_token","action_on_duplicate","URLSearchParams","localStorage","setItem","initial","serialized","getItem","unescape","trim","self","isSearch","search","isUploaderMinimized","uploadMinimized","isDownloaderMinimized","downloadMinimized","getLayout","layout","getRoot","getBrowser","browser","getCurrent","current","getFocused","focused","getSelection","selection","getPreview","preview","getPreviewProgress","previewProgress","getSearch","getFilter","getDrag","drag","getPick","pick","getSort","getItems","getView","views","getParent","parentId","parent","hierarchy","hasPrivateItems","private","getUpload","getUploadView","uploadView","getUploadItems","uploadItems","getUploadFiles","uploadFiles","getUploadWeb","uploadWeb","getDownloadBulk","downloadBulk","getDownloadView","downloadView","getDownloadItems","downloadItems","move","isMoving","copy","isCopying","isUpdating","select","ranged","view","folders","to","focus","previewJob","jobId","previewClose","browse","navigate","chunk","folderContent","f","folderkey","cache","parseContentItem","Set","sync","isNormal","load","details","depth","chain","chainFolders","folderInfo","loadMulti","virtual","loadTrash","folderCount","fileCount","getShareLink","created","bulkDownload","bulkDownloadClose","targetId","uploadMinimize","minimized","downloadMinimize","uploadSync","includes","downloadSync","gallery","picker","initActivate","dispatch","actions","App","activationStateChangedEvent","subscribe","activated","initReporter","_state","pluginReporter","_store","next","history","createBrowserHistory","createMemoryHistory","getFolderKeyFromUrl","pathname","initNavigate","callback","syncing","listen","screen","Input","backButtonEvent","isDisplayed","dismissAll","back","pluginNavigate","reducer","combineReducers","middleware","configureStore","devTools","cookies","getState","_sessionCookies","_clearAlertsTimer","_syncNotificationsTimer","_syncFolderTimer","api","MediaFire","sessionToken","ULT_APP_TOKEN","sessionEmail","sessionPkey","sessionEkey","_features","featuresList","array","j","shuffle","featuresOrder","fetchSession","authSession","all","fetchCustomization","getInfo","apiUser","apiAvatar","userInfo","options","premium","displayName","business","clearTimeout","renewSession","getLocale","Accessibility","announceForAccessibility","excludeEndpointUrl","post","defaultHeader","needsPaymentUpdate","customAlertIDs","logo","theme","withCredentials","redirect","credentials","headers","permanent_token","gotoHomepage","openPage","skipAuth","openUrl","password","duration","redirectPath","Linking","href","restartApp","InvalidToken","MissingToken","InvalidFolderkey","MissingFolderkey","AccessDenied","destination","isFolderkey","quickKey","folderKey","folderKeySrc","folderKeyDst","restore","isQuickkey","purge","rename","isFolder","fileType","foldername","describe","description","privacy","XMLHttpRequest","send","download","bulk","forceDownload","linkType","links","directDownload","statusKey","confirmBandwidth","confirmLargeDownload","metaOnly","useOwnBandwidth","allowLargeDownload","meta","authed","bulkDownloadAdd","createFolder","parentKey","configureFileDrop","embedSize","notificationEmails","loadRecent","loadFollowing","loadFolder","isInit","isSync","orderDir","orderBy","filesOnly","foldersOnly","filterBy","apiFolder","flag","totalFiles","totalFolders","isOwned","folderRoot","getDepth","getContent","apiDepth","apiFolders","apiFiles","moreFiles","moreChunks","moreFolders","crawlFolder","syncFolder","nochunks","getTrash","crawlTrash","syncTrash","fileKeys","results","folderKeys","infoFolders","infoFiles","fileInfos","fileInfo","recentlyModified","recent","quickkeys","following","startRevision","startFileCount","startFolderCount","getStatus","page","hasFolders","hasFiles","loadMoreFolders","loadMoreFiles","uploadHashed","uploadProgress","uploadStatus","Duplicate","uploadAddWebFile","uploadKey","allWebUploads","test","slug","pattern","pathMatch","match","pathKey","hashMatch","hashKey","filetype","totalSize","normalDownload","parentName","downloads","filedrop","dropboxEnabled","owner","ownerName","createdUtc","deleted","deleteDate","parentFolderkey","shared","dateSharedUtc","passwordProtected","reverse","copyLink","link","Clipboard","setText","getTimeSince","time","invalid","formatDistance","getPhoto","isPrivate","isViewable","env","charAt","getKeysFromUrl","found","parts","segments","appendFolderPathToFiles","original","counter","directoryFound","errorHandler","getDirectoryItems","reader","readEntries","concat","webkitGetAsEntry","readDirectory","createReader","folderPath","fullPath","mfRelativePath","require","default","bizBranding","bizSecurity","bizSharing","emptyBackground","emptyDrag","welcomeBrowse","welcomeUpload","welcomeView","stateOn","stateOff","gotoUpgrade","term","loadSearch","copyLink2","modalId","shareUrl","downloadFile","pickClear","listFocus","selectClear","dragDrop","setDrop","dataTransfer","getData","dragEnter","dragLeave","uploadStart","AppMenu","hasTouch","isPromoDisabled","anchorMenuSort","useRef","anchorMenuFilter","anchorMenuPolicies","limits","userAvatar","earlyAccess","trash","trashView","isAvatarDefault","isFollowing","isRecent","isTrash","isFiles","isMenuFloating","isNotificationsMaximized","storageTotal","storagedUsed","storagePixels","storagePercent","styleHeight","createScrollViewStyle","storageWidth","isNaN","storageWarn","imageAvatar","images","textTrashCount","textStorageUsed","hasNotifications","hasSharedWithMe","viewIcon","viewLabel","sortLabel","toUpperCase","filterLabel","rootFloating","bottomMenu","bottomMenuWeb","notification","notificationWeb","bar","buttonTouch","useDispatch","destroySession","showEarlyAccess","menu_position","record","product","appEffects","gotoAccount","gotoSupport","gotoAvatar","gotoEarnSpace","gotoUpgradeTop","gotoUpgradeBot","gotoFollowing","filesEffects","gotoMyfiles","gotoRecent","gotoTrash","toggleView","dragOver","dropTrash","showStorageReminder","showMenuFilter","showMenuSort","closeMenuMore","showMenuMore","openNotifications","buttonHover","useEffect","bounces","overScrollMode","mainMenu","topMenu","MenuBar","resizeMode","source","userDetails","userDetailsTrial","nameTrial","numberOfLines","trial","trialLink","upsell","onDragOver","onDrop","Fragment","promo","WebTypes","storageBar","storageFooter","upgrade","legal","version","copyright","build","borderRightWidth","borderLeftWidth","marginHorizontal","marginLeft","createImageStyle","cursor","createLinkStyle","textDecorationColor","textDecorationLine","alignContent","textSmall","storageLink","borderTopWidth","ccp","overflow","dividerWithTag","dividerTag","InputField","onChange","onChangeText","onSubmit","onSubmitEditing","onMount","selectMode","defaultValue","last","selectRange","interpolatedValue","Animated","interpolate","createValue","animatedColorStyle","createAnimatedViewStyle","onBlur","timing","toValue","easing","Easing","OutBack","useNativeDriver","onFocus","InOut","View","field","maxLength","autoCorrect","autoFocus","keyboardType","secureTextEntry","placeholder","placeholderTextColor","createTextInputStyle","_contentOpacity","Value","_contentScale","_initialScalingRatio","_contentScaleStyle","opacity","transform","_opacityAnimation","_opacityAnimationStyle","_onKeyUp","Escape","_clickOutside","_clickInside","_onLongPressOutside","dismissAnimated","_initialBuild","newState","widthStyle","heightStyle","keyUpEvent","_visibleDialogs","_scalingAnimationDuration","unsubscribe","modalBoxStyles","modalBox","modalContentStyles","modalContainer","modalContent","children","modalBackground","onLongPress","onAnimationComplete","parallel","_opacityAnimationDuration","Out","dialog","_animateClose","margin","Prompt","_renderButton","buttonDef","_onButtonPress","_onCancel","_setValue","inputValue","_onSubmit","buttonToCall","buttons","_completeButtonPress","_onBack","optionalTitleText","optionalContent","optionalButtonsContainer","importantForAccessibility","ImportantForAccessibility","Yes","NoHideDescendants","optionalButtons","maxWidth","maxHeight","container","containerStyle","nocancel","selectInput","size20","size14","_modalCreateFolder","useModalCreateFolder","submit","modalFilesWelcome","FilesModalWelcome","useState","statePage","setPage","isPageWelcome","isPageBusiness","effects","Storage","columns","column","subheader","FilesNavigator","isRoot","titlePicker","titleRoot","titleRootPicker","goBack","goBackPick","fillOpacity","folderIcon","_modalShare","useModalShare","oneTimeLink","useModalUpsellFeature","plan","modalFilesBulkDownload","FilesModalBulkDownload","isUserCharged","promptUseBandwidth","isLargeDownload","promptLargeDownload","isDownloadReady","setDownloadReady","totalItems","setTotalItems","setTotalSize","fileName","setFileName","setStatusKey","showUpsell","ZipTotalSizeTooBig","ZipOwnerInsufficientBandwidth","ZipOwnerNotPro","bulkDownloadPreview","totalSizeEstimate","messageWrapper","messageBold","FilesHeader","isLarge","save","showShare","primaryColor","dlfix","large","flexShrink","flexGrow","titleLarge","actionLarge","alignSelf","_modalRename","useModalRename","newName","_modalTrash","useModalTrash","_modalPurge","useModalPurge","useHotkeys","folderId","focusId","isRangeSelect","setRangeSelect","showCreateFolder","showTrash","showPurge","keydown","Shift","A","ctrlKey","metaKey","U","C","V","F12","N","Delete","Backspace","shiftKey","keyup","keyDownEvent","_modalDescribe","_modalPrivate","useModalPrivate","_modalPasswordProtect","useModalPasswordProtect","clear","modalFilesFileDrop","pickerItemsFullWidth","label","pickerItemsEmailNotify","FilesModalFileDrop","isMinimal","isFileDrop","stateEnabled","setEnabled","statePromptConfigure","setPromptConfigure","stateFullWidth","setFullWidth","stateEmailNotify","setEmailNotify","stateContentEmbedded","setContentEmbedded","stateContentHosted","setContentHosted","stateTitle","setTitle","inputWrapper","cancel","configure","pickWidth","pickEmail","disable","htmlEmbedCode","hostedFileDrop","copyHostedLink","copyEmbedCode","inputBlocks","inputHosted","multiline","editable","copyIcon","spacerV","inputEmbedded","selectedValue","onValueChange","spacerH","createPickerStyle","useMenuFiles","hasMultiple","hasMixed","hasOnlyFiles","hasOnlyFolders","isInAccount","isImage","hasShare","hasOneTimeLink","hasCopyLink","hasPrivate","hasDownload","hasDownloadBulk","hasSaveToMyFiles","hasCopyTo","hasMoveTo","hasRename","hasDescription","hasPasswordProtect","hasFileDropConfigure","hasMoveToTrash","hasRestore","hasPurge","hasView","viewbox","viewImage","show1TDL","showPrivate","showRename","newDescription","useModalDescribe","showDescribe","showPasswordProtect","showUpsellOneTimeLink","showUpsellFileDrop","showUpsellPassword","_modalFlags","useFileItem","stateDrop","stateHover","setHover","stateMenuPosX","setMenuPosX","stateMenuPosY","setMenuPosY","isInfected","isReported","isCopyright","isRestricted","isWordfilter","isWordFiltered","isFlagged","isShared","isFocused","isSelected","isDragging","dragging","isDropping","isNavigable","isExpandable","isTree","hasSelection","hasUploadError","textFlagged","textTimestamp","formatTimestamp","getTimeStamp","textPhotoURI","textDetails","isUploader","downloadCount","getDetails","textOpen","percentHashed","percentUploaded","colorSecondary","colorPrimary","styleColorPrimary","contextOptions","hasPrivateSelection","contextItems","contextItem","Boolean","onDownload","onNavigate","onPreview","onBrowse","onBack","onDragEnter","onDragLeave","onDragStart","effectAllowed","setData","setDragImage","Image","onDragEnd","onMouseEnter","onMouseLeave","showFlags","showPassword","y","showMenuFiles","showFileDrop","FilesItemIcon","React","memo","statePreview","setPreview","src","stateThumbnail","setThumbnail","fill","getIcon","extension","badge","isIE11","MSInputMethodContext","hasPrefetch","selected","gallerySelected","dropping","tree","iconTree","badgeLarge","badgeGallery","extensionLarge","extensionGallery","thumbnail","thumbnailLoaded","thumbnailLarge","nameMargin","responseType","onload","abort","ellipsizeMode","prev","isEqual","hover","FilesListItem","isPicker","isUploadFull","setRefDefined","isRowLarge","isRowTiny","isNormalExceptTree","isProtected","isEmpty","hasNative","hasHover","hasDragDrop","colorIcon","rootTiny","rootLarge","normal","focusedAndSelected","hoveringSelected","hoveringTree","hovering","draggingTree","innerTree","thumbnailUpload","thumbnailTree","contentMinimal","overview","selectedText","titleText","timestamp","largeText","uploadStatusFull","uploadStatusError","menuLarge","selectIcon","selectIconLarge","barError","downloaded","tapOuter","tapInner","onContextMenu","onDoubleClick","onTap","expandable","titleTree","titleSimple","buttonSearch","uploadActions","uploadAction","uploadActionText","ariaValueNow","expand","selectedHoverText","FilesListItemTiny","visible","uploadCancel","FilesList","uploader","foreign","isLargeRow","isMinimalRow","hasGutter","hasFocus","heightHeader","maxheight","maxwidth","hasFolderTree","drop","render","itemList","useMemo","mount","scrollToTop","gutter","skipRenderIfItemUnchanged","animateChanges","renderItem","scrollsToTop","keyboardFocusScrollOffset","scrollIndicatorInsets","onItemFocused","onItemSelected","onPick","hoverText","FilesGridItemNormal","FilesGridItem","barSelected","nameSelected","FilesGridRow","row","FilesGrid","grid","prepareRows","FilesPathItem","touch","touchText","FilesPath","searchQuery","isSpecial","iconBox","iconSize","iconRoot","hasDepth","outer","outerLarge","paths","pathsLarge","myfiles","myfilesLarge","specialText","iconHomeDepth","buttonHome","buttonHomeTouch","buttonShare","buttonShareTouch","goHome","horizontal","first","textShare","FilesBar","anchorMenuFiles","anchorMenuFilesAlt","anchorMenuSortAlt","anchorMenuFilterAlt","stateSearch","setSearch","trashIds","selectItem","itemUrl","isLimited","isModeSelect","isModeSearch","isModeTrash","isModeShared","isModeNormal","hasCustomLogo","hasCustomHeader","hasFolder","hasMenu","hasLogo","hasSort","hasFilter","hasFullLogo","hasFullText","hasSelected","isLight","opacityButton","opacityLogo","iconColorLogoText","iconColorLogoFlame","iconColor","iconColorAlpha","iconSelectColor","iconSelectOpacity","headerColor","rootShared","rootTrash","rootSelect","rootSharedSelect","selectButton","noMarginLeft","buttonText","buttonTextSelect","buttonTextSelectDark","searchInput","signup","hoverStyle","openMenu","toggleLayout","searchOpen","searchSubmit","searchClose","uploadMaximize","downloadSelection","StatusBar","setBarStyle","vector","backgroundPosition","backgroundRepeat","backgroundImage","searchIcon","spellCheck","buttonTrashHover","authMenu","ignorePointerEvents","anchorFiles","anchorSort","paddingRight","desktopUpload","Files","browsed","hasFullDialog","hasWelcomeDialog","hasTrialDialog","isLargeScreen","isGrid","sizeActual","sizeExpected","sizeActualBrowser","isLoadingFolder","isLoadingFolderBrowser","isLoadingSearch","hasBreadcrumbs","hasHeader","hasEmptyFolder","hasEmptyFolderBrowser","hasEmptySearch","hasEmptyUploadTip","hasListFolder","hasListSearch","hasSpinner","minimal","uploadTip","dragDropHeader","alertId","useModalCustomAlert","showCustomAlert","useModalUpdatePayment","showPaymentUpdate","useModalUpsellProTrial","showTrialSignup","welcome","welcomeShown","upsellTrial","emptyBrowser","emptyBrowserText","emptyCreateText","loading","lists","center","searchEmpty","footer","uploadTipBg","uploadTipDrag","FilesPicker","destName","sourceName","isLoading","showUpsellStorage","doPick","StorageLimitExceeded","innerMobile","empty","emptyText","spacerFill","_modalConflict","modalFilesWebUpload","FilesModalWebUpload","stateUrl","setUrl","stateName","setName","hint","hintBold","buttonWrapper","help","FilesUploader","stateActivated","setActivated","uploadWebIds","aborted","skipped","finished","verifying","completed","isAborted","isPolling","isComplete","isTransferred","hasError","uploadState","hashCurrent","uploadCurrent","uploadTotal","hasFolderUpload","hasWebUpload","hasAborted","hasSkipped","hasButtonText","isSmall","hashPercent","uploadPercent","hashPixels","uploadPixels","hashPixelsMini","uploadPixelsMini","uploadHeight","rootMinimized","rootMinimizedSmall","uploaderMobile","progressBarHashed","progressBarUploaded","progressMinBar","progressMinBarFailed","progressMinBarHashed","progressMinBarUploaded","textSizes","textCount","textSkipped","textFinished","textUpload","textTitle","minimize","maximize","choice","showConflict","showUpsellWebUpload","create","addFiles","createElement","multiple","onchange","click","addFilesInput","addMedia","addFolder","paste","clipboardData","getAsFile","webupload","addListener","_","handleConflict","timer","uploadGetWebFiles","webUploads","errorStatus","statusCode","percentage","uploadWebSync","removeEventListener","onbeforeunload","uploaderMin","progressMinDetails","progressMinDetailsText","progressMinDetailsPercent","contents","diagnosticLinkText","buttonClose","emptyIcon","touchHint","buttonUpload","completeMessage","buttonUploadText","directory","webkitdirectory","mozdirectory","buttonUploadTextWeb","progressBar","progressDetails","progressDetailsText","progressDetailsPercent","buttonsActive","buttonsQueue","borderTopLeftRadius","borderTopRightRadius","fileDrop","FilesPreviewer","barProgress","cancelDownload","wrapper","FilesDownloader","downloadState","downloadCurrent","downloadTotal","downloadPercent","downloadPixels","downloadPixelsMini","downloadHeight","rootMinimizedOffset","downloader","downloaderMobile","barFailed","downloadMain","textDownload","promises","bulkDownloadStatus","summary","bytesToSend","downloadProgress","downloadStatus","interval","downloaderMin","downloadBar","downloadText","downloadMaximized","buttonDownload","textCompleted","mainProgress","mainProgressBar","mainProgressDetails","mainProgressProgress","mainProgressPercent","messages","i18n","AppFrame","stateAuthed","setAuthed","isMinimized","isMinimizedDownload","isAuthed","hasUpload","hasOffsetUploader","hasOffsetDownloader","rootFloatingMenu","menuFloating","nativeEvent","loginNav","closeMenu","loadLocale","onLayout","toLowerCase","menuButton","overlay","loadingRoot","hidden","onNavigationStateChange","ceil","injectedJavaScript","loadLocaleData","en","plurals","es","de","ar","pt","initialize","UserInterface","useCustomScrollbars","setMainView","forceRenderOnLocaleChange"],"mappings":"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","file":"static/js/main.90263038.chunk.js","sourcesContent":["export default __webpack_public_path__ + \"static/media/avatar.1dfab92d.png\";","export default __webpack_public_path__ + \"static/media/business-branding.bf34ae62.png\";","export default __webpack_public_path__ + \"static/media/business-security.6d925f02.png\";","export default __webpack_public_path__ + \"static/media/business-sharing.68005624.png\";","export default __webpack_public_path__ + \"static/media/empty-bg.3e12af73.png\";","export default __webpack_public_path__ + \"static/media/empty-drag.3d25be92.png\";","export default __webpack_public_path__ + \"static/media/welcome-browse.058b17db.png\";","export default __webpack_public_path__ + \"static/media/welcome-upload.9ede4296.png\";","export default __webpack_public_path__ + \"static/media/welcome-view.aea2d26d.png\";","var map = {\n\t\"./ar/messages\": [\n\t\t198,\n\t\t0\n\t],\n\t\"./de/messages\": [\n\t\t199,\n\t\t1\n\t],\n\t\"./en/messages\": [\n\t\t200,\n\t\t2\n\t],\n\t\"./es/messages\": [\n\t\t201,\n\t\t3\n\t],\n\t\"./id/messages\": [\n\t\t202,\n\t\t4\n\t],\n\t\"./pt/messages\": [\n\t\t203,\n\t\t5\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(function() {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn __webpack_require__.e(ids[1]).then(function() {\n\t\treturn __webpack_require__.t(id, 7);\n\t});\n}\nwebpackAsyncContext.keys = function webpackAsyncContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackAsyncContext.id = 437;\nmodule.exports = webpackAsyncContext;","import {Platform} from 'react-ult';\nimport {HOSTS, ORIGIN} from 'globals/config';\n\nlet _customSubdomain: string;\n\nexport function getEnvironment() {\n if (isDev())\n return 'dev';\n if (isLive() || isLocal())\n return 'www';\n if (isSandbox2())\n return 'sandbox2';\n if (isSandboxApp() || isSandbox())\n return 'sandbox';\n return 'www';\n}\n\nexport function getHost(noSSL?: boolean) {\n const protocol = noSSL ? 'http' : 'https';\n if (_customSubdomain)\n return `${protocol}://${_customSubdomain}.${ORIGIN}`;\n if (isDev())\n return `${protocol}://dev.${ORIGIN}`;\n if (isLive() || isLocal())\n return `${protocol}://www.${ORIGIN}`;\n if (isSandbox2())\n return `${protocol}://sandbox2.${ORIGIN}`;\n if (isSandboxApp() || isSandbox())\n return `${protocol}://sandbox.${ORIGIN}`;\n return `${protocol}://www.${ORIGIN}`;\n}\n\nexport function getClient() {\n if (isWeb()) {\n return navigator.userAgent.slice(0, 255);\n } else if (isAndroid()) {\n return 'android';\n } else if (isWindows()) {\n return 'windows';\n } else if (isMacOS()) {\n return 'macos';\n } else if (isIOS()) {\n return 'ios';\n }\n return 'unknown';\n}\n\nexport function getCustomSubdomain() {\n return _customSubdomain;\n}\n\nexport function setCustomSubdomain(subdomain: string) {\n _customSubdomain = subdomain;\n}\n\nexport function isTouch() {\n switch (Platform.getType()) {\n case 'android': return true;\n case 'ios': return true;\n case 'macos': return false;\n case 'windows': return false;\n case 'web': return ('ontouchstart' in window\n || (navigator && navigator.maxTouchPoints > 0))\n && (isLocal() || (\n navigator.platform !== 'Win32'\n && navigator.platform !== 'Win64'\n && navigator.platform !== 'MacIntel')\n );\n default: return false;\n }\n}\n\nexport function isWeb() {\n return Platform.getType() === 'web';\n}\n\nexport function isNative() {\n return isAndroid() || isIOS() || isMacOS() || isWindows();\n}\n\nexport function isAndroid() {\n return Platform.getType() === 'android';\n}\n\nexport function isIOS() {\n return Platform.getType() === 'ios';\n}\n\nexport function isMacOS() {\n return Platform.getType() === 'macos';\n}\n\nexport function isWindows() {\n return Platform.getType() === 'windows';\n}\n\nexport function isSafari() {\n return isWeb()\n && navigator.userAgent.indexOf('Safari/') !== -1\n && navigator.userAgent.indexOf('Chrome/') === -1;\n}\n\nexport function isLive() {\n if (!isWeb()) return true;\n return window.location.origin === HOSTS.LIVE;\n}\n\nexport function isDev() {\n if (!isWeb()) return false;\n return window.location.origin === HOSTS.DEV;\n}\n\nexport function isLocal() {\n if (!isWeb()) return false;\n return window.location.origin === HOSTS.LOCAL\n || window.location.origin === HOSTS.PREVIEW\n || window.location.origin.indexOf('http://192.168') !== -1;\n}\n\nexport function isSandbox() {\n if (!isWeb()) return false;\n return window.location.origin === HOSTS.SANDBOX\n || window.location.origin === HOSTS.SANDBOX_TWO;\n}\n\nexport function isSandbox2() {\n if (!isWeb()) return false;\n return window.location.origin === HOSTS.SANDBOX_TWO;\n}\n\nexport function isSandboxApp() {\n if (!isWeb()) return false;\n return window.location.origin === HOSTS.SANDBOX_APP;\n}\n","export const VERSION = '3.2.0';\nexport const ORIGIN = 'mediafire.com';\nexport const SCOPE = '/';\nexport const HOSTS = {\n LIVE: `https://www.${ORIGIN}`,\n SANDBOX: `https://sandbox.${ORIGIN}`,\n SANDBOX_TWO: `https://sandbox2.${ORIGIN}`,\n SANDBOX_APP: `https://app-sandbox.${ORIGIN}`,\n DEV: `https://app-dev.${ORIGIN}`,\n PREVIEW: `http://local.${ORIGIN}`,\n LOCAL: `http://localhost:3000`,\n};\n\nexport const LOCALES = {\n DEFAULT: 'en',\n SUPPORTED: {\n en: \"English\",\n es: \"Español\",\n de: \"Deutsch\",\n ar: \"العربية\",\n pt: \"Português\",\n id: \"Bahasa Indonesia\",\n },\n};\n\nexport const KEYS = {\n BUGSNAG: 'f38f920c0646f792f006301974020325',\n AMPLITUDE_PRODUCTION: '28916b6cd60c79c0447b3c23ad698c98',\n AMPLITUDE_DEVELOPMENT: '9956c29ab0f3f042369ed79484581c28',\n};\n","import {Types} from 'react-ult';\nimport {default as FontRefs} from 'features/fonts';\n\nexport enum Breakpoints {\n menu = 900,\n};\n\nexport enum FontSizes {\n size11 = 11,\n size12 = 12,\n size14 = 14,\n size16 = 16,\n size20 = 20,\n size32 = 32,\n menuItem = 16,\n}\n\nexport const Colors = {\n primary: {\n brand: '#0070F0',\n dark: '#0e2866',\n medium: '#0045a6',\n light: '#e0eeff',\n },\n secondary: {\n green: '#66cc33',\n tan: '#feebc4',\n tanner: '#e2c18e',\n yellow: '#ffbf07',\n orange: '#ff8637',\n redOrange: '#ef5939',\n brightRed: '#e23b2a',\n },\n neutral: {\n black: '#000000',\n darker: '#1e232f',\n dark: '#282f3d',\n mid: '#888d9c',\n light: '#b2b7c4',\n lighter: '#e8e9ec',\n lightest: '#f4f4f5',\n whitish: '#fafafa',\n white: '#ffffff',\n transparent: 'rgba(0, 0, 0, 0)',\n },\n files: {\n text: '#000000',\n code: '#000000',\n document: '#0070F0',\n image: '#66cc33',\n pdf: '#e23b2a',\n video: '#9900ff',\n audio: '#9900ff',\n spreadsheet: '#00a651',\n archive: '#ffbf07',\n presentation: '#ef5939',\n },\n};\n\nexport class Fonts {\n static monospace: Types.FontInfo = {\n fontFamily: FontRefs.monospace,\n };\n\n static displayLight: Types.FontInfo = {\n fontFamily: FontRefs.displayLight,\n fontWeight: '300',\n };\n\n static displayRegular: Types.FontInfo = {\n fontFamily: FontRefs.displayRegular,\n fontWeight: '400',\n };\n\n static displaySemibold: Types.FontInfo = {\n fontFamily: FontRefs.displaySemibold,\n fontWeight: '600',\n };\n\n static displayBold: Types.FontInfo = {\n fontFamily: FontRefs.displayBold,\n fontWeight: '700',\n };\n}\n","import {DeviceBase} from './models';\n\nclass Device implements DeviceBase {\n share(url: string, title: string) {\n navigator.share({url, title}).catch(() => {});\n }\n\n restartApp() {\n location.reload();\n }\n\n getLocale(short?: boolean): string {\n const locale = (navigator.language || navigator['userLanguage']);\n return short ? locale.split('-').shift() : locale;\n }\n \n isDarkMode() {\n return matchMedia('(prefers-color-scheme: dark)').matches;\n }\n\n isPreferredGeo() {\n try {\n const dateTime = Intl.DateTimeFormat().resolvedOptions();\n const isEnglish = dateTime.locale.toString().startsWith('en-');\n const isAmerica = dateTime.timeZone.toString().startsWith('America/');\n return isEnglish && isAmerica;\n } catch(e) {\n return false;\n }\n }\n\n suscribeTheme(update: (isDark: boolean) => void) {\n matchMedia('(prefers-color-scheme: dark)')\n .addEventListener('change', e => update(e.matches));\n }\n}\n\nexport default new Device();\n","import {FontBase} from './models';\n\nclass Fonts implements FontBase {\n monospace = 'monospace';\n displayLight = '\"SF Semilight\", \"Segoe System UI Semilight\", \"Segoe UI Semilight\", sans-serif';\n displayRegular = '\"SF Regular\", \"Segoe System UI Regular\", \"Segoe UI Regular\", sans-serif';\n displaySemibold = '\"SF Semibold\", \"Segoe System UI Semibold\", \"Segoe UI Semibold\", sans-serif';\n displayBold = '\"SF Bold\", \"Segoe System UI Bold\", \"Segoe UI Bold\", sans-serif';\n}\n\nexport default new Fonts();\n","export const Vectors = {\n // Branding\n logoFlame: 'M67.8 5.77207C63.46 2.05207 57.61 0.312073 51.99 0.0520728C46.7386 -0.275133 41.5107 0.990018 36.99 3.68207C36.65 3.90207 36.31 4.13207 35.99 4.37207C37.2238 3.98545 38.5072 3.77997 39.8 3.76207C42.08 3.76207 43.93 5.32207 43.93 7.27207C43.93 9.22207 42.1 10.8021 39.82 10.8021C36.82 10.8021 33.9 9.80207 30.99 9.26207C27.9169 8.64535 24.7939 8.31063 21.66 8.26207C11.66 8.26207 8.56998 13.4321 8.56998 13.4321L9.42998 12.7821C10.2795 12.0794 11.2782 11.5801 12.35 11.3221C12.8397 11.234 13.3448 11.3178 13.7799 11.5591C14.215 11.8005 14.5534 12.1846 14.738 12.6467C14.9226 13.1087 14.942 13.6203 14.793 14.095C14.6439 14.5698 14.3356 14.9785 13.92 15.2521C10.16 17.5921 4.03998 16.6321 0.919983 25.1721C1.34868 24.2958 1.99621 23.5449 2.79998 22.9921C4.86144 21.6253 7.22779 20.7873 9.68998 20.5521C13.0213 20.0213 16.4265 20.1881 19.69 21.0421C21.55 21.5521 23.69 22.2521 24.78 24.0421C25.68 25.5021 25.69 27.5021 23.96 28.3321C22.6637 28.8839 21.2559 29.1237 19.85 29.0321H19.79C23.4056 29.511 26.9529 30.4104 30.36 31.7121C36.2 34.2021 41.63 37.7121 47.84 39.2421C52.5966 40.5551 57.6423 40.37 62.29 38.7121C65.4336 37.4416 68.1972 35.3832 70.3146 32.735C72.4321 30.0869 73.8321 26.9382 74.38 23.5921C74.8565 20.3087 74.5041 16.9582 73.3548 13.8458C72.2056 10.7334 70.296 7.95789 67.8 5.77207V5.77207ZM24.8 23.8721L24.74 23.8121L24.8 23.8721ZM57.15 29.0521C53.0499 28.9004 49.0383 27.8162 45.42 25.8821C37.81 22.1821 34.72 20.8821 34.72 20.6621C34.72 20.4421 39.27 22.2321 46.92 18.0421C51.34 15.6221 53.02 13.0421 57.1 13.0421C59.2217 13.0421 61.2565 13.8849 62.7568 15.3852C64.2571 16.8855 65.1 18.9203 65.1 21.0421C65.1 23.1638 64.2571 25.1986 62.7568 26.6989C61.2565 28.1992 59.2217 29.0421 57.1 29.0421L57.15 29.0521Z',\n logoFull: [\n 'M86.43 5.36182H99.8L100.19 22.1418H100.28L108.8 5.36182H122.48L115.84 36.5618H106.92L111.8 15.0518H111.71L101.48 36.5518H94.34L93.2 15.0518H93.11L88.8 36.5718H79.91L86.43 5.36182Z',\n 'M143.62 29.9718C143.05 31.5018 141.35 37.1418 131.56 37.1418C123.56 37.1418 120.28 32.6418 120.28 27.1418C120.28 16.7418 128.28 13.3318 133.87 13.3318C138.87 13.3318 144.97 16.1318 144.97 23.2518C145.009 24.576 144.861 25.899 144.53 27.1818H128.37C128.37 29.5818 129.2 31.5918 131.91 31.5918C132.571 31.6527 133.237 31.5345 133.837 31.2494C134.437 30.9644 134.949 30.5231 135.32 29.9718H143.62ZM136.8 22.6718C136.851 22.4282 136.881 22.1806 136.89 21.9318C136.9 21.5081 136.821 21.087 136.657 20.6963C136.492 20.3056 136.247 19.9541 135.937 19.665C135.627 19.3759 135.26 19.1557 134.859 19.019C134.458 18.8823 134.032 18.8321 133.61 18.8718C131.29 18.8718 129.76 20.2718 129.11 22.6718H136.8Z',\n 'M160.75 33.9918H160.66C160.021 34.9942 159.131 35.8122 158.079 36.3648C157.026 36.9173 155.848 37.1852 154.66 37.1418C147.36 37.1418 146.36 30.6718 146.36 27.9218C146.36 19.3118 150.86 13.3218 157.64 13.3218C160.26 13.3218 162.71 14.1118 164.19 16.6818L166.55 5.36182H175.2L168.73 36.5618H160.25L160.75 33.9918ZM161.91 23.8118C161.91 21.2818 161.04 19.6118 158.81 19.6118C155.36 19.6118 154.22 23.8518 154.22 27.1318C154.22 29.1818 155.14 30.8518 157.41 30.8518C160.8 30.8418 161.91 26.5218 161.91 23.8118V23.8118Z',\n 'M175.86 13.8918H184.51L179.8 36.5718H171.15L175.86 13.8918ZM184.99 11.4418H176.34L177.61 5.37183H186.26L184.99 11.4418Z',\n 'M213.9 5.36182H237.98L236.2 13.8818H221.73L220.9 17.7718H233.18L231.65 25.2018H219.37L217 36.5718H207.39L213.9 5.36182Z',\n 'M238.6 13.8918H247.25L242.53 36.5718H233.88L238.6 13.8918Z',\n 'M290 23.2418C290 16.1218 283.93 13.3218 278.9 13.3218C275.998 13.3174 273.16 14.1697 270.74 15.7718C269.12 16.8587 267.794 18.329 266.88 20.0518C265.798 22.2238 265.259 24.6258 265.31 27.0518C265.31 32.5618 268.54 37.0518 276.58 37.0518C286.37 37.0518 288.07 31.4118 288.64 29.8818H280.34C279.969 30.4323 279.456 30.873 278.856 31.158C278.257 31.4429 277.591 31.5617 276.93 31.5018C274.22 31.5018 273.39 29.5018 273.39 27.0918H289.56C289.883 25.8349 290.031 24.5393 290 23.2418ZM281.8 22.6718H274.11C274.77 20.2718 276.29 18.8718 278.61 18.8718C279.032 18.8321 279.458 18.8823 279.859 19.019C280.26 19.1557 280.627 19.3759 280.937 19.665C281.247 19.9541 281.492 20.3056 281.657 20.6963C281.821 21.087 281.9 21.5081 281.89 21.9318C281.881 22.1806 281.851 22.4281 281.8 22.6718V22.6718Z',\n 'M267.9 13.8419C266.809 13.488 265.667 13.3124 264.52 13.3219H264.46C263.611 13.3332 262.768 13.4714 261.96 13.7319C260.091 14.4531 258.495 15.744 257.4 17.4219H257.31L257.45 16.7619L258.06 13.8819H249.7L244.98 36.5619H253.63L255.86 26.0519C256.86 22.1519 258.72 20.8119 262.07 20.8019C262.913 20.8005 263.753 20.9046 264.57 21.1119L267.9 13.8419Z',\n 'M197.29 13.3218C191.74 13.3218 187.06 14.7218 185.71 20.7518H193.8C194.28 19.0518 195.5 18.4318 197.25 18.4318C198.56 18.4318 199.96 18.8218 199.96 20.4318C199.96 23.2318 196.07 22.8818 193.62 23.0518C187.11 23.5318 182.62 25.1518 182.62 31.1318C182.62 35.4618 186.07 37.1318 189.96 37.1318C192.49 37.1318 195.42 36.2118 196.96 34.3818L197.08 34.2218L196.6 36.5718H204.88L207.88 22.4118C208.058 21.4002 208.168 20.378 208.21 19.3518C208.3 13.8418 201.4 13.3218 197.29 13.3218ZM198.44 27.9518C197.8 30.4718 196.58 32.0518 194.1 32.0518C192.7 32.0518 191.35 31.6618 191.35 30.0518C191.35 28.4418 192.7 27.6518 194.15 27.5218C195.729 27.4806 197.287 27.1413 198.74 26.5218L198.44 27.9518Z',\n 'M247.73 11.4418H239.08L240.34 5.36182H249L247.73 11.4418Z',\n ],\n\n // Features\n featInsights: ['M19 3H5a2.006 2.006 0 0 0-2 2v14a2.006 2.006 0 0 0 2 2h14a2.006 2.006 0 0 0 2-2V5a2.006 2.006 0 0 0-2-2Zm0 16H5V5h14ZM17 7v10H7v-3l2.5-3 2.5 2Z'],\n featDeliver: ['m20.96 5.93-8-4.4a1.986 1.986 0 0 0-1.92 0l-8 4.4A2 2 0 0 0 2 7.68v8.64a2 2 0 0 0 1.04 1.75l8 4.4a1.986 1.986 0 0 0 1.92 0l8-4.4A2 2 0 0 0 22 16.32V7.68a2 2 0 0 0-1.04-1.75ZM12 3.28l6.96 3.83-2.43 1.33-6.96-3.82Zm-1 16.89-7-3.85v-7.5l7 3.85Zm1-9.23L5.04 7.11 7.5 5.76l6.95 3.83Zm8 5.38-7 3.85v-7.5l7-3.85Z'],\n featRequest: ['M12 12V8H8v8h8v-4ZM3 5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2v18.293a.707.707 0 0 1-1.207.5L17 21H5a2 2 0 0 1-2-2Zm11 1H6v12h12v-8Z'],\n featSend: ['M23 12 3.752 21.166a1 1 0 0 1-1.415-1.077L3.5 13.5 17 12 3.5 10.5 2.337 3.911a1 1 0 0 1 1.415-1.077Z'],\n featSell: ['M12 2a10 10 0 1 0 10 10A10 10 0 0 0 12 2Zm-.75 8.89 1.77.24a3.451 3.451 0 0 1-.02 6.84V19a1 1 0 0 1-2 0v-1.04a3.493 3.493 0 0 1-3-3.46h2a1.5 1.5 0 0 0 1.5 1.5h1.05a1.452 1.452 0 0 0 .2-2.89l-1.77-.24A3.451 3.451 0 0 1 11 6.03V5a1 1 0 0 1 2 0v1.04a3.493 3.493 0 0 1 3 3.46h-2A1.5 1.5 0 0 0 12.5 8h-1.05a1.452 1.452 0 0 0-.2 2.89Z'],\n\n // General\n iconMin: 'M20,14H4V10H20',\n iconAdd: 'M14 8H8V14H6V8H0V6H6V0H8V6H14V8Z',\n iconArrowUp: 'M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z',\n iconArrowDown: 'M7.41 7.84L12 12.42l4.59-4.58L18 9.25l-6 6-6-6z',\n iconTreeExpand: 'M10 17l5-5-5-5v10z',\n iconDropDown: 'M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 12l-4-4h8l-4 4z',\n iconBack: 'M20 11H7.83l5.59-5.59L12 4l-8 8 8 8 1.41-1.41L7.83 13H20v-2z',\n iconDanger: 'M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z',\n iconFeedback: 'M20 2H4c-1.1 0-1.99.9-1.99 2L2 22l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm-7 12h-2v-2h2v2zm0-4h-2V6h2v4z',\n iconAlert: 'M12 22c1.1 0 2-.9 2-2h-4c0 1.1.89 2 2 2zm6-6v-5c0-3.07-1.64-5.64-4.5-6.32V4c0-.83-.67-1.5-1.5-1.5s-1.5.67-1.5 1.5v.68C7.63 5.36 6 7.92 6 11v5l-2 2v1h16v-1l-2-2z',\n iconAlertNew: 'M18 16v-5c0-3.07-1.64-5.64-4.5-6.32V4c0-.83-.67-1.5-1.5-1.5s-1.5.67-1.5 1.5v.68C7.63 5.36 6 7.92 6 11v5l-2 2v1h16v-1l-2-2zm-5 0h-2v-2h2v2zm0-4h-2V8h2v4zm-1 10c1.1 0 2-.9 2-2h-4c0 1.1.89 2 2 2z',\n iconCheck: 'M10 0C4.48 0 0 4.48 0 10C0 15.52 4.48 20 10 20C15.52 20 20 15.52 20 10C20 4.48 15.52 0 10 0ZM8 15L3 10L4.41 8.59L8 12.17L15.59 4.58L17 6L8 15Z',\n iconClose: 'M14 1.41L12.59 0L7 5.59L1.41 0L0 1.41L5.59 7L0 12.59L1.41 14L7 8.41L12.59 14L14 12.59L8.41 7L14 1.41Z',\n iconCopy: 'M14 0H2C0.9 0 0 0.9 0 2V16H2V2H14V0ZM17 4H6C4.9 4 4 4.9 4 6V20C4 21.1 4.9 22 6 22H17C18.1 22 19 21.1 19 20V6C19 4.9 18.1 4 17 4ZM17 20H6V6H17V20Z',\n iconDescription: 'M0 6H2V4H0V6ZM0 10H2V8H0V10ZM0 2H2V0H0V2ZM4 6H18V4H4V6ZM4 10H18V8H4V10ZM4 0V2H18V0H4Z',\n iconDevice: 'M20 14C21.1 14 21.99 13.1 21.99 12L22 2C22 0.9 21.1 0 20 0H4C2.9 0 2 0.9 2 2V12C2 13.1 2.9 14 4 14H0V16H24V14H20ZM4 2H20V12H4V2Z',\n iconDownload: 'M14 6H10V0H4V6H0L7 13L14 6ZM0 15V17H14V15H0Z',\n iconExit: 'M11.08 12.59L13.67 10H4V8H13.67L11.08 5.41L12.5 4L17.5 9L12.5 14L11.08 12.59ZM16 0C16.5304 0 17.0391 0.210714 17.4142 0.585786C17.7893 0.960859 18 1.46957 18 2V6.67L16 4.67V2H2V16H16V13.33L18 11.33V16C18 16.5304 17.7893 17.0391 17.4142 17.4142C17.0391 17.7893 16.5304 18 16 18H2C0.89 18 0 17.1 0 16V2C0 0.89 0.89 0 2 0H16Z',\n iconEmptyTrash: 'M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zm2.46-7.12l1.41-1.41L12 12.59l2.12-2.12 1.41 1.41L13.41 14l2.12 2.12-1.41 1.41L12 15.41l-2.12 2.12-1.41-1.41L10.59 14l-2.13-2.12zM15.5 4l-1-1h-5l-1 1H5v2h14V4z',\n iconFiledrop: 'M19.35 6.04C18.67 2.59 15.64 0 12 0C9.11 0 6.6 1.64 5.35 4.04C2.34 4.36 0 6.91 0 10C0 13.31 2.69 16 6 16H19C21.76 16 24 13.76 24 11C24 8.36 21.95 6.22 19.35 6.04ZM14 9V13H10V9H7L12 4L17 9H14Z',\n iconFolder: 'M8 0H2C0.9 0 0.00999999 0.9 0.00999999 2L0 14C0 15.1 0.9 16 2 16H18C19.1 16 20 15.1 20 14V4C20 2.9 19.1 2 18 2H10L8 0Z',\n iconFolderAdd: 'M18 2H10L8 0H2C0.89 0 0.00999999 0.89 0.00999999 2L0 14C0 15.11 0.89 16 2 16H18C19.11 16 20 15.11 20 14V4C20 2.89 19.11 2 18 2ZM17 10H14V13H12V10H9V8H12V5H14V8H17V10Z',\n iconFileAdd: 'M14 2H6c-1.1 0-1.99.9-1.99 2L4 20c0 1.1.89 2 1.99 2H18c1.1 0 2-.9 2-2V8l-6-6zm2 14h-3v3h-2v-3H8v-2h3v-3h2v3h3v2zm-3-7V3.5L18.5 9H13z',\n iconGear: 'M17.1593 10.98C17.1993 10.66 17.2293 10.34 17.2293 10C17.2293 9.66 17.1993 9.34 17.1593 9.02L19.2693 7.37C19.4593 7.22 19.5093 6.95 19.3893 6.73L17.3893 3.27C17.2693 3.05 16.9993 2.97 16.7793 3.05L14.2893 4.05C13.7693 3.65 13.2093 3.32 12.5993 3.07L12.2193 0.42C12.1893 0.18 11.9793 0 11.7293 0H7.72933C7.47933 0 7.26933 0.18 7.23933 0.42L6.85933 3.07C6.24933 3.32 5.68933 3.66 5.16933 4.05L2.67933 3.05C2.44933 2.96 2.18933 3.05 2.06933 3.27L0.0693316 6.73C-0.0606684 6.95 -0.000668302 7.22 0.189332 7.37L2.29933 9.02C2.25933 9.34 2.22933 9.67 2.22933 10C2.22933 10.33 2.25933 10.66 2.29933 10.98L0.189332 12.63C-0.000668302 12.78 -0.0506684 13.05 0.0693316 13.27L2.06933 16.73C2.18933 16.95 2.45933 17.03 2.67933 16.95L5.16933 15.95C5.68933 16.35 6.24933 16.68 6.85933 16.93L7.23933 19.58C7.26933 19.82 7.47933 20 7.72933 20H11.7293C11.9793 20 12.1893 19.82 12.2193 19.58L12.5993 16.93C13.2093 16.68 13.7693 16.34 14.2893 15.95L16.7793 16.95C17.0093 17.04 17.2693 16.95 17.3893 16.73L19.3893 13.27C19.5093 13.05 19.4593 12.78 19.2693 12.63L17.1593 10.98ZM9.72933 13.5C7.79933 13.5 6.22933 11.93 6.22933 10C6.22933 8.07 7.79933 6.5 9.72933 6.5C11.6593 6.5 13.2293 8.07 13.2293 10C13.2293 11.93 11.6593 13.5 9.72933 13.5Z',\n iconList: 'M4 14h4v-4H4v4zm0 5h4v-4H4v4zM4 9h4V5H4v4zm5 5h12v-4H9v4zm0 5h12v-4H9v4zM9 5v4h12V5H9z',\n iconGrid: 'M4 11h5V5H4v6zm0 7h5v-6H4v6zm6 0h5v-6h-5v6zm6 0h5v-6h-5v6zm-6-7h5V5h-5v6zm6-6v6h5V5h-5z',\n iconHelp: 'M10 0C4.48 0 0 4.48 0 10C0 15.52 4.48 20 10 20C15.52 20 20 15.52 20 10C20 4.48 15.52 0 10 0ZM11 17H9V15H11V17ZM13.07 9.25L12.17 10.17C11.45 10.9 11 11.5 11 13H9V12.5C9 11.4 9.45 10.4 10.17 9.67L11.41 8.41C11.78 8.05 12 7.55 12 7C12 5.9 11.1 5 10 5C8.9 5 8 5.9 8 7H6C6 4.79 7.79 3 10 3C12.21 3 14 4.79 14 7C14 7.88 13.64 8.68 13.07 9.25Z',\n iconHome: 'M8 17V11H12V17H17V9H20L10 0L0 9H3V17H8Z',\n iconImage: 'M18 16V2C18 0.9 17.1 0 16 0H2C0.9 0 0 0.9 0 2V16C0 17.1 0.9 18 2 18H16C17.1 18 18 17.1 18 16ZM5.5 10.5L8 13.51L11.5 9L16 15H2L5.5 10.5Z',\n iconMenu: 'M0 12H18V10H0V12ZM0 7H18V5H0V7ZM0 0V2H18V0H0Z',\n iconMore: 'M2 4C3.1 4 4 3.1 4 2C4 0.9 3.1 0 2 0C0.9 0 0 0.9 0 2C0 3.1 0.9 4 2 4ZM2 6C0.9 6 0 6.9 0 8C0 9.1 0.9 10 2 10C3.1 10 4 9.1 4 8C4 6.9 3.1 6 2 6ZM2 12C0.9 12 0 12.9 0 14C0 15.1 0.9 16 2 16C3.1 16 4 15.1 4 14C4 12.9 3.1 12 2 12Z',\n iconMoreHoriz: 'M2 0C0.9 0 0 0.9 0 2C0 3.1 0.9 4 2 4C3.1 4 4 3.1 4 2C4 0.9 3.1 0 2 0ZM14 0C12.9 0 12 0.9 12 2C12 3.1 12.9 4 14 4C15.1 4 16 3.1 16 2C16 0.9 15.1 0 14 0ZM8 0C6.9 0 6 0.9 6 2C6 3.1 6.9 4 8 4C9.1 4 10 3.1 10 2C10 0.9 9.1 0 8 0Z',\n iconMove: 'M19.7025 9.2925L10.7025 0.2925C10.3125 -0.0975 9.6825 -0.0975 9.2925 0.2925L0.2925 9.2925C-0.0975 9.6825 -0.0975 10.3125 0.2925 10.7025L9.2925 19.7025C9.6825 20.0925 10.3125 20.0925 10.7025 19.7025L19.7025 10.7025C20.0925 10.3225 20.0925 9.6925 19.7025 9.2925ZM11.9925 12.5025V10.0025H7.9925V13.0025H5.9925V9.0025C5.9925 8.4525 6.4425 8.0025 6.9925 8.0025H11.9925V5.5025L15.4925 9.0025L11.9925 12.5025Z',\n iconPassword: 'M14 7H13V5C13 2.24 10.76 0 8 0C5.24 0 3 2.24 3 5V7H2C0.9 7 0 7.9 0 9V19C0 20.1 0.9 21 2 21H14C15.1 21 16 20.1 16 19V9C16 7.9 15.1 7 14 7ZM8 16C6.9 16 6 15.1 6 14C6 12.9 6.9 12 8 12C9.1 12 10 12.9 10 14C10 15.1 9.1 16 8 16ZM11.1 7H4.9V5C4.9 3.29 6.29 1.9 8 1.9C9.71 1.9 11.1 3.29 11.1 5V7Z',\n iconPhone: 'M11 0H3C1.34 0 0 1.34 0 3V19C0 20.66 1.34 22 3 22H11C12.66 22 14 20.66 14 19V3C14 1.34 12.66 0 11 0ZM9 20H5V19H9V20ZM12.25 17H1.75V3H12.25V17Z',\n iconPlus: 'M10 0C4.48 0 0 4.48 0 10C0 15.52 4.48 20 10 20C15.52 20 20 15.52 20 10C20 4.48 15.52 0 10 0ZM15 11H11V15H9V11H5V9H9V5H11V9H15V11Z',\n iconPrivate: 'M15 4H11V5.9H15C16.71 5.9 18.1 7.29 18.1 9C18.1 10.43 17.12 11.63 15.79 11.98L17.25 13.44C18.88 12.61 20 10.95 20 9C20 6.24 17.76 4 15 4ZM14 8H11.81L13.81 10H14V8ZM0 1.27L3.11 4.38C1.29 5.12 0 6.91 0 9C0 11.76 2.24 14 5 14H9V12.1H5C3.29 12.1 1.9 10.71 1.9 9C1.9 7.41 3.11 6.1 4.66 5.93L6.73 8H6V10H8.73L11 12.27V14H12.73L16.74 18L18 16.74L1.27 0L0 1.27Z',\n iconPublic: 'M1.9 5C1.9 3.29 3.29 1.9 5 1.9H9V0H5C2.24 0 0 2.24 0 5C0 7.76 2.24 10 5 10H9V8.1H5C3.29 8.1 1.9 6.71 1.9 5ZM6 6H14V4H6V6ZM15 0H11V1.9H15C16.71 1.9 18.1 3.29 18.1 5C18.1 6.71 16.71 8.1 15 8.1H11V10H15C17.76 10 20 7.76 20 5C20 2.24 17.76 0 15 0Z',\n iconRecent: 'M9.99 0C4.47 0 0 4.48 0 10C0 15.52 4.47 20 9.99 20C15.52 20 20 15.52 20 10C20 4.48 15.52 0 9.99 0ZM10 18C5.58 18 2 14.42 2 10C2 5.58 5.58 2 10 2C14.42 2 18 5.58 18 10C18 14.42 14.42 18 10 18ZM10.5 5H9V11L14.25 14.15L15 12.92L10.5 10.25V5Z',\n iconRename: 'M15 5H20V15H15V17C15 17.2652 15.1054 17.5196 15.2929 17.7071C15.4804 17.8946 15.7348 18 16 18H18V20H15.5C14.95 20 14 19.55 14 19C14 19.55 13.05 20 12.5 20H10V18H12C12.2652 18 12.5196 17.8946 12.7071 17.7071C12.8946 17.5196 13 17.2652 13 17V3C13 2.73478 12.8946 2.48043 12.7071 2.29289C12.5196 2.10536 12.2652 2 12 2H10V0H12.5C13.05 0 14 0.45 14 1C14 0.45 14.95 0 15.5 0H18V2H16C15.7348 2 15.4804 2.10536 15.2929 2.29289C15.1054 2.48043 15 2.73478 15 3V5ZM0 5H11V7H2V13H11V15H0V5ZM18 13V7H15V13H18Z',\n iconRestoreTrash: 'M13 3c-4.97 0-9 4.03-9 9H1l3.89 3.89.07.14L9 12H6c0-3.87 3.13-7 7-7s7 3.13 7 7-3.13 7-7 7c-1.93 0-3.68-.79-4.94-2.06l-1.42 1.42C8.27 19.99 10.51 21 13 21c4.97 0 9-4.03 9-9s-4.03-9-9-9zm-1 5v5l4.28 2.54.72-1.21-3.5-2.08V8H12z',\n iconRight: 'M0 10.59L4.58 6L0 1.41L1.41 0L7.41 6L1.41 12L0 10.59Z',\n iconLeft: 'M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z',\n iconSave: 'M54.2,12.4c-3.5-3-8.2-4.4-12.8-4.6c-4.2-0.2-8.6,0.7-12.1,2.9c-0.3,0.2-0.6,0.4-0.9,0.6c1-0.3,2.1-0.5,3.2-0.5 c1.9,0,3.3,1.3,3.3,2.8c0,1.5-1.5,2.8-3.3,2.8c-2.4,0-4.8-0.8-7.1-1.2c-2.5-0.5-5-0.8-7.5-0.8c-8,0-10.5,4.2-10.5,4.2 c0.3-0.2,0.4-0.3,0.7-0.6c0.7-0.6,1.5-1,2.3-1.2c1.9-0.4,2.8,2.1,1.3,3.2c-3.1,1.9-8,1.1-10.5,8c0.3-0.5,0.6-1.1,1.5-1.8 c0.9-0.7,2.7-1.5,5.5-1.9c2.7-0.4,5.5-0.3,8,0.4c1.5,0.4,3.3,0.9,4.1,2.4c0.7,1.2,0.7,2.8-0.7,3.5c-0.9,0.5-2.1,0.6-3.3,0.6 c0,0,0,0-0.1,0c0.5,0.1,5.1,0.7,8.6,2.1c4.7,2.1,9.2,4.9,14.1,6.1c3.8,0.9,8,1,11.7-0.4c5.1-2.1,9-6.8,9.8-12.2 C60.4,21.5,58.2,15.9,54.2,12.4z M51.8,26h-5.9v5.9h-3V26h-5.9v-3h5.9v-5.9h3V23h5.9V26z',\n iconSearch: 'M12.5 11H11.71L11.43 10.73C12.41 9.59 13 8.11 13 6.5C13 2.91 10.09 0 6.5 0C2.91 0 0 2.91 0 6.5C0 10.09 2.91 13 6.5 13C8.11 13 9.59 12.41 10.73 11.43L11 11.71V12.5L16 17.49L17.49 16L12.5 11V11ZM6.5 11C4.01 11 2 8.99 2 6.5C2 4.01 4.01 2 6.5 2C8.99 2 11 4.01 11 6.5C11 8.99 8.99 11 6.5 11Z',\n iconShare: 'M15 14.08C14.24 14.08 13.56 14.38 13.04 14.85L5.91 10.7C5.96 10.47 6 10.24 6 10C6 9.76 5.96 9.53 5.91 9.3L12.96 5.19C13.5 5.69 14.21 6 15 6C16.66 6 18 4.66 18 3C18 1.34 16.66 0 15 0C13.34 0 12 1.34 12 3C12 3.24 12.04 3.47 12.09 3.7L5.04 7.81C4.5 7.31 3.79 7 3 7C1.34 7 0 8.34 0 10C0 11.66 1.34 13 3 13C3.79 13 4.5 12.69 5.04 12.19L12.16 16.35C12.11 16.56 12.08 16.78 12.08 17C12.08 18.61 13.39 19.92 15 19.92C16.61 19.92 17.92 18.61 17.92 17C17.92 15.39 16.61 14.08 15 14.08Z',\n iconFollowing: 'M16 11c1.66 0 2.99-1.34 2.99-3S17.66 5 16 5c-1.66 0-3 1.34-3 3s1.34 3 3 3zm-8 0c1.66 0 2.99-1.34 2.99-3S9.66 5 8 5C6.34 5 5 6.34 5 8s1.34 3 3 3zm0 2c-2.33 0-7 1.17-7 3.5V19h14v-2.5c0-2.33-4.67-3.5-7-3.5zm8 0c-.29 0-.62.02-.97.05 1.16.84 1.97 1.97 1.97 3.45V19h6v-2.5c0-2.33-4.67-3.5-7-3.5z',\n iconSort: 'M3 18h6v-2H3v2zM3 6v2h18V6H3zm0 7h12v-2H3v2z',\n iconSortAlt: 'M13.34 2.36H8.62L10.98 0L13.34 2.36ZM8.65 17.07H13.31L10.98 19.4L8.65 17.07ZM4.5 3.97L0 15.43H1.84L2.76 12.98H7.87L8.79 15.43H10.63L6.14 3.97H4.5ZM3.37 11.34L5.31 6.16L7.25 11.34H3.37ZM14.13 13.84H20.25V15.43H11.72V14.14L17.64 5.58H11.76V3.98H20.06V5.24L14.13 13.84V13.84Z',\n iconFilter: 'M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z',\n iconTrash: 'M1 16C1 17.1 1.9 18 3 18H11C12.1 18 13 17.1 13 16V4H1V16ZM14 1H10.5L9.5 0H4.5L3.5 1H0V3H14V1Z',\n iconUpload: 'M4 13H10V7H14L7 0L0 7H4V13ZM0 15H14V17H0V15Z',\n iconRadioOn: 'M12 7c-2.76 0-5 2.24-5 5s2.24 5 5 5 5-2.24 5-5-2.24-5-5-5zm0-5C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z',\n iconRadioOff: 'M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z',\n iconWarning: 'M10 0C4.48 0 0 4.48 0 10C0 15.52 4.48 20 10 20C15.52 20 20 15.52 20 10C20 4.48 15.52 0 10 0ZM11 15H9V13H11V15ZM11 11H9V5H11V11Z',\n iconWeb: 'M9.99 0C4.47 0 0 4.48 0 10C0 15.52 4.47 20 9.99 20C15.52 20 20 15.52 20 10C20 4.48 15.52 0 9.99 0ZM16.92 6H13.97C13.65 4.75 13.19 3.55 12.59 2.44C14.43 3.07 15.96 4.35 16.92 6ZM10 2.04C10.83 3.24 11.48 4.57 11.91 6H8.09C8.52 4.57 9.17 3.24 10 2.04ZM2.26 12C2.1 11.36 2 10.69 2 10C2 9.31 2.1 8.64 2.26 8H5.64C5.56 8.66 5.5 9.32 5.5 10C5.5 10.68 5.56 11.34 5.64 12H2.26ZM3.08 14H6.03C6.35 15.25 6.81 16.45 7.41 17.56C5.57 16.93 4.04 15.66 3.08 14ZM6.03 6H3.08C4.04 4.34 5.57 3.07 7.41 2.44C6.81 3.55 6.35 4.75 6.03 6ZM10 17.96C9.17 16.76 8.52 15.43 8.09 14H11.91C11.48 15.43 10.83 16.76 10 17.96ZM12.34 12H7.66C7.57 11.34 7.5 10.68 7.5 10C7.5 9.32 7.57 8.65 7.66 8H12.34C12.43 8.65 12.5 9.32 12.5 10C12.5 10.68 12.43 11.34 12.34 12ZM12.59 17.56C13.19 16.45 13.65 15.25 13.97 14H16.92C15.96 15.65 14.43 16.93 12.59 17.56ZM14.36 12C14.44 11.34 14.5 10.68 14.5 10C14.5 9.32 14.44 8.66 14.36 8H17.74C17.9 8.64 18 9.31 18 10C18 10.69 17.9 11.36 17.74 12H14.36Z',\n iconClock: 'M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zm.5-13H11v6l5.25 3.15.75-1.23-4.5-2.67z',\n iconPro: [\n 'M8.86315 8.87305e-06C8.50478 0.000300779 8.15284 0.0951732 7.84287 0.275041L1.0203 4.21421C0.70873 4.39357 0.450201 4.65223 0.270995 4.96389C0.0917897 5.27555 -0.00170206 5.6291 2.34595e-05 5.98861V13.8581C-0.00170206 14.2176 0.0917897 14.5711 0.270995 14.8828C0.450201 15.1945 0.70873 15.4531 1.0203 15.6325L7.84287 19.5672C8.1524 19.7459 8.50352 19.84 8.86094 19.84C9.21835 19.84 9.56947 19.7459 9.879 19.5672L16.706 15.628C17.0176 15.4487 17.2761 15.19 17.4553 14.8784C17.6345 14.5667 17.728 14.2131 17.7263 13.8536V5.97974C17.728 5.62023 17.6345 5.26668 17.4553 4.95502C17.2761 4.64335 17.0176 4.3847 16.706 4.20534L9.88343 0.270605C9.57304 0.0922874 9.22112 -0.00104778 8.86315 8.87305e-06Z',\n 'M7.59002 13.8136H7.14642C7.10869 13.8179 7.07049 13.8135 7.03466 13.801C6.99882 13.7885 6.96628 13.768 6.93943 13.7412C6.91258 13.7143 6.89213 13.6818 6.87958 13.6459C6.86703 13.6101 6.86272 13.5719 6.86695 13.5342V7.19956C6.86383 7.16358 6.86832 7.12734 6.88012 7.09321C6.89193 7.05908 6.91079 7.02782 6.93548 7.00145C6.96017 6.97509 6.99013 6.95422 7.02341 6.94021C7.0567 6.92619 7.09256 6.91933 7.12867 6.92009C7.78077 6.88017 8.58368 6.87573 8.80992 6.87573C10.7218 6.87573 11.6268 7.09753 11.6268 9.12035C11.6268 11.1432 10.8106 11.3383 8.80992 11.3383H7.86949V13.5563C7.87032 13.5923 7.86347 13.628 7.84942 13.6611C7.83536 13.6942 7.81441 13.7239 7.78796 13.7482C7.76151 13.7726 7.73018 13.791 7.69604 13.8023C7.66191 13.8136 7.62576 13.8174 7.59002 13.8136ZM7.86949 10.4024H8.75669C10.3226 10.4024 10.6154 10.3624 10.6154 9.12922C10.6154 7.89601 10.3093 7.79842 8.75669 7.79842H7.86949V10.4024Z',\n ],\n\n // File Icons\n fileArchive: [\n 'M34.28 12.14V37.86C34.28 38.141 34.2246 38.4193 34.1171 38.6789C34.0096 38.9386 33.8519 39.1745 33.6532 39.3732C33.4545 39.5719 33.2186 39.7296 32.9589 39.8371C32.6993 39.9446 32.421 40 32.14 40H2.14C1.85897 40 1.58069 39.9446 1.32106 39.8371C1.06142 39.7296 0.825509 39.5719 0.626791 39.3732C0.428074 39.1745 0.270443 38.9386 0.162898 38.6789C0.0553525 38.4193 0 38.141 0 37.86V2.14C0 1.57244 0.225464 1.02812 0.626791 0.626791C1.02812 0.225464 1.57244 0 2.14 0H22.14C23.4969 0.0774993 24.7874 0.613415 25.8 1.52L32.8 8.52C33.6838 9.52751 34.2048 10.8019 34.28 12.14V12.14ZM2.85 2.86V37.14H31.43V14.29H22.14C21.859 14.29 21.5807 14.2346 21.3211 14.1271C21.0614 14.0196 20.8255 13.8619 20.6268 13.6632C20.4281 13.4645 20.2704 13.2286 20.1629 12.9689C20.0554 12.7093 20 12.431 20 12.15V2.86H2.85ZM22.86 11.43H31.25C31.145 11.0987 30.9788 10.79 30.76 10.52L23.76 3.52C23.4914 3.2919 23.1829 3.11559 22.85 3V11.39L22.86 11.43Z',\n 'M22.79 29.43C22.7913 29.0902 22.7373 28.7524 22.63 28.43C22.63 28.43 22.14 26.74 20.24 20.34C20.1684 20.0051 19.9991 19.6991 19.7534 19.4605C19.5077 19.222 19.1968 19.0617 18.86 19H15.36C15.0232 19.0617 14.7123 19.222 14.4666 19.4605C14.2209 19.6991 14.0516 20.0051 13.98 20.34C12.08 26.75 11.59 28.28 11.59 28.28C11.4808 28.6329 11.4268 29.0006 11.43 29.37C11.43 31.8 13.76 33.47 16.96 33.54H17.12C20.39 33.54 22.79 31.9 22.79 29.43ZM17.03 31H16.95C15.38 31 14.21 30.35 14.21 29.57C14.21 28.79 15.42 28.15 16.99 28.14H17.04C18.63 28.14 19.92 28.79 19.92 29.57C19.92 30.35 18.62 31 17.03 31Z',\n ],\n\n fileAudio: [\n 'M34.28 12.14V37.86C34.28 38.141 34.2246 38.4193 34.1171 38.6789C34.0096 38.9386 33.8519 39.1745 33.6532 39.3732C33.4545 39.5719 33.2186 39.7296 32.9589 39.8371C32.6993 39.9446 32.421 40 32.14 40H2.14C1.85897 40 1.58069 39.9446 1.32106 39.8371C1.06142 39.7296 0.825509 39.5719 0.626791 39.3732C0.428074 39.1745 0.270443 38.9386 0.162898 38.6789C0.0553525 38.4193 0 38.141 0 37.86V2.14C0 1.57244 0.225464 1.02812 0.626791 0.626791C1.02812 0.225464 1.57244 0 2.14 0H22.14C23.4969 0.0774993 24.7874 0.613415 25.8 1.52L32.8 8.52C33.6838 9.52751 34.2048 10.8019 34.28 12.14V12.14ZM31.42 14.28H22.14C21.5724 14.28 21.0281 14.0545 20.6268 13.6532C20.2255 13.2519 20 12.7076 20 12.14V2.86H2.85V37.14H31.43V14.29L31.42 14.28ZM14.28 19.64V31.79C14.2792 31.9336 14.2361 32.0737 14.156 32.1928C14.076 32.312 13.9626 32.4049 13.83 32.46C13.7403 32.471 13.6497 32.471 13.56 32.46C13.3683 32.4578 13.1838 32.3868 13.04 32.26L9.34 28.53H6.43C6.33639 28.5313 6.24346 28.5139 6.15671 28.4787C6.06996 28.4435 5.99115 28.3912 5.92495 28.325C5.85875 28.2588 5.8065 28.18 5.7713 28.0933C5.7361 28.0065 5.71865 27.9136 5.72 27.82V23.57C5.71865 23.4764 5.7361 23.3835 5.7713 23.2967C5.8065 23.21 5.85875 23.1312 5.92495 23.065C5.99115 22.9988 6.06996 22.9465 6.15671 22.9113C6.24346 22.8761 6.33639 22.8587 6.43 22.86H9.35L13.05 19.13C13.1507 19.0289 13.2791 18.9601 13.419 18.9322C13.5589 18.9042 13.704 18.9185 13.8358 18.9731C13.9676 19.0278 14.0801 19.1203 14.1592 19.2391C14.2383 19.3578 14.2803 19.4973 14.28 19.64V19.64ZM19.48 30.64C20.7267 29.317 21.4211 27.5678 21.4211 25.75C21.4211 23.9322 20.7267 22.183 19.48 20.86C19.3487 20.7234 19.1917 20.6141 19.0182 20.5381C18.8446 20.4622 18.6577 20.4212 18.4683 20.4175C18.2789 20.4138 18.0905 20.4474 17.9141 20.5165C17.7377 20.5855 17.5766 20.6887 17.44 20.82C17.3034 20.9513 17.1941 21.1083 17.1181 21.2818C17.0422 21.4554 17.0012 21.6423 16.9975 21.8317C16.9938 22.0211 17.0274 22.2095 17.0965 22.3859C17.1655 22.5623 17.2687 22.7234 17.4 22.86C18.1468 23.6508 18.5629 24.6973 18.5629 25.785C18.5629 26.8727 18.1468 27.9192 17.4 28.71C17.1409 28.9784 16.9961 29.3369 16.9961 29.71C16.9961 30.0831 17.1409 30.4416 17.4 30.71C17.6781 30.9506 18.0323 31.0852 18.4 31.09C18.6039 31.086 18.8048 31.0405 18.9905 30.9563C19.1762 30.872 19.3427 30.7508 19.48 30.6V30.64ZM24.25 33.85C26.1155 31.5608 27.1343 28.6981 27.1343 25.745C27.1343 22.7919 26.1155 19.9292 24.25 17.64C24.1347 17.4844 23.9891 17.3538 23.8218 17.2562C23.6546 17.1585 23.4693 17.0959 23.2771 17.072C23.0849 17.0482 22.8899 17.0636 22.7038 17.1173C22.5178 17.1711 22.3446 17.2621 22.1948 17.3848C22.045 17.5075 21.9216 17.6594 21.8323 17.8312C21.7429 18.003 21.6893 18.1911 21.6749 18.3842C21.6604 18.5773 21.6853 18.7714 21.7481 18.9546C21.8108 19.1378 21.9101 19.3063 22.04 19.45C23.4827 21.2308 24.27 23.4531 24.27 25.745C24.27 28.0369 23.4827 30.2592 22.04 32.04C21.8999 32.1826 21.7912 32.353 21.721 32.5402C21.6508 32.7274 21.6207 32.9272 21.6325 33.1268C21.6443 33.3264 21.6979 33.5213 21.7897 33.6989C21.8815 33.8765 22.0095 34.0328 22.1655 34.1579C22.3214 34.283 22.5019 34.3739 22.6952 34.4249C22.8885 34.4759 23.0904 34.4858 23.2878 34.454C23.4851 34.4222 23.6736 34.3493 23.8411 34.2401C24.0086 34.1309 24.1513 33.9878 24.26 33.82L24.25 33.85ZM22.85 11.46H31.24C31.135 11.1287 30.9688 10.82 30.75 10.55L23.75 3.55C23.4864 3.31283 23.1813 3.12637 22.85 3V11.39V11.46Z',\n ],\n\n fileCode: [\n 'M34.28 12.14V37.86C34.28 38.141 34.2246 38.4193 34.1171 38.6789C34.0096 38.9386 33.8519 39.1745 33.6532 39.3732C33.4545 39.5719 33.2186 39.7296 32.9589 39.8371C32.6993 39.9446 32.421 40 32.14 40H2.14C1.85897 40 1.58069 39.9446 1.32106 39.8371C1.06142 39.7296 0.825509 39.5719 0.626791 39.3732C0.428074 39.1745 0.270443 38.9386 0.162898 38.6789C0.0553525 38.4193 0 38.141 0 37.86V2.14C0 1.57244 0.225464 1.02812 0.626791 0.626791C1.02812 0.225464 1.57244 0 2.14 0H22.14C23.4969 0.0774993 24.7874 0.613415 25.8 1.52L32.8 8.52C33.6838 9.52751 34.2048 10.8019 34.28 12.14ZM31.42 14.28H22.14C21.5724 14.28 21.0281 14.0545 20.6268 13.6532C20.2255 13.2519 20 12.7076 20 12.14V2.86H2.85V37.14H31.43V14.29L31.42 14.28ZM22.85 11.42H31.24C31.135 11.0887 30.9688 10.78 30.75 10.51L23.75 3.51C23.4832 3.28707 23.1783 3.11429 22.85 3V11.39V11.42Z',\n 'M11.71 19L12.85 19.85C12.9998 19.965 13.0985 20.1343 13.1247 20.3213C13.1509 20.5084 13.1025 20.6983 12.99 20.85L8.92999 26.27L12.99 31.69C13.1025 31.8417 13.1509 32.0316 13.1247 32.2186C13.0985 32.4057 12.9998 32.575 12.85 32.69L11.71 33.54C11.636 33.5975 11.5513 33.6398 11.4608 33.6644C11.3703 33.689 11.2759 33.6954 11.1829 33.6834C11.0899 33.6713 11.0003 33.6409 10.9191 33.594C10.8379 33.5471 10.7669 33.4845 10.71 33.41L5.70999 26.69C5.62264 26.5655 5.57578 26.4171 5.57578 26.265C5.57578 26.1129 5.62264 25.9645 5.70999 25.84L10.71 19.12C10.7676 19.0462 10.8392 18.9845 10.9207 18.9386C11.0023 18.8926 11.0921 18.8631 11.185 18.852C11.278 18.8408 11.3722 18.8482 11.4623 18.8736C11.5524 18.899 11.6366 18.9419 11.71 19Z',\n 'M14.2 34.8299L16.78 17.8299C16.7944 17.7374 16.8273 17.6487 16.8767 17.5691C16.9261 17.4895 16.9909 17.4206 17.0674 17.3665C17.1438 17.3125 17.2304 17.2743 17.3218 17.2542C17.4133 17.2342 17.5079 17.2327 17.6 17.2499L19.01 17.4699C19.1035 17.4843 19.1932 17.5175 19.2736 17.5675C19.3539 17.6175 19.4233 17.6833 19.4775 17.7608C19.5317 17.8384 19.5697 17.9262 19.589 18.0189C19.6083 18.1115 19.6087 18.2071 19.59 18.2999L17.01 35.2999C16.9955 35.3924 16.9626 35.4811 16.9133 35.5607C16.8639 35.6403 16.7991 35.7092 16.7226 35.7633C16.6461 35.8174 16.5596 35.8556 16.4681 35.8756C16.3766 35.8956 16.282 35.8971 16.19 35.8799L14.78 35.6599C14.6864 35.6455 14.5968 35.6124 14.5164 35.5624C14.436 35.5124 14.3666 35.4466 14.3124 35.369C14.2582 35.2914 14.2203 35.2036 14.201 35.111C14.1816 35.0183 14.1813 34.9227 14.2 34.8299Z',\n 'M28.61 26.7099L23.61 33.4299C23.5531 33.5044 23.482 33.5669 23.4009 33.6139C23.3197 33.6608 23.2301 33.6912 23.1371 33.7033C23.0441 33.7153 22.9497 33.7089 22.8592 33.6843C22.7687 33.6597 22.684 33.6174 22.61 33.5599L21.47 32.7099C21.3201 32.5949 21.2215 32.4256 21.1953 32.2385C21.1691 32.0515 21.2175 31.8616 21.33 31.7099L25.39 26.2899L21.33 20.8699C21.2175 20.7182 21.1691 20.5283 21.1953 20.3412C21.2215 20.1542 21.3201 19.9849 21.47 19.8699L22.57 18.9999C22.644 18.9424 22.7287 18.9001 22.8192 18.8755C22.9097 18.8509 23.0041 18.8444 23.0971 18.8565C23.1901 18.8686 23.2797 18.899 23.3609 18.9459C23.442 18.9928 23.5131 19.0553 23.57 19.1299L28.57 25.8499C28.6655 25.9711 28.7208 26.1193 28.7279 26.2735C28.7351 26.4277 28.6939 26.5803 28.61 26.7099Z',\n ],\n\n fileDocument: [\n 'M34.28 12.14V37.86C34.28 38.141 34.2246 38.4193 34.1171 38.6789C34.0096 38.9386 33.8519 39.1745 33.6532 39.3732C33.4545 39.5719 33.2186 39.7296 32.9589 39.8371C32.6993 39.9446 32.421 40 32.14 40H2.14C1.85897 40 1.58069 39.9446 1.32106 39.8371C1.06142 39.7296 0.825509 39.5719 0.626791 39.3732C0.428074 39.1745 0.270443 38.9386 0.162898 38.6789C0.0553525 38.4193 0 38.141 0 37.86V2.14C0 1.57244 0.225464 1.02812 0.626791 0.626791C1.02812 0.225464 1.57244 0 2.14 0H22.14C23.4969 0.0774993 24.7874 0.613415 25.8 1.52L32.8 8.52C33.6838 9.52751 34.2048 10.8019 34.28 12.14ZM31.42 14.28H22.14C21.5724 14.28 21.0281 14.0545 20.6268 13.6532C20.2255 13.2519 20 12.7076 20 12.14V2.86H2.85V37.14H31.43V14.29L31.42 14.28ZM22.85 11.42H31.24C31.1355 11.0855 30.9693 10.7734 30.75 10.5L23.75 3.5C23.4825 3.28063 23.1776 3.11126 22.85 3V11.39V11.42Z',\n 'M5.2 19.9999H6.76L10.42 34.7599H13.97L16.83 23.9999C16.9339 23.674 17.0076 23.3393 17.05 22.9999C17.0602 22.8234 17.0602 22.6464 17.05 22.4699H17.14L17.21 22.9999C17.2599 23.3364 17.3267 23.6701 17.41 23.9999L20.27 34.8299H23.82L27.52 19.9999H29.08V17.6399H22.38V19.9999H24.38L22.14 29.8099C22.0593 30.1383 22.0058 30.4727 21.98 30.8099V31.2799H21.9C21.8854 31.1221 21.862 30.9651 21.83 30.8099C21.76 30.5199 21.72 30.1399 21.63 29.8099L18.41 17.6399H15.87L12.66 29.8099C12.57 30.1699 12.55 30.5499 12.48 30.8099L12.39 31.2799H12.3V30.8099C12.2742 30.4727 12.2207 30.1383 12.14 29.8099L9.89 19.9999H11.89V17.6399H5.19V19.9999H5.2Z', \n ],\n\n fileFolder: [\n 'M14 0H3.5C1.575 0 0.0175 1.575 0.0175 3.5L0 24.5C0 26.425 1.575 28 3.5 28H31.5C33.425 28 35 26.425 35 24.5V7C35 5.075 33.425 3.5 31.5 3.5H17.5L14 0Z',\n ],\n\n fileGeneric: [\n 'M34.28 12.14V37.86C34.28 38.141 34.2246 38.4193 34.1171 38.6789C34.0096 38.9386 33.8519 39.1745 33.6532 39.3732C33.4545 39.5719 33.2186 39.7296 32.9589 39.8371C32.6993 39.9446 32.421 40 32.14 40H2.14C1.85897 40 1.58069 39.9446 1.32106 39.8371C1.06142 39.7296 0.825509 39.5719 0.626791 39.3732C0.428074 39.1745 0.270443 38.9386 0.162898 38.6789C0.0553525 38.4193 0 38.141 0 37.86V2.14C0 1.57244 0.225464 1.02812 0.626791 0.626791C1.02812 0.225464 1.57244 0 2.14 0H22.14C23.4969 0.0774993 24.7874 0.613415 25.8 1.52L32.8 8.52C33.6838 9.52751 34.2048 10.8019 34.28 12.14V12.14ZM31.42 14.28H22.14C21.5724 14.28 21.0281 14.0545 20.6268 13.6532C20.2255 13.2519 20 12.7076 20 12.14V2.86H2.85V37.14H31.43V14.29L31.42 14.28ZM22.85 11.42H31.24C31.135 11.0887 30.9688 10.78 30.75 10.51L23.75 3.51C23.4832 3.28707 23.1783 3.11429 22.85 3V11.39V11.42Z',\n ],\n\n fileImage: [\n 'M34.28 12.14V37.86C34.28 38.141 34.2246 38.4193 34.1171 38.6789C34.0096 38.9386 33.8519 39.1745 33.6532 39.3732C33.4545 39.5719 33.2186 39.7296 32.9589 39.8371C32.6993 39.9446 32.421 40 32.14 40H2.14C1.85897 40 1.58069 39.9446 1.32106 39.8371C1.06142 39.7296 0.825509 39.5719 0.626791 39.3732C0.428074 39.1745 0.270443 38.9386 0.162898 38.6789C0.0553525 38.4193 0 38.141 0 37.86V2.14C0 1.57244 0.225464 1.02812 0.626791 0.626791C1.02812 0.225464 1.57244 0 2.14 0H22.14C23.4969 0.0774993 24.7874 0.613415 25.8 1.52L32.8 8.52C33.6838 9.52751 34.2048 10.8019 34.28 12.14ZM31.42 14.28H22.14C21.5724 14.28 21.0281 14.0545 20.6268 13.6532C20.2255 13.2519 20 12.7076 20 12.14V2.86H2.85V37.14H31.43V14.29L31.42 14.28ZM28.56 34.28H5.71V30L10 25.71L12.86 28.57L21.43 20L28.57 27.14V34.28H28.56ZM22.85 11.43H31.24C31.135 11.0987 30.9688 10.79 30.75 10.52L23.75 3.52C23.484 3.29352 23.1791 3.11731 22.85 3V11.39V11.43Z',\n 'M11.51 24.03C13.0398 24.03 14.28 22.7898 14.28 21.26C14.28 19.7302 13.0398 18.49 11.51 18.49C9.98016 18.49 8.73999 19.7302 8.73999 21.26C8.73999 22.7898 9.98016 24.03 11.51 24.03Z',\n ],\n\n filePDF: [\n 'M34.28 12.14V37.86C34.28 38.141 34.2246 38.4193 34.1171 38.6789C34.0096 38.9386 33.8519 39.1745 33.6532 39.3732C33.4545 39.5719 33.2186 39.7296 32.9589 39.8371C32.6993 39.9446 32.421 40 32.14 40H2.14C1.85897 40 1.58069 39.9446 1.32106 39.8371C1.06142 39.7296 0.825509 39.5719 0.626791 39.3732C0.428074 39.1745 0.270443 38.9386 0.162898 38.6789C0.0553525 38.4193 0 38.141 0 37.86V2.14C0 1.57244 0.225464 1.02812 0.626791 0.626791C1.02812 0.225464 1.57244 0 2.14 0H22.14C23.4969 0.0774993 24.7874 0.613415 25.8 1.52L32.8 8.52C33.6838 9.52751 34.2048 10.8019 34.28 12.14ZM31.42 14.28H22.14C21.5724 14.28 21.0281 14.0545 20.6268 13.6532C20.2255 13.2519 20 12.7076 20 12.14V2.86H2.85V37.14H31.43V14.29L31.42 14.28ZM22.85 11.42H31.24C31.135 11.0887 30.9688 10.78 30.75 10.51L23.75 3.51C23.4836 3.28652 23.1786 3.11368 22.85 3V11.39V11.42Z',\n 'M26.14 29.38C25.7 28.65 24.14 28.51 22.99 28.51C22.2914 28.512 21.5935 28.5554 20.9 28.64C20.3762 28.3438 19.8749 28.0095 19.4 27.64C18.1804 26.4848 17.2987 25.0189 16.85 23.4C17.0469 22.2775 17.1439 21.1397 17.14 20V19.44C17.1232 19.3903 17.0996 19.3432 17.07 19.3C17.0803 19.2539 17.0803 19.2061 17.07 19.16C17.1947 18.6393 17.1346 18.0914 16.9 17.61C16.7677 17.3381 16.5398 17.1245 16.26 17.01H15.91C15.7086 17.0967 15.5323 17.2329 15.3977 17.406C15.2631 17.5791 15.1744 17.7834 15.14 18C14.8618 19.7692 15.0092 21.5792 15.57 23.28C15.0981 24.916 14.4789 26.5058 13.72 28.03C13.01 29.47 12.36 30.67 11.81 31.58C11.8153 31.5638 11.8153 31.5462 11.81 31.53C11.7905 31.4956 11.7641 31.4656 11.7326 31.4418C11.701 31.418 11.665 31.4009 11.6266 31.3915C11.5882 31.3822 11.5483 31.3808 11.5093 31.3874C11.4703 31.394 11.4331 31.4085 11.4 31.43C9.13999 32.64 8.21999 34 8.03999 34.84C8.00919 34.9481 8.00309 35.0618 8.02213 35.1725C8.04117 35.2833 8.08487 35.3884 8.14999 35.48C8.17759 35.5196 8.21567 35.5508 8.25999 35.57L8.68999 35.78C8.84239 35.8664 9.01481 35.9112 9.18999 35.91C10.26 35.91 11.66 34.38 13.5 31.24C15.7744 30.5006 18.1209 30.0044 20.5 29.76C21.8501 30.5019 23.3438 30.9452 24.88 31.06C25.83 31.06 26.17 30.7 26.17 30.38C26.1641 30.3571 26.1641 30.333 26.17 30.31C26.2502 30.167 26.2898 30.0047 26.2845 29.8408C26.2792 29.6769 26.2292 29.5176 26.14 29.38ZM9.13999 35C9.73659 33.8952 10.5698 32.9357 11.58 32.19C10.42 33.94 9.65999 34.7 9.13999 35ZM16.23 18.61C16.2318 18.5867 16.2318 18.5633 16.23 18.54C16.3755 18.7219 16.4564 18.9471 16.46 19.18C16.4573 19.21 16.4573 19.2401 16.46 19.27C16.4302 19.3132 16.4067 19.3603 16.39 19.41C16.39 19.62 16.3 19.87 16.26 20.18C16.22 20.49 16.19 20.68 16.13 20.96C15.9812 20.1638 16.0085 19.3446 16.21 18.56L16.23 18.61ZM14.01 30.34C14.28 29.86 14.54 29.34 14.81 28.86C15.3987 27.7326 15.8937 26.5586 16.29 25.35C16.8197 26.5408 17.589 27.6096 18.55 28.49C18.71 28.63 18.89 28.76 19.07 28.9C17.3406 29.2148 15.646 29.697 14.01 30.34ZM25.23 30.13C24.4713 30.0831 23.725 29.9142 23.02 29.63C24.96 29.63 25.43 29.97 25.51 30.06C25.5142 30.0764 25.5142 30.0936 25.51 30.11C25.4172 30.1225 25.3234 30.1258 25.23 30.12V30.13Z',\n ],\n\n filePresentation: [\n 'M34.28 12.14V37.86C34.28 38.141 34.2246 38.4193 34.1171 38.6789C34.0096 38.9386 33.8519 39.1745 33.6532 39.3732C33.4545 39.5719 33.2186 39.7296 32.9589 39.8371C32.6993 39.9446 32.421 40 32.14 40H2.14C1.85897 40 1.58069 39.9446 1.32106 39.8371C1.06142 39.7296 0.825509 39.5719 0.626791 39.3732C0.428074 39.1745 0.270443 38.9386 0.162898 38.6789C0.0553525 38.4193 0 38.141 0 37.86V2.14C0 1.57244 0.225464 1.02812 0.626791 0.626791C1.02812 0.225464 1.57244 0 2.14 0H22.14C23.4969 0.0774993 24.7874 0.613415 25.8 1.52L32.8 8.52C33.6838 9.52751 34.2048 10.8019 34.28 12.14ZM31.42 14.28H22.14C21.5724 14.28 21.0281 14.0545 20.6268 13.6532C20.2255 13.2519 20 12.7076 20 12.14V2.86H2.85V37.14H31.43V14.29L31.42 14.28ZM22.85 11.42H31.24C31.135 11.0887 30.9688 10.78 30.75 10.51L23.75 3.51C23.4836 3.28652 23.1786 3.11368 22.85 3V11.39V11.42Z',\n 'M10.05 35.1101H17.35V32.7501H15.28V29.0001H18.34C19.2292 29.0438 20.1192 28.9321 20.97 28.6701C21.9893 28.2536 22.8522 27.5278 23.437 26.5949C24.0219 25.6619 24.2992 24.569 24.23 23.4701C24.2875 22.4105 24.0231 21.3582 23.4717 20.4516C22.9202 19.545 22.1074 18.8263 21.14 18.3901C20.207 18.0745 19.2242 17.9322 18.24 17.9701H10.05V20.3601H12.14V32.7501H10.05V35.1201V35.1101ZM15.27 26.4901V20.4901H17.95C18.5909 20.4603 19.2286 20.5982 19.8 20.8901C20.2192 21.1675 20.5562 21.5523 20.7761 22.0043C20.996 22.4564 21.0905 22.9591 21.05 23.4601C21.1046 23.9925 21.0032 24.5293 20.7582 25.0051C20.5132 25.481 20.1351 25.8753 19.67 26.1401C19.1219 26.3787 18.5274 26.4915 17.93 26.4701H15.28L15.27 26.4901Z',\n ],\n\n fileSpreadsheet: [\n 'M34.28 12.14V37.86C34.28 38.141 34.2246 38.4193 34.1171 38.6789C34.0096 38.9386 33.8519 39.1745 33.6532 39.3732C33.4545 39.5719 33.2186 39.7296 32.9589 39.8371C32.6993 39.9446 32.421 40 32.14 40H2.14C1.85897 40 1.58069 39.9446 1.32106 39.8371C1.06142 39.7296 0.825509 39.5719 0.626791 39.3732C0.428074 39.1745 0.270443 38.9386 0.162898 38.6789C0.0553525 38.4193 0 38.141 0 37.86V2.14C0 1.57244 0.225464 1.02812 0.626791 0.626791C1.02812 0.225464 1.57244 0 2.14 0H22.14C23.4969 0.0774993 24.7874 0.613415 25.8 1.52L32.8 8.52C33.6838 9.52751 34.2048 10.8019 34.28 12.14ZM31.42 14.28H22.14C21.5724 14.28 21.0281 14.0545 20.6268 13.6532C20.2255 13.2519 20 12.7076 20 12.14V2.86H2.85V37.14H31.43V14.29L31.42 14.28ZM22.85 11.42H31.24C31.135 11.0887 30.9688 10.78 30.75 10.51L23.75 3.51C23.4836 3.28652 23.1786 3.11368 22.85 3V11.39V11.42Z',\n 'M9.58002 34.7899H15.85V32.4199H14.14L16.44 28.8299C16.5691 28.5605 16.7267 28.3057 16.91 28.0699C16.934 28.1489 16.9712 28.2233 17.02 28.2899C17.1353 28.4744 17.2623 28.6514 17.4 28.8199L19.79 32.4099H18.14V34.7799H24.63V32.4199H23.14L18.85 26.3299L23.21 19.9999H24.7V17.6399H18.48V19.9999H20.14L17.84 23.5499C17.57 23.9799 17.37 24.3099 17.37 24.2899C17.3477 24.2102 17.3104 24.1356 17.26 24.0699C17.1505 23.8878 17.0232 23.7169 16.88 23.5599L14.46 19.9999H16.14V17.6399H9.69002V19.9999H11.21L15.43 26.0699L11.14 32.4199H9.58002V34.7899Z',\n ],\n\n fileText: [\n '.M34.28 12.14V37.86C34.28 38.141 34.2246 38.4193 34.1171 38.6789C34.0096 38.9386 33.8519 39.1745 33.6532 39.3732C33.4545 39.5719 33.2186 39.7296 32.9589 39.8371C32.6993 39.9446 32.421 40 32.14 40H2.14C1.85897 40 1.58069 39.9446 1.32106 39.8371C1.06142 39.7296 0.825509 39.5719 0.626791 39.3732C0.428074 39.1745 0.270443 38.9386 0.162898 38.6789C0.0553525 38.4193 0 38.141 0 37.86V2.14C0 1.57244 0.225464 1.02812 0.626791 0.626791C1.02812 0.225464 1.57244 0 2.14 0H22.14C23.4969 0.0774993 24.7874 0.613415 25.8 1.52L32.8 8.52C33.6838 9.52751 34.2048 10.8019 34.28 12.14ZM31.42 14.28H22.14C21.5724 14.28 21.0281 14.0545 20.6268 13.6532C20.2255 13.2519 20 12.7076 20 12.14V2.86H2.85V37.14H31.43V14.29L31.42 14.28ZM22.85 11.42H31.24C31.135 11.0887 30.9688 10.78 30.75 10.51L23.75 3.51C23.4832 3.28707 23.1783 3.11429 22.85 3V11.39V11.42Z',\n '.M25 18.1399H9.28001C8.88788 18.1399 8.57001 18.4578 8.57001 18.8499V20.2899C8.57001 20.682 8.88788 20.9999 9.28001 20.9999H25C25.3921 20.9999 25.71 20.682 25.71 20.2899V18.8499C25.71 18.4578 25.3921 18.1399 25 18.1399Z',\n '.M25 23.8599H9.28001C8.88788 23.8599 8.57001 24.1777 8.57001 24.5699V26.0099C8.57001 26.402 8.88788 26.7199 9.28001 26.7199H25C25.3921 26.7199 25.71 26.402 25.71 26.0099V24.5699C25.71 24.1777 25.3921 23.8599 25 23.8599Z',\n '.M25 29.5698H9.28001C8.88788 29.5698 8.57001 29.8877 8.57001 30.2798V31.7198C8.57001 32.1119 8.88788 32.4298 9.28001 32.4298H25C25.3921 32.4298 25.71 32.1119 25.71 31.7198V30.2798C25.71 29.8877 25.3921 29.5698 25 29.5698Z', \n ],\n\n fileVideo: [\n 'M34.28 12.14V37.86C34.28 38.141 34.2246 38.4193 34.1171 38.6789C34.0096 38.9386 33.8519 39.1745 33.6532 39.3732C33.4545 39.5719 33.2186 39.7296 32.9589 39.8371C32.6993 39.9446 32.421 40 32.14 40H2.14C1.85897 40 1.58069 39.9446 1.32106 39.8371C1.06142 39.7296 0.825509 39.5719 0.626791 39.3732C0.428074 39.1745 0.270443 38.9386 0.162898 38.6789C0.0553525 38.4193 0 38.141 0 37.86V2.14C0 1.57244 0.225464 1.02812 0.626791 0.626791C1.02812 0.225464 1.57244 0 2.14 0H22.14C23.4969 0.0774993 24.7874 0.613415 25.8 1.52L32.8 8.52C33.6838 9.52751 34.2048 10.8019 34.28 12.14ZM31.42 14.28H22.14C21.5724 14.28 21.0281 14.0545 20.6268 13.6532C20.2255 13.2519 20 12.7076 20 12.14V2.86H2.85V37.14H31.43V14.29L31.42 14.28ZM22.85 11.42H31.24C31.135 11.0887 30.9688 10.78 30.75 10.51L23.75 3.51C23.4832 3.28707 23.1783 3.11429 22.85 3V11.39V11.42Z',\n 'M17.14 19.1401H8.57002C6.99049 19.1401 5.71002 20.4206 5.71002 22.0001V30.5701C5.71002 32.1497 6.99049 33.4301 8.57002 33.4301H17.14C18.7196 33.4301 20 32.1497 20 30.5701V22.0001C20 20.4206 18.7196 19.1401 17.14 19.1401Z',\n 'M28.57 19.86V32.71C28.5692 32.8536 28.5261 32.9937 28.4461 33.1129C28.366 33.2321 28.2526 33.325 28.12 33.38C28.0304 33.391 27.9397 33.391 27.85 33.38C27.6575 33.3826 27.4713 33.311 27.33 33.18L21.42 27.24V25.24L27.33 19.3C27.4713 19.1691 27.6575 19.0975 27.85 19.1C27.9397 19.0891 28.0304 19.0891 28.12 19.1C28.2678 19.1602 28.3918 19.267 28.473 19.4043C28.5543 19.5415 28.5884 19.7016 28.57 19.86Z',\n ],\n\n // Misc\n searchNotFound: [\n 'M91.01 181C140.716 181 181.01 140.706 181.01 91C181.01 41.2944 140.716 1 91.01 1C41.3044 1 1.01004 41.2944 1.01004 91C1.01004 140.706 41.3044 181 91.01 181Z',\n 'M123.36 38.17L125.3 39.23L123.36 40.29L122.3 42.23L121.24 40.29L119.3 39.23L121.24 38.17L122.3 36.23L123.36 38.17ZM165.23 87.48L164.52 86.19L163.81 87.48L162.52 88.19L163.81 88.9L164.52 90.19L165.23 88.9L166.52 88.19L165.23 87.48ZM71.53 9.18999L70.82 10.48L69.53 11.19L70.82 11.9L71.53 13.19L72.24 11.9L73.53 11.19L72.24 10.48L71.53 9.18999ZM103.61 27.07C103.412 27.07 103.219 27.1286 103.054 27.2385C102.89 27.3484 102.762 27.5046 102.686 27.6873C102.61 27.87 102.591 28.0711 102.629 28.2651C102.668 28.4591 102.763 28.6372 102.903 28.7771C103.043 28.917 103.221 29.0122 103.415 29.0508C103.609 29.0894 103.81 29.0696 103.993 28.9939C104.175 28.9182 104.332 28.79 104.441 28.6256C104.551 28.4611 104.61 28.2678 104.61 28.07C104.607 27.8065 104.501 27.5547 104.314 27.3693C104.126 27.184 103.874 27.08 103.61 27.08V27.07ZM92 56.5C91.8022 56.5 91.6089 56.5586 91.4444 56.6685C91.28 56.7784 91.1518 56.9346 91.0761 57.1173C91.0004 57.3 90.9806 57.5011 91.0192 57.6951C91.0578 57.8891 91.1531 58.0672 91.2929 58.2071C91.4328 58.347 91.6109 58.4422 91.8049 58.4808C91.9989 58.5194 92.2 58.4996 92.3827 58.4239C92.5654 58.3482 92.7216 58.22 92.8315 58.0556C92.9414 57.8911 93 57.6978 93 57.5C93 57.2348 92.8947 56.9804 92.7071 56.7929C92.5196 56.6053 92.2652 56.5 92 56.5ZM160.29 43C160.092 43 159.899 43.0586 159.734 43.1685C159.57 43.2784 159.442 43.4346 159.366 43.6173C159.29 43.8 159.271 44.0011 159.309 44.1951C159.348 44.3891 159.443 44.5672 159.583 44.7071C159.723 44.847 159.901 44.9422 160.095 44.9808C160.289 45.0194 160.49 44.9996 160.673 44.9239C160.855 44.8482 161.012 44.72 161.121 44.5556C161.231 44.3911 161.29 44.1978 161.29 44C161.29 43.7348 161.185 43.4804 160.997 43.2929C160.81 43.1053 160.555 43 160.29 43ZM142.46 62.67C142.262 62.67 142.069 62.7286 141.904 62.8385C141.74 62.9484 141.612 63.1046 141.536 63.2873C141.46 63.47 141.441 63.6711 141.479 63.8651C141.518 64.0591 141.613 64.2372 141.753 64.3771C141.893 64.5169 142.071 64.6122 142.265 64.6508C142.459 64.6894 142.66 64.6696 142.843 64.5939C143.025 64.5182 143.182 64.39 143.291 64.2256C143.401 64.0611 143.46 63.8678 143.46 63.67C143.46 63.4048 143.355 63.1504 143.167 62.9629C142.98 62.7753 142.725 62.67 142.46 62.67ZM99 3.73999C98.8022 3.73999 98.6089 3.79864 98.4444 3.90852C98.28 4.0184 98.1518 4.17458 98.0761 4.35731C98.0004 4.54003 97.9806 4.7411 98.0192 4.93508C98.0578 5.12906 98.1531 5.30724 98.2929 5.4471C98.4328 5.58695 98.6109 5.68219 98.8049 5.72078C98.9989 5.75936 99.2 5.73956 99.3827 5.66387C99.5654 5.58818 99.7216 5.46001 99.8315 5.29556C99.9414 5.13111 100 4.93777 100 4.73999C100 4.47477 99.8947 4.22042 99.7071 4.03288C99.5196 3.84535 99.2652 3.73999 99 3.73999ZM52.45 38.23C52.2522 38.23 52.0589 38.2886 51.8944 38.3985C51.73 38.5084 51.6018 38.6646 51.5261 38.8473C51.4504 39.03 51.4306 39.2311 51.4692 39.4251C51.5078 39.6191 51.6031 39.7972 51.7429 39.9371C51.8828 40.0769 52.0609 40.1722 52.2549 40.2108C52.4489 40.2494 52.65 40.2296 52.8327 40.1539C53.0154 40.0782 53.1716 39.95 53.2815 39.7856C53.3914 39.6211 53.45 39.4278 53.45 39.23C53.45 38.9648 53.3447 38.7104 53.1571 38.5229C52.9696 38.3353 52.7152 38.23 52.45 38.23Z',\n 'M97.92 115.36C97.924 105.597 96.0046 95.9292 92.2716 86.9082C88.5385 77.8873 83.0649 69.6901 76.1634 62.7849C69.2619 55.8797 61.0677 50.4017 52.0487 46.6638C43.0298 42.9259 33.3629 41.0013 23.6 41C21.0249 41.0012 18.4515 41.1347 15.89 41.4C8.16862 53.0945 3.28477 66.4305 1.62748 80.3457C-0.0298014 94.261 1.58527 108.371 6.34405 121.552C11.1028 134.733 18.8738 146.62 29.0381 156.267C39.2023 165.915 51.4789 173.055 64.89 177.12C75.0517 170.338 83.3828 161.152 89.1445 150.379C94.9062 139.606 97.9204 127.577 97.92 115.36Z',\n 'M80.13 115.36C80.1282 106.419 78.006 97.6058 73.9376 89.644C69.8691 81.6822 63.9705 74.7988 56.7259 69.5588C49.4812 64.3188 41.0972 60.8716 32.2619 59.5003C23.4267 58.129 14.3922 58.8725 5.90002 61.67C-0.793299 81.1168 -0.632057 102.268 6.35696 121.611C13.346 140.954 26.7421 157.323 44.32 168C54.8848 163.837 63.9512 156.588 70.3383 147.199C76.7255 137.81 80.1375 126.716 80.13 115.36Z',\n 'M61.78 115.36C61.7828 108.327 59.8425 101.43 56.1733 95.4308C52.5042 89.4311 47.2488 84.5617 40.9871 81.36C34.7255 78.1583 27.701 76.7488 20.6889 77.287C13.6768 77.8252 6.94972 80.2902 1.25001 84.41C1.08334 86.59 1.00001 88.7867 1.00001 91C0.97055 114.299 10.0081 136.696 26.2 153.45C35.8532 152.791 44.8962 148.492 51.501 141.421C58.1058 134.35 61.7797 125.036 61.78 115.36Z',\n 'M44.64 115.36C44.7277 110.152 42.877 105.098 39.4472 101.178C36.0174 97.2581 31.2533 94.7527 26.08 94.1483C20.9067 93.5438 15.6934 94.8835 11.4524 97.907C7.21133 100.931 4.24522 105.422 3.13 110.51C4.79003 118.03 7.41511 125.303 10.94 132.15C14.0589 134.518 17.7778 135.967 21.6768 136.334C25.5759 136.7 29.4996 135.968 33.0048 134.222C36.51 132.475 39.4571 129.784 41.5131 126.451C43.5692 123.118 44.6522 119.276 44.64 115.36Z',\n 'M91 0C73.0019 0 55.408 5.33706 40.4431 15.3363C25.4783 25.3355 13.8146 39.5477 6.927 56.1758C0.0394287 72.8039 -1.76267 91.101 1.74858 108.753C5.25984 126.405 13.9267 142.62 26.6533 155.347C39.3799 168.073 55.5945 176.74 73.2468 180.251C90.8991 183.763 109.196 181.961 125.824 175.073C142.452 168.185 156.665 156.522 166.664 141.557C176.663 126.592 182 108.998 182 91C181.974 66.8734 172.378 43.7426 155.318 26.6825C138.257 9.62244 115.127 0.0264691 91 0ZM129 70.57L131.45 69.94L128.21 57.34L125.76 57.97L126.34 60.25L99.09 67.25L99.65 69.43L86.52 72.82L86.38 72.27L81.61 73.5L82.84 78.28L83.38 78.14C83.3754 78.2266 83.3754 78.3134 83.38 78.4C83.3809 78.5921 83.4044 78.7834 83.45 78.97C82.8306 79.576 82.0971 80.0533 81.2922 80.3743C80.4872 80.6953 79.6266 80.8535 78.76 80.84C74.47 80.84 73.02 77.27 72.54 75.22C72.5707 74.041 72.1606 72.8929 71.39 72C72.7697 72.8325 74.3685 73.2289 75.9772 73.1374C77.586 73.0459 79.1296 72.4708 80.4059 71.4873C81.6823 70.5038 82.6319 69.1578 83.1305 67.6256C83.629 66.0933 83.6533 64.4463 83.2 62.9C83.2998 62.8429 83.3936 62.7759 83.48 62.7C84.3806 61.8954 84.9743 60.8033 85.16 59.61C84.4143 59.7672 83.65 59.8177 82.89 59.76C83.2133 59.1839 83.4141 58.5473 83.48 57.89C83.48 57.89 80.14 57.69 77.41 57.4C75.7314 56.9991 73.9681 57.1517 72.3834 57.8352C70.7986 58.5187 69.4774 59.6964 68.6169 61.1924C67.7564 62.6884 67.4028 64.4226 67.6088 66.1361C67.8148 67.8496 68.5695 69.4506 69.76 70.7C68.6024 70.121 67.2653 70.0134 66.03 70.4C57.61 73.06 56.53 81.29 56.53 88.17C56.5297 88.5058 56.5632 88.8409 56.63 89.17H56.53V97.17H60.53C61.0524 99.0456 61.3873 100.968 61.53 102.91V105C61.397 106.973 61.1297 108.934 60.73 110.87C60.2177 111.412 59.9254 112.125 59.91 112.87C59.9107 113.092 59.9375 113.314 59.99 113.53C41.78 119 26.9 129.21 18.13 142C8.76019 128.635 3.24602 112.951 2.19062 96.6634C1.13522 80.3755 4.57925 64.111 12.146 49.6489C19.7128 35.1868 31.1109 23.084 45.0936 14.6642C59.0764 6.24447 75.1053 1.83206 91.4271 1.90959C107.749 1.98712 123.735 6.55161 137.637 15.1038C151.539 23.656 162.822 35.8666 170.251 50.3999C177.68 64.9333 180.97 81.2297 179.759 97.5069C178.549 113.784 172.886 129.415 163.39 142.69C156.58 132.4 145.86 123.77 132.65 117.84L119.65 95.33L120.52 94.83L113.3 82.33H115.3V78.91H110.55V72.91L128.46 68.31L129 70.57ZM66.53 88.19C66.53 80.75 68.1 80.25 69.03 79.96C69.6578 79.756 70.239 79.4297 70.74 79C71.4734 80.484 72.6167 81.7267 74.0346 82.5809C75.4524 83.4352 77.0854 83.8652 78.74 83.82C80.0511 83.8329 81.3505 83.5729 82.5556 83.0564C83.7607 82.5399 84.8452 81.7783 85.74 80.82C86.2331 80.8235 86.7158 80.6781 87.1249 80.4028C87.534 80.1275 87.8506 79.7352 88.0331 79.2772C88.2157 78.8191 88.2558 78.3167 88.1482 77.8354C88.0406 77.3542 87.7903 76.9167 87.43 76.58V76.46L100.62 73.07L101.18 75.25L108.51 73.37V78.87H103.8V82.32H105.49L98.27 94.82L99.14 95.32L91.14 109.16H90.53C83.0035 109.151 75.4964 109.925 68.13 111.47C67.7132 110.812 67.1306 110.275 66.4408 109.914C65.751 109.552 64.9782 109.379 64.2 109.41H64C64.3156 107.593 64.4895 105.754 64.52 103.91C64.4832 101.626 64.1812 99.3542 63.62 97.14H66.49V89.14C66.49 89.14 66.53 88.53 66.53 88.19ZM108.53 110.67C103.533 109.839 98.4841 109.358 93.42 109.23L100.85 96.36L101.72 96.86L107.54 86.79V98.14H108.54V110.67H108.53ZM110.53 111.03V98.14H111.53V87.33L117.04 96.87L117.91 96.37L129.57 116.56C123.431 114.077 117.06 112.214 110.55 111L110.53 111.03Z',\n 'M79.94 68.9399C80.6304 68.9399 81.19 68.3803 81.19 67.6899C81.19 66.9996 80.6304 66.4399 79.94 66.4399C79.2497 66.4399 78.69 66.9996 78.69 67.6899C78.69 68.3803 79.2497 68.9399 79.94 68.9399Z',\n 'M28 115.75H40C36.6739 112.707 33.6406 109.359 30.94 105.75H37C37 105.75 25.47 94.12 25.47 86.75C25.47 94.12 13.94 105.75 13.94 105.75H20.64C17.9395 109.359 14.9062 112.707 11.58 115.75H23V121.34C18.0517 121.566 13.1991 122.783 8.73004 124.92C11.2285 130.94 14.3807 136.668 18.13 142C23.3325 134.611 29.9799 128.355 37.67 123.61C34.5496 122.492 31.3006 121.773 28 121.47V115.75Z',\n ],\n};\n","export function uuid() {\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, function (c) {\n var r = Math.random() * 16 | 0, v = c == \"x\" ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n}\n\nexport function random(min: number, max: number) {\n min = Math.ceil(min);\n max = Math.floor(max);\n return Math.floor(Math.random() * (max - min)) + min;\n}\n\nexport function delay(time: number) {\n return new Promise(resolve => setTimeout(resolve, time));\n}\n\nexport function bytesize(bytes: number, decimals: number = 2) {\n if (bytes === 0) return '0 B';\n const scale = 1024;\n const sizes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n const dm = decimals <= 0 ? 0 : decimals;\n const i = Math.floor(Math.log(bytes) / Math.log(scale));\n if (!sizes[i]) return '0 B';\n return (bytes / Math.pow(scale, i)).toFixed(dm) + ' ' + sizes[i];\n}\n\nexport function ekeyToPercentile(ekey: string, digits = 2, offset = 0) {\n const value = ekey.substr(0 - (digits + Math.abs(offset)), digits);\n return 100 * parseInt(value, 36) / Math.pow(36, value.length);\n}\n\nexport function getContrast(hexcolor: string) {\n hexcolor = hexcolor.replace('#', '');\n const r = parseInt(hexcolor.substr(0,2), 16);\n const g = parseInt(hexcolor.substr(2,2), 16);\n const b = parseInt(hexcolor.substr(4,2), 16);\n const y = ((r*299)+(g*587)+(b*114))/1000;\n return (y >= 128) ? 'black' : 'white';\n}\n\nexport function luminance(hexcolor: string, luminosity: number) {\n hexcolor = String(hexcolor).replace(/[^0-9a-f]/gi, '');\n if (hexcolor.length < 6) {\n hexcolor = hexcolor[0]\n + hexcolor[0]\n + hexcolor[1]\n + hexcolor[1]\n + hexcolor[2]\n + hexcolor[2];\n }\n luminosity = luminosity || 0;\n let rgb = '#', c: any, i: number;\n for (i = 0; i < 3; i++) {\n c = parseInt(hexcolor.substr(i*2,2), 16);\n c = Math.round(Math.min(Math.max(0, c + (c * luminosity)), 255)).toString(16);\n rgb += ('00'+c).substr(c.length);\n }\n return rgb;\n}\n\nexport function getBit(value: number, bit: number) {\n return (value >> bit) % 2;\n}\n\nexport function testBit(value: number, bit: number) {\n return (value >> bit) % 2 !== 0;\n}\n\nexport function toArray(list: FileList | File[]): File[] {\n return Array.prototype.slice.call(list || [], 0);\n}\n\nexport function uriToFile(uri: string, name: string): Promise {\n return new Promise((res, rej) => {\n const xhr = new XMLHttpRequest();\n xhr.responseType = 'blob';\n xhr.onload = () => res(new File(xhr.response, name));\n xhr.onerror = (e) => rej(e);\n xhr.open('GET', uri);\n xhr.send();\n });\n}\n\nexport function shuffle(array: unknown[]) {\n for (let i = array.length - 1; i > 0; i--) {\n let j = Math.floor(Math.random() * (i + 1));\n [array[i], array[j]] = [array[j], array[i]];\n }\n}\n\nexport function throttle(\n func: Function,\n wait: number,\n opts?: {leading: boolean, trailing: boolean},\n) {\n const options = opts || {leading: false, trailing: false};\n let context: any, args: any, result: any;\n let timeout: any = null;\n let previous = 0;\n\n var later = function() {\n previous = options.leading === false ? 0 : Date.now();\n timeout = null;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n };\n\n return function(this: any) {\n var now = Date.now();\n if (!previous && options.leading === false) previous = now;\n var remaining = wait - (now - previous);\n context = this;\n args = arguments;\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n previous = now;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(later, remaining);\n }\n return result;\n };\n}\n","import {Types} from 'react-ult';\nimport {PayloadAction} from '@reduxjs/toolkit';\nimport {File} from 'mediafire/dist/types/File';\nimport {FolderInfo, FolderContent, FolderDepth} from 'mediafire/dist/types/Folder';\n\n// STORES\n\nexport type AppStore = {\n user?: AppUser,\n active: boolean,\n menuOpen: boolean,\n revision: number,\n feature: AppFeatures | null,\n notifications: number,\n viewport: {\n width: number,\n height: number,\n },\n alerts: {\n text: string,\n type: AppAlertType,\n }[],\n}\n\nexport type AppFeatures =\n 'Overview'\n | 'Request'\n | 'Send'\n | 'Sell'\n | 'Deliver'\n | 'Insights';\n\nexport type FilesStore = {\n layout: 'grid' | 'list';\n root: {id: string, name: string};\n items: {[id: string]: FilesItem};\n views: {[id: string]: FilesView};\n sort: FilesSort;\n filter: FilesFilter;\n gallery: boolean;\n selection: string[];\n focused: string | null;\n current: string | null;\n browser: string | null;\n upload: string | null;\n uploadView: FilesView;\n uploadMinimized: boolean;\n downloadMinimized: boolean;\n uploadItems: {[id: string]: FilesItem};\n uploadFiles?: globalThis.File[];\n uploadWeb?: string[];\n downloadBulk: {\n statusKey: string,\n fileName: string,\n totalSize: number,\n }[];\n downloadItems: {[id: string]: FilesItem};\n downloadView: FilesView;\n search?: string;\n query?: string;\n drag?: string[];\n pick?: FilesPick;\n previewProgress?: number;\n preview?: {\n id: string,\n name: string,\n jobId?: number,\n };\n}\n\n// ACTIONS\n\nexport type AppStart = PayloadAction<{}>\nexport type AppRevision = PayloadAction<{}>\nexport type AppLogout = PayloadAction<{}>\nexport type AppLogin = PayloadAction\nexport type AppMenu = PayloadAction<{open: boolean}>\nexport type AppActivate = PayloadAction<{active: boolean}>\nexport type AppFeature = PayloadAction<{feature: AppFeatures}>\nexport type AppResize = PayloadAction<{width: number, height: number}>\nexport type AppAlert = PayloadAction<{text: string, type: AppAlertType}>\nexport type AppNotify = PayloadAction<{count: number}>\n\nexport type FilesFail = PayloadAction<{message: string, notify: boolean}>\nexport type FilesMove = PayloadAction<{ids: string[], destination: string}>\nexport type FilesCopy = PayloadAction<{ids: string[], destination: string}>\nexport type FilesCreate = PayloadAction<{name: string, id: string}>\nexport type FilesBulkDownload = PayloadAction<{statusKey: string, fileName: string, totalSize: number}>\nexport type FilesUpload = PayloadAction<{id: string, files?: globalThis.File[]}>\nexport type FilesUploadWeb = PayloadAction<{id: string, files?: string[]}>\nexport type FilesUploadSync = PayloadAction<{id: string, items: FilesItem[]}>\nexport type FilesDownloadSync = PayloadAction<{items: FilesItem[]}>\nexport type FilesUploadMinimize = PayloadAction<{minimized: boolean}>\nexport type FilesDownloadMinimize = PayloadAction<{minimized: boolean}>\nexport type FilesPassword = PayloadAction<{id: string, password: string}>\nexport type FilesNavigate = PayloadAction<{id?: string, syncing?: boolean}>\nexport type FilesSearch = PayloadAction<{id?: string, query?: string, results?: object}>\nexport type FilesSelect = PayloadAction<{ids: string[], ranged?: boolean, view?: FilesView}>\nexport type FilesBrowse = PayloadAction<{id: string}>\nexport type FilesFocus = PayloadAction<{id: string}>\nexport type FilesDrag = PayloadAction<{ids?: string[]}>\nexport type FilesPurge = PayloadAction<{ids: string[]}>\nexport type FilesArchive = PayloadAction<{ids: string[]}>\nexport type FilesRestore = PayloadAction<{ids: string[]}>\nexport type FilesRefresh = PayloadAction<{ids: string[]}>\nexport type FilesSync = PayloadAction<{ids: string[]}>\nexport type FilesPicking = PayloadAction\nexport type FilesSorting = PayloadAction\nexport type FilesFiltering = PayloadAction\nexport type FilesLayout = PayloadAction<{}>\nexport type FilesPreview = PayloadAction<{id: string, name: string}>\nexport type FilesPreviewJob = PayloadAction<{jobId: number}>\nexport type FilesPreviewProgress = PayloadAction<{progress: number}>\n\n// APP TYPES\n\nexport type AppUser = {\n ekey: string,\n name?: string,\n email?: string,\n avatar: string,\n created: string,\n options: number,\n header: AppHeader,\n group: AppUserGroup,\n limit: AppUserLimit,\n}\n\nexport type AppHeader = {\n needsPaymentUpdate: boolean,\n customAlertIDs: number[],\n custom: boolean,\n logo: string,\n theme: {\n header: string,\n },\n colors: {\n header: string,\n primary: string,\n },\n business: {\n company: string,\n subdomain: string,\n },\n}\n\nexport type AppAlertType = 'info' | 'fail';\nexport enum AppUserGroup {Unregistered, Trial, Free, Pro, Business}\nexport type AppUserLimit = {storage: {used: number, total: number}}\n\n\n// FILES TYPES\n\nexport type FilesView = {\n files: string[],\n folders: string[],\n}\n\nexport type FilesItem = {\n id: string;\n url: string;\n name: string;\n type: string;\n revision: number;\n state: FilesItemState;\n hierarchy: string[][];\n private: boolean;\n created: string;\n shared?: string;\n deleted?: string;\n folders?: number;\n files?: number;\n size?: number;\n flag?: number;\n hash?: string;\n owner?: string;\n mimetype?: string;\n downloads?: number;\n relevancy?: number;\n filedrop?: boolean;\n password?: boolean;\n description?: string;\n parentKey?: string;\n parentName?: string;\n uploadStatus?: string;\n uploadHashed?: number;\n uploadProgress?: number;\n}\n\nexport enum FilesItemState {\n isNormal,\n isLoading,\n isMoving,\n isCopying,\n isDeleting,\n isRestoring,\n isPurging,\n isUpdating,\n isHashing,\n isUploading,\n isVerifying,\n}\n\nexport enum FilesItemFlag {\n isReserved,\n isOwned,\n isViewable,\n isReported,\n isEditable,\n isCopyright,\n isRestricted,\n isWordFiltered,\n isInfected,\n}\n\nexport type FilesFilter = {\n type: \n 'all'\n | 'folders'\n | 'files'\n | 'images'\n | 'video'\n | 'audio'\n | 'document'\n | 'spreadsheet'\n | 'presentation'\n | 'development'\n | 'public'\n | 'private'\n}\n\nexport type FilesSort = {\n category:\n 'name'\n | 'date'\n | 'size'\n | 'downloads',\n order:\n 'asc'\n | 'desc',\n}\n\nexport type FilesPick = {\n action: 'copy' | 'move' | 'save' | 'restore';\n destination: string;\n ids: string[],\n}\n\nexport type FilesContextMenu = (\n position: Types.PopupPosition,\n offset: number,\n width: number,\n height: number,\n) => React.ReactNode;\n\nexport enum FilesErrors {\n ApiInternal = 100,\n UserError = 101,\n MissingKey = 102,\n InvalidKey = 103,\n MissingToken = 104,\n InvalidToken = 105,\n InvalidQuickkey = 110,\n MissingQuickkey = 111,\n InvalidFolderkey = 112,\n MissingFolderkey = 113,\n AccessDenied = 114,\n FolderPathConflict = 115,\n InvalidDate = 116,\n MissingFoldername = 117,\n InvalidFilename = 118,\n ZipOwnerNotPro = 149,\n ZipTotalSizeTooBig = 153,\n ZipOwnerInsufficientBandwidth = 155,\n StorageLimitExceeded = 162,\n FolderDepthLimit = 167,\n NotPremiumUser = 173,\n InvalidUrl = 174,\n InvalidUploadKey = 175,\n BandwidthError = 183,\n NotLoggedIn = 188,\n CopyLimitExceeded = 207,\n AsyncJobInProgress = 208,\n}\n\nexport type FilesLoad = PayloadAction<{\n id: string,\n root: {\n id: string,\n name: string,\n },\n folders: FolderContent,\n files: FolderContent,\n details?: FolderInfo,\n depth?: FolderDepth,\n}>\n\nexport type FilesLoadRecent = PayloadAction<{\n files: File[],\n}>\n\nexport type FilesLoadFollowing = PayloadAction<{\n files: File[],\n}>\n\nexport type FilesLoadMulti = PayloadAction<{\n folders?: FolderContent,\n files?: FolderContent,\n items?: FolderContent,\n virtual?: string;\n}>\n\nexport type FilesLoadTrash = PayloadAction<{\n id: string,\n revision: number,\n folderCount: number,\n fileCount: number,\n folders: any,\n files: any,\n}>\n\nexport type FilesChunk = PayloadAction<{\n id: string,\n type: string,\n page: number,\n size: number,\n content?: FolderContent,\n}>\n\nexport type FilesUpdate = PayloadAction<{\n id: string,\n name?: string,\n password?: boolean,\n description?: string,\n privacy?: 'public' | 'private',\n}>\n","import {luminance} from 'features/common';\nimport {Colors} from './styles';\nimport {Theme} from './models';\n\nclass DarkTheme implements Theme {\n // General\n logoColor = '#0070F0';\n fileIconColor = Colors.neutral.light;\n mainMenuBorder = Colors.neutral.darker;\n headerBackground = Colors.neutral.white;\n contentBackground = Colors.neutral.white;\n borderSeparator = '#ccc';\n borderSeparatorLight = '#eee';\n separator = '#eee';\n\n // Lists\n listItemTitle = Colors.neutral.dark;\n listItemNormalBackground = Colors.neutral.white;\n listItemNormalBorder = Colors.neutral.lighter;\n listItemHoverBackground = Colors.neutral.whitish;\n listItemHoverTreeBackground = Colors.neutral.lighter;\n listItemHoverSelectedBackground = '#FDF3DE';\n listItemSelectBackground = Colors.secondary.tan;\n listItemSelectBorder = '#ebd2a3';\n listItemSelectText = Colors.neutral.dark;\n listItemFocusBackground = Colors.neutral.whitish;\n listItemFocusSelectedBackground = '#fff1d4';\n listItemDraggingBackground = Colors.neutral.white;\n listItemDropBackground = Colors.primary.light;\n listItemTreeBackground = Colors.neutral.white;\n listItemTreeHoverBackground = Colors.neutral.white;\n\n // Buttons\n buttonPrimaryBorder = Colors.primary.brand;\n buttonPrimaryBackground = Colors.primary.brand;\n buttonPrimaryBackgroundHover = luminance(Colors.primary.brand, -0.2);\n textButtonPrimary = Colors.neutral.white;\n\n buttonCancelBorder = Colors.neutral.lighter;\n buttonCancelBackground = Colors.neutral.white;\n buttonCancelBackgroundHover = Colors.neutral.lightest;\n textButtonCancel = Colors.neutral.mid;\n\n buttonDestructiveBorder = Colors.secondary.brightRed;\n buttonDestructiveBackground = Colors.secondary.brightRed;\n buttonDestructiveBackgroundHover = luminance(Colors.secondary.brightRed, -0.2);\n textButtonDestructive = Colors.neutral.white;\n\n // Dialogs\n dialogBackground = Colors.neutral.white;\n dialogBorder = Colors.neutral.lighter;\n dialogText = Colors.neutral.dark;\n dialogTitle = Colors.neutral.mid;\n dialogInputText = Colors.neutral.dark;\n dialogInputPlaceholder = '#bdc2cd';\n dialogInputBackground = Colors.neutral.white;\n dialogBehind = 'rgba(0, 0, 0, 0.6)';\n\n // Menus\n menuText = Colors.neutral.dark;\n menuTextDisabled = '#bbb';\n menuItemHover = Colors.neutral.lightest;\n menuBackground = Colors.neutral.white;\n menuBorder = Colors.neutral.lighter;\n \n menuHeaderText = Colors.neutral.dark;\n menuHeaderBorder = Colors.neutral.lighter;\n menuHeaderBackground = Colors.neutral.lightest;\n\n menuHeaderMultiBorder = '#E2C18E';\n menuHeaderMultiBackground = Colors.secondary.tan;\n menuHeaderMultiText = '#665e4e';\n\n // Breadcrumbs\n breadcrumbsText = Colors.neutral.dark;\n breadcrumbsBorder = Colors.neutral.lighter;\n breadcrumbsBackground = Colors.neutral.lightest;\n breadcrumbsShareBackground = Colors.neutral.white;\n breadcrumbsShareBorder = Colors.neutral.lighter;\n\n // Navigator\n navigatorText = Colors.neutral.dark;\n navigatorBorder = Colors.neutral.lighter;\n navigatorBackground = Colors.neutral.lightest;\n\n // Files\n filesBackground = Colors.neutral.white;\n filesTreeText = Colors.neutral.dark;\n filesTreeBorder = Colors.neutral.lighter;\n filesTreeBackground = Colors.neutral.lightest;\n filesTreeHoverBackground = Colors.neutral.lighter;\n\n // Uploader\n uploaderBarTitle = Colors.neutral.darker;\n uploaderBarText = Colors.neutral.dark;\n uploaderBarBorder = Colors.neutral.lighter;\n uploaderBarBackground = Colors.neutral.lightest;\n uploaderContentBackground = Colors.neutral.white;\n uploaderContentIcon = Colors.neutral.lighter;\n\n // Misc\n barSelectButtonBorder = '#ebd2a3';\n diagnosticUploadTool = Colors.primary.brand;\n}\n\nexport default new DarkTheme();\n","import {luminance} from 'features/common';\nimport {Colors} from './styles';\nimport {Theme} from './models';\n\nclass LightTheme implements Theme {\n // General\n logoColor = Colors.primary.brand;\n fileIconColor = Colors.neutral.dark;\n mainMenuBorder = luminance(Colors.neutral.dark, 0.2);\n headerBackground = Colors.neutral.white;\n contentBackground = Colors.neutral.white;\n borderSeparator = '#ccc';\n borderSeparatorLight = '#eee';\n separator = '#eee';\n\n // Lists\n listItemTitle = Colors.neutral.lighter;\n listItemNormalBackground = luminance(Colors.neutral.dark, -0.4);\n listItemNormalBorder = Colors.neutral.dark;\n listItemHoverBackground = luminance(Colors.neutral.dark, -0.6);\n listItemHoverTreeBackground = luminance(Colors.neutral.dark, -0.6);\n listItemHoverSelectedBackground = luminance(Colors.primary.dark, -0.2);\n listItemSelectBackground = luminance(Colors.primary.dark, 0);\n listItemSelectBorder = luminance(Colors.primary.dark, 0.2);\n listItemSelectText = Colors.neutral.light;\n listItemFocusBackground = Colors.neutral.darker;\n listItemFocusSelectedBackground = luminance(Colors.primary.dark, 0.4);\n listItemDraggingBackground = Colors.neutral.darker;\n listItemDropBackground = luminance(Colors.neutral.darker, -0.6);\n listItemTreeBackground = Colors.neutral.white;\n listItemTreeHoverBackground = Colors.neutral.white;\n\n // Buttons\n buttonPrimaryBorder = Colors.primary.brand;\n buttonPrimaryBackground = Colors.primary.brand;\n buttonPrimaryBackgroundHover = luminance(Colors.primary.brand, -0.2);\n textButtonPrimary = Colors.neutral.white;\n\n buttonCancelBorder = Colors.neutral.dark;\n buttonCancelBackground = Colors.neutral.darker;\n buttonCancelBackgroundHover = luminance(Colors.neutral.darker, -0.2);\n textButtonCancel = Colors.neutral.mid;\n\n buttonDestructiveBorder = Colors.secondary.brightRed;\n buttonDestructiveBackground = Colors.secondary.brightRed;\n buttonDestructiveBackgroundHover = luminance(Colors.secondary.brightRed, -0.2);\n textButtonDestructive = Colors.neutral.white;\n\n // Dialogs\n dialogBackground = Colors.neutral.darker;\n dialogBorder = Colors.neutral.dark;\n dialogText = Colors.neutral.mid;\n dialogTitle = Colors.neutral.lighter;\n dialogInputText = Colors.neutral.white;\n dialogInputPlaceholder = Colors.neutral.mid;\n dialogInputBackground = luminance(Colors.neutral.darker, -0.4);\n dialogBehind = 'rgba(0, 0, 0, 0.6)';\n\n // Menus\n menuText = Colors.neutral.mid;\n menuTextDisabled = '#bbb';\n menuItemHover = Colors.neutral.darker;\n menuBackground = Colors.neutral.dark;\n menuBorder = luminance(Colors.neutral.mid, -0.4);\n \n menuHeaderText = Colors.neutral.mid;\n menuHeaderBorder = Colors.neutral.dark;\n menuHeaderBackground = Colors.neutral.darker;\n\n menuHeaderMultiBackground = luminance(Colors.primary.dark, 0);\n menuHeaderMultiBorder = '#5d75af';\n menuHeaderMultiText = '#b6ccff';\n\n // File Breadcrumbs\n breadcrumbsText = Colors.neutral.light;\n breadcrumbsBorder = Colors.neutral.dark;\n breadcrumbsBackground = luminance(Colors.neutral.dark, -0.4);\n breadcrumbsShareBackground = Colors.neutral.darker;\n breadcrumbsShareBorder = Colors.neutral.mid;\n\n // Navigator\n navigatorText = Colors.neutral.light;\n navigatorBorder = Colors.neutral.dark;\n navigatorBackground = luminance(Colors.neutral.dark, -0.4);\n\n // Files\n filesBackground = luminance(Colors.neutral.dark, -0.4);\n filesTreeText = Colors.neutral.light;\n filesTreeBorder = Colors.neutral.dark;\n filesTreeBackground = luminance(Colors.neutral.dark, -0.4);\n filesTreeHoverBackground = Colors.neutral.lighter;\n\n // Uploader\n uploaderBarTitle = Colors.neutral.lighter;\n uploaderBarText = Colors.neutral.light;\n uploaderBarBorder = Colors.neutral.dark;\n uploaderBarBackground = Colors.neutral.darker;\n uploaderContentBackground = luminance(Colors.neutral.dark, -0.4);\n uploaderContentIcon = Colors.neutral.dark;\n\n // Misc\n barSelectButtonBorder = '#5d75af';\n diagnosticUploadTool = '#4a9eff';\n}\n\nexport default new LightTheme();\n","import device from 'features/device';\nimport {Colors, Fonts, FontSizes, Breakpoints} from './styles';\nimport {Vectors} from './vectors';\nimport {Theme} from './models';\nimport Light from './light';\nimport Dark from './dark';\n\nlet Default: Theme = device.isDarkMode() ? Dark : Light;\n\nexport {Default as Light};\nexport {\n Colors,\n Vectors,\n Fonts,\n FontSizes,\n Breakpoints,\n};\n","import {createSelector} from '@reduxjs/toolkit';\nimport {AppUserGroup} from 'globals/types';\nimport {Store} from 'store';\n\nconst x = (store: Store) => store;\n\nexport const isActive = createSelector(x, store => store.app.active);\nexport const isLoggedIn = createSelector(x, store => !!store.app.user);\nexport const isMenuOpen = createSelector(x, store => store.app.menuOpen);\n\nexport const isTrial = createSelector(x, store => store.app.user && !store.app.user.email);\nexport const isPremium = createSelector(x, store => store.app.user && store.app.user.group >= AppUserGroup.Pro);\nexport const isBusiness = createSelector(x, store => store.app.user && store.app.user.group === AppUserGroup.Business);\n\nexport const getUser = createSelector(x, store => store.app.user);\nexport const getName = createSelector(x, store => store.app.user && store.app.user.name);\nexport const getEkey = createSelector(x, store => store.app.user && store.app.user.ekey);\nexport const getEmail = createSelector(x, store => store.app.user && store.app.user.email);\nexport const getLimits = createSelector(x, store => store.app.user && store.app.user.limit);\nexport const getAvatar = createSelector(x, store => store.app.user && store.app.user.avatar);\n\nexport const getRevision = createSelector(x, store => store.app.revision);\nexport const getViewport = createSelector(x, store => store.app.viewport);\nexport const getFeature = createSelector(x, store => store.app.feature);\nexport const getNotifications = createSelector(x, store => store.app.notifications);\nexport const getHeader = createSelector(x, store => store.app.user && store.app.user.header);\nexport const getAlerts = createSelector(x, store => store.app.alerts);\n","import {Light} from 'features/themes';\nimport {getContrast} from 'features/common';\nimport * as MF from 'globals/types';\n\nexport function activate(state: MF.AppStore, action: MF.AppActivate) {\n const {active} = action.payload;\n state.active = active;\n}\n\nexport function feature(state: MF.AppStore, action: MF.AppFeature) {\n const {feature} = action.payload;\n state.feature = feature;\n}\n\nexport function menu(state: MF.AppStore, action: MF.AppMenu) {\n const {open} = action.payload;\n state.menuOpen = open;\n}\n\nexport function resize(state: MF.AppStore, action: MF.AppResize) {\n const {width, height} = action.payload;\n state.viewport = {width, height};\n}\n\nexport function login(state: MF.AppStore, action: MF.AppLogin) {\n let {header} = action.payload;\n // Limit too light of a primary color\n if (header.custom && getContrast(header.colors.primary) === \"black\")\n header.colors.primary = Light.logoColor;\n // Update user\n state.user = action.payload;\n // Empty trial account logged in, show menu by default\n if (state.user.group === MF.AppUserGroup.Trial\n && state.user.limit.storage.used === 0)\n state.menuOpen = true;\n}\n\nexport function logout(state: MF.AppStore) {\n state.user = null;\n}\n\nexport function alert(state: MF.AppStore, action: MF.AppAlert) {\n const {text, type} = action.payload;\n state.alerts.push({text, type});\n}\n\nexport function clearAlerts(state: MF.AppStore) {\n state.alerts = [];\n}\n\nexport function updateNotifications(state: MF.AppStore, action: MF.AppNotify) {\n state.notifications = action.payload.count;\n}\n","import {AppStore} from 'globals/types';\nimport {createSlice} from '@reduxjs/toolkit';\nimport * as selectors from './selectors';\nimport * as reducers from './reducers';\n\nexport {selectors};\nexport default createSlice({\n reducers,\n name: 'app',\n initialState: {\n revision: 0,\n notifications: 0,\n active: false,\n menuOpen: false,\n feature: null,\n viewport: {width: -1, height: -1},\n alerts: [],\n } as AppStore,\n});\n","import React from 'react';\nimport {useSelector} from 'react-redux';\nimport {Styles, View, Text} from 'react-ult';\nimport {Colors} from 'features/themes';\nimport {selectors} from 'store/app';\n\nexport interface Props {\n isOffset: boolean;\n isOffsetMore: boolean;\n}\n\nexport function AppAlerts(props: Props) {\n const alerts = useSelector(selectors.getAlerts);\n const viewport = useSelector(selectors.getViewport);\n const classes = {\n root: [\n styles.root,\n (props.isOffset || props.isOffsetMore) && styles.offset,\n (props.isOffset && props.isOffsetMore) && styles.offsetMore,\n viewport.width >= 600 ? styles.desktop : styles.mobile,\n ],\n };\n\n return alerts && alerts.length > 0 ? (\n \n {alerts.map((e, i) => {\n return (\n \n \n {e.text}\n \n \n )\n })}\n \n ) : null;\n}\n\nexport const styles = {\n root: Styles.createViewStyle({\n right: 16,\n bottom: 16,\n borderRadius: 3,\n position: 'absolute',\n }),\n offset: Styles.createViewStyle({\n bottom: 72,\n }),\n offsetMore: Styles.createViewStyle({\n bottom: 144,\n }),\n mobile: Styles.createViewStyle({\n left: 16,\n }),\n fail: Styles.createViewStyle({\n backgroundColor: Colors.secondary.redOrange,\n }),\n desktop: Styles.createViewStyle({\n width: 350,\n }),\n text: Styles.createTextStyle({\n fontSize: 14,\n color: Colors.neutral.white,\n }),\n alert: Styles.createViewStyle({\n marginTop: 8,\n borderRadius: 3,\n paddingVertical: 12,\n paddingHorizontal: 16,\n backgroundColor: Colors.primary.brand,\n }),\n};\n","import {isNative} from 'features/platform';\n\nexport enum Keys {\n // ROMAN ALPHA\n A = 65, B = 66, C = 67, D = 68, E = 69, F = 70, G = 71,\n H = 72, I = 73, J = 74, K = 75, L = 76, M = 77, N = 78,\n O = 79, P = 80, Q = 81, R = 82, S = 83, T = 84, U = 85,\n V = 86, W = 87, X = 88, Y = 89, Z = 90,\n\n // ARROW KEYS\n UpArrow = isNative() ? 19 : 38,\n DownArrow = isNative() ? 20 : 40,\n LeftArrow = isNative() ? 21 : 37,\n RightArrow = isNative() ? 22 : 39,\n\n // NUMERALS\n Zero = 48,\n One = 49,\n Two = 50,\n Three = 51,\n Four = 52,\n Five = 53,\n Six = 54,\n Seven = 55,\n Eight = 56,\n Nine = 57,\n\n // OTHER\n Tab = 9,\n Shift = 16,\n Escape = 27,\n Return = 13,\n Enter = 13,\n Alt = 18,\n Option = 18,\n Command = 224,\n Control = 17,\n Backspace = 8,\n Delete = 46,\n Space = 32,\n PageUp = isNative() ? 92 : 33,\n PageDown = isNative() ? 93 : 34,\n Insert = 45,\n Comma = 188,\n F12 = 113,\n}\n","import React, {ReactNode} from 'react';\nimport {ComponentBase} from 'resub';\nimport {Styles, View, Text, Button, Types, CommonProps} from 'react-ult';\nimport {Light, Fonts, FontSizes} from 'features/themes';\nimport {Keys} from 'globals/keys';\n\n/*\n # TODO\n - fix arrow keys focusing dividers (tab works)\n - fix focus trap (focusing underneath menu)\n*/\n\nexport interface MenuItem {\n text: string;\n command: string;\n icon?: ReactNode;\n disabled?: boolean;\n}\n\nexport interface MenuProps extends CommonProps {\n menuItems: MenuItem[];\n menuButtonStyles?: Types.StyleRuleSet;\n menuTextStyles?: Types.StyleRuleSet;\n focusFirst?: boolean;\n multiMode?: boolean;\n onSelectItem: (command: string) => void;\n}\n\ninterface MenuState {\n hoverCommand?: string;\n focusedIndex: number;\n}\n\nexport class Menu extends ComponentBase {\n private _mountedRefsMap: {[key: string]: any} = {};\n\n protected _buildState(_props: MenuProps, initialBuild: boolean): Partial {\n if (initialBuild) {\n return {\n hoverCommand: undefined,\n focusedIndex: -1,\n };\n }\n return {};\n }\n\n componentDidMount() {\n super.componentDidMount();\n if (this.props.focusFirst) {\n this.focusFirt();\n }\n }\n\n componentDidUpdate(prevProps: MenuProps, prevState: MenuState, prevContext: any) {\n super.componentDidUpdate(prevProps, prevState, prevContext);\n if (this.state.focusedIndex !== prevState.focusedIndex) {\n this.focusItem(this.state.focusedIndex);\n }\n }\n\n focusFirt() {\n this.focusItem(0);\n }\n\n focusLast() {\n this.focusItem(this.props.menuItems.length - 1);\n }\n\n focusItem(index = 0) {\n if (index < 0 || index > this.props.menuItems.length - 1)\n return;\n if (this.state.focusedIndex === index) {\n const ref = this._mountedRefsMap[index];\n if (ref) {\n ref.requestFocus();\n }\n } else {\n this.setState({focusedIndex: index});\n }\n }\n\n render() {\n const menuItems = this.props.menuItems.map((item, index) => {\n if (index === 0 && item.command === 'header') {\n return (\n \n \n {item.text}\n \n \n );\n }\n\n if (item.text === '-') {\n return (\n \n );\n }\n\n const buttonStyles = [_styles.menuItemContainer];\n if (this.props.menuButtonStyles) {\n buttonStyles.push(this.props.menuButtonStyles);\n }\n\n const textStyles = [_styles.menuItemText];\n if (this.props.menuTextStyles) {\n textStyles.push(this.props.menuTextStyles);\n }\n\n if (item.command === this.state.hoverCommand && !item.disabled) {\n buttonStyles.push(_styles.menuItemHover);\n }\n\n const accessibilityLabel = item.text;\n if (item.disabled) {\n textStyles.push(_styles.disabledText);\n }\n\n const iconStyles = [_styles.menuItemIcon];\n return (\n this._mountedRefsMap[index] = e}\n key={item.command}\n style={buttonStyles}\n onPress={e => this._onClickItem(e, item)}\n onHoverStart={() => this._onMouseEnter(item)}\n onHoverEnd={() => this._onMouseLeave(item)}\n disabled={item.disabled}\n tabIndex={index + 1}\n accessibilityTraits={Types.AccessibilityTrait.MenuItem}\n accessibilityLabel={accessibilityLabel}>\n {item.icon &&\n \n {item.icon}\n \n }\n \n {item.text}\n \n \n );\n });\n\n return (\n \n {menuItems}\n \n );\n }\n\n private _onKeyPress = (event: Types.KeyboardEvent) => {\n let currentFocusedIndex = this.state.focusedIndex;\n if (event.keyCode === Keys.UpArrow || event.keyCode === Keys.LeftArrow)\n currentFocusedIndex = currentFocusedIndex - 1;\n if (event.keyCode === Keys.DownArrow || event.keyCode === Keys.RightArrow)\n currentFocusedIndex = currentFocusedIndex + 1;\n if (currentFocusedIndex < 0 || currentFocusedIndex >= this.props.menuItems.length)\n return;\n this.setState({focusedIndex: currentFocusedIndex});\n };\n\n private _onClickItem(e: Types.SyntheticEvent, item: MenuItem) {\n e.stopPropagation();\n if (!item.disabled && this.props.onSelectItem) {\n this.props.onSelectItem(item.command);\n }\n }\n\n private _onMouseEnter(item: MenuItem) {\n if (!item.disabled && item.command !== this.state.hoverCommand) {\n this.setState({hoverCommand: item.command});\n }\n }\n\n private _onMouseLeave(item: MenuItem) {\n if (!item.disabled && item.command === this.state.hoverCommand) {\n this.setState({hoverCommand: undefined});\n }\n }\n}\n\nconst _styles = {\n menuContainer: Styles.createViewStyle({\n width: 180,\n paddingBottom: 4,\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: Light.menuBorder,\n backgroundColor: Light.menuBackground,\n }),\n menuMulti: Styles.createViewStyle({\n borderColor: Light.menuHeaderMultiBorder,\n }),\n menuItemContainer: Styles.createButtonStyle({\n minHeight: 36,\n paddingVertical: 4,\n paddingHorizontal: 16,\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'flex-start',\n }),\n menuItemHover: Styles.createButtonStyle({\n backgroundColor: Light.menuItemHover,\n }),\n menuItemText: Styles.createTextStyle({\n flex: 1,\n font: Fonts.displayRegular,\n fontSize: FontSizes.size12,\n color: Light.menuText,\n }),\n menuItemIcon: Styles.createViewStyle({\n flex: 0,\n width: 20,\n marginRight: 10,\n alignItems: 'center',\n justifyContent: 'center',\n }),\n disabledText: Styles.createTextStyle({\n color: Light.menuTextDisabled,\n }),\n divider: Styles.createViewStyle({\n height: 1,\n marginVertical: 4,\n backgroundColor: Light.menuBorder,\n }),\n header: Styles.createViewStyle({\n height: 28,\n borderBottomWidth: 1,\n borderColor: Light.menuHeaderBorder,\n backgroundColor: Light.menuHeaderBackground,\n marginBottom: 4,\n }),\n headerText: Styles.createTextStyle({\n color: Light.menuHeaderText,\n textAlign: 'center',\n fontSize: 11,\n lineHeight: 28,\n paddingHorizontal: 16,\n }),\n headerMulti: Styles.createViewStyle({\n borderColor: Light.menuHeaderMultiBorder,\n backgroundColor: Light.menuHeaderMultiBackground,\n }),\n headerTextMulti: Styles.createTextStyle({\n color: Light.menuHeaderMultiText,\n }),\n};\n","import React, {useCallback, Component} from 'react';\nimport {Popup, Types} from 'react-ult';\nimport {Menu, MenuItem} from 'controls/Menu';\n\nconst _modalMenu = 'menu';\n\nexport function useMenu(\n items: MenuItem[],\n onSelect?: (command: string) => void,\n anchor?: Component,\n anchorUpdate?: Function,\n positionPriorities?: Types.PopupPosition[],\n dismissIfShown?: boolean,\n cacheable?: boolean,\n multiMode?: boolean,\n) {\n const show = useCallback((e?: any) => {\n if (!anchorUpdate) {\n e.stopPropagation();\n e.preventDefault();\n }\n Popup.show({\n cacheable,\n dismissIfShown,\n positionPriorities,\n getAnchor: () => anchor,\n renderPopup: (\n _anchorPosition: Types.PopupPosition,\n _anchorOffset: number,\n _popupWidth: number,\n _popupHeight: number,\n ) => {\n if (anchorUpdate)\n anchorUpdate(e.clientX, e.clientY);\n return (\n !!e)}\n onSelectItem={onSelect}\n />\n );\n },\n }, _modalMenu);\n }, [items, anchor]);\n\n const close = useCallback(() => {\n Popup.dismiss(_modalMenu);\n }, []);\n\n return [show, close];\n}\n\n/*\n\n useEffect(() => {\n if (ActionSheet) {\n const options: string[] = [];\n options.push('Cancel');\n ActionSheet.showActionSheetWithOptions({\n title,\n options,\n cancelButtonIndex: options.length - 1,\n destructiveButtonIndex: options.indexOf('Delete Permanently') !== -1\n ? options.indexOf('Delete Permanently')\n : options.indexOf('Move to Trash'),\n }, (index) => {\n const choice = options[index];\n switch (choice) {\n case 'Share':\n return share();\n case 'Cancel':\n default:\n return Popup.dismiss(modalFilesMenu);\n }\n });\n }\n }, [ids]);\n\n*/\n","import {t} from '@lingui/macro';\nimport React, {useCallback, Component} from 'react';\nimport {default as Svg, SvgPath} from 'react-ult-ext-imagesvg';\nimport {useMenu} from 'hooks/useMenu';\nimport {Vectors, Colors} from 'features/themes';\nimport {FilesStore} from 'globals/types';\n\ntype Sort = FilesStore['sort'];\ntype Filter = FilesStore['filter'];\n\nexport function useMenuSort(\n id: string,\n sort: Sort,\n filter: Filter,\n onSort: (sort: Sort, filter: Filter) => void,\n anchor: Component,\n) {\n const selectSort = useCallback((category: Sort['category']) => {\n const order = sort.order === 'asc' ? 'desc' : 'asc';\n onSort({category, order}, filter);\n }, [id, sort, onSort]);\n\n const icon = useCallback((isActive: boolean) => \n \n \n \n , [sort]);\n\n const [show, close] = useMenu([\n {\n command: 'header',\n text: t`Sort`,\n },\n {\n command: 'name',\n icon: icon(sort.category === 'name'),\n text: t`Sort by Name`,\n },\n {\n command: 'date',\n icon: icon(sort.category === 'date'),\n text: t`Sort by Date`,\n },\n {\n command: 'size',\n icon: icon(sort.category === 'size'),\n text: t`Sort by Size`,\n },\n {\n command: 'downloads',\n icon: icon(sort.category === 'downloads'),\n text: t`Sort by Downloads`,\n },\n ], (command: Sort['category']) => {\n selectSort(command);\n close();\n }, anchor, undefined, ['bottom', 'top'], true, false, false);\n\n return [show, close];\n}\n","import {t} from '@lingui/macro';\nimport React, {useCallback, Component} from 'react';\nimport {default as Svg, SvgPath} from 'react-ult-ext-imagesvg';\nimport {useMenu} from 'hooks/useMenu';\nimport {Vectors, Colors} from 'features/themes';\nimport {FilesStore} from 'globals/types';\n\ntype Sort = FilesStore['sort'];\ntype Filter = FilesStore['filter'];\n\nexport function useMenuFilter(\n id: string,\n sort: Sort,\n filter: Filter,\n onFilter: (sort: Sort, filter: Filter) => void,\n anchor: Component,\n) {\n const selectFilter = useCallback((type: FilesStore['filter']['type']) => {\n onFilter(sort, {type});\n }, [id, anchor, onFilter]);\n\n const icon = useCallback((target: string) => \n \n \n \n , [filter]);\n\n const [show, close] = useMenu([\n {\n command: 'header',\n text: t`Filter`,\n },\n {\n command: 'all',\n icon: icon('all'),\n text: t`All Items`,\n },\n {\n command: 'public',\n icon: icon('public'),\n text: t`Public`,\n },\n {\n command: 'private',\n icon: icon('private'),\n text: t`Private`,\n },\n {\n command: 'images',\n icon: icon('images'),\n text: t`Images`,\n },\n {\n command: 'video',\n icon: icon('video'),\n text: t`Video`,\n },\n {\n command: 'audio',\n icon: icon('audio'),\n text: t`Audio`,\n },\n {\n command: 'document',\n text: t`Documents`,\n icon: icon('document'),\n },\n {\n command: 'spreadsheet',\n icon: icon('spreadsheet'),\n text: t`Spreadsheets`,\n },\n {\n command: 'presentation',\n icon: icon('presentation'),\n text: t`Presentations`,\n },\n {\n command: 'development',\n icon: icon('development'),\n text: t`Development`,\n },\n ], (command: FilesStore['filter']['type']) => {\n selectFilter(command);\n close();\n }, anchor, undefined, ['bottom', 'top'], true, false, false);\n\n return [show, close];\n}\n","import {t} from '@lingui/macro';\nimport React from 'react';\nimport {Styles, View, Button, Types} from 'react-ult';\nimport WebView, {Types as WebViewTypes} from 'react-ult-ext-webview';\nimport {default as Svg, SvgPath} from 'react-ult-ext-imagesvg';\nimport {Light, Colors, Vectors} from 'features/themes';\n\nexport interface Props {\n url: string,\n close: () => void,\n onMessage: (e: WebViewTypes.WebViewMessageEvent) => void,\n isProTrialSignup?: boolean,\n}\n\nexport function WebFrame(props: Props) {\n return (\n \n \n \n \n \n \n );\n}\n\nexport const styles = {\n root: Styles.createViewStyle({\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: Light.dialogBehind,\n position: 'absolute',\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n }),\n content: Styles.createViewStyle({\n position: 'absolute',\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n }),\n contentProTrial: Styles.createViewStyle({\n width: 580,\n height: 370,\n }),\n close: Styles.createButtonStyle({\n alignItems: 'center',\n position: 'absolute',\n backgroundColor: 'rgba(255,255,255,0.8)',\n borderRadius: 99,\n height: 46,\n width: 46,\n right: 8,\n top: 9,\n }),\n};\n","import React, {useCallback} from 'react';\nimport {Modal} from 'react-ult';\nimport {Types} from 'react-ult-ext-webview';\nimport {WebFrame} from 'controls/WebFrame';\nimport {bytesize} from 'features/common';\nimport {getHost, isIOS} from 'features/platform';\n\nconst _modalId = 'upsell-storage';\n\ntype Action = 'upload' | 'manage' | 'remind';\n\nexport function useModalUpsellStorage(action: Action) {\n const close = useCallback(() => Modal.dismiss(_modalId), []);\n const message = useCallback((e: Types.WebViewMessageEvent) => {\n if (e && e.data === 'mf-close-dialogs') {\n close();\n }\n }, []);\n\n const show = useCallback((needed: number = 0, limit: number = 0) => {\n if (isIOS()) return;\n const path = `${getHost()}/widgets/storage_limit_upsell.php`;\n const query = `action=${action}&needed=${bytesize(needed)}&limit=${bytesize(limit)}`;\n Modal.show(\n \n , _modalId);\n }, [action]);\n\n return [show, close];\n}\n","import React from 'react';\nimport {Styles, Button, Types, Component, CommonProps} from 'react-ult';\n\nexport interface HoverButtonProps extends CommonProps {\n title?: string;\n disabled?: boolean;\n onPress?: (e: Types.SyntheticEvent) => void;\n onRenderChild: (isHovering: boolean) => JSX.Element | null;\n}\n\nexport interface HoverButtonState {\n isHovering: boolean;\n}\n\nexport default class HoverButton extends Component {\n render(): JSX.Element | null {\n return (\n \n {this.props.onRenderChild(this.state ? this.state.isHovering : false)}\n \n );\n }\n\n private _onPress = (e: Types.SyntheticEvent) => {\n if (this.props.onPress) {\n this.props.onPress(e);\n }\n };\n\n private _onHoverStart = () => {\n if (!this.props.disabled) {\n this.setState({isHovering: true});\n }\n };\n\n private _onHoverEnd = () => {\n if (!this.props.disabled) {\n this.setState({isHovering: false});\n }\n };\n}\n\nconst _styles = {\n button: Styles.createButtonStyle({\n padding: 1,\n }),\n};\n","import React, {ReactNode} from 'react';\nimport {Types, Styles, View, Text, Component, Stateless} from 'react-ult';\nimport {Light, Fonts, FontSizes} from 'features/themes';\nimport HoverButton from 'controls/HoverButton';\n\nexport interface IconButtonProps {\n text?: string;\n mode?: 'primary' | 'cancel' | 'destructive';\n icon?: ReactNode;\n title?: string;\n disabled?: boolean;\n onPress?: (e: Types.SyntheticEvent) => void;\n iconStyle?: Types.StyleRuleSetRecursive;\n textStyle?: Types.StyleRuleSetRecursive;\n textHoverStyle?: Types.StyleRuleSetRecursive;\n buttonStyle?: Types.StyleRuleSetRecursive;\n buttonHoverStyle?: Types.StyleRuleSetRecursive;\n}\n\nexport class IconButton extends Component {\n render(): JSX.Element | null {\n return (\n \n );\n }\n\n private _onRenderButton = (isHovering: boolean) => {\n const buttonStyles = [_styles.button, this.props.buttonStyle];\n const iconStyles = [_styles.icon, this.props.iconStyle];\n const textStyles = [_styles.text, this.props.textStyle];\n\n switch (this.props.mode) {\n case 'primary':\n textStyles.push(_styles.textPrimary);\n buttonStyles.push(_styles.buttonPrimary);\n if (isHovering)\n buttonStyles.push(_styles.buttonPrimaryHover);\n break;\n case 'cancel':\n textStyles.push(_styles.textCancel);\n buttonStyles.push(_styles.buttonCancel);\n if (isHovering)\n buttonStyles.push(_styles.buttonCancelHover);\n break;\n case 'destructive':\n textStyles.push(_styles.textDestructive);\n buttonStyles.push(_styles.buttonDestructive);\n if (isHovering)\n buttonStyles.push(_styles.buttonDestructiveHover);\n break;\n }\n\n if (isHovering) {\n buttonStyles.push(this.props.buttonHoverStyle);\n textStyles.push(this.props.textHoverStyle);\n }\n\n return (\n \n {this.props.icon &&\n \n {this.props.icon}\n \n }\n {this.props.icon && this.props.text &&\n \n }\n {this.props.text &&\n \n {this.props.text}\n \n }\n \n );\n };\n}\n\nconst _styles = {\n icon: Styles.createViewStyle({\n flex: 0,\n width: 20,\n alignItems: 'center',\n justifyContent: 'center',\n }),\n spacer: Styles.createViewStyle({\n width: 10,\n }),\n button: Styles.createViewStyle({\n flex: 1,\n alignItems: 'center',\n justifyContent: 'center',\n height: 40,\n minWidth: 90,\n borderWidth: 2,\n borderRadius: 3,\n paddingHorizontal: 16,\n borderColor: 'transparent',\n }),\n buttonPrimary: Styles.createButtonStyle({\n borderColor: Light.buttonPrimaryBorder,\n backgroundColor: Light.buttonPrimaryBackground,\n }),\n buttonPrimaryHover: Styles.createButtonStyle({\n backgroundColor: Light.buttonPrimaryBackgroundHover,\n }),\n buttonCancel: Styles.createButtonStyle({\n borderColor: Light.buttonCancelBorder,\n backgroundColor: Light.buttonCancelBackground,\n }),\n buttonCancelHover: Styles.createButtonStyle({\n backgroundColor: Light.buttonCancelBackgroundHover,\n }),\n buttonDestructive: Styles.createButtonStyle({\n borderColor: Light.buttonDestructiveBorder,\n backgroundColor: Light.buttonDestructiveBackground,\n }),\n buttonDestructiveHover: Styles.createButtonStyle({\n backgroundColor: Light.buttonDestructiveBackgroundHover,\n }),\n text: Styles.createTextStyle({\n font: Fonts.displayRegular,\n fontSize: FontSizes.size11,\n }),\n textPrimary: Styles.createTextStyle({\n color: Light.textButtonPrimary,\n }),\n textCancel: Styles.createTextStyle({\n color: Light.textButtonCancel,\n }),\n textDestructive: Styles.createTextStyle({\n color: Light.textButtonDestructive,\n }),\n};\n","import {t} from '@lingui/macro';\nimport React, {useCallback} from 'react';\nimport {Styles, View, Text, Button, Modal} from 'react-ult';\nimport {default as Svg, SvgPath} from 'react-ult-ext-imagesvg';\nimport WebView, {Types} from 'react-ult-ext-webview';\nimport {Light, Vectors, Colors} from 'features/themes';\nimport {getHost, isNative} from 'features/platform';\n\nexport const modalAppSort = 'mf.app.modal.notifications';\n\nexport interface AppNotificationsProps {\n floatRight: boolean;\n maximized: boolean;\n}\n\nexport function AppNotifications(props: AppNotificationsProps) {\n const base = `${getHost()}/widgets/notifications.php`;\n const classes = {\n inner: [\n styles.inner,\n isNative() && styles.padding,\n props.floatRight && styles.floatRight,\n props.maximized && styles.maximized,\n ],\n };\n\n const close = useCallback(() => Modal.dismiss(modalAppSort), []);\n const noop = useCallback((e) => e.stopPropagation(), []);\n return (\n \n \n \n {t`NOTIFICATIONS`}\n \n \n \n \n \n \n \n );\n}\n\nexport const styles = {\n root: Styles.createViewStyle({\n position: 'absolute',\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: Light.dialogBehind,\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n }),\n inner: Styles.createViewStyle({\n position: 'absolute',\n left: 180,\n top: 20,\n backgroundColor: Colors.neutral.white,\n shadowOffset: {width: 0, height: 3},\n shadowColor: 'rgba(0,0,0,0.3)',\n shadowRadius: 3,\n elevation: 1,\n }),\n padding: Styles.createViewStyle({\n paddingTop: 40,\n }),\n floatRight: Styles.createViewStyle({\n right: 10,\n left: undefined,\n }),\n maximized: Styles.createViewStyle({\n top: 0,\n right: 0,\n left: 0,\n bottom: 0,\n }),\n iframe: Styles.createViewStyle({\n width: 400,\n height: 335,\n }),\n header: Styles.createViewStyle({\n height: 42,\n flexDirection: 'row',\n alignItems: 'center',\n borderColor: Colors.neutral.lightest,\n borderBottomWidth: 1,\n }),\n close: Styles.createButtonStyle({\n position: 'absolute',\n alignItems: 'center',\n right: 0,\n height: 42,\n width: 42,\n }),\n title: Styles.createTextStyle({\n fontSize: 10,\n paddingLeft: 12,\n flex: 1,\n color: Colors.neutral.dark,\n }),\n};\n","import {Dispatch} from 'redux';\n\nexport async function viewFile(_fromUrl: string, _name: string, _dispatch: Dispatch, _actions: any) {\n return false;\n}\n","export default function Worker_fn() {\n return new Worker(__webpack_public_path__ + \"static/js/hash.worker.4a9148d8.worker.js\");\n}\n","import HashWorker from 'worker-loader!./lib/hash/hash.worker';\n\nconst workers: {[id:string]: Worker} = {};\n\nexport function hashFile(\n file: File | string,\n progress: (bytes: number) => void,\n cancelId: string,\n): Promise {\n return new Promise((resolve, reject) => {\n const hasher = workers[cancelId] = new HashWorker();\n hasher.onmessage = (e) => {\n switch (e.data.type) {\n case 'mf::hash::completed':\n resolve(e.data.payload);\n hasher.terminate();\n break;\n case 'mf::hash::progress':\n progress(e.data.payload);\n break;\n case 'mf::hash::failure':\n reject(e.data.payload);\n hasher.terminate();\n delete workers[cancelId];\n break;\n }\n };\n hasher.onerror = (e) =>\n reject(e.message ? e : new Error('Hash worker failed'));\n hasher.postMessage({file});\n });\n}\n\nexport function cancelHashing(id: string) {\n const hasher = workers[id];\n if (hasher) {\n hasher.terminate();\n delete workers[id];\n }\n}\n","export default function Worker_fn() {\n return new Worker(__webpack_public_path__ + \"static/js/upload.worker.f3c44cda.worker.js\");\n}\n","import UploadWorker from 'worker-loader!./lib/upload/upload.worker';\nimport type {UploadInfo, UploadEventProgress, UploadEventCompleted} from './lib/upload/types';\n\nconst workers: {[id:string]: Worker} = {};\n\nexport async function uploadFile(\n file: File,\n url: string,\n info: UploadInfo,\n progress: (e: UploadEventProgress) => void,\n): Promise {\n return new Promise((resolve, reject) => {\n const id = info.id;\n const upload = workers[id] = new UploadWorker();\n upload.onmessage = (event) => {\n switch (event.data.type) {\n case 'mf::upload::progress':\n progress(event.data.payload);\n break;\n case 'mf::upload::completed':\n resolve(event.data.payload);\n upload.terminate();\n break;\n case 'mf::upload::cancelled':\n case 'mf::upload::failure':\n reject(event.data.payload);\n upload.terminate();\n delete workers[id];\n break;\n }\n };\n upload.onerror = (e) =>\n reject(e.message ? e : new Error('Upload worker failed'));\n upload.postMessage({\n type: 'mf::upload::start',\n payload: {file, url, info},\n });\n });\n}\n\nexport async function cancelUpload(id: string) {\n const upload = workers[id];\n if (upload) {\n upload.postMessage({\n type: 'mf::upload::cancel',\n payload: {id},\n });\n }\n}\n","import {DownloadProgress, DownloadResult} from '../types';\n\nexport const downloadDirectory = '';\n\nexport function downloadFile(\n _fromUrl: string,\n _toFile: string,\n _progress: (e: DownloadProgress) => void,\n): DownloadResult {\n return null;\n}\n\nexport async function cancelDownload(_id: number) {\n return null;\n}\n","export async function getSecureCookies() {\n // Secure cookies not supported on web\n return {} as Promise<{[key: string]: string}>;\n}\n\nexport async function clearCookies() {\n // Safely call incase of security error\n try {\n document.cookie = '';\n } catch(e) {}\n}\n","import type {UploadEventProgress} from 'features/filesystem/web/lib/upload/types';\nimport {hashFile, uploadFile, cancelUpload, cancelHashing} from 'features/filesystem';\nimport {getHost, isWeb} from 'features/platform';\nimport {uuid, toArray} from 'features/common';\nimport analytics from 'features/analytics';\n\nconst LIMIT_FILE_SIZE = (50 * Math.pow(1024, 3)) + 100; // 50 GiB + 100 byte padding\n\nconst STALL_THRESHOLD_FULL = 600000; // 10 minutes (in ms)\nconst STALL_THRESHOLD_HASH = 30000; // 30 seconds (in ms)\n\nconst BATCH_RETRIES = 50;\n\nexport type UploadSession = {\n token: string,\n active: boolean,\n files: Map,\n hashes: Map,\n resolve: UploadResolutions,\n signals: AbortSignal[],\n retries: number[],\n batchRetries: number,\n hasSentNetError?: boolean,\n hasSentHashStall?: boolean,\n hasDisabledHashing?: boolean,\n availableStorage: number,\n queuedStorage: number,\n fallback: {\n active: boolean,\n saved: boolean,\n urls?: FileUpload['urls'],\n },\n watchdog: {\n stallTime: number,\n lastChange: number,\n uploaded: number,\n hashed: number,\n stalled: boolean,\n },\n intervals: {\n hash: NodeJS.Timeout,\n check: NodeJS.Timeout,\n upload: NodeJS.Timeout,\n verify: NodeJS.Timeout,\n watchdog: NodeJS.Timeout,\n },\n queues: {\n hash: string[],\n dupe: string[],\n check: string[],\n upload: string[],\n verify: string[],\n active: string[],\n },\n listeners: {\n complete?: UploadListener,\n progress?: UploadListener,\n conflict?: UploadListener,\n failure?: UploadListener,\n failureBatch?: UploadListenerBatch,\n },\n}\n\nexport type UploadResolutions =\n 'prompt'\n | 'keep'\n | 'replace'\n | 'skip_with_errors';\n\nexport type UploadListener = (\n data: any,\n file: FileUpload,\n session: UploadSession,\n) => unknown;\n\nexport type UploadListenerBatch = (\n data: any,\n session: UploadSession,\n) => unknown;\n\nexport type FileUpload = {\n id: string,\n info: FileInfo,\n state: FileState,\n transfer: FileTransfer,\n urls?: {\n simple: string,\n simple_fallback: string,\n resumable: string,\n resumable_fallback: string,\n },\n hash?: string,\n quickkey?: string,\n duplicateQuickkey?: string,\n exceededFileSize?: boolean,\n exceededStorage?: boolean,\n virusDetected?: boolean,\n}\n\nexport type FileTransfer = {\n key: string | null,\n hashed: number,\n uploaded: number,\n fails: number,\n exists: boolean,\n conflict: boolean,\n resolution: UploadResolutions,\n resumable?: {\n transferred: boolean,\n unitCount: number,\n unitSize: number,\n unitBitmap: {\n count: number,\n words: string[],\n },\n },\n}\n\nexport type FileInfo = {\n name: string,\n dest: string,\n type: string,\n size: number,\n path?: string,\n file?: File,\n folder?: string,\n}\n\nexport enum FileState {\n Queued,\n Hashing,\n Uploading,\n Verifying,\n Completed,\n Duplicate,\n Conflict,\n Aborted,\n Failed,\n}\n\nexport enum HashState {\n Uploading,\n Completed,\n}\n\nexport class ReqError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'ReqError';\n if (typeof Error.captureStackTrace === 'function') {\n Error.captureStackTrace(this, this.constructor);\n } else { \n this.stack = (new Error(message)).stack; \n }\n }\n}\n\nexport class NetError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'NetError';\n if (typeof Error.captureStackTrace === 'function') {\n Error.captureStackTrace(this, this.constructor);\n } else { \n this.stack = (new Error(message)).stack; \n }\n }\n}\n\nexport class StallError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'StallError';\n if (typeof Error.captureStackTrace === 'function') {\n Error.captureStackTrace(this, this.constructor);\n } else { \n this.stack = (new Error(message)).stack; \n }\n }\n}\n\nexport class HashError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'HashError';\n if (typeof Error.captureStackTrace === 'function') {\n Error.captureStackTrace(this, this.constructor);\n } else { \n this.stack = (new Error(message)).stack; \n }\n }\n}\n\nexport class CheckError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'CheckError';\n if (typeof Error.captureStackTrace === 'function') {\n Error.captureStackTrace(this, this.constructor);\n } else { \n this.stack = (new Error(message)).stack; \n }\n }\n}\n\nexport class InstantError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'InstantError';\n if (typeof Error.captureStackTrace === 'function') {\n Error.captureStackTrace(this, this.constructor);\n } else { \n this.stack = (new Error(message)).stack; \n }\n }\n}\n\nexport class VerifyError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'VerifyError';\n if (typeof Error.captureStackTrace === 'function') {\n Error.captureStackTrace(this, this.constructor);\n } else { \n this.stack = (new Error(message)).stack; \n }\n }\n}\n\nexport class Uploader {\n /**\n * Creates and returns a new upload session\n * @param token The session token or filedrop key\n * @param token The storage availble in the users account\n */\n static create(token: string, availableStorage: number) {\n const session: UploadSession = {\n token,\n availableStorage,\n queuedStorage: 0,\n files: new Map(),\n hashes: new Map(),\n active: false,\n listeners: {},\n retries: [0, 1000, 3000, 5000, 10000],\n hasDisabledHashing: !Uploader.isHashingSupported(),\n batchRetries: BATCH_RETRIES,\n resolve: 'prompt',\n signals: [],\n fallback: Uploader.loadFallback(),\n watchdog: {\n lastChange: Date.now(),\n stallTime: 0,\n uploaded: 0,\n hashed: 0,\n stalled: false,\n },\n intervals: {\n hash: null,\n check: null,\n upload: null,\n verify: null,\n watchdog: null,\n },\n queues: {\n hash: [],\n dupe: [],\n check: [],\n upload: [],\n verify: [],\n active: [],\n },\n };\n // Replace session token w/ upload action token\n Uploader.authenticate(session);\n // Start processing files added to hash queue\n session.intervals.hash = setInterval(() =>\n Uploader.processHashQueue(session), 200);\n // Start watchdog timer to look for stalls\n session.intervals.watchdog = setInterval(() =>\n Uploader.watchdog(session), 10000);\n return session;\n }\n\n /**\n * Starts uploading files added to the session\n * @param session the uploader session\n */\n static start(session: UploadSession) {\n if (session.active) return;\n session.active = true;\n session.intervals.check = setInterval(() =>\n Uploader.processCheckQueue(session), 900);\n session.intervals.upload = setInterval(() =>\n Uploader.processUploadQueue(session), 500);\n session.intervals.verify = setInterval(() =>\n Uploader.processVerifyQueue(session), 3000);\n }\n\n /**\n * Aborts all active uploads and ends the session\n * @param session the uploader session\n */\n static abort(session: UploadSession) {\n // TODO: loop through signals, cancel fetches\n clearInterval(session.intervals.hash);\n clearInterval(session.intervals.check);\n clearInterval(session.intervals.upload);\n clearInterval(session.intervals.verify);\n session.queues.active.forEach(id => {\n const file = session.files.get(id);\n file && Uploader.cancelUpload(file);\n });\n session.files.forEach(file => {\n if (file.state === FileState.Hashing)\n Uploader.cancelHashing(file);\n });\n session.active = false;\n session.files = new Map();\n session.hashes = new Map();\n session.queues = {\n hash: [],\n dupe: [],\n check: [],\n upload: [],\n verify: [],\n active: [],\n };\n }\n\n /**\n * Add a batch of files to the queue in the upload session\n * @param files list of files to upload\n * @param dest the folder key to upload to\n * @param session the uploader session\n */\n static addFiles(files: FileList | File[], dest: string, session: UploadSession) {\n const hasFile = isWeb();\n toArray(files).forEach(file => {\n const info: FileInfo = {\n dest,\n size: file.size,\n type: file.type,\n name: Uploader.sanitizeName(file.name),\n };\n if (hasFile) {\n info.file = file;\n } else {\n // @ts-ignore-line\n info.path = file.path\n }\n Uploader.addFile(info, session);\n });\n }\n\n /**\n * Add an event listener to the upload session\n * @param type the upload event to listen for\n * @param listener the upload event callback\n * @param session the uploader session\n */\n static addListener(\n type: keyof UploadSession['listeners'],\n listener: UploadListener & UploadListenerBatch,\n session: UploadSession,\n ) {\n session.listeners[type] = listener;\n }\n\n /**\n * Handle file conflict (file name already exists at destination)\n * @param file the conflicted file upload\n * @param session the uploader session\n * @param action the conflict resolution to apply\n * @param applyAll whether to apply the resolution to future conflicts\n * \n */\n static handleConflict(\n file: FileUpload,\n session: UploadSession,\n action: UploadResolutions,\n applyAll?: boolean,\n ) {\n // Called when conflict is chosen\n function updateFile(file: FileUpload) {\n file.state = FileState.Queued;\n file.transfer.resolution = action;\n session.queues.check.unshift(file.id);\n if (session.hashes.has(file.hash)\n && session.hashes.get(file.hash) !== HashState.Completed)\n session.hashes.delete(file.hash);\n }\n // Skipped upload, abort\n if (action === 'skip_with_errors') {\n if (applyAll) {\n session.resolve = action;\n session.files.forEach(upload => {\n if (upload.state === FileState.Conflict) {\n Uploader.sendAbort(upload, session);\n }\n });\n } else {\n Uploader.sendAbort(file, session);\n }\n // Keep both / replace, add to check queue\n } else {\n if (applyAll) {\n session.resolve = action;\n session.files.forEach(upload => {\n if (upload.state === FileState.Conflict) {\n updateFile(upload);\n }\n });\n } else {\n updateFile(file);\n }\n }\n // Start uploader if isn't already active\n Uploader.start(session);\n }\n\n /**\n * Cancel an active file upload\n * @param file the file upload to cancel\n */\n static async cancelUpload(file: FileUpload) {\n file.state = FileState.Aborted;\n return await cancelUpload(file.id);\n }\n\n /**\n * Cancel an active file hashing\n * @param file the file upload to cancel\n */\n static async cancelHashing(file: FileUpload) {\n file.state = FileState.Aborted;\n return cancelHashing(file.id);\n }\n\n // Processing\n\n private static async processHashQueue(session: UploadSession) {\n // Do nothing if we've disabled hashing\n if (session.hasDisabledHashing) return;\n // Do nothing if no files in the hash queue\n if (session.queues.hash.length === 0) return;\n // Do nothing if no hash slots available\n const slots = Uploader.getFreeHashSlots(session);\n if (slots === 0) return;\n // Sort queue, smallest file first\n session.queues.hash.sort((a: string, b: string) => {\n const fileA = session.files.get(a);\n const fileB = session.files.get(b);\n if (!fileA || !fileB) return 0;\n return fileA.info.size - fileB.info.size;\n });\n // Remove first n upload ids in hash queue (n = slots)\n const ids = session.queues.hash.splice(0, slots);\n ids.forEach(async id => {\n // Lookup file by id\n const file = id && session.files.get(id);\n if (!file) return;\n if (file.hash) return;\n file.state = FileState.Hashing;\n // Hash file\n try {\n const input = file.info.file || file.info.path;\n const hash = await hashFile(input, (e) => {\n file.transfer.hashed = e;\n if (session.listeners.progress) {\n session.listeners.progress({\n id: file.id,\n bytesUploaded: 0,\n bytesTotal: file.info.size,\n }, file, session);\n }\n }, file.id);\n file.hash = hash;\n file.transfer.hashed = file.info.size;\n file.state = FileState.Queued;\n // Check if hash is already being uploaded, add\n // to dupe queue if so, otherwise straight to check\n if (session.hashes.get(hash) === HashState.Uploading) {\n session.queues.dupe.push(id);\n } else {\n session.hashes.set(hash, HashState.Uploading);\n session.queues.check.push(id);\n }\n\n if (session.listeners.progress) {\n session.listeners.progress({\n id: file.id,\n bytesUploaded: 0,\n bytesTotal: file.info.size,\n }, file, session);\n }\n // Failed to hash file, fatal error\n } catch (e) {\n file.transfer.fails = session.retries.length;\n Uploader.sendFailure(e, file, session);\n }\n });\n }\n\n private static async processUploadQueue(session: UploadSession) {\n // Do nothing if no files in the upload queue\n if (session.queues.upload.length === 0) return;\n // Do nothing if no upload slots available\n const slots = Uploader.getFreeUploadSlots(session);\n if (slots === 0) return;\n // Sort queue, smallest file first\n session.queues.upload.sort((a: string, b: string) => {\n const fileA = session.files.get(a);\n const fileB = session.files.get(b);\n if (!fileA || !fileB) return 0;\n return fileA.info.size - fileB.info.size;\n });\n // Remove first n ids in upload queue (n = free slots)\n const ids = session.queues.upload.splice(0, slots);\n ids.forEach(async id => {\n // Lookup file by id\n const file = id && session.files.get(id);\n if (!file) return;\n file.state = FileState.Uploading;\n session.queues.active.push(file.id);\n // Upload file\n const transferred = await Uploader.transfer(file, session);\n // Remove from active upload queue\n const index = session.queues.active.indexOf(file.id);\n if (index !== -1)\n session.queues.active.splice(index, 1);\n // Add to verification queue\n if (transferred && file.transfer.key) {\n this.sendVerify(file, session);\n } else {\n // Retry failed upload if retries remaining\n const retryDelay = file && session.retries[file.transfer.fails - 1];\n if (retryDelay !== undefined) {\n // Add to top of upload queue after retry delay\n setTimeout(() => {\n session.queues.upload.unshift(file.id);\n }, retryDelay);\n }\n }\n });\n }\n\n private static async processCheckQueue(session: UploadSession) {\n // Do nothing if no files in the check queue\n if (session.queues.check.length === 0) return;\n\n // Remove first 100 upload ids in check queue\n const keys = session.queues.check.splice(0, 100);\n\n // Fetch instant upload response\n const url = `${getHost()}/api/1.5/upload/check.php`;\n const xhr = await Uploader.request(url, {\n uploads: JSON.stringify(keys.map(id => {\n const file = session.files.get(id);\n const hasHash = session.hasDisabledHashing ? 'no' : 'yes';\n return file ? {\n filename: file.info.name,\n folder_key: file.info.dest,\n size: file.info.size,\n hash: file.hash,\n resumable: hasHash,\n preemptive: hasHash,\n } : null;\n })),\n }, session);\n // Entire request failed, add all keys to top of the queue to retry\n if (!xhr) {\n session.queues.check.unshift(...keys);\n keys.forEach((key) => {\n const file = session.files.get(key);\n if (file && session.hashes.has(file.hash)\n && session.hashes.get(file.hash) !== HashState.Completed)\n session.hashes.delete(file.hash);\n })\n return;\n }\n // Conform api response (different properties for single uploads)\n const checks = xhr.res.upload_checks ? xhr.res.upload_checks : [xhr.res];\n if (!checks || checks.length === 0) return;\n // Determine status for every upload in response\n checks.forEach((checkData: any, i: number) => {\n // Lookup file by index then id\n const id = keys[i];\n const file = id && session.files.get(id);\n if (!file) return;\n // File details\n const host = `${getHost()}/api/upload`;\n const hostAlt = 'https://ul.mediafireuserupload.com/api/upload';\n file.urls = checkData.upload_url ?? {\n simple: `${host}/simple.php`,\n simple_fallback: `${hostAlt}/simple.php`,\n resumable: `${host}/resumable.php`,\n resumable_fallback: `${hostAlt}/resumable.php`,\n };\n file.transfer.conflict = checkData.file_exists === 'yes';\n file.transfer.exists = checkData.hash_exists === 'yes';\n file.transfer.key = checkData.resumable_upload ? checkData.resumable_upload.upload_key : '';\n file.transfer.resumable = checkData.resumable_upload ? {\n transferred: checkData.resumable_upload.all_units_ready === 'yes',\n unitCount: parseInt(checkData.resumable_upload.number_of_units),\n unitSize: parseInt(checkData.resumable_upload.unit_size),\n unitBitmap: checkData.resumable_upload.bitmap,\n } : undefined;\n // Preemptive key available\n if (checkData.preemptive_quickkey)\n file.quickkey = checkData.preemptive_quickkey;\n // Duplicate key from conflict\n if (file.transfer.conflict) {\n file.duplicateQuickkey = checkData.duplicate_quickkey;\n // Resolution to skip on conflict\n if (file.transfer.resolution === 'skip_with_errors' || session.resolve === 'skip_with_errors') {\n Uploader.sendAbort(file, session);\n return;\n // Resolution to prompt on conflict\n } else if (file.transfer.resolution === 'prompt' && session.resolve === 'prompt') {\n file.state = FileState.Conflict;\n if (session.listeners.conflict)\n session.listeners.conflict(undefined, file, session);\n return;\n }\n }\n // Update uploader available storage\n session.availableStorage = parseInt(checkData.available_space);\n // File already exists, instant upload\n if (file.transfer.exists) {\n Uploader.instant(file, session);\n return;\n }\n // File already transferred, send to verify\n if (file.transfer?.resumable?.transferred) {\n file.transfer.uploaded = file.info.size;\n Uploader.sendVerify(file, session);\n return;\n }\n // Storage limit exceeded, send failure\n if (checkData.storage_limit_exceeded === 'yes') {\n file.exceededStorage = true;\n file.transfer.fails = session.retries.length;\n Uploader.sendFailure(new CheckError('Not enough storage'), file, session, xhr);\n return;\n // Other error, send failure\n } else if (xhr.res.result === 'Error') {\n file.transfer.fails = session.retries.length;\n Uploader.sendFailure(new CheckError(xhr.res.message), file, session, xhr);\n return;\n }\n // File is uploadable, add to upload queue\n session.queues.upload.push(id);\n });\n }\n\n private static async processDupeQueue(session: UploadSession) {\n // Do nothing if no files in the dupe queue\n if (session.queues.dupe.length === 0) return;\n // Loop through files in dupe queue, check if the hash was uploaded\n const indexes = [];\n for (let i = 0; i < session.queues.dupe.length; i++) {\n const id = session.queues.dupe[i];\n const file = id && session.files.get(id);\n if (file && session.hashes.get(file.hash) === HashState.Completed) {\n indexes.push(i);\n }\n }\n // Do nothing if no dupe files are ready\n if (indexes.length === 0) return;\n // Move chosen files from dupe to check queue\n indexes.forEach(i => {\n const el = session.queues.dupe.splice(i, 1);\n if (el) session.queues.check.push(el.pop());\n });\n }\n\n private static async processVerifyQueue(session: UploadSession) {\n // Do nothing if no files in the verify queue\n if (session.queues.verify.length === 0) return;\n // Remove first 100 upload keys in verify queue\n const keys = session.queues.verify.splice(0, 100);\n // Fetch status for the upload keys from the server\n const url = `${getHost()}/api/1.5/upload/poll_upload.php`;\n const xhr = await Uploader.request(url, {key: keys.join()}, session);\n // Entire request failed, add all keys to top of the queue to retry\n if (!xhr) {\n session.queues.verify.unshift(...keys);\n return;\n }\n // Conform api response (different properties for single uploads)\n const uploads = xhr.res.doupload\n ? [{...xhr.res.doupload, key: keys[0]}]\n : xhr.res.douploads;\n if (!uploads || uploads.length === 0) return;\n // Determine status for every upload in response\n uploads.forEach((uploadData: any) => {\n // Lookup file by upload key\n let id: string;\n session.files.forEach(file => {\n if (file.transfer.key === uploadData.key)\n id = file.id;\n });\n if (!id) return;\n const file = session.files.get(id);\n if (!file) return;\n const status = parseInt(uploadData.status, 10);\n const error = parseInt(uploadData.fileerror || 0, 10);\n // Handle upload errors\n switch (error) {\n // Virus infected (do not fail, not fatal)\n case 5:\n file.virusDetected = true;\n break;\n // Max file size exceeded\n case 1:\n file.exceededFileSize = true;\n file.transfer.fails = session.retries.length;\n Uploader.sendFailure(new VerifyError('File too large'), file, session, xhr);\n break;\n // Account storage exceeded\n case 15:\n file.exceededStorage = true;\n file.transfer.fails = session.retries.length;\n Uploader.sendFailure(new VerifyError('Not enough storage'), file, session, xhr);\n break;\n // Other errors...\n default:\n if (error > 0) {\n session.queues.upload.unshift(file.id);\n Uploader.sendFailure(new VerifyError(`Verify error (${error})`), file, session, xhr);\n }\n break;\n }\n // Handle upload status\n switch (status) {\n // Units missing, retry\n case 17:\n session.queues.upload.unshift(file.id);\n Uploader.sendFailure(new VerifyError('Missing units'), file, session, xhr);\n break;\n // File is assembled & verified\n case 98:\n case 99:\n if (error === 0)\n Uploader.sendCompleted(uploadData.quickkey, file, session);\n break;\n }\n // Upload still verifying, add to end of queue\n if (file.state === FileState.Verifying) {\n session.queues.verify.push(uploadData.key);\n }\n });\n }\n\n // Transfers\n\n private static async watchdog(session: UploadSession) {\n // Disable watchdog if uploader inactive, no files, or already stalled\n if (!session.active\n || session.files.size === 0\n || session.watchdog.stalled) return;\n\n // Aggregate state & progress of all files\n let total = 0;\n let hashed = 0;\n let uploaded = 0;\n let hashing: FileUpload[] = [];\n \n session.files.forEach(file => {\n total += file.info.size;\n hashed += file.transfer.hashed;\n uploaded += file.state < FileState.Completed\n ? file.transfer.uploaded\n : file.info.size;\n if (file.state === FileState.Hashing)\n hashing.push(file);\n });\n \n // Uploader state\n const timeNow = Date.now();\n const timeFromChange = timeNow - session.watchdog.lastChange;\n const hasUploaded = uploaded > session.watchdog.uploaded;\n const hasHashed = hashed > session.watchdog.hashed;\n const hasProgress = hasHashed || hasUploaded;\n\n const hasStalledFully = !hasProgress\n && uploaded < total\n && timeFromChange >= STALL_THRESHOLD_FULL;\n\n const hasStalledHashing = !hasHashed\n && hashed < total\n && hashing.length > 0\n && timeFromChange >= STALL_THRESHOLD_HASH;\n\n const sessionData = () => {\n let files = {};\n try {\n files = JSON.parse(JSON.stringify(Array.from(session.files.entries())));\n } catch(e) {}\n return {\n active: session.active,\n slots: {\n hash: Uploader.getFreeHashSlots(session),\n upload: Uploader.getFreeUploadSlots(session),\n },\n watchdog: session.watchdog,\n queues: session.queues,\n files,\n };\n };\n\n // No progress at all, report\n if (hasStalledFully) {\n session.watchdog.stalled = true;\n analytics.notify(new StallError('Uploader stalled'), (e) => {\n e.addMetadata('session', sessionData());\n });\n // No hashing progress, restart\n } else if (hasStalledHashing) {\n // Report stall\n session.watchdog.lastChange = timeNow;\n if (!session.hasSentHashStall) {\n session.hasSentHashStall = true;\n analytics.notify(new HashError('Hashing stalled'), (e) => {\n e.addMetadata('session', sessionData());\n });\n }\n // Disable hashing for future uploads\n session.hasDisabledHashing = true;\n // Add all files that were hashing to the check queue, remove from hash queue\n hashing.forEach(file => {\n file.state = FileState.Queued;\n const index = session.queues.hash.indexOf(file.id);\n if (index !== -1) session.queues.hash.splice(index, 1);\n session.queues.check.unshift(file.id);\n });\n // Update watchdog if progress\n } else if (hasProgress) {\n session.watchdog.lastChange = timeNow;\n session.watchdog.uploaded = uploaded;\n session.watchdog.hashed = hashed;\n }\n session.watchdog.stallTime = timeFromChange;\n }\n \n private static async instant(file: FileUpload, session: UploadSession) {\n // Fetch instant upload response\n const url = `${getHost()}/api/1.5/upload/instant.php`;\n const xhr = await Uploader.request(url, {\n filename: file.info.name,\n // quickkey: file.duplicateQuickkey,\n folder_key: file.info.dest,\n size: file.info.size,\n hash: file.hash,\n }, session, file);\n // Request failed\n if (!xhr) return;\n // Keep track of quickkey\n let quickkey = xhr.res.quickkey;\n\n // File hasn't changed, use duplicate quickkey\n if (xhr.res.error === 238)\n quickkey = file.duplicateQuickkey;\n // File infected with virus, flag but continue\n else if (xhr.res.error === 295)\n file.virusDetected = true;\n\n // File skipped\n if (xhr.res.error === 143) {\n Uploader.sendAbort(file, session);\n // File has quickkey, success!\n } else if (quickkey) {\n Uploader.sendCompleted(quickkey, file, session);\n // No quickkey provided, fail\n } else {\n const message = xhr.res.message || `Error ${xhr.res.error || -1}`;\n Uploader.sendFailure(new InstantError(message), file, session, xhr);\n }\n }\n\n private static async transfer(file: FileUpload, session: UploadSession) {\n const params = Uploader.getParams({folder_key: file.info.dest}, session, file);\n const query = Uploader.getQuery(params);\n const url = Uploader.getUploadUrl(file, session);\n // Handle upload progress\n const progress = (e: UploadEventProgress) => {\n if (e.resumable)\n file.transfer.resumable = e.resumable;\n file.transfer.uploaded = e.bytesUploaded;\n file.transfer.fails = 0;\n if (session.listeners.progress) {\n session.listeners.progress(e, file, session);\n }\n };\n // Upload file, parse response\n try {\n const target = file.info.file || file.info.path;\n const upload = await uploadFile(target as File, `${url}?${query}`, {\n id: file.id,\n hash: file.hash,\n type: file.info.type,\n size: file.info.size,\n name: encodeURIComponent(file.info.name),\n resumable: file.transfer.resumable,\n }, progress);\n // Successful upload\n file.transfer.uploaded = file.info.size;\n file.transfer.key = upload.key;\n // Persist working fallback\n if (session.fallback.active && !session.fallback.saved)\n Uploader.saveFallback(session);\n return true;\n // Failed upload\n } catch (e) {\n if (e?.id && !e?.error) {\n Uploader.sendAbort(file, session);\n } else {\n const error = e?.error ?? e;\n const xhr = {res: e, req: params};\n if (typeof error === 'string') {\n Uploader.sendFailure(new NetError(error), file, session, xhr);\n } else {\n Uploader.sendFailure(error, file, session, xhr);\n }\n }\n return false;\n }\n }\n\n private static async authenticate(session: UploadSession) {\n // Fetch upload action token\n const url = `${getHost()}/api/1.5/user/get_action_token.php`;\n const opt = {type: 'upload', lifespan: 1440};\n const xhr = await Uploader.request(url, opt, session);\n // Request failed\n if (!xhr || !xhr?.res?.action_token) return;\n session.token = xhr.res.action_token;\n }\n\n private static async request(url: string, opts: any, session: UploadSession, file?: FileUpload) {\n let xhr: Response;\n let req: any;\n let res: any;\n let json: any;\n try {\n // Build request\n const body = new FormData();\n const params = Uploader.getParams(opts, session, file);\n Object.keys(params).forEach(key => body.append(key, params[key]));\n req = params;\n // Send request\n xhr = await fetch(url, {body, method: 'POST'});\n // Parse response\n json = await xhr.json();\n // Invalid api response, fail\n if (!json || !json.response) {\n const error = new ReqError('Invalid response');\n const xhr = {res: json, req: params};\n // Single file error\n if (file) {\n Uploader.sendFailure(error, file, session, xhr);\n // Batch API error\n } else {\n Uploader.sendBatchFailure(error, session, xhr);\n }\n return false;\n } else {\n res = json.response;\n // Success for batch API, reset retries\n if (!file) {\n session.batchRetries = BATCH_RETRIES;\n }\n }\n // Network error, handle failure\n } catch (err) {\n const status = xhr ? xhr.status : -1;\n const info = {res: {url, status, json}, req}\n // Single file error\n if (file) {\n Uploader.sendFailure(new ReqError(err), file, session, info);\n // Batch API error\n } else {\n Uploader.sendBatchFailure(new ReqError(err), session, info);\n }\n return false;\n }\n // Success, return response\n return {res, req};\n }\n\n // Dispatches\n\n private static sendVerify(file: FileUpload, session: UploadSession) {\n file.state = FileState.Verifying;\n session.queues.verify.push(file.transfer.key);\n if (session.listeners.progress) {\n session.listeners.progress({\n id: file.id,\n bytesUploaded: file.info.size,\n bytesTotal: file.info.size,\n }, file, session);\n }\n }\n\n private static sendCompleted(quickkey: string, file: FileUpload, session: UploadSession) {\n file.state = FileState.Completed;\n file.transfer.uploaded = file.info.size;\n file.quickkey = quickkey;\n session.queuedStorage -= file.info.size;\n session.hashes.set(file.hash, HashState.Completed);\n Uploader.processDupeQueue(session);\n if (session.listeners.complete) {\n session.listeners.complete(quickkey, file, session);\n }\n }\n\n private static sendAbort(file: FileUpload, session: UploadSession) {\n file.state = FileState.Aborted;\n session.queuedStorage -= file.info.size;\n if (session.listeners.failure) {\n session.listeners.failure('Upload skipped', file, session);\n }\n }\n\n private static sendFailure(error: string | Error | DOMException, file: FileUpload, session: UploadSession, xhr?: {req: any, res: any}) {\n const isNetError = error instanceof NetError;\n\n // Update file state\n file.state = FileState.Failed;\n file.transfer.fails++;\n\n // Non-network error, send to bugsnag immediately\n if (!isNetError) {\n Uploader.sendReport(error, xhr, file);\n }\n\n // Network error, second to last retry, enable fallback\n if (isNetError\n && !session.fallback.active\n && file.transfer.fails === session.retries.length - 2) {\n session.fallback.active = true;\n session.fallback.saved = false;\n session.fallback.urls = file.urls;\n }\n\n // Any error type and ran out of retries\n if (session.retries[file.transfer.fails] === undefined) {\n // Reduce queued storage size to free up upload space\n session.queuedStorage -= file.info.size;\n // Send failure callback\n if (session.listeners.failure) {\n const payload = typeof error === 'string' ? error : error.message;\n session.listeners.failure(payload, file, session);\n }\n // First network error that ran out of retries\n if (isNetError && !session.hasSentNetError) {\n Uploader.sendReport(error, xhr, file);\n session.hasSentNetError = true;\n }\n }\n }\n\n private static sendBatchFailure(error: Error, session: UploadSession, xhr: {req: any, res: any}) {\n session.batchRetries--;\n if (session.batchRetries === 0) {\n Uploader.sendReport(error, xhr);\n session.listeners.failureBatch(error, session);\n }\n }\n\n private static sendReport(error: string | Error | DOMException, xhr?: {req: any, res: any}, file?: FileUpload) {\n try {\n analytics.notify(error, e => {\n if (file)\n e.addMetadata('upload', file);\n if (xhr) {\n e.addMetadata('request', xhr.req);\n e.addMetadata('response', xhr.res);\n }\n });\n } catch (e) {}\n }\n\n // Utilities\n\n private static addFile(info: FileInfo, session: UploadSession) {\n // For web, set path for folder uploads\n if (isWeb()) {\n const path = info.file['mfRelativePath']\n || info.file['webkitRelativePath']\n || info.file['mozRelativePath'];\n if (path) {\n const fragments = path.split('/')\n fragments.pop();\n info.folder = fragments.join('/');\n }\n }\n\n // Create upload from provided file info\n const file: FileUpload = {\n info,\n id: uuid(),\n state: FileState.Queued,\n transfer: {\n uploaded: 0,\n hashed: 0,\n fails: 0,\n key: null,\n exists: false,\n conflict: false,\n resolution: 'prompt',\n }\n };\n\n // Record file by id, add to hash queue\n session.files.set(file.id, file);\n \n // Check if file size exceeds available storage\n if (file.info.size > LIMIT_FILE_SIZE) {\n file.exceededFileSize = true;\n file.transfer.fails = session.retries.length;\n file.state = FileState.Failed;\n if (session.listeners.failure)\n session.listeners.failure('File too large', file, session);\n return;\n }\n\n // Check if file size exceeds available storage\n if (session.availableStorage === -1 || info.size > session.availableStorage - session.queuedStorage) {\n file.exceededStorage = true;\n file.transfer.fails = session.retries.length;\n file.state = FileState.Failed;\n if (session.listeners.failure)\n session.listeners.failure('Not enough storage', file, session);\n return;\n }\n\n // Increase used storage by files not yet uploaded\n session.queuedStorage += info.size;\n\n // Add to hashing or check queue if hashing disabled\n if (session.hasDisabledHashing) {\n session.queues.check.push(file.id);\n } else {\n session.queues.hash.push(file.id);\n }\n\n // Send first progress update\n if (session.listeners.progress) {\n session.listeners.progress({\n id: file.id,\n bytesUploaded: 0,\n bytesTotal: file.info.size,\n }, file, session);\n }\n }\n\n private static getUploadUrl(file: FileUpload, session: UploadSession) {\n const urlNormal = file.urls[file.transfer.resumable ? 'resumable' : 'simple'];\n\n // Using normal urls\n if (!session.fallback.active) {\n return urlNormal;\n }\n\n // Fallback system\n const actionFallback = file.transfer.resumable ? 'resumable_fallback' : 'simple_fallback';\n const urlFallback = session.fallback.urls[actionFallback];\n\n // Fallback url mismatch, disable system\n if (urlFallback !== file.urls[actionFallback]) {\n session.fallback.active = false;\n Uploader.saveFallback(session);\n return urlNormal;\n }\n\n // Using fallback url\n return urlFallback;\n }\n\n private static getFreeUploadSlots(session: UploadSession) {\n const limitSize = 3E7; // 30MB\n const limitFiles = 5;\n\n let activeBytes = 0;\n let activeFiles = 0;\n let freeSlots = 0;\n\n // Look at active uploads to see how many more we can start\n session.queues.active.forEach(id => {\n const file = session.files.get(id);\n if (file) {\n activeFiles++;\n activeBytes += file.info.size;\n }\n });\n \n // Look at next uploads in line to see how many we can start\n for (let i = 0; i < session.queues.upload.length; i++) {\n const id = session.queues.upload[i];\n const file = id && session.files.get(id);\n if (file) {\n // Hashing disable, we'll use a single connection per file, limit by file\n if (session.hasDisabledHashing) {\n if (activeFiles < limitFiles) {\n freeSlots++;\n activeFiles++;\n } else {\n break;\n }\n // Limit slots by size since we'll be using multiple connections per file\n } else {\n if (file.info.size < (limitSize - activeBytes)) {\n freeSlots++;\n activeBytes += file.info.size;\n } else {\n break;\n }\n }\n }\n }\n\n // No active uploads, uploads queued, no slots free\n // Must be a large file, allow 1 upload slot\n if (session.queues.active.length === 0\n && session.queues.upload.length > 0\n && freeSlots === 0) {\n return 1;\n }\n\n return Math.min(limitFiles, freeSlots);\n }\n\n private static getFreeHashSlots(session: UploadSession) {\n const cores = isWeb() && navigator ? navigator.hardwareConcurrency || 1 : 2;\n const limit = Math.max(1, Math.min(8, Math.floor(cores / 2)));\n let active = 0;\n session.files.forEach(file => {\n if (file.state === FileState.Hashing)\n active++;\n });\n return limit - active;\n }\n\n private static getParams(extra: Record, session: UploadSession, file?: FileUpload) {\n const params = {...extra};\n params.response_format = 'json';\n params.session_token = session.token;\n // File folder set, add path (folder upload)\n if (file && file.info.folder)\n params.path = file.info.folder;\n // File conflict resolution set\n if (file && file.transfer.resolution !== 'prompt')\n params.action_on_duplicate = session.resolve;\n // Global conflict resolution set\n else if (session.resolve !== 'prompt')\n params.action_on_duplicate = session.resolve;\n return params;\n }\n\n private static getQuery(data: Record) {\n try {\n return new URLSearchParams(data);\n } catch (e) {\n return Object.keys(data).map((key) =>\n [key, data[key]].map(encodeURIComponent).join('=')\n ).join('&');\n }\n }\n\n private static saveFallback(session: UploadSession) {\n session.fallback.saved = true;\n try {\n localStorage.setItem('upload_fallback', JSON.stringify(session.fallback));\n return true;\n } catch (e) {\n return false;\n }\n }\n\n private static loadFallback() {\n const initial = {active: false, saved: false};\n try {\n const serialized = localStorage.getItem('upload_fallback');\n if (!serialized) return initial;\n return JSON.parse(serialized) as UploadSession['fallback'];\n } catch (e) {\n return initial;\n }\n }\n\n private static sanitizeName(name: string) {\n return unescape(name\n .replace(/\\|/g, '-')\n .replace(/\\:/g, '-')\n .replace(/\\*/g, '-')\n .replace(/\\?/g, '-')\n .replace(/\\\"/g, '-')\n .replace(/\\/g, '-')\n .replace(/\\//g, '-')\n .replace(/\\\\/g, '-')\n .trim());\n }\n\n private static isHashingSupported() {\n return 'FileReader' in self;\n }\n}\n","import Bugsnag, {NotifiableError, OnErrorCallback, Event} from '@bugsnag/js';\nimport amplitude from 'amplitude-js';\nimport * as FullStory from '@fullstory/browser';\nimport {isLive} from 'features/platform';\nimport {KEYS} from 'globals/config';\nimport {AppUserGroup} from 'globals/types';\nimport {AnalyticsBase} from './models';\n\nconst gtag = typeof window['gtag'] !== 'undefined'\n ? window['gtag']\n : () => {};\n\nconst loaded = {\n amplitude: false,\n fullstory: false,\n bugsnag: false,\n gtag: false,\n};\n\nconst user = {id: '', group: AppUserGroup.Unregistered}\n\nclass Analytics implements AnalyticsBase {\n start(appName: string, userId: string, userGroup: AppUserGroup) {\n user.id = userId;\n user.group = userGroup;\n\n // Bugsnag\n try {\n Bugsnag.start({\n apiKey: KEYS.BUGSNAG,\n appVersion: process.env.ULT_APP_VERSION,\n appType: process.env.ULT_APP_STAGE,\n user: userId ? {id: userId} : undefined,\n context: 'myfiles',\n maxBreadcrumbs: 50,\n enabledBreadcrumbTypes: ['log', 'user', 'state', 'error', 'manual', 'process', 'request'],\n onError: (event: Event) => {\n event.addMetadata('services', {\n fullstory: loaded.fullstory\n ? FullStory.getCurrentSessionURL(true)\n : null,\n })\n },\n });\n loaded.bugsnag = true;\n } catch (e) {}\n\n // Amplitude\n try {\n const amp = amplitude.getInstance();\n amp.init(isLive()\n ? KEYS.AMPLITUDE_PRODUCTION\n : KEYS.AMPLITUDE_DEVELOPMENT);\n if (userId) amp.setUserId(userId);\n amp.setUserProperties({group: userGroup});\n loaded.amplitude = true;\n } catch (e) {}\n\n // Google Analytics\n try {\n gtag('config', {\n user_id: userId,\n dimension7: appName,\n dimension1: userGroup < AppUserGroup.Free\n ? 'unregistered'\n : userGroup === AppUserGroup.Free\n ? 'basic'\n : 'premium',\n });\n loaded.gtag = true;\n } catch (e) {}\n }\n\n amplitude(name: string, params?: {[key: string]: any}) {\n if (!loaded.amplitude) return;\n try {\n amplitude.getInstance().logEvent(name, params);\n } catch (e) {}\n }\n\n gtag(name: string, params?: {[key: string]: any}) {\n if (!loaded.gtag) return;\n try {\n gtag('event', name, params);\n } catch (e) {}\n }\n\n screen(name: string) {\n if (!loaded.gtag) return;\n try {\n gtag('event', 'screen_view', {screen_name: name});\n } catch (e) {}\n }\n\n log(value: string) {\n loaded.bugsnag && Bugsnag.leaveBreadcrumb(value);\n loaded.fullstory && FullStory.log('log', value);\n }\n\n notify(error: NotifiableError, onError?: OnErrorCallback) {\n if (!loaded.bugsnag) return;\n Bugsnag.notify(error, onError);\n }\n\n record() {\n if (loaded.fullstory) return;\n loaded.fullstory = true;\n FullStory.init({\n orgId: '1QP6C',\n recordCrossDomainIFrames: true,\n });\n if (user.id) {\n FullStory.identify(user.id, {\n premium_bool: user.group > AppUserGroup.Free,\n });\n }\n }\n}\n\nexport default new Analytics();\n","import {createSelector} from '@reduxjs/toolkit';\nimport {Store} from 'store';\n\nconst x = (store: Store) => store;\n\nexport const isSearch = createSelector(x, store => !!store.files.search);\nexport const isUploaderMinimized = createSelector(x, store => store.files.uploadMinimized);\nexport const isDownloaderMinimized = createSelector(x, store => store.files.downloadMinimized);\n\nexport const getLayout = createSelector(x, store => store.files.layout);\nexport const getRoot = createSelector(x, store => store.files.root);\nexport const getBrowser = createSelector(x, store => store.files.browser);\nexport const getCurrent = createSelector(x, store => store.files.current);\nexport const getFocused = createSelector(x, store => store.files.focused);\nexport const getSelection = createSelector(x, store => store.files.selection);\nexport const getPreview = createSelector(x, store => store.files.preview);\nexport const getPreviewProgress = createSelector(x, store => store.files.previewProgress);\nexport const getSearch = createSelector(x, store => store.files.search);\nexport const getFilter = createSelector(x, store => store.files.filter);\nexport const getDrag = createSelector(x, store => store.files.drag);\nexport const getPick = createSelector(x, store => store.files.pick);\nexport const getSort = createSelector(x, store => store.files.sort);\nexport const getQuery = createSelector(x, store => store.files.query);\nexport const getItems = createSelector(x, store => store.files.items);\nexport const getItem = (path: string) => createSelector(x, store => store.files.items[path]);\nexport const getView = (path: string) => createSelector(x, store => store.files.views[path]);\nexport const getParent = (list: 'current' | 'browser') => createSelector(x, store => {\n const parentId = store.files[list];\n const parent = parentId && store.files.items[parentId];\n const hierarchy = parent && parent.hierarchy;\n return hierarchy && hierarchy.length\n ? hierarchy.slice(-1)[0]\n : ['myfiles', 'My Files'];\n});\n\n\nexport const hasPrivateItems = (ids: string[]) => createSelector(x, store => {\n for (let i = 0; i < ids.length; i++) {\n const item = store.files.items[ids[i]];\n if (item && item.private) {\n return true;\n }\n }\n return false;\n});\n\nexport const getUpload = createSelector(x, store => store.files.upload);\nexport const getUploadView = createSelector(x, store => store.files.uploadView);\nexport const getUploadItems = createSelector(x, store => store.files.uploadItems);\nexport const getUploadFiles = createSelector(x, store => store.files.uploadFiles);\nexport const getUploadWeb = createSelector(x, store => store.files.uploadWeb);\nexport const getDownloadBulk = createSelector(x, store => store.files.downloadBulk);\nexport const getDownloadView = createSelector(x, store => store.files.downloadView);\nexport const getDownloadItems = createSelector(x, store => store.files.downloadItems);\n","import {parseContentItem, getShareLink} from 'features/mediafire';\nimport * as MF from 'globals/types';\n\n// GENERIC\n\nexport function move(state: MF.FilesStore, action: MF.FilesMove) {\n const {ids} = action.payload;\n state.selection = [];\n state.search = undefined;\n state.query = undefined;\n ids.forEach(id => {\n const item = state.items[id];\n if (item) item.state = MF.FilesItemState.isMoving;\n });\n}\n\nexport function copy(state: MF.FilesStore, action: MF.FilesCopy) {\n const {ids} = action.payload;\n state.selection = [];\n state.search = undefined;\n state.query = undefined;\n ids.forEach(id => {\n const item = state.items[id];\n if (item) item.state = MF.FilesItemState.isCopying;\n });\n}\n\nexport function update(state: MF.FilesStore, action: MF.FilesUpdate) {\n const {id} = action.payload;\n const item = state.items[id];\n item.state = MF.FilesItemState.isUpdating;\n}\n\nexport function drag(state: MF.FilesStore, action: MF.FilesDrag) {\n const {ids} = action.payload;\n state.drag = ids || undefined;\n}\n\nexport function select(state: MF.FilesStore, action: MF.FilesSelect) {\n const {ids, ranged, view} = action.payload;\n // Range selection\n if (ranged && ids.length === 1) {\n const list = [...view.folders, ...view.files];\n const to = list.indexOf(ids[0]);\n const from = list.indexOf(state.focused);\n state.selection = from <= to\n ? list.slice(from, to + 1)\n : list.slice(to, from + 1);\n // Clear selection\n } else if (ids.length === 0) {\n state.selection = [];\n // Toggle selection\n } else {\n ids.forEach(id => {\n const index = state.selection.indexOf(id);\n if (index === -1) {\n state.selection.push(id);\n } else {\n state.selection.splice(index, 1);\n }\n });\n }\n}\n\nexport function focus(state: MF.FilesStore, action: MF.FilesFocus) {\n const {id} = action.payload;\n state.focused = id || null;\n}\n\nexport function search(state: MF.FilesStore, action: MF.FilesSearch) {\n const {id, query} = action.payload;\n state.query = query || undefined;\n state.search = id || undefined;\n state.views.search = undefined;\n}\n\nexport function filter(state: MF.FilesStore, action: MF.FilesFiltering) {\n state.filter = action.payload;\n}\n\nexport function sort(state: MF.FilesStore, action: MF.FilesSorting) {\n state.sort = action.payload;\n}\n\nexport function layout(state: MF.FilesStore) {\n state.layout = state.layout === 'grid' ? 'list' : 'grid';\n}\n\n// NAVIGATING\n\nexport function pick(state: MF.FilesStore, action: MF.FilesPicking) {\n state.pick = action.payload;\n}\n\nexport function preview(state: MF.FilesStore, action: MF.FilesPreview) {\n const {id, name} = action.payload;\n state.preview = {id, name};\n state.previewProgress = 0;\n}\n\nexport function previewJob(state: MF.FilesStore, action: MF.FilesPreviewJob) {\n const {jobId} = action.payload;\n state.preview.jobId = jobId;\n}\n\nexport function previewProgress(state: MF.FilesStore, action: MF.FilesPreviewProgress) {\n const {progress} = action.payload;\n state.previewProgress = progress;\n}\n\nexport function previewClose(state: MF.FilesStore) {\n state.preview = undefined;\n state.previewProgress = 0;\n}\n\nexport function browse(state: MF.FilesStore, action: MF.FilesBrowse) {\n return {\n ...state,\n browser: action.payload.id,\n };\n}\n\nexport function navigate(state: MF.FilesStore, action: MF.FilesNavigate) {\n return {\n ...state,\n selection: [],\n search: undefined,\n query: undefined,\n current: action.payload.id,\n };\n}\n\nexport function chunk(state: MF.FilesStore, action: MF.FilesChunk) {\n const {id, type, content} = action.payload;\n const keys = [];\n content.folderContent[type].forEach((f: any) => {\n const key = f.folderkey || f.quickkey;\n const cache = state.items[key];\n const data = parseContentItem(f, state.items[id] && state.items[id].hierarchy, null, cache);\n state.items[key] = data;\n keys.push(key);\n });\n \n state.views[id][type] = Array.from(new Set([\n ...state.views[id][type],\n ...keys,\n ]));\n}\n\nexport function sync(state: MF.FilesStore, action: MF.FilesSync) {\n const {ids} = action.payload;\n ids.forEach(id => {\n const item = state.items[id];\n if (item)\n item.state = MF.FilesItemState.isNormal;\n });\n}\n\nexport function load(state: MF.FilesStore, action: MF.FilesLoad) {\n const {id, root, details, depth} = action.payload;\n const chain = depth && depth.chainFolders;\n const parent = details && parseContentItem(\n details.folderInfo,\n null,\n chain,\n state.items[id],\n );\n\n const folders = [];\n const files = [];\n\n if (root) state.root = root;\n if (parent) state.items[id] = parent;\n\n action.payload.folders && (action.payload.folders as any).forEach((f: any) => {\n const cache = state.items[f.folderkey];\n const data = parseContentItem(f, state.items[id] && state.items[id].hierarchy, null, cache);\n state.items[f.folderkey] = data;\n folders.push(f.folderkey);\n });\n\n action.payload.files && (action.payload.files as any).forEach((f: any) => {\n const cache = state.items[f.quickkey];\n const data = parseContentItem(f, state.items[id] && state.items[id].hierarchy, null, cache);\n state.items[f.quickkey] = data;\n files.push(f.quickkey);\n });\n\n state.views[id] = {folders, files};\n}\n\nexport function loadMulti(state: MF.FilesStore, action: MF.FilesLoadMulti) {\n const files = [];\n const folders = [];\n\n action.payload.items && (action.payload.items as any).forEach((f: any) => {\n const id = f.folderkey || f.quickkey;\n const cache = state.items[id];\n const data = parseContentItem(f, null, null, cache);\n state.items[id] = data;\n if (f.folderkey) {\n folders.push(id);\n } else {\n files.push(id);\n }\n });\n\n action.payload.folders && (action.payload.folders as any).forEach((f: any) => {\n const cache = state.items[f.folderkey];\n const data = parseContentItem(f, null, null, cache);\n state.items[f.folderkey] = data;\n folders.push(f.folderkey);\n });\n\n action.payload.files && (action.payload.files as any).forEach((f: any) => {\n const cache = state.items[f.quickkey];\n const data = parseContentItem(f, null, null, cache);\n state.items[f.quickkey] = data;\n files.push(f.quickkey);\n });\n\n if (action.payload.virtual) {\n state.views[action.payload.virtual] = {folders, files};\n }\n}\n\nexport function loadTrash(state: MF.FilesStore, action: MF.FilesLoadTrash) {\n const {id, revision, folderCount, fileCount} = action.payload;\n const folders = [];\n const files = [];\n\n state.root = {id: 'myfiles', name: 'My Files'};\n state.items[id] = {\n id,\n revision,\n state: 0,\n name: 'Trash',\n type: 'folder',\n url: getShareLink(id, 'folder'),\n folders: folderCount || 0,\n files: fileCount || 0,\n hierarchy: [],\n private: true,\n created: '',\n };\n\n action.payload.folders && (action.payload.folders as any).forEach((f: any) => {\n const cache = state.items[f.folderkey];\n const data = parseContentItem(f, null, null, cache);\n state.items[f.folderkey] = data;\n folders.push(f.folderkey);\n });\n\n action.payload.files && (action.payload.files as any).forEach((f: any) => {\n const cache = state.items[f.quickkey];\n const data = parseContentItem(f, null, null, cache);\n state.items[f.quickkey] = data;\n files.push(f.quickkey);\n });\n\n state.views[id] = {folders, files};\n}\n\n// DOWNLOADING\n\nexport function bulkDownload(state: MF.FilesStore, action: MF.FilesBulkDownload) {\n state.downloadMinimized = true;\n state.downloadBulk.push(action.payload);\n}\n\nexport function bulkDownloadClose(state: MF.FilesStore) {\n state.downloadBulk = [];\n state.downloadItems = {};\n state.downloadView = {files: [], folders: []};\n}\n\n// UPLOADING\n\nexport function upload(state: MF.FilesStore, action: MF.FilesUpload) {\n const {id, files} = action.payload;\n const isVirtual = id === 'recent' || id === 'following' || id === 'trash' || id === 'search';\n const targetId = isVirtual ? 'myfiles' : id;\n if (id) {\n state.upload = targetId;\n state.uploadWeb = undefined;\n state.uploadFiles = files;\n state.uploadMinimized = !!files;\n state.uploadView = {files: [], folders: []};\n state.uploadItems = {};\n } else {\n state.upload = null;\n state.uploadWeb = undefined;\n state.uploadFiles = undefined;\n state.uploadView = {files: [], folders: []};\n state.uploadItems = {};\n }\n}\n\nexport function uploadWeb(state: MF.FilesStore, action: MF.FilesUploadWeb) {\n const {id, files} = action.payload;\n const isVirtual = id === 'recent' || id === 'following' || id === 'trash' || id === 'search';\n const targetId = isVirtual ? 'myfiles' : id;\n state.upload = targetId;\n state.uploadWeb = files;\n state.uploadFiles = undefined;\n state.uploadView = {files: [], folders: []};\n state.uploadItems = {};\n}\n\nexport function uploadMinimize(state: MF.FilesStore, action: MF.FilesUploadMinimize) {\n const {minimized} = action.payload;\n state.uploadMinimized = minimized;\n}\n\nexport function downloadMinimize(state: MF.FilesStore, action: MF.FilesDownloadMinimize) {\n const {minimized} = action.payload;\n state.downloadMinimized = minimized;\n}\n\nexport function uploadSync(state: MF.FilesStore, action: MF.FilesUploadSync) {\n const {items} = action.payload;\n if (state.upload) {\n items.forEach(item => {\n const path = item.name;\n if (path) {\n state.uploadItems[path] = item;\n if (!state.uploadView.files.includes(path)) {\n state.uploadView.files.push(path);\n state.uploadView.files.sort((a, b) =>\n state.uploadItems[a].size - state.uploadItems[b].size\n )\n }\n }\n });\n }\n}\n\nexport function downloadSync(state: MF.FilesStore, action: MF.FilesDownloadSync) {\n if (state.downloadBulk.length > 0) {\n const {items} = action.payload;\n items.forEach(item => {\n const path = item.id;\n if (path) {\n state.downloadItems[path] = item;\n if (!state.downloadView.files.includes(path)) {\n state.downloadView.files.push(path);\n }\n }\n });\n }\n}\n","import {FilesStore} from 'globals/types';\nimport {createSlice} from '@reduxjs/toolkit';\nimport * as selectors from './selectors';\nimport * as reducers from './reducers';\n\nexport {selectors};\nexport default createSlice({\n reducers,\n name: 'files',\n initialState: {\n root: {id: '', name: ''},\n sort: {category: 'name', order: 'asc'},\n filter: {type: 'all'},\n items: {},\n layout: 'list',\n views: {},\n gallery: false,\n current: '',\n picker: '',\n focused: null,\n browser: 'myfiles',\n upload: null,\n uploadItems: {},\n uploadView: {files: [], folders: []},\n downloadItems: {},\n downloadBulk: [],\n downloadView: {files: [], folders: []},\n uploadMinimized: false,\n downloadMinimized: false,\n selection: [],\n } as FilesStore,\n});\n","import {createMemoryHistory, createBrowserHistory} from 'history';\nimport {App, Input, Modal, Popup} from 'react-ult';\nimport {getFolderKeyFromUrl} from 'features/mediafire';\nimport analytics from 'features/analytics';\nimport {isWeb} from 'features/platform';\nimport {AppUserGroup} from 'globals/types';\nimport {SCOPE} from 'globals/config';\n\nexport function reporter(_store: any) {\n return {\n initReporter: (\n _state: any,\n user: false | {ekey: string, email: string, group: AppUserGroup}) => {\n const userGroup = user ? user.group : AppUserGroup.Unregistered;\n const userId = user ? user.ekey : undefined;\n analytics.start('mfv2', userId, userGroup);\n },\n pluginReporter: (_store: any) => (next: any) => (action: any) => {\n analytics.log(action.type)\n try {\n return next(action);\n } catch(error) {\n analytics.notify(error);\n }\n },\n };\n}\n\nexport function activate(store: any) {\n return {\n initActivate: (state: any) => {\n state.dispatch(store.app.actions.activate({active: true}));\n App.activationStateChangedEvent.subscribe(activated => {\n const payload = {active: activated === 1};\n state.dispatch(store.app.actions.activate(payload));\n });\n }\n };\n}\n\nexport function navigate(store: any) {\n // Choose location engine\n const history = isWeb() ? createBrowserHistory() : createMemoryHistory();\n\n // Get current folder from location\n const {pathname, hash} = history.location;\n const current = getFolderKeyFromUrl(pathname, hash) || 'myfiles';\n\n // Init syncing location with redux store\n const initNavigate = (state: any, callback: Function) => {\n if (current) {\n state.dispatch(store.files.actions.navigate({\n id: current,\n syncing: false,\n }));\n }\n\n // Listen for history changes (browser back, fwd, etc)\n history.listen(e => {\n const {pathname, hash} = e['location'];\n const replace: boolean = e['action'] === 'REPLACE';\n const id = getFolderKeyFromUrl(pathname, hash);\n analytics.screen(pathname);\n if (id && !replace) {\n callback(id);\n state.dispatch(store.files.actions.navigate({\n id,\n syncing: true,\n }));\n }\n });\n\n // Listen for Android back button\n Input.backButtonEvent.subscribe(() => {\n if (Modal.isDisplayed()) {\n Modal.dismissAll();\n } else if (Popup.isDisplayed()) {\n Popup.dismissAll();\n } else {\n history.back();\n }\n return true;\n });\n };\n\n // Middleware to sync location with redux store\n const pluginNavigate = (state: any) => (next: any) => (action: any) => {\n if (action.type === 'app/feature' && action?.payload?.feature) {\n history.push({pathname: 'early-access'});\n } else if (action.type === 'files/navigate') {\n state.dispatch(store.app.actions.feature({feature: null}));\n const {id, syncing} = action.payload;\n if (id) {\n const pathname = `${SCOPE}${id}`;\n if (syncing) {\n history.replace({pathname, hash: '', search: ''});\n } else {\n history.push(pathname);\n }\n } else {\n history.back();\n }\n }\n return next(action);\n };\n\n // Return middleware and history engine\n return {initNavigate, pluginNavigate, history, current};\n}\n","import {configureStore, combineReducers} from '@reduxjs/toolkit';\nimport {login, load, loadTrash} from 'features/mediafire';\nimport {isLocal} from 'features/platform';\nimport {getSecureCookies} from 'features/filesystem';\nimport {activate, navigate, reporter} from './middleware';\n\nimport app from './app';\nimport files from './files';\n\n// Create initial state\nconst state = {app, files};\n\n// Init plugins\nconst {initActivate} = activate(state);\nconst {initReporter, pluginReporter} = reporter(state);\nconst {initNavigate, pluginNavigate, current, history} = navigate(state);\n\n// Create store\nconst reducer = combineReducers({app: state.app.reducer, files: state.files.reducer});\nconst middleware = [pluginReporter, pluginNavigate];\nconst store = configureStore({reducer, middleware, devTools: isLocal()});\n\n// Start app\n(async() => {\n // Authenticate\n const {dispatch} = store;\n const cookies = await getSecureCookies();\n const user = await login(dispatch, cookies);\n\n // Start plugins\n initReporter(store, user);\n initActivate(store);\n initNavigate(store, (id: string) => {\n const state = store.getState();\n load(dispatch, id, false, state.files.sort, state.files.filter);\n });\n\n // Load current folder\n const state = store.getState();\n load(dispatch, current, true, state.files.sort, state.files.filter);\n\n // Load additional content\n if (user) {\n loadTrash(dispatch, true);\n if (current !== 'myfiles') {\n load(dispatch, 'myfiles', false, state.files.sort, state.files.filter);\n }\n }\n})();\n\nexport type Store = ReturnType;\nexport {state, history};\nexport default store;\n","import {t} from '@lingui/macro';\nimport MediaFire from 'mediafire';\nimport {FolderContent} from 'mediafire/dist/types/Folder';\nimport {Dispatch, AnyAction} from '@reduxjs/toolkit';\nimport {Linking, Accessibility, Clipboard} from 'react-ult';\nimport {AppAlertType, AppHeader, AppUserGroup} from 'globals/types';\nimport {lightFormat as formatTimestamp, formatDistance} from 'date-fns';\nimport {getHost, getEnvironment, getClient, setCustomSubdomain, isWeb, isNative, isLocal} from 'features/platform';\nimport {viewFile, clearCookies} from 'features/filesystem';\nimport {bytesize, testBit, shuffle} from 'features/common';\nimport analytics from 'features/analytics';\nimport device from 'features/device';\nimport {Vectors, Light} from 'features/themes';\nimport {AppFeatures, FilesStore, FilesItem, FilesErrors, FilesItemFlag} from 'globals/types';\nimport {FileUpload, FileState} from 'globals/upload';\nimport {HOSTS} from 'globals/config';\nimport {state, history} from 'store';\n\nlet _sessionCookies: any;\nlet _clearAlertsTimer: NodeJS.Timeout;\nlet _syncNotificationsTimer: NodeJS.Timeout;\nlet _syncFolderTimer: NodeJS.Timeout;\n\nexport let api = new MediaFire(getHost());\nexport let sessionToken = isLocal() ? process.env.ULT_APP_TOKEN : '';\nexport let sessionEmail = '';\nexport let sessionPkey = '';\nexport let sessionEkey = '';\n\nconst _features: AppFeatures[] = ['Request', 'Send', 'Sell', 'Deliver', 'Insights'];\nexport const featuresList = [..._features]; shuffle(featuresList);\nexport const featuresOrder = featuresList.map(f => _features.indexOf(f)).join();\n\n// GENERAL\n\nexport async function login(dispatch: Dispatch, cookies?: any) {\n _sessionCookies = cookies;\n await fetchSession();\n try {\n if (sessionToken) {\n authSession();\n const [header, apiUser, apiAvatar] = await Promise.all([\n fetchCustomization(),\n api.user.getInfo(),\n api.user.getAvatar(),\n ]);\n\n const {ekey, email, options, created, premium, displayName} = apiUser.userInfo;\n const group = apiUser.userInfo['oneTimeKeyRequestMaxCount'] === 40000\n ? AppUserGroup.Business\n : premium\n ? AppUserGroup.Pro\n : email\n ? AppUserGroup.Free\n : AppUserGroup.Trial;\n\n const avatar = apiAvatar ? apiAvatar.avatar : undefined;\n const limit = {storage: {used: apiUser.userInfo['usedStorageSize'], total: apiUser.userInfo['storageLimit']}};\n const payload = {ekey, email, group, limit, avatar, created, options, header, name: displayName};\n\n if (header.business)\n setCustomSubdomain(header.business.subdomain);\n\n // Update app state\n dispatch(state.app.actions.login(payload));\n sessionEmail = email;\n\n // Notifications\n updateNotifications(dispatch);\n clearTimeout(_syncNotificationsTimer);\n _syncNotificationsTimer = setInterval(async() => {\n updateNotifications(dispatch);\n }, 15 * 1000);\n\n // Session renewal\n setInterval(async() => {\n renewSession();\n }, 4 * 60 * 1000);\n\n // Return user details\n return {ekey, email, premium, group};\n }\n } catch(e) {\n return false;\n }\n return false;\n}\n\nexport async function alert(dispatch: Dispatch, text: string, type: AppAlertType) {\n dispatch(state.app.actions.alert({text, type}));\n // We don't support RTL, announce will flash this layout\n // remove this condition when RTL is fully supported for Arabic\n if (device.getLocale(true) !== 'ar')\n Accessibility.announceForAccessibility(text);\n clearTimeout(_clearAlertsTimer);\n _clearAlertsTimer = setTimeout(() => dispatch(state.app.actions.clearAlerts()), 5000);\n}\n\nexport async function updateNotifications(dispatch: Dispatch) {\n try {\n const path = `${getHost()}/api/1.5/notifications/peek_cache.php`;\n const options = {excludeEndpointUrl: true};\n const notifications = await api.device.post(path, undefined, options);\n const count = notifications ? parseInt(notifications['numUnread']) : 0;\n dispatch(state.app.actions.updateNotifications({count}));\n } catch (e) {\n const error = e?.body?.response?.error;\n if (error === 105 || error === 104)\n fetchSession(true);\n return undefined;\n }\n}\n\nexport async function fetchCustomization(): Promise {\n const defaultHeader = {\n needsPaymentUpdate: false,\n customAlertIDs: [],\n business: undefined,\n custom: false,\n logo: '',\n colors: {\n header: Light.logoColor,\n primary: Light.logoColor,\n },\n theme: {\n header: 'default',\n },\n };\n try {\n const path = `${getHost()}/application/customization.php`;\n const options = {excludeEndpointUrl: true, withCredentials: true, retries: 5};\n const response = await api.user.post(path, undefined, options);\n return response ? response as AppHeader : defaultHeader;\n } catch (e) {\n return defaultHeader;\n }\n}\n\nexport async function fetchSession(redirect?: boolean) {\n if (!api) {\n api = new MediaFire(getHost());\n }\n\n // Build cookie header\n let cookie = [];\n if (isNative() && _sessionCookies) {\n Object.keys(_sessionCookies).forEach((key: string) => {\n cookie.push(`${encodeURIComponent(key)}=${encodeURIComponent(_sessionCookies[key])}`)\n });\n }\n\n // Build url\n const url = `${getHost()}/application/get_session_token.php`;\n const query = isNative() ? `?platform=${getClient()}` : '';\n\n try {\n // Fetch session token\n const request = await fetch(`${url}${query}`, {\n credentials: isNative() ? 'omit' : 'include',\n method: 'post',\n headers: {\n 'Cookie': isNative() && cookie.length > 0\n ? cookie.join('; ')\n : undefined,\n }\n });\n // Parse response\n const session = await request.json();\n if (session && session.response) {\n if (session.response.session_token)\n sessionToken = session.response.session_token;\n if (session.response.permanent_token)\n sessionPkey = session.response.permanent_token;\n if (session.response.ekey)\n sessionEkey = session.response.ekey;\n authSession();\n return true;\n }\n } catch (e) {}\n redirect && gotoHomepage();\n return false;\n}\n\nexport async function openPage(url: string, skipAuth?: boolean) {\n if (!isNative() || skipAuth) {\n openUrl(url);\n } else if (isNative() && !skipAuth) {\n const path = `${getHost()}/api/1.5/user/get_login_token_v2.php`;\n const options = {excludeEndpointUrl: true};\n try {\n const response = await api.device.post(path, {\n password: sessionPkey,\n email: sessionEmail,\n ekey: sessionEkey,\n duration: 'session',\n redirectPath: url,\n platform: getClient(),\n }, options);\n if (response && response['loginToken']) {\n const token = response['loginToken'];\n const redirect = `${getHost()}/dynamic/client_login/token.php?login_token=${token}`;\n openUrl(redirect);\n }\n } catch (e) {\n openUrl(url);\n }\n }\n}\n\nexport async function openUrl(url: string) {\n try {\n await Linking.openUrl(url);\n } catch(e) {\n try {location.href = url;} catch(e) {}\n }\n}\n\nexport async function renewSession() {\n try {\n const path = `${getHost()}/api/1.5/user/renew_session_token.php`;\n const options = {excludeEndpointUrl: true};\n const response = await api.device.post(path, {sessionToken}, options);\n if (response && response['sessionToken'] && response['sessionToken'] !== sessionToken) {\n sessionToken = response['sessionToken'];\n authSession();\n }\n } catch (e) {\n const error = e?.body?.response?.error;\n if (error === 105 || error === 104)\n fetchSession(true);\n return undefined;\n }\n}\n\nexport async function destroySession(dispatch: Dispatch) {\n try {\n const path = `${getHost()}/application/logout.php`;\n const options = {excludeEndpointUrl: true, withCredentials: true, retries: 5};\n await api.user.post(path, undefined, options);\n } catch (e) {}\n _sessionCookies = '';\n sessionToken = '';\n dispatch(state.app.actions.logout());\n clearCookies();\n if (isWeb()) {\n gotoHomepage();\n } else {\n device.restartApp();\n }\n}\n\nexport function authSession() {\n api.authenticate(sessionToken);\n}\n\nexport function gotoHomepage() {\n if (isWeb()) {\n window.location.href = getHost();\n }\n}\n\nexport function trackShare() {\n analytics.gtag('share');\n}\n\nexport function fail(id: string, e: any) {\n const code = e && e.body && e.body.response ? e.body.response.error : 0;\n switch (code) {\n case FilesErrors.InvalidToken:\n case FilesErrors.MissingToken:\n // fetchSession(true);\n gotoHomepage();\n break;\n case FilesErrors.InvalidFolderkey:\n case FilesErrors.MissingFolderkey:\n case FilesErrors.AccessDenied:\n window.location.href = `${getHost()}/error.php?errno=999&quickkey=${id}`;\n break;\n default:\n console.log('error:', code, e);\n break;\n }\n}\n\n// MANAGEMENT\n\nexport async function move(dispatch: Dispatch, ids: string[], destination: string, name: string) {\n try {\n const files = [];\n const folders = [];\n if (ids.length > 0) {\n ids.forEach(id => isFolderkey(id) ? folders.push(id) : files.push(id));\n await Promise.all([\n files.length && api.file.move(files.join(), destination),\n folders.length && api.folder.move(folders.join(), destination),\n ]);\n dispatch(state.files.actions.move({ids, destination}));\n const message = `Moved ${ids.length} ${ids.length === 1 ? 'item' : 'items'} to “${name}”`;\n alert(dispatch, message, 'info');\n analytics.gtag('move');\n return true;\n }\n } catch(e) {\n return e && e.body ? e.body.response : e;\n }\n}\n\nexport async function copy(dispatch: Dispatch, ids: string[], destination: string, name: string) {\n try {\n const files = [];\n const folders = [];\n if (ids.length > 0) {\n ids.forEach(id => isFolderkey(id) ? folders.push(id) : files.push(id));\n await Promise.all([\n files.length && api.file.post('copy.php', {quickKey: files.join(), folderKey: destination}),\n folders.length && api.folder.post('copy.php', {folderKeySrc: folders.join(), folderKeyDst: destination}),\n ]);\n dispatch(state.files.actions.copy({ids, destination}));\n const message = t`Copied ${ids.length} ${ids.length === 1 ? 'item' : 'items'} to “${name}”`;\n alert(dispatch, message, 'info');\n analytics.gtag('copy');\n return true;\n }\n } catch(e) {\n return e && e.body ? e.body.response : e;\n }\n}\n\nexport async function restore(dispatch: Dispatch, ids: string[], destination: string, name: string) {\n try {\n const files = [];\n const folders = [];\n if (ids.length > 0) {\n ids.forEach(id => isFolderkey(id) ? folders.push(id) : files.push(id));\n await Promise.all([\n files.length && api.file.move(files.join(), destination),\n folders.length && api.folder.move(folders.join(), destination),\n ]);\n dispatch(state.files.actions.move({ids, destination}));\n const message = t`Restored ${ids.length} ${ids.length === 1 ? 'item' : 'items'} to “${name}”`;\n alert(dispatch, message, 'info');\n analytics.gtag('restore');\n return true;\n }\n } catch(e) {\n return e && e.body ? e.body.response : e;\n }\n}\n\nexport async function archive(dispatch: Dispatch, ids: string[]) {\n try {\n analytics.gtag('archive');\n const files = ids.filter(id => isQuickkey(id));\n const folders = ids.filter(id => isFolderkey(id));\n dispatch(state.files.actions.select({ids: []}));\n return await Promise.all([\n files.length > 0 && api.file.post('delete.php', {quickKey: files.join()}),\n folders.length > 0 && api.folder.post('delete.php', {folderKey: folders.join()}),\n ]);\n } catch(e) {\n return e && e.body ? e.body.response : e;\n }\n}\n\nexport async function purge(dispatch: Dispatch, ids: string[]) {\n try {\n analytics.gtag('purge');\n const files = ids.filter(id => isQuickkey(id));\n const folders = ids.filter(id => isFolderkey(id));\n dispatch(state.files.actions.select({ids: []}));\n return await Promise.all([\n files.length > 0 && api.file.post('purge.php', {quickKey: files.join()}),\n folders.length > 0 && api.folder.post('purge.php', {folderKey: folders.join()}),\n ]);\n } catch(e) {\n return e && e.body ? e.body.response : e;\n }\n}\n\nexport async function rename(id: string, name: string) {\n try {\n analytics.gtag('rename');\n const isFolder = isFolderkey(id);\n const fileType = isFolderkey(id) ? 'folder' : 'file';\n return await api[fileType].post('update.php', isFolder\n ? {folderKey: id, foldername: name}\n : {quickKey: id, filename: name});\n } catch(e) {\n return e && e.body ? e.body.response : e;\n }\n}\n\nexport async function describe(id: string, description: string) {\n try {\n analytics.gtag('description');\n const isFolder = isFolderkey(id);\n const fileType = isFolderkey(id) ? 'folder' : 'file';\n return await api[fileType].post('update.php', isFolder\n ? {description, folderKey: id}\n : {description, quickKey: id});\n } catch(e) {\n return e && e.body ? e.body.response : e;\n }\n}\n\nexport async function privacy(ids: string[], state: 'public' | 'private') {\n analytics.gtag('private');\n ids.forEach(async id => {\n const isFolder = isFolderkey(id);\n const fileType = isFolderkey(id) ? 'folder' : 'file';\n try {\n api[fileType].post('update.php', isFolder\n ? {privacy: state, folderKey: id}\n : {privacy: state, quickKey: id});\n } catch(e) {\n return e && e.body ? e.body.response : e;\n }\n });\n}\n\nexport async function password(id: string, password: string) {\n try {\n analytics.gtag('password');\n const isFolder = isFolderkey(id);\n const fileType = isFolderkey(id) ? 'folder' : 'file';\n\n // Workaround to fix remove password due to SDK not sending empty string\n if (!password) {\n try {\n const query = `password=${password ? password : \"\"}&quick_key=${id}&session_token=${sessionToken}`;\n const url = `${getHost()}/api/1.5/file/update_password.php?${query}&response_type=json`;\n const xhr = new XMLHttpRequest();\n xhr.open('POST', url, true);\n xhr.send();\n return {result: 'Success'};\n } catch (e) {\n return {result: 'Error'};\n }\n }\n\n return await api[fileType].post('update_password.php', isFolder\n ? {folderKey: id, password}\n : {quickKey: id, password});\n } catch(e) {\n return e && e.body ? e.body.response : e;\n }\n}\n\nexport async function download(url: string, bulk?: boolean, forceDownload?: boolean) {\n if (!url) return;\n const base = bulk ? url : url.replace(/^http:\\/\\//g, 'https://');\n const path = forceDownload && base ? base.replace('/view/', '/file/') : base;\n try {\n analytics.gtag(bulk ? 'bulk_download' : 'download');\n if (bulk && isWeb()) {\n location.href = path;\n } else if (isWeb() && path && path.indexOf('/view/') === -1) {\n window.open(path);\n } else if (path) {\n openPage(path);\n }\n } catch(e) {\n try {location.href = path;} catch(e) {}\n }\n}\n\nexport async function preview(id: string, name: string, dispatch: Dispatch, actions: any) {\n try {\n const params = {quickKey: id, linkType: 'direct_download'};\n const response: any = await api.file.post('get_links.php', params);\n return viewFile(response.links[0].directDownload, name, dispatch, actions);\n } catch(e) {\n return false;\n }\n}\n\nexport async function bulkDownload(ids: string[], statusKey: string, confirmBandwidth?: boolean, confirmLargeDownload?: boolean) {\n try {\n const keys = ids.join();\n const meta = await api.file.post('zip_preview.php', {\n keys,\n statusKey,\n metaOnly: 'yes',\n useOwnBandwidth: confirmBandwidth ? 'yes' : 'no',\n allowLargeDownload: confirmLargeDownload ? 'yes' : 'no',\n });\n const authed = sessionToken ? `&session_token=${sessionToken}` : '';\n const query = `use_own_bandwidth=yes&allow_large_download=yes&keys=${keys}&status_key=${statusKey}${authed}`;\n download(`${getHost()}/api/1.5/file/zip.php?${query}`, true);\n return meta;\n } catch(e) {\n return e && e.body ? e.body.response : e;\n }\n}\n\nexport async function bulkDownloadPreview(ids: string[]) {\n try {\n return await api.file.post('zip_preview.php', {\n keys: ids.join(),\n useOwnBandwidth: 'yes',\n allowLargeDownload: 'yes',\n });\n } catch(e) {\n return e && e.body ? e.body.response : e;\n }\n}\n\nexport async function bulkDownloadStatus(id: string) {\n try {\n return await api.file.post('zip_status.php', {\n statusKey: id,\n useOwnBandwidth: 'yes',\n allowLargeDownload: 'yes',\n });\n } catch(e) {\n return e && e.body ? e.body.response : e;\n }\n}\n\nexport async function bulkDownloadAdd(\n dispatch: Dispatch,\n item: {\n statusKey: string,\n fileName: string,\n totalSize: number,\n },\n) {\n dispatch(state.files.actions.bulkDownload(item));\n}\n\nexport async function createFolder(id: string, name: string) {\n try {\n analytics.gtag('create_folder');\n return await api.folder.post('create.php', {\n parentKey: id,\n foldername: name,\n });\n } catch(e) {\n return e && e.body ? e.body.response : e;\n }\n}\n\nexport async function configureFileDrop(\n action: 'enable' | 'disable' | 'view',\n folderKey: string,\n message?: string,\n embedSize?: string,\n notificationEmails?: string,\n) {\n try {\n analytics.gtag('configure_filedrop');\n return await api.folder.post('configure_filedrop.php', {\n action,\n folderKey,\n message,\n embedSize,\n notificationEmails,\n });\n } catch(e) {\n return e && e.body ? e.body.response : e;\n }\n}\n\n// Navigate\n\nexport async function load(\n dispatch: Dispatch,\n id: string,\n init?: boolean,\n sort?: FilesStore['sort'],\n filter?: FilesStore['filter'],\n) {\n switch (id) {\n case 'recent':\n return await loadRecent(dispatch);\n case 'following':\n return await loadFollowing(dispatch);\n case 'trash':\n return await loadTrash(dispatch);\n default:\n return await loadFolder(dispatch, id, init, false, false, sort, filter);\n }\n}\n\nexport async function loadFolder(\n dispatch: Dispatch,\n id: string,\n isInit?: boolean,\n isSync?: boolean,\n gallery?: boolean,\n sort?: FilesStore['sort'],\n filter?: FilesStore['filter'],\n) {\n try {\n // Sorting\n let orderBy: 'name' | 'size' | 'created' | 'downloads';\n const orderDir = sort ? sort.order : 'asc';\n if (sort) {\n switch (sort.category) {\n case 'name':\n orderBy = 'name';\n break;\n case 'size':\n orderBy = 'size';\n break;\n case 'date':\n orderBy = 'created';\n break;\n case 'downloads':\n orderBy = 'downloads';\n break;\n }\n }\n\n // Filtering\n let filterBy: 'application' | 'archive' | 'audio' | 'development' | 'document' | 'image' | 'presentation' | 'spreadsheet' | 'video';\n let filesOnly = false;\n let foldersOnly = false;\n if (filter) {\n switch (filter.type) {\n case 'all':\n filterBy = undefined;\n break;\n case 'files':\n filterBy = undefined;\n filesOnly = true;\n break;\n case 'folders':\n filterBy = undefined;\n foldersOnly = true;\n break;\n case 'private':\n filterBy = 'private' as any; // TODO: update MF-JS-SDK\n break;\n case 'public':\n filterBy = 'public' as any; // TODO: update MF-JS-SDK\n break;\n case 'video':\n filterBy = 'video';\n break;\n case 'audio':\n filterBy = 'audio';\n break;\n case 'images':\n filterBy = 'image';\n break;\n case 'document':\n filterBy = 'document';\n break;\n case 'presentation':\n filterBy = 'presentation';\n break;\n case 'spreadsheet':\n filterBy = 'spreadsheet';\n break;\n case 'development':\n filterBy = 'development';\n break;\n }\n }\n\n // Retrieve data\n const apiFolder = await api.folder.getInfo(id, 'yes');\n const {name, flag, revision, fileCount, folderCount, totalFiles, totalFolders} = apiFolder.folderInfo;\n const isOwned = testBit(flag, FilesItemFlag.isOwned);\n const folderRoot = isOwned ? {id: 'myfiles', name: 'My Files'} : {id, name};\n const [apiDepth, apiFolders, apiFiles] = await Promise.all([\n isOwned && id !== 'myfiles' && !isSync && api.folder.getDepth(id),\n !filesOnly && totalFolders > 0 &&\n api.folder.getContent(id, 'folders', 1, 100, 'yes', orderDir, orderBy, filterBy),\n !foldersOnly && totalFiles > 0 &&\n api.folder.getContent(id, 'files', 1, 100, 'yes', orderDir, orderBy, gallery ? 'image' : filterBy),\n ]);\n\n // Dispatch load\n const details = apiFolder;\n const depth = isOwned && apiDepth && apiDepth['folderDepth'];\n const root = isInit && folderRoot;\n const files = apiFiles.folderContent && apiFiles.folderContent.files as any;\n const folders = apiFolders.folderContent && apiFolders.folderContent.folders as any;\n dispatch(state.files.actions.load({id, root, depth, details, files, folders}));\n\n // Load more\n const moreFiles = apiFiles && apiFiles.folderContent.moreChunks;\n const moreFolders = apiFolders && apiFolders.folderContent.moreChunks;\n const moreItems = moreFolders || moreFiles;\n moreItems && crawlFolder(dispatch, id, 2, moreFolders, moreFiles);\n\n // Sync folder until we leave it\n !isSync && syncFolder(dispatch, id, revision, fileCount, folderCount, sort);\n } catch(e) {\n fail(id, e);\n }\n}\n\nexport async function loadTrash(dispatch: Dispatch, nochunks?: boolean) {\n try {\n // Retrieve data\n const [folders, files] = await Promise.all([\n api.device.getTrash('folders'),\n api.device.getTrash('files'),\n ]);\n\n // Dispatch load\n dispatch(state.files.actions.loadTrash({\n id: 'trash',\n revision: 0,\n folderCount: folders ? folders.folderCount : 0,\n fileCount: files ? files.fileCount : 0,\n folders: folders ? folders.folders : [],\n files: folders ? files.files : [],\n }));\n\n // Load more\n if (!nochunks) {\n const moreFolders = folders && folders.moreChunks;\n const moreFiles = files && files.moreChunks;\n const moreItems = moreFolders || moreFiles;\n moreItems && crawlTrash(dispatch, 2, moreFolders, moreFiles);\n // Sync trash until we leave it\n syncTrash(dispatch, 0);\n }\n\n } catch(e) {\n fail('trash', e);\n }\n}\n\nexport async function loadSearch(dispatch: Dispatch, id: string, query: string) {\n try {\n const search = await api.folder.search(id, query, false);\n const fileKeys = search && search.results ? search.results.filter(e => isQuickkey(e.quickkey)) : [];\n const folderKeys = search && search.results ? search.results.filter(e => isFolderkey(e.folderkey)) : [];\n const [folders, files] = await Promise.all([\n folderKeys.length > 0 && api.folder.getInfo(folderKeys.map(e => e.folderkey).join()),\n fileKeys.length > 0 && api.file.getInfo(fileKeys.map(e => e.quickkey).join()),\n ]);\n const infoFolders = folders ? folders['folderInfos'] ? folders['folderInfos'] : [folders.folderInfo] : [];\n const infoFiles = files ? files.fileInfos ? files.fileInfos : [files.fileInfo] : [];\n if (search && search.results) {\n analytics.gtag('search', {results: search.results.length});\n dispatch(state.files.actions.loadMulti({folders: infoFolders, files: infoFiles, virtual: 'search'}));\n } else {\n dispatch(state.files.actions.loadMulti({items: [], virtual: 'search'}));\n }\n } catch(e) {\n dispatch(state.files.actions.loadMulti({items: [], virtual: 'search'}));\n }\n}\n\nexport async function loadRecent(dispatch: Dispatch) {\n try {\n const recent = await api.file.recentlyModified(100);\n const ids = recent && recent.quickkeys && recent.quickkeys.join();\n const info = ids && await api.file.getInfo(ids);\n const files = info ? info.fileInfos ? info.fileInfos : [info.fileInfo] : [];\n dispatch(state.files.actions.loadMulti({\n virtual: 'recent',\n items: files,\n }));\n } catch(e) {\n fail('recent', e);\n }\n}\n\nexport async function loadFollowing(dispatch: Dispatch) {\n try {\n const following = await api.device.post('get_foreign_resources.php') as any;\n dispatch(state.files.actions.loadMulti({\n virtual: 'following',\n items: [...following.folders, ...following.files],\n }));\n } catch(e) {\n fail('following', e);\n }\n}\n\nexport async function syncFolder(\n dispatch: Dispatch,\n id: string,\n startRevision: number,\n startFileCount: number,\n startFolderCount: number,\n sort?: FilesStore['sort'],\n filter?: FilesStore['filter'],\n) {\n try {\n const apiFolder = await api.folder.getInfo(id);\n const {revision, fileCount, folderCount} = apiFolder.folderInfo;\n const {pathname, hash} = history.location;\n const current = getFolderKeyFromUrl(pathname, hash);\n if (current === id) {\n if ((revision && revision > startRevision)\n || (fileCount && fileCount !== startFileCount)\n || (folderCount && folderCount !== startFolderCount)) {\n loadFolder(dispatch, id, false, true, undefined, sort, filter);\n }\n clearTimeout(_syncFolderTimer);\n _syncFolderTimer = setTimeout(() =>\n syncFolder(dispatch, id, revision, fileCount, folderCount, sort, filter), 2500);\n }\n } catch(e) {\n const error = e?.body?.response?.error;\n if (error === 105 || error === 104)\n fetchSession(true);\n }\n}\n\nexport async function syncTrash(dispatch: Dispatch, startRevision: number) {\n try {\n const id = 'trash';\n const apiFolder = await api.device.getStatus();\n const revision = apiFolder ? apiFolder['deviceRevision'] : startRevision;\n const {pathname, hash} = history.location;\n const current = getFolderKeyFromUrl(pathname, hash);\n if (current === id) {\n if (revision && revision > startRevision) {\n loadTrash(dispatch, true);\n }\n clearTimeout(_syncFolderTimer);\n _syncFolderTimer = setTimeout(() =>\n syncTrash(dispatch, revision), 2500);\n }\n } catch(e) {}\n}\n\nexport async function crawlFolder(\n dispatch: Dispatch,\n id: string,\n page: number,\n moreFolders: boolean,\n moreFiles: boolean,\n orderDir?: 'asc' | 'desc',\n orderBy?: 'name' | 'size' | 'created' | 'downloads',\n) {\n try {\n const size = 100;\n const [folders, files] = await Promise.all([\n moreFolders && api.folder.getContent(id, 'folders', page, size, 'no', orderDir, orderBy),\n moreFiles && api.folder.getContent(id, 'files', page, size, 'no', orderDir, orderBy),\n ]);\n const hasFolders = folders && folders.folderContent && !!folders.folderContent.folders.length;\n const hasFiles = files && files.folderContent && !!files.folderContent.files.length;\n if (hasFolders)\n dispatch(state.files.actions.chunk({id, page, size, type: 'folders', content: folders}));\n if (hasFiles)\n dispatch(state.files.actions.chunk({id, page, size, type: 'files', content: files}));\n const loadMoreFolders = hasFolders && folders.folderContent.moreChunks;\n const loadMoreFiles = hasFiles && files.folderContent.moreChunks;\n if (loadMoreFolders || loadMoreFiles) {\n const {pathname, hash} = history.location;\n const current = getFolderKeyFromUrl(pathname, hash);\n if (current === id) {\n return await crawlFolder(dispatch, id, page + 1, loadMoreFolders, loadMoreFiles);\n }\n }\n return true;\n } catch(e) {\n return false;\n }\n}\n\nexport async function crawlTrash(dispatch: Dispatch, page: number, moreFolders: boolean, moreFiles: boolean) {\n const id = 'trash';\n const size = 100;\n const [folders, files] = await Promise.all([\n moreFolders && api.device.getTrash('folders', page),\n moreFiles && api.device.getTrash('files', page),\n ]);\n const hasFolders = folders && folders.folders && !!folders.folders.length;\n const hasFiles = files && files.files && !!files.files.length;\n if (hasFolders) {\n const type = 'folders';\n const content = {folderContent: folders} as FolderContent;\n dispatch(state.files.actions.chunk({id, page, size, type, content}));\n }\n if (hasFiles) {\n const type = 'files';\n const content = {folderContent: files} as FolderContent;\n dispatch(state.files.actions.chunk({id, page, size, type, content}));\n }\n const loadMoreFolders = folders && folders.moreChunks;\n const loadMoreFiles = files && files.moreChunks;\n if (loadMoreFolders || loadMoreFiles) {\n if (!history.location) return;\n const {pathname, hash} = history.location;\n const current = getFolderKeyFromUrl(pathname, hash);\n if (current === id) {\n return await crawlTrash(dispatch, page + 1, loadMoreFolders, loadMoreFiles);\n }\n }\n return true;\n}\n\n// Download\n\nexport function downloadState(items: {[id: string]: FilesItem}) {\n const keys = Object.keys(items);\n const count = keys.length;\n let size = 0;\n let skipped = 0;\n let downloaded = 0;\n let finished = 0;\n let completed = true;\n keys.forEach(id => {\n const file = items[id];\n if (file) {\n const status = file.uploadStatus || '';\n const isComplete = status === 'Completed';\n const hasError = isNaN(parseInt(status))\n && status !== 'Preparing…'\n && status !== 'Packaging'\n && status !== 'Completed';\n if (hasError) {\n skipped++;\n return;\n }\n size += (file.size || 0);\n downloaded += isComplete ? file.size : (file.uploadProgress || 0);\n if (isComplete)\n finished++;\n if (!hasError && !isComplete)\n completed = false;\n }\n });\n return {\n size,\n count,\n skipped,\n downloaded,\n finished,\n completed,\n };\n}\n\nexport function downloadSync(\n dispatch: Dispatch,\n downloads: {\n bytes: number,\n total: number,\n state: string,\n name: string,\n id: string,\n }[],\n) {\n const items: FilesItem[] = [];\n downloads && downloads.forEach(download => {\n let downloadProgress = 0;\n let downloadStatus = '';\n switch(download.state) {\n case 'starting file':\n case 'writing file':\n downloadProgress = download.bytes;\n downloadStatus = download.bytes ? `${((download.bytes / download.total) * 100).toFixed(2)}%` : '0%';\n break;\n case 'finalizing zip':\n downloadProgress = download.total;\n downloadStatus = 'Packaging';\n case 'complete':\n downloadProgress = download.total;\n downloadStatus = 'Completed';\n break;\n case 'skipped file':\n downloadStatus = 'Skipped file';\n break;\n default:\n downloadStatus = 'Preparing…';\n break\n }\n items.push({\n type: 'archive',\n id: download.id,\n name: download.name,\n size: download.total,\n uploadStatus: downloadStatus,\n uploadProgress: downloadProgress,\n created: '',\n hierarchy: [],\n private: true,\n revision: 0,\n state: 0,\n url: '',\n });\n });\n\n if (items.length > 0) {\n dispatch(state.files.actions.downloadSync({items}));\n }\n}\n\n// Upload\n\nexport function uploadState(items: {[id: string]: FilesItem}) {\n const keys = Object.keys(items);\n const count = keys.length;\n let size = 0;\n let hashed = 0;\n let aborted = 0;\n let skipped = 0;\n let uploaded = 0;\n let finished = 0;\n let verifying = 0;\n let completed = true;\n keys.forEach(id => {\n const file = items[id];\n if (file) {\n const status = file.uploadStatus || '';\n const isAborted = status === 'Skipped';\n const isPolling = status === 'Verifying…';\n const isComplete = status === 'Completed';\n const isTransferred = isComplete || isPolling;\n const hasError = isNaN(parseInt(status))\n && status !== 'Queued'\n && status !== 'Preparing…'\n && status !== 'Verifying…'\n && status !== 'Completed'\n && status !== 'Conflict';\n if (isAborted)\n aborted++;\n if (hasError) {\n skipped++;\n return;\n }\n size += (file.size || 0);\n hashed += isTransferred ? file.size : (file.uploadHashed || 0);\n uploaded += isTransferred ? file.size : (file.uploadProgress || 0);\n if (isComplete)\n finished++;\n if (isPolling)\n verifying++;\n if (!hasError && !isComplete)\n completed = false;\n }\n });\n return {\n size,\n count,\n aborted,\n skipped,\n uploaded,\n hashed,\n finished,\n verifying,\n completed,\n };\n}\n\nexport function uploadSync(\n dispatch: Dispatch,\n file: FileUpload,\n error?: string,\n) {\n let uploadHashed = file.transfer.hashed || 0;\n let uploadProgress = file.transfer.uploaded || 0;\n const status = `${((uploadProgress / file.info.size) * 100).toFixed(2)}%`;\n let uploadStatus = status === '0.00%' ? 'Queued' : status;\n if (file.state === FileState.Completed)\n analytics.gtag('upload');\n switch (file.state) {\n case FileState.Queued:\n uploadStatus = 'Queued';\n break;\n case FileState.Hashing:\n uploadStatus = 'Preparing…';\n break;\n case FileState.Verifying:\n uploadStatus = 'Verifying…';\n break;\n case FileState.Completed:\n uploadStatus = 'Completed';\n break;\n case FileState.Conflict:\n uploadStatus = 'Conflict';\n break;\n case FileState.Duplicate:\n uploadStatus = 'Duplicate';\n break;\n case FileState.Aborted:\n uploadStatus = 'Skipped';\n break;\n case FileState.Failed:\n uploadStatus = error ? error.toString() : 'Upload error (-1)';\n break;\n }\n dispatch(state.files.actions.uploadSync({\n id: file.info.dest,\n items: [{\n name: file.info.name,\n type: file.info.type,\n size: file.info.size,\n uploadStatus,\n uploadHashed,\n uploadProgress,\n id: file.id,\n url: getShareLink(\n file.quickkey,\n file.info.type,\n file.info.name,\n ),\n hierarchy: [],\n private: true,\n revision: 0,\n state: 0,\n created: '',\n }],\n }));\n}\n\nexport function uploadWebSync(\n dispatch: Dispatch,\n destination: string,\n uploads: {\n url: string,\n eta: string,\n size: number,\n status: string,\n active: boolean,\n quickkey: string,\n filename: string,\n uploadkey: string,\n createdUtc: string,\n percentage: number,\n statusCode: number,\n errorStatus: number,\n }[],\n) {\n const items: FilesItem[] = [];\n uploads && uploads.forEach(upload => {\n const size = upload.size || 0;\n let uploadProgress = 0;\n let uploadStatus = '';\n if (upload.errorStatus === 0) {\n switch(upload.statusCode) {\n case 1:\n case 2:\n uploadStatus = 'Preparing…';\n break;\n case 3:\n case 4:\n uploadProgress = size > 0 ? (size / 100) * upload.percentage : 0;\n uploadStatus = `${upload.percentage.toFixed(2)}%`;\n break;\n case 6:\n uploadProgress = size;\n uploadStatus = 'Verifying…';\n break;\n case 99:\n uploadProgress = size;\n uploadStatus = 'Completed';\n break;\n }\n } else {\n switch(upload.errorStatus) {\n case 9:\n uploadStatus = 'Failed (9)';\n break;\n case 10:\n uploadStatus = 'Failed (too big)';\n break;\n case 11:\n uploadStatus = 'Failed (too small)';\n break;\n case 14:\n uploadStatus = 'Failed (14)';\n break;\n case 15:\n uploadStatus = 'Failed (invalid url)';\n break;\n case 16:\n uploadStatus = 'Failed (missing file)';\n break;\n case 17:\n uploadStatus = 'Failed (image too big)';\n break;\n case 19:\n uploadStatus = 'Failed (virus found)';\n break;\n case 38:\n uploadStatus = 'Failed (partial file)';\n break;\n case 39:\n uploadStatus = 'Failed (storage full)';\n break;\n }\n }\n\n items.push({\n size,\n uploadStatus,\n uploadProgress,\n id: upload.quickkey,\n name: upload.filename,\n created: upload.createdUtc,\n hierarchy: [],\n private: true,\n revision: 0,\n state: 0,\n url: '',\n // TODO: get type from api, quick hack\n type: upload.filename.match(/\\.(jpg|jpeg|png|gif|bmp|tiff)$/i)\n ? 'image'\n : upload.filename.match(/\\.(aac|wav|ogg|mp3|flac|wma)$/i)\n ? 'music'\n : upload.filename.match(/\\.(mp4|mkv|mv4|avi|mov|webm|flv|wmv)$/i)\n ? 'video'\n : 'file',\n });\n });\n\n if (items.length > 0) {\n dispatch(state.files.actions.uploadSync({items, id: destination}));\n }\n}\n\nexport async function uploadAddWebFile(dispatch: Dispatch, id: string, url: string, name: string) {\n try {\n analytics.gtag('webupload');\n const path = `${getHost()}/api/1.5/upload/add_web_upload.php`;\n const options = {excludeEndpointUrl: true};\n const params = {url, folderKey: id, filename: name};\n const response = await api.device.post(path, params, options);\n const uploadKey = response && response['uploadKey'];\n dispatch(state.files.actions.uploadWeb({id, files: [uploadKey]}));\n return await response;\n } catch(e) {\n return e && e.body ? e.body.response : e;\n }\n}\n\nexport async function uploadGetWebFiles(uploadKey?: string) {\n try {\n const path = `${getHost()}/api/1.5/upload/get_web_uploads.php`;\n const options = {excludeEndpointUrl: true};\n const params = {uploadKey, allWebUploads: 'yes'};\n return await api.device.post(path, params, options);\n } catch(e) {\n return e && e.body ? e.body.response : e;\n }\n}\n\n// Utilities\n\nexport function isQuickkey(id: unknown) {\n const LENGTH_QUICKKEY = 15;\n const LENGTH_QUICKKEY_OLD = 11;\n if (!id || typeof id !== 'string') return false;\n if (id.length !== LENGTH_QUICKKEY && id.length !== LENGTH_QUICKKEY_OLD) return false;\n if (/[^a-z0-9]/.test(id)) return false;\n return true;\n}\n\nexport function isFolderkey(id: unknown) {\n const LENGTH_FOLDERKEY = 13;\n const key = id && id.toString();\n if (!key) return false;\n if (key === 'myfiles'\n || key === 'trash'\n || key === 'recent'\n || key === 'following'\n ) return true;\n if (key.length !== LENGTH_FOLDERKEY) return false;\n if (/[^a-z0-9]/.test(key)) return false;\n return true;\n}\n\nexport function getShareLink(id: string, type?: string, name?: string) {\n if (!id) return '';\n const slug = name && name.length ? '/' + name.split(' ').join('+') : '';\n const base = getHost();\n if (!type) type = isFolderkey(id) ? 'folder' : '';\n switch (type) {\n case 'folder':\n return `${base}/folder/${id}${slug}`;\n case 'image':\n return `${base}/view/${id}${slug}/file`;\n default:\n return `${base}/file/${id}${slug}/file`;\n };\n}\n\nexport function getFolderKeyFromUrl(path: string, hash?: string) {\n for (const pattern of [\n /#\\/([a-z0-9]+)/, // hash\n /#([a-z0-9]+)/, // legacy\n /([a-z0-9]+)/, // normal\n /\\/folder\\/([a-z0-9]+)/, // shared\n /\\/file\\/([a-z0-9]+)/, // download\n /\\/content\\/([a-z0-9]+)/, // unicorn\n /\\/files\\/([a-z0-9]+)/, // reserved\n /\\/myfiles\\/([a-z0-9]+)/, // reserved\n ]) {\n const pathMatch = path && path.match(pattern);\n const pathKey = pathMatch && pathMatch.pop();\n if (isFolderkey(pathKey)) return pathKey;\n const hashMatch = hash && hash.match(pattern);\n const hashKey = hashMatch && hashMatch.pop();\n if (isFolderkey(hashKey)) return hashKey;\n }\n return false;\n}\n\nexport function parseContentItem(item: any, hierarchy?: any, chain?: any, cache?: any) {\n const id = item.quickkey || item.folderkey;\n const type = item.filetype || 'folder';\n const name = item.filename || item.name;\n const size = item.totalSize && item.totalSize > item.size\n ? item.totalSize\n : (item.size || 0);\n const url = item.links\n ? (item.links.view || item.links.normalDownload)\n : getShareLink(id, type, name);\n\n let files = item.totalFiles > item.fileCount ? item.totalFiles : (item.fileCount || 0);\n let folders = item.totalFolders > item.folderCount ? item.totalFolders : (item.folderCount || 0);\n\n // Workaround for empty root folders that had previous items\n if (id === 'myfiles') {\n if (item.folderCount === 0 && item.totalFolders > 0)\n folders = 0;\n if (item.fileCount === 0 && item.totalFiles > 0)\n files = 0;\n }\n\n const parent = hierarchy ? hierarchy[hierarchy.length - 1] : undefined;\n const parentKey = parent ? parent[0] : undefined;\n const parentName = parent ? parent[1] : undefined;\n\n return {\n id,\n url,\n name,\n type,\n size,\n files,\n folders,\n state: 0,\n flag: item.flag || 0,\n hash: item.hash || '',\n downloads: item.downloads || 0,\n filedrop: item.dropboxEnabled || false,\n owner: item.ownerName,\n revision: item.revision,\n created: item.createdUtc,\n deleted: item.deleteDate,\n parentKey: item.parentFolderkey || parentKey,\n parentName: item.parentName || parentName,\n shared: item.dateSharedUtc,\n description: item.description,\n password: !!item.passwordProtected,\n private: item.privacy === 'private',\n hierarchy: hierarchy ? [...hierarchy, [id, name]]\n : chain ? [...chain.reverse().map((f: any) => [f.folderkey, f.name])]\n : cache ? cache.hierarchy : [],\n };\n}\n\nexport function copyLink(link: string) {\n analytics.gtag('copy_link');\n Clipboard.setText(link);\n}\n\nexport function getTimeStamp(time: string) {\n const invalid = '0000-00-00 00:00:00';\n if (!time) return invalid;\n try {\n return formatTimestamp(new Date(time.replace(/\\s/g, 'T')), 'yyyy-MM-dd HH:mm:ss');\n } catch(e) {\n return invalid;\n }\n}\n\nexport function getTimeSince(time: string) {\n const invalid = '0000-00-00 00:00:00';\n if (!time) return invalid;\n try {\n return formatDistance(new Date(time.replace(/\\s/g, 'T')), Date.now());\n } catch(e) {\n return invalid;\n }\n}\n\nexport function getDetails(type: string, details: {\n files?: number,\n folders?: number,\n downloads?: number,\n size?: number,\n}) {\n if (type === 'folder') {\n const folderCount = details.folders >= 9999 ? t`many` : details.folders;\n const fileCount = details.files >= 9999 ? t`many` : details.files;\n const folders = `${folderCount} ${details.folders === 1 ? 'folder' : 'folders'}`;\n const files = `${fileCount} ${details.files === 1 ? 'file' : 'files'}`;\n return `${folders}, ${files}`;\n } else {\n const downloadCount = details.downloads >= 999999 ? t`many` : details.downloads;\n const downloads = `${downloadCount} download${details.downloads === 1 ? '' : 's'}`;\n const size = `${bytesize(details.size)}`;\n return `${downloads}, ${size}`;\n }\n}\n\nexport function getPhoto(id: string, hash: string, flag: number, isPrivate: boolean) {\n if (!testBit(flag, FilesItemFlag.isViewable)) return '';\n const env = getEnvironment();\n const subdomain = env === 'www' ? `www${parseInt(hash.charAt(0), 16) + 1}` : env;\n const host = (HOSTS.LIVE).replace('www', subdomain);\n const authed = isPrivate && sessionToken ? `?session_token=${sessionToken}` : '';\n return `${host}/convkey/${hash.substr(0, 4)}/${id}3g.jpg${authed}`;\n}\n\nexport function getKeysFromUrl(url: string) {\n const parts = url.split(getHost());\n const keys: string[] = [];\n let found: boolean;\n const append = (url: string) => {\n if (isFolderkey(url) || isQuickkey(url)) {\n keys.push(url);\n found = true;\n }\n };\n\n parts.forEach(url => {\n const segments = url.split('/');\n for (let i = 0; i < segments.length; i++) {\n const segment = segments[i];\n const urls = segment.split(',');\n found = false;\n urls.forEach(append);\n if (found) break;\n }\n });\n\n return keys;\n}\n\nexport function getIcon(type: string, name: string, primaryColor: string) {\n let icon = Vectors.fileGeneric;\n let fill = Light.fileIconColor;\n\n if (name && name.length && name.includes('pdf')) {\n return {icon: Vectors.filePDF, fill, type: 'pdf'};\n }\n\n switch (type) {\n case 'folder':\n fill = primaryColor;\n icon = Vectors.fileFolder;\n break;\n case 'text':\n icon = Vectors.fileText;\n break;\n case 'code':\n icon = Vectors.fileCode;\n break;\n case 'archive':\n icon = Vectors.fileArchive;\n break;\n case 'audio':\n icon = Vectors.fileAudio;\n break;\n case 'video':\n icon = Vectors.fileVideo;\n break;\n case 'image':\n icon = Vectors.fileImage;\n break;\n case 'spreadsheet':\n icon = Vectors.fileSpreadsheet;\n break;\n case 'pdf':\n icon = Vectors.filePDF;\n break;\n case 'presentation':\n icon = Vectors.filePresentation;\n break;\n case 'document':\n icon = Vectors.fileDocument;\n break;\n };\n\n return {icon, fill, type};\n}\n\n/* TODO: legacy function, needs refactoring */\nexport function appendFolderPathToFiles(items: any, original: any, callback: any) {\n // The goal of this function is to mimic the affects of uploading folders through the folder browse input\n // it converts webkitEntries to an Html5FileObject,\n // and adds a folderpath to match the functionality of using a folder browse input,\n // currently Chrome only (webkitGetAsEntry).\n let files = [];\n const entries = [];\n let counter = 0;\n let directoryFound = false;\n\n const toArray = (list: any) => Array.prototype.slice.call(list || [], 0);\n const errorHandler = () => {};\n const getDirectoryItems = (reader: any, callback: any) => {\n let entries = [];\n const readEntries = function() {\n counter++;\n reader.readEntries(function(results: any) {\n if (!results.length) {\n entries.sort();\n counter--;\n callback(entries);\n } else {\n entries = entries.concat(toArray(results));\n counter--;\n readEntries();\n }\n }, errorHandler);\n };\n readEntries();\n };\n\n const readDirectory = (entries: any) => {\n if (entries <= 0) callback(files);\n for (let i = 0; i < entries.length; i++) {\n if (entries[i]) {\n if (entries[i]['isDirectory']) {\n const reader = entries[i].createReader();\n getDirectoryItems(reader, readDirectory);\n } else {\n // Path to the current directory (first entry path in directory)\n let folderPath = entries[i].fullPath.slice(1).split('/'); // Remove starting slash.\n folderPath.pop(); // Remove filename.\n folderPath = folderPath.join('/');\n // Creates a file object from the entry.\n counter++;\n entries[i].file((file) => {\n counter--;\n try {\n // Attach the url so we know where its located.\n file.mfRelativePath = folderPath + '/' + file.name;\n // Add the file to the array.\n files = [...files, file];\n //console.log('added', file.name);\n } catch(e) {\n //console.log('failed', folderPath + '/' + file.name, e);\n }\n // Check if we are completely done.\n if (counter <= 0) callback(files);\n }, errorHandler);\n }\n }\n }\n };\n\n if (items) {\n for (let i = 0; i < items.length; i++) {\n if (!items[i].webkitGetAsEntry) break;\n entries[i] = items[i].webkitGetAsEntry();\n if (entries[i] && entries[i]['isDirectory'])\n directoryFound = true;\n }\n }\n\n if (directoryFound)\n readDirectory(entries);\n else\n callback(original);\n}\n","import {ImagesBase} from './models';\n\nclass Images implements ImagesBase {\n avatar = require('assets/images/avatar.png').default;\n bizBranding = require('assets/images/business-branding.png').default;\n bizSecurity = require('assets/images/business-security.png').default;\n bizSharing = require('assets/images/business-sharing.png').default;\n emptyBackground = require('assets/images/empty-bg.png').default;\n emptyDrag = require('assets/images/empty-drag.png').default;\n welcomeBrowse = require('assets/images/welcome-browse.png').default;\n welcomeUpload = require('assets/images/welcome-upload.png').default;\n welcomeView = require('assets/images/welcome-view.png').default;\n}\n\nexport default new Images();\n","import {Dispatch} from 'redux';\nimport {ViewOnLayoutEvent} from 'react-ult/dist/common/Types';\nimport {Types as TypesWebViewExt} from 'react-ult-ext-webview';\nimport {login, openPage, load, loadTrash} from 'features/mediafire';\nimport {getSecureCookies} from 'features/filesystem';\nimport analytics from 'features/analytics';\nimport {getHost} from 'features/platform';\nimport {AppFeatures} from 'globals/types';\nimport {state} from 'store';\n\n// GENERAL\n\nexport function layout(dispatch: Dispatch) {\n return (e: ViewOnLayoutEvent) => {\n const {width, height} = e;\n dispatch(state.app.actions.resize({width, height}));\n }\n}\n\nexport function menuOpen(dispatch: Dispatch) {\n return () => {\n dispatch(state.app.actions.menu({open: true}));\n }\n}\n\nexport function menuClose(dispatch: Dispatch) {\n return () => {\n dispatch(state.app.actions.menu({open: false}));\n }\n}\n\nexport function stateOn(setState: Function) {\n return () => {\n setState(true);\n }\n}\n\nexport function stateOff(setState: Function) {\n return () => {\n setState(false);\n }\n}\n\n// PROMOS\n\nexport function earlyAccess(dispatch: Dispatch) {\n return (feature: AppFeatures, menu_position: number) => () => {\n analytics.record();\n analytics.amplitude('menu_promo_click', {product: feature, menu_position});\n dispatch(state.app.actions.feature({feature}));\n }\n}\n\n// AUTHENTICATION\n\nexport function loginNativeRedirect(setState: Function) {\n return async (e: TypesWebViewExt.WebViewNavigationState) => {\n const authenticated = e.url === 'https://www.mediafire.com/';\n if (authenticated) {\n setState(true);\n }\n }\n}\n\nexport function loginNativeAuth(dispatch: Dispatch) {\n return async (e: TypesWebViewExt.WebViewMessageEvent) => {\n if (e.nativeEvent.data.includes('Cookie:')) {\n const cookies = await getSecureCookies();\n const authenticated = !!cookies.user;\n if (authenticated) {\n await login(dispatch, cookies);\n load(dispatch, 'myfiles', true);\n loadTrash(dispatch, true);\n }\n }\n }\n}\n\n// NAVIGATING\n\nexport function gotoLogin() {\n return async (e: any) => {\n e.stopPropagation && e.stopPropagation();\n openPage(`${getHost()}/login/`, true);\n }\n}\n\nexport function gotoUpgrade(query?: string) {\n return async (e: any) => {\n e.stopPropagation && e.stopPropagation();\n openPage(`${getHost()}/upgrade/${query ? `?${query}` : ''}`);\n }\n}\n\nexport function gotoAccount() {\n return async (e: any) => {\n e.stopPropagation && e.stopPropagation();\n openPage(`${getHost()}/myaccount/`);\n }\n}\n\nexport function gotoAccountAvatar() {\n return async (e: any) => {\n e.stopPropagation && e.stopPropagation();\n openPage(`${getHost()}/myaccount/customize_avatar.php`);\n }\n}\n\nexport function gotoSupport() {\n return async (e: any) => {\n e.stopPropagation && e.stopPropagation();\n openPage(`${getHost()}/help/submit_a_ticket.php`);\n }\n}\n\nexport function gotoEarnSpace() {\n return async (e: any) => {\n e.stopPropagation && e.stopPropagation();\n openPage(`${getHost()}/earnspace/`);\n }\n}\n","import {t} from '@lingui/macro';\nimport {Dispatch} from 'redux';\nimport {Types, Modal, Popup} from 'react-ult';\nimport {\n alert,\n load,\n loadSearch,\n syncFolder,\n download,\n preview,\n copyLink,\n move,\n archive,\n getShareLink,\n isFolderkey,\n getKeysFromUrl,\n appendFolderPathToFiles,\n} from 'features/mediafire';\nimport {getHost, isWeb} from 'features/platform';\nimport {SCOPE} from 'globals/config';\nimport {state} from 'store';\nimport * as MF from 'globals/types';\n\n// GENERAL\n\nexport function layout(dispatch: Dispatch) {\n return () => {\n dispatch(state.files.actions.layout());\n }\n}\n\nexport function sort(dispatch: Dispatch, id: string) {\n return (sort: MF.FilesStore['sort'], filter: MF.FilesStore['filter']) => {\n dispatch(state.files.actions.sort(sort));\n syncFolder(dispatch, id, -1, -1, -1, sort, filter);\n }\n}\n\nexport function filter(dispatch: Dispatch, id: string) {\n return (sort: MF.FilesStore['sort'], filter: MF.FilesStore['filter']) => {\n dispatch(state.files.actions.filter(filter));\n syncFolder(dispatch, id, -1, -1, -1, sort, filter);\n }\n}\n\nexport function search(dispatch: Dispatch, id: string | null, term?: string) {\n return () => {\n const query = term && typeof term === 'string' && term.length >= 3 && term;\n query && loadSearch(dispatch, id, query);\n dispatch(state.files.actions.search({id, query}));\n }\n}\n\nexport function copyLink2(dispatch: Dispatch, ids: string[], url: string, modalId?: string) {\n return (e: any) => {\n e.stopPropagation && e.stopPropagation();\n const shareUrl = ids.length === 1\n ? url\n : `${getHost(true)}/folder${SCOPE}${ids.join(',')}/shared`;\n alert(dispatch, t`Copied share link to clipboard`, 'info');\n copyLink(shareUrl);\n modalId && Popup.dismiss(modalId);\n }\n}\n\nexport function downloadFile(url: string, forceDownload?: true) {\n return (e: any) => {\n e.stopPropagation && e.stopPropagation();\n download(url, false, forceDownload);\n }\n}\n\nexport function previewFile(dispatch: Dispatch, id: string, name: string, url: string) {\n return async (e: any) => {\n e.stopPropagation && e.stopPropagation();\n if (isWeb()) {\n download(url);\n } else {\n dispatch(state.files.actions.preview({id, name}));\n await preview(id, name, dispatch, state.files.actions);\n dispatch(state.files.actions.previewClose());\n }\n }\n}\n\nexport function navigate(dispatch: Dispatch, id?: string) {\n return (e: any) => {\n e && e.stopPropagation && e.stopPropagation();\n dispatch(state.files.actions.navigate({id}));\n }\n}\n\nexport function browse(dispatch: Dispatch, id?: string, sort?: MF.FilesSort, filter?: MF.FilesFilter) {\n return (e?: any) => {\n e && e.stopPropagation && e.stopPropagation();\n dispatch(state.files.actions.browse({id}));\n id && load(dispatch, id, false, sort, filter);\n }\n}\n\nexport function pick(dispatch: Dispatch, context: MF.FilesPick) {\n return (e?: any) => {\n e && e.stopPropagation && e.stopPropagation();\n dispatch(state.files.actions.pick(context));\n Popup.dismissAll();\n }\n}\n\nexport function pickClear(dispatch: Dispatch) {\n dispatch(state.files.actions.pick(null));\n}\n\n// LISTS\n\nexport function listPick(pick: MF.FilesPick, dispatch: Dispatch, sort?: MF.FilesSort, filter?: MF.FilesFilter) {\n return (e: any) => {\n e.key && load(dispatch, e.key, false, sort, filter);\n if (pick) {\n dispatch(state.files.actions.pick({\n ids: pick.ids,\n action: pick.action,\n destination: e.key,\n }));\n } else {\n dispatch(state.files.actions.pick(null));\n }\n }\n}\n\nexport function listOpen(dispatch: Dispatch) {\n return (e: any) => {\n if (e.type === 'folder') {\n dispatch(state.files.actions.navigate({id: e && e.key}));\n } else { \n download(e.url);\n }\n }\n}\n\nexport function listBrowse(dispatch: Dispatch, sort?: MF.FilesSort, filter?: MF.FilesFilter) {\n return (e: any) => {\n dispatch(state.files.actions.navigate({id: e.key}));\n e.key && load(dispatch, e.key, false, sort, filter);\n }\n}\n\nexport function listFocus(dispatch: Dispatch) {\n return (e: any) => {\n dispatch(state.files.actions.focus({id: e && e.key}));\n }\n}\n\nexport function listSelect(dispatch: Dispatch, ranged?: boolean, view?: MF.FilesView) {\n return (e: any) => {\n dispatch(state.files.actions.select({ranged, view, ids: [e && e.key]}));\n }\n}\n\n// SELECTING\n\nexport function select(dispatch: Dispatch, id?: string) {\n return (e?: any) => {\n e && e.stopPropagation && e.stopPropagation();\n const ids = [id || e && e['id']].filter(Boolean);\n dispatch(state.files.actions.select({ids}));\n }\n}\n\nexport function selectMulti(dispatch: Dispatch, ids: string[]) {\n return () => {\n dispatch(state.files.actions.select({ids}));\n }\n}\n\nexport function selectClear(dispatch: Dispatch, id: string | null) {\n return (e: any) => {\n dispatch(state.files.actions.select({ids: id ? [id] : []}));\n e.stopPropagation && e.stopPropagation();\n }\n}\n\n// DRAGGING\n\nexport function dragDrop(dispatch: Dispatch, setDrop: Function | null, id: string, name: string, parentKey?: string) {\n return (e?: Types.DragEvent) => {\n e && e.preventDefault();\n e && e.stopPropagation();\n setDrop && setDrop(0);\n // Dnd uploading\n const files = e?.dataTransfer?.files;\n if (files && files.length > 0) {\n const items = e?.dataTransfer?.items;\n appendFolderPathToFiles(items, files, (content: File[]) => {\n dispatch(state.files.actions.upload({id, files: content}));\n });\n // Dnd moving\n } else {\n if (isFolderkey(id)) {\n const text = e.dataTransfer.getData('text');\n if (!text) return;\n const ids = getKeysFromUrl(text);\n if (!ids.includes(id) && (!parentKey || parentKey !== id)) {\n move(dispatch, ids, id, name);\n }\n }\n }\n }\n}\n\nexport function dragDropTrash(dispatch: Dispatch) {\n return async (e?: Types.DragEvent) => {\n e && e.preventDefault();\n e && e.stopPropagation();\n const text = e.dataTransfer.getData('text');\n if (!text) return;\n const ids = getKeysFromUrl(text);\n if (ids.length === 0) return;\n const response = await archive(dispatch, ids);\n if (response[0] || response[1]) {\n alert(dispatch, `Successfully moved items to trash`, 'info');\n } else {\n const message = response && response['error']\n ? response['message']\n : 'Failed to move items to trash';\n alert(dispatch, message, 'fail');\n }\n }\n}\n\nexport function dragStart(dispatch: Dispatch, ids: string[], type: string, name: string) {\n return (e?: Types.DragEvent) => {\n dispatch(state.files.actions.drag({ids}));\n if (e) {\n const base = getHost();\n const path = ids.length === 1\n ? getShareLink(ids[0], type, name)\n : `${base}${SCOPE}folder/${ids.join(',')}`;\n e.dataTransfer.effectAllowed = 'move';\n e.dataTransfer.setData('text', path);\n e.dataTransfer.setData('text/uri-list', path);\n try {\n e.dataTransfer.setDragImage(new Image(), 0, 0);\n } catch(e) {}\n }\n }\n}\n\nexport function dragEnd(dispatch: Dispatch) {\n return () => {\n dispatch(state.files.actions.drag({ids: null}));\n }\n}\n\nexport function dragEnter(setDrop: Function, state: number) {\n return (e?: Types.DragEvent) => {\n e && e.preventDefault();\n e && e.stopPropagation();\n setDrop(state + 1);\n }\n}\n\nexport function dragLeave(setDrop: Function, state: number) {\n return (e?: Types.DragEvent) => {\n e && e.stopPropagation();\n setDrop(state - 1);\n }\n}\n\nexport function dragOver() {\n return (e?: Types.DragEvent) => {\n e && e.preventDefault();\n e && e.stopPropagation();\n }\n}\n\n// UPLOADING\n\nexport function uploadStart(dispatch: Dispatch, id: string) {\n return () => {\n Modal.dismissAll();\n dispatch(state.files.actions.upload({id}));\n }\n}\n\nexport function uploadEnd(dispatch: Dispatch) {\n return () => {\n dispatch(state.files.actions.upload({id: null}));\n }\n}\n\nexport function uploadMinimize(dispatch: Dispatch, minimized: boolean) {\n return () => {\n dispatch(state.files.actions.uploadMinimize({minimized}));\n }\n}\n\nexport function downloadMinimized(dispatch: Dispatch, minimized: boolean) {\n return () => {\n dispatch(state.files.actions.downloadMinimize({minimized}));\n }\n}\n","import {t} from '@lingui/macro';\nimport React, {useRef, useEffect, useCallback} from 'react';\nimport {useSelector, useDispatch} from 'react-redux';\nimport {Styles, View, ScrollView, Text, Link, Button, Image, Modal, Types} from 'react-ult';\nimport WebView, {Types as WebTypes} from 'react-ult-ext-webview';\nimport {default as Svg, SvgPath} from 'react-ult-ext-imagesvg';\nimport {useMenu} from 'hooks/useMenu';\nimport {useMenuSort} from 'hooks/useMenuSort';\nimport {useMenuFilter} from 'hooks/useMenuFilter';\nimport {useModalUpsellStorage} from 'hooks/useModalUpsellStorage';\nimport {SafeAreaView} from 'controls/SafeArea';\nimport {IconButton} from 'controls/IconButton';\nimport {AppNotifications, modalAppSort} from 'view/AppNotifications';\nimport {Light, Colors, Breakpoints, Vectors} from 'features/themes';\nimport {getHost, isIOS, isNative, isSafari, isTouch} from 'features/platform';\nimport {destroySession, openPage, featuresList} from 'features/mediafire';\nimport {bytesize, ekeyToPercentile} from 'features/common';\nimport images from 'features/images';\nimport device from 'features/device';\nimport {AppFeatures} from 'globals/types';\nimport {VERSION} from 'globals/config';\nimport * as files from 'store/files';\nimport * as app from 'store/app';\n\nimport * as appEffects from 'store/app/effects';\nimport * as filesEffects from 'store/files/effects';\n\nexport function AppMenu() {\n const host = getHost();\n const hasTouch = isTouch();\n const isPromoDisabled = isIOS() || isSafari();\n const anchorMenuSort = useRef(null);\n const anchorMenuFilter = useRef(null);\n const anchorMenuPolicies = useRef(null);\n const name = useSelector(app.selectors.getName);\n const ekey = useSelector(app.selectors.getEkey);\n const email = useSelector(app.selectors.getEmail);\n const limits = useSelector(app.selectors.getLimits);\n const viewport = useSelector(app.selectors.getViewport);\n const userAvatar = useSelector(app.selectors.getAvatar);\n const earlyAccess = useSelector(app.selectors.getFeature);\n const notifications = useSelector(app.selectors.getNotifications);\n const isBusiness = useSelector(app.selectors.isBusiness);\n const isLoggedIn = useSelector(app.selectors.isLoggedIn);\n const isPremium = useSelector(app.selectors.isPremium);\n const isTrial = useSelector(app.selectors.isTrial);\n const sort = useSelector(files.selectors.getSort);\n const filter = useSelector(files.selectors.getFilter);\n const layout = useSelector(files.selectors.getLayout);\n const current = useSelector(files.selectors.getCurrent);\n const trash = useSelector(files.selectors.getItem('trash'));\n const trashView = useSelector(files.selectors.getView('trash'));\n const isAvatarDefault = userAvatar.indexOf('/myfiles/default.png') !== -1;\n const isFollowing = current === 'following' && !earlyAccess;\n const isRecent = current === 'recent' && !earlyAccess;\n const isTrash = current === 'trash' && !earlyAccess;\n const isFiles = !isTrash && !isRecent && !isFollowing && !earlyAccess;\n const isMenuFloating = viewport.width <= Breakpoints.menu;\n const isNotificationsMaximized = viewport.width <= 440;\n const storageTotal = limits ? limits.storage.total : 0;\n const storagedUsed = limits ? limits.storage.used : 0;\n const storagePixels = Math.max(0, Math.min(168, (storagedUsed / storageTotal) * 168));\n const storagePercent = Math.max(0, Math.min(100, (storagedUsed / storageTotal) * 100));\n const styleHeight = Styles.createScrollViewStyle({minHeight: viewport.height}, false);\n const storageWidth = Styles.createViewStyle({width: isNaN(storagePixels) ? 0 : storagePixels}, false);\n const storageWarn = Styles.createViewStyle({backgroundColor: Colors.secondary.brightRed}, false);\n const imageAvatar = (isAvatarDefault || !userAvatar) ? images.avatar : userAvatar;\n const textTrashCount = trash && trashView ? trash.files + trash.folders : 0;\n const textStorageUsed = `${bytesize(storagedUsed)} / ${bytesize(storageTotal, 0)}`;\n const hasNotifications = notifications > 0;\n const hasSharedWithMe = !isTrial;\n const hasNewFeatures = false && device.isPreferredGeo() && ekeyToPercentile(ekey) <= 50;\n const viewIcon = layout === 'list' ? Vectors.iconGrid : Vectors.iconList;\n const viewLabel = layout === 'list' ? t`GRID VIEW` : t`LIST VIEW`;\n const sortLabel = t`SORT ${sort.category.toUpperCase()}`;\n const filterLabel = t`SHOW ${filter.type.toUpperCase()}`;\n const classes = {\n root: [\n styles.root,\n isMenuFloating && styles.rootFloating,\n ],\n menu: [\n styles.menu,\n ],\n bottomMenu: [\n styles.bottomMenu,\n !isNative() && styles.bottomMenuWeb,\n ],\n notification: [\n styles.notification,\n !isNative() && styles.notificationWeb,\n ],\n bar: [\n styles.used,\n storageWidth,\n storagePercent > 80 && storageWarn,\n ],\n button: [\n styles.button,\n hasTouch && styles.buttonTouch,\n ]\n };\n\n const dispatch = useDispatch();\n const logout = useCallback(() => destroySession(dispatch), []);\n const showEarlyAccess = useCallback(appEffects.earlyAccess(dispatch), []);\n const gotoAccount = useCallback(appEffects.gotoAccount(), []);\n const gotoSupport = useCallback(appEffects.gotoSupport(), []);\n const gotoAvatar = useCallback(appEffects.gotoAccountAvatar(), []);\n const gotoEarnSpace = useCallback(appEffects.gotoEarnSpace(), []);\n const gotoUpgradeTop = useCallback(appEffects.gotoUpgrade('utm_source=sidebar&utm_medium=website&utm_content=upgrade_pro&utm_campaign=upgrade_v2_20210816&mf_source=sidebar&mf_medium=website&mf_content=upgrade_pro&mf_campaign=upgrade_v2_20210816'), []);\n const gotoUpgradeBot = useCallback(appEffects.gotoUpgrade('utm_source=sidebar&utm_medium=website&utm_content=upgrade&utm_campaign=upgrade_v1_20210816&mf_source=sidebar&mf_medium=website&mf_content=upgrade&mf_campaign=upgrade_v1_20210816'), []);\n const gotoFollowing = useCallback(filesEffects.navigate(dispatch, 'following'), []);\n const gotoMyfiles = useCallback(filesEffects.navigate(dispatch, 'myfiles'), []);\n const gotoRecent = useCallback(filesEffects.navigate(dispatch, 'recent'), []);\n const gotoTrash = useCallback(filesEffects.navigate(dispatch, 'trash'), []);\n const toggleView = useCallback(filesEffects.layout(dispatch), []);\n const dragOver = useCallback(filesEffects.dragOver(), []);\n const dropTrash = useCallback(filesEffects.dragDropTrash(dispatch), []);\n\n const [showStorageReminder] = useModalUpsellStorage('remind');\n const [showMenuFilter] = useMenuFilter(current, sort, filter, filesEffects.filter(dispatch, current), anchorMenuFilter.current);\n const [showMenuSort] = useMenuSort(current, sort, filter, filesEffects.sort(dispatch, current), anchorMenuSort.current);\n const [showMenuMore, closeMenuMore] = useMenu([\n {\n command: 'about',\n text: t`ABOUT`,\n }, {\n command: 'policies',\n text: t`POLICIES`,\n }, {\n command: 'privacy',\n text: t`PRIVACY`,\n }, {\n command: 'abuse',\n text: t`ABUSE`,\n }, {\n command: 'help',\n text: t`HELP`,\n },\n ], (command) => {\n switch (command) {\n case 'about':\n openPage(`${getHost()}/about/`);\n break;\n case 'policies':\n openPage(`${getHost()}/policies/terms_of_service.php`);\n break;\n case 'privacy':\n openPage(`${getHost()}/policies/privacy_policy.php`);\n break;\n case 'abuse':\n openPage(`${getHost()}/policy_violation/terms_of_service.php`);\n break;\n case 'help':\n openPage(`${getHost()}/help/submit_a_ticket.php`);\n break;\n }\n closeMenuMore();\n }, anchorMenuPolicies.current, undefined, ['bottom', 'top'], true);\n\n const openNotifications = useCallback(() => Modal.show(\n ,\n modalAppSort), [isMenuFloating, isNotificationsMaximized]);\n\n const menuItemEarlyAccess = useCallback((feature: AppFeatures, i: number) => {\n const isActive = (feature === earlyAccess) || (earlyAccess === 'Overview' && i === 0);\n return (\n \n \n {Vectors[`feat${feature}`].map((path: string, i: number) =>\n \n )}\n \n }\n />\n \n );\n }, [earlyAccess]);\n \n useEffect(() => {\n if (storagePercent >= 95) {\n showStorageReminder();\n }\n }, []);\n\n return (\n \n \n \n \n \n {isLoggedIn &&\n \n {email && imageAvatar &&\n \n \n \n }\n \n \n \n {email ? name : t`Trial Account`}\n \n \n {email &&\n \n {email}\n \n }\n {!email &&\n \n {t`This account is not registered to an email address. Unregistered accounts may be considered abandoned after 14 days of inactivity, unless you register.`}\n \n {t`Register now.`}\n \n \n }\n {\n \n \n \n }\n \n \n }\n \n {!isPromoDisabled && !isPremium && email &&\n \n \n \n \n \n }\n />\n \n }\n \n \n \n \n }\n />\n \n \n \n \n \n }\n />\n \n {hasSharedWithMe &&\n \n \n \n \n }\n />\n \n }\n \n \n \n \n }\n />\n \n {isMenuFloating && \n \n \n \n \n \n }\n />\n \n \n \n \n \n }\n />\n \n \n \n \n \n }\n />\n \n }\n {hasNewFeatures && (\n \n \n \n coming soon\n \n \n {featuresList.map(menuItemEarlyAccess)}\n \n )}\n \n {!isPremium && !isIOS() &&\n \n \n \n \n }\n />\n \n }\n {email &&\n \n \n \n \n }\n />\n \n }\n \n \n \n \n }\n />\n \n \n \n \n \n }\n />\n \n \n \n \n \n }\n />\n \n \n \n {!isPromoDisabled && !isBusiness &&\n \n \n \n }\n \n \n \n \n \n \n \n \n {textStorageUsed}\n \n {isPremium || isPromoDisabled\n ? \n {t`ACCOUNT`}\n \n : \n {email ? t`UPGRADE` : t`SIGN UP`}\n \n }\n \n \n \n \n © MediaFire\n \n \n {`v${process.env.ULT_APP_VERSION || VERSION}`}\n \n \n \n \n \n \n \n \n );\n}\n\nexport const styles = {\n root: Styles.createViewStyle({\n flex: 1,\n width: 200,\n backgroundColor: Colors.neutral.dark,\n borderColor: Light.mainMenuBorder,\n borderRightWidth: 1,\n }),\n rootFloating: Styles.createViewStyle({\n flex: 1,\n width: 200,\n backgroundColor: Colors.neutral.dark,\n borderLeftWidth: 1,\n borderRightWidth: 0,\n }),\n user: Styles.createViewStyle({\n flex: 0,\n flexDirection: 'row',\n marginTop: 16,\n marginBottom: 6,\n marginHorizontal: 16,\n }),\n userDetails: Styles.createViewStyle({\n flex: 1,\n marginLeft: 8,\n }),\n userDetailsTrial: Styles.createViewStyle({\n marginLeft: 0,\n }),\n header: Styles.createViewStyle({\n flex: 1,\n flexDirection: 'row',\n }),\n avatar: Styles.createImageStyle({\n borderRadius: 3,\n height: 36,\n width: 36,\n }),\n menu: Styles.createScrollViewStyle({\n flex: 1,\n }),\n mainMenu: Styles.createViewStyle({\n flex: 1,\n }),\n topMenu: Styles.createViewStyle({\n flex: 1,\n }),\n bottomMenu: Styles.createViewStyle({\n flex: 0,\n marginHorizontal: 16,\n }),\n bottomMenuWeb: Styles.createViewStyle({\n flex: 0,\n marginHorizontal: 16,\n }),\n item: Styles.createViewStyle({\n flex: 0,\n flexDirection: 'row',\n alignItems: 'center',\n marginLeft: 11,\n marginRight: 8,\n }),\n notification: Styles.createButtonStyle({\n position: 'absolute',\n cursor: 'pointer',\n right: -12,\n top: -6,\n padding: 6,\n }),\n notificationWeb: Styles.createButtonStyle({\n right: -8,\n top: -6,\n }),\n active: Styles.createTextStyle({\n color: Colors.neutral.white,\n }),\n name: Styles.createTextStyle({\n width: 100,\n fontSize: 13,\n color: Colors.neutral.white,\n }),\n nameTrial: Styles.createTextStyle({\n width: 100,\n }),\n email: Styles.createTextStyle({\n width: 128,\n fontSize: 11,\n marginBottom: 2,\n color: Colors.neutral.mid,\n }),\n trial: Styles.createTextStyle({\n fontSize: 11,\n color: Colors.secondary.yellow,\n marginVertical: 10,\n }),\n trialLink: Styles.createLinkStyle({\n fontSize: 12,\n marginLeft: 4,\n color: Colors.secondary.yellow,\n textDecorationColor: Colors.secondary.yellow,\n textDecorationLine: 'underline',\n }),\n button: Styles.createLinkStyle({\n flex: 1,\n flexDirection: 'row',\n justifyContent: 'flex-start',\n alignContent: 'flex-start',\n alignItems: 'center',\n paddingHorizontal: 10,\n lineHeight: 36,\n height: 36,\n width: 178,\n borderRadius: 0,\n color: Colors.neutral.mid,\n }),\n buttonHover: Styles.createButtonStyle({\n backgroundColor: Colors.neutral.darker,\n }),\n buttonTouch: Styles.createLinkStyle({\n lineHeight: 40,\n height: 40,\n }),\n text: Styles.createTextStyle({\n color: Colors.neutral.mid,\n fontSize: 12,\n }),\n textSmall: Styles.createTextStyle({\n color: Colors.neutral.mid,\n fontSize: 9,\n }),\n upsell: Styles.createTextStyle({\n color: Colors.secondary.green,\n fontSize: 12,\n }),\n orange: Styles.createTextStyle({\n color: Colors.secondary.orange,\n fontSize: 12,\n }),\n details: Styles.createTextStyle({\n fontSize: 10,\n flex: 1,\n color: Colors.neutral.light,\n }),\n upgrade: Styles.createTextStyle({\n fontSize: 10,\n color: Colors.secondary.green,\n }),\n storageBar: Styles.createViewStyle({\n flex: 0,\n marginTop: 16,\n flexDirection: 'column',\n }),\n promo: Styles.createViewStyle({\n width: 200,\n height: 306,\n marginTop: 14,\n }),\n storageFooter: Styles.createViewStyle({\n flex: 0,\n flexDirection: 'row',\n marginTop: 8,\n }),\n storageLink: Styles.createTextStyle({\n fontSize: 10,\n color: Colors.secondary.green,\n }),\n legal: Styles.createViewStyle({\n flex: 0,\n paddingVertical: 8,\n marginTop: 16,\n borderTopWidth: 1,\n borderColor: 'rgba(255,255,255,0.1)',\n }),\n version: Styles.createViewStyle({\n flex: 1,\n marginBottom: 2,\n flexDirection: 'row',\n }),\n copyright: Styles.createTextStyle({\n color: Colors.neutral.light,\n textAlign: 'left',\n fontSize: 10,\n flex: 1,\n }),\n build: Styles.createTextStyle({\n color: Colors.neutral.light,\n textAlign: 'right',\n fontSize: 10,\n }),\n ccp: Styles.createLinkStyle({\n color: Colors.neutral.mid,\n textAlign: 'left',\n fontSize: 9,\n marginBottom: 2,\n }),\n bar: Styles.createViewStyle({\n flex: 1,\n height: 6,\n borderRadius: 3,\n backgroundColor: Colors.neutral.darker,\n }),\n used: Styles.createViewStyle({\n flex: 0,\n position: 'absolute',\n top: 0,\n bottom: 0,\n left: 0,\n borderRadius: 3,\n backgroundColor: '#5D626F',\n }),\n icon: Styles.createViewStyle({\n flex: 0,\n width: 20,\n justifyContent: 'center',\n alignItems: 'center',\n marginRight: 10,\n }),\n iconMore: Styles.createViewStyle({\n marginTop: 16,\n }),\n divider: Styles.createViewStyle({\n height: 2,\n width: 168,\n marginVertical: 8,\n marginHorizontal: 16,\n backgroundColor: '#3d4350',\n overflow: 'visible',\n }),\n dividerWithTag: Styles.createViewStyle({\n marginVertical: 16,\n }),\n dividerTag: Styles.createTextStyle({\n fontSize: 12,\n fontWeight: '600',\n textAlign: 'center',\n color: '#b2b7c4',\n backgroundColor: '#282f3d',\n paddingVertical: 1,\n paddingHorizontal: 6,\n marginHorizontal: 40,\n position: 'absolute',\n top: -7,\n }),\n spacer: Styles.createViewStyle({\n flex: 1,\n }),\n};\n","import React, {useCallback} from 'react';\nimport {Styles, Animated, TextInput} from 'react-ult';\nimport {Light} from 'features/themes';\n\nexport interface Props {\n onChangeText: (value: string) => void,\n onSubmitEditing: () => void,\n placeholder?: string,\n placeholderTextColor?: string,\n defaultValue?: string,\n autoFocus?: boolean,\n secureTextEntry?: boolean,\n keyboardType?: 'default' | 'email-address' | 'numeric' | 'number-pad';\n selectMode?: 'none' | 'all' | 'filename',\n}\n\nexport function InputField(props: Props) {\n const onChange = useCallback((value: string) => {\n props.onChangeText(value);\n }, [props.onChangeText]);\n\n const onSubmit = useCallback(() => {\n props.onSubmitEditing();\n }, [props.onSubmitEditing]);\n\n const onMount = useCallback((e: TextInput) => {\n const mode = props?.selectMode;\n const value = props?.defaultValue;\n if (!value || !mode || mode === 'none') return;\n try {\n const last = mode === 'filename' && value.indexOf('.') !== -1\n ? value.split('.').slice(0, -1).join('.').length\n : value.length;\n e && e.selectRange(0, last);\n } catch (e) {}\n }, []);\n\n const interpolatedValue = Animated.interpolate(\n Animated.createValue(0.0),\n [0.0, 1.0],\n [Light.dialogBorder, Light.logoColor]\n );\n\n const animatedColorStyle = Styles.createAnimatedViewStyle({\n backgroundColor: interpolatedValue,\n });\n\n const onBlur = useCallback(() => {\n Animated.timing(interpolatedValue, {\n toValue: 0,\n duration: 200,\n easing: Animated.Easing.OutBack(),\n useNativeDriver: true,\n }).start();\n }, [interpolatedValue]);\n\n const onFocus = useCallback(() => {\n Animated.timing(interpolatedValue, {\n toValue: 1,\n duration: 200,\n easing: Animated.Easing.InOut(),\n useNativeDriver: true,\n }).start();\n }, [interpolatedValue]);\n\n return (\n \n \n \n );\n}\n\nexport const styles = {\n field: Styles.createViewStyle({\n paddingBottom: 2,\n }),\n input: Styles.createTextInputStyle({\n flex: 1,\n fontSize: 16,\n lineHeight: 24,\n paddingVertical: 8,\n paddingHorizontal: 10,\n color: Light.dialogInputText,\n backgroundColor: Light.dialogInputBackground,\n }),\n};\n","import React from 'react';\nimport {ComponentBase} from 'resub';\nimport {Styles, Animated, View, Input, Types, CommonProps, Modal} from 'react-ult';\nimport {Light} from 'features/themes';\nimport {Keys} from 'globals/keys';\n\ninterface DialogProps extends CommonProps {\n id: string;\n width?: number;\n height?: number;\n children?: Types.ReactNode;\n}\n\ninterface DialogState {\n widthStyle?: Types.ViewStyleRuleSet;\n heightStyle?: Types.ViewStyleRuleSet;\n}\n\nexport class Dialog extends ComponentBase {\n private static _visibleDialogs: {[id: string]: Dialog} = {};\n\n private _contentOpacity = new Animated.Value(1);\n private _contentScale = new Animated.Value(_initialScalingRatio);\n private _contentScaleStyle = Styles.createAnimatedViewStyle({\n opacity: this._contentOpacity,\n transform: [{\n scale: this._contentScale,\n }],\n });\n\n private _opacityAnimation = new Animated.Value(1);\n private _opacityAnimationStyle = Styles.createAnimatedViewStyle({\n opacity: this._opacityAnimation,\n });\n\n protected _buildState(props: DialogProps, _initialBuild: boolean): Partial {\n const newState: Partial = {};\n newState.widthStyle = props.width ? Styles.createViewStyle({width: props.width}, false) : undefined;\n newState.heightStyle = props.height ? Styles.createViewStyle({height: props.height}, false) : undefined;\n return newState;\n }\n\n componentDidMount() {\n super.componentDidMount();\n Input.keyUpEvent.subscribe(this._onKeyUp);\n Dialog._visibleDialogs[this.props.id] = this;\n Animated.timing(this._contentScale, {\n toValue: 1,\n duration: _scalingAnimationDuration,\n easing: Animated.Easing.OutBack(),\n useNativeDriver: true,\n }).start();\n }\n\n componentWillUnmount() {\n super.componentWillUnmount();\n delete Dialog._visibleDialogs[this.props.id];\n Input.keyUpEvent.unsubscribe(this._onKeyUp);\n }\n\n render() {\n const modalBoxStyles = [_styles.modalBox, this.state.widthStyle];\n const modalContentStyles = [_styles.modalContainer, this._contentScaleStyle, this.state.heightStyle];\n const modalContent = (\n \n \n {this.props.children}\n \n \n );\n\n return (\n \n {modalContent}\n \n );\n }\n\n private _onKeyUp = (e: Types.KeyboardEvent) => {\n if (e.keyCode === Keys.Escape) {\n this._clickOutside(e);\n return true;\n }\n return false;\n };\n\n // Do nothing, keeps click/press from propogating up to the dismissal action\n private _clickInside = (e: Types.SyntheticEvent) => {\n e.stopPropagation();\n };\n\n // Do nothing, required to keep onPress from firing on long press\n private _onLongPressOutside = (e: Types.SyntheticEvent) => {\n e.stopPropagation();\n };\n\n private _clickOutside = (e: Types.SyntheticEvent) => {\n e.stopPropagation();\n Dialog.dismissAnimated(this.props.id);\n };\n\n private _animateClose(onAnimationComplete: () => void) {\n Animated.parallel([\n Animated.timing(this._opacityAnimation, {\n toValue: 0,\n duration: _opacityAnimationDuration,\n easing: Animated.Easing.Out(),\n useNativeDriver: true,\n }),\n Animated.timing(this._contentOpacity, {\n toValue: 0,\n duration: _opacityAnimationDuration,\n easing: Animated.Easing.Out(),\n useNativeDriver: true,\n }),\n Animated.timing(this._contentScale, {\n toValue: _initialScalingRatio,\n duration: _scalingAnimationDuration,\n easing: Animated.Easing.Out(),\n useNativeDriver: true,\n }),\n ]).start(() => {\n onAnimationComplete();\n });\n }\n\n static dismissAnimated(id: string): Promise {\n const dialog = Dialog._visibleDialogs[id];\n if (!dialog) return Promise.reject('Dialog ID not found');\n return new Promise(resolve => {\n dialog._animateClose(() => {\n Modal.dismiss(id);\n resolve(void 0);\n });\n });\n }\n}\n\nconst _opacityAnimationDuration = 150;\nconst _scalingAnimationDuration = 250;\nconst _initialScalingRatio = 0.95;\nconst _styles = {\n modalBackground: Styles.createViewStyle({\n position: 'absolute',\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: Light.dialogBehind,\n }),\n modalContainer: Styles.createViewStyle({\n flex: -1,\n flexDirection: 'row',\n }),\n modalBox: Styles.createViewStyle({\n flex: -1,\n margin: 32,\n }),\n};\n","import React from 'react';\nimport {ComponentBase} from 'resub';\nimport {Fragment, Styles, View, Text, Button, Input, Types} from 'react-ult';\nimport {default as Svg, SvgPath} from 'react-ult-ext-imagesvg';\nimport {Light, Colors, Fonts, FontSizes, Vectors} from 'features/themes';\nimport {InputField} from 'controls/InputField';\nimport {IconButton} from 'controls/IconButton';\nimport {Dialog} from 'controls/Dialog';\nimport {Keys} from 'globals/keys';\n\nexport interface PromptButton {\n text?: string;\n mode?: 'primary' | 'cancel' | 'destructive',\n onPress?: (inputValue?: string) => void;\n disabled?: boolean;\n buttonStyle?: Types.ButtonStyleRuleSet;\n textStyle?: Types.TextStyleRuleSet;\n}\n\nexport interface PromptProps {\n id: string;\n maxWidth?: number;\n maxHeight?: number;\n title?: string;\n text?: string;\n containerStyle?: Types.ViewStyleRuleSet;\n children?: Types.ReactNode;\n buttons?: PromptButton[];\n options?: PromptOptions;\n}\n\ninterface PromptOptions {\n type?: 'default' | 'plain-text' | 'secure-text' | 'login-password',\n keyboardType?: 'default' | 'email-address' | 'numeric' | 'number-pad';\n selectInput?: 'none' | 'all' | 'filename',\n defaultValue?: string,\n placeholder?: string,\n nocancel?: boolean,\n primaryColor?: string;\n isMinimal?: boolean;\n}\n\ninterface PromptState {\n inputValue: string;\n}\n\nexport class Prompt extends ComponentBase {\n componentDidMount() {\n super.componentDidMount();\n Input.backButtonEvent.subscribe(this._onBack);\n Input.keyUpEvent.subscribe(this._onKeyUp);\n }\n\n componentWillUnmount() {\n super.componentWillUnmount();\n Input.backButtonEvent.unsubscribe(this._onBack);\n Input.keyUpEvent.unsubscribe(this._onKeyUp);\n }\n\n render() {\n // Title Text\n let optionalTitleText: JSX.Element | undefined;\n if (this.props.title) {\n optionalTitleText = (\n \n \n {this.props.title}\n \n \n );\n }\n\n // Content (children)\n let optionalContent: Types.ReactNode | undefined;\n if (this.props.children) {\n optionalContent = this.props.children;\n } else if (this.props.text) {\n optionalContent = (\n \n {this.props.text}\n \n );\n }\n\n // Buttons\n let optionalButtonsContainer: JSX.Element | undefined;\n if (this.props.buttons && this.props.buttons.length > 0) {\n const optionalButtons = this.props.buttons.map(this._renderButton);\n optionalButtonsContainer = (\n \n {optionalButtons}\n \n );\n }\n\n return (\n \n \n {optionalTitleText}\n {!this.props.options?.nocancel &&\n \n }\n \n {optionalContent}\n {this.props.options?.type\n && this.props.options?.type !== 'default' &&\n \n }\n \n {optionalButtonsContainer}\n \n \n );\n }\n\n protected _buildState(props: PromptProps, initialBuild: boolean): Partial {\n const newState: Partial = {};\n if (initialBuild) {\n newState.inputValue = props.options?.defaultValue ?? undefined;\n return newState;\n }\n return newState;\n }\n\n private _renderButton = (buttonDef: PromptButton, index: number): JSX.Element => (\n \n {index > 0 && }\n this._onButtonPress(e, buttonDef)}\n />\n \n );\n\n private _onButtonPress(e: Types.SyntheticEvent, buttonDef: PromptButton) {\n e.stopPropagation();\n this._completeButtonPress(buttonDef);\n }\n\n private _completeButtonPress(buttonDef: PromptButton) {\n if (buttonDef.onPress) {\n buttonDef.onPress(this.state.inputValue);\n }\n }\n\n private _onKeyUp = (event: Types.KeyboardEvent) => {\n if (event.keyCode === Keys.Escape)\n return this._onCancel();\n return false;\n };\n\n private _setValue = (value: string) => {\n this.setState({inputValue: value});\n };\n\n private _onSubmit = () => {\n let buttonToCall: PromptButton | undefined;\n this.props.buttons.forEach(button => {\n if (button.mode === 'primary' || button.mode === 'destructive')\n buttonToCall = button;\n });\n if (buttonToCall) {\n this._completeButtonPress(buttonToCall);\n return true;\n }\n return false;\n };\n\n private _onCancel = () => {\n let buttonToCall: PromptButton | undefined;\n this.props.buttons.forEach(button => {\n if (button.mode === 'cancel')\n buttonToCall = button;\n });\n if (buttonToCall) {\n this._completeButtonPress(buttonToCall);\n return true;\n }\n return false;\n };\n\n private _onBack = () => {\n return this._onCancel();\n };\n\n static dismissAnimated(id: string): Promise {\n return Dialog.dismissAnimated(id);\n }\n}\n\nconst _modalPadding = 20;\nconst _styles = {\n container: Styles.createViewStyle({\n flex: 1,\n borderWidth: 1,\n borderColor: Light.dialogBorder,\n backgroundColor: Light.dialogBackground,\n shadowOffset: {width: 0, height: 3},\n shadowColor: 'rgba(0,0,0,0.3)',\n shadowRadius: 3,\n elevation: 1,\n }),\n title: Styles.createTextStyle({\n font: Fonts.displayLight,\n fontSize: FontSizes.size20,\n color: Light.dialogTitle,\n padding: _modalPadding,\n }),\n message: Styles.createTextStyle({\n textAlign: 'left',\n font: Fonts.displayRegular,\n fontSize: FontSizes.size14,\n color: Light.dialogText,\n marginBottom: 10,\n }),\n content: Styles.createViewStyle({\n flex: 1,\n paddingHorizontal: _modalPadding,\n }),\n buttons: Styles.createViewStyle({\n alignItems: 'stretch',\n flexDirection: 'row-reverse',\n justifyContent: 'flex-start',\n padding: _modalPadding,\n }),\n close: Styles.createButtonStyle({\n position: 'absolute',\n alignItems: 'center',\n margin: 10,\n marginRight: 4,\n height: 46,\n width: 46,\n right: 0,\n }),\n spacer: Styles.createViewStyle({\n width: 6,\n }),\n};\n","import {t} from '@lingui/macro';\nimport React, {useCallback} from 'react';\nimport {useSelector, useDispatch} from 'react-redux';\nimport {Modal} from 'react-ult';\nimport {Prompt} from 'controls/Prompt';\nimport {alert, createFolder, loadFolder} from 'features/mediafire';\nimport {selectors} from 'store/files';\n\nconst _modalCreateFolder = 'create-folder';\n\nexport function useModalCreateFolder(id: string) {\n const dispatch = useDispatch();\n\n const sort = useSelector(selectors.getSort);\n const filter = useSelector(selectors.getFilter);\n\n const submit = useCallback(async (name: string) => {\n const response = await createFolder(id, name);\n if (response && response['name']) {\n loadFolder(dispatch, id, false, true, undefined, sort, filter);\n alert(dispatch, t`Created the folder “${response['name']}”`, 'info');\n } else {\n const message = response && response['error']\n ? response['message']\n : t`Failed to create folder`;\n alert(dispatch, message, 'fail');\n }\n Modal.dismiss(_modalCreateFolder);\n }, [id, sort, filter]);\n\n const show = useCallback(() => {\n Modal.show(\n {\n Prompt.dismissAnimated(_modalCreateFolder);\n if (value) submit(value);\n },\n }, {\n text: t`CANCEL`,\n mode: 'cancel',\n onPress: () => {\n Prompt.dismissAnimated(_modalCreateFolder);\n },\n }]}\n />\n , _modalCreateFolder);\n }, [id]);\n\n const close = useCallback(() => {\n Prompt.dismissAnimated(_modalCreateFolder);\n }, [id]);\n\n return [show, close];\n}\n","import {t} from '@lingui/macro';\nimport React, {useCallback} from 'react';\nimport {Modal, Storage} from 'react-ult';\nimport {Types} from 'react-ult-ext-webview';\nimport {Dispatch} from '@reduxjs/toolkit';\nimport {WebFrame} from 'controls/WebFrame';\nimport {alert} from 'features/mediafire';\nimport {getHost} from 'features/platform';\n\nconst _modalId = 'upsell-pro-trial';\n\nexport function useModalUpsellProTrial(dispatch: Dispatch) {\n const close = useCallback(() => Modal.dismiss(_modalId), []);\n const message = useCallback((e: Types.WebViewMessageEvent) => {\n if (e && e.data === 'mf-close-dialogs')\n close();\n if (e.origin !== 'https://checkout.mediafire.com'\n && e.origin !== 'https://www.mediafire.com')\n return;\n switch (e.data) {\n case 'mf-trial-close':\n close();\n break;\n case 'mf-trial-denied':\n alert(dispatch, t`Credit card declined. Please verify details are correct.`, 'fail');\n break;\n }\n }, []);\n\n const show = useCallback(() => {\n Storage.setItem('upsell:trial', '1');\n Modal.show(\n \n , _modalId)\n }, []);\n\n return [show, close];\n}\n","import React, {useCallback} from 'react';\nimport {Modal} from 'react-ult';\nimport {Types} from 'react-ult-ext-webview';\nimport {WebFrame} from 'controls/WebFrame';\nimport {getHost} from 'features/platform';\n\nconst _modalId = 'update-payment';\n\nexport function useModalUpdatePayment() {\n const close = useCallback(() => Modal.dismiss(_modalId), []);\n const message = useCallback((e: Types.WebViewMessageEvent) => {\n if (e && e.data === 'mf-close-dialogs') {\n close();\n }\n }, []);\n\n const show = useCallback(() => {\n Modal.show(\n \n , _modalId)\n }, []);\n\n return [show, close];\n}\n","import React, {useCallback} from 'react';\nimport {Modal} from 'react-ult';\nimport {Types} from 'react-ult-ext-webview';\nimport {WebFrame} from 'controls/WebFrame';\nimport {getHost} from 'features/platform';\n\nconst _modalId = 'custom-alert';\n\nexport function useModalCustomAlert() {\n const close = useCallback(() => Modal.dismiss(_modalId), []);\n const message = useCallback((e: Types.WebViewMessageEvent) => {\n if (e && e.data === 'mf-close-dialogs') {\n close();\n }\n }, []);\n\n const show = useCallback((alertId: number) => {\n Modal.show(\n \n , _modalId)\n }, []);\n\n return [show, close];\n}\n","import {t} from '@lingui/macro';\nimport React, {useCallback, useEffect, useState} from 'react';\nimport {Styles, View, Text, Image, Storage} from 'react-ult';\nimport {Dispatch} from '@reduxjs/toolkit';\nimport {Dialog} from 'controls/Dialog';\nimport {IconButton} from 'controls/IconButton';\nimport {Light, Colors} from 'features/themes';\nimport images from 'features/images';\nimport * as effects from 'store/files/effects';\n\nexport const modalFilesWelcome = 'welcome';\n\nexport interface Props {\n dispatch: Dispatch;\n isBusiness?: boolean;\n isMinimal?: boolean;\n}\n\nexport function FilesModalWelcome(props: Props) {\n const [statePage, setPage] = useState('welcome');\n const isPageWelcome = statePage === 'welcome';\n const isPageBusiness = statePage === 'business';\n const title = isPageWelcome\n ? t`Welcome to your new My Files!`\n : t`Explore your Business Account`;\n\n const next = useCallback(() => setPage('business'), []);\n const close = useCallback(() => Dialog.dismissAnimated(modalFilesWelcome), []);\n const upload = useCallback(effects.uploadStart(props.dispatch, 'myfiles'), [props.dispatch]);\n\n // Save that we displayed the welcome dialog\n useEffect(() => {\n try {\n Storage.setItem('welcome:shown', '1');\n } catch (e) {}\n }, []);\n\n return (\n \n \n {title}\n {isPageWelcome &&\n \n \n \n {t`Upload Files`}\n \n \n \n {t`Click the upload button at the top or drag & drop files anywhere.`}\n \n \n \n \n {t`Browse Folders`}\n \n \n \n {t`Quickly browse and organize your files by using the folder browser.`}\n \n \n \n \n {t`View Options`}\n \n \n \n {t`Toggle between the list view and the gallery view at any time.`}\n \n \n \n }\n {isPageBusiness &&\n \n \n \n {t`Advanced Sharing`}\n \n \n \n {t`Select files & folders to share a link with your custom subdomain.`}\n \n \n \n \n {t`Customize Your Branding`}\n \n \n \n {t`Customize your colors, logo, and more in your account settings.`}\n \n \n \n \n {t`Detailed Security Log`}\n \n \n \n {t`Know who made what changes to your account and when.`}\n \n \n \n }\n \n {(props.isBusiness && isPageWelcome) &&\n \n \n \n \n }\n {(!props.isBusiness || isPageBusiness) &&\n \n \n \n \n \n }\n \n \n \n );\n}\n\nexport const styles = {\n root: Styles.createViewStyle({\n flex: 1,\n borderWidth: 1,\n borderColor: Light.dialogBorder,\n backgroundColor: Light.dialogBackground,\n }),\n columns: Styles.createViewStyle({\n flex: 1,\n flexDirection: 'row',\n }),\n column: Styles.createViewStyle({\n flex: 1,\n width: 200,\n margin: 20,\n }),\n buttons: Styles.createViewStyle({\n flex: 1,\n padding: 20,\n flexDirection: 'row-reverse',\n }),\n spacer: Styles.createViewStyle({\n width: 6,\n }),\n image: Styles.createImageStyle({\n width: 200,\n height: 120,\n marginTop: 12,\n marginBottom: 24,\n borderWidth: 1,\n borderColor: Light.dialogBorder,\n }),\n header: Styles.createTextStyle({\n marginBottom: 16,\n marginTop: 32,\n fontSize: 24,\n fontWeight: '600',\n textAlign: 'center',\n color: Colors.primary.brand,\n }),\n subheader: Styles.createTextStyle({\n fontSize: 16,\n fontWeight: '600',\n color: Light.dialogTitle,\n }),\n text: Styles.createTextStyle({\n fontSize: 13,\n color: Light.dialogText,\n }),\n};\n","import {t} from '@lingui/macro';\nimport React, {useCallback} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {Styles, View, Button, Text} from 'react-ult';\nimport {default as Svg, SvgPath} from 'react-ult-ext-imagesvg';\nimport {Light, Vectors, Colors} from 'features/themes';\nimport {selectors} from 'store/files';\n\nimport * as filesEffects from 'store/files/effects';\n\nexport const filesPeekHeaderHeight = 42;\nexport const filesPeekHeaderHeightPicker = 52;\n\nexport interface Props {\n id: string;\n picker?: boolean;\n}\n\nexport function FilesNavigator(props: Props) {\n const folder = useSelector(selectors.getItem(props.id));\n const filter = useSelector(selectors.getFilter);\n const sort = useSelector(selectors.getSort);\n const pick = useSelector(selectors.getPick);\n const hierarchy = folder && folder.hierarchy.length > 0 && folder.hierarchy[folder.hierarchy.length - 2];\n const parent = hierarchy && hierarchy[0] !== props.id ? hierarchy[0] : 'myfiles';\n const depth = folder ? folder.hierarchy && folder.hierarchy.length : 0;\n const isRoot = !folder || folder.name === 'myfiles';\n const title = folder && !isRoot ? folder.name : props.picker ? t`My Files` : t`My Folders`;\n const classes = {\n root: [\n styles.root,\n props.picker && styles.picker,\n ],\n title: [\n styles.title,\n props.picker && styles.titlePicker,\n isRoot && styles.titleRoot,\n isRoot && props.picker && styles.titleRootPicker,\n ],\n };\n\n const dispatch = useDispatch();\n const self = useCallback(filesEffects.navigate(dispatch, props.id), [props.id]);\n const close = useCallback(filesEffects.pick(dispatch, null), []);\n const goBack = useCallback(filesEffects.browse(dispatch, parent, sort, filter), [parent, sort, filter]);\n const goBackPick = useCallback(filesEffects.pick(dispatch, {...pick, destination: parent}), [pick]);\n\n return (\n \n {depth > 0 &&\n \n \n \n \n \n }\n {!props.picker &&\n \n {depth === 0 &&\n \n \n \n }\n \n {title}\n \n \n }\n {props.picker &&\n \n \n {title}\n \n \n \n }\n \n );\n}\n\nexport const styles = {\n root: Styles.createViewStyle({\n flex: 0,\n flexDirection: 'row',\n borderTopWidth: 1,\n borderBottomWidth: 1,\n borderColor: Light.navigatorBorder,\n backgroundColor: Light.navigatorBackground,\n height: filesPeekHeaderHeight,\n }),\n picker: Styles.createViewStyle({\n height: filesPeekHeaderHeightPicker,\n }),\n back: Styles.createButtonStyle({\n flexDirection: 'row',\n alignItems: 'center',\n padding: 8,\n margin: 2,\n }),\n button: Styles.createButtonStyle({\n flex: 1,\n flexDirection: 'row',\n alignItems: 'center',\n padding: 0,\n margin: 0,\n }),\n folderIcon: Styles.createViewStyle({\n marginTop: 6,\n marginLeft: 10,\n }),\n title: Styles.createTextStyle({\n flex: 1,\n fontSize: 12,\n color: Light.navigatorText,\n }),\n titlePicker: Styles.createTextStyle({\n fontSize: 14,\n }),\n titleRoot: Styles.createTextStyle({\n marginLeft: 6,\n }),\n titleRootPicker: Styles.createTextStyle({\n marginLeft: 16,\n }),\n close: Styles.createButtonStyle({\n position: 'absolute',\n alignItems: 'center',\n margin: 10,\n marginRight: 4,\n height: 46,\n width: 46,\n right: 0,\n }),\n};\n","import {t} from '@lingui/macro';\nimport React, {useCallback} from 'react';\nimport {Modal} from 'react-ult';\nimport {Types} from 'react-ult-ext-webview';\nimport {Dispatch} from '@reduxjs/toolkit';\nimport {WebFrame} from 'controls/WebFrame';\nimport {isNative, getHost} from 'features/platform';\nimport {alert, copyLink, trackShare, isFolderkey, isQuickkey, getKeysFromUrl} from 'features/mediafire';\nimport device from 'features/device';\n\nconst _modalShare = 'share';\n\nexport function useModalShare(\n dispatch: Dispatch,\n ids: string[],\n name?: string,\n url?: string,\n oneTimeLink?: boolean,\n) {\n let folders = ids.filter(id => isFolderkey(id));\n let files = ids.filter(id => isQuickkey(id));\n\n // No valid ids found, use key from url (file upload)\n if (url && folders.length === 0 && files.length === 0) {\n const keys = getKeysFromUrl(url);\n folders = keys.filter(id => isFolderkey(id));\n files = keys.filter(id => isQuickkey(id));\n }\n\n const close = useCallback(() => Modal.dismiss(_modalShare), []);\n\n const message = useCallback((e: Types.WebViewMessageEvent) => {\n if (e && e.data === 'mf-close-dialogs') {\n close();\n } else if(e && typeof e.data === 'string' && e.data.indexOf('mf-share-') !== -1) {\n copyLink(e.data.slice(9));\n alert(dispatch, t`Copied share link to clipboard`, 'info');\n } else if(e && typeof e.data === 'string' && e.data.indexOf('mf-open-') !== -1) {\n window.open(e.data.slice(8), '_blank');\n }\n }, [ids]);\n\n const show = useCallback(() => {\n if (isNative()) {\n device.share(url, name);\n } else {\n const base = `${getHost()}/widgets/share.php?web=1&dlr=1${oneTimeLink ? '&1tdl=1' : ''}`;\n const path = `${base}&folders=${folders.join(',')}&files=${files.join(',')}`;\n Modal.show(\n \n , _modalShare);\n }\n trackShare();\n }, [ids]);\n\n return [show, close];\n}\n","import React, {useCallback} from 'react';\nimport {Modal} from 'react-ult';\nimport {Types} from 'react-ult-ext-webview';\nimport {WebFrame} from 'controls/WebFrame';\nimport {getHost, isIOS} from 'features/platform';\n\nconst _modalId = 'upsell-feature';\n\ntype Plans = 'pro' | 'biz';\ntype Features = 'filedrop' | 'password' | 'bulkdownload' | 'webupload' | 'one_time_link';\n\nexport function useModalUpsellFeature(plan: Plans, feature: Features) {\n const close = useCallback(() => Modal.dismiss(_modalId), []);\n const message = useCallback((e: Types.WebViewMessageEvent) => {\n if (e && e.data === 'mf-close-dialogs') {\n close();\n }\n }, []);\n\n const show = useCallback(() => {\n if (isIOS()) return;\n const path = `${getHost()}/widgets/premium_upsell.php`;\n const query = `plan=${plan}&event=${feature}`;\n Modal.show(\n \n , _modalId);\n }, [plan, feature]);\n\n return [show, close];\n}\n","import {t} from '@lingui/macro';\nimport React, {Fragment, useState, useCallback, useEffect} from 'react';\nimport {Dispatch} from '@reduxjs/toolkit';\nimport {Styles, View, Text, Button, Modal} from 'react-ult';\nimport {default as Svg, SvgPath} from 'react-ult-ext-imagesvg';\nimport {Dialog} from 'controls/Dialog';\nimport {IconButton} from 'controls/IconButton';\nimport {useModalUpsellFeature} from 'hooks/useModalUpsellFeature';\nimport {alert, bulkDownload, bulkDownloadPreview, bulkDownloadAdd} from 'features/mediafire';\nimport {Light, Colors, Vectors} from 'features/themes';\nimport {bytesize} from 'features/common';\nimport {FilesErrors} from 'globals/types';\n\nexport const modalFilesBulkDownload = 'bulk-download';\n\nexport interface Props {\n dispatch: Dispatch;\n ids: string[];\n primaryColor: string;\n}\n\nexport function FilesModalBulkDownload(props: Props) {\n const [isUserCharged, promptUseBandwidth] = useState(false);\n const [isLargeDownload, promptLargeDownload] = useState(false);\n const [isDownloadReady, setDownloadReady] = useState(false);\n const [totalItems, setTotalItems] = useState(0);\n const [totalSize, setTotalSize] = useState(0);\n const [fileName, setFileName] = useState('');\n const [statusKey, setStatusKey] = useState('');\n const {ids} = props;\n\n const dispatch = props.dispatch;\n const close = useCallback(() => Dialog.dismissAnimated(modalFilesBulkDownload), []);\n\n const [showUpsell] = useModalUpsellFeature('pro', 'bulkdownload');\n\n const submit = useCallback(async () => {\n const response = await bulkDownload(ids, statusKey, isUserCharged, isLargeDownload);\n if (response && response['result'] === 'Success') {\n bulkDownloadAdd(dispatch, {statusKey, fileName, totalSize});\n Modal.dismiss(modalFilesBulkDownload);\n } else {\n if (response && response.error === FilesErrors.ZipTotalSizeTooBig) {\n promptLargeDownload(true);\n } else if (response && (response.error === FilesErrors.ZipOwnerInsufficientBandwidth\n || response.error === FilesErrors.ZipOwnerNotPro)) {\n promptUseBandwidth(true);\n } else {\n const message = response && response['error']\n ? response['message']\n : 'Failed to start bulk download';\n alert(dispatch, message, 'fail');\n Modal.dismiss(modalFilesBulkDownload);\n }\n }\n }, [ids, statusKey, isLargeDownload, isUserCharged]);\n\n useEffect(() => {\n bulkDownloadPreview(ids).then((res) => {\n if (res && res.result === 'Success') {\n setTotalSize(res.totalSizeEstimate);\n setTotalItems(res.fileCount);\n setFileName(res.fileName);\n setStatusKey(res.statusKey);\n setDownloadReady(true);\n } else {\n if (res.error && res.message) {\n Modal.dismiss(modalFilesBulkDownload);\n if (res.error === 148) {\n showUpsell();\n } else {\n alert(dispatch, res?.message ?? 'Failed to start bulk download', 'fail');\n }\n }\n }\n });\n }, []);\n\n return (\n \n \n \n \n {t`Bulk Download`}\n \n \n \n \n {!isLargeDownload && !isUserCharged &&\n \n {!isDownloadReady &&\n \n Calculating total size…\n \n }\n {isDownloadReady && \n \n {`Are you sure you want to zip `}\n \n {`${totalItems} ${totalItems === 1 ? 'item' : 'items'}`}\n \n ?\n \n \n {'Total size: '}\n {totalSize > 0 &&\n \n {bytesize(totalSize)}\n \n }\n \n }\n \n {t`Depending on the size of the folder it may take several minutes to prepare the bulk download.`}\n \n \n }\n {isLargeDownload && !isUserCharged &&\n \n \n {t`The total size of these files exceeds 2GB. Would you like to continue with the bulk download?`}\n \n \n }\n {isUserCharged && !isLargeDownload &&\n \n \n {t`The owner does not have sufficient bandwidth, would you like to use your own bandwidth to continue with the bulk download?`}\n \n \n }\n \n \n {!isLargeDownload && !isUserCharged &&\n \n }\n {(isLargeDownload || isUserCharged) &&\n \n }\n \n \n \n \n \n );\n}\n\nexport const styles = {\n root: Styles.createViewStyle({\n flex: 1,\n borderWidth: 1,\n borderColor: Light.dialogBorder,\n backgroundColor: Light.dialogBackground,\n }),\n content: Styles.createViewStyle({\n flex: 0,\n padding: 20,\n paddingTop: 8,\n }),\n message: Styles.createTextStyle({\n flex: 1,\n fontSize: 14,\n lineHeight: 24,\n color: Light.dialogText,\n }),\n messageBold: Styles.createTextStyle({\n fontWeight: '600',\n }),\n marginTop: Styles.createTextStyle({\n marginTop: 16,\n }),\n messageWrapper: Styles.createViewStyle({\n flex: 1,\n }),\n buttons: Styles.createViewStyle({\n flex: 1,\n flexDirection: 'row-reverse',\n padding: 20,\n }),\n spacer: Styles.createViewStyle({\n width: 6,\n }),\n bar: Styles.createViewStyle({\n flex: 0,\n }),\n title: Styles.createTextStyle({\n marginLeft: 24,\n lineHeight: 65,\n fontSize: 20,\n fontWeight: '300',\n color: Light.dialogTitle,\n }),\n close: Styles.createButtonStyle({\n position: 'absolute',\n alignItems: 'center',\n height: 65,\n width: 58,\n right: 1,\n top: -2,\n }),\n};\n","import {t} from '@lingui/macro';\nimport React, {useCallback} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {Styles, View, Text, Button, Modal} from 'react-ult';\nimport {default as Svg, SvgPath} from 'react-ult-ext-imagesvg';\nimport {useModalShare} from 'hooks/useModalShare';\nimport {FilesModalBulkDownload, modalFilesBulkDownload} from 'view/modals/FilesModalBulkDownload';\nimport {Vectors, Colors} from 'features/themes';\nimport {selectors} from 'store/files';\nimport * as app from 'store/app';\n\nimport * as appEffects from 'store/app/effects';\nimport * as filesEffects from 'store/files/effects';\n\nexport interface Props {\n id: string;\n}\n\nexport function FilesHeader(props: Props) {\n const {id} = props;\n const isLoggedIn = useSelector(app.selectors.isLoggedIn);\n const viewport = useSelector(app.selectors.getViewport);\n const header = useSelector(app.selectors.getHeader);\n const parent = useSelector(selectors.getParent('current'));\n const folder = useSelector(selectors.getItem(id));\n const color = header ? header.colors.primary : Colors.primary.brand;\n const depth = folder ? folder.hierarchy && folder.hierarchy.length : 0;\n const name = folder ? folder.name : '';\n const owner = folder ? folder.owner : '';\n const url = folder ? folder.url : undefined;\n const isLarge = viewport.width > 800;\n\n const dispatch = useDispatch();\n const save = useCallback(filesEffects.pick(dispatch, {action: 'save', destination: 'myfiles', ids: [id]}), [id, dispatch]);\n const back = useCallback(filesEffects.navigate(dispatch), []);\n const login = useCallback(appEffects.gotoLogin(), []);\n\n const [showShare] = useModalShare(dispatch, [id], name, url);\n\n const bulkDownload = useCallback(() => Modal.show(\n \n , modalFilesBulkDownload), [id]);\n\n return (\n \n {depth > 0 &&\n \n \n \n \n \n }\n \n {name}\n \n {owner && owner !== ' ' && isLarge &&\n \n {t`shared by ${owner || '...'}`}\n \n }\n \n \n \n \n \n \n {isLarge &&\n \n {t`DOWNLOAD`}\n \n }\n \n \n \n \n \n {isLarge &&\n \n {t`SHARE`}\n \n }\n \n \n \n \n \n {isLarge &&\n \n {t`SAVE TO MY FILES`}\n \n }\n \n \n \n );\n}\n\nexport const styles = {\n root: Styles.createViewStyle({\n flexDirection: 'row',\n flex: 0,\n height: 46,\n margin: 14,\n }),\n large: Styles.createViewStyle({\n height: 72,\n marginHorizontal: 0,\n }),\n title: Styles.createTextStyle({\n lineHeight: 46,\n fontSize: 24,\n color: Colors.neutral.dark,\n paddingHorizontal: 8,\n flexShrink: 1,\n flexGrow: 0,\n }),\n titleLarge: Styles.createTextStyle({\n lineHeight: 72,\n }),\n icon: Styles.createViewStyle({\n marginLeft: 8,\n }),\n back: Styles.createButtonStyle({\n flexDirection: 'row',\n alignItems: 'center',\n marginRight: 8,\n }),\n actions: Styles.createViewStyle({\n flexDirection: 'row',\n marginTop: 2,\n marginLeft: 12,\n }),\n spacer: Styles.createViewStyle({\n flex: 1,\n }),\n button: Styles.createButtonStyle({\n flexDirection: 'row',\n alignItems: 'center',\n marginLeft: 12,\n paddingHorizontal: 8,\n }),\n dlfix: Styles.createViewStyle({\n marginTop: 4,\n }),\n action: Styles.createTextStyle({\n color: Colors.neutral.light,\n fontSize: 11,\n lineHeight: 46,\n marginLeft: 8,\n }),\n actionLarge: Styles.createTextStyle({\n lineHeight: 72,\n }),\n owner: Styles.createTextStyle({\n flexGrow: 1,\n flexShrink: 1,\n marginTop: 8,\n fontSize: 12,\n color: Colors.neutral.mid,\n alignSelf: 'center',\n }),\n};\n","import {t} from '@lingui/macro';\nimport React, {useCallback} from 'react';\nimport {Dispatch} from '@reduxjs/toolkit';\nimport {Modal} from 'react-ult';\nimport {Prompt} from 'controls/Prompt';\nimport {alert, rename, isFolderkey} from 'features/mediafire';\n\nconst _modalRename = 'rename';\n\nexport function useModalRename(id: string, name: string, dispatch: Dispatch) {\n const isFolder = isFolderkey(id);\n const group = isFolder ? 'folder' : 'file';\n\n const submit = useCallback(async (newName: string) => {\n const response = await rename(id, newName);\n if (response && response['result'] === 'Success') {\n alert(dispatch, t`Renamed “${name}” to “${newName}”`, 'info');\n } else {\n const message = response && response['error']\n ? response['message']\n : t`Failed to rename ${name}`;\n alert(dispatch, message, 'fail');\n }\n Modal.dismiss(_modalRename);\n }, [id, name]);\n\n const show = useCallback(() => {\n Modal.show(\n {\n Prompt.dismissAnimated(_modalRename);\n if (value) submit(value);\n },\n }, {\n text: t`CANCEL`,\n mode: 'cancel',\n onPress: () => {\n Prompt.dismissAnimated(_modalRename);\n },\n }]}\n />\n , _modalRename);\n }, [id, name]);\n\n const close = useCallback(() => {\n Prompt.dismissAnimated(_modalRename);\n }, [id, name]);\n\n return [show, close];\n}\n","import {t} from '@lingui/macro';\nimport React, {useCallback} from 'react';\nimport {Dispatch} from '@reduxjs/toolkit';\nimport {Modal} from 'react-ult';\nimport {Prompt} from 'controls/Prompt';\nimport {alert, archive} from 'features/mediafire';\n\nconst _modalTrash = 'trash';\n\nexport function useModalTrash(ids: string[], dispatch: Dispatch) {\n const submit = useCallback(async () => {\n const response = await archive(dispatch, ids);\n if (response[0] || response[1]) {\n alert(dispatch, `Successfully moved items to trash`, 'info');\n } else {\n const message = response && response['error']\n ? response['message']\n : 'Failed to move items to trash';\n alert(dispatch, message, 'fail');\n }\n Modal.dismiss(_modalTrash);\n }, [ids]);\n\n const show = useCallback(() => {\n Modal.show(\n {\n Prompt.dismissAnimated(_modalTrash);\n submit();\n },\n }, {\n text: t`CANCEL`,\n mode: 'cancel',\n onPress: () => {\n Prompt.dismissAnimated(_modalTrash);\n },\n }]}\n />\n , _modalTrash);\n }, [ids]);\n\n const close = useCallback(() => {\n Prompt.dismissAnimated(_modalTrash);\n }, [ids]);\n\n return [show, close];\n}\n","import {t} from '@lingui/macro';\nimport React, {useCallback} from 'react';\nimport {Dispatch} from '@reduxjs/toolkit';\nimport {Modal} from 'react-ult';\nimport {Prompt} from 'controls/Prompt';\nimport {alert, purge} from 'features/mediafire';\n\nconst _modalPurge = 'purge';\n\nexport function useModalPurge(ids: string[], dispatch: Dispatch) {\n const submit = useCallback(async () => {\n const response = await purge(dispatch, ids);\n if (response[0] || response[1]) {\n alert(dispatch, t`Successfully deleted items from trash`, 'info');\n } else {\n const message = response && response['error']\n ? response['message']\n : t`Failed to purge items`;\n alert(dispatch, message, 'fail');\n }\n Modal.dismiss(_modalPurge);\n }, [ids]);\n\n const show = useCallback(() => {\n Modal.show(\n {\n Prompt.dismissAnimated(_modalPurge);\n submit();\n },\n }, {\n text: t`CANCEL`,\n mode: 'cancel',\n onPress: () => {\n Prompt.dismissAnimated(_modalPurge);\n },\n }]}\n />\n , _modalPurge);\n }, [ids]);\n\n const close = useCallback(() => {\n Prompt.dismissAnimated(_modalPurge);\n }, [ids]);\n\n return [show, close];\n}\n","import {useState, useEffect} from 'react';\nimport {Dispatch} from '@reduxjs/toolkit';\nimport {Input, Popup, Modal, Types} from 'react-ult';\nimport {useModalCreateFolder} from 'hooks/useModalCreateFolder';\nimport {useModalRename} from 'hooks/useModalRename';\nimport {useModalTrash} from 'hooks/useModalTrash';\nimport {useModalPurge} from 'hooks/useModalPurge';\nimport {Keys} from 'globals/keys';\nimport * as effects from 'store/files/effects';\n\nexport function useHotkeys(\n folderId: string,\n view: {files: string[], folders: string[]},\n selection: string[],\n focusId: string,\n isSearch: boolean,\n dispatch: Dispatch,\n) {\n const [isRangeSelect, setRangeSelect] = useState(false);\n const [showCreateFolder] = useModalCreateFolder(folderId);\n const [_showRename] = useModalRename(focusId, '', dispatch);\n const [showTrash] = useModalTrash(selection, dispatch);\n const [showPurge] = useModalPurge(selection, dispatch);\n\n useEffect(() => {\n const keydown = (e: Types.KeyboardEvent) => {\n if (Popup.isDisplayed() || Modal.isDisplayed())\n return false;\n\n // Shift select\n if (e.keyCode === Keys.Shift)\n setRangeSelect(true);\n\n switch (e.keyCode) {\n // Select all files in folder\n case Keys.A:\n if (isSearch) break;\n if (e.ctrlKey || e.metaKey) {\n if (view) {\n effects.selectMulti(dispatch, [\n ...view.folders,\n ...view.files,\n ].filter(id => !selection.includes(id)))();\n }\n }\n break;\n\n // Clear selection or exit search\n case Keys.Escape:\n if (isSearch)\n effects.search(dispatch, null)();\n else\n effects.selectClear(dispatch, null)(e);\n break;\n\n // Open uploader\n case Keys.U:\n if (isSearch) break;\n effects.uploadStart(dispatch, folderId)();\n break;\n\n // TODO: copy link for selected items\n case Keys.C:\n break;\n\n // TODO: paste link for selected items (move)\n case Keys.V:\n break;\n\n // TODO: rename prompt\n case Keys.F12:\n //showRename();\n break;\n\n // Create folder\n case Keys.N:\n if (isSearch) break;\n showCreateFolder();\n break;\n\n // Open delete prompt\n case Keys.Delete:\n case Keys.Backspace:\n if (selection.length > 0\n && (e.keyCode !== Keys.Backspace || e.shiftKey)) {\n if (folderId === 'trash') {\n showPurge();\n } else {\n showTrash();\n }\n }\n break;\n\n }\n\n return true;\n };\n \n const keyup = (e: Types.KeyboardEvent) => {\n if (Popup.isDisplayed() || Modal.isDisplayed())\n return false;\n // Shift select\n if (e.keyCode === Keys.Shift)\n setRangeSelect(false);\n return true;\n };\n\n Input.keyDownEvent.subscribe(keydown);\n Input.keyUpEvent.subscribe(keyup);\n return () => {\n Input.keyDownEvent.unsubscribe(keydown);\n Input.keyUpEvent.unsubscribe(keyup);\n };\n\n }, [view, selection]);\n\n return {isRangeSelect}\n}\n","import {t} from '@lingui/macro';\nimport React, {useCallback} from 'react';\nimport {Dispatch} from '@reduxjs/toolkit';\nimport {Modal} from 'react-ult';\nimport {Prompt} from 'controls/Prompt';\nimport {alert, describe} from 'features/mediafire';\n\nconst _modalDescribe = 'describe';\n\nexport function useModalDescribe(id: string, name: string, description: string, isFolder: boolean, dispatch: Dispatch) {\n const group = isFolder ? 'folder' : 'file';\n\n const submit = useCallback(async (newDescription: string) => {\n const response = await describe(id, newDescription);\n if (response && response['result'] === 'Success') {\n alert(dispatch, t`Updated the description for “${name}”`, 'info');\n } else {\n const message = response && response['error']\n ? response['message']\n : t`Failed to update description`;\n alert(dispatch, message, 'fail');\n }\n Modal.dismiss(_modalDescribe);\n }, [id, name, description]);\n\n const show = useCallback(() => {\n Modal.show(\n {\n Prompt.dismissAnimated(_modalDescribe);\n if (value) submit(value);\n },\n }, {\n text: t`CANCEL`,\n mode: 'cancel',\n onPress: () => {\n Prompt.dismissAnimated(_modalDescribe);\n },\n }]}\n />\n , _modalDescribe);\n }, [id, name, description, group]);\n\n const close = useCallback(() => {\n Prompt.dismissAnimated(_modalDescribe);\n }, [id, name, description]);\n\n return [show, close];\n}\n","import {t} from '@lingui/macro';\nimport {Dispatch} from '@reduxjs/toolkit';\nimport React, {useCallback} from 'react';\nimport {Modal} from 'react-ult';\nimport {Prompt} from 'controls/Prompt';\nimport {privacy, alert} from 'features/mediafire';\n\nconst _modalPrivate = 'private';\n\nexport function useModalPrivate(ids: string[], dispatch: Dispatch) {\n const submit = useCallback(async () => {\n await privacy(ids, 'public');\n alert(dispatch, ids.length === 1\n ? t`Set privacy of item to public`\n : t`Set privacy of items to public`, 'info');\n Prompt.dismissAnimated(_modalPrivate);\n }, [ids]);\n\n const show = useCallback(() => {\n Modal.show(\n submit(),\n }, {\n mode: 'cancel',\n text: t`CANCEL`,\n onPress: () => Prompt.dismissAnimated(_modalPrivate),\n }]}\n />\n , _modalPrivate);\n }, [ids]);\n\n const close = useCallback(() => {\n Prompt.dismissAnimated(_modalPrivate);\n }, [ids]);\n\n return [show, close];\n}\n","import {t} from '@lingui/macro';\nimport React, {useCallback} from 'react';\nimport {Dispatch} from '@reduxjs/toolkit';\nimport {Modal} from 'react-ult';\nimport {Prompt} from 'controls/Prompt';\nimport {alert, password} from 'features/mediafire';\n\nconst _modalPasswordProtect = 'password-protect';\n\nexport function useModalPasswordProtect(id: string, name: string, isFolder: boolean, dispatch: Dispatch) {\n const group = isFolder ? 'folder' : 'file';\n\n const submit = useCallback(async (text: string) => {\n const response = await password(id, text);\n if (response && response['result'] === 'Success') {\n alert(dispatch, t`Updated password to “${name}”`, 'info');\n } else {\n const message = response && response['error']\n ? response['message']\n : t`Failed to update password to “${name}”`;\n alert(dispatch, message, 'fail');\n }\n Modal.dismiss(_modalPasswordProtect);\n }, [id]);\n\n const clear = useCallback(async () => {\n const response = await password(id, '');\n if (response && response['result'] === 'Success') {\n alert(dispatch, t`Removed password to “${name}”`, 'info');\n } else {\n const message = response && response['error']\n ? response['message']\n : t`Failed to remove password to “${name}”`;\n alert(dispatch, message, 'fail');\n }\n Modal.dismiss(_modalPasswordProtect);\n }, [id]);\n\n const show = useCallback((e?: any) => {\n if (e) {\n e.stopPropagation();\n e.preventDefault();\n }\n Modal.show(\n {\n Prompt.dismissAnimated(_modalPasswordProtect);\n if (value) submit(value);\n },\n }, {\n text: t`REMOVE`,\n mode: 'destructive',\n onPress: () => {\n Prompt.dismissAnimated(_modalPasswordProtect);\n clear();\n },\n }, {\n text: t`CANCEL`,\n mode: 'cancel',\n onPress: () => {\n Prompt.dismissAnimated(_modalPasswordProtect);\n },\n }]}\n />\n , _modalPasswordProtect);\n }, [id]);\n\n const close = useCallback(() => {\n Prompt.dismissAnimated(_modalPasswordProtect);\n }, [id]);\n\n return [show, close];\n}\n","import {t} from '@lingui/macro';\nimport React, {useCallback, useState, useEffect} from 'react';\nimport {Dispatch} from '@reduxjs/toolkit';\nimport {Styles, View, Text, Button, TextInput, Modal, Picker, Clipboard, Types} from 'react-ult';\nimport {default as Svg, SvgPath} from 'react-ult-ext-imagesvg';\nimport {InputField} from 'controls/InputField';\nimport {IconButton} from 'controls/IconButton';\nimport {Dialog} from 'controls/Dialog';\nimport {alert, configureFileDrop} from 'features/mediafire';\nimport {Light, Colors, Vectors} from 'features/themes';\n\nexport const modalFilesFileDrop = 'filedrop';\n\nexport interface Props {\n dispatch: Dispatch;\n id: string;\n name: string;\n primaryColor: string;\n isFileDrop: boolean;\n isMinimal?: boolean;\n}\n\nconst pickerItemsFullWidth: Types.PickerPropsItem[] = [\n {label: t`Choose an option`, value: ''},\n {label: t`Yes, use the full width of embed location`, value: 'full'},\n {label: t`No, use a fixed width (600 pixels wide)`, value: '600'},\n];\n\nconst pickerItemsEmailNotify: Types.PickerPropsItem[] = [\n {label: t`Choose an option`, value: ''},\n {label: t`No, I do not want email notifications`, value: 'no'},\n {label: t`Yes, send me email notifications`, value: 'yes'},\n];\n\nexport function FilesModalFileDrop(props: Props) {\n const {id, name, primaryColor, isMinimal, isFileDrop} = props;\n const [stateEnabled, setEnabled] = useState(isFileDrop);\n const [statePromptConfigure, setPromptConfigure] = useState(false);\n const [stateFullWidth, setFullWidth] = useState('');\n const [stateEmailNotify, setEmailNotify] = useState('');\n const [stateContentEmbedded, setContentEmbedded] = useState('Loading...');\n const [stateContentHosted, setContentHosted] = useState('Loading...');\n const [stateTitle, setTitle] = useState('');\n const classes = {\n inputWrapper: [\n styles.inputWrapper,\n Styles.createViewStyle({borderColor: primaryColor}, false),\n ],\n };\n\n const dispatch = props.dispatch;\n const close = useCallback(() => Dialog.dismissAnimated(modalFilesFileDrop), []);\n const cancel = useCallback(() => setPromptConfigure(false), [setPromptConfigure]);\n const configure = useCallback(() => setPromptConfigure(true), [setPromptConfigure]);\n const pickWidth = useCallback((e) => setFullWidth(e), [setPromptConfigure]);\n const pickEmail = useCallback((e) => setEmailNotify(e), [setEmailNotify]);\n\n const disable = useCallback(async () => {\n const response = await configureFileDrop('disable', id);\n if (response && response['result'] === 'Success') {\n alert(dispatch, t`Disabled the “${name}” FileDrop`, 'info');\n } else {\n const message = response && response['error']\n ? response['message']\n : t`Failed to disable the FileDrop`;\n alert(dispatch, message, 'fail');\n }\n Modal.dismiss(modalFilesFileDrop);\n }, [id]);\n\n const update = useCallback(async () => {\n const response = await configureFileDrop('enable', id, stateTitle, stateFullWidth, stateEmailNotify);\n if (response && response['result'] === 'Success') {\n alert(dispatch, t`Updated the “${name}” FileDrop`, 'info');\n setContentEmbedded(response.htmlEmbedCode);\n setContentHosted(response.hostedFileDrop);\n } else {\n const message = response && response['error']\n ? response['message']\n : t`Failed to update the FileDrop`;\n alert(dispatch, message, 'fail');\n }\n if (stateEnabled) {\n setPromptConfigure(false);\n } else {\n setEnabled(true);\n }\n }, [id, stateTitle, stateFullWidth, stateEmailNotify]);\n\n const copyHostedLink = useCallback(() => {\n if (stateContentHosted !== 'Loading...') {\n Clipboard.setText(stateContentHosted);\n alert(dispatch, t`Copied hosted filedrop link`, 'info');\n }\n }, [stateContentHosted]);\n\n const copyEmbedCode = useCallback(() => {\n if (stateContentEmbedded !== 'Loading...') {\n Clipboard.setText(stateContentEmbedded);\n alert(dispatch, t`Copied embedded filedrop code`, 'info');\n }\n }, [stateContentEmbedded]);\n\n useEffect(() => {\n configureFileDrop('view', id).then((response) => {\n setContentEmbedded(response.htmlEmbedCode);\n setContentHosted(response.hostedFileDrop);\n });\n }, []);\n\n return (\n \n \n \n \n {t`Configure FileDrop`}\n \n \n \n \n {!stateEnabled &&\n \n \n {t`Would you like to enable this folder as a FileDrop? This action can be undone at anytime.`}\n \n \n }\n {stateEnabled && !statePromptConfigure &&\n \n \n {t`Share this link with friends to allow them to upload to this folder:`}\n \n \n \n \n \n \n \n {t`To embed a filedrop, include the code below into your webpage:`}\n \n \n \n \n \n \n }\n {stateEnabled && statePromptConfigure &&\n \n \n {t`Message displayed in uploader:`}\n \n \n \n \n {t`Should the embedded uploader extend to the width of the page?`}\n \n \n \n \n {t`Would you like to receive email notifications for uploads?`}\n \n \n \n }\n \n \n {!stateEnabled && \n \n \n \n }\n {stateEnabled && statePromptConfigure && \n \n \n \n \n \n }\n {stateEnabled && !statePromptConfigure && \n \n \n \n }\n \n \n \n );\n}\n\nexport const styles = {\n root: Styles.createViewStyle({\n flex: 1,\n borderWidth: 1,\n borderColor: Light.dialogBorder,\n backgroundColor: Light.dialogBackground,\n }),\n spacerV: Styles.createViewStyle({\n height: 20,\n }),\n spacerH: Styles.createViewStyle({\n width: 6,\n }),\n content: Styles.createViewStyle({\n flex: 0,\n paddingHorizontal: 20,\n }),\n share: Styles.createViewStyle({\n flex: 1,\n }),\n configure: Styles.createViewStyle({\n flex: 1,\n }),\n inputBlocks: Styles.createTextInputStyle({\n flex: 1,\n fontSize: 12,\n padding: 10,\n borderRadius: 0,\n color: Light.dialogInputText,\n backgroundColor: Light.dialogInputBackground,\n }),\n inputHosted: Styles.createTextInputStyle({\n height: 80,\n }),\n inputEmbedded: Styles.createTextInputStyle({\n height: 120,\n }),\n inputWrapper: Styles.createViewStyle({\n borderBottomWidth: 2,\n borderColor: Colors.primary.brand,\n backgroundColor: Colors.neutral.lightest,\n }),\n buttons: Styles.createViewStyle({\n flex: 1,\n flexDirection: 'row-reverse',\n padding: 20,\n }),\n copyIcon: Styles.createButtonStyle({\n position: 'absolute',\n paddingHorizontal: 10,\n paddingVertical: 8,\n right: 0,\n bottom: 0,\n flex: 0,\n }),\n picker: Styles.createPickerStyle({\n maxHeight: 200,\n padding: 10,\n margin: 1,\n color: Light.dialogInputText,\n borderColor: Light.dialogBorder,\n backgroundColor: Light.dialogInputBackground,\n }),\n label: Styles.createTextStyle({\n flex: 1,\n fontSize: 12,\n fontWeight: '600',\n marginBottom: 10,\n color: Light.dialogText,\n }),\n message: Styles.createTextStyle({\n flex: 1,\n fontSize: 14,\n marginBottom: 10,\n color: Light.dialogText,\n }),\n header: Styles.createViewStyle({\n flex: 0,\n }),\n title: Styles.createTextStyle({\n fontSize: 20,\n fontWeight: '300',\n color: Light.dialogTitle,\n lineHeight: 65,\n marginLeft: 19,\n }),\n close: Styles.createButtonStyle({\n position: 'absolute',\n alignItems: 'center',\n height: 65,\n width: 58,\n right: 1,\n top: -2,\n }),\n};\n","import {t} from '@lingui/macro';\nimport React, {useCallback} from 'react';\nimport {Dispatch} from '@reduxjs/toolkit';\nimport {Modal} from 'react-ult';\nimport {default as Svg, SvgPath} from 'react-ult-ext-imagesvg';\nimport {useMenu} from 'hooks/useMenu';\nimport {useModalShare} from 'hooks/useModalShare';\nimport {useModalTrash} from 'hooks/useModalTrash';\nimport {useModalPurge} from 'hooks/useModalPurge';\nimport {useModalRename} from 'hooks/useModalRename';\nimport {useModalDescribe} from 'hooks/useModalDescribe';\nimport {useModalPrivate} from 'hooks/useModalPrivate';\nimport {useModalUpsellFeature} from 'hooks/useModalUpsellFeature';\nimport {useModalPasswordProtect} from 'hooks/useModalPasswordProtect';\nimport {FilesModalFileDrop, modalFilesFileDrop} from 'view/modals/FilesModalFileDrop';\nimport {FilesModalBulkDownload, modalFilesBulkDownload} from 'view/modals/FilesModalBulkDownload';\nimport {isQuickkey, isFolderkey} from 'features/mediafire';\nimport {isNative, getHost} from 'features/platform';\nimport {Vectors, Colors} from 'features/themes';\nimport {testBit} from 'features/common';\nimport {SCOPE} from 'globals/config';\nimport * as effects from 'store/files/effects';\nimport * as MF from 'globals/types';\n\nexport function useMenuFiles(\n ids: string[],\n item: MF.FilesItem,\n options: {\n isPremium: boolean,\n isMinimal: boolean,\n hasPrivate: boolean,\n primaryColor: string,\n },\n dispatch: Dispatch,\n anchor: any,\n anchorUpdate?: Function,\n) {\n const files = ids.filter(id => isQuickkey(id));\n const folders = ids.filter(id => isFolderkey(id));\n\n const hasMultiple = ids.length > 1;\n const hasFolders = folders.length > 0;\n const hasFiles = files.length > 0;\n const hasMixed = hasFiles && hasFolders;\n const hasOnlyFiles = hasFiles && !hasFolders;\n const hasOnlyFolders = hasFolders && !hasFiles;\n\n const isOwned = testBit(item?.flag, MF.FilesItemFlag.isOwned);\n const isInAccount = isOwned && !item.deleted;\n const isFolder = item?.type === 'folder';\n const isImage = item?.type === 'image';\n\n const hasShare = !item?.deleted && (!hasMixed || isNative());\n const hasOneTimeLink = !hasMultiple && hasOnlyFiles;\n const hasCopyLink = !options.hasPrivate && !item?.deleted;\n const hasDownload = !item?.deleted && !hasMultiple && !hasOnlyFolders;\n const hasDownloadBulk = !item?.deleted && (hasMultiple || hasOnlyFolders);\n const hasSaveToMyFiles = !isOwned;\n const hasCopyTo = isInAccount;\n const hasMoveTo = isInAccount;\n const hasRename = isInAccount && !hasMultiple;\n const hasDescription = isInAccount && !hasMultiple;\n const hasPasswordProtect = isInAccount && hasOnlyFiles && !hasMultiple && !isImage;\n const hasFileDropConfigure = isInAccount && hasOnlyFolders && !hasMultiple;\n const hasMoveToTrash = isInAccount;\n const hasRestore = item?.deleted;\n const hasPurge = item?.deleted;\n const hasView = isImage && !item?.deleted && !hasMultiple;\n\n const url = hasMultiple ? `${getHost()}/folder${SCOPE}${ids.join(',')}/shared` : item?.url;\n const name = hasMultiple ? 'Multiple Items' : item?.name;\n const title = hasMultiple ? t`${ids.length} items selected` : item?.name;\n const destination = 'myfiles';\n\n const bulkDownload = useCallback(() => {\n Modal.show(\n \n , modalFilesBulkDownload);\n }, [ids]);\n \n const filedrop = useCallback(() => {\n Modal.show(\n \n , modalFilesFileDrop);\n }, [ids]);\n\n const icon = useCallback((viewbox: string, width: number, height: number, icon: string) =>\n \n \n \n , []);\n\n const save = useCallback(effects.pick(dispatch, {action: 'save', destination, ids}), [ids, dispatch]);\n const copy = useCallback(effects.pick(dispatch, {action: 'copy', destination, ids}), [ids, dispatch]);\n const move = useCallback(effects.pick(dispatch, {action: 'move', destination, ids}), [ids, dispatch]);\n const restore = useCallback(effects.pick(dispatch, {action: 'restore', destination, ids}), [ids, dispatch]);\n const copyLink = useCallback(effects.copyLink2(dispatch, ids, item?.url, ''), [ids, item]);\n const download = useCallback(effects.downloadFile(item?.url, true), [item]);\n const viewImage = useCallback(effects.downloadFile(item?.url), [item]);\n const [showShare] = useModalShare(dispatch, ids, name, url);\n const [show1TDL] = useModalShare(dispatch, ids, name, url, true);\n const [showTrash] = useModalTrash(ids, dispatch);\n const [showPurge] = useModalPurge(ids, dispatch);\n const [showPrivate] = useModalPrivate(ids, dispatch);\n const [showRename] = useModalRename(ids[0], item?.name, dispatch);\n const [showDescribe] = useModalDescribe(ids[0], item?.name, item?.description, isFolder, dispatch);\n const [showPasswordProtect] = useModalPasswordProtect(ids[0], item?.name, isFolder, dispatch);\n const [showUpsellOneTimeLink] = useModalUpsellFeature('pro', 'one_time_link');\n const [showUpsellFileDrop] = useModalUpsellFeature('pro', 'filedrop');\n const [showUpsellPassword] = useModalUpsellFeature('pro', 'password');\n \n const [show, close] = useMenu([\n {\n command: 'header',\n text: title,\n },\n hasShare && {\n command: 'share',\n text: t`Share`,\n icon: icon('0 0 20 24', 18, 18, Vectors.iconShare),\n },\n hasOneTimeLink && {\n command: 'one-time-link',\n text: t`1-Time Link`,\n icon: icon('0 0 24 24', 20, 20, Vectors.iconClock),\n },\n hasCopyLink && {\n command: 'copy-link',\n text: t`Copy Link`,\n icon: icon('0 0 20 10', 18, 18, Vectors.iconPublic),\n },\n hasView && {\n command: 'view',\n text: t`View Image`,\n icon: icon('0 0 16 20', 18, 18, Vectors.iconImage),\n },\n hasDownload && {\n command: 'download',\n text: t`Download`,\n icon: icon('0 0 16 20', 18, 18, Vectors.iconDownload),\n },\n hasDownloadBulk && {\n command: 'bulk-download',\n text: t`Bulk Download`,\n icon: icon('0 0 16 20', 18, 18, Vectors.iconDownload),\n },\n hasSaveToMyFiles && {\n command: 'save',\n text: t`Save to My Files...`,\n icon: icon('0 0 60 48', 18, 18, Vectors.iconSave),\n },\n isInAccount && {\n command: '',\n text: '-',\n },\n hasMoveTo && {\n command: 'move',\n text: t`Move to...`,\n icon: icon('0 0 24 24', 18, 18, Vectors.iconMove),\n },\n hasCopyTo && {\n command: 'copy',\n text: t`Copy to...`,\n icon: icon('0 0 24 24', 18, 18, Vectors.iconCopy),\n },\n hasRename && {\n command: 'rename',\n text: t`Rename`,\n icon: icon('0 0 24 20', 18, 18, Vectors.iconRename),\n },\n hasDescription && {\n command: 'describe',\n text: t`Description`,\n icon: icon('0 0 24 10', 18, 18, Vectors.iconDescription),\n },\n hasPasswordProtect && {\n command: 'password',\n text: t`Password Protect`,\n icon: icon('0 0 24 24', 18, 18, Vectors.iconPassword),\n },\n hasFileDropConfigure && {\n command: 'filedrop',\n text: t`Configure FileDrop`,\n icon: icon('0 0 24 16', 16, 18, Vectors.iconFiledrop),\n },\n isInAccount && {\n command: '',\n text: '-',\n },\n hasMoveToTrash && {\n command: 'trash',\n text: t`Move to Trash`,\n icon: icon('0 0 16 22', 16, 18, Vectors.iconTrash),\n },\n hasRestore && {\n command: 'restore',\n text: t`Restore to folder`,\n icon: icon('0 0 24 24', 20, 20, Vectors.iconRestoreTrash),\n },\n hasPurge && {\n command: 'purge',\n text: t`Delete Permanently`,\n icon: icon('0 0 24 24', 20, 20, Vectors.iconEmptyTrash),\n },\n ], (command) => {\n close();\n switch (command) {\n case 'share':\n return options.hasPrivate\n ? showPrivate()\n : showShare();\n case 'one-time-link':\n return options.isPremium\n ? show1TDL()\n : showUpsellOneTimeLink();\n case 'copy-link':\n return copyLink({});\n case 'view':\n return viewImage({});\n case 'download':\n return download({});\n case 'bulk-download':\n return bulkDownload();\n case 'filedrop':\n return options.isPremium\n ? filedrop()\n : showUpsellFileDrop();\n case 'save':\n return save({});\n case 'move':\n return move();\n case 'copy':\n return copy();\n case 'rename':\n return showRename();\n case 'describe':\n return showDescribe();\n case 'password':\n return options.isPremium\n ? showPasswordProtect()\n : showUpsellPassword();\n case 'trash':\n return showTrash();\n case 'restore':\n return restore();\n case 'purge':\n return showPurge();\n }\n }, anchor, anchorUpdate, ['context', 'bottom', 'top', 'right'], true, false, hasMultiple);\n\n return [show, close];\n}\n","import {t} from '@lingui/macro';\nimport React, {useCallback} from 'react';\nimport {Modal} from 'react-ult';\nimport {Prompt} from 'controls/Prompt';\n\nconst _modalFlags = 'flags';\n\nexport function useModalFlags(message: string) {\n const show = useCallback(() => {\n Modal.show(\n {\n Prompt.dismissAnimated(_modalFlags);\n },\n }]}\n />\n , _modalFlags);\n }, [message]);\n\n const close = useCallback(() => {\n Prompt.dismissAnimated(_modalFlags);\n }, [message]);\n\n return [show, close];\n}\n","import {t} from '@lingui/macro';\nimport React, {useRef, useState, useCallback} from 'react';\nimport {Dispatch} from '@reduxjs/toolkit';\nimport {Modal, Styles} from 'react-ult';\nimport {useMenuFiles} from 'hooks/useMenuFiles';\nimport {useModalFlags} from 'hooks/useModalFlags';\nimport {useModalShare} from 'hooks/useModalShare';\nimport {useModalUpsellFeature} from 'hooks/useModalUpsellFeature';\nimport {useModalPasswordProtect} from 'hooks/useModalPasswordProtect';\nimport {FilesModalFileDrop, modalFilesFileDrop} from 'view/modals/FilesModalFileDrop';\nimport {getTimeStamp, getDetails, getPhoto} from 'features/mediafire';\nimport {testBit, bytesize} from 'features/common';\nimport device from 'features/device';\nimport {Colors} from 'features/themes';\nimport * as effects from 'store/files/effects';\nimport * as appEffects from 'store/app/effects';\nimport * as MF from 'globals/types';\n\nexport interface FileItem {\n id: string,\n url: string,\n name: string,\n type: string,\n hash: string,\n time: string,\n shared: string,\n flag: number,\n size?: number,\n files?: number,\n folders?: number,\n downloads?: number,\n description?: string,\n uploadStatus?: string,\n uploadHashed?: number,\n uploadProgress?: number,\n parentKey?: string,\n parentName?: string,\n filedrop?: boolean,\n private?: boolean,\n password?: boolean,\n isPremium?: boolean,\n};\n\nexport interface FileListOptions {\n focusId: string,\n dragging?: string[],\n selection?: string[],\n sort: MF.FilesStore['sort'],\n filter: MF.FilesStore['filter'],\n hasPrivateSelection: boolean,\n primaryColor?: string,\n isUploader: boolean,\n isPicker?: boolean,\n isTree?: boolean,\n isTrash: boolean,\n isMinimal?: boolean,\n isUploadFull?: boolean,\n dispatch: Dispatch,\n}\n\nexport function useFileItem(item: FileItem, opts: FileListOptions) {\n // Local state\n const dispatch = opts.dispatch;\n const anchor = useRef(null);\n const [stateDrop, setDrop] = useState(0);\n const [stateTitle, setTitle] = useState(false);\n const [stateHover, setHover] = useState(false);\n const [stateMenuPosX, setMenuPosX] = useState(0);\n const [stateMenuPosY, setMenuPosY] = useState(0);\n\n // Derived state\n const isOwned = testBit(item.flag, MF.FilesItemFlag.isOwned);\n const isInfected = testBit(item.flag, MF.FilesItemFlag.isInfected);\n const isReported = testBit(item.flag, MF.FilesItemFlag.isReported);\n const isCopyright = testBit(item.flag, MF.FilesItemFlag.isCopyright);\n const isRestricted = testBit(item.flag, MF.FilesItemFlag.isRestricted);\n const isWordfilter = testBit(item.flag, MF.FilesItemFlag.isWordFiltered);\n const isFlagged = isReported || isCopyright || isRestricted || isWordfilter || isInfected;\n const isImage = item.type === 'image';\n const isFolder = item.type === 'folder';\n const isShared = item.shared;\n const isFocused = item.id === opts.focusId;\n const isSelected = opts.selection && opts.selection.includes(item.id);\n const isDragging = opts.dragging && opts.dragging.includes(item.id);\n const isDropping = stateDrop > 0 && !isDragging;\n const isNavigable = isFolder && !item.shared;\n const isExpandable = opts.isTree && item.folders > 0;\n const hasSelection = opts.selection && opts.selection.length > 0;\n const hasUploadError = item.uploadStatus\n && isNaN(parseInt(item.uploadStatus))\n && item.uploadStatus !== 'Queued'\n && item.uploadStatus !== 'Preparing…'\n && item.uploadStatus !== 'Verifying…'\n && item.uploadStatus !== 'Completed'\n && item.uploadStatus !== 'Conflict';\n\n let textFlagged = 'This file has been restricted';\n if (isCopyright) textFlagged += ' due to copyright claim';\n else if (isReported) textFlagged += ' due to DMCA takedown';\n else if (isInfected) textFlagged += ' due to a virus detected';\n\n const textTimestamp = getTimeStamp(item.time);\n const textPhotoURI = getPhoto(item.id, item.hash, item.flag, item.private);\n const textDetails = opts.isUploader ? bytesize(item.size) : getDetails(item.type, item);\n const textOpen = `${isFolder ? t`Go to` : isImage ? t`View` : t`Download`} ${item.name}`;\n \n const percentHashed = (item.uploadHashed / item.size) * 100;\n const percentUploaded = (item.uploadProgress / item.size) * 100;\n \n const colorSecondary = isSelected ? Colors.neutral.mid : Colors.neutral.light;\n const colorPrimary = isSelected\n ? device.isDarkMode()\n ? Colors.neutral.white\n : Colors.neutral.dark\n : opts.primaryColor;\n\n const styleColorPrimary = Styles.createTextStyle({color: colorPrimary}, false);\n\n const contextOptions = {\n primaryColor: opts.primaryColor,\n isMinimal: opts.isMinimal,\n isPremium: item.isPremium,\n hasPrivate: hasSelection && isSelected\n ? opts.hasPrivateSelection\n : item.private,\n };\n\n const contextItems = hasSelection && isSelected\n ? opts.selection\n : [item.id];\n\n const contextItem = {\n id: item.id,\n url: item.url,\n flag: item.flag,\n type: item.type,\n name: item.name,\n description: item.description,\n filedrop: item.filedrop,\n private: item.private,\n deleted: opts.isTrash ? '-' : '',\n revision: 0,\n state: 0,\n created: '',\n hierarchy: [],\n };\n\n // Event handlers\n const copyLink = useCallback(effects.copyLink2(dispatch, [item.id], item.url), [item.id, item.url]);\n const onSelect = useCallback(effects.select(dispatch, item.id), [item.id]);\n const onDownload = useCallback(effects.downloadFile(item.url), [item.url]);\n const onNavigate = useCallback(effects.navigate(dispatch, item.id), [item.id]);\n const onPreview = useCallback(effects.previewFile(dispatch, item.id, item.name, item.url), [item.id]);\n const onBrowse = useCallback(effects.browse(dispatch, item.id, opts.sort, opts.filter), [item.id, opts.sort, opts.filter]);\n const onBack = useCallback(effects.navigate(dispatch, item.parentKey), [item.parentKey]);\n const onDragOver = useCallback(effects.dragOver(), []);\n const onDragEnter = useCallback(effects.dragEnter(setDrop, stateDrop), [setDrop, stateDrop]);\n const onDragLeave = useCallback(effects.dragLeave(setDrop, stateDrop), [setDrop, stateDrop]);\n const onDragStart = useCallback(effects.dragStart(dispatch, contextItems, item.type, item.name), [contextItems, item.type, item.name]);\n const onDragEnd = useCallback(effects.dragEnd(dispatch), []);\n const onDrop = useCallback(effects.dragDrop(dispatch, setDrop, item.id, item.name, item.parentKey), [setDrop, item.id, item.name]);\n const onMouseEnter = useCallback(appEffects.stateOn(setHover), [setHover]);\n const onMouseLeave = useCallback(appEffects.stateOff(setHover), [setHover]);\n const onHoverStart = useCallback(appEffects.stateOn(setTitle), [setTitle]);\n const onHoverEnd = useCallback(appEffects.stateOff(setTitle), [setTitle]);\n\n const open = isNavigable ? onNavigate : onPreview;\n\n // Modals & Menus\n const [showFlags] = useModalFlags(textFlagged);\n const [showShare] = useModalShare(dispatch, [item.id], item.name, item.url);\n const [showPassword] = useModalPasswordProtect(item.id, item.name, isFolder, dispatch);\n const [showMenuFiles] = useMenuFiles(contextItems, contextItem, contextOptions, dispatch, anchor.current, (x: number, y: number) => {setMenuPosX(x); setMenuPosY(y)});\n const [showUpsellFileDrop] = useModalUpsellFeature('pro', 'filedrop');\n const [showUpsellPassword] = useModalUpsellFeature('pro', 'password');\n\n // Legacy modals\n\n const showFileDrop = useCallback((e) => {\n e.stopPropagation();\n Modal.show(\n \n , modalFilesFileDrop);\n } , [item.id, item.filedrop, opts.isMinimal]);\n\n return {\n anchor,\n\n stateTitle,\n stateHover,\n stateMenuPosX,\n stateMenuPosY,\n\n contextOptions,\n contextItems,\n contextItem,\n\n isOwned,\n isFlagged,\n isImage,\n isShared,\n isFolder,\n isFocused,\n isSelected,\n isDragging,\n isDropping,\n isNavigable,\n isExpandable,\n hasSelection,\n hasUploadError,\n\n textTimestamp,\n textPhotoURI,\n textDetails,\n textFlagged,\n textOpen,\n percentHashed,\n percentUploaded,\n colorSecondary,\n colorPrimary,\n styleColorPrimary,\n\n open,\n copyLink,\n onSelect,\n onDownload,\n onNavigate,\n onPreview,\n onBrowse,\n onBack,\n onDragOver,\n onDragEnter,\n onDragLeave,\n onDragStart,\n onDragEnd,\n onDrop,\n onMouseEnter,\n onMouseLeave,\n onHoverStart,\n onHoverEnd,\n\n showFlags,\n showPassword,\n showMenuFiles,\n showShare,\n showFileDrop,\n showUpsellFileDrop,\n showUpsellPassword,\n };\n}\n","import React, {useState, useEffect, useCallback} from 'react';\nimport isEqual from 'react-fast-compare';\nimport {Styles, View, Text, Image, Types} from 'react-ult';\nimport {default as Svg, SvgPath} from 'react-ult-ext-imagesvg';\nimport {getIcon} from 'features/mediafire';\nimport {isWeb} from 'features/platform';\nimport {Light, Colors} from 'features/themes';\n\nexport interface FilesItemIconProps {\n id: string;\n type: string;\n name: string;\n width?: number;\n height?: number;\n details?: string;\n primaryColor?: string;\n selected?: boolean;\n dropping?: boolean;\n gallery?: boolean;\n picker?: boolean;\n large?: boolean;\n expandable?: boolean;\n tree?: boolean;\n src?: string;\n url?: string;\n}\n\nexport const FilesItemIcon = React.memo(function FilesItemIcon(props: FilesItemIconProps) {\n const [statePreview, setPreview] = useState(false);\n const [stateThumbnail, setThumbnail] = useState(props.src);\n const {icon, fill, type} = getIcon(props.type, props.name, props.primaryColor);\n const extension = props.name && props.name.length ? props.name.split('.').pop() : 'FILE';\n const badge = extension ? extension.substr(0, 4).toUpperCase() : 'FILE';\n const isFolder = type === 'folder';\n const isIE11 = !!window.MSInputMethodContext && !!document['documentMode'];\n const hasPrefetch = props.src && isWeb() && !isIE11;\n const classes = {\n root: [\n styles.root,\n props.gallery && styles.gallery,\n props.gallery && props.selected && type !== 'image' && styles.gallerySelected,\n props.dropping && styles.dropping,\n ],\n icon: props.tree\n ? styles.iconTree\n : isFolder\n ? styles.iconFolder\n : styles.icon,\n badge: [\n styles.badge,\n props.large && styles.badgeLarge,\n props.gallery && styles.badgeGallery,\n ],\n extension: [\n styles.extension,\n props.large && styles.extensionLarge,\n props.gallery && styles.extensionGallery,\n ],\n thumbnail: [\n styles.thumbnail,\n statePreview && styles.thumbnailLoaded,\n props.large && styles.thumbnailLarge,\n props.gallery && Styles.createViewStyle({\n width: props.width,\n height: props.height,\n marginHorizontal: 0,\n }, false),\n ],\n title: [\n styles.name,\n !isFolder && styles.nameMargin,\n Styles.createViewStyle({width: props.width - 20}, false)\n ],\n details: [\n styles.details,\n Styles.createViewStyle({width: props.width - 20}, false),\n ],\n };\n\n const thumbnailLoaded = useCallback(() => setPreview(true), [setPreview]);\n\n useEffect(() => {\n if (!hasPrefetch) return () => {};\n const xhr = new XMLHttpRequest();\n let url = props.src;\n xhr.responseType = 'document';\n xhr.open('GET', props.src, true);\n xhr.onload = () => {\n if (xhr.status === 200) {\n setThumbnail(url);\n setPreview(true);\n }\n };\n xhr.send();\n return () => {\n try {\n if (xhr.status === 0) {\n xhr.abort();\n }\n } catch (e) {}\n };\n }, [props.src]);\n\n return (\n \n {!!props.src &&\n \n }\n {!statePreview &&\n \n \n {icon.map((d,i) =>\n \n )}\n \n {!statePreview && type !== 'folder' &&\n \n \n {badge}\n \n \n }\n \n }\n {!statePreview && props.gallery &&\n \n {props.name}\n \n }\n {!statePreview && props.gallery &&\n \n {props.details}\n \n }\n \n );\n}, (prev, next) => isEqual(prev, next));\n\nexport const styles = {\n root: Styles.createViewStyle({\n justifyContent: 'center',\n alignContent: 'center',\n alignItems: 'center',\n flex: 1,\n }),\n inner: Styles.createViewStyle({\n position: 'relative',\n }),\n gallery: Styles.createViewStyle({\n backgroundColor: Light.listItemNormalBackground,\n }),\n dropping: Styles.createViewStyle({\n backgroundColor: Colors.primary.light,\n }),\n gallerySelected: Styles.createViewStyle({\n backgroundColor: Light.listItemSelectBackground,\n borderColor: Light.menuHeaderMultiBorder,\n borderWidth: 1,\n }),\n hover: Styles.createTextStyle({\n color: Colors.secondary.orange,\n }),\n badge: Styles.createViewStyle({\n backgroundColor: Colors.neutral.black,\n position: 'absolute',\n left: 11,\n top: 5,\n }),\n badgeLarge: Styles.createViewStyle({\n left: 10,\n top: 5,\n }),\n badgeGallery: Styles.createViewStyle({\n left: 11,\n top: 6,\n }),\n name: Styles.createTextStyle({\n textAlign: 'center',\n fontSize: 14,\n color: Light.listItemTitle,\n }),\n nameMargin: Styles.createTextStyle({\n marginTop: 10,\n }),\n details: Styles.createTextStyle({\n textAlign: 'center',\n marginTop: 4,\n fontSize: 12,\n color: Colors.neutral.mid,\n }),\n icon: Styles.createViewStyle({\n marginLeft: 14,\n marginRight: 12,\n }),\n iconFolder: Styles.createViewStyle({\n marginTop: 8,\n marginLeft: 14,\n marginRight: 12,\n }),\n iconTree: Styles.createViewStyle({\n marginTop: 6,\n marginLeft: 3,\n }),\n thumbnail: Styles.createImageStyle({\n position: 'absolute',\n opacity: 0,\n width: 32,\n height: 38,\n marginHorizontal: 12,\n }),\n thumbnailLoaded: Styles.createImageStyle({\n position: 'relative',\n opacity: 1,\n }),\n thumbnailLarge: Styles.createImageStyle({\n height: 48,\n }),\n extension: Styles.createTextStyle({\n fontSize: 8,\n paddingVertical: 1,\n paddingHorizontal: 2,\n fontWeight: '600',\n color: Colors.neutral.white,\n }),\n extensionLarge: Styles.createTextStyle({\n fontSize: 8,\n }),\n extensionGallery: Styles.createTextStyle({\n fontSize: 9,\n paddingVertical: 2,\n paddingHorizontal: 3,\n }),\n file: Styles.createViewStyle({\n backgroundColor: Colors.files.text,\n }),\n folder: Styles.createViewStyle({\n backgroundColor: Colors.files.text,\n }),\n archive: Styles.createViewStyle({\n backgroundColor: Colors.files.archive,\n }),\n audio: Styles.createViewStyle({\n backgroundColor: Colors.files.audio,\n }),\n video: Styles.createViewStyle({\n backgroundColor: Colors.files.video,\n }),\n image: Styles.createViewStyle({\n backgroundColor: Colors.files.image,\n }),\n spreadsheet: Styles.createViewStyle({\n backgroundColor: Colors.files.spreadsheet,\n }),\n pdf: Styles.createViewStyle({\n backgroundColor: Colors.files.pdf,\n }),\n presentation: Styles.createViewStyle({\n backgroundColor: Colors.files.presentation,\n }),\n document: Styles.createViewStyle({\n backgroundColor: Colors.files.document,\n }),\n};\n","import {t} from '@lingui/macro';\nimport React, {useRef, useState, useEffect} from 'react';\nimport isEqual from 'react-fast-compare';\nimport {Styles, View, GestureView, Text, Button} from 'react-ult';\nimport {VirtualListViewItemInfo} from 'react-ult-ext-virtuallistview';\nimport {default as Svg, SvgPath} from 'react-ult-ext-imagesvg';\nimport {useFileItem, FileItem, FileListOptions} from 'hooks/useFileItem';\nimport {useMenuFiles} from 'hooks/useMenuFiles';\nimport {FilesItemIcon} from 'view/FilesThumbnail';\nimport {Light, Vectors, Colors} from 'features/themes';\nimport {isWeb, isTouch, isNative} from 'features/platform';\nimport {getTimeSince} from 'features/mediafire';\n\nexport const FilesListItemTiny = 26;\nexport const FilesListItemSmall = 42;\nexport const FilesListItemLarge = 54;\n\nexport interface FilesListItemProps extends VirtualListViewItemInfo {\n info: FileItem,\n opts: FileListOptions,\n}\n\nexport const FilesListItem = React.memo(function FilesListItem(props: FilesListItemProps) {\n const {isTree, isTrash, isPicker, isUploader, isUploadFull} = props.opts;\n const {id, url, name, type, parentKey, parentName, uploadStatus} = props.info;\n const item = useFileItem(props.info, props.opts);\n const anchor = useRef(null);\n const [showMenuFiles] = useMenuFiles(item.contextItems, item.contextItem, item.contextOptions, props.opts.dispatch, anchor.current);\n\n // Workaround to populate the anchor ref\n // otherwise context menu won't appear without selecting an item\n const [_refDefined, setRefDefined] = useState(false);\n useEffect(() => {\n setRefDefined(true);\n }, []);\n\n // General list item props\n const isRowLarge = props.height === FilesListItemLarge;\n const isRowTiny = props.height === FilesListItemTiny;\n\n // File list options\n const isNormal = !isUploader && !isPicker;\n const isNormalExceptTree = !isTree && isNormal;\n\n // File item info\n const isPremium = props.info.isPremium;\n const isPrivate = props.info.private;\n const isFileDrop = props.info.filedrop;\n const isProtected = props.info.password;\n const isEmpty = props.info.type === 'empty';\n\n // UI state\n const hasTouch = isTouch();\n const hasNative = isNative();\n const hasHover = !isUploader && !hasTouch;\n const hasDragDrop = isNormal && item.isOwned;\n const colorIcon = item.colorSecondary;\n const classes = {\n root: [\n isRowTiny ? styles.rootTiny : isRowLarge ? styles.rootLarge : styles.root,\n item.isSelected ? styles.selected : !isTree ? styles.normal : undefined,\n item.isFocused && (item.isSelected ? styles.focusedAndSelected : styles.focused),\n item.isDropping && styles.dropping,\n item.stateHover && (item.isSelected ? styles.hoveringSelected : isTree ? styles.hoveringTree : styles.hovering),\n item.isDragging && (isTree ? styles.draggingTree : styles.dragging),\n ],\n inner: isTree\n ? styles.innerTree\n : styles.inner,\n thumbnail: !isUploader\n ? isTree\n ? styles.thumbnailTree\n : styles.thumbnail\n : styles.thumbnailUpload,\n content: [\n styles.content,\n props.opts.isMinimal && styles.contentMinimal,\n ],\n overview: [\n styles.overview,\n item.isSelected && styles.selectedText,\n ],\n titleText: [\n styles.titleText,\n item.stateTitle && item.styleColorPrimary,\n ],\n timestamp: [\n styles.timestamp,\n isRowLarge && styles.largeText,\n item.isSelected && styles.selectedText,\n ],\n download: [\n styles.download,\n isRowLarge && styles.largeText,\n item.isSelected && styles.selectedText,\n ],\n uploadStatus: [\n styles.uploadStatus,\n isUploadFull && styles.uploadStatusFull,\n !isUploadFull && item.hasUploadError && styles.uploadStatusError,\n ],\n menu: [\n styles.menu,\n isRowLarge && styles.menuLarge,\n ], \n selectIcon: [\n styles.selectIcon,\n isRowLarge && styles.selectIconLarge,\n ],\n anchor: [\n styles.anchor,\n Styles.createViewStyle({left: item.stateMenuPosX, top: item.stateMenuPosY}, false),\n ],\n bar: [\n styles.bar,\n item.hasUploadError && styles.barError,\n ],\n hashed: [\n styles.hashed,\n Styles.createViewStyle({width: isNaN(item.percentHashed) ? 0 : item.percentHashed}, false),\n isWeb() && Styles.createViewStyle({['transition' as any]: 'background-color 0.2s, width 0.5s ease'}, false),\n ],\n uploaded: [\n styles.uploaded,\n id && id.length === 9 && styles.downloaded,\n Styles.createViewStyle({width: isNaN(item.percentUploaded) ? 0 : item.percentUploaded}, false),\n isWeb() && Styles.createViewStyle({['transition' as any]: 'background-color 0.2s, width 0.5s ease'}, false),\n ],\n };\n\n const tapOuter = hasTouch && !isPicker ? item.hasSelection ? item.onSelect : item.open : undefined;\n const tapInner = hasTouch && !isTree && !isUploader && !isPicker && !item.hasSelection ? item.onSelect : undefined;\n\n return (\n \n {!isEmpty &&\n \n \n {hasNative &&\n \n \n {item.isSelected &&\n \n \n \n }\n {!item.isSelected &&\n \n }\n \n \n }\n {!hasNative &&\n \n \n {item.isSelected &&\n \n \n \n }\n {!item.isSelected &&\n \n }\n \n \n }\n \n {isTree || isPicker || isUploader || hasTouch || isTrash\n ? \n {name}\n \n : \n \n {name}\n \n \n }\n {!isTree && !isPicker && !item.isShared &&\n \n {isTrash && props.opts.isMinimal\n ? t`Deleted ${getTimeSince(item.textTimestamp)} ago`\n : item.textDetails}\n \n }\n \n \n {isNormalExceptTree && item.isFlagged &&\n \n }\n {isNormalExceptTree && item.isOwned && isFileDrop && !isTrash &&\n \n \n \n \n \n }\n {isNormalExceptTree && item.isOwned && isProtected && !isTrash &&\n \n \n \n \n \n }\n {isNormalExceptTree && !isPrivate && !isTrash &&\n \n }\n {isWeb() && parentKey && isNormalExceptTree && !isTrash &&\n \n }\n {isNormalExceptTree && !props.opts.isMinimal &&\n \n {!isTrash ? item.textTimestamp : t`Deleted ${getTimeSince(item.textTimestamp)} ago`}\n \n }\n {isNormalExceptTree && !item.isOwned && !isTrash && false &&\n \n }\n {isUploader && false &&\n \n \n \n \n \n }\n {isUploader && !!url && !item.hasUploadError && \n \n \n \n {t`Share`}\n \n \n \n \n {t`Copy Link`}\n \n \n \n }\n {isUploader && uploadStatus &&\n \n \n {uploadStatus}\n \n \n }\n {isUploader && isUploadFull &&\n \n {!item.hasUploadError &&\n \n \n \n \n }\n \n }\n {isNormalExceptTree &&\n \n \n \n \n \n }\n {item.isExpandable &&\n \n \n \n \n \n }\n \n \n }\n \n );\n}, (prev, next) => isEqual(prev, next));\n\nexport const styles = {\n root: Styles.createViewStyle({\n flex: 1,\n height: FilesListItemSmall,\n flexDirection: 'column',\n }),\n rootTiny: Styles.createViewStyle({\n flex: 1,\n flexDirection: 'column',\n height: FilesListItemTiny,\n }),\n rootLarge: Styles.createViewStyle({\n flex: 1,\n flexDirection: 'row',\n height: FilesListItemLarge,\n }),\n normal: Styles.createViewStyle({\n backgroundColor: Light.listItemNormalBackground,\n borderColor: Light.listItemNormalBorder,\n borderBottomWidth: 1,\n }),\n children: Styles.createViewStyle({\n flexDirection: 'row',\n marginLeft: 10,\n flex: 1,\n }),\n selectedText: Styles.createTextStyle({\n color: Light.listItemSelectText,\n }),\n selectedHoverText: Styles.createTextStyle({\n color: Colors.neutral.dark,\n }),\n selected: Styles.createViewStyle({\n backgroundColor: Light.listItemSelectBackground,\n borderColor: Light.listItemSelectBorder,\n borderBottomWidth: 1,\n }),\n dragging: Styles.createViewStyle({\n opacity: 0.5,\n borderColor: Light.listItemNormalBorder,\n backgroundColor: Light.listItemDraggingBackground,\n }),\n draggingTree: Styles.createViewStyle({\n opacity: 0.5,\n }),\n dropping: Styles.createViewStyle({\n opacity: 1,\n backgroundColor: Light.listItemDropBackground,\n }),\n hovering: Styles.createViewStyle({\n backgroundColor: Light.listItemHoverBackground,\n }),\n hoveringTree: Styles.createViewStyle({\n backgroundColor: Light.listItemHoverTreeBackground,\n }),\n hoveringSelected: Styles.createViewStyle({\n backgroundColor: Light.listItemHoverSelectedBackground,\n }),\n focused: Styles.createViewStyle({\n backgroundColor: Light.listItemFocusBackground,\n }),\n focusedAndSelected: Styles.createViewStyle({\n backgroundColor: Light.listItemFocusSelectedBackground,\n }),\n largeText: Styles.createTextStyle({\n lineHeight: FilesListItemLarge,\n }),\n inner: Styles.createViewStyle({\n flex: 1,\n flexDirection: 'row',\n justifyContent: 'flex-start',\n position: 'relative',\n }),\n innerTree: Styles.createViewStyle({\n flex: 0,\n flexDirection: 'row',\n justifyContent: 'flex-start',\n position: 'relative',\n }),\n thumbnail: Styles.createViewStyle({\n flexDirection: 'row',\n justifyContent: 'center',\n cursor: 'pointer',\n }),\n thumbnailTree: Styles.createViewStyle({\n flexDirection: 'row',\n justifyContent: 'center',\n marginHorizontal: 6,\n }),\n thumbnailUpload: Styles.createViewStyle({\n flexDirection: 'row',\n justifyContent: 'center',\n }),\n selectIcon: Styles.createViewStyle({\n marginHorizontal: 13,\n marginVertical: 6,\n }),\n selectIconLarge: Styles.createViewStyle({\n marginVertical: 12,\n }),\n content: Styles.createViewStyle({\n flex: 1,\n flexDirection: 'row',\n alignItems: 'center',\n }),\n contentMinimal: Styles.createViewStyle({\n flexDirection: 'column',\n justifyContent: 'center',\n alignContent: 'flex-start',\n alignItems: 'flex-start',\n }),\n details: Styles.createViewStyle({\n flex: 0,\n flexDirection: 'row',\n alignItems: 'center',\n }),\n title: Styles.createButtonStyle({\n marginRight: 8,\n flex: 0,\n }),\n titleSimple: Styles.createTextStyle({\n flexShrink: 1,\n marginRight: 8,\n lineHeight: 16,\n fontSize: 12,\n color: Light.listItemTitle,\n }),\n titleTree: Styles.createTextStyle({\n flexShrink: 1,\n fontSize: 12,\n lineHeight: FilesListItemTiny - 1,\n color: Light.filesTreeText,\n }),\n titleText: Styles.createTextStyle({\n fontSize: 12,\n color: Light.listItemTitle,\n flexShrink: 1,\n }),\n overview: Styles.createTextStyle({\n fontSize: 11,\n marginRight: 8,\n color: Colors.neutral.light,\n }),\n timestamp: Styles.createTextStyle({\n flex: 1,\n fontSize: 11,\n color: Colors.neutral.mid,\n textAlign: 'center',\n }),\n download: Styles.createTextStyle({\n flex: 1,\n fontSize: 11,\n marginLeft: 8,\n color: Colors.neutral.light,\n }),\n button: Styles.createButtonStyle({\n width: 36,\n height: 42,\n flexDirection: 'row',\n alignItems: 'center',\n }),\n buttonSearch: Styles.createButtonStyle({\n height: 42,\n paddingHorizontal: 8,\n flexDirection: 'row',\n alignItems: 'center',\n }),\n menu: Styles.createButtonStyle({\n width: 42,\n height: 42,\n flexDirection: 'row',\n alignItems: 'center',\n }),\n menuLarge: Styles.createButtonStyle({\n marginRight: 6,\n }),\n expand: Styles.createButtonStyle({\n margin: 0,\n paddingVertical: 0,\n paddingHorizontal: 6,\n }),\n visible: Styles.createViewStyle({\n opacity: 1,\n }),\n check: Styles.createViewStyle({\n position: 'absolute',\n left: 8,\n top: 8,\n }),\n anchor: Styles.createViewStyle({\n top: 0,\n left: 0,\n width: 1,\n height: 1,\n position: 'absolute',\n backgroundColor: 'rgba(0, 0, 0, 0)',\n }),\n // Uploading & Downloading\n uploadCancel: Styles.createButtonStyle({\n width: 48,\n height: 46,\n flexDirection: 'row',\n alignItems: 'center',\n }),\n uploadActions: Styles.createViewStyle({\n flex: 1,\n flexDirection: 'row',\n }),\n uploadAction: Styles.createButtonStyle({\n height: 42,\n paddingHorizontal: 6,\n }),\n uploadActionText: Styles.createTextStyle({\n fontSize: 12,\n marginTop: 3,\n color: Colors.primary.brand,\n }),\n bar: Styles.createViewStyle({\n flex: 0,\n height: 4,\n width: 100,\n marginLeft: 14,\n marginRight: 6,\n borderRadius: 3,\n backgroundColor: Colors.neutral.lighter,\n }),\n barError: Styles.createViewStyle({\n backgroundColor: Colors.secondary.redOrange,\n }),\n hashed: Styles.createViewStyle({\n flex: 0,\n position: 'absolute',\n top: 0,\n bottom: 0,\n left: 0,\n borderRadius: 3,\n backgroundColor: Colors.neutral.light,\n }),\n uploaded: Styles.createViewStyle({\n flex: 0,\n position: 'absolute',\n top: 0,\n bottom: 0,\n left: 0,\n borderRadius: 3,\n backgroundColor: Colors.primary.brand,\n }),\n downloaded: Styles.createViewStyle({\n backgroundColor: '#33CC66',\n }),\n uploadStatus: Styles.createTextStyle({\n color: Light.listItemTitle,\n fontSize: 12,\n marginLeft: 12,\n width: 70,\n textAlign: 'right',\n }),\n uploadStatusFull: Styles.createTextStyle({\n width: 120,\n }),\n uploadStatusError: Styles.createTextStyle({\n color: Colors.secondary.redOrange,\n }),\n};\n","import React, {useState, useCallback, useMemo} from 'react';\nimport isEqual from 'react-fast-compare';\nimport {Styles, View} from 'react-ult';\nimport {Dispatch} from '@reduxjs/toolkit';\nimport {useHotkeys} from 'hooks/useHotkeys';\nimport {\n VirtualListView,\n VirtualListViewCellRenderDetails,\n VirtualListViewItemInfo,\n} from 'react-ult-ext-virtuallistview';\nimport {\n FilesListItem,\n FilesListItemProps,\n FilesListItemLarge,\n FilesListItemSmall,\n FilesListItemTiny,\n} from 'view/FilesListItem';\nimport {Light, Colors, Breakpoints} from 'features/themes';\nimport {isTouch} from 'features/platform';\nimport * as effects from 'store/files/effects';\nimport * as MF from 'globals/types';\n\nexport interface FilesListProps {\n dispatch: Dispatch;\n id: string;\n name: string;\n sort: MF.FilesStore['sort'];\n filter: MF.FilesStore['filter'];\n items: {[id: string]: MF.FilesItem};\n view: {files: string[], folders: string[]};\n viewport: {width: number, height: number};\n dragging: string[];\n selection: string[];\n isPremium: boolean;\n isSearch: boolean,\n focusId?: string;\n primaryColor?: string;\n maxheight?: number;\n maxwidth?: number;\n hasPrivateSelection?: boolean;\n hasFolderTree?: boolean;\n uploader?: boolean;\n foreign?: boolean;\n picker?: boolean;\n tree?: boolean;\n onPick?: any;\n}\n\nexport const FilesList = React.memo(function FilesList(props: FilesListProps) {\n const dispatch = props.dispatch;\n const {id, name, sort, filter, viewport, view, items, selection, picker, uploader, dragging, focusId, tree, primaryColor, isPremium} = props;\n const [stateDrop, setDrop] = useState(0);\n const hasTouch = isTouch();\n const isOwned = !props.foreign;\n const isTrash = props.id === 'trash';\n const isSearch = props.id === 'search';\n const isLargeRow = hasTouch || !isOwned;\n const isMinimalRow = viewport.width < 1024 || hasTouch;\n const isUploadFull = viewport.width >= 600;\n const hasGutter = (!isMinimalRow && !tree && !picker) || uploader;\n const hasFocus = !picker && !tree && !uploader;\n const heightHeader = isOwned ? isLargeRow ? 142 : 120 : 160;\n const maxHeight = props.maxheight || viewport.height - heightHeader;\n const maxWidth = props.maxwidth\n ? Math.min(viewport.width, props.maxwidth)\n : viewport.width - (viewport.width > Breakpoints.menu ? props.hasFolderTree ? 420 : 220 : 0);\n\n const {isRangeSelect} = useHotkeys(id, view, selection, focusId, props.isSearch, dispatch);\n\n const drop = useCallback(effects.dragDrop(dispatch, setDrop, id, name), [setDrop, id, name, items[id]?.parentKey]);\n const dragEnter = useCallback(effects.dragEnter(setDrop, stateDrop), [setDrop, stateDrop]);\n const dragLeave = useCallback(effects.dragLeave(setDrop, stateDrop), [setDrop, stateDrop]);\n const dragOver = useCallback(effects.dragOver(), []);\n\n const open = useCallback(effects.listOpen(dispatch), []);\n const focus = useCallback(effects.listFocus(dispatch), []);\n const select = useCallback(effects.listSelect(dispatch, isRangeSelect, view), [isRangeSelect, view]);\n const browse = useCallback(effects.listBrowse(dispatch, sort, filter), [sort, filter]);\n\n const render = useCallback((e: VirtualListViewCellRenderDetails) =>\n , []);\n\n const prepareRows = (list: string[]) => {\n return list.map((key) => {\n const item = {\n isPremium,\n id: key && items[key] ? items[key].id : null,\n url: key && items[key] ? items[key].url : '',\n name: key && items[key] ? items[key].name : '',\n description: key && items[key] ? items[key].description : '',\n hash: key && items[key] ? items[key].hash : '',\n type: key && items[key] ? items[key].type : '',\n flag: key && items[key] ? items[key].flag : 0,\n size: key && items[key] ? items[key].size : 0,\n time: key && items[key] && (items[key].deleted || items[key].created),\n shared: key && items[key] && items[key].shared,\n parentKey: isSearch ? key && items[key] && items[key].parentKey : '',\n parentName: isSearch ? key && items[key] && items[key].parentName : '',\n files: key && items[key] ? items[key].files : 0,\n folders: key && items[key] ? items[key].folders : 0,\n downloads: key && items[key] ? items[key].downloads : 0,\n password: key && items[key] ? items[key].password : false,\n private: key && items[key] ? items[key].private : false,\n filedrop: key && items[key] ? items[key].filedrop : false,\n uploadStatus: key && items[key] ? items[key].uploadStatus : '',\n uploadHashed: key && items[key] ? items[key].uploadHashed : 0,\n uploadProgress: key && items[key] ? items[key].uploadProgress : 0,\n };\n return {\n // Virtual list item props\n key: item.id,\n isNavigable: true,\n height: tree\n ? FilesListItemTiny\n : isLargeRow\n ? FilesListItemLarge\n : FilesListItemSmall,\n // File list item props\n info: item,\n opts: {\n dispatch,\n dragging,\n selection,\n focusId,\n sort,\n filter,\n primaryColor,\n isTrash,\n isTree: tree,\n isPicker: picker,\n isMinimal: isMinimalRow,\n isUploader: uploader,\n isUploadFull: isUploadFull,\n hasPrivateSelection: props.hasPrivateSelection,\n },\n }\n });\n };\n\n const styleHeight = Styles.createScrollViewStyle({maxHeight, maxWidth, overflow: 'visible'}, false);\n\n const itemList = useMemo(() =>\n view ? prepareRows([\n ...Array.from(new Set(view.folders)),\n ...Array.from(new Set(!picker && !tree ? view.files : [])),\n ]) : []\n , [view, items, selection, dragging, focusId]);\n\n // Reset scroll position when changing folders\n const mount = useCallback((e?: VirtualListView) => {\n e && e.scrollToTop(false, 0);\n }, [id]);\n\n return view ? (\n \n \n \n ) : null;\n}, (prev, next) => isEqual(prev, next));\n\nexport const styles = {\n root: Styles.createViewStyle({\n flex: 1,\n backgroundColor: Light.filesBackground,\n }),\n tree: Styles.createViewStyle({\n backgroundColor: Light.filesTreeBackground,\n }),\n gutter: Styles.createViewStyle({\n marginLeft: 14,\n }),\n hoverText: Styles.createTextStyle({\n color: Colors.neutral.white,\n }),\n};\n","import React from 'react';\nimport {t} from '@lingui/macro';\nimport isEqual from 'react-fast-compare';\nimport {Styles, View, GestureView, Text, Button} from 'react-ult';\nimport {default as Svg, SvgPath} from 'react-ult-ext-imagesvg';\nimport {VirtualListViewItemInfo} from 'react-ult-ext-virtuallistview';\nimport {useFileItem, FileItem, FileListOptions} from 'hooks/useFileItem';\nimport {FilesItemIcon} from 'view/FilesThumbnail';\nimport {Light, Vectors, Colors} from 'features/themes';\nimport {isTouch} from 'features/platform';\n\nexport const FilesGridItemNormal = 176;\n\nexport interface FilesGridItemProps {\n info: FileItem,\n opts: FileListOptions,\n}\n\nexport interface FilesGridRowProps extends VirtualListViewItemInfo {\n context: FileItem[] | null;\n opts: FileListOptions,\n}\n\nfunction FilesGridItem(props: FilesGridItemProps) {\n const {id, url, name, type} = props.info;\n const item = useFileItem(props.info, props.opts);\n\n // UI state\n const hasTouch = isTouch();\n const hasDragDrop = item.isOwned;\n const classes = {\n root: [\n styles.root,\n styles.normal,\n item.isFocused && (item.isSelected ? styles.focusedAndSelected : styles.focused),\n item.isDropping && styles.dropping,\n item.isDragging && styles.dragging,\n ],\n bar: [\n styles.bar,\n (hasTouch || (item.stateHover || item.isSelected)) && styles.visible,\n item.isSelected && item.isImage && styles.barSelected,\n ],\n name: [\n styles.name,\n item.isSelected && item.isImage && styles.nameSelected,\n ],\n anchor: [\n styles.anchor,\n Styles.createViewStyle({left: item.stateMenuPosX, top: item.stateMenuPosY}, false),\n ],\n };\n\n return (\n \n \n \n \n {!item.isShared &&\n \n \n \n }\n \n \n );\n}\n\nexport const FilesGridRow = React.memo(function FilesGridRow(props: FilesGridRowProps) {\n return (\n \n {props.context.map((item, i) => item && item.id\n ? \n : \n )}\n \n );\n}, (prev, next) => isEqual(prev, next));\n\nexport const styles = {\n row: Styles.createViewStyle({\n flexDirection: 'row',\n justifyContent: 'center',\n height: FilesGridItemNormal,\n backgroundColor: Light.listItemNormalBackground,\n position: 'relative',\n }),\n root: Styles.createViewStyle({\n height: FilesGridItemNormal,\n width: FilesGridItemNormal,\n padding: 8,\n paddingLeft: 0,\n paddingBottom: 0,\n }),\n normal: Styles.createViewStyle({\n backgroundColor: Light.listItemNormalBackground,\n }),\n dragging: Styles.createViewStyle({\n opacity: 0.4,\n }),\n dropping: Styles.createViewStyle({\n opacity: 1,\n backgroundColor: Colors.primary.light,\n }),\n focused: Styles.createViewStyle({\n backgroundColor: Light.listItemFocusBackground,\n }),\n focusedAndSelected: Styles.createViewStyle({\n backgroundColor: Light.listItemFocusSelectedBackground,\n }),\n inner: Styles.createViewStyle({\n flex: 1,\n flexDirection: 'row',\n justifyContent: 'flex-start',\n position: 'relative',\n }),\n name: Styles.createTextStyle({\n color: 'transparent',\n lineHeight: 32,\n marginLeft: 24,\n fontSize: 14,\n }),\n nameSelected: Styles.createTextStyle({\n color: Light.listItemSelectText,\n }),\n check: Styles.createViewStyle({\n position: 'absolute',\n left: 8,\n top: 8,\n }),\n bar: Styles.createViewStyle({\n position: 'absolute',\n right: 0,\n left: 0,\n height: 34,\n opacity: 0,\n flex: 1,\n borderWidth: 1,\n borderColor: 'transparent',\n }),\n barSelected: Styles.createViewStyle({\n backgroundColor: Light.listItemSelectBackground,\n borderColor: Light.listItemSelectBorder,\n }),\n visible: Styles.createViewStyle({\n opacity: 1,\n }),\n anchor: Styles.createViewStyle({\n top: 0,\n left: 0,\n width: 1,\n height: 1,\n position: 'absolute',\n backgroundColor: 'rgba(0, 0, 0, 0)',\n }),\n};\n","import React, {useState, useCallback, useMemo} from 'react';\nimport isEqual from 'react-fast-compare';\nimport {Dispatch} from '@reduxjs/toolkit';\nimport {Styles, View} from 'react-ult';\nimport {\n VirtualListView,\n VirtualListViewCellRenderDetails,\n VirtualListViewItemInfo,\n} from 'react-ult-ext-virtuallistview';\nimport {\n FilesGridRow,\n FilesGridRowProps,\n FilesGridItemNormal,\n} from 'view/FilesGridItem';\nimport {isTouch} from 'features/platform';\nimport * as effects from 'store/files/effects';\nimport {Light, Breakpoints} from 'features/themes';\nimport * as MF from 'globals/types';\n\nexport interface FilesGridProps {\n dispatch: Dispatch;\n id: string;\n name: string;\n sort: MF.FilesStore['sort'];\n filter: MF.FilesStore['filter'];\n items: {[id: string]: MF.FilesItem};\n view: {files: string[], folders: string[]};\n viewport: {width: number, height: number};\n dragging: string[];\n selection: string[];\n isPremium: boolean;\n isSearch: boolean;\n focusId?: string;\n primaryColor?: string;\n maxheight?: number;\n maxwidth?: number;\n hasFolderTree?: boolean;\n hasPrivateSelection?: boolean;\n foreign?: boolean;\n}\n\nexport const FilesGrid = React.memo(function FilesGrid(props: FilesGridProps) {\n const {id, name, sort, filter, viewport, view, items, selection, dragging, focusId, primaryColor, isPremium} = props;\n const [stateDrop, setDrop] = useState(0);\n const hasTouch = isTouch();\n const isOwned = !props.foreign;\n const isTrash = props.id === 'trash';\n const isSearch = props.id === 'search';\n const isLargeRow = hasTouch || !isOwned;\n const heightHeader = isOwned ? isLargeRow ? 142 : 120 : 160;\n const maxHeight = props.maxheight || viewport.height - heightHeader;\n const maxWidth = props.maxwidth\n ? Math.min(viewport.width, props.maxwidth)\n : viewport.width - (viewport.width > Breakpoints.menu ? props.hasFolderTree ? 420 : 220 : 0);\n const columns = Math.floor(maxWidth / FilesGridItemNormal);\n const styleHeight = Styles.createScrollViewStyle({maxHeight, maxWidth, overflow: 'visible'}, false);\n const dispatch = props.dispatch;\n const drop = useCallback(effects.dragDrop(dispatch, setDrop, id, name), [setDrop, id, name]);\n const dragEnter = useCallback(effects.dragEnter(setDrop, stateDrop), [setDrop, stateDrop]);\n const dragLeave = useCallback(effects.dragLeave(setDrop, stateDrop), [setDrop, stateDrop]);\n const dragOver = useCallback(effects.dragOver(), []);\n const focus = useCallback(effects.listFocus(dispatch), []);\n\n const render = useCallback((e: VirtualListViewCellRenderDetails) =>\n , []);\n\n const prepareRows = (list: string[]) => {\n const grid = [];\n list.forEach((key, i) => {\n const row = Math.floor(i / columns);\n const column = i % columns;\n const item = {\n isPremium,\n id: key && items[key] ? items[key].id : null,\n url: key && items[key] ? items[key].url : '',\n name: key && items[key] ? items[key].name : '',\n description: key && items[key] ? items[key].description : '',\n hash: key && items[key] ? items[key].hash : '',\n type: key && items[key] ? items[key].type : '',\n flag: key && items[key] ? items[key].flag : 0,\n size: key && items[key] ? items[key].size : 0,\n time: key && items[key] && (items[key].deleted || items[key].created),\n shared: key && items[key] && items[key].shared,\n parentKey: isSearch ? key && items[key] && items[key].parentKey : '',\n parentName: isSearch ? key && items[key] && items[key].parentName : '',\n files: key && items[key] ? items[key].files : 0,\n folders: key && items[key] ? items[key].folders : 0,\n downloads: key && items[key] ? items[key].downloads : 0,\n password: key && items[key] ? items[key].password : false,\n private: key && items[key] ? items[key].private : false,\n filedrop: key && items[key] ? items[key].filedrop : false,\n uploadStatus: key && items[key] ? items[key].uploadStatus : '',\n uploadHashed: key && items[key] ? items[key].uploadHashed : 0,\n uploadProgress: key && items[key] ? items[key].uploadProgress : 0,\n };\n if (!grid[row]) {\n grid[row] = {\n // Virtual list item props\n key: row,\n isNavigable: true,\n height: FilesGridItemNormal,\n // File list item props\n context: [],\n opts: {\n dispatch,\n dragging,\n selection,\n focusId,\n sort,\n filter,\n primaryColor,\n isTrash,\n hasPrivateSelection: props.hasPrivateSelection,\n },\n }\n for (let i = 0; i < columns; i++) {\n grid[row].context[i] = null;\n }\n }\n grid[row].context[column] = item;\n });\n return grid;\n };\n\n const itemList = useMemo(() =>\n view ? prepareRows([\n ...Array.from(new Set(view.folders)),\n ...Array.from(new Set(view.files)),\n ]) : []\n , [view, items, selection, dragging, focusId]);\n\n // Reset scroll position when changing folders\n const mount = useCallback((e?: VirtualListView) => {\n e && e.scrollToTop(false, 0);\n }, [id]);\n\n return view ? (\n \n \n \n ) : null;\n}, (prev, next) => isEqual(prev, next));\n\nexport const styles = {\n root: Styles.createViewStyle({\n flex: 1,\n backgroundColor: Light.filesBackground,\n }),\n};\n","import {t} from '@lingui/macro';\nimport React, {useCallback, useState, useRef} from 'react';\nimport {useDispatch} from 'react-redux';\nimport {Styles, View, Text, Button} from 'react-ult';\nimport {Light} from 'features/themes';\nimport {isTouch} from 'features/platform';\nimport * as effects from 'store/files/effects';\n\nexport interface Props {\n id: string;\n name: string;\n active?: boolean;\n}\n\nexport function FilesPathItem(props: Props) {\n const [stateDrop, setDrop] = useState(0);\n const anchor = useRef(null);\n const hasTouch = isTouch();\n const isActive = props.active;\n const isDropping = stateDrop > 0;\n const classes = {\n root: [\n styles.root,\n hasTouch && styles.touch,\n ],\n title: [\n styles.title,\n isActive && styles.active,\n isDropping && styles.drop,\n hasTouch && styles.touchText,\n ]\n };\n\n const dispatch = useDispatch();\n const navigate = useCallback(effects.navigate(dispatch, props.id), [props.id]);\n const dragOver = useCallback(effects.dragOver(), []);\n const dragEnter = useCallback(effects.dragEnter(setDrop, stateDrop), [setDrop, stateDrop]);\n const dragLeave = useCallback(effects.dragLeave(setDrop, stateDrop), [setDrop, stateDrop]);\n const dragDrop = useCallback(effects.dragDrop(dispatch, setDrop, props.id, props.name), [setDrop, props.id, props.name]);\n\n return (\n \n \n \n {props.name}\n \n \n \n );\n}\n\nexport const styles = {\n root: Styles.createViewStyle({\n flex: 1,\n justifyContent: 'center',\n alignContent: 'center',\n alignItems: 'center',\n }),\n touch: Styles.createViewStyle({\n height: 54,\n }),\n touchText: Styles.createTextStyle({\n fontSize: 14,\n }),\n button: Styles.createViewStyle({\n marginRight: 8,\n }),\n title: Styles.createTextStyle({\n fontSize: 12,\n lineHeight: 32,\n paddingHorizontal: 8,\n color: Light.breadcrumbsText,\n }),\n drop: Styles.createTextStyle({\n backgroundColor: Light.listItemDropBackground,\n }),\n active: Styles.createTextStyle({\n opacity: 1,\n }),\n};\n","import {t} from '@lingui/macro';\nimport React, {useCallback} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {Fragment, Styles, View, Button, Text, ScrollView} from 'react-ult';\nimport {default as Svg, SvgPath} from 'react-ult-ext-imagesvg';\nimport {useModalShare} from 'hooks/useModalShare';\nimport {FilesPathItem} from 'view/FilesPathItem';\nimport {Light, Vectors, Colors} from 'features/themes';\nimport {isTouch, isNative} from 'features/platform';\nimport {selectors} from 'store/files';\n\nimport * as filesEffects from 'store/files/effects';\n\nexport interface Props {\n id: string;\n searchQuery?: string;\n isMinimal?: boolean;\n}\n\nexport function FilesPath(props: Props) {\n const folder = useSelector(selectors.getItem(props.id));\n const hasTouch = isTouch();\n const isTrash = props.id === 'trash';\n const isRecent = props.id === 'recent';\n const isFollowing = props.id === 'following';\n const isSearch = !!props.searchQuery;\n const isSpecial = isTrash || isRecent || isFollowing || isSearch;\n const iconBox = isFollowing ? '0 0 24 24' : '0 0 20 20';\n const iconSize = hasTouch ? 18 : 16;\n const iconRoot = Vectors.iconHome;\n const hasDepth = folder && folder.hierarchy && folder.hierarchy.length;\n const root = isTrash\n ? {id: 'trash', name: t`Trash`}\n : isFollowing\n ? {id: 'following', name: t`Following files lets you get updates and collaborate with friends.`}\n : isRecent\n ? {id: 'recent', name: t`Recent Files`}\n : {id: 'myfiles', name: t`My Files`};\n const classes = {\n outer: [\n styles.outer,\n hasTouch && styles.outerLarge,\n ],\n root: [\n hasTouch ? styles.rootLarge : styles.root,\n !isNative() && (hasTouch\n ? Styles.createScrollViewStyle({['display' as any]: 'flex'}, false)\n : Styles.createScrollViewStyle({['overflowX' as any]: 'hidden'}, false)),\n ],\n paths: [\n styles.paths,\n hasTouch && styles.pathsLarge,\n ],\n text: [\n styles.myfiles,\n hasTouch && styles.myfilesLarge,\n isSpecial && styles.specialText,\n ],\n iconHome: [\n styles.iconHome,\n hasDepth && styles.iconHomeDepth,\n ],\n buttonHome: [\n styles.buttonHome,\n hasTouch && styles.buttonHomeTouch,\n ],\n buttonShare: [\n styles.buttonShare,\n hasTouch && styles.buttonShareTouch,\n ],\n };\n\n const url = folder ? folder.url : undefined;\n const name = folder ? folder.name : undefined;\n\n const dispatch = useDispatch();\n const goHome = useCallback(filesEffects.navigate(dispatch, root.id), [root.id]);\n const [showShare] = useModalShare(dispatch, [props.id], name, url);\n\n return (\n \n {isSearch &&\n \n {t`Showing results for “${props.searchQuery}”`}\n \n }\n {isRecent &&\n \n {t`Recent files`}\n \n }\n {isFollowing &&\n \n {t`Shared with me`}\n \n }\n {isTrash &&\n \n {t`Trash folder`}\n \n }\n \n {!isSearch && !isSpecial &&\n \n \n \n \n {!hasDepth &&\n \n {root.name}\n \n }\n \n }\n {!isSearch && folder && folder.hierarchy &&\n \n {[[root.id, root.name], ...folder.hierarchy].map((item, i, paths) => {\n const first = i === 0;\n const last = i === paths.length - 1;\n return (\n \n {!first &&\n \n }\n {!last &&\n \n \n \n }\n {last && !first &&\n \n \n {t`Share this folder`}\n \n \n }\n \n )\n })}\n \n }\n \n \n );\n}\n\nexport const styles = {\n outer: Styles.createViewStyle({\n flexDirection: 'row',\n flex: 0,\n height: 42,\n borderTopWidth: 1,\n borderBottomWidth: 1,\n borderColor: Light.breadcrumbsBorder,\n backgroundColor: Light.breadcrumbsBackground,\n justifyContent: 'flex-start',\n alignContent: 'center',\n alignItems: 'center',\n }),\n outerLarge: Styles.createViewStyle({\n height: 54,\n }),\n root: Styles.createScrollViewStyle({\n flex: 1,\n flexDirection: 'row',\n overflow: 'hidden',\n height: 42,\n }),\n rootLarge: Styles.createScrollViewStyle({\n flex: 1,\n flexDirection: 'row',\n overflow: 'hidden',\n height: 54,\n }),\n myfilesLarge: Styles.createTextStyle({\n fontSize: 14,\n }),\n paths: Styles.createViewStyle({\n flex: 0,\n flexDirection: 'row',\n alignItems: 'center',\n height: 42,\n }),\n pathsLarge: Styles.createViewStyle({\n height: 54,\n marginBottom: 0,\n }), \n myfiles: Styles.createTextStyle({\n fontSize: 12,\n color: Light.breadcrumbsText,\n paddingHorizontal: 8,\n }),\n specialText: Styles.createTextStyle({\n marginLeft: 12,\n }),\n divider: Styles.createViewStyle({\n marginTop: 4,\n }),\n iconHome: Styles.createViewStyle({\n marginLeft: 12,\n }),\n iconHomeDepth: Styles.createViewStyle({\n marginRight: 12,\n }),\n buttonHome: Styles.createButtonStyle({\n height: 42,\n flexDirection: 'row',\n justifyContent: 'center',\n alignContent: 'center',\n alignItems: 'center',\n }),\n buttonHomeTouch: Styles.createButtonStyle({\n height: 54,\n }),\n textShare: Styles.createTextStyle({\n color: Colors.neutral.mid,\n fontSize: 11,\n }),\n buttonShare: Styles.createButtonStyle({\n paddingHorizontal: 12,\n paddingVertical: 4,\n marginRight: 14,\n marginBottom: 2,\n borderRadius: 20,\n borderWidth: 1,\n borderColor: Light.breadcrumbsShareBorder,\n backgroundColor: Light.breadcrumbsShareBackground,\n shadowOffset: {width: 0, height: 1},\n shadowColor: 'rgba(0,0,0,0.2)',\n }),\n buttonShareTouch: Styles.createButtonStyle({\n paddingVertical: 6,\n }),\n};\n","import {t} from '@lingui/macro';\nimport isEqual from 'react-fast-compare';\nimport React, {useCallback, useState, useRef, useEffect} from 'react';\nimport {useSelector, useDispatch} from 'react-redux';\nimport {Styles, View, Button, Link, Text, TextInput, Image, Modal, StatusBar} from 'react-ult';\nimport {default as Svg, SvgPath} from 'react-ult-ext-imagesvg';\nimport {SafeAreaView} from 'controls/SafeArea';\nimport {IconButton} from 'controls/IconButton';\nimport {useMenuSort} from 'hooks/useMenuSort';\nimport {useMenuFiles} from 'hooks/useMenuFiles';\nimport {useMenuFilter} from 'hooks/useMenuFilter';\nimport {useModalShare} from 'hooks/useModalShare';\nimport {useModalPurge} from 'hooks/useModalPurge';\nimport {useModalPrivate} from 'hooks/useModalPrivate';\nimport {useModalCreateFolder} from 'hooks/useModalCreateFolder';\nimport {FilesModalBulkDownload, modalFilesBulkDownload} from 'view/modals/FilesModalBulkDownload';\nimport {Colors, Breakpoints, Vectors, Light} from 'features/themes';\nimport {FilesItemFlag} from 'globals/types';\nimport {SCOPE} from 'globals/config';\nimport {isFolderkey, isQuickkey, getShareLink} from 'features/mediafire';\nimport {getHost} from 'features/platform';\nimport {testBit, luminance} from 'features/common';\nimport images from 'features/images';\nimport device from 'features/device';\nimport {selectors} from 'store/files';\nimport * as app from 'store/app';\nimport * as appEffects from 'store/app/effects';\nimport * as filesEffects from 'store/files/effects';\n\nexport const filesBarHeight = 65;\n\nexport interface FilesBarProps {\n id: string;\n}\n\nexport const FilesBar = React.memo(function FilesBar(props: FilesBarProps) {\n // Local state\n const anchorMenuFiles = useRef();\n const anchorMenuFilesAlt = useRef();\n const anchorMenuSort = useRef();\n const anchorMenuFilter = useRef();\n const anchorMenuSortAlt = useRef();\n const anchorMenuFilterAlt = useRef();\n const [stateSearch, setSearch] = useState('');\n // Global state\n const isLoggedIn = useSelector(app.selectors.isLoggedIn);\n const isPremium = useSelector(app.selectors.isPremium);\n const viewport = useSelector(app.selectors.getViewport);\n const header = useSelector(app.selectors.getHeader);\n const avatar = useSelector(app.selectors.getAvatar);\n const trash = useSelector(selectors.getView('trash'));\n const trashIds = trash ? [...trash.files, ...trash.folders] : [];\n const isSearch = useSelector(selectors.isSearch);\n const layout = useSelector(selectors.getLayout);\n const filter = useSelector(selectors.getFilter);\n const sort = useSelector(selectors.getSort);\n const selection = useSelector(selectors.getSelection);\n const folder = useSelector(selectors.getItem(props.id));\n const upload = useSelector(selectors.getUpload);\n const selectItem = useSelector(selectors.getItem(selection[0]));\n const hasPrivate = useSelector(selectors.hasPrivateItems(selection));\n // Computed state\n const host = getHost();\n const isDarkMode = device.isDarkMode();\n const isDefaultAvatar = avatar && avatar.indexOf('/myfiles/default.png') !== -1;\n const imageAvatar = (isDefaultAvatar || !avatar) ? images.avatar : avatar;\n const itemUrl = selectItem ? getShareLink(selectItem.id, selectItem.type, selectItem.name) : '';\n const isRoot = props.id === 'myfiles';\n const isTrash = props.id === 'trash';\n const isRecent = props.id === 'recent';\n const isFollowing = props.id === 'following';\n const isLimited = isRecent || isFollowing;\n const isSpecial = isRoot || isTrash || isRecent || isFollowing;\n const isOwned = folder && testBit(folder.flag, FilesItemFlag.isOwned);\n const isShared = !isSpecial && folder && !isOwned;\n const isModeSelect = selection.length > 0;\n const isModeSearch = !isModeSelect && isSearch;\n const isModeTrash = !isModeSelect && isTrash;\n const isModeShared = !isModeSelect && !isModeTrash && isShared;\n const isModeNormal = !isModeSelect && !isModeSearch && !isModeShared && !isModeTrash;\n const hasCustomLogo = header && !!header.logo;\n const hasCustomHeader = header && header.custom;\n\n\n const files = selection.filter(id => isQuickkey(id));\n const folders = selection.filter(id => isFolderkey(id));\n const hasFolders = folders.length > 0;\n const hasFiles = files.length > 0;\n const hasMixed = hasFiles && hasFolders;\n const hasMultiple = selection.length > 1;\n\n const hasFolder = isFolderkey(selection[0]);\n const hasMenu = viewport.width <= Breakpoints.menu;\n const hasLogo = viewport.width >= 320;\n const hasSort = viewport.width >= 388;\n const hasFilter = viewport.width >= 450;\n const hasFullLogo = !isModeSelect && viewport.width >= 1024;\n const hasFullText = viewport.width >= 860;\n const hasCopyLink = viewport.width >= 400 && !hasPrivate;\n const hasSelected = viewport.width >= 320;\n const isMinimal = viewport.width < 600;\n const isLight = header && header.theme.header === 'light';\n const opacityButton = !hasCustomHeader ? 1.0 : 0.6;\n const opacityLogo = (!hasCustomHeader && !isModeSelect)\n || (isModeSelect && isDarkMode)\n || isModeTrash\n ? 1.0\n : 0.6;\n const iconColorLogoText = isModeShared\n ? Colors.primary.dark\n : isModeTrash\n ? Colors.neutral.white\n : isModeSelect\n ? isDarkMode\n ? Colors.neutral.white\n : Colors.neutral.black\n : hasCustomHeader\n ? isLight\n ? Colors.neutral.white\n : Colors.neutral.black\n : Colors.neutral.white;\n const iconColorLogoFlame = isModeShared\n ? Light.logoColor\n : iconColorLogoText;\n const iconColor = hasCustomHeader\n ? isLight ? Colors.neutral.white : Colors.neutral.black\n : Colors.primary.light;\n const iconColorAlpha = hasCustomHeader\n ? isLight ? `rgba(255,255,255,0.4)` : `rgba(0,0,0,0.4)`\n : `rgba(255,255,255,0.4)`;\n const iconSelectColor = isDarkMode\n ? Colors.neutral.white\n : Colors.neutral.black;\n const iconSelectOpacity = isDarkMode\n ? 1\n : 0.5;\n const primaryColor = header\n ? header.colors.primary\n : Light.logoColor;\n const viewIcon = layout === 'list'\n ? Vectors.iconGrid\n : Vectors.iconList;\n const headerColor = hasCustomHeader\n ? header.colors.header\n : Light.logoColor;\n // Computed styles\n const classes = {\n root: [\n styles.root,\n hasCustomHeader && Styles.createViewStyle({backgroundColor: headerColor}, false),\n isModeShared && styles.rootShared,\n isModeTrash && styles.rootTrash,\n isModeSelect && styles.rootSelect,\n isModeSelect && isShared && styles.rootSharedSelect,\n ],\n selectButton: [\n styles.selectButton,\n !hasFullText && styles.noMarginLeft,\n ],\n buttonText: [\n styles.buttonText,\n isModeSelect && styles.buttonTextSelect,\n isModeSelect && isDarkMode && styles.buttonTextSelectDark,\n ],\n searchInput: [\n styles.searchInput,\n Styles.createTextInputStyle({color: iconColor, backgroundColor: headerColor}, false),\n ],\n signup: [\n styles.signup,\n hasCustomHeader && Styles.createLinkStyle({backgroundColor: headerColor}, false),\n ],\n };\n\n const hoverStyle = Styles.createButtonStyle({\n backgroundColor: isModeSelect && !isDarkMode\n ? Light.listItemSelectBorder\n : luminance(primaryColor, -0.2),\n }, false);\n\n const url = hasMultiple ? `${getHost(true)}/folder${SCOPE}${selection.join(',')}/shared` : itemUrl;\n const name = hasMultiple ? t`Multiple Items` : selectItem?.name;\n\n // Actions\n const dispatch = useDispatch();\n const [showCreateFolder] = useModalCreateFolder(props.id);\n const [showShare] = useModalShare(dispatch, selection, name, url);\n const [showPurge] = useModalPurge(selection.length > 0 ? selection : trashIds, dispatch);\n const [showPrivate] = useModalPrivate(selection, dispatch);\n const openMenu = useCallback(appEffects.menuOpen(dispatch), []);\n const myfiles = useCallback(filesEffects.navigate(dispatch, 'myfiles'), []);\n const toggleLayout = useCallback(filesEffects.layout(dispatch), []);\n const selectClear = useCallback(filesEffects.selectClear(dispatch, null), []);\n const searchOpen = useCallback(filesEffects.search(dispatch, 'myfiles'), []);\n const searchSubmit = useCallback(filesEffects.search(dispatch, 'myfiles', stateSearch), [stateSearch]);\n const searchClose = useCallback(filesEffects.search(dispatch, null), []);\n const uploadStart = useCallback(filesEffects.uploadStart(dispatch, props.id), [props.id]);\n const uploadMaximize = useCallback(filesEffects.uploadMinimize(dispatch, false), []);\n const copy = useCallback(filesEffects.copyLink2(dispatch, selection, selectItem ? selectItem.url : ''), [selection, selectItem]);\n const restore = useCallback(filesEffects.pick(dispatch, {action: 'restore', destination: 'myfiles', ids: selection.length > 0 ? selection : trashIds}), [selection, trashIds]);\n const download = useCallback(filesEffects.downloadFile(itemUrl), [itemUrl]);\n\n const bulkDownload = useCallback(() => Modal.show(\n \n , modalFilesBulkDownload), [selection]);\n\n const [showMenuSort] = useMenuSort(props.id, sort, filter, filesEffects.sort(dispatch, props.id), anchorMenuSort.current || anchorMenuSortAlt.current);\n const [showMenuFilter] = useMenuFilter(props.id, sort, filter, filesEffects.filter(dispatch, props.id), anchorMenuFilter.current || anchorMenuFilterAlt.current);\n const [showMenuFiles] = useMenuFiles(\n selection,\n selectItem,\n {\n isPremium,\n isMinimal,\n hasPrivate,\n primaryColor,\n },\n dispatch,\n anchorMenuFiles.current || anchorMenuFilesAlt.current,\n );\n\n const downloadSelection = hasMultiple || hasFolder\n ? bulkDownload\n : download;\n \n useEffect(() => {\n const style = isModeTrash\n ? 'light-content'\n : isModeSelect\n ? 'dark-content'\n : !hasCustomHeader\n ? 'light-content'\n : isLight\n ? 'light-content'\n : 'dark-content';\n StatusBar.setBarStyle(style, false);\n }, [isLoggedIn, isModeNormal, isModeTrash, isModeSelect, hasCustomHeader, isLight]);\n\n return (\n \n \n {hasLogo && !isModeSearch &&\n \n {!hasCustomLogo && hasFullLogo &&\n \n \n {Vectors.logoFull.map((d,i) =>\n \n )}\n \n }\n {!hasCustomLogo && !hasFullLogo &&\n \n \n \n }\n {hasCustomLogo &&\n
\n }\n \n }\n {isModeNormal &&\n \n \n {!isLimited &&\n \n \n \n }\n />\n }\n {hasSort && !isLimited &&\n \n \n \n }\n />\n }\n {hasFilter && !isLimited &&\n \n \n \n }\n />\n }\n {!isLimited &&\n \n \n \n }\n />\n }\n {!isLimited &&\n \n \n \n }\n />\n }\n {!hasMenu &&\n \n \n \n }\n />\n }\n {hasMenu &&\n \n \n \n }\n />\n }\n \n }\n {isModeSearch &&\n \n \n \n \n \n \n \n \n \n \n \n \n }\n />\n \n }\n {isModeSelect &&\n \n {hasSelected &&\n \n \n {hasFullText\n ? t`${selection.length} ${hasMultiple ? 'items' : 'item'} selected`\n : selection.length}\n \n \n \n \n \n \n }\n \n {!isTrash && hasCopyLink &&\n \n \n \n }\n />\n }\n {!hasMixed && !isTrash &&\n \n \n \n }\n />\n }\n {!isTrash &&\n \n \n \n }\n />\n }\n {isTrash &&\n \n \n \n }\n />\n }\n {isTrash &&\n \n \n \n }\n />\n }\n \n \n \n }\n />\n \n }\n {isModeTrash &&\n \n \n \n \n \n }\n />\n \n \n \n }\n />\n {hasMenu &&\n \n \n \n }\n />\n }\n \n }\n {isModeShared &&\n \n \n {isLoggedIn &&\n \n \n \n }\n {!isLoggedIn &&\n \n \n {t`SIGN UP`}\n \n \n {t`LOG IN`}\n \n \n }\n \n }\n \n \n \n \n \n );\n}, (prev, next) => isEqual(prev, next));\n\nexport const styles = {\n root: Styles.createViewStyle({\n height: 65,\n flexDirection: 'row',\n alignItems: 'center',\n backgroundColor: Light.logoColor,\n }),\n actions: Styles.createViewStyle({\n flex: 1,\n height: 65,\n paddingRight: 6,\n paddingVertical: 12,\n flexDirection: 'row',\n alignSelf: 'flex-end',\n alignItems: 'center',\n }),\n desktopUpload: Styles.createViewStyle({\n flex: 0,\n }),\n spacer: Styles.createViewStyle({\n flex: 1,\n }),\n logo: Styles.createViewStyle({\n flex: 0,\n maxWidth: 800,\n }),\n vector: Styles.createViewStyle({\n marginLeft: 16,\n }),\n button: Styles.createButtonStyle({\n minWidth: 60,\n paddingHorizontal: 12,\n alignItems: 'center',\n flexDirection: 'row',\n }),\n buttonText: Styles.createTextStyle({\n color: Colors.primary.light,\n fontSize: 13,\n }),\n buttonTextSelect: Styles.createTextStyle({\n color: Colors.neutral.mid,\n }),\n buttonTextSelectDark: Styles.createTextStyle({\n color: Colors.neutral.white,\n }),\n avatar: Styles.createButtonStyle({\n width: 65,\n height: 65,\n }),\n anchor: Styles.createViewStyle({\n height: 1,\n width: 1,\n opacity: 0,\n position: 'absolute',\n right: 238,\n top: 54,\n }),\n anchorSort: Styles.createViewStyle({\n right: 333,\n }),\n anchorFiles: Styles.createViewStyle({\n right: undefined,\n left: 188,\n }),\n // Search\n search: Styles.createViewStyle({\n flex: 1,\n }),\n searchIcon: Styles.createButtonStyle({\n justifyContent: 'center',\n alignItems: 'center',\n width: 54,\n }),\n searchInput: Styles.createTextInputStyle({\n color: Colors.neutral.white,\n borderColor: Colors.neutral.white,\n borderBottomWidth: 2,\n fontSize: 18,\n flex: 1,\n }),\n // Select\n rootSelect: Styles.createViewStyle({\n backgroundColor: Light.listItemSelectBackground,\n }),\n selectButton: Styles.createButtonStyle({\n flexDirection: 'row',\n alignItems: 'center',\n padding: 8,\n minWidth: 60,\n height: 65,\n }),\n noMarginLeft: Styles.createButtonStyle({\n marginLeft: 0,\n }),\n text: Styles.createTextStyle({\n color: Colors.neutral.mid,\n fontSize: 12,\n margin: 8,\n }),\n icon: Styles.createViewStyle({\n alignContent: 'center',\n justifyContent: 'center',\n alignItems: 'center',\n }),\n iconCopy: Styles.createViewStyle({\n marginTop: 8,\n }),\n iconDownload: Styles.createViewStyle({\n marginTop: 4,\n }),\n selected: Styles.createViewStyle({\n flexDirection: 'row',\n alignContent: 'center',\n justifyContent: 'center',\n alignItems: 'center',\n backgroundColor: Light.listItemSelectBackground,\n borderColor: Light.barSelectButtonBorder,\n borderWidth: 1,\n height: 30,\n marginVertical: 18,\n marginRight: 4,\n marginLeft: 10,\n borderRadius: 18,\n paddingHorizontal: 7,\n }),\n selectedText: Styles.createTextStyle({\n paddingHorizontal: 6,\n color: Light.menuHeaderMultiText,\n fontSize: 11,\n }),\n // Trash\n rootTrash: Styles.createViewStyle({\n backgroundColor: Colors.secondary.redOrange,\n }),\n buttonTrashHover: Styles.createButtonStyle({\n backgroundColor: luminance(Colors.secondary.redOrange, -0.2),\n }),\n // Shared\n rootShared: Styles.createViewStyle({\n backgroundColor: Colors.neutral.white,\n borderColor: Colors.neutral.lighter,\n borderBottomWidth: 1,\n }),\n rootSharedSelect: Styles.createViewStyle({\n borderColor: Light.listItemSelectBackground,\n borderBottomWidth: 1,\n }),\n imageAvatar: Styles.createImageStyle({\n height: 48,\n width: 48,\n borderRadius: 3,\n }),\n iconMenu: Styles.createImageStyle({\n height: 12,\n }),\n authMenu: Styles.createViewStyle({\n height: 65,\n flexDirection: 'row',\n alignItems: 'center',\n alignContent: 'center',\n justifyContent: 'center',\n }),\n signup: Styles.createLinkStyle({\n height: 36,\n marginLeft: 4,\n marginRight: 8,\n paddingHorizontal: 16,\n fontSize: 12,\n lineHeight: 36,\n borderRadius: 3,\n backgroundColor: Light.logoColor,\n color: Colors.neutral.white,\n }),\n login: Styles.createLinkStyle({\n height: 36,\n marginLeft: 4,\n marginRight: 16,\n paddingHorizontal: 16,\n fontSize: 12,\n lineHeight: 32,\n borderWidth: 2,\n borderRadius: 3,\n borderColor: Colors.neutral.lighter,\n backgroundColor: Colors.neutral.white,\n color: Colors.neutral.mid,\n }),\n};\n","import {t} from '@lingui/macro';\nimport React, {useState, useCallback, useEffect} from 'react';\nimport {Styles, View, Text, Image, Modal, ActivityIndicator, Storage} from 'react-ult';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {default as Svg, SvgPath} from 'react-ult-ext-imagesvg';\nimport {useModalCreateFolder} from 'hooks/useModalCreateFolder';\nimport {useModalUpsellProTrial} from 'hooks/useModalUpsellProTrial';\nimport {useModalUpdatePayment} from 'hooks/useModalUpdatePayment';\nimport {useModalCustomAlert} from 'hooks/useModalCustomAlert';\nimport {FilesModalWelcome, modalFilesWelcome} from 'view/modals/FilesModalWelcome';\nimport {FilesNavigator} from 'view/FilesNavigator';\nimport {FilesHeader} from 'view/FilesHeader';\nimport {FilesList} from 'view/FilesList';\nimport {FilesGrid} from 'view/FilesGrid';\nimport {FilesPath} from 'view/FilesPath';\nimport {FilesBar} from 'view/FilesBar';\nimport {Light, Colors, Breakpoints, Vectors} from 'features/themes';\nimport {FilesItemFlag} from 'globals/types';\nimport {isTouch} from 'features/platform';\nimport {testBit} from 'features/common';\nimport device from 'features/device';\nimport images from 'features/images';\nimport {selectors} from 'store/files';\nimport * as effects from 'store/files/effects';\nimport * as app from 'store/app';\n\nexport interface FilesProps {\n browser: string;\n content: string;\n}\n\nexport const Files = React.memo(function Files(props: FilesProps) {\n const [stateDrop, setDrop] = useState(0);\n const isTrial = useSelector(app.selectors.isTrial);\n const isPremium = useSelector(app.selectors.isPremium);\n const isBusiness = useSelector(app.selectors.isBusiness);\n const isLoggedIn = useSelector(app.selectors.isLoggedIn);\n const viewport = useSelector(app.selectors.getViewport);\n const header = useSelector(app.selectors.getHeader);\n const layout = useSelector(selectors.getLayout);\n const query = useSelector(selectors.getQuery);\n const items = useSelector(selectors.getItems);\n const dragging = useSelector(selectors.getDrag);\n const focused = useSelector(selectors.getFocused);\n const selection = useSelector(selectors.getSelection);\n const folder = useSelector(selectors.getItem(props.content));\n const browsed = useSelector(selectors.getItem(props.browser));\n const browser = useSelector(selectors.getView(props.browser));\n const view = useSelector(selectors.getView(props.content));\n const search = useSelector(selectors.getView('search'));\n const recent = useSelector(selectors.getView('recent'));\n const following = useSelector(selectors.getView('following'));\n const hasPrivateSelection = useSelector(selectors.hasPrivateItems(selection));\n const isSearch = useSelector(selectors.isSearch);\n const filter = useSelector(selectors.getFilter);\n const sort = useSelector(selectors.getSort);\n const hasTouch = isTouch();\n const isDarkMode = device.isDarkMode();\n const isRoot = props.content === 'myfiles';\n const isTrash = props.content === 'trash';\n const isRecent = props.content === 'recent';\n const isFollowing = props.content === 'following';\n const isSpecial = isRoot || isFollowing || isRecent || isTrash;\n const isShared = !isSpecial && folder && !testBit(folder.flag, FilesItemFlag.isOwned);\n const isOwned = isLoggedIn && !isShared;\n const isMinimal = viewport.width < 600;\n const hasFullDialog = viewport.width > 600;\n const hasWelcomeDialog = isOwned && !hasTouch && viewport.width >= 800;\n const hasTrialDialog = isOwned && !hasTouch && !isPremium && !isTrial && viewport.width > 600;\n const isLargeScreen = viewport.width > 1120 && viewport.height > 540;\n const isGrid = (layout === 'grid') && !isTrash;\n const sizeActual = view ? view.files.length + view.folders.length : 0;\n const sizeExpected = folder ? (filter.type === 'all' || !view ? folder.files : view.files.length) + (filter.type === 'all' || !view ? folder.folders : view.folders.length) : 0;\n const sizeActualBrowser = browser ? browser.files.length + browser.folders.length : 0;\n const colorPrimary = header ? header.colors.primary : Colors.primary.brand;\n const isLoadingFolder = isRecent ? !recent : isFollowing ? !following : (!folder || sizeActual === 0 && sizeExpected > 0);\n const isLoadingFolderBrowser = !folder || sizeActualBrowser === 0 && (filter.type === 'all' || !browser ? (browsed ? browsed.files + browsed.folders : 0) > 0 : sizeActualBrowser > 0);\n const isLoadingSearch = isSearch && !search && query;\n const hasBreadcrumbs = isOwned;\n const hasHeader = !isOwned && !isTrash && !isLoadingFolder;\n const hasEmptyFolder = !isLoadingFolder && (folder || ((isFollowing || isRecent || isShared) && sizeActual === 0)) && sizeExpected === 0 && !query;\n const hasFolderTree = filter.type !== 'files' && (viewport.width > (isGrid ? Breakpoints.menu : 480)) && isOwned && !hasTouch && !query && !isRecent && !isTrash && !isFollowing;\n const hasEmptyFolderBrowser = !isLoadingFolderBrowser && browsed && browsed.folders === 0;\n const hasEmptySearch = isSearch && !isLoadingSearch && search && (search.files.length === 0 && search.folders.length === 0);\n const hasEmptyUploadTip = !isDarkMode && isLargeScreen && !isTrash && !isRecent && !isShared && !isFollowing;\n const hasListFolder = !isLoadingFolder && !hasEmptyFolder && !query;\n const hasListSearch = !isTrash && !isFollowing && !isLoadingFolder && !hasEmptySearch && !hasListFolder && search;\n const hasSpinner = isLoadingFolder || isLoadingSearch;\n const classes = {\n content: [\n styles.content,\n !isOwned && styles.shared,\n isMinimal && styles.minimal,\n ],\n uploadTip: [\n styles.uploadTip,\n hasEmptyUploadTip && styles.dragDrop,\n ],\n header: [\n styles.header,\n !hasEmptyUploadTip && styles.dragDropHeader,\n ],\n };\n\n const dispatch = useDispatch();\n\n const [showCustomAlert] = useModalCustomAlert();\n const [showPaymentUpdate] = useModalUpdatePayment();\n const [showCreateFolder] = useModalCreateFolder(props.browser);\n const [showTrialSignup] = useModalUpsellProTrial(dispatch);\n\n const welcome = useCallback(() => Modal.show(\n ,\n modalFilesWelcome), [isBusiness, hasFullDialog]\n );\n \n // Show startup dialogs (welcome, pro trial upsell)\n useEffect(() => {\n try {\n Promise.all([\n Storage.getItem('welcome:shown'),\n Storage.getItem('upsell:trial'),\n ]).then(([welcomeShown, upsellTrial]) => {\n try {\n if (hasWelcomeDialog && welcomeShown !== '1') {\n welcome();\n } else if (hasTrialDialog && upsellTrial !== '1') {\n showTrialSignup();\n }\n } catch (e) {}\n });\n } catch (e) {}\n }, [isOwned, viewport]);\n\n // Show update payment dialog if needed\n useEffect(() => {\n if (header.needsPaymentUpdate) {\n showPaymentUpdate();\n }\n }, [header]);\n \n // Show alert dialogs if needed\n useEffect(() => {\n header.customAlertIDs?.forEach(showCustomAlert);\n }, [header]);\n\n const dragOver = useCallback(effects.dragOver(), []);\n const dragEnter = useCallback(effects.dragEnter(setDrop, stateDrop), [setDrop, stateDrop]);\n const dragLeave = useCallback(effects.dragLeave(setDrop, stateDrop), [setDrop, stateDrop]);\n const dragDrop = useCallback(effects.dragDrop(dispatch, setDrop, props.content, folder?.name), [setDrop, props.content, folder]);\n\n return \n \n \n {hasFolderTree &&\n \n \n {hasEmptyFolderBrowser &&\n \n \n {t`You don't have any folders`}\n \n \n {t`Create a folder`}\n \n \n }\n {isLoadingFolderBrowser &&\n \n \n \n }\n {!hasEmptyFolderBrowser &&\n \n }\n \n }\n \n {hasHeader &&\n \n }\n {hasBreadcrumbs &&\n \n }\n \n {hasListFolder &&\n \n {isGrid\n ? \n : \n }\n \n }\n {hasListSearch && !hasEmptyFolder &&\n \n \n \n }\n {hasEmptySearch &&\n \n \n \n \n \n \n \n \n \n \n \n \n \n {t`No results found`}\n \n \n {t`Sorry, we looked but didn't find anything.`}\n \n \n \n }\n {hasEmptyFolder &&\n \n \n {hasEmptyUploadTip &&\n \n }\n {hasEmptyUploadTip &&\n \n }\n \n {isRecent\n ? t`No recent files`\n : isFollowing\n ? t`You are not following anything`\n : isTrash\n ? t`Trash is empty`\n : t`This folder is empty`\n }\n \n {hasEmptyUploadTip &&\n \n {t`Upload files or folders by clicking the upload button, or drag & drop from your device.`}\n \n }\n \n \n }\n {hasSpinner &&\n \n \n \n }\n \n \n \n \n});\n\nexport const styles = {\n root: Styles.createViewStyle({\n flex: 1,\n flexDirection: 'row',\n justifyContent: 'center',\n backgroundColor: Light.filesBackground,\n }),\n content: Styles.createViewStyle({\n flex: 1,\n }),\n shared: Styles.createViewStyle({\n maxWidth: 1200,\n }),\n minimal: Styles.createViewStyle({\n marginHorizontal: 0,\n }),\n lists: Styles.createViewStyle({\n flex: 1,\n flexDirection: 'row',\n }),\n list: Styles.createViewStyle({\n flex: 1,\n margin: 0,\n }),\n tree: Styles.createViewStyle({\n width: 200,\n flex: 0,\n margin: 0,\n borderRightWidth: 1,\n borderColor: Light.filesTreeBorder,\n backgroundColor: Light.filesTreeBackground,\n }),\n query: Styles.createTextStyle({\n color: Colors.neutral.mid,\n fontSize: 24,\n margin: 20,\n }),\n title: Styles.createTextStyle({\n color: Colors.neutral.mid,\n fontSize: 24,\n margin: 20,\n }),\n header: Styles.createTextStyle({\n textAlign: 'center',\n color: Colors.neutral.light,\n fontSize: 26,\n }),\n footer: Styles.createTextStyle({\n textAlign: 'center',\n color: Colors.neutral.mid,\n fontSize: 14,\n marginTop: 16,\n }),\n emptyBrowser: Styles.createViewStyle({\n flex: 1,\n alignItems: 'center',\n justifyContent: 'center',\n }),\n emptyBrowserText: Styles.createTextStyle({\n color: Colors.neutral.light,\n fontSize: 14,\n }),\n emptyCreateText: Styles.createTextStyle({\n color: Colors.neutral.mid,\n textDecorationLine: 'underline',\n cursor: 'pointer',\n fontSize: 12,\n marginTop: 6,\n }),\n center: Styles.createViewStyle({\n flex: 1,\n justifyContent: 'center',\n alignContent: 'center',\n alignItems: 'center',\n }),\n loading: Styles.createViewStyle({\n flex: 1,\n alignItems: 'center',\n justifyContent: 'center',\n }),\n searchEmpty: Styles.createViewStyle({\n justifyContent: 'center',\n alignContent: 'center',\n alignItems: 'center',\n alignSelf: 'center',\n flex: 1,\n }),\n dragDrop: Styles.createViewStyle({\n width: 640,\n height: 360,\n padding: 36,\n borderRadius: 5,\n borderWidth: 5,\n borderStyle: 'dashed',\n borderColor: '#E6E6E6',\n position: 'relative',\n }),\n dragDropHeader: Styles.createTextStyle({\n textAlign: 'center',\n color: Colors.neutral.light,\n fontSize: 26,\n }),\n uploadTip: Styles.createViewStyle({\n justifyContent: 'center',\n alignContent: 'center',\n alignItems: 'center',\n alignSelf: 'center',\n }),\n uploadTipBg: Styles.createImageStyle({\n width: 559,\n height: 150,\n marginBottom: 26,\n }),\n uploadTipDrag: Styles.createImageStyle({\n position: 'absolute',\n top: 100,\n left: 300,\n width: 58,\n height: 46,\n opacity: 1,\n }),\n};\n","import {t} from '@lingui/macro';\nimport React, {useCallback} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {Styles, View, Text, ActivityIndicator, Types} from 'react-ult';\nimport {default as Svg, SvgPath} from 'react-ult-ext-imagesvg';\nimport {IconButton} from 'controls/IconButton';\nimport {useModalCreateFolder} from 'hooks/useModalCreateFolder';\nimport {useModalUpsellStorage} from 'hooks/useModalUpsellStorage';\nimport {FilesNavigator} from 'view/FilesNavigator';\nimport {FilesList} from 'view/FilesList';\nimport {Light, Colors, Vectors} from 'features/themes';\nimport {alert, copy, move, restore} from 'features/mediafire';\nimport {selectors} from 'store/files';\n\nimport * as app from 'store/app';\nimport * as filesEffects from 'store/files/effects';\nimport * as MF from 'globals/types';\n\nexport function FilesPicker() {\n const isPremium = useSelector(app.selectors.isPremium);\n const viewport = useSelector(app.selectors.getViewport);\n const header = useSelector(app.selectors.getHeader);\n const limits = useSelector(app.selectors.getLimits);\n const dragging = useSelector(selectors.getDrag);\n const filter = useSelector(selectors.getFilter);\n const items = useSelector(selectors.getItems);\n const sort = useSelector(selectors.getSort);\n const pick = useSelector(selectors.getPick);\n const action = pick ? pick.action : 'copy';\n const destination = pick ? pick.destination : 'myfiles';\n const destName = items[destination] ? items[destination].name : t`My Files`;\n const sourceName = !pick || pick.ids.length > 1 ? 'items' : 'item';\n const folder = useSelector(selectors.getItem(destination));\n const view = useSelector(selectors.getView(destination));\n const colorPrimary = header ? header.colors.primary : Colors.primary.brand;\n const sizeExpected = folder ? folder.folders : 0;\n const sizeActual = view ? view.folders.length : 0;\n const isLoading = !folder || sizeActual === 0 && sizeExpected > 0;\n const isEmpty = !isLoading && view && sizeExpected === 0;\n const isMinimal = viewport.width < 500;\n\n const dispatch = useDispatch();\n const [showCreateFolder] = useModalCreateFolder(destination);\n const [showUpsellStorage] = useModalUpsellStorage('manage');\n const doPick = useCallback(filesEffects.listPick(pick, dispatch, sort, filter), [pick, sort, filter]);\n const close = useCallback(filesEffects.pick(dispatch, null), []);\n const noop = useCallback((e) => e.stopPropagation(), []);\n const submit = useCallback(async () => {\n if (pick) {\n let status: any;\n if (action === 'copy' || action === 'save') {\n status = await copy(dispatch, pick.ids, destination, destName);\n } else if (action === 'move') {\n status = await move(dispatch, pick.ids, destination, destName);\n } else if (action === 'restore') {\n status = await restore(dispatch, pick.ids, destination, destName);\n }\n const error = status?.error;\n if (error) {\n if (error === MF.FilesErrors.StorageLimitExceeded) {\n let totalSize = 0;\n pick.ids.forEach(id => (totalSize += items[id].size));\n showUpsellStorage(totalSize, limits.storage.total);\n } else if (error === MF.FilesErrors.AccessDenied) {\n alert(dispatch, t`You do not have write permissions`, 'fail');\n } else {\n alert(dispatch, t`There was a problem attempting this action (code ${error})`, 'fail');\n }\n }\n }\n filesEffects.pickClear(dispatch);\n }, [pick, items]);\n\n return pick ? (\n \n \n \n \n \n {!isEmpty &&\n \n }\n {isEmpty &&\n \n \n {t`${action.slice(0,1).toUpperCase()}${action.slice(1)} ${sourceName} here`}\n \n \n }\n {isLoading &&\n \n \n \n }\n \n \n \n \n \n \n \n \n \n \n }\n />\n \n \n \n ) : null;\n}\n\nexport const styles = {\n root: Styles.createViewStyle({\n position: 'absolute',\n backgroundColor: Light.dialogBehind,\n justifyContent: 'center',\n alignContent: 'center',\n alignItems: 'center',\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n }),\n inner: Styles.createViewStyle({\n flex: 0,\n width: 480,\n borderRadius: 3,\n backgroundColor: Light.uploaderContentBackground,\n shadowOffset: {width: 0, height: 3},\n shadowColor: 'rgba(0,0,0,0.3)',\n shadowRadius: 3,\n elevation: 1,\n }),\n innerMobile: Styles.createViewStyle({\n width: 292,\n }),\n actions: Styles.createViewStyle({\n flex: 0,\n flexDirection: 'row-reverse',\n padding: 10,\n paddingLeft: 6,\n borderTopWidth: 2,\n borderColor: Light.navigatorBorder,\n backgroundColor: Light.navigatorBackground,\n }),\n button: Styles.createButtonStyle({\n paddingHorizontal: 8,\n alignItems: 'center',\n flexDirection: 'row',\n minWidth: 32,\n }),\n buttonHover: Styles.createButtonStyle({\n backgroundColor: Light.dialogInputBackground,\n }),\n buttonText: Styles.createTextStyle({\n color: Light.dialogText,\n }),\n content: Styles.createViewStyle({\n flex: 1,\n margin: 0,\n }),\n list: Styles.createViewStyle({\n height: 300,\n }),\n empty: Styles.createViewStyle({\n flex: 1,\n alignItems: 'center',\n justifyContent: 'center',\n }),\n emptyText: Styles.createTextStyle({\n color: Light.dialogText,\n fontSize: 14,\n }),\n loading: Styles.createViewStyle({\n flex: 1,\n alignItems: 'center',\n justifyContent: 'center',\n }),\n spacerH: Styles.createViewStyle({\n width: 6,\n }),\n spacerFill: Styles.createViewStyle({\n flex: 1,\n }),\n};\n","import {t} from '@lingui/macro';\nimport React, {useCallback} from 'react';\nimport {Modal} from 'react-ult';\nimport {Prompt} from 'controls/Prompt';\n\nconst _modalConflict = 'conflict';\n\nexport function useModalConflict(id: string) {\n const show = useCallback((submit: (option: string) => void) => {\n const pick = (choice: string) => {\n submit(choice);\n Modal.dismiss(_modalConflict);\n };\n\n Modal.show(\n pick('keep'),\n }, {\n text: t`REPLACE`,\n mode: 'destructive',\n onPress: () => pick('replace'),\n }, {\n text: t`SKIP`,\n mode: 'cancel',\n onPress: () => pick('skip_with_errors'),\n }]}\n />\n , _modalConflict);\n }, [id]);\n\n const close = useCallback(() => {\n Prompt.dismissAnimated(_modalConflict);\n }, [id]);\n\n return [show, close];\n}\n","import {t} from '@lingui/macro';\nimport React, {useCallback, useState} from 'react';\nimport {Dispatch} from '@reduxjs/toolkit';\nimport {Styles, View, Text, Button} from 'react-ult';\nimport {default as Svg, SvgPath} from 'react-ult-ext-imagesvg';\nimport {Dialog} from 'controls/Dialog';\nimport {InputField} from 'controls/InputField';\nimport {IconButton} from 'controls/IconButton';\nimport {alert, uploadAddWebFile} from 'features/mediafire';\nimport {Light, Fonts, FontSizes, Colors, Vectors} from 'features/themes';\n\nexport const modalFilesWebUpload = 'web-upload';\n\nexport interface Props {\n dispatch: Dispatch;\n id: string;\n url?: string;\n primaryColor: string;\n isMinimal?: boolean;\n}\n\nexport function FilesModalWebUpload(props: Props) {\n const {id, url} = props;\n const [stateUrl, setUrl] = useState(props.url || '');\n const [stateName, setName] = useState('');\n\n const dispatch = props.dispatch;\n const help = useCallback(() => console.log('clicked help'), []);\n const close = useCallback(() => Dialog.dismissAnimated(modalFilesWebUpload), []);\n const submit = useCallback(async () => {\n const response = await uploadAddWebFile(dispatch, id, stateUrl, stateName);\n if (response && response['result'] === 'Success') {\n alert(dispatch, `Uploading “${stateName}” from the web...`, 'info');\n } else {\n const message = response && response['error']\n ? response['message']\n : t`Failed to submit web upload`;\n alert(dispatch, message, 'fail');\n }\n close();\n }, [id, url, stateName]);\n\n return (\n \n \n \n \n {t`Upload from the Web`}\n \n \n \n \n \n \n \n \n \n \n {'Enter a file URL and name to start your web upload. Web uploads have a maximum file size of '}\n \n {'10 GB'}\n \n {'.'}\n \n \n {t`Enter the file URL:`}\n \n \n \n \n \n \n {t`Choose a file name:`}\n \n \n \n {false &&\n \n \n \n \n \n }\n \n \n \n \n \n \n \n \n );\n}\n\nexport const styles = {\n root: Styles.createViewStyle({\n flex: 1,\n borderWidth: 1,\n borderColor: Light.dialogBorder,\n backgroundColor: Light.dialogBackground,\n }),\n content: Styles.createViewStyle({\n flex: 0,\n paddingHorizontal: 20,\n }),\n help: Styles.createViewStyle({\n position: 'absolute',\n padding: 24,\n bottom: 0,\n left: 0,\n }),\n message: Styles.createTextStyle({\n flex: 1,\n font: Fonts.displayBold,\n fontSize: FontSizes.size14,\n lineHeight: 24,\n color: Light.dialogText,\n marginBottom: 4,\n }),\n messageWrapper: Styles.createViewStyle({\n flex: 1,\n }),\n hint: Styles.createTextStyle({\n font: Fonts.displayRegular,\n fontSize: FontSizes.size14,\n color: Light.dialogText,\n marginBottom: 20,\n }),\n hintBold: Styles.createTextStyle({\n font: Fonts.displayBold,\n fontSize: FontSizes.size14,\n color: Light.dialogText,\n }),\n buttonWrapper: Styles.createViewStyle({\n flex: 1,\n flexDirection: 'row-reverse',\n padding: 20,\n }),\n input: Styles.createTextInputStyle({\n flex: 1,\n fontSize: 16,\n color: Light.dialogInputText,\n backgroundColor: Light.dialogInputBackground,\n }),\n inputWrapper: Styles.createViewStyle({\n borderBottomWidth: 2,\n borderColor: Colors.primary.brand,\n marginBottom: 12,\n }),\n spacer: Styles.createViewStyle({\n width: 6,\n }),\n spacerV: Styles.createViewStyle({\n height: 10,\n }),\n bar: Styles.createViewStyle({\n flex: 0,\n }),\n title: Styles.createTextStyle({\n fontSize: 20,\n fontWeight: '300',\n color: Light.dialogTitle,\n lineHeight: 65,\n marginLeft: 22,\n }),\n close: Styles.createButtonStyle({\n position: 'absolute',\n alignItems: 'center',\n height: 65,\n width: 58,\n right: 1,\n top: -2,\n }),\n};\n","import {t} from '@lingui/macro';\nimport React, {useState, useCallback, useEffect, useRef} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {Styles, View, Text, Link, Button, Modal, Types} from 'react-ult';\nimport {default as Svg, SvgPath} from 'react-ult-ext-imagesvg';\nimport {useModalConflict} from 'hooks/useModalConflict';\nimport {FilesList} from 'view/FilesList';\nimport {IconButton} from 'controls/IconButton';\nimport {SafeAreaView} from 'controls/SafeArea';\nimport {useModalUpsellFeature} from 'hooks/useModalUpsellFeature';\nimport {useModalUpsellStorage} from 'hooks/useModalUpsellStorage';\nimport {FilesModalWebUpload, modalFilesWebUpload} from 'view/modals/FilesModalWebUpload';\nimport {sessionToken, alert, uploadState, uploadSync, uploadWebSync, uploadGetWebFiles} from 'features/mediafire';\nimport {pickFiles, pickMedia} from 'features/filesystem';\nimport {getHost, isWeb, isTouch, isIOS} from 'features/platform';\nimport {Light, Vectors, Colors} from 'features/themes';\nimport {bytesize} from 'features/common';\nimport {Uploader, UploadResolutions, UploadSession} from 'globals/upload';\nimport {selectors} from 'store/files';\nimport {state} from 'store';\nimport * as app from 'store/app';\n\nimport * as filesEffects from 'store/files/effects';\n\nexport interface Props {\n id: string;\n minimized: boolean;\n}\n\nexport function FilesUploader(props: Props) {\n const session = useRef(null);\n const [stateActivated, setActivated] = useState(false);\n const header = useSelector(app.selectors.getHeader);\n const viewport = useSelector(app.selectors.getViewport);\n const limits = useSelector(app.selectors.getLimits);\n const isPremium = useSelector(app.selectors.isPremium);\n const uploadWebIds = useSelector(selectors.getUploadWeb);\n const files = useSelector(selectors.getUploadFiles);\n const items = useSelector(selectors.getUploadItems);\n const view = useSelector(selectors.getUploadView);\n const filter = useSelector(selectors.getFilter);\n const sort = useSelector(selectors.getSort);\n const status = uploadState(items);\n const hashCurrent = status.hashed;\n const uploadCurrent = status.uploaded;\n const uploadTotal = status.size;\n const hasFiles = status.count > 0;\n const hasFolderUpload = !isTouch();\n const hasWebUpload = isPremium || !isIOS();\n const hasAborted = status.aborted === status.count && status.count > 0;\n const hasSkipped = status.skipped === status.count && status.count > 0;\n const hasButtonText = viewport.width < 530;\n const isFileDrop = false;\n const isSmall = viewport.width < 600;\n const isMinimal = viewport.width < 800 || viewport.height < 520;\n const isComplete = stateActivated && status.completed;\n const hashPercent = Math.max(0, Math.min(100, (hashCurrent / uploadTotal) * 100));\n const uploadPercent = Math.max(0, Math.min(100, (uploadCurrent / uploadTotal) * 100));\n const hashPixels = (hashCurrent / uploadTotal) * (isSmall ? viewport.width - 126 : 654);\n const uploadPixels = (uploadCurrent / uploadTotal) * (isSmall ? viewport.width - 126 : 654);\n const hashPixelsMini = (hashCurrent / uploadTotal) * (isSmall ? viewport.width - 36 : 314);\n const uploadPixelsMini = (uploadCurrent / uploadTotal) * (isSmall ? viewport.width - 36 : 314);\n const uploadHeight = isMinimal ? viewport.height - 143 : 357;\n const colorPrimary = header ? header.colors.primary : Colors.primary.brand;\n const classes = {\n root: [\n styles.root,\n props.minimized && styles.rootMinimized,\n props.minimized && isSmall && styles.rootMinimizedSmall,\n ],\n uploader: [\n isMinimal ? styles.uploaderMobile : styles.uploader,\n ],\n progressBarHashed: [\n styles.progressBarHashed,\n Styles.createViewStyle({width: isNaN(hashPixels) ? 0 : hashPixels}, false),\n isWeb() && Styles.createViewStyle({['transition' as any]: 'background-color 0.2s, width 0.5s ease'}, false),\n ],\n progressBarUploaded: [\n styles.progressBarUploaded,\n Styles.createViewStyle({width: isNaN(uploadPixels) ? 0 : uploadPixels}, false),\n isWeb() && Styles.createViewStyle({['transition' as any]: 'background-color 0.2s, width 0.5s ease'}, false),\n ],\n progressMinBar: [\n styles.progressMinBar,\n hasSkipped && styles.progressMinBarFailed,\n ],\n progressMinBarHashed: [\n styles.progressMinBarHashed,\n Styles.createViewStyle({width: isNaN(hashPixelsMini) ? 0 : hashPixelsMini}, false),\n isWeb() && Styles.createViewStyle({['transition' as any]: 'background-color 0.2s, width 0.5s ease'}, false),\n ],\n progressMinBarUploaded: [\n styles.progressMinBarUploaded,\n Styles.createViewStyle({width: isNaN(uploadPixelsMini) ? 0 : uploadPixelsMini}, false),\n isWeb() && Styles.createViewStyle({['transition' as any]: 'background-color 0.2s, width 0.5s ease'}, false),\n ],\n };\n\n const textFileDrop = 'Upload to my MediaFire FileDrop';\n const textSizes = `${bytesize(uploadCurrent, 2)} / ${bytesize(uploadTotal, 2)}`;\n const textCount = `${status.count} File${status.count !== 1 ? 's' : ''}`;\n const textSkipped = `${status.skipped} file${status.skipped !== 1 ? 's' : ''} not uploaded`;\n const textFinished = `${status.finished} file${status.finished !== 1 ? 's' : ''} uploaded`;\n const textUpload = uploadPercent && !isNaN(uploadPercent)\n ? (status.verifying > 0 && uploadPercent >= 100)\n ? `Verifying ${status.verifying} file${status.verifying !== 1 ? 's' : ''}…`\n : `${Math.floor(uploadPercent)}%`\n : stateActivated\n ? hasSkipped \n ? textSkipped\n : 'Preparing…'\n : 'Queued';\n const textTitle = isComplete\n ? hasSkipped\n ? hasAborted\n ? t`Upload Skipped`\n : t`Upload Failed`\n : t`Upload Completed`\n : stateActivated\n ? t`Uploading ${textCount}`\n : status.count === 0\n ? isMinimal ? t`Select Files` : t`Select Files to Upload`\n : t`Selected ${textCount}`;\n\n const dispatch = useDispatch();\n const activate = useCallback(() => setActivated(true), [setActivated]);\n const noop = useCallback((e) => e.stopPropagation(), []);\n const drop = useCallback(filesEffects.dragDrop(dispatch, null, props.id, ''), [props.id]);\n const dragOver = useCallback(filesEffects.dragOver(), []);\n const minimize = useCallback(filesEffects.uploadMinimize(dispatch, true), []);\n const maximize = useCallback(filesEffects.uploadMinimize(dispatch, false), []);\n\n // Modals\n const [showConflict] = useModalConflict(props.id);\n const [showUpsellStorage] = useModalUpsellStorage('upload');\n const [showUpsellWebUpload] = useModalUpsellFeature('pro', 'webupload');\n\n // Create uploader\n useEffect(() => {\n const availableStorage = limits ? limits.storage.total - limits.storage.used : -1;\n session.current = Uploader.create(sessionToken, availableStorage);\n }, []);\n\n // Start the uploader\n const start = useCallback(() => {\n Uploader.start(session.current);\n activate();\n }, [session.current]);\n\n // Stop and close the uploader\n const close = useCallback(() => {\n Uploader.abort(session.current);\n dispatch(state.files.actions.upload({id: null}));\n Modal.dismissAll();\n }, [session.current]);\n\n // Add files to upload session\n const addFiles = useCallback((folder: string) => {\n return async () => {\n try {\n const files = await pickFiles();\n Uploader.addFiles(files as any, folder, session.current);\n if (isTouch()) {\n Uploader.start(session.current);\n activate();\n }\n } catch (err) {}\n }\n }, [session.current]);\n\n // Add files to upload session (web input)\n const addFilesInput = useCallback((folder: string) => {\n return async (e: any) => {\n Uploader.addFiles(e.target.files, folder, session.current);\n if (isTouch()) {\n Uploader.start(session.current);\n activate();\n }\n }\n }, [session.current]);\n\n // Add image/video to upload session\n const addMedia = useCallback((folder: string) => {\n return async () => {\n try {\n const files = await pickMedia();\n Uploader.addFiles(files as any, folder, session.current);\n if (isTouch()) {\n Uploader.start(session.current);\n activate();\n }\n } catch (err) {}\n }\n }, [session.current]);\n\n // Add folder of files to upload session\n const addFolder = useCallback((e: any) => {\n e.preventDefault();\n e.stopPropagation();\n Uploader.addFiles(e.target.files, props.id, session.current);\n }, [session.current]);\n\n // Add files from paste\n const paste = useCallback((e: ClipboardEvent) => {\n if (e.clipboardData.files && e.clipboardData.files.length)\n return Uploader.addFiles(e.clipboardData.files, props.id, session.current);\n const items = e.clipboardData.items;\n const files: File[] = [];\n for (let i = 0; i < items.length; i++) {\n try {\n const file = items[i].getAsFile();\n if (file) files.push(file);\n } catch (e) {}\n }\n if (files.length) {\n Uploader.addFiles(files, props.id, session.current);\n } else {\n const text = e.clipboardData.getData('text');\n if (text && text.match(/^(ftp|sftp|http|https)\\:\\/\\//)) {\n webupload(text);\n }\n }\n }, [dispatch, props.id]);\n\n // Add web uploads\n const webupload = useCallback((url?: string | Types.SyntheticEvent) => {\n Modal.show(\n \n , modalFilesWebUpload);\n }, [isMinimal]);\n\n // Sync upload events\n useEffect(() => {\n Uploader.addListener('progress', (_, file) => {\n uploadSync(dispatch, file);\n }, session.current);\n Uploader.addListener('complete', (_, file) => {\n uploadSync(dispatch, file);\n }, session.current);\n Uploader.addListener('conflict', (_, file) => {\n uploadSync(dispatch, file);\n showConflict((action: UploadResolutions) =>\n Uploader.handleConflict(file, session.current, action, true));\n }, session.current);\n Uploader.addListener('failure', (error, file) => {\n if (file.exceededStorage)\n showUpsellStorage();\n uploadSync(dispatch, file, error);\n }, session.current);\n Uploader.addListener('failureBatch', (error) => {\n const message = error.toString() === 'ReqError: TypeError: Failed to fetch'\n ? 'Upload interrupted due to network issues'\n : error.toString();\n Uploader.abort(session.current);\n alert(dispatch, message, 'fail');\n dispatch(state.files.actions.upload({id: null}));\n Modal.dismissAll();\n }, session.current);\n }, [props.id, session.current]);\n\n // Sync web uploads\n useEffect(() => {\n const timer = setInterval(() => {\n if (uploadWebIds && uploadWebIds.length > 0) {\n uploadGetWebFiles(uploadWebIds[0]).then((e: any) => {\n if (e.webUploads && e.webUploads.length > 0) {\n uploadWebSync(dispatch, props.id, e.webUploads);\n activate();\n }\n });\n }\n }, 1500);\n return () => {\n clearTimeout(timer);\n };\n }, [props.id, uploadWebIds]);\n\n // Drag & drop uploads\n useEffect(() => {\n if (files) {\n Uploader.addFiles(files, props.id, session.current);\n Uploader.start(session.current);\n activate();\n }\n }, [files, props.id]);\n\n // Clipboard uploads\n useEffect(() => {\n if (isWeb()) {\n window.addEventListener('paste', paste);\n return () => {\n window.removeEventListener('paste', paste);\n };\n }\n return () => {};\n }, []);\n\n // Prevent navigation\n useEffect(() => {\n if (isWeb()) {\n window.onbeforeunload = stateActivated && !isComplete\n ? () => 'Are you sure you want to cancel your upload?'\n : null;\n }\n return () => {\n if (isWeb()) {\n window.onbeforeunload = null;\n }\n };\n }, [isComplete, stateActivated]);\n\n return (\n \n {props.minimized\n ? \n \n {!hasSkipped && }\n {!hasSkipped && }\n \n \n \n {stateActivated && (!isComplete || status.verifying > 0)\n ? textSizes\n : textTitle}\n \n \n {textUpload}\n \n \n \n : \n \n \n \n \n {textTitle}\n \n \n \n {t`Upload Diagnostic Tool`}\n \n \n {stateActivated && !isComplete\n ? \n : \n }\n \n {hasFiles &&\n \n }\n {!hasFiles &&\n \n {isWeb() &&\n \n \n }\n {isFileDrop &&\n \n {textFileDrop}\n \n }\n {isWeb() && !isTouch() &&\n \n \n \n \n \n }\n {isTouch() &&\n \n {t`Tap here to browse media to upload`}\n \n }\n \n }\n \n {isComplete &&\n \n }\n {!stateActivated &&\n \n {isWeb() &&\n \n \n }\n \n \n \n \n {!hasButtonText &&\n \n {t`Add file`}\n \n }\n \n \n }\n {hasFolderUpload && !stateActivated &&\n \n {isWeb() &&\n \n \n }\n \n \n \n \n {!hasButtonText &&\n \n {t`Add folder`}\n \n }\n \n \n }\n {hasWebUpload && !stateActivated &&\n \n \n \n \n {!hasButtonText &&\n \n {t`Web Upload`}\n \n }\n \n }\n {stateActivated && (hasSkipped || isComplete) &&\n \n }\n {stateActivated && !isComplete && !hasSkipped &&\n \n \n \n \n \n \n {textSizes}\n {textUpload}\n \n \n }\n \n {!stateActivated && !isComplete &&\n \n \n \n \n }\n \n \n \n \n \n \n }\n \n );\n}\n\nexport const styles = {\n // Containers\n root: Styles.createViewStyle({\n position: 'absolute',\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: Light.dialogBehind,\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n }),\n rootMinimized: Styles.createViewStyle({\n width: 350,\n height: 65,\n alignItems: 'flex-end',\n justifyContent: 'flex-end',\n borderTopLeftRadius: 3,\n borderTopRightRadius: 3,\n backgroundColor: Colors.neutral.darker,\n shadowOffset: {width: -1, height: -1},\n shadowColor: 'rgba(0,0,0,0.3)',\n shadowRadius: 3,\n elevation: 1,\n top: undefined,\n left: undefined,\n bottom: 0,\n right: 16,\n }),\n rootMinimizedSmall: Styles.createViewStyle({\n left: 0,\n right: 0,\n width: undefined,\n borderTopLeftRadius: 0,\n borderTopRightRadius: 0,\n }),\n uploader: Styles.createViewStyle({\n width: 780,\n height: 500,\n borderRadius: 3,\n backgroundColor: Light.uploaderContentBackground,\n shadowOffset: {width: 0, height: 3},\n shadowColor: 'rgba(0,0,0,0.3)',\n shadowRadius: 3,\n elevation: 1,\n }),\n uploaderMobile: Styles.createViewStyle({\n position: 'absolute',\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n backgroundColor: Light.uploaderContentBackground,\n }),\n uploaderMin: Styles.createViewStyle({\n flex: 1,\n paddingTop: 21,\n paddingHorizontal: 18,\n paddingBottom: 19,\n cursor: 'pointer',\n flexDirection: 'column',\n }),\n diagnosticLinkText: Styles.createTextStyle({\n fontSize: 14,\n color: Light.diagnosticUploadTool,\n }),\n // Sections\n header: Styles.createViewStyle({\n flexDirection: 'row',\n alignItems: 'center',\n height: 54,\n borderBottomWidth: 1,\n borderColor: Light.uploaderBarBorder,\n backgroundColor: Light.uploaderBarBackground,\n }),\n contents: Styles.createViewStyle({\n flex: 1,\n backgroundColor: Light.uploaderContentBackground,\n }),\n actions: Styles.createViewStyle({\n flexDirection: 'row',\n height: 62,\n paddingRight: 16,\n borderTopWidth: 1,\n borderColor: Light.uploaderBarBorder,\n backgroundColor: Light.uploaderBarBackground,\n }),\n // Empty\n empty: Styles.createViewStyle({\n flex: 1,\n alignItems: 'center',\n justifyContent: 'center',\n }),\n emptyIcon: Styles.createViewStyle({\n width: 180,\n height: 180,\n borderWidth: 3,\n borderRadius: 5,\n borderStyle: 'dashed',\n borderColor: Light.uploaderContentIcon,\n alignItems: 'center',\n justifyContent: 'center',\n }),\n // Texts\n title: Styles.createTextStyle({\n color: Light.uploaderBarTitle,\n paddingLeft: 20,\n fontSize: 16,\n flex: 1,\n }),\n fileDrop: Styles.createTextStyle({\n marginBottom: 16,\n fontSize: 20,\n fontWeight: '600',\n color: Light.uploaderBarText,\n }),\n touchHint: Styles.createTextStyle({\n marginBottom: 32,\n fontSize: 16,\n fontWeight: '500',\n color: Light.uploaderBarText,\n }),\n completeMessage: Styles.createTextStyle({\n color: Light.uploaderBarText,\n marginLeft: 8,\n fontSize: 14,\n }),\n // Buttons\n buttonsQueue: Styles.createViewStyle({\n flex: 1,\n flexDirection: 'row-reverse',\n alignItems: 'center',\n }),\n buttonsActive: Styles.createViewStyle({\n flex: 0,\n flexDirection: 'row-reverse',\n alignItems: 'center',\n }),\n buttonClose: Styles.createButtonStyle({\n alignItems: 'center',\n width: 54,\n height: 54,\n top: 1,\n }),\n buttonUpload: Styles.createButtonStyle({\n marginRight: 6,\n marginLeft: 16,\n height: 60,\n flexDirection: 'row',\n alignItems: 'center',\n }),\n buttonUploadText: Styles.createTextStyle({\n color: Light.uploaderBarText,\n marginLeft: 4,\n fontSize: 14,\n }),\n buttonUploadTextWeb: Styles.createTextStyle({\n color: Light.uploaderBarText,\n marginHorizontal: 7,\n marginBottom: 1,\n fontSize: 14,\n }),\n // Progress\n progress: Styles.createViewStyle({\n flex: 1,\n marginLeft: 18,\n marginRight: 16,\n }),\n progressDetails: Styles.createViewStyle({\n flex: 1,\n flexDirection: 'row',\n marginTop: 8,\n }),\n progressDetailsText: Styles.createTextStyle({\n color: Light.uploaderBarText,\n fontSize: 12,\n flex: 1,\n }),\n progressDetailsPercent: Styles.createTextStyle({\n color: Light.uploaderBarText,\n fontSize: 12,\n flex: 0,\n }),\n progressBar: Styles.createViewStyle({\n flex: 0,\n height: 6,\n marginTop: 16,\n borderRadius: 3,\n backgroundColor: '#d6d6d6',\n }),\n progressBarHashed: Styles.createViewStyle({\n flex: 0,\n position: 'absolute',\n top: 0,\n bottom: 0,\n left: 0,\n borderRadius: 3,\n backgroundColor: Colors.neutral.light,\n }),\n progressBarUploaded: Styles.createViewStyle({\n flex: 0,\n position: 'absolute',\n top: 0,\n bottom: 0,\n left: 0,\n borderRadius: 3,\n backgroundColor: Colors.primary.brand,\n }),\n progressMinDetails: Styles.createViewStyle({\n flex: 1,\n flexDirection: 'row',\n marginTop: 5,\n }),\n progressMinDetailsText: Styles.createTextStyle({\n fontSize: 12,\n flex: 1,\n color: Colors.neutral.lighter,\n }),\n progressMinDetailsPercent: Styles.createTextStyle({\n fontSize: 12,\n flex: 0,\n color: Colors.neutral.lighter,\n }),\n progressMinBar: Styles.createViewStyle({\n position: 'relative',\n height: 6,\n borderRadius: 3,\n backgroundColor: '#424E65',\n }),\n progressMinBarFailed: Styles.createViewStyle({\n backgroundColor: Colors.secondary.redOrange,\n }),\n progressMinBarHashed: Styles.createViewStyle({\n position: 'absolute',\n top: 0,\n bottom: 0,\n left: 0,\n borderRadius: 3,\n backgroundColor: Colors.neutral.mid,\n }),\n progressMinBarUploaded: Styles.createViewStyle({\n position: 'absolute',\n top: 0,\n bottom: 0,\n left: 0,\n borderRadius: 3,\n backgroundColor: Colors.primary.brand,\n }),\n // Helpers\n input: Styles.createViewStyle({\n flex: 0,\n alignItems: 'center',\n justifyContent: 'center',\n }),\n spacer: Styles.createViewStyle({\n flex: 1,\n }),\n spacerH: Styles.createViewStyle({\n width: 6,\n }),\n};\n","export function pickFiles(): Promise {\n return new Promise(resolve => {\n const input = document.createElement('input');\n input.type = 'file';\n input.multiple = true;\n input.onchange = () => resolve(input.files);\n input.click();\n });\n}\n\nexport function pickMedia(_type?: 'photo' | 'video') {\n return [];\n}\n","import React, {useCallback} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {default as Svg, SvgPath} from 'react-ult-ext-imagesvg';\nimport {Styles, View, Text, Button} from 'react-ult';\nimport {SafeAreaView} from 'controls/SafeArea';\nimport {cancelDownload} from 'features/filesystem';\nimport {Vectors, Colors} from 'features/themes';\nimport {isWeb} from 'features/platform';\nimport {selectors} from 'store/files';\nimport {state} from 'store';\n\nexport function FilesPreviewer() {\n const preview = useSelector(selectors.getPreview);\n const progress = useSelector(selectors.getPreviewProgress);\n const classes = {\n barProgress: [\n styles.barProgress,\n Styles.createViewStyle({width: isNaN(progress) ? 0 : progress}, false),\n isWeb() && Styles.createViewStyle({['transition' as any]: 'width 0.5s ease'}, false),\n ],\n };\n\n const dispatch = useDispatch();\n const cancel = useCallback(() => {\n dispatch(state.files.actions.previewClose());\n try {\n cancelDownload(preview.jobId);\n } catch (e) {}\n }, [preview.jobId]);\n\n return (\n \n \n \n \n Loading Preview\n \n \n \n \n \n \n {preview.name}\n \n \n \n \n \n \n \n \n \n \n );\n}\n\nexport const styles = {\n root: Styles.createViewStyle({\n flex: 1,\n position: 'absolute',\n flexDirection: 'row',\n backgroundColor: Colors.neutral.white,\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n }),\n header: Styles.createViewStyle({\n flex: 0,\n height: 65,\n flexDirection: 'row',\n justifyContent: 'center',\n alignContent: 'center',\n alignItems: 'center',\n }),\n title: Styles.createTextStyle({\n marginLeft: 26,\n color: Colors.neutral.white,\n fontSize: 18,\n flex: 1,\n }),\n close: Styles.createButtonStyle({\n width: 65,\n height: 65,\n justifyContent: 'center',\n alignContent: 'center',\n alignItems: 'center',\n }),\n wrapper: Styles.createViewStyle({\n flex: 1,\n justifyContent: 'center',\n }),\n content: Styles.createViewStyle({\n flex: 0,\n justifyContent: 'center',\n alignContent: 'center',\n alignItems: 'center',\n }),\n message: Styles.createTextStyle({\n color: Colors.neutral.white,\n marginBottom: 14,\n textAlign: 'center',\n }),\n progress: Styles.createViewStyle({\n flex: 0,\n width: 100,\n }),\n bar: Styles.createViewStyle({\n position: 'relative',\n flex: 0,\n height: 6,\n borderRadius: 3,\n backgroundColor: Colors.neutral.mid,\n }),\n barProgress: Styles.createViewStyle({\n position: 'absolute',\n flex: 0,\n top: 0,\n bottom: 0,\n left: 0,\n borderRadius: 3,\n backgroundColor: Colors.primary.brand,\n }),\n};\n","import {t} from '@lingui/macro';\nimport React, {useCallback, useEffect} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {Styles, View, Text, Button, Modal, Types} from 'react-ult';\nimport {default as Svg, SvgPath} from 'react-ult-ext-imagesvg';\nimport {SafeAreaView} from 'controls/SafeArea';\nimport {IconButton} from 'controls/IconButton';\nimport {FilesList} from 'view/FilesList';\nimport {bulkDownloadStatus, downloadState, downloadSync} from 'features/mediafire';\nimport {Vectors, Colors, Light} from 'features/themes';\nimport {bytesize} from 'features/common';\nimport {isWeb} from 'features/platform';\nimport {state} from 'store';\nimport {selectors} from 'store/files';\nimport * as filesEffects from 'store/files/effects';\nimport * as app from 'store/app';\n\nexport interface Props {\n minimized: boolean;\n offset: boolean;\n}\n\nexport function FilesDownloader(props: Props) {\n const isPremium = useSelector(app.selectors.isPremium);\n const viewport = useSelector(app.selectors.getViewport);\n const downloads = useSelector(selectors.getDownloadBulk);\n const items = useSelector(selectors.getDownloadItems);\n const view = useSelector(selectors.getDownloadView);\n const filter = useSelector(selectors.getFilter);\n const sort = useSelector(selectors.getSort);\n const status = downloadState(items);\n const downloadCurrent = status.downloaded;\n const downloadTotal = status.size;\n const hasDownload = downloads.length > 0;\n const hasSkipped = status.skipped === status.count && status.count > 0;\n const isSmall = viewport.width < 600;\n const isMinimal = viewport.width < 800 || viewport.height < 520;\n const isComplete = status.completed;\n const downloadPercent = Math.max(0, Math.min(100, (downloadCurrent / downloadTotal) * 100));\n const downloadPixels = (downloadCurrent / downloadTotal) * (isMinimal ? viewport.width - 126 : 654);\n const downloadPixelsMini = (downloadCurrent / downloadTotal) * (isMinimal ? viewport.width - 36 : 314);\n const downloadHeight = isMinimal ? viewport.height - 143 : 357;\n const classes = {\n root: [\n styles.root,\n props.minimized && styles.rootMinimized,\n props.minimized && props.offset && styles.rootMinimizedOffset,\n props.minimized && isSmall && styles.rootMinimizedSmall,\n ],\n downloader: [\n isMinimal ? styles.downloaderMobile : styles.downloader,\n ],\n bar: [\n styles.bar,\n hasSkipped && styles.barFailed,\n ],\n downloaded: [\n styles.downloaded,\n Styles.createViewStyle({width: isNaN(downloadPixelsMini) ? 0 : downloadPixelsMini}, false),\n isWeb() && Styles.createViewStyle({['transition' as any]: 'background-color 0.2s, width 0.5s ease'}, false),\n ],\n downloadMain: [\n styles.downloadMain,\n Styles.createViewStyle({width: isNaN(downloadPixels) ? 0 : downloadPixels}, false),\n isWeb() && Styles.createViewStyle({['transition' as any]: 'background-color 0.2s, width 0.5s ease'}, false),\n ],\n };\n\n const textSizes = `${bytesize(downloadCurrent, 1)} / ${bytesize(downloadTotal, 1)}`;\n const textCount = `${status.count} File${status.count !== 1 ? 's' : ''}`;\n const textSkipped = `${status.skipped} file${status.skipped !== 1 ? 's' : ''} not downloaded`;\n const textFinished = `${status.finished} .zip file${status.finished !== 1 ? 's' : ''} downloaded.${isMinimal ? '' : ' It may take a moment for it to complete in your browser.'}`;\n const textDownload = props.minimized\n ? hasSkipped \n ? t`Bulk download aborted due to skipped files`\n : isComplete\n ? t`Packaging download. Your download will complete soon.`\n : t`Bulk download in progress…`\n : `${Math.floor(downloadPercent)}%`;\n const textTitle = isComplete\n ? hasSkipped\n ? t`Bulk Download Failed`\n : t`Bulk Download Completed`\n : t`Bulk Downloading ${textCount}`;\n\n const dispatch = useDispatch();\n const noop = useCallback((e) => e.stopPropagation(), []);\n const minimize = useCallback(filesEffects.downloadMinimized(dispatch, true), []);\n const maximize = useCallback(filesEffects.downloadMinimized(dispatch, false), []);\n\n // Stop and close the downloader\n const close = useCallback(() => {\n Modal.dismissAll();\n dispatch(state.files.actions.bulkDownloadClose());\n }, []);\n\n useEffect(() => {\n const completed = [];\n const update = () => {\n const promises = [];\n downloads.forEach(download => {\n if (!completed.includes(download.statusKey)) {\n promises.push(bulkDownloadStatus(download.statusKey));\n }\n });\n Promise.all(promises).then(res => {\n const items = res.map((status, i) => {\n const id = downloads[i].statusKey;\n const name = downloads[i].fileName;\n if (status.state === 'complete')\n completed.push(id);\n const state = status.state;\n const total = status?.bytes?.total || 0;\n const bytes = total - (status?.summary?.bytesToSend || 0);\n return {id, name, state, total, bytes};\n });\n downloadSync(dispatch, items);\n })\n };\n update();\n const interval = setInterval(update, 1000);\n return () => {\n clearInterval(interval);\n };\n }, [downloads]);\n\n return hasDownload ? (\n \n {props.minimized\n ? \n \n {!hasSkipped && }\n \n \n \n {textDownload}\n \n {!isComplete &&\n \n {textSizes}\n \n }\n \n \n : \n \n \n \n \n {textTitle}\n \n {!isComplete\n ? \n : \n }\n \n \n \n {isComplete &&\n \n }\n {(hasSkipped || isComplete) &&\n \n }\n {!isComplete && !hasSkipped &&\n \n \n \n \n \n {textSizes}\n \n {textDownload}\n \n \n \n }\n \n \n \n \n \n \n \n }\n \n ) : null;\n}\n\nexport const styles = {\n root: Styles.createViewStyle({\n position: 'absolute',\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: Light.dialogBehind,\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n }),\n rootMinimized: Styles.createViewStyle({\n width: 350,\n height: 65,\n alignItems: 'flex-end',\n justifyContent: 'flex-end',\n borderTopLeftRadius: 3,\n borderTopRightRadius: 3,\n backgroundColor: Colors.neutral.darker,\n shadowOffset: {width: -1, height: -1},\n shadowColor: 'rgba(0,0,0,0.3)',\n shadowRadius: 3,\n elevation: 1,\n top: undefined,\n left: undefined,\n bottom: 0,\n right: 16,\n }),\n rootMinimizedOffset: Styles.createViewStyle({\n bottom: 72,\n borderRadius: 3,\n }),\n rootMinimizedSmall: Styles.createViewStyle({\n left: 0,\n right: 0,\n width: undefined,\n borderTopLeftRadius: 0,\n borderTopRightRadius: 0,\n }),\n downloader: Styles.createViewStyle({\n width: 780,\n height: 500,\n borderRadius: 3,\n backgroundColor: Light.uploaderContentBackground,\n shadowOffset: {width: 0, height: 3},\n shadowColor: 'rgba(0,0,0,0.3)',\n shadowRadius: 3,\n elevation: 1,\n }),\n downloaderMobile: Styles.createViewStyle({\n position: 'absolute',\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n backgroundColor: Light.uploaderContentBackground,\n }),\n downloadMaximized: Styles.createViewStyle({\n flex: 1,\n backgroundColor: Light.uploaderContentBackground,\n }),\n spacer: Styles.createViewStyle({\n flex: 1,\n }),\n header: Styles.createViewStyle({\n flexDirection: 'row',\n alignItems: 'center',\n height: 54,\n borderBottomWidth: 1,\n borderColor: Light.uploaderBarBorder,\n backgroundColor: Light.uploaderBarBackground,\n }),\n title: Styles.createTextStyle({\n color: Light.uploaderBarText,\n paddingLeft: 20,\n fontSize: 16,\n flex: 1,\n }),\n textCompleted: Styles.createTextStyle({\n color: Light.uploaderBarText,\n marginLeft: 8,\n fontSize: 14,\n }),\n actions: Styles.createViewStyle({\n flexDirection: 'row',\n height: 62,\n paddingRight: 16,\n borderTopWidth: 1,\n borderColor: Light.uploaderBarBorder,\n backgroundColor: Light.uploaderBarBackground,\n }),\n close: Styles.createButtonStyle({\n alignItems: 'center',\n width: 54,\n height: 54,\n top: 1,\n }),\n buttonsActive: Styles.createViewStyle({\n flex: 0,\n flexDirection: 'row-reverse',\n alignItems: 'center',\n }),\n buttonDownload: Styles.createButtonStyle({\n marginRight: 6,\n marginLeft: 16,\n height: 60,\n flexDirection: 'row',\n alignItems: 'center',\n }),\n downloaderMin: Styles.createViewStyle({\n flex: 1,\n paddingTop: 21,\n paddingHorizontal: 18,\n paddingBottom: 19,\n cursor: 'pointer',\n flexDirection: 'column',\n }),\n bar: Styles.createViewStyle({\n position: 'relative',\n height: 6,\n borderRadius: 3,\n backgroundColor: '#424E65',\n }),\n barFailed: Styles.createViewStyle({\n backgroundColor: Colors.secondary.redOrange,\n }),\n downloaded: Styles.createViewStyle({\n position: 'absolute',\n top: 0,\n bottom: 0,\n left: 0,\n borderRadius: 3,\n backgroundColor: '#33CC66',\n }),\n downloadMain: Styles.createViewStyle({\n flex: 0,\n position: 'absolute',\n top: 0,\n bottom: 0,\n left: 0,\n borderRadius: 3,\n backgroundColor: '#33CC66',\n }),\n downloadBar: Styles.createViewStyle({\n flex: 1,\n flexDirection: 'row',\n marginTop: 5,\n }),\n downloadText: Styles.createTextStyle({\n fontSize: 12,\n flex: 1,\n color: Colors.neutral.lighter,\n }),\n downloadPercent: Styles.createTextStyle({\n fontSize: 12,\n flex: 0,\n color: Colors.neutral.lighter,\n }),\n mainProgress: Styles.createViewStyle({\n flex: 1,\n marginLeft: 18,\n marginRight: 16,\n }),\n mainProgressBar: Styles.createViewStyle({\n flex: 0,\n height: 6,\n marginTop: 16,\n borderRadius: 3,\n backgroundColor: '#d6d6d6',\n }),\n mainProgressDetails: Styles.createViewStyle({\n flex: 1,\n flexDirection: 'row',\n marginTop: 8,\n }),\n mainProgressProgress: Styles.createTextStyle({\n fontSize: 12,\n flex: 1,\n color: Light.uploaderBarText,\n }),\n mainProgressPercent: Styles.createTextStyle({\n fontSize: 12,\n flex: 0,\n color: Light.uploaderBarText,\n }),\n};\n","import {i18n} from '@lingui/core';\nimport {en, es, de, ar, pt, id} from 'make-plural/plurals';\n\nexport async function loadLocale(locale: string) {\n const {messages} = await import(`assets/locales/${locale}/messages`);\n i18n.load(locale, messages);\n i18n.activate(locale);\n}\n\ni18n.loadLocaleData({\n en: {plurals: en},\n es: {plurals: es},\n de: {plurals: de},\n ar: {plurals: ar},\n pt: {plurals: pt},\n id: {plurals: id},\n});\n","import {t} from '@lingui/macro';\nimport React, {useCallback, useEffect, useState} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {Styles, View, StatusBar, ActivityIndicator} from 'react-ult';\nimport {default as Svg, SvgPath} from 'react-ult-ext-imagesvg';\nimport WebView, {Types} from 'react-ult-ext-webview';\nimport {AppAlerts} from 'view/AppAlerts';\nimport {AppMenu} from 'view/AppMenu';\nimport {Files} from 'view/Files';\nimport {FilesPicker} from 'view/FilesPicker';\nimport {FilesUploader} from 'view/FilesUploader';\nimport {FilesPreviewer} from 'view/FilesPreviewer';\nimport {FilesDownloader} from 'view/FilesDownloader';\nimport {getHost, getClient, isNative, isWeb} from 'features/platform';\nimport {Colors, Breakpoints, Light, Vectors} from 'features/themes';\nimport {featuresOrder} from 'features/mediafire';\nimport {random, testBit} from 'features/common';\nimport {loadLocale} from 'features/i18n';\nimport device from 'features/device';\n\nimport * as app from 'store/app';\nimport * as files from 'store/files';\nimport * as appEffects from 'store/app/effects';\nimport * as filesEffects from 'store/files/effects';\nimport * as MF from 'globals/types';\n\nexport function AppFrame() {\n const [stateAuthed, setAuthed] = useState(false);\n const earlyAccess = useSelector(app.selectors.getFeature);\n const viewport = useSelector(app.selectors.getViewport);\n const isActive = useSelector(app.selectors.isActive, (prev) => !prev);\n const isLoggedIn = useSelector(app.selectors.isLoggedIn);\n const isMenuOpen = useSelector(app.selectors.isMenuOpen);\n const current = useSelector(files.selectors.getCurrent);\n const browser = useSelector(files.selectors.getBrowser);\n const preview = useSelector(files.selectors.getPreview);\n const upload = useSelector(files.selectors.getUpload);\n const downloads = useSelector(files.selectors.getDownloadBulk);\n const folder = useSelector(files.selectors.getItem(current));\n const isMinimized = useSelector(files.selectors.isUploaderMinimized);\n const isMinimizedDownload = useSelector(files.selectors.isDownloaderMinimized);\n const isSpecial = current === 'myfiles' || current === 'recent' || current === 'following' || current === 'trash';\n const isShared = !isSpecial && folder && !testBit(folder.flag, MF.FilesItemFlag.isOwned);\n const isMenuFloating = viewport.width <= Breakpoints.menu;\n const isOwned = isLoggedIn && !isShared;\n const isAuthed = isLoggedIn || isShared;\n const hasMenu = isLoggedIn && isOwned && (isMenuOpen || !isMenuFloating);\n const hasDownload = downloads.length > 0;\n const hasUpload = !!upload;\n const hasOffsetUploader = isMinimized && hasUpload;\n const hasOffsetDownloader = isMinimizedDownload && hasDownload;\n const classes = {\n root: [\n styles.root,\n (isWeb() || !isMenuFloating) && styles.rootFloatingMenu,\n ],\n menu: [\n styles.menu,\n isMenuFloating && styles.menuFloating,\n ],\n };\n\n const dispatch = useDispatch();\n const noop = useCallback((e) => e.preventDefault(), []);\n const layout = useCallback(appEffects.layout(dispatch), []);\n const login = useCallback(appEffects.loginNativeAuth(dispatch), []);\n const openMenu = useCallback(appEffects.menuOpen(dispatch), []);\n const loginNav = useCallback(appEffects.loginNativeRedirect(setAuthed), [setAuthed]);\n const closeMenu = useCallback(appEffects.menuClose(dispatch), []);\n const dragOver = useCallback(filesEffects.dragOver(), []);\n const drop = useCallback(filesEffects.dragDrop(dispatch, null, 'myfiles', 'My Files'), []);\n\n useEffect(() => {\n // TODO: RTL support\n loadLocale(device.getLocale(true));\n }, []);\n\n useEffect(() => {\n if (!isLoggedIn) {\n StatusBar.setBarStyle('dark-content', false);\n }\n }, [isLoggedIn]);\n\n return (\n \n {isAuthed &&\n \n {!isActive &&\n \n \n \n }\n {isActive && !earlyAccess &&\n \n \n \n }\n {isActive && earlyAccess &&\n \n \n \n }\n {isActive && earlyAccess && isMenuFloating &&\n \n \n \n \n \n }\n {isMenuOpen && isMenuFloating &&\n \n }\n {hasMenu &&\n \n \n \n }\n {preview &&\n \n }\n {hasDownload &&\n \n }\n {hasUpload &&\n \n }\n \n \n \n }\n {!isAuthed &&\n \n \n \n }\n {!isLoggedIn && isNative() &&\n \n \n \n }\n \n );\n}\n\nexport const styles = {\n root: Styles.createViewStyle({\n flex: 1,\n flexDirection: 'row',\n }),\n rootFloatingMenu: Styles.createViewStyle({\n flexDirection: 'row-reverse',\n }),\n loadingRoot: Styles.createViewStyle({\n justifyContent: 'center',\n alignItems: 'center',\n position: 'absolute',\n flex: 1,\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: Light.filesBackground,\n }),\n hidden: Styles.createViewStyle({\n position: 'absolute',\n left: -1,\n top: -1,\n opacity: 0,\n height: 1,\n width: 1,\n }),\n overlay: Styles.createViewStyle({\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n position: 'absolute',\n backgroundColor: Light.dialogBehind,\n }),\n content: Styles.createViewStyle({\n flex: 1,\n flexDirection: 'column',\n }),\n loading: Styles.createViewStyle({\n flex: 1,\n alignItems: 'center',\n justifyContent: 'center',\n }),\n menu: Styles.createViewStyle({\n flex: 0,\n }),\n menuFloating: Styles.createViewStyle({\n top: 0,\n right: 0,\n bottom: 0,\n position: 'absolute',\n }),\n menuButton: Styles.createViewStyle({\n right: 8,\n top: 9,\n height: 46,\n width: 46,\n borderRadius: 99,\n position: 'absolute',\n flexDirection: 'row',\n justifyContent: 'center',\n alignContent: 'center',\n alignItems: 'center',\n backgroundColor: 'rgba(0,0,0,0.5)',\n }),\n};\n","import React from 'react';\nimport {i18n} from '@lingui/core';\nimport {Provider} from 'react-redux';\nimport {I18nProvider} from '@lingui/react';\nimport {App, UserInterface} from 'react-ult';\nimport {isDev, isLocal, isTouch} from 'features/platform';\nimport {AppFrame} from 'view/AppFrame';\nimport store from 'store';\n\nApp.initialize(isLocal() || isDev(), isLocal());\nUserInterface.useCustomScrollbars(!isTouch());\nUserInterface.setMainView(\n \n \n \n \n \n);\n"],"sourceRoot":""}