{"version":3,"sources":["icons/GlyphDots.js","components/text-input-modal/TextInputModal.js","components/cli-tutor-mode/CliTutorMode.js","icons/GlyphPin.js","icons/StrokeDecentralization.js","icons/GlyphTick.js","files/download-file.js","files/dropdown/Dropdown.js","icons/StrokeCopy.js","icons/StrokeShare.js","icons/StrokePencil.js","icons/StrokeTrash.js","icons/StrokePin.js","files/context-menu/ContextMenu.js","files/info-boxes/companion-info/CompanionInfo.js","files/info-boxes/add-files-info/AddFilesInfo.js","files/info-boxes/InfoBoxes.js","files/type-from-ext/extToType.js","files/type-from-ext/index.js","files/file-preview/FilePreview.js","files/selected-actions/SelectedActions.js","icons/GlyphPinCloud.js","components/tooltip/Tooltip.js","icons/GlyphFolder.js","icons/GlyphDocGeneric.js","icons/GlyphDocMovie.js","icons/GlyphDocCalc.js","icons/GlyphDocMusic.js","icons/GlyphDocPicture.js","icons/GlyphDocText.js","files/file-icon/FileIcon.js","files/file/File.js","components/loading-animation/LoadingAnimation.js","files/files-list/FilesList.js","files/modals/new-folder-modal/NewFolderModal.js","files/modals/share-modal/ShareModal.js","files/modals/rename-modal/RenameModal.js","files/modals/pinning-modal/PinningModal.js","files/modals/remove-modal/RemoveModal.js","files/modals/add-by-path-modal/AddByPathModal.js","files/modals/Modals.js","files/breadcrumbs/Breadcrumbs.js","icons/StrokeDocument.js","icons/StrokeNewFolder.js","files/file-input/FileInput.js","files/header/Header.js","icons/GlyphSmallArrow.js","icons/GlyphCancel.js","components/progress-bar/ProgressBar.js","files/file-import-status/FileImportStatus.js","files/FilesPage.js","components/modal/Modal.js","components/tour/withTour.js","components/shell/Shell.js","components/overlay/Overlay.js","icons/StrokeCode.js","icons/StrokeDownload.js"],"names":["GlyphDots","props","viewBox","d","TextInputModal","onChange","event","val","target","value","onInputChange","setState","onSubmit","validate","state","onKeyPress","key","defaultValue","this","t","onCancel","className","mustBeDifferent","Icon","submitText","description","title","loading","error","required","inputClass","type","bg","onClick","disabled","isDisabled","style","width","margin","React","Component","defaultProps","withTranslation","CliTutorialModal","command","onLeave","downloadConfig","maxWidth","StrokeCode","lineHeight","cliCommandList","cliCmdKeys","UPDATE_IPFS_CONFIG","startsWith","cliCmdPrefixes","PIN_OBJECT","height","cmd","navigator","clipboard","writeText","then","connect","filesPage","isCliTutorModeEnabled","isCliTutorModalOpen","config","showIcon","doOpenCliTutorModal","show","url","window","URL","createObjectURL","Blob","link","document","createElement","display","href","download","body","appendChild","click","revokeObjectURL","GlyphPin","StrokeDecentralization","GlyphTick","downloadFile","srcUrl","filename","progressCallback","method","xhr","XMLHttpRequest","total","abort","responseType","open","onload","e","res","response","blob","a","onprogress","lengthComputable","getResponseHeader","loaded","send","Option","children","onCliTutorMode","role","DropdownMenu","forwardRef","ref","arrowMarginRight","translateX","translateY","rest","boxShadow","arrowAlign","left","Dropdown","Drop","StrokeCopy","StrokeShare","StrokePencil","StrokeTrash","StrokePin","ContextMenu","dropdown","wrap","name","cliOptions","doSetCliOptions","handleClick","dropdownMenuRef","createRef","autofocus","isOpen","current","firstButton","querySelector","focus","onRename","onRemove","onDownload","onInspect","onShare","isMfs","isUnknown","top","onDismiss","text","String","cid","onCopy","StrokeIpld","DOWNLOAD_OBJECT_COMMAND","StrokeDownload","RENAME_IPFS_OBJECT","REMOVE_FILE_FROM_IPFS","right","withRef","Box","background","Trans","i18nKey","InfoBoxes","isRoot","isCompanion","filesExist","extToType","wav","bwf","aiff","flac","m4a","pac","tta","wv","aac","mp2","mp3","amr","s3m","au","dct","dss","gsm","m4p","mmf","mpc","ogg","oga","opus","ra","sln","vox","aaf","asf","avchd","avi","drc","flv","m2v","m4v","mkv","mng","mov","mp4","mpe","mpeg","mpg","mpv","mxf","nsv","ogv","qt","rm","rmvb","roq","svi","vob","webm","wmv","yuv","art","bmp","blp","cd5","cit","cpt","cr2","cut","dds","dib","djvu","egt","exif","gif","gpl","grf","icns","ico","iff","jng","jpeg","jpg","jfif","jp2","jps","lbm","max","miff","msp","nitf","ota","pbm","pc1","pc2","pc3","pcf","pcx","pdn","pgm","PI1","PI2","PI3","pict","pct","pnm","pns","ppm","psb","psd","pdd","psp","px","pxm","pxr","qfx","rle","sct","sgi","rgb","int","bw","tga","tiff","tif","vtf","xbm","xcf","xpm","amf","ai","awg","cgm","cdr","cmx","dxf","e2d","eps","fs","gbr","odg","svg","stl","vrml","x3d","sxd","v2d","vnd","wmf","emf","png","webp","jxr","hdp","wdp","cur","ecw","liff","nrrd","pam","pgf","rgba","inta","sid","ras","sun","123","_xls","_xlsx","aws","bks","cell","def","dex","dfg","dis","edx","edxz","ess","fcs","fm","fods","fp","gnm","gnumeric","gsheet","hcdt","imp","mar","nb","ncss","nmbtemplate","numbers","ods","ogw","ogwu","ots","pmd","pmdx","pmv","pmvx","qpw","rdf","sdc","stc","sxc","tmv","tmvt","uos","wki","wkq","wks","wku","wq1","wq2","xl","xlr","xls","xlsb","xlshtml","xlsm","xlsmhtml","xlsx","xlthtml","xltm","xltx","_doc","_docx","abw","adoc","aim","ans","apkg","apt","asc","ascii","aty","awp","awt","aww","bad","bbs","bdp","bdr","bean","bib","bibtex","bml","bna","boc","brx","btd","bzabw","calca","charset","chart","chord","cnm","cod","crwl","cws","cyi","dca","dfti","dgs","diz","dne","doc","docm","docx","docxml","docz","dox","dropbox","dsc","dvi","dwd","dx","dxb","dxp","eio","eit","eml","emlx","emulecollection","epp","err","etf","etx","euc","faq","fbl","fcf","fdf","fdr","fds","fdt","fdx","fdxt","fft","fgs","flr","fodt","fountain","fpt","frt","fwd","fwdn","gmd","gpd","gpn","gsd","gthr","gv","hbk","hht","hs","hwp","hz","idx","iil","ipf","ipspot","jarvis","jis","jnp","joe","jp1","jrtf","jtd","kes","klg","knt","kon","kwd","latex","lbt","lis","lnt","log","lp2","lst","ltr","ltx","lue","luf","lwp","lxfml","lyt","lyx","man","mbox","mcw","me","mell","mellel","min","mnt","msg","mw","mwd","mwp","ndoc","nfo","ngloss","njx","note","notes","now","nwctxt","nwm","nwp","ocr","odif","odm","odo","odt","ofl","opeico","openbsd","ort","ott","p7s","pages","pdpcmd","pfx","pjt","plain","plantuml","pmo","prt","psw","pu","pvj","pvm","pwd","pwdp","pwdpl","pwi","pwr","qdl","qpf","rad","readme","rft","ris","rpt","rst","rtd","rtf","rtfd","rtx","run","rvf","rzk","rzn","saf","safetext","sam","save","scc","scm","scriv","scrivx","scw","sdm","sdoc","sdw","se","session","sgm","sig","skcard","sla","smf","sms","ssa","story","strings","stw","sty","sxg","sxw","tab","tdf","template","tex","textclipping","thp","tlb","tm","tmd","tmdx","tmvx","tpc","trelby","tvj","txt","u3i","unauth","unx","uof","uot","upd","utf8","utxt","vct","vnt","vw","wbk","webdoc","wn","wp","wp4","wp5","wp6","wp7","wpa","wpd","wpl","wps","wpt","wpw","wri","wsd","wtt","wtx","xbdoc","xbplate","xdl","xwp","xy","xy3","xyp","xyw","zabw","zrtf","zw","fileType","ext","fileExtension","Drag","size","path","useDrag","item","drag","availableGatewayUrl","publicGateway","read","useState","content","setContent","hasMoreContent","setHasMoreContent","buffer","setBuffer","typeFromExt","loadContent","useCallback","readBuffer","next","done","currentContent","fromUint8ArrayToString","hasMore","TextEncoder","encode","length","useEffect","src","encodeURIComponent","controls","data","rel","alt","srcPublic","cantPreview","aria-label","isBinary","Button","ComponentLoader","styles","bar","borderColor","color","count","backgroundColor","countNumber","transform","classes","v","SelectedActions","force100","containerRef","prev","downloadProgress","setTimeout","animateOnStart","tReady","unselect","remove","share","setPinning","rename","inspect","isSingle","singleFileTooltip","classNames","humanSize","tabIndex","fill","aria-hidden","downloadText","GlyphSmallCancel","toFixed","GlyphPinCloud","opacity","Tool","overflow","onResize","el","offsetWidth","scrollWidth","s","onMouseOver","onMouseLeave","addEventListener","removeEventListener","onFocus","onBlur","Children","map","c","cloneElement","n","bottom","wordWrap","borderRadius","zIndex","GlyphFolder","GlyphDocGeneric","GlyphDocMovie","GlyphDocCalc","data-name","GlyphDocMusic","GlyphDocPicture","GlyphDocText","FileIcon","cls","File","pinned","selected","focused","translucent","coloured","cantSelect","cantDrag","isRemotePin","onAddFiles","onMove","onSelect","onNavigate","handleContextMenuClick","dotsWrapper","useRef","canDrag","preview","checkIfDir","monitor","getItem","useDrop","accept","NativeTypes","FILE","drop","_","files","filesPromise","normalizeFiles","dst","join","basename","canDrop","collect","isOver","border","borderTop","round","hash","toString","checkBoxCls","classnames","onContextMenu","ev","Checkbox","checked","select","pos","getBoundingClientRect","FakeHeader","FakeFile","nameWidth","addFiles","mergeRemotePinsIntoFiles","remotePins","remotePinsCids","string","f","includes","FileList","pins","filesSorting","updateSorting","filesIsFetching","filesPathInfo","showLoadingAnimation","onSetPinning","onRemotePinClick","setSelected","setFocused","firstVisibleRow","setFirstVisibleRow","allFiles","setAllFiles","listRef","filesRefs","didDrop","shallow","isDragging","selectedFiles","useMemo","find","filter","file","p","keyHandler","focusedFile","forceUpdateGrid","preventDefault","toggleOne","metaKey","index","findIndex","domNode","findDOMNode","scrollIntoView","behaviour","block","toggleAll","check","indexOf","sort","move","parts","split","pop","basepath","toMove","push","forEach","op","sortByIcon","order","by","changeSort","emptyRowsRenderer","rowRenderer","pinsString","listItem","r","onRowsRendered","startIndex","allSelected","rowCount","paddingRight","paddingLeft","sorts","BY_NAME","BY_SIZE","isScrolling","onChildScroll","scrollTop","disableHeight","autoHeight","rowHeight","noRowsRenderer","onScroll","reduce","b","trim","trimStart","FolderIcon","ShareModal","Modal","ShareIcon","readOnly","RenameModal","folder","context","PencilIcon","PinIcon","icon","objectFit","colors","glyphClass","PinningModal","onPinningSet","pinningServices","doGetFileSizeThroughCid","doSelectRemotePinsForFile","doFetchPinningServices","selectedRemoteServices","selectedServices","setSelectedServices","setSize","fetchSize","selectService","service","online","pointerEvents","RemoveModal","foldersCount","filesCount","isLocallyPinned","some","isRemotelyPinned","setRemotelyPinned","shouldRemoveLocalPin","setShouldRemoveLocalPin","shouldRemoveRemotePin","setShouldRemoveRemotePin","isPinned","modalData","modalTitle","modalDescription","TrashIcon","label","removeLocally","removeRemotely","remoteServices","isIPFS","ipfsPath","validatePath","codeClass","getDescription","NEW_FOLDER","SHARE","RENAME","DELETE","ADD_BY_PATH","CLI_TUTOR_MODE","PINNING","Modals","readyToShow","pinning","delete","folderCount","onAddByPath","leave","makeDir","onMakeDir","root","newName","replace","args","cliCommand","action","activeCid","fileName","realMfsPath","ADD_FILE","ADD_DIRECTORY","CREATE_NEW_DIRECTORY","FROM_IPFS","substr","DELETE_FILE_FROM_IPFS","onShareLink","Overlay","AddByPathModal","CliTutorMode","DropableBreadcrumb","immutable","onContextMenuHandle","getPathInfo","checkIfPinned","filePath","console","buttonRef","handleOnContextMenuHandle","sanitizedPath","substring","undefined","realName","last","doGetPathInfo","doCheckIfPinned","overflows","setOverflows","isImmutable","setImmutable","anchors","newOverflows","offsetHeight","scrollHeight","bread","endsWith","part","i","shift","makeBread","StrokeDocument","StrokeNewFolder","AddButton","id","minWidth","FileInput","toggleDropdown","onAddFolder","folderInput","onAddFile","filesInput","input","onNewFolder","multiple","webkitdirectory","BarOption","isLink","etc","spacer","Header","handleContextMenu","handleBreadCrumbsContextMenu","breadcrumbsRef","currentDirectorySize","hasUpperDirectory","filesSize","repoSize","GlyphSmallArrows","GlyphCancel","ProgressBar","br","progress","Import","job","groupByPath","message","entries","Map","values","viewIcon","viewImportStatus","entry","status","complete","groupedEntries","baseDirectoryOf","set","directory","get","slice","LoadingIndicator","FileImportStatus","filesFinished","filesPending","filesErrors","doFilesClear","initialExpanded","sortedFilesFinished","fileA","fileB","start","expanded","setExpanded","handleImportStatusClose","stopPropagation","numberOfImportedItems","finishedFile","numberOfPendingItems","pending","Math","floor","aria-expanded","GlyphSmallArrow","withTour","doFilesFetch","doPinsFetch","doFilesSizeGet","doFilesDownloadLink","doFilesWrite","doFilesAddPath","doUpdateHash","doFilesUpdateSorting","doFilesNavigateTo","doFilesMove","doFetchRemotePins","doExploreUserProvidedPath","ipfsProvider","ipfsConnected","doFilesMakeDir","doFilesShareLink","doFilesDelete","doSetPinning","toursEnabled","handleJoyrideCallback","contextMenuRef","downloadAbort","setDownloadAbort","setDownloadProgress","modals","setModals","contextMenu","setContextMenu","updater","raw","showModal","modal","clickType","persist","ctxMenu","ctxMenuPosition","rightPadding","innerWidth","parentNode","clientX","y","clientY","pagePositions","MainView","upperDir","upper","data-id","Helmet","realPath","isPins","getTitle","onPinning","steps","filesTour","getSteps","callback","continuous","scrollToFirstStep","locale","getJoyrideLocales","showProgress","ModalActions","justify","ModalBody","WrappedComponent","WithTour","doDisableTours","STATUS","FINISHED","Shell","hidden","renderBackdrop","onKeyDown","nativeEvent","stopImmediatePropagation","onBackdropClick","cx","cy"],"mappings":"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ChBC,IAAK,QACLC,IAAK,QACLC,KAAM,QACNC,KAAM,QACNC,IAAK,QACLC,IAAK,QACLC,IAAK,QACLC,GAAI,QACJC,IAAK,QACLC,IAAK,QACLC,IAAK,QACLC,IAAK,QACLC,IAAK,QACL,MAAO,QACPC,GAAI,QACJC,IAAK,QACLC,IAAK,QACLC,IAAK,QACLC,IAAK,QACLC,IAAK,QACLC,IAAK,QACLC,IAAK,QACLC,IAAK,QACLC,KAAM,QACNC,GAAI,QACJC,IAAK,QACLC,IAAK,QACL,MAAO,QACPC,IAAK,QACLC,IAAK,QACLC,MAAO,QACPC,IAAK,QACLC,IAAK,QACLC,IAAK,QACLC,IAAK,QACLC,IAAK,QACLC,IAAK,QACLC,IAAK,QACLC,IAAK,QACLC,IAAK,QACLC,IAAK,QACLC,KAAM,QACNC,IAAK,QACLC,IAAK,QACLC,IAAK,QACLC,IAAK,QACLC,IAAK,QACLC,GAAI,QACJC,GAAI,QACJC,KAAM,QACNC,IAAK,QACLC,IAAK,QACLC,IAAK,QACLC,KAAM,QACNC,IAAK,QACLC,IAAK,QACLC,IAAK,QACLC,IAAK,QACLC,IAAK,QACLC,IAAK,QACLC,IAAK,QACLC,IAAK,QACLC,IAAK,QACLC,IAAK,QACLC,IAAK,QACLC,IAAK,QACLC,KAAM,QACNC,IAAK,QACLC,KAAM,QACNC,IAAK,QACLC,IAAK,QACLC,IAAK,QACLC,KAAM,QACNC,IAAK,QACLC,IAAK,QACLC,IAAK,QACLC,KAAM,QACNC,IAAK,QACLC,KAAM,QACNC,IAAK,QACLC,IAAK,QACLC,IAAK,QACLC,IAAK,QACLC,KAAM,QACNC,IAAK,QACLC,KAAM,QACNC,IAAK,QACLC,IAAK,QACLC,IAAK,QACLC,IAAK,QACLC,IAAK,QACLC,IAAK,QACLC,IAAK,QACLC,IAAK,QACLC,IAAK,QACLC,IAAK,QACLC,IAAK,QACLC,IAAK,QACLC,KAAM,QACNC,IAAK,QACLC,IAAK,QACLC,IAAK,QACLC,IAAK,QACLC,IAAK,QACLC,IAAK,QACLC,IAAK,QACLC,IAAK,QACLC,GAAI,QACJC,IAAK,QACL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","file":"static/js/9.5a744be9.chunk.js","sourcesContent":["import React from 'react'\n\nconst GlyphDots = props => (\n  <svg viewBox='0 0 100 100' {...props}>\n    <path d='M75 50c0-3.75 1.25-6.25 3.75-8.75s5.625-3.75 8.75-3.75c3.75 0 6.25 1.25 8.75 3.75S100 46.875 100 50s-1.25 6.25-3.75 8.75-5.625 3.75-8.75 3.75-6.25-1.25-8.75-3.75S75 53.125 75 50zm-37.5 0c0-3.75 1.25-6.25 3.75-8.75S46.875 37.5 50 37.5c3.75 0 6.25 1.25 8.75 3.75S62.5 46.875 62.5 50s-1.25 6.25-3.75 8.75S53.125 62.5 50 62.5s-6.25-1.25-8.75-3.75S37.5 53.125 37.5 50zM0 50c0-3.75 1.25-6.25 3.75-8.75s5.625-3.75 8.75-3.75c3.75 0 6.25 1.25 8.75 3.75S25 46.875 25 50s-1.25 6.25-3.75 8.75-5.625 3.75-8.75 3.75-6.25-1.25-8.75-3.75S0 53.125 0 50z' />\n  </svg>\n)\n\nexport default GlyphDots\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport Button from '../button/Button'\nimport { Modal, ModalActions, ModalBody } from '../modal/Modal'\nimport ComponentLoader from '../../loader/ComponentLoader'\nimport { withTranslation } from 'react-i18next'\n\nclass TextInputModal extends React.Component {\n  static propTypes = {\n    onCancel: PropTypes.func.isRequired,\n    onSubmit: PropTypes.func.isRequired,\n    onChange: PropTypes.func,\n    onInputChange: PropTypes.func,\n    title: PropTypes.string.isRequired,\n    Icon: PropTypes.func.isRequired,\n    description: PropTypes.node,\n    submitText: PropTypes.string,\n    validate: PropTypes.func,\n    defaultValue: PropTypes.string,\n    mustBeDifferent: PropTypes.bool,\n    loading: PropTypes.bool\n  }\n\n  static defaultProps = {\n    className: '',\n    defaultValue: '',\n    submitText: 'Save',\n    mustBeDifferent: false\n  }\n\n  constructor (props) {\n    super(props)\n    this.state = { value: props.defaultValue }\n  }\n\n  onChange = (event) => {\n    let val = event.target.value\n\n    if (this.props.onChange) {\n      val = this.props.onChange(val)\n    }\n\n    this.props.onInputChange && this.props.onInputChange(val)\n\n    this.setState({ value: val })\n  }\n\n  onSubmit = () => {\n    if (!this.props.validate ||\n      (this.props.validate && this.props.validate(this.state.value))) {\n      this.props.onSubmit(this.state.value)\n    }\n  }\n\n  onKeyPress = (event) => {\n    if (event.key === 'Enter') {\n      this.onSubmit()\n    }\n  }\n\n  get inputClass () {\n    if (!this.props.validate ||\n      this.state.value === '' ||\n      (this.props.mustBeDifferent && this.state.value === this.props.defaultValue)) {\n      return ''\n    }\n\n    if (this.props.error) {\n      return 'b--red-muted focus-outline-red'\n    }\n\n    if (this.props.validate(this.state.value)) {\n      return 'b--green-muted focus-outline-green'\n    }\n\n    return 'b--red-muted focus-outline-red'\n  }\n\n  get isDisabled () {\n    if (this.state.value === '' ||\n      (this.props.mustBeDifferent && this.state.value === this.props.defaultValue)) {\n      return true\n    }\n\n    if (!this.props.validate) {\n      return false\n    }\n\n    return !this.props.validate(this.state.value)\n  }\n\n  render () {\n    const {\n      t,\n      onCancel,\n      onChange,\n      onInputChange,\n      mustBeDifferent,\n      onSubmit,\n      className,\n      Icon,\n      submitText,\n      validate,\n      defaultValue,\n      description,\n      title,\n      error,\n      loading,\n      ...props\n    } = this.props\n\n    return (\n      <Modal {...props} className={className} onCancel={onCancel}>\n        <ModalBody title={title} Icon={Icon}>\n          { description && typeof description === 'object' && description }\n\n          { description && typeof description === 'string' &&\n            <p className='charcoal w-90 tl center'>{description}</p>\n          }\n\n          <input\n            onChange={this.onChange}\n            onKeyPress={this.onKeyPress}\n            value={this.state.value}\n            required\n            className={`input-reset charcoal ba b--black-20 br1 pa2 mb2 db w-90 center focus-outline ${this.inputClass}`}\n            type='text' />\n        </ModalBody>\n\n        <ModalActions>\n          <Button className='ma2 tc' bg='bg-gray' onClick={onCancel}>{t('actions.cancel')}</Button>\n          <Button className='ma2 tc' bg='bg-teal' disabled={this.isDisabled} onClick={this.onSubmit}>{submitText}</Button>\n        </ModalActions>\n\n        { loading && (\n          <div className=\"flex items-center justify-center absolute top-0 left-0 right-0 bottom-0\">\n            <div className=\"absolute top-0 left-0 right-0 bottom-0 bg-light-gray o-80\"/>\n            <ComponentLoader style={{ width: '50%', margin: 'auto' }} />\n          </div>\n        ) }\n      </Modal>\n    )\n  }\n}\n\nexport default withTranslation('app')(TextInputModal)\n","import React, { Fragment } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'redux-bundler-react'\n\n// Components\nimport { Modal, ModalBody, ModalActions } from '../modal/Modal'\nimport StrokeCode from '../../icons/StrokeCode'\nimport Button from '../button/Button'\nimport Overlay from '../overlay/Overlay'\nimport Shell from '../shell/Shell'\nimport StrokeDownload from '../../icons/StrokeDownload'\nimport { cliCmdKeys, cliCommandList, cliCmdPrefixes } from '../../bundles/files/consts'\n\nexport const CliTutorialModal = ({ command, t, onLeave, className, downloadConfig, ...props }) => {\n  const onClickCopyToClipboard = (cmd) => {\n    navigator.clipboard.writeText(cmd).then(() => {\n      onLeave()\n    })\n  }\n\n  return (\n    <Modal {...props} className={className} onCancel={onLeave} style={{ maxWidth: '40em' }}>\n      <ModalBody Icon={StrokeCode}>\n        <p className='charcoal w-80 center' style={{ lineHeight: '1.3' }}>\n          {t('app:cliModal.description')}\n        </p>\n        <p className='charcoal-muted w-90 center'>\n          { command && command === cliCommandList[cliCmdKeys.UPDATE_IPFS_CONFIG]() ? t('settings:cliModal.extraNotesJsonConfig') : ''}\n          { command && command.startsWith(cliCmdPrefixes.PIN_OBJECT) ? t('files:cliModal.extraNotesPinning') : ''}\n        </p>\n        <div>\n          <Shell className='tl' title=\"Shell\">\n            <code className='db'><b className='no-select'>$ </b>{command}</code>\n          </Shell>\n        </div>\n      </ModalBody>\n\n      <ModalActions>\n        <div>\n          <Button className='ma2 tc' bg='bg-gray' onClick={onLeave}>{t('app:actions.close')}</Button>\n        </div>\n        <div className='flex items-center'>\n          {\n            command && command === cliCommandList[cliCmdKeys.UPDATE_IPFS_CONFIG]()\n              ? <StrokeDownload onClick={downloadConfig} className='dib fill-link pointer' style={{ height: 38 }}\n              /> : <div />\n          }\n          <Button className='ma2 tc' onClick={() => onClickCopyToClipboard(command)}>\n            {t('app:actions.copy')}\n          </Button>\n        </div>\n      </ModalActions>\n    </Modal>\n  )\n}\n\nconst CliTutorMode = ({\n  t, filesPage, isCliTutorModeEnabled, onLeave, isCliTutorModalOpen, command, config, showIcon, doOpenCliTutorModal\n}) => {\n  const downloadConfig = (config) => {\n    const url = window.URL.createObjectURL(new Blob([config]))\n    const link = document.createElement('a')\n    link.style.display = 'none'\n    link.href = url\n    link.download = 'settings.json'\n    document.body.appendChild(link)\n    link.click()\n    window.URL.revokeObjectURL(url)\n  }\n\n  if (isCliTutorModeEnabled) {\n    if (filesPage) {\n      return <CliTutorialModal className='outline-0' onLeave={onLeave} t={t} command={command}/>\n    }\n    return (\n      <Fragment>\n        {\n          showIcon\n            ? <StrokeCode onClick={() => doOpenCliTutorModal(true)} className='dib fill-link pointer mh2' style={{ height: 44 }}/>\n            : <div/>\n        }\n        <Overlay show={isCliTutorModalOpen} onLeave={() => doOpenCliTutorModal(false)}>\n          <CliTutorialModal className='outline-0' onLeave={() => doOpenCliTutorModal(false)} t={t} command={command}\n            downloadConfig={() => downloadConfig(config)}/>\n        </Overlay>\n      </Fragment>\n    )\n  }\n\n  return null\n}\n\nCliTutorialModal.propTypes = {\n  onLeave: PropTypes.func.isRequired,\n  t: PropTypes.func.isRequired,\n  command: PropTypes.string.isRequired\n}\n\nCliTutorialModal.defaultProps = {\n  className: ''\n}\n\nexport default connect(\n  'doOpenCliTutorModal',\n  'selectIsCliTutorModalOpen',\n  'selectIsCliTutorModeEnabled',\n  CliTutorMode\n)\n","import React from 'react'\n\nconst GlyphPin = props => (\n  <svg viewBox='0 0 100 100' {...props}>\n    <path d='M41.72 58.28l-2.05-2.04-4.08 4.09-8.18 8.17-4.09 4.09-2.04 6.13 6.13-2.04 4.09-4.09 8.17-8.17 4.09-4.09-2.04-2.05z' />\n    <path d='M78 43.51a1 1 0 0 0 .45-1.64L68.28 31.72l-2-2-8.11-8.1a1 1 0 0 0-1.64.45 22.66 22.66 0 0 0-.88 5.64.89.89 0 0 1-.27.65L39.6 44.05a.93.93 0 0 1-.81.26 23.39 23.39 0 0 0-8.52.45 1 1 0 0 0-.44 1.64l11.89 11.88L53.6 70.17a1 1 0 0 0 1.64-.44 23.39 23.39 0 0 0 .45-8.52.93.93 0 0 1 .31-.81l15.69-15.74a.89.89 0 0 1 .65-.27 22.66 22.66 0 0 0 5.66-.88z' />\n  </svg>\n)\n\nexport default GlyphPin\n","import React from 'react'\n\nconst StrokeDecentralization = props => (\n  <svg viewBox='0 0 100 100' {...props}>\n    <path d='M90 39.9a4.75 4.75 0 0 0-5.4-3.9 4.66 4.66 0 0 0-2.18 1l-8.25-5.41a4.59 4.59 0 0 0 .11-2 4.81 4.81 0 0 0-.25-.94l5.3-4.33a1.22 1.22 0 0 0 .17.15 4.67 4.67 0 0 0 2.78.91 4.79 4.79 0 0 0 3.85-2 4.75 4.75 0 0 0-4.58-7.48 4.74 4.74 0 0 0-4 5.43c0 .13.07.26.1.39l-5.59 4.57a4.69 4.69 0 0 0-3.26-.69 4.85 4.85 0 0 0-.63.16L58.16 11.6c.06-.07.12-.12.17-.19a4.68 4.68 0 0 0 .85-3.53 4.76 4.76 0 1 0-4 5.43c.14 0 .26-.07.4-.1L65.77 27.5a4.73 4.73 0 0 0-.86 3.5c0 .15.07.29.1.43L50 41.13l-.17-.13a4.73 4.73 0 0 0-3.53-.84 4.75 4.75 0 0 0-.7 9.21l.4 25.88a4.73 4.73 0 0 0-2.14 1.53L19.4 67.92a6.35 6.35 0 0 0 0-.87 4.73 4.73 0 0 0-1.9-3.1 4.75 4.75 0 1 0-2.79 8.59 4.73 4.73 0 0 0 3.71-1.81L42.8 79.6a5 5 0 0 0 .05.86c0 .16.08.31.12.46l-10.3 6.75-.14-.13a4.73 4.73 0 0 0-3.53-.85 4.75 4.75 0 0 0 .73 9.44 4.84 4.84 0 0 0 .75-.06 4.73 4.73 0 0 0 3.94-5.43 3.43 3.43 0 0 0-.11-.46l10.3-6.75a4.64 4.64 0 0 0 3.67 1 4.75 4.75 0 0 0 3.61-2.82l12 1a4.73 4.73 0 1 0 .24-3l-12-1A4.73 4.73 0 0 0 49 75.22l-.4-25.93a4.72 4.72 0 0 0 3.13-5.22c0-.14-.08-.28-.11-.42l15-9.66c.06 0 .11.11.17.15a4.7 4.7 0 0 0 3.53.85 4.8 4.8 0 0 0 2.19-1l8.24 5.41a4.74 4.74 0 1 0 9.25.5zM16.88 69.41A2.75 2.75 0 0 1 12 68.22a2.75 2.75 0 0 1 2.28-3.14 3.25 3.25 0 0 1 .44 0 2.73 2.73 0 0 1 1.6.52 2.69 2.69 0 0 1 1.1 1.79 2.73 2.73 0 0 1-.54 2.02zm51.2 9.34a3.11 3.11 0 0 1 .43 0 2.74 2.74 0 0 1 1.61.52 2.69 2.69 0 0 1 1.1 1.73 2.75 2.75 0 1 1-3.14-2.28zM80.07 19A2.74 2.74 0 0 1 85 20.18a2.7 2.7 0 0 1-.49 2 2.75 2.75 0 0 1-3.84.61A2.74 2.74 0 0 1 79.58 21a2.7 2.7 0 0 1 .49-2zm-27.19-8.16a2.74 2.74 0 0 1 1.18-4.93 3.27 3.27 0 0 1 .44 0 2.75 2.75 0 1 1-1.62 5zM32 93a2.75 2.75 0 0 1-3.84.61 2.77 2.77 0 0 1-1.16-1.8 2.73 2.73 0 0 1 .5-2 2.69 2.69 0 0 1 1.79-1.09 2.09 2.09 0 0 1 .43 0 2.68 2.68 0 0 1 1.61.53A2.74 2.74 0 0 1 32 93zm18.29-13.7a2.74 2.74 0 1 1-3.18-2.3 3.13 3.13 0 0 1 .43 0 2.75 2.75 0 0 1 2.71 2.29zm-1-32.86a2.77 2.77 0 0 1-1.8 1.1 2.71 2.71 0 0 1-2-.5 2.74 2.74 0 0 1-1.1-1.79 2.71 2.71 0 0 1 .5-2 2.74 2.74 0 0 1 1.79-1.1 3.11 3.11 0 0 1 .43 0 2.74 2.74 0 0 1 1.61.52 2.69 2.69 0 0 1 1.1 1.8 2.75 2.75 0 0 1-.56 1.96zM70 33a2.75 2.75 0 1 1 2.29-3.14A2.75 2.75 0 0 1 70 33zm15.77 10.35a2.75 2.75 0 0 1-3.14-2.28 2.74 2.74 0 1 1 3.14 2.28z' />\n  </svg>\n)\n\nexport default StrokeDecentralization\n","import React from 'react'\n\nconst GlyphTick = props => (\n  <svg viewBox='0 0 100 100' {...props}>\n    <path d='M50 20.11A29.89 29.89 0 1 0 79.89 50 29.89 29.89 0 0 0 50 20.11zM44.18 63.6L32.53 52l3.92-4 7.73 7.73L63.55 36.4l3.92 3.92z' />\n  </svg>\n)\n\nexport default GlyphTick\n","const downloadFile = (srcUrl, filename, progressCallback, method = 'GET') => {\n  const xhr = new window.XMLHttpRequest()\n  let total = 0\n\n  const abort = () => {\n    xhr.abort()\n    progressCallback(null)\n  }\n\n  xhr.responseType = 'blob'\n  xhr.open(method, srcUrl, true)\n\n  xhr.onload = (e) => {\n    progressCallback(100)\n\n    const res = xhr.response\n    const blob = new window.Blob([res])\n    const url = window.URL.createObjectURL(blob)\n    const a = document.createElement('a')\n\n    document.body.appendChild(a)\n    a.style = 'display:none'\n    a.href = url\n    a.download = filename\n    a.click()\n\n    window.URL.revokeObjectURL(url)\n    progressCallback(null)\n  }\n\n  xhr.onprogress = (e) => {\n    total = e.lengthComputable ? e.total : (total ||\n      xhr.getResponseHeader('X-Content-Length') ||\n      xhr.getResponseHeader('Content-Length'))\n\n    progressCallback((e.loaded / total) * 100)\n  }\n\n  xhr.send()\n  return { abort }\n}\nexport default downloadFile\n","import React, { forwardRef } from 'react'\nimport { Dropdown as Drop, DropdownMenu as Menu } from '@tableflip/react-dropdown'\nimport StrokeCode from '../../icons/StrokeCode'\n\nexport const Option = ({ children, onClick, className = '', isCliTutorModeEnabled, onCliTutorMode, ...props }) => (\n  isCliTutorModeEnabled\n    ? <div className='flex items-center justify-between'>\n      <button role='menuitem' className={`bg-animate hover-bg-near-white pa2 pointer flex items-center flex-grow-1 ${className}`} onClick={onClick} {...props}>\n        {children}\n      </button>\n      <button {...props} className={`bg-animate hover-bg-near-white pa2 pointer flex items-center  ${className}`}>\n        <StrokeCode {...props} onClick={() => onCliTutorMode(true)} className='dib fill-link pointer' style={{ height: 38 }}/>\n      </button>\n    </div>\n    : <button role=\"menuitem\" className={`bg-animate hover-bg-near-white pa2 pointer flex items-center ${className}`} onClick={onClick} {...props}>\n      {children}\n    </button>\n)\n\nexport const DropdownMenu = forwardRef((props, ref) => {\n  const { children, arrowMarginRight, width = 200, translateX = 0, translateY = 0, ...rest } = props\n\n  return (\n    <Menu\n      className='sans-serif br2 charcoal'\n      boxShadow='rgba(105, 196, 205, 0.5) 0px 1px 10px 0px'\n      width={width}\n      arrowAlign='right'\n      arrowMarginRight={arrowMarginRight || '13px'}\n      left={`calc(100% - ${width}px)`}\n      translateX={translateX}\n      translateY={translateY}\n      {...rest}>\n      <div className='flex flex-column' ref={ref} role=\"menu\">\n        {children}\n      </div>\n    </Menu>\n  )\n})\n\nexport const Dropdown = Drop\n","import React from 'react'\n\nconst StrokeCopy = props => (\n  <svg viewBox='0 0 100 100' {...props}>\n    <path d='M67.36 30.73H29.1a3.92 3.92 0 0 0-3.91 3.91V72.9a3.92 3.92 0 0 0 3.91 3.91h38.26a3.92 3.92 0 0 0 3.91-3.91V34.64a3.91 3.91 0 0 0-3.91-3.91zm1.31 42.17a1.31 1.31 0 0 1-1.31 1.31H29.1a1.31 1.31 0 0 1-1.31-1.31V34.64a1.31 1.31 0 0 1 1.31-1.31h38.26a1.31 1.31 0 0 1 1.31 1.31z' />\n    <path d='M72.75 23.19h-32.3a1.3 1.3 0 0 0 0 2.6h32.3A4.3 4.3 0 0 1 77 30.08v32.3a1.3 1.3 0 0 0 2.6 0v-32.3a6.9 6.9 0 0 0-6.85-6.89zM35.37 45.68H47.9a.75.75 0 0 0 0-1.5H35.37a.75.75 0 0 0 0 1.5zM61.1 53H35.37a.75.75 0 0 0 0 1.5H61.1a.75.75 0 0 0 0-1.5zm0 8.86H35.37a.75.75 0 1 0 0 1.5H61.1a.75.75 0 1 0 0-1.5z' />\n  </svg>\n)\n\nexport default StrokeCopy\n","import React from 'react'\n\nconst StrokeShare = props => (\n  <svg viewBox='0 0 100 100' {...props}>\n    <path d='M68.4 54.52a11.35 11.35 0 0 0-9.17 4.69l-16.41-7.6A12.34 12.34 0 0 0 43 50a12.06 12.06 0 0 0-.13-1.61l16.41-7.6a11.33 11.33 0 1 0-2.18-6.66v.49l-17 7.87a11.34 11.34 0 1 0 0 15l17 7.86v.49a11.35 11.35 0 1 0 11.3-11.32zm0-29.14a8.75 8.75 0 1 1-8.75 8.75 8.76 8.76 0 0 1 8.75-8.75zM57.25 36.19a11.12 11.12 0 0 0 1.17 3.32L42.5 46.88A11.38 11.38 0 0 0 41 43.7zM31.6 58.75A8.75 8.75 0 1 1 40.35 50a9.66 9.66 0 0 1-.15 1.62 8.76 8.76 0 0 1-8.6 7.13zM41 56.3a11.55 11.55 0 0 0 1.48-3.18l15.91 7.37a11.12 11.12 0 0 0-1.17 3.32zm27.4 18.32a8.75 8.75 0 1 1 8.75-8.75 8.77 8.77 0 0 1-8.75 8.75z' />\n  </svg>\n)\n\nexport default StrokeShare\n","import React from 'react'\n\nconst StrokePencil = props => (\n  <svg viewBox='0 0 100 100' {...props}>\n    <path d='M82.89 25.64l-6.53-6.53a7.79 7.79 0 0 0-11 .35L23.72 61.1l-4.6 17.19a3.8 3.8 0 0 0 1 3.61 3.74 3.74 0 0 0 2.64 1.1 3.87 3.87 0 0 0 .95-.12l17.19-4.6 41.64-41.64a7.79 7.79 0 0 0 .35-11zM58 31l13 13-2.28 2.28-12.98-12.96zM26 64.21L37.79 76l-11.16 3L23 75.23zM23 80a.8.8 0 0 1-.77-.19A.75.75 0 0 1 22 79l.41-1.54 2 2.09zm16.78-4.8L26.83 62.23l27.49-27.49 12.94 12.94zm40.64-40.68l-8 8-12.99-12.89 8.05-8a4.8 4.8 0 0 1 6.76-.35l6.53 6.53a4.8 4.8 0 0 1-.35 6.71z' />\n  </svg>\n)\n\nexport default StrokePencil\n","import React from 'react'\n\nconst StrokeTrash = props => (\n  <svg viewBox='0 0 100 100' {...props}>\n    <path d='M25.98 73.62a9.68 9.68 0 0 0 9.45 9.88h29.15a9.68 9.68 0 0 0 9.44-9.88V30.2h-48zm3-40.42h42v40.42a6.68 6.68 0 0 1-6.44 6.88H35.43a6.68 6.68 0 0 1-6.45-6.88z' />\n    <path d='M39.12 74.54a1 1 0 0 0 1-1V39.2a1 1 0 0 0-2 0v34.34a1 1 0 0 0 1 1zm10.77 0a1 1 0 0 0 1-1V39.2a1 1 0 0 0-2 0v34.34a1 1 0 0 0 1 1zm10.78 0a1 1 0 0 0 1-1V39.2a1 1 0 0 0-2 0v34.34a1 1 0 0 0 1 1zm15.17-50.29h-14a.92.92 0 0 0-.12-.53l-4-6.73a1 1 0 0 0-.86-.49H43.14a1 1 0 0 0-.86.49l-4 6.73a.92.92 0 0 0-.12.53h-14a1.5 1.5 0 0 0 0 3h51.68a1.5 1.5 0 0 0 0-3zM43.71 18.5H56.3l3.4 5.75H40.32z' />\n  </svg>\n)\n\nexport default StrokeTrash\n","import React from 'react'\n\nconst StrokePin = props => (\n  <svg viewBox='0 0 100 100' {...props}>\n    <path d='M86.26 39.86l-23.71-23.7a2.44 2.44 0 0 0-4.08 1.1 27.42 27.42 0 0 0-1.07 6.84L39.15 42.34a28.5 28.5 0 0 0-10.33.55 2.39 2.39 0 0 0-1.77 1.68 2.46 2.46 0 0 0 .62 2.43l11 11-18.2 18.12a.68.68 0 0 0-.18.29l-2.39 7.16a.74.74 0 0 0 .18.76.73.73 0 0 0 .53.22 1 1 0 0 0 .24 0L26 82.13a.79.79 0 0 0 .3-.13l18.17-18.22 11 11a2.44 2.44 0 0 0 1.73.72 2.44 2.44 0 0 0 2.37-1.86 28.54 28.54 0 0 0 .55-10.34L78.32 45a27.35 27.35 0 0 0 6.83-1 2.46 2.46 0 0 0 1.74-1.75 2.42 2.42 0 0 0-.63-2.39zm-60.9 40.9l-5.56 1.86 1.85-5.57L39.7 59l3.71 3.71zm31.71-8.06L29.71 45.35a25.94 25.94 0 0 1 9-.45l18.82 17.82a2.55 2.55 0 0 0 0 .83 25.73 25.73 0 0 1-.46 9.15zm1.22-11.32L40.51 44.57a2.15 2.15 0 0 0 .41-.32l17.87-17.87 17.73 16.76zm19.92-19h-.24L59.75 25.22a2.31 2.31 0 0 0 .24-1 24.38 24.38 0 0 1 .92-6l23.32 23.29a24.4 24.4 0 0 1-6.02.91z' />\n  </svg>\n)\n\nexport default StrokePin\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { withTranslation } from 'react-i18next'\nimport { CopyToClipboard } from 'react-copy-to-clipboard'\nimport { Dropdown, DropdownMenu, Option } from '../dropdown/Dropdown'\nimport StrokeCopy from '../../icons/StrokeCopy'\nimport StrokeShare from '../../icons/StrokeShare'\nimport StrokePencil from '../../icons/StrokePencil'\nimport StrokeIpld from '../../icons/StrokeIpld'\nimport StrokeTrash from '../../icons/StrokeTrash'\nimport StrokeDownload from '../../icons/StrokeDownload'\nimport StrokePin from '../../icons/StrokePin'\nimport { cliCmdKeys } from '../../bundles/files/consts'\n\nclass ContextMenu extends React.Component {\n  constructor (props) {\n    super(props)\n    this.dropdownMenuRef = React.createRef()\n  }\n\n  state = {\n    dropdown: false\n  }\n\n  wrap = (name, cliOptions) => () => {\n    if (name === 'onCliTutorMode' && cliOptions) {\n      this.props.doSetCliOptions(cliOptions)\n    }\n    this.props.handleClick()\n    this.props[name]()\n  }\n\n  componentDidUpdate () {\n    if (this.props.autofocus && this.props.isOpen) {\n      if (!this.dropdownMenuRef.current) return\n\n      const firstButton = this.dropdownMenuRef.current.querySelector('button')\n      if (!firstButton) return\n\n      firstButton.focus()\n    }\n  }\n\n  render () {\n    const {\n      t, onRename, onRemove, onDownload, onInspect, onShare,\n      translateX, translateY, className, isMfs, isUnknown, isCliTutorModeEnabled\n    } = this.props\n    return (\n      <Dropdown className={className}>\n        <DropdownMenu\n          ref={this.dropdownMenuRef}\n          top={-8}\n          arrowMarginRight='11px'\n          left='calc(100% - 200px)'\n          translateX={-translateX}\n          translateY={-translateY}\n          open={this.props.isOpen}\n          onDismiss={this.props.handleClick}>\n          { onShare &&\n            <Option onClick={this.wrap('onShare')}>\n              <StrokeShare className='w2 mr2 fill-aqua' />\n              {t('actions.share')}\n            </Option>\n          }\n          <CopyToClipboard text={String(this.props.cid)} onCopy={this.props.handleClick}>\n            <Option>\n              <StrokeCopy className='w2 mr2 fill-aqua' />\n              {t('actions.copyHash')}\n            </Option>\n          </CopyToClipboard>\n          { onInspect &&\n            <Option onClick={this.wrap('onInspect')}>\n              <StrokeIpld className='w2 mr2 fill-aqua' />\n              {t('app:actions.inspect')}\n            </Option>\n          }\n          <Option onClick={this.wrap('onPinning')} isCliTutorModeEnabled={isCliTutorModeEnabled}\n            onCliTutorMode={this.wrap('onCliTutorMode', cliCmdKeys.PIN_OBJECT)}>\n            <StrokePin className='w2 mr2 fill-aqua' />\n            { t('app:actions.setPinning') }\n          </Option>\n          { !isUnknown && onDownload &&\n            <Option onClick={this.wrap('onDownload')} isCliTutorModeEnabled={isCliTutorModeEnabled}\n              onCliTutorMode={this.wrap('onCliTutorMode', cliCmdKeys.DOWNLOAD_OBJECT_COMMAND)}>\n              <StrokeDownload className='w2 mr2 fill-aqua' />\n              {t('app:actions.download')}\n            </Option>\n          }\n          { !isUnknown && isMfs && onRename &&\n            <Option onClick={this.wrap('onRename')} isCliTutorModeEnabled={isCliTutorModeEnabled}\n              onCliTutorMode={this.wrap('onCliTutorMode', cliCmdKeys.RENAME_IPFS_OBJECT)}>\n              <StrokePencil className='w2 mr2 fill-aqua' />\n              {t('app:actions.rename')}\n            </Option>\n          }\n          { !isUnknown && isMfs && onRemove &&\n            <Option onClick={this.wrap('onRemove')} isCliTutorModeEnabled={isCliTutorModeEnabled}\n              onCliTutorMode={this.wrap('onCliTutorMode', cliCmdKeys.REMOVE_FILE_FROM_IPFS)}>\n              <StrokeTrash className='w2 mr2 fill-aqua' />\n              {t('app:actions.remove')}\n            </Option>\n          }\n        </DropdownMenu>\n      </Dropdown>\n    )\n  }\n}\n\nContextMenu.propTypes = {\n  isMfs: PropTypes.bool.isRequired,\n  isOpen: PropTypes.bool.isRequired,\n  isUnknown: PropTypes.bool.isRequired,\n  hash: PropTypes.string,\n  pinned: PropTypes.bool,\n  handleClick: PropTypes.func,\n  translateX: PropTypes.number.isRequired,\n  translateY: PropTypes.number.isRequired,\n  left: PropTypes.number.isRequired,\n  onRemove: PropTypes.func,\n  onRename: PropTypes.func,\n  onDownload: PropTypes.func,\n  onInspect: PropTypes.func,\n  onShare: PropTypes.func,\n  className: PropTypes.string,\n  t: PropTypes.func.isRequired,\n  tReady: PropTypes.bool.isRequired,\n  autofocus: PropTypes.bool\n}\n\nContextMenu.defaultProps = {\n  isMfs: false,\n  isOpen: false,\n  isUnknown: false,\n  top: 0,\n  left: 0,\n  right: 'auto',\n  translateX: 0,\n  translateY: 0,\n  className: ''\n}\n\nexport default withTranslation('files', { withRef: true })(ContextMenu)\n","import React from 'react'\nimport { withTranslation, Trans } from 'react-i18next'\nimport Box from '../../../components/box/Box'\n\nconst CompanionInfo = ({ t }) => (\n  <div className='mv4 tc navy f5' >\n    <Box style={{ background: 'rgba(105, 196, 205, 0.1)' }}>\n      <Trans i18nKey='companionInfo' t={t}>\n        <p className='ma0'>As you are using <strong>IPFS Companion</strong>, the files view is limited to files added while using the extension.</p>\n      </Trans>\n    </Box>\n  </div>\n)\n\nexport default withTranslation('files')(CompanionInfo)\n","import React from 'react'\nimport { withTranslation, Trans } from 'react-i18next'\nimport Box from '../../../components/box/Box'\n\nconst AddFilesInfo = ({ t }) => (\n  <div className='mv4 tc navy f5' >\n    <Box style={{ background: 'rgba(105, 196, 205, 0.1)' }}>\n      <Trans i18nKey='addFilesInfo' t={t}>\n        <p className='ma0'>No files here yet! Add files to your local IPFS node by clicking the <strong>Import</strong> button above.</p>\n      </Trans>\n    </Box>\n  </div>\n)\n\nexport default withTranslation('files')(AddFilesInfo)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport CompanionInfo from './companion-info/CompanionInfo'\nimport AddFilesInfo from './add-files-info/AddFilesInfo'\n\nconst InfoBoxes = ({ isRoot, isCompanion, filesExist }) => (\n  <div>\n    { isRoot && isCompanion && <CompanionInfo /> }\n    { isRoot && !filesExist && !isCompanion && <AddFilesInfo /> }\n  </div>\n)\n\nInfoBoxes.propTypes = {\n  isRoot: PropTypes.bool.isRequired,\n  isCompanion: PropTypes.bool.isRequired,\n  filesExist: PropTypes.bool.isRequired\n}\n\nexport default InfoBoxes\n","const extToType = {\n  wav: 'audio',\n  bwf: 'audio',\n  aiff: 'audio',\n  flac: 'audio',\n  m4a: 'audio',\n  pac: 'audio',\n  tta: 'audio',\n  wv: 'audio',\n  aac: 'audio',\n  mp2: 'audio',\n  mp3: 'audio',\n  amr: 'audio',\n  s3m: 'audio',\n  '3gp': 'audio',\n  au: 'audio',\n  dct: 'audio',\n  dss: 'audio',\n  gsm: 'audio',\n  m4p: 'audio',\n  mmf: 'audio',\n  mpc: 'audio',\n  ogg: 'audio',\n  oga: 'audio',\n  opus: 'audio',\n  ra: 'audio',\n  sln: 'audio',\n  vox: 'audio',\n  '3g2': 'video',\n  aaf: 'video',\n  asf: 'video',\n  avchd: 'video',\n  avi: 'video',\n  drc: 'video',\n  flv: 'video',\n  m2v: 'video',\n  m4v: 'video',\n  mkv: 'video',\n  mng: 'video',\n  mov: 'video',\n  mp4: 'video',\n  mpe: 'video',\n  mpeg: 'video',\n  mpg: 'video',\n  mpv: 'video',\n  mxf: 'video',\n  nsv: 'video',\n  ogv: 'video',\n  qt: 'video',\n  rm: 'video',\n  rmvb: 'video',\n  roq: 'video',\n  svi: 'video',\n  vob: 'video',\n  webm: 'video',\n  wmv: 'video',\n  yuv: 'video',\n  art: 'image',\n  bmp: 'image',\n  blp: 'image',\n  cd5: 'image',\n  cit: 'image',\n  cpt: 'image',\n  cr2: 'image',\n  cut: 'image',\n  dds: 'image',\n  dib: 'image',\n  djvu: 'image',\n  egt: 'image',\n  exif: 'image',\n  gif: 'image',\n  gpl: 'image',\n  grf: 'image',\n  icns: 'image',\n  ico: 'image',\n  iff: 'image',\n  jng: 'image',\n  jpeg: 'image',\n  jpg: 'image',\n  jfif: 'image',\n  jp2: 'image',\n  jps: 'image',\n  lbm: 'image',\n  max: 'image',\n  miff: 'image',\n  msp: 'image',\n  nitf: 'image',\n  ota: 'image',\n  pbm: 'image',\n  pc1: 'image',\n  pc2: 'image',\n  pc3: 'image',\n  pcf: 'image',\n  pcx: 'image',\n  pdn: 'image',\n  pgm: 'image',\n  PI1: 'image',\n  PI2: 'image',\n  PI3: 'image',\n  pict: 'image',\n  pct: 'image',\n  pnm: 'image',\n  pns: 'image',\n  ppm: 'image',\n  psb: 'image',\n  psd: 'image',\n  pdd: 'image',\n  psp: 'image',\n  px: 'image',\n  pxm: 'image',\n  pxr: 'image',\n  qfx: 'image',\n  rle: 'image',\n  sct: 'image',\n  sgi: 'image',\n  rgb: 'image',\n  int: 'image',\n  bw: 'image',\n  tga: 'image',\n  tiff: 'image',\n  tif: 'image',\n  vtf: 'image',\n  xbm: 'image',\n  xcf: 'image',\n  xpm: 'image',\n  '3dv': 'image',\n  amf: 'image',\n  ai: 'image',\n  awg: 'image',\n  cgm: 'image',\n  cdr: 'image',\n  cmx: 'image',\n  dxf: 'image',\n  e2d: 'image',\n  eps: 'image',\n  fs: 'image',\n  gbr: 'image',\n  odg: 'image',\n  svg: 'image',\n  stl: 'image',\n  vrml: 'image',\n  x3d: 'image',\n  sxd: 'image',\n  v2d: 'image',\n  vnd: 'image',\n  wmf: 'image',\n  emf: 'image',\n  png: 'image',\n  webp: 'image',\n  jxr: 'image',\n  hdp: 'image',\n  wdp: 'image',\n  cur: 'image',\n  ecw: 'image',\n  liff: 'image',\n  nrrd: 'image',\n  pam: 'image',\n  pgf: 'image',\n  rgba: 'image',\n  inta: 'image',\n  sid: 'image',\n  ras: 'image',\n  sun: 'image',\n  123: 'calc',\n  '12m': 'calc',\n  _xls: 'calc',\n  _xlsx: 'calc',\n  aws: 'calc',\n  bks: 'calc',\n  cell: 'calc',\n  def: 'calc',\n  dex: 'calc',\n  dfg: 'calc',\n  dis: 'calc',\n  edx: 'calc',\n  edxz: 'calc',\n  ess: 'calc',\n  fcs: 'calc',\n  fm: 'calc',\n  fods: 'calc',\n  fp: 'calc',\n  gnm: 'calc',\n  gnumeric: 'calc',\n  gsheet: 'calc',\n  hcdt: 'calc',\n  imp: 'calc',\n  mar: 'calc',\n  nb: 'calc',\n  ncss: 'calc',\n  nmbtemplate: 'calc',\n  numbers: 'calc',\n  'numbers-tef': 'calc',\n  ods: 'calc',\n  ogw: 'calc',\n  ogwu: 'calc',\n  ots: 'calc',\n  pmd: 'calc',\n  pmdx: 'calc',\n  pmv: 'calc',\n  pmvx: 'calc',\n  qpw: 'calc',\n  rdf: 'calc',\n  sdc: 'calc',\n  stc: 'calc',\n  sxc: 'calc',\n  tmv: 'calc',\n  tmvt: 'calc',\n  uos: 'calc',\n  wki: 'calc',\n  wkq: 'calc',\n  wks: 'calc',\n  wku: 'calc',\n  wq1: 'calc',\n  wq2: 'calc',\n  xl: 'calc',\n  xlr: 'calc',\n  xls: 'calc',\n  xlsb: 'calc',\n  xlshtml: 'calc',\n  xlsm: 'calc',\n  xlsmhtml: 'calc',\n  xlsx: 'calc',\n  xlthtml: 'calc',\n  xltm: 'calc',\n  xltx: 'calc',\n  '1st': 'text',\n  _doc: 'text',\n  _docx: 'text',\n  abw: 'text',\n  adoc: 'text',\n  aim: 'text',\n  ans: 'text',\n  apkg: 'text',\n  apt: 'text',\n  asc: 'text',\n  ascii: 'text',\n  aty: 'text',\n  awp: 'text',\n  awt: 'text',\n  aww: 'text',\n  bad: 'text',\n  bbs: 'text',\n  bdp: 'text',\n  bdr: 'text',\n  bean: 'text',\n  bib: 'text',\n  bibtex: 'text',\n  bml: 'text',\n  bna: 'text',\n  boc: 'text',\n  brx: 'text',\n  btd: 'text',\n  bzabw: 'text',\n  calca: 'text',\n  charset: 'text',\n  chart: 'text',\n  chord: 'text',\n  cnm: 'text',\n  cod: 'text',\n  crwl: 'text',\n  cws: 'text',\n  cyi: 'text',\n  dca: 'text',\n  dfti: 'text',\n  dgs: 'text',\n  diz: 'text',\n  dne: 'text',\n  doc: 'text',\n  docm: 'text',\n  docx: 'text',\n  docxml: 'text',\n  docz: 'text',\n  dox: 'text',\n  dropbox: 'text',\n  dsc: 'text',\n  dvi: 'text',\n  dwd: 'text',\n  dx: 'text',\n  dxb: 'text',\n  dxp: 'text',\n  eio: 'text',\n  eit: 'text',\n  eml: 'text',\n  emlx: 'text',\n  emulecollection: 'text',\n  epp: 'text',\n  err: 'text',\n  etf: 'text',\n  etx: 'text',\n  euc: 'text',\n  'fadein.template': 'text',\n  faq: 'text',\n  fbl: 'text',\n  fcf: 'text',\n  fdf: 'text',\n  fdr: 'text',\n  fds: 'text',\n  fdt: 'text',\n  fdx: 'text',\n  fdxt: 'text',\n  fft: 'text',\n  fgs: 'text',\n  flr: 'text',\n  fodt: 'text',\n  fountain: 'text',\n  fpt: 'text',\n  frt: 'text',\n  fwd: 'text',\n  fwdn: 'text',\n  gmd: 'text',\n  gpd: 'text',\n  gpn: 'text',\n  gsd: 'text',\n  gthr: 'text',\n  gv: 'text',\n  hbk: 'text',\n  hht: 'text',\n  hs: 'text',\n  hwp: 'text',\n  hz: 'text',\n  idx: 'text',\n  iil: 'text',\n  ipf: 'text',\n  ipspot: 'text',\n  jarvis: 'text',\n  jis: 'text',\n  jnp: 'text',\n  joe: 'text',\n  jp1: 'text',\n  jrtf: 'text',\n  jtd: 'text',\n  kes: 'text',\n  klg: 'text',\n  knt: 'text',\n  kon: 'text',\n  kwd: 'text',\n  latex: 'text',\n  lbt: 'text',\n  lis: 'text',\n  lnt: 'text',\n  log: 'text',\n  lp2: 'text',\n  lst: 'text',\n  ltr: 'text',\n  ltx: 'text',\n  lue: 'text',\n  luf: 'text',\n  lwp: 'text',\n  lxfml: 'text',\n  lyt: 'text',\n  lyx: 'text',\n  man: 'text',\n  mbox: 'text',\n  mcw: 'text',\n  'md5.txt': 'text',\n  me: 'text',\n  mell: 'text',\n  mellel: 'text',\n  min: 'text',\n  mnt: 'text',\n  msg: 'text',\n  mw: 'text',\n  mwd: 'text',\n  mwp: 'text',\n  ndoc: 'text',\n  nfo: 'text',\n  ngloss: 'text',\n  njx: 'text',\n  note: 'text',\n  notes: 'text',\n  now: 'text',\n  nwctxt: 'text',\n  nwm: 'text',\n  nwp: 'text',\n  ocr: 'text',\n  odif: 'text',\n  odm: 'text',\n  odo: 'text',\n  odt: 'text',\n  ofl: 'text',\n  opeico: 'text',\n  openbsd: 'text',\n  ort: 'text',\n  ott: 'text',\n  p7s: 'text',\n  pages: 'text',\n  'pages-tef': 'text',\n  pdpcmd: 'text',\n  pfx: 'text',\n  pjt: 'text',\n  plain: 'text',\n  plantuml: 'text',\n  pmo: 'text',\n  prt: 'text',\n  psw: 'text',\n  pu: 'text',\n  pvj: 'text',\n  pvm: 'text',\n  pwd: 'text',\n  pwdp: 'text',\n  pwdpl: 'text',\n  pwi: 'text',\n  pwr: 'text',\n  qdl: 'text',\n  qpf: 'text',\n  rad: 'text',\n  readme: 'text',\n  rft: 'text',\n  ris: 'text',\n  rpt: 'text',\n  rst: 'text',\n  rtd: 'text',\n  rtf: 'text',\n  rtfd: 'text',\n  rtx: 'text',\n  run: 'text',\n  rvf: 'text',\n  rzk: 'text',\n  rzn: 'text',\n  saf: 'text',\n  safetext: 'text',\n  sam: 'text',\n  save: 'text',\n  scc: 'text',\n  scm: 'text',\n  scriv: 'text',\n  scrivx: 'text',\n  scw: 'text',\n  sdm: 'text',\n  sdoc: 'text',\n  sdw: 'text',\n  se: 'text',\n  session: 'text',\n  sgm: 'text',\n  sig: 'text',\n  skcard: 'text',\n  sla: 'text',\n  'sla.gz': 'text',\n  smf: 'text',\n  sms: 'text',\n  ssa: 'text',\n  story: 'text',\n  strings: 'text',\n  stw: 'text',\n  sty: 'text',\n  'sublime-project': 'text',\n  'sublime-workspace': 'text',\n  sxg: 'text',\n  sxw: 'text',\n  tab: 'text',\n  tdf: 'text',\n  template: 'text',\n  tex: 'text',\n  text: 'text',\n  textclipping: 'text',\n  thp: 'text',\n  tlb: 'text',\n  tm: 'text',\n  tmd: 'text',\n  tmdx: 'text',\n  tmvx: 'text',\n  tpc: 'text',\n  trelby: 'text',\n  tvj: 'text',\n  txt: 'text',\n  u3i: 'text',\n  unauth: 'text',\n  unx: 'text',\n  uof: 'text',\n  uot: 'text',\n  upd: 'text',\n  utf8: 'text',\n  utxt: 'text',\n  vct: 'text',\n  vnt: 'text',\n  vw: 'text',\n  wbk: 'text',\n  webdoc: 'text',\n  wn: 'text',\n  wp: 'text',\n  wp4: 'text',\n  wp5: 'text',\n  wp6: 'text',\n  wp7: 'text',\n  wpa: 'text',\n  wpd: 'text',\n  wpl: 'text',\n  wps: 'text',\n  wpt: 'text',\n  wpw: 'text',\n  wri: 'text',\n  wsd: 'text',\n  wtt: 'text',\n  wtx: 'text',\n  xbdoc: 'text',\n  xbplate: 'text',\n  xdl: 'text',\n  xwp: 'text',\n  xy: 'text',\n  xy3: 'text',\n  xyp: 'text',\n  xyw: 'text',\n  zabw: 'text',\n  zrtf: 'text',\n  zw: 'text'\n}\nexport default extToType\n","import fileExtension from 'file-extension'\nimport extToType from './extToType'\n\nfunction fileType (filename) {\n  const ext = fileExtension(filename)\n  return extToType[ext] || ext\n}\nexport default fileType\n","import React, { useCallback, useEffect, useState } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'redux-bundler-react'\nimport { isBinary } from 'istextorbinary'\nimport { Trans, withTranslation } from 'react-i18next'\nimport typeFromExt from '../type-from-ext'\nimport ComponentLoader from '../../loader/ComponentLoader.js'\nimport './FilePreview.css'\nimport CID from 'cids'\nimport { useDrag } from 'react-dnd'\nimport fromUint8ArrayToString from 'uint8arrays/to-string'\nimport Button from '../../components/button/Button'\n\nconst Drag = ({ name, size, cid, path, children }) => {\n  const [, drag] = useDrag({\n    item: { name, size, cid, path, type: 'FILE' }\n  })\n\n  return <div ref={drag}>\n    { children }\n  </div>\n}\n\nconst Preview = (props) => {\n  const { t, name, cid, size, availableGatewayUrl, publicGateway, read, onDownload } = props\n  const [content, setContent] = useState(null)\n  const [hasMoreContent, setHasMoreContent] = useState(false)\n  const [buffer, setBuffer] = useState(null)\n  const type = typeFromExt(name)\n\n  const loadContent = useCallback(async () => {\n    const readBuffer = buffer || await read()\n    if (!buffer) {\n      setBuffer(readBuffer)\n    }\n\n    const { value, done } = await readBuffer.next()\n    const previousContent = content || ''\n\n    const currentContent = previousContent + fromUint8ArrayToString(value)\n\n    setContent(currentContent)\n\n    const hasMore = !done && new TextEncoder().encode(currentContent).length < size\n\n    setHasMoreContent(hasMore)\n  }, [buffer, content, read, size])\n\n  useEffect(() => {\n    loadContent()\n  }, // eslint-disable-next-line react-hooks/exhaustive-deps\n  [])\n\n  const src = `${availableGatewayUrl}/ipfs/${cid}?filename=${encodeURIComponent(name)}`\n  const className = 'mw-100 mt3 bg-snow-muted pa2 br2 border-box'\n\n  switch (type) {\n    case 'audio':\n      return (\n        <Drag {...props}>\n          {/* eslint-disable-next-line jsx-a11y/media-has-caption */}\n          <audio width='100%' controls>\n            <source src={src} />\n          </audio>\n        </Drag>\n      )\n    case 'pdf':\n      return (\n        <Drag {...props}>\n          <object className=\"FilePreviewPDF w-100\" data={src} type='application/pdf'>\n            {t('noPDFSupport')}\n            <a href={src} download target='_blank' rel='noopener noreferrer' className='underline-hover navy-muted'>{t('downloadPDF')}</a>\n          </object>\n        </Drag>\n      )\n    case 'video':\n      return (\n        <Drag {...props}>\n          {/* eslint-disable-next-line jsx-a11y/media-has-caption */}\n          <video controls className={className}>\n            <source src={src} />\n          </video>\n        </Drag>\n      )\n    case 'image':\n      return (\n        <Drag {...props}>\n          <img className={className} alt={name} src={src} />\n        </Drag>\n      )\n    default: {\n      const srcPublic = `${publicGateway}/ipfs/${cid}?filename=${encodeURIComponent(name)}`\n\n      const cantPreview = (\n        <div className='mt4'>\n          <p className='b'>{t('cantBePreviewed')} <span role='img' aria-label='sad'>😢</span></p>\n          <p>\n            { availableGatewayUrl === publicGateway\n              ? <Trans i18nKey='openWithPublicGateway' t={t}>\n            Try opening it instead with your <a href={src} download target='_blank' rel='noopener noreferrer' className='link blue'>public gateway</a>.\n              </Trans>\n              : <Trans i18nKey='openWithLocalAndPublicGateway' t={t}>\n          Try opening it instead with your <a href={src} download target='_blank' rel='noopener noreferrer' className='link blue'>local gateway</a> or <a href={srcPublic} download target='_blank' rel='noopener noreferrer' className='link blue'>public gateway</a>.\n              </Trans>\n\n            }\n\n          </p>\n        </div>\n      )\n\n      if (size > 1024 * 1024 * 4) {\n        return cantPreview\n      }\n\n      if (!content) {\n        return <ComponentLoader />\n      }\n\n      if (isBinary(name, content)) {\n        return cantPreview\n      }\n\n      return <>\n        <pre className={`${className} overflow-auto monospace`}>\n          {content}\n        </pre>\n        { hasMoreContent && <div className=\"w-100 flex items-center justify-center\">\n          <Button onClick={ loadContent }>\n            { t('loadMore')}\n          </Button>\n          <Button className=\"mh2\" onClick={ onDownload }>\n            { t('app:actions.download')}\n          </Button>\n        </div>}\n      </>\n    }\n  }\n}\n\nPreview.propTypes = {\n  name: PropTypes.string.isRequired,\n  hash: PropTypes.instanceOf(CID),\n  size: PropTypes.number.isRequired,\n  availableGatewayUrl: PropTypes.string.isRequired,\n  read: PropTypes.func.isRequired,\n  content: PropTypes.object,\n  t: PropTypes.func.isRequired,\n  tReady: PropTypes.bool.isRequired\n}\n\nexport default connect(\n  'selectAvailableGatewayUrl',\n  'selectPublicGateway',\n  withTranslation('files')(Preview)\n)\n","import React from 'react'\nimport classNames from 'classnames'\nimport PropTypes from 'prop-types'\nimport { humanSize } from '../../lib/files'\nimport { withTranslation } from 'react-i18next'\nimport StrokePin from '../../icons/StrokePin'\nimport GlyphSmallCancel from '../../icons/GlyphSmallCancel'\nimport StrokeShare from '../../icons/StrokeShare'\nimport StrokePencil from '../../icons/StrokePencil'\nimport StrokeIpld from '../../icons/StrokeIpld'\nimport StrokeTrash from '../../icons/StrokeTrash'\nimport StrokeDownload from '../../icons/StrokeDownload'\nimport './SelectedActions.css'\n\nconst styles = {\n  bar: {\n    background: '#F0F6FA',\n    borderColor: '#CFE0E2',\n    color: '#59595A'\n  },\n  count: {\n    backgroundColor: '#69C4CD',\n    color: '#F9FAFB',\n    width: '38px',\n    height: '38px'\n  },\n  countNumber: {\n    top: '50%',\n    left: '50%',\n    transform: 'translate(-50%, -50%)'\n  },\n  size: {\n    color: '#A4BFCC'\n  }\n}\n\nconst classes = {\n  svg: (v) => v ? 'w3 pointer hover-fill-navy-muted' : 'w3',\n  action: (v) => v ? 'pointer' : 'disabled o-50'\n}\n\nclass SelectedActions extends React.Component {\n  constructor (props) {\n    super(props)\n    this.containerRef = React.createRef()\n  }\n\n  static propTypes = {\n    count: PropTypes.number.isRequired,\n    size: PropTypes.number.isRequired,\n    unselect: PropTypes.func.isRequired,\n    remove: PropTypes.func.isRequired,\n    setPinning: PropTypes.func.isRequired,\n    share: PropTypes.func.isRequired,\n    download: PropTypes.func.isRequired,\n    rename: PropTypes.func.isRequired,\n    inspect: PropTypes.func.isRequired,\n    downloadProgress: PropTypes.number,\n    t: PropTypes.func.isRequired,\n    tReady: PropTypes.bool.isRequired,\n    isMfs: PropTypes.bool.isRequired,\n    animateOnStart: PropTypes.bool\n  }\n\n  static defaultProps = {\n    className: ''\n  }\n\n  state = {\n    force100: false\n  }\n\n  componentDidUpdate (prev) {\n    if (this.props.downloadProgress === 100 && prev.downloadProgress !== 100) {\n      this.setState({ force100: true })\n      setTimeout(() => {\n        this.setState({ force100: false })\n      }, 2000)\n    }\n  }\n\n  componentDidMount () {\n    this.containerRef.current && this.containerRef.current.focus()\n  }\n\n  get downloadText () {\n    if (this.state.force100) {\n      return this.props.t('finished')\n    }\n\n    if (!this.props.downloadProgress) {\n      return this.props.t('app:actions.download')\n    }\n\n    if (this.props.downloadProgress === 100) {\n      return this.props.t('finished')\n    }\n\n    return this.props.downloadProgress.toFixed(0) + '%'\n  }\n\n  render () {\n    const { t, tReady, animateOnStart, count, size, unselect, remove, share, setPinning, download, downloadProgress, rename, inspect, className, style, isMfs, ...props } = this.props\n\n    const isSingle = count === 1\n\n    let singleFileTooltip = { title: t('individualFilesOnly') }\n\n    if (count === 1) {\n      singleFileTooltip = {}\n    }\n\n    return (\n      <div className={classNames('sans-serif bt w-100 pa3 ph4-l selectedActions', className, animateOnStart && 'selectedActionsAnimated')} style={{ ...styles.bar, ...style }} {...props}>\n        <div className='flex items-center justify-between'>\n          <div className='w5-l'>\n            <div className='flex items-center'>\n              <div className='mr3 relative f3 fw6 flex-shrink-0 dib br-100' style={styles.count}>\n                <span className='absolute' style={styles.countNumber}>{count}</span>\n              </div>\n              <div className='dn db-l f6'>\n                <p className='ma0'>{t('filesSelected', { count })}</p>\n                <p className='ma0 mt1' style={styles.size}>{t('totalSize', { size: humanSize(size) })}</p>\n              </div>\n            </div>\n          </div>\n          <div className='flex' role=\"menu\" aria-label={t('menuOptions')} ref={ this.containerRef } tabIndex=\"0\">\n            <button role=\"menuitem\" className='tc mh2' onClick={share}>\n              <StrokeShare className='w3 hover-fill-navy-muted' fill='#A4BFCC' aria-hidden=\"true\"/>\n              <p className='ma0 f6'>{t('actions.share')}</p>\n            </button>\n            <button role=\"menuitem\" className='tc mh2' onClick={download}>\n              <StrokeDownload className='w3 hover-fill-navy-muted' fill='#A4BFCC' aria-hidden=\"true\"/>\n              <p className='ma0 f6'>{this.downloadText}</p>\n            </button>\n            <button role=\"menuitem\" className={classNames('tc mh2', classes.action(isMfs))} onClick={isMfs ? remove : null}>\n              <StrokeTrash className={classes.svg(isMfs)} fill='#A4BFCC' aria-hidden=\"true\"/>\n              <p className='ma0 f6'>{t('app:actions.remove')}</p>\n            </button>\n            <button role=\"menuitem\" className={classNames('tc mh2', classes.action(isSingle))} onClick={isSingle ? setPinning : null}>\n              <StrokePin className={classes.svg(isSingle)} fill='#A4BFCC' aria-hidden=\"true\"/>\n              <p className='ma0 f6'>{t('app:actions.setPinning')}</p>\n            </button>\n            <button role=\"menuitem\" className={classNames('tc mh2', classes.action(isSingle))} onClick={isSingle ? inspect : null} {...singleFileTooltip}>\n              <StrokeIpld className={classes.svg(isSingle)} fill='#A4BFCC' aria-hidden=\"true\"/>\n              <p className='ma0 f6'>{t('app:actions.inspect')}</p>\n            </button>\n            <button role=\"menuitem\" className={classNames('tc mh2', classes.action(isSingle && isMfs))} onClick={(isSingle && isMfs) ? rename : null} {...singleFileTooltip}>\n              <StrokePencil className={classes.svg(isSingle && isMfs)} fill='#A4BFCC' aria-hidden=\"true\"/>\n              <p className='ma0 f6'>{t('app:actions.rename')}</p>\n            </button>\n          </div>\n          <div>\n            <button onClick={unselect} className='flex items-center justify-end f6 charcoal'>\n              {/* TODO: Should we go back to the files list when we tab out of here? */}\n              <span className='mr2 dn db-l'>{t('app:actions.unselectAll')}</span>\n              <span className='mr2 dn db-m'>{t('app:actions.clear')}</span>\n              <GlyphSmallCancel onClick={unselect} className='fill-charcoal w1 o-70' viewBox='37 40 27 27' />\n            </button>\n          </div>\n        </div>\n      </div>\n    )\n  }\n}\n\nexport default withTranslation('files')(SelectedActions)\n","import React from 'react'\n\nconst GlyphPinCloud = props => (\n  <svg viewBox='0 0 100 100' {...props}>\n    <path opacity=\".1\" d=\"M45.175 31.61a15.613 15.613 0 00-12.767-3.353A15.62 15.62 0 0019.581 43.24 13.38 13.38 0 008 56.63C8 70.36 19.74 72 20.39 72h56.46c4.09 0 11-6.52 11-13.18S83.51 46 77.01 46c-1.876 0-3.723.46-5.38 1.34.048-.445.072-.892.07-1.34a12.618 12.618 0 00-.577-3.956l-9.676 9.72a23 23 0 01-.56 7.258l-.02.086-.026.083a3.855 3.855 0 01-6.32 1.696l-.037-.035-6.305-6.317-12.33 12.344L26.5 69l1.617-9.855 10.977-10.982 1.373-1.351-6.33-6.333-.035-.037a3.854 3.854 0 011.695-6.32l.084-.025.086-.02a22.93 22.93 0 017.29-.558l1.918-1.91z\"/><path d=\"M77.756 35.705a.852.852 0 01-.368.22 19.309 19.309 0 01-4.829.752.758.758 0 00-.554.23L58.62 50.353a.794.794 0 00-.265.692 20 20 0 01-.384 7.277.855.855 0 01-1.399.376l-8.39-8.408-13.953 13.968L29 66l1.74-5.236 10.468-10.472 3.517-3.464-8.431-8.434a.855.855 0 01.375-1.4 19.929 19.929 0 017.269-.385.794.794 0 00.69-.222l13.463-13.402a.762.762 0 00.23-.555c.047-1.63.299-3.25.75-4.817a.855.855 0 011.022-.588.852.852 0 01.378.204l17.3 17.296a.854.854 0 01-.015 1.18z\"/><path d=\"M46.04 30.748a17.003 17.003 0 00-11.1-4.158A17.25 17.25 0 0018 42 14.84 14.84 0 006.33 56.6c0 13.89 11.56 16.81 13.84 16.81h56.2c5.21 0 12.47-7.37 12.47-14.62 0-7.03-4.61-14.29-12.31-14.29a12.83 12.83 0 00-3.81.57 14.069 14.069 0 00-.763-3.862l-2.643 2.654c.148.66.283 1.355.426 2.087l.01.051c.186.957.234 1.557.298 2.36.028.34.057.715.102 1.17l1.73-.91a9.86 9.86 0 014.65-1.16c5.83 0 9.31 5.74 9.31 11.29 0 6.04-6.51 11.66-9.47 11.66H20.22c-.11 0-10.89-1.26-10.89-13.81a11.89 11.89 0 018-11.32C19.046 44.687 21 45 21 45v-2.25a14 14 0 0122.94-9.91l2.1-2.092z\"/>\n  </svg>\n)\n\nexport default GlyphPinCloud\n","import React from 'react'\nimport PropTypes from 'prop-types'\n\nexport default class Tool extends React.Component {\n  static propTypes = {\n    children: PropTypes.element.isRequired,\n    text: PropTypes.string.isRequired\n  }\n\n  state = {\n    show: false,\n    overflow: true\n  }\n\n  onResize = () => {\n    if (this.state.overflow !== (this.el.offsetWidth < this.el.scrollWidth)) {\n      this.setState((s) => ({ overflow: !s.overflow }))\n    }\n  }\n\n  componentDidMount () {\n    window.addEventListener('resize', this.onResize)\n    this.onResize()\n  }\n\n  componentWillUnmount () {\n    window.removeEventListener('resize', this.onResize)\n  }\n\n  onMouseOver = () => {\n    this.setState({ show: true })\n  }\n\n  onMouseLeave = () => {\n    this.setState({ show: false })\n  }\n\n  render () {\n    const { children, text, ...props } = this.props\n    const { show, overflow } = this.state\n\n    return (\n      <div className='relative' {...props}>\n        <div onMouseOver={this.onMouseOver} onMouseLeave={this.onMouseLeave} onFocus={this.onMouseOver} onBlur={this.onMouseLeave} className='overflow-hidden'>\n          {React.Children.map(children, c => React.cloneElement(c, { ref: (n) => { this.el = n } }))}\n        </div>\n\n        <div style={{\n          bottom: '-10px',\n          left: '50%',\n          transform: 'translate(-50%, 100%)',\n          wordWrap: 'break-word',\n          width: '100%'\n        }} className={`white z-max bg-navy-muted br2 pa1 f6 absolute ${(show && overflow) ? 'db' : 'dn'}`}>\n          <span style={{\n            width: '17px',\n            height: '17px',\n            transform: 'translate(-50%, -50%) rotate(45deg)',\n            borderRadius: '2px 0px 0px',\n            left: '50%',\n            zIndex: -1\n          }} className='db bg-navy-muted absolute' />\n          {text}\n        </div>\n      </div>\n    )\n  }\n}\n","import React from 'react'\n\nconst GlyphFolder = props => (\n  <svg viewBox='0 0 18.42 21' {...props}>\n    <path\n      d='M16.85 8v-.6a1.34 1.34 0 0 0-1.3-1.4h-5.2L8.4 4.66H3.85A1.33 1.33 0 0 0 2.55 6v2z'\n      opacity={0.45}\n    />\n    <path\n      d='M2.55 8.32V15a1.31 1.31 0 0 0 1.3 1.32h11.7a1.31 1.31 0 0 0 1.3-1.32V8.32z'\n      opacity={0.1}\n    />\n    <path d='M15.55 16.59H3.85A1.55 1.55 0 0 1 2.3 15V6a1.55 1.55 0 0 1 1.55-1.59H8.4a.23.23 0 0 1 .14 0l1.88 1.29h5.13a1.56 1.56 0 0 1 1.55 1.55V15a1.55 1.55 0 0 1-1.55 1.59zM3.85 4.91A1 1 0 0 0 2.8 6v9a1 1 0 0 0 1.05 1.05h11.7A1 1 0 0 0 16.6 15V7.25a1.06 1.06 0 0 0-1.05-1h-5.2a.23.23 0 0 1-.14 0L8.32 4.91z' />\n    <path d='M2.62 7.9h14.3v.5H2.62z' />\n  </svg>\n)\n\nexport default GlyphFolder\n","import React from 'react'\n\nconst GlyphDocGeneric = props => (\n  <svg viewBox='0 0 18.42 21' {...props}>\n    <path\n      d='M10.22 2.37H4.64a1.11 1.11 0 0 0-1.11 1.11v14a1.11 1.11 0 0 0 1.11 1.11h9.14a1.11 1.11 0 0 0 1.1-1.11V7z'\n      opacity={0.1}\n    />\n    <path d='M14.88 7.49h-2.66A2.25 2.25 0 0 1 10 5.24V2.58a.25.25 0 0 1 .5 0v2.66A1.76 1.76 0 0 0 12.22 7h2.66a.25.25 0 0 1 0 .5z' />\n    <path d='M13.78 18.88H4.64a1.36 1.36 0 0 1-1.36-1.36v-14a1.36 1.36 0 0 1 1.36-1.4h5.58a.25.25 0 0 1 .18.08l4.66 4.66a.22.22 0 0 1 .07.17v10.49a1.35 1.35 0 0 1-1.35 1.36zM4.64 2.62a.87.87 0 0 0-.86.86v14a.87.87 0 0 0 .86.86h9.14a.86.86 0 0 0 .85-.86V7.14l-4.51-4.52z' />\n    <path d='M10.22 2.58v2.66a2 2 0 0 0 2 2h2.66' opacity={0.45} />\n  </svg>\n)\n\nexport default GlyphDocGeneric\n","import React from 'react'\n\nconst GlyphDocMovie = props => (\n  <svg viewBox='0 0 18.42 21' {...props}>\n    <path\n      d='M10.22 2.37H4.64a1.11 1.11 0 0 0-1.11 1.11v14a1.11 1.11 0 0 0 1.11 1.11h9.14a1.11 1.11 0 0 0 1.1-1.11V7z'\n      opacity={0.1}\n    />\n    <path d='M14.88 7.49h-2.66A2.25 2.25 0 0 1 10 5.24V2.58a.25.25 0 0 1 .5 0v2.66A1.76 1.76 0 0 0 12.22 7h2.66a.25.25 0 0 1 0 .5z' />\n    <path d='M13.78 18.88H4.64a1.36 1.36 0 0 1-1.36-1.36v-14a1.36 1.36 0 0 1 1.36-1.4h5.58a.25.25 0 0 1 .18.08l4.66 4.66a.22.22 0 0 1 .07.17v10.49a1.35 1.35 0 0 1-1.35 1.36zM4.64 2.62a.87.87 0 0 0-.86.86v14a.87.87 0 0 0 .86.86h9.14a.86.86 0 0 0 .85-.86V7.14l-4.51-4.52z' />\n    <path d='M10.22 2.58v2.66a2 2 0 0 0 2 2h2.66' opacity={0.45} />\n    <path d='M5.41 9.93v6.43H13V9.93zm1.17 5.84H6v-.58h.58zm0-1.17H6V14h.58zm0-1.16H6v-.59h.58zm0-1.17H6v-.59h.58zm0-1.17H6v-.58h.58zm4.67 4.67H7.16v-2.33h4.09zm0-2.92H7.16v-2.33h4.09zm1.17 2.92h-.58v-.58h.58zm0-1.17h-.58V14h.58zm0-1.16h-.58v-.59h.58zm0-1.17h-.58v-.59h.58zm0-1.17h-.58v-.58h.58z' />\n  </svg>\n)\n\nexport default GlyphDocMovie\n","import React from 'react'\n\nconst GlyphDocCalc = props => (\n  <svg data-name='Warstwa 1' viewBox='0 0 18.42 21' {...props}>\n    <path\n      d='M10.22 2.37H4.64a1.11 1.11 0 0 0-1.11 1.11v14a1.11 1.11 0 0 0 1.11 1.11h9.14a1.11 1.11 0 0 0 1.1-1.11V7z'\n      opacity={0.1}\n    />\n    <path d='M14.88 7.49h-2.66A2.25 2.25 0 0 1 10 5.24V2.58a.25.25 0 0 1 .5 0v2.66A1.76 1.76 0 0 0 12.22 7h2.66a.25.25 0 0 1 0 .5z' />\n    <path d='M13.78 18.88H4.64a1.36 1.36 0 0 1-1.36-1.36v-14a1.36 1.36 0 0 1 1.36-1.4h5.58a.25.25 0 0 1 .18.08l4.66 4.66a.22.22 0 0 1 .07.17v10.49a1.35 1.35 0 0 1-1.35 1.36zM4.64 2.62a.87.87 0 0 0-.86.86v14a.87.87 0 0 0 .86.86h9.14a.86.86 0 0 0 .85-.86V7.14l-4.51-4.52z' />\n    <path d='M10.22 2.58v2.66a2 2 0 0 0 2 2h2.66' opacity={0.45} />\n    <path d='M8.32 13.03l-1.7 1.82v.02h5.75v.57H6.05v-4.59h.57v3.16l1.67-1.79.42.39.84.78 1.84-1.97h-.75v-.57h1.73v1.72h-.58v-.73l-2.21 2.37-.42-.4-.84-.78z' />\n  </svg>\n)\n\nexport default GlyphDocCalc\n","import React from 'react'\n\nconst GlyphDocMusic = props => (\n  <svg viewBox='0 0 18.42 21' {...props}>\n    <path\n      d='M10.22 2.37H4.64a1.11 1.11 0 0 0-1.11 1.11v14a1.11 1.11 0 0 0 1.11 1.11h9.14a1.11 1.11 0 0 0 1.1-1.11V7z'\n      opacity={0.1}\n    />\n    <path d='M14.88 7.49h-2.66A2.25 2.25 0 0 1 10 5.24V2.58a.25.25 0 0 1 .5 0v2.66A1.76 1.76 0 0 0 12.22 7h2.66a.25.25 0 0 1 0 .5z' />\n    <path d='M13.78 18.88H4.64a1.36 1.36 0 0 1-1.36-1.36v-14a1.36 1.36 0 0 1 1.36-1.4h5.58a.25.25 0 0 1 .18.08l4.66 4.66a.22.22 0 0 1 .07.17v10.49a1.35 1.35 0 0 1-1.35 1.36zM4.64 2.62a.87.87 0 0 0-.86.86v14a.87.87 0 0 0 .86.86h9.14a.86.86 0 0 0 .85-.86V7.14l-4.51-4.52z' />\n    <path d='M10.22 2.58v2.66a2 2 0 0 0 2 2h2.66' opacity={0.45} />\n    <path d='M8.26 11.79v3.68a1.12 1.12 0 0 1-.68 1A1.23 1.23 0 0 1 6 16.22c-.25-.39-.07-1 .57-1.32a1.41 1.41 0 0 1 1.21-.08V10l4.73-.94V15a1.13 1.13 0 0 1-.69 1 1.22 1.22 0 0 1-1.57-.22c-.25-.38-.07-1 .58-1.31a1.4 1.4 0 0 1 1.2-.09V11z' />\n  </svg>\n)\n\nexport default GlyphDocMusic\n","import React from 'react'\n\nconst GlyphDocPicture = props => (\n  <svg viewBox='0 0 18.42 21' {...props}>\n    <path d='M5.52 10.31V16h7.38v-5.69zm6.81 4l-1.93-1.73-2.07 1.84-.82-.71-1.42 1.14v-4h6.24z' />\n    <path d='M7.79 12.58a.57.57 0 1 0-.57-.58.58.58 0 0 0 .57.57z' />\n    <path\n      d='M10.22 2.37H4.64a1.11 1.11 0 0 0-1.11 1.11v14a1.11 1.11 0 0 0 1.11 1.11h9.14a1.11 1.11 0 0 0 1.1-1.11V7z'\n      opacity={0.1}\n    />\n    <path d='M14.88 7.49h-2.66A2.25 2.25 0 0 1 10 5.24V2.58a.25.25 0 0 1 .5 0v2.66A1.76 1.76 0 0 0 12.22 7h2.66a.25.25 0 0 1 0 .5z' />\n    <path d='M13.78 18.88H4.64a1.36 1.36 0 0 1-1.36-1.36v-14a1.36 1.36 0 0 1 1.36-1.4h5.58a.25.25 0 0 1 .18.08l4.66 4.66a.22.22 0 0 1 .07.17v10.49a1.36 1.36 0 0 1-1.35 1.36zM4.64 2.62a.87.87 0 0 0-.86.86v14a.87.87 0 0 0 .86.86h9.14a.86.86 0 0 0 .85-.86V7.14l-4.51-4.52z' />\n    <path d='M10.22 2.58v2.66a2 2 0 0 0 2 2h2.66' opacity={0.45} />\n  </svg>\n)\n\nexport default GlyphDocPicture\n","import React from 'react'\n\nconst GlyphDocText = props => (\n  <svg viewBox='0 0 18.42 21' {...props}>\n    <path\n      d='M10.22 2.37H4.64a1.11 1.11 0 0 0-1.11 1.11v14a1.11 1.11 0 0 0 1.11 1.11h9.14a1.11 1.11 0 0 0 1.1-1.11V7z'\n      opacity={0.1}\n    />\n    <path d='M14.88 7.49h-2.66A2.25 2.25 0 0 1 10 5.24V2.58a.25.25 0 0 1 .5 0v2.66A1.76 1.76 0 0 0 12.22 7h2.66a.25.25 0 0 1 0 .5z' />\n    <path d='M13.78 18.88H4.64a1.36 1.36 0 0 1-1.36-1.36v-14a1.36 1.36 0 0 1 1.36-1.4h5.58a.25.25 0 0 1 .18.08l4.66 4.66a.22.22 0 0 1 .07.17v10.49a1.35 1.35 0 0 1-1.35 1.36zM4.64 2.62a.87.87 0 0 0-.86.86v14a.87.87 0 0 0 .86.86h9.14a.86.86 0 0 0 .85-.86V7.14l-4.51-4.52z' />\n    <path d='M10.22 2.58v2.66a2 2 0 0 0 2 2h2.66' opacity={0.45} />\n    <path d='M9.91 9.82h3.46v.5H9.91zm-4.86 2.06h8.32v.5H5.05zm0 2.05h8.32v.5H5.05zm0 2.06h8.32v.5H5.05zM8 10.36h-.4l-.32-.82L7 8.73l-.27.82-.31.81H6L5 7.77h.55l.61 1.87.63-1.87h.32l.64 1.87.65-1.87H9z' />\n  </svg>\n)\n\nexport default GlyphDocText\n","import React from 'react'\nimport typeFromExt from '../type-from-ext'\n\nimport Folder from '../../icons/GlyphFolder'\nimport Doc from '../../icons/GlyphDocGeneric'\nimport DocMovie from '../../icons/GlyphDocMovie'\nimport DocCalc from '../../icons/GlyphDocCalc'\nimport DocMusic from '../../icons/GlyphDocMusic'\nimport DocPicture from '../../icons/GlyphDocPicture'\nimport DocText from '../../icons/GlyphDocText'\nimport Cube from '../../icons/StrokeCube'\n\nconst style = { width: 36 }\n\nexport default function FileIcon ({ name, type, cls = '' }) {\n  if (type === 'directory') {\n    return <Folder className={`fill-aqua ${cls}`} style={style} />\n  }\n\n  if (type === 'unknown') {\n    return <Cube className={`fill-aqua ${cls}`} style={style} />\n  }\n\n  switch (typeFromExt(name)) {\n    case 'audio':\n      return <DocMusic className={`fill-aqua ${cls}`} style={style} />\n    case 'calc':\n      return <DocCalc className={`fill-aqua ${cls}`} style={style} />\n    case 'video':\n      return <DocMovie className={`fill-aqua ${cls}`} style={style} />\n    case 'text':\n      return <DocText className={`fill-aqua ${cls}`} style={style} />\n    case 'image':\n      return <DocPicture className={`fill-aqua ${cls}`} style={style} />\n    default:\n      return <Doc className={`fill-aqua ${cls}`} style={style} />\n  }\n}\n","import React, { useRef } from 'react'\nimport PropTypes from 'prop-types'\nimport { join, basename } from 'path'\nimport { withTranslation } from 'react-i18next'\nimport classnames from 'classnames'\nimport { normalizeFiles, humanSize } from '../../lib/files'\n// React DnD\nimport { useDrag, useDrop } from 'react-dnd'\n// Components\nimport GlyphDots from '../../icons/GlyphDots'\nimport GlyphPin from '../../icons/GlyphPin'\nimport GlyphPinCloud from '../../icons/GlyphPinCloud'\nimport Tooltip from '../../components/tooltip/Tooltip'\nimport Checkbox from '../../components/checkbox/Checkbox'\nimport FileIcon from '../file-icon/FileIcon'\nimport CID from 'cids'\nimport { NativeTypes } from 'react-dnd-html5-backend'\n\nconst File = ({\n  name, type, size, cid, path, pinned, t, selected, focused, translucent, coloured, cantSelect, cantDrag, isMfs, isRemotePin,\n  onAddFiles, onMove, onSelect, onNavigate, handleContextMenuClick\n}) => {\n  const dotsWrapper = useRef()\n\n  const handleCtxLeftClick = (ev) => {\n    const pos = dotsWrapper.current.getBoundingClientRect()\n    handleContextMenuClick(ev, 'LEFT', { name, size, type, cid, path, pinned }, pos)\n  }\n\n  const handleCtxRightClick = (ev) => {\n    handleContextMenuClick(ev, 'RIGHT', { name, size, type, cid, path, pinned })\n  }\n\n  const [, drag, preview] = useDrag({\n    item: { name, size, cid, path, pinned, type: 'FILE' },\n    canDrag: !cantDrag && isMfs\n  })\n\n  const checkIfDir = (monitor) => {\n    if (!isMfs) return false\n    const item = monitor.getItem()\n    if (!item) return false\n\n    if (item.name) {\n      return type === 'directory' &&\n        name !== item.name &&\n        !selected\n    }\n\n    return type === 'directory'\n  }\n\n  const [{ isOver, canDrop }, drop] = useDrop({\n    accept: [NativeTypes.FILE, 'FILE'],\n    drop: (_, monitor) => {\n      const item = monitor.getItem()\n\n      if (item.files) {\n        (async () => {\n          const files = await item.filesPromise\n          onAddFiles(normalizeFiles(files), path)\n        })()\n      } else {\n        const src = item.path\n        const dst = join(path, basename(item.path))\n\n        onMove(src, dst)\n      }\n    },\n    canDrop: (_, monitor) => checkIfDir(monitor),\n    collect: (monitor) => ({\n      canDrop: checkIfDir(monitor),\n      isOver: monitor.isOver()\n    })\n  })\n\n  let className = 'File b--light-gray relative flex items-center bt'\n\n  if (selected) {\n    className += ' selected'\n  }\n\n  const styles = { height: 55, overflow: 'visible' }\n\n  if (focused || (selected && !translucent) || coloured || (isOver && canDrop)) {\n    styles.backgroundColor = '#F0F6FA'\n  } else if (translucent) {\n    className += ' o-70'\n  }\n\n  if (focused) {\n    styles.border = '1px dashed #9ad4db'\n  } else {\n    styles.border = '1px solid transparent'\n    styles.borderTop = '1px solid #eee'\n  }\n\n  size = size ? humanSize(size, { round: 0 }) : '-'\n  const hash = cid.toString() || t('hashUnavailable')\n\n  const select = (select) => onSelect(name, select)\n\n  const checkBoxCls = classnames({\n    'o-70 glow': !cantSelect,\n    'o-1': selected || focused\n  }, ['pl2 w2'])\n\n  return (\n    <div ref={drop}>\n      <div className={className} style={styles} onContextMenu={handleCtxRightClick} ref={drag}>\n        <div className={checkBoxCls}>\n          <Checkbox disabled={cantSelect} checked={selected} onChange={select} aria-label={ t('checkboxLabel', { name })} />\n        </div>\n\n        <button ref={preview} onClick={onNavigate} className='relative pointer flex items-center flex-grow-1 ph2 pv1 w-40' aria-label={ name === '..' ? t('previousFolder') : t('fileLabel', { name, type, size }) }>\n          <div className='dib flex-shrink-0 mr2'>\n            <FileIcon name={name} type={type} />\n          </div>\n          <div style={{ width: 'calc(100% - 3.25rem)' }}>\n            <Tooltip text={name}>\n              <div className='f6 truncate charcoal'>{name}</div>\n            </Tooltip>\n            <Tooltip text={hash}>\n              <div className='f7 mt1 gray truncate monospace'>{hash}</div>\n            </Tooltip>\n          </div>\n        </button>\n\n        <div className='ph2 pv1 flex-none dn db-l tr mw3 w-20 transition-all'>\n          { pinned && !isRemotePin && <div className='br-100 o-70' title={t('pinned')} style={{ width: '2rem', height: '2rem' }}>\n            <GlyphPin className='fill-aqua' />\n          </div> }\n          { isRemotePin && <div className='br-100 o-70' title={t('pinnedRemotely')} style={{ width: '2rem', height: '2rem' }}>\n            <GlyphPinCloud className='fill-aqua' />\n          </div> }\n        </div>\n        <div className='size pl2 pr4 pv1 flex-none f6 dn db-l tr charcoal-muted w-10 mw4'>\n          {size}\n        </div>\n        <button ref={dotsWrapper} className='ph2 db button-inside-focus' style={{ width: '2.5rem' }} onClick={handleCtxLeftClick} aria-label={ t('checkboxLabel', { name })} >\n          <GlyphDots className='fill-gray-muted pointer hover-fill-gray transition-all'/>\n        </button>\n      </div>\n    </div>\n  )\n}\n\nFile.propTypes = {\n  name: PropTypes.string.isRequired,\n  type: PropTypes.string.isRequired,\n  path: PropTypes.string.isRequired,\n  size: PropTypes.number,\n  cid: PropTypes.instanceOf(CID),\n  selected: PropTypes.bool,\n  focused: PropTypes.bool,\n  onSelect: PropTypes.func,\n  onNavigate: PropTypes.func.isRequired,\n  onAddFiles: PropTypes.func.isRequired,\n  onMove: PropTypes.func.isRequired,\n  coloured: PropTypes.bool,\n  translucent: PropTypes.bool,\n  handleContextMenuClick: PropTypes.func,\n  pinned: PropTypes.bool,\n  isMfs: PropTypes.bool\n}\n\nFile.defaultProps = {\n  coloured: false,\n  translucent: false\n}\n\nexport default withTranslation('files')(File)\n","import React from 'react'\nimport { withTranslation } from 'react-i18next'\n// Components\nimport GlyphDots from '../../icons/GlyphDots'\nimport Checkbox from '../../components/checkbox/Checkbox'\nimport FileIcon from '../../files/file-icon/FileIcon'\n// Styles\nimport './LoadingAnimation.css'\n\nconst FakeHeader = ({ t }) => (\n  <header className='gray pv2 flex items-center flex-none'>\n    <div className='pa2 w2'><Checkbox disabled /></div>\n    <div className='ph2 f6 flex-auto'>{t('app:terms.name')}</div>\n    <div className='pl2 pr4 tr f6 flex-none dn db-l'>{t('app:terms.size')}</div>\n    <div className='pa2' style={{ width: '2.5rem' }} />\n  </header>\n)\n\nconst FakeFile = ({ nameWidth }) => (\n  <div className='b--light-gray relative flex items-center bt' style={{ height: 55 }}>\n    <div className='pa2 w2'>\n      <Checkbox disabled />\n    </div>\n    <div className='relative pointer flex items-center flex-grow-1 ph2 pv1 w-40'>\n      <div className='dib flex-shrink-0 mr2'>\n        <FileIcon cls='fill-charcoal' />\n      </div>\n      <div className='w-100'>\n        <div className={`w-${nameWidth} br1 bg-charcoal-muted f7`}>&nbsp;</div>\n        <div className='w-80 br1 mt1 bg-gray f7 o-70'>&nbsp;</div>\n      </div>\n    </div>\n    <div className='size mr4 pl2 pr4 flex-none dn db-l br1 tr f7 bg-gray'>&nbsp;</div>\n    <div className='ph2' style={{ width: '2.5rem' }}>\n      <GlyphDots className='fill-gray-muted pointer' />\n    </div>\n  </div>\n)\n\nconst LoadingAnimation = ({ t }) => (\n  <div className='LoadingAnimation'>\n    <div className='LoadingAnimationSwipe'>\n      <FakeHeader t={t} />\n      <FakeFile nameWidth={50} />\n      <FakeFile nameWidth={40} />\n      <FakeFile nameWidth={60} />\n      <FakeFile nameWidth={30} />\n      <FakeFile nameWidth={50} />\n      <FakeFile nameWidth={60} />\n      <FakeFile nameWidth={70} />\n      <FakeFile nameWidth={40} />\n      <FakeFile nameWidth={30} />\n      <FakeFile nameWidth={50} />\n    </div>\n  </div>\n)\n\nexport default withTranslation('files')(LoadingAnimation)\n","import React, { useRef, Fragment, useState, useEffect, useMemo, useCallback } from 'react'\nimport { findDOMNode } from 'react-dom'\nimport PropTypes from 'prop-types'\nimport { connect } from 'redux-bundler-react'\nimport { Trans, withTranslation } from 'react-i18next'\nimport classnames from 'classnames'\nimport { join } from 'path'\nimport { sorts } from '../../bundles/files'\nimport { normalizeFiles } from '../../lib/files'\nimport { List, WindowScroller, AutoSizer } from 'react-virtualized'\n// Reac DnD\nimport { NativeTypes } from 'react-dnd-html5-backend'\nimport { useDrop } from 'react-dnd'\n// Components\nimport Checkbox from '../../components/checkbox/Checkbox'\nimport SelectedActions from '../selected-actions/SelectedActions'\nimport File from '../file/File'\nimport LoadingAnimation from '../../components/loading-animation/LoadingAnimation'\n\nconst addFiles = async (filesPromise, onAddFiles) => {\n  const files = await filesPromise\n  onAddFiles(normalizeFiles(files))\n}\n\nconst mergeRemotePinsIntoFiles = (files, remotePins) => {\n  const remotePinsCids = remotePins.map(c => c.cid.string)\n\n  return files.map(f => remotePinsCids.includes(f.cid?.string) ? ({\n    ...f,\n    isRemotePin: true\n  }) : f)\n}\n\nexport const FilesList = ({\n  className, files, pins, remotePins, filesSorting, updateSorting, downloadProgress, filesIsFetching, filesPathInfo, showLoadingAnimation,\n  onShare, onSetPinning, onInspect, onDownload, onRemove, onRename, onNavigate, onRemotePinClick, onAddFiles, onMove, handleContextMenuClick, t\n}) => {\n  const [selected, setSelected] = useState([])\n  const [focused, setFocused] = useState(null)\n  const [firstVisibleRow, setFirstVisibleRow] = useState(null)\n  const [allFiles, setAllFiles] = useState(mergeRemotePinsIntoFiles(files, remotePins))\n  const listRef = useRef()\n  const filesRefs = useRef([])\n\n  const [{ canDrop, isOver, isDragging }, drop] = useDrop({\n    accept: NativeTypes.FILE,\n    drop: (_, monitor) => {\n      if (monitor.didDrop()) {\n        return\n      }\n      const { filesPromise } = monitor.getItem()\n\n      addFiles(filesPromise, onAddFiles)\n    },\n    collect: (monitor) => ({\n      isOver: monitor.isOver({ shallow: true }),\n      isDragging: monitor.isDragging\n    }),\n    canDrop: _ => filesPathInfo.isMfs\n  })\n\n  const selectedFiles = useMemo(() =>\n    selected\n      .map(name => allFiles.find(el => el.name === name))\n      .filter(n => n)\n      .map(file => ({\n        ...file,\n        pinned: pins.map(p => p.toString()).includes(file.cid.toString())\n      }))\n  , [allFiles, pins, selected])\n\n  const keyHandler = (e) => {\n    const focusedFile = files.find(el => el.name === focused)\n\n    // Disable keyboard controls if fetching files\n    if (filesIsFetching) {\n      return\n    }\n\n    if (e.key === 'Escape') {\n      setSelected([])\n      setFocused(null)\n      return listRef.current.forceUpdateGrid()\n    }\n\n    if (e.key === 'F2' && focused !== null) {\n      return onRename([focusedFile])\n    }\n\n    if (e.key === 'Delete' && selected.length > 0) {\n      return onRemove(selectedFiles)\n    }\n\n    if (e.key === ' ' && focused !== null) {\n      e.preventDefault()\n      return toggleOne(focused, true)\n    }\n\n    if ((e.key === 'Enter' || (e.key === 'ArrowRight' && e.metaKey)) && focused !== null) {\n      return onNavigate({ path: focusedFile.path, cid: focusedFile.cid })\n    }\n\n    if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {\n      e.preventDefault()\n      let index = 0\n\n      if (focused !== null) {\n        const prev = files.findIndex(el => el.name === focused)\n        index = (e.key === 'ArrowDown') ? prev + 1 : prev - 1\n      }\n\n      if (index === -1) {\n        return\n      }\n\n      if (index < files.length) {\n        let name = files[index].name\n\n        // If the file we are going to focus is out of view (removed\n        // from the DOM by react-virtualized), focus the first visible file\n        if (!filesRefs.current[name]) {\n          name = files[firstVisibleRow].name\n        }\n\n        setFocused(name)\n        const domNode = findDOMNode(filesRefs.current[name])\n        domNode.scrollIntoView({ behaviour: 'smooth', block: 'center' })\n        domNode.querySelector('input[type=\"checkbox\"]').focus()\n      }\n\n      listRef.current.forceUpdateGrid()\n    }\n  }\n\n  useEffect(() => {\n    document.addEventListener('keyup', keyHandler)\n    return () => document.removeEventListener('keyup', keyHandler)\n  }, /* eslint-disable-next-line react-hooks/exhaustive-deps */\n  [])\n\n  useEffect(() => {\n    setAllFiles(mergeRemotePinsIntoFiles(files, remotePins))\n  }, [files, remotePins, filesSorting])\n\n  useEffect(() => {\n    const selectedFiles = selected.filter(name => files.find(el => el.name === name))\n\n    if (selectedFiles.length !== selected.length) {\n      setSelected(selected)\n    }\n  }, [files, selected])\n\n  const toggleAll = (checked) => {\n    let selected = []\n\n    if (checked) {\n      selected = files.map(file => file.name)\n    }\n\n    setSelected(selected)\n    listRef.current.forceUpdateGrid()\n  }\n\n  const toggleOne = useCallback((name, check) => {\n    const index = selected.indexOf(name)\n\n    if (check && index < 0) {\n      setSelected([...selected, name].sort())\n    } else if (index >= 0) {\n      setSelected(selected.filter(selected => selected !== name).sort())\n    }\n\n    listRef.current.forceUpdateGrid()\n  }, [selected])\n\n  const move = (src, dst) => {\n    if (selectedFiles.length > 0) {\n      const parts = dst.split('/')\n      parts.pop()\n      let basepath = parts.join('/')\n\n      if (basepath === '') {\n        basepath = '/'\n      }\n\n      const toMove = selectedFiles.map(({ name, path }) => ([\n        path,\n        join(basepath, name)\n      ]))\n\n      const res = toMove.find(a => a[0] === src)\n      if (!res) {\n        toMove.push([src, dst])\n      }\n\n      toggleAll(false)\n      toMove.forEach(op => onMove(...op))\n    } else {\n      onMove(src, dst)\n    }\n  }\n\n  const sortByIcon = (order) => {\n    if (filesSorting.by === order) {\n      return filesSorting.asc ? '↑' : '↓'\n    }\n\n    return null\n  }\n\n  const changeSort = (order) => () => {\n    if (order === filesSorting.by) {\n      updateSorting(order, !filesSorting.asc)\n    } else {\n      updateSorting(order, true)\n    }\n\n    listRef.current.forceUpdateGrid()\n  }\n\n  const emptyRowsRenderer = () => (\n    <Trans i18nKey='filesList.noFiles' t={t}>\n      <div className='pv3 b--light-gray bt tc gray f6'>\n            There are no available files. Add some!\n      </div>\n    </Trans>\n  )\n\n  const rowRenderer = ({ index, key, style }) => {\n    const pinsString = pins.map(p => p.toString())\n    const listItem = allFiles[index]\n    const onNavigateHandler = () => {\n      if (listItem.type === 'unknown') return onInspect(listItem.cid)\n      return onNavigate({ path: listItem.path, cid: listItem.cid })\n    }\n\n    return (\n      <div key={key} style={style} ref={r => { filesRefs.current[allFiles[index].name] = r }}>\n        <File\n          {...listItem}\n          pinned={pinsString.includes(listItem.cid.toString())}\n          isMfs={filesPathInfo.isMfs}\n          name={listItem.name}\n          onSelect={toggleOne}\n          onNavigate={onNavigateHandler}\n          onAddFiles={onAddFiles}\n          onMove={move}\n          focused={focused === listItem.name}\n          selected={selected.indexOf(listItem.name) !== -1}\n          handleContextMenuClick={handleContextMenuClick}\n          translucent={isDragging || (isOver && canDrop)} />\n      </div>\n    )\n  }\n\n  const onRowsRendered = ({ startIndex }) => setFirstVisibleRow(startIndex)\n\n  const allSelected = selected.length !== 0 && selected.length === allFiles.length\n  const rowCount = allFiles.length\n  const checkBoxCls = classnames({\n    'o-1': allSelected,\n    'o-70': !allSelected\n  }, ['pl2 w2 glow'])\n\n  return (\n    <section ref={drop} className={classnames('FilesList no-select sans-serif border-box w-100 flex flex-column', className)}>\n      { showLoadingAnimation\n        ? <LoadingAnimation />\n        : <Fragment>\n          <header className='gray pv3 flex items-center flex-none' style={{ paddingRight: '1px', paddingLeft: '1px' }}>\n            <div className={checkBoxCls}>\n              <Checkbox checked={allSelected} onChange={toggleAll} aria-label={t('selectAllEntries')}/>\n            </div>\n            <div className='ph2 f6 flex-auto'>\n              <button aria-label={ t('sortBy', { name: t('app:terms.name') })} onClick={changeSort(sorts.BY_NAME)}>\n                {t('app:terms.name')} {sortByIcon(sorts.BY_NAME)}\n              </button>\n            </div>\n            <div className='pl2 pr1 tr f6 flex-none dn db-l mw4'>\n              <span>\n                {t('app:terms.pinStatus')}\n              </span>\n            </div>\n            <div className='pl2 pr4 tr f6 flex-none dn db-l mw4 w-10'>\n              <button aria-label={ t('sortBy', { name: t('size') })} onClick={changeSort(sorts.BY_SIZE)}>\n                {t('app:terms.size')} {sortByIcon(sorts.BY_SIZE)}\n              </button>\n            </div>\n            <div className='pa2' style={{ width: '2.5rem' }} />\n          </header>\n          <WindowScroller>\n            {({ height, isScrolling, onChildScroll, scrollTop }) => (\n              <div className='flex-auto'>\n                <AutoSizer disableHeight>\n                  {({ width }) => (\n                    <List\n                      ref={listRef}\n                      autoHeight\n                      width={width}\n                      height={height}\n                      className='outline-0'\n                      aria-label={ t('filesListLabel')}\n                      rowCount={rowCount}\n                      rowHeight={55}\n                      rowRenderer={rowRenderer}\n                      noRowsRenderer={emptyRowsRenderer}\n                      onRowsRendered={onRowsRendered}\n                      isScrolling={isScrolling}\n                      onScroll={onChildScroll}\n                      scrollTop={scrollTop}/>\n                  )}\n                </AutoSizer>\n              </div>\n            )}\n          </WindowScroller>\n          { selectedFiles.length !== 0 && <SelectedActions\n            className={'fixed bottom-0 right-0'}\n            style={{\n              zIndex: 20\n            }}\n            animateOnStart={selectedFiles.length === 1}\n            unselect={() => toggleAll(false)}\n            remove={() => onRemove(selectedFiles)}\n            rename={() => onRename(selectedFiles)}\n            share={() => onShare(selectedFiles)}\n            setPinning={() => onSetPinning(selectedFiles)}\n            download={() => onDownload(selectedFiles)}\n            inspect={() => onInspect(selectedFiles[0].cid)}\n            count={selectedFiles.length}\n            isMfs={filesPathInfo.isMfs}\n            downloadProgress={downloadProgress}\n            size={selectedFiles.reduce((a, b) => a + (b.size || 0), 0)} />\n          }\n        </Fragment> }\n    </section>\n  )\n}\n\nFilesList.propTypes = {\n  className: PropTypes.string,\n  files: PropTypes.array.isRequired,\n  remotePins: PropTypes.array,\n  filesSorting: PropTypes.shape({\n    by: PropTypes.string.isRequired,\n    asc: PropTypes.bool.isRequired\n  }),\n  updateSorting: PropTypes.func.isRequired,\n  downloadProgress: PropTypes.number,\n  filesIsFetching: PropTypes.bool,\n  filesPathInfo: PropTypes.object,\n  // Actions\n  onShare: PropTypes.func.isRequired,\n  onSetPinning: PropTypes.func.isRequired,\n  onInspect: PropTypes.func.isRequired,\n  onDownload: PropTypes.func.isRequired,\n  onRemove: PropTypes.func.isRequired,\n  onRename: PropTypes.func.isRequired,\n  onNavigate: PropTypes.func.isRequired,\n  onAddFiles: PropTypes.func.isRequired,\n  onMove: PropTypes.func.isRequired,\n  handleContextMenuClick: PropTypes.func.isRequired,\n  // From i18next\n  t: PropTypes.func.isRequired,\n  tReady: PropTypes.bool\n}\n\nFileList.defaultProps = {\n  className: '',\n  remotePins: []\n}\n\nexport default connect(\n  'selectPins',\n  'selectFilesIsFetching',\n  'selectFilesSorting',\n  'selectFilesPathInfo',\n  'selectShowLoadingAnimation',\n  withTranslation('files')(FilesList)\n)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { withTranslation } from 'react-i18next'\nimport FolderIcon from '../../../icons/StrokeFolder'\nimport TextInputModal from '../../../components/text-input-modal/TextInputModal'\n\nfunction NewFolderModal ({ t, tReady, onCancel, onSubmit, className, ...props }) {\n  return (\n    <TextInputModal\n      onSubmit={(p) => onSubmit(p.trim())}\n      onChange={(p) => p.trimStart()}\n      onCancel={onCancel}\n      className={className}\n      title={t('newFolderModal.title')}\n      description={t('newFolderModal.description')}\n      Icon={FolderIcon}\n      submitText={t('app:actions.create')}\n      {...props} />\n  )\n}\n\nNewFolderModal.propTypes = {\n  onCancel: PropTypes.func.isRequired,\n  onSubmit: PropTypes.func.isRequired,\n  t: PropTypes.func.isRequired,\n  tReady: PropTypes.bool.isRequired\n}\n\nexport default withTranslation('files')(NewFolderModal)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport ShareIcon from '../../../icons/StrokeShare'\nimport Button from '../../../components/button/Button'\nimport { withTranslation } from 'react-i18next'\nimport { CopyToClipboard } from 'react-copy-to-clipboard'\nimport { Modal, ModalActions, ModalBody } from '../../../components/modal/Modal'\n\nconst ShareModal = ({ t, tReady, onLeave, link, className, ...props }) => (\n  <Modal {...props} className={className} onCancel={onLeave} >\n    <ModalBody title={t('shareModal.title')} Icon={ShareIcon}>\n      <p className='charcoal w-90 tl center'>{t('shareModal.description')}</p>\n\n      <div className='flex center w-90 pb2'>\n        <input\n          value={link}\n          readOnly\n          className={'input-reset flex-grow-1 charcoal-muted ba b--black-20 br1 pa2 mr2 focus-outline'}\n          type='text' />\n      </div>\n    </ModalBody>\n\n    <ModalActions>\n      <Button className='ma2 tc' bg='bg-gray' onClick={onLeave}>{t('app:actions.close')}</Button>\n      <CopyToClipboard text={link} onCopy={onLeave}>\n        <Button className='ma2 tc'>{t('app:actions.copy')}</Button>\n      </CopyToClipboard>\n    </ModalActions>\n  </Modal>\n)\n\nShareModal.propTypes = {\n  onLeave: PropTypes.func.isRequired,\n  link: PropTypes.string,\n  t: PropTypes.func.isRequired,\n  tReady: PropTypes.bool.isRequired\n}\n\nShareModal.defaultProps = {\n  className: ''\n}\n\nexport default withTranslation('files')(ShareModal)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport PencilIcon from '../../../icons/StrokePencil'\nimport TextInputModal from '../../../components/text-input-modal/TextInputModal'\nimport { withTranslation } from 'react-i18next'\n\nfunction RenameModal ({ t, tReady, onCancel, onSubmit, filename, folder, className, ...props }) {\n  const context = folder ? 'Folder' : 'File'\n\n  return (\n    <TextInputModal\n      onCancel={onCancel}\n      onSubmit={onSubmit}\n      mustBeDifferent\n      className={className}\n      defaultValue={filename}\n      title={t(`renameModal.title${context}`)}\n      description={t(`renameModal.description${context}`)}\n      Icon={PencilIcon}\n      submitText={t('app:actions.save')}\n      {...props} />\n  )\n}\n\nRenameModal.propTypes = {\n  onCancel: PropTypes.func.isRequired,\n  onSubmit: PropTypes.func.isRequired,\n  filename: PropTypes.string.isRequired,\n  folder: PropTypes.bool,\n  t: PropTypes.func.isRequired,\n  tReady: PropTypes.bool.isRequired\n}\n\nRenameModal.defaultProps = {\n  className: '',\n  folder: false\n}\n\nexport default withTranslation('files')(RenameModal)\n","import React, { useEffect, useMemo, useState } from 'react'\nimport PropTypes from 'prop-types'\nimport { /* Trans, */ withTranslation } from 'react-i18next'\nimport { humanSize } from '../../../lib/files'\nimport Button from '../../../components/button/Button'\nimport Checkbox from '../../../components/checkbox/Checkbox'\nimport GlyphPin from '../../../icons/GlyphPin'\nimport { Modal, ModalActions, ModalBody } from '../../../components/modal/Modal'\nimport { connect } from 'redux-bundler-react'\nimport './PinningModal.css'\n\nconst PinIcon = ({ icon, index }) => {\n  if (icon) {\n    return <img className=\"mr1\" src={icon} alt='' width={32} height={32} style={{ objectFit: 'contain' }} />\n  }\n\n  const colors = ['aqua', 'link', 'yellow', 'teal', 'red', 'green', 'navy', 'gray', 'charcoal']\n  const color = colors[index % colors.length]\n  const glyphClass = `mr1 fill-${color} flex-shrink-0`\n\n  return <GlyphPin width={32} height={32} className={glyphClass}/>\n}\n\nexport const PinningModal = ({ t, tReady, onCancel, onPinningSet, file, pinningServices, doGetFileSizeThroughCid, doSelectRemotePinsForFile, doFetchPinningServices, className, ...props }) => {\n  const selectedRemoteServices = useMemo(() => doSelectRemotePinsForFile(file), [doSelectRemotePinsForFile, file])\n  const [selectedServices, setSelectedServices] = useState([...selectedRemoteServices, ...[file.pinned && 'local']])\n  const [size, setSize] = useState(null)\n\n  useEffect(() => {\n    doFetchPinningServices()\n    const fetchSize = async () => setSize(await doGetFileSizeThroughCid(file.cid))\n    fetchSize()\n  // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [])\n\n  const selectService = (key) => {\n    const service = pinningServices.find(s => s.name === key)\n    if (service && !service.online) {\n      // when a service is offline, click in noop\n      return\n    }\n    if (selectedServices.indexOf(key) === -1) {\n      return setSelectedServices([...selectedServices, key])\n    }\n\n    return setSelectedServices(selectedServices.filter(s => s !== key))\n  }\n\n  return (\n    <Modal {...props} className={className} onCancel={onCancel} >\n      <ModalBody title={t('pinningModal.title')}>\n        <div className=\"pinningModalContainer\">\n          <button className=\"flex items-center pa1 hoverable-button\" key={t('pinningModal.localNode')} onClick={() => selectService('local')}>\n            <Checkbox className='pv3 pl3 pr1 flex-none' checked={selectedServices.includes('local')} style={{ pointerEvents: 'none' }}/>\n            <GlyphPin fill=\"currentColor\" width={32} height={32} className=\"mr1 aqua flex-shrink-0\"/>\n            <p className=\"f5 w-100\">{ t('pinningModal.localNode') }</p>\n          </button>\n          { pinningServices.map(({ icon, name, online }, index) => (\n            <button className=\"flex items-center pa1 hoverable-button\" key={name} onClick={() => selectService(name)}>\n              <Checkbox className='pv3 pl3 pr1 flex-none' checked={selectedServices.includes(name)} style={{ pointerEvents: 'none' }} disabled={!online}/>\n              <PinIcon index={index} icon={icon}/>\n              <p className={ online ? 'f6' : 'f6 red' }>{ name }</p>\n            </button>\n          ))}\n        </div>\n        {/* <p className='mh0 mt3 mb1 f6'>\n          <Trans i18nKey='pinningModal.footer' t={t}>\n            Need to add or configure a pinning service? Go to <a href=\"#/settings\" className=\"link blue\">Settings.</a>\n          </Trans>\n        </p> */}\n        <p className=\"f6 charcoal\">{t('pinningModal.totalSize', { size: humanSize(size) })}</p>\n      </ModalBody>\n\n      <ModalActions>\n        <Button className='ma2 tc' bg='bg-gray' onClick={onCancel}>{t('app:actions.cancel')}</Button>\n        <Button className='ma2 tc' bg='bg-teal' onClick={() => onPinningSet(file, selectedServices, file.pinned, selectedRemoteServices)}>{t('app:actions.apply')}</Button>\n      </ModalActions>\n    </Modal>\n  )\n}\n\nPinningModal.propTypes = {\n  onCancel: PropTypes.func.isRequired,\n  onPinningSet: PropTypes.func.isRequired,\n  t: PropTypes.func.isRequired,\n  file: PropTypes.object,\n  tReady: PropTypes.bool\n}\n\nPinningModal.defaultProps = {\n  className: ''\n}\n\nexport default connect(\n  'selectPinningServices',\n  'doSelectRemotePinsForFile',\n  'doGetFileSizeThroughCid',\n  'doFetchPinningServices',\n  withTranslation('files')(PinningModal)\n)\n","import React, { useEffect, useState } from 'react'\nimport PropTypes from 'prop-types'\nimport { withTranslation } from 'react-i18next'\nimport TrashIcon from '../../../icons/StrokeTrash'\nimport Button from '../../../components/button/Button'\nimport Checkbox from '../../../components/checkbox/Checkbox'\nimport { Modal, ModalActions, ModalBody } from '../../../components/modal/Modal'\nimport { connect } from 'redux-bundler-react'\n\nconst RemoveModal = ({ t, tReady, onCancel, onRemove, files, foldersCount, filesCount, remotePins, pinningServices, className, ...props }) => {\n  let context = 'File'\n  const count = filesCount + foldersCount\n\n  if (foldersCount > 0) {\n    if (filesCount > 0) {\n      context = 'Item'\n    } else {\n      context = 'Folder'\n    }\n  }\n\n  const isLocallyPinned = files.some(f => f.pinned)\n  const [isRemotelyPinned, setRemotelyPinned] = useState(false)\n\n  const [shouldRemoveLocalPin, setShouldRemoveLocalPin] = useState(isLocallyPinned)\n  const [shouldRemoveRemotePin, setShouldRemoveRemotePin] = useState(false)\n\n  useEffect(() => {\n    (async () => {\n      const isPinned = files.some(f => remotePins.find(p => p.cid.string === f.cid.string))\n      setRemotelyPinned(isPinned)\n    })()\n  })\n\n  const modalData = { count, name: files[0].name }\n  const modalTitle = t(`removeModal.title${context}`, modalData)\n  const modalDescription = t(`removeModal.description${context}`, modalData)\n\n  const handleLocalPinRemoval = () => setShouldRemoveLocalPin(!shouldRemoveLocalPin)\n  const handleRemotePinRemoval = () => setShouldRemoveRemotePin(!shouldRemoveRemotePin)\n\n  const handleRemove = () => onRemove({ removeLocally: shouldRemoveLocalPin, removeRemotely: shouldRemoveRemotePin, remoteServices: pinningServices.map(s => s.name) })\n\n  return (\n    <Modal {...props} className={className} onCancel={onCancel} >\n      <ModalBody title={modalTitle} Icon={TrashIcon}>\n        <div className='charcoal w-100 center tl'>\n          <p>{modalDescription}</p>\n          { isLocallyPinned && (<div>\n            <Checkbox className=\"mr1\" checked={shouldRemoveLocalPin} onChange={handleLocalPinRemoval} label={t('removeModal.checkboxRemoveLocalPin')}/>\n          </div>\n          )}\n          { isRemotelyPinned && (<div className='mt1'>\n            <Checkbox className=\"mr1\" checked={shouldRemoveRemotePin} onChange={handleRemotePinRemoval} label={t('removeModal.checkboxUnpinFromServices')}/>\n          </div>\n          )}\n        </div>\n      </ModalBody>\n\n      <ModalActions>\n        <Button className='ma2 tc' bg='bg-gray' onClick={onCancel}>{t('app:actions.cancel')}</Button>\n        <Button className='ma2 tc' bg='bg-red' onClick={handleRemove}>{t('app:actions.remove')}</Button>\n      </ModalActions>\n    </Modal>\n  )\n}\n\nRemoveModal.propTypes = {\n  onCancel: PropTypes.func.isRequired,\n  onRemove: PropTypes.func.isRequired,\n  filesCount: PropTypes.number,\n  foldersCount: PropTypes.number,\n  t: PropTypes.func.isRequired,\n  tReady: PropTypes.bool.isRequired\n}\n\nRemoveModal.defaultProps = {\n  className: '',\n  filesCount: 0,\n  foldersCount: 0\n}\n\nexport default connect(\n  'selectRemotePins',\n  'selectPinningServices',\n  withTranslation('files')(RemoveModal)\n)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport isIPFS from 'is-ipfs'\nimport { withTranslation } from 'react-i18next'\nimport Icon from '../../../icons/StrokeDecentralization'\nimport TextInputModal from '../../../components/text-input-modal/TextInputModal'\n\nfunction ByPathModal ({ t, tReady, onCancel, onSubmit, className, ...props }) {\n  const validatePath = (p) => {\n    if (!p.startsWith('/ipfs/')) {\n      p = `/ipfs/${p}`\n    }\n\n    return isIPFS.ipfsPath(p)\n  }\n\n  const getDescription = () => {\n    const codeClass = 'w-90 mb1 pa1 tl bg-snow f7 charcoal-muted truncate'\n\n    return (\n      <div className='mb3 flex flex-column items-center'>\n        <p className='mt0 charcoal tl w-90'>{t('addByPathModal.description') + ' ' + t('addByPathModal.examples')}</p>\n        <code className={codeClass}>/ipfs/QmZTR5bcpQD7cFgTorqxZDYaew1Wqgfbd2ud9QqGPAkK2V</code>\n        <code className={codeClass}>QmPZ9gcCEpqKTo6aq61g2nXGUhM4iCL3ewB6LDXZCtioEB</code>\n      </div>\n    )\n  }\n\n  return (\n    <TextInputModal\n      validate={(p) => validatePath(p.trim())}\n      onSubmit={(p) => onSubmit(p.trim())}\n      onChange={(p) => p.trimStart()}\n      onCancel={onCancel}\n      className={className}\n      title={t('addByPathModal.title')}\n      description={getDescription()}\n      Icon={Icon}\n      submitText={t('app:actions.import')}\n      {...props}\n    />\n  )\n}\n\nByPathModal.propTypes = {\n  onCancel: PropTypes.func.isRequired,\n  onSubmit: PropTypes.func.isRequired,\n  t: PropTypes.func.isRequired,\n  tReady: PropTypes.bool.isRequired\n}\n\nexport default withTranslation('files')(ByPathModal)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { join } from 'path'\nimport { withTranslation } from 'react-i18next'\nimport Overlay from '../../components/overlay/Overlay'\n// Modals\nimport NewFolderModal from './new-folder-modal/NewFolderModal'\nimport ShareModal from './share-modal/ShareModal'\nimport RenameModal from './rename-modal/RenameModal'\nimport PinningModal from './pinning-modal/PinningModal'\nimport RemoveModal from './remove-modal/RemoveModal'\nimport AddByPathModal from './add-by-path-modal/AddByPathModal'\nimport CliTutorMode from '../../components/cli-tutor-mode/CliTutorMode'\nimport { cliCommandList, cliCmdKeys } from '../../bundles/files/consts'\nimport { realMfsPath } from '../../bundles/files/actions'\n// Constants\nconst NEW_FOLDER = 'new_folder'\nconst SHARE = 'share'\nconst RENAME = 'rename'\nconst DELETE = 'delete'\nconst ADD_BY_PATH = 'add_by_path'\nconst CLI_TUTOR_MODE = 'cli_tutor_mode'\nconst PINNING = 'pinning'\n\nexport {\n  NEW_FOLDER,\n  SHARE,\n  RENAME,\n  DELETE,\n  ADD_BY_PATH,\n  CLI_TUTOR_MODE,\n  PINNING\n}\n\nclass Modals extends React.Component {\n  state = {\n    readyToShow: false,\n    rename: {\n      folder: false,\n      path: '',\n      filename: ''\n    },\n    pinning: {\n      file: null\n    },\n    delete: {\n      filesCount: 0,\n      folderCount: 0,\n      files: []\n    },\n    link: '',\n    command: 'ipfs --help'\n  }\n\n  onAddByPath = (path) => {\n    this.props.onAddByPath(path)\n    this.leave()\n  }\n\n  makeDir = (path) => {\n    this.props.onMakeDir(join(this.props.root, path))\n    this.leave()\n  }\n\n  rename = (newName) => {\n    const { filename, path } = this.state.rename\n    const { onMove } = this.props\n\n    if (newName !== '' && newName !== filename) {\n      onMove(path, path.replace(filename, newName))\n    }\n\n    this.leave()\n  }\n\n  delete = (args) => {\n    const { files } = this.state.delete\n\n    this.props.onRemove({ files, ...args })\n    this.leave()\n  }\n\n  leave = () => {\n    this.setState({ readyToShow: false })\n    this.props.done()\n  }\n\n  onPinningSet = (...pinningServices) => {\n    this.props.onPinningSet(...pinningServices)\n    this.leave()\n  }\n\n  componentDidUpdate (prev) {\n    const { show, files, t, onShareLink, cliOptions, root } = this.props\n\n    if (show === prev.show) {\n      return\n    }\n\n    switch (show) {\n      case SHARE: {\n        this.setState({\n          link: t('generating'),\n          readyToShow: true\n        })\n\n        onShareLink(files).then(link => this.setState({ link }))\n        break\n      }\n      case RENAME: {\n        const file = files[0]\n\n        this.setState({\n          readyToShow: true,\n          rename: {\n            folder: file.type === 'directory',\n            path: file.path,\n            filename: file.path.split('/').pop()\n          }\n        })\n        break\n      }\n      case DELETE: {\n        let filesCount = 0\n        let foldersCount = 0\n\n        files.forEach(file => file.type === 'file' ? filesCount++ : foldersCount++)\n\n        this.setState({\n          readyToShow: true,\n          delete: {\n            files,\n            filesCount,\n            foldersCount\n          }\n        })\n        break\n      }\n      case NEW_FOLDER:\n      case ADD_BY_PATH:\n        this.setState({ readyToShow: true })\n        break\n      case CLI_TUTOR_MODE:\n        this.setState({ command: this.cliCommand(cliOptions, files, root) }, () => {\n          this.setState({ readyToShow: true })\n        })\n        break\n      case PINNING: {\n        const file = files[0]\n\n        return this.setState({\n          readyToShow: true,\n          pinning: { file }\n        })\n      }\n      default:\n        // do nothing\n    }\n  }\n\n  cliCommand = (action, files, root) => {\n    let activeCid = ''\n    let fileName = ''\n    let isPinned = ''\n    let path = ''\n    // @TODO: handle multi-select\n    if (files) {\n      activeCid = files[0].cid\n      fileName = files[0].name\n      isPinned = files[0].pinned\n      path = realMfsPath(files[0].path)\n    }\n\n    // @TODO: ensure path is set for all actions\n    switch (action) {\n      case cliCmdKeys.ADD_FILE:\n      case cliCmdKeys.ADD_DIRECTORY:\n      case cliCmdKeys.CREATE_NEW_DIRECTORY:\n      case cliCmdKeys.FROM_IPFS:\n        return cliCommandList[action](root.substr('/files'.length))\n      case cliCmdKeys.DELETE_FILE_FROM_IPFS:\n      case cliCmdKeys.REMOVE_FILE_FROM_IPFS:\n        return cliCommandList[action](path)\n      case cliCmdKeys.DOWNLOAD_OBJECT_COMMAND:\n        return cliCommandList[action](activeCid)\n      case cliCmdKeys.RENAME_IPFS_OBJECT:\n        return cliCommandList[action](path, fileName)\n      case cliCmdKeys.PIN_OBJECT:\n        return cliCommandList[action](activeCid, isPinned ? 'rm' : 'add')\n      default:\n        return cliCommandList[action]()\n    }\n  }\n\n  render () {\n    const { show, t } = this.props\n    const { readyToShow, link, rename, command } = this.state\n    return (\n      <div>\n        <Overlay show={show === NEW_FOLDER && readyToShow} onLeave={this.leave}>\n          <NewFolderModal\n            className='outline-0'\n            onCancel={this.leave}\n            onSubmit={this.makeDir} />\n        </Overlay>\n\n        <Overlay show={show === SHARE && readyToShow} onLeave={this.leave}>\n          <ShareModal\n            className='outline-0'\n            link={link}\n            onLeave={this.leave} />\n        </Overlay>\n\n        <Overlay show={show === RENAME && readyToShow} onLeave={this.leave}>\n          <RenameModal\n            className='outline-0'\n            { ...rename }\n            onCancel={this.leave}\n            onSubmit={this.rename} />\n        </Overlay>\n\n        <Overlay show={show === DELETE && readyToShow} onLeave={this.leave}>\n          <RemoveModal\n            className='outline-0'\n            { ...this.state.delete }\n            onCancel={this.leave}\n            onRemove={this.delete} />\n        </Overlay>\n\n        <Overlay show={show === ADD_BY_PATH && readyToShow} onLeave={this.leave}>\n          <AddByPathModal\n            className='outline-0'\n            onSubmit={this.onAddByPath}\n            onCancel={this.leave} />\n        </Overlay>\n\n        <Overlay show={show === CLI_TUTOR_MODE && readyToShow} onLeave={this.leave}>\n          <CliTutorMode onLeave={this.leave} filesPage={true} command={command} t={t}/>\n        </Overlay>\n\n        <Overlay show={show === PINNING && readyToShow} onLeave={this.leave}>\n          <PinningModal\n            file={this.state.pinning.file}\n            className='outline-0'\n            onCancel={this.leave}\n            onPinningSet={this.onPinningSet} />\n        </Overlay>\n      </div>\n    )\n  }\n}\n\nModals.propTypes = {\n  t: PropTypes.func.isRequired,\n  show: PropTypes.string,\n  files: PropTypes.array,\n  onAddByPath: PropTypes.func.isRequired,\n  onMove: PropTypes.func.isRequired,\n  onMakeDir: PropTypes.func.isRequired,\n  onShareLink: PropTypes.func.isRequired,\n  onRemove: PropTypes.func.isRequired\n}\n\nexport default withTranslation('files')(Modals)\n","import React, { useEffect, useState, useRef, useMemo } from 'react'\nimport classNames from 'classnames'\nimport PropTypes from 'prop-types'\nimport { basename, join } from 'path'\nimport { connect } from 'redux-bundler-react'\nimport { withTranslation } from 'react-i18next'\nimport { useDrop } from 'react-dnd'\nimport { NativeTypes } from 'react-dnd-html5-backend'\n\nimport { normalizeFiles } from '../../lib/files'\n\nimport './Breadcrumbs.css'\n\nconst DropableBreadcrumb = ({ index, link, immutable, onAddFiles, onMove, onClick, onContextMenuHandle, getPathInfo, checkIfPinned }) => {\n  const [{ isOver }, drop] = useDrop({\n    accept: [NativeTypes.FILE, 'FILE'],\n    drop: async ({ files, filesPromise, path: filePath }) => {\n      if (files) {\n        (async () => {\n          const files = await filesPromise\n          onAddFiles(await normalizeFiles(files), link.path)\n        })()\n      } else {\n        const src = filePath\n        const dst = join(link.path, basename(filePath))\n\n        try { await onMove(src, dst) } catch (e) { console.error(e) }\n      }\n    },\n    collect: (monitor) => ({\n      isOver: monitor.isOver()\n    })\n  })\n\n  const buttonRef = useRef()\n\n  const handleOnContextMenuHandle = async (ev) => {\n    ev.preventDefault()\n\n    const { path } = link\n    const sanitizedPath = path.substring(path.indexOf('/', 1), path.length)\n    const { cid, type } = await getPathInfo(sanitizedPath)\n    const pinned = await checkIfPinned(cid)\n\n    onContextMenuHandle(undefined, buttonRef.current, {\n      ...link,\n      type,\n      cid,\n      pinned\n    })\n  }\n\n  return (\n    <span className='dib pv1 pr1' ref={drop}>\n      <button ref={buttonRef} title={link.realName}\n        className={classNames('BreadcrumbsButton relative',\n          index !== 0 && 'navy',\n          index === 0 && 'f7 pa1 br2 mr2',\n          index === 0 && (immutable ? 'bg-charcoal-muted white' : 'bg-navy white'),\n          immutable && (link.last || index === 0) && 'no-events',\n          link.last && 'b', isOver && 'dragging')}\n        onClick={() => onClick({ path: link.path })} onContextMenu={(ev) => index !== 0 && handleOnContextMenuHandle(ev)}>\n        {link.name}\n      </button>\n    </span>\n  )\n}\n\nconst Breadcrumbs = ({ t, tReady, path, onClick, className, onContextMenuHandle, onAddFiles, onMove, doGetPathInfo, doCheckIfPinned, ...props }) => {\n  const [overflows, setOverflows] = useState(false)\n  const [isImmutable, setImmutable] = useState(false)\n  const anchors = useRef()\n\n  useEffect(() => {\n    const a = anchors.current\n\n    const newOverflows = a ? (a.offsetHeight < a.scrollHeight || a.offsetWidth < a.scrollWidth) : false\n    if (newOverflows !== overflows) {\n      setOverflows(newOverflows)\n    }\n  }, [overflows])\n\n  const bread = useMemo(() =>\n    makeBread(path, t, isImmutable, setImmutable)\n  , [isImmutable, path, t])\n\n  return (\n    <nav aria-label={t('breadcrumbs')} className={classNames('Breadcrumbs flex items-center sans-serif overflow-hidden sticky top-0', className)} {...props}>\n      <div className='nowrap overflow-hidden relative flex flex-wrap' ref={ anchors }>\n        <div className={`absolute left-0 top-0 h-100 w1 ${overflows ? '' : 'dn'}`} style={{ background: 'linear-gradient(to right, #ffffff 0%, transparent 100%)' }} />\n\n        { bread.map((link, index) => (\n          <div key={`${index}link`}>\n            <DropableBreadcrumb index={index} link={link} immutable={isImmutable}\n              onAddFiles={onAddFiles} onMove={onMove} onClick={onClick} onContextMenuHandle={onContextMenuHandle} getPathInfo={doGetPathInfo} checkIfPinned={doCheckIfPinned} />\n            { index !== bread.length - 1 && <span className='dib pr1 pv1 mid-gray v-top'>/</span>}\n          </div>\n        ))}\n\n      </div>\n    </nav>\n  )\n}\n\nBreadcrumbs.propTypes = {\n  path: PropTypes.string.isRequired,\n  onClick: PropTypes.func.isRequired,\n  t: PropTypes.func.isRequired,\n  onContextMenuHandle: PropTypes.func\n}\n\nfunction makeBread (root, t, isImmutable, setImmutable) {\n  if (root.endsWith('/')) {\n    root = root.substring(0, root.length - 1)\n  }\n\n  const parts = root.split('/').map(part => ({\n    name: part,\n    path: part\n  }))\n\n  for (let i = 1; i < parts.length; i++) {\n    const name = parts[i].name\n\n    parts[i] = {\n      name: name,\n      path: parts[i - 1].path + '/' + parts[i].path\n    }\n\n    if (name.length >= 30) {\n      parts[i].realName = name\n      parts[i].name = `${name.substring(0, 4)}...${name.substring(name.length - 4, name.length)}`\n    }\n  }\n\n  parts.shift()\n\n  if (parts[0].name === 'ipfs' || parts[0].name === 'ipns') {\n    !isImmutable && setImmutable(true)\n  }\n\n  parts[0].name = t(parts[0].name)\n\n  parts[parts.length - 1].last = true\n  return parts\n}\n\nexport default connect(\n  'doGetPathInfo',\n  'doCheckIfPinned',\n  withTranslation('files')(Breadcrumbs)\n)\n","import React from 'react'\n\nconst StrokeDocument = props => (\n  <svg viewBox='0 0 100 100' {...props}>\n    <path d='M36 33.4h14.21a1 1 0 0 0 0-2H36a1 1 0 0 0 0 2zm0 8.84h14.21a1 1 0 0 0 0-2H36a1 1 0 0 0 0 2zm29.13 6.83H36a1 1 0 0 0 0 2h29.13a1 1 0 0 0 0-2zm0 8.84H36a1 1 0 1 0 0 2h29.13a1 1 0 0 0 0-2zm0 8.84H36a1 1 0 1 0 0 2h29.13a1 1 0 0 0 0-2z' />\n    <path d='M75.13 37.17v-.05L56.55 17.8H30a5.51 5.51 0 0 0-5.5 5.5v53.4a5.51 5.51 0 0 0 5.5 5.5h40a5.51 5.51 0 0 0 5.5-5.5V37.51zM56.91 22.51l14 14.61h-7.08c-4 0-6.92-2.53-6.92-6zM70 79.2H30a2.5 2.5 0 0 1-2.5-2.5V23.3a2.5 2.5 0 0 1 2.5-2.5h24.91v10.31c0 4.64 3.75 8 8.92 8h8.63V76.7A2.5 2.5 0 0 1 70 79.2z' />\n  </svg>\n)\n\nexport default StrokeDocument\n","import React from 'react'\n\nconst StrokeNewFolder = props => (\n  <svg viewBox='0 0 65 102' {...props}>\n    <path d='M52.62 33.38H35.17a3.76 3.76 0 0 1-3.44-2.25l-2.28-4.83a6 6 0 0 0-5.57-3.8H11.56C5.19 22.5 0 28 0 34.68v32.64C0 74 5.19 79.5 11.56 79.5h41.06c6.37 0 11.56-5.46 11.56-12.18V45.56c0-6.72-5.19-12.18-11.56-12.18zM11.56 25.1h12.32a3.45 3.45 0 0 1 3.21 2.25l2.34 4.95a6.33 6.33 0 0 0 5.74 3.7h17.45a9.22 9.22 0 0 1 8.9 8.5H2.6v-9.8c0-5.3 4.02-9.6 8.96-9.6zm41.06 51.8H11.56c-4.94 0-9-4.3-9-9.58V46h59v21.32c.02 5.28-4 9.58-8.94 9.58zM33.09 0v10h-2V0zM12.64 15.858L7.79 7.112l1.75-.97 4.848 8.746zm43.749-8.746l-4.848 8.746-1.75-.97 4.848-8.746zM33.09 102V92h-2v10zM12.64 86.142l-4.85 8.746 1.75.97 4.848-8.746zm43.749 8.746l-4.848-8.746-1.75.97 4.848 8.746z' />\n  </svg>\n)\n\nexport default StrokeNewFolder\n","import React from 'react'\nimport { connect } from 'redux-bundler-react'\nimport PropTypes from 'prop-types'\nimport { withTranslation } from 'react-i18next'\nimport { normalizeFiles } from '../../lib/files'\n// Icons\nimport DocumentIcon from '../../icons/StrokeDocument'\nimport FolderIcon from '../../icons/StrokeFolder'\nimport NewFolderIcon from '../../icons/StrokeNewFolder'\nimport DecentralizationIcon from '../../icons/StrokeDecentralization'\n// Components\nimport { Dropdown, DropdownMenu, Option } from '../dropdown/Dropdown'\nimport Button from '../../components/button/Button'\nimport { cliCmdKeys } from '../../bundles/files/consts'\n\nconst AddButton = withTranslation('app')(\n  ({ t, onClick }) => (\n    <Button id='import-button' bg='bg-navy' color='white' className='f6 flex justify-center items-center' minWidth='100px' onClick={onClick}>\n      <span><span className='aqua'>+</span> {t('actions.import')}</span>\n    </Button>\n  )\n)\n\nclass FileInput extends React.Component {\n  state = {\n    dropdown: false\n  }\n\n  toggleDropdown = () => {\n    this.setState(s => ({ dropdown: !s.dropdown }))\n  }\n\n  onAddFolder = () => {\n    this.toggleDropdown()\n    return this.folderInput.click()\n  }\n\n  onAddFile = async () => {\n    this.toggleDropdown()\n    return this.filesInput.click()\n  }\n\n  onInputChange = (input) => async () => {\n    this.props.onAddFiles(normalizeFiles(input.files))\n    input.value = null\n  }\n\n  onAddByPath = () => {\n    this.props.onAddByPath()\n    this.toggleDropdown()\n  }\n\n  onNewFolder = () => {\n    this.props.onNewFolder()\n    this.toggleDropdown()\n  }\n\n  onCliTutorMode = async (cliOptions) => {\n    await this.props.doSetCliOptions(cliOptions)\n    this.props.onCliTutorMode()\n    this.toggleDropdown()\n  }\n\n  render () {\n    const { t, isCliTutorModeEnabled } = this.props\n\n    return (\n      <div className={this.props.className}>\n        <Dropdown>\n          <AddButton onClick={this.toggleDropdown} />\n          <DropdownMenu\n            top={3}\n            open={this.state.dropdown}\n            onDismiss={this.toggleDropdown} >\n            <Option onClick={this.onAddFile} id='add-file' onCliTutorMode={() => this.onCliTutorMode(cliCmdKeys.ADD_FILE)}\n              isCliTutorModeEnabled={isCliTutorModeEnabled}>\n              <DocumentIcon className='fill-aqua w2 mr1' />\n              {t('app:terms.file')}\n            </Option>\n            <Option onClick={this.onAddFolder} id='add-folder' onCliTutorMode={() => this.onCliTutorMode(cliCmdKeys.ADD_DIRECTORY)}\n              isCliTutorModeEnabled={isCliTutorModeEnabled}>\n              <FolderIcon className='fill-aqua w2 mr1' />\n              {t('app:terms.folder')}\n            </Option>\n            <Option onClick={this.onAddByPath} id='add-by-path' onCliTutorMode={() => this.onCliTutorMode(cliCmdKeys.FROM_IPFS)}\n              isCliTutorModeEnabled={isCliTutorModeEnabled}>\n              <DecentralizationIcon className='fill-aqua w2 mr1' />\n              {t('addByPath')}\n            </Option>\n            <Option onClick={this.onNewFolder} id='add-new-folder' onCliTutorMode={() => this.onCliTutorMode(cliCmdKeys.CREATE_NEW_DIRECTORY)}\n              isCliTutorModeEnabled={isCliTutorModeEnabled}>\n              <NewFolderIcon className='fill-aqua w2 h2 mr1' />\n              {t('newFolder')}\n            </Option>\n          </DropdownMenu>\n        </Dropdown>\n\n        <input\n          id='file-input'\n          type='file'\n          className='dn'\n          multiple\n          ref={el => { this.filesInput = el }}\n          onChange={this.onInputChange(this.filesInput)} />\n\n        <input\n          id='directory-input'\n          type='file'\n          className='dn'\n          multiple\n          webkitdirectory='true'\n          ref={el => { this.folderInput = el }}\n          onChange={this.onInputChange(this.folderInput)} />\n      </div>\n    )\n  }\n}\n\nFileInput.propTypes = {\n  t: PropTypes.func.isRequired,\n  onAddFiles: PropTypes.func.isRequired,\n  onAddByPath: PropTypes.func.isRequired,\n  onNewFolder: PropTypes.func.isRequired\n}\n\nexport default connect(\n  'selectIsCliTutorModeEnabled',\n  'doOpenCliTutorModal',\n  'doSetCliOptions',\n  withTranslation('files')(FileInput)\n)\n","import React from 'react'\nimport classNames from 'classnames'\nimport { connect } from 'redux-bundler-react'\nimport { withTranslation } from 'react-i18next'\nimport { humanSize } from '../../lib/files'\n// Components\nimport Breadcrumbs from '../breadcrumbs/Breadcrumbs'\nimport FileInput from '../file-input/FileInput'\nimport Button from '../../components/button/Button'\n// Icons\nimport GlyphDots from '../../icons/GlyphDots'\n\nconst BarOption = ({ children, text, isLink = false, className = '', ...etc }) => (\n  <div className={classNames(className, 'tc pa3', etc.onClick && 'pointer')} {...etc}>\n    <span className='nowrap db f4 charcoal'>{children}</span>\n    <span className={`nowrap db ttu f6 montserrat fw4 ${isLink ? 'link' : 'charcoal-muted'}`}>{text}</span>\n  </div>\n)\n\n// Tweak human-readable size format to be more compact\nconst size = (s) => humanSize(s, {\n  round: s >= 1073741824 ? 1 : 0, // show decimal > 1GiB\n  spacer: ''\n})\n\nclass Header extends React.Component {\n  handleContextMenu = (ev) => {\n    const pos = this.dotsWrapper.getBoundingClientRect()\n    this.props.handleContextMenu(ev, 'TOP', {\n      ...this.props.files,\n      // TODO: change to \"pinning\" and not \"pinned\"\n      pinned: this.props.pins.includes(this.props.files.cid.toString())\n    }, pos)\n  }\n\n  handleBreadCrumbsContextMenu = (ev, breadcrumbsRef, file) => {\n    const pos = breadcrumbsRef.getBoundingClientRect()\n    this.props.handleContextMenu(ev, 'TOP', file, pos)\n  }\n\n  render () {\n    const {\n      currentDirectorySize,\n      hasUpperDirectory,\n      files,\n      filesPathInfo,\n      filesSize,\n      onNavigate,\n      repoSize,\n      t\n    } = this.props\n\n    return (\n      <div className='db flex-l justify-between items-center'>\n        <div className='mb3 overflow-hidden mr2'>\n          <Breadcrumbs className=\"joyride-files-breadcrumbs\" path={files ? files.path : '/404'}\n            onClick={onNavigate} onContextMenuHandle={(...args) => this.handleBreadCrumbsContextMenu(...args)}\n            onAddFiles={this.props.onAddFiles} onMove={this.props.onMove}/>\n        </div>\n\n        <div className='mb3 flex justify-between items-center bg-snow-muted joyride-files-add'>\n          <BarOption title={t('filesDescription')} text={t('app:terms:files')}>\n            { hasUpperDirectory\n              ? (\n                <span>\n                  { size(currentDirectorySize) }<span className='f5 gray'>/{ size(filesSize) }</span>\n                </span>\n              )\n              : size(filesSize) }\n          </BarOption>\n\n          <BarOption title={t('allBlocksDescription')} text={t('allBlocks')}>\n            { size(repoSize) }\n          </BarOption>\n\n          <div className='pa3'>\n            <div className='ml-auto flex items-center'>\n              { (files && files.type === 'directory' && filesPathInfo.isMfs)\n                ? <FileInput\n                  onNewFolder={this.props.onNewFolder}\n                  onAddFiles={this.props.onAddFiles}\n                  onAddByPath={this.props.onAddByPath}\n                  onCliTutorMode={this.props.onCliTutorMode}\n                />\n                : <div ref={el => { this.dotsWrapper = el }}>\n                  <Button bg='bg-navy'\n                    color='white'\n                    fill='fill-aqua'\n                    className='f6 relative flex justify-center items-center tc'\n                    minWidth='100px'\n                    disabled={!files || filesPathInfo.isRoot || files.type === 'unknown'}\n                    onClick={this.handleContextMenu}>\n                    <GlyphDots className='w1 mr2' />\n                    { t('app:actions.more') }\n                  </Button>\n                </div>\n              }\n            </div>\n          </div>\n        </div>\n      </div>\n    )\n  }\n}\n\nexport default connect(\n  'selectPins',\n  'selectHasUpperDirectory',\n  'selectFilesSize',\n  'selectRepoSize',\n  'selectRepoNumObjects',\n  'selectFilesPathInfo',\n  'selectCurrentDirectorySize',\n  withTranslation('files')(Header)\n)\n","import React from 'react'\n\nconst GlyphSmallArrows = props => (\n  <svg viewBox=\"0 0 32 21\" {...props}>\n    <path d=\"M16 20.2L0.5 4.7L4.4 0.800003L16 12.4L27.6 0.800003L31.5 4.7C26.3 9.8 21.2 15 16 20.2Z\" />\n  </svg>\n\n)\n\nexport default GlyphSmallArrows\n","import React from 'react'\n\nconst GlyphCancel = props => (\n  <svg viewBox='0 0 100 100' {...props}>\n    <path d='M50 20.11A29.89 29.89 0 1 0 79.89 50 29.89 29.89 0 0 0 50 20.11zM63.58 59.7l-3.88 3.88-9.7-9.7-9.7 9.7-3.88-3.88 9.7-9.7-9.7-9.7 3.88-3.88 9.7 9.7 9.7-9.7 3.88 3.88-9.7 9.7z' />\n  </svg>\n)\n\nexport default GlyphCancel\n","import React from 'react'\nimport PropTypes from 'prop-types'\n\nconst ProgressBar = ({ bg, br, className, style, width, height, progress, ...props }) => {\n  return (\n    <div className={`ProgressBar sans-serif ${br} dib ${className} ${width} ${height}`} style={{ background: '#DDE6EB', ...style }} {...props}>\n      <div className={`${br} h-100 ${bg}`} style={{ width: `${progress}%` }} />\n    </div>\n  )\n}\n\nProgressBar.propTypes = {\n  className: PropTypes.string,\n  bg: PropTypes.string,\n  width: PropTypes.string,\n  height: PropTypes.string,\n  br: PropTypes.string,\n  progress: PropTypes.number.isRequired\n}\n\nProgressBar.defaultProps = {\n  className: '',\n  width: 'w-100',\n  height: 'h1',\n  bg: 'bg-aqua',\n  br: 'br-pill'\n}\n\nexport default ProgressBar\n","import React, { useMemo, useState, useCallback } from 'react'\nimport { humanSize } from '../../lib/files'\nimport PropTypes from 'prop-types'\nimport { connect } from 'redux-bundler-react'\nimport { withTranslation } from 'react-i18next'\n// Icons\nimport DocumentIcon from '../../icons/GlyphDocGeneric'\nimport FolderIcon from '../../icons/GlyphFolder'\nimport './FileImportStatus.css'\nimport GlyphSmallArrows from '../../icons/GlyphSmallArrow'\nimport GlyphTick from '../../icons/GlyphTick'\nimport GlyphCancel from '../../icons/GlyphCancel'\nimport GlyphSmallCancel from '../../icons/GlyphSmallCancel'\nimport ProgressBar from '../../components/progress-bar/ProgressBar'\n\nconst Import = (job, t) =>\n  [...groupByPath(job?.message?.entries || new Map()).values()].map(item => (\n    <li className=\"flex w-100 bb b--light-gray items-center f6 charcoal\" key={item.path}>\n      {viewIcon(item)}\n      <span className=\"fileImportStatusName truncate\">{item.path}</span>\n      <span className='gray mh2'> |\n        { item.entries && (<span> { t('filesImportStatus.count', { count: item.entries.length }) } | </span>) }\n        <span className='ml2'>{ humanSize(item.size) }</span>\n      </span>\n      {viewImportStatus(job, item.progress)}\n    </li>\n  ))\n\nconst viewIcon = (entry) =>\n  entry.type === 'directory'\n    ? <FolderIcon className=\"fileImportStatusIcon fill-aqua pa1\" />\n    : <DocumentIcon className=\"fileImportStatusIcon fill-aqua pa1\" />\n\nconst viewImportStatus = (job, progress) => {\n  switch (job.status) {\n    case 'Pending': {\n      return <LoadingIndicator complete={ progress === 100 } />\n    }\n    case 'Failed': {\n      return (<GlyphCancel className=\"dark-red w2 ph1\" fill=\"currentColor\"/>)\n    }\n    default: {\n      return (<LoadingIndicator complete={true}/>)\n    }\n  }\n}\n\nconst groupByPath = (entries) => {\n  const groupedEntries = new Map()\n  for (const entry of entries) {\n    const name = baseDirectoryOf(entry)\n    if (name == null) {\n      groupedEntries.set(entry.path, { type: 'file', ...entry })\n    } else {\n      // add `/` to avoid collision with file names.\n      const directory = groupedEntries.get(`${name}/`)\n      if (directory) {\n        directory.entries.push(entry)\n        directory.size += entry.size\n      } else {\n        groupedEntries.set(`${name}/`, {\n          type: 'directory',\n          size: entry.size,\n          path: name,\n          entries: [entry]\n        })\n      }\n    }\n  }\n  return groupedEntries\n}\n\n/**\n * @typedef {Object} Entry\n * @property {string} path\n * @property {size} number\n */\n\n/**\n * @param {Entry} entry\n * @returns {string|null}\n */\nconst baseDirectoryOf = ({ path }) => {\n  const index = path.indexOf('/')\n  return index < 0 ? null : path.slice(0, index)\n}\n\nconst LoadingIndicator = ({ complete }) =>\n  complete ? <GlyphTick className=\"green w2 ph1\" fill=\"currentColor\"/> : <span className=\"w2 ph1\"/>\n\nexport const FileImportStatus = ({ filesFinished, filesPending, filesErrors, doFilesClear, initialExpanded, t }) => {\n  const sortedFilesFinished = useMemo(() => filesFinished.sort((fileA, fileB) => fileB.start - fileA.start), [filesFinished])\n  const [expanded, setExpanded] = useState(initialExpanded)\n\n  const handleImportStatusClose = useCallback((ev) => {\n    doFilesClear()\n    ev.stopPropagation() // Prevent setExpanded from being called\n  }, [doFilesClear])\n\n  if (!filesFinished.length && !filesPending.length && !filesErrors.length) {\n    return null\n  }\n\n  const numberOfImportedItems = !filesFinished.length ? 0 : filesFinished.reduce((prev, finishedFile) => prev + finishedFile.message.entries.length, 0)\n  const numberOfPendingItems = filesPending.reduce((total, pending) => total + groupByPath(pending.message.entries).size, 0)\n  const progress = Math.floor(filesPending.reduce((total, { message: { progress } }) => total + progress, 0) / filesPending.length)\n\n  return (\n    <div className='fileImportStatus fixed bottom-1 w-100 flex justify-center' style={{ zIndex: 14, pointerEvents: 'none' }}>\n      <div className=\"relative br1 dark-gray w-40 center ba b--light-gray bg-white\" style={{ pointerEvents: 'auto' }}>\n        <div className=\"fileImportStatusButton pv2 ph3 relative flex items-center no-select pointer charcoal w-100 justify-between\" style={{ background: '#F0F6FA' }}>\n          <span>\n            { filesPending.length\n              ? `${t('filesImportStatus.importing', { count: numberOfPendingItems })} (${progress}%)`\n              : t('filesImportStatus.imported', { count: numberOfImportedItems })\n            }\n          </span>\n          <div className=\"flex items-center\">\n            <button className='fileImportStatusArrow' onClick={() => setExpanded(!expanded)} aria-expanded={expanded} aria-label={ t('filesImportStatus.toggleDropdown') }>\n              <GlyphSmallArrows className='w-100' fill=\"currentColor\" opacity=\"0.7\" aria-hidden=\"true\"/>\n            </button>\n            <button className='fileImportStatusCancel' onClick={ handleImportStatusClose } aria-label={ t('filesImportStatus.closeDropdown') }>\n              <GlyphSmallCancel className='w-100' fill=\"currentColor\" opacity=\"0.7\"/>\n            </button>\n          </div>\n        </div>\n        <ul className='fileImportStatusRow pa0 ma0' aria-hidden={!expanded}>\n          { filesPending.map(file => Import(file, t)) }\n          { sortedFilesFinished.map(file => Import(file, t)) }\n          { filesErrors.map(file => Import(file, t)) }\n        </ul>\n        {\n          filesPending.length\n            ? <ProgressBar progress={progress} bg=\"bg-teal\" br=\"br0\" className=\"absolute bottom-0\" style={{ height: '4px' }} />\n            : null\n        }\n      </div>\n    </div>\n  )\n}\n\nFileImportStatus.propTypes = {\n  filesFinished: PropTypes.array,\n  filesPending: PropTypes.array,\n  filesErrors: PropTypes.array,\n  doFilesClear: PropTypes.func,\n  initialExpanded: PropTypes.bool\n}\n\nFileImportStatus.defaultProps = {\n  filesFinished: [],\n  filesPending: [],\n  filesErrors: [],\n  initialExpanded: true\n}\n\nexport default connect(\n  'selectFilesFinished',\n  'selectFilesPending',\n  'selectFilesErrors',\n  'doFilesClear',\n  withTranslation('files')(FileImportStatus)\n)\n","import React, { useEffect, useRef, useState } from 'react'\nimport { findDOMNode } from 'react-dom'\nimport { Helmet } from 'react-helmet'\nimport { connect } from 'redux-bundler-react'\nimport { withTranslation, Trans } from 'react-i18next'\nimport ReactJoyride from 'react-joyride'\n// Lib\nimport { filesTour } from '../lib/tours'\nimport downloadFile from './download-file'\n// Components\nimport ContextMenu from './context-menu/ContextMenu'\nimport withTour from '../components/tour/withTour'\nimport InfoBoxes from './info-boxes/InfoBoxes'\nimport FilePreview from './file-preview/FilePreview'\nimport FilesList from './files-list/FilesList'\nimport { getJoyrideLocales } from '../helpers/i8n'\n\n// Icons\nimport Modals, { DELETE, NEW_FOLDER, SHARE, RENAME, ADD_BY_PATH, CLI_TUTOR_MODE, PINNING } from './modals/Modals'\nimport Header from './header/Header'\nimport FileImportStatus from './file-import-status/FileImportStatus'\n\nconst FilesPage = ({\n  doFetchPinningServices, doFilesFetch, doPinsFetch, doFilesSizeGet, doFilesDownloadLink, doFilesWrite, doFilesAddPath, doUpdateHash,\n  doFilesUpdateSorting, doFilesNavigateTo, doFilesMove, doSetCliOptions, doFetchRemotePins, remotePins, doExploreUserProvidedPath,\n  ipfsProvider, ipfsConnected, doFilesMakeDir, doFilesShareLink, doFilesDelete, doSetPinning, onRemotePinClick,\n  files, filesPathInfo, pinningServices, toursEnabled, handleJoyrideCallback, isCliTutorModeEnabled, cliOptions, t\n}) => {\n  const contextMenuRef = useRef()\n  const [downloadAbort, setDownloadAbort] = useState(null)\n  const [downloadProgress, setDownloadProgress] = useState(null)\n  const [modals, setModals] = useState({ show: null, files: null })\n  const [contextMenu, setContextMenu] = useState({\n    isOpen: false,\n    translateX: 0,\n    translateY: 0,\n    file: null\n  })\n\n  useEffect(() => {\n    doFetchPinningServices()\n    doFilesFetch()\n    doPinsFetch()\n    doFilesSizeGet()\n  }, [doFetchPinningServices, doFilesFetch, doPinsFetch, doFilesSizeGet])\n\n  useEffect(() => {\n    if (ipfsConnected || filesPathInfo.path) {\n      doFilesFetch()\n    }\n  }, [ipfsConnected, filesPathInfo, doFilesFetch])\n\n  useEffect(() => {\n    if (pinningServices.some(service => service.online)) {\n      files && files.content && doFetchRemotePins(files.content)\n    }\n  }, [files, pinningServices, doFetchRemotePins])\n\n  const onDownload = async (files) => {\n    if (downloadProgress !== null) {\n      return downloadAbort()\n    }\n\n    const updater = (v) => setDownloadProgress(v)\n    const { url, filename, method } = await doFilesDownloadLink(files)\n    const { abort } = await downloadFile(url, filename, updater, method)\n    setDownloadAbort(() => abort)\n  }\n  const onAddFiles = (raw, root = '') => {\n    if (root === '') root = files.path\n\n    doFilesWrite(raw, root)\n  }\n\n  const onAddByPath = (path) => doFilesAddPath(files.path, path)\n  const onInspect = (cid) => doUpdateHash(`/explore/ipfs/${cid}`)\n  const showModal = (modal, files = null) => setModals({ show: modal, files: files })\n  const hideModal = () => setModals({})\n  const handleContextMenu = (ev, clickType, file, pos) => {\n    // This is needed to disable the native OS right-click menu\n    // and deal with the clicking on the ContextMenu options\n    if (ev !== undefined && typeof ev !== 'string') {\n      ev.preventDefault()\n      ev.persist()\n    }\n\n    const ctxMenu = findDOMNode(contextMenuRef.current)\n    const ctxMenuPosition = ctxMenu.getBoundingClientRect()\n\n    let translateX = 0\n    let translateY = 0\n\n    switch (clickType) {\n      case 'RIGHT': {\n        const rightPadding = window.innerWidth - ctxMenu.parentNode.getBoundingClientRect().right\n        translateX = (window.innerWidth - ev.clientX) - rightPadding - 20\n        translateY = (ctxMenuPosition.y + ctxMenuPosition.height / 2) - ev.clientY - 10\n        break\n      }\n      case 'TOP': {\n        const pagePositions = ctxMenu.parentNode.getBoundingClientRect()\n        translateX = pagePositions.right - pos.right\n        translateY = -(pos.bottom - pagePositions.top + 11)\n        break\n      }\n      default: {\n        translateX = 1\n        translateY = (ctxMenuPosition.y + ctxMenuPosition.height / 2) - (pos && pos.y) - 30\n      }\n    }\n\n    setContextMenu({\n      isOpen: !contextMenu.isOpen,\n      translateX,\n      translateY,\n      file\n    })\n  }\n\n  const MainView = ({ t, files, remotePins, doExploreUserProvidedPath }) => {\n    if (!files) return (<div/>)\n\n    if (files.type === 'unknown') {\n      const path = files.path.startsWith('/pins')\n        ? files.path.slice(6)\n        : files.path\n\n      return (\n        <div>\n          <Trans i18nKey='cidNotFileNorDir' t={t}>\n            The current link isn't a file, nor a directory. Try to <button className='link blue pointer' onClick={() => doExploreUserProvidedPath(path)}>inspect</button> it instead.\n          </Trans>\n        </div>\n      )\n    }\n\n    if (files.type === 'file') {\n      return (\n        <FilePreview {...files} onDownload={() => onDownload([files])} />\n      )\n    }\n\n    return (\n      <FilesList\n        key={window.encodeURIComponent(files.path)}\n        updateSorting={doFilesUpdateSorting}\n        files={files.content}\n        remotePins={remotePins}\n        upperDir={files.upper}\n        downloadProgress={downloadProgress}\n        onShare={(files) => showModal(SHARE, files)}\n        onRename={(files) => showModal(RENAME, files)}\n        onRemove={(files) => showModal(DELETE, files)}\n        onSetPinning={(files) => showModal(PINNING, files)}\n        onInspect={onInspect}\n        onRemotePinClick={onRemotePinClick}\n        onDownload={onDownload}\n        onAddFiles={onAddFiles}\n        onNavigate={doFilesNavigateTo}\n        onMove={doFilesMove}\n        handleContextMenuClick={handleContextMenu} />\n    )\n  }\n\n  const getTitle = (filesPathInfo, t) => {\n    const parts = []\n\n    if (filesPathInfo) {\n      parts.push(filesPathInfo.realPath)\n    }\n\n    if (filesPathInfo.isMfs) {\n      parts.push(t('app:terms.files'))\n    } else if (filesPathInfo.isPins) {\n      parts.push(t('app:terms.pins'))\n    }\n\n    parts.push('IPFS')\n    return parts.join(' | ')\n  }\n\n  return (\n    <div data-id='FilesPage' className='mw9 center'>\n      <Helmet>\n        <title>{getTitle(filesPathInfo, t)}</title>\n      </Helmet>\n\n      <ContextMenu\n        autofocus\n        ref={contextMenuRef}\n        isOpen={contextMenu.isOpen}\n        translateX={contextMenu.translateX}\n        translateY={contextMenu.translateY}\n        handleClick={handleContextMenu}\n        isMfs={filesPathInfo ? filesPathInfo.isMfs : false}\n        isUnknown={!!(contextMenu.file && contextMenu.file.type === 'unknown')}\n        pinned={contextMenu.file && contextMenu.file.pinned}\n        cid={contextMenu.file && contextMenu.file.cid}\n        onShare={() => showModal(SHARE, [contextMenu.file])}\n        onRemove={() => showModal(DELETE, [contextMenu.file])}\n        onRename={() => showModal(RENAME, [contextMenu.file])}\n        onInspect={() => onInspect(contextMenu.file.cid)}\n        onDownload={() => onDownload([contextMenu.file])}\n        onPinning={() => showModal(PINNING, [contextMenu.file])}\n        isCliTutorModeEnabled={isCliTutorModeEnabled}\n        onCliTutorMode={() => showModal(CLI_TUTOR_MODE, [contextMenu.file])}\n        doSetCliOptions={doSetCliOptions}\n      />\n\n      <Header\n        files={files}\n        onNavigate={doFilesNavigateTo}\n        onAddFiles={onAddFiles}\n        onMove={doFilesMove}\n        onAddByPath={(files) => showModal(ADD_BY_PATH, files)}\n        onNewFolder={(files) => showModal(NEW_FOLDER, files)}\n        onCliTutorMode={() => showModal(CLI_TUTOR_MODE)}\n        handleContextMenu={(...args) => handleContextMenu(...args, true)} />\n\n      <MainView t={t} files={files} remotePins={remotePins} doExploreUserProvidedPath={doExploreUserProvidedPath}/>\n\n      <InfoBoxes isRoot={filesPathInfo.isMfs && filesPathInfo.isRoot}\n        isCompanion={ipfsProvider === 'window.ipfs'}\n        filesExist={!!(files && files.content && files.content.length)} />\n\n      <Modals\n        done={hideModal}\n        root={files ? files.path : null}\n        onMove={doFilesMove}\n        onMakeDir={doFilesMakeDir}\n        onShareLink={doFilesShareLink}\n        onRemove={doFilesDelete}\n        onAddByPath={onAddByPath}\n        onPinningSet={doSetPinning}\n        cliOptions={cliOptions}\n        { ...modals } />\n\n      <FileImportStatus />\n\n      <ReactJoyride\n        run={toursEnabled}\n        steps={filesTour.getSteps({ t, Trans })}\n        styles={filesTour.styles}\n        callback={handleJoyrideCallback}\n        continuous\n        scrollToFirstStep\n        locale={getJoyrideLocales(t)}\n        showProgress />\n    </div>\n  )\n}\n\nexport default connect(\n  'selectIpfsProvider',\n  'selectIpfsConnected',\n  'selectFiles',\n  'selectRemotePins',\n  'selectFilesPathInfo',\n  'doUpdateHash',\n  'doPinsFetch',\n  'doFetchPinningServices',\n  'selectPinningServices',\n  'doFetchRemotePins',\n  'doFilesFetch',\n  'doFilesMove',\n  'doFilesMakeDir',\n  'doFilesShareLink',\n  'doFilesDelete',\n  'doFilesAddPath',\n  'doFilesNavigateTo',\n  'doFilesUpdateSorting',\n  'selectFilesSorting',\n  'selectToursEnabled',\n  'doFilesWrite',\n  'doFilesDownloadLink',\n  'doExploreUserProvidedPath',\n  'doFilesSizeGet',\n  'selectIsCliTutorModeEnabled',\n  'selectIsCliTutorModalOpen',\n  'doOpenCliTutorModal',\n  'doSetCliOptions',\n  'selectCliOptions',\n  'doSetPinning',\n  withTour(withTranslation('files')(FilesPage))\n)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport CancelIcon from '../../icons/GlyphSmallCancel'\n\nexport const ModalActions = ({ justify, className, children, ...props }) => (\n  <div className={`flex justify-${justify} pa2 ${className}`} style={{ backgroundColor: '#f4f6f8' }} {...props}>\n    { children }\n  </div>\n)\n\nModalActions.propTypes = {\n  justify: PropTypes.string,\n  className: PropTypes.string\n}\n\nModalActions.defaultProps = {\n  justify: 'between',\n  className: ''\n}\n\nexport const ModalBody = ({ className, Icon, title, children, ...props }) => (\n  <div className={`ph4 pv3 tc ${className}`} {...props}>\n    { Icon && (\n      <div className='center bg-snow br-100 flex justify-center items-center' style={{ width: '80px', height: '80px' }}>\n        {<Icon className='fill-gray w3'/>}\n      </div>\n    )}\n\n    <p className='charcoal fw6 truncate'>{title}</p>\n\n    {children}\n  </div>\n)\n\nModalBody.propTypes = {\n  Icon: PropTypes.func,\n  title: PropTypes.oneOfType([\n    PropTypes.string,\n    PropTypes.node\n  ])\n}\n\nModalBody.defaultProps = {\n  className: ''\n}\n\nexport const Modal = ({ onCancel, children, className, ...props }) => {\n  return (\n    <div className={`${className} bg-white w-80 shadow-4 sans-serif relative`} style={{ maxWidth: '34em' }} {...props}>\n      { onCancel &&\n        <CancelIcon className='absolute pointer w2 h2 top-0 right-0 fill-gray' onClick={onCancel} />\n      }\n\n      {children}\n    </div>\n  )\n}\n\nModal.propTypes = {\n  onCancel: PropTypes.func\n}\n\nModal.defaultProps = {\n  onCancel: null,\n  className: ''\n}\n\nexport default Modal\n","import React from 'react'\nimport { connect } from 'redux-bundler-react'\nimport { STATUS } from 'react-joyride'\n\nconst withTour = WrappedComponent => {\n  class WithTour extends React.Component {\n    handleJoyrideCallback = (data) => {\n      const { doDisableTours } = this.props\n      const { action, status } = data\n\n      if (action === 'close' || [STATUS.FINISHED].includes(status)) {\n        doDisableTours()\n      }\n    }\n\n    render () {\n      return <WrappedComponent handleJoyrideCallback={this.handleJoyrideCallback} {...this.props} />\n    }\n  }\n\n  return connect('doDisableTours', WithTour)\n}\n\nexport default withTour\n","import React from 'react'\nimport classNames from 'classnames'\n\nconst Shell = ({\n  title = 'Shell',\n  children,\n  className\n}) => {\n  return (\n    <div className={classNames('br1 overflow-hidden', className)}>\n      <div className='f7 mb0 sans-serif ttu tracked charcoal pv1 pl2 bg-black-20'>{ title }</div>\n      <div className='bg-black-70 snow pa2 f7 lh-copy monospace nowrap overflow-x-auto'>\n        {children}\n      </div>\n    </div>\n  )\n}\n\nexport default Shell\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { Modal } from 'react-overlays'\n\nfunction Overlay ({ children, show, onLeave, className, hidden, ...props }) {\n  const handleKeyDown = (e) => {\n    if (e.key !== 'Escape') return\n\n    e.stopPropagation()\n    e.nativeEvent.stopImmediatePropagation()\n\n    onLeave()\n  }\n\n  const renderBackdrop = (props) => (\n    <div className='fixed top-0 left-0 right-0 bottom-0 bg-black o-50' hidden={hidden} {...props} />\n  )\n\n  return (\n    <Modal\n      {...props}\n      show={show}\n      className={`${className} fixed top-0 left-0 right-0 bottom-0 z-max flex items-center justify-around`}\n      renderBackdrop={renderBackdrop}\n      onKeyDown={handleKeyDown}\n      onBackdropClick={onLeave}>\n      {children}\n    </Modal>\n  )\n}\n\nOverlay.propTypes = {\n  show: PropTypes.bool.isRequired,\n  onLeave: PropTypes.func.isRequired\n}\n\nOverlay.defaultProps = {\n  className: ''\n}\n\nexport default Overlay\n","import React from 'react'\n\nconst StrokeCode = props => (\n  <svg viewBox='0 0 100 100' {...props}>\n    <path d='M75 24H25.11c-4.19 0-8 4.11-8 8.61v35.26a8.29 8.29 0 0 0 8 8.13H75a8.11 8.11 0 0 0 7.87-8.13V32.61C82.91 28.55 79.54 24 75 24zm-49.89 3H75c2.74 0 4.87 3 4.87 5.61v1.32H20.09v-1.32c0-2.83 2.49-5.61 5.02-5.61zm-5 39.59V35.93h59.8v30.66zM75 73H25.11a5.28 5.28 0 0 1-4.95-4.41h59.67A5.09 5.09 0 0 1 75 73z' />\n    <circle cx={26.22} cy={30.54} r={1.33} />\n    <path d='M30.49 31.88a1.34 1.34 0 1 0-1.33-1.34 1.34 1.34 0 0 0 1.33 1.34zm4.28 0a1.34 1.34 0 1 0-1.34-1.34 1.34 1.34 0 0 0 1.34 1.34zm4.4 19.55l5-5a1.28 1.28 0 0 0-1.81-1.81l-5.87 5.88a1.3 1.3 0 0 0 0 1.84l5.87 5.88a1.28 1.28 0 0 0 1.81-1.81zm23.58-.92l-5.88-5.88a1.28 1.28 0 1 0-1.8 1.81l5 5-5 5a1.28 1.28 0 1 0 1.8 1.81l5.88-5.88a1.27 1.27 0 0 0 .38-.92 1.31 1.31 0 0 0-.38-.94zM51 42.85A1.38 1.38 0 0 0 49.44 44l-2.37 14.41a1.39 1.39 0 0 0 2.75.45l2.37-14.41a1.39 1.39 0 0 0-1.19-1.6z' />\n  </svg>\n)\n\nexport default StrokeCode\n","import React from 'react'\n\nconst StrokeDownload = props => (\n  <svg viewBox='0 0 100 100' {...props}>\n    <path d='M76.3 61.6H23.7c-3.1 0-5.6 2.5-5.6 5.6v7.5c0 3.1 2.5 5.6 5.6 5.6h52.7c3.1 0 5.6-2.5 5.6-5.6v-7.5c-.1-3.1-2.6-5.6-5.7-5.6zm2.4 13.1c0 1.3-1 2.3-2.3 2.3H23.7c-1.3 0-2.3-1-2.3-2.3v-7.5c0-1.3 1-2.3 2.3-2.3h52.7c1.3 0 2.3 1 2.3 2.3v7.5z' />\n    <path d='M64.9 68.8c-1.2 0-2.2 1-2.2 2.2 0 1.2 1 2.2 2.2 2.2 1.2 0 2.2-1 2.2-2.2 0-1.2-1-2.2-2.2-2.2zm0 3.3c-.6 0-1.1-.5-1.1-1.1s.5-1.1 1.1-1.1 1.1.5 1.1 1.1-.5 1.1-1.1 1.1zm7.7-3.3c-1.2 0-2.2 1-2.2 2.2 0 1.2 1 2.2 2.2 2.2s2.2-1 2.2-2.2c0-1.2-1-2.2-2.2-2.2zm0 3.3c-.6 0-1.1-.5-1.1-1.1s.5-1.1 1.1-1.1 1.1.5 1.1 1.1-.5 1.1-1.1 1.1zM50.8 57.2l11.8-11.8c.8-.8.2-2.1-.9-2h-5.9V20.9c0-.7-.5-1.2-1.2-1.2h-9.5c-.7 0-1.2.5-1.2 1.2v22.5H38c-1.1 0-1.6 1.3-.9 2l11.8 11.8c.7.5 1.5.5 1.9 0zM41 45.8h5.4V22.1h7.1v23.7H59l-9 8.9-9-8.9z' />\n  </svg>\n)\n\nexport default StrokeDownload\n"],"sourceRoot":""}