]> source.dussan.org Git - nextcloud-server.git/commitdiff
Create new file/folder labels 37929/head
authorChristopher Ng <chrng8@gmail.com>
Thu, 27 Apr 2023 02:46:13 +0000 (19:46 -0700)
committernextcloud-command <nextcloud-command@users.noreply.github.com>
Thu, 27 Apr 2023 03:20:12 +0000 (03:20 +0000)
Signed-off-by: Christopher Ng <chrng8@gmail.com>
Signed-off-by: nextcloud-command <nextcloud-command@users.noreply.github.com>
apps/files/js/newfilemenu.js
apps/files/js/templates.js
apps/files/js/templates/newfilemenu.handlebars
apps/files/js/templates/newfilemenu_filename_form.handlebars
apps/files/src/templates.js
dist/files-main.js
dist/files-main.js.map
lib/public/Files/Template/TemplateFileCreator.php

index a101eccef297702b87d1dc33ed806dfc85702012..ce23b4a9c583f886a45b98bc9cae166276adc736 100644 (file)
@@ -51,6 +51,7 @@
                                templateName: t('files', 'New folder'),
                                iconClass: 'icon-folder',
                                fileType: 'folder',
+                               actionLabel: t('files', 'Create new folder'),
                                actionHandler: function(name) {
                                        self.fileList.createDirectory(name);
                                }
 
                        var newName = $target.attr('data-templatename');
                        var fileType = $target.attr('data-filetype');
+                       var actionLabel = $target.attr('data-action-label');
                        var $form = $(OCA.Files.Templates['newfilemenu_filename_form']({
                                fileName: newName,
                                cid: this.cid,
-                               fileType: fileType
+                               fileType: fileType,
+                               actionLabel,
                        }));
 
                        //this.trigger('actionPerformed', action);
                                iconClass: actionSpec.iconClass,
                                fileType: actionSpec.fileType,
                                useInput: actionSpec.useInput,
+                               actionLabel: actionSpec.actionLabel,
                                actionHandler: actionSpec.actionHandler,
                                checkFilename: actionSpec.checkFilename,
                                shouldShow: actionSpec.shouldShow,
index d9d333648cedf8b736dfafe18a24c90adb292cad..315f697728e6cfa3fda86fba56cf19db2a76984e 100644 (file)
@@ -344,10 +344,12 @@ templates['newfilemenu'] = template({"1":function(container,depth0,helpers,parti
     + alias4(((helper = (helper = lookupProperty(helpers,"fileType") || (depth0 != null ? lookupProperty(depth0,"fileType") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"fileType","hash":{},"data":data,"loc":{"start":{"line":7,"column":84},"end":{"line":7,"column":96}}}) : helper)))
     + "\" data-action=\""
     + alias4(((helper = (helper = lookupProperty(helpers,"id") || (depth0 != null ? lookupProperty(depth0,"id") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"id","hash":{},"data":data,"loc":{"start":{"line":7,"column":111},"end":{"line":7,"column":117}}}) : helper)))
+    + "\" data-action-label=\""
+    + alias4(((helper = (helper = lookupProperty(helpers,"actionLabel") || (depth0 != null ? lookupProperty(depth0,"actionLabel") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"actionLabel","hash":{},"data":data,"loc":{"start":{"line":7,"column":138},"end":{"line":7,"column":153}}}) : helper)))
     + "\"><span class=\"icon "
-    + alias4(((helper = (helper = lookupProperty(helpers,"iconClass") || (depth0 != null ? lookupProperty(depth0,"iconClass") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"iconClass","hash":{},"data":data,"loc":{"start":{"line":7,"column":137},"end":{"line":7,"column":150}}}) : helper)))
+    + alias4(((helper = (helper = lookupProperty(helpers,"iconClass") || (depth0 != null ? lookupProperty(depth0,"iconClass") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"iconClass","hash":{},"data":data,"loc":{"start":{"line":7,"column":173},"end":{"line":7,"column":186}}}) : helper)))
     + " svg\"></span><span class=\"displayname\">"
-    + alias4(((helper = (helper = lookupProperty(helpers,"displayName") || (depth0 != null ? lookupProperty(depth0,"displayName") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"displayName","hash":{},"data":data,"loc":{"start":{"line":7,"column":189},"end":{"line":7,"column":204}}}) : helper)))
+    + alias4(((helper = (helper = lookupProperty(helpers,"displayName") || (depth0 != null ? lookupProperty(depth0,"displayName") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"displayName","hash":{},"data":data,"loc":{"start":{"line":7,"column":225},"end":{"line":7,"column":240}}}) : helper)))
     + "</span></a>\n           </li>\n";
 },"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) {
     var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
@@ -379,7 +381,9 @@ templates['newfilemenu_filename_form'] = template({"compiler":[8,">= 4.3.0"],"ma
     + alias4(((helper = (helper = lookupProperty(helpers,"fileType") || (depth0 != null ? lookupProperty(depth0,"fileType") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"fileType","hash":{},"data":data,"loc":{"start":{"line":2,"column":26},"end":{"line":2,"column":38}}}) : helper)))
     + "\" type=\"text\" value=\""
     + alias4(((helper = (helper = lookupProperty(helpers,"fileName") || (depth0 != null ? lookupProperty(depth0,"fileName") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"fileName","hash":{},"data":data,"loc":{"start":{"line":2,"column":59},"end":{"line":2,"column":71}}}) : helper)))
-    + "\" autocomplete=\"off\" autocapitalize=\"off\">\n       <input type=\"submit\" value=\" \" class=\"icon-confirm\" />\n</form>\n";
+    + "\" autocomplete=\"off\" autocapitalize=\"off\">\n       <input type=\"submit\" value=\" \" class=\"icon-confirm\" aria-label=\""
+    + alias4(((helper = (helper = lookupProperty(helpers,"actionLabel") || (depth0 != null ? lookupProperty(depth0,"actionLabel") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"actionLabel","hash":{},"data":data,"loc":{"start":{"line":3,"column":65},"end":{"line":3,"column":80}}}) : helper)))
+    + "\" />\n</form>\n";
 },"useData":true});
 templates['operationprogressbar'] = template({"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) {
     var helper, lookupProperty = container.lookupProperty || function(parent, propertyName) {
index 0d9ad9682caf8a960f65f05b234442fc5d3fdfff..756595212d936d65fe28baa8a90748c0b22d1acc 100644 (file)
@@ -4,7 +4,7 @@
        </li>
        {{#each items}}
                <li>
-                       <a href="#" class="menuitem" data-templatename="{{templateName}}" data-filetype="{{fileType}}" data-action="{{id}}"><span class="icon {{iconClass}} svg"></span><span class="displayname">{{displayName}}</span></a>
+                       <a href="#" class="menuitem" data-templatename="{{templateName}}" data-filetype="{{fileType}}" data-action="{{id}}" data-action-label="{{actionLabel}}"><span class="icon {{iconClass}} svg"></span><span class="displayname">{{displayName}}</span></a>
                </li>
        {{/each}}
 </ul>
index 5fc37ecf7813bc85c4718ebabf64fd2c36c4c41b..2d5af97ee76c0a593312d41047cbeaaa9a5d0247 100644 (file)
@@ -1,4 +1,4 @@
 <form class="filenameform">
        <input id="{{cid}}-input-{{fileType}}" type="text" value="{{fileName}}" autocomplete="off" autocapitalize="off">
-       <input type="submit" value=" " class="icon-confirm" />
+       <input type="submit" value=" " class="icon-confirm" aria-label="{{actionLabel}}" />
 </form>
index 3a4f0133f9413441958e549ca3ef9c3545224132..9be12d8608fdf2a72b7c6ca9a728ad251ab17011 100644 (file)
@@ -80,6 +80,7 @@ window.addEventListener('DOMContentLoaded', function() {
                                        templateName: t('files', 'Templates'),
                                        iconClass: 'icon-template-add',
                                        fileType: 'file',
+                                       actionLabel: t('files', 'Create new templates folder'),
                                        actionHandler(name) {
                                                initTemplatesFolder(name)
                                                menu.removeMenuEntry('template-init')
@@ -109,6 +110,7 @@ templates.forEach((provider, index) => {
                                templateName: provider.label + provider.extension,
                                iconClass: provider.iconClass || 'icon-file',
                                fileType: 'file',
+                               actionLabel: provider.actionLabel,
                                actionHandler(name) {
                                        TemplatePicker.open(name, provider)
                                },
index 6ea0af8ffbd2488ba7e78825bd7c0ae9c1fec933..ec7658f9c2f53f8ae153edd2d428ece4b79e5f40 100644 (file)
@@ -1,3 +1,3 @@
 /*! For license information please see files-main.js.LICENSE.txt */
-(()=>{"use strict";var e,n={9570:(e,n,i)=>{var o=i(17499),s=i(79954),r=i(31352),a=i(79753),l=i(45994);const c=function(){var t,e,n,i;const o=(null===(t=OCA)||void 0===t||null===(e=t.Files)||void 0===e||null===(n=e.App)||void 0===n||null===(i=n.currentFileList)||void 0===i?void 0:i.dirInfo)||{path:"/",name:""};return"".concat(o.path,"/").concat(o.name).replace(/\/\//gi,"/")};var d=i(4820),u=i(20144),p=i(62520),h=i(64024),f=i(93455),A=i.n(f),v=i(70110),m=i.n(v);const g=256,w={name:"TemplatePreview",inheritAttrs:!1,props:{basename:{type:String,required:!0},checked:{type:Boolean,default:!1},fileid:{type:[String,Number],required:!0},filename:{type:String,required:!0},previewUrl:{type:String,default:null},hasPreview:{type:Boolean,default:!0},mime:{type:String,required:!0},ratio:{type:Number,default:null}},data:()=>({failedPreview:!1}),computed:{nameWithoutExt(){return this.basename.indexOf(".")>-1?this.basename.split(".").slice(0,-1).join("."):this.basename},id(){return"template-picker-".concat(this.fileid)},realPreviewUrl(){return this.failedPreview&&this.mimeIcon?this.mimeIcon:this.previewUrl?this.previewUrl:(0,l.ts)()?(0,a.generateUrl)("/core/preview?fileId=".concat(this.fileid,"&x=").concat(g,"&y=").concat(g,"&a=1")):(0,a.generateUrl)("/apps/files_sharing/publicpreview/".concat(document.getElementById("sharingToken")&&document.getElementById("sharingToken").value,"?fileId=").concat(this.fileid,"&file=").concat(function(t){const e=(t.startsWith("/")?t:"/".concat(t)).split("/");let n="";return e.forEach((t=>{""!==t&&(n+="/"+encodeURIComponent(t))})),n}(this.filename),"&x=").concat(g,"&y=").concat(g,"&a=1"))},mimeIcon(){return OC.MimeType.getIconUrl(this.mime)}},methods:{onCheck(){this.$emit("check",this.fileid)},onFailure(){this.failedPreview=!0}}};var b=i(93379),C=i.n(b),y=i(7795),_=i.n(y),x=i(90569),S=i.n(x),k=i(3565),I=i.n(k),N=i(19216),E=i.n(N),F=i(44589),B=i.n(F),P=i(3491),D={};D.styleTagTransform=B(),D.setAttributes=I(),D.insert=S().bind(null,"head"),D.domAPI=_(),D.insertStyleElement=E(),C()(P.Z,D),P.Z&&P.Z.locals&&P.Z.locals;var T=i(51900);const z=(0,T.Z)(w,(function(){var t=this,e=t._self._c;return e("li",{staticClass:"template-picker__item"},[e("input",{staticClass:"radio",attrs:{id:t.id,type:"radio",name:"template-picker"},domProps:{checked:t.checked},on:{change:t.onCheck}}),t._v(" "),e("label",{staticClass:"template-picker__label",attrs:{for:t.id}},[e("div",{staticClass:"template-picker__preview",class:t.failedPreview?"template-picker__preview--failed":""},[e("img",{staticClass:"template-picker__image",attrs:{src:t.realPreviewUrl,alt:"",draggable:"false"},on:{error:t.onFailure}})]),t._v(" "),e("span",{staticClass:"template-picker__title"},[t._v("\n\t\t\t"+t._s(t.nameWithoutExt)+"\n\t\t")])])])}),[],!1,null,"6c072a31",null).exports;var L=i(25108);const U={name:"TemplatePicker",components:{NcEmptyContent:A(),NcModal:m(),TemplatePreview:z},props:{logger:{type:Object,required:!0}},data:()=>({checked:-1,loading:!1,name:null,opened:!1,provider:null}),computed:{nameWithoutExt(){return this.name.indexOf(".")>-1?this.name.split(".").slice(0,-1).join("."):this.name},emptyTemplate(){var e,n;return{basename:t("files","Blank"),fileid:-1,filename:this.t("files","Blank"),hasPreview:!1,mime:(null===(e=this.provider)||void 0===e?void 0:e.mimetypes[0])||(null===(n=this.provider)||void 0===n?void 0:n.mimetypes)}},selectedTemplate(){return this.provider.templates.find((t=>t.fileid===this.checked))},style(){return{"--margin":"8px","--width":"160px","--border":"2px","--fullwidth":"180px","--height":this.provider.ratio?Math.round(160/this.provider.ratio)+"px":null}}},methods:{async open(t,e){this.checked=this.emptyTemplate.fileid,this.name=t,this.provider=e;const n=(await async function(){return(await d.default.get((0,a.generateOcsUrl)("apps/files/api/v1/templates"))).data.ocs.data}()).find((t=>t.app===e.app&&t.label===e.label));if(null===n)throw new Error("Failed to match provider in results");this.provider=n,0!==n.templates.length?this.opened=!0:this.onSubmit()},close(){this.checked=this.emptyTemplate.fileid,this.loading=!1,this.name=null,this.opened=!1,this.provider=null},onCheck(t){this.checked=t},async onSubmit(){var t,e,n;this.loading=!0;const i=c(),o=null===(t=OCA)||void 0===t||null===(e=t.Files)||void 0===e||null===(n=e.App)||void 0===n?void 0:n.currentFileList;var s,r;this.nameWithoutExt===this.name&&(this.logger.debug("Fixed invalid filename",{name:this.name,extension:null===(s=this.provider)||void 0===s?void 0:s.extension}),this.name=this.name+(null===(r=this.provider)||void 0===r?void 0:r.extension));try{var l,u;const t=await async function(t,e,n){return(await d.default.post((0,a.generateOcsUrl)("apps/files/api/v1/templates/create"),{filePath:t,templatePath:e,templateType:n})).data.ocs.data}((0,p.normalize)("".concat(i,"/").concat(this.name)),null===(l=this.selectedTemplate)||void 0===l?void 0:l.filename,null===(u=this.selectedTemplate)||void 0===u?void 0:u.templateType);this.logger.debug("Created new file",t);const e=await(null==o?void 0:o.addAndFetchFileInfo(this.name).then(((t,e)=>e))),n=new OCA.Files.FileInfoModel(e,{filesClient:null==o?void 0:o.filesClient}),s=OCA.Files.fileActions.getDefaultFileAction(t.mime,"file",OC.PERMISSION_ALL);s&&s.action(t.basename,{$file:null==o?void 0:o.findFileEl(this.name),dir:i,fileList:o,fileActions:null==o?void 0:o.fileActions,fileInfoModel:n}),this.close()}catch(t){this.logger.error("Error while creating the new file from template"),L.error(t),(0,h.x2)(this.t("files","Unable to create new file from template"))}finally{this.loading=!1}}}};var V=i(5103),O={};O.styleTagTransform=B(),O.setAttributes=I(),O.insert=S().bind(null,"head"),O.domAPI=_(),O.insertStyleElement=E(),C()(V.Z,O),V.Z&&V.Z.locals&&V.Z.locals;const Z=(0,T.Z)(U,(function(){var t=this,e=t._self._c;return t.opened?e("NcModal",{staticClass:"templates-picker",attrs:{"clear-view-delay":-1,size:"normal"},on:{close:t.close}},[e("form",{staticClass:"templates-picker__form",style:t.style,on:{submit:function(e){return e.preventDefault(),e.stopPropagation(),t.onSubmit.apply(null,arguments)}}},[e("h2",[t._v(t._s(t.t("files","Pick a template for {name}",{name:t.nameWithoutExt})))]),t._v(" "),e("ul",{staticClass:"templates-picker__list"},[e("TemplatePreview",t._b({attrs:{checked:t.checked===t.emptyTemplate.fileid},on:{check:t.onCheck}},"TemplatePreview",t.emptyTemplate,!1)),t._v(" "),t._l(t.provider.templates,(function(n){return e("TemplatePreview",t._b({key:n.fileid,attrs:{checked:t.checked===n.fileid,ratio:t.provider.ratio},on:{check:t.onCheck}},"TemplatePreview",n,!1))}))],2),t._v(" "),e("div",{staticClass:"templates-picker__buttons"},[e("button",{on:{click:t.close}},[t._v("\n\t\t\t\t"+t._s(t.t("files","Cancel"))+"\n\t\t\t")]),t._v(" "),e("input",{staticClass:"primary",attrs:{type:"submit","aria-label":t.t("files","Create a new file with the selected template")},domProps:{value:t.t("files","Create")}})])]),t._v(" "),t.loading?e("NcEmptyContent",{staticClass:"templates-picker__loading",attrs:{icon:"icon-loading"}},[t._v("\n\t\t"+t._s(t.t("files","Creating file"))+"\n\t")]):t._e()],1):t._e()}),[],!1,null,"715b4161",null).exports,q=(0,o.IY)().setApp("files").detectUser().build();u.default.mixin({methods:{t:r.Iu,n:r.uN}});const R=document.createElement("div");R.id="template-picker",document.body.appendChild(R);let j=(0,s.j)("files","templates",[]),M=(0,s.j)("files","templates_path",!1);q.debug("Templates providers",j),q.debug("Templates folder",{templatesPath:M});const $=new(u.default.extend(Z))({name:"TemplatePicker",propsData:{logger:q}});$.$mount("#template-picker"),window.addEventListener("DOMContentLoaded",(function(){if(!M){q.debug("Templates folder not initialized");const t={attach(t){t.addMenuEntry({id:"template-init",displayName:(0,r.Iu)("files","Set up templates folder"),templateName:(0,r.Iu)("files","Templates"),iconClass:"icon-template-add",fileType:"file",actionHandler(e){W(e),t.removeMenuEntry("template-init")}})}};OC.Plugins.register("OCA.Files.NewFileMenu",t)}})),j.forEach(((t,e)=>{const n={attach(n){const i=n.fileList;"files"!==i.id&&"files.public"!==i.id||n.addMenuEntry({id:"template-new-".concat(t.app,"-").concat(e),displayName:t.label,templateName:t.label+t.extension,iconClass:t.iconClass||"icon-file",fileType:"file",actionHandler(e){$.open(e,t)}})}};OC.Plugins.register("OCA.Files.NewFileMenu",n)}));const W=async function(t){const e=(c()+"/".concat(t)).replace("//","/");try{q.debug("Initializing the templates directory",{templatePath:e});const t=await d.default.post((0,a.generateOcsUrl)("apps/files/api/v1/templates/path"),{templatePath:e,copySystemTemplates:!0});OCA.Files.App.currentFileList.changeDirectory(e,!0,!0),j=t.data.ocs.data.templates,M=t.data.ocs.data.template_path}catch(t){q.error("Unable to initialize the templates directory"),(0,h.x2)((0,r.Iu)("files","Unable to initialize the templates directory"))}};var G=i(78595);!function(){const t={attach(t){(0,G.Ld)("nextcloud:unified-search.search",(e=>{let{query:n}=e;t.setFilter(n)})),(0,G.Ld)("nextcloud:unified-search.reset",(()=>{this.query=null,t.setFilter("")}))}};window.OC.Plugins.register("OCA.Files.FileList",t)}();var H=i(91770),K=i(78510);const Q=(0,o.IY)().setApp("files").detectUser().build();class Y{constructor(t){var e,n,i;e=this,i=void 0,(n=function(t){var e=function(t,e){if("object"!=typeof t||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,"string");if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==typeof e?e:String(e)}(n="_action"))in e?Object.defineProperty(e,n,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[n]=i,this.validateAction(t),this._action=t}get id(){return this._action.id}get displayName(){return this._action.displayName}get iconSvgInline(){return this._action.iconSvgInline}get enabled(){return this._action.enabled}get exec(){return this._action.exec}get execBatch(){return this._action.execBatch}get order(){return this._action.order}get default(){return this._action.default}get inline(){return this._action.inline}get renderInline(){return this._action.renderInline}validateAction(t){if(!t.id||"string"!=typeof t.id)throw new Error("Invalid id");if(!t.displayName||"function"!=typeof t.displayName)throw new Error("Invalid displayName function");if(!t.iconSvgInline||"function"!=typeof t.iconSvgInline)throw new Error("Invalid iconSvgInline function");if(!t.exec||"function"!=typeof t.exec)throw new Error("Invalid exec function");if("enabled"in t&&"function"!=typeof t.enabled)throw new Error("Invalid enabled function");if("execBatch"in t&&"function"!=typeof t.execBatch)throw new Error("Invalid execBatch function");if("order"in t&&"number"!=typeof t.order)throw new Error("Invalid order");if("default"in t&&"boolean"!=typeof t.default)throw new Error("Invalid default");if("inline"in t&&"function"!=typeof t.inline)throw new Error("Invalid inline function");if("renderInline"in t&&"function"!=typeof t.renderInline)throw new Error("Invalid renderInline function")}}const J=function(t){void 0===window._nc_fileactions&&(window._nc_fileactions=[],Q.debug("FileActions initialized")),window._nc_fileactions.find((e=>e.id===t.id))?Q.error("FileAction ".concat(t.id," already registered"),{action:t}):window._nc_fileactions.push(t)},X=function(){return window._nc_fileactions||[]};J(new Y({id:"delete",displayName:(t,e)=>"trashbin"===e.id?(0,r.Iu)("files_trashbin","Delete permanently"):(0,r.Iu)("files","Delete"),iconSvgInline:()=>K,enabled:t=>t.length>0&&t.map((t=>t.permissions)).every((t=>0!=(t&H.y3.DELETE))),async exec(t){try{return await d.default.delete(t.source),(0,G.j8)("files:node:deleted",t),!0}catch(e){return Q.error("Error while deleting a file",{error:e,source:t.source,node:t}),!1}},async execBatch(t,e,n){return Promise.all(t.map((t=>this.exec(t,e,n))))},order:100}));var tt=i(48250);const et="details";J(new Y({id:et,displayName:()=>(0,r.Iu)("files","Details"),iconSvgInline:()=>tt,enabled:t=>{var e,n,i;return!(null===(e=window)||void 0===e||null===(n=e.OCA)||void 0===n||null===(i=n.Files)||void 0===i||!i.Sidebar)&&t.some((t=>{var e;return null===(e=t.root)||void 0===e?void 0:e.startsWith("/files/")}))},async exec(t){try{var e,n,i,o,s;return null===(e=window)||void 0===e||null===(n=e.OCA)||void 0===n||null===(i=n.Files)||void 0===i||null===(o=i.Sidebar)||void 0===o||null===(s=o.open)||void 0===s||s.call(o,t.path),null}catch(t){return Q.error("Error while opening sidebar",{error:t}),!1}},default:!0,order:-50}));var nt=i(59305),it=i(23664),ot=i(69680),st=i.n(ot),rt=i(10861),at=i.n(rt),lt=i(64192),ct=i.n(lt),dt=i(33581);const ut=function(){const t=(0,nt.Q_)("files",{state:()=>({files:{},roots:{}}),getters:{getNode:t=>e=>t.files[e],getNodes:t=>e=>e.map((e=>t.files[e])).filter(Boolean),getRoot:t=>e=>t.roots[e]},actions:{updateNodes(t){const e=t.reduce(((t,e)=>e.fileid?(t[e.fileid]=e,t):(Q.warn("Trying to update/set a node without fileid",e),t)),{});u.default.set(this,"files",{...this.files,...e})},deleteNodes(t){t.forEach((t=>{t.fileid&&u.default.delete(this.files,t.fileid)}))},setRoot(t){let{service:e,root:n}=t;u.default.set(this.roots,e,n)},onDeletedNode(t){this.deleteNodes([t])}}})(...arguments);return t._initialized||((0,G.Ld)("files:node:deleted",t.onDeletedNode),t._initialized=!0),t},pt=function(){const t=(0,nt.Q_)("paths",{state:()=>({paths:{}}),getters:{getPath:t=>(e,n)=>{if(t.paths[e])return t.paths[e][n]}},actions:{addPath(t){this.paths[t.service]||u.default.set(this.paths,t.service,{}),u.default.set(this.paths[t.service],t.path,t.fileid)}}})(...arguments);return t._initialized||(t._initialized=!0),t},ht=(0,nt.Q_)("selection",{state:()=>({selected:[],lastSelection:[],lastSelectedIndex:null}),actions:{set(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];u.default.set(this,"selected",t)},setLastIndex(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;u.default.set(this,"lastSelection",t?this.selected:[]),u.default.set(this,"lastSelectedIndex",t)},reset(){u.default.set(this,"selected",[]),u.default.set(this,"lastSelection",[]),u.default.set(this,"lastSelectedIndex",null)}}}),ft=(0,s.j)("files","viewConfigs",{}),At=function(){const t=(0,nt.Q_)("viewconfig",{state:()=>({viewConfig:ft}),getters:{getConfig:t=>e=>t.viewConfig[e]||{}},actions:{onUpdate(t,e,n){this.viewConfig[t]||u.default.set(this.viewConfig,t,{}),u.default.set(this.viewConfig[t],e,n)},async update(t,e,n){d.default.put((0,a.generateUrl)("/apps/files/api/v1/views/".concat(t,"/").concat(e)),{value:n}),(0,G.j8)("files:viewconfig:updated",{view:t,key:e,value:n})},setSortingBy(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"basename",e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"files";this.update(e,"sorting_mode",t),this.update(e,"sorting_direction","asc")},toggleSortingDirection(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"files";const e="asc"===(this.getConfig(t)||{sorting_direction:"asc"}).sorting_direction?"desc":"asc";this.update(t,"sorting_direction",e)}}}),e=t(...arguments);return e._initialized||((0,G.Ld)("files:viewconfig:updated",(function(t){let{view:n,key:i,value:o}=t;e.onUpdate(n,i,o)})),e._initialized=!0),e};var vt=i(15764),mt=i(64412),gt=i.n(mt),wt=i(44706),bt=i.n(wt);const Ct=u.default.extend({name:"BreadCrumbs",components:{Home:vt.Z,NcBreadcrumbs:bt(),NcBreadcrumb:gt()},props:{path:{type:String,default:"/"}},setup:()=>({filesStore:ut(),pathsStore:pt()}),computed:{currentView(){return this.$navigation.active},dirs(){var t;return["/",...this.path.split("/").filter(Boolean).map((t="/",e=>t+="".concat(e,"/"))).map((t=>t.replace(/^(.+)\/$/,"$1")))]},sections(){return this.dirs.map((t=>{const e={...this.$route,query:{dir:t}};return{dir:t,exact:!0,name:this.getDirDisplayName(t),to:e}}))}},methods:{getNodeFromId(t){return this.filesStore.getNode(t)},getFileIdFromPath(t){var e;return this.pathsStore.getPath(null===(e=this.currentView)||void 0===e?void 0:e.id,t)},getDirDisplayName(e){var n;if("/"===e)return t("files","Home");const i=this.getFileIdFromPath(e),o=this.getNodeFromId(i);return(null==o||null===(n=o.attributes)||void 0===n?void 0:n.displayName)||(0,p.basename)(e)},onClick(t){var e;(null==t||null===(e=t.query)||void 0===e?void 0:e.dir)===this.$route.query.dir&&this.$emit("reload")},ariaLabel(e){var n,i;return(null==e||null===(n=e.to)||void 0===n||null===(i=n.query)||void 0===i?void 0:i.dir)===this.$route.query.dir?t("files","Reload current directory"):t("files",'Go to the "{dir}" directory',e)}}});var yt=i(39959),_t={};_t.styleTagTransform=B(),_t.setAttributes=I(),_t.insert=S().bind(null,"head"),_t.domAPI=_(),_t.insertStyleElement=E(),C()(yt.Z,_t),yt.Z&&yt.Z.locals&&yt.Z.locals;const xt=(0,T.Z)(Ct,(function(){var t=this,e=t._self._c;return t._self._setupProxy,e("NcBreadcrumbs",{attrs:{"data-cy-files-content-breadcrumbs":""}},t._l(t.sections,(function(n,i){return e("NcBreadcrumb",t._b({key:n.dir,attrs:{"aria-label":t.ariaLabel(n),title:t.ariaLabel(n)},nativeOn:{click:function(e){return t.onClick(n.to)}},scopedSlots:t._u([0===i?{key:"icon",fn:function(){return[e("Home",{attrs:{size:20}})]},proxy:!0}:null],null,!0)},"NcBreadcrumb",n,!1))})),1)}),[],!1,null,"68b3b20b",null).exports;var St=i(35212),kt=i(20296),It=i(74139),Nt=i(3443),Et=i.n(Nt),Ft=i(79855),Bt=i(34829),Pt=i(45400),Dt=i.n(Pt),Tt=i(12945),zt=i.n(Tt),Lt=i(20571),Ut=i.n(Lt),Vt=i(4777);const Ot=(0,nt.Q_)("actionsmenu",{state:()=>({opened:null})}),Zt=(0,s.j)("files","config",{show_hidden:!1,crop_image_previews:!0}),qt=function(){const t=(0,nt.Q_)("userconfig",{state:()=>({userConfig:Zt}),actions:{onUpdate(t,e){u.default.set(this.userConfig,t,e)},async update(t,e){await d.default.put((0,a.generateUrl)("/apps/files/api/v1/config/"+t),{value:e}),(0,G.j8)("files:config:updated",{key:t,value:e})}}})(...arguments);return t._initialized||((0,G.Ld)("files:config:updated",(function(e){let{key:n,value:i}=e;t.onUpdate(n,i)})),t._initialized=!0),t},Rt={name:"CustomElementRender",props:{source:{type:Object,required:!0},currentView:{type:Object,required:!0},render:{type:Function,required:!0}},computed:{element(){return this.render(this.source,this.currentView)}},watch:{element(){this.$el.replaceWith(this.element),this.$el=this.element}},mounted(){this.$el.replaceWith(this.element),this.$el=this.element}},jt=(0,T.Z)(Rt,(function(){return(0,this._self._c)("span")}),[],!1,null,null,null).exports;var Mt=i(27856);const $t={name:"CustomSvgIconRender",props:{svg:{type:String,required:!0}},watch:{svg(){this.$el.innerHTML=(0,Mt.sanitize)(this.svg)}},mounted(){this.$el.innerHTML=(0,Mt.sanitize)(this.svg)}};var Wt=i(61959),Gt={};Gt.styleTagTransform=B(),Gt.setAttributes=I(),Gt.insert=S().bind(null,"head"),Gt.domAPI=_(),Gt.insertStyleElement=E(),C()(Wt.Z,Gt),Wt.Z&&Wt.Z.locals&&Wt.Z.locals;const Ht=(0,T.Z)($t,(function(){return(0,this._self._c)("span",{staticClass:"custom-svg-icon"})}),[],!1,null,"93e9b2f4",null).exports,Kt=X(),Qt=u.default.extend({name:"FileEntry",components:{CustomElementRender:jt,CustomSvgIconRender:Ht,FileIcon:Ft.Z,FolderIcon:Bt.default,Fragment:It.H,NcActionButton:Dt(),NcActions:zt(),NcCheckboxRadioSwitch:Ut(),NcLoadingIcon:ct(),StarIcon:Vt.default},props:{active:{type:Boolean,default:!1},isSizeAvailable:{type:Boolean,default:!1},source:{type:Object,required:!0},index:{type:Number,required:!0},nodes:{type:Array,required:!0},filesListWidth:{type:Number,default:0}},setup(){const t=Ot(),e=ut(),n=function(){const t=(0,nt.Q_)("keyboard",{state:()=>({altKey:!1,ctrlKey:!1,metaKey:!1,shiftKey:!1}),actions:{onEvent(t){t||(t=window.event),u.default.set(this,"altKey",!!t.altKey),u.default.set(this,"ctrlKey",!!t.ctrlKey),u.default.set(this,"metaKey",!!t.metaKey),u.default.set(this,"shiftKey",!!t.shiftKey)}}})(...arguments);return t._initialized||(window.addEventListener("keydown",t.onEvent),window.addEventListener("keyup",t.onEvent),window.addEventListener("mousemove",t.onEvent),t._initialized=!0),t}();return{actionsMenuStore:t,filesStore:e,keyboardStore:n,selectionStore:ht(),userConfigStore:qt()}},data:()=>({backgroundFailed:!1,backgroundImage:"",boundariesElement:document.querySelector(".app-content > .files-list"),loading:""}),computed:{userConfig(){return this.userConfigStore.userConfig},currentView(){return this.$navigation.active},columns(){var t;return this.filesListWidth<512?[]:(null===(t=this.currentView)||void 0===t?void 0:t.columns)||[]},dir(){var t,e;return((null===(t=this.$route)||void 0===t||null===(e=t.query)||void 0===e?void 0:e.dir)||"/").replace(/^(.+)\/$/,"$1")},fileid(){var t,e,n;return null===(t=this.source)||void 0===t||null===(e=t.fileid)||void 0===e||null===(n=e.toString)||void 0===n?void 0:n.call(e)},displayName(){return this.source.attributes.displayName||this.source.basename},size(){const t=parseInt(this.source.size,10)||0;return"number"!=typeof t||t<0?this.t("files","Pending"):(0,H.sS)(t,!0)},sizeOpacity(){const t=parseInt(this.source.size,10)||0;return!t||t<0?1:.7+(1-.7)*Math.pow(this.source.size/10485760,2)},linkTo(){if("folder"===this.source.type){const t={...this.$route,query:{dir:(0,p.join)(this.dir,this.source.basename)}};return{is:"router-link",title:this.t("files","Open folder {name}",{name:this.displayName}),to:t}}return this.enabledDefaultActions.length>0?{title:this.enabledDefaultActions[0].displayName([this.source],this.currentView),role:"button"}:{href:this.source.source,title:this.t("files","Download file {name}",{name:this.displayName})}},selectedFiles(){return this.selectionStore.selected},isSelected(){var t,e,n;return this.selectedFiles.includes(null===(t=this.source)||void 0===t||null===(e=t.fileid)||void 0===e||null===(n=e.toString)||void 0===n?void 0:n.call(e))},cropPreviews(){return this.userConfig.crop_image_previews},previewUrl(){try{const t=new URL(window.location.origin+this.source.attributes.previewUrl);return t.searchParams.set("x","32"),t.searchParams.set("y","32"),t.searchParams.set("a",!0===this.cropPreviews?"0":"1"),t.href}catch(t){return null}},mimeIconUrl(){var t,e,n;const i=this.source.mime||"application/octet-stream",o=null===(t=window.OC)||void 0===t||null===(e=t.MimeType)||void 0===e||null===(n=e.getIconUrl)||void 0===n?void 0:n.call(e,i);return o?"url(".concat(o,")"):""},enabledActions(){return Kt.filter((t=>!t.enabled||t.enabled([this.source],this.currentView))).sort(((t,e)=>(t.order||0)-(e.order||0)))},enabledInlineActions(){return this.filesListWidth<768?[]:this.enabledActions.filter((t=>{var e;return null==t||null===(e=t.inline)||void 0===e?void 0:e.call(t,this.source,this.currentView)}))},enabledMenuActions(){if(this.filesListWidth<768)return this.enabledDefaultActions.length>0?this.enabledActions.slice(1):this.enabledActions;const t=[...this.enabledInlineActions,...this.enabledActions.filter((t=>!t.inline))];return this.enabledDefaultActions.length>0?t.slice(1):t},enabledDefaultActions(){return[...this.enabledActions.filter((t=>t.default))]},openedMenu:{get(){return this.actionsMenuStore.opened===this.uniqueId},set(t){this.actionsMenuStore.opened=t?this.uniqueId:null}},uniqueId(){return this.source.source.split("").reduce((function(t,e){return(t=(t<<5)-t+e.charCodeAt(0))&t}),0)},isFavorite(){return 1===this.source.attributes.favorite}},watch:{active(t,e){if(!1===t&&!0===e)return this.resetState(),void(this.$el.parentNode.style.display="none");this.$el.parentNode.style.display=""},previewUrl(){this.clearImg(),this.debounceIfNotCached()}},mounted(){var t,e;this.debounceGetPreview=(0,kt.debounce)((function(){this.fetchAndApplyPreview()}),150,!1),this.debounceIfNotCached(),null===(t=this.$el.parentNode)||void 0===t||null===(e=t.addEventListener)||void 0===e||e.call(t,"contextmenu",this.onRightClick)},beforeDestroy(){this.resetState()},methods:{async debounceIfNotCached(){var t;if(this.previewUrl)return await(t=this.previewUrl,caches.open("previews").then((function(e){return e.match(t).then((function(t){return!!t}))})))?(this.backgroundImage="url(".concat(this.previewUrl,")"),void(this.backgroundFailed=!1)):void this.debounceGetPreview()},fetchAndApplyPreview(){this.previewUrl&&(this.previewPromise&&this.clearImg(),this.previewPromise=new(Et())(((t,e,n)=>{const i=new Image;i.fetchpriority=this.active?"high":"auto",i.onload=()=>{this.backgroundImage="url(".concat(this.previewUrl,")"),this.backgroundFailed=!1,t(i)},i.onerror=()=>{this.backgroundFailed=!0,e(i)},i.src=this.previewUrl,n((()=>{i.onerror=null,i.onload=null,i.src=""}))})))},resetState(){this.loading="",this.clearImg(),this.openedMenu=!1},clearImg(){this.backgroundImage="",this.backgroundFailed=!1,this.previewPromise&&(this.previewPromise.cancel(),this.previewPromise=null)},async onActionClick(t){const e=t.displayName([this.source],this.currentView);try{this.loading=t.id,u.default.set(this.source,"_loading",!0);const n=await t.exec(this.source,this.currentView,this.dir);if(null===n)return;if(n)return void(0,h.s$)(this.t("files",'"{displayName}" action executed successfully',{displayName:e}));(0,h.x2)(this.t("files",'"{displayName}" action failed',{displayName:e}))}catch(n){Q.error("Error while executing action",{action:t,e:n}),(0,h.x2)(this.t("files",'"{displayName}" action failed',{displayName:e}))}finally{this.loading="",u.default.set(this.source,"_loading",!1)}},execDefaultAction(t){"folder"!==this.source.type&&this.enabledDefaultActions.length>0&&(t.preventDefault(),t.stopPropagation(),this.enabledDefaultActions[0].exec(this.source,this.currentView,this.dir))},openDetailsIfAvailable(t){const e=this.enabledDefaultActions.find((t=>t.id===et));e&&(t.preventDefault(),t.stopPropagation(),e.exec(this.source,this.currentView))},onSelectionChange(t){var e;const n=this.index,i=this.selectionStore.lastSelectedIndex;if(null!==(e=this.keyboardStore)&&void 0!==e&&e.shiftKey&&null!==i){const t=this.selectedFiles.includes(this.fileid),e=Math.min(n,i),o=Math.max(i,n),s=this.selectionStore.lastSelection,r=this.nodes.map((t=>{var e,n;return null===(e=t.fileid)||void 0===e||null===(n=e.toString)||void 0===n?void 0:n.call(e)})).slice(e,o+1),a=[...s,...r].filter((e=>!t||e!==this.fileid));return Q.debug("Shift key pressed, selecting all files in between",{start:e,end:o,filesToSelect:r,isAlreadySelected:t}),void this.selectionStore.set(a)}Q.debug("Updating selection",{selection:t}),this.selectionStore.set(t),this.selectionStore.setLastIndex(n)},onRightClick(t){if(this.openedMenu)return;const e=this.selectedFiles.length>1;this.actionsMenuStore.opened=this.isSelected&&e?"global":this.uniqueId,t.preventDefault(),t.stopPropagation()},t:r.Iu,formatFileSize:H.sS}});var Yt=i(13352),Jt={};Jt.styleTagTransform=B(),Jt.setAttributes=I(),Jt.insert=S().bind(null,"head"),Jt.domAPI=_(),Jt.insertStyleElement=E(),C()(Yt.Z,Jt),Yt.Z&&Yt.Z.locals&&Yt.Z.locals;var Xt=i(37020),te={};te.styleTagTransform=B(),te.setAttributes=I(),te.insert=S().bind(null,"head"),te.domAPI=_(),te.insertStyleElement=E(),C()(Xt.Z,te),Xt.Z&&Xt.Z.locals&&Xt.Z.locals;const ee=(0,T.Z)(Qt,(function(){var t=this,e=t._self._c;return t._self._setupProxy,e("Fragment",[e("td",{staticClass:"files-list__row-checkbox"},[t.active?e("NcCheckboxRadioSwitch",{attrs:{"aria-label":t.t("files","Select the row for {displayName}",{displayName:t.displayName}),checked:t.selectedFiles,value:t.fileid,name:"selectedFiles"},on:{"update:checked":t.onSelectionChange}}):t._e()],1),t._v(" "),e("td",{staticClass:"files-list__row-name"},[e("a",t._b({ref:"name",on:{click:t.execDefaultAction}},"a",t.linkTo,!1),[e("span",{staticClass:"files-list__row-icon"},["folder"===t.source.type?e("FolderIcon"):t.previewUrl&&!t.backgroundFailed?e("span",{ref:"previewImg",staticClass:"files-list__row-icon-preview",style:{backgroundImage:t.backgroundImage}}):t.mimeIconUrl?e("span",{staticClass:"files-list__row-icon-preview files-list__row-icon-preview--mime",style:{backgroundImage:t.mimeIconUrl}}):e("FileIcon"),t._v(" "),t.isFavorite?e("span",{staticClass:"files-list__row-icon-favorite",attrs:{"aria-label":t.t("files","Favorite")}},[e("StarIcon",{attrs:{"aria-hidden":"true",size:20}})],1):t._e()],1),t._v(" "),e("span",{staticClass:"files-list__row-name-text"},[t._v(t._s(t.displayName))])])]),t._v(" "),e("td",{staticClass:"files-list__row-actions",class:"files-list__row-actions-".concat(t.uniqueId)},[t.active?e("NcActions",{ref:"actionsMenu",attrs:{"boundaries-element":t.boundariesElement,container:t.boundariesElement,disabled:t.source._loading,"force-title":!0,"force-menu":!0,inline:t.enabledInlineActions.length,open:t.openedMenu},on:{"update:open":function(e){t.openedMenu=e}}},t._l(t.enabledMenuActions,(function(n){return e("NcActionButton",{key:n.id,class:"files-list__row-action-"+n.id,on:{click:function(e){return t.onActionClick(n)}},scopedSlots:t._u([{key:"icon",fn:function(){return[t.loading===n.id?e("NcLoadingIcon",{attrs:{size:18}}):e("CustomSvgIconRender",{attrs:{svg:n.iconSvgInline([t.source],t.currentView)}})]},proxy:!0}],null,!0)},[t._v("\n\t\t\t\t"+t._s(n.displayName([t.source],t.currentView))+"\n\t\t\t")])})),1):t._e()],1),t._v(" "),t.isSizeAvailable?e("td",{staticClass:"files-list__row-size",style:{opacity:t.sizeOpacity},on:{click:t.openDetailsIfAvailable}},[e("span",[t._v(t._s(t.size))])]):t._e(),t._v(" "),t._l(t.columns,(function(n){var i;return e("td",{key:n.id,staticClass:"files-list__row-column-custom",class:"files-list__row-".concat(null===(i=t.currentView)||void 0===i?void 0:i.id,"-").concat(n.id),on:{click:t.openDetailsIfAvailable}},[t.active?e("CustomElementRender",{attrs:{"current-view":t.currentView,render:n.render,source:t.source}}):t._e()],1)}))],2)}),[],!1,null,"0600090e",null).exports,ne=u.default.extend({name:"FilesListFooter",components:{},props:{isSizeAvailable:{type:Boolean,default:!1},nodes:{type:Array,required:!0},summary:{type:String,default:""},filesListWidth:{type:Number,default:0}},setup(){const t=pt();return{filesStore:ut(),pathsStore:t}},computed:{currentView(){return this.$navigation.active},dir(){var t,e;return((null===(t=this.$route)||void 0===t||null===(e=t.query)||void 0===e?void 0:e.dir)||"/").replace(/^(.+)\/$/,"$1")},currentFolder(){var t;if(null===(t=this.currentView)||void 0===t||!t.id)return;if("/"===this.dir)return this.filesStore.getRoot(this.currentView.id);const e=this.pathsStore.getPath(this.currentView.id,this.dir);return this.filesStore.getNode(e)},columns(){var t;return this.filesListWidth<512?[]:(null===(t=this.currentView)||void 0===t?void 0:t.columns)||[]},totalSize(){var t;return null!==(t=this.currentFolder)&&void 0!==t&&t.size?(0,H.sS)(this.currentFolder.size,!0):(0,H.sS)(this.nodes.reduce(((t,e)=>t+e.size||0),0),!0)}},methods:{classForColumn(t){return{"files-list__row-column-custom":!0,["files-list__row-".concat(this.currentView.id,"-").concat(t.id)]:!0}},t:r.Iu}});var ie=i(97105),oe={};oe.styleTagTransform=B(),oe.setAttributes=I(),oe.insert=S().bind(null,"head"),oe.domAPI=_(),oe.insertStyleElement=E(),C()(ie.Z,oe),ie.Z&&ie.Z.locals&&ie.Z.locals;const se=(0,T.Z)(ne,(function(){var t=this,e=t._self._c;return t._self._setupProxy,e("tr",[e("th",{staticClass:"files-list__row-checkbox"},[e("span",{staticClass:"hidden-visually"},[t._v(t._s(t.t("files","Total rows summary")))])]),t._v(" "),e("td",{staticClass:"files-list__row-name"},[e("span",{staticClass:"files-list__row-icon"}),t._v(" "),e("span",[t._v(t._s(t.summary))])]),t._v(" "),e("td",{staticClass:"files-list__row-actions"}),t._v(" "),t.isSizeAvailable?e("td",{staticClass:"files-list__column files-list__row-size"},[e("span",[t._v(t._s(t.totalSize))])]):t._e(),t._v(" "),t._l(t.columns,(function(n){var i;return e("th",{key:n.id,class:t.classForColumn(n)},[e("span",[t._v(t._s(null===(i=n.summary)||void 0===i?void 0:i.call(n,t.nodes,t.currentView)))])])}))],2)}),[],!1,null,"e6a083be",null).exports,re=u.default.extend({data:()=>({filesListWidth:null}),created(){const t=document.querySelector("#app-content-vue");this.$resizeObserver=new ResizeObserver((e=>{e.length>0&&e[0].target===t&&(this.filesListWidth=e[0].contentRect.width)})),this.$resizeObserver.observe(t)},beforeDestroy(){this.$resizeObserver.disconnect()}}),ae=X(),le=u.default.extend({name:"FilesListHeaderActions",components:{CustomSvgIconRender:Ht,NcActions:zt(),NcActionButton:Dt(),NcLoadingIcon:ct()},mixins:[re],props:{currentView:{type:Object,required:!0},selectedNodes:{type:Array,default:()=>[]}},setup:()=>({actionsMenuStore:Ot(),filesStore:ut(),selectionStore:ht()}),data:()=>({loading:null}),computed:{dir(){var t,e;return((null===(t=this.$route)||void 0===t||null===(e=t.query)||void 0===e?void 0:e.dir)||"/").replace(/^(.+)\/$/,"$1")},enabledActions(){return ae.filter((t=>t.execBatch)).filter((t=>!t.enabled||t.enabled(this.nodes,this.currentView))).sort(((t,e)=>(t.order||0)-(e.order||0)))},nodes(){return this.selectedNodes.map((t=>this.getNode(t))).filter((t=>t))},areSomeNodesLoading(){return this.nodes.some((t=>t._loading))},openedMenu:{get(){return"global"===this.actionsMenuStore.opened},set(t){this.actionsMenuStore.opened=t?"global":null}},inlineActions(){return this.filesListWidth<512?0:this.filesListWidth<768?1:this.filesListWidth<1024?2:3}},methods:{getNode(t){return this.filesStore.getNode(t)},async onActionClick(t){const e=t.displayName(this.nodes,this.currentView),n=this.selectedNodes;try{this.loading=t.id,this.nodes.forEach((t=>{u.default.set(t,"_loading",!0)}));const i=await t.execBatch(this.nodes,this.currentView,this.dir);if(!i.some((t=>null!==t)))return void this.selectionStore.reset();if(i.some((t=>!1===t))){const t=n.filter(((t,e)=>!1===i[e]));return this.selectionStore.set(t),void(0,h.x2)(this.t("files",'"{displayName}" failed on some elements ',{displayName:e}))}(0,h.s$)(this.t("files",'"{displayName}" batch action executed successfully',{displayName:e})),this.selectionStore.reset()}catch(n){Q.error("Error while executing action",{action:t,e:n}),(0,h.x2)(this.t("files",'"{displayName}" action failed',{displayName:e}))}finally{this.loading=null,this.nodes.forEach((t=>{u.default.set(t,"_loading",!1)}))}},t:r.Iu}});var ce=i(97877),de={};de.styleTagTransform=B(),de.setAttributes=I(),de.insert=S().bind(null,"head"),de.domAPI=_(),de.insertStyleElement=E(),C()(ce.Z,de),ce.Z&&ce.Z.locals&&ce.Z.locals;const ue=(0,T.Z)(le,(function(){var t=this,e=t._self._c;return t._self._setupProxy,e("th",{staticClass:"files-list__column files-list__row-actions-batch",attrs:{colspan:"2"}},[e("NcActions",{ref:"actionsMenu",attrs:{disabled:!!t.loading||t.areSomeNodesLoading,"force-title":!0,inline:t.inlineActions,"menu-title":t.inlineActions<=1?t.t("files","Actions"):null,open:t.openedMenu},on:{"update:open":function(e){t.openedMenu=e}}},t._l(t.enabledActions,(function(n){return e("NcActionButton",{key:n.id,class:"files-list__row-actions-batch-"+n.id,on:{click:function(e){return t.onActionClick(n)}},scopedSlots:t._u([{key:"icon",fn:function(){return[t.loading===n.id?e("NcLoadingIcon",{attrs:{size:18}}):e("CustomSvgIconRender",{attrs:{svg:n.iconSvgInline(t.nodes,t.currentView)}})]},proxy:!0}],null,!0)},[t._v("\n\t\t\t"+t._s(n.displayName(t.nodes,t.currentView))+"\n\t\t")])})),1)],1)}),[],!1,null,"03e57b1e",null).exports;var pe=i(20404),he=i(23873);const fe=u.default.extend({computed:{...(0,nt.rn)(At,["getConfig","setSortingBy","toggleSortingDirection"]),currentView(){return this.$navigation.active},sortingMode(){var t,e;return(null===(t=this.getConfig(this.currentView.id))||void 0===t?void 0:t.sorting_mode)||(null===(e=this.currentView)||void 0===e?void 0:e.defaultSortKey)||"basename"},isAscSorting(){var t;return"asc"===(null===(t=this.getConfig(this.currentView.id))||void 0===t?void 0:t.sorting_direction)}},methods:{toggleSortBy(t){this.sortingMode!==t?this.setSortingBy(t,this.currentView.id):this.toggleSortingDirection(this.currentView.id)}}}),Ae=u.default.extend({name:"FilesListHeaderButton",components:{MenuDown:pe.Z,MenuUp:he.Z,NcButton:at()},mixins:[fe],props:{name:{type:String,required:!0},mode:{type:String,required:!0}},methods:{sortAriaLabel(t){const e=this.isAscSorting?this.t("files","ascending"):this.t("files","descending");return this.t("files","Sort list by {column} ({direction})",{column:t,direction:e})},t:r.Iu}});var ve=i(29252),me={};me.styleTagTransform=B(),me.setAttributes=I(),me.insert=S().bind(null,"head"),me.domAPI=_(),me.insertStyleElement=E(),C()(ve.Z,me),ve.Z&&ve.Z.locals&&ve.Z.locals;const ge=(0,T.Z)(Ae,(function(){var t=this,e=t._self._c;return t._self._setupProxy,e("NcButton",{staticClass:"files-list__column-sort-button",class:{"files-list__column-sort-button--active":t.sortingMode===t.mode},attrs:{"aria-label":t.sortAriaLabel(t.name),type:"tertiary"},on:{click:function(e){return e.stopPropagation(),e.preventDefault(),t.toggleSortBy(t.mode)}}},[t.sortingMode!==t.mode||t.isAscSorting?e("MenuUp",{attrs:{slot:"icon"},slot:"icon"}):e("MenuDown",{attrs:{slot:"icon"},slot:"icon"}),t._v("\n\t"+t._s(t.name)+"\n")],1)}),[],!1,null,null,null).exports,we=u.default.extend({name:"FilesListHeader",components:{FilesListHeaderButton:ge,NcCheckboxRadioSwitch:Ut(),FilesListHeaderActions:ue},mixins:[fe],props:{isSizeAvailable:{type:Boolean,default:!1},nodes:{type:Array,required:!0},filesListWidth:{type:Number,default:0}},setup:()=>({filesStore:ut(),selectionStore:ht()}),computed:{currentView(){return this.$navigation.active},columns(){var t;return this.filesListWidth<512?[]:(null===(t=this.currentView)||void 0===t?void 0:t.columns)||[]},dir(){var t,e;return((null===(t=this.$route)||void 0===t||null===(e=t.query)||void 0===e?void 0:e.dir)||"/").replace(/^(.+)\/$/,"$1")},selectAllBind(){const t=this.isNoneSelected||this.isSomeSelected?this.t("files","Select all"):this.t("files","Unselect all");return{"aria-label":t,checked:this.isAllSelected,indeterminate:this.isSomeSelected,title:t}},selectedNodes(){return this.selectionStore.selected},isAllSelected(){return this.selectedNodes.length===this.nodes.length},isNoneSelected(){return 0===this.selectedNodes.length},isSomeSelected(){return!this.isAllSelected&&!this.isNoneSelected}},methods:{classForColumn(t){return{"files-list__column":!0,"files-list__column--sortable":!!t.sort,"files-list__row-column-custom":!0,["files-list__row-".concat(this.currentView.id,"-").concat(t.id)]:!0}},onToggleAll(t){if(t){const t=this.nodes.map((t=>t.fileid.toString()));Q.debug("Added all nodes to selection",{selection:t}),this.selectionStore.setLastIndex(null),this.selectionStore.set(t)}else Q.debug("Cleared selection"),this.selectionStore.reset()},t:r.Iu}});var be=i(96153),Ce={};Ce.styleTagTransform=B(),Ce.setAttributes=I(),Ce.insert=S().bind(null,"head"),Ce.domAPI=_(),Ce.insertStyleElement=E(),C()(be.Z,Ce),be.Z&&be.Z.locals&&be.Z.locals;const ye=(0,T.Z)(we,(function(){var t=this,e=t._self._c;return t._self._setupProxy,e("tr",[e("th",{staticClass:"files-list__column files-list__row-checkbox"},[e("NcCheckboxRadioSwitch",t._b({on:{"update:checked":t.onToggleAll}},"NcCheckboxRadioSwitch",t.selectAllBind,!1))],1),t._v(" "),t.isNoneSelected?[e("th",{staticClass:"files-list__column files-list__row-name files-list__column--sortable",on:{click:function(e){return e.stopPropagation(),e.preventDefault(),t.toggleSortBy("basename")}}},[e("span",{staticClass:"files-list__row-icon"}),t._v(" "),e("FilesListHeaderButton",{attrs:{name:t.t("files","Name"),mode:"basename"}})],1),t._v(" "),e("th",{staticClass:"files-list__row-actions"}),t._v(" "),t.isSizeAvailable?e("th",{staticClass:"files-list__column files-list__row-size",class:{"files-list__column--sortable":t.isSizeAvailable}},[e("FilesListHeaderButton",{attrs:{name:t.t("files","Size"),mode:"size"}})],1):t._e(),t._v(" "),t._l(t.columns,(function(n){return e("th",{key:n.id,class:t.classForColumn(n)},[n.sort?e("FilesListHeaderButton",{attrs:{name:n.title,mode:n.id}}):e("span",[t._v("\n\t\t\t\t"+t._s(n.title)+"\n\t\t\t")])],1)}))]:e("FilesListHeaderActions",{attrs:{"current-view":t.currentView,"selected-nodes":t.selectedNodes}})],2)}),[],!1,null,"76b6186a",null).exports,_e=u.default.extend({name:"FilesListVirtual",components:{RecycleScroller:St.EK,FileEntry:ee,FilesListHeader:ye,FilesListFooter:se},mixins:[re],props:{currentView:{type:Object,required:!0},nodes:{type:Array,required:!0}},data:()=>({FileEntry:ee}),computed:{files(){return this.nodes.filter((t=>"file"===t.type))},summaryFile(){const t=this.files.length;return(0,r.uN)("files","{count} file","{count} files",t,{count:t})},summaryFolder(){const t=this.nodes.length-this.files.length;return(0,r.uN)("files","{count} folder","{count} folders",t,{count:t})},summary(){return(0,r.Iu)("files","{summaryFile} and {summaryFolder}",this)},isSizeAvailable(){return!(this.filesListWidth<768)&&this.nodes.some((t=>void 0!==t.attributes.size))}},mounted(){const t=this.$el.querySelectorAll(".vue-recycle-scroller__slot");t[0].setAttribute("role","thead"),t[1].setAttribute("role","tfoot")},methods:{getFileId:t=>t.fileid,t:r.Iu}});var xe=i(76775),Se={};Se.styleTagTransform=B(),Se.setAttributes=I(),Se.insert=S().bind(null,"head"),Se.domAPI=_(),Se.insertStyleElement=E(),C()(xe.Z,Se),xe.Z&&xe.Z.locals&&xe.Z.locals;const ke=(0,T.Z)(_e,(function(){var t=this,e=t._self._c;return t._self._setupProxy,e("RecycleScroller",{ref:"recycleScroller",staticClass:"files-list",attrs:{"key-field":"source",items:t.nodes,"item-size":55,"table-mode":!0,"item-class":"files-list__row","item-tag":"tr","list-class":"files-list__body","list-tag":"tbody",role:"table"},scopedSlots:t._u([{key:"default",fn:function(n){let{item:i,active:o,index:s}=n;return[e("FileEntry",{attrs:{active:o,index:s,"is-size-available":t.isSizeAvailable,"files-list-width":t.filesListWidth,nodes:t.nodes,source:i}})]}},{key:"before",fn:function(){return[e("caption",{staticClass:"hidden-visually"},[t._v("\n\t\t\t"+t._s(t.currentView.caption||"")+"\n\t\t\t"+t._s(t.t("files","This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list."))+"\n\t\t")]),t._v(" "),e("FilesListHeader",{attrs:{"files-list-width":t.filesListWidth,"is-size-available":t.isSizeAvailable,nodes:t.nodes}})]},proxy:!0},{key:"after",fn:function(){return[e("FilesListFooter",{attrs:{"files-list-width":t.filesListWidth,"is-size-available":t.isSizeAvailable,nodes:t.nodes,summary:t.summary}})]},proxy:!0}])})}),[],!1,null,"640a8bb8",null).exports;var Ie=i(14222);function Ne(t,e,n){return(e=function(t){var e=function(t,e){if("object"!=typeof t||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,"string");if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==typeof e?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}const Ee=class{constructor(){Ne(this,"_views",[]),Ne(this,"_currentView",null),Q.debug("Navigation service initialized")}register(t){try{Be(t),Fe(t,this._views)}catch(e){throw e instanceof Error&&Q.error(e.message,{view:t}),e}t.legacy&&Q.warn("Legacy view detected, please migrate to Vue"),t.iconClass&&(t.legacy=!0),this._views.push(t)}remove(t){const e=this._views.findIndex((e=>e.id===t));-1!==e&&this._views.splice(e,1)}get views(){return this._views}setActive(t){this._currentView=t}get active(){return this._currentView}},Fe=function(t,e){if(e.find((e=>e.id===t.id)))throw new Error("Navigation id ".concat(t.id," is already registered"));return!0},Be=function(t){if(!t.id||"string"!=typeof t.id)throw new Error("Navigation id is required and must be a string");if(!t.name||"string"!=typeof t.name)throw new Error("Navigation name is required and must be a string");if(!t.legacy){if(!t.getContents||"function"!=typeof t.getContents)throw new Error("Navigation getContents is required and must be a function");if(!t.icon||"string"!=typeof t.icon||!(0,Ie.Z)(t.icon))throw new Error("Navigation icon is required and must be a valid svg string")}if(!("order"in t)||"number"!=typeof t.order)throw new Error("Navigation order is required and must be a number");if(t.columns&&t.columns.forEach(Pe),t.emptyView&&"function"!=typeof t.emptyView)throw new Error("Navigation emptyView must be a function");if(t.parent&&"string"!=typeof t.parent)throw new Error("Navigation parent must be a string");if("sticky"in t&&"boolean"!=typeof t.sticky)throw new Error("Navigation sticky must be a boolean");if("expanded"in t&&"boolean"!=typeof t.expanded)throw new Error("Navigation expanded must be a boolean");if(t.defaultSortKey&&"string"!=typeof t.defaultSortKey)throw new Error("Navigation defaultSortKey must be a string");return!0},Pe=function(t){if(!t.id||"string"!=typeof t.id)throw new Error("A column id is required");if(!t.title||"string"!=typeof t.title)throw new Error("A column title is required");if(!t.render||"function"!=typeof t.render)throw new Error("A render function is required");if(t.sort&&"function"!=typeof t.sort)throw new Error("Column sortFunction must be a function");if(t.summary&&"function"!=typeof t.summary)throw new Error("Column summary must be a function");return!0},De=u.default.extend({name:"FilesList",components:{BreadCrumbs:xt,FilesListVirtual:ke,NcAppContent:st(),NcButton:at(),NcEmptyContent:A(),NcLoadingIcon:ct(),TrashCan:dt.Z},mixins:[fe],setup(){const t=pt();return{filesStore:ut(),pathsStore:t,selectionStore:ht(),viewConfigStore:At()}},data:()=>({loading:!0,promise:null}),computed:{currentView(){return this.$navigation.active||this.$navigation.views.find((t=>"files"===t.id))},dir(){var t,e;return((null===(t=this.$route)||void 0===t||null===(e=t.query)||void 0===e?void 0:e.dir)||"/").replace(/^(.+)\/$/,"$1")},currentFolder(){var t;if(null===(t=this.currentView)||void 0===t||!t.id)return;if("/"===this.dir)return this.filesStore.getRoot(this.currentView.id);const e=this.pathsStore.getPath(this.currentView.id,this.dir);return this.filesStore.getNode(e)},dirContents(){var t,e;if(!this.currentView)return[];const n=((null===(t=this.currentView)||void 0===t?void 0:t.columns)||[]).find((t=>t.id===this.sortingMode));if(null!=n&&n.sort&&"function"==typeof n.sort){var i;const t=[...((null===(i=this.currentFolder)||void 0===i?void 0:i._children)||[]).map(this.getNode).filter((t=>t))].sort(n.sort);return this.isAscSorting?t:t.reverse()}return(0,it.X)([...((null===(e=this.currentFolder)||void 0===e?void 0:e._children)||[]).map(this.getNode).filter((t=>t))],[..."basename"===this.sortingMode?[t=>"folder"!==t.type]:[],t=>t[this.sortingMode],t=>t.basename],this.isAscSorting?["asc","asc","asc"]:["desc","desc","desc"])},isEmptyDir(){return 0===this.dirContents.length},isRefreshing(){return void 0!==this.currentFolder&&!this.isEmptyDir&&this.loading},toPreviousDir(){const t=this.dir.split("/").slice(0,-1).join("/")||"/";return{...this.$route,query:{dir:t}}}},watch:{currentView(t,e){(null==t?void 0:t.id)!==(null==e?void 0:e.id)&&(Q.debug("View changed",{newView:t,oldView:e}),this.selectionStore.reset(),this.fetchContent())},dir(t,e){var n,i;Q.debug("Directory changed",{newDir:t,oldDir:e}),this.selectionStore.reset(),this.fetchContent(),null!==(n=this.$refs)&&void 0!==n&&null!==(i=n.filesListVirtual)&&void 0!==i&&i.$el&&(this.$refs.filesListVirtual.$el.scrollTop=0)}},methods:{async fetchContent(){var t,e;if(null!==(t=this.currentView)&&void 0!==t&&t.legacy)return;this.loading=!0;const n=this.dir,i=this.currentView;"function"==typeof(null===(e=this.promise)||void 0===e?void 0:e.cancel)&&(this.promise.cancel(),Q.debug("Cancelled previous ongoing fetch")),this.promise=i.getContents(n);try{const{folder:t,contents:e}=await this.promise;Q.debug("Fetched contents",{dir:n,folder:t,contents:e}),this.filesStore.updateNodes(e),t._children=e.map((t=>t.fileid)),"/"===n?this.filesStore.setRoot({service:i.id,root:t}):t.fileid?(this.filesStore.updateNodes([t]),this.pathsStore.addPath({service:i.id,fileid:t.fileid,path:n})):Q.error("Invalid root folder returned",{dir:n,folder:t,currentView:i}),e.filter((t=>"folder"===t.type)).forEach((t=>{this.pathsStore.addPath({service:i.id,fileid:t.fileid,path:(0,p.join)(n,t.basename)})}))}catch(t){Q.error("Error while fetching content",{error:t})}finally{this.loading=!1}},getNode(t){return this.filesStore.getNode(t)},t:r.Iu}});var Te=i(1508),ze={};ze.styleTagTransform=B(),ze.setAttributes=I(),ze.insert=S().bind(null,"head"),ze.domAPI=_(),ze.insertStyleElement=E(),C()(Te.Z,ze),Te.Z&&Te.Z.locals&&Te.Z.locals;const Le=(0,T.Z)(De,(function(){var t,e,n=this,i=n._self._c;return n._self._setupProxy,i("NcAppContent",{directives:[{name:"show",rawName:"v-show",value:!(null!==(t=n.currentView)&&void 0!==t&&t.legacy),expression:"!currentView?.legacy"}],class:{"app-content--hidden":null===(e=n.currentView)||void 0===e?void 0:e.legacy},attrs:{"data-cy-files-content":""}},[i("div",{staticClass:"files-list__header"},[i("BreadCrumbs",{attrs:{path:n.dir},on:{reload:n.fetchContent}}),n._v(" "),n.isRefreshing?i("NcLoadingIcon",{staticClass:"files-list__refresh-icon"}):n._e()],1),n._v(" "),n.loading&&!n.isRefreshing?i("NcLoadingIcon",{staticClass:"files-list__loading-icon",attrs:{size:38,title:n.t("files","Loading current folder")}}):!n.loading&&n.isEmptyDir?i("NcEmptyContent",{attrs:{title:n.t("files","No files in here"),description:n.t("files","No files or folders have been deleted yet"),"data-cy-files-content-empty":""},scopedSlots:n._u([{key:"action",fn:function(){return["/"!==n.dir?i("NcButton",{attrs:{"aria-label":"t('files', 'Go to the previous folder')",type:"primary",to:n.toPreviousDir}},[n._v("\n\t\t\t\t"+n._s(n.t("files","Go back"))+"\n\t\t\t")]):n._e()]},proxy:!0},{key:"icon",fn:function(){return[i("TrashCan")]},proxy:!0}])}):i("FilesListVirtual",{ref:"filesListVirtual",attrs:{"current-view":n.currentView,nodes:n.dirContents}})],1)}),[],!1,null,"66068cbb",null).exports;var Ue=i(57638),Ve=i(55209),Oe=i.n(Ve),Ze=i(14032),qe=i.n(Ze),Re=i(91211),je=i.n(Re);var Me=i(28615),$e=i(74184),We=i(48959),Ge=i.n(We);const He={name:"NavigationQuota",components:{ChartPie:$e.Z,NcAppNavigationItem:qe(),NcProgressBar:Ge()},data:()=>({loadingStorageStats:!1,storageStats:(0,s.j)("files","storageStats",null)}),computed:{storageStatsTitle(){var t,e,n;const i=(0,H.sS)(null===(t=this.storageStats)||void 0===t?void 0:t.used),o=(0,H.sS)(null===(e=this.storageStats)||void 0===e?void 0:e.quota);return(null===(n=this.storageStats)||void 0===n?void 0:n.quota)<0?this.t("files","{usedQuotaByte} used",{usedQuotaByte:i}):this.t("files","{used} of {quota} used",{used:i,quota:o})},storageStatsTooltip(){return this.storageStats.relative?this.t("files","{relative}% used",this.storageStats):""}},beforeMount(){setInterval(this.throttleUpdateStorageStats,6e4),(0,G.Ld)("files:node:created",this.throttleUpdateStorageStats),(0,G.Ld)("files:node:deleted",this.throttleUpdateStorageStats),(0,G.Ld)("files:node:moved",this.throttleUpdateStorageStats),(0,G.Ld)("files:node:updated",this.throttleUpdateStorageStats)},methods:{debounceUpdateStorageStats:(0,Me.D)(200,(function(t){this.updateStorageStats(t)})),throttleUpdateStorageStats:(0,Me.P)(1e3,(function(t){this.updateStorageStats(t)})),async updateStorageStats(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;if(!this.loadingStorageStats){this.loadingStorageStats=!0;try{var n;const t=await d.default.get((0,a.generateUrl)("/apps/files/api/v1/stats"));if(null==t||null===(n=t.data)||void 0===n||!n.data)throw new Error("Invalid storage stats");this.storageStats=t.data.data}catch(n){Q.error("Could not refresh storage stats",{error:n}),e&&(0,h.x2)(t("files","Could not refresh storage stats"))}finally{this.loadingStorageStats=!1}}},t:r.Iu}};var Ke=i(93582),Qe={};Qe.styleTagTransform=B(),Qe.setAttributes=I(),Qe.insert=S().bind(null,"head"),Qe.domAPI=_(),Qe.insertStyleElement=E(),C()(Ke.Z,Qe),Ke.Z&&Ke.Z.locals&&Ke.Z.locals;const Ye=(0,T.Z)(He,(function(){var t=this,e=t._self._c;return t.storageStats?e("NcAppNavigationItem",{staticClass:"app-navigation-entry__settings-quota",class:{"app-navigation-entry__settings-quota--not-unlimited":t.storageStats.quota>=0},attrs:{"aria-label":t.t("files","Storage informations"),loading:t.loadingStorageStats,name:t.storageStatsTitle,title:t.storageStatsTooltip,"data-cy-files-navigation-settings-quota":""},on:{click:function(e){return e.stopPropagation(),e.preventDefault(),t.debounceUpdateStorageStats.apply(null,arguments)}}},[e("ChartPie",{attrs:{slot:"icon",size:20},slot:"icon"}),t._v(" "),t.storageStats.quota>=0?e("NcProgressBar",{attrs:{slot:"extra",error:t.storageStats.relative>80,value:Math.min(t.storageStats.relative,100)},slot:"extra"}):t._e()],1):t._e()}),[],!1,null,"918797b2",null).exports;var Je=i(68988),Xe=i.n(Je),tn=i(16809),en=i.n(tn),nn=i(70386),on=i(36029),sn=i.n(on);const rn={name:"Setting",props:{el:{type:Function,required:!0}},mounted(){this.$el.appendChild(this.el())}},an=(0,T.Z)(rn,(function(){return(0,this._self._c)("div")}),[],!1,null,null,null).exports,ln={name:"Settings",components:{Clipboard:nn.Z,NcAppSettingsDialog:Xe(),NcAppSettingsSection:en(),NcCheckboxRadioSwitch:Ut(),NcInputField:sn(),Setting:an},props:{open:{type:Boolean,default:!1}},setup:()=>({userConfigStore:qt()}),data(){var t,e,n,i;return{settings:(null===(t=window.OCA)||void 0===t||null===(e=t.Files)||void 0===e||null===(n=e.Settings)||void 0===n?void 0:n.settings)||[],webdavUrl:(0,a.generateRemoteUrl)("dav/files/"+encodeURIComponent(null===(i=(0,l.ts)())||void 0===i?void 0:i.uid)),webdavDocs:"https://docs.nextcloud.com/server/stable/go.php?to=user-webdav",appPasswordUrl:(0,a.generateUrl)("/settings/user/security#generate-app-token-section"),webdavUrlCopied:!1}},computed:{userConfig(){return this.userConfigStore.userConfig}},beforeMount(){this.settings.forEach((t=>t.open()))},beforeDestroy(){this.settings.forEach((t=>t.close()))},methods:{onClose(){this.$emit("close")},setConfig(t,e){this.userConfigStore.update(t,e)},async copyCloudId(){document.querySelector("input#webdav-url-input").select(),navigator.clipboard?(await navigator.clipboard.writeText(this.webdavUrl),this.webdavUrlCopied=!0,(0,h.s$)(t("files","WebDAV URL copied to clipboard")),setTimeout((()=>{this.webdavUrlCopied=!1}),5e3)):(0,h.x2)(t("files","Clipboard is not available"))},t:r.Iu}},cn=ln;var dn=i(35662),un={};un.styleTagTransform=B(),un.setAttributes=I(),un.insert=S().bind(null,"head"),un.domAPI=_(),un.insertStyleElement=E(),C()(dn.Z,un),dn.Z&&dn.Z.locals&&dn.Z.locals;const pn=(0,T.Z)(cn,(function(){var t=this,e=t._self._c;return e("NcAppSettingsDialog",{attrs:{open:t.open,"show-navigation":!0,title:t.t("files","Files settings")},on:{"update:open":t.onClose}},[e("NcAppSettingsSection",{attrs:{id:"settings",title:t.t("files","Files settings")}},[e("NcCheckboxRadioSwitch",{attrs:{checked:t.userConfig.show_hidden},on:{"update:checked":function(e){return t.setConfig("show_hidden",e)}}},[t._v("\n\t\t\t"+t._s(t.t("files","Show hidden files"))+"\n\t\t")]),t._v(" "),e("NcCheckboxRadioSwitch",{attrs:{checked:t.userConfig.crop_image_previews},on:{"update:checked":function(e){return t.setConfig("crop_image_previews",e)}}},[t._v("\n\t\t\t"+t._s(t.t("files","Crop image previews"))+"\n\t\t")])],1),t._v(" "),0!==t.settings.length?e("NcAppSettingsSection",{attrs:{id:"more-settings",title:t.t("files","Additional settings")}},[t._l(t.settings,(function(t){return[e("Setting",{key:t.name,attrs:{el:t.el}})]}))],2):t._e(),t._v(" "),e("NcAppSettingsSection",{attrs:{id:"webdav",title:t.t("files","WebDAV")}},[e("NcInputField",{attrs:{id:"webdav-url-input","show-trailing-button":!0,success:t.webdavUrlCopied,"trailing-button-label":t.t("files","Copy to clipboard"),value:t.webdavUrl,readonly:"readonly",type:"url"},on:{focus:function(t){return t.target.select()},"trailing-button-click":t.copyCloudId},scopedSlots:t._u([{key:"trailing-button-icon",fn:function(){return[e("Clipboard",{attrs:{size:20}})]},proxy:!0}])}),t._v(" "),e("em",[e("a",{staticClass:"setting-link",attrs:{href:t.webdavDocs,target:"_blank",rel:"noreferrer noopener"}},[t._v("\n\t\t\t\t"+t._s(t.t("files","Use this address to access your Files via WebDAV"))+" ↗\n\t\t\t")])]),t._v(" "),e("br"),t._v(" "),e("em",[e("a",{staticClass:"setting-link",attrs:{href:t.appPasswordUrl}},[t._v("\n\t\t\t\t"+t._s(t.t("files","If you have enabled 2FA, you must create and use a new app password by clicking here."))+" ↗\n\t\t\t")])])],1)],1)}),[],!1,null,"76ca5d1f",null).exports,hn={name:"Navigation",components:{Cog:Ue.default,NavigationQuota:Ye,NcAppNavigation:Oe(),NcAppNavigationItem:qe(),NcIconSvgWrapper:je(),SettingsModal:pn},props:{Navigation:{type:Ee,required:!0}},setup:()=>({viewConfigStore:At()}),data:()=>({settingsOpened:!1}),computed:{currentViewId(){var t,e;return(null===(t=this.$route)||void 0===t||null===(e=t.params)||void 0===e?void 0:e.view)||"files"},currentView(){return this.views.find((t=>t.id===this.currentViewId))},views(){return this.Navigation.views},parentViews(){return this.views.filter((t=>!t.parent)).sort(((t,e)=>t.order-e.order))},childViews(){return this.views.filter((t=>!!t.parent)).reduce(((t,e)=>(t[e.parent]=[...t[e.parent]||[],e],t[e.parent].sort(((t,e)=>t.order-e.order)),t)),{})}},watch:{currentView(t,e){(null==t?void 0:t.id)!==(null==e?void 0:e.id)&&(this.Navigation.setActive(t),Q.debug("Navigation changed",{id:t.id,view:t}),this.showView(t,e))}},beforeMount(){this.currentView&&(Q.debug("Navigation mounted. Showing requested view",{view:this.currentView}),this.showView(this.currentView)),(0,G.Ld)("files:legacy-navigation:changed",this.onLegacyNavigationChanged),(0,G.Ld)("files:legacy-view:initialized",(()=>{Q.debug("Legacy view initialized",{...this.currentView}),this.showView(this.currentView)}))},methods:{showView(t,e){var n,i,o,s,r;if(null===(n=window)||void 0===n||null===(i=n.OCA)||void 0===i||null===(o=i.Files)||void 0===o||null===(s=o.Sidebar)||void 0===s||null===(r=s.close)||void 0===r||r.call(s),null!=t&&t.legacy){const e=document.querySelector("#app-content #app-content-"+this.currentView.id+".viewcontainer");document.querySelectorAll("#app-content .viewcontainer").forEach((t=>{t.classList.add("hidden")})),e.classList.remove("hidden");const{dir:n="/"}=OC.Util.History.parseUrlQuery(),i={itemId:t.id,dir:n};Q.debug("Triggering legacy navigation event",i),window.jQuery(e).trigger(new window.jQuery.Event("show",i)),window.jQuery(e).trigger(new window.jQuery.Event("urlChanged",i))}this.Navigation.setActive(t),function(t){const e=document.getElementById("page-heading-level-1");e&&(e.textContent=t)}(t.name),(0,G.j8)("files:navigation:changed",t)},onLegacyNavigationChanged(){let{id:t}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{id:"files"};const e=this.Navigation.views.find((e=>e.id===t));e&&e.legacy&&e.id!==this.currentView.id&&(this.$router.replace({...this.$route,params:{view:e.id}}),this.Navigation.setActive(e),this.showView(e))},onToggleExpand(t){const e=this.isExpanded(t);t.expanded=!e,this.viewConfigStore.update(t.id,"expanded",!e)},isExpanded(t){var e;return"boolean"==typeof(null===(e=this.viewConfigStore.getConfig(t.id))||void 0===e?void 0:e.expanded)?!0===this.viewConfigStore.getConfig(t.id).expanded:!0===t.expanded},generateToNavigation(t){if(t.params){const{dir:e,fileid:n}=t.params;return{name:"filelist",params:t.params,query:{dir:e,fileid:n}}}return{name:"filelist",params:{view:t.id}}},openSettings(){this.settingsOpened=!0},onSettingsClose(){this.settingsOpened=!1},t:r.Iu}},fn=hn;var An=i(87289),vn={};vn.styleTagTransform=B(),vn.setAttributes=I(),vn.insert=S().bind(null,"head"),vn.domAPI=_(),vn.insertStyleElement=E(),C()(An.Z,vn),An.Z&&An.Z.locals&&An.Z.locals;const mn=(0,T.Z)(fn,(function(){var t=this,e=t._self._c;return e("NcAppNavigation",{attrs:{"data-cy-files-navigation":""},scopedSlots:t._u([{key:"list",fn:function(){return t._l(t.parentViews,(function(n){return e("NcAppNavigationItem",{key:n.id,attrs:{"allow-collapse":!0,"data-cy-files-navigation-item":n.id,icon:n.iconClass,open:t.isExpanded(n),pinned:n.sticky,title:n.name,to:t.generateToNavigation(n)},on:{"update:open":function(e){return t.onToggleExpand(n)}}},[n.icon?e("NcIconSvgWrapper",{attrs:{slot:"icon",svg:n.icon},slot:"icon"}):t._e(),t._v(" "),t._l(t.childViews[n.id],(function(n){return e("NcAppNavigationItem",{key:n.id,attrs:{"data-cy-files-navigation-item":n.id,exact:!0,icon:n.iconClass,title:n.name,to:t.generateToNavigation(n)}},[n.icon?e("NcIconSvgWrapper",{attrs:{slot:"icon",svg:n.icon},slot:"icon"}):t._e()],1)}))],2)}))},proxy:!0},{key:"footer",fn:function(){return[e("ul",{staticClass:"app-navigation-entry__settings"},[e("NavigationQuota"),t._v(" "),e("NcAppNavigationItem",{attrs:{"aria-label":t.t("files","Open the files app settings"),title:t.t("files","Files settings"),"data-cy-files-navigation-settings-button":""},on:{click:function(e){return e.preventDefault(),e.stopPropagation(),t.openSettings.apply(null,arguments)}}},[e("Cog",{attrs:{slot:"icon",size:20},slot:"icon"})],1)],1)]},proxy:!0}])},[t._v(" "),t._v(" "),e("SettingsModal",{attrs:{open:t.settingsOpened,"data-cy-files-navigation-settings":""},on:{close:t.onSettingsClose}})],1)}),[],!1,null,"657a978e",null).exports,gn=function(t){let{id:e,name:n,order:i,icon:o,parent:s,classes:r="",expanded:a,params:l}=t;OCP.Files.Navigation.register({id:e,name:n,order:i,params:l,parent:s,expanded:!0===a,iconClass:o?"icon-".concat(o):"nav-icon-"+e,legacy:!0,sticky:r.includes("pinned")})};var wn=i(78345),bn=i(97047);u.default.use(wn.ZP);const Cn=new wn.ZP({mode:"history",base:(0,a.generateUrl)("/apps/files",""),linkActiveClass:"active",routes:[{path:"/",alias:"/files"},{path:"/:view/:fileid?",name:"filelist",props:!0}],stringifyQuery(t){const e=bn.Z.stringify(t).replace(/%2F/gim,"/");return e?"?"+e:""}});function yn(t,e,n){return(e=function(t){var e=function(t,e){if("object"!=typeof t||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,"string");if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==typeof e?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}var _n,xn,Sn=i(25108);window.OCA.Files=null!==(_n=window.OCA.Files)&&void 0!==_n?_n:{},window.OCP.Files=null!==(xn=window.OCP.Files)&&void 0!==xn?xn:{};const kn=new class{constructor(t){var e,n,i;e=this,i=void 0,(n=function(t){var e=function(t,e){if("object"!=typeof t||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,"string");if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==typeof e?e:String(e)}(n="_router"))in e?Object.defineProperty(e,n,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[n]=i,this._router=t}goTo(t){let e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return this._router.push({path:t,replace:e})}goToRoute(t,e,n,i){return this._router.push({name:t,query:n,params:e,replace:i})}}(Cn);Object.assign(window.OCP.Files,{Router:kn}),u.default.use(nt.og);const In=(0,nt.WB)(),Nn=new Ee;Object.assign(window.OCP.Files,{Navigation:Nn}),u.default.prototype.$navigation=Nn;const En=new class{constructor(){var t,e,n;t=this,n=void 0,(e=function(t){var e=function(t,e){if("object"!=typeof t||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,"string");if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==typeof e?e:String(e)}(e="_settings"))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,this._settings=[],Sn.debug("OCA.Files.Settings initialized")}register(t){return this._settings.filter((e=>e.name===t.name)).length>0?(Sn.error("A setting with the same name is already registered"),!1):(this._settings.push(t),!0)}get settings(){return this._settings}};Object.assign(window.OCA.Files,{Settings:En}),Object.assign(window.OCA.Files.Settings,{Setting:class{constructor(t,e){let{el:n,open:i,close:o}=e;yn(this,"_close",void 0),yn(this,"_el",void 0),yn(this,"_name",void 0),yn(this,"_open",void 0),this._name=t,this._el=n,this._open=i,this._close=o,"function"!=typeof this._open&&(this._open=()=>{}),"function"!=typeof this._close&&(this._close=()=>{})}get name(){return this._name}get el(){return this._el}get open(){return this._open}get close(){return this._close}}}),new(u.default.extend(mn))({name:"FilesNavigationRoot",propsData:{Navigation:Nn},router:Cn,pinia:In}).$mount("#app-navigation-files"),new(u.default.extend(Le))({name:"FilesListRoot",router:Cn,pinia:In}).$mount("#app-content-vue"),function(){const t=Object.values((0,s.j)("files","navigation",{}));t.length>0&&(Q.debug("Legacy files views detected. Processing...",t),t.forEach((t=>{gn(t),t.sublist&&t.sublist.forEach((e=>gn({...e,parent:t.id})))})))}(),"serviceWorker"in navigator?window.addEventListener("load",(async()=>{try{const t=(0,a.generateUrl)("/apps/files/preview-service-worker.js",{},{noRewrite:!0}),e=await navigator.serviceWorker.register(t,{scope:"/"});Q.debug("SW registered: ",{registration:e})}catch(t){Q.error("SW registration failed: ",{error:t})}})):Q.debug("Service Worker is not enabled on this browser.")},39959:(t,e,n)=>{n.d(e,{Z:()=>a});var i=n(87537),o=n.n(i),s=n(23645),r=n.n(s)()(o());r.push([t.id,".breadcrumb[data-v-68b3b20b]{flex:1 1 100% !important;width:100%}.breadcrumb[data-v-68b3b20b] a{cursor:pointer !important}","",{version:3,sources:["webpack://./apps/files/src/components/BreadCrumbs.vue"],names:[],mappings:"AACA,6BAEC,wBAAA,CACA,UAAA,CAEA,+BACC,yBAAA",sourcesContent:["\n.breadcrumb {\n\t// Take as much space as possible\n\tflex: 1 1 100% !important;\n\twidth: 100%;\n\n\t::v-deep a {\n\t\tcursor: pointer !important;\n\t}\n}\n\n"],sourceRoot:""}]);const a=r},61959:(t,e,n)=>{n.d(e,{Z:()=>a});var i=n(87537),o=n.n(i),s=n(23645),r=n.n(s)()(o());r.push([t.id,".custom-svg-icon[data-v-93e9b2f4]{display:flex;align-items:center;align-self:center;justify-content:center;justify-self:center;width:44px;height:44px;opacity:1}.custom-svg-icon[data-v-93e9b2f4] svg{height:22px;width:22px;fill:currentColor}","",{version:3,sources:["webpack://./apps/files/src/components/CustomSvgIconRender.vue"],names:[],mappings:"AACA,kCACC,YAAA,CACA,kBAAA,CACA,iBAAA,CACA,sBAAA,CACA,mBAAA,CACA,UAAA,CACA,WAAA,CACA,SAAA,CAEA,sCAGC,WAAA,CACA,UAAA,CACA,iBAAA",sourcesContent:["\n.custom-svg-icon {\n\tdisplay: flex;\n\talign-items: center;\n\talign-self: center;\n\tjustify-content: center;\n\tjustify-self: center;\n\twidth: 44px;\n\theight: 44px;\n\topacity: 1;\n\n\t::v-deep svg {\n\t\t// mdi icons have a size of 24px\n\t\t// 22px results in roughly 16px inner size\n\t\theight: 22px;\n\t\twidth: 22px;\n\t\tfill: currentColor;\n\t}\n}\n\n"],sourceRoot:""}]);const a=r},13352:(t,e,n)=>{n.d(e,{Z:()=>a});var i=n(87537),o=n.n(i),s=n(23645),r=n.n(s)()(o());r.push([t.id,"tr[data-v-0600090e]:hover,tr[data-v-0600090e]:focus,tr[data-v-0600090e]:active{background-color:var(--color-background-dark)}.files-list__row-icon-preview[data-v-0600090e]:not([style*=background]){background:var(--color-loading-dark)}","",{version:3,sources:["webpack://./apps/files/src/components/FileEntry.vue"],names:[],mappings:"AAGC,+EAGC,6CAAA,CAKF,wEACI,oCAAA",sourcesContent:["\n/* Hover effect on tbody lines only */\ntr {\n\t&:hover,\n\t&:focus,\n\t&:active {\n\t\tbackground-color: var(--color-background-dark);\n\t}\n}\n\n/* Preview not loaded animation effect */\n.files-list__row-icon-preview:not([style*='background']) {\n    background: var(--color-loading-dark);\n\t// animation: preview-gradient-fade 1.2s ease-in-out infinite;\n}\n"],sourceRoot:""}]);const a=r},97105:(t,e,n)=>{n.d(e,{Z:()=>a});var i=n(87537),o=n.n(i),s=n(23645),r=n.n(s)()(o());r.push([t.id,"tr[data-v-e6a083be]{padding-bottom:300px;border-top:1px solid var(--color-border);background-color:rgba(0,0,0,0) !important;border-bottom:none !important}td[data-v-e6a083be]{user-select:none;color:var(--color-text-maxcontrast) !important}","",{version:3,sources:["webpack://./apps/files/src/components/FilesListFooter.vue"],names:[],mappings:"AAEA,oBACC,oBAAA,CACA,wCAAA,CAEA,yCAAA,CACA,6BAAA,CAGD,oBACC,gBAAA,CAEA,8CAAA",sourcesContent:["\n// Scoped row\ntr {\n\tpadding-bottom: 300px;\n\tborder-top: 1px solid var(--color-border);\n\t// Prevent hover effect on the whole row\n\tbackground-color: transparent !important;\n\tborder-bottom: none !important;\n}\n\ntd {\n\tuser-select: none;\n\t// Make sure the cell colors don't apply to column headers\n\tcolor: var(--color-text-maxcontrast) !important;\n}\n\n"],sourceRoot:""}]);const a=r},96153:(t,e,n)=>{n.d(e,{Z:()=>a});var i=n(87537),o=n.n(i),s=n(23645),r=n.n(s)()(o());r.push([t.id,".files-list__column[data-v-76b6186a]{user-select:none;color:var(--color-text-maxcontrast) !important}.files-list__column--sortable[data-v-76b6186a]{cursor:pointer}","",{version:3,sources:["webpack://./apps/files/src/components/FilesListHeader.vue"],names:[],mappings:"AACA,qCACC,gBAAA,CAEA,8CAAA,CAEA,+CACC,cAAA",sourcesContent:["\n.files-list__column {\n\tuser-select: none;\n\t// Make sure the cell colors don't apply to column headers\n\tcolor: var(--color-text-maxcontrast) !important;\n\n\t&--sortable {\n\t\tcursor: pointer;\n\t}\n}\n\n"],sourceRoot:""}]);const a=r},97877:(t,e,n)=>{n.d(e,{Z:()=>a});var i=n(87537),o=n.n(i),s=n(23645),r=n.n(s)()(o());r.push([t.id,".files-list__row-actions-batch[data-v-03e57b1e]{flex:1 1 100% !important}.files-list__row-actions-batch[data-v-03e57b1e] .button-vue__wrapper{width:100%}.files-list__row-actions-batch[data-v-03e57b1e] .button-vue__wrapper span.button-vue__text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}","",{version:3,sources:["webpack://./apps/files/src/components/FilesListHeaderActions.vue"],names:[],mappings:"AACA,gDACC,wBAAA,CAGA,qEACC,UAAA,CACA,2FACC,eAAA,CACA,sBAAA,CACA,kBAAA",sourcesContent:["\n.files-list__row-actions-batch {\n\tflex: 1 1 100% !important;\n\n\t// Remove when https://github.com/nextcloud/nextcloud-vue/pull/3936 is merged\n\t::v-deep .button-vue__wrapper {\n\t\twidth: 100%;\n\t\tspan.button-vue__text {\n\t\t\toverflow: hidden;\n\t\t\ttext-overflow: ellipsis;\n\t\t\twhite-space: nowrap;\n\t\t}\n\t}\n}\n"],sourceRoot:""}]);const a=r},29252:(t,e,n)=>{n.d(e,{Z:()=>a});var i=n(87537),o=n.n(i),s=n(23645),r=n.n(s)()(o());r.push([t.id,".files-list__column-sort-button{margin:0 calc(var(--cell-margin)*-1);padding:0 4px 0 16px !important}.files-list__column-sort-button .button-vue__wrapper{flex-direction:row-reverse;width:100%}.files-list__column-sort-button .button-vue__icon{transition-timing-function:linear;transition-duration:.1s;transition-property:opacity;opacity:0}.files-list__column-sort-button .button-vue__text{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.files-list__column-sort-button--active .button-vue__icon,.files-list__column-sort-button:hover .button-vue__icon,.files-list__column-sort-button:focus .button-vue__icon,.files-list__column-sort-button:active .button-vue__icon{opacity:1 !important}","",{version:3,sources:["webpack://./apps/files/src/components/FilesListHeaderButton.vue"],names:[],mappings:"AACA,gCAEC,oCAAA,CAEA,+BAAA,CAGA,qDACC,0BAAA,CAGA,UAAA,CAGD,kDACC,iCAAA,CACA,uBAAA,CACA,2BAAA,CACA,SAAA,CAID,kDACC,eAAA,CACA,kBAAA,CACA,sBAAA,CAOA,mOACC,oBAAA",sourcesContent:["\n.files-list__column-sort-button {\n\t// Compensate for cells margin\n\tmargin: 0 calc(var(--cell-margin) * -1);\n\t// Reverse padding\n\tpadding: 0 4px 0 16px !important;\n\n\t// Icon after text\n\t.button-vue__wrapper {\n\t\tflex-direction: row-reverse;\n\t\t// Take max inner width for text overflow ellipsis\n\t\t// Remove when https://github.com/nextcloud/nextcloud-vue/pull/3936 is merged\n\t\twidth: 100%;\n\t}\n\n\t.button-vue__icon {\n\t\ttransition-timing-function: linear;\n\t\ttransition-duration: .1s;\n\t\ttransition-property: opacity;\n\t\topacity: 0;\n\t}\n\n\t// Remove when https://github.com/nextcloud/nextcloud-vue/pull/3936 is merged\n\t.button-vue__text {\n\t\toverflow: hidden;\n\t\twhite-space: nowrap;\n\t\ttext-overflow: ellipsis;\n\t}\n\n\t&--active,\n\t&:hover,\n\t&:focus,\n\t&:active {\n\t\t.button-vue__icon {\n\t\t\topacity: 1 !important;\n\t\t}\n\t}\n}\n"],sourceRoot:""}]);const a=r},76775:(t,e,n)=>{n.d(e,{Z:()=>a});var i=n(87537),o=n.n(i),s=n(23645),r=n.n(s)()(o());r.push([t.id,".files-list[data-v-640a8bb8]{--row-height: 55px;--cell-margin: 14px;--checkbox-padding: calc((var(--row-height) - var(--checkbox-size)) / 2);--checkbox-size: 24px;--clickable-area: 44px;--icon-preview-size: 32px;display:block;overflow:auto;height:100%}.files-list[data-v-640a8bb8] tbody,.files-list[data-v-640a8bb8] .vue-recycle-scroller__slot{display:flex;flex-direction:column;width:100%;position:relative}.files-list[data-v-640a8bb8] .vue-recycle-scroller__slot[role=thead]{position:sticky;z-index:10;top:0;height:var(--row-height);background-color:var(--color-main-background)}.files-list[data-v-640a8bb8] tr{position:absolute;display:flex;align-items:center;width:100%;border-bottom:1px solid var(--color-border)}.files-list[data-v-640a8bb8] td,.files-list[data-v-640a8bb8] th{display:flex;align-items:center;flex:0 0 auto;justify-content:left;width:var(--row-height);height:var(--row-height);margin:0;padding:0;color:var(--color-text-maxcontrast);border:none}.files-list[data-v-640a8bb8] td span,.files-list[data-v-640a8bb8] th span{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.files-list[data-v-640a8bb8] .files-list__row-checkbox{justify-content:center}.files-list[data-v-640a8bb8] .files-list__row-checkbox .checkbox-radio-switch{display:flex;justify-content:center;--icon-size: var(--checkbox-size)}.files-list[data-v-640a8bb8] .files-list__row-checkbox .checkbox-radio-switch label.checkbox-radio-switch__label{width:var(--clickable-area);height:var(--clickable-area);margin:0;padding:calc((var(--clickable-area) - var(--checkbox-size))/2)}.files-list[data-v-640a8bb8] .files-list__row-checkbox .checkbox-radio-switch .checkbox-radio-switch__icon{margin:0 !important}.files-list[data-v-640a8bb8] .files-list__row-icon{position:relative;display:flex;overflow:visible;align-items:center;flex:0 0 var(--icon-preview-size);justify-content:center;width:var(--icon-preview-size);height:100%;margin-right:var(--checkbox-padding);color:var(--color-primary-element)}.files-list[data-v-640a8bb8] .files-list__row-icon>span{justify-content:flex-start}.files-list[data-v-640a8bb8] .files-list__row-icon>span:not(.files-list__row-icon-favorite) svg{width:var(--icon-preview-size);height:var(--icon-preview-size)}.files-list[data-v-640a8bb8] .files-list__row-icon-preview{overflow:hidden;width:var(--icon-preview-size);height:var(--icon-preview-size);border-radius:var(--border-radius);background-repeat:no-repeat;background-position:center;background-size:contain}.files-list[data-v-640a8bb8] .files-list__row-icon-favorite{position:absolute;top:4px;right:-8px;color:#fc0}.files-list[data-v-640a8bb8] .files-list__row-name{overflow:hidden;flex:1 1 auto}.files-list[data-v-640a8bb8] .files-list__row-name a{display:flex;align-items:center;width:100%;height:100%}.files-list[data-v-640a8bb8] .files-list__row-name a:focus .files-list__row-name-text,.files-list[data-v-640a8bb8] .files-list__row-name a:focus-visible .files-list__row-name-text{outline:2px solid var(--color-main-text) !important;border-radius:20px}.files-list[data-v-640a8bb8] .files-list__row-name .files-list__row-name-text{padding:5px 10px;margin-left:-10px}.files-list[data-v-640a8bb8] .files-list__row-actions{width:auto}.files-list[data-v-640a8bb8] .files-list__row-actions~td,.files-list[data-v-640a8bb8] .files-list__row-actions~th{margin:0 var(--cell-margin)}.files-list[data-v-640a8bb8] .files-list__row-actions button .button-vue__text{font-weight:normal}.files-list[data-v-640a8bb8] .files-list__row-actions button:not(:hover,:focus,:active) .button-vue__wrapper{color:var(--color-text-maxcontrast)}.files-list[data-v-640a8bb8] .files-list__row-size{justify-content:flex-end;width:calc(var(--row-height)*1.5);color:var(--color-main-text)}.files-list[data-v-640a8bb8] .files-list__row-size .files-list__column-sort-button{padding:0 16px 0 4px !important}.files-list[data-v-640a8bb8] .files-list__row-size .files-list__column-sort-button .button-vue__wrapper{flex-direction:row}.files-list[data-v-640a8bb8] .files-list__row-column-custom{width:calc(var(--row-height)*2)}","",{version:3,sources:["webpack://./apps/files/src/components/FilesListVirtual.vue"],names:[],mappings:"AACA,6BACC,kBAAA,CACA,mBAAA,CAEA,wEAAA,CACA,qBAAA,CACA,sBAAA,CACA,yBAAA,CAEA,aAAA,CACA,aAAA,CACA,WAAA,CAIC,4FACC,YAAA,CACA,qBAAA,CACA,UAAA,CAEA,iBAAA,CAID,qEAEC,eAAA,CACA,UAAA,CACA,KAAA,CACA,wBAAA,CACA,6CAAA,CAGD,gCACC,iBAAA,CACA,YAAA,CACA,kBAAA,CACA,UAAA,CACA,2CAAA,CAGD,gEACC,YAAA,CACA,kBAAA,CACA,aAAA,CACA,oBAAA,CACA,uBAAA,CACA,wBAAA,CACA,QAAA,CACA,SAAA,CACA,mCAAA,CACA,WAAA,CAKA,0EACC,eAAA,CACA,kBAAA,CACA,sBAAA,CAIF,uDACC,sBAAA,CACA,8EACC,YAAA,CACA,sBAAA,CAEA,iCAAA,CAEA,iHACC,2BAAA,CACA,4BAAA,CACA,QAAA,CACA,8DAAA,CAGD,2GACC,mBAAA,CAKH,mDACC,iBAAA,CACA,YAAA,CACA,gBAAA,CACA,kBAAA,CAEA,iCAAA,CACA,sBAAA,CACA,8BAAA,CACA,WAAA,CAEA,oCAAA,CACA,kCAAA,CAEA,wDACC,0BAAA,CAGD,gGACC,8BAAA,CACA,+BAAA,CAGD,2DACC,eAAA,CACA,8BAAA,CACA,+BAAA,CACA,kCAAA,CACA,2BAAA,CAEA,0BAAA,CACA,uBAAA,CAGD,4DACC,iBAAA,CACA,OAAA,CACA,UAAA,CACA,UAAA,CAIF,mDAEC,eAAA,CAEA,aAAA,CAEA,qDACC,YAAA,CACA,kBAAA,CAEA,UAAA,CACA,WAAA,CAGA,oLAEC,mDAAA,CACA,kBAAA,CAIF,8EAEC,gBAAA,CACA,iBAAA,CAIF,sDACC,UAAA,CAGA,kHAEC,2BAAA,CAIA,+EAEC,kBAAA,CAED,6GAEC,mCAAA,CAKH,mDAEC,wBAAA,CACA,iCAAA,CAEA,4BAAA,CAGA,mFACC,+BAAA,CACA,wGACC,kBAAA,CAKH,4DACC,+BAAA",sourcesContent:["\n.files-list {\n\t--row-height: 55px;\n\t--cell-margin: 14px;\n\n\t--checkbox-padding: calc((var(--row-height) - var(--checkbox-size)) / 2);\n\t--checkbox-size: 24px;\n\t--clickable-area: 44px;\n\t--icon-preview-size: 32px;\n\n\tdisplay: block;\n\toverflow: auto;\n\theight: 100%;\n\n\t&::v-deep {\n\t\t// Table head, body and footer\n\t\ttbody, .vue-recycle-scroller__slot {\n\t\t\tdisplay: flex;\n\t\t\tflex-direction: column;\n\t\t\twidth: 100%;\n\t\t\t// Necessary for virtual scrolling absolute\n\t\t\tposition: relative;\n\t\t}\n\n\t\t// Table header\n\t\t.vue-recycle-scroller__slot[role='thead'] {\n\t\t\t// Pinned on top when scrolling\n\t\t\tposition: sticky;\n\t\t\tz-index: 10;\n\t\t\ttop: 0;\n\t\t\theight: var(--row-height);\n\t\t\tbackground-color: var(--color-main-background);\n\t\t}\n\n\t\ttr {\n\t\t\tposition: absolute;\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\twidth: 100%;\n\t\t\tborder-bottom: 1px solid var(--color-border);\n\t\t}\n\n\t\ttd, th {\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\tflex: 0 0 auto;\n\t\t\tjustify-content: left;\n\t\t\twidth: var(--row-height);\n\t\t\theight: var(--row-height);\n\t\t\tmargin: 0;\n\t\t\tpadding: 0;\n\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t\tborder: none;\n\n\t\t\t// Columns should try to add any text\n\t\t\t// node wrapped in a span. That should help\n\t\t\t// with the ellipsis on overflow.\n\t\t\tspan {\n\t\t\t\toverflow: hidden;\n\t\t\t\twhite-space: nowrap;\n\t\t\t\ttext-overflow: ellipsis;\n\t\t\t}\n\t\t}\n\n\t\t.files-list__row-checkbox {\n\t\t\tjustify-content: center;\n\t\t\t.checkbox-radio-switch {\n\t\t\t\tdisplay: flex;\n\t\t\t\tjustify-content: center;\n\n\t\t\t\t--icon-size: var(--checkbox-size);\n\n\t\t\t\tlabel.checkbox-radio-switch__label {\n\t\t\t\t\twidth: var(--clickable-area);\n\t\t\t\t\theight: var(--clickable-area);\n\t\t\t\t\tmargin: 0;\n\t\t\t\t\tpadding: calc((var(--clickable-area) - var(--checkbox-size)) / 2);\n\t\t\t\t}\n\n\t\t\t\t.checkbox-radio-switch__icon {\n\t\t\t\t\tmargin: 0 !important;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t.files-list__row-icon {\n\t\t\tposition: relative;\n\t\t\tdisplay: flex;\n\t\t\toverflow: visible;\n\t\t\talign-items: center;\n\t\t\t// No shrinking or growing allowed\n\t\t\tflex: 0 0 var(--icon-preview-size);\n\t\t\tjustify-content: center;\n\t\t\twidth: var(--icon-preview-size);\n\t\t\theight: 100%;\n\t\t\t// Show same padding as the checkbox right padding for visual balance\n\t\t\tmargin-right: var(--checkbox-padding);\n\t\t\tcolor: var(--color-primary-element);\n\n\t\t\t& > span {\n\t\t\t\tjustify-content: flex-start;\n\t\t\t}\n\n\t\t\t&> span:not(.files-list__row-icon-favorite) svg {\n\t\t\t\twidth: var(--icon-preview-size);\n\t\t\t\theight: var(--icon-preview-size);\n\t\t\t}\n\n\t\t\t&-preview {\n\t\t\t\toverflow: hidden;\n\t\t\t\twidth: var(--icon-preview-size);\n\t\t\t\theight: var(--icon-preview-size);\n\t\t\t\tborder-radius: var(--border-radius);\n\t\t\t\tbackground-repeat: no-repeat;\n\t\t\t\t// Center and contain the preview\n\t\t\t\tbackground-position: center;\n\t\t\t\tbackground-size: contain;\n\t\t\t}\n\n\t\t\t&-favorite {\n\t\t\t\tposition: absolute;\n\t\t\t\ttop: 4px;\n\t\t\t\tright: -8px;\n\t\t\t\tcolor: #ffcc00;\n\t\t\t}\n\t\t}\n\n\t\t.files-list__row-name {\n\t\t\t// Prevent link from overflowing\n\t\t\toverflow: hidden;\n\t\t\t// Take as much space as possible\n\t\t\tflex: 1 1 auto;\n\n\t\t\ta {\n\t\t\t\tdisplay: flex;\n\t\t\t\talign-items: center;\n\t\t\t\t// Fill cell height and width\n\t\t\t\twidth: 100%;\n\t\t\t\theight: 100%;\n\n\t\t\t\t// Keyboard indicator a11y\n\t\t\t\t&:focus .files-list__row-name-text,\n\t\t\t\t&:focus-visible .files-list__row-name-text {\n\t\t\t\t\toutline: 2px solid var(--color-main-text) !important;\n\t\t\t\t\tborder-radius: 20px;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t.files-list__row-name-text {\n\t\t\t\t// Make some space for the outline\n\t\t\t\tpadding: 5px 10px;\n\t\t\t\tmargin-left: -10px;\n\t\t\t}\n\t\t}\n\n\t\t.files-list__row-actions {\n\t\t\twidth: auto;\n\n\t\t\t// Add margin to all cells after the actions\n\t\t\t& ~ td,\n\t\t\t& ~ th {\n\t\t\t\tmargin: 0 var(--cell-margin);\n\t\t\t}\n\n\t\t\tbutton {\n\t\t\t\t.button-vue__text {\n\t\t\t\t\t// Remove bold from default button styling\n\t\t\t\t\tfont-weight: normal;\n\t\t\t\t}\n\t\t\t\t&:not(:hover, :focus, :active) .button-vue__wrapper {\n\t\t\t\t\t// Also apply color-text-maxcontrast to non-active button\n\t\t\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t.files-list__row-size {\n\t\t\t// Right align text\n\t\t\tjustify-content: flex-end;\n\t\t\twidth: calc(var(--row-height) * 1.5);\n\t\t\t// opacity varies with the size\n\t\t\tcolor: var(--color-main-text);\n\n\t\t\t// Icon is before text since size is right aligned\n\t\t\t.files-list__column-sort-button {\n\t\t\t\tpadding: 0 16px 0 4px !important;\n\t\t\t\t.button-vue__wrapper {\n\t\t\t\t\tflex-direction: row;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t.files-list__row-column-custom {\n\t\t\twidth: calc(var(--row-height) * 2);\n\t\t}\n\t}\n}\n"],sourceRoot:""}]);const a=r},93582:(t,e,n)=>{n.d(e,{Z:()=>a});var i=n(87537),o=n.n(i),s=n(23645),r=n.n(s)()(o());r.push([t.id,".app-navigation-entry__settings-quota--not-unlimited[data-v-918797b2] .app-navigation-entry__title{margin-top:-4px}.app-navigation-entry__settings-quota progress[data-v-918797b2]{position:absolute;bottom:10px;margin-left:44px;width:calc(100% - 44px - 22px)}","",{version:3,sources:["webpack://./apps/files/src/components/NavigationQuota.vue"],names:[],mappings:"AAIC,mGACC,eAAA,CAGD,gEACC,iBAAA,CACA,WAAA,CACA,gBAAA,CACA,8BAAA",sourcesContent:["\n// User storage stats display\n.app-navigation-entry__settings-quota {\n\t// Align title with progress and icon\n\t&--not-unlimited::v-deep .app-navigation-entry__title {\n\t\tmargin-top: -4px;\n\t}\n\n\tprogress {\n\t\tposition: absolute;\n\t\tbottom: 10px;\n\t\tmargin-left: 44px;\n\t\twidth: calc(100% - 44px - 22px);\n\t}\n}\n"],sourceRoot:""}]);const a=r},3491:(t,e,n)=>{n.d(e,{Z:()=>a});var i=n(87537),o=n.n(i),s=n(23645),r=n.n(s)()(o());r.push([t.id,".template-picker__item[data-v-6c072a31]{display:flex}.template-picker__label[data-v-6c072a31]{display:flex;align-items:center;flex:1 1;flex-direction:column}.template-picker__label[data-v-6c072a31],.template-picker__label *[data-v-6c072a31]{cursor:pointer;user-select:none}.template-picker__label[data-v-6c072a31]::before{display:none !important}.template-picker__preview[data-v-6c072a31]{display:block;overflow:hidden;flex:1 1;width:var(--width);min-height:var(--height);max-height:var(--height);padding:0;border:var(--border) solid var(--color-border);border-radius:var(--border-radius-large)}input:checked+label>.template-picker__preview[data-v-6c072a31]{border-color:var(--color-primary)}.template-picker__preview--failed[data-v-6c072a31]{display:flex}.template-picker__image[data-v-6c072a31]{max-width:100%;background-color:var(--color-main-background);object-fit:cover}.template-picker__preview--failed .template-picker__image[data-v-6c072a31]{width:calc(var(--margin)*8);margin:auto;background-color:rgba(0,0,0,0) !important;object-fit:initial}.template-picker__title[data-v-6c072a31]{overflow:hidden;max-width:calc(var(--width) + 4px);padding:var(--margin);white-space:nowrap;text-overflow:ellipsis}","",{version:3,sources:["webpack://./apps/files/src/components/TemplatePreview.vue"],names:[],mappings:"AAGC,wCACC,YAAA,CAGD,yCACC,YAAA,CAEA,kBAAA,CACA,QAAA,CACA,qBAAA,CAEA,oFACC,cAAA,CACA,gBAAA,CAGD,iDACC,uBAAA,CAIF,2CACC,aAAA,CACA,eAAA,CAEA,QAAA,CACA,kBAAA,CACA,wBAAA,CACA,wBAAA,CACA,SAAA,CACA,8CAAA,CACA,wCAAA,CAEA,+DACC,iCAAA,CAGD,mDAEC,YAAA,CAIF,yCACC,cAAA,CACA,6CAAA,CAEA,gBAAA,CAID,2EACC,2BAAA,CAEA,WAAA,CACA,yCAAA,CAEA,kBAAA,CAGD,yCACC,eAAA,CAEA,kCAAA,CACA,qBAAA,CACA,kBAAA,CACA,sBAAA",sourcesContent:["\n\n.template-picker {\n\t&__item {\n\t\tdisplay: flex;\n\t}\n\n\t&__label {\n\t\tdisplay: flex;\n\t\t// Align in the middle of the grid\n\t\talign-items: center;\n\t\tflex: 1 1;\n\t\tflex-direction: column;\n\n\t\t&, * {\n\t\t\tcursor: pointer;\n\t\t\tuser-select: none;\n\t\t}\n\n\t\t&::before {\n\t\t\tdisplay: none !important;\n\t\t}\n\t}\n\n\t&__preview {\n\t\tdisplay: block;\n\t\toverflow: hidden;\n\t\t// Stretch so all entries are the same width\n\t\tflex: 1 1;\n\t\twidth: var(--width);\n\t\tmin-height: var(--height);\n\t\tmax-height: var(--height);\n\t\tpadding: 0;\n\t\tborder: var(--border) solid var(--color-border);\n\t\tborder-radius: var(--border-radius-large);\n\n\t\tinput:checked + label > & {\n\t\t\tborder-color: var(--color-primary);\n\t\t}\n\n\t\t&--failed {\n\t\t\t// Make sure to properly center fallback icon\n\t\t\tdisplay: flex;\n\t\t}\n\t}\n\n\t&__image {\n\t\tmax-width: 100%;\n\t\tbackground-color: var(--color-main-background);\n\n\t\tobject-fit: cover;\n\t}\n\n\t// Failed preview, fallback to mime icon\n\t&__preview--failed &__image {\n\t\twidth: calc(var(--margin) * 8);\n\t\t// Center mime icon\n\t\tmargin: auto;\n\t\tbackground-color: transparent !important;\n\n\t\tobject-fit: initial;\n\t}\n\n\t&__title {\n\t\toverflow: hidden;\n\t\t// also count preview border\n\t\tmax-width: calc(var(--width) + 2*2px);\n\t\tpadding: var(--margin);\n\t\twhite-space: nowrap;\n\t\ttext-overflow: ellipsis;\n\t}\n}\n\n"],sourceRoot:""}]);const a=r},1508:(t,e,n)=>{n.d(e,{Z:()=>a});var i=n(87537),o=n.n(i),s=n(23645),r=n.n(s)()(o());r.push([t.id,".app-content[data-v-66068cbb]{display:flex;overflow:hidden;flex-direction:column;max-height:100%}.app-content[data-v-66068cbb]:not(.app-content--hidden)+#app-content{display:none}.files-list__header[data-v-66068cbb]{display:flex;align-content:center;flex:0 0;margin:4px 4px 4px 50px}.files-list__header>*[data-v-66068cbb]{flex:0 0}.files-list__refresh-icon[data-v-66068cbb]{flex:0 0 44px;width:44px;height:44px}.files-list__loading-icon[data-v-66068cbb]{margin:auto}","",{version:3,sources:["webpack://./apps/files/src/views/FilesList.vue"],names:[],mappings:"AACA,8BAEC,YAAA,CACA,eAAA,CACA,qBAAA,CACA,eAAA,CAIA,qEACC,YAAA,CAQD,qCACC,YAAA,CACA,oBAAA,CAEA,QAAA,CAEA,uBAAA,CACA,uCAGC,QAAA,CAGF,2CACC,aAAA,CACA,UAAA,CACA,WAAA,CAED,2CACC,WAAA",sourcesContent:["\n.app-content {\n\t// Virtual list needs to be full height and is scrollable\n\tdisplay: flex;\n\toverflow: hidden;\n\tflex-direction: column;\n\tmax-height: 100%;\n\n\t// TODO: remove after all legacy views are migrated\n\t// Hides the legacy app-content if shown view is not legacy\n\t&:not(&--hidden)::v-deep + #app-content {\n\t\tdisplay: none;\n\t}\n}\n\n$margin: 4px;\n$navigationToggleSize: 50px;\n\n.files-list {\n\t&__header {\n\t\tdisplay: flex;\n\t\talign-content: center;\n\t\t// Do not grow or shrink (vertically)\n\t\tflex: 0 0;\n\t\t// Align with the navigation toggle icon\n\t\tmargin: $margin $margin $margin $navigationToggleSize;\n\t\t> * {\n\t\t\t// Do not grow or shrink (horizontally)\n\t\t\t// Only the breadcrumbs shrinks\n\t\t\tflex: 0 0;\n\t\t}\n\t}\n\t&__refresh-icon {\n\t\tflex: 0 0 44px;\n\t\twidth: 44px;\n\t\theight: 44px;\n\t}\n\t&__loading-icon {\n\t\tmargin: auto;\n\t}\n}\n\n"],sourceRoot:""}]);const a=r},87289:(t,e,n)=>{n.d(e,{Z:()=>a});var i=n(87537),o=n.n(i),s=n(23645),r=n.n(s)()(o());r.push([t.id,".app-navigation[data-v-657a978e] .app-navigation-entry-icon{background-repeat:no-repeat;background-position:center}.app-navigation>ul.app-navigation__list[data-v-657a978e]{padding-bottom:var(--default-grid-baseline, 4px)}.app-navigation-entry__settings[data-v-657a978e]{height:auto !important;overflow:hidden !important;padding-top:0 !important;flex:0 0 auto}","",{version:3,sources:["webpack://./apps/files/src/views/Navigation.vue"],names:[],mappings:"AAEA,4DACC,2BAAA,CACA,0BAAA,CAGD,yDAEC,gDAAA,CAGD,iDACC,sBAAA,CACA,0BAAA,CACA,wBAAA,CAEA,aAAA",sourcesContent:["\n// TODO: remove when https://github.com/nextcloud/nextcloud-vue/pull/3539 is in\n.app-navigation::v-deep .app-navigation-entry-icon {\n\tbackground-repeat: no-repeat;\n\tbackground-position: center;\n}\n\n.app-navigation > ul.app-navigation__list {\n\t// Use flex gap value for more elegant spacing\n\tpadding-bottom: var(--default-grid-baseline, 4px);\n}\n\n.app-navigation-entry__settings {\n\theight: auto !important;\n\toverflow: hidden !important;\n\tpadding-top: 0 !important;\n\t// Prevent shrinking or growing\n\tflex: 0 0 auto;\n}\n"],sourceRoot:""}]);const a=r},35662:(t,e,n)=>{n.d(e,{Z:()=>a});var i=n(87537),o=n.n(i),s=n(23645),r=n.n(s)()(o());r.push([t.id,".setting-link[data-v-76ca5d1f]:hover{text-decoration:underline}","",{version:3,sources:["webpack://./apps/files/src/views/Settings.vue"],names:[],mappings:"AACA,qCACC,yBAAA",sourcesContent:["\n.setting-link:hover {\n\ttext-decoration: underline;\n}\n"],sourceRoot:""}]);const a=r},5103:(t,e,n)=>{n.d(e,{Z:()=>a});var i=n(87537),o=n.n(i),s=n(23645),r=n.n(s)()(o());r.push([t.id,".templates-picker__form[data-v-715b4161]{padding:calc(var(--margin)*2);padding-bottom:0}.templates-picker__form h2[data-v-715b4161]{text-align:center;font-weight:bold;margin:var(--margin) 0 calc(var(--margin)*2)}.templates-picker__list[data-v-715b4161]{display:grid;grid-gap:calc(var(--margin)*2);grid-auto-columns:1fr;max-width:calc(var(--fullwidth)*6);grid-template-columns:repeat(auto-fit, var(--fullwidth));grid-auto-rows:1fr;justify-content:center}.templates-picker__buttons[data-v-715b4161]{display:flex;justify-content:space-between;padding:calc(var(--margin)*2) var(--margin);position:sticky;bottom:0;background-image:linear-gradient(0, var(--gradient-main-background))}.templates-picker__buttons button[data-v-715b4161],.templates-picker__buttons input[type=submit][data-v-715b4161]{height:44px}.templates-picker[data-v-715b4161] .modal-container{position:relative}.templates-picker__loading[data-v-715b4161]{position:absolute;top:0;left:0;justify-content:center;width:100%;height:100%;margin:0;background-color:var(--color-main-background-translucent)}","",{version:3,sources:["webpack://./apps/files/src/views/TemplatePicker.vue"],names:[],mappings:"AAEC,yCACC,6BAAA,CAEA,gBAAA,CAEA,4CACC,iBAAA,CACA,gBAAA,CACA,4CAAA,CAIF,yCACC,YAAA,CACA,8BAAA,CACA,qBAAA,CAEA,kCAAA,CACA,wDAAA,CAEA,kBAAA,CAEA,sBAAA,CAGD,4CACC,YAAA,CACA,6BAAA,CACA,2CAAA,CACA,eAAA,CACA,QAAA,CACA,oEAAA,CAEA,kHACC,WAAA,CAKF,oDACC,iBAAA,CAGD,4CACC,iBAAA,CACA,KAAA,CACA,MAAA,CACA,sBAAA,CACA,UAAA,CACA,WAAA,CACA,QAAA,CACA,yDAAA",sourcesContent:["\n.templates-picker {\n\t&__form {\n\t\tpadding: calc(var(--margin) * 2);\n\t\t// Will be handled by the buttons\n\t\tpadding-bottom: 0;\n\n\t\th2 {\n\t\t\ttext-align: center;\n\t\t\tfont-weight: bold;\n\t\t\tmargin: var(--margin) 0 calc(var(--margin) * 2);\n\t\t}\n\t}\n\n\t&__list {\n\t\tdisplay: grid;\n\t\tgrid-gap: calc(var(--margin) * 2);\n\t\tgrid-auto-columns: 1fr;\n\t\t// We want maximum 5 columns. Putting 6 as we don't count the grid gap. So it will always be lower than 6\n\t\tmax-width: calc(var(--fullwidth) * 6);\n\t\tgrid-template-columns: repeat(auto-fit, var(--fullwidth));\n\t\t// Make sure all rows are the same height\n\t\tgrid-auto-rows: 1fr;\n\t\t// Center the columns set\n\t\tjustify-content: center;\n\t}\n\n\t&__buttons {\n\t\tdisplay: flex;\n\t\tjustify-content: space-between;\n\t\tpadding: calc(var(--margin) * 2) var(--margin);\n\t\tposition: sticky;\n\t\tbottom: 0;\n\t\tbackground-image: linear-gradient(0, var(--gradient-main-background));\n\n\t\tbutton, input[type='submit'] {\n\t\t\theight: 44px;\n\t\t}\n\t}\n\n\t// Make sure we're relative for the loading emptycontent on top\n\t::v-deep .modal-container {\n\t\tposition: relative;\n\t}\n\n\t&__loading {\n\t\tposition: absolute;\n\t\ttop: 0;\n\t\tleft: 0;\n\t\tjustify-content: center;\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\tmargin: 0;\n\t\tbackground-color: var(--color-main-background-translucent);\n\t}\n}\n\n"],sourceRoot:""}]);const a=r},37020:(t,e,n)=>{n.d(e,{Z:()=>a});var i=n(87537),o=n.n(i),s=n(23645),r=n.n(s)()(o());r.push([t.id,"\n/* @keyframes preview-gradient-fade {\n    0% {\n        opacity: 1;\n    }\n    50% {\n        opacity: 0.5;\n    }\n    100% {\n        opacity: 1;\n    }\n} */\n","",{version:3,sources:["webpack://./apps/files/src/components/FileEntry.vue"],names:[],mappings:";AA6mBA;;;;;;;;;;GAUA",sourcesContent:["\x3c!--\n  - @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n  -\n  - @author John Molakvoæ <skjnldsv@protonmail.com>\n  -\n  - @license GNU AGPL version 3 or any later version\n  -\n  - This program is free software: you can redistribute it and/or modify\n  - it under the terms of the GNU Affero General Public License as\n  - published by the Free Software Foundation, either version 3 of the\n  - License, or (at your option) any later version.\n  -\n  - This program is distributed in the hope that it will be useful,\n  - but WITHOUT ANY WARRANTY; without even the implied warranty of\n  - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n  - GNU Affero General Public License for more details.\n  -\n  - You should have received a copy of the GNU Affero General Public License\n  - along with this program. If not, see <http://www.gnu.org/licenses/>.\n  -\n  --\x3e\n\n<template>\n\t<Fragment>\n\t\t<td class=\"files-list__row-checkbox\">\n\t\t\t<NcCheckboxRadioSwitch v-if=\"active\"\n\t\t\t\t:aria-label=\"t('files', 'Select the row for {displayName}', { displayName })\"\n\t\t\t\t:checked=\"selectedFiles\"\n\t\t\t\t:value=\"fileid\"\n\t\t\t\tname=\"selectedFiles\"\n\t\t\t\t@update:checked=\"onSelectionChange\" />\n\t\t</td>\n\n\t\t\x3c!-- Link to file --\x3e\n\t\t<td class=\"files-list__row-name\">\n\t\t\t<a ref=\"name\" v-bind=\"linkTo\" @click=\"execDefaultAction\">\n\t\t\t\t\x3c!-- Icon or preview --\x3e\n\t\t\t\t<span class=\"files-list__row-icon\">\n\t\t\t\t\t<FolderIcon v-if=\"source.type === 'folder'\" />\n\n\t\t\t\t\t\x3c!-- Decorative image, should not be aria documented --\x3e\n\t\t\t\t\t<span v-else-if=\"previewUrl && !backgroundFailed\"\n\t\t\t\t\t\tref=\"previewImg\"\n\t\t\t\t\t\tclass=\"files-list__row-icon-preview\"\n\t\t\t\t\t\t:style=\"{ backgroundImage }\" />\n\n\t\t\t\t\t<span v-else-if=\"mimeIconUrl\"\n\t\t\t\t\t\tclass=\"files-list__row-icon-preview files-list__row-icon-preview--mime\"\n\t\t\t\t\t\t:style=\"{ backgroundImage: mimeIconUrl }\" />\n\n\t\t\t\t\t<FileIcon v-else />\n\n\t\t\t\t\t\x3c!-- Favorite icon --\x3e\n\t\t\t\t\t<span v-if=\"isFavorite\"\n\t\t\t\t\t\tclass=\"files-list__row-icon-favorite\"\n\t\t\t\t\t\t:aria-label=\"t('files', 'Favorite')\">\n\t\t\t\t\t\t<StarIcon aria-hidden=\"true\" :size=\"20\" />\n\t\t\t\t\t</span>\n\t\t\t\t</span>\n\n\t\t\t\t\x3c!-- File name --\x3e\n\t\t\t\t<span class=\"files-list__row-name-text\">{{ displayName }}</span>\n\t\t\t</a>\n\t\t</td>\n\n\t\t\x3c!-- Actions --\x3e\n\t\t<td :class=\"`files-list__row-actions-${uniqueId}`\" class=\"files-list__row-actions\">\n\t\t\t\x3c!-- Inline actions --\x3e\n\t\t\t\x3c!-- TODO: implement CustomElementRender --\x3e\n\n\t\t\t\x3c!-- Menu actions --\x3e\n\t\t\t<NcActions v-if=\"active\"\n\t\t\t\tref=\"actionsMenu\"\n\t\t\t\t:boundaries-element=\"boundariesElement\"\n\t\t\t\t:container=\"boundariesElement\"\n\t\t\t\t:disabled=\"source._loading\"\n\t\t\t\t:force-title=\"true\"\n\t\t\t\t:force-menu=\"true\"\n\t\t\t\t:inline=\"enabledInlineActions.length\"\n\t\t\t\t:open.sync=\"openedMenu\">\n\t\t\t\t<NcActionButton v-for=\"action in enabledMenuActions\"\n\t\t\t\t\t:key=\"action.id\"\n\t\t\t\t\t:class=\"'files-list__row-action-' + action.id\"\n\t\t\t\t\t@click=\"onActionClick(action)\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<NcLoadingIcon v-if=\"loading === action.id\" :size=\"18\" />\n\t\t\t\t\t\t<CustomSvgIconRender v-else :svg=\"action.iconSvgInline([source], currentView)\" />\n\t\t\t\t\t</template>\n\t\t\t\t\t{{ action.displayName([source], currentView) }}\n\t\t\t\t</NcActionButton>\n\t\t\t</NcActions>\n\t\t</td>\n\n\t\t\x3c!-- Size --\x3e\n\t\t<td v-if=\"isSizeAvailable\"\n\t\t\t:style=\"{ opacity: sizeOpacity }\"\n\t\t\tclass=\"files-list__row-size\"\n\t\t\t@click=\"openDetailsIfAvailable\">\n\t\t\t<span>{{ size }}</span>\n\t\t</td>\n\n\t\t\x3c!-- View columns --\x3e\n\t\t<td v-for=\"column in columns\"\n\t\t\t:key=\"column.id\"\n\t\t\t:class=\"`files-list__row-${currentView?.id}-${column.id}`\"\n\t\t\tclass=\"files-list__row-column-custom\"\n\t\t\t@click=\"openDetailsIfAvailable\">\n\t\t\t<CustomElementRender v-if=\"active\"\n\t\t\t\t:current-view=\"currentView\"\n\t\t\t\t:render=\"column.render\"\n\t\t\t\t:source=\"source\" />\n\t\t</td>\n\t</Fragment>\n</template>\n\n<script lang='ts'>\nimport { debounce } from 'debounce'\nimport { formatFileSize } from '@nextcloud/files'\nimport { Fragment } from 'vue-frag'\nimport { join } from 'path'\nimport { showError, showSuccess } from '@nextcloud/dialogs'\nimport { translate } from '@nextcloud/l10n'\nimport CancelablePromise from 'cancelable-promise'\nimport FileIcon from 'vue-material-design-icons/File.vue'\nimport FolderIcon from 'vue-material-design-icons/Folder.vue'\nimport NcActionButton from '@nextcloud/vue/dist/Components/NcActionButton.js'\nimport NcActions from '@nextcloud/vue/dist/Components/NcActions.js'\nimport NcCheckboxRadioSwitch from '@nextcloud/vue/dist/Components/NcCheckboxRadioSwitch.js'\nimport NcLoadingIcon from '@nextcloud/vue/dist/Components/NcLoadingIcon.js'\nimport StarIcon from 'vue-material-design-icons/Star.vue'\nimport Vue from 'vue'\n\nimport { ACTION_DETAILS } from '../actions/sidebarAction.ts'\nimport { getFileActions } from '../services/FileAction.ts'\nimport { hashCode } from '../utils/hashUtils.ts'\nimport { isCachedPreview } from '../services/PreviewService.ts'\nimport { useActionsMenuStore } from '../store/actionsmenu.ts'\nimport { useFilesStore } from '../store/files.ts'\nimport { useKeyboardStore } from '../store/keyboard.ts'\nimport { useSelectionStore } from '../store/selection.ts'\nimport { useUserConfigStore } from '../store/userconfig.ts'\nimport CustomElementRender from './CustomElementRender.vue'\nimport CustomSvgIconRender from './CustomSvgIconRender.vue'\nimport logger from '../logger.js'\n\n// The registered actions list\nconst actions = getFileActions()\n\nexport default Vue.extend({\n\tname: 'FileEntry',\n\n\tcomponents: {\n\t\tCustomElementRender,\n\t\tCustomSvgIconRender,\n\t\tFileIcon,\n\t\tFolderIcon,\n\t\tFragment,\n\t\tNcActionButton,\n\t\tNcActions,\n\t\tNcCheckboxRadioSwitch,\n\t\tNcLoadingIcon,\n\t\tStarIcon,\n\t},\n\n\tprops: {\n\t\tactive: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tisSizeAvailable: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tsource: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t\tindex: {\n\t\t\ttype: Number,\n\t\t\trequired: true,\n\t\t},\n\t\tnodes: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t},\n\t\tfilesListWidth: {\n\t\t\ttype: Number,\n\t\t\tdefault: 0,\n\t\t},\n\t},\n\n\tsetup() {\n\t\tconst actionsMenuStore = useActionsMenuStore()\n\t\tconst filesStore = useFilesStore()\n\t\tconst keyboardStore = useKeyboardStore()\n\t\tconst selectionStore = useSelectionStore()\n\t\tconst userConfigStore = useUserConfigStore()\n\t\treturn {\n\t\t\tactionsMenuStore,\n\t\t\tfilesStore,\n\t\t\tkeyboardStore,\n\t\t\tselectionStore,\n\t\t\tuserConfigStore,\n\t\t}\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tbackgroundFailed: false,\n\t\t\tbackgroundImage: '',\n\t\t\tboundariesElement: document.querySelector('.app-content > .files-list'),\n\t\t\tloading: '',\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tuserConfig() {\n\t\t\treturn this.userConfigStore.userConfig\n\t\t},\n\n\t\tcurrentView() {\n\t\t\treturn this.$navigation.active\n\t\t},\n\t\tcolumns() {\n\t\t\t// Hide columns if the list is too small\n\t\t\tif (this.filesListWidth < 512) {\n\t\t\t\treturn []\n\t\t\t}\n\t\t\treturn this.currentView?.columns || []\n\t\t},\n\n\t\tdir() {\n\t\t\t// Remove any trailing slash but leave root slash\n\t\t\treturn (this.$route?.query?.dir || '/').replace(/^(.+)\\/$/, '$1')\n\t\t},\n\t\tfileid() {\n\t\t\treturn this.source?.fileid?.toString?.()\n\t\t},\n\t\tdisplayName() {\n\t\t\treturn this.source.attributes.displayName\n\t\t\t\t|| this.source.basename\n\t\t},\n\n\t\tsize() {\n\t\t\tconst size = parseInt(this.source.size, 10) || 0\n\t\t\tif (typeof size !== 'number' || size < 0) {\n\t\t\t\treturn this.t('files', 'Pending')\n\t\t\t}\n\t\t\treturn formatFileSize(size, true)\n\t\t},\n\t\tsizeOpacity() {\n\t\t\tconst size = parseInt(this.source.size, 10) || 0\n\t\t\tif (!size || size < 0) {\n\t\t\t\treturn 1\n\t\t\t}\n\n\t\t\t// Whatever theme is active, the contrast will pass WCAG AA\n\t\t\t// with color main text over main background and an opacity of 0.7\n\t\t\tconst minOpacity = 0.7\n\t\t\tconst maxOpacitySize = 10 * 1024 * 1024\n\t\t\treturn minOpacity + (1 - minOpacity) * Math.pow((this.source.size / maxOpacitySize), 2)\n\t\t},\n\n\t\tlinkTo() {\n\t\t\tif (this.source.type === 'folder') {\n\t\t\t\tconst to = { ...this.$route, query: { dir: join(this.dir, this.source.basename) } }\n\t\t\t\treturn {\n\t\t\t\t\tis: 'router-link',\n\t\t\t\t\ttitle: this.t('files', 'Open folder {name}', { name: this.displayName }),\n\t\t\t\t\tto,\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.enabledDefaultActions.length > 0) {\n\t\t\t\tconst action = this.enabledDefaultActions[0]\n\t\t\t\tconst displayName = action.displayName([this.source], this.currentView)\n\t\t\t\treturn {\n\t\t\t\t\ttitle: displayName,\n\t\t\t\t\trole: 'button',\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\thref: this.source.source,\n\t\t\t\t// TODO: Use first action title ?\n\t\t\t\ttitle: this.t('files', 'Download file {name}', { name: this.displayName }),\n\t\t\t}\n\t\t},\n\n\t\tselectedFiles() {\n\t\t\treturn this.selectionStore.selected\n\t\t},\n\t\tisSelected() {\n\t\t\treturn this.selectedFiles.includes(this.source?.fileid?.toString?.())\n\t\t},\n\n\t\tcropPreviews() {\n\t\t\treturn this.userConfig.crop_image_previews\n\t\t},\n\t\tpreviewUrl() {\n\t\t\ttry {\n\t\t\t\tconst url = new URL(window.location.origin + this.source.attributes.previewUrl)\n\t\t\t\t// Request tiny previews\n\t\t\t\turl.searchParams.set('x', '32')\n\t\t\t\turl.searchParams.set('y', '32')\n\t\t\t\t// Handle cropping\n\t\t\t\turl.searchParams.set('a', this.cropPreviews === true ? '0' : '1')\n\t\t\t\treturn url.href\n\t\t\t} catch (e) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t},\n\t\tmimeIconUrl() {\n\t\t\tconst mimeType = this.source.mime || 'application/octet-stream'\n\t\t\tconst mimeIconUrl = window.OC?.MimeType?.getIconUrl?.(mimeType)\n\t\t\tif (mimeIconUrl) {\n\t\t\t\treturn `url(${mimeIconUrl})`\n\t\t\t}\n\t\t\treturn ''\n\t\t},\n\n\t\tenabledActions() {\n\t\t\treturn actions\n\t\t\t\t.filter(action => !action.enabled || action.enabled([this.source], this.currentView))\n\t\t\t\t.sort((a, b) => (a.order || 0) - (b.order || 0))\n\t\t},\n\t\tenabledInlineActions() {\n\t\t\tif (this.filesListWidth < 768) {\n\t\t\t\treturn []\n\t\t\t}\n\t\t\treturn this.enabledActions.filter(action => action?.inline?.(this.source, this.currentView))\n\t\t},\n\t\tenabledMenuActions() {\n\t\t\tif (this.filesListWidth < 768) {\n\t\t\t\t// If we have a default action, do not render the first one\n\t\t\t\tif (this.enabledDefaultActions.length > 0) {\n\t\t\t\t\treturn this.enabledActions.slice(1)\n\t\t\t\t}\n\t\t\t\treturn this.enabledActions\n\t\t\t}\n\n\t\t\tconst actions = [\n\t\t\t\t...this.enabledInlineActions,\n\t\t\t\t...this.enabledActions.filter(action => !action.inline),\n\t\t\t]\n\n\t\t\t// If we have a default action, do not render the first one\n\t\t\tif (this.enabledDefaultActions.length > 0) {\n\t\t\t\treturn actions.slice(1)\n\t\t\t}\n\n\t\t\treturn actions\n\t\t},\n\t\tenabledDefaultActions() {\n\t\t\treturn [\n\t\t\t\t...this.enabledActions.filter(action => action.default),\n\t\t\t]\n\t\t},\n\t\topenedMenu: {\n\t\t\tget() {\n\t\t\t\treturn this.actionsMenuStore.opened === this.uniqueId\n\t\t\t},\n\t\t\tset(opened) {\n\t\t\t\tthis.actionsMenuStore.opened = opened ? this.uniqueId : null\n\t\t\t},\n\t\t},\n\n\t\tuniqueId() {\n\t\t\treturn hashCode(this.source.source)\n\t\t},\n\n\t\tisFavorite() {\n\t\t\treturn this.source.attributes.favorite === 1\n\t\t},\n\t},\n\n\twatch: {\n\t\tactive(active, before) {\n\t\t\tif (active === false && before === true) {\n\t\t\t\tthis.resetState()\n\n\t\t\t\t// When the row is not active anymore\n\t\t\t\t// remove the display from the row to prevent\n\t\t\t\t// keyboard interaction with it.\n\t\t\t\tthis.$el.parentNode.style.display = 'none'\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// Restore default tabindex\n\t\t\tthis.$el.parentNode.style.display = ''\n\t\t},\n\n\t\t/**\n\t\t * When the source changes, reset the preview\n\t\t * and fetch the new one.\n\t\t */\n\t\tpreviewUrl() {\n\t\t\tthis.clearImg()\n\t\t\tthis.debounceIfNotCached()\n\t\t},\n\t},\n\n\t/**\n\t * The row is mounted once and reused as we scroll.\n\t */\n\tmounted() {\n\t\t// ⚠ Init the debounce function on mount and\n\t\t// not when the module is imported  to\n\t\t// avoid sharing between recycled components\n\t\tthis.debounceGetPreview = debounce(function() {\n\t\t\tthis.fetchAndApplyPreview()\n\t\t}, 150, false)\n\n\t\t// Fetch the preview on init\n\t\tthis.debounceIfNotCached()\n\n\t\t// Right click watcher on tr\n\t\tthis.$el.parentNode?.addEventListener?.('contextmenu', this.onRightClick)\n\t},\n\n\tbeforeDestroy() {\n\t\tthis.resetState()\n\t},\n\n\tmethods: {\n\t\tasync debounceIfNotCached() {\n\t\t\tif (!this.previewUrl) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// Check if we already have this preview cached\n\t\t\tconst isCached = await isCachedPreview(this.previewUrl)\n\t\t\tif (isCached) {\n\t\t\t\tthis.backgroundImage = `url(${this.previewUrl})`\n\t\t\t\tthis.backgroundFailed = false\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// We don't have this preview cached or it expired, requesting it\n\t\t\tthis.debounceGetPreview()\n\t\t},\n\n\t\tfetchAndApplyPreview() {\n\t\t\t// Ignore if no preview\n\t\t\tif (!this.previewUrl) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// If any image is being processed, reset it\n\t\t\tif (this.previewPromise) {\n\t\t\t\tthis.clearImg()\n\t\t\t}\n\n\t\t\t// Store the promise to be able to cancel it\n\t\t\tthis.previewPromise = new CancelablePromise((resolve, reject, onCancel) => {\n\t\t\t\tconst img = new Image()\n\t\t\t\t// If active, load the preview with higher priority\n\t\t\t\timg.fetchpriority = this.active ? 'high' : 'auto'\n\t\t\t\timg.onload = () => {\n\t\t\t\t\tthis.backgroundImage = `url(${this.previewUrl})`\n\t\t\t\t\tthis.backgroundFailed = false\n\t\t\t\t\tresolve(img)\n\t\t\t\t}\n\t\t\t\timg.onerror = () => {\n\t\t\t\t\tthis.backgroundFailed = true\n\t\t\t\t\treject(img)\n\t\t\t\t}\n\t\t\t\timg.src = this.previewUrl\n\n\t\t\t\t// Image loading has been canceled\n\t\t\t\tonCancel(() => {\n\t\t\t\t\timg.onerror = null\n\t\t\t\t\timg.onload = null\n\t\t\t\t\timg.src = ''\n\t\t\t\t})\n\t\t\t})\n\t\t},\n\n\t\tresetState() {\n\t\t\t// Reset loading state\n\t\t\tthis.loading = ''\n\n\t\t\t// Reset the preview\n\t\t\tthis.clearImg()\n\n\t\t\t// Close menu\n\t\t\tthis.openedMenu = false\n\t\t},\n\n\t\tclearImg() {\n\t\t\tthis.backgroundImage = ''\n\t\t\tthis.backgroundFailed = false\n\n\t\t\tif (this.previewPromise) {\n\t\t\t\tthis.previewPromise.cancel()\n\t\t\t\tthis.previewPromise = null\n\t\t\t}\n\t\t},\n\n\t\tasync onActionClick(action) {\n\t\t\tconst displayName = action.displayName([this.source], this.currentView)\n\t\t\ttry {\n\t\t\t\t// Set the loading marker\n\t\t\t\tthis.loading = action.id\n\t\t\t\tVue.set(this.source, '_loading', true)\n\n\t\t\t\tconst success = await action.exec(this.source, this.currentView, this.dir)\n\n\t\t\t\t// If the action returns null, we stay silent\n\t\t\t\tif (success === null) {\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\tif (success) {\n\t\t\t\t\tshowSuccess(this.t('files', '\"{displayName}\" action executed successfully', { displayName }))\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tshowError(this.t('files', '\"{displayName}\" action failed', { displayName }))\n\t\t\t} catch (e) {\n\t\t\t\tlogger.error('Error while executing action', { action, e })\n\t\t\t\tshowError(this.t('files', '\"{displayName}\" action failed', { displayName }))\n\t\t\t} finally {\n\t\t\t\t// Reset the loading marker\n\t\t\t\tthis.loading = ''\n\t\t\t\tVue.set(this.source, '_loading', false)\n\t\t\t}\n\t\t},\n\t\texecDefaultAction(event) {\n\t\t\t// Do not execute the default action on the folder, navigate instead\n\t\t\tif (this.source.type === 'folder') {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tif (this.enabledDefaultActions.length > 0) {\n\t\t\t\tevent.preventDefault()\n\t\t\t\tevent.stopPropagation()\n\t\t\t\t// Execute the first default action if any\n\t\t\t\tthis.enabledDefaultActions[0].exec(this.source, this.currentView, this.dir)\n\t\t\t}\n\t\t},\n\n\t\topenDetailsIfAvailable(event) {\n\t\t\tconst detailsAction = this.enabledDefaultActions.find(action => action.id === ACTION_DETAILS)\n\t\t\tif (detailsAction) {\n\t\t\t\tevent.preventDefault()\n\t\t\t\tevent.stopPropagation()\n\t\t\t\tdetailsAction.exec(this.source, this.currentView)\n\t\t\t}\n\t\t},\n\n\t\tonSelectionChange(selection) {\n\t\t\tconst newSelectedIndex = this.index\n\t\t\tconst lastSelectedIndex = this.selectionStore.lastSelectedIndex\n\n\t\t\t// Get the last selected and select all files in between\n\t\t\tif (this.keyboardStore?.shiftKey && lastSelectedIndex !== null) {\n\t\t\t\tconst isAlreadySelected = this.selectedFiles.includes(this.fileid)\n\n\t\t\t\tconst start = Math.min(newSelectedIndex, lastSelectedIndex)\n\t\t\t\tconst end = Math.max(lastSelectedIndex, newSelectedIndex)\n\n\t\t\t\tconst lastSelection = this.selectionStore.lastSelection\n\t\t\t\tconst filesToSelect = this.nodes\n\t\t\t\t\t.map(file => file.fileid?.toString?.())\n\t\t\t\t\t.slice(start, end + 1)\n\n\t\t\t\t// If already selected, update the new selection _without_ the current file\n\t\t\t\tconst selection = [...lastSelection, ...filesToSelect]\n\t\t\t\t\t.filter(fileId => !isAlreadySelected || fileId !== this.fileid)\n\n\t\t\t\tlogger.debug('Shift key pressed, selecting all files in between', { start, end, filesToSelect, isAlreadySelected })\n\t\t\t\t// Keep previous lastSelectedIndex to be use for further shift selections\n\t\t\t\tthis.selectionStore.set(selection)\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tlogger.debug('Updating selection', { selection })\n\t\t\tthis.selectionStore.set(selection)\n\t\t\tthis.selectionStore.setLastIndex(newSelectedIndex)\n\t\t},\n\n\t\t// Open the actions menu on right click\n\t\tonRightClick(event) {\n\t\t\t// If already opened, fallback to default browser\n\t\t\tif (this.openedMenu) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// If the clicked row is in the selection, open global menu\n\t\t\tconst isMoreThanOneSelected = this.selectedFiles.length > 1\n\t\t\tthis.actionsMenuStore.opened = this.isSelected && isMoreThanOneSelected ? 'global' : this.uniqueId\n\n\t\t\t// Prevent any browser defaults\n\t\t\tevent.preventDefault()\n\t\t\tevent.stopPropagation()\n\t\t},\n\n\t\tt: translate,\n\t\tformatFileSize,\n\t},\n})\n<\/script>\n\n<style scoped lang='scss'>\n/* Hover effect on tbody lines only */\ntr {\n\t&:hover,\n\t&:focus,\n\t&:active {\n\t\tbackground-color: var(--color-background-dark);\n\t}\n}\n\n/* Preview not loaded animation effect */\n.files-list__row-icon-preview:not([style*='background']) {\n    background: var(--color-loading-dark);\n\t// animation: preview-gradient-fade 1.2s ease-in-out infinite;\n}\n</style>\n\n<style>\n/* @keyframes preview-gradient-fade {\n    0% {\n        opacity: 1;\n    }\n    50% {\n        opacity: 0.5;\n    }\n    100% {\n        opacity: 1;\n    }\n} */\n</style>\n"],sourceRoot:""}]);const a=r}},i={};function o(t){var e=i[t];if(void 0!==e)return e.exports;var s=i[t]={id:t,loaded:!1,exports:{}};return n[t].call(s.exports,s,s.exports,o),s.loaded=!0,s.exports}o.m=n,e=[],o.O=(t,n,i,s)=>{if(!n){var r=1/0;for(d=0;d<e.length;d++){n=e[d][0],i=e[d][1],s=e[d][2];for(var a=!0,l=0;l<n.length;l++)(!1&s||r>=s)&&Object.keys(o.O).every((t=>o.O[t](n[l])))?n.splice(l--,1):(a=!1,s<r&&(r=s));if(a){e.splice(d--,1);var c=i();void 0!==c&&(t=c)}}return t}s=s||0;for(var d=e.length;d>0&&e[d-1][2]>s;d--)e[d]=e[d-1];e[d]=[n,i,s]},o.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return o.d(e,{a:e}),e},o.d=(t,e)=>{for(var n in e)o.o(e,n)&&!o.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),o.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),o.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},o.nmd=t=>(t.paths=[],t.children||(t.children=[]),t),o.j=2181,(()=>{o.b=document.baseURI||self.location.href;var t={2181:0};o.O.j=e=>0===t[e];var e=(e,n)=>{var i,s,r=n[0],a=n[1],l=n[2],c=0;if(r.some((e=>0!==t[e]))){for(i in a)o.o(a,i)&&(o.m[i]=a[i]);if(l)var d=l(o)}for(e&&e(n);c<r.length;c++)s=r[c],o.o(t,s)&&t[s]&&t[s][0](),t[s]=0;return o.O(d)},n=self.webpackChunknextcloud=self.webpackChunknextcloud||[];n.forEach(e.bind(null,0)),n.push=e.bind(null,n.push.bind(n))})(),o.nc=void 0;var s=o.O(void 0,[7874],(()=>o(9570)));s=o.O(s)})();
-//# sourceMappingURL=files-main.js.map?v=0a5d904187d2f3ea5928
\ No newline at end of file
+(()=>{"use strict";var e,n={9570:(e,n,i)=>{var o=i(17499),s=i(79954),r=i(31352),a=i(79753),l=i(45994);const c=function(){var t,e,n,i;const o=(null===(t=OCA)||void 0===t||null===(e=t.Files)||void 0===e||null===(n=e.App)||void 0===n||null===(i=n.currentFileList)||void 0===i?void 0:i.dirInfo)||{path:"/",name:""};return"".concat(o.path,"/").concat(o.name).replace(/\/\//gi,"/")};var d=i(4820),u=i(20144),p=i(62520),h=i(64024),f=i(93455),A=i.n(f),v=i(70110),m=i.n(v);const g=256,w={name:"TemplatePreview",inheritAttrs:!1,props:{basename:{type:String,required:!0},checked:{type:Boolean,default:!1},fileid:{type:[String,Number],required:!0},filename:{type:String,required:!0},previewUrl:{type:String,default:null},hasPreview:{type:Boolean,default:!0},mime:{type:String,required:!0},ratio:{type:Number,default:null}},data:()=>({failedPreview:!1}),computed:{nameWithoutExt(){return this.basename.indexOf(".")>-1?this.basename.split(".").slice(0,-1).join("."):this.basename},id(){return"template-picker-".concat(this.fileid)},realPreviewUrl(){return this.failedPreview&&this.mimeIcon?this.mimeIcon:this.previewUrl?this.previewUrl:(0,l.ts)()?(0,a.generateUrl)("/core/preview?fileId=".concat(this.fileid,"&x=").concat(g,"&y=").concat(g,"&a=1")):(0,a.generateUrl)("/apps/files_sharing/publicpreview/".concat(document.getElementById("sharingToken")&&document.getElementById("sharingToken").value,"?fileId=").concat(this.fileid,"&file=").concat(function(t){const e=(t.startsWith("/")?t:"/".concat(t)).split("/");let n="";return e.forEach((t=>{""!==t&&(n+="/"+encodeURIComponent(t))})),n}(this.filename),"&x=").concat(g,"&y=").concat(g,"&a=1"))},mimeIcon(){return OC.MimeType.getIconUrl(this.mime)}},methods:{onCheck(){this.$emit("check",this.fileid)},onFailure(){this.failedPreview=!0}}};var b=i(93379),C=i.n(b),y=i(7795),_=i.n(y),x=i(90569),S=i.n(x),k=i(3565),I=i.n(k),N=i(19216),E=i.n(N),F=i(44589),B=i.n(F),P=i(3491),D={};D.styleTagTransform=B(),D.setAttributes=I(),D.insert=S().bind(null,"head"),D.domAPI=_(),D.insertStyleElement=E(),C()(P.Z,D),P.Z&&P.Z.locals&&P.Z.locals;var T=i(51900);const z=(0,T.Z)(w,(function(){var t=this,e=t._self._c;return e("li",{staticClass:"template-picker__item"},[e("input",{staticClass:"radio",attrs:{id:t.id,type:"radio",name:"template-picker"},domProps:{checked:t.checked},on:{change:t.onCheck}}),t._v(" "),e("label",{staticClass:"template-picker__label",attrs:{for:t.id}},[e("div",{staticClass:"template-picker__preview",class:t.failedPreview?"template-picker__preview--failed":""},[e("img",{staticClass:"template-picker__image",attrs:{src:t.realPreviewUrl,alt:"",draggable:"false"},on:{error:t.onFailure}})]),t._v(" "),e("span",{staticClass:"template-picker__title"},[t._v("\n\t\t\t"+t._s(t.nameWithoutExt)+"\n\t\t")])])])}),[],!1,null,"6c072a31",null).exports;var L=i(25108);const U={name:"TemplatePicker",components:{NcEmptyContent:A(),NcModal:m(),TemplatePreview:z},props:{logger:{type:Object,required:!0}},data:()=>({checked:-1,loading:!1,name:null,opened:!1,provider:null}),computed:{nameWithoutExt(){return this.name.indexOf(".")>-1?this.name.split(".").slice(0,-1).join("."):this.name},emptyTemplate(){var e,n;return{basename:t("files","Blank"),fileid:-1,filename:this.t("files","Blank"),hasPreview:!1,mime:(null===(e=this.provider)||void 0===e?void 0:e.mimetypes[0])||(null===(n=this.provider)||void 0===n?void 0:n.mimetypes)}},selectedTemplate(){return this.provider.templates.find((t=>t.fileid===this.checked))},style(){return{"--margin":"8px","--width":"160px","--border":"2px","--fullwidth":"180px","--height":this.provider.ratio?Math.round(160/this.provider.ratio)+"px":null}}},methods:{async open(t,e){this.checked=this.emptyTemplate.fileid,this.name=t,this.provider=e;const n=(await async function(){return(await d.default.get((0,a.generateOcsUrl)("apps/files/api/v1/templates"))).data.ocs.data}()).find((t=>t.app===e.app&&t.label===e.label));if(null===n)throw new Error("Failed to match provider in results");this.provider=n,0!==n.templates.length?this.opened=!0:this.onSubmit()},close(){this.checked=this.emptyTemplate.fileid,this.loading=!1,this.name=null,this.opened=!1,this.provider=null},onCheck(t){this.checked=t},async onSubmit(){var t,e,n;this.loading=!0;const i=c(),o=null===(t=OCA)||void 0===t||null===(e=t.Files)||void 0===e||null===(n=e.App)||void 0===n?void 0:n.currentFileList;var s,r;this.nameWithoutExt===this.name&&(this.logger.debug("Fixed invalid filename",{name:this.name,extension:null===(s=this.provider)||void 0===s?void 0:s.extension}),this.name=this.name+(null===(r=this.provider)||void 0===r?void 0:r.extension));try{var l,u;const t=await async function(t,e,n){return(await d.default.post((0,a.generateOcsUrl)("apps/files/api/v1/templates/create"),{filePath:t,templatePath:e,templateType:n})).data.ocs.data}((0,p.normalize)("".concat(i,"/").concat(this.name)),null===(l=this.selectedTemplate)||void 0===l?void 0:l.filename,null===(u=this.selectedTemplate)||void 0===u?void 0:u.templateType);this.logger.debug("Created new file",t);const e=await(null==o?void 0:o.addAndFetchFileInfo(this.name).then(((t,e)=>e))),n=new OCA.Files.FileInfoModel(e,{filesClient:null==o?void 0:o.filesClient}),s=OCA.Files.fileActions.getDefaultFileAction(t.mime,"file",OC.PERMISSION_ALL);s&&s.action(t.basename,{$file:null==o?void 0:o.findFileEl(this.name),dir:i,fileList:o,fileActions:null==o?void 0:o.fileActions,fileInfoModel:n}),this.close()}catch(t){this.logger.error("Error while creating the new file from template"),L.error(t),(0,h.x2)(this.t("files","Unable to create new file from template"))}finally{this.loading=!1}}}};var V=i(5103),O={};O.styleTagTransform=B(),O.setAttributes=I(),O.insert=S().bind(null,"head"),O.domAPI=_(),O.insertStyleElement=E(),C()(V.Z,O),V.Z&&V.Z.locals&&V.Z.locals;const Z=(0,T.Z)(U,(function(){var t=this,e=t._self._c;return t.opened?e("NcModal",{staticClass:"templates-picker",attrs:{"clear-view-delay":-1,size:"normal"},on:{close:t.close}},[e("form",{staticClass:"templates-picker__form",style:t.style,on:{submit:function(e){return e.preventDefault(),e.stopPropagation(),t.onSubmit.apply(null,arguments)}}},[e("h2",[t._v(t._s(t.t("files","Pick a template for {name}",{name:t.nameWithoutExt})))]),t._v(" "),e("ul",{staticClass:"templates-picker__list"},[e("TemplatePreview",t._b({attrs:{checked:t.checked===t.emptyTemplate.fileid},on:{check:t.onCheck}},"TemplatePreview",t.emptyTemplate,!1)),t._v(" "),t._l(t.provider.templates,(function(n){return e("TemplatePreview",t._b({key:n.fileid,attrs:{checked:t.checked===n.fileid,ratio:t.provider.ratio},on:{check:t.onCheck}},"TemplatePreview",n,!1))}))],2),t._v(" "),e("div",{staticClass:"templates-picker__buttons"},[e("button",{on:{click:t.close}},[t._v("\n\t\t\t\t"+t._s(t.t("files","Cancel"))+"\n\t\t\t")]),t._v(" "),e("input",{staticClass:"primary",attrs:{type:"submit","aria-label":t.t("files","Create a new file with the selected template")},domProps:{value:t.t("files","Create")}})])]),t._v(" "),t.loading?e("NcEmptyContent",{staticClass:"templates-picker__loading",attrs:{icon:"icon-loading"}},[t._v("\n\t\t"+t._s(t.t("files","Creating file"))+"\n\t")]):t._e()],1):t._e()}),[],!1,null,"715b4161",null).exports,q=(0,o.IY)().setApp("files").detectUser().build();u.default.mixin({methods:{t:r.Iu,n:r.uN}});const R=document.createElement("div");R.id="template-picker",document.body.appendChild(R);let j=(0,s.j)("files","templates",[]),M=(0,s.j)("files","templates_path",!1);q.debug("Templates providers",j),q.debug("Templates folder",{templatesPath:M});const $=new(u.default.extend(Z))({name:"TemplatePicker",propsData:{logger:q}});$.$mount("#template-picker"),window.addEventListener("DOMContentLoaded",(function(){if(!M){q.debug("Templates folder not initialized");const t={attach(t){t.addMenuEntry({id:"template-init",displayName:(0,r.Iu)("files","Set up templates folder"),templateName:(0,r.Iu)("files","Templates"),iconClass:"icon-template-add",fileType:"file",actionLabel:(0,r.Iu)("files","Create new templates folder"),actionHandler(e){W(e),t.removeMenuEntry("template-init")}})}};OC.Plugins.register("OCA.Files.NewFileMenu",t)}})),j.forEach(((t,e)=>{const n={attach(n){const i=n.fileList;"files"!==i.id&&"files.public"!==i.id||n.addMenuEntry({id:"template-new-".concat(t.app,"-").concat(e),displayName:t.label,templateName:t.label+t.extension,iconClass:t.iconClass||"icon-file",fileType:"file",actionLabel:t.actionLabel,actionHandler(e){$.open(e,t)}})}};OC.Plugins.register("OCA.Files.NewFileMenu",n)}));const W=async function(t){const e=(c()+"/".concat(t)).replace("//","/");try{q.debug("Initializing the templates directory",{templatePath:e});const t=await d.default.post((0,a.generateOcsUrl)("apps/files/api/v1/templates/path"),{templatePath:e,copySystemTemplates:!0});OCA.Files.App.currentFileList.changeDirectory(e,!0,!0),j=t.data.ocs.data.templates,M=t.data.ocs.data.template_path}catch(t){q.error("Unable to initialize the templates directory"),(0,h.x2)((0,r.Iu)("files","Unable to initialize the templates directory"))}};var G=i(78595);!function(){const t={attach(t){(0,G.Ld)("nextcloud:unified-search.search",(e=>{let{query:n}=e;t.setFilter(n)})),(0,G.Ld)("nextcloud:unified-search.reset",(()=>{this.query=null,t.setFilter("")}))}};window.OC.Plugins.register("OCA.Files.FileList",t)}();var H=i(91770),K=i(78510);const Q=(0,o.IY)().setApp("files").detectUser().build();class Y{constructor(t){var e,n,i;e=this,i=void 0,(n=function(t){var e=function(t,e){if("object"!=typeof t||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,"string");if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==typeof e?e:String(e)}(n="_action"))in e?Object.defineProperty(e,n,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[n]=i,this.validateAction(t),this._action=t}get id(){return this._action.id}get displayName(){return this._action.displayName}get iconSvgInline(){return this._action.iconSvgInline}get enabled(){return this._action.enabled}get exec(){return this._action.exec}get execBatch(){return this._action.execBatch}get order(){return this._action.order}get default(){return this._action.default}get inline(){return this._action.inline}get renderInline(){return this._action.renderInline}validateAction(t){if(!t.id||"string"!=typeof t.id)throw new Error("Invalid id");if(!t.displayName||"function"!=typeof t.displayName)throw new Error("Invalid displayName function");if(!t.iconSvgInline||"function"!=typeof t.iconSvgInline)throw new Error("Invalid iconSvgInline function");if(!t.exec||"function"!=typeof t.exec)throw new Error("Invalid exec function");if("enabled"in t&&"function"!=typeof t.enabled)throw new Error("Invalid enabled function");if("execBatch"in t&&"function"!=typeof t.execBatch)throw new Error("Invalid execBatch function");if("order"in t&&"number"!=typeof t.order)throw new Error("Invalid order");if("default"in t&&"boolean"!=typeof t.default)throw new Error("Invalid default");if("inline"in t&&"function"!=typeof t.inline)throw new Error("Invalid inline function");if("renderInline"in t&&"function"!=typeof t.renderInline)throw new Error("Invalid renderInline function")}}const J=function(t){void 0===window._nc_fileactions&&(window._nc_fileactions=[],Q.debug("FileActions initialized")),window._nc_fileactions.find((e=>e.id===t.id))?Q.error("FileAction ".concat(t.id," already registered"),{action:t}):window._nc_fileactions.push(t)},X=function(){return window._nc_fileactions||[]};J(new Y({id:"delete",displayName:(t,e)=>"trashbin"===e.id?(0,r.Iu)("files_trashbin","Delete permanently"):(0,r.Iu)("files","Delete"),iconSvgInline:()=>K,enabled:t=>t.length>0&&t.map((t=>t.permissions)).every((t=>0!=(t&H.y3.DELETE))),async exec(t){try{return await d.default.delete(t.source),(0,G.j8)("files:node:deleted",t),!0}catch(e){return Q.error("Error while deleting a file",{error:e,source:t.source,node:t}),!1}},async execBatch(t,e,n){return Promise.all(t.map((t=>this.exec(t,e,n))))},order:100}));var tt=i(48250);const et="details";J(new Y({id:et,displayName:()=>(0,r.Iu)("files","Details"),iconSvgInline:()=>tt,enabled:t=>{var e,n,i;return!(null===(e=window)||void 0===e||null===(n=e.OCA)||void 0===n||null===(i=n.Files)||void 0===i||!i.Sidebar)&&t.some((t=>{var e;return null===(e=t.root)||void 0===e?void 0:e.startsWith("/files/")}))},async exec(t){try{var e,n,i,o,s;return null===(e=window)||void 0===e||null===(n=e.OCA)||void 0===n||null===(i=n.Files)||void 0===i||null===(o=i.Sidebar)||void 0===o||null===(s=o.open)||void 0===s||s.call(o,t.path),null}catch(t){return Q.error("Error while opening sidebar",{error:t}),!1}},default:!0,order:-50}));var nt=i(59305),it=i(23664),ot=i(69680),st=i.n(ot),rt=i(10861),at=i.n(rt),lt=i(64192),ct=i.n(lt),dt=i(33581);const ut=function(){const t=(0,nt.Q_)("files",{state:()=>({files:{},roots:{}}),getters:{getNode:t=>e=>t.files[e],getNodes:t=>e=>e.map((e=>t.files[e])).filter(Boolean),getRoot:t=>e=>t.roots[e]},actions:{updateNodes(t){const e=t.reduce(((t,e)=>e.fileid?(t[e.fileid]=e,t):(Q.warn("Trying to update/set a node without fileid",e),t)),{});u.default.set(this,"files",{...this.files,...e})},deleteNodes(t){t.forEach((t=>{t.fileid&&u.default.delete(this.files,t.fileid)}))},setRoot(t){let{service:e,root:n}=t;u.default.set(this.roots,e,n)},onDeletedNode(t){this.deleteNodes([t])}}})(...arguments);return t._initialized||((0,G.Ld)("files:node:deleted",t.onDeletedNode),t._initialized=!0),t},pt=function(){const t=(0,nt.Q_)("paths",{state:()=>({paths:{}}),getters:{getPath:t=>(e,n)=>{if(t.paths[e])return t.paths[e][n]}},actions:{addPath(t){this.paths[t.service]||u.default.set(this.paths,t.service,{}),u.default.set(this.paths[t.service],t.path,t.fileid)}}})(...arguments);return t._initialized||(t._initialized=!0),t},ht=(0,nt.Q_)("selection",{state:()=>({selected:[],lastSelection:[],lastSelectedIndex:null}),actions:{set(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];u.default.set(this,"selected",t)},setLastIndex(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;u.default.set(this,"lastSelection",t?this.selected:[]),u.default.set(this,"lastSelectedIndex",t)},reset(){u.default.set(this,"selected",[]),u.default.set(this,"lastSelection",[]),u.default.set(this,"lastSelectedIndex",null)}}}),ft=(0,s.j)("files","viewConfigs",{}),At=function(){const t=(0,nt.Q_)("viewconfig",{state:()=>({viewConfig:ft}),getters:{getConfig:t=>e=>t.viewConfig[e]||{}},actions:{onUpdate(t,e,n){this.viewConfig[t]||u.default.set(this.viewConfig,t,{}),u.default.set(this.viewConfig[t],e,n)},async update(t,e,n){d.default.put((0,a.generateUrl)("/apps/files/api/v1/views/".concat(t,"/").concat(e)),{value:n}),(0,G.j8)("files:viewconfig:updated",{view:t,key:e,value:n})},setSortingBy(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"basename",e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"files";this.update(e,"sorting_mode",t),this.update(e,"sorting_direction","asc")},toggleSortingDirection(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"files";const e="asc"===(this.getConfig(t)||{sorting_direction:"asc"}).sorting_direction?"desc":"asc";this.update(t,"sorting_direction",e)}}}),e=t(...arguments);return e._initialized||((0,G.Ld)("files:viewconfig:updated",(function(t){let{view:n,key:i,value:o}=t;e.onUpdate(n,i,o)})),e._initialized=!0),e};var vt=i(15764),mt=i(64412),gt=i.n(mt),wt=i(44706),bt=i.n(wt);const Ct=u.default.extend({name:"BreadCrumbs",components:{Home:vt.Z,NcBreadcrumbs:bt(),NcBreadcrumb:gt()},props:{path:{type:String,default:"/"}},setup:()=>({filesStore:ut(),pathsStore:pt()}),computed:{currentView(){return this.$navigation.active},dirs(){var t;return["/",...this.path.split("/").filter(Boolean).map((t="/",e=>t+="".concat(e,"/"))).map((t=>t.replace(/^(.+)\/$/,"$1")))]},sections(){return this.dirs.map((t=>{const e={...this.$route,query:{dir:t}};return{dir:t,exact:!0,name:this.getDirDisplayName(t),to:e}}))}},methods:{getNodeFromId(t){return this.filesStore.getNode(t)},getFileIdFromPath(t){var e;return this.pathsStore.getPath(null===(e=this.currentView)||void 0===e?void 0:e.id,t)},getDirDisplayName(e){var n;if("/"===e)return t("files","Home");const i=this.getFileIdFromPath(e),o=this.getNodeFromId(i);return(null==o||null===(n=o.attributes)||void 0===n?void 0:n.displayName)||(0,p.basename)(e)},onClick(t){var e;(null==t||null===(e=t.query)||void 0===e?void 0:e.dir)===this.$route.query.dir&&this.$emit("reload")},ariaLabel(e){var n,i;return(null==e||null===(n=e.to)||void 0===n||null===(i=n.query)||void 0===i?void 0:i.dir)===this.$route.query.dir?t("files","Reload current directory"):t("files",'Go to the "{dir}" directory',e)}}});var yt=i(39959),_t={};_t.styleTagTransform=B(),_t.setAttributes=I(),_t.insert=S().bind(null,"head"),_t.domAPI=_(),_t.insertStyleElement=E(),C()(yt.Z,_t),yt.Z&&yt.Z.locals&&yt.Z.locals;const xt=(0,T.Z)(Ct,(function(){var t=this,e=t._self._c;return t._self._setupProxy,e("NcBreadcrumbs",{attrs:{"data-cy-files-content-breadcrumbs":""}},t._l(t.sections,(function(n,i){return e("NcBreadcrumb",t._b({key:n.dir,attrs:{"aria-label":t.ariaLabel(n),title:t.ariaLabel(n)},nativeOn:{click:function(e){return t.onClick(n.to)}},scopedSlots:t._u([0===i?{key:"icon",fn:function(){return[e("Home",{attrs:{size:20}})]},proxy:!0}:null],null,!0)},"NcBreadcrumb",n,!1))})),1)}),[],!1,null,"68b3b20b",null).exports;var St=i(35212),kt=i(20296),It=i(74139),Nt=i(3443),Et=i.n(Nt),Ft=i(79855),Bt=i(34829),Pt=i(45400),Dt=i.n(Pt),Tt=i(12945),zt=i.n(Tt),Lt=i(20571),Ut=i.n(Lt),Vt=i(4777);const Ot=(0,nt.Q_)("actionsmenu",{state:()=>({opened:null})}),Zt=(0,s.j)("files","config",{show_hidden:!1,crop_image_previews:!0}),qt=function(){const t=(0,nt.Q_)("userconfig",{state:()=>({userConfig:Zt}),actions:{onUpdate(t,e){u.default.set(this.userConfig,t,e)},async update(t,e){await d.default.put((0,a.generateUrl)("/apps/files/api/v1/config/"+t),{value:e}),(0,G.j8)("files:config:updated",{key:t,value:e})}}})(...arguments);return t._initialized||((0,G.Ld)("files:config:updated",(function(e){let{key:n,value:i}=e;t.onUpdate(n,i)})),t._initialized=!0),t},Rt={name:"CustomElementRender",props:{source:{type:Object,required:!0},currentView:{type:Object,required:!0},render:{type:Function,required:!0}},computed:{element(){return this.render(this.source,this.currentView)}},watch:{element(){this.$el.replaceWith(this.element),this.$el=this.element}},mounted(){this.$el.replaceWith(this.element),this.$el=this.element}},jt=(0,T.Z)(Rt,(function(){return(0,this._self._c)("span")}),[],!1,null,null,null).exports;var Mt=i(27856);const $t={name:"CustomSvgIconRender",props:{svg:{type:String,required:!0}},watch:{svg(){this.$el.innerHTML=(0,Mt.sanitize)(this.svg)}},mounted(){this.$el.innerHTML=(0,Mt.sanitize)(this.svg)}};var Wt=i(61959),Gt={};Gt.styleTagTransform=B(),Gt.setAttributes=I(),Gt.insert=S().bind(null,"head"),Gt.domAPI=_(),Gt.insertStyleElement=E(),C()(Wt.Z,Gt),Wt.Z&&Wt.Z.locals&&Wt.Z.locals;const Ht=(0,T.Z)($t,(function(){return(0,this._self._c)("span",{staticClass:"custom-svg-icon"})}),[],!1,null,"93e9b2f4",null).exports,Kt=X(),Qt=u.default.extend({name:"FileEntry",components:{CustomElementRender:jt,CustomSvgIconRender:Ht,FileIcon:Ft.Z,FolderIcon:Bt.default,Fragment:It.H,NcActionButton:Dt(),NcActions:zt(),NcCheckboxRadioSwitch:Ut(),NcLoadingIcon:ct(),StarIcon:Vt.default},props:{active:{type:Boolean,default:!1},isSizeAvailable:{type:Boolean,default:!1},source:{type:Object,required:!0},index:{type:Number,required:!0},nodes:{type:Array,required:!0},filesListWidth:{type:Number,default:0}},setup(){const t=Ot(),e=ut(),n=function(){const t=(0,nt.Q_)("keyboard",{state:()=>({altKey:!1,ctrlKey:!1,metaKey:!1,shiftKey:!1}),actions:{onEvent(t){t||(t=window.event),u.default.set(this,"altKey",!!t.altKey),u.default.set(this,"ctrlKey",!!t.ctrlKey),u.default.set(this,"metaKey",!!t.metaKey),u.default.set(this,"shiftKey",!!t.shiftKey)}}})(...arguments);return t._initialized||(window.addEventListener("keydown",t.onEvent),window.addEventListener("keyup",t.onEvent),window.addEventListener("mousemove",t.onEvent),t._initialized=!0),t}();return{actionsMenuStore:t,filesStore:e,keyboardStore:n,selectionStore:ht(),userConfigStore:qt()}},data:()=>({backgroundFailed:!1,backgroundImage:"",boundariesElement:document.querySelector(".app-content > .files-list"),loading:""}),computed:{userConfig(){return this.userConfigStore.userConfig},currentView(){return this.$navigation.active},columns(){var t;return this.filesListWidth<512?[]:(null===(t=this.currentView)||void 0===t?void 0:t.columns)||[]},dir(){var t,e;return((null===(t=this.$route)||void 0===t||null===(e=t.query)||void 0===e?void 0:e.dir)||"/").replace(/^(.+)\/$/,"$1")},fileid(){var t,e,n;return null===(t=this.source)||void 0===t||null===(e=t.fileid)||void 0===e||null===(n=e.toString)||void 0===n?void 0:n.call(e)},displayName(){return this.source.attributes.displayName||this.source.basename},size(){const t=parseInt(this.source.size,10)||0;return"number"!=typeof t||t<0?this.t("files","Pending"):(0,H.sS)(t,!0)},sizeOpacity(){const t=parseInt(this.source.size,10)||0;return!t||t<0?1:.7+(1-.7)*Math.pow(this.source.size/10485760,2)},linkTo(){if("folder"===this.source.type){const t={...this.$route,query:{dir:(0,p.join)(this.dir,this.source.basename)}};return{is:"router-link",title:this.t("files","Open folder {name}",{name:this.displayName}),to:t}}return this.enabledDefaultActions.length>0?{title:this.enabledDefaultActions[0].displayName([this.source],this.currentView),role:"button"}:{href:this.source.source,title:this.t("files","Download file {name}",{name:this.displayName})}},selectedFiles(){return this.selectionStore.selected},isSelected(){var t,e,n;return this.selectedFiles.includes(null===(t=this.source)||void 0===t||null===(e=t.fileid)||void 0===e||null===(n=e.toString)||void 0===n?void 0:n.call(e))},cropPreviews(){return this.userConfig.crop_image_previews},previewUrl(){try{const t=new URL(window.location.origin+this.source.attributes.previewUrl);return t.searchParams.set("x","32"),t.searchParams.set("y","32"),t.searchParams.set("a",!0===this.cropPreviews?"0":"1"),t.href}catch(t){return null}},mimeIconUrl(){var t,e,n;const i=this.source.mime||"application/octet-stream",o=null===(t=window.OC)||void 0===t||null===(e=t.MimeType)||void 0===e||null===(n=e.getIconUrl)||void 0===n?void 0:n.call(e,i);return o?"url(".concat(o,")"):""},enabledActions(){return Kt.filter((t=>!t.enabled||t.enabled([this.source],this.currentView))).sort(((t,e)=>(t.order||0)-(e.order||0)))},enabledInlineActions(){return this.filesListWidth<768?[]:this.enabledActions.filter((t=>{var e;return null==t||null===(e=t.inline)||void 0===e?void 0:e.call(t,this.source,this.currentView)}))},enabledMenuActions(){if(this.filesListWidth<768)return this.enabledDefaultActions.length>0?this.enabledActions.slice(1):this.enabledActions;const t=[...this.enabledInlineActions,...this.enabledActions.filter((t=>!t.inline))];return this.enabledDefaultActions.length>0?t.slice(1):t},enabledDefaultActions(){return[...this.enabledActions.filter((t=>t.default))]},openedMenu:{get(){return this.actionsMenuStore.opened===this.uniqueId},set(t){this.actionsMenuStore.opened=t?this.uniqueId:null}},uniqueId(){return this.source.source.split("").reduce((function(t,e){return(t=(t<<5)-t+e.charCodeAt(0))&t}),0)},isFavorite(){return 1===this.source.attributes.favorite}},watch:{active(t,e){if(!1===t&&!0===e)return this.resetState(),void(this.$el.parentNode.style.display="none");this.$el.parentNode.style.display=""},previewUrl(){this.clearImg(),this.debounceIfNotCached()}},mounted(){var t,e;this.debounceGetPreview=(0,kt.debounce)((function(){this.fetchAndApplyPreview()}),150,!1),this.debounceIfNotCached(),null===(t=this.$el.parentNode)||void 0===t||null===(e=t.addEventListener)||void 0===e||e.call(t,"contextmenu",this.onRightClick)},beforeDestroy(){this.resetState()},methods:{async debounceIfNotCached(){var t;if(this.previewUrl)return await(t=this.previewUrl,caches.open("previews").then((function(e){return e.match(t).then((function(t){return!!t}))})))?(this.backgroundImage="url(".concat(this.previewUrl,")"),void(this.backgroundFailed=!1)):void this.debounceGetPreview()},fetchAndApplyPreview(){this.previewUrl&&(this.previewPromise&&this.clearImg(),this.previewPromise=new(Et())(((t,e,n)=>{const i=new Image;i.fetchpriority=this.active?"high":"auto",i.onload=()=>{this.backgroundImage="url(".concat(this.previewUrl,")"),this.backgroundFailed=!1,t(i)},i.onerror=()=>{this.backgroundFailed=!0,e(i)},i.src=this.previewUrl,n((()=>{i.onerror=null,i.onload=null,i.src=""}))})))},resetState(){this.loading="",this.clearImg(),this.openedMenu=!1},clearImg(){this.backgroundImage="",this.backgroundFailed=!1,this.previewPromise&&(this.previewPromise.cancel(),this.previewPromise=null)},async onActionClick(t){const e=t.displayName([this.source],this.currentView);try{this.loading=t.id,u.default.set(this.source,"_loading",!0);const n=await t.exec(this.source,this.currentView,this.dir);if(null===n)return;if(n)return void(0,h.s$)(this.t("files",'"{displayName}" action executed successfully',{displayName:e}));(0,h.x2)(this.t("files",'"{displayName}" action failed',{displayName:e}))}catch(n){Q.error("Error while executing action",{action:t,e:n}),(0,h.x2)(this.t("files",'"{displayName}" action failed',{displayName:e}))}finally{this.loading="",u.default.set(this.source,"_loading",!1)}},execDefaultAction(t){"folder"!==this.source.type&&this.enabledDefaultActions.length>0&&(t.preventDefault(),t.stopPropagation(),this.enabledDefaultActions[0].exec(this.source,this.currentView,this.dir))},openDetailsIfAvailable(t){const e=this.enabledDefaultActions.find((t=>t.id===et));e&&(t.preventDefault(),t.stopPropagation(),e.exec(this.source,this.currentView))},onSelectionChange(t){var e;const n=this.index,i=this.selectionStore.lastSelectedIndex;if(null!==(e=this.keyboardStore)&&void 0!==e&&e.shiftKey&&null!==i){const t=this.selectedFiles.includes(this.fileid),e=Math.min(n,i),o=Math.max(i,n),s=this.selectionStore.lastSelection,r=this.nodes.map((t=>{var e,n;return null===(e=t.fileid)||void 0===e||null===(n=e.toString)||void 0===n?void 0:n.call(e)})).slice(e,o+1),a=[...s,...r].filter((e=>!t||e!==this.fileid));return Q.debug("Shift key pressed, selecting all files in between",{start:e,end:o,filesToSelect:r,isAlreadySelected:t}),void this.selectionStore.set(a)}Q.debug("Updating selection",{selection:t}),this.selectionStore.set(t),this.selectionStore.setLastIndex(n)},onRightClick(t){if(this.openedMenu)return;const e=this.selectedFiles.length>1;this.actionsMenuStore.opened=this.isSelected&&e?"global":this.uniqueId,t.preventDefault(),t.stopPropagation()},t:r.Iu,formatFileSize:H.sS}});var Yt=i(13352),Jt={};Jt.styleTagTransform=B(),Jt.setAttributes=I(),Jt.insert=S().bind(null,"head"),Jt.domAPI=_(),Jt.insertStyleElement=E(),C()(Yt.Z,Jt),Yt.Z&&Yt.Z.locals&&Yt.Z.locals;var Xt=i(37020),te={};te.styleTagTransform=B(),te.setAttributes=I(),te.insert=S().bind(null,"head"),te.domAPI=_(),te.insertStyleElement=E(),C()(Xt.Z,te),Xt.Z&&Xt.Z.locals&&Xt.Z.locals;const ee=(0,T.Z)(Qt,(function(){var t=this,e=t._self._c;return t._self._setupProxy,e("Fragment",[e("td",{staticClass:"files-list__row-checkbox"},[t.active?e("NcCheckboxRadioSwitch",{attrs:{"aria-label":t.t("files","Select the row for {displayName}",{displayName:t.displayName}),checked:t.selectedFiles,value:t.fileid,name:"selectedFiles"},on:{"update:checked":t.onSelectionChange}}):t._e()],1),t._v(" "),e("td",{staticClass:"files-list__row-name"},[e("a",t._b({ref:"name",on:{click:t.execDefaultAction}},"a",t.linkTo,!1),[e("span",{staticClass:"files-list__row-icon"},["folder"===t.source.type?e("FolderIcon"):t.previewUrl&&!t.backgroundFailed?e("span",{ref:"previewImg",staticClass:"files-list__row-icon-preview",style:{backgroundImage:t.backgroundImage}}):t.mimeIconUrl?e("span",{staticClass:"files-list__row-icon-preview files-list__row-icon-preview--mime",style:{backgroundImage:t.mimeIconUrl}}):e("FileIcon"),t._v(" "),t.isFavorite?e("span",{staticClass:"files-list__row-icon-favorite",attrs:{"aria-label":t.t("files","Favorite")}},[e("StarIcon",{attrs:{"aria-hidden":"true",size:20}})],1):t._e()],1),t._v(" "),e("span",{staticClass:"files-list__row-name-text"},[t._v(t._s(t.displayName))])])]),t._v(" "),e("td",{staticClass:"files-list__row-actions",class:"files-list__row-actions-".concat(t.uniqueId)},[t.active?e("NcActions",{ref:"actionsMenu",attrs:{"boundaries-element":t.boundariesElement,container:t.boundariesElement,disabled:t.source._loading,"force-title":!0,"force-menu":!0,inline:t.enabledInlineActions.length,open:t.openedMenu},on:{"update:open":function(e){t.openedMenu=e}}},t._l(t.enabledMenuActions,(function(n){return e("NcActionButton",{key:n.id,class:"files-list__row-action-"+n.id,on:{click:function(e){return t.onActionClick(n)}},scopedSlots:t._u([{key:"icon",fn:function(){return[t.loading===n.id?e("NcLoadingIcon",{attrs:{size:18}}):e("CustomSvgIconRender",{attrs:{svg:n.iconSvgInline([t.source],t.currentView)}})]},proxy:!0}],null,!0)},[t._v("\n\t\t\t\t"+t._s(n.displayName([t.source],t.currentView))+"\n\t\t\t")])})),1):t._e()],1),t._v(" "),t.isSizeAvailable?e("td",{staticClass:"files-list__row-size",style:{opacity:t.sizeOpacity},on:{click:t.openDetailsIfAvailable}},[e("span",[t._v(t._s(t.size))])]):t._e(),t._v(" "),t._l(t.columns,(function(n){var i;return e("td",{key:n.id,staticClass:"files-list__row-column-custom",class:"files-list__row-".concat(null===(i=t.currentView)||void 0===i?void 0:i.id,"-").concat(n.id),on:{click:t.openDetailsIfAvailable}},[t.active?e("CustomElementRender",{attrs:{"current-view":t.currentView,render:n.render,source:t.source}}):t._e()],1)}))],2)}),[],!1,null,"0600090e",null).exports,ne=u.default.extend({name:"FilesListFooter",components:{},props:{isSizeAvailable:{type:Boolean,default:!1},nodes:{type:Array,required:!0},summary:{type:String,default:""},filesListWidth:{type:Number,default:0}},setup(){const t=pt();return{filesStore:ut(),pathsStore:t}},computed:{currentView(){return this.$navigation.active},dir(){var t,e;return((null===(t=this.$route)||void 0===t||null===(e=t.query)||void 0===e?void 0:e.dir)||"/").replace(/^(.+)\/$/,"$1")},currentFolder(){var t;if(null===(t=this.currentView)||void 0===t||!t.id)return;if("/"===this.dir)return this.filesStore.getRoot(this.currentView.id);const e=this.pathsStore.getPath(this.currentView.id,this.dir);return this.filesStore.getNode(e)},columns(){var t;return this.filesListWidth<512?[]:(null===(t=this.currentView)||void 0===t?void 0:t.columns)||[]},totalSize(){var t;return null!==(t=this.currentFolder)&&void 0!==t&&t.size?(0,H.sS)(this.currentFolder.size,!0):(0,H.sS)(this.nodes.reduce(((t,e)=>t+e.size||0),0),!0)}},methods:{classForColumn(t){return{"files-list__row-column-custom":!0,["files-list__row-".concat(this.currentView.id,"-").concat(t.id)]:!0}},t:r.Iu}});var ie=i(97105),oe={};oe.styleTagTransform=B(),oe.setAttributes=I(),oe.insert=S().bind(null,"head"),oe.domAPI=_(),oe.insertStyleElement=E(),C()(ie.Z,oe),ie.Z&&ie.Z.locals&&ie.Z.locals;const se=(0,T.Z)(ne,(function(){var t=this,e=t._self._c;return t._self._setupProxy,e("tr",[e("th",{staticClass:"files-list__row-checkbox"},[e("span",{staticClass:"hidden-visually"},[t._v(t._s(t.t("files","Total rows summary")))])]),t._v(" "),e("td",{staticClass:"files-list__row-name"},[e("span",{staticClass:"files-list__row-icon"}),t._v(" "),e("span",[t._v(t._s(t.summary))])]),t._v(" "),e("td",{staticClass:"files-list__row-actions"}),t._v(" "),t.isSizeAvailable?e("td",{staticClass:"files-list__column files-list__row-size"},[e("span",[t._v(t._s(t.totalSize))])]):t._e(),t._v(" "),t._l(t.columns,(function(n){var i;return e("th",{key:n.id,class:t.classForColumn(n)},[e("span",[t._v(t._s(null===(i=n.summary)||void 0===i?void 0:i.call(n,t.nodes,t.currentView)))])])}))],2)}),[],!1,null,"e6a083be",null).exports,re=u.default.extend({data:()=>({filesListWidth:null}),created(){const t=document.querySelector("#app-content-vue");this.$resizeObserver=new ResizeObserver((e=>{e.length>0&&e[0].target===t&&(this.filesListWidth=e[0].contentRect.width)})),this.$resizeObserver.observe(t)},beforeDestroy(){this.$resizeObserver.disconnect()}}),ae=X(),le=u.default.extend({name:"FilesListHeaderActions",components:{CustomSvgIconRender:Ht,NcActions:zt(),NcActionButton:Dt(),NcLoadingIcon:ct()},mixins:[re],props:{currentView:{type:Object,required:!0},selectedNodes:{type:Array,default:()=>[]}},setup:()=>({actionsMenuStore:Ot(),filesStore:ut(),selectionStore:ht()}),data:()=>({loading:null}),computed:{dir(){var t,e;return((null===(t=this.$route)||void 0===t||null===(e=t.query)||void 0===e?void 0:e.dir)||"/").replace(/^(.+)\/$/,"$1")},enabledActions(){return ae.filter((t=>t.execBatch)).filter((t=>!t.enabled||t.enabled(this.nodes,this.currentView))).sort(((t,e)=>(t.order||0)-(e.order||0)))},nodes(){return this.selectedNodes.map((t=>this.getNode(t))).filter((t=>t))},areSomeNodesLoading(){return this.nodes.some((t=>t._loading))},openedMenu:{get(){return"global"===this.actionsMenuStore.opened},set(t){this.actionsMenuStore.opened=t?"global":null}},inlineActions(){return this.filesListWidth<512?0:this.filesListWidth<768?1:this.filesListWidth<1024?2:3}},methods:{getNode(t){return this.filesStore.getNode(t)},async onActionClick(t){const e=t.displayName(this.nodes,this.currentView),n=this.selectedNodes;try{this.loading=t.id,this.nodes.forEach((t=>{u.default.set(t,"_loading",!0)}));const i=await t.execBatch(this.nodes,this.currentView,this.dir);if(!i.some((t=>null!==t)))return void this.selectionStore.reset();if(i.some((t=>!1===t))){const t=n.filter(((t,e)=>!1===i[e]));return this.selectionStore.set(t),void(0,h.x2)(this.t("files",'"{displayName}" failed on some elements ',{displayName:e}))}(0,h.s$)(this.t("files",'"{displayName}" batch action executed successfully',{displayName:e})),this.selectionStore.reset()}catch(n){Q.error("Error while executing action",{action:t,e:n}),(0,h.x2)(this.t("files",'"{displayName}" action failed',{displayName:e}))}finally{this.loading=null,this.nodes.forEach((t=>{u.default.set(t,"_loading",!1)}))}},t:r.Iu}});var ce=i(97877),de={};de.styleTagTransform=B(),de.setAttributes=I(),de.insert=S().bind(null,"head"),de.domAPI=_(),de.insertStyleElement=E(),C()(ce.Z,de),ce.Z&&ce.Z.locals&&ce.Z.locals;const ue=(0,T.Z)(le,(function(){var t=this,e=t._self._c;return t._self._setupProxy,e("th",{staticClass:"files-list__column files-list__row-actions-batch",attrs:{colspan:"2"}},[e("NcActions",{ref:"actionsMenu",attrs:{disabled:!!t.loading||t.areSomeNodesLoading,"force-title":!0,inline:t.inlineActions,"menu-title":t.inlineActions<=1?t.t("files","Actions"):null,open:t.openedMenu},on:{"update:open":function(e){t.openedMenu=e}}},t._l(t.enabledActions,(function(n){return e("NcActionButton",{key:n.id,class:"files-list__row-actions-batch-"+n.id,on:{click:function(e){return t.onActionClick(n)}},scopedSlots:t._u([{key:"icon",fn:function(){return[t.loading===n.id?e("NcLoadingIcon",{attrs:{size:18}}):e("CustomSvgIconRender",{attrs:{svg:n.iconSvgInline(t.nodes,t.currentView)}})]},proxy:!0}],null,!0)},[t._v("\n\t\t\t"+t._s(n.displayName(t.nodes,t.currentView))+"\n\t\t")])})),1)],1)}),[],!1,null,"03e57b1e",null).exports;var pe=i(20404),he=i(23873);const fe=u.default.extend({computed:{...(0,nt.rn)(At,["getConfig","setSortingBy","toggleSortingDirection"]),currentView(){return this.$navigation.active},sortingMode(){var t,e;return(null===(t=this.getConfig(this.currentView.id))||void 0===t?void 0:t.sorting_mode)||(null===(e=this.currentView)||void 0===e?void 0:e.defaultSortKey)||"basename"},isAscSorting(){var t;return"asc"===(null===(t=this.getConfig(this.currentView.id))||void 0===t?void 0:t.sorting_direction)}},methods:{toggleSortBy(t){this.sortingMode!==t?this.setSortingBy(t,this.currentView.id):this.toggleSortingDirection(this.currentView.id)}}}),Ae=u.default.extend({name:"FilesListHeaderButton",components:{MenuDown:pe.Z,MenuUp:he.Z,NcButton:at()},mixins:[fe],props:{name:{type:String,required:!0},mode:{type:String,required:!0}},methods:{sortAriaLabel(t){const e=this.isAscSorting?this.t("files","ascending"):this.t("files","descending");return this.t("files","Sort list by {column} ({direction})",{column:t,direction:e})},t:r.Iu}});var ve=i(29252),me={};me.styleTagTransform=B(),me.setAttributes=I(),me.insert=S().bind(null,"head"),me.domAPI=_(),me.insertStyleElement=E(),C()(ve.Z,me),ve.Z&&ve.Z.locals&&ve.Z.locals;const ge=(0,T.Z)(Ae,(function(){var t=this,e=t._self._c;return t._self._setupProxy,e("NcButton",{staticClass:"files-list__column-sort-button",class:{"files-list__column-sort-button--active":t.sortingMode===t.mode},attrs:{"aria-label":t.sortAriaLabel(t.name),type:"tertiary"},on:{click:function(e){return e.stopPropagation(),e.preventDefault(),t.toggleSortBy(t.mode)}}},[t.sortingMode!==t.mode||t.isAscSorting?e("MenuUp",{attrs:{slot:"icon"},slot:"icon"}):e("MenuDown",{attrs:{slot:"icon"},slot:"icon"}),t._v("\n\t"+t._s(t.name)+"\n")],1)}),[],!1,null,null,null).exports,we=u.default.extend({name:"FilesListHeader",components:{FilesListHeaderButton:ge,NcCheckboxRadioSwitch:Ut(),FilesListHeaderActions:ue},mixins:[fe],props:{isSizeAvailable:{type:Boolean,default:!1},nodes:{type:Array,required:!0},filesListWidth:{type:Number,default:0}},setup:()=>({filesStore:ut(),selectionStore:ht()}),computed:{currentView(){return this.$navigation.active},columns(){var t;return this.filesListWidth<512?[]:(null===(t=this.currentView)||void 0===t?void 0:t.columns)||[]},dir(){var t,e;return((null===(t=this.$route)||void 0===t||null===(e=t.query)||void 0===e?void 0:e.dir)||"/").replace(/^(.+)\/$/,"$1")},selectAllBind(){const t=this.isNoneSelected||this.isSomeSelected?this.t("files","Select all"):this.t("files","Unselect all");return{"aria-label":t,checked:this.isAllSelected,indeterminate:this.isSomeSelected,title:t}},selectedNodes(){return this.selectionStore.selected},isAllSelected(){return this.selectedNodes.length===this.nodes.length},isNoneSelected(){return 0===this.selectedNodes.length},isSomeSelected(){return!this.isAllSelected&&!this.isNoneSelected}},methods:{classForColumn(t){return{"files-list__column":!0,"files-list__column--sortable":!!t.sort,"files-list__row-column-custom":!0,["files-list__row-".concat(this.currentView.id,"-").concat(t.id)]:!0}},onToggleAll(t){if(t){const t=this.nodes.map((t=>t.fileid.toString()));Q.debug("Added all nodes to selection",{selection:t}),this.selectionStore.setLastIndex(null),this.selectionStore.set(t)}else Q.debug("Cleared selection"),this.selectionStore.reset()},t:r.Iu}});var be=i(96153),Ce={};Ce.styleTagTransform=B(),Ce.setAttributes=I(),Ce.insert=S().bind(null,"head"),Ce.domAPI=_(),Ce.insertStyleElement=E(),C()(be.Z,Ce),be.Z&&be.Z.locals&&be.Z.locals;const ye=(0,T.Z)(we,(function(){var t=this,e=t._self._c;return t._self._setupProxy,e("tr",[e("th",{staticClass:"files-list__column files-list__row-checkbox"},[e("NcCheckboxRadioSwitch",t._b({on:{"update:checked":t.onToggleAll}},"NcCheckboxRadioSwitch",t.selectAllBind,!1))],1),t._v(" "),t.isNoneSelected?[e("th",{staticClass:"files-list__column files-list__row-name files-list__column--sortable",on:{click:function(e){return e.stopPropagation(),e.preventDefault(),t.toggleSortBy("basename")}}},[e("span",{staticClass:"files-list__row-icon"}),t._v(" "),e("FilesListHeaderButton",{attrs:{name:t.t("files","Name"),mode:"basename"}})],1),t._v(" "),e("th",{staticClass:"files-list__row-actions"}),t._v(" "),t.isSizeAvailable?e("th",{staticClass:"files-list__column files-list__row-size",class:{"files-list__column--sortable":t.isSizeAvailable}},[e("FilesListHeaderButton",{attrs:{name:t.t("files","Size"),mode:"size"}})],1):t._e(),t._v(" "),t._l(t.columns,(function(n){return e("th",{key:n.id,class:t.classForColumn(n)},[n.sort?e("FilesListHeaderButton",{attrs:{name:n.title,mode:n.id}}):e("span",[t._v("\n\t\t\t\t"+t._s(n.title)+"\n\t\t\t")])],1)}))]:e("FilesListHeaderActions",{attrs:{"current-view":t.currentView,"selected-nodes":t.selectedNodes}})],2)}),[],!1,null,"76b6186a",null).exports,_e=u.default.extend({name:"FilesListVirtual",components:{RecycleScroller:St.EK,FileEntry:ee,FilesListHeader:ye,FilesListFooter:se},mixins:[re],props:{currentView:{type:Object,required:!0},nodes:{type:Array,required:!0}},data:()=>({FileEntry:ee}),computed:{files(){return this.nodes.filter((t=>"file"===t.type))},summaryFile(){const t=this.files.length;return(0,r.uN)("files","{count} file","{count} files",t,{count:t})},summaryFolder(){const t=this.nodes.length-this.files.length;return(0,r.uN)("files","{count} folder","{count} folders",t,{count:t})},summary(){return(0,r.Iu)("files","{summaryFile} and {summaryFolder}",this)},isSizeAvailable(){return!(this.filesListWidth<768)&&this.nodes.some((t=>void 0!==t.attributes.size))}},mounted(){const t=this.$el.querySelectorAll(".vue-recycle-scroller__slot");t[0].setAttribute("role","thead"),t[1].setAttribute("role","tfoot")},methods:{getFileId:t=>t.fileid,t:r.Iu}});var xe=i(76775),Se={};Se.styleTagTransform=B(),Se.setAttributes=I(),Se.insert=S().bind(null,"head"),Se.domAPI=_(),Se.insertStyleElement=E(),C()(xe.Z,Se),xe.Z&&xe.Z.locals&&xe.Z.locals;const ke=(0,T.Z)(_e,(function(){var t=this,e=t._self._c;return t._self._setupProxy,e("RecycleScroller",{ref:"recycleScroller",staticClass:"files-list",attrs:{"key-field":"source",items:t.nodes,"item-size":55,"table-mode":!0,"item-class":"files-list__row","item-tag":"tr","list-class":"files-list__body","list-tag":"tbody",role:"table"},scopedSlots:t._u([{key:"default",fn:function(n){let{item:i,active:o,index:s}=n;return[e("FileEntry",{attrs:{active:o,index:s,"is-size-available":t.isSizeAvailable,"files-list-width":t.filesListWidth,nodes:t.nodes,source:i}})]}},{key:"before",fn:function(){return[e("caption",{staticClass:"hidden-visually"},[t._v("\n\t\t\t"+t._s(t.currentView.caption||"")+"\n\t\t\t"+t._s(t.t("files","This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list."))+"\n\t\t")]),t._v(" "),e("FilesListHeader",{attrs:{"files-list-width":t.filesListWidth,"is-size-available":t.isSizeAvailable,nodes:t.nodes}})]},proxy:!0},{key:"after",fn:function(){return[e("FilesListFooter",{attrs:{"files-list-width":t.filesListWidth,"is-size-available":t.isSizeAvailable,nodes:t.nodes,summary:t.summary}})]},proxy:!0}])})}),[],!1,null,"640a8bb8",null).exports;var Ie=i(14222);function Ne(t,e,n){return(e=function(t){var e=function(t,e){if("object"!=typeof t||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,"string");if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==typeof e?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}const Ee=class{constructor(){Ne(this,"_views",[]),Ne(this,"_currentView",null),Q.debug("Navigation service initialized")}register(t){try{Be(t),Fe(t,this._views)}catch(e){throw e instanceof Error&&Q.error(e.message,{view:t}),e}t.legacy&&Q.warn("Legacy view detected, please migrate to Vue"),t.iconClass&&(t.legacy=!0),this._views.push(t)}remove(t){const e=this._views.findIndex((e=>e.id===t));-1!==e&&this._views.splice(e,1)}get views(){return this._views}setActive(t){this._currentView=t}get active(){return this._currentView}},Fe=function(t,e){if(e.find((e=>e.id===t.id)))throw new Error("Navigation id ".concat(t.id," is already registered"));return!0},Be=function(t){if(!t.id||"string"!=typeof t.id)throw new Error("Navigation id is required and must be a string");if(!t.name||"string"!=typeof t.name)throw new Error("Navigation name is required and must be a string");if(!t.legacy){if(!t.getContents||"function"!=typeof t.getContents)throw new Error("Navigation getContents is required and must be a function");if(!t.icon||"string"!=typeof t.icon||!(0,Ie.Z)(t.icon))throw new Error("Navigation icon is required and must be a valid svg string")}if(!("order"in t)||"number"!=typeof t.order)throw new Error("Navigation order is required and must be a number");if(t.columns&&t.columns.forEach(Pe),t.emptyView&&"function"!=typeof t.emptyView)throw new Error("Navigation emptyView must be a function");if(t.parent&&"string"!=typeof t.parent)throw new Error("Navigation parent must be a string");if("sticky"in t&&"boolean"!=typeof t.sticky)throw new Error("Navigation sticky must be a boolean");if("expanded"in t&&"boolean"!=typeof t.expanded)throw new Error("Navigation expanded must be a boolean");if(t.defaultSortKey&&"string"!=typeof t.defaultSortKey)throw new Error("Navigation defaultSortKey must be a string");return!0},Pe=function(t){if(!t.id||"string"!=typeof t.id)throw new Error("A column id is required");if(!t.title||"string"!=typeof t.title)throw new Error("A column title is required");if(!t.render||"function"!=typeof t.render)throw new Error("A render function is required");if(t.sort&&"function"!=typeof t.sort)throw new Error("Column sortFunction must be a function");if(t.summary&&"function"!=typeof t.summary)throw new Error("Column summary must be a function");return!0},De=u.default.extend({name:"FilesList",components:{BreadCrumbs:xt,FilesListVirtual:ke,NcAppContent:st(),NcButton:at(),NcEmptyContent:A(),NcLoadingIcon:ct(),TrashCan:dt.Z},mixins:[fe],setup(){const t=pt();return{filesStore:ut(),pathsStore:t,selectionStore:ht(),viewConfigStore:At()}},data:()=>({loading:!0,promise:null}),computed:{currentView(){return this.$navigation.active||this.$navigation.views.find((t=>"files"===t.id))},dir(){var t,e;return((null===(t=this.$route)||void 0===t||null===(e=t.query)||void 0===e?void 0:e.dir)||"/").replace(/^(.+)\/$/,"$1")},currentFolder(){var t;if(null===(t=this.currentView)||void 0===t||!t.id)return;if("/"===this.dir)return this.filesStore.getRoot(this.currentView.id);const e=this.pathsStore.getPath(this.currentView.id,this.dir);return this.filesStore.getNode(e)},dirContents(){var t,e;if(!this.currentView)return[];const n=((null===(t=this.currentView)||void 0===t?void 0:t.columns)||[]).find((t=>t.id===this.sortingMode));if(null!=n&&n.sort&&"function"==typeof n.sort){var i;const t=[...((null===(i=this.currentFolder)||void 0===i?void 0:i._children)||[]).map(this.getNode).filter((t=>t))].sort(n.sort);return this.isAscSorting?t:t.reverse()}return(0,it.X)([...((null===(e=this.currentFolder)||void 0===e?void 0:e._children)||[]).map(this.getNode).filter((t=>t))],[..."basename"===this.sortingMode?[t=>"folder"!==t.type]:[],t=>t[this.sortingMode],t=>t.basename],this.isAscSorting?["asc","asc","asc"]:["desc","desc","desc"])},isEmptyDir(){return 0===this.dirContents.length},isRefreshing(){return void 0!==this.currentFolder&&!this.isEmptyDir&&this.loading},toPreviousDir(){const t=this.dir.split("/").slice(0,-1).join("/")||"/";return{...this.$route,query:{dir:t}}}},watch:{currentView(t,e){(null==t?void 0:t.id)!==(null==e?void 0:e.id)&&(Q.debug("View changed",{newView:t,oldView:e}),this.selectionStore.reset(),this.fetchContent())},dir(t,e){var n,i;Q.debug("Directory changed",{newDir:t,oldDir:e}),this.selectionStore.reset(),this.fetchContent(),null!==(n=this.$refs)&&void 0!==n&&null!==(i=n.filesListVirtual)&&void 0!==i&&i.$el&&(this.$refs.filesListVirtual.$el.scrollTop=0)}},methods:{async fetchContent(){var t,e;if(null!==(t=this.currentView)&&void 0!==t&&t.legacy)return;this.loading=!0;const n=this.dir,i=this.currentView;"function"==typeof(null===(e=this.promise)||void 0===e?void 0:e.cancel)&&(this.promise.cancel(),Q.debug("Cancelled previous ongoing fetch")),this.promise=i.getContents(n);try{const{folder:t,contents:e}=await this.promise;Q.debug("Fetched contents",{dir:n,folder:t,contents:e}),this.filesStore.updateNodes(e),t._children=e.map((t=>t.fileid)),"/"===n?this.filesStore.setRoot({service:i.id,root:t}):t.fileid?(this.filesStore.updateNodes([t]),this.pathsStore.addPath({service:i.id,fileid:t.fileid,path:n})):Q.error("Invalid root folder returned",{dir:n,folder:t,currentView:i}),e.filter((t=>"folder"===t.type)).forEach((t=>{this.pathsStore.addPath({service:i.id,fileid:t.fileid,path:(0,p.join)(n,t.basename)})}))}catch(t){Q.error("Error while fetching content",{error:t})}finally{this.loading=!1}},getNode(t){return this.filesStore.getNode(t)},t:r.Iu}});var Te=i(1508),ze={};ze.styleTagTransform=B(),ze.setAttributes=I(),ze.insert=S().bind(null,"head"),ze.domAPI=_(),ze.insertStyleElement=E(),C()(Te.Z,ze),Te.Z&&Te.Z.locals&&Te.Z.locals;const Le=(0,T.Z)(De,(function(){var t,e,n=this,i=n._self._c;return n._self._setupProxy,i("NcAppContent",{directives:[{name:"show",rawName:"v-show",value:!(null!==(t=n.currentView)&&void 0!==t&&t.legacy),expression:"!currentView?.legacy"}],class:{"app-content--hidden":null===(e=n.currentView)||void 0===e?void 0:e.legacy},attrs:{"data-cy-files-content":""}},[i("div",{staticClass:"files-list__header"},[i("BreadCrumbs",{attrs:{path:n.dir},on:{reload:n.fetchContent}}),n._v(" "),n.isRefreshing?i("NcLoadingIcon",{staticClass:"files-list__refresh-icon"}):n._e()],1),n._v(" "),n.loading&&!n.isRefreshing?i("NcLoadingIcon",{staticClass:"files-list__loading-icon",attrs:{size:38,title:n.t("files","Loading current folder")}}):!n.loading&&n.isEmptyDir?i("NcEmptyContent",{attrs:{title:n.t("files","No files in here"),description:n.t("files","No files or folders have been deleted yet"),"data-cy-files-content-empty":""},scopedSlots:n._u([{key:"action",fn:function(){return["/"!==n.dir?i("NcButton",{attrs:{"aria-label":"t('files', 'Go to the previous folder')",type:"primary",to:n.toPreviousDir}},[n._v("\n\t\t\t\t"+n._s(n.t("files","Go back"))+"\n\t\t\t")]):n._e()]},proxy:!0},{key:"icon",fn:function(){return[i("TrashCan")]},proxy:!0}])}):i("FilesListVirtual",{ref:"filesListVirtual",attrs:{"current-view":n.currentView,nodes:n.dirContents}})],1)}),[],!1,null,"66068cbb",null).exports;var Ue=i(57638),Ve=i(55209),Oe=i.n(Ve),Ze=i(14032),qe=i.n(Ze),Re=i(91211),je=i.n(Re);var Me=i(28615),$e=i(74184),We=i(48959),Ge=i.n(We);const He={name:"NavigationQuota",components:{ChartPie:$e.Z,NcAppNavigationItem:qe(),NcProgressBar:Ge()},data:()=>({loadingStorageStats:!1,storageStats:(0,s.j)("files","storageStats",null)}),computed:{storageStatsTitle(){var t,e,n;const i=(0,H.sS)(null===(t=this.storageStats)||void 0===t?void 0:t.used),o=(0,H.sS)(null===(e=this.storageStats)||void 0===e?void 0:e.quota);return(null===(n=this.storageStats)||void 0===n?void 0:n.quota)<0?this.t("files","{usedQuotaByte} used",{usedQuotaByte:i}):this.t("files","{used} of {quota} used",{used:i,quota:o})},storageStatsTooltip(){return this.storageStats.relative?this.t("files","{relative}% used",this.storageStats):""}},beforeMount(){setInterval(this.throttleUpdateStorageStats,6e4),(0,G.Ld)("files:node:created",this.throttleUpdateStorageStats),(0,G.Ld)("files:node:deleted",this.throttleUpdateStorageStats),(0,G.Ld)("files:node:moved",this.throttleUpdateStorageStats),(0,G.Ld)("files:node:updated",this.throttleUpdateStorageStats)},methods:{debounceUpdateStorageStats:(0,Me.D)(200,(function(t){this.updateStorageStats(t)})),throttleUpdateStorageStats:(0,Me.P)(1e3,(function(t){this.updateStorageStats(t)})),async updateStorageStats(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;if(!this.loadingStorageStats){this.loadingStorageStats=!0;try{var n;const t=await d.default.get((0,a.generateUrl)("/apps/files/api/v1/stats"));if(null==t||null===(n=t.data)||void 0===n||!n.data)throw new Error("Invalid storage stats");this.storageStats=t.data.data}catch(n){Q.error("Could not refresh storage stats",{error:n}),e&&(0,h.x2)(t("files","Could not refresh storage stats"))}finally{this.loadingStorageStats=!1}}},t:r.Iu}};var Ke=i(93582),Qe={};Qe.styleTagTransform=B(),Qe.setAttributes=I(),Qe.insert=S().bind(null,"head"),Qe.domAPI=_(),Qe.insertStyleElement=E(),C()(Ke.Z,Qe),Ke.Z&&Ke.Z.locals&&Ke.Z.locals;const Ye=(0,T.Z)(He,(function(){var t=this,e=t._self._c;return t.storageStats?e("NcAppNavigationItem",{staticClass:"app-navigation-entry__settings-quota",class:{"app-navigation-entry__settings-quota--not-unlimited":t.storageStats.quota>=0},attrs:{"aria-label":t.t("files","Storage informations"),loading:t.loadingStorageStats,name:t.storageStatsTitle,title:t.storageStatsTooltip,"data-cy-files-navigation-settings-quota":""},on:{click:function(e){return e.stopPropagation(),e.preventDefault(),t.debounceUpdateStorageStats.apply(null,arguments)}}},[e("ChartPie",{attrs:{slot:"icon",size:20},slot:"icon"}),t._v(" "),t.storageStats.quota>=0?e("NcProgressBar",{attrs:{slot:"extra",error:t.storageStats.relative>80,value:Math.min(t.storageStats.relative,100)},slot:"extra"}):t._e()],1):t._e()}),[],!1,null,"918797b2",null).exports;var Je=i(68988),Xe=i.n(Je),tn=i(16809),en=i.n(tn),nn=i(70386),on=i(36029),sn=i.n(on);const rn={name:"Setting",props:{el:{type:Function,required:!0}},mounted(){this.$el.appendChild(this.el())}},an=(0,T.Z)(rn,(function(){return(0,this._self._c)("div")}),[],!1,null,null,null).exports,ln={name:"Settings",components:{Clipboard:nn.Z,NcAppSettingsDialog:Xe(),NcAppSettingsSection:en(),NcCheckboxRadioSwitch:Ut(),NcInputField:sn(),Setting:an},props:{open:{type:Boolean,default:!1}},setup:()=>({userConfigStore:qt()}),data(){var t,e,n,i;return{settings:(null===(t=window.OCA)||void 0===t||null===(e=t.Files)||void 0===e||null===(n=e.Settings)||void 0===n?void 0:n.settings)||[],webdavUrl:(0,a.generateRemoteUrl)("dav/files/"+encodeURIComponent(null===(i=(0,l.ts)())||void 0===i?void 0:i.uid)),webdavDocs:"https://docs.nextcloud.com/server/stable/go.php?to=user-webdav",appPasswordUrl:(0,a.generateUrl)("/settings/user/security#generate-app-token-section"),webdavUrlCopied:!1}},computed:{userConfig(){return this.userConfigStore.userConfig}},beforeMount(){this.settings.forEach((t=>t.open()))},beforeDestroy(){this.settings.forEach((t=>t.close()))},methods:{onClose(){this.$emit("close")},setConfig(t,e){this.userConfigStore.update(t,e)},async copyCloudId(){document.querySelector("input#webdav-url-input").select(),navigator.clipboard?(await navigator.clipboard.writeText(this.webdavUrl),this.webdavUrlCopied=!0,(0,h.s$)(t("files","WebDAV URL copied to clipboard")),setTimeout((()=>{this.webdavUrlCopied=!1}),5e3)):(0,h.x2)(t("files","Clipboard is not available"))},t:r.Iu}},cn=ln;var dn=i(35662),un={};un.styleTagTransform=B(),un.setAttributes=I(),un.insert=S().bind(null,"head"),un.domAPI=_(),un.insertStyleElement=E(),C()(dn.Z,un),dn.Z&&dn.Z.locals&&dn.Z.locals;const pn=(0,T.Z)(cn,(function(){var t=this,e=t._self._c;return e("NcAppSettingsDialog",{attrs:{open:t.open,"show-navigation":!0,title:t.t("files","Files settings")},on:{"update:open":t.onClose}},[e("NcAppSettingsSection",{attrs:{id:"settings",title:t.t("files","Files settings")}},[e("NcCheckboxRadioSwitch",{attrs:{checked:t.userConfig.show_hidden},on:{"update:checked":function(e){return t.setConfig("show_hidden",e)}}},[t._v("\n\t\t\t"+t._s(t.t("files","Show hidden files"))+"\n\t\t")]),t._v(" "),e("NcCheckboxRadioSwitch",{attrs:{checked:t.userConfig.crop_image_previews},on:{"update:checked":function(e){return t.setConfig("crop_image_previews",e)}}},[t._v("\n\t\t\t"+t._s(t.t("files","Crop image previews"))+"\n\t\t")])],1),t._v(" "),0!==t.settings.length?e("NcAppSettingsSection",{attrs:{id:"more-settings",title:t.t("files","Additional settings")}},[t._l(t.settings,(function(t){return[e("Setting",{key:t.name,attrs:{el:t.el}})]}))],2):t._e(),t._v(" "),e("NcAppSettingsSection",{attrs:{id:"webdav",title:t.t("files","WebDAV")}},[e("NcInputField",{attrs:{id:"webdav-url-input","show-trailing-button":!0,success:t.webdavUrlCopied,"trailing-button-label":t.t("files","Copy to clipboard"),value:t.webdavUrl,readonly:"readonly",type:"url"},on:{focus:function(t){return t.target.select()},"trailing-button-click":t.copyCloudId},scopedSlots:t._u([{key:"trailing-button-icon",fn:function(){return[e("Clipboard",{attrs:{size:20}})]},proxy:!0}])}),t._v(" "),e("em",[e("a",{staticClass:"setting-link",attrs:{href:t.webdavDocs,target:"_blank",rel:"noreferrer noopener"}},[t._v("\n\t\t\t\t"+t._s(t.t("files","Use this address to access your Files via WebDAV"))+" ↗\n\t\t\t")])]),t._v(" "),e("br"),t._v(" "),e("em",[e("a",{staticClass:"setting-link",attrs:{href:t.appPasswordUrl}},[t._v("\n\t\t\t\t"+t._s(t.t("files","If you have enabled 2FA, you must create and use a new app password by clicking here."))+" ↗\n\t\t\t")])])],1)],1)}),[],!1,null,"76ca5d1f",null).exports,hn={name:"Navigation",components:{Cog:Ue.default,NavigationQuota:Ye,NcAppNavigation:Oe(),NcAppNavigationItem:qe(),NcIconSvgWrapper:je(),SettingsModal:pn},props:{Navigation:{type:Ee,required:!0}},setup:()=>({viewConfigStore:At()}),data:()=>({settingsOpened:!1}),computed:{currentViewId(){var t,e;return(null===(t=this.$route)||void 0===t||null===(e=t.params)||void 0===e?void 0:e.view)||"files"},currentView(){return this.views.find((t=>t.id===this.currentViewId))},views(){return this.Navigation.views},parentViews(){return this.views.filter((t=>!t.parent)).sort(((t,e)=>t.order-e.order))},childViews(){return this.views.filter((t=>!!t.parent)).reduce(((t,e)=>(t[e.parent]=[...t[e.parent]||[],e],t[e.parent].sort(((t,e)=>t.order-e.order)),t)),{})}},watch:{currentView(t,e){(null==t?void 0:t.id)!==(null==e?void 0:e.id)&&(this.Navigation.setActive(t),Q.debug("Navigation changed",{id:t.id,view:t}),this.showView(t,e))}},beforeMount(){this.currentView&&(Q.debug("Navigation mounted. Showing requested view",{view:this.currentView}),this.showView(this.currentView)),(0,G.Ld)("files:legacy-navigation:changed",this.onLegacyNavigationChanged),(0,G.Ld)("files:legacy-view:initialized",(()=>{Q.debug("Legacy view initialized",{...this.currentView}),this.showView(this.currentView)}))},methods:{showView(t,e){var n,i,o,s,r;if(null===(n=window)||void 0===n||null===(i=n.OCA)||void 0===i||null===(o=i.Files)||void 0===o||null===(s=o.Sidebar)||void 0===s||null===(r=s.close)||void 0===r||r.call(s),null!=t&&t.legacy){const e=document.querySelector("#app-content #app-content-"+this.currentView.id+".viewcontainer");document.querySelectorAll("#app-content .viewcontainer").forEach((t=>{t.classList.add("hidden")})),e.classList.remove("hidden");const{dir:n="/"}=OC.Util.History.parseUrlQuery(),i={itemId:t.id,dir:n};Q.debug("Triggering legacy navigation event",i),window.jQuery(e).trigger(new window.jQuery.Event("show",i)),window.jQuery(e).trigger(new window.jQuery.Event("urlChanged",i))}this.Navigation.setActive(t),function(t){const e=document.getElementById("page-heading-level-1");e&&(e.textContent=t)}(t.name),(0,G.j8)("files:navigation:changed",t)},onLegacyNavigationChanged(){let{id:t}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{id:"files"};const e=this.Navigation.views.find((e=>e.id===t));e&&e.legacy&&e.id!==this.currentView.id&&(this.$router.replace({...this.$route,params:{view:e.id}}),this.Navigation.setActive(e),this.showView(e))},onToggleExpand(t){const e=this.isExpanded(t);t.expanded=!e,this.viewConfigStore.update(t.id,"expanded",!e)},isExpanded(t){var e;return"boolean"==typeof(null===(e=this.viewConfigStore.getConfig(t.id))||void 0===e?void 0:e.expanded)?!0===this.viewConfigStore.getConfig(t.id).expanded:!0===t.expanded},generateToNavigation(t){if(t.params){const{dir:e,fileid:n}=t.params;return{name:"filelist",params:t.params,query:{dir:e,fileid:n}}}return{name:"filelist",params:{view:t.id}}},openSettings(){this.settingsOpened=!0},onSettingsClose(){this.settingsOpened=!1},t:r.Iu}},fn=hn;var An=i(87289),vn={};vn.styleTagTransform=B(),vn.setAttributes=I(),vn.insert=S().bind(null,"head"),vn.domAPI=_(),vn.insertStyleElement=E(),C()(An.Z,vn),An.Z&&An.Z.locals&&An.Z.locals;const mn=(0,T.Z)(fn,(function(){var t=this,e=t._self._c;return e("NcAppNavigation",{attrs:{"data-cy-files-navigation":""},scopedSlots:t._u([{key:"list",fn:function(){return t._l(t.parentViews,(function(n){return e("NcAppNavigationItem",{key:n.id,attrs:{"allow-collapse":!0,"data-cy-files-navigation-item":n.id,icon:n.iconClass,open:t.isExpanded(n),pinned:n.sticky,title:n.name,to:t.generateToNavigation(n)},on:{"update:open":function(e){return t.onToggleExpand(n)}}},[n.icon?e("NcIconSvgWrapper",{attrs:{slot:"icon",svg:n.icon},slot:"icon"}):t._e(),t._v(" "),t._l(t.childViews[n.id],(function(n){return e("NcAppNavigationItem",{key:n.id,attrs:{"data-cy-files-navigation-item":n.id,exact:!0,icon:n.iconClass,title:n.name,to:t.generateToNavigation(n)}},[n.icon?e("NcIconSvgWrapper",{attrs:{slot:"icon",svg:n.icon},slot:"icon"}):t._e()],1)}))],2)}))},proxy:!0},{key:"footer",fn:function(){return[e("ul",{staticClass:"app-navigation-entry__settings"},[e("NavigationQuota"),t._v(" "),e("NcAppNavigationItem",{attrs:{"aria-label":t.t("files","Open the files app settings"),title:t.t("files","Files settings"),"data-cy-files-navigation-settings-button":""},on:{click:function(e){return e.preventDefault(),e.stopPropagation(),t.openSettings.apply(null,arguments)}}},[e("Cog",{attrs:{slot:"icon",size:20},slot:"icon"})],1)],1)]},proxy:!0}])},[t._v(" "),t._v(" "),e("SettingsModal",{attrs:{open:t.settingsOpened,"data-cy-files-navigation-settings":""},on:{close:t.onSettingsClose}})],1)}),[],!1,null,"657a978e",null).exports,gn=function(t){let{id:e,name:n,order:i,icon:o,parent:s,classes:r="",expanded:a,params:l}=t;OCP.Files.Navigation.register({id:e,name:n,order:i,params:l,parent:s,expanded:!0===a,iconClass:o?"icon-".concat(o):"nav-icon-"+e,legacy:!0,sticky:r.includes("pinned")})};var wn=i(78345),bn=i(97047);u.default.use(wn.ZP);const Cn=new wn.ZP({mode:"history",base:(0,a.generateUrl)("/apps/files",""),linkActiveClass:"active",routes:[{path:"/",alias:"/files"},{path:"/:view/:fileid?",name:"filelist",props:!0}],stringifyQuery(t){const e=bn.Z.stringify(t).replace(/%2F/gim,"/");return e?"?"+e:""}});function yn(t,e,n){return(e=function(t){var e=function(t,e){if("object"!=typeof t||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,"string");if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==typeof e?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}var _n,xn,Sn=i(25108);window.OCA.Files=null!==(_n=window.OCA.Files)&&void 0!==_n?_n:{},window.OCP.Files=null!==(xn=window.OCP.Files)&&void 0!==xn?xn:{};const kn=new class{constructor(t){var e,n,i;e=this,i=void 0,(n=function(t){var e=function(t,e){if("object"!=typeof t||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,"string");if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==typeof e?e:String(e)}(n="_router"))in e?Object.defineProperty(e,n,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[n]=i,this._router=t}goTo(t){let e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return this._router.push({path:t,replace:e})}goToRoute(t,e,n,i){return this._router.push({name:t,query:n,params:e,replace:i})}}(Cn);Object.assign(window.OCP.Files,{Router:kn}),u.default.use(nt.og);const In=(0,nt.WB)(),Nn=new Ee;Object.assign(window.OCP.Files,{Navigation:Nn}),u.default.prototype.$navigation=Nn;const En=new class{constructor(){var t,e,n;t=this,n=void 0,(e=function(t){var e=function(t,e){if("object"!=typeof t||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,"string");if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==typeof e?e:String(e)}(e="_settings"))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,this._settings=[],Sn.debug("OCA.Files.Settings initialized")}register(t){return this._settings.filter((e=>e.name===t.name)).length>0?(Sn.error("A setting with the same name is already registered"),!1):(this._settings.push(t),!0)}get settings(){return this._settings}};Object.assign(window.OCA.Files,{Settings:En}),Object.assign(window.OCA.Files.Settings,{Setting:class{constructor(t,e){let{el:n,open:i,close:o}=e;yn(this,"_close",void 0),yn(this,"_el",void 0),yn(this,"_name",void 0),yn(this,"_open",void 0),this._name=t,this._el=n,this._open=i,this._close=o,"function"!=typeof this._open&&(this._open=()=>{}),"function"!=typeof this._close&&(this._close=()=>{})}get name(){return this._name}get el(){return this._el}get open(){return this._open}get close(){return this._close}}}),new(u.default.extend(mn))({name:"FilesNavigationRoot",propsData:{Navigation:Nn},router:Cn,pinia:In}).$mount("#app-navigation-files"),new(u.default.extend(Le))({name:"FilesListRoot",router:Cn,pinia:In}).$mount("#app-content-vue"),function(){const t=Object.values((0,s.j)("files","navigation",{}));t.length>0&&(Q.debug("Legacy files views detected. Processing...",t),t.forEach((t=>{gn(t),t.sublist&&t.sublist.forEach((e=>gn({...e,parent:t.id})))})))}(),"serviceWorker"in navigator?window.addEventListener("load",(async()=>{try{const t=(0,a.generateUrl)("/apps/files/preview-service-worker.js",{},{noRewrite:!0}),e=await navigator.serviceWorker.register(t,{scope:"/"});Q.debug("SW registered: ",{registration:e})}catch(t){Q.error("SW registration failed: ",{error:t})}})):Q.debug("Service Worker is not enabled on this browser.")},39959:(t,e,n)=>{n.d(e,{Z:()=>a});var i=n(87537),o=n.n(i),s=n(23645),r=n.n(s)()(o());r.push([t.id,".breadcrumb[data-v-68b3b20b]{flex:1 1 100% !important;width:100%}.breadcrumb[data-v-68b3b20b] a{cursor:pointer !important}","",{version:3,sources:["webpack://./apps/files/src/components/BreadCrumbs.vue"],names:[],mappings:"AACA,6BAEC,wBAAA,CACA,UAAA,CAEA,+BACC,yBAAA",sourcesContent:["\n.breadcrumb {\n\t// Take as much space as possible\n\tflex: 1 1 100% !important;\n\twidth: 100%;\n\n\t::v-deep a {\n\t\tcursor: pointer !important;\n\t}\n}\n\n"],sourceRoot:""}]);const a=r},61959:(t,e,n)=>{n.d(e,{Z:()=>a});var i=n(87537),o=n.n(i),s=n(23645),r=n.n(s)()(o());r.push([t.id,".custom-svg-icon[data-v-93e9b2f4]{display:flex;align-items:center;align-self:center;justify-content:center;justify-self:center;width:44px;height:44px;opacity:1}.custom-svg-icon[data-v-93e9b2f4] svg{height:22px;width:22px;fill:currentColor}","",{version:3,sources:["webpack://./apps/files/src/components/CustomSvgIconRender.vue"],names:[],mappings:"AACA,kCACC,YAAA,CACA,kBAAA,CACA,iBAAA,CACA,sBAAA,CACA,mBAAA,CACA,UAAA,CACA,WAAA,CACA,SAAA,CAEA,sCAGC,WAAA,CACA,UAAA,CACA,iBAAA",sourcesContent:["\n.custom-svg-icon {\n\tdisplay: flex;\n\talign-items: center;\n\talign-self: center;\n\tjustify-content: center;\n\tjustify-self: center;\n\twidth: 44px;\n\theight: 44px;\n\topacity: 1;\n\n\t::v-deep svg {\n\t\t// mdi icons have a size of 24px\n\t\t// 22px results in roughly 16px inner size\n\t\theight: 22px;\n\t\twidth: 22px;\n\t\tfill: currentColor;\n\t}\n}\n\n"],sourceRoot:""}]);const a=r},13352:(t,e,n)=>{n.d(e,{Z:()=>a});var i=n(87537),o=n.n(i),s=n(23645),r=n.n(s)()(o());r.push([t.id,"tr[data-v-0600090e]:hover,tr[data-v-0600090e]:focus,tr[data-v-0600090e]:active{background-color:var(--color-background-dark)}.files-list__row-icon-preview[data-v-0600090e]:not([style*=background]){background:var(--color-loading-dark)}","",{version:3,sources:["webpack://./apps/files/src/components/FileEntry.vue"],names:[],mappings:"AAGC,+EAGC,6CAAA,CAKF,wEACI,oCAAA",sourcesContent:["\n/* Hover effect on tbody lines only */\ntr {\n\t&:hover,\n\t&:focus,\n\t&:active {\n\t\tbackground-color: var(--color-background-dark);\n\t}\n}\n\n/* Preview not loaded animation effect */\n.files-list__row-icon-preview:not([style*='background']) {\n    background: var(--color-loading-dark);\n\t// animation: preview-gradient-fade 1.2s ease-in-out infinite;\n}\n"],sourceRoot:""}]);const a=r},97105:(t,e,n)=>{n.d(e,{Z:()=>a});var i=n(87537),o=n.n(i),s=n(23645),r=n.n(s)()(o());r.push([t.id,"tr[data-v-e6a083be]{padding-bottom:300px;border-top:1px solid var(--color-border);background-color:rgba(0,0,0,0) !important;border-bottom:none !important}td[data-v-e6a083be]{user-select:none;color:var(--color-text-maxcontrast) !important}","",{version:3,sources:["webpack://./apps/files/src/components/FilesListFooter.vue"],names:[],mappings:"AAEA,oBACC,oBAAA,CACA,wCAAA,CAEA,yCAAA,CACA,6BAAA,CAGD,oBACC,gBAAA,CAEA,8CAAA",sourcesContent:["\n// Scoped row\ntr {\n\tpadding-bottom: 300px;\n\tborder-top: 1px solid var(--color-border);\n\t// Prevent hover effect on the whole row\n\tbackground-color: transparent !important;\n\tborder-bottom: none !important;\n}\n\ntd {\n\tuser-select: none;\n\t// Make sure the cell colors don't apply to column headers\n\tcolor: var(--color-text-maxcontrast) !important;\n}\n\n"],sourceRoot:""}]);const a=r},96153:(t,e,n)=>{n.d(e,{Z:()=>a});var i=n(87537),o=n.n(i),s=n(23645),r=n.n(s)()(o());r.push([t.id,".files-list__column[data-v-76b6186a]{user-select:none;color:var(--color-text-maxcontrast) !important}.files-list__column--sortable[data-v-76b6186a]{cursor:pointer}","",{version:3,sources:["webpack://./apps/files/src/components/FilesListHeader.vue"],names:[],mappings:"AACA,qCACC,gBAAA,CAEA,8CAAA,CAEA,+CACC,cAAA",sourcesContent:["\n.files-list__column {\n\tuser-select: none;\n\t// Make sure the cell colors don't apply to column headers\n\tcolor: var(--color-text-maxcontrast) !important;\n\n\t&--sortable {\n\t\tcursor: pointer;\n\t}\n}\n\n"],sourceRoot:""}]);const a=r},97877:(t,e,n)=>{n.d(e,{Z:()=>a});var i=n(87537),o=n.n(i),s=n(23645),r=n.n(s)()(o());r.push([t.id,".files-list__row-actions-batch[data-v-03e57b1e]{flex:1 1 100% !important}.files-list__row-actions-batch[data-v-03e57b1e] .button-vue__wrapper{width:100%}.files-list__row-actions-batch[data-v-03e57b1e] .button-vue__wrapper span.button-vue__text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}","",{version:3,sources:["webpack://./apps/files/src/components/FilesListHeaderActions.vue"],names:[],mappings:"AACA,gDACC,wBAAA,CAGA,qEACC,UAAA,CACA,2FACC,eAAA,CACA,sBAAA,CACA,kBAAA",sourcesContent:["\n.files-list__row-actions-batch {\n\tflex: 1 1 100% !important;\n\n\t// Remove when https://github.com/nextcloud/nextcloud-vue/pull/3936 is merged\n\t::v-deep .button-vue__wrapper {\n\t\twidth: 100%;\n\t\tspan.button-vue__text {\n\t\t\toverflow: hidden;\n\t\t\ttext-overflow: ellipsis;\n\t\t\twhite-space: nowrap;\n\t\t}\n\t}\n}\n"],sourceRoot:""}]);const a=r},29252:(t,e,n)=>{n.d(e,{Z:()=>a});var i=n(87537),o=n.n(i),s=n(23645),r=n.n(s)()(o());r.push([t.id,".files-list__column-sort-button{margin:0 calc(var(--cell-margin)*-1);padding:0 4px 0 16px !important}.files-list__column-sort-button .button-vue__wrapper{flex-direction:row-reverse;width:100%}.files-list__column-sort-button .button-vue__icon{transition-timing-function:linear;transition-duration:.1s;transition-property:opacity;opacity:0}.files-list__column-sort-button .button-vue__text{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.files-list__column-sort-button--active .button-vue__icon,.files-list__column-sort-button:hover .button-vue__icon,.files-list__column-sort-button:focus .button-vue__icon,.files-list__column-sort-button:active .button-vue__icon{opacity:1 !important}","",{version:3,sources:["webpack://./apps/files/src/components/FilesListHeaderButton.vue"],names:[],mappings:"AACA,gCAEC,oCAAA,CAEA,+BAAA,CAGA,qDACC,0BAAA,CAGA,UAAA,CAGD,kDACC,iCAAA,CACA,uBAAA,CACA,2BAAA,CACA,SAAA,CAID,kDACC,eAAA,CACA,kBAAA,CACA,sBAAA,CAOA,mOACC,oBAAA",sourcesContent:["\n.files-list__column-sort-button {\n\t// Compensate for cells margin\n\tmargin: 0 calc(var(--cell-margin) * -1);\n\t// Reverse padding\n\tpadding: 0 4px 0 16px !important;\n\n\t// Icon after text\n\t.button-vue__wrapper {\n\t\tflex-direction: row-reverse;\n\t\t// Take max inner width for text overflow ellipsis\n\t\t// Remove when https://github.com/nextcloud/nextcloud-vue/pull/3936 is merged\n\t\twidth: 100%;\n\t}\n\n\t.button-vue__icon {\n\t\ttransition-timing-function: linear;\n\t\ttransition-duration: .1s;\n\t\ttransition-property: opacity;\n\t\topacity: 0;\n\t}\n\n\t// Remove when https://github.com/nextcloud/nextcloud-vue/pull/3936 is merged\n\t.button-vue__text {\n\t\toverflow: hidden;\n\t\twhite-space: nowrap;\n\t\ttext-overflow: ellipsis;\n\t}\n\n\t&--active,\n\t&:hover,\n\t&:focus,\n\t&:active {\n\t\t.button-vue__icon {\n\t\t\topacity: 1 !important;\n\t\t}\n\t}\n}\n"],sourceRoot:""}]);const a=r},76775:(t,e,n)=>{n.d(e,{Z:()=>a});var i=n(87537),o=n.n(i),s=n(23645),r=n.n(s)()(o());r.push([t.id,".files-list[data-v-640a8bb8]{--row-height: 55px;--cell-margin: 14px;--checkbox-padding: calc((var(--row-height) - var(--checkbox-size)) / 2);--checkbox-size: 24px;--clickable-area: 44px;--icon-preview-size: 32px;display:block;overflow:auto;height:100%}.files-list[data-v-640a8bb8] tbody,.files-list[data-v-640a8bb8] .vue-recycle-scroller__slot{display:flex;flex-direction:column;width:100%;position:relative}.files-list[data-v-640a8bb8] .vue-recycle-scroller__slot[role=thead]{position:sticky;z-index:10;top:0;height:var(--row-height);background-color:var(--color-main-background)}.files-list[data-v-640a8bb8] tr{position:absolute;display:flex;align-items:center;width:100%;border-bottom:1px solid var(--color-border)}.files-list[data-v-640a8bb8] td,.files-list[data-v-640a8bb8] th{display:flex;align-items:center;flex:0 0 auto;justify-content:left;width:var(--row-height);height:var(--row-height);margin:0;padding:0;color:var(--color-text-maxcontrast);border:none}.files-list[data-v-640a8bb8] td span,.files-list[data-v-640a8bb8] th span{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.files-list[data-v-640a8bb8] .files-list__row-checkbox{justify-content:center}.files-list[data-v-640a8bb8] .files-list__row-checkbox .checkbox-radio-switch{display:flex;justify-content:center;--icon-size: var(--checkbox-size)}.files-list[data-v-640a8bb8] .files-list__row-checkbox .checkbox-radio-switch label.checkbox-radio-switch__label{width:var(--clickable-area);height:var(--clickable-area);margin:0;padding:calc((var(--clickable-area) - var(--checkbox-size))/2)}.files-list[data-v-640a8bb8] .files-list__row-checkbox .checkbox-radio-switch .checkbox-radio-switch__icon{margin:0 !important}.files-list[data-v-640a8bb8] .files-list__row-icon{position:relative;display:flex;overflow:visible;align-items:center;flex:0 0 var(--icon-preview-size);justify-content:center;width:var(--icon-preview-size);height:100%;margin-right:var(--checkbox-padding);color:var(--color-primary-element)}.files-list[data-v-640a8bb8] .files-list__row-icon>span{justify-content:flex-start}.files-list[data-v-640a8bb8] .files-list__row-icon>span:not(.files-list__row-icon-favorite) svg{width:var(--icon-preview-size);height:var(--icon-preview-size)}.files-list[data-v-640a8bb8] .files-list__row-icon-preview{overflow:hidden;width:var(--icon-preview-size);height:var(--icon-preview-size);border-radius:var(--border-radius);background-repeat:no-repeat;background-position:center;background-size:contain}.files-list[data-v-640a8bb8] .files-list__row-icon-favorite{position:absolute;top:4px;right:-8px;color:#fc0}.files-list[data-v-640a8bb8] .files-list__row-name{overflow:hidden;flex:1 1 auto}.files-list[data-v-640a8bb8] .files-list__row-name a{display:flex;align-items:center;width:100%;height:100%}.files-list[data-v-640a8bb8] .files-list__row-name a:focus .files-list__row-name-text,.files-list[data-v-640a8bb8] .files-list__row-name a:focus-visible .files-list__row-name-text{outline:2px solid var(--color-main-text) !important;border-radius:20px}.files-list[data-v-640a8bb8] .files-list__row-name .files-list__row-name-text{padding:5px 10px;margin-left:-10px}.files-list[data-v-640a8bb8] .files-list__row-actions{width:auto}.files-list[data-v-640a8bb8] .files-list__row-actions~td,.files-list[data-v-640a8bb8] .files-list__row-actions~th{margin:0 var(--cell-margin)}.files-list[data-v-640a8bb8] .files-list__row-actions button .button-vue__text{font-weight:normal}.files-list[data-v-640a8bb8] .files-list__row-actions button:not(:hover,:focus,:active) .button-vue__wrapper{color:var(--color-text-maxcontrast)}.files-list[data-v-640a8bb8] .files-list__row-size{justify-content:flex-end;width:calc(var(--row-height)*1.5);color:var(--color-main-text)}.files-list[data-v-640a8bb8] .files-list__row-size .files-list__column-sort-button{padding:0 16px 0 4px !important}.files-list[data-v-640a8bb8] .files-list__row-size .files-list__column-sort-button .button-vue__wrapper{flex-direction:row}.files-list[data-v-640a8bb8] .files-list__row-column-custom{width:calc(var(--row-height)*2)}","",{version:3,sources:["webpack://./apps/files/src/components/FilesListVirtual.vue"],names:[],mappings:"AACA,6BACC,kBAAA,CACA,mBAAA,CAEA,wEAAA,CACA,qBAAA,CACA,sBAAA,CACA,yBAAA,CAEA,aAAA,CACA,aAAA,CACA,WAAA,CAIC,4FACC,YAAA,CACA,qBAAA,CACA,UAAA,CAEA,iBAAA,CAID,qEAEC,eAAA,CACA,UAAA,CACA,KAAA,CACA,wBAAA,CACA,6CAAA,CAGD,gCACC,iBAAA,CACA,YAAA,CACA,kBAAA,CACA,UAAA,CACA,2CAAA,CAGD,gEACC,YAAA,CACA,kBAAA,CACA,aAAA,CACA,oBAAA,CACA,uBAAA,CACA,wBAAA,CACA,QAAA,CACA,SAAA,CACA,mCAAA,CACA,WAAA,CAKA,0EACC,eAAA,CACA,kBAAA,CACA,sBAAA,CAIF,uDACC,sBAAA,CACA,8EACC,YAAA,CACA,sBAAA,CAEA,iCAAA,CAEA,iHACC,2BAAA,CACA,4BAAA,CACA,QAAA,CACA,8DAAA,CAGD,2GACC,mBAAA,CAKH,mDACC,iBAAA,CACA,YAAA,CACA,gBAAA,CACA,kBAAA,CAEA,iCAAA,CACA,sBAAA,CACA,8BAAA,CACA,WAAA,CAEA,oCAAA,CACA,kCAAA,CAEA,wDACC,0BAAA,CAGD,gGACC,8BAAA,CACA,+BAAA,CAGD,2DACC,eAAA,CACA,8BAAA,CACA,+BAAA,CACA,kCAAA,CACA,2BAAA,CAEA,0BAAA,CACA,uBAAA,CAGD,4DACC,iBAAA,CACA,OAAA,CACA,UAAA,CACA,UAAA,CAIF,mDAEC,eAAA,CAEA,aAAA,CAEA,qDACC,YAAA,CACA,kBAAA,CAEA,UAAA,CACA,WAAA,CAGA,oLAEC,mDAAA,CACA,kBAAA,CAIF,8EAEC,gBAAA,CACA,iBAAA,CAIF,sDACC,UAAA,CAGA,kHAEC,2BAAA,CAIA,+EAEC,kBAAA,CAED,6GAEC,mCAAA,CAKH,mDAEC,wBAAA,CACA,iCAAA,CAEA,4BAAA,CAGA,mFACC,+BAAA,CACA,wGACC,kBAAA,CAKH,4DACC,+BAAA",sourcesContent:["\n.files-list {\n\t--row-height: 55px;\n\t--cell-margin: 14px;\n\n\t--checkbox-padding: calc((var(--row-height) - var(--checkbox-size)) / 2);\n\t--checkbox-size: 24px;\n\t--clickable-area: 44px;\n\t--icon-preview-size: 32px;\n\n\tdisplay: block;\n\toverflow: auto;\n\theight: 100%;\n\n\t&::v-deep {\n\t\t// Table head, body and footer\n\t\ttbody, .vue-recycle-scroller__slot {\n\t\t\tdisplay: flex;\n\t\t\tflex-direction: column;\n\t\t\twidth: 100%;\n\t\t\t// Necessary for virtual scrolling absolute\n\t\t\tposition: relative;\n\t\t}\n\n\t\t// Table header\n\t\t.vue-recycle-scroller__slot[role='thead'] {\n\t\t\t// Pinned on top when scrolling\n\t\t\tposition: sticky;\n\t\t\tz-index: 10;\n\t\t\ttop: 0;\n\t\t\theight: var(--row-height);\n\t\t\tbackground-color: var(--color-main-background);\n\t\t}\n\n\t\ttr {\n\t\t\tposition: absolute;\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\twidth: 100%;\n\t\t\tborder-bottom: 1px solid var(--color-border);\n\t\t}\n\n\t\ttd, th {\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\tflex: 0 0 auto;\n\t\t\tjustify-content: left;\n\t\t\twidth: var(--row-height);\n\t\t\theight: var(--row-height);\n\t\t\tmargin: 0;\n\t\t\tpadding: 0;\n\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t\tborder: none;\n\n\t\t\t// Columns should try to add any text\n\t\t\t// node wrapped in a span. That should help\n\t\t\t// with the ellipsis on overflow.\n\t\t\tspan {\n\t\t\t\toverflow: hidden;\n\t\t\t\twhite-space: nowrap;\n\t\t\t\ttext-overflow: ellipsis;\n\t\t\t}\n\t\t}\n\n\t\t.files-list__row-checkbox {\n\t\t\tjustify-content: center;\n\t\t\t.checkbox-radio-switch {\n\t\t\t\tdisplay: flex;\n\t\t\t\tjustify-content: center;\n\n\t\t\t\t--icon-size: var(--checkbox-size);\n\n\t\t\t\tlabel.checkbox-radio-switch__label {\n\t\t\t\t\twidth: var(--clickable-area);\n\t\t\t\t\theight: var(--clickable-area);\n\t\t\t\t\tmargin: 0;\n\t\t\t\t\tpadding: calc((var(--clickable-area) - var(--checkbox-size)) / 2);\n\t\t\t\t}\n\n\t\t\t\t.checkbox-radio-switch__icon {\n\t\t\t\t\tmargin: 0 !important;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t.files-list__row-icon {\n\t\t\tposition: relative;\n\t\t\tdisplay: flex;\n\t\t\toverflow: visible;\n\t\t\talign-items: center;\n\t\t\t// No shrinking or growing allowed\n\t\t\tflex: 0 0 var(--icon-preview-size);\n\t\t\tjustify-content: center;\n\t\t\twidth: var(--icon-preview-size);\n\t\t\theight: 100%;\n\t\t\t// Show same padding as the checkbox right padding for visual balance\n\t\t\tmargin-right: var(--checkbox-padding);\n\t\t\tcolor: var(--color-primary-element);\n\n\t\t\t& > span {\n\t\t\t\tjustify-content: flex-start;\n\t\t\t}\n\n\t\t\t&> span:not(.files-list__row-icon-favorite) svg {\n\t\t\t\twidth: var(--icon-preview-size);\n\t\t\t\theight: var(--icon-preview-size);\n\t\t\t}\n\n\t\t\t&-preview {\n\t\t\t\toverflow: hidden;\n\t\t\t\twidth: var(--icon-preview-size);\n\t\t\t\theight: var(--icon-preview-size);\n\t\t\t\tborder-radius: var(--border-radius);\n\t\t\t\tbackground-repeat: no-repeat;\n\t\t\t\t// Center and contain the preview\n\t\t\t\tbackground-position: center;\n\t\t\t\tbackground-size: contain;\n\t\t\t}\n\n\t\t\t&-favorite {\n\t\t\t\tposition: absolute;\n\t\t\t\ttop: 4px;\n\t\t\t\tright: -8px;\n\t\t\t\tcolor: #ffcc00;\n\t\t\t}\n\t\t}\n\n\t\t.files-list__row-name {\n\t\t\t// Prevent link from overflowing\n\t\t\toverflow: hidden;\n\t\t\t// Take as much space as possible\n\t\t\tflex: 1 1 auto;\n\n\t\t\ta {\n\t\t\t\tdisplay: flex;\n\t\t\t\talign-items: center;\n\t\t\t\t// Fill cell height and width\n\t\t\t\twidth: 100%;\n\t\t\t\theight: 100%;\n\n\t\t\t\t// Keyboard indicator a11y\n\t\t\t\t&:focus .files-list__row-name-text,\n\t\t\t\t&:focus-visible .files-list__row-name-text {\n\t\t\t\t\toutline: 2px solid var(--color-main-text) !important;\n\t\t\t\t\tborder-radius: 20px;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t.files-list__row-name-text {\n\t\t\t\t// Make some space for the outline\n\t\t\t\tpadding: 5px 10px;\n\t\t\t\tmargin-left: -10px;\n\t\t\t}\n\t\t}\n\n\t\t.files-list__row-actions {\n\t\t\twidth: auto;\n\n\t\t\t// Add margin to all cells after the actions\n\t\t\t& ~ td,\n\t\t\t& ~ th {\n\t\t\t\tmargin: 0 var(--cell-margin);\n\t\t\t}\n\n\t\t\tbutton {\n\t\t\t\t.button-vue__text {\n\t\t\t\t\t// Remove bold from default button styling\n\t\t\t\t\tfont-weight: normal;\n\t\t\t\t}\n\t\t\t\t&:not(:hover, :focus, :active) .button-vue__wrapper {\n\t\t\t\t\t// Also apply color-text-maxcontrast to non-active button\n\t\t\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t.files-list__row-size {\n\t\t\t// Right align text\n\t\t\tjustify-content: flex-end;\n\t\t\twidth: calc(var(--row-height) * 1.5);\n\t\t\t// opacity varies with the size\n\t\t\tcolor: var(--color-main-text);\n\n\t\t\t// Icon is before text since size is right aligned\n\t\t\t.files-list__column-sort-button {\n\t\t\t\tpadding: 0 16px 0 4px !important;\n\t\t\t\t.button-vue__wrapper {\n\t\t\t\t\tflex-direction: row;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t.files-list__row-column-custom {\n\t\t\twidth: calc(var(--row-height) * 2);\n\t\t}\n\t}\n}\n"],sourceRoot:""}]);const a=r},93582:(t,e,n)=>{n.d(e,{Z:()=>a});var i=n(87537),o=n.n(i),s=n(23645),r=n.n(s)()(o());r.push([t.id,".app-navigation-entry__settings-quota--not-unlimited[data-v-918797b2] .app-navigation-entry__title{margin-top:-4px}.app-navigation-entry__settings-quota progress[data-v-918797b2]{position:absolute;bottom:10px;margin-left:44px;width:calc(100% - 44px - 22px)}","",{version:3,sources:["webpack://./apps/files/src/components/NavigationQuota.vue"],names:[],mappings:"AAIC,mGACC,eAAA,CAGD,gEACC,iBAAA,CACA,WAAA,CACA,gBAAA,CACA,8BAAA",sourcesContent:["\n// User storage stats display\n.app-navigation-entry__settings-quota {\n\t// Align title with progress and icon\n\t&--not-unlimited::v-deep .app-navigation-entry__title {\n\t\tmargin-top: -4px;\n\t}\n\n\tprogress {\n\t\tposition: absolute;\n\t\tbottom: 10px;\n\t\tmargin-left: 44px;\n\t\twidth: calc(100% - 44px - 22px);\n\t}\n}\n"],sourceRoot:""}]);const a=r},3491:(t,e,n)=>{n.d(e,{Z:()=>a});var i=n(87537),o=n.n(i),s=n(23645),r=n.n(s)()(o());r.push([t.id,".template-picker__item[data-v-6c072a31]{display:flex}.template-picker__label[data-v-6c072a31]{display:flex;align-items:center;flex:1 1;flex-direction:column}.template-picker__label[data-v-6c072a31],.template-picker__label *[data-v-6c072a31]{cursor:pointer;user-select:none}.template-picker__label[data-v-6c072a31]::before{display:none !important}.template-picker__preview[data-v-6c072a31]{display:block;overflow:hidden;flex:1 1;width:var(--width);min-height:var(--height);max-height:var(--height);padding:0;border:var(--border) solid var(--color-border);border-radius:var(--border-radius-large)}input:checked+label>.template-picker__preview[data-v-6c072a31]{border-color:var(--color-primary)}.template-picker__preview--failed[data-v-6c072a31]{display:flex}.template-picker__image[data-v-6c072a31]{max-width:100%;background-color:var(--color-main-background);object-fit:cover}.template-picker__preview--failed .template-picker__image[data-v-6c072a31]{width:calc(var(--margin)*8);margin:auto;background-color:rgba(0,0,0,0) !important;object-fit:initial}.template-picker__title[data-v-6c072a31]{overflow:hidden;max-width:calc(var(--width) + 4px);padding:var(--margin);white-space:nowrap;text-overflow:ellipsis}","",{version:3,sources:["webpack://./apps/files/src/components/TemplatePreview.vue"],names:[],mappings:"AAGC,wCACC,YAAA,CAGD,yCACC,YAAA,CAEA,kBAAA,CACA,QAAA,CACA,qBAAA,CAEA,oFACC,cAAA,CACA,gBAAA,CAGD,iDACC,uBAAA,CAIF,2CACC,aAAA,CACA,eAAA,CAEA,QAAA,CACA,kBAAA,CACA,wBAAA,CACA,wBAAA,CACA,SAAA,CACA,8CAAA,CACA,wCAAA,CAEA,+DACC,iCAAA,CAGD,mDAEC,YAAA,CAIF,yCACC,cAAA,CACA,6CAAA,CAEA,gBAAA,CAID,2EACC,2BAAA,CAEA,WAAA,CACA,yCAAA,CAEA,kBAAA,CAGD,yCACC,eAAA,CAEA,kCAAA,CACA,qBAAA,CACA,kBAAA,CACA,sBAAA",sourcesContent:["\n\n.template-picker {\n\t&__item {\n\t\tdisplay: flex;\n\t}\n\n\t&__label {\n\t\tdisplay: flex;\n\t\t// Align in the middle of the grid\n\t\talign-items: center;\n\t\tflex: 1 1;\n\t\tflex-direction: column;\n\n\t\t&, * {\n\t\t\tcursor: pointer;\n\t\t\tuser-select: none;\n\t\t}\n\n\t\t&::before {\n\t\t\tdisplay: none !important;\n\t\t}\n\t}\n\n\t&__preview {\n\t\tdisplay: block;\n\t\toverflow: hidden;\n\t\t// Stretch so all entries are the same width\n\t\tflex: 1 1;\n\t\twidth: var(--width);\n\t\tmin-height: var(--height);\n\t\tmax-height: var(--height);\n\t\tpadding: 0;\n\t\tborder: var(--border) solid var(--color-border);\n\t\tborder-radius: var(--border-radius-large);\n\n\t\tinput:checked + label > & {\n\t\t\tborder-color: var(--color-primary);\n\t\t}\n\n\t\t&--failed {\n\t\t\t// Make sure to properly center fallback icon\n\t\t\tdisplay: flex;\n\t\t}\n\t}\n\n\t&__image {\n\t\tmax-width: 100%;\n\t\tbackground-color: var(--color-main-background);\n\n\t\tobject-fit: cover;\n\t}\n\n\t// Failed preview, fallback to mime icon\n\t&__preview--failed &__image {\n\t\twidth: calc(var(--margin) * 8);\n\t\t// Center mime icon\n\t\tmargin: auto;\n\t\tbackground-color: transparent !important;\n\n\t\tobject-fit: initial;\n\t}\n\n\t&__title {\n\t\toverflow: hidden;\n\t\t// also count preview border\n\t\tmax-width: calc(var(--width) + 2*2px);\n\t\tpadding: var(--margin);\n\t\twhite-space: nowrap;\n\t\ttext-overflow: ellipsis;\n\t}\n}\n\n"],sourceRoot:""}]);const a=r},1508:(t,e,n)=>{n.d(e,{Z:()=>a});var i=n(87537),o=n.n(i),s=n(23645),r=n.n(s)()(o());r.push([t.id,".app-content[data-v-66068cbb]{display:flex;overflow:hidden;flex-direction:column;max-height:100%}.app-content[data-v-66068cbb]:not(.app-content--hidden)+#app-content{display:none}.files-list__header[data-v-66068cbb]{display:flex;align-content:center;flex:0 0;margin:4px 4px 4px 50px}.files-list__header>*[data-v-66068cbb]{flex:0 0}.files-list__refresh-icon[data-v-66068cbb]{flex:0 0 44px;width:44px;height:44px}.files-list__loading-icon[data-v-66068cbb]{margin:auto}","",{version:3,sources:["webpack://./apps/files/src/views/FilesList.vue"],names:[],mappings:"AACA,8BAEC,YAAA,CACA,eAAA,CACA,qBAAA,CACA,eAAA,CAIA,qEACC,YAAA,CAQD,qCACC,YAAA,CACA,oBAAA,CAEA,QAAA,CAEA,uBAAA,CACA,uCAGC,QAAA,CAGF,2CACC,aAAA,CACA,UAAA,CACA,WAAA,CAED,2CACC,WAAA",sourcesContent:["\n.app-content {\n\t// Virtual list needs to be full height and is scrollable\n\tdisplay: flex;\n\toverflow: hidden;\n\tflex-direction: column;\n\tmax-height: 100%;\n\n\t// TODO: remove after all legacy views are migrated\n\t// Hides the legacy app-content if shown view is not legacy\n\t&:not(&--hidden)::v-deep + #app-content {\n\t\tdisplay: none;\n\t}\n}\n\n$margin: 4px;\n$navigationToggleSize: 50px;\n\n.files-list {\n\t&__header {\n\t\tdisplay: flex;\n\t\talign-content: center;\n\t\t// Do not grow or shrink (vertically)\n\t\tflex: 0 0;\n\t\t// Align with the navigation toggle icon\n\t\tmargin: $margin $margin $margin $navigationToggleSize;\n\t\t> * {\n\t\t\t// Do not grow or shrink (horizontally)\n\t\t\t// Only the breadcrumbs shrinks\n\t\t\tflex: 0 0;\n\t\t}\n\t}\n\t&__refresh-icon {\n\t\tflex: 0 0 44px;\n\t\twidth: 44px;\n\t\theight: 44px;\n\t}\n\t&__loading-icon {\n\t\tmargin: auto;\n\t}\n}\n\n"],sourceRoot:""}]);const a=r},87289:(t,e,n)=>{n.d(e,{Z:()=>a});var i=n(87537),o=n.n(i),s=n(23645),r=n.n(s)()(o());r.push([t.id,".app-navigation[data-v-657a978e] .app-navigation-entry-icon{background-repeat:no-repeat;background-position:center}.app-navigation>ul.app-navigation__list[data-v-657a978e]{padding-bottom:var(--default-grid-baseline, 4px)}.app-navigation-entry__settings[data-v-657a978e]{height:auto !important;overflow:hidden !important;padding-top:0 !important;flex:0 0 auto}","",{version:3,sources:["webpack://./apps/files/src/views/Navigation.vue"],names:[],mappings:"AAEA,4DACC,2BAAA,CACA,0BAAA,CAGD,yDAEC,gDAAA,CAGD,iDACC,sBAAA,CACA,0BAAA,CACA,wBAAA,CAEA,aAAA",sourcesContent:["\n// TODO: remove when https://github.com/nextcloud/nextcloud-vue/pull/3539 is in\n.app-navigation::v-deep .app-navigation-entry-icon {\n\tbackground-repeat: no-repeat;\n\tbackground-position: center;\n}\n\n.app-navigation > ul.app-navigation__list {\n\t// Use flex gap value for more elegant spacing\n\tpadding-bottom: var(--default-grid-baseline, 4px);\n}\n\n.app-navigation-entry__settings {\n\theight: auto !important;\n\toverflow: hidden !important;\n\tpadding-top: 0 !important;\n\t// Prevent shrinking or growing\n\tflex: 0 0 auto;\n}\n"],sourceRoot:""}]);const a=r},35662:(t,e,n)=>{n.d(e,{Z:()=>a});var i=n(87537),o=n.n(i),s=n(23645),r=n.n(s)()(o());r.push([t.id,".setting-link[data-v-76ca5d1f]:hover{text-decoration:underline}","",{version:3,sources:["webpack://./apps/files/src/views/Settings.vue"],names:[],mappings:"AACA,qCACC,yBAAA",sourcesContent:["\n.setting-link:hover {\n\ttext-decoration: underline;\n}\n"],sourceRoot:""}]);const a=r},5103:(t,e,n)=>{n.d(e,{Z:()=>a});var i=n(87537),o=n.n(i),s=n(23645),r=n.n(s)()(o());r.push([t.id,".templates-picker__form[data-v-715b4161]{padding:calc(var(--margin)*2);padding-bottom:0}.templates-picker__form h2[data-v-715b4161]{text-align:center;font-weight:bold;margin:var(--margin) 0 calc(var(--margin)*2)}.templates-picker__list[data-v-715b4161]{display:grid;grid-gap:calc(var(--margin)*2);grid-auto-columns:1fr;max-width:calc(var(--fullwidth)*6);grid-template-columns:repeat(auto-fit, var(--fullwidth));grid-auto-rows:1fr;justify-content:center}.templates-picker__buttons[data-v-715b4161]{display:flex;justify-content:space-between;padding:calc(var(--margin)*2) var(--margin);position:sticky;bottom:0;background-image:linear-gradient(0, var(--gradient-main-background))}.templates-picker__buttons button[data-v-715b4161],.templates-picker__buttons input[type=submit][data-v-715b4161]{height:44px}.templates-picker[data-v-715b4161] .modal-container{position:relative}.templates-picker__loading[data-v-715b4161]{position:absolute;top:0;left:0;justify-content:center;width:100%;height:100%;margin:0;background-color:var(--color-main-background-translucent)}","",{version:3,sources:["webpack://./apps/files/src/views/TemplatePicker.vue"],names:[],mappings:"AAEC,yCACC,6BAAA,CAEA,gBAAA,CAEA,4CACC,iBAAA,CACA,gBAAA,CACA,4CAAA,CAIF,yCACC,YAAA,CACA,8BAAA,CACA,qBAAA,CAEA,kCAAA,CACA,wDAAA,CAEA,kBAAA,CAEA,sBAAA,CAGD,4CACC,YAAA,CACA,6BAAA,CACA,2CAAA,CACA,eAAA,CACA,QAAA,CACA,oEAAA,CAEA,kHACC,WAAA,CAKF,oDACC,iBAAA,CAGD,4CACC,iBAAA,CACA,KAAA,CACA,MAAA,CACA,sBAAA,CACA,UAAA,CACA,WAAA,CACA,QAAA,CACA,yDAAA",sourcesContent:["\n.templates-picker {\n\t&__form {\n\t\tpadding: calc(var(--margin) * 2);\n\t\t// Will be handled by the buttons\n\t\tpadding-bottom: 0;\n\n\t\th2 {\n\t\t\ttext-align: center;\n\t\t\tfont-weight: bold;\n\t\t\tmargin: var(--margin) 0 calc(var(--margin) * 2);\n\t\t}\n\t}\n\n\t&__list {\n\t\tdisplay: grid;\n\t\tgrid-gap: calc(var(--margin) * 2);\n\t\tgrid-auto-columns: 1fr;\n\t\t// We want maximum 5 columns. Putting 6 as we don't count the grid gap. So it will always be lower than 6\n\t\tmax-width: calc(var(--fullwidth) * 6);\n\t\tgrid-template-columns: repeat(auto-fit, var(--fullwidth));\n\t\t// Make sure all rows are the same height\n\t\tgrid-auto-rows: 1fr;\n\t\t// Center the columns set\n\t\tjustify-content: center;\n\t}\n\n\t&__buttons {\n\t\tdisplay: flex;\n\t\tjustify-content: space-between;\n\t\tpadding: calc(var(--margin) * 2) var(--margin);\n\t\tposition: sticky;\n\t\tbottom: 0;\n\t\tbackground-image: linear-gradient(0, var(--gradient-main-background));\n\n\t\tbutton, input[type='submit'] {\n\t\t\theight: 44px;\n\t\t}\n\t}\n\n\t// Make sure we're relative for the loading emptycontent on top\n\t::v-deep .modal-container {\n\t\tposition: relative;\n\t}\n\n\t&__loading {\n\t\tposition: absolute;\n\t\ttop: 0;\n\t\tleft: 0;\n\t\tjustify-content: center;\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\tmargin: 0;\n\t\tbackground-color: var(--color-main-background-translucent);\n\t}\n}\n\n"],sourceRoot:""}]);const a=r},37020:(t,e,n)=>{n.d(e,{Z:()=>a});var i=n(87537),o=n.n(i),s=n(23645),r=n.n(s)()(o());r.push([t.id,"\n/* @keyframes preview-gradient-fade {\n    0% {\n        opacity: 1;\n    }\n    50% {\n        opacity: 0.5;\n    }\n    100% {\n        opacity: 1;\n    }\n} */\n","",{version:3,sources:["webpack://./apps/files/src/components/FileEntry.vue"],names:[],mappings:";AA6mBA;;;;;;;;;;GAUA",sourcesContent:["\x3c!--\n  - @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n  -\n  - @author John Molakvoæ <skjnldsv@protonmail.com>\n  -\n  - @license GNU AGPL version 3 or any later version\n  -\n  - This program is free software: you can redistribute it and/or modify\n  - it under the terms of the GNU Affero General Public License as\n  - published by the Free Software Foundation, either version 3 of the\n  - License, or (at your option) any later version.\n  -\n  - This program is distributed in the hope that it will be useful,\n  - but WITHOUT ANY WARRANTY; without even the implied warranty of\n  - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n  - GNU Affero General Public License for more details.\n  -\n  - You should have received a copy of the GNU Affero General Public License\n  - along with this program. If not, see <http://www.gnu.org/licenses/>.\n  -\n  --\x3e\n\n<template>\n\t<Fragment>\n\t\t<td class=\"files-list__row-checkbox\">\n\t\t\t<NcCheckboxRadioSwitch v-if=\"active\"\n\t\t\t\t:aria-label=\"t('files', 'Select the row for {displayName}', { displayName })\"\n\t\t\t\t:checked=\"selectedFiles\"\n\t\t\t\t:value=\"fileid\"\n\t\t\t\tname=\"selectedFiles\"\n\t\t\t\t@update:checked=\"onSelectionChange\" />\n\t\t</td>\n\n\t\t\x3c!-- Link to file --\x3e\n\t\t<td class=\"files-list__row-name\">\n\t\t\t<a ref=\"name\" v-bind=\"linkTo\" @click=\"execDefaultAction\">\n\t\t\t\t\x3c!-- Icon or preview --\x3e\n\t\t\t\t<span class=\"files-list__row-icon\">\n\t\t\t\t\t<FolderIcon v-if=\"source.type === 'folder'\" />\n\n\t\t\t\t\t\x3c!-- Decorative image, should not be aria documented --\x3e\n\t\t\t\t\t<span v-else-if=\"previewUrl && !backgroundFailed\"\n\t\t\t\t\t\tref=\"previewImg\"\n\t\t\t\t\t\tclass=\"files-list__row-icon-preview\"\n\t\t\t\t\t\t:style=\"{ backgroundImage }\" />\n\n\t\t\t\t\t<span v-else-if=\"mimeIconUrl\"\n\t\t\t\t\t\tclass=\"files-list__row-icon-preview files-list__row-icon-preview--mime\"\n\t\t\t\t\t\t:style=\"{ backgroundImage: mimeIconUrl }\" />\n\n\t\t\t\t\t<FileIcon v-else />\n\n\t\t\t\t\t\x3c!-- Favorite icon --\x3e\n\t\t\t\t\t<span v-if=\"isFavorite\"\n\t\t\t\t\t\tclass=\"files-list__row-icon-favorite\"\n\t\t\t\t\t\t:aria-label=\"t('files', 'Favorite')\">\n\t\t\t\t\t\t<StarIcon aria-hidden=\"true\" :size=\"20\" />\n\t\t\t\t\t</span>\n\t\t\t\t</span>\n\n\t\t\t\t\x3c!-- File name --\x3e\n\t\t\t\t<span class=\"files-list__row-name-text\">{{ displayName }}</span>\n\t\t\t</a>\n\t\t</td>\n\n\t\t\x3c!-- Actions --\x3e\n\t\t<td :class=\"`files-list__row-actions-${uniqueId}`\" class=\"files-list__row-actions\">\n\t\t\t\x3c!-- Inline actions --\x3e\n\t\t\t\x3c!-- TODO: implement CustomElementRender --\x3e\n\n\t\t\t\x3c!-- Menu actions --\x3e\n\t\t\t<NcActions v-if=\"active\"\n\t\t\t\tref=\"actionsMenu\"\n\t\t\t\t:boundaries-element=\"boundariesElement\"\n\t\t\t\t:container=\"boundariesElement\"\n\t\t\t\t:disabled=\"source._loading\"\n\t\t\t\t:force-title=\"true\"\n\t\t\t\t:force-menu=\"true\"\n\t\t\t\t:inline=\"enabledInlineActions.length\"\n\t\t\t\t:open.sync=\"openedMenu\">\n\t\t\t\t<NcActionButton v-for=\"action in enabledMenuActions\"\n\t\t\t\t\t:key=\"action.id\"\n\t\t\t\t\t:class=\"'files-list__row-action-' + action.id\"\n\t\t\t\t\t@click=\"onActionClick(action)\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<NcLoadingIcon v-if=\"loading === action.id\" :size=\"18\" />\n\t\t\t\t\t\t<CustomSvgIconRender v-else :svg=\"action.iconSvgInline([source], currentView)\" />\n\t\t\t\t\t</template>\n\t\t\t\t\t{{ action.displayName([source], currentView) }}\n\t\t\t\t</NcActionButton>\n\t\t\t</NcActions>\n\t\t</td>\n\n\t\t\x3c!-- Size --\x3e\n\t\t<td v-if=\"isSizeAvailable\"\n\t\t\t:style=\"{ opacity: sizeOpacity }\"\n\t\t\tclass=\"files-list__row-size\"\n\t\t\t@click=\"openDetailsIfAvailable\">\n\t\t\t<span>{{ size }}</span>\n\t\t</td>\n\n\t\t\x3c!-- View columns --\x3e\n\t\t<td v-for=\"column in columns\"\n\t\t\t:key=\"column.id\"\n\t\t\t:class=\"`files-list__row-${currentView?.id}-${column.id}`\"\n\t\t\tclass=\"files-list__row-column-custom\"\n\t\t\t@click=\"openDetailsIfAvailable\">\n\t\t\t<CustomElementRender v-if=\"active\"\n\t\t\t\t:current-view=\"currentView\"\n\t\t\t\t:render=\"column.render\"\n\t\t\t\t:source=\"source\" />\n\t\t</td>\n\t</Fragment>\n</template>\n\n<script lang='ts'>\nimport { debounce } from 'debounce'\nimport { formatFileSize } from '@nextcloud/files'\nimport { Fragment } from 'vue-frag'\nimport { join } from 'path'\nimport { showError, showSuccess } from '@nextcloud/dialogs'\nimport { translate } from '@nextcloud/l10n'\nimport CancelablePromise from 'cancelable-promise'\nimport FileIcon from 'vue-material-design-icons/File.vue'\nimport FolderIcon from 'vue-material-design-icons/Folder.vue'\nimport NcActionButton from '@nextcloud/vue/dist/Components/NcActionButton.js'\nimport NcActions from '@nextcloud/vue/dist/Components/NcActions.js'\nimport NcCheckboxRadioSwitch from '@nextcloud/vue/dist/Components/NcCheckboxRadioSwitch.js'\nimport NcLoadingIcon from '@nextcloud/vue/dist/Components/NcLoadingIcon.js'\nimport StarIcon from 'vue-material-design-icons/Star.vue'\nimport Vue from 'vue'\n\nimport { ACTION_DETAILS } from '../actions/sidebarAction.ts'\nimport { getFileActions } from '../services/FileAction.ts'\nimport { hashCode } from '../utils/hashUtils.ts'\nimport { isCachedPreview } from '../services/PreviewService.ts'\nimport { useActionsMenuStore } from '../store/actionsmenu.ts'\nimport { useFilesStore } from '../store/files.ts'\nimport { useKeyboardStore } from '../store/keyboard.ts'\nimport { useSelectionStore } from '../store/selection.ts'\nimport { useUserConfigStore } from '../store/userconfig.ts'\nimport CustomElementRender from './CustomElementRender.vue'\nimport CustomSvgIconRender from './CustomSvgIconRender.vue'\nimport logger from '../logger.js'\n\n// The registered actions list\nconst actions = getFileActions()\n\nexport default Vue.extend({\n\tname: 'FileEntry',\n\n\tcomponents: {\n\t\tCustomElementRender,\n\t\tCustomSvgIconRender,\n\t\tFileIcon,\n\t\tFolderIcon,\n\t\tFragment,\n\t\tNcActionButton,\n\t\tNcActions,\n\t\tNcCheckboxRadioSwitch,\n\t\tNcLoadingIcon,\n\t\tStarIcon,\n\t},\n\n\tprops: {\n\t\tactive: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tisSizeAvailable: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tsource: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t\tindex: {\n\t\t\ttype: Number,\n\t\t\trequired: true,\n\t\t},\n\t\tnodes: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t},\n\t\tfilesListWidth: {\n\t\t\ttype: Number,\n\t\t\tdefault: 0,\n\t\t},\n\t},\n\n\tsetup() {\n\t\tconst actionsMenuStore = useActionsMenuStore()\n\t\tconst filesStore = useFilesStore()\n\t\tconst keyboardStore = useKeyboardStore()\n\t\tconst selectionStore = useSelectionStore()\n\t\tconst userConfigStore = useUserConfigStore()\n\t\treturn {\n\t\t\tactionsMenuStore,\n\t\t\tfilesStore,\n\t\t\tkeyboardStore,\n\t\t\tselectionStore,\n\t\t\tuserConfigStore,\n\t\t}\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tbackgroundFailed: false,\n\t\t\tbackgroundImage: '',\n\t\t\tboundariesElement: document.querySelector('.app-content > .files-list'),\n\t\t\tloading: '',\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tuserConfig() {\n\t\t\treturn this.userConfigStore.userConfig\n\t\t},\n\n\t\tcurrentView() {\n\t\t\treturn this.$navigation.active\n\t\t},\n\t\tcolumns() {\n\t\t\t// Hide columns if the list is too small\n\t\t\tif (this.filesListWidth < 512) {\n\t\t\t\treturn []\n\t\t\t}\n\t\t\treturn this.currentView?.columns || []\n\t\t},\n\n\t\tdir() {\n\t\t\t// Remove any trailing slash but leave root slash\n\t\t\treturn (this.$route?.query?.dir || '/').replace(/^(.+)\\/$/, '$1')\n\t\t},\n\t\tfileid() {\n\t\t\treturn this.source?.fileid?.toString?.()\n\t\t},\n\t\tdisplayName() {\n\t\t\treturn this.source.attributes.displayName\n\t\t\t\t|| this.source.basename\n\t\t},\n\n\t\tsize() {\n\t\t\tconst size = parseInt(this.source.size, 10) || 0\n\t\t\tif (typeof size !== 'number' || size < 0) {\n\t\t\t\treturn this.t('files', 'Pending')\n\t\t\t}\n\t\t\treturn formatFileSize(size, true)\n\t\t},\n\t\tsizeOpacity() {\n\t\t\tconst size = parseInt(this.source.size, 10) || 0\n\t\t\tif (!size || size < 0) {\n\t\t\t\treturn 1\n\t\t\t}\n\n\t\t\t// Whatever theme is active, the contrast will pass WCAG AA\n\t\t\t// with color main text over main background and an opacity of 0.7\n\t\t\tconst minOpacity = 0.7\n\t\t\tconst maxOpacitySize = 10 * 1024 * 1024\n\t\t\treturn minOpacity + (1 - minOpacity) * Math.pow((this.source.size / maxOpacitySize), 2)\n\t\t},\n\n\t\tlinkTo() {\n\t\t\tif (this.source.type === 'folder') {\n\t\t\t\tconst to = { ...this.$route, query: { dir: join(this.dir, this.source.basename) } }\n\t\t\t\treturn {\n\t\t\t\t\tis: 'router-link',\n\t\t\t\t\ttitle: this.t('files', 'Open folder {name}', { name: this.displayName }),\n\t\t\t\t\tto,\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.enabledDefaultActions.length > 0) {\n\t\t\t\tconst action = this.enabledDefaultActions[0]\n\t\t\t\tconst displayName = action.displayName([this.source], this.currentView)\n\t\t\t\treturn {\n\t\t\t\t\ttitle: displayName,\n\t\t\t\t\trole: 'button',\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\thref: this.source.source,\n\t\t\t\t// TODO: Use first action title ?\n\t\t\t\ttitle: this.t('files', 'Download file {name}', { name: this.displayName }),\n\t\t\t}\n\t\t},\n\n\t\tselectedFiles() {\n\t\t\treturn this.selectionStore.selected\n\t\t},\n\t\tisSelected() {\n\t\t\treturn this.selectedFiles.includes(this.source?.fileid?.toString?.())\n\t\t},\n\n\t\tcropPreviews() {\n\t\t\treturn this.userConfig.crop_image_previews\n\t\t},\n\t\tpreviewUrl() {\n\t\t\ttry {\n\t\t\t\tconst url = new URL(window.location.origin + this.source.attributes.previewUrl)\n\t\t\t\t// Request tiny previews\n\t\t\t\turl.searchParams.set('x', '32')\n\t\t\t\turl.searchParams.set('y', '32')\n\t\t\t\t// Handle cropping\n\t\t\t\turl.searchParams.set('a', this.cropPreviews === true ? '0' : '1')\n\t\t\t\treturn url.href\n\t\t\t} catch (e) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t},\n\t\tmimeIconUrl() {\n\t\t\tconst mimeType = this.source.mime || 'application/octet-stream'\n\t\t\tconst mimeIconUrl = window.OC?.MimeType?.getIconUrl?.(mimeType)\n\t\t\tif (mimeIconUrl) {\n\t\t\t\treturn `url(${mimeIconUrl})`\n\t\t\t}\n\t\t\treturn ''\n\t\t},\n\n\t\tenabledActions() {\n\t\t\treturn actions\n\t\t\t\t.filter(action => !action.enabled || action.enabled([this.source], this.currentView))\n\t\t\t\t.sort((a, b) => (a.order || 0) - (b.order || 0))\n\t\t},\n\t\tenabledInlineActions() {\n\t\t\tif (this.filesListWidth < 768) {\n\t\t\t\treturn []\n\t\t\t}\n\t\t\treturn this.enabledActions.filter(action => action?.inline?.(this.source, this.currentView))\n\t\t},\n\t\tenabledMenuActions() {\n\t\t\tif (this.filesListWidth < 768) {\n\t\t\t\t// If we have a default action, do not render the first one\n\t\t\t\tif (this.enabledDefaultActions.length > 0) {\n\t\t\t\t\treturn this.enabledActions.slice(1)\n\t\t\t\t}\n\t\t\t\treturn this.enabledActions\n\t\t\t}\n\n\t\t\tconst actions = [\n\t\t\t\t...this.enabledInlineActions,\n\t\t\t\t...this.enabledActions.filter(action => !action.inline),\n\t\t\t]\n\n\t\t\t// If we have a default action, do not render the first one\n\t\t\tif (this.enabledDefaultActions.length > 0) {\n\t\t\t\treturn actions.slice(1)\n\t\t\t}\n\n\t\t\treturn actions\n\t\t},\n\t\tenabledDefaultActions() {\n\t\t\treturn [\n\t\t\t\t...this.enabledActions.filter(action => action.default),\n\t\t\t]\n\t\t},\n\t\topenedMenu: {\n\t\t\tget() {\n\t\t\t\treturn this.actionsMenuStore.opened === this.uniqueId\n\t\t\t},\n\t\t\tset(opened) {\n\t\t\t\tthis.actionsMenuStore.opened = opened ? this.uniqueId : null\n\t\t\t},\n\t\t},\n\n\t\tuniqueId() {\n\t\t\treturn hashCode(this.source.source)\n\t\t},\n\n\t\tisFavorite() {\n\t\t\treturn this.source.attributes.favorite === 1\n\t\t},\n\t},\n\n\twatch: {\n\t\tactive(active, before) {\n\t\t\tif (active === false && before === true) {\n\t\t\t\tthis.resetState()\n\n\t\t\t\t// When the row is not active anymore\n\t\t\t\t// remove the display from the row to prevent\n\t\t\t\t// keyboard interaction with it.\n\t\t\t\tthis.$el.parentNode.style.display = 'none'\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// Restore default tabindex\n\t\t\tthis.$el.parentNode.style.display = ''\n\t\t},\n\n\t\t/**\n\t\t * When the source changes, reset the preview\n\t\t * and fetch the new one.\n\t\t */\n\t\tpreviewUrl() {\n\t\t\tthis.clearImg()\n\t\t\tthis.debounceIfNotCached()\n\t\t},\n\t},\n\n\t/**\n\t * The row is mounted once and reused as we scroll.\n\t */\n\tmounted() {\n\t\t// ⚠ Init the debounce function on mount and\n\t\t// not when the module is imported  to\n\t\t// avoid sharing between recycled components\n\t\tthis.debounceGetPreview = debounce(function() {\n\t\t\tthis.fetchAndApplyPreview()\n\t\t}, 150, false)\n\n\t\t// Fetch the preview on init\n\t\tthis.debounceIfNotCached()\n\n\t\t// Right click watcher on tr\n\t\tthis.$el.parentNode?.addEventListener?.('contextmenu', this.onRightClick)\n\t},\n\n\tbeforeDestroy() {\n\t\tthis.resetState()\n\t},\n\n\tmethods: {\n\t\tasync debounceIfNotCached() {\n\t\t\tif (!this.previewUrl) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// Check if we already have this preview cached\n\t\t\tconst isCached = await isCachedPreview(this.previewUrl)\n\t\t\tif (isCached) {\n\t\t\t\tthis.backgroundImage = `url(${this.previewUrl})`\n\t\t\t\tthis.backgroundFailed = false\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// We don't have this preview cached or it expired, requesting it\n\t\t\tthis.debounceGetPreview()\n\t\t},\n\n\t\tfetchAndApplyPreview() {\n\t\t\t// Ignore if no preview\n\t\t\tif (!this.previewUrl) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// If any image is being processed, reset it\n\t\t\tif (this.previewPromise) {\n\t\t\t\tthis.clearImg()\n\t\t\t}\n\n\t\t\t// Store the promise to be able to cancel it\n\t\t\tthis.previewPromise = new CancelablePromise((resolve, reject, onCancel) => {\n\t\t\t\tconst img = new Image()\n\t\t\t\t// If active, load the preview with higher priority\n\t\t\t\timg.fetchpriority = this.active ? 'high' : 'auto'\n\t\t\t\timg.onload = () => {\n\t\t\t\t\tthis.backgroundImage = `url(${this.previewUrl})`\n\t\t\t\t\tthis.backgroundFailed = false\n\t\t\t\t\tresolve(img)\n\t\t\t\t}\n\t\t\t\timg.onerror = () => {\n\t\t\t\t\tthis.backgroundFailed = true\n\t\t\t\t\treject(img)\n\t\t\t\t}\n\t\t\t\timg.src = this.previewUrl\n\n\t\t\t\t// Image loading has been canceled\n\t\t\t\tonCancel(() => {\n\t\t\t\t\timg.onerror = null\n\t\t\t\t\timg.onload = null\n\t\t\t\t\timg.src = ''\n\t\t\t\t})\n\t\t\t})\n\t\t},\n\n\t\tresetState() {\n\t\t\t// Reset loading state\n\t\t\tthis.loading = ''\n\n\t\t\t// Reset the preview\n\t\t\tthis.clearImg()\n\n\t\t\t// Close menu\n\t\t\tthis.openedMenu = false\n\t\t},\n\n\t\tclearImg() {\n\t\t\tthis.backgroundImage = ''\n\t\t\tthis.backgroundFailed = false\n\n\t\t\tif (this.previewPromise) {\n\t\t\t\tthis.previewPromise.cancel()\n\t\t\t\tthis.previewPromise = null\n\t\t\t}\n\t\t},\n\n\t\tasync onActionClick(action) {\n\t\t\tconst displayName = action.displayName([this.source], this.currentView)\n\t\t\ttry {\n\t\t\t\t// Set the loading marker\n\t\t\t\tthis.loading = action.id\n\t\t\t\tVue.set(this.source, '_loading', true)\n\n\t\t\t\tconst success = await action.exec(this.source, this.currentView, this.dir)\n\n\t\t\t\t// If the action returns null, we stay silent\n\t\t\t\tif (success === null) {\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\tif (success) {\n\t\t\t\t\tshowSuccess(this.t('files', '\"{displayName}\" action executed successfully', { displayName }))\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tshowError(this.t('files', '\"{displayName}\" action failed', { displayName }))\n\t\t\t} catch (e) {\n\t\t\t\tlogger.error('Error while executing action', { action, e })\n\t\t\t\tshowError(this.t('files', '\"{displayName}\" action failed', { displayName }))\n\t\t\t} finally {\n\t\t\t\t// Reset the loading marker\n\t\t\t\tthis.loading = ''\n\t\t\t\tVue.set(this.source, '_loading', false)\n\t\t\t}\n\t\t},\n\t\texecDefaultAction(event) {\n\t\t\t// Do not execute the default action on the folder, navigate instead\n\t\t\tif (this.source.type === 'folder') {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tif (this.enabledDefaultActions.length > 0) {\n\t\t\t\tevent.preventDefault()\n\t\t\t\tevent.stopPropagation()\n\t\t\t\t// Execute the first default action if any\n\t\t\t\tthis.enabledDefaultActions[0].exec(this.source, this.currentView, this.dir)\n\t\t\t}\n\t\t},\n\n\t\topenDetailsIfAvailable(event) {\n\t\t\tconst detailsAction = this.enabledDefaultActions.find(action => action.id === ACTION_DETAILS)\n\t\t\tif (detailsAction) {\n\t\t\t\tevent.preventDefault()\n\t\t\t\tevent.stopPropagation()\n\t\t\t\tdetailsAction.exec(this.source, this.currentView)\n\t\t\t}\n\t\t},\n\n\t\tonSelectionChange(selection) {\n\t\t\tconst newSelectedIndex = this.index\n\t\t\tconst lastSelectedIndex = this.selectionStore.lastSelectedIndex\n\n\t\t\t// Get the last selected and select all files in between\n\t\t\tif (this.keyboardStore?.shiftKey && lastSelectedIndex !== null) {\n\t\t\t\tconst isAlreadySelected = this.selectedFiles.includes(this.fileid)\n\n\t\t\t\tconst start = Math.min(newSelectedIndex, lastSelectedIndex)\n\t\t\t\tconst end = Math.max(lastSelectedIndex, newSelectedIndex)\n\n\t\t\t\tconst lastSelection = this.selectionStore.lastSelection\n\t\t\t\tconst filesToSelect = this.nodes\n\t\t\t\t\t.map(file => file.fileid?.toString?.())\n\t\t\t\t\t.slice(start, end + 1)\n\n\t\t\t\t// If already selected, update the new selection _without_ the current file\n\t\t\t\tconst selection = [...lastSelection, ...filesToSelect]\n\t\t\t\t\t.filter(fileId => !isAlreadySelected || fileId !== this.fileid)\n\n\t\t\t\tlogger.debug('Shift key pressed, selecting all files in between', { start, end, filesToSelect, isAlreadySelected })\n\t\t\t\t// Keep previous lastSelectedIndex to be use for further shift selections\n\t\t\t\tthis.selectionStore.set(selection)\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tlogger.debug('Updating selection', { selection })\n\t\t\tthis.selectionStore.set(selection)\n\t\t\tthis.selectionStore.setLastIndex(newSelectedIndex)\n\t\t},\n\n\t\t// Open the actions menu on right click\n\t\tonRightClick(event) {\n\t\t\t// If already opened, fallback to default browser\n\t\t\tif (this.openedMenu) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// If the clicked row is in the selection, open global menu\n\t\t\tconst isMoreThanOneSelected = this.selectedFiles.length > 1\n\t\t\tthis.actionsMenuStore.opened = this.isSelected && isMoreThanOneSelected ? 'global' : this.uniqueId\n\n\t\t\t// Prevent any browser defaults\n\t\t\tevent.preventDefault()\n\t\t\tevent.stopPropagation()\n\t\t},\n\n\t\tt: translate,\n\t\tformatFileSize,\n\t},\n})\n<\/script>\n\n<style scoped lang='scss'>\n/* Hover effect on tbody lines only */\ntr {\n\t&:hover,\n\t&:focus,\n\t&:active {\n\t\tbackground-color: var(--color-background-dark);\n\t}\n}\n\n/* Preview not loaded animation effect */\n.files-list__row-icon-preview:not([style*='background']) {\n    background: var(--color-loading-dark);\n\t// animation: preview-gradient-fade 1.2s ease-in-out infinite;\n}\n</style>\n\n<style>\n/* @keyframes preview-gradient-fade {\n    0% {\n        opacity: 1;\n    }\n    50% {\n        opacity: 0.5;\n    }\n    100% {\n        opacity: 1;\n    }\n} */\n</style>\n"],sourceRoot:""}]);const a=r}},i={};function o(t){var e=i[t];if(void 0!==e)return e.exports;var s=i[t]={id:t,loaded:!1,exports:{}};return n[t].call(s.exports,s,s.exports,o),s.loaded=!0,s.exports}o.m=n,e=[],o.O=(t,n,i,s)=>{if(!n){var r=1/0;for(d=0;d<e.length;d++){n=e[d][0],i=e[d][1],s=e[d][2];for(var a=!0,l=0;l<n.length;l++)(!1&s||r>=s)&&Object.keys(o.O).every((t=>o.O[t](n[l])))?n.splice(l--,1):(a=!1,s<r&&(r=s));if(a){e.splice(d--,1);var c=i();void 0!==c&&(t=c)}}return t}s=s||0;for(var d=e.length;d>0&&e[d-1][2]>s;d--)e[d]=e[d-1];e[d]=[n,i,s]},o.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return o.d(e,{a:e}),e},o.d=(t,e)=>{for(var n in e)o.o(e,n)&&!o.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),o.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),o.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},o.nmd=t=>(t.paths=[],t.children||(t.children=[]),t),o.j=2181,(()=>{o.b=document.baseURI||self.location.href;var t={2181:0};o.O.j=e=>0===t[e];var e=(e,n)=>{var i,s,r=n[0],a=n[1],l=n[2],c=0;if(r.some((e=>0!==t[e]))){for(i in a)o.o(a,i)&&(o.m[i]=a[i]);if(l)var d=l(o)}for(e&&e(n);c<r.length;c++)s=r[c],o.o(t,s)&&t[s]&&t[s][0](),t[s]=0;return o.O(d)},n=self.webpackChunknextcloud=self.webpackChunknextcloud||[];n.forEach(e.bind(null,0)),n.push=e.bind(null,n.push.bind(n))})(),o.nc=void 0;var s=o.O(void 0,[7874],(()=>o(9570)));s=o.O(s)})();
+//# sourceMappingURL=files-main.js.map?v=3af3837e96b67c872e9d
\ No newline at end of file
index 85f61bf02cf32c6799c7ccf4d42aff1bca7420de..aa57b42a9e3abf181c2910d28e5163470480b46e 100644 (file)
@@ -1 +1 @@
-{"version":3,"file":"files-main.js?v=0a5d904187d2f3ea5928","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/apps/files/src/utils/davUtils.js","webpack:///nextcloud/apps/files/src/utils/fileUtils.js","webpack:///nextcloud/apps/files/src/components/TemplatePreview.vue","webpack:///nextcloud/apps/files/src/components/TemplatePreview.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files/src/components/TemplatePreview.vue?8258","webpack://nextcloud/./apps/files/src/components/TemplatePreview.vue?81db","webpack://nextcloud/./apps/files/src/components/TemplatePreview.vue?c414","webpack:///nextcloud/apps/files/src/views/TemplatePicker.vue","webpack:///nextcloud/apps/files/src/views/TemplatePicker.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/files/src/services/Templates.js","webpack://nextcloud/./apps/files/src/views/TemplatePicker.vue?6cbe","webpack://nextcloud/./apps/files/src/views/TemplatePicker.vue?afd8","webpack://nextcloud/./apps/files/src/views/TemplatePicker.vue?1f7b","webpack:///nextcloud/apps/files/src/templates.js","webpack:///nextcloud/apps/files/src/legacy/filelistSearch.js","webpack:///nextcloud/apps/files/src/logger.js","webpack:///nextcloud/apps/files/src/services/FileAction.ts","webpack:///nextcloud/apps/files/src/actions/deleteAction.ts","webpack:///nextcloud/apps/files/src/actions/sidebarAction.ts","webpack:///nextcloud/apps/files/src/store/files.ts","webpack:///nextcloud/apps/files/src/store/paths.ts","webpack:///nextcloud/apps/files/src/store/selection.ts","webpack:///nextcloud/apps/files/src/store/viewConfig.ts","webpack://nextcloud/./apps/files/src/components/BreadCrumbs.vue?e906","webpack:///nextcloud/apps/files/src/components/BreadCrumbs.vue","webpack:///nextcloud/apps/files/src/components/BreadCrumbs.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files/src/components/BreadCrumbs.vue?e59f","webpack://nextcloud/./apps/files/src/components/BreadCrumbs.vue?d357","webpack:///nextcloud/apps/files/src/components/FilesListVirtual.vue","webpack:///nextcloud/apps/files/src/utils/hashUtils.ts","webpack:///nextcloud/apps/files/src/store/actionsmenu.ts","webpack:///nextcloud/apps/files/src/store/userconfig.ts","webpack:///nextcloud/apps/files/src/components/CustomElementRender.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/files/src/components/CustomElementRender.vue","webpack://nextcloud/./apps/files/src/components/CustomElementRender.vue?5f5c","webpack://nextcloud/./apps/files/src/components/CustomElementRender.vue?4ee7","webpack://nextcloud/./apps/files/src/components/CustomSvgIconRender.vue?2c34","webpack:///nextcloud/apps/files/src/components/CustomSvgIconRender.vue","webpack:///nextcloud/apps/files/src/components/CustomSvgIconRender.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files/src/components/CustomSvgIconRender.vue?6bea","webpack://nextcloud/./apps/files/src/components/CustomSvgIconRender.vue?5641","webpack:///nextcloud/apps/files/src/components/FileEntry.vue","webpack:///nextcloud/apps/files/src/components/FileEntry.vue?vue&type=script&lang=ts&","webpack:///nextcloud/apps/files/src/store/keyboard.ts","webpack:///nextcloud/apps/files/src/services/PreviewService.ts","webpack://nextcloud/./apps/files/src/components/FileEntry.vue?0601","webpack://nextcloud/./apps/files/src/components/FileEntry.vue?bfb5","webpack://nextcloud/./apps/files/src/components/FileEntry.vue?da7c","webpack:///nextcloud/apps/files/src/components/FilesListFooter.vue?vue&type=script&lang=ts&","webpack:///nextcloud/apps/files/src/components/FilesListFooter.vue","webpack://nextcloud/./apps/files/src/components/FilesListFooter.vue?14b9","webpack://nextcloud/./apps/files/src/components/FilesListFooter.vue?80db","webpack:///nextcloud/apps/files/src/mixins/filesListWidth.ts","webpack:///nextcloud/apps/files/src/components/FilesListHeaderActions.vue","webpack:///nextcloud/apps/files/src/components/FilesListHeaderActions.vue?vue&type=script&lang=ts&","webpack://nextcloud/./apps/files/src/components/FilesListHeaderActions.vue?993d","webpack://nextcloud/./apps/files/src/components/FilesListHeaderActions.vue?9823","webpack:///nextcloud/apps/files/src/components/FilesListHeaderButton.vue","webpack:///nextcloud/apps/files/src/mixins/filesSorting.ts","webpack:///nextcloud/apps/files/src/components/FilesListHeaderButton.vue?vue&type=script&lang=ts&","webpack://nextcloud/./apps/files/src/components/FilesListHeaderButton.vue?d900","webpack://nextcloud/./apps/files/src/components/FilesListHeaderButton.vue?5686","webpack:///nextcloud/apps/files/src/components/FilesListHeader.vue?vue&type=script&lang=ts&","webpack:///nextcloud/apps/files/src/components/FilesListHeader.vue","webpack://nextcloud/./apps/files/src/components/FilesListHeader.vue?c7b4","webpack://nextcloud/./apps/files/src/components/FilesListHeader.vue?349b","webpack:///nextcloud/apps/files/src/components/FilesListVirtual.vue?vue&type=script&lang=ts&","webpack://nextcloud/./apps/files/src/components/FilesListVirtual.vue?034b","webpack://nextcloud/./apps/files/src/components/FilesListVirtual.vue?3555","webpack:///nextcloud/apps/files/src/services/Navigation.ts","webpack:///nextcloud/apps/files/src/views/FilesList.vue?vue&type=script&lang=ts&","webpack:///nextcloud/apps/files/src/views/FilesList.vue","webpack://nextcloud/./apps/files/src/views/FilesList.vue?b2cc","webpack://nextcloud/./apps/files/src/views/FilesList.vue?1e5b","webpack://nextcloud/./apps/files/src/views/Navigation.vue?8122","webpack://nextcloud/./apps/files/src/components/NavigationQuota.vue?08cb","webpack:///nextcloud/apps/files/src/components/NavigationQuota.vue","webpack:///nextcloud/apps/files/src/components/NavigationQuota.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files/src/components/NavigationQuota.vue?ff39","webpack://nextcloud/./apps/files/src/components/NavigationQuota.vue?2966","webpack://nextcloud/./apps/files/src/views/Settings.vue?84f7","webpack:///nextcloud/apps/files/src/components/Setting.vue","webpack:///nextcloud/apps/files/src/components/Setting.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files/src/components/Setting.vue?98ea","webpack://nextcloud/./apps/files/src/components/Setting.vue?8d57","webpack:///nextcloud/apps/files/src/views/Settings.vue","webpack:///nextcloud/apps/files/src/views/Settings.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files/src/views/Settings.vue?7e31","webpack://nextcloud/./apps/files/src/views/Settings.vue?b81b","webpack:///nextcloud/apps/files/src/views/Navigation.vue","webpack:///nextcloud/core/src/OCP/accessibility.js","webpack:///nextcloud/apps/files/src/views/Navigation.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files/src/views/Navigation.vue?e9dc","webpack://nextcloud/./apps/files/src/views/Navigation.vue?74b9","webpack:///nextcloud/apps/files/src/legacy/navigationMapper.js","webpack:///nextcloud/apps/files/src/router/router.js","webpack:///nextcloud/apps/files/src/main.ts","webpack:///nextcloud/apps/files/src/services/RouterService.ts","webpack:///nextcloud/apps/files/src/services/Settings.js","webpack:///nextcloud/apps/files/src/models/Setting.js","webpack:///nextcloud/apps/files/src/services/ServiceWorker.js","webpack:///nextcloud/apps/files/src/components/BreadCrumbs.vue?vue&type=style&index=0&id=68b3b20b&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/files/src/components/CustomSvgIconRender.vue?vue&type=style&index=0&id=93e9b2f4&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/files/src/components/FileEntry.vue?vue&type=style&index=0&id=0600090e&prod&scoped=true&lang=scss&","webpack:///nextcloud/apps/files/src/components/FilesListFooter.vue?vue&type=style&index=0&id=e6a083be&prod&scoped=true&lang=scss&","webpack:///nextcloud/apps/files/src/components/FilesListHeader.vue?vue&type=style&index=0&id=76b6186a&prod&scoped=true&lang=scss&","webpack:///nextcloud/apps/files/src/components/FilesListHeaderActions.vue?vue&type=style&index=0&id=03e57b1e&prod&scoped=true&lang=scss&","webpack:///nextcloud/apps/files/src/components/FilesListHeaderButton.vue?vue&type=style&index=0&id=e85a09d2&prod&lang=scss&","webpack:///nextcloud/apps/files/src/components/FilesListVirtual.vue?vue&type=style&index=0&id=640a8bb8&prod&scoped=true&lang=scss&","webpack:///nextcloud/apps/files/src/components/NavigationQuota.vue?vue&type=style&index=0&id=918797b2&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/files/src/components/TemplatePreview.vue?vue&type=style&index=0&id=6c072a31&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/files/src/views/FilesList.vue?vue&type=style&index=0&id=66068cbb&prod&scoped=true&lang=scss&","webpack:///nextcloud/apps/files/src/views/Navigation.vue?vue&type=style&index=0&id=657a978e&prod&scoped=true&lang=scss&","webpack:///nextcloud/apps/files/src/views/Settings.vue?vue&type=style&index=0&id=76ca5d1f&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/files/src/views/TemplatePicker.vue?vue&type=style&index=0&id=715b4161&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/files/src/components/FileEntry.vue?vue&type=style&index=1&id=0600090e&prod&lang=css&","webpack:///nextcloud/webpack/bootstrap","webpack:///nextcloud/webpack/runtime/compat get default export","webpack:///nextcloud/webpack/runtime/define property getters","webpack:///nextcloud/webpack/runtime/global","webpack:///nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack:///nextcloud/webpack/runtime/make namespace object","webpack:///nextcloud/webpack/runtime/node module decorator","webpack:///nextcloud/webpack/runtime/runtimeId","webpack:///nextcloud/webpack/runtime/jsonp chunk loading","webpack:///nextcloud/webpack/runtime/nonce","webpack:///nextcloud/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","/**\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { generateRemoteUrl } from '@nextcloud/router'\nimport { getCurrentUser } from '@nextcloud/auth'\n\nexport const getRootPath = function() {\n\tif (getCurrentUser()) {\n\t\treturn generateRemoteUrl(`dav/files/${getCurrentUser().uid}`)\n\t} else {\n\t\treturn generateRemoteUrl('webdav').replace('/remote.php', '/public.php')\n\t}\n}\n\nexport const isPublic = function() {\n\treturn !getCurrentUser()\n}\n\nexport const getToken = function() {\n\treturn document.getElementById('sharingToken') && document.getElementById('sharingToken').value\n}\n\n/**\n * Return the current directory, fallback to root\n *\n * @return {string}\n */\nexport const getCurrentDirectory = function() {\n\tconst currentDirInfo = OCA?.Files?.App?.currentFileList?.dirInfo\n\t\t|| { path: '/', name: '' }\n\n\t// Make sure we don't have double slashes\n\treturn `${currentDirInfo.path}/${currentDirInfo.name}`.replace(/\\/\\//gi, '/')\n}\n","/**\n * @copyright Copyright (c) 2021 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nconst encodeFilePath = function(path) {\n\tconst pathSections = (path.startsWith('/') ? path : `/${path}`).split('/')\n\tlet relativePath = ''\n\tpathSections.forEach((section) => {\n\t\tif (section !== '') {\n\t\t\trelativePath += '/' + encodeURIComponent(section)\n\t\t}\n\t})\n\treturn relativePath\n}\n\n/**\n * Extract dir and name from file path\n *\n * @param {string} path the full path\n * @return {string[]} [dirPath, fileName]\n */\nconst extractFilePaths = function(path) {\n\tconst pathSections = path.split('/')\n\tconst fileName = pathSections[pathSections.length - 1]\n\tconst dirPath = pathSections.slice(0, pathSections.length - 1).join('/')\n\treturn [dirPath, fileName]\n}\n\nexport { encodeFilePath, extractFilePaths }\n","<!--\n  - @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n  -\n  - @author John Molakvoæ <skjnldsv@protonmail.com>\n  -\n  - @license GNU AGPL version 3 or any later version\n  -\n  - This program is free software: you can redistribute it and/or modify\n  - it under the terms of the GNU Affero General Public License as\n  - published by the Free Software Foundation, either version 3 of the\n  - License, or (at your option) any later version.\n  -\n  - This program is distributed in the hope that it will be useful,\n  - but WITHOUT ANY WARRANTY; without even the implied warranty of\n  - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n  - GNU Affero General Public License for more details.\n  -\n  - You should have received a copy of the GNU Affero General Public License\n  - along with this program. If not, see <http://www.gnu.org/licenses/>.\n  -\n  -->\n\n<template>\n\t<li class=\"template-picker__item\">\n\t\t<input :id=\"id\"\n\t\t\t:checked=\"checked\"\n\t\t\ttype=\"radio\"\n\t\t\tclass=\"radio\"\n\t\t\tname=\"template-picker\"\n\t\t\t@change=\"onCheck\">\n\n\t\t<label :for=\"id\" class=\"template-picker__label\">\n\t\t\t<div class=\"template-picker__preview\"\n\t\t\t\t:class=\"failedPreview ? 'template-picker__preview--failed' : ''\">\n\t\t\t\t<img class=\"template-picker__image\"\n\t\t\t\t\t:src=\"realPreviewUrl\"\n\t\t\t\t\talt=\"\"\n\t\t\t\t\tdraggable=\"false\"\n\t\t\t\t\t@error=\"onFailure\">\n\t\t\t</div>\n\n\t\t\t<span class=\"template-picker__title\">\n\t\t\t\t{{ nameWithoutExt }}\n\t\t\t</span>\n\t\t</label>\n\t</li>\n</template>\n\n<script>\nimport { generateUrl } from '@nextcloud/router'\nimport { encodeFilePath } from '../utils/fileUtils.js'\nimport { getToken, isPublic } from '../utils/davUtils.js'\n\n// preview width generation\nconst previewWidth = 256\n\nexport default {\n\tname: 'TemplatePreview',\n\tinheritAttrs: false,\n\n\tprops: {\n\t\tbasename: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tchecked: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tfileid: {\n\t\t\ttype: [String, Number],\n\t\t\trequired: true,\n\t\t},\n\t\tfilename: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tpreviewUrl: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\t\thasPreview: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\tmime: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tratio: {\n\t\t\ttype: Number,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tfailedPreview: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/**\n\t\t * Strip away extension from name\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tnameWithoutExt() {\n\t\t\treturn this.basename.indexOf('.') > -1 ? this.basename.split('.').slice(0, -1).join('.') : this.basename\n\t\t},\n\n\t\tid() {\n\t\t\treturn `template-picker-${this.fileid}`\n\t\t},\n\n\t\trealPreviewUrl() {\n\t\t\t// If original preview failed, fallback to mime icon\n\t\t\tif (this.failedPreview && this.mimeIcon) {\n\t\t\t\treturn this.mimeIcon\n\t\t\t}\n\n\t\t\tif (this.previewUrl) {\n\t\t\t\treturn this.previewUrl\n\t\t\t}\n\t\t\t// TODO: find a nicer standard way of doing this?\n\t\t\tif (isPublic()) {\n\t\t\t\treturn generateUrl(`/apps/files_sharing/publicpreview/${getToken()}?fileId=${this.fileid}&file=${encodeFilePath(this.filename)}&x=${previewWidth}&y=${previewWidth}&a=1`)\n\t\t\t}\n\t\t\treturn generateUrl(`/core/preview?fileId=${this.fileid}&x=${previewWidth}&y=${previewWidth}&a=1`)\n\t\t},\n\n\t\tmimeIcon() {\n\t\t\treturn OC.MimeType.getIconUrl(this.mime)\n\t\t},\n\t},\n\n\tmethods: {\n\t\tonCheck() {\n\t\t\tthis.$emit('check', this.fileid)\n\t\t},\n\t\tonFailure() {\n\t\t\tthis.failedPreview = true\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n\n.template-picker {\n\t&__item {\n\t\tdisplay: flex;\n\t}\n\n\t&__label {\n\t\tdisplay: flex;\n\t\t// Align in the middle of the grid\n\t\talign-items: center;\n\t\tflex: 1 1;\n\t\tflex-direction: column;\n\n\t\t&, * {\n\t\t\tcursor: pointer;\n\t\t\tuser-select: none;\n\t\t}\n\n\t\t&::before {\n\t\t\tdisplay: none !important;\n\t\t}\n\t}\n\n\t&__preview {\n\t\tdisplay: block;\n\t\toverflow: hidden;\n\t\t// Stretch so all entries are the same width\n\t\tflex: 1 1;\n\t\twidth: var(--width);\n\t\tmin-height: var(--height);\n\t\tmax-height: var(--height);\n\t\tpadding: 0;\n\t\tborder: var(--border) solid var(--color-border);\n\t\tborder-radius: var(--border-radius-large);\n\n\t\tinput:checked + label > & {\n\t\t\tborder-color: var(--color-primary);\n\t\t}\n\n\t\t&--failed {\n\t\t\t// Make sure to properly center fallback icon\n\t\t\tdisplay: flex;\n\t\t}\n\t}\n\n\t&__image {\n\t\tmax-width: 100%;\n\t\tbackground-color: var(--color-main-background);\n\n\t\tobject-fit: cover;\n\t}\n\n\t// Failed preview, fallback to mime icon\n\t&__preview--failed &__image {\n\t\twidth: calc(var(--margin) * 8);\n\t\t// Center mime icon\n\t\tmargin: auto;\n\t\tbackground-color: transparent !important;\n\n\t\tobject-fit: initial;\n\t}\n\n\t&__title {\n\t\toverflow: hidden;\n\t\t// also count preview border\n\t\tmax-width: calc(var(--width) + 2*2px);\n\t\tpadding: var(--margin);\n\t\twhite-space: nowrap;\n\t\ttext-overflow: ellipsis;\n\t}\n}\n\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TemplatePreview.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TemplatePreview.vue?vue&type=script&lang=js&\"","\n      import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TemplatePreview.vue?vue&type=style&index=0&id=6c072a31&prod&lang=scss&scoped=true&\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TemplatePreview.vue?vue&type=style&index=0&id=6c072a31&prod&lang=scss&scoped=true&\";\n       export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./TemplatePreview.vue?vue&type=template&id=6c072a31&scoped=true&\"\nimport script from \"./TemplatePreview.vue?vue&type=script&lang=js&\"\nexport * from \"./TemplatePreview.vue?vue&type=script&lang=js&\"\nimport style0 from \"./TemplatePreview.vue?vue&type=style&index=0&id=6c072a31&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"6c072a31\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('li',{staticClass:\"template-picker__item\"},[_c('input',{staticClass:\"radio\",attrs:{\"id\":_vm.id,\"type\":\"radio\",\"name\":\"template-picker\"},domProps:{\"checked\":_vm.checked},on:{\"change\":_vm.onCheck}}),_vm._v(\" \"),_c('label',{staticClass:\"template-picker__label\",attrs:{\"for\":_vm.id}},[_c('div',{staticClass:\"template-picker__preview\",class:_vm.failedPreview ? 'template-picker__preview--failed' : ''},[_c('img',{staticClass:\"template-picker__image\",attrs:{\"src\":_vm.realPreviewUrl,\"alt\":\"\",\"draggable\":\"false\"},on:{\"error\":_vm.onFailure}})]),_vm._v(\" \"),_c('span',{staticClass:\"template-picker__title\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.nameWithoutExt)+\"\\n\\t\\t\")])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n  - @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n  -\n  - @author John Molakvoæ <skjnldsv@protonmail.com>\n  -\n  - @license GNU AGPL version 3 or any later version\n  -\n  - This program is free software: you can redistribute it and/or modify\n  - it under the terms of the GNU Affero General Public License as\n  - published by the Free Software Foundation, either version 3 of the\n  - License, or (at your option) any later version.\n  -\n  - This program is distributed in the hope that it will be useful,\n  - but WITHOUT ANY WARRANTY; without even the implied warranty of\n  - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n  - GNU Affero General Public License for more details.\n  -\n  - You should have received a copy of the GNU Affero General Public License\n  - along with this program. If not, see <http://www.gnu.org/licenses/>.\n  -\n  -->\n\n<template>\n\t<NcModal v-if=\"opened\"\n\t\t:clear-view-delay=\"-1\"\n\t\tclass=\"templates-picker\"\n\t\tsize=\"normal\"\n\t\t@close=\"close\">\n\t\t<form class=\"templates-picker__form\"\n\t\t\t:style=\"style\"\n\t\t\t@submit.prevent.stop=\"onSubmit\">\n\t\t\t<h2>{{ t('files', 'Pick a template for {name}', { name: nameWithoutExt }) }}</h2>\n\n\t\t\t<!-- Templates list -->\n\t\t\t<ul class=\"templates-picker__list\">\n\t\t\t\t<TemplatePreview v-bind=\"emptyTemplate\"\n\t\t\t\t\t:checked=\"checked === emptyTemplate.fileid\"\n\t\t\t\t\t@check=\"onCheck\" />\n\n\t\t\t\t<TemplatePreview v-for=\"template in provider.templates\"\n\t\t\t\t\t:key=\"template.fileid\"\n\t\t\t\t\tv-bind=\"template\"\n\t\t\t\t\t:checked=\"checked === template.fileid\"\n\t\t\t\t\t:ratio=\"provider.ratio\"\n\t\t\t\t\t@check=\"onCheck\" />\n\t\t\t</ul>\n\n\t\t\t<!-- Cancel and submit -->\n\t\t\t<div class=\"templates-picker__buttons\">\n\t\t\t\t<button @click=\"close\">\n\t\t\t\t\t{{ t('files', 'Cancel') }}\n\t\t\t\t</button>\n\t\t\t\t<input type=\"submit\"\n\t\t\t\t\tclass=\"primary\"\n\t\t\t\t\t:value=\"t('files', 'Create')\"\n\t\t\t\t\t:aria-label=\"t('files', 'Create a new file with the selected template')\">\n\t\t\t</div>\n\t\t</form>\n\n\t\t<NcEmptyContent v-if=\"loading\" class=\"templates-picker__loading\" icon=\"icon-loading\">\n\t\t\t{{ t('files', 'Creating file') }}\n\t\t</NcEmptyContent>\n\t</NcModal>\n</template>\n\n<script>\nimport { normalize } from 'path'\nimport { showError } from '@nextcloud/dialogs'\nimport NcEmptyContent from '@nextcloud/vue/dist/Components/NcEmptyContent.js'\nimport NcModal from '@nextcloud/vue/dist/Components/NcModal.js'\n\nimport { getCurrentDirectory } from '../utils/davUtils.js'\nimport { createFromTemplate, getTemplates } from '../services/Templates.js'\nimport TemplatePreview from '../components/TemplatePreview.vue'\n\nconst border = 2\nconst margin = 8\nconst width = margin * 20\n\nexport default {\n\tname: 'TemplatePicker',\n\n\tcomponents: {\n\t\tNcEmptyContent,\n\t\tNcModal,\n\t\tTemplatePreview,\n\t},\n\n\tprops: {\n\t\tlogger: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\t// Check empty template by default\n\t\t\tchecked: -1,\n\t\t\tloading: false,\n\t\t\tname: null,\n\t\t\topened: false,\n\t\t\tprovider: null,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/**\n\t\t * Strip away extension from name\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tnameWithoutExt() {\n\t\t\treturn this.name.indexOf('.') > -1\n\t\t\t\t? this.name.split('.').slice(0, -1).join('.')\n\t\t\t\t: this.name\n\t\t},\n\n\t\temptyTemplate() {\n\t\t\treturn {\n\t\t\t\tbasename: t('files', 'Blank'),\n\t\t\t\tfileid: -1,\n\t\t\t\tfilename: this.t('files', 'Blank'),\n\t\t\t\thasPreview: false,\n\t\t\t\tmime: this.provider?.mimetypes[0] || this.provider?.mimetypes,\n\t\t\t}\n\t\t},\n\n\t\tselectedTemplate() {\n\t\t\treturn this.provider.templates.find(template => template.fileid === this.checked)\n\t\t},\n\n\t\t/**\n\t\t * Style css vars bin,d\n\t\t *\n\t\t * @return {object}\n\t\t */\n\t\tstyle() {\n\t\t\treturn {\n\t\t\t\t'--margin': margin + 'px',\n\t\t\t\t'--width': width + 'px',\n\t\t\t\t'--border': border + 'px',\n\t\t\t\t'--fullwidth': width + 2 * margin + 2 * border + 'px',\n\t\t\t\t'--height': this.provider.ratio ? Math.round(width / this.provider.ratio) + 'px' : null,\n\t\t\t}\n\t\t},\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Open the picker\n\t\t *\n\t\t * @param {string} name the file name to create\n\t\t * @param {object} provider the template provider picked\n\t\t */\n\t\tasync open(name, provider) {\n\n\t\t\tthis.checked = this.emptyTemplate.fileid\n\t\t\tthis.name = name\n\t\t\tthis.provider = provider\n\n\t\t\tconst templates = await getTemplates()\n\t\t\tconst fetchedProvider = templates.find((fetchedProvider) => fetchedProvider.app === provider.app && fetchedProvider.label === provider.label)\n\t\t\tif (fetchedProvider === null) {\n\t\t\t\tthrow new Error('Failed to match provider in results')\n\t\t\t}\n\t\t\tthis.provider = fetchedProvider\n\n\t\t\t// If there is no templates available, just create an empty file\n\t\t\tif (fetchedProvider.templates.length === 0) {\n\t\t\t\tthis.onSubmit()\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// Else, open the picker\n\t\t\tthis.opened = true\n\t\t},\n\n\t\t/**\n\t\t * Close the picker and reset variables\n\t\t */\n\t\tclose() {\n\t\t\tthis.checked = this.emptyTemplate.fileid\n\t\t\tthis.loading = false\n\t\t\tthis.name = null\n\t\t\tthis.opened = false\n\t\t\tthis.provider = null\n\t\t},\n\n\t\t/**\n\t\t * Manages the radio template picker change\n\t\t *\n\t\t * @param {number} fileid the selected template file id\n\t\t */\n\t\tonCheck(fileid) {\n\t\t\tthis.checked = fileid\n\t\t},\n\n\t\tasync onSubmit() {\n\t\t\tthis.loading = true\n\t\t\tconst currentDirectory = getCurrentDirectory()\n\t\t\tconst fileList = OCA?.Files?.App?.currentFileList\n\n\t\t\t// If the file doesn't have an extension, add the default one\n\t\t\tif (this.nameWithoutExt === this.name) {\n\t\t\t\tthis.logger.debug('Fixed invalid filename', { name: this.name, extension: this.provider?.extension })\n\t\t\t\tthis.name = this.name + this.provider?.extension\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst fileInfo = await createFromTemplate(\n\t\t\t\t\tnormalize(`${currentDirectory}/${this.name}`),\n\t\t\t\t\tthis.selectedTemplate?.filename,\n\t\t\t\t\tthis.selectedTemplate?.templateType,\n\t\t\t\t)\n\t\t\t\tthis.logger.debug('Created new file', fileInfo)\n\n\t\t\t\t// Fetch FileInfo and model\n\t\t\t\tconst data = await fileList?.addAndFetchFileInfo(this.name).then((status, data) => data)\n\t\t\t\tconst model = new OCA.Files.FileInfoModel(data, {\n\t\t\t\t\tfilesClient: fileList?.filesClient,\n\t\t\t\t})\n\n\t\t\t\t// Run default action\n\t\t\t\tconst fileAction = OCA.Files.fileActions.getDefaultFileAction(fileInfo.mime, 'file', OC.PERMISSION_ALL)\n\t\t\t\tif (fileAction) {\n\t\t\t\t\tfileAction.action(fileInfo.basename, {\n\t\t\t\t\t\t$file: fileList?.findFileEl(this.name),\n\t\t\t\t\t\tdir: currentDirectory,\n\t\t\t\t\t\tfileList,\n\t\t\t\t\t\tfileActions: fileList?.fileActions,\n\t\t\t\t\t\tfileInfoModel: model,\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\tthis.close()\n\t\t\t} catch (error) {\n\t\t\t\tthis.logger.error('Error while creating the new file from template')\n\t\t\t\tconsole.error(error)\n\t\t\t\tshowError(this.t('files', 'Unable to create new file from template'))\n\t\t\t} finally {\n\t\t\t\tthis.loading = false\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.templates-picker {\n\t&__form {\n\t\tpadding: calc(var(--margin) * 2);\n\t\t// Will be handled by the buttons\n\t\tpadding-bottom: 0;\n\n\t\th2 {\n\t\t\ttext-align: center;\n\t\t\tfont-weight: bold;\n\t\t\tmargin: var(--margin) 0 calc(var(--margin) * 2);\n\t\t}\n\t}\n\n\t&__list {\n\t\tdisplay: grid;\n\t\tgrid-gap: calc(var(--margin) * 2);\n\t\tgrid-auto-columns: 1fr;\n\t\t// We want maximum 5 columns. Putting 6 as we don't count the grid gap. So it will always be lower than 6\n\t\tmax-width: calc(var(--fullwidth) * 6);\n\t\tgrid-template-columns: repeat(auto-fit, var(--fullwidth));\n\t\t// Make sure all rows are the same height\n\t\tgrid-auto-rows: 1fr;\n\t\t// Center the columns set\n\t\tjustify-content: center;\n\t}\n\n\t&__buttons {\n\t\tdisplay: flex;\n\t\tjustify-content: space-between;\n\t\tpadding: calc(var(--margin) * 2) var(--margin);\n\t\tposition: sticky;\n\t\tbottom: 0;\n\t\tbackground-image: linear-gradient(0, var(--gradient-main-background));\n\n\t\tbutton, input[type='submit'] {\n\t\t\theight: 44px;\n\t\t}\n\t}\n\n\t// Make sure we're relative for the loading emptycontent on top\n\t::v-deep .modal-container {\n\t\tposition: relative;\n\t}\n\n\t&__loading {\n\t\tposition: absolute;\n\t\ttop: 0;\n\t\tleft: 0;\n\t\tjustify-content: center;\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\tmargin: 0;\n\t\tbackground-color: var(--color-main-background-translucent);\n\t}\n}\n\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TemplatePicker.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TemplatePicker.vue?vue&type=script&lang=js&\"","/**\n * @copyright Copyright (c) 2021 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { generateOcsUrl } from '@nextcloud/router'\nimport axios from '@nextcloud/axios'\n\nexport const getTemplates = async function() {\n\tconst response = await axios.get(generateOcsUrl('apps/files/api/v1/templates'))\n\treturn response.data.ocs.data\n}\n\n/**\n * Create a new file from a specified template\n *\n * @param {string} filePath The new file destination path\n * @param {string} templatePath The template source path\n * @param {string} templateType The template type e.g 'user'\n */\nexport const createFromTemplate = async function(filePath, templatePath, templateType) {\n\tconst response = await axios.post(generateOcsUrl('apps/files/api/v1/templates/create'), {\n\t\tfilePath,\n\t\ttemplatePath,\n\t\ttemplateType,\n\t})\n\treturn response.data.ocs.data\n}\n","\n      import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TemplatePicker.vue?vue&type=style&index=0&id=715b4161&prod&lang=scss&scoped=true&\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TemplatePicker.vue?vue&type=style&index=0&id=715b4161&prod&lang=scss&scoped=true&\";\n       export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./TemplatePicker.vue?vue&type=template&id=715b4161&scoped=true&\"\nimport script from \"./TemplatePicker.vue?vue&type=script&lang=js&\"\nexport * from \"./TemplatePicker.vue?vue&type=script&lang=js&\"\nimport style0 from \"./TemplatePicker.vue?vue&type=style&index=0&id=715b4161&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"715b4161\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return (_vm.opened)?_c('NcModal',{staticClass:\"templates-picker\",attrs:{\"clear-view-delay\":-1,\"size\":\"normal\"},on:{\"close\":_vm.close}},[_c('form',{staticClass:\"templates-picker__form\",style:(_vm.style),on:{\"submit\":function($event){$event.preventDefault();$event.stopPropagation();return _vm.onSubmit.apply(null, arguments)}}},[_c('h2',[_vm._v(_vm._s(_vm.t('files', 'Pick a template for {name}', { name: _vm.nameWithoutExt })))]),_vm._v(\" \"),_c('ul',{staticClass:\"templates-picker__list\"},[_c('TemplatePreview',_vm._b({attrs:{\"checked\":_vm.checked === _vm.emptyTemplate.fileid},on:{\"check\":_vm.onCheck}},'TemplatePreview',_vm.emptyTemplate,false)),_vm._v(\" \"),_vm._l((_vm.provider.templates),function(template){return _c('TemplatePreview',_vm._b({key:template.fileid,attrs:{\"checked\":_vm.checked === template.fileid,\"ratio\":_vm.provider.ratio},on:{\"check\":_vm.onCheck}},'TemplatePreview',template,false))})],2),_vm._v(\" \"),_c('div',{staticClass:\"templates-picker__buttons\"},[_c('button',{on:{\"click\":_vm.close}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('files', 'Cancel'))+\"\\n\\t\\t\\t\")]),_vm._v(\" \"),_c('input',{staticClass:\"primary\",attrs:{\"type\":\"submit\",\"aria-label\":_vm.t('files', 'Create a new file with the selected template')},domProps:{\"value\":_vm.t('files', 'Create')}})])]),_vm._v(\" \"),(_vm.loading)?_c('NcEmptyContent',{staticClass:\"templates-picker__loading\",attrs:{\"icon\":\"icon-loading\"}},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('files', 'Creating file'))+\"\\n\\t\")]):_vm._e()],1):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { getLoggerBuilder } from '@nextcloud/logger'\nimport { loadState } from '@nextcloud/initial-state'\nimport { translate as t, translatePlural as n } from '@nextcloud/l10n'\nimport { generateOcsUrl } from '@nextcloud/router'\nimport { getCurrentDirectory } from './utils/davUtils.js'\nimport axios from '@nextcloud/axios'\nimport Vue from 'vue'\n\nimport TemplatePickerView from './views/TemplatePicker.vue'\nimport { showError } from '@nextcloud/dialogs'\n\n// Set up logger\nconst logger = getLoggerBuilder()\n\t.setApp('files')\n\t.detectUser()\n\t.build()\n\n// Add translates functions\nVue.mixin({\n\tmethods: {\n\t\tt,\n\t\tn,\n\t},\n})\n\n// Create document root\nconst TemplatePickerRoot = document.createElement('div')\nTemplatePickerRoot.id = 'template-picker'\ndocument.body.appendChild(TemplatePickerRoot)\n\n// Retrieve and init templates\nlet templates = loadState('files', 'templates', [])\nlet templatesPath = loadState('files', 'templates_path', false)\nlogger.debug('Templates providers', templates)\nlogger.debug('Templates folder', { templatesPath })\n\n// Init vue app\nconst View = Vue.extend(TemplatePickerView)\nconst TemplatePicker = new View({\n\tname: 'TemplatePicker',\n\tpropsData: {\n\t\tlogger,\n\t},\n})\nTemplatePicker.$mount('#template-picker')\n\n// Init template engine after load to make sure it's the last injected entry\nwindow.addEventListener('DOMContentLoaded', function() {\n\tif (!templatesPath) {\n\t\tlogger.debug('Templates folder not initialized')\n\t\tconst initTemplatesPlugin = {\n\t\t\tattach(menu) {\n\t\t\t\t// register the new menu entry\n\t\t\t\tmenu.addMenuEntry({\n\t\t\t\t\tid: 'template-init',\n\t\t\t\t\tdisplayName: t('files', 'Set up templates folder'),\n\t\t\t\t\ttemplateName: t('files', 'Templates'),\n\t\t\t\t\ticonClass: 'icon-template-add',\n\t\t\t\t\tfileType: 'file',\n\t\t\t\t\tactionHandler(name) {\n\t\t\t\t\t\tinitTemplatesFolder(name)\n\t\t\t\t\t\tmenu.removeMenuEntry('template-init')\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t},\n\t\t}\n\t\tOC.Plugins.register('OCA.Files.NewFileMenu', initTemplatesPlugin)\n\t}\n})\n\n// Init template files menu\ntemplates.forEach((provider, index) => {\n\tconst newTemplatePlugin = {\n\t\tattach(menu) {\n\t\t\tconst fileList = menu.fileList\n\n\t\t\t// only attach to main file list, public view is not supported yet\n\t\t\tif (fileList.id !== 'files' && fileList.id !== 'files.public') {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// register the new menu entry\n\t\t\tmenu.addMenuEntry({\n\t\t\t\tid: `template-new-${provider.app}-${index}`,\n\t\t\t\tdisplayName: provider.label,\n\t\t\t\ttemplateName: provider.label + provider.extension,\n\t\t\t\ticonClass: provider.iconClass || 'icon-file',\n\t\t\t\tfileType: 'file',\n\t\t\t\tactionHandler(name) {\n\t\t\t\t\tTemplatePicker.open(name, provider)\n\t\t\t\t},\n\t\t\t})\n\t\t},\n\t}\n\tOC.Plugins.register('OCA.Files.NewFileMenu', newTemplatePlugin)\n})\n\n/**\n * Init the template directory\n *\n * @param {string} name the templates folder name\n */\nconst initTemplatesFolder = async function(name) {\n\tconst templatePath = (getCurrentDirectory() + `/${name}`).replace('//', '/')\n\ttry {\n\t\tlogger.debug('Initializing the templates directory', { templatePath })\n\t\tconst response = await axios.post(generateOcsUrl('apps/files/api/v1/templates/path'), {\n\t\t\ttemplatePath,\n\t\t\tcopySystemTemplates: true,\n\t\t})\n\n\t\t// Go to template directory\n\t\tOCA.Files.App.currentFileList.changeDirectory(templatePath, true, true)\n\n\t\ttemplates = response.data.ocs.data.templates\n\t\ttemplatesPath = response.data.ocs.data.template_path\n\t} catch (error) {\n\t\tlogger.error('Unable to initialize the templates directory')\n\t\tshowError(t('files', 'Unable to initialize the templates directory'))\n\t}\n}\n","/*\n * @copyright Copyright (c) 2021 Julius Härtl <jus@bitgrid.net>\n *\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { subscribe } from '@nextcloud/event-bus'\n\n(function() {\n\n\tconst FilesPlugin = {\n\t\tattach(fileList) {\n\t\t\tsubscribe('nextcloud:unified-search.search', ({ query }) => {\n\t\t\t\tfileList.setFilter(query)\n\t\t\t})\n\t\t\tsubscribe('nextcloud:unified-search.reset', () => {\n\t\t\t\tthis.query = null\n\t\t\t\tfileList.setFilter('')\n\t\t\t})\n\n\t\t},\n\t}\n\n\twindow.OC.Plugins.register('OCA.Files.FileList', FilesPlugin)\n\n})()\n","/**\n * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport { getLoggerBuilder } from '@nextcloud/logger'\n\nexport default getLoggerBuilder()\n\t.setApp('files')\n\t.detectUser()\n\t.build()\n","/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport logger from '../logger';\nexport class FileAction {\n    _action;\n    constructor(action) {\n        this.validateAction(action);\n        this._action = action;\n    }\n    get id() {\n        return this._action.id;\n    }\n    get displayName() {\n        return this._action.displayName;\n    }\n    get iconSvgInline() {\n        return this._action.iconSvgInline;\n    }\n    get enabled() {\n        return this._action.enabled;\n    }\n    get exec() {\n        return this._action.exec;\n    }\n    get execBatch() {\n        return this._action.execBatch;\n    }\n    get order() {\n        return this._action.order;\n    }\n    get default() {\n        return this._action.default;\n    }\n    get inline() {\n        return this._action.inline;\n    }\n    get renderInline() {\n        return this._action.renderInline;\n    }\n    validateAction(action) {\n        if (!action.id || typeof action.id !== 'string') {\n            throw new Error('Invalid id');\n        }\n        if (!action.displayName || typeof action.displayName !== 'function') {\n            throw new Error('Invalid displayName function');\n        }\n        if (!action.iconSvgInline || typeof action.iconSvgInline !== 'function') {\n            throw new Error('Invalid iconSvgInline function');\n        }\n        if (!action.exec || typeof action.exec !== 'function') {\n            throw new Error('Invalid exec function');\n        }\n        // Optional properties --------------------------------------------\n        if ('enabled' in action && typeof action.enabled !== 'function') {\n            throw new Error('Invalid enabled function');\n        }\n        if ('execBatch' in action && typeof action.execBatch !== 'function') {\n            throw new Error('Invalid execBatch function');\n        }\n        if ('order' in action && typeof action.order !== 'number') {\n            throw new Error('Invalid order');\n        }\n        if ('default' in action && typeof action.default !== 'boolean') {\n            throw new Error('Invalid default');\n        }\n        if ('inline' in action && typeof action.inline !== 'function') {\n            throw new Error('Invalid inline function');\n        }\n        if ('renderInline' in action && typeof action.renderInline !== 'function') {\n            throw new Error('Invalid renderInline function');\n        }\n    }\n}\nexport const registerFileAction = function (action) {\n    if (typeof window._nc_fileactions === 'undefined') {\n        window._nc_fileactions = [];\n        logger.debug('FileActions initialized');\n    }\n    // Check duplicates\n    if (window._nc_fileactions.find(search => search.id === action.id)) {\n        logger.error(`FileAction ${action.id} already registered`, { action });\n        return;\n    }\n    window._nc_fileactions.push(action);\n};\nexport const getFileActions = function () {\n    return window._nc_fileactions || [];\n};\n","/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport { emit } from '@nextcloud/event-bus';\nimport { Permission, Node } from '@nextcloud/files';\nimport { translate as t } from '@nextcloud/l10n';\nimport axios from '@nextcloud/axios';\nimport TrashCan from '@mdi/svg/svg/trash-can.svg?raw';\nimport { registerFileAction, FileAction } from '../services/FileAction.ts';\nimport logger from '../logger.js';\nregisterFileAction(new FileAction({\n    id: 'delete',\n    displayName(nodes, view) {\n        return view.id === 'trashbin'\n            ? t('files_trashbin', 'Delete permanently')\n            : t('files', 'Delete');\n    },\n    iconSvgInline: () => TrashCan,\n    enabled(nodes) {\n        return nodes.length > 0 && nodes\n            .map(node => node.permissions)\n            .every(permission => (permission & Permission.DELETE) !== 0);\n    },\n    async exec(node) {\n        try {\n            await axios.delete(node.source);\n            // Let's delete even if it's moved to the trashbin\n            // since it has been removed from the current view\n            //  and changing the view will trigger a reload anyway.\n            emit('files:node:deleted', node);\n            return true;\n        }\n        catch (error) {\n            logger.error('Error while deleting a file', { error, source: node.source, node });\n            return false;\n        }\n    },\n    async execBatch(nodes, view, dir) {\n        return Promise.all(nodes.map(node => this.exec(node, view, dir)));\n    },\n    order: 100,\n}));\n","/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport { translate as t } from '@nextcloud/l10n';\nimport InformationSvg from '@mdi/svg/svg/information-variant.svg?raw';\nimport { registerFileAction, FileAction } from '../services/FileAction.ts';\nimport logger from '../logger.js';\nexport const ACTION_DETAILS = 'details';\nregisterFileAction(new FileAction({\n    id: ACTION_DETAILS,\n    displayName: () => t('files', 'Details'),\n    iconSvgInline: () => InformationSvg,\n    // Sidebar currently supports user folder only, /files/USER\n    enabled: (files) => !!window?.OCA?.Files?.Sidebar\n        && files.some(node => node.root?.startsWith('/files/')),\n    async exec(node) {\n        try {\n            // TODO: migrate Sidebar to use a Node instead\n            window?.OCA?.Files?.Sidebar?.open?.(node.path);\n            return null;\n        }\n        catch (error) {\n            logger.error('Error while opening sidebar', { error });\n            return false;\n        }\n    },\n    default: true,\n    order: -50,\n}));\n","import { defineStore } from 'pinia';\nimport { subscribe } from '@nextcloud/event-bus';\nimport logger from '../logger';\nimport Vue from 'vue';\nexport const useFilesStore = function () {\n    const store = defineStore('files', {\n        state: () => ({\n            files: {},\n            roots: {},\n        }),\n        getters: {\n            /**\n             * Get a file or folder by id\n             */\n            getNode: (state) => (id) => state.files[id],\n            /**\n             * Get a list of files or folders by their IDs\n             * Does not return undefined values\n             */\n            getNodes: (state) => (ids) => ids\n                .map(id => state.files[id])\n                .filter(Boolean),\n            /**\n             * Get a file or folder by id\n             */\n            getRoot: (state) => (service) => state.roots[service],\n        },\n        actions: {\n            updateNodes(nodes) {\n                // Update the store all at once\n                const files = nodes.reduce((acc, node) => {\n                    if (!node.fileid) {\n                        logger.warn('Trying to update/set a node without fileid', node);\n                        return acc;\n                    }\n                    acc[node.fileid] = node;\n                    return acc;\n                }, {});\n                Vue.set(this, 'files', { ...this.files, ...files });\n            },\n            deleteNodes(nodes) {\n                nodes.forEach(node => {\n                    if (node.fileid) {\n                        Vue.delete(this.files, node.fileid);\n                    }\n                });\n            },\n            setRoot({ service, root }) {\n                Vue.set(this.roots, service, root);\n            },\n            onDeletedNode(node) {\n                this.deleteNodes([node]);\n            },\n        }\n    });\n    const fileStore = store(...arguments);\n    // Make sure we only register the listeners once\n    if (!fileStore._initialized) {\n        // subscribe('files:node:created', fileStore.onCreatedNode)\n        subscribe('files:node:deleted', fileStore.onDeletedNode);\n        // subscribe('files:node:moved', fileStore.onMovedNode)\n        // subscribe('files:node:updated', fileStore.onUpdatedNode)\n        fileStore._initialized = true;\n    }\n    return fileStore;\n};\n","import { defineStore } from 'pinia';\nimport { subscribe } from '@nextcloud/event-bus';\nimport Vue from 'vue';\nexport const usePathsStore = function () {\n    const store = defineStore('paths', {\n        state: () => ({\n            paths: {}\n        }),\n        getters: {\n            getPath: (state) => {\n                return (service, path) => {\n                    if (!state.paths[service]) {\n                        return undefined;\n                    }\n                    return state.paths[service][path];\n                };\n            },\n        },\n        actions: {\n            addPath(payload) {\n                // If it doesn't exists, init the service state\n                if (!this.paths[payload.service]) {\n                    Vue.set(this.paths, payload.service, {});\n                }\n                // Now we can set the provided path\n                Vue.set(this.paths[payload.service], payload.path, payload.fileid);\n            },\n        }\n    });\n    const pathsStore = store(...arguments);\n    // Make sure we only register the listeners once\n    if (!pathsStore._initialized) {\n        // TODO: watch folders to update paths?\n        // subscribe('files:node:created', pathsStore.onCreatedNode)\n        // subscribe('files:node:deleted', pathsStore.onDeletedNode)\n        // subscribe('files:node:moved', pathsStore.onMovedNode)\n        pathsStore._initialized = true;\n    }\n    return pathsStore;\n};\n","/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n/* eslint-disable */\nimport { defineStore } from 'pinia';\nimport Vue from 'vue';\nimport { FileId, SelectionStore } from '../types';\nexport const useSelectionStore = defineStore('selection', {\n    state: () => ({\n        selected: [],\n        lastSelection: [],\n        lastSelectedIndex: null,\n    }),\n    actions: {\n        /**\n         * Set the selection of fileIds\n         */\n        set(selection = []) {\n            Vue.set(this, 'selected', selection);\n        },\n        /**\n         * Set the last selected index\n         */\n        setLastIndex(lastSelectedIndex = null) {\n            // Update the last selection if we provided a new selection starting point\n            Vue.set(this, 'lastSelection', lastSelectedIndex ? this.selected : []);\n            Vue.set(this, 'lastSelectedIndex', lastSelectedIndex);\n        },\n        /**\n         * Reset the selection\n         */\n        reset() {\n            Vue.set(this, 'selected', []);\n            Vue.set(this, 'lastSelection', []);\n            Vue.set(this, 'lastSelectedIndex', null);\n        }\n    }\n});\n","/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n/* eslint-disable */\nimport { defineStore } from 'pinia';\nimport { emit, subscribe } from '@nextcloud/event-bus';\nimport { generateUrl } from '@nextcloud/router';\nimport { loadState } from '@nextcloud/initial-state';\nimport axios from '@nextcloud/axios';\nimport Vue from 'vue';\nconst viewConfig = loadState('files', 'viewConfigs', {});\nexport const useViewConfigStore = function () {\n    const store = defineStore('viewconfig', {\n        state: () => ({\n            viewConfig,\n        }),\n        getters: {\n            getConfig: (state) => (view) => state.viewConfig[view] || {},\n        },\n        actions: {\n            /**\n             * Update the view config local store\n             */\n            onUpdate(view, key, value) {\n                if (!this.viewConfig[view]) {\n                    Vue.set(this.viewConfig, view, {});\n                }\n                Vue.set(this.viewConfig[view], key, value);\n            },\n            /**\n             * Update the view config local store AND on server side\n             */\n            async update(view, key, value) {\n                axios.put(generateUrl(`/apps/files/api/v1/views/${view}/${key}`), {\n                    value,\n                });\n                emit('files:viewconfig:updated', { view, key, value });\n            },\n            /**\n             * Set the sorting key AND sort by ASC\n             * The key param must be a valid key of a File object\n             * If not found, will be searched within the File attributes\n             */\n            setSortingBy(key = 'basename', view = 'files') {\n                // Save new config\n                this.update(view, 'sorting_mode', key);\n                this.update(view, 'sorting_direction', 'asc');\n            },\n            /**\n             * Toggle the sorting direction\n             */\n            toggleSortingDirection(view = 'files') {\n                const config = this.getConfig(view) || { 'sorting_direction': 'asc' };\n                const newDirection = config.sorting_direction === 'asc' ? 'desc' : 'asc';\n                // Save new config\n                this.update(view, 'sorting_direction', newDirection);\n            }\n        }\n    });\n    const viewConfigStore = store(...arguments);\n    // Make sure we only register the listeners once\n    if (!viewConfigStore._initialized) {\n        subscribe('files:viewconfig:updated', function ({ view, key, value }) {\n            viewConfigStore.onUpdate(view, key, value);\n        });\n        viewConfigStore._initialized = true;\n    }\n    return viewConfigStore;\n};\n","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('NcBreadcrumbs',{attrs:{\"data-cy-files-content-breadcrumbs\":\"\"}},_vm._l((_vm.sections),function(section,index){return _c('NcBreadcrumb',_vm._b({key:section.dir,attrs:{\"aria-label\":_vm.ariaLabel(section),\"title\":_vm.ariaLabel(section)},nativeOn:{\"click\":function($event){return _vm.onClick(section.to)}},scopedSlots:_vm._u([(index === 0)?{key:\"icon\",fn:function(){return [_c('Home',{attrs:{\"size\":20}})]},proxy:true}:null],null,true)},'NcBreadcrumb',section,false))}),1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n\t<NcBreadcrumbs data-cy-files-content-breadcrumbs>\n\t\t<!-- Current path sections -->\n\t\t<NcBreadcrumb v-for=\"(section, index) in sections\"\n\t\t\t:key=\"section.dir\"\n\t\t\t:aria-label=\"ariaLabel(section)\"\n\t\t\t:title=\"ariaLabel(section)\"\n\t\t\tv-bind=\"section\"\n\t\t\t@click.native=\"onClick(section.to)\">\n\t\t\t<template v-if=\"index === 0\" #icon>\n\t\t\t\t<Home :size=\"20\" />\n\t\t\t</template>\n\t\t</NcBreadcrumb>\n\t</NcBreadcrumbs>\n</template>\n\n<script>\nimport { basename } from 'path'\nimport Home from 'vue-material-design-icons/Home.vue'\nimport NcBreadcrumb from '@nextcloud/vue/dist/Components/NcBreadcrumb.js'\nimport NcBreadcrumbs from '@nextcloud/vue/dist/Components/NcBreadcrumbs.js'\nimport Vue from 'vue'\n\nimport { useFilesStore } from '../store/files.ts'\nimport { usePathsStore } from '../store/paths.ts'\n\nexport default Vue.extend({\n\tname: 'BreadCrumbs',\n\n\tcomponents: {\n\t\tHome,\n\t\tNcBreadcrumbs,\n\t\tNcBreadcrumb,\n\t},\n\n\tprops: {\n\t\tpath: {\n\t\t\ttype: String,\n\t\t\tdefault: '/',\n\t\t},\n\t},\n\n\tsetup() {\n\t\tconst filesStore = useFilesStore()\n\t\tconst pathsStore = usePathsStore()\n\t\treturn {\n\t\t\tfilesStore,\n\t\t\tpathsStore,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tcurrentView() {\n\t\t\treturn this.$navigation.active\n\t\t},\n\n\t\tdirs() {\n\t\t\tconst cumulativePath = (acc) => (value) => (acc += `${value}/`)\n\t\t\t// Generate a cumulative path for each path segment: ['/', '/foo', '/foo/bar', ...] etc\n\t\t\tconst paths = this.path.split('/').filter(Boolean).map(cumulativePath('/'))\n\t\t\t// Strip away trailing slash\n\t\t\treturn ['/', ...paths.map(path => path.replace(/^(.+)\\/$/, '$1'))]\n\t\t},\n\n\t\tsections() {\n\t\t\treturn this.dirs.map(dir => {\n\t\t\t\tconst to = { ...this.$route, query: { dir } }\n\t\t\t\treturn {\n\t\t\t\t\tdir,\n\t\t\t\t\texact: true,\n\t\t\t\t\tname: this.getDirDisplayName(dir),\n\t\t\t\t\tto,\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\t},\n\n\tmethods: {\n\t\tgetNodeFromId(id) {\n\t\t\treturn this.filesStore.getNode(id)\n\t\t},\n\t\tgetFileIdFromPath(path) {\n\t\t\treturn this.pathsStore.getPath(this.currentView?.id, path)\n\t\t},\n\t\tgetDirDisplayName(path) {\n\t\t\tif (path === '/') {\n\t\t\t\treturn t('files', 'Home')\n\t\t\t}\n\n\t\t\tconst fileId = this.getFileIdFromPath(path)\n\t\t\tconst node = this.getNodeFromId(fileId)\n\t\t\treturn node?.attributes?.displayName || basename(path)\n\t\t},\n\n\t\tonClick(to) {\n\t\t\tif (to?.query?.dir === this.$route.query.dir) {\n\t\t\t\tthis.$emit('reload')\n\t\t\t}\n\t\t},\n\n\t\tariaLabel(section) {\n\t\t\tif (section?.to?.query?.dir === this.$route.query.dir) {\n\t\t\t\treturn t('files', 'Reload current directory')\n\t\t\t}\n\t\t\treturn t('files', 'Go to the \"{dir}\" directory', section)\n\t\t},\n\t},\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.breadcrumb {\n\t// Take as much space as possible\n\tflex: 1 1 100% !important;\n\twidth: 100%;\n\n\t::v-deep a {\n\t\tcursor: pointer !important;\n\t}\n}\n\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BreadCrumbs.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BreadCrumbs.vue?vue&type=script&lang=js&\"","\n      import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BreadCrumbs.vue?vue&type=style&index=0&id=68b3b20b&prod&lang=scss&scoped=true&\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BreadCrumbs.vue?vue&type=style&index=0&id=68b3b20b&prod&lang=scss&scoped=true&\";\n       export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./BreadCrumbs.vue?vue&type=template&id=68b3b20b&scoped=true&\"\nimport script from \"./BreadCrumbs.vue?vue&type=script&lang=js&\"\nexport * from \"./BreadCrumbs.vue?vue&type=script&lang=js&\"\nimport style0 from \"./BreadCrumbs.vue?vue&type=style&index=0&id=68b3b20b&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"68b3b20b\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('RecycleScroller',{ref:\"recycleScroller\",staticClass:\"files-list\",attrs:{\"key-field\":\"source\",\"items\":_vm.nodes,\"item-size\":55,\"table-mode\":true,\"item-class\":\"files-list__row\",\"item-tag\":\"tr\",\"list-class\":\"files-list__body\",\"list-tag\":\"tbody\",\"role\":\"table\"},scopedSlots:_vm._u([{key:\"default\",fn:function({ item, active, index }){return [_c('FileEntry',{attrs:{\"active\":active,\"index\":index,\"is-size-available\":_vm.isSizeAvailable,\"files-list-width\":_vm.filesListWidth,\"nodes\":_vm.nodes,\"source\":item}})]}},{key:\"before\",fn:function(){return [_c('caption',{staticClass:\"hidden-visually\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.currentView.caption || '')+\"\\n\\t\\t\\t\"+_vm._s(_vm.t('files', 'This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list.'))+\"\\n\\t\\t\")]),_vm._v(\" \"),_c('FilesListHeader',{attrs:{\"files-list-width\":_vm.filesListWidth,\"is-size-available\":_vm.isSizeAvailable,\"nodes\":_vm.nodes}})]},proxy:true},{key:\"after\",fn:function(){return [_c('FilesListFooter',{attrs:{\"files-list-width\":_vm.filesListWidth,\"is-size-available\":_vm.isSizeAvailable,\"nodes\":_vm.nodes,\"summary\":_vm.summary}})]},proxy:true}])})\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nexport const hashCode = function (str) {\n    return str.split('').reduce(function (a, b) {\n        a = ((a << 5) - a) + b.charCodeAt(0);\n        return a & a;\n    }, 0);\n};\n","/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n/* eslint-disable */\nimport { defineStore } from 'pinia';\nexport const useActionsMenuStore = defineStore('actionsmenu', {\n    state: () => ({\n        opened: null,\n    }),\n});\n","/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n/* eslint-disable */\nimport { loadState } from '@nextcloud/initial-state';\nimport { generateUrl } from '@nextcloud/router';\nimport { defineStore } from 'pinia';\nimport Vue from 'vue';\nimport axios from '@nextcloud/axios';\nimport { emit, subscribe } from '@nextcloud/event-bus';\nconst userConfig = loadState('files', 'config', {\n    show_hidden: false,\n    crop_image_previews: true,\n});\nexport const useUserConfigStore = function () {\n    const store = defineStore('userconfig', {\n        state: () => ({\n            userConfig,\n        }),\n        actions: {\n            /**\n             * Update the user config local store\n             */\n            onUpdate(key, value) {\n                Vue.set(this.userConfig, key, value);\n            },\n            /**\n             * Update the user config local store AND on server side\n             */\n            async update(key, value) {\n                await axios.put(generateUrl('/apps/files/api/v1/config/' + key), {\n                    value,\n                });\n                emit('files:config:updated', { key, value });\n            }\n        }\n    });\n    const userConfigStore = store(...arguments);\n    // Make sure we only register the listeners once\n    if (!userConfigStore._initialized) {\n        subscribe('files:config:updated', function ({ key, value }) {\n            userConfigStore.onUpdate(key, value);\n        });\n        userConfigStore._initialized = true;\n    }\n    return userConfigStore;\n};\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CustomElementRender.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CustomElementRender.vue?vue&type=script&lang=js&\"","<!--\n  - @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n  -\n  - @author John Molakvoæ <skjnldsv@protonmail.com>\n  -\n  - @license GNU AGPL version 3 or any later version\n  -\n  - This program is free software: you can redistribute it and/or modify\n  - it under the terms of the GNU Affero General Public License as\n  - published by the Free Software Foundation, either version 3 of the\n  - License, or (at your option) any later version.\n  -\n  - This program is distributed in the hope that it will be useful,\n  - but WITHOUT ANY WARRANTY; without even the implied warranty of\n  - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n  - GNU Affero General Public License for more details.\n  -\n  - You should have received a copy of the GNU Affero General Public License\n  - along with this program. If not, see <http://www.gnu.org/licenses/>.\n  -\n  -->\n<template>\n\t<span />\n</template>\n\n<script>\n/**\n * This component is used to render custom\n * elements provided by an API. Vue doesn't allow\n * to directly render an HTMLElement, so we can do\n * this magic here.\n */\nexport default {\n\tname: 'CustomElementRender',\n\tprops: {\n\t\tsource: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t\tcurrentView: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t\trender: {\n\t\t\ttype: Function,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tcomputed: {\n\t\telement() {\n\t\t\treturn this.render(this.source, this.currentView)\n\t\t},\n\t},\n\twatch: {\n\t\telement() {\n\t\t\tthis.$el.replaceWith(this.element)\n\t\t\tthis.$el = this.element\n\t\t},\n\t},\n\tmounted() {\n\t\tthis.$el.replaceWith(this.element)\n\t\tthis.$el = this.element\n\t},\n}\n</script>\n","import { render, staticRenderFns } from \"./CustomElementRender.vue?vue&type=template&id=a261c93e&\"\nimport script from \"./CustomElementRender.vue?vue&type=script&lang=js&\"\nexport * from \"./CustomElementRender.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('span')\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('span',{staticClass:\"custom-svg-icon\"})\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n  - @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n  -\n  - @author John Molakvoæ <skjnldsv@protonmail.com>\n  -\n  - @license GNU AGPL version 3 or any later version\n  -\n  - This program is free software: you can redistribute it and/or modify\n  - it under the terms of the GNU Affero General Public License as\n  - published by the Free Software Foundation, either version 3 of the\n  - License, or (at your option) any later version.\n  -\n  - This program is distributed in the hope that it will be useful,\n  - but WITHOUT ANY WARRANTY; without even the implied warranty of\n  - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n  - GNU Affero General Public License for more details.\n  -\n  - You should have received a copy of the GNU Affero General Public License\n  - along with this program. If not, see <http://www.gnu.org/licenses/>.\n  -\n  -->\n<template>\n\t<span class=\"custom-svg-icon\" />\n</template>\n\n<script>\n// eslint-disable-next-line import/named\nimport { sanitize } from 'dompurify'\n\nexport default {\n\tname: 'CustomSvgIconRender',\n\tprops: {\n\t\tsvg: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t},\n\twatch: {\n\t\tsvg() {\n\t\t\tthis.$el.innerHTML = sanitize(this.svg)\n\t\t},\n\t},\n\tmounted() {\n\t\tthis.$el.innerHTML = sanitize(this.svg)\n\t},\n}\n</script>\n<style lang=\"scss\" scoped>\n.custom-svg-icon {\n\tdisplay: flex;\n\talign-items: center;\n\talign-self: center;\n\tjustify-content: center;\n\tjustify-self: center;\n\twidth: 44px;\n\theight: 44px;\n\topacity: 1;\n\n\t::v-deep svg {\n\t\t// mdi icons have a size of 24px\n\t\t// 22px results in roughly 16px inner size\n\t\theight: 22px;\n\t\twidth: 22px;\n\t\tfill: currentColor;\n\t}\n}\n\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CustomSvgIconRender.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CustomSvgIconRender.vue?vue&type=script&lang=js&\"","\n      import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CustomSvgIconRender.vue?vue&type=style&index=0&id=93e9b2f4&prod&lang=scss&scoped=true&\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CustomSvgIconRender.vue?vue&type=style&index=0&id=93e9b2f4&prod&lang=scss&scoped=true&\";\n       export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./CustomSvgIconRender.vue?vue&type=template&id=93e9b2f4&scoped=true&\"\nimport script from \"./CustomSvgIconRender.vue?vue&type=script&lang=js&\"\nexport * from \"./CustomSvgIconRender.vue?vue&type=script&lang=js&\"\nimport style0 from \"./CustomSvgIconRender.vue?vue&type=style&index=0&id=93e9b2f4&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"93e9b2f4\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('Fragment',[_c('td',{staticClass:\"files-list__row-checkbox\"},[(_vm.active)?_c('NcCheckboxRadioSwitch',{attrs:{\"aria-label\":_vm.t('files', 'Select the row for {displayName}', { displayName: _vm.displayName }),\"checked\":_vm.selectedFiles,\"value\":_vm.fileid,\"name\":\"selectedFiles\"},on:{\"update:checked\":_vm.onSelectionChange}}):_vm._e()],1),_vm._v(\" \"),_c('td',{staticClass:\"files-list__row-name\"},[_c('a',_vm._b({ref:\"name\",on:{\"click\":_vm.execDefaultAction}},'a',_vm.linkTo,false),[_c('span',{staticClass:\"files-list__row-icon\"},[(_vm.source.type === 'folder')?_c('FolderIcon'):(_vm.previewUrl && !_vm.backgroundFailed)?_c('span',{ref:\"previewImg\",staticClass:\"files-list__row-icon-preview\",style:({ backgroundImage: _vm.backgroundImage })}):(_vm.mimeIconUrl)?_c('span',{staticClass:\"files-list__row-icon-preview files-list__row-icon-preview--mime\",style:({ backgroundImage: _vm.mimeIconUrl })}):_c('FileIcon'),_vm._v(\" \"),(_vm.isFavorite)?_c('span',{staticClass:\"files-list__row-icon-favorite\",attrs:{\"aria-label\":_vm.t('files', 'Favorite')}},[_c('StarIcon',{attrs:{\"aria-hidden\":\"true\",\"size\":20}})],1):_vm._e()],1),_vm._v(\" \"),_c('span',{staticClass:\"files-list__row-name-text\"},[_vm._v(_vm._s(_vm.displayName))])])]),_vm._v(\" \"),_c('td',{staticClass:\"files-list__row-actions\",class:`files-list__row-actions-${_vm.uniqueId}`},[(_vm.active)?_c('NcActions',{ref:\"actionsMenu\",attrs:{\"boundaries-element\":_vm.boundariesElement,\"container\":_vm.boundariesElement,\"disabled\":_vm.source._loading,\"force-title\":true,\"force-menu\":true,\"inline\":_vm.enabledInlineActions.length,\"open\":_vm.openedMenu},on:{\"update:open\":function($event){_vm.openedMenu=$event}}},_vm._l((_vm.enabledMenuActions),function(action){return _c('NcActionButton',{key:action.id,class:'files-list__row-action-' + action.id,on:{\"click\":function($event){return _vm.onActionClick(action)}},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [(_vm.loading === action.id)?_c('NcLoadingIcon',{attrs:{\"size\":18}}):_c('CustomSvgIconRender',{attrs:{\"svg\":action.iconSvgInline([_vm.source], _vm.currentView)}})]},proxy:true}],null,true)},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(action.displayName([_vm.source], _vm.currentView))+\"\\n\\t\\t\\t\")])}),1):_vm._e()],1),_vm._v(\" \"),(_vm.isSizeAvailable)?_c('td',{staticClass:\"files-list__row-size\",style:({ opacity: _vm.sizeOpacity }),on:{\"click\":_vm.openDetailsIfAvailable}},[_c('span',[_vm._v(_vm._s(_vm.size))])]):_vm._e(),_vm._v(\" \"),_vm._l((_vm.columns),function(column){return _c('td',{key:column.id,staticClass:\"files-list__row-column-custom\",class:`files-list__row-${_vm.currentView?.id}-${column.id}`,on:{\"click\":_vm.openDetailsIfAvailable}},[(_vm.active)?_c('CustomElementRender',{attrs:{\"current-view\":_vm.currentView,\"render\":column.render,\"source\":_vm.source}}):_vm._e()],1)})],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileEntry.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileEntry.vue?vue&type=script&lang=ts&\"","/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n/* eslint-disable */\nimport { defineStore } from 'pinia';\nimport Vue from 'vue';\n/**\n * Observe various events and save the current\n * special keys states. Useful for checking the\n * current status of a key when executing a method.\n */\nexport const useKeyboardStore = function () {\n    const store = defineStore('keyboard', {\n        state: () => ({\n            altKey: false,\n            ctrlKey: false,\n            metaKey: false,\n            shiftKey: false,\n        }),\n        actions: {\n            onEvent(event) {\n                if (!event) {\n                    event = window.event;\n                }\n                Vue.set(this, 'altKey', !!event.altKey);\n                Vue.set(this, 'ctrlKey', !!event.ctrlKey);\n                Vue.set(this, 'metaKey', !!event.metaKey);\n                Vue.set(this, 'shiftKey', !!event.shiftKey);\n            },\n        }\n    });\n    const keyboardStore = store(...arguments);\n    // Make sure we only register the listeners once\n    if (!keyboardStore._initialized) {\n        window.addEventListener('keydown', keyboardStore.onEvent);\n        window.addEventListener('keyup', keyboardStore.onEvent);\n        window.addEventListener('mousemove', keyboardStore.onEvent);\n        keyboardStore._initialized = true;\n    }\n    return keyboardStore;\n};\n","/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n// The preview service worker cache name (see webpack config)\nconst SWCacheName = 'previews';\n/**\n * Check if the preview is already cached by the service worker\n */\nexport const isCachedPreview = function (previewUrl) {\n    return caches.open(SWCacheName)\n        .then(function (cache) {\n        return cache.match(previewUrl)\n            .then(function (response) {\n            return !!response;\n        });\n    });\n};\n","\n      import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileEntry.vue?vue&type=style&index=0&id=0600090e&prod&scoped=true&lang=scss&\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileEntry.vue?vue&type=style&index=0&id=0600090e&prod&scoped=true&lang=scss&\";\n       export default content && content.locals ? content.locals : undefined;\n","\n      import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileEntry.vue?vue&type=style&index=1&id=0600090e&prod&lang=css&\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileEntry.vue?vue&type=style&index=1&id=0600090e&prod&lang=css&\";\n       export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./FileEntry.vue?vue&type=template&id=0600090e&scoped=true&\"\nimport script from \"./FileEntry.vue?vue&type=script&lang=ts&\"\nexport * from \"./FileEntry.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./FileEntry.vue?vue&type=style&index=0&id=0600090e&prod&scoped=true&lang=scss&\"\nimport style1 from \"./FileEntry.vue?vue&type=style&index=1&id=0600090e&prod&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"0600090e\",\n  null\n  \n)\n\nexport default component.exports","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesListFooter.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesListFooter.vue?vue&type=script&lang=ts&\"","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('tr',[_c('th',{staticClass:\"files-list__row-checkbox\"},[_c('span',{staticClass:\"hidden-visually\"},[_vm._v(_vm._s(_vm.t('files', 'Total rows summary')))])]),_vm._v(\" \"),_c('td',{staticClass:\"files-list__row-name\"},[_c('span',{staticClass:\"files-list__row-icon\"}),_vm._v(\" \"),_c('span',[_vm._v(_vm._s(_vm.summary))])]),_vm._v(\" \"),_c('td',{staticClass:\"files-list__row-actions\"}),_vm._v(\" \"),(_vm.isSizeAvailable)?_c('td',{staticClass:\"files-list__column files-list__row-size\"},[_c('span',[_vm._v(_vm._s(_vm.totalSize))])]):_vm._e(),_vm._v(\" \"),_vm._l((_vm.columns),function(column){return _c('th',{key:column.id,class:_vm.classForColumn(column)},[_c('span',[_vm._v(_vm._s(column.summary?.(_vm.nodes, _vm.currentView)))])])})],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n      import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesListFooter.vue?vue&type=style&index=0&id=e6a083be&prod&scoped=true&lang=scss&\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesListFooter.vue?vue&type=style&index=0&id=e6a083be&prod&scoped=true&lang=scss&\";\n       export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./FilesListFooter.vue?vue&type=template&id=e6a083be&scoped=true&\"\nimport script from \"./FilesListFooter.vue?vue&type=script&lang=ts&\"\nexport * from \"./FilesListFooter.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./FilesListFooter.vue?vue&type=style&index=0&id=e6a083be&prod&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"e6a083be\",\n  null\n  \n)\n\nexport default component.exports","/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport Vue from 'vue';\nexport default Vue.extend({\n    data() {\n        return {\n            filesListWidth: null,\n        };\n    },\n    created() {\n        const fileListEl = document.querySelector('#app-content-vue');\n        this.$resizeObserver = new ResizeObserver((entries) => {\n            if (entries.length > 0 && entries[0].target === fileListEl) {\n                this.filesListWidth = entries[0].contentRect.width;\n            }\n        });\n        this.$resizeObserver.observe(fileListEl);\n    },\n    beforeDestroy() {\n        this.$resizeObserver.disconnect();\n    },\n});\n","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('th',{staticClass:\"files-list__column files-list__row-actions-batch\",attrs:{\"colspan\":\"2\"}},[_c('NcActions',{ref:\"actionsMenu\",attrs:{\"disabled\":!!_vm.loading || _vm.areSomeNodesLoading,\"force-title\":true,\"inline\":_vm.inlineActions,\"menu-title\":_vm.inlineActions <= 1 ? _vm.t('files', 'Actions') : null,\"open\":_vm.openedMenu},on:{\"update:open\":function($event){_vm.openedMenu=$event}}},_vm._l((_vm.enabledActions),function(action){return _c('NcActionButton',{key:action.id,class:'files-list__row-actions-batch-' + action.id,on:{\"click\":function($event){return _vm.onActionClick(action)}},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [(_vm.loading === action.id)?_c('NcLoadingIcon',{attrs:{\"size\":18}}):_c('CustomSvgIconRender',{attrs:{\"svg\":action.iconSvgInline(_vm.nodes, _vm.currentView)}})]},proxy:true}],null,true)},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(action.displayName(_vm.nodes, _vm.currentView))+\"\\n\\t\\t\")])}),1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesListHeaderActions.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesListHeaderActions.vue?vue&type=script&lang=ts&\"","\n      import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesListHeaderActions.vue?vue&type=style&index=0&id=03e57b1e&prod&scoped=true&lang=scss&\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesListHeaderActions.vue?vue&type=style&index=0&id=03e57b1e&prod&scoped=true&lang=scss&\";\n       export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./FilesListHeaderActions.vue?vue&type=template&id=03e57b1e&scoped=true&\"\nimport script from \"./FilesListHeaderActions.vue?vue&type=script&lang=ts&\"\nexport * from \"./FilesListHeaderActions.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./FilesListHeaderActions.vue?vue&type=style&index=0&id=03e57b1e&prod&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"03e57b1e\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('NcButton',{staticClass:\"files-list__column-sort-button\",class:{'files-list__column-sort-button--active': _vm.sortingMode === _vm.mode},attrs:{\"aria-label\":_vm.sortAriaLabel(_vm.name),\"type\":\"tertiary\"},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.toggleSortBy(_vm.mode)}}},[(_vm.sortingMode !== _vm.mode || _vm.isAscSorting)?_c('MenuUp',{attrs:{\"slot\":\"icon\"},slot:\"icon\"}):_c('MenuDown',{attrs:{\"slot\":\"icon\"},slot:\"icon\"}),_vm._v(\"\\n\\t\"+_vm._s(_vm.name)+\"\\n\")],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport Vue from 'vue';\nimport { mapState } from 'pinia';\nimport { useViewConfigStore } from '../store/viewConfig';\nexport default Vue.extend({\n    computed: {\n        ...mapState(useViewConfigStore, ['getConfig', 'setSortingBy', 'toggleSortingDirection']),\n        currentView() {\n            return this.$navigation.active;\n        },\n        /**\n         * Get the sorting mode for the current view\n         */\n        sortingMode() {\n            return this.getConfig(this.currentView.id)?.sorting_mode\n                || this.currentView?.defaultSortKey\n                || 'basename';\n        },\n        /**\n         * Get the sorting direction for the current view\n         */\n        isAscSorting() {\n            const sortingDirection = this.getConfig(this.currentView.id)?.sorting_direction;\n            return sortingDirection === 'asc';\n        },\n    },\n    methods: {\n        toggleSortBy(key) {\n            // If we're already sorting by this key, flip the direction\n            if (this.sortingMode === key) {\n                this.toggleSortingDirection(this.currentView.id);\n                return;\n            }\n            // else sort ASC by this new key\n            this.setSortingBy(key, this.currentView.id);\n        },\n    },\n});\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesListHeaderButton.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesListHeaderButton.vue?vue&type=script&lang=ts&\"","\n      import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesListHeaderButton.vue?vue&type=style&index=0&id=e85a09d2&prod&lang=scss&\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesListHeaderButton.vue?vue&type=style&index=0&id=e85a09d2&prod&lang=scss&\";\n       export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./FilesListHeaderButton.vue?vue&type=template&id=e85a09d2&\"\nimport script from \"./FilesListHeaderButton.vue?vue&type=script&lang=ts&\"\nexport * from \"./FilesListHeaderButton.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./FilesListHeaderButton.vue?vue&type=style&index=0&id=e85a09d2&prod&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesListHeader.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesListHeader.vue?vue&type=script&lang=ts&\"","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('tr',[_c('th',{staticClass:\"files-list__column files-list__row-checkbox\"},[_c('NcCheckboxRadioSwitch',_vm._b({on:{\"update:checked\":_vm.onToggleAll}},'NcCheckboxRadioSwitch',_vm.selectAllBind,false))],1),_vm._v(\" \"),(!_vm.isNoneSelected)?_c('FilesListHeaderActions',{attrs:{\"current-view\":_vm.currentView,\"selected-nodes\":_vm.selectedNodes}}):[_c('th',{staticClass:\"files-list__column files-list__row-name files-list__column--sortable\",on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.toggleSortBy('basename')}}},[_c('span',{staticClass:\"files-list__row-icon\"}),_vm._v(\" \"),_c('FilesListHeaderButton',{attrs:{\"name\":_vm.t('files', 'Name'),\"mode\":\"basename\"}})],1),_vm._v(\" \"),_c('th',{staticClass:\"files-list__row-actions\"}),_vm._v(\" \"),(_vm.isSizeAvailable)?_c('th',{staticClass:\"files-list__column files-list__row-size\",class:{'files-list__column--sortable': _vm.isSizeAvailable}},[_c('FilesListHeaderButton',{attrs:{\"name\":_vm.t('files', 'Size'),\"mode\":\"size\"}})],1):_vm._e(),_vm._v(\" \"),_vm._l((_vm.columns),function(column){return _c('th',{key:column.id,class:_vm.classForColumn(column)},[(!!column.sort)?_c('FilesListHeaderButton',{attrs:{\"name\":column.title,\"mode\":column.id}}):_c('span',[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(column.title)+\"\\n\\t\\t\\t\")])],1)})]],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n      import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesListHeader.vue?vue&type=style&index=0&id=76b6186a&prod&scoped=true&lang=scss&\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesListHeader.vue?vue&type=style&index=0&id=76b6186a&prod&scoped=true&lang=scss&\";\n       export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./FilesListHeader.vue?vue&type=template&id=76b6186a&scoped=true&\"\nimport script from \"./FilesListHeader.vue?vue&type=script&lang=ts&\"\nexport * from \"./FilesListHeader.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./FilesListHeader.vue?vue&type=style&index=0&id=76b6186a&prod&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"76b6186a\",\n  null\n  \n)\n\nexport default component.exports","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesListVirtual.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesListVirtual.vue?vue&type=script&lang=ts&\"","\n      import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesListVirtual.vue?vue&type=style&index=0&id=640a8bb8&prod&scoped=true&lang=scss&\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesListVirtual.vue?vue&type=style&index=0&id=640a8bb8&prod&scoped=true&lang=scss&\";\n       export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./FilesListVirtual.vue?vue&type=template&id=640a8bb8&scoped=true&\"\nimport script from \"./FilesListVirtual.vue?vue&type=script&lang=ts&\"\nexport * from \"./FilesListVirtual.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./FilesListVirtual.vue?vue&type=style&index=0&id=640a8bb8&prod&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"640a8bb8\",\n  null\n  \n)\n\nexport default component.exports","import isSvg from 'is-svg';\nimport logger from '../logger.js';\nexport default class {\n    _views = [];\n    _currentView = null;\n    constructor() {\n        logger.debug('Navigation service initialized');\n    }\n    register(view) {\n        try {\n            isValidNavigation(view);\n            isUniqueNavigation(view, this._views);\n        }\n        catch (e) {\n            if (e instanceof Error) {\n                logger.error(e.message, { view });\n            }\n            throw e;\n        }\n        if (view.legacy) {\n            logger.warn('Legacy view detected, please migrate to Vue');\n        }\n        if (view.iconClass) {\n            view.legacy = true;\n        }\n        this._views.push(view);\n    }\n    remove(id) {\n        const index = this._views.findIndex(view => view.id === id);\n        if (index !== -1) {\n            this._views.splice(index, 1);\n        }\n    }\n    get views() {\n        return this._views;\n    }\n    setActive(view) {\n        this._currentView = view;\n    }\n    get active() {\n        return this._currentView;\n    }\n}\n/**\n * Make sure the given view is unique\n * and not already registered.\n */\nconst isUniqueNavigation = function (view, views) {\n    if (views.find(search => search.id === view.id)) {\n        throw new Error(`Navigation id ${view.id} is already registered`);\n    }\n    return true;\n};\n/**\n * Typescript cannot validate an interface.\n * Please keep in sync with the Navigation interface requirements.\n */\nconst isValidNavigation = function (view) {\n    if (!view.id || typeof view.id !== 'string') {\n        throw new Error('Navigation id is required and must be a string');\n    }\n    if (!view.name || typeof view.name !== 'string') {\n        throw new Error('Navigation name is required and must be a string');\n    }\n    /**\n     * Legacy handle their content and icon differently\n     * TODO: remove when support for legacy views is removed\n     */\n    if (!view.legacy) {\n        if (!view.getContents || typeof view.getContents !== 'function') {\n            throw new Error('Navigation getContents is required and must be a function');\n        }\n        if (!view.icon || typeof view.icon !== 'string' || !isSvg(view.icon)) {\n            throw new Error('Navigation icon is required and must be a valid svg string');\n        }\n    }\n    if (!('order' in view) || typeof view.order !== 'number') {\n        throw new Error('Navigation order is required and must be a number');\n    }\n    // Optional properties\n    if (view.columns) {\n        view.columns.forEach(isValidColumn);\n    }\n    if (view.emptyView && typeof view.emptyView !== 'function') {\n        throw new Error('Navigation emptyView must be a function');\n    }\n    if (view.parent && typeof view.parent !== 'string') {\n        throw new Error('Navigation parent must be a string');\n    }\n    if ('sticky' in view && typeof view.sticky !== 'boolean') {\n        throw new Error('Navigation sticky must be a boolean');\n    }\n    if ('expanded' in view && typeof view.expanded !== 'boolean') {\n        throw new Error('Navigation expanded must be a boolean');\n    }\n    if (view.defaultSortKey && typeof view.defaultSortKey !== 'string') {\n        throw new Error('Navigation defaultSortKey must be a string');\n    }\n    return true;\n};\n/**\n * Typescript cannot validate an interface.\n * Please keep in sync with the Column interface requirements.\n */\nconst isValidColumn = function (column) {\n    if (!column.id || typeof column.id !== 'string') {\n        throw new Error('A column id is required');\n    }\n    if (!column.title || typeof column.title !== 'string') {\n        throw new Error('A column title is required');\n    }\n    if (!column.render || typeof column.render !== 'function') {\n        throw new Error('A render function is required');\n    }\n    // Optional properties\n    if (column.sort && typeof column.sort !== 'function') {\n        throw new Error('Column sortFunction must be a function');\n    }\n    if (column.summary && typeof column.summary !== 'function') {\n        throw new Error('Column summary must be a function');\n    }\n    return true;\n};\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesList.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesList.vue?vue&type=script&lang=ts&\"","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('NcAppContent',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.currentView?.legacy),expression:\"!currentView?.legacy\"}],class:{'app-content--hidden': _vm.currentView?.legacy},attrs:{\"data-cy-files-content\":\"\"}},[_c('div',{staticClass:\"files-list__header\"},[_c('BreadCrumbs',{attrs:{\"path\":_vm.dir},on:{\"reload\":_vm.fetchContent}}),_vm._v(\" \"),(_vm.isRefreshing)?_c('NcLoadingIcon',{staticClass:\"files-list__refresh-icon\"}):_vm._e()],1),_vm._v(\" \"),(_vm.loading && !_vm.isRefreshing)?_c('NcLoadingIcon',{staticClass:\"files-list__loading-icon\",attrs:{\"size\":38,\"title\":_vm.t('files', 'Loading current folder')}}):(!_vm.loading && _vm.isEmptyDir)?_c('NcEmptyContent',{attrs:{\"title\":_vm.t('files', 'No files in here'),\"description\":_vm.t('files', 'No files or folders have been deleted yet'),\"data-cy-files-content-empty\":\"\"},scopedSlots:_vm._u([{key:\"action\",fn:function(){return [(_vm.dir !== '/')?_c('NcButton',{attrs:{\"aria-label\":\"t('files', 'Go to the previous folder')\",\"type\":\"primary\",\"to\":_vm.toPreviousDir}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('files', 'Go back'))+\"\\n\\t\\t\\t\")]):_vm._e()]},proxy:true},{key:\"icon\",fn:function(){return [_c('TrashCan')]},proxy:true}])}):_c('FilesListVirtual',{ref:\"filesListVirtual\",attrs:{\"current-view\":_vm.currentView,\"nodes\":_vm.dirContents}})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n      import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesList.vue?vue&type=style&index=0&id=66068cbb&prod&scoped=true&lang=scss&\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesList.vue?vue&type=style&index=0&id=66068cbb&prod&scoped=true&lang=scss&\";\n       export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./FilesList.vue?vue&type=template&id=66068cbb&scoped=true&\"\nimport script from \"./FilesList.vue?vue&type=script&lang=ts&\"\nexport * from \"./FilesList.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./FilesList.vue?vue&type=style&index=0&id=66068cbb&prod&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"66068cbb\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('NcAppNavigation',{attrs:{\"data-cy-files-navigation\":\"\"},scopedSlots:_vm._u([{key:\"list\",fn:function(){return _vm._l((_vm.parentViews),function(view){return _c('NcAppNavigationItem',{key:view.id,attrs:{\"allow-collapse\":true,\"data-cy-files-navigation-item\":view.id,\"icon\":view.iconClass,\"open\":_vm.isExpanded(view),\"pinned\":view.sticky,\"title\":view.name,\"to\":_vm.generateToNavigation(view)},on:{\"update:open\":function($event){return _vm.onToggleExpand(view)}}},[(view.icon)?_c('NcIconSvgWrapper',{attrs:{\"slot\":\"icon\",\"svg\":view.icon},slot:\"icon\"}):_vm._e(),_vm._v(\" \"),_vm._l((_vm.childViews[view.id]),function(child){return _c('NcAppNavigationItem',{key:child.id,attrs:{\"data-cy-files-navigation-item\":child.id,\"exact\":true,\"icon\":child.iconClass,\"title\":child.name,\"to\":_vm.generateToNavigation(child)}},[(child.icon)?_c('NcIconSvgWrapper',{attrs:{\"slot\":\"icon\",\"svg\":child.icon},slot:\"icon\"}):_vm._e()],1)})],2)})},proxy:true},{key:\"footer\",fn:function(){return [_c('ul',{staticClass:\"app-navigation-entry__settings\"},[_c('NavigationQuota'),_vm._v(\" \"),_c('NcAppNavigationItem',{attrs:{\"aria-label\":_vm.t('files', 'Open the files app settings'),\"title\":_vm.t('files', 'Files settings'),\"data-cy-files-navigation-settings-button\":\"\"},on:{\"click\":function($event){$event.preventDefault();$event.stopPropagation();return _vm.openSettings.apply(null, arguments)}}},[_c('Cog',{attrs:{\"slot\":\"icon\",\"size\":20},slot:\"icon\"})],1)],1)]},proxy:true}])},[_vm._v(\" \"),_vm._v(\" \"),_c('SettingsModal',{attrs:{\"open\":_vm.settingsOpened,\"data-cy-files-navigation-settings\":\"\"},on:{\"close\":_vm.onSettingsClose}})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return (_vm.storageStats)?_c('NcAppNavigationItem',{staticClass:\"app-navigation-entry__settings-quota\",class:{ 'app-navigation-entry__settings-quota--not-unlimited': _vm.storageStats.quota >= 0},attrs:{\"aria-label\":_vm.t('files', 'Storage informations'),\"loading\":_vm.loadingStorageStats,\"name\":_vm.storageStatsTitle,\"title\":_vm.storageStatsTooltip,\"data-cy-files-navigation-settings-quota\":\"\"},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.debounceUpdateStorageStats.apply(null, arguments)}}},[_c('ChartPie',{attrs:{\"slot\":\"icon\",\"size\":20},slot:\"icon\"}),_vm._v(\" \"),(_vm.storageStats.quota >= 0)?_c('NcProgressBar',{attrs:{\"slot\":\"extra\",\"error\":_vm.storageStats.relative > 80,\"value\":Math.min(_vm.storageStats.relative, 100)},slot:\"extra\"}):_vm._e()],1):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n\t<NcAppNavigationItem v-if=\"storageStats\"\n\t\t:aria-label=\"t('files', 'Storage informations')\"\n\t\t:class=\"{ 'app-navigation-entry__settings-quota--not-unlimited': storageStats.quota >= 0}\"\n\t\t:loading=\"loadingStorageStats\"\n\t\t:name=\"storageStatsTitle\"\n\t\t:title=\"storageStatsTooltip\"\n\t\tclass=\"app-navigation-entry__settings-quota\"\n\t\tdata-cy-files-navigation-settings-quota\n\t\t@click.stop.prevent=\"debounceUpdateStorageStats\">\n\t\t<ChartPie slot=\"icon\" :size=\"20\" />\n\n\t\t<!-- Progress bar -->\n\t\t<NcProgressBar v-if=\"storageStats.quota >= 0\"\n\t\t\tslot=\"extra\"\n\t\t\t:error=\"storageStats.relative > 80\"\n\t\t\t:value=\"Math.min(storageStats.relative, 100)\" />\n\t</NcAppNavigationItem>\n</template>\n\n<script>\nimport { formatFileSize } from '@nextcloud/files'\nimport { generateUrl } from '@nextcloud/router'\nimport { loadState } from '@nextcloud/initial-state'\nimport { showError } from '@nextcloud/dialogs'\nimport { debounce, throttle } from 'throttle-debounce'\nimport { translate } from '@nextcloud/l10n'\nimport axios from '@nextcloud/axios'\nimport ChartPie from 'vue-material-design-icons/ChartPie.vue'\nimport NcAppNavigationItem from '@nextcloud/vue/dist/Components/NcAppNavigationItem.js'\nimport NcProgressBar from '@nextcloud/vue/dist/Components/NcProgressBar.js'\n\nimport logger from '../logger.js'\nimport { subscribe } from '@nextcloud/event-bus'\n\nexport default {\n\tname: 'NavigationQuota',\n\n\tcomponents: {\n\t\tChartPie,\n\t\tNcAppNavigationItem,\n\t\tNcProgressBar,\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tloadingStorageStats: false,\n\t\t\tstorageStats: loadState('files', 'storageStats', null),\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tstorageStatsTitle() {\n\t\t\tconst usedQuotaByte = formatFileSize(this.storageStats?.used)\n\t\t\tconst quotaByte = formatFileSize(this.storageStats?.quota)\n\n\t\t\t// If no quota set\n\t\t\tif (this.storageStats?.quota < 0) {\n\t\t\t\treturn this.t('files', '{usedQuotaByte} used', { usedQuotaByte })\n\t\t\t}\n\n\t\t\treturn this.t('files', '{used} of {quota} used', {\n\t\t\t\tused: usedQuotaByte,\n\t\t\t\tquota: quotaByte,\n\t\t\t})\n\t\t},\n\t\tstorageStatsTooltip() {\n\t\t\tif (!this.storageStats.relative) {\n\t\t\t\treturn ''\n\t\t\t}\n\n\t\t\treturn this.t('files', '{relative}% used', this.storageStats)\n\t\t},\n\t},\n\n\tbeforeMount() {\n\t\t/**\n\t\t * Update storage stats every minute\n\t\t * TODO: remove when all views are migrated to Vue\n\t\t */\n\t\tsetInterval(this.throttleUpdateStorageStats, 60 * 1000)\n\n\t\tsubscribe('files:node:created', this.throttleUpdateStorageStats)\n\t\tsubscribe('files:node:deleted', this.throttleUpdateStorageStats)\n\t\tsubscribe('files:node:moved', this.throttleUpdateStorageStats)\n\t\tsubscribe('files:node:updated', this.throttleUpdateStorageStats)\n\t},\n\n\tmethods: {\n\t\t// From user input\n\t\tdebounceUpdateStorageStats: debounce(200, function(event) {\n\t\t\tthis.updateStorageStats(event)\n\t\t}),\n\t\t// From interval or event bus\n\t\tthrottleUpdateStorageStats: throttle(1000, function(event) {\n\t\t\tthis.updateStorageStats(event)\n\t\t}),\n\n\t\t/**\n\t\t * Update the storage stats\n\t\t * Throttled at max 1 refresh per minute\n\t\t *\n\t\t * @param {Event} [event = null] if user interaction\n\t\t */\n\t\tasync updateStorageStats(event = null) {\n\t\t\tif (this.loadingStorageStats) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tthis.loadingStorageStats = true\n\t\t\ttry {\n\t\t\t\tconst response = await axios.get(generateUrl('/apps/files/api/v1/stats'))\n\t\t\t\tif (!response?.data?.data) {\n\t\t\t\t\tthrow new Error('Invalid storage stats')\n\t\t\t\t}\n\t\t\t\tthis.storageStats = response.data.data\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error('Could not refresh storage stats', { error })\n\t\t\t\t// Only show to the user if it was manually triggered\n\t\t\t\tif (event) {\n\t\t\t\t\tshowError(t('files', 'Could not refresh storage stats'))\n\t\t\t\t}\n\t\t\t} finally {\n\t\t\t\tthis.loadingStorageStats = false\n\t\t\t}\n\t\t},\n\n\t\tt: translate,\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n// User storage stats display\n.app-navigation-entry__settings-quota {\n\t// Align title with progress and icon\n\t&--not-unlimited::v-deep .app-navigation-entry__title {\n\t\tmargin-top: -4px;\n\t}\n\n\tprogress {\n\t\tposition: absolute;\n\t\tbottom: 10px;\n\t\tmargin-left: 44px;\n\t\twidth: calc(100% - 44px - 22px);\n\t}\n}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NavigationQuota.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NavigationQuota.vue?vue&type=script&lang=js&\"","\n      import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NavigationQuota.vue?vue&type=style&index=0&id=918797b2&prod&lang=scss&scoped=true&\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NavigationQuota.vue?vue&type=style&index=0&id=918797b2&prod&lang=scss&scoped=true&\";\n       export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./NavigationQuota.vue?vue&type=template&id=918797b2&scoped=true&\"\nimport script from \"./NavigationQuota.vue?vue&type=script&lang=js&\"\nexport * from \"./NavigationQuota.vue?vue&type=script&lang=js&\"\nimport style0 from \"./NavigationQuota.vue?vue&type=style&index=0&id=918797b2&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"918797b2\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('NcAppSettingsDialog',{attrs:{\"open\":_vm.open,\"show-navigation\":true,\"title\":_vm.t('files', 'Files settings')},on:{\"update:open\":_vm.onClose}},[_c('NcAppSettingsSection',{attrs:{\"id\":\"settings\",\"title\":_vm.t('files', 'Files settings')}},[_c('NcCheckboxRadioSwitch',{attrs:{\"checked\":_vm.userConfig.show_hidden},on:{\"update:checked\":function($event){return _vm.setConfig('show_hidden', $event)}}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('files', 'Show hidden files'))+\"\\n\\t\\t\")]),_vm._v(\" \"),_c('NcCheckboxRadioSwitch',{attrs:{\"checked\":_vm.userConfig.crop_image_previews},on:{\"update:checked\":function($event){return _vm.setConfig('crop_image_previews', $event)}}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('files', 'Crop image previews'))+\"\\n\\t\\t\")])],1),_vm._v(\" \"),(_vm.settings.length !== 0)?_c('NcAppSettingsSection',{attrs:{\"id\":\"more-settings\",\"title\":_vm.t('files', 'Additional settings')}},[_vm._l((_vm.settings),function(setting){return [_c('Setting',{key:setting.name,attrs:{\"el\":setting.el}})]})],2):_vm._e(),_vm._v(\" \"),_c('NcAppSettingsSection',{attrs:{\"id\":\"webdav\",\"title\":_vm.t('files', 'WebDAV')}},[_c('NcInputField',{attrs:{\"id\":\"webdav-url-input\",\"show-trailing-button\":true,\"success\":_vm.webdavUrlCopied,\"trailing-button-label\":_vm.t('files', 'Copy to clipboard'),\"value\":_vm.webdavUrl,\"readonly\":\"readonly\",\"type\":\"url\"},on:{\"focus\":function($event){return $event.target.select()},\"trailing-button-click\":_vm.copyCloudId},scopedSlots:_vm._u([{key:\"trailing-button-icon\",fn:function(){return [_c('Clipboard',{attrs:{\"size\":20}})]},proxy:true}])}),_vm._v(\" \"),_c('em',[_c('a',{staticClass:\"setting-link\",attrs:{\"href\":_vm.webdavDocs,\"target\":\"_blank\",\"rel\":\"noreferrer noopener\"}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('files', 'Use this address to access your Files via WebDAV'))+\" ↗\\n\\t\\t\\t\")])]),_vm._v(\" \"),_c('br'),_vm._v(\" \"),_c('em',[_c('a',{staticClass:\"setting-link\",attrs:{\"href\":_vm.appPasswordUrl}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('files', 'If you have enabled 2FA, you must create and use a new app password by clicking here.'))+\" ↗\\n\\t\\t\\t\")])])],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n  - @copyright Copyright (c) 2020 Gary Kim <gary@garykim.dev>\n  -\n  - @author John Molakvoæ <skjnldsv@protonmail.com>\n  -\n  - @license GNU AGPL version 3 or any later version\n  -\n  - This program is free software: you can redistribute it and/or modify\n  - it under the terms of the GNU Affero General Public License as\n  - published by the Free Software Foundation, either version 3 of the\n  - License, or (at your option) any later version.\n  -\n  - This program is distributed in the hope that it will be useful,\n  - but WITHOUT ANY WARRANTY; without even the implied warranty of\n  - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n  - GNU Affero General Public License for more details.\n  -\n  - You should have received a copy of the GNU Affero General Public License\n  - along with this program. If not, see <http://www.gnu.org/licenses/>.\n  -\n  -->\n\n<template>\n\t<div />\n</template>\n<script>\nexport default {\n\tname: 'Setting',\n\tprops: {\n\t\tel: {\n\t\t\ttype: Function,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tmounted() {\n\t\tthis.$el.appendChild(this.el())\n\t},\n}\n</script>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Setting.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Setting.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Setting.vue?vue&type=template&id=61d69eae&\"\nimport script from \"./Setting.vue?vue&type=script&lang=js&\"\nexport * from \"./Setting.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div')\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n  - @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n  -\n  - @author John Molakvoæ <skjnldsv@protonmail.com>\n  -\n  - @license GNU AGPL version 3 or any later version\n  -\n  - This program is free software: you can redistribute it and/or modify\n  - it under the terms of the GNU Affero General Public License as\n  - published by the Free Software Foundation, either version 3 of the\n  - License, or (at your option) any later version.\n  -\n  - This program is distributed in the hope that it will be useful,\n  - but WITHOUT ANY WARRANTY; without even the implied warranty of\n  - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n  - GNU Affero General Public License for more details.\n  -\n  - You should have received a copy of the GNU Affero General Public License\n  - along with this program. If not, see <http://www.gnu.org/licenses/>.\n  -\n  -->\n<template>\n\t<NcAppSettingsDialog :open=\"open\"\n\t\t:show-navigation=\"true\"\n\t\t:title=\"t('files', 'Files settings')\"\n\t\t@update:open=\"onClose\">\n\t\t<!-- Settings API-->\n\t\t<NcAppSettingsSection id=\"settings\" :title=\"t('files', 'Files settings')\">\n\t\t\t<NcCheckboxRadioSwitch :checked=\"userConfig.show_hidden\"\n\t\t\t\t@update:checked=\"setConfig('show_hidden', $event)\">\n\t\t\t\t{{ t('files', 'Show hidden files') }}\n\t\t\t</NcCheckboxRadioSwitch>\n\t\t\t<NcCheckboxRadioSwitch :checked=\"userConfig.crop_image_previews\"\n\t\t\t\t@update:checked=\"setConfig('crop_image_previews', $event)\">\n\t\t\t\t{{ t('files', 'Crop image previews') }}\n\t\t\t</NcCheckboxRadioSwitch>\n\t\t</NcAppSettingsSection>\n\n\t\t<!-- Settings API-->\n\t\t<NcAppSettingsSection v-if=\"settings.length !== 0\"\n\t\t\tid=\"more-settings\"\n\t\t\t:title=\"t('files', 'Additional settings')\">\n\t\t\t<template v-for=\"setting in settings\">\n\t\t\t\t<Setting :key=\"setting.name\" :el=\"setting.el\" />\n\t\t\t</template>\n\t\t</NcAppSettingsSection>\n\n\t\t<!-- Webdav URL-->\n\t\t<NcAppSettingsSection id=\"webdav\" :title=\"t('files', 'WebDAV')\">\n\t\t\t<NcInputField id=\"webdav-url-input\"\n\t\t\t\t:show-trailing-button=\"true\"\n\t\t\t\t:success=\"webdavUrlCopied\"\n\t\t\t\t:trailing-button-label=\"t('files', 'Copy to clipboard')\"\n\t\t\t\t:value=\"webdavUrl\"\n\t\t\t\treadonly=\"readonly\"\n\t\t\t\ttype=\"url\"\n\t\t\t\t@focus=\"$event.target.select()\"\n\t\t\t\t@trailing-button-click=\"copyCloudId\">\n\t\t\t\t<template #trailing-button-icon>\n\t\t\t\t\t<Clipboard :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t</NcInputField>\n\t\t\t<em>\n\t\t\t\t<a class=\"setting-link\"\n\t\t\t\t\t:href=\"webdavDocs\"\n\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\trel=\"noreferrer noopener\">\n\t\t\t\t\t{{ t('files', 'Use this address to access your Files via WebDAV') }} ↗\n\t\t\t\t</a>\n\t\t\t</em>\n\t\t\t<br>\n\t\t\t<em>\n\t\t\t\t<a class=\"setting-link\" :href=\"appPasswordUrl\">\n\t\t\t\t\t{{ t('files', 'If you have enabled 2FA, you must create and use a new app password by clicking here.') }} ↗\n\t\t\t\t</a>\n\t\t\t</em>\n\t\t</NcAppSettingsSection>\n\t</NcAppSettingsDialog>\n</template>\n\n<script>\nimport NcAppSettingsDialog from '@nextcloud/vue/dist/Components/NcAppSettingsDialog.js'\nimport NcAppSettingsSection from '@nextcloud/vue/dist/Components/NcAppSettingsSection.js'\nimport NcCheckboxRadioSwitch from '@nextcloud/vue/dist/Components/NcCheckboxRadioSwitch.js'\nimport Clipboard from 'vue-material-design-icons/Clipboard.vue'\nimport NcInputField from '@nextcloud/vue/dist/Components/NcInputField.js'\nimport Setting from '../components/Setting.vue'\n\nimport { generateRemoteUrl, generateUrl } from '@nextcloud/router'\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { showError, showSuccess } from '@nextcloud/dialogs'\nimport { translate } from '@nextcloud/l10n'\nimport { useUserConfigStore } from '../store/userconfig.ts'\n\nexport default {\n\tname: 'Settings',\n\tcomponents: {\n\t\tClipboard,\n\t\tNcAppSettingsDialog,\n\t\tNcAppSettingsSection,\n\t\tNcCheckboxRadioSwitch,\n\t\tNcInputField,\n\t\tSetting,\n\t},\n\n\tprops: {\n\t\topen: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\n\tsetup() {\n\t\tconst userConfigStore = useUserConfigStore()\n\t\treturn {\n\t\t\tuserConfigStore,\n\t\t}\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\t// Settings API\n\t\t\tsettings: window.OCA?.Files?.Settings?.settings || [],\n\n\t\t\t// Webdav infos\n\t\t\twebdavUrl: generateRemoteUrl('dav/files/' + encodeURIComponent(getCurrentUser()?.uid)),\n\t\t\twebdavDocs: 'https://docs.nextcloud.com/server/stable/go.php?to=user-webdav',\n\t\t\tappPasswordUrl: generateUrl('/settings/user/security#generate-app-token-section'),\n\t\t\twebdavUrlCopied: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tuserConfig() {\n\t\t\treturn this.userConfigStore.userConfig\n\t\t},\n\t},\n\n\tbeforeMount() {\n\t\t// Update the settings API entries state\n\t\tthis.settings.forEach(setting => setting.open())\n\t},\n\n\tbeforeDestroy() {\n\t\t// Update the settings API entries state\n\t\tthis.settings.forEach(setting => setting.close())\n\t},\n\n\tmethods: {\n\t\tonClose() {\n\t\t\tthis.$emit('close')\n\t\t},\n\n\t\tsetConfig(key, value) {\n\t\t\tthis.userConfigStore.update(key, value)\n\t\t},\n\n\t\tasync copyCloudId() {\n\t\t\tdocument.querySelector('input#webdav-url-input').select()\n\n\t\t\tif (!navigator.clipboard) {\n\t\t\t\t// Clipboard API not available\n\t\t\t\tshowError(t('files', 'Clipboard is not available'))\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tawait navigator.clipboard.writeText(this.webdavUrl)\n\t\t\tthis.webdavUrlCopied = true\n\t\t\tshowSuccess(t('files', 'WebDAV URL copied to clipboard'))\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.webdavUrlCopied = false\n\t\t\t}, 5000)\n\t\t},\n\n\t\tt: translate,\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.setting-link:hover {\n\ttext-decoration: underline;\n}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Settings.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Settings.vue?vue&type=script&lang=js&\"","\n      import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Settings.vue?vue&type=style&index=0&id=76ca5d1f&prod&lang=scss&scoped=true&\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Settings.vue?vue&type=style&index=0&id=76ca5d1f&prod&lang=scss&scoped=true&\";\n       export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Settings.vue?vue&type=template&id=76ca5d1f&scoped=true&\"\nimport script from \"./Settings.vue?vue&type=script&lang=js&\"\nexport * from \"./Settings.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Settings.vue?vue&type=style&index=0&id=76ca5d1f&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"76ca5d1f\",\n  null\n  \n)\n\nexport default component.exports","<!--\n  - @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n  -\n  - @author John Molakvoæ <skjnldsv@protonmail.com>\n  -\n  - @license GNU AGPL version 3 or any later version\n  -\n  - This program is free software: you can redistribute it and/or modify\n  - it under the terms of the GNU Affero General Public License as\n  - published by the Free Software Foundation, either version 3 of the\n  - License, or (at your option) any later version.\n  -\n  - This program is distributed in the hope that it will be useful,\n  - but WITHOUT ANY WARRANTY; without even the implied warranty of\n  - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n  - GNU Affero General Public License for more details.\n  -\n  - You should have received a copy of the GNU Affero General Public License\n  - along with this program. If not, see <http://www.gnu.org/licenses/>.\n  -\n  -->\n<template>\n\t<NcAppNavigation data-cy-files-navigation>\n\t\t<template #list>\n\t\t\t<NcAppNavigationItem v-for=\"view in parentViews\"\n\t\t\t\t:key=\"view.id\"\n\t\t\t\t:allow-collapse=\"true\"\n\t\t\t\t:data-cy-files-navigation-item=\"view.id\"\n\t\t\t\t:icon=\"view.iconClass\"\n\t\t\t\t:open=\"isExpanded(view)\"\n\t\t\t\t:pinned=\"view.sticky\"\n\t\t\t\t:title=\"view.name\"\n\t\t\t\t:to=\"generateToNavigation(view)\"\n\t\t\t\t@update:open=\"onToggleExpand(view)\">\n\t\t\t\t<!-- Sanitized icon as svg if provided -->\n\t\t\t\t<NcIconSvgWrapper v-if=\"view.icon\" slot=\"icon\" :svg=\"view.icon\" />\n\n\t\t\t\t<!-- Child views if any -->\n\t\t\t\t<NcAppNavigationItem v-for=\"child in childViews[view.id]\"\n\t\t\t\t\t:key=\"child.id\"\n\t\t\t\t\t:data-cy-files-navigation-item=\"child.id\"\n\t\t\t\t\t:exact=\"true\"\n\t\t\t\t\t:icon=\"child.iconClass\"\n\t\t\t\t\t:title=\"child.name\"\n\t\t\t\t\t:to=\"generateToNavigation(child)\">\n\t\t\t\t\t<!-- Sanitized icon as svg if provided -->\n\t\t\t\t\t<NcIconSvgWrapper v-if=\"child.icon\" slot=\"icon\" :svg=\"child.icon\" />\n\t\t\t\t</NcAppNavigationItem>\n\t\t\t</NcAppNavigationItem>\n\t\t</template>\n\n\t\t<!-- Non-scrollable navigation bottom elements -->\n\t\t<template #footer>\n\t\t\t<ul class=\"app-navigation-entry__settings\">\n\t\t\t\t<!-- User storage usage statistics -->\n\t\t\t\t<NavigationQuota />\n\n\t\t\t\t<!-- Files settings modal toggle-->\n\t\t\t\t<NcAppNavigationItem :aria-label=\"t('files', 'Open the files app settings')\"\n\t\t\t\t\t:title=\"t('files', 'Files settings')\"\n\t\t\t\t\tdata-cy-files-navigation-settings-button\n\t\t\t\t\t@click.prevent.stop=\"openSettings\">\n\t\t\t\t\t<Cog slot=\"icon\" :size=\"20\" />\n\t\t\t\t</NcAppNavigationItem>\n\t\t\t</ul>\n\t\t</template>\n\n\t\t<!-- Settings modal-->\n\t\t<SettingsModal :open=\"settingsOpened\"\n\t\t\tdata-cy-files-navigation-settings\n\t\t\t@close=\"onSettingsClose\" />\n\t</NcAppNavigation>\n</template>\n\n<script>\nimport { emit, subscribe } from '@nextcloud/event-bus'\nimport { translate } from '@nextcloud/l10n'\nimport Cog from 'vue-material-design-icons/Cog.vue'\nimport NcAppNavigation from '@nextcloud/vue/dist/Components/NcAppNavigation.js'\nimport NcAppNavigationItem from '@nextcloud/vue/dist/Components/NcAppNavigationItem.js'\nimport NcIconSvgWrapper from '@nextcloud/vue/dist/Components/NcIconSvgWrapper.js'\n\nimport { setPageHeading } from '../../../../core/src/OCP/accessibility.js'\nimport { useViewConfigStore } from '../store/viewConfig.ts'\nimport logger from '../logger.js'\nimport Navigation from '../services/Navigation.ts'\nimport NavigationQuota from '../components/NavigationQuota.vue'\nimport SettingsModal from './Settings.vue'\n\nexport default {\n\tname: 'Navigation',\n\n\tcomponents: {\n\t\tCog,\n\t\tNavigationQuota,\n\t\tNcAppNavigation,\n\t\tNcAppNavigationItem,\n\t\tNcIconSvgWrapper,\n\t\tSettingsModal,\n\t},\n\n\tprops: {\n\t\t// eslint-disable-next-line vue/prop-name-casing\n\t\tNavigation: {\n\t\t\ttype: Navigation,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tsetup() {\n\t\tconst viewConfigStore = useViewConfigStore()\n\t\treturn {\n\t\t\tviewConfigStore,\n\t\t}\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tsettingsOpened: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tcurrentViewId() {\n\t\t\treturn this.$route?.params?.view || 'files'\n\t\t},\n\n\t\t/** @return {Navigation} */\n\t\tcurrentView() {\n\t\t\treturn this.views.find(view => view.id === this.currentViewId)\n\t\t},\n\n\t\t/** @return {Navigation[]} */\n\t\tviews() {\n\t\t\treturn this.Navigation.views\n\t\t},\n\n\t\t/** @return {Navigation[]} */\n\t\tparentViews() {\n\t\t\treturn this.views\n\t\t\t\t// filter child views\n\t\t\t\t.filter(view => !view.parent)\n\t\t\t\t// sort views by order\n\t\t\t\t.sort((a, b) => {\n\t\t\t\t\treturn a.order - b.order\n\t\t\t\t})\n\t\t},\n\n\t\t/** @return {Navigation[]} */\n\t\tchildViews() {\n\t\t\treturn this.views\n\t\t\t\t// filter parent views\n\t\t\t\t.filter(view => !!view.parent)\n\t\t\t\t// create a map of parents and their children\n\t\t\t\t.reduce((list, view) => {\n\t\t\t\t\tlist[view.parent] = [...(list[view.parent] || []), view]\n\t\t\t\t\t// Sort children by order\n\t\t\t\t\tlist[view.parent].sort((a, b) => {\n\t\t\t\t\t\treturn a.order - b.order\n\t\t\t\t\t})\n\t\t\t\t\treturn list\n\t\t\t\t}, {})\n\t\t},\n\t},\n\n\twatch: {\n\t\tcurrentView(view, oldView) {\n\t\t\t// If undefined, it means we're initializing the view\n\t\t\t// This is handled by the legacy-view:initialized event\n\t\t\t// TODO: remove when legacy views are dropped\n\t\t\tif (view?.id === oldView?.id) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tthis.Navigation.setActive(view)\n\t\t\tlogger.debug('Navigation changed', { id: view.id, view })\n\n\t\t\tthis.showView(view, oldView)\n\t\t},\n\t},\n\n\tbeforeMount() {\n\t\tif (this.currentView) {\n\t\t\tlogger.debug('Navigation mounted. Showing requested view', { view: this.currentView })\n\t\t\tthis.showView(this.currentView)\n\t\t}\n\n\t\tsubscribe('files:legacy-navigation:changed', this.onLegacyNavigationChanged)\n\n\t\t// TODO: remove this once the legacy navigation is gone\n\t\tsubscribe('files:legacy-view:initialized', () => {\n\t\t\tlogger.debug('Legacy view initialized', { ...this.currentView })\n\t\t\tthis.showView(this.currentView)\n\t\t})\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * @param {Navigation} view the new active view\n\t\t * @param {Navigation} oldView the old active view\n\t\t */\n\t\tshowView(view, oldView) {\n\t\t\t// Closing any opened sidebar\n\t\t\twindow?.OCA?.Files?.Sidebar?.close?.()\n\n\t\t\tif (view?.legacy) {\n\t\t\t\tconst newAppContent = document.querySelector('#app-content #app-content-' + this.currentView.id + '.viewcontainer')\n\t\t\t\tdocument.querySelectorAll('#app-content .viewcontainer').forEach(el => {\n\t\t\t\t\tel.classList.add('hidden')\n\t\t\t\t})\n\t\t\t\tnewAppContent.classList.remove('hidden')\n\n\t\t\t\t// Triggering legacy navigation events\n\t\t\t\tconst { dir = '/' } = OC.Util.History.parseUrlQuery()\n\t\t\t\tconst params = { itemId: view.id, dir }\n\n\t\t\t\tlogger.debug('Triggering legacy navigation event', params)\n\t\t\t\twindow.jQuery(newAppContent).trigger(new window.jQuery.Event('show', params))\n\t\t\t\twindow.jQuery(newAppContent).trigger(new window.jQuery.Event('urlChanged', params))\n\t\t\t}\n\n\t\t\tthis.Navigation.setActive(view)\n\t\t\tsetPageHeading(view.name)\n\t\t\temit('files:navigation:changed', view)\n\t\t},\n\n\t\t/**\n\t\t * Coming from the legacy files app.\n\t\t * TODO: remove when all views are migrated.\n\t\t *\n\t\t * @param {Navigation} view the new active view\n\t\t */\n\t\tonLegacyNavigationChanged({ id } = { id: 'files' }) {\n\t\t\tconst view = this.Navigation.views.find(view => view.id === id)\n\t\t\tif (view && view.legacy && view.id !== this.currentView.id) {\n\t\t\t\t// Force update the current route as the request comes\n\t\t\t\t// from the legacy files app router\n\t\t\t\tthis.$router.replace({ ...this.$route, params: { view: view.id } })\n\t\t\t\tthis.Navigation.setActive(view)\n\t\t\t\tthis.showView(view)\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Expand/collapse a a view with children and permanently\n\t\t * save this setting in the server.\n\t\t *\n\t\t * @param {Navigation} view the view to toggle\n\t\t */\n\t\tonToggleExpand(view) {\n\t\t\t// Invert state\n\t\t\tconst isExpanded = this.isExpanded(view)\n\t\t\t// Update the view expanded state, might not be necessary\n\t\t\tview.expanded = !isExpanded\n\t\t\tthis.viewConfigStore.update(view.id, 'expanded', !isExpanded)\n\t\t},\n\n\t\t/**\n\t\t * Check if a view is expanded by user config\n\t\t * or fallback to the default value.\n\t\t *\n\t\t * @param {Navigation} view the view to check\n\t\t */\n\t\tisExpanded(view) {\n\t\t\treturn typeof this.viewConfigStore.getConfig(view.id)?.expanded === 'boolean'\n\t\t\t\t? this.viewConfigStore.getConfig(view.id).expanded === true\n\t\t\t\t: view.expanded === true\n\t\t},\n\n\t\t/**\n\t\t * Generate the route to a view\n\t\t *\n\t\t * @param {Navigation} view the view to toggle\n\t\t */\n\t\tgenerateToNavigation(view) {\n\t\t\tif (view.params) {\n\t\t\t\tconst { dir, fileid } = view.params\n\t\t\t\treturn { name: 'filelist', params: view.params, query: { dir, fileid } }\n\t\t\t}\n\t\t\treturn { name: 'filelist', params: { view: view.id } }\n\t\t},\n\n\t\t/**\n\t\t * Open the settings modal\n\t\t */\n\t\topenSettings() {\n\t\t\tthis.settingsOpened = true\n\t\t},\n\n\t\t/**\n\t\t * Close the settings modal\n\t\t */\n\t\tonSettingsClose() {\n\t\t\tthis.settingsOpened = false\n\t\t},\n\n\t\tt: translate,\n\t},\n}\n</script>\n\n<style scoped lang=\"scss\">\n// TODO: remove when https://github.com/nextcloud/nextcloud-vue/pull/3539 is in\n.app-navigation::v-deep .app-navigation-entry-icon {\n\tbackground-repeat: no-repeat;\n\tbackground-position: center;\n}\n\n.app-navigation > ul.app-navigation__list {\n\t// Use flex gap value for more elegant spacing\n\tpadding-bottom: var(--default-grid-baseline, 4px);\n}\n\n.app-navigation-entry__settings {\n\theight: auto !important;\n\toverflow: hidden !important;\n\tpadding-top: 0 !important;\n\t// Prevent shrinking or growing\n\tflex: 0 0 auto;\n}\n</style>\n","/**\n * @copyright Copyright (c) 2022 Joas Schilling <coding@schilljs.com>\n *\n * @author Joas Schilling <coding@schilljs.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { loadState } from '@nextcloud/initial-state'\n\n/**\n * Set the page heading\n *\n * @param {string} heading page title from the history api\n * @since 27.0.0\n */\nexport function setPageHeading(heading) {\n\tconst headingEl = document.getElementById('page-heading-level-1')\n\tif (headingEl) {\n\t\theadingEl.textContent = heading\n\t}\n}\nexport default {\n\t/**\n\t * @return {boolean} Whether the user opted-out of shortcuts so that they should not be registered\n\t */\n\tdisableKeyboardShortcuts() {\n\t\treturn loadState('theming', 'shortcutsDisabled', false)\n\t},\n\tsetPageHeading,\n}\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Navigation.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Navigation.vue?vue&type=script&lang=js&\"","\n      import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Navigation.vue?vue&type=style&index=0&id=657a978e&prod&scoped=true&lang=scss&\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Navigation.vue?vue&type=style&index=0&id=657a978e&prod&scoped=true&lang=scss&\";\n       export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Navigation.vue?vue&type=template&id=657a978e&scoped=true&\"\nimport script from \"./Navigation.vue?vue&type=script&lang=js&\"\nexport * from \"./Navigation.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Navigation.vue?vue&type=style&index=0&id=657a978e&prod&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"657a978e\",\n  null\n  \n)\n\nexport default component.exports","/**\n * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { loadState } from '@nextcloud/initial-state'\nimport logger from '../logger.js'\n\n/**\n * Fetch and register the legacy files views\n */\nexport default function() {\n\tconst legacyViews = Object.values(loadState('files', 'navigation', {}))\n\n\tif (legacyViews.length > 0) {\n\t\tlogger.debug('Legacy files views detected. Processing...', legacyViews)\n\t\tlegacyViews.forEach(view => {\n\t\t\tregisterLegacyView(view)\n\t\t\tif (view.sublist) {\n\t\t\t\tview.sublist.forEach(subview => registerLegacyView({ ...subview, parent: view.id }))\n\t\t\t}\n\t\t})\n\t}\n}\n\nconst registerLegacyView = function({ id, name, order, icon, parent, classes = '', expanded, params }) {\n\tOCP.Files.Navigation.register({\n\t\tid,\n\t\tname,\n\t\torder,\n\t\tparams,\n\t\tparent,\n\t\texpanded: expanded === true,\n\t\ticonClass: icon ? `icon-${icon}` : 'nav-icon-' + id,\n\t\tlegacy: true,\n\t\tsticky: classes.includes('pinned'),\n\t})\n}\n","/**\n * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport Vue from 'vue'\nimport Router from 'vue-router'\nimport { generateUrl } from '@nextcloud/router'\nimport queryString from 'query-string'\n\nVue.use(Router)\n\nconst router = new Router({\n\tmode: 'history',\n\n\t// if index.php is in the url AND we got this far, then it's working:\n\t// let's keep using index.php in the url\n\tbase: generateUrl('/apps/files', ''),\n\tlinkActiveClass: 'active',\n\n\troutes: [\n\t\t{\n\t\t\tpath: '/',\n\t\t\t// Pretending we're using the default view\n\t\t\talias: '/files',\n\t\t},\n\t\t{\n\t\t\tpath: '/:view/:fileid?',\n\t\t\tname: 'filelist',\n\t\t\tprops: true,\n\t\t},\n\t],\n\n\t// Custom stringifyQuery to prevent encoding of slashes in the url\n\tstringifyQuery(query) {\n\t\tconst result = queryString.stringify(query).replace(/%2F/gmi, '/')\n\t\treturn result ? ('?' + result) : ''\n\t},\n})\n\nexport default router\n","import './templates.js';\nimport './legacy/filelistSearch.js';\nimport './actions/deleteAction';\nimport './actions/sidebarAction';\nimport Vue from 'vue';\nimport { createPinia, PiniaVuePlugin } from 'pinia';\nimport FilesListView from './views/FilesList.vue';\nimport NavigationService from './services/Navigation';\nimport NavigationView from './views/Navigation.vue';\nimport processLegacyFilesViews from './legacy/navigationMapper.js';\nimport registerPreviewServiceWorker from './services/ServiceWorker.js';\nimport router from './router/router.js';\nimport RouterService from './services/RouterService';\nimport SettingsModel from './models/Setting.js';\nimport SettingsService from './services/Settings.js';\n// Init private and public Files namespace\nwindow.OCA.Files = window.OCA.Files ?? {};\nwindow.OCP.Files = window.OCP.Files ?? {};\n// Expose router\nconst Router = new RouterService(router);\nObject.assign(window.OCP.Files, { Router });\n// Init Pinia store\nVue.use(PiniaVuePlugin);\nconst pinia = createPinia();\n// Init Navigation Service\nconst Navigation = new NavigationService();\nObject.assign(window.OCP.Files, { Navigation });\nVue.prototype.$navigation = Navigation;\n// Init Files App Settings Service\nconst Settings = new SettingsService();\nObject.assign(window.OCA.Files, { Settings });\nObject.assign(window.OCA.Files.Settings, { Setting: SettingsModel });\n// Init Navigation View\nconst View = Vue.extend(NavigationView);\nconst FilesNavigationRoot = new View({\n    name: 'FilesNavigationRoot',\n    propsData: {\n        Navigation,\n    },\n    router,\n    pinia,\n});\nFilesNavigationRoot.$mount('#app-navigation-files');\n// Init content list view\nconst ListView = Vue.extend(FilesListView);\nconst FilesList = new ListView({\n    name: 'FilesListRoot',\n    router,\n    pinia,\n});\nFilesList.$mount('#app-content-vue');\n// Init legacy and new files views\nprocessLegacyFilesViews();\n// Register preview service worker\nregisterPreviewServiceWorker();\n","export default class RouterService {\n    _router;\n    constructor(router) {\n        this._router = router;\n    }\n    /**\n     * Trigger a route change on the files app\n     *\n     * @param path the url path, eg: '/trashbin?dir=/Deleted'\n     * @param replace replace the current history\n     * @see https://router.vuejs.org/guide/essentials/navigation.html#navigate-to-a-different-location\n     */\n    goTo(path, replace = false) {\n        return this._router.push({\n            path,\n            replace,\n        });\n    }\n    /**\n     * Trigger a route change on the files App\n     *\n     * @param name the route name\n     * @param params the route parameters\n     * @param query the url query parameters\n     * @param replace replace the current history\n     * @see https://router.vuejs.org/guide/essentials/navigation.html#navigate-to-a-different-location\n     */\n    goToRoute(name, params, query, replace) {\n        return this._router.push({\n            name,\n            query,\n            params,\n            replace,\n        });\n    }\n}\n","/**\n * @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nexport default class Settings {\n\n\t_settings\n\n\tconstructor() {\n\t\tthis._settings = []\n\t\tconsole.debug('OCA.Files.Settings initialized')\n\t}\n\n\t/**\n\t * Register a new setting\n\t *\n\t * @since 19.0.0\n\t * @param {OCA.Files.Settings.Setting} view element to add to settings\n\t * @return {boolean} whether registering was successful\n\t */\n\tregister(view) {\n\t\tif (this._settings.filter(e => e.name === view.name).length > 0) {\n\t\t\tconsole.error('A setting with the same name is already registered')\n\t\t\treturn false\n\t\t}\n\t\tthis._settings.push(view)\n\t\treturn true\n\t}\n\n\t/**\n\t * All settings elements\n\t *\n\t * @return {OCA.Files.Settings.Setting[]} All currently registered settings\n\t */\n\tget settings() {\n\t\treturn this._settings\n\t}\n\n}\n","/**\n * @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nexport default class Setting {\n\n\t_close\n\t_el\n\t_name\n\t_open\n\n\t/**\n\t * Create a new files app setting\n\t *\n\t * @since 19.0.0\n\t * @param {string} name the name of this setting\n\t * @param {object} component the component\n\t * @param {Function} component.el function that returns an unmounted dom element to be added\n\t * @param {Function} [component.open] callback for when setting is added\n\t * @param {Function} [component.close] callback for when setting is closed\n\t */\n\tconstructor(name, { el, open, close }) {\n\t\tthis._name = name\n\t\tthis._el = el\n\t\tthis._open = open\n\t\tthis._close = close\n\n\t\tif (typeof this._open !== 'function') {\n\t\t\tthis._open = () => {}\n\t\t}\n\n\t\tif (typeof this._close !== 'function') {\n\t\t\tthis._close = () => {}\n\t\t}\n\t}\n\n\tget name() {\n\t\treturn this._name\n\t}\n\n\tget el() {\n\t\treturn this._el\n\t}\n\n\tget open() {\n\t\treturn this._open\n\t}\n\n\tget close() {\n\t\treturn this._close\n\t}\n\n}\n","/**\n * @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport { generateUrl } from '@nextcloud/router'\nimport logger from '../logger.js'\n\nexport default () => {\n\tif ('serviceWorker' in navigator) {\n\t\t// Use the window load event to keep the page load performant\n\t\twindow.addEventListener('load', async () => {\n\t\t\ttry {\n\t\t\t\tconst url = generateUrl('/apps/files/preview-service-worker.js', {}, { noRewrite: true })\n\t\t\t\tconst registration = await navigator.serviceWorker.register(url, { scope: '/' })\n\t\t\t\tlogger.debug('SW registered: ', { registration })\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error('SW registration failed: ', { error })\n\t\t\t}\n\t\t})\n\t} else {\n\t\tlogger.debug('Service Worker is not enabled on this browser.')\n\t}\n}\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".breadcrumb[data-v-68b3b20b]{flex:1 1 100% !important;width:100%}.breadcrumb[data-v-68b3b20b] a{cursor:pointer !important}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/components/BreadCrumbs.vue\"],\"names\":[],\"mappings\":\"AACA,6BAEC,wBAAA,CACA,UAAA,CAEA,+BACC,yBAAA\",\"sourcesContent\":[\"\\n.breadcrumb {\\n\\t// Take as much space as possible\\n\\tflex: 1 1 100% !important;\\n\\twidth: 100%;\\n\\n\\t::v-deep a {\\n\\t\\tcursor: pointer !important;\\n\\t}\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".custom-svg-icon[data-v-93e9b2f4]{display:flex;align-items:center;align-self:center;justify-content:center;justify-self:center;width:44px;height:44px;opacity:1}.custom-svg-icon[data-v-93e9b2f4] svg{height:22px;width:22px;fill:currentColor}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/components/CustomSvgIconRender.vue\"],\"names\":[],\"mappings\":\"AACA,kCACC,YAAA,CACA,kBAAA,CACA,iBAAA,CACA,sBAAA,CACA,mBAAA,CACA,UAAA,CACA,WAAA,CACA,SAAA,CAEA,sCAGC,WAAA,CACA,UAAA,CACA,iBAAA\",\"sourcesContent\":[\"\\n.custom-svg-icon {\\n\\tdisplay: flex;\\n\\talign-items: center;\\n\\talign-self: center;\\n\\tjustify-content: center;\\n\\tjustify-self: center;\\n\\twidth: 44px;\\n\\theight: 44px;\\n\\topacity: 1;\\n\\n\\t::v-deep svg {\\n\\t\\t// mdi icons have a size of 24px\\n\\t\\t// 22px results in roughly 16px inner size\\n\\t\\theight: 22px;\\n\\t\\twidth: 22px;\\n\\t\\tfill: currentColor;\\n\\t}\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"tr[data-v-0600090e]:hover,tr[data-v-0600090e]:focus,tr[data-v-0600090e]:active{background-color:var(--color-background-dark)}.files-list__row-icon-preview[data-v-0600090e]:not([style*=background]){background:var(--color-loading-dark)}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/components/FileEntry.vue\"],\"names\":[],\"mappings\":\"AAGC,+EAGC,6CAAA,CAKF,wEACI,oCAAA\",\"sourcesContent\":[\"\\n/* Hover effect on tbody lines only */\\ntr {\\n\\t&:hover,\\n\\t&:focus,\\n\\t&:active {\\n\\t\\tbackground-color: var(--color-background-dark);\\n\\t}\\n}\\n\\n/* Preview not loaded animation effect */\\n.files-list__row-icon-preview:not([style*='background']) {\\n    background: var(--color-loading-dark);\\n\\t// animation: preview-gradient-fade 1.2s ease-in-out infinite;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"tr[data-v-e6a083be]{padding-bottom:300px;border-top:1px solid var(--color-border);background-color:rgba(0,0,0,0) !important;border-bottom:none !important}td[data-v-e6a083be]{user-select:none;color:var(--color-text-maxcontrast) !important}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/components/FilesListFooter.vue\"],\"names\":[],\"mappings\":\"AAEA,oBACC,oBAAA,CACA,wCAAA,CAEA,yCAAA,CACA,6BAAA,CAGD,oBACC,gBAAA,CAEA,8CAAA\",\"sourcesContent\":[\"\\n// Scoped row\\ntr {\\n\\tpadding-bottom: 300px;\\n\\tborder-top: 1px solid var(--color-border);\\n\\t// Prevent hover effect on the whole row\\n\\tbackground-color: transparent !important;\\n\\tborder-bottom: none !important;\\n}\\n\\ntd {\\n\\tuser-select: none;\\n\\t// Make sure the cell colors don't apply to column headers\\n\\tcolor: var(--color-text-maxcontrast) !important;\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".files-list__column[data-v-76b6186a]{user-select:none;color:var(--color-text-maxcontrast) !important}.files-list__column--sortable[data-v-76b6186a]{cursor:pointer}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/components/FilesListHeader.vue\"],\"names\":[],\"mappings\":\"AACA,qCACC,gBAAA,CAEA,8CAAA,CAEA,+CACC,cAAA\",\"sourcesContent\":[\"\\n.files-list__column {\\n\\tuser-select: none;\\n\\t// Make sure the cell colors don't apply to column headers\\n\\tcolor: var(--color-text-maxcontrast) !important;\\n\\n\\t&--sortable {\\n\\t\\tcursor: pointer;\\n\\t}\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".files-list__row-actions-batch[data-v-03e57b1e]{flex:1 1 100% !important}.files-list__row-actions-batch[data-v-03e57b1e] .button-vue__wrapper{width:100%}.files-list__row-actions-batch[data-v-03e57b1e] .button-vue__wrapper span.button-vue__text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/components/FilesListHeaderActions.vue\"],\"names\":[],\"mappings\":\"AACA,gDACC,wBAAA,CAGA,qEACC,UAAA,CACA,2FACC,eAAA,CACA,sBAAA,CACA,kBAAA\",\"sourcesContent\":[\"\\n.files-list__row-actions-batch {\\n\\tflex: 1 1 100% !important;\\n\\n\\t// Remove when https://github.com/nextcloud/nextcloud-vue/pull/3936 is merged\\n\\t::v-deep .button-vue__wrapper {\\n\\t\\twidth: 100%;\\n\\t\\tspan.button-vue__text {\\n\\t\\t\\toverflow: hidden;\\n\\t\\t\\ttext-overflow: ellipsis;\\n\\t\\t\\twhite-space: nowrap;\\n\\t\\t}\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".files-list__column-sort-button{margin:0 calc(var(--cell-margin)*-1);padding:0 4px 0 16px !important}.files-list__column-sort-button .button-vue__wrapper{flex-direction:row-reverse;width:100%}.files-list__column-sort-button .button-vue__icon{transition-timing-function:linear;transition-duration:.1s;transition-property:opacity;opacity:0}.files-list__column-sort-button .button-vue__text{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.files-list__column-sort-button--active .button-vue__icon,.files-list__column-sort-button:hover .button-vue__icon,.files-list__column-sort-button:focus .button-vue__icon,.files-list__column-sort-button:active .button-vue__icon{opacity:1 !important}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/components/FilesListHeaderButton.vue\"],\"names\":[],\"mappings\":\"AACA,gCAEC,oCAAA,CAEA,+BAAA,CAGA,qDACC,0BAAA,CAGA,UAAA,CAGD,kDACC,iCAAA,CACA,uBAAA,CACA,2BAAA,CACA,SAAA,CAID,kDACC,eAAA,CACA,kBAAA,CACA,sBAAA,CAOA,mOACC,oBAAA\",\"sourcesContent\":[\"\\n.files-list__column-sort-button {\\n\\t// Compensate for cells margin\\n\\tmargin: 0 calc(var(--cell-margin) * -1);\\n\\t// Reverse padding\\n\\tpadding: 0 4px 0 16px !important;\\n\\n\\t// Icon after text\\n\\t.button-vue__wrapper {\\n\\t\\tflex-direction: row-reverse;\\n\\t\\t// Take max inner width for text overflow ellipsis\\n\\t\\t// Remove when https://github.com/nextcloud/nextcloud-vue/pull/3936 is merged\\n\\t\\twidth: 100%;\\n\\t}\\n\\n\\t.button-vue__icon {\\n\\t\\ttransition-timing-function: linear;\\n\\t\\ttransition-duration: .1s;\\n\\t\\ttransition-property: opacity;\\n\\t\\topacity: 0;\\n\\t}\\n\\n\\t// Remove when https://github.com/nextcloud/nextcloud-vue/pull/3936 is merged\\n\\t.button-vue__text {\\n\\t\\toverflow: hidden;\\n\\t\\twhite-space: nowrap;\\n\\t\\ttext-overflow: ellipsis;\\n\\t}\\n\\n\\t&--active,\\n\\t&:hover,\\n\\t&:focus,\\n\\t&:active {\\n\\t\\t.button-vue__icon {\\n\\t\\t\\topacity: 1 !important;\\n\\t\\t}\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".files-list[data-v-640a8bb8]{--row-height: 55px;--cell-margin: 14px;--checkbox-padding: calc((var(--row-height) - var(--checkbox-size)) / 2);--checkbox-size: 24px;--clickable-area: 44px;--icon-preview-size: 32px;display:block;overflow:auto;height:100%}.files-list[data-v-640a8bb8] tbody,.files-list[data-v-640a8bb8] .vue-recycle-scroller__slot{display:flex;flex-direction:column;width:100%;position:relative}.files-list[data-v-640a8bb8] .vue-recycle-scroller__slot[role=thead]{position:sticky;z-index:10;top:0;height:var(--row-height);background-color:var(--color-main-background)}.files-list[data-v-640a8bb8] tr{position:absolute;display:flex;align-items:center;width:100%;border-bottom:1px solid var(--color-border)}.files-list[data-v-640a8bb8] td,.files-list[data-v-640a8bb8] th{display:flex;align-items:center;flex:0 0 auto;justify-content:left;width:var(--row-height);height:var(--row-height);margin:0;padding:0;color:var(--color-text-maxcontrast);border:none}.files-list[data-v-640a8bb8] td span,.files-list[data-v-640a8bb8] th span{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.files-list[data-v-640a8bb8] .files-list__row-checkbox{justify-content:center}.files-list[data-v-640a8bb8] .files-list__row-checkbox .checkbox-radio-switch{display:flex;justify-content:center;--icon-size: var(--checkbox-size)}.files-list[data-v-640a8bb8] .files-list__row-checkbox .checkbox-radio-switch label.checkbox-radio-switch__label{width:var(--clickable-area);height:var(--clickable-area);margin:0;padding:calc((var(--clickable-area) - var(--checkbox-size))/2)}.files-list[data-v-640a8bb8] .files-list__row-checkbox .checkbox-radio-switch .checkbox-radio-switch__icon{margin:0 !important}.files-list[data-v-640a8bb8] .files-list__row-icon{position:relative;display:flex;overflow:visible;align-items:center;flex:0 0 var(--icon-preview-size);justify-content:center;width:var(--icon-preview-size);height:100%;margin-right:var(--checkbox-padding);color:var(--color-primary-element)}.files-list[data-v-640a8bb8] .files-list__row-icon>span{justify-content:flex-start}.files-list[data-v-640a8bb8] .files-list__row-icon>span:not(.files-list__row-icon-favorite) svg{width:var(--icon-preview-size);height:var(--icon-preview-size)}.files-list[data-v-640a8bb8] .files-list__row-icon-preview{overflow:hidden;width:var(--icon-preview-size);height:var(--icon-preview-size);border-radius:var(--border-radius);background-repeat:no-repeat;background-position:center;background-size:contain}.files-list[data-v-640a8bb8] .files-list__row-icon-favorite{position:absolute;top:4px;right:-8px;color:#fc0}.files-list[data-v-640a8bb8] .files-list__row-name{overflow:hidden;flex:1 1 auto}.files-list[data-v-640a8bb8] .files-list__row-name a{display:flex;align-items:center;width:100%;height:100%}.files-list[data-v-640a8bb8] .files-list__row-name a:focus .files-list__row-name-text,.files-list[data-v-640a8bb8] .files-list__row-name a:focus-visible .files-list__row-name-text{outline:2px solid var(--color-main-text) !important;border-radius:20px}.files-list[data-v-640a8bb8] .files-list__row-name .files-list__row-name-text{padding:5px 10px;margin-left:-10px}.files-list[data-v-640a8bb8] .files-list__row-actions{width:auto}.files-list[data-v-640a8bb8] .files-list__row-actions~td,.files-list[data-v-640a8bb8] .files-list__row-actions~th{margin:0 var(--cell-margin)}.files-list[data-v-640a8bb8] .files-list__row-actions button .button-vue__text{font-weight:normal}.files-list[data-v-640a8bb8] .files-list__row-actions button:not(:hover,:focus,:active) .button-vue__wrapper{color:var(--color-text-maxcontrast)}.files-list[data-v-640a8bb8] .files-list__row-size{justify-content:flex-end;width:calc(var(--row-height)*1.5);color:var(--color-main-text)}.files-list[data-v-640a8bb8] .files-list__row-size .files-list__column-sort-button{padding:0 16px 0 4px !important}.files-list[data-v-640a8bb8] .files-list__row-size .files-list__column-sort-button .button-vue__wrapper{flex-direction:row}.files-list[data-v-640a8bb8] .files-list__row-column-custom{width:calc(var(--row-height)*2)}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/components/FilesListVirtual.vue\"],\"names\":[],\"mappings\":\"AACA,6BACC,kBAAA,CACA,mBAAA,CAEA,wEAAA,CACA,qBAAA,CACA,sBAAA,CACA,yBAAA,CAEA,aAAA,CACA,aAAA,CACA,WAAA,CAIC,4FACC,YAAA,CACA,qBAAA,CACA,UAAA,CAEA,iBAAA,CAID,qEAEC,eAAA,CACA,UAAA,CACA,KAAA,CACA,wBAAA,CACA,6CAAA,CAGD,gCACC,iBAAA,CACA,YAAA,CACA,kBAAA,CACA,UAAA,CACA,2CAAA,CAGD,gEACC,YAAA,CACA,kBAAA,CACA,aAAA,CACA,oBAAA,CACA,uBAAA,CACA,wBAAA,CACA,QAAA,CACA,SAAA,CACA,mCAAA,CACA,WAAA,CAKA,0EACC,eAAA,CACA,kBAAA,CACA,sBAAA,CAIF,uDACC,sBAAA,CACA,8EACC,YAAA,CACA,sBAAA,CAEA,iCAAA,CAEA,iHACC,2BAAA,CACA,4BAAA,CACA,QAAA,CACA,8DAAA,CAGD,2GACC,mBAAA,CAKH,mDACC,iBAAA,CACA,YAAA,CACA,gBAAA,CACA,kBAAA,CAEA,iCAAA,CACA,sBAAA,CACA,8BAAA,CACA,WAAA,CAEA,oCAAA,CACA,kCAAA,CAEA,wDACC,0BAAA,CAGD,gGACC,8BAAA,CACA,+BAAA,CAGD,2DACC,eAAA,CACA,8BAAA,CACA,+BAAA,CACA,kCAAA,CACA,2BAAA,CAEA,0BAAA,CACA,uBAAA,CAGD,4DACC,iBAAA,CACA,OAAA,CACA,UAAA,CACA,UAAA,CAIF,mDAEC,eAAA,CAEA,aAAA,CAEA,qDACC,YAAA,CACA,kBAAA,CAEA,UAAA,CACA,WAAA,CAGA,oLAEC,mDAAA,CACA,kBAAA,CAIF,8EAEC,gBAAA,CACA,iBAAA,CAIF,sDACC,UAAA,CAGA,kHAEC,2BAAA,CAIA,+EAEC,kBAAA,CAED,6GAEC,mCAAA,CAKH,mDAEC,wBAAA,CACA,iCAAA,CAEA,4BAAA,CAGA,mFACC,+BAAA,CACA,wGACC,kBAAA,CAKH,4DACC,+BAAA\",\"sourcesContent\":[\"\\n.files-list {\\n\\t--row-height: 55px;\\n\\t--cell-margin: 14px;\\n\\n\\t--checkbox-padding: calc((var(--row-height) - var(--checkbox-size)) / 2);\\n\\t--checkbox-size: 24px;\\n\\t--clickable-area: 44px;\\n\\t--icon-preview-size: 32px;\\n\\n\\tdisplay: block;\\n\\toverflow: auto;\\n\\theight: 100%;\\n\\n\\t&::v-deep {\\n\\t\\t// Table head, body and footer\\n\\t\\ttbody, .vue-recycle-scroller__slot {\\n\\t\\t\\tdisplay: flex;\\n\\t\\t\\tflex-direction: column;\\n\\t\\t\\twidth: 100%;\\n\\t\\t\\t// Necessary for virtual scrolling absolute\\n\\t\\t\\tposition: relative;\\n\\t\\t}\\n\\n\\t\\t// Table header\\n\\t\\t.vue-recycle-scroller__slot[role='thead'] {\\n\\t\\t\\t// Pinned on top when scrolling\\n\\t\\t\\tposition: sticky;\\n\\t\\t\\tz-index: 10;\\n\\t\\t\\ttop: 0;\\n\\t\\t\\theight: var(--row-height);\\n\\t\\t\\tbackground-color: var(--color-main-background);\\n\\t\\t}\\n\\n\\t\\ttr {\\n\\t\\t\\tposition: absolute;\\n\\t\\t\\tdisplay: flex;\\n\\t\\t\\talign-items: center;\\n\\t\\t\\twidth: 100%;\\n\\t\\t\\tborder-bottom: 1px solid var(--color-border);\\n\\t\\t}\\n\\n\\t\\ttd, th {\\n\\t\\t\\tdisplay: flex;\\n\\t\\t\\talign-items: center;\\n\\t\\t\\tflex: 0 0 auto;\\n\\t\\t\\tjustify-content: left;\\n\\t\\t\\twidth: var(--row-height);\\n\\t\\t\\theight: var(--row-height);\\n\\t\\t\\tmargin: 0;\\n\\t\\t\\tpadding: 0;\\n\\t\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t\\t\\tborder: none;\\n\\n\\t\\t\\t// Columns should try to add any text\\n\\t\\t\\t// node wrapped in a span. That should help\\n\\t\\t\\t// with the ellipsis on overflow.\\n\\t\\t\\tspan {\\n\\t\\t\\t\\toverflow: hidden;\\n\\t\\t\\t\\twhite-space: nowrap;\\n\\t\\t\\t\\ttext-overflow: ellipsis;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t.files-list__row-checkbox {\\n\\t\\t\\tjustify-content: center;\\n\\t\\t\\t.checkbox-radio-switch {\\n\\t\\t\\t\\tdisplay: flex;\\n\\t\\t\\t\\tjustify-content: center;\\n\\n\\t\\t\\t\\t--icon-size: var(--checkbox-size);\\n\\n\\t\\t\\t\\tlabel.checkbox-radio-switch__label {\\n\\t\\t\\t\\t\\twidth: var(--clickable-area);\\n\\t\\t\\t\\t\\theight: var(--clickable-area);\\n\\t\\t\\t\\t\\tmargin: 0;\\n\\t\\t\\t\\t\\tpadding: calc((var(--clickable-area) - var(--checkbox-size)) / 2);\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t.checkbox-radio-switch__icon {\\n\\t\\t\\t\\t\\tmargin: 0 !important;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t.files-list__row-icon {\\n\\t\\t\\tposition: relative;\\n\\t\\t\\tdisplay: flex;\\n\\t\\t\\toverflow: visible;\\n\\t\\t\\talign-items: center;\\n\\t\\t\\t// No shrinking or growing allowed\\n\\t\\t\\tflex: 0 0 var(--icon-preview-size);\\n\\t\\t\\tjustify-content: center;\\n\\t\\t\\twidth: var(--icon-preview-size);\\n\\t\\t\\theight: 100%;\\n\\t\\t\\t// Show same padding as the checkbox right padding for visual balance\\n\\t\\t\\tmargin-right: var(--checkbox-padding);\\n\\t\\t\\tcolor: var(--color-primary-element);\\n\\n\\t\\t\\t& > span {\\n\\t\\t\\t\\tjustify-content: flex-start;\\n\\t\\t\\t}\\n\\n\\t\\t\\t&> span:not(.files-list__row-icon-favorite) svg {\\n\\t\\t\\t\\twidth: var(--icon-preview-size);\\n\\t\\t\\t\\theight: var(--icon-preview-size);\\n\\t\\t\\t}\\n\\n\\t\\t\\t&-preview {\\n\\t\\t\\t\\toverflow: hidden;\\n\\t\\t\\t\\twidth: var(--icon-preview-size);\\n\\t\\t\\t\\theight: var(--icon-preview-size);\\n\\t\\t\\t\\tborder-radius: var(--border-radius);\\n\\t\\t\\t\\tbackground-repeat: no-repeat;\\n\\t\\t\\t\\t// Center and contain the preview\\n\\t\\t\\t\\tbackground-position: center;\\n\\t\\t\\t\\tbackground-size: contain;\\n\\t\\t\\t}\\n\\n\\t\\t\\t&-favorite {\\n\\t\\t\\t\\tposition: absolute;\\n\\t\\t\\t\\ttop: 4px;\\n\\t\\t\\t\\tright: -8px;\\n\\t\\t\\t\\tcolor: #ffcc00;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t.files-list__row-name {\\n\\t\\t\\t// Prevent link from overflowing\\n\\t\\t\\toverflow: hidden;\\n\\t\\t\\t// Take as much space as possible\\n\\t\\t\\tflex: 1 1 auto;\\n\\n\\t\\t\\ta {\\n\\t\\t\\t\\tdisplay: flex;\\n\\t\\t\\t\\talign-items: center;\\n\\t\\t\\t\\t// Fill cell height and width\\n\\t\\t\\t\\twidth: 100%;\\n\\t\\t\\t\\theight: 100%;\\n\\n\\t\\t\\t\\t// Keyboard indicator a11y\\n\\t\\t\\t\\t&:focus .files-list__row-name-text,\\n\\t\\t\\t\\t&:focus-visible .files-list__row-name-text {\\n\\t\\t\\t\\t\\toutline: 2px solid var(--color-main-text) !important;\\n\\t\\t\\t\\t\\tborder-radius: 20px;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\n\\t\\t\\t.files-list__row-name-text {\\n\\t\\t\\t\\t// Make some space for the outline\\n\\t\\t\\t\\tpadding: 5px 10px;\\n\\t\\t\\t\\tmargin-left: -10px;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t.files-list__row-actions {\\n\\t\\t\\twidth: auto;\\n\\n\\t\\t\\t// Add margin to all cells after the actions\\n\\t\\t\\t& ~ td,\\n\\t\\t\\t& ~ th {\\n\\t\\t\\t\\tmargin: 0 var(--cell-margin);\\n\\t\\t\\t}\\n\\n\\t\\t\\tbutton {\\n\\t\\t\\t\\t.button-vue__text {\\n\\t\\t\\t\\t\\t// Remove bold from default button styling\\n\\t\\t\\t\\t\\tfont-weight: normal;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\t&:not(:hover, :focus, :active) .button-vue__wrapper {\\n\\t\\t\\t\\t\\t// Also apply color-text-maxcontrast to non-active button\\n\\t\\t\\t\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t.files-list__row-size {\\n\\t\\t\\t// Right align text\\n\\t\\t\\tjustify-content: flex-end;\\n\\t\\t\\twidth: calc(var(--row-height) * 1.5);\\n\\t\\t\\t// opacity varies with the size\\n\\t\\t\\tcolor: var(--color-main-text);\\n\\n\\t\\t\\t// Icon is before text since size is right aligned\\n\\t\\t\\t.files-list__column-sort-button {\\n\\t\\t\\t\\tpadding: 0 16px 0 4px !important;\\n\\t\\t\\t\\t.button-vue__wrapper {\\n\\t\\t\\t\\t\\tflex-direction: row;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t.files-list__row-column-custom {\\n\\t\\t\\twidth: calc(var(--row-height) * 2);\\n\\t\\t}\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".app-navigation-entry__settings-quota--not-unlimited[data-v-918797b2] .app-navigation-entry__title{margin-top:-4px}.app-navigation-entry__settings-quota progress[data-v-918797b2]{position:absolute;bottom:10px;margin-left:44px;width:calc(100% - 44px - 22px)}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/components/NavigationQuota.vue\"],\"names\":[],\"mappings\":\"AAIC,mGACC,eAAA,CAGD,gEACC,iBAAA,CACA,WAAA,CACA,gBAAA,CACA,8BAAA\",\"sourcesContent\":[\"\\n// User storage stats display\\n.app-navigation-entry__settings-quota {\\n\\t// Align title with progress and icon\\n\\t&--not-unlimited::v-deep .app-navigation-entry__title {\\n\\t\\tmargin-top: -4px;\\n\\t}\\n\\n\\tprogress {\\n\\t\\tposition: absolute;\\n\\t\\tbottom: 10px;\\n\\t\\tmargin-left: 44px;\\n\\t\\twidth: calc(100% - 44px - 22px);\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".template-picker__item[data-v-6c072a31]{display:flex}.template-picker__label[data-v-6c072a31]{display:flex;align-items:center;flex:1 1;flex-direction:column}.template-picker__label[data-v-6c072a31],.template-picker__label *[data-v-6c072a31]{cursor:pointer;user-select:none}.template-picker__label[data-v-6c072a31]::before{display:none !important}.template-picker__preview[data-v-6c072a31]{display:block;overflow:hidden;flex:1 1;width:var(--width);min-height:var(--height);max-height:var(--height);padding:0;border:var(--border) solid var(--color-border);border-radius:var(--border-radius-large)}input:checked+label>.template-picker__preview[data-v-6c072a31]{border-color:var(--color-primary)}.template-picker__preview--failed[data-v-6c072a31]{display:flex}.template-picker__image[data-v-6c072a31]{max-width:100%;background-color:var(--color-main-background);object-fit:cover}.template-picker__preview--failed .template-picker__image[data-v-6c072a31]{width:calc(var(--margin)*8);margin:auto;background-color:rgba(0,0,0,0) !important;object-fit:initial}.template-picker__title[data-v-6c072a31]{overflow:hidden;max-width:calc(var(--width) + 4px);padding:var(--margin);white-space:nowrap;text-overflow:ellipsis}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/components/TemplatePreview.vue\"],\"names\":[],\"mappings\":\"AAGC,wCACC,YAAA,CAGD,yCACC,YAAA,CAEA,kBAAA,CACA,QAAA,CACA,qBAAA,CAEA,oFACC,cAAA,CACA,gBAAA,CAGD,iDACC,uBAAA,CAIF,2CACC,aAAA,CACA,eAAA,CAEA,QAAA,CACA,kBAAA,CACA,wBAAA,CACA,wBAAA,CACA,SAAA,CACA,8CAAA,CACA,wCAAA,CAEA,+DACC,iCAAA,CAGD,mDAEC,YAAA,CAIF,yCACC,cAAA,CACA,6CAAA,CAEA,gBAAA,CAID,2EACC,2BAAA,CAEA,WAAA,CACA,yCAAA,CAEA,kBAAA,CAGD,yCACC,eAAA,CAEA,kCAAA,CACA,qBAAA,CACA,kBAAA,CACA,sBAAA\",\"sourcesContent\":[\"\\n\\n.template-picker {\\n\\t&__item {\\n\\t\\tdisplay: flex;\\n\\t}\\n\\n\\t&__label {\\n\\t\\tdisplay: flex;\\n\\t\\t// Align in the middle of the grid\\n\\t\\talign-items: center;\\n\\t\\tflex: 1 1;\\n\\t\\tflex-direction: column;\\n\\n\\t\\t&, * {\\n\\t\\t\\tcursor: pointer;\\n\\t\\t\\tuser-select: none;\\n\\t\\t}\\n\\n\\t\\t&::before {\\n\\t\\t\\tdisplay: none !important;\\n\\t\\t}\\n\\t}\\n\\n\\t&__preview {\\n\\t\\tdisplay: block;\\n\\t\\toverflow: hidden;\\n\\t\\t// Stretch so all entries are the same width\\n\\t\\tflex: 1 1;\\n\\t\\twidth: var(--width);\\n\\t\\tmin-height: var(--height);\\n\\t\\tmax-height: var(--height);\\n\\t\\tpadding: 0;\\n\\t\\tborder: var(--border) solid var(--color-border);\\n\\t\\tborder-radius: var(--border-radius-large);\\n\\n\\t\\tinput:checked + label > & {\\n\\t\\t\\tborder-color: var(--color-primary);\\n\\t\\t}\\n\\n\\t\\t&--failed {\\n\\t\\t\\t// Make sure to properly center fallback icon\\n\\t\\t\\tdisplay: flex;\\n\\t\\t}\\n\\t}\\n\\n\\t&__image {\\n\\t\\tmax-width: 100%;\\n\\t\\tbackground-color: var(--color-main-background);\\n\\n\\t\\tobject-fit: cover;\\n\\t}\\n\\n\\t// Failed preview, fallback to mime icon\\n\\t&__preview--failed &__image {\\n\\t\\twidth: calc(var(--margin) * 8);\\n\\t\\t// Center mime icon\\n\\t\\tmargin: auto;\\n\\t\\tbackground-color: transparent !important;\\n\\n\\t\\tobject-fit: initial;\\n\\t}\\n\\n\\t&__title {\\n\\t\\toverflow: hidden;\\n\\t\\t// also count preview border\\n\\t\\tmax-width: calc(var(--width) + 2*2px);\\n\\t\\tpadding: var(--margin);\\n\\t\\twhite-space: nowrap;\\n\\t\\ttext-overflow: ellipsis;\\n\\t}\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".app-content[data-v-66068cbb]{display:flex;overflow:hidden;flex-direction:column;max-height:100%}.app-content[data-v-66068cbb]:not(.app-content--hidden)+#app-content{display:none}.files-list__header[data-v-66068cbb]{display:flex;align-content:center;flex:0 0;margin:4px 4px 4px 50px}.files-list__header>*[data-v-66068cbb]{flex:0 0}.files-list__refresh-icon[data-v-66068cbb]{flex:0 0 44px;width:44px;height:44px}.files-list__loading-icon[data-v-66068cbb]{margin:auto}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/views/FilesList.vue\"],\"names\":[],\"mappings\":\"AACA,8BAEC,YAAA,CACA,eAAA,CACA,qBAAA,CACA,eAAA,CAIA,qEACC,YAAA,CAQD,qCACC,YAAA,CACA,oBAAA,CAEA,QAAA,CAEA,uBAAA,CACA,uCAGC,QAAA,CAGF,2CACC,aAAA,CACA,UAAA,CACA,WAAA,CAED,2CACC,WAAA\",\"sourcesContent\":[\"\\n.app-content {\\n\\t// Virtual list needs to be full height and is scrollable\\n\\tdisplay: flex;\\n\\toverflow: hidden;\\n\\tflex-direction: column;\\n\\tmax-height: 100%;\\n\\n\\t// TODO: remove after all legacy views are migrated\\n\\t// Hides the legacy app-content if shown view is not legacy\\n\\t&:not(&--hidden)::v-deep + #app-content {\\n\\t\\tdisplay: none;\\n\\t}\\n}\\n\\n$margin: 4px;\\n$navigationToggleSize: 50px;\\n\\n.files-list {\\n\\t&__header {\\n\\t\\tdisplay: flex;\\n\\t\\talign-content: center;\\n\\t\\t// Do not grow or shrink (vertically)\\n\\t\\tflex: 0 0;\\n\\t\\t// Align with the navigation toggle icon\\n\\t\\tmargin: $margin $margin $margin $navigationToggleSize;\\n\\t\\t> * {\\n\\t\\t\\t// Do not grow or shrink (horizontally)\\n\\t\\t\\t// Only the breadcrumbs shrinks\\n\\t\\t\\tflex: 0 0;\\n\\t\\t}\\n\\t}\\n\\t&__refresh-icon {\\n\\t\\tflex: 0 0 44px;\\n\\t\\twidth: 44px;\\n\\t\\theight: 44px;\\n\\t}\\n\\t&__loading-icon {\\n\\t\\tmargin: auto;\\n\\t}\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".app-navigation[data-v-657a978e] .app-navigation-entry-icon{background-repeat:no-repeat;background-position:center}.app-navigation>ul.app-navigation__list[data-v-657a978e]{padding-bottom:var(--default-grid-baseline, 4px)}.app-navigation-entry__settings[data-v-657a978e]{height:auto !important;overflow:hidden !important;padding-top:0 !important;flex:0 0 auto}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/views/Navigation.vue\"],\"names\":[],\"mappings\":\"AAEA,4DACC,2BAAA,CACA,0BAAA,CAGD,yDAEC,gDAAA,CAGD,iDACC,sBAAA,CACA,0BAAA,CACA,wBAAA,CAEA,aAAA\",\"sourcesContent\":[\"\\n// TODO: remove when https://github.com/nextcloud/nextcloud-vue/pull/3539 is in\\n.app-navigation::v-deep .app-navigation-entry-icon {\\n\\tbackground-repeat: no-repeat;\\n\\tbackground-position: center;\\n}\\n\\n.app-navigation > ul.app-navigation__list {\\n\\t// Use flex gap value for more elegant spacing\\n\\tpadding-bottom: var(--default-grid-baseline, 4px);\\n}\\n\\n.app-navigation-entry__settings {\\n\\theight: auto !important;\\n\\toverflow: hidden !important;\\n\\tpadding-top: 0 !important;\\n\\t// Prevent shrinking or growing\\n\\tflex: 0 0 auto;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".setting-link[data-v-76ca5d1f]:hover{text-decoration:underline}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/views/Settings.vue\"],\"names\":[],\"mappings\":\"AACA,qCACC,yBAAA\",\"sourcesContent\":[\"\\n.setting-link:hover {\\n\\ttext-decoration: underline;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".templates-picker__form[data-v-715b4161]{padding:calc(var(--margin)*2);padding-bottom:0}.templates-picker__form h2[data-v-715b4161]{text-align:center;font-weight:bold;margin:var(--margin) 0 calc(var(--margin)*2)}.templates-picker__list[data-v-715b4161]{display:grid;grid-gap:calc(var(--margin)*2);grid-auto-columns:1fr;max-width:calc(var(--fullwidth)*6);grid-template-columns:repeat(auto-fit, var(--fullwidth));grid-auto-rows:1fr;justify-content:center}.templates-picker__buttons[data-v-715b4161]{display:flex;justify-content:space-between;padding:calc(var(--margin)*2) var(--margin);position:sticky;bottom:0;background-image:linear-gradient(0, var(--gradient-main-background))}.templates-picker__buttons button[data-v-715b4161],.templates-picker__buttons input[type=submit][data-v-715b4161]{height:44px}.templates-picker[data-v-715b4161] .modal-container{position:relative}.templates-picker__loading[data-v-715b4161]{position:absolute;top:0;left:0;justify-content:center;width:100%;height:100%;margin:0;background-color:var(--color-main-background-translucent)}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/views/TemplatePicker.vue\"],\"names\":[],\"mappings\":\"AAEC,yCACC,6BAAA,CAEA,gBAAA,CAEA,4CACC,iBAAA,CACA,gBAAA,CACA,4CAAA,CAIF,yCACC,YAAA,CACA,8BAAA,CACA,qBAAA,CAEA,kCAAA,CACA,wDAAA,CAEA,kBAAA,CAEA,sBAAA,CAGD,4CACC,YAAA,CACA,6BAAA,CACA,2CAAA,CACA,eAAA,CACA,QAAA,CACA,oEAAA,CAEA,kHACC,WAAA,CAKF,oDACC,iBAAA,CAGD,4CACC,iBAAA,CACA,KAAA,CACA,MAAA,CACA,sBAAA,CACA,UAAA,CACA,WAAA,CACA,QAAA,CACA,yDAAA\",\"sourcesContent\":[\"\\n.templates-picker {\\n\\t&__form {\\n\\t\\tpadding: calc(var(--margin) * 2);\\n\\t\\t// Will be handled by the buttons\\n\\t\\tpadding-bottom: 0;\\n\\n\\t\\th2 {\\n\\t\\t\\ttext-align: center;\\n\\t\\t\\tfont-weight: bold;\\n\\t\\t\\tmargin: var(--margin) 0 calc(var(--margin) * 2);\\n\\t\\t}\\n\\t}\\n\\n\\t&__list {\\n\\t\\tdisplay: grid;\\n\\t\\tgrid-gap: calc(var(--margin) * 2);\\n\\t\\tgrid-auto-columns: 1fr;\\n\\t\\t// We want maximum 5 columns. Putting 6 as we don't count the grid gap. So it will always be lower than 6\\n\\t\\tmax-width: calc(var(--fullwidth) * 6);\\n\\t\\tgrid-template-columns: repeat(auto-fit, var(--fullwidth));\\n\\t\\t// Make sure all rows are the same height\\n\\t\\tgrid-auto-rows: 1fr;\\n\\t\\t// Center the columns set\\n\\t\\tjustify-content: center;\\n\\t}\\n\\n\\t&__buttons {\\n\\t\\tdisplay: flex;\\n\\t\\tjustify-content: space-between;\\n\\t\\tpadding: calc(var(--margin) * 2) var(--margin);\\n\\t\\tposition: sticky;\\n\\t\\tbottom: 0;\\n\\t\\tbackground-image: linear-gradient(0, var(--gradient-main-background));\\n\\n\\t\\tbutton, input[type='submit'] {\\n\\t\\t\\theight: 44px;\\n\\t\\t}\\n\\t}\\n\\n\\t// Make sure we're relative for the loading emptycontent on top\\n\\t::v-deep .modal-container {\\n\\t\\tposition: relative;\\n\\t}\\n\\n\\t&__loading {\\n\\t\\tposition: absolute;\\n\\t\\ttop: 0;\\n\\t\\tleft: 0;\\n\\t\\tjustify-content: center;\\n\\t\\twidth: 100%;\\n\\t\\theight: 100%;\\n\\t\\tmargin: 0;\\n\\t\\tbackground-color: var(--color-main-background-translucent);\\n\\t}\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"\\n/* @keyframes preview-gradient-fade {\\n    0% {\\n        opacity: 1;\\n    }\\n    50% {\\n        opacity: 0.5;\\n    }\\n    100% {\\n        opacity: 1;\\n    }\\n} */\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/components/FileEntry.vue\"],\"names\":[],\"mappings\":\";AA6mBA;;;;;;;;;;GAUA\",\"sourcesContent\":[\"<!--\\n  - @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\\n  -\\n  - @author John Molakvoæ <skjnldsv@protonmail.com>\\n  -\\n  - @license GNU AGPL version 3 or any later version\\n  -\\n  - This program is free software: you can redistribute it and/or modify\\n  - it under the terms of the GNU Affero General Public License as\\n  - published by the Free Software Foundation, either version 3 of the\\n  - License, or (at your option) any later version.\\n  -\\n  - This program is distributed in the hope that it will be useful,\\n  - but WITHOUT ANY WARRANTY; without even the implied warranty of\\n  - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\\n  - GNU Affero General Public License for more details.\\n  -\\n  - You should have received a copy of the GNU Affero General Public License\\n  - along with this program. If not, see <http://www.gnu.org/licenses/>.\\n  -\\n  -->\\n\\n<template>\\n\\t<Fragment>\\n\\t\\t<td class=\\\"files-list__row-checkbox\\\">\\n\\t\\t\\t<NcCheckboxRadioSwitch v-if=\\\"active\\\"\\n\\t\\t\\t\\t:aria-label=\\\"t('files', 'Select the row for {displayName}', { displayName })\\\"\\n\\t\\t\\t\\t:checked=\\\"selectedFiles\\\"\\n\\t\\t\\t\\t:value=\\\"fileid\\\"\\n\\t\\t\\t\\tname=\\\"selectedFiles\\\"\\n\\t\\t\\t\\t@update:checked=\\\"onSelectionChange\\\" />\\n\\t\\t</td>\\n\\n\\t\\t<!-- Link to file -->\\n\\t\\t<td class=\\\"files-list__row-name\\\">\\n\\t\\t\\t<a ref=\\\"name\\\" v-bind=\\\"linkTo\\\" @click=\\\"execDefaultAction\\\">\\n\\t\\t\\t\\t<!-- Icon or preview -->\\n\\t\\t\\t\\t<span class=\\\"files-list__row-icon\\\">\\n\\t\\t\\t\\t\\t<FolderIcon v-if=\\\"source.type === 'folder'\\\" />\\n\\n\\t\\t\\t\\t\\t<!-- Decorative image, should not be aria documented -->\\n\\t\\t\\t\\t\\t<span v-else-if=\\\"previewUrl && !backgroundFailed\\\"\\n\\t\\t\\t\\t\\t\\tref=\\\"previewImg\\\"\\n\\t\\t\\t\\t\\t\\tclass=\\\"files-list__row-icon-preview\\\"\\n\\t\\t\\t\\t\\t\\t:style=\\\"{ backgroundImage }\\\" />\\n\\n\\t\\t\\t\\t\\t<span v-else-if=\\\"mimeIconUrl\\\"\\n\\t\\t\\t\\t\\t\\tclass=\\\"files-list__row-icon-preview files-list__row-icon-preview--mime\\\"\\n\\t\\t\\t\\t\\t\\t:style=\\\"{ backgroundImage: mimeIconUrl }\\\" />\\n\\n\\t\\t\\t\\t\\t<FileIcon v-else />\\n\\n\\t\\t\\t\\t\\t<!-- Favorite icon -->\\n\\t\\t\\t\\t\\t<span v-if=\\\"isFavorite\\\"\\n\\t\\t\\t\\t\\t\\tclass=\\\"files-list__row-icon-favorite\\\"\\n\\t\\t\\t\\t\\t\\t:aria-label=\\\"t('files', 'Favorite')\\\">\\n\\t\\t\\t\\t\\t\\t<StarIcon aria-hidden=\\\"true\\\" :size=\\\"20\\\" />\\n\\t\\t\\t\\t\\t</span>\\n\\t\\t\\t\\t</span>\\n\\n\\t\\t\\t\\t<!-- File name -->\\n\\t\\t\\t\\t<span class=\\\"files-list__row-name-text\\\">{{ displayName }}</span>\\n\\t\\t\\t</a>\\n\\t\\t</td>\\n\\n\\t\\t<!-- Actions -->\\n\\t\\t<td :class=\\\"`files-list__row-actions-${uniqueId}`\\\" class=\\\"files-list__row-actions\\\">\\n\\t\\t\\t<!-- Inline actions -->\\n\\t\\t\\t<!-- TODO: implement CustomElementRender -->\\n\\n\\t\\t\\t<!-- Menu actions -->\\n\\t\\t\\t<NcActions v-if=\\\"active\\\"\\n\\t\\t\\t\\tref=\\\"actionsMenu\\\"\\n\\t\\t\\t\\t:boundaries-element=\\\"boundariesElement\\\"\\n\\t\\t\\t\\t:container=\\\"boundariesElement\\\"\\n\\t\\t\\t\\t:disabled=\\\"source._loading\\\"\\n\\t\\t\\t\\t:force-title=\\\"true\\\"\\n\\t\\t\\t\\t:force-menu=\\\"true\\\"\\n\\t\\t\\t\\t:inline=\\\"enabledInlineActions.length\\\"\\n\\t\\t\\t\\t:open.sync=\\\"openedMenu\\\">\\n\\t\\t\\t\\t<NcActionButton v-for=\\\"action in enabledMenuActions\\\"\\n\\t\\t\\t\\t\\t:key=\\\"action.id\\\"\\n\\t\\t\\t\\t\\t:class=\\\"'files-list__row-action-' + action.id\\\"\\n\\t\\t\\t\\t\\t@click=\\\"onActionClick(action)\\\">\\n\\t\\t\\t\\t\\t<template #icon>\\n\\t\\t\\t\\t\\t\\t<NcLoadingIcon v-if=\\\"loading === action.id\\\" :size=\\\"18\\\" />\\n\\t\\t\\t\\t\\t\\t<CustomSvgIconRender v-else :svg=\\\"action.iconSvgInline([source], currentView)\\\" />\\n\\t\\t\\t\\t\\t</template>\\n\\t\\t\\t\\t\\t{{ action.displayName([source], currentView) }}\\n\\t\\t\\t\\t</NcActionButton>\\n\\t\\t\\t</NcActions>\\n\\t\\t</td>\\n\\n\\t\\t<!-- Size -->\\n\\t\\t<td v-if=\\\"isSizeAvailable\\\"\\n\\t\\t\\t:style=\\\"{ opacity: sizeOpacity }\\\"\\n\\t\\t\\tclass=\\\"files-list__row-size\\\"\\n\\t\\t\\t@click=\\\"openDetailsIfAvailable\\\">\\n\\t\\t\\t<span>{{ size }}</span>\\n\\t\\t</td>\\n\\n\\t\\t<!-- View columns -->\\n\\t\\t<td v-for=\\\"column in columns\\\"\\n\\t\\t\\t:key=\\\"column.id\\\"\\n\\t\\t\\t:class=\\\"`files-list__row-${currentView?.id}-${column.id}`\\\"\\n\\t\\t\\tclass=\\\"files-list__row-column-custom\\\"\\n\\t\\t\\t@click=\\\"openDetailsIfAvailable\\\">\\n\\t\\t\\t<CustomElementRender v-if=\\\"active\\\"\\n\\t\\t\\t\\t:current-view=\\\"currentView\\\"\\n\\t\\t\\t\\t:render=\\\"column.render\\\"\\n\\t\\t\\t\\t:source=\\\"source\\\" />\\n\\t\\t</td>\\n\\t</Fragment>\\n</template>\\n\\n<script lang='ts'>\\nimport { debounce } from 'debounce'\\nimport { formatFileSize } from '@nextcloud/files'\\nimport { Fragment } from 'vue-frag'\\nimport { join } from 'path'\\nimport { showError, showSuccess } from '@nextcloud/dialogs'\\nimport { translate } from '@nextcloud/l10n'\\nimport CancelablePromise from 'cancelable-promise'\\nimport FileIcon from 'vue-material-design-icons/File.vue'\\nimport FolderIcon from 'vue-material-design-icons/Folder.vue'\\nimport NcActionButton from '@nextcloud/vue/dist/Components/NcActionButton.js'\\nimport NcActions from '@nextcloud/vue/dist/Components/NcActions.js'\\nimport NcCheckboxRadioSwitch from '@nextcloud/vue/dist/Components/NcCheckboxRadioSwitch.js'\\nimport NcLoadingIcon from '@nextcloud/vue/dist/Components/NcLoadingIcon.js'\\nimport StarIcon from 'vue-material-design-icons/Star.vue'\\nimport Vue from 'vue'\\n\\nimport { ACTION_DETAILS } from '../actions/sidebarAction.ts'\\nimport { getFileActions } from '../services/FileAction.ts'\\nimport { hashCode } from '../utils/hashUtils.ts'\\nimport { isCachedPreview } from '../services/PreviewService.ts'\\nimport { useActionsMenuStore } from '../store/actionsmenu.ts'\\nimport { useFilesStore } from '../store/files.ts'\\nimport { useKeyboardStore } from '../store/keyboard.ts'\\nimport { useSelectionStore } from '../store/selection.ts'\\nimport { useUserConfigStore } from '../store/userconfig.ts'\\nimport CustomElementRender from './CustomElementRender.vue'\\nimport CustomSvgIconRender from './CustomSvgIconRender.vue'\\nimport logger from '../logger.js'\\n\\n// The registered actions list\\nconst actions = getFileActions()\\n\\nexport default Vue.extend({\\n\\tname: 'FileEntry',\\n\\n\\tcomponents: {\\n\\t\\tCustomElementRender,\\n\\t\\tCustomSvgIconRender,\\n\\t\\tFileIcon,\\n\\t\\tFolderIcon,\\n\\t\\tFragment,\\n\\t\\tNcActionButton,\\n\\t\\tNcActions,\\n\\t\\tNcCheckboxRadioSwitch,\\n\\t\\tNcLoadingIcon,\\n\\t\\tStarIcon,\\n\\t},\\n\\n\\tprops: {\\n\\t\\tactive: {\\n\\t\\t\\ttype: Boolean,\\n\\t\\t\\tdefault: false,\\n\\t\\t},\\n\\t\\tisSizeAvailable: {\\n\\t\\t\\ttype: Boolean,\\n\\t\\t\\tdefault: false,\\n\\t\\t},\\n\\t\\tsource: {\\n\\t\\t\\ttype: Object,\\n\\t\\t\\trequired: true,\\n\\t\\t},\\n\\t\\tindex: {\\n\\t\\t\\ttype: Number,\\n\\t\\t\\trequired: true,\\n\\t\\t},\\n\\t\\tnodes: {\\n\\t\\t\\ttype: Array,\\n\\t\\t\\trequired: true,\\n\\t\\t},\\n\\t\\tfilesListWidth: {\\n\\t\\t\\ttype: Number,\\n\\t\\t\\tdefault: 0,\\n\\t\\t},\\n\\t},\\n\\n\\tsetup() {\\n\\t\\tconst actionsMenuStore = useActionsMenuStore()\\n\\t\\tconst filesStore = useFilesStore()\\n\\t\\tconst keyboardStore = useKeyboardStore()\\n\\t\\tconst selectionStore = useSelectionStore()\\n\\t\\tconst userConfigStore = useUserConfigStore()\\n\\t\\treturn {\\n\\t\\t\\tactionsMenuStore,\\n\\t\\t\\tfilesStore,\\n\\t\\t\\tkeyboardStore,\\n\\t\\t\\tselectionStore,\\n\\t\\t\\tuserConfigStore,\\n\\t\\t}\\n\\t},\\n\\n\\tdata() {\\n\\t\\treturn {\\n\\t\\t\\tbackgroundFailed: false,\\n\\t\\t\\tbackgroundImage: '',\\n\\t\\t\\tboundariesElement: document.querySelector('.app-content > .files-list'),\\n\\t\\t\\tloading: '',\\n\\t\\t}\\n\\t},\\n\\n\\tcomputed: {\\n\\t\\tuserConfig() {\\n\\t\\t\\treturn this.userConfigStore.userConfig\\n\\t\\t},\\n\\n\\t\\tcurrentView() {\\n\\t\\t\\treturn this.$navigation.active\\n\\t\\t},\\n\\t\\tcolumns() {\\n\\t\\t\\t// Hide columns if the list is too small\\n\\t\\t\\tif (this.filesListWidth < 512) {\\n\\t\\t\\t\\treturn []\\n\\t\\t\\t}\\n\\t\\t\\treturn this.currentView?.columns || []\\n\\t\\t},\\n\\n\\t\\tdir() {\\n\\t\\t\\t// Remove any trailing slash but leave root slash\\n\\t\\t\\treturn (this.$route?.query?.dir || '/').replace(/^(.+)\\\\/$/, '$1')\\n\\t\\t},\\n\\t\\tfileid() {\\n\\t\\t\\treturn this.source?.fileid?.toString?.()\\n\\t\\t},\\n\\t\\tdisplayName() {\\n\\t\\t\\treturn this.source.attributes.displayName\\n\\t\\t\\t\\t|| this.source.basename\\n\\t\\t},\\n\\n\\t\\tsize() {\\n\\t\\t\\tconst size = parseInt(this.source.size, 10) || 0\\n\\t\\t\\tif (typeof size !== 'number' || size < 0) {\\n\\t\\t\\t\\treturn this.t('files', 'Pending')\\n\\t\\t\\t}\\n\\t\\t\\treturn formatFileSize(size, true)\\n\\t\\t},\\n\\t\\tsizeOpacity() {\\n\\t\\t\\tconst size = parseInt(this.source.size, 10) || 0\\n\\t\\t\\tif (!size || size < 0) {\\n\\t\\t\\t\\treturn 1\\n\\t\\t\\t}\\n\\n\\t\\t\\t// Whatever theme is active, the contrast will pass WCAG AA\\n\\t\\t\\t// with color main text over main background and an opacity of 0.7\\n\\t\\t\\tconst minOpacity = 0.7\\n\\t\\t\\tconst maxOpacitySize = 10 * 1024 * 1024\\n\\t\\t\\treturn minOpacity + (1 - minOpacity) * Math.pow((this.source.size / maxOpacitySize), 2)\\n\\t\\t},\\n\\n\\t\\tlinkTo() {\\n\\t\\t\\tif (this.source.type === 'folder') {\\n\\t\\t\\t\\tconst to = { ...this.$route, query: { dir: join(this.dir, this.source.basename) } }\\n\\t\\t\\t\\treturn {\\n\\t\\t\\t\\t\\tis: 'router-link',\\n\\t\\t\\t\\t\\ttitle: this.t('files', 'Open folder {name}', { name: this.displayName }),\\n\\t\\t\\t\\t\\tto,\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\n\\t\\t\\tif (this.enabledDefaultActions.length > 0) {\\n\\t\\t\\t\\tconst action = this.enabledDefaultActions[0]\\n\\t\\t\\t\\tconst displayName = action.displayName([this.source], this.currentView)\\n\\t\\t\\t\\treturn {\\n\\t\\t\\t\\t\\ttitle: displayName,\\n\\t\\t\\t\\t\\trole: 'button',\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\n\\t\\t\\treturn {\\n\\t\\t\\t\\thref: this.source.source,\\n\\t\\t\\t\\t// TODO: Use first action title ?\\n\\t\\t\\t\\ttitle: this.t('files', 'Download file {name}', { name: this.displayName }),\\n\\t\\t\\t}\\n\\t\\t},\\n\\n\\t\\tselectedFiles() {\\n\\t\\t\\treturn this.selectionStore.selected\\n\\t\\t},\\n\\t\\tisSelected() {\\n\\t\\t\\treturn this.selectedFiles.includes(this.source?.fileid?.toString?.())\\n\\t\\t},\\n\\n\\t\\tcropPreviews() {\\n\\t\\t\\treturn this.userConfig.crop_image_previews\\n\\t\\t},\\n\\t\\tpreviewUrl() {\\n\\t\\t\\ttry {\\n\\t\\t\\t\\tconst url = new URL(window.location.origin + this.source.attributes.previewUrl)\\n\\t\\t\\t\\t// Request tiny previews\\n\\t\\t\\t\\turl.searchParams.set('x', '32')\\n\\t\\t\\t\\turl.searchParams.set('y', '32')\\n\\t\\t\\t\\t// Handle cropping\\n\\t\\t\\t\\turl.searchParams.set('a', this.cropPreviews === true ? '0' : '1')\\n\\t\\t\\t\\treturn url.href\\n\\t\\t\\t} catch (e) {\\n\\t\\t\\t\\treturn null\\n\\t\\t\\t}\\n\\t\\t},\\n\\t\\tmimeIconUrl() {\\n\\t\\t\\tconst mimeType = this.source.mime || 'application/octet-stream'\\n\\t\\t\\tconst mimeIconUrl = window.OC?.MimeType?.getIconUrl?.(mimeType)\\n\\t\\t\\tif (mimeIconUrl) {\\n\\t\\t\\t\\treturn `url(${mimeIconUrl})`\\n\\t\\t\\t}\\n\\t\\t\\treturn ''\\n\\t\\t},\\n\\n\\t\\tenabledActions() {\\n\\t\\t\\treturn actions\\n\\t\\t\\t\\t.filter(action => !action.enabled || action.enabled([this.source], this.currentView))\\n\\t\\t\\t\\t.sort((a, b) => (a.order || 0) - (b.order || 0))\\n\\t\\t},\\n\\t\\tenabledInlineActions() {\\n\\t\\t\\tif (this.filesListWidth < 768) {\\n\\t\\t\\t\\treturn []\\n\\t\\t\\t}\\n\\t\\t\\treturn this.enabledActions.filter(action => action?.inline?.(this.source, this.currentView))\\n\\t\\t},\\n\\t\\tenabledMenuActions() {\\n\\t\\t\\tif (this.filesListWidth < 768) {\\n\\t\\t\\t\\t// If we have a default action, do not render the first one\\n\\t\\t\\t\\tif (this.enabledDefaultActions.length > 0) {\\n\\t\\t\\t\\t\\treturn this.enabledActions.slice(1)\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\treturn this.enabledActions\\n\\t\\t\\t}\\n\\n\\t\\t\\tconst actions = [\\n\\t\\t\\t\\t...this.enabledInlineActions,\\n\\t\\t\\t\\t...this.enabledActions.filter(action => !action.inline),\\n\\t\\t\\t]\\n\\n\\t\\t\\t// If we have a default action, do not render the first one\\n\\t\\t\\tif (this.enabledDefaultActions.length > 0) {\\n\\t\\t\\t\\treturn actions.slice(1)\\n\\t\\t\\t}\\n\\n\\t\\t\\treturn actions\\n\\t\\t},\\n\\t\\tenabledDefaultActions() {\\n\\t\\t\\treturn [\\n\\t\\t\\t\\t...this.enabledActions.filter(action => action.default),\\n\\t\\t\\t]\\n\\t\\t},\\n\\t\\topenedMenu: {\\n\\t\\t\\tget() {\\n\\t\\t\\t\\treturn this.actionsMenuStore.opened === this.uniqueId\\n\\t\\t\\t},\\n\\t\\t\\tset(opened) {\\n\\t\\t\\t\\tthis.actionsMenuStore.opened = opened ? this.uniqueId : null\\n\\t\\t\\t},\\n\\t\\t},\\n\\n\\t\\tuniqueId() {\\n\\t\\t\\treturn hashCode(this.source.source)\\n\\t\\t},\\n\\n\\t\\tisFavorite() {\\n\\t\\t\\treturn this.source.attributes.favorite === 1\\n\\t\\t},\\n\\t},\\n\\n\\twatch: {\\n\\t\\tactive(active, before) {\\n\\t\\t\\tif (active === false && before === true) {\\n\\t\\t\\t\\tthis.resetState()\\n\\n\\t\\t\\t\\t// When the row is not active anymore\\n\\t\\t\\t\\t// remove the display from the row to prevent\\n\\t\\t\\t\\t// keyboard interaction with it.\\n\\t\\t\\t\\tthis.$el.parentNode.style.display = 'none'\\n\\t\\t\\t\\treturn\\n\\t\\t\\t}\\n\\n\\t\\t\\t// Restore default tabindex\\n\\t\\t\\tthis.$el.parentNode.style.display = ''\\n\\t\\t},\\n\\n\\t\\t/**\\n\\t\\t * When the source changes, reset the preview\\n\\t\\t * and fetch the new one.\\n\\t\\t */\\n\\t\\tpreviewUrl() {\\n\\t\\t\\tthis.clearImg()\\n\\t\\t\\tthis.debounceIfNotCached()\\n\\t\\t},\\n\\t},\\n\\n\\t/**\\n\\t * The row is mounted once and reused as we scroll.\\n\\t */\\n\\tmounted() {\\n\\t\\t// ⚠ Init the debounce function on mount and\\n\\t\\t// not when the module is imported  to\\n\\t\\t// avoid sharing between recycled components\\n\\t\\tthis.debounceGetPreview = debounce(function() {\\n\\t\\t\\tthis.fetchAndApplyPreview()\\n\\t\\t}, 150, false)\\n\\n\\t\\t// Fetch the preview on init\\n\\t\\tthis.debounceIfNotCached()\\n\\n\\t\\t// Right click watcher on tr\\n\\t\\tthis.$el.parentNode?.addEventListener?.('contextmenu', this.onRightClick)\\n\\t},\\n\\n\\tbeforeDestroy() {\\n\\t\\tthis.resetState()\\n\\t},\\n\\n\\tmethods: {\\n\\t\\tasync debounceIfNotCached() {\\n\\t\\t\\tif (!this.previewUrl) {\\n\\t\\t\\t\\treturn\\n\\t\\t\\t}\\n\\n\\t\\t\\t// Check if we already have this preview cached\\n\\t\\t\\tconst isCached = await isCachedPreview(this.previewUrl)\\n\\t\\t\\tif (isCached) {\\n\\t\\t\\t\\tthis.backgroundImage = `url(${this.previewUrl})`\\n\\t\\t\\t\\tthis.backgroundFailed = false\\n\\t\\t\\t\\treturn\\n\\t\\t\\t}\\n\\n\\t\\t\\t// We don't have this preview cached or it expired, requesting it\\n\\t\\t\\tthis.debounceGetPreview()\\n\\t\\t},\\n\\n\\t\\tfetchAndApplyPreview() {\\n\\t\\t\\t// Ignore if no preview\\n\\t\\t\\tif (!this.previewUrl) {\\n\\t\\t\\t\\treturn\\n\\t\\t\\t}\\n\\n\\t\\t\\t// If any image is being processed, reset it\\n\\t\\t\\tif (this.previewPromise) {\\n\\t\\t\\t\\tthis.clearImg()\\n\\t\\t\\t}\\n\\n\\t\\t\\t// Store the promise to be able to cancel it\\n\\t\\t\\tthis.previewPromise = new CancelablePromise((resolve, reject, onCancel) => {\\n\\t\\t\\t\\tconst img = new Image()\\n\\t\\t\\t\\t// If active, load the preview with higher priority\\n\\t\\t\\t\\timg.fetchpriority = this.active ? 'high' : 'auto'\\n\\t\\t\\t\\timg.onload = () => {\\n\\t\\t\\t\\t\\tthis.backgroundImage = `url(${this.previewUrl})`\\n\\t\\t\\t\\t\\tthis.backgroundFailed = false\\n\\t\\t\\t\\t\\tresolve(img)\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\timg.onerror = () => {\\n\\t\\t\\t\\t\\tthis.backgroundFailed = true\\n\\t\\t\\t\\t\\treject(img)\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\timg.src = this.previewUrl\\n\\n\\t\\t\\t\\t// Image loading has been canceled\\n\\t\\t\\t\\tonCancel(() => {\\n\\t\\t\\t\\t\\timg.onerror = null\\n\\t\\t\\t\\t\\timg.onload = null\\n\\t\\t\\t\\t\\timg.src = ''\\n\\t\\t\\t\\t})\\n\\t\\t\\t})\\n\\t\\t},\\n\\n\\t\\tresetState() {\\n\\t\\t\\t// Reset loading state\\n\\t\\t\\tthis.loading = ''\\n\\n\\t\\t\\t// Reset the preview\\n\\t\\t\\tthis.clearImg()\\n\\n\\t\\t\\t// Close menu\\n\\t\\t\\tthis.openedMenu = false\\n\\t\\t},\\n\\n\\t\\tclearImg() {\\n\\t\\t\\tthis.backgroundImage = ''\\n\\t\\t\\tthis.backgroundFailed = false\\n\\n\\t\\t\\tif (this.previewPromise) {\\n\\t\\t\\t\\tthis.previewPromise.cancel()\\n\\t\\t\\t\\tthis.previewPromise = null\\n\\t\\t\\t}\\n\\t\\t},\\n\\n\\t\\tasync onActionClick(action) {\\n\\t\\t\\tconst displayName = action.displayName([this.source], this.currentView)\\n\\t\\t\\ttry {\\n\\t\\t\\t\\t// Set the loading marker\\n\\t\\t\\t\\tthis.loading = action.id\\n\\t\\t\\t\\tVue.set(this.source, '_loading', true)\\n\\n\\t\\t\\t\\tconst success = await action.exec(this.source, this.currentView, this.dir)\\n\\n\\t\\t\\t\\t// If the action returns null, we stay silent\\n\\t\\t\\t\\tif (success === null) {\\n\\t\\t\\t\\t\\treturn\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\tif (success) {\\n\\t\\t\\t\\t\\tshowSuccess(this.t('files', '\\\"{displayName}\\\" action executed successfully', { displayName }))\\n\\t\\t\\t\\t\\treturn\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tshowError(this.t('files', '\\\"{displayName}\\\" action failed', { displayName }))\\n\\t\\t\\t} catch (e) {\\n\\t\\t\\t\\tlogger.error('Error while executing action', { action, e })\\n\\t\\t\\t\\tshowError(this.t('files', '\\\"{displayName}\\\" action failed', { displayName }))\\n\\t\\t\\t} finally {\\n\\t\\t\\t\\t// Reset the loading marker\\n\\t\\t\\t\\tthis.loading = ''\\n\\t\\t\\t\\tVue.set(this.source, '_loading', false)\\n\\t\\t\\t}\\n\\t\\t},\\n\\t\\texecDefaultAction(event) {\\n\\t\\t\\t// Do not execute the default action on the folder, navigate instead\\n\\t\\t\\tif (this.source.type === 'folder') {\\n\\t\\t\\t\\treturn\\n\\t\\t\\t}\\n\\n\\t\\t\\tif (this.enabledDefaultActions.length > 0) {\\n\\t\\t\\t\\tevent.preventDefault()\\n\\t\\t\\t\\tevent.stopPropagation()\\n\\t\\t\\t\\t// Execute the first default action if any\\n\\t\\t\\t\\tthis.enabledDefaultActions[0].exec(this.source, this.currentView, this.dir)\\n\\t\\t\\t}\\n\\t\\t},\\n\\n\\t\\topenDetailsIfAvailable(event) {\\n\\t\\t\\tconst detailsAction = this.enabledDefaultActions.find(action => action.id === ACTION_DETAILS)\\n\\t\\t\\tif (detailsAction) {\\n\\t\\t\\t\\tevent.preventDefault()\\n\\t\\t\\t\\tevent.stopPropagation()\\n\\t\\t\\t\\tdetailsAction.exec(this.source, this.currentView)\\n\\t\\t\\t}\\n\\t\\t},\\n\\n\\t\\tonSelectionChange(selection) {\\n\\t\\t\\tconst newSelectedIndex = this.index\\n\\t\\t\\tconst lastSelectedIndex = this.selectionStore.lastSelectedIndex\\n\\n\\t\\t\\t// Get the last selected and select all files in between\\n\\t\\t\\tif (this.keyboardStore?.shiftKey && lastSelectedIndex !== null) {\\n\\t\\t\\t\\tconst isAlreadySelected = this.selectedFiles.includes(this.fileid)\\n\\n\\t\\t\\t\\tconst start = Math.min(newSelectedIndex, lastSelectedIndex)\\n\\t\\t\\t\\tconst end = Math.max(lastSelectedIndex, newSelectedIndex)\\n\\n\\t\\t\\t\\tconst lastSelection = this.selectionStore.lastSelection\\n\\t\\t\\t\\tconst filesToSelect = this.nodes\\n\\t\\t\\t\\t\\t.map(file => file.fileid?.toString?.())\\n\\t\\t\\t\\t\\t.slice(start, end + 1)\\n\\n\\t\\t\\t\\t// If already selected, update the new selection _without_ the current file\\n\\t\\t\\t\\tconst selection = [...lastSelection, ...filesToSelect]\\n\\t\\t\\t\\t\\t.filter(fileId => !isAlreadySelected || fileId !== this.fileid)\\n\\n\\t\\t\\t\\tlogger.debug('Shift key pressed, selecting all files in between', { start, end, filesToSelect, isAlreadySelected })\\n\\t\\t\\t\\t// Keep previous lastSelectedIndex to be use for further shift selections\\n\\t\\t\\t\\tthis.selectionStore.set(selection)\\n\\t\\t\\t\\treturn\\n\\t\\t\\t}\\n\\n\\t\\t\\tlogger.debug('Updating selection', { selection })\\n\\t\\t\\tthis.selectionStore.set(selection)\\n\\t\\t\\tthis.selectionStore.setLastIndex(newSelectedIndex)\\n\\t\\t},\\n\\n\\t\\t// Open the actions menu on right click\\n\\t\\tonRightClick(event) {\\n\\t\\t\\t// If already opened, fallback to default browser\\n\\t\\t\\tif (this.openedMenu) {\\n\\t\\t\\t\\treturn\\n\\t\\t\\t}\\n\\n\\t\\t\\t// If the clicked row is in the selection, open global menu\\n\\t\\t\\tconst isMoreThanOneSelected = this.selectedFiles.length > 1\\n\\t\\t\\tthis.actionsMenuStore.opened = this.isSelected && isMoreThanOneSelected ? 'global' : this.uniqueId\\n\\n\\t\\t\\t// Prevent any browser defaults\\n\\t\\t\\tevent.preventDefault()\\n\\t\\t\\tevent.stopPropagation()\\n\\t\\t},\\n\\n\\t\\tt: translate,\\n\\t\\tformatFileSize,\\n\\t},\\n})\\n</script>\\n\\n<style scoped lang='scss'>\\n/* Hover effect on tbody lines only */\\ntr {\\n\\t&:hover,\\n\\t&:focus,\\n\\t&:active {\\n\\t\\tbackground-color: var(--color-background-dark);\\n\\t}\\n}\\n\\n/* Preview not loaded animation effect */\\n.files-list__row-icon-preview:not([style*='background']) {\\n    background: var(--color-loading-dark);\\n\\t// animation: preview-gradient-fade 1.2s ease-in-out infinite;\\n}\\n</style>\\n\\n<style>\\n/* @keyframes preview-gradient-fade {\\n    0% {\\n        opacity: 1;\\n    }\\n    50% {\\n        opacity: 0.5;\\n    }\\n    100% {\\n        opacity: 1;\\n    }\\n} */\\n</style>\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 2181;","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t2181: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [7874], () => (__webpack_require__(9570)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","getCurrentDirectory","_OCA","_OCA$Files","_OCA$Files$App","_OCA$Files$App$curren","currentDirInfo","OCA","Files","App","currentFileList","dirInfo","path","name","concat","replace","previewWidth","inheritAttrs","props","basename","type","String","required","checked","Boolean","default","fileid","Number","filename","previewUrl","hasPreview","mime","ratio","data","failedPreview","computed","nameWithoutExt","indexOf","split","slice","join","id","realPreviewUrl","mimeIcon","getCurrentUser","generateUrl","document","getElementById","value","pathSections","startsWith","relativePath","forEach","section","encodeURIComponent","encodeFilePath","OC","MimeType","getIconUrl","methods","onCheck","$emit","onFailure","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","_vm","this","_c","_self","staticClass","attrs","domProps","on","_v","class","_s","components","NcEmptyContent","NcModal","TemplatePreview","logger","Object","loading","opened","provider","emptyTemplate","_this$provider","_this$provider2","t","mimetypes","selectedTemplate","templates","find","template","style","margin","width","border","Math","round","fetchedProvider","async","axios","generateOcsUrl","ocs","getTemplates","app","label","Error","length","onSubmit","close","currentDirectory","fileList","_this$provider3","_this$provider4","debug","extension","_this$selectedTemplat","_this$selectedTemplat2","fileInfo","filePath","templatePath","templateType","createFromTemplate","normalize","addAndFetchFileInfo","then","status","model","FileInfoModel","filesClient","fileAction","fileActions","getDefaultFileAction","PERMISSION_ALL","action","$file","findFileEl","dir","fileInfoModel","error","console","showError","$event","preventDefault","stopPropagation","apply","arguments","_b","_l","key","_e","getLoggerBuilder","setApp","detectUser","build","Vue","n","TemplatePickerRoot","createElement","body","appendChild","loadState","templatesPath","TemplatePicker","TemplatePickerView","propsData","$mount","window","addEventListener","initTemplatesPlugin","attach","menu","addMenuEntry","displayName","templateName","iconClass","fileType","actionHandler","initTemplatesFolder","removeMenuEntry","Plugins","register","index","newTemplatePlugin","open","response","copySystemTemplates","changeDirectory","template_path","FilesPlugin","subscribe","_ref","query","setFilter","FileAction","constructor","validateAction","_action","iconSvgInline","enabled","exec","execBatch","order","inline","renderInline","registerFileAction","_nc_fileactions","search","push","getFileActions","nodes","view","TrashCan","map","node","permissions","every","permission","Permission","source","emit","Promise","all","ACTION_DETAILS","InformationSvg","files","_window","_window$OCA","_window$OCA$Files","Sidebar","some","_node$root","root","_window2","_window2$OCA","_window2$OCA$Files","_window2$OCA$Files$Si","_window2$OCA$Files$Si2","call","useFilesStore","fileStore","defineStore","state","roots","getters","getNode","getNodes","ids","filter","getRoot","service","actions","updateNodes","reduce","acc","deleteNodes","setRoot","onDeletedNode","store","_initialized","usePathsStore","pathsStore","paths","getPath","addPath","payload","useSelectionStore","selected","lastSelection","lastSelectedIndex","set","selection","undefined","setLastIndex","reset","viewConfig","useViewConfigStore","getConfig","onUpdate","setSortingBy","update","toggleSortingDirection","newDirection","sorting_direction","viewConfigStore","Home","NcBreadcrumbs","NcBreadcrumb","setup","filesStore","currentView","$navigation","active","dirs","sections","to","$route","exact","getDirDisplayName","getNodeFromId","getFileIdFromPath","_this$currentView","_node$attributes","fileId","attributes","onClick","_to$query","ariaLabel","_section$to","_section$to$query","_setupProxy","nativeOn","scopedSlots","_u","fn","proxy","useActionsMenuStore","userConfig","show_hidden","crop_image_previews","useUserConfigStore","userConfigStore","render","Function","element","watch","$el","replaceWith","mounted","svg","innerHTML","sanitize","CustomElementRender","CustomSvgIconRender","FileIcon","FolderIcon","Fragment","NcActionButton","NcActions","NcCheckboxRadioSwitch","NcLoadingIcon","StarIcon","isSizeAvailable","Array","filesListWidth","actionsMenuStore","keyboardStore","altKey","ctrlKey","metaKey","shiftKey","onEvent","event","useKeyboardStore","selectionStore","backgroundFailed","backgroundImage","boundariesElement","querySelector","columns","_this$$route","_this$$route$query","_this$source","_this$source$fileid","_this$source$fileid$t","toString","size","parseInt","formatFileSize","sizeOpacity","pow","linkTo","is","title","enabledDefaultActions","role","href","selectedFiles","isSelected","_this$source2","_this$source2$fileid","_this$source2$fileid$","includes","cropPreviews","url","URL","location","origin","searchParams","e","mimeIconUrl","_window$OC","_window$OC$MimeType","_window$OC$MimeType$g","mimeType","enabledActions","sort","a","b","enabledInlineActions","_action$inline","enabledMenuActions","openedMenu","get","uniqueId","charCodeAt","isFavorite","favorite","before","resetState","parentNode","display","clearImg","debounceIfNotCached","_this$$el$parentNode","_this$$el$parentNode$","debounceGetPreview","debounce","fetchAndApplyPreview","onRightClick","beforeDestroy","caches","cache","match","previewPromise","CancelablePromise","resolve","reject","onCancel","img","Image","fetchpriority","onload","onerror","src","cancel","success","showSuccess","execDefaultAction","openDetailsIfAvailable","detailsAction","onSelectionChange","_this$keyboardStore","newSelectedIndex","isAlreadySelected","start","min","end","max","filesToSelect","file","_file$fileid","_file$fileid$toString","isMoreThanOneSelected","translate","ref","_loading","onActionClick","opacity","column","_vm$currentView","summary","currentFolder","_this$currentView2","totalSize","_this$currentFolder","total","classForColumn","_column$summary","created","fileListEl","$resizeObserver","ResizeObserver","entries","target","contentRect","observe","disconnect","mixins","filesListWidthMixin","selectedNodes","areSomeNodesLoading","inlineActions","selectionIds","results","result","failedIds","mapState","sortingMode","_this$getConfig","sorting_mode","defaultSortKey","isAscSorting","_this$getConfig2","toggleSortBy","MenuDown","MenuUp","NcButton","filesSortingMixin","mode","sortAriaLabel","direction","slot","FilesListHeaderButton","FilesListHeaderActions","selectAllBind","isNoneSelected","isSomeSelected","isAllSelected","indeterminate","onToggleAll","RecycleScroller","FileEntry","FilesListHeader","FilesListFooter","summaryFile","count","translatePlural","summaryFolder","slots","querySelectorAll","setAttribute","getFileId","item","caption","_defineProperty","isValidNavigation","isUniqueNavigation","_views","message","legacy","remove","findIndex","splice","views","setActive","_currentView","getContents","icon","isSvg","isValidColumn","emptyView","parent","sticky","expanded","BreadCrumbs","FilesListVirtual","NcAppContent","promise","dirContents","_this$currentFolder2","customColumn","_children","reverse","orderBy","v","isEmptyDir","isRefreshing","toPreviousDir","newView","oldView","fetchContent","newDir","oldDir","_this$$refs","_this$$refs$filesList","$refs","filesListVirtual","scrollTop","_this$currentView3","_this$promise","folder","contents","_vm$currentView2","directives","rawName","expression","ChartPie","NcAppNavigationItem","NcProgressBar","loadingStorageStats","storageStats","storageStatsTitle","_this$storageStats","_this$storageStats2","_this$storageStats3","usedQuotaByte","used","quotaByte","quota","storageStatsTooltip","relative","beforeMount","setInterval","throttleUpdateStorageStats","debounceUpdateStorageStats","updateStorageStats","throttle","_response$data","el","Clipboard","NcAppSettingsDialog","NcAppSettingsSection","NcInputField","Setting","_window$OCA$Files$Set","_getCurrentUser","settings","Settings","webdavUrl","generateRemoteUrl","uid","webdavDocs","appPasswordUrl","webdavUrlCopied","setting","onClose","setConfig","select","navigator","clipboard","writeText","setTimeout","copyCloudId","Cog","NavigationQuota","NcAppNavigation","NcIconSvgWrapper","SettingsModal","Navigation","settingsOpened","currentViewId","_this$$route$params","params","parentViews","childViews","list","showView","onLegacyNavigationChanged","_window$OCA$Files$Sid","_window$OCA$Files$Sid2","newAppContent","classList","add","Util","History","parseUrlQuery","itemId","jQuery","trigger","Event","heading","headingEl","textContent","setPageHeading","$router","onToggleExpand","isExpanded","_this$viewConfigStore","generateToNavigation","openSettings","onSettingsClose","child","registerLegacyView","classes","OCP","Router","base","linkActiveClass","routes","alias","stringifyQuery","queryString","_window$OCP$Files","router","_router","goTo","goToRoute","assign","PiniaVuePlugin","pinia","createPinia","NavigationService","_settings","_name","_el","_open","_close","NavigationView","FilesListView","legacyViews","values","sublist","subview","processLegacyFilesViews","noRewrite","registration","serviceWorker","scope","___CSS_LOADER_EXPORT___","module","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","loaded","__webpack_modules__","m","O","chunkIds","priority","notFulfilled","Infinity","i","fulfilled","j","keys","r","getter","__esModule","d","definition","o","defineProperty","enumerable","g","globalThis","obj","prop","prototype","hasOwnProperty","Symbol","toStringTag","nmd","children","baseURI","self","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","chunkLoadingGlobal","bind","nc","__webpack_exports__"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"file":"files-main.js?v=3af3837e96b67c872e9d","mappings":";uBAAIA,+ECyBG,MAqBMC,EAAsB,WAAW,IAAAC,EAAAC,EAAAC,EAAAC,EAC7C,MAAMC,GAAoB,QAAHJ,EAAAK,WAAG,IAAAL,GAAO,QAAPC,EAAHD,EAAKM,aAAK,IAAAL,GAAK,QAALC,EAAVD,EAAYM,WAAG,IAAAL,GAAiB,QAAjBC,EAAfD,EAAiBM,uBAAe,IAAAL,OAA7B,EAAHA,EAAkCM,UACrD,CAAEC,KAAM,IAAKC,KAAM,IAGvB,MAAO,GAAAC,OAAGR,EAAeM,KAAI,KAAAE,OAAIR,EAAeO,MAAOE,QAAQ,SAAU,IAC1E,yFC9BA,MCgCAC,EAAA,ICtD4L,EDwD5L,CACAH,KAAA,kBACAI,cAAA,EAEAC,MAAA,CACAC,SAAA,CACAC,KAAAC,OACAC,UAAA,GAEAC,QAAA,CACAH,KAAAI,QACAC,SAAA,GAEAC,OAAA,CACAN,KAAA,CAAAC,OAAAM,QACAL,UAAA,GAEAM,SAAA,CACAR,KAAAC,OACAC,UAAA,GAEAO,WAAA,CACAT,KAAAC,OACAI,QAAA,MAEAK,WAAA,CACAV,KAAAI,QACAC,SAAA,GAEAM,KAAA,CACAX,KAAAC,OACAC,UAAA,GAEAU,MAAA,CACAZ,KAAAO,OACAF,QAAA,OAIAQ,KAAAA,KACA,CACAC,eAAA,IAIAC,SAAA,CAMAC,iBACA,YAAAjB,SAAAkB,QAAA,aAAAlB,SAAAmB,MAAA,KAAAC,MAAA,MAAAC,KAAA,UAAArB,QACA,EAEAsB,KACA,yBAAA3B,OAAA,KAAAY,OACA,EAEAgB,iBAEA,YAAAR,eAAA,KAAAS,SACA,KAAAA,SAGA,KAAAd,WACA,KAAAA,YFxFSe,EAAAA,EAAAA,OE8FTC,EAAAA,EAAAA,aAAA,wBAAA/B,OAAA,KAAAY,OAAA,OAAAZ,OAAAE,EAAA,OAAAF,OAAAE,EAAA,UAFA6B,EAAAA,EAAAA,aAAA,qCAAA/B,OFxFQgC,SAASC,eAAe,iBAAmBD,SAASC,eAAe,gBAAgBC,MEwF3F,YAAAlC,OAAA,KAAAY,OAAA,UAAAZ,ODxGuB,SAASF,GAC/B,MAAMqC,GAAgBrC,EAAKsC,WAAW,KAAOtC,EAAO,IAAHE,OAAOF,IAAQ0B,MAAM,KACtE,IAAIa,EAAe,GAMnB,OALAF,EAAaG,SAASC,IACL,KAAZA,IACHF,GAAgB,IAAMG,mBAAmBD,GAC1C,IAEMF,CACR,CC+FAI,CAAA,KAAA3B,UAAA,OAAAd,OAAAE,EAAA,OAAAF,OAAAE,EAAA,QAGA,EAEA2B,WACA,OAAAa,GAAAC,SAAAC,WAAA,KAAA3B,KACA,GAGA4B,QAAA,CACAC,UACA,KAAAC,MAAA,aAAAnC,OACA,EACAoC,YACA,KAAA5B,eAAA,CACA,wIEnII6B,EAAU,CAAC,EAEfA,EAAQC,kBAAoB,IAC5BD,EAAQE,cAAgB,IAElBF,EAAQG,OAAS,SAAc,KAAM,QAE3CH,EAAQI,OAAS,IACjBJ,EAAQK,mBAAqB,IAEhB,IAAI,IAASL,GAKJ,KAAW,YAAiB,0BCPlD,SAXgB,OACd,GCTW,WAAkB,IAAIM,EAAIC,KAAKC,EAAGF,EAAIG,MAAMD,GAAG,OAAOA,EAAG,KAAK,CAACE,YAAY,yBAAyB,CAACF,EAAG,QAAQ,CAACE,YAAY,QAAQC,MAAM,CAAC,GAAKL,EAAI5B,GAAG,KAAO,QAAQ,KAAO,mBAAmBkC,SAAS,CAAC,QAAUN,EAAI9C,SAASqD,GAAG,CAAC,OAASP,EAAIT,WAAWS,EAAIQ,GAAG,KAAKN,EAAG,QAAQ,CAACE,YAAY,yBAAyBC,MAAM,CAAC,IAAML,EAAI5B,KAAK,CAAC8B,EAAG,MAAM,CAACE,YAAY,2BAA2BK,MAAMT,EAAInC,cAAgB,mCAAqC,IAAI,CAACqC,EAAG,MAAM,CAACE,YAAY,yBAAyBC,MAAM,CAAC,IAAML,EAAI3B,eAAe,IAAM,GAAG,UAAY,SAASkC,GAAG,CAAC,MAAQP,EAAIP,eAAeO,EAAIQ,GAAG,KAAKN,EAAG,OAAO,CAACE,YAAY,0BAA0B,CAACJ,EAAIQ,GAAG,WAAWR,EAAIU,GAAGV,EAAIjC,gBAAgB,eAC3sB,GACsB,IDUpB,EACA,KACA,WACA,MAI8B,uBEwDhC,MC3E2L,ED+E3L,CACAvB,KAAA,iBAEAmE,WAAA,CACAC,eAAA,IACAC,QAAA,IACAC,gBAAAA,GAGAjE,MAAA,CACAkE,OAAA,CACAhE,KAAAiE,OACA/D,UAAA,IAIAW,KAAAA,KACA,CAEAV,SAAA,EACA+D,SAAA,EACAzE,KAAA,KACA0E,QAAA,EACAC,SAAA,OAIArD,SAAA,CAMAC,iBACA,YAAAvB,KAAAwB,QAAA,QACA,KAAAxB,KAAAyB,MAAA,KAAAC,MAAA,MAAAC,KAAA,KACA,KAAA3B,IACA,EAEA4E,gBAAA,IAAAC,EAAAC,EACA,OACAxE,SAAAyE,EAAA,iBACAlE,QAAA,EACAE,SAAA,KAAAgE,EAAA,iBACA9D,YAAA,EACAC,MAAA,QAAA2D,EAAA,KAAAF,gBAAA,IAAAE,OAAA,EAAAA,EAAAG,UAAA,cAAAF,EAAA,KAAAH,gBAAA,IAAAG,OAAA,EAAAA,EAAAE,WAEA,EAEAC,mBACA,YAAAN,SAAAO,UAAAC,MAAAC,GAAAA,EAAAvE,SAAA,KAAAH,SACA,EAOA2E,QACA,OACA,WAAAC,MACA,UAAAC,QACA,WAAAC,MACA,cAAAD,QACA,gBAAAZ,SAAAxD,MAAAsE,KAAAC,MAlEAJ,IAkEA,KAAAX,SAAAxD,OAAA,UAEA,GAGA2B,QAAA,CAOA,WAAA9C,EAAA2E,GAEA,KAAAjE,QAAA,KAAAkE,cAAA/D,OACA,KAAAb,KAAAA,EACA,KAAA2E,SAAAA,EAEA,MACAgB,SEzI4BC,iBAE3B,aADuBC,EAAAA,QAAAA,KAAUC,EAAAA,EAAAA,gBAAe,iCAChC1E,KAAK2E,IAAI3E,IAC1B,CFqIA4E,IACAb,MAAAQ,GAAAA,EAAAM,MAAAtB,EAAAsB,KAAAN,EAAAO,QAAAvB,EAAAuB,QACA,UAAAP,EACA,UAAAQ,MAAA,uCAEA,KAAAxB,SAAAgB,EAGA,IAAAA,EAAAT,UAAAkB,OAMA,KAAA1B,QAAA,EALA,KAAA2B,UAMA,EAKAC,QACA,KAAA5F,QAAA,KAAAkE,cAAA/D,OACA,KAAA4D,SAAA,EACA,KAAAzE,KAAA,KACA,KAAA0E,QAAA,EACA,KAAAC,SAAA,IACA,EAOA5B,QAAAlC,GACA,KAAAH,QAAAG,CACA,EAEA,qBAAAxB,EAAAC,EAAAC,EACA,KAAAkF,SAAA,EACA,MAAA8B,EAAAnH,IACAoH,EAAA,QAAAnH,EAAAK,WAAA,IAAAL,GAAA,QAAAC,EAAAD,EAAAM,aAAA,IAAAL,GAAA,QAAAC,EAAAD,EAAAM,WAAA,IAAAL,OAAA,EAAAA,EAAAM,gBAGA,IAAA4G,EAAAC,EAAA,KAAAnF,iBAAA,KAAAvB,OACA,KAAAuE,OAAAoC,MAAA,0BAAA3G,KAAA,KAAAA,KAAA4G,UAAA,QAAAH,EAAA,KAAA9B,gBAAA,IAAA8B,OAAA,EAAAA,EAAAG,YACA,KAAA5G,KAAA,KAAAA,MAAA,QAAA0G,EAAA,KAAA/B,gBAAA,IAAA+B,OAAA,EAAAA,EAAAE,YAGA,QAAAC,EAAAC,EACA,MAAAC,QE7KkCnB,eAAeoB,EAAUC,EAAcC,GAMxE,aALuBrB,EAAAA,QAAAA,MAAWC,EAAAA,EAAAA,gBAAe,sCAAuC,CACvFkB,WACAC,eACAC,kBAEe9F,KAAK2E,IAAI3E,IAC1B,CFsKA+F,EACAC,EAAAA,EAAAA,WAAA,GAAAnH,OAAAsG,EAAA,KAAAtG,OAAA,KAAAD,OACA,QADA6G,EACA,KAAA5B,wBAAA,IAAA4B,OAAA,EAAAA,EAAA9F,SACA,QADA+F,EACA,KAAA7B,wBAAA,IAAA6B,OAAA,EAAAA,EAAAI,cAEA,KAAA3C,OAAAoC,MAAA,mBAAAI,GAGA,MAAA3F,QAAAoF,aAAA,EAAAA,EAAAa,oBAAA,KAAArH,MAAAsH,MAAA,CAAAC,EAAAnG,IAAAA,KACAoG,EAAA,IAAA9H,IAAAC,MAAA8H,cAAArG,EAAA,CACAsG,YAAAlB,aAAA,EAAAA,EAAAkB,cAIAC,EAAAjI,IAAAC,MAAAiI,YAAAC,qBAAAd,EAAA7F,KAAA,OAAAyB,GAAAmF,gBACAH,GACAA,EAAAI,OAAAhB,EAAAzG,SAAA,CACA0H,MAAAxB,aAAA,EAAAA,EAAAyB,WAAA,KAAAjI,MACAkI,IAAA3B,EACAC,WACAoB,YAAApB,aAAA,EAAAA,EAAAoB,YACAO,cAAAX,IAIA,KAAAlB,OACA,OAAA8B,GACA,KAAA7D,OAAA6D,MAAA,mDACAC,EAAAD,MAAAA,IACAE,EAAAA,EAAAA,IAAA,KAAAvD,EAAA,mDACA,SACA,KAAAN,SAAA,CACA,CACA,kBGxOI,EAAU,CAAC,EAEf,EAAQtB,kBAAoB,IAC5B,EAAQC,cAAgB,IAElB,EAAQC,OAAS,SAAc,KAAM,QAE3C,EAAQC,OAAS,IACjB,EAAQC,mBAAqB,IAEhB,IAAI,IAAS,GAKJ,KAAW,YAAiB,WCPlD,SAXgB,OACd,GCTW,WAAkB,IAAIC,EAAIC,KAAKC,EAAGF,EAAIG,MAAMD,GAAG,OAAQF,EAAIkB,OAAQhB,EAAG,UAAU,CAACE,YAAY,mBAAmBC,MAAM,CAAC,oBAAoB,EAAE,KAAO,UAAUE,GAAG,CAAC,MAAQP,EAAI8C,QAAQ,CAAC5C,EAAG,OAAO,CAACE,YAAY,yBAAyByB,MAAO7B,EAAI6B,MAAOtB,GAAG,CAAC,OAAS,SAASwE,GAAyD,OAAjDA,EAAOC,iBAAiBD,EAAOE,kBAAyBjF,EAAI6C,SAASqC,MAAM,KAAMC,UAAU,IAAI,CAACjF,EAAG,KAAK,CAACF,EAAIQ,GAAGR,EAAIU,GAAGV,EAAIuB,EAAE,QAAS,6BAA8B,CAAE/E,KAAMwD,EAAIjC,qBAAsBiC,EAAIQ,GAAG,KAAKN,EAAG,KAAK,CAACE,YAAY,0BAA0B,CAACF,EAAG,kBAAkBF,EAAIoF,GAAG,CAAC/E,MAAM,CAAC,QAAUL,EAAI9C,UAAY8C,EAAIoB,cAAc/D,QAAQkD,GAAG,CAAC,MAAQP,EAAIT,UAAU,kBAAkBS,EAAIoB,eAAc,IAAQpB,EAAIQ,GAAG,KAAKR,EAAIqF,GAAIrF,EAAImB,SAASO,WAAW,SAASE,GAAU,OAAO1B,EAAG,kBAAkBF,EAAIoF,GAAG,CAACE,IAAI1D,EAASvE,OAAOgD,MAAM,CAAC,QAAUL,EAAI9C,UAAY0E,EAASvE,OAAO,MAAQ2C,EAAImB,SAASxD,OAAO4C,GAAG,CAAC,MAAQP,EAAIT,UAAU,kBAAkBqC,GAAS,GAAO,KAAI,GAAG5B,EAAIQ,GAAG,KAAKN,EAAG,MAAM,CAACE,YAAY,6BAA6B,CAACF,EAAG,SAAS,CAACK,GAAG,CAAC,MAAQP,EAAI8C,QAAQ,CAAC9C,EAAIQ,GAAG,aAAaR,EAAIU,GAAGV,EAAIuB,EAAE,QAAS,WAAW,cAAcvB,EAAIQ,GAAG,KAAKN,EAAG,QAAQ,CAACE,YAAY,UAAUC,MAAM,CAAC,KAAO,SAAS,aAAaL,EAAIuB,EAAE,QAAS,iDAAiDjB,SAAS,CAAC,MAAQN,EAAIuB,EAAE,QAAS,iBAAiBvB,EAAIQ,GAAG,KAAMR,EAAIiB,QAASf,EAAG,iBAAiB,CAACE,YAAY,4BAA4BC,MAAM,CAAC,KAAO,iBAAiB,CAACL,EAAIQ,GAAG,SAASR,EAAIU,GAAGV,EAAIuB,EAAE,QAAS,kBAAkB,UAAUvB,EAAIuF,MAAM,GAAGvF,EAAIuF,IAClgD,GACsB,IDUpB,EACA,KACA,WACA,MAI8B,QEgB1BxE,GAASyE,EAAAA,EAAAA,MACbC,OAAO,SACPC,aACAC,QAGFC,EAAAA,QAAAA,MAAU,CACTtG,QAAS,CACRiC,EAAC,KACDsE,EAACA,EAAAA,MAKH,MAAMC,EAAqBrH,SAASsH,cAAc,OAClDD,EAAmB1H,GAAK,kBACxBK,SAASuH,KAAKC,YAAYH,GAG1B,IAAIpE,GAAYwE,EAAAA,EAAAA,GAAU,QAAS,YAAa,IAC5CC,GAAgBD,EAAAA,EAAAA,GAAU,QAAS,kBAAkB,GACzDnF,EAAOoC,MAAM,sBAAuBzB,GACpCX,EAAOoC,MAAM,mBAAoB,CAAEgD,kBAGnC,MACMC,EAAiB,IADVR,EAAAA,QAAAA,OAAWS,GACD,CAAS,CAC/B7J,KAAM,iBACN8J,UAAW,CACVvF,YAGFqF,EAAeG,OAAO,oBAGtBC,OAAOC,iBAAiB,oBAAoB,WAC3C,IAAKN,EAAe,CACnBpF,EAAOoC,MAAM,oCACb,MAAMuD,EAAsB,CAC3BC,OAAOC,GAENA,EAAKC,aAAa,CACjBzI,GAAI,gBACJ0I,aAAavF,EAAAA,EAAAA,IAAE,QAAS,2BACxBwF,cAAcxF,EAAAA,EAAAA,IAAE,QAAS,aACzByF,UAAW,oBACXC,SAAU,OACVC,aAAa3F,EAAAA,EAAAA,IAAE,QAAS,+BACxB4F,cAAc3K,GACb4K,EAAoB5K,GACpBoK,EAAKS,gBAAgB,gBACtB,GAEF,GAEDlI,GAAGmI,QAAQC,SAAS,wBAAyBb,EAC9C,CACD,IAGAhF,EAAU3C,SAAQ,CAACoC,EAAUqG,KAC5B,MAAMC,EAAoB,CACzBd,OAAOC,GACN,MAAM5D,EAAW4D,EAAK5D,SAGF,UAAhBA,EAAS5E,IAAkC,iBAAhB4E,EAAS5E,IAKxCwI,EAAKC,aAAa,CACjBzI,GAAI,gBAAF3B,OAAkB0E,EAASsB,IAAG,KAAAhG,OAAI+K,GACpCV,YAAa3F,EAASuB,MACtBqE,aAAc5F,EAASuB,MAAQvB,EAASiC,UACxC4D,UAAW7F,EAAS6F,WAAa,YACjCC,SAAU,OACVC,YAAa/F,EAAS+F,YACtBC,cAAc3K,GACb4J,EAAesB,KAAKlL,EAAM2E,EAC3B,GAEF,GAEDhC,GAAGmI,QAAQC,SAAS,wBAAyBE,EAAkB,IAQhE,MAAML,EAAsBhF,eAAe5F,GAC1C,MAAMiH,GAAgB7H,IAAwB,IAAHa,OAAOD,IAAQE,QAAQ,KAAM,KACxE,IACCqE,EAAOoC,MAAM,uCAAwC,CAAEM,iBACvD,MAAMkE,QAAiBtF,EAAAA,QAAAA,MAAWC,EAAAA,EAAAA,gBAAe,oCAAqC,CACrFmB,eACAmE,qBAAqB,IAItB1L,IAAIC,MAAMC,IAAIC,gBAAgBwL,gBAAgBpE,GAAc,GAAM,GAElE/B,EAAYiG,EAAS/J,KAAK2E,IAAI3E,KAAK8D,UACnCyE,EAAgBwB,EAAS/J,KAAK2E,IAAI3E,KAAKkK,aACxC,CAAE,MAAOlD,GACR7D,EAAO6D,MAAM,iDACbE,EAAAA,EAAAA,KAAUvD,EAAAA,EAAAA,IAAE,QAAS,gDACtB,CACD,kBCzHA,WAEC,MAAMwG,EAAc,CACnBpB,OAAO3D,IACNgF,EAAAA,EAAAA,IAAU,mCAAmCC,IAAe,IAAd,MAAEC,GAAOD,EACtDjF,EAASmF,UAAUD,EAAM,KAE1BF,EAAAA,EAAAA,IAAU,kCAAkC,KAC3C/H,KAAKiI,MAAQ,KACblF,EAASmF,UAAU,GAAG,GAGxB,GAGD3B,OAAOrH,GAAGmI,QAAQC,SAAS,qBAAsBQ,EAEjD,CAjBD,6BCDA,SAAevC,EAAAA,EAAAA,MACbC,OAAO,SACPC,aACAC,QCJK,MAAMyC,EAETC,YAAY9D,eAAQ,oaAChBtE,KAAKqI,eAAe/D,GACpBtE,KAAKsI,QAAUhE,CACnB,CACInG,SACA,OAAO6B,KAAKsI,QAAQnK,EACxB,CACI0I,kBACA,OAAO7G,KAAKsI,QAAQzB,WACxB,CACI0B,oBACA,OAAOvI,KAAKsI,QAAQC,aACxB,CACIC,cACA,OAAOxI,KAAKsI,QAAQE,OACxB,CACIC,WACA,OAAOzI,KAAKsI,QAAQG,IACxB,CACIC,gBACA,OAAO1I,KAAKsI,QAAQI,SACxB,CACIC,YACA,OAAO3I,KAAKsI,QAAQK,KACxB,CACIxL,cACA,OAAO6C,KAAKsI,QAAQnL,OACxB,CACIyL,aACA,OAAO5I,KAAKsI,QAAQM,MACxB,CACIC,mBACA,OAAO7I,KAAKsI,QAAQO,YACxB,CACAR,eAAe/D,GACX,IAAKA,EAAOnG,IAA2B,iBAAdmG,EAAOnG,GAC5B,MAAM,IAAIuE,MAAM,cAEpB,IAAK4B,EAAOuC,aAA6C,mBAAvBvC,EAAOuC,YACrC,MAAM,IAAInE,MAAM,gCAEpB,IAAK4B,EAAOiE,eAAiD,mBAAzBjE,EAAOiE,cACvC,MAAM,IAAI7F,MAAM,kCAEpB,IAAK4B,EAAOmE,MAA+B,mBAAhBnE,EAAOmE,KAC9B,MAAM,IAAI/F,MAAM,yBAGpB,GAAI,YAAa4B,GAAoC,mBAAnBA,EAAOkE,QACrC,MAAM,IAAI9F,MAAM,4BAEpB,GAAI,cAAe4B,GAAsC,mBAArBA,EAAOoE,UACvC,MAAM,IAAIhG,MAAM,8BAEpB,GAAI,UAAW4B,GAAkC,iBAAjBA,EAAOqE,MACnC,MAAM,IAAIjG,MAAM,iBAEpB,GAAI,YAAa4B,GAAoC,kBAAnBA,EAAOnH,QACrC,MAAM,IAAIuF,MAAM,mBAEpB,GAAI,WAAY4B,GAAmC,mBAAlBA,EAAOsE,OACpC,MAAM,IAAIlG,MAAM,2BAEpB,GAAI,iBAAkB4B,GAAyC,mBAAxBA,EAAOuE,aAC1C,MAAM,IAAInG,MAAM,gCAExB,EAEG,MAAMoG,EAAqB,SAAUxE,QACF,IAA3BiC,OAAOwC,kBACdxC,OAAOwC,gBAAkB,GACzBjI,EAAAA,MAAa,4BAGbyF,OAAOwC,gBAAgBrH,MAAKsH,GAAUA,EAAO7K,KAAOmG,EAAOnG,KAC3D2C,EAAAA,MAAa,cAADtE,OAAe8H,EAAOnG,GAAE,uBAAuB,CAAEmG,WAGjEiC,OAAOwC,gBAAgBE,KAAK3E,EAChC,EACa4E,EAAiB,WAC1B,OAAO3C,OAAOwC,iBAAmB,EACrC,EC9EAD,EAAmB,IAAIX,EAAW,CAC9BhK,GAAI,SACJ0I,YAAWA,CAACsC,EAAOC,IACI,aAAZA,EAAKjL,IACNmD,EAAAA,EAAAA,IAAE,iBAAkB,uBACpBA,EAAAA,EAAAA,IAAE,QAAS,UAErBiH,cAAeA,IAAMc,EACrBb,QAAQW,GACGA,EAAMxG,OAAS,GAAKwG,EACtBG,KAAIC,GAAQA,EAAKC,cACjBC,OAAMC,GAAmD,IAApCA,EAAaC,EAAAA,GAAAA,UAE3CxH,WAAWoH,GACP,IAMI,aALMnH,EAAAA,QAAAA,OAAamH,EAAKK,SAIxBC,EAAAA,EAAAA,IAAK,qBAAsBN,IACpB,CACX,CACA,MAAO5E,GAEH,OADA7D,EAAAA,MAAa,8BAA+B,CAAE6D,QAAOiF,OAAQL,EAAKK,OAAQL,UACnE,CACX,CACJ,EACApH,gBAAgBgH,EAAOC,EAAM3E,GACzB,OAAOqF,QAAQC,IAAIZ,EAAMG,KAAIC,GAAQvJ,KAAKyI,KAAKc,EAAMH,EAAM3E,KAC/D,EACAkE,MAAO,uBCjCJ,MAAMqB,GAAiB,UAC9BlB,EAAmB,IAAIX,EAAW,CAC9BhK,GAAI6L,GACJnD,YAAaA,KAAMvF,EAAAA,EAAAA,IAAE,QAAS,WAC9BiH,cAAeA,IAAM0B,GAErBzB,QAAU0B,IAAK,IAAAC,EAAAC,EAAAC,EAAA,QAAa,QAAPF,EAAC5D,cAAM,IAAA4D,GAAK,QAALC,EAAND,EAAQlO,WAAG,IAAAmO,GAAO,QAAPC,EAAXD,EAAalO,aAAK,IAAAmO,IAAlBA,EAAoBC,UACnCJ,EAAMK,MAAKhB,IAAI,IAAAiB,EAAA,OAAa,QAAbA,EAAIjB,EAAKkB,YAAI,IAAAD,OAAA,EAATA,EAAW5L,WAAW,UAAU,GAAC,EAC3DuD,WAAWoH,GACP,IAAI,IAAAmB,EAAAC,EAAAC,EAAAC,EAAAC,EAGA,OADM,QAANJ,EAAAnE,cAAM,IAAAmE,GAAK,QAALC,EAAND,EAAQzO,WAAG,IAAA0O,GAAO,QAAPC,EAAXD,EAAazO,aAAK,IAAA0O,GAAS,QAATC,EAAlBD,EAAoBN,eAAO,IAAAO,GAAM,QAANC,EAA3BD,EAA6BpD,YAAI,IAAAqD,GAAjCA,EAAAC,KAAAF,EAAoCtB,EAAKjN,MAClC,IACX,CACA,MAAOqI,GAEH,OADA7D,EAAAA,MAAa,8BAA+B,CAAE6D,WACvC,CACX,CACJ,EACAxH,SAAS,EACTwL,OAAQ,mHCzCL,MAAMqC,GAAgB,WACzB,MAkDMC,GAlDQC,EAAAA,GAAAA,IAAY,QAAS,CAC/BC,MAAOA,KAAA,CACHjB,MAAO,CAAC,EACRkB,MAAO,CAAC,IAEZC,QAAS,CAILC,QAAUH,GAAWhN,GAAOgN,EAAMjB,MAAM/L,GAKxCoN,SAAWJ,GAAWK,GAAQA,EACzBlC,KAAInL,GAAMgN,EAAMjB,MAAM/L,KACtBsN,OAAOvO,SAIZwO,QAAUP,GAAWQ,GAAYR,EAAMC,MAAMO,IAEjDC,QAAS,CACLC,YAAY1C,GAER,MAAMe,EAAQf,EAAM2C,QAAO,CAACC,EAAKxC,IACxBA,EAAKnM,QAIV2O,EAAIxC,EAAKnM,QAAUmM,EACZwC,IAJHjL,EAAAA,KAAY,6CAA8CyI,GACnDwC,IAIZ,CAAC,GACJpG,EAAAA,QAAAA,IAAQ3F,KAAM,QAAS,IAAKA,KAAKkK,SAAUA,GAC/C,EACA8B,YAAY7C,GACRA,EAAMrK,SAAQyK,IACNA,EAAKnM,QACLuI,EAAAA,QAAAA,OAAW3F,KAAKkK,MAAOX,EAAKnM,OAChC,GAER,EACA6O,QAAOjE,GAAoB,IAAnB,QAAE2D,EAAO,KAAElB,GAAMzC,EACrBrC,EAAAA,QAAAA,IAAQ3F,KAAKoL,MAAOO,EAASlB,EACjC,EACAyB,cAAc3C,GACVvJ,KAAKgM,YAAY,CAACzC,GACtB,IAGU4C,IAASjH,WAS3B,OAPK+F,EAAUmB,gBAEXrE,EAAAA,EAAAA,IAAU,qBAAsBkD,EAAUiB,eAG1CjB,EAAUmB,cAAe,GAEtBnB,CACX,EC9DaoB,GAAgB,WACzB,MAyBMC,GAzBQpB,EAAAA,GAAAA,IAAY,QAAS,CAC/BC,MAAOA,KAAA,CACHoB,MAAO,CAAC,IAEZlB,QAAS,CACLmB,QAAUrB,GACC,CAACQ,EAASrP,KACb,GAAK6O,EAAMoB,MAAMZ,GAGjB,OAAOR,EAAMoB,MAAMZ,GAASrP,EAAK,GAI7CsP,QAAS,CACLa,QAAQC,GAEC1M,KAAKuM,MAAMG,EAAQf,UACpBhG,EAAAA,QAAAA,IAAQ3F,KAAKuM,MAAOG,EAAQf,QAAS,CAAC,GAG1ChG,EAAAA,QAAAA,IAAQ3F,KAAKuM,MAAMG,EAAQf,SAAUe,EAAQpQ,KAAMoQ,EAAQtP,OAC/D,IAGW+O,IAASjH,WAS5B,OAPKoH,EAAWF,eAKZE,EAAWF,cAAe,GAEvBE,CACX,ECdaK,IAAoBzB,EAAAA,GAAAA,IAAY,YAAa,CACtDC,MAAOA,KAAA,CACHyB,SAAU,GACVC,cAAe,GACfC,kBAAmB,OAEvBlB,QAAS,CAILmB,MAAoB,IAAhBC,EAAS9H,UAAAvC,OAAA,QAAAsK,IAAA/H,UAAA,GAAAA,UAAA,GAAG,GACZS,EAAAA,QAAAA,IAAQ3F,KAAM,WAAYgN,EAC9B,EAIAE,eAAuC,IAA1BJ,EAAiB5H,UAAAvC,OAAA,QAAAsK,IAAA/H,UAAA,GAAAA,UAAA,GAAG,KAE7BS,EAAAA,QAAAA,IAAQ3F,KAAM,gBAAiB8M,EAAoB9M,KAAK4M,SAAW,IACnEjH,EAAAA,QAAAA,IAAQ3F,KAAM,oBAAqB8M,EACvC,EAIAK,QACIxH,EAAAA,QAAAA,IAAQ3F,KAAM,WAAY,IAC1B2F,EAAAA,QAAAA,IAAQ3F,KAAM,gBAAiB,IAC/B2F,EAAAA,QAAAA,IAAQ3F,KAAM,oBAAqB,KACvC,KCzBFoN,IAAanH,EAAAA,EAAAA,GAAU,QAAS,cAAe,CAAC,GACzCoH,GAAqB,WAC9B,MAAMlB,GAAQjB,EAAAA,GAAAA,IAAY,aAAc,CACpCC,MAAOA,KAAA,CACHiC,gBAEJ/B,QAAS,CACLiC,UAAYnC,GAAW/B,GAAS+B,EAAMiC,WAAWhE,IAAS,CAAC,GAE/DwC,QAAS,CAIL2B,SAASnE,EAAM/D,EAAK3G,GACXsB,KAAKoN,WAAWhE,IACjBzD,EAAAA,QAAAA,IAAQ3F,KAAKoN,WAAYhE,EAAM,CAAC,GAEpCzD,EAAAA,QAAAA,IAAQ3F,KAAKoN,WAAWhE,GAAO/D,EAAK3G,EACxC,EAIAyD,aAAaiH,EAAM/D,EAAK3G,GACpB0D,EAAAA,QAAAA,KAAU7D,EAAAA,EAAAA,aAAY,4BAAD/B,OAA6B4M,EAAI,KAAA5M,OAAI6I,IAAQ,CAC9D3G,WAEJmL,EAAAA,EAAAA,IAAK,2BAA4B,CAAET,OAAM/D,MAAK3G,SAClD,EAMA8O,eAA+C,IAAlCnI,EAAGH,UAAAvC,OAAA,QAAAsK,IAAA/H,UAAA,GAAAA,UAAA,GAAG,WAAYkE,EAAIlE,UAAAvC,OAAA,QAAAsK,IAAA/H,UAAA,GAAAA,UAAA,GAAG,QAElClF,KAAKyN,OAAOrE,EAAM,eAAgB/D,GAClCrF,KAAKyN,OAAOrE,EAAM,oBAAqB,MAC3C,EAIAsE,yBAAuC,IAAhBtE,EAAIlE,UAAAvC,OAAA,QAAAsK,IAAA/H,UAAA,GAAAA,UAAA,GAAG,QAC1B,MACMyI,EAA4C,SADnC3N,KAAKsN,UAAUlE,IAAS,CAAE,kBAAqB,QAClCwE,kBAA8B,OAAS,MAEnE5N,KAAKyN,OAAOrE,EAAM,oBAAqBuE,EAC3C,KAGFE,EAAkB1B,KAASjH,WAQjC,OANK2I,EAAgBzB,gBACjBrE,EAAAA,EAAAA,IAAU,4BAA4B,SAAAC,GAAgC,IAAtB,KAAEoB,EAAI,IAAE/D,EAAG,MAAE3G,GAAOsJ,EAChE6F,EAAgBN,SAASnE,EAAM/D,EAAK3G,EACxC,IACAmP,EAAgBzB,cAAe,GAE5ByB,CACX,ECtFA,8DC0BA,MC1BwL,GD0BxLlI,EAAAA,QAAAA,OAAA,CACApJ,KAAA,cAEAmE,WAAA,CACAoN,KAAA,KACAC,cAAA,KACAC,aAAAA,MAGApR,MAAA,CACAN,KAAA,CACAQ,KAAAC,OACAI,QAAA,MAIA8Q,MAAAA,KAGA,CACAC,WAHAlD,KAIAsB,WAHAD,OAOAxO,SAAA,CACAsQ,cACA,YAAAC,YAAAC,MACA,EAEAC,OACAvC,MAIA,cAFA,KAAAzP,KAAA0B,MAAA,KAAAyN,OAAAvO,SAAAoM,KAFAyC,EAEA,IAFArN,GAAAqN,GAAA,GAAAvP,OAAAkC,EAAA,OAIA4K,KAAAhN,GAAAA,EAAAG,QAAA,mBACA,EAEA8R,WACA,YAAAD,KAAAhF,KAAA7E,IACA,MAAA+J,EAAA,SAAAC,OAAAxG,MAAA,CAAAxD,QACA,OACAA,MACAiK,OAAA,EACAnS,KAAA,KAAAoS,kBAAAlK,GACA+J,KACA,GAEA,GAGAnP,QAAA,CACAuP,cAAAzQ,GACA,YAAA+P,WAAA5C,QAAAnN,EACA,EACA0Q,kBAAAvS,GAAA,IAAAwS,EACA,YAAAxC,WAAAE,QAAA,QAAAsC,EAAA,KAAAX,mBAAA,IAAAW,OAAA,EAAAA,EAAA3Q,GAAA7B,EACA,EACAqS,kBAAArS,GAAA,IAAAyS,EACA,SAAAzS,EACA,OAAAgF,EAAA,gBAGA,MAAA0N,EAAA,KAAAH,kBAAAvS,GACAiN,EAAA,KAAAqF,cAAAI,GACA,OAAAzF,SAAA,QAAAwF,EAAAxF,EAAA0F,kBAAA,IAAAF,OAAA,EAAAA,EAAAlI,eAAAhK,EAAAA,EAAAA,UAAAP,EACA,EAEA4S,QAAAV,GAAA,IAAAW,GACAX,SAAA,QAAAW,EAAAX,EAAAvG,aAAA,IAAAkH,OAAA,EAAAA,EAAA1K,OAAA,KAAAgK,OAAAxG,MAAAxD,KACA,KAAAlF,MAAA,SAEA,EAEA6P,UAAArQ,GAAA,IAAAsQ,EAAAC,EACA,OAAAvQ,SAAA,QAAAsQ,EAAAtQ,EAAAyP,UAAA,IAAAa,GAAA,QAAAC,EAAAD,EAAApH,aAAA,IAAAqH,OAAA,EAAAA,EAAA7K,OAAA,KAAAgK,OAAAxG,MAAAxD,IACAnD,EAAA,oCAEAA,EAAA,sCAAAvC,EACA,qBE9FI,GAAU,CAAC,EAEf,GAAQW,kBAAoB,IAC5B,GAAQC,cAAgB,IAElB,GAAQC,OAAS,SAAc,KAAM,QAE3C,GAAQC,OAAS,IACjB,GAAQC,mBAAqB,IAEhB,IAAI,KAAS,IAKJ,MAAW,aAAiB,YCPlD,UAXgB,OACd,IJTW,WAAkB,IAAIC,EAAIC,KAAKC,EAAGF,EAAIG,MAAMD,GAAgC,OAAtBF,EAAIG,MAAMqP,YAAmBtP,EAAG,gBAAgB,CAACG,MAAM,CAAC,oCAAoC,KAAKL,EAAIqF,GAAIrF,EAAIwO,UAAU,SAASxP,EAAQwI,GAAO,OAAOtH,EAAG,eAAeF,EAAIoF,GAAG,CAACE,IAAItG,EAAQ0F,IAAIrE,MAAM,CAAC,aAAaL,EAAIqP,UAAUrQ,GAAS,MAAQgB,EAAIqP,UAAUrQ,IAAUyQ,SAAS,CAAC,MAAQ,SAAS1K,GAAQ,OAAO/E,EAAImP,QAAQnQ,EAAQyP,GAAG,GAAGiB,YAAY1P,EAAI2P,GAAG,CAAY,IAAVnI,EAAa,CAAClC,IAAI,OAAOsK,GAAG,WAAW,MAAO,CAAC1P,EAAG,OAAO,CAACG,MAAM,CAAC,KAAO,MAAM,EAAEwP,OAAM,GAAM,MAAM,MAAK,IAAO,eAAe7Q,GAAQ,GAAO,IAAG,EACtjB,GACsB,IIUpB,EACA,KACA,WACA,MAI8B,QCnBhC,sKCqBO,MCEM8Q,IAAsB3E,EAAAA,GAAAA,IAAY,cAAe,CAC1DC,MAAOA,KAAA,CACHlK,OAAQ,SCGV6O,IAAa7J,EAAAA,EAAAA,GAAU,QAAS,SAAU,CAC5C8J,aAAa,EACbC,qBAAqB,IAEZC,GAAqB,WAC9B,MAsBMC,GAtBQhF,EAAAA,GAAAA,IAAY,aAAc,CACpCC,MAAOA,KAAA,CACH2E,gBAEJlE,QAAS,CAIL2B,SAASlI,EAAK3G,GACViH,EAAAA,QAAAA,IAAQ3F,KAAK8P,WAAYzK,EAAK3G,EAClC,EAIAyD,aAAakD,EAAK3G,SACR0D,EAAAA,QAAAA,KAAU7D,EAAAA,EAAAA,aAAY,6BAA+B8G,GAAM,CAC7D3G,WAEJmL,EAAAA,EAAAA,IAAK,uBAAwB,CAAExE,MAAK3G,SACxC,IAGgByN,IAASjH,WAQjC,OANKgL,EAAgB9D,gBACjBrE,EAAAA,EAAAA,IAAU,wBAAwB,SAAAC,GAA0B,IAAhB,IAAE3C,EAAG,MAAE3G,GAAOsJ,EACtDkI,EAAgB3C,SAASlI,EAAK3G,EAClC,IACAwR,EAAgB9D,cAAe,GAE5B8D,CACX,EChEgM,GCgChM,CACA3T,KAAA,sBACAK,MAAA,CACAgN,OAAA,CACA9M,KAAAiE,OACA/D,UAAA,GAEAmR,YAAA,CACArR,KAAAiE,OACA/D,UAAA,GAEAmT,OAAA,CACArT,KAAAsT,SACApT,UAAA,IAGAa,SAAA,CACAwS,UACA,YAAAF,OAAA,KAAAvG,OAAA,KAAAuE,YACA,GAEAmC,MAAA,CACAD,UACA,KAAAE,IAAAC,YAAA,KAAAH,SACA,KAAAE,IAAA,KAAAF,OACA,GAEAI,UACA,KAAAF,IAAAC,YAAA,KAAAH,SACA,KAAAE,IAAA,KAAAF,OACA,GC5CA,IAXgB,OACd,ICRW,WAA+C,OAAOpQ,EAA5BD,KAAYE,MAAMD,IAAa,OACtE,GACsB,IDSpB,EACA,KACA,KACA,MAI8B,QElBhC,gBC6BA,MC7BgM,GD6BhM,CACA1D,KAAA,sBACAK,MAAA,CACA8T,IAAA,CACA5T,KAAAC,OACAC,UAAA,IAGAsT,MAAA,CACAI,MACA,KAAAH,IAAAI,WAAAC,EAAAA,GAAAA,UAAA,KAAAF,IACA,GAEAD,UACA,KAAAF,IAAAI,WAAAC,EAAAA,GAAAA,UAAA,KAAAF,IACA,mBEjCI,GAAU,CAAC,EAEf,GAAQhR,kBAAoB,IAC5B,GAAQC,cAAgB,IAElB,GAAQC,OAAS,SAAc,KAAM,QAE3C,GAAQC,OAAS,IACjB,GAAQC,mBAAqB,IAEhB,IAAI,KAAS,IAKJ,MAAW,aAAiB,YCPlD,UAXgB,OACd,IJTW,WAA+C,OAAOG,EAA5BD,KAAYE,MAAMD,IAAa,OAAO,CAACE,YAAY,mBAC1F,GACsB,IIUpB,EACA,KACA,WACA,MAI8B,QCS1ByL,GAAU1C,IC5B0O,GD6B3OvD,EAAAA,QAAAA,OAAW,CACtBpJ,KAAM,YACNmE,WAAY,CACRmQ,oBAAmB,GACnBC,oBAAmB,GACnBC,SAAQ,KACRC,WAAU,WACVC,SAAQ,KACRC,eAAc,KACdC,UAAS,KACTC,sBAAqB,KACrBC,cAAa,KACbC,SAAQA,GAAAA,SAEZ1U,MAAO,CACHyR,OAAQ,CACJvR,KAAMI,QACNC,SAAS,GAEboU,gBAAiB,CACbzU,KAAMI,QACNC,SAAS,GAEbyM,OAAQ,CACJ9M,KAAMiE,OACN/D,UAAU,GAEduK,MAAO,CACHzK,KAAMO,OACNL,UAAU,GAEdmM,MAAO,CACHrM,KAAM0U,MACNxU,UAAU,GAEdyU,eAAgB,CACZ3U,KAAMO,OACNF,QAAS,IAGjB8Q,QACI,MAAMyD,EAAmB7B,KACnB3B,EAAalD,KACb2G,EE3CkB,WAC5B,MAmBMA,GAnBQzG,EAAAA,GAAAA,IAAY,WAAY,CAClCC,MAAOA,KAAA,CACHyG,QAAQ,EACRC,SAAS,EACTC,SAAS,EACTC,UAAU,IAEdnG,QAAS,CACLoG,QAAQC,GACCA,IACDA,EAAQ1L,OAAO0L,OAEnBtM,EAAAA,QAAAA,IAAQ3F,KAAM,WAAYiS,EAAML,QAChCjM,EAAAA,QAAAA,IAAQ3F,KAAM,YAAaiS,EAAMJ,SACjClM,EAAAA,QAAAA,IAAQ3F,KAAM,YAAaiS,EAAMH,SACjCnM,EAAAA,QAAAA,IAAQ3F,KAAM,aAAciS,EAAMF,SACtC,IAGc5F,IAASjH,WAQ/B,OANKyM,EAAcvF,eACf7F,OAAOC,iBAAiB,UAAWmL,EAAcK,SACjDzL,OAAOC,iBAAiB,QAASmL,EAAcK,SAC/CzL,OAAOC,iBAAiB,YAAamL,EAAcK,SACnDL,EAAcvF,cAAe,GAE1BuF,CACX,CFc8BO,GAGtB,MAAO,CACHR,mBACAxD,aACAyD,gBACAQ,eANmBxF,KAOnBuD,gBANoBD,KAQ5B,EACAtS,KAAIA,KACO,CACHyU,kBAAkB,EAClBC,gBAAiB,GACjBC,kBAAmB9T,SAAS+T,cAAc,8BAC1CvR,QAAS,KAGjBnD,SAAU,CACNiS,aACI,OAAO,KAAKI,gBAAgBJ,UAChC,EACA3B,cACI,OAAO,KAAKC,YAAYC,MAC5B,EACAmE,UAAU,IAAA1D,EAEN,OAAI,KAAK2C,eAAiB,IACf,IAEY,QAAhB3C,EAAA,KAAKX,mBAAW,IAAAW,OAAA,EAAhBA,EAAkB0D,UAAW,EACxC,EACA/N,MAAM,IAAAgO,EAAAC,EAEF,QAAmB,QAAXD,EAAA,KAAKhE,cAAM,IAAAgE,GAAO,QAAPC,EAAXD,EAAaxK,aAAK,IAAAyK,OAAP,EAAXA,EAAoBjO,MAAO,KAAKhI,QAAQ,WAAY,KAChE,EACAW,SAAS,IAAAuV,EAAAC,EAAAC,EACL,OAAkB,QAAlBF,EAAO,KAAK/I,cAAM,IAAA+I,GAAQ,QAARC,EAAXD,EAAavV,cAAM,IAAAwV,GAAU,QAAVC,EAAnBD,EAAqBE,gBAAQ,IAAAD,OAAlB,EAAXA,EAAA9H,KAAA6H,EACX,EACA/L,cACI,OAAO,KAAK+C,OAAOqF,WAAWpI,aACvB,KAAK+C,OAAO/M,QACvB,EACAkW,OACI,MAAMA,EAAOC,SAAS,KAAKpJ,OAAOmJ,KAAM,KAAO,EAC/C,MAAoB,iBAATA,GAAqBA,EAAO,EAC5B,KAAKzR,EAAE,QAAS,YAEpB2R,EAAAA,EAAAA,IAAeF,GAAM,EAChC,EACAG,cACI,MAAMH,EAAOC,SAAS,KAAKpJ,OAAOmJ,KAAM,KAAO,EAC/C,OAAKA,GAAQA,EAAO,EACT,EAIQ,IAEE,EAFF,IAEoB/Q,KAAKmR,IAAK,KAAKvJ,OAAOmJ,KADtC,SAC8D,EACzF,EACAK,SACI,GAAyB,WAArB,KAAKxJ,OAAO9M,KAAmB,CAC/B,MAAM0R,EAAK,IAAK,KAAKC,OAAQxG,MAAO,CAAExD,KAAKvG,EAAAA,EAAAA,MAAK,KAAKuG,IAAK,KAAKmF,OAAO/M,YACtE,MAAO,CACHwW,GAAI,cACJC,MAAO,KAAKhS,EAAE,QAAS,qBAAsB,CAAE/E,KAAM,KAAKsK,cAC1D2H,KAER,CACA,OAAI,KAAK+E,sBAAsB5Q,OAAS,EAG7B,CACH2Q,MAHW,KAAKC,sBAAsB,GACf1M,YAAY,CAAC,KAAK+C,QAAS,KAAKuE,aAGvDqF,KAAM,UAGP,CACHC,KAAM,KAAK7J,OAAOA,OAElB0J,MAAO,KAAKhS,EAAE,QAAS,uBAAwB,CAAE/E,KAAM,KAAKsK,cAEpE,EACA6M,gBACI,OAAO,KAAKvB,eAAevF,QAC/B,EACA+G,aAAa,IAAAC,EAAAC,EAAAC,EACT,OAAO,KAAKJ,cAAcK,SAAoB,QAAZH,EAAC,KAAKhK,cAAM,IAAAgK,GAAQ,QAARC,EAAXD,EAAaxW,cAAM,IAAAyW,GAAU,QAAVC,EAAnBD,EAAqBf,gBAAQ,IAAAgB,OAAlB,EAAXA,EAAA/I,KAAA8I,GACvC,EACAG,eACI,OAAO,KAAKlE,WAAWE,mBAC3B,EACAzS,aACI,IACI,MAAM0W,EAAM,IAAIC,IAAI3N,OAAO4N,SAASC,OAAS,KAAKxK,OAAOqF,WAAW1R,YAMpE,OAJA0W,EAAII,aAAatH,IAAI,IAAK,MAC1BkH,EAAII,aAAatH,IAAI,IAAK,MAE1BkH,EAAII,aAAatH,IAAI,KAA2B,IAAtB,KAAKiH,aAAwB,IAAM,KACtDC,EAAIR,IACf,CACA,MAAOa,GACH,OAAO,IACX,CACJ,EACAC,cAAc,IAAAC,EAAAC,EAAAC,EACV,MAAMC,EAAW,KAAK/K,OAAOnM,MAAQ,2BAC/B8W,EAAuB,QAAZC,EAAGjO,OAAOrH,UAAE,IAAAsV,GAAU,QAAVC,EAATD,EAAWrV,gBAAQ,IAAAsV,GAAY,QAAZC,EAAnBD,EAAqBrV,kBAAU,IAAAsV,OAAtB,EAATA,EAAA3J,KAAA0J,EAAkCE,GACtD,OAAIJ,EACA,OAAA/X,OAAc+X,EAAW,KAEtB,EACX,EACAK,iBACI,OAAOhJ,GACFH,QAAOnH,IAAWA,EAAOkE,SAAWlE,EAAOkE,QAAQ,CAAC,KAAKoB,QAAS,KAAKuE,eACvE0G,MAAK,CAACC,EAAGC,KAAOD,EAAEnM,OAAS,IAAMoM,EAAEpM,OAAS,IACrD,EACAqM,uBACI,OAAI,KAAKvD,eAAiB,IACf,GAEJ,KAAKmD,eAAenJ,QAAOnH,IAAM,IAAA2Q,EAAA,OAAI3Q,SAAc,QAAR2Q,EAAN3Q,EAAQsE,cAAM,IAAAqM,OAAR,EAANA,EAAAlK,KAAAzG,EAAiB,KAAKsF,OAAQ,KAAKuE,YAAY,GAC/F,EACA+G,qBACI,GAAI,KAAKzD,eAAiB,IAEtB,OAAI,KAAK8B,sBAAsB5Q,OAAS,EAC7B,KAAKiS,eAAe3W,MAAM,GAE9B,KAAK2W,eAEhB,MAAMhJ,EAAU,IACT,KAAKoJ,wBACL,KAAKJ,eAAenJ,QAAOnH,IAAWA,EAAOsE,UAGpD,OAAI,KAAK2K,sBAAsB5Q,OAAS,EAC7BiJ,EAAQ3N,MAAM,GAElB2N,CACX,EACA2H,wBACI,MAAO,IACA,KAAKqB,eAAenJ,QAAOnH,GAAUA,EAAOnH,UAEvD,EACAgY,WAAY,CACRC,MACI,OAAO,KAAK1D,iBAAiBzQ,SAAW,KAAKoU,QACjD,EACAtI,IAAI9L,GACA,KAAKyQ,iBAAiBzQ,OAASA,EAAS,KAAKoU,SAAW,IAC5D,GAEJA,WACI,OAAgB,KAAKzL,OAAOA,OZjNzB5L,MAAM,IAAI8N,QAAO,SAAUgJ,EAAGC,GAErC,OADAD,GAAMA,GAAK,GAAKA,EAAKC,EAAEO,WAAW,IACvBR,CACf,GAAG,EY+MC,EACAS,aACI,OAA2C,IAApC,KAAK3L,OAAOqF,WAAWuG,QAClC,GAEJlF,MAAO,CACHjC,OAAOA,EAAQoH,GACX,IAAe,IAAXpH,IAA+B,IAAXoH,EAMpB,OALA,KAAKC,kBAIL,KAAKnF,IAAIoF,WAAW/T,MAAMgU,QAAU,QAIxC,KAAKrF,IAAIoF,WAAW/T,MAAMgU,QAAU,EACxC,EAKArY,aACI,KAAKsY,WACL,KAAKC,qBACT,GAKJrF,UAAU,IAAAsF,EAAAC,EAIN,KAAKC,oBAAqBC,EAAAA,GAAAA,WAAS,WAC/B,KAAKC,sBACT,GAAG,KAAK,GAER,KAAKL,sBAEc,QAAnBC,EAAA,KAAKxF,IAAIoF,kBAAU,IAAAI,GAAkB,QAAlBC,EAAnBD,EAAqBvP,wBAAgB,IAAAwP,GAArCA,EAAAjL,KAAAgL,EAAwC,cAAe,KAAKK,aAChE,EACAC,gBACI,KAAKX,YACT,EACArW,QAAS,CACL,4BG5PuB,IAAU9B,EH6P7B,GAAK,KAAKA,WAKV,aGlQ6BA,EHiQU,KAAKA,WGhQ7C+Y,OAAO7O,KALE,YAMX5D,MAAK,SAAU0S,GAChB,OAAOA,EAAMC,MAAMjZ,GACdsG,MAAK,SAAU6D,GAChB,QAASA,CACb,GACJ,MH4PY,KAAK2K,gBAAe,OAAA7V,OAAU,KAAKe,WAAU,UAC7C,KAAK6U,kBAAmB,SAI5B,KAAK6D,oBACT,EACAE,uBAES,KAAK5Y,aAIN,KAAKkZ,gBACL,KAAKZ,WAGT,KAAKY,eAAiB,IAAIC,KAAJ,EAAsB,CAACC,EAASC,EAAQC,KAC1D,MAAMC,EAAM,IAAIC,MAEhBD,EAAIE,cAAgB,KAAK3I,OAAS,OAAS,OAC3CyI,EAAIG,OAAS,KACT,KAAK5E,gBAAe,OAAA7V,OAAU,KAAKe,WAAU,KAC7C,KAAK6U,kBAAmB,EACxBuE,EAAQG,EAAI,EAEhBA,EAAII,QAAU,KACV,KAAK9E,kBAAmB,EACxBwE,EAAOE,EAAI,EAEfA,EAAIK,IAAM,KAAK5Z,WAEfsZ,GAAS,KACLC,EAAII,QAAU,KACdJ,EAAIG,OAAS,KACbH,EAAIK,IAAM,EAAE,GACd,IAEV,EACAzB,aAEI,KAAK1U,QAAU,GAEf,KAAK6U,WAEL,KAAKV,YAAa,CACtB,EACAU,WACI,KAAKxD,gBAAkB,GACvB,KAAKD,kBAAmB,EACpB,KAAKqE,iBACL,KAAKA,eAAeW,SACpB,KAAKX,eAAiB,KAE9B,EACA,oBAAoBnS,GAChB,MAAMuC,EAAcvC,EAAOuC,YAAY,CAAC,KAAK+C,QAAS,KAAKuE,aAC3D,IAEI,KAAKnN,QAAUsD,EAAOnG,GACtBwH,EAAAA,QAAAA,IAAQ,KAAKiE,OAAQ,YAAY,GACjC,MAAMyN,QAAgB/S,EAAOmE,KAAK,KAAKmB,OAAQ,KAAKuE,YAAa,KAAK1J,KAEtE,GAAgB,OAAZ4S,EACA,OAEJ,GAAIA,EAEA,YADAC,EAAAA,EAAAA,IAAY,KAAKhW,EAAE,QAAS,+CAAgD,CAAEuF,kBAGlFhC,EAAAA,EAAAA,IAAU,KAAKvD,EAAE,QAAS,gCAAiC,CAAEuF,gBACjE,CACA,MAAOyN,GACHxT,EAAAA,MAAa,+BAAgC,CAAEwD,SAAQgQ,OACvDzP,EAAAA,EAAAA,IAAU,KAAKvD,EAAE,QAAS,gCAAiC,CAAEuF,gBACjE,CAAC,QAGG,KAAK7F,QAAU,GACf2E,EAAAA,QAAAA,IAAQ,KAAKiE,OAAQ,YAAY,EACrC,CACJ,EACA2N,kBAAkBtF,GAEW,WAArB,KAAKrI,OAAO9M,MAGZ,KAAKyW,sBAAsB5Q,OAAS,IACpCsP,EAAMlN,iBACNkN,EAAMjN,kBAEN,KAAKuO,sBAAsB,GAAG9K,KAAK,KAAKmB,OAAQ,KAAKuE,YAAa,KAAK1J,KAE/E,EACA+S,uBAAuBvF,GACnB,MAAMwF,EAAgB,KAAKlE,sBAAsB7R,MAAK4C,GAAUA,EAAOnG,KAAO6L,KAC1EyN,IACAxF,EAAMlN,iBACNkN,EAAMjN,kBACNyS,EAAchP,KAAK,KAAKmB,OAAQ,KAAKuE,aAE7C,EACAuJ,kBAAkB1K,GAAW,IAAA2K,EACzB,MAAMC,EAAmB,KAAKrQ,MACxBuF,EAAoB,KAAKqF,eAAerF,kBAE9C,GAAsB,QAAlB6K,EAAA,KAAKhG,qBAAa,IAAAgG,GAAlBA,EAAoB5F,UAAkC,OAAtBjF,EAA4B,CAC5D,MAAM+K,EAAoB,KAAKnE,cAAcK,SAAS,KAAK3W,QACrD0a,EAAQ9V,KAAK+V,IAAIH,EAAkB9K,GACnCkL,EAAMhW,KAAKiW,IAAInL,EAAmB8K,GAClC/K,EAAgB,KAAKsF,eAAetF,cACpCqL,EAAgB,KAAK/O,MACtBG,KAAI6O,IAAI,IAAAC,EAAAC,EAAA,OAAe,QAAfD,EAAID,EAAK/a,cAAM,IAAAgb,GAAU,QAAVC,EAAXD,EAAatF,gBAAQ,IAAAuF,OAAV,EAAXA,EAAAtN,KAAAqN,EAAyB,IACrCna,MAAM6Z,EAAOE,EAAM,GAElBhL,EAAY,IAAIH,KAAkBqL,GACnCzM,QAAOuD,IAAW6I,GAAqB7I,IAAW,KAAK5R,SAI5D,OAHA0D,EAAAA,MAAa,oDAAqD,CAAEgX,QAAOE,MAAKE,gBAAeL,2BAE/F,KAAK1F,eAAepF,IAAIC,EAE5B,CACAlM,EAAAA,MAAa,qBAAsB,CAAEkM,cACrC,KAAKmF,eAAepF,IAAIC,GACxB,KAAKmF,eAAejF,aAAa0K,EACrC,EAEAxB,aAAanE,GAET,GAAI,KAAKkD,WACL,OAGJ,MAAMmD,EAAwB,KAAK5E,cAAc/Q,OAAS,EAC1D,KAAK+O,iBAAiBzQ,OAAS,KAAK0S,YAAc2E,EAAwB,SAAW,KAAKjD,SAE1FpD,EAAMlN,iBACNkN,EAAMjN,iBACV,EACA1D,EAAGiX,EAAAA,GACHtF,eAAcA,EAAAA,sBI9ZlB,GAAU,CAAC,EAEf,GAAQvT,kBAAoB,IAC5B,GAAQC,cAAgB,IAElB,GAAQC,OAAS,SAAc,KAAM,QAE3C,GAAQC,OAAS,IACjB,GAAQC,mBAAqB,IAEhB,IAAI,KAAS,IAKJ,MAAW,aAAiB,4BCf9C,GAAU,CAAC,EAEf,GAAQJ,kBAAoB,IAC5B,GAAQC,cAAgB,IAElB,GAAQC,OAAS,SAAc,KAAM,QAE3C,GAAQC,OAAS,IACjB,GAAQC,mBAAqB,IAEhB,IAAI,KAAS,IAKJ,MAAW,aAAiB,YCNlD,UAXgB,OACd,INVW,WAAkB,IAAIC,EAAIC,KAAKC,EAAGF,EAAIG,MAAMD,GAAgC,OAAtBF,EAAIG,MAAMqP,YAAmBtP,EAAG,WAAW,CAACA,EAAG,KAAK,CAACE,YAAY,4BAA4B,CAAEJ,EAAIsO,OAAQpO,EAAG,wBAAwB,CAACG,MAAM,CAAC,aAAaL,EAAIuB,EAAE,QAAS,mCAAoC,CAAEuF,YAAa9G,EAAI8G,cAAe,QAAU9G,EAAI2T,cAAc,MAAQ3T,EAAI3C,OAAO,KAAO,iBAAiBkD,GAAG,CAAC,iBAAiBP,EAAI2X,qBAAqB3X,EAAIuF,MAAM,GAAGvF,EAAIQ,GAAG,KAAKN,EAAG,KAAK,CAACE,YAAY,wBAAwB,CAACF,EAAG,IAAIF,EAAIoF,GAAG,CAACqT,IAAI,OAAOlY,GAAG,CAAC,MAAQP,EAAIwX,oBAAoB,IAAIxX,EAAIqT,QAAO,GAAO,CAACnT,EAAG,OAAO,CAACE,YAAY,wBAAwB,CAAsB,WAApBJ,EAAI6J,OAAO9M,KAAmBmD,EAAG,cAAeF,EAAIxC,aAAewC,EAAIqS,iBAAkBnS,EAAG,OAAO,CAACuY,IAAI,aAAarY,YAAY,+BAA+ByB,MAAO,CAAEyQ,gBAAiBtS,EAAIsS,mBAAsBtS,EAAIwU,YAAatU,EAAG,OAAO,CAACE,YAAY,kEAAkEyB,MAAO,CAAEyQ,gBAAiBtS,EAAIwU,eAAiBtU,EAAG,YAAYF,EAAIQ,GAAG,KAAMR,EAAIwV,WAAYtV,EAAG,OAAO,CAACE,YAAY,gCAAgCC,MAAM,CAAC,aAAaL,EAAIuB,EAAE,QAAS,cAAc,CAACrB,EAAG,WAAW,CAACG,MAAM,CAAC,cAAc,OAAO,KAAO,OAAO,GAAGL,EAAIuF,MAAM,GAAGvF,EAAIQ,GAAG,KAAKN,EAAG,OAAO,CAACE,YAAY,6BAA6B,CAACJ,EAAIQ,GAAGR,EAAIU,GAAGV,EAAI8G,oBAAoB9G,EAAIQ,GAAG,KAAKN,EAAG,KAAK,CAACE,YAAY,0BAA0BK,MAAK,2BAAAhE,OAA4BuD,EAAIsV,WAAY,CAAEtV,EAAIsO,OAAQpO,EAAG,YAAY,CAACuY,IAAI,cAAcpY,MAAM,CAAC,qBAAqBL,EAAIuS,kBAAkB,UAAYvS,EAAIuS,kBAAkB,SAAWvS,EAAI6J,OAAO6O,SAAS,eAAc,EAAK,cAAa,EAAK,OAAS1Y,EAAIiV,qBAAqBrS,OAAO,KAAO5C,EAAIoV,YAAY7U,GAAG,CAAC,cAAc,SAASwE,GAAQ/E,EAAIoV,WAAWrQ,CAAM,IAAI/E,EAAIqF,GAAIrF,EAAImV,oBAAoB,SAAS5Q,GAAQ,OAAOrE,EAAG,iBAAiB,CAACoF,IAAIf,EAAOnG,GAAGqC,MAAM,0BAA4B8D,EAAOnG,GAAGmC,GAAG,CAAC,MAAQ,SAASwE,GAAQ,OAAO/E,EAAI2Y,cAAcpU,EAAO,GAAGmL,YAAY1P,EAAI2P,GAAG,CAAC,CAACrK,IAAI,OAAOsK,GAAG,WAAW,MAAO,CAAE5P,EAAIiB,UAAYsD,EAAOnG,GAAI8B,EAAG,gBAAgB,CAACG,MAAM,CAAC,KAAO,MAAMH,EAAG,sBAAsB,CAACG,MAAM,CAAC,IAAMkE,EAAOiE,cAAc,CAACxI,EAAI6J,QAAS7J,EAAIoO,gBAAgB,EAAEyB,OAAM,IAAO,MAAK,IAAO,CAAC7P,EAAIQ,GAAG,aAAaR,EAAIU,GAAG6D,EAAOuC,YAAY,CAAC9G,EAAI6J,QAAS7J,EAAIoO,cAAc,aAAa,IAAG,GAAGpO,EAAIuF,MAAM,GAAGvF,EAAIQ,GAAG,KAAMR,EAAIwR,gBAAiBtR,EAAG,KAAK,CAACE,YAAY,uBAAuByB,MAAO,CAAE+W,QAAS5Y,EAAImT,aAAe5S,GAAG,CAAC,MAAQP,EAAIyX,yBAAyB,CAACvX,EAAG,OAAO,CAACF,EAAIQ,GAAGR,EAAIU,GAAGV,EAAIgT,WAAWhT,EAAIuF,KAAKvF,EAAIQ,GAAG,KAAKR,EAAIqF,GAAIrF,EAAIyS,SAAS,SAASoG,GAAO,IAAAC,EAAC,OAAO5Y,EAAG,KAAK,CAACoF,IAAIuT,EAAOza,GAAGgC,YAAY,gCAAgCK,MAAK,mBAAAhE,OAAmC,QAAnCqc,EAAoB9Y,EAAIoO,mBAAW,IAAA0K,OAAA,EAAfA,EAAiB1a,GAAE,KAAA3B,OAAIoc,EAAOza,IAAKmC,GAAG,CAAC,MAAQP,EAAIyX,yBAAyB,CAAEzX,EAAIsO,OAAQpO,EAAG,sBAAsB,CAACG,MAAM,CAAC,eAAeL,EAAIoO,YAAY,OAASyK,EAAOzI,OAAO,OAASpQ,EAAI6J,UAAU7J,EAAIuF,MAAM,EAAE,KAAI,EAC3zF,GACsB,IMWpB,EACA,KACA,WACA,MAI8B,QCpBgO,GCKjPK,EAAAA,QAAAA,OAAW,CACtBpJ,KAAM,kBACNmE,WAAY,CAAC,EACb9D,MAAO,CACH2U,gBAAiB,CACbzU,KAAMI,QACNC,SAAS,GAEbgM,MAAO,CACHrM,KAAM0U,MACNxU,UAAU,GAEd8b,QAAS,CACLhc,KAAMC,OACNI,QAAS,IAEbsU,eAAgB,CACZ3U,KAAMO,OACNF,QAAS,IAGjB8Q,QACI,MAAM3B,EAAaD,KAEnB,MAAO,CACH6B,WAFelD,KAGfsB,aAER,EACAzO,SAAU,CACNsQ,cACI,OAAO,KAAKC,YAAYC,MAC5B,EACA5J,MAAM,IAAAgO,EAAAC,EAEF,QAAmB,QAAXD,EAAA,KAAKhE,cAAM,IAAAgE,GAAO,QAAPC,EAAXD,EAAaxK,aAAK,IAAAyK,OAAP,EAAXA,EAAoBjO,MAAO,KAAKhI,QAAQ,WAAY,KAChE,EACAsc,gBAAgB,IAAAjK,EACZ,GAAqB,QAAjBA,EAAC,KAAKX,mBAAW,IAAAW,IAAhBA,EAAkB3Q,GACnB,OAEJ,GAAiB,MAAb,KAAKsG,IACL,OAAO,KAAKyJ,WAAWxC,QAAQ,KAAKyC,YAAYhQ,IAEpD,MAAM6Q,EAAS,KAAK1C,WAAWE,QAAQ,KAAK2B,YAAYhQ,GAAI,KAAKsG,KACjE,OAAO,KAAKyJ,WAAW5C,QAAQ0D,EACnC,EACAwD,UAAU,IAAAwG,EAEN,OAAI,KAAKvH,eAAiB,IACf,IAEY,QAAhBuH,EAAA,KAAK7K,mBAAW,IAAA6K,OAAA,EAAhBA,EAAkBxG,UAAW,EACxC,EACAyG,YAAY,IAAAC,EAER,OAAsB,QAAtBA,EAAI,KAAKH,qBAAa,IAAAG,GAAlBA,EAAoBnG,MACbE,EAAAA,EAAAA,IAAe,KAAK8F,cAAchG,MAAM,IAG5CE,EAAAA,EAAAA,IAAe,KAAK9J,MAAM2C,QAAO,CAACqN,EAAO5P,IAAS4P,EAAQ5P,EAAKwJ,MAAQ,GAAG,IAAI,EACzF,GAEJ1T,QAAS,CACL+Z,eAAeR,GACX,MAAO,CACH,iCAAiC,EACjC,oBAAApc,OAAoB,KAAK2R,YAAYhQ,GAAE,KAAA3B,OAAIoc,EAAOza,MAAO,EAEjE,EACAmD,EAAGiX,EAAAA,sBChEP,GAAU,CAAC,EAEf,GAAQ7Y,kBAAoB,IAC5B,GAAQC,cAAgB,IAElB,GAAQC,OAAS,SAAc,KAAM,QAE3C,GAAQC,OAAS,IACjB,GAAQC,mBAAqB,IAEhB,IAAI,KAAS,IAKJ,MAAW,aAAiB,YCPlD,UAXgB,OACd,IFTW,WAAkB,IAAIC,EAAIC,KAAKC,EAAGF,EAAIG,MAAMD,GAAgC,OAAtBF,EAAIG,MAAMqP,YAAmBtP,EAAG,KAAK,CAACA,EAAG,KAAK,CAACE,YAAY,4BAA4B,CAACF,EAAG,OAAO,CAACE,YAAY,mBAAmB,CAACJ,EAAIQ,GAAGR,EAAIU,GAAGV,EAAIuB,EAAE,QAAS,4BAA4BvB,EAAIQ,GAAG,KAAKN,EAAG,KAAK,CAACE,YAAY,wBAAwB,CAACF,EAAG,OAAO,CAACE,YAAY,yBAAyBJ,EAAIQ,GAAG,KAAKN,EAAG,OAAO,CAACF,EAAIQ,GAAGR,EAAIU,GAAGV,EAAI+Y,cAAc/Y,EAAIQ,GAAG,KAAKN,EAAG,KAAK,CAACE,YAAY,4BAA4BJ,EAAIQ,GAAG,KAAMR,EAAIwR,gBAAiBtR,EAAG,KAAK,CAACE,YAAY,2CAA2C,CAACF,EAAG,OAAO,CAACF,EAAIQ,GAAGR,EAAIU,GAAGV,EAAIkZ,gBAAgBlZ,EAAIuF,KAAKvF,EAAIQ,GAAG,KAAKR,EAAIqF,GAAIrF,EAAIyS,SAAS,SAASoG,GAAO,IAAAS,EAAC,OAAOpZ,EAAG,KAAK,CAACoF,IAAIuT,EAAOza,GAAGqC,MAAMT,EAAIqZ,eAAeR,IAAS,CAAC3Y,EAAG,OAAO,CAACF,EAAIQ,GAAGR,EAAIU,GAAiB,QAAf4Y,EAACT,EAAOE,eAAO,IAAAO,OAAA,EAAdA,EAAAtO,KAAA6N,EAAiB7Y,EAAIoJ,MAAOpJ,EAAIoO,kBAAkB,KAAI,EACxzB,GACsB,IEUpB,EACA,KACA,WACA,MAI8B,QCGhC,GAAexI,EAAAA,QAAAA,OAAW,CACtBhI,KAAIA,KACO,CACH8T,eAAgB,OAGxB6H,UACI,MAAMC,EAAa/a,SAAS+T,cAAc,oBAC1CvS,KAAKwZ,gBAAkB,IAAIC,gBAAgBC,IACnCA,EAAQ/W,OAAS,GAAK+W,EAAQ,GAAGC,SAAWJ,IAC5CvZ,KAAKyR,eAAiBiI,EAAQ,GAAGE,YAAY9X,MACjD,IAEJ9B,KAAKwZ,gBAAgBK,QAAQN,EACjC,EACAlD,gBACIrW,KAAKwZ,gBAAgBM,YACzB,ICzBElO,GAAU1C,ICduP,GDexPvD,EAAAA,QAAAA,OAAW,CACtBpJ,KAAM,yBACNmE,WAAY,CACRoQ,oBAAmB,GACnBK,UAAS,KACTD,eAAc,KACdG,cAAaA,MAEjB0I,OAAQ,CACJC,IAEJpd,MAAO,CACHuR,YAAa,CACTrR,KAAMiE,OACN/D,UAAU,GAEdid,cAAe,CACXnd,KAAM0U,MACNrU,QAASA,IAAO,KAGxB8Q,MAAKA,KAIM,CACHyD,iBAJqB7B,KAKrB3B,WAJelD,KAKfmH,eAJmBxF,OAO3BhP,KAAIA,KACO,CACHqD,QAAS,OAGjBnD,SAAU,CACN4G,MAAM,IAAAgO,EAAAC,EAEF,QAAmB,QAAXD,EAAA,KAAKhE,cAAM,IAAAgE,GAAO,QAAPC,EAAXD,EAAaxK,aAAK,IAAAyK,OAAP,EAAXA,EAAoBjO,MAAO,KAAKhI,QAAQ,WAAY,KAChE,EACAmY,iBACI,OAAOhJ,GACFH,QAAOnH,GAAUA,EAAOoE,YACxB+C,QAAOnH,IAAWA,EAAOkE,SAAWlE,EAAOkE,QAAQ,KAAKW,MAAO,KAAKgF,eACpE0G,MAAK,CAACC,EAAGC,KAAOD,EAAEnM,OAAS,IAAMoM,EAAEpM,OAAS,IACrD,EACAQ,QACI,OAAO,KAAK8Q,cACP3Q,KAAIlM,GAAU,KAAKkO,QAAQlO,KAC3BqO,QAAOlC,GAAQA,GACxB,EACA2Q,sBACI,OAAO,KAAK/Q,MAAMoB,MAAKhB,GAAQA,EAAKkP,UACxC,EACAtD,WAAY,CACRC,MACI,MAAwC,WAAjC,KAAK1D,iBAAiBzQ,MACjC,EACA8L,IAAI9L,GACA,KAAKyQ,iBAAiBzQ,OAASA,EAAS,SAAW,IACvD,GAEJkZ,gBACI,OAAI,KAAK1I,eAAiB,IACf,EAEP,KAAKA,eAAiB,IACf,EAEP,KAAKA,eAAiB,KACf,EAEJ,CACX,GAEJpS,QAAS,CAOLiM,QAAQ0D,GACJ,OAAO,KAAKd,WAAW5C,QAAQ0D,EACnC,EACA,oBAAoB1K,GAChB,MAAMuC,EAAcvC,EAAOuC,YAAY,KAAKsC,MAAO,KAAKgF,aAClDiM,EAAe,KAAKH,cAC1B,IAEI,KAAKjZ,QAAUsD,EAAOnG,GACtB,KAAKgL,MAAMrK,SAAQyK,IACf5D,EAAAA,QAAAA,IAAQ4D,EAAM,YAAY,EAAK,IAGnC,MAAM8Q,QAAgB/V,EAAOoE,UAAU,KAAKS,MAAO,KAAKgF,YAAa,KAAK1J,KAE1E,IAAK4V,EAAQ9P,MAAK+P,GAAqB,OAAXA,IAGxB,YADA,KAAKnI,eAAehF,QAIxB,GAAIkN,EAAQ9P,MAAK+P,IAAqB,IAAXA,IAAmB,CAE1C,MAAMC,EAAYH,EACb3O,QAAO,CAACrO,EAAQmK,KAA6B,IAAnB8S,EAAQ9S,KAGvC,OAFA,KAAK4K,eAAepF,IAAIwN,QACxB1V,EAAAA,EAAAA,IAAU,KAAKvD,EAAE,QAAS,2CAA4C,CAAEuF,gBAE5E,EAEAyQ,EAAAA,EAAAA,IAAY,KAAKhW,EAAE,QAAS,qDAAsD,CAAEuF,iBACpF,KAAKsL,eAAehF,OACxB,CACA,MAAOmH,GACHxT,EAAAA,MAAa,+BAAgC,CAAEwD,SAAQgQ,OACvDzP,EAAAA,EAAAA,IAAU,KAAKvD,EAAE,QAAS,gCAAiC,CAAEuF,gBACjE,CAAC,QAGG,KAAK7F,QAAU,KACf,KAAKmI,MAAMrK,SAAQyK,IACf5D,EAAAA,QAAAA,IAAQ4D,EAAM,YAAY,EAAM,GAExC,CACJ,EACAjI,EAAGiX,EAAAA,sBEpIP,GAAU,CAAC,EAEf,GAAQ7Y,kBAAoB,IAC5B,GAAQC,cAAgB,IAElB,GAAQC,OAAS,SAAc,KAAM,QAE3C,GAAQC,OAAS,IACjB,GAAQC,mBAAqB,IAEhB,IAAI,KAAS,IAKJ,MAAW,aAAiB,YCPlD,UAXgB,OACd,IHTW,WAAkB,IAAIC,EAAIC,KAAKC,EAAGF,EAAIG,MAAMD,GAAgC,OAAtBF,EAAIG,MAAMqP,YAAmBtP,EAAG,KAAK,CAACE,YAAY,mDAAmDC,MAAM,CAAC,QAAU,MAAM,CAACH,EAAG,YAAY,CAACuY,IAAI,cAAcpY,MAAM,CAAC,WAAaL,EAAIiB,SAAWjB,EAAIma,oBAAoB,eAAc,EAAK,OAASna,EAAIoa,cAAc,aAAapa,EAAIoa,eAAiB,EAAIpa,EAAIuB,EAAE,QAAS,WAAa,KAAK,KAAOvB,EAAIoV,YAAY7U,GAAG,CAAC,cAAc,SAASwE,GAAQ/E,EAAIoV,WAAWrQ,CAAM,IAAI/E,EAAIqF,GAAIrF,EAAI6U,gBAAgB,SAAStQ,GAAQ,OAAOrE,EAAG,iBAAiB,CAACoF,IAAIf,EAAOnG,GAAGqC,MAAM,iCAAmC8D,EAAOnG,GAAGmC,GAAG,CAAC,MAAQ,SAASwE,GAAQ,OAAO/E,EAAI2Y,cAAcpU,EAAO,GAAGmL,YAAY1P,EAAI2P,GAAG,CAAC,CAACrK,IAAI,OAAOsK,GAAG,WAAW,MAAO,CAAE5P,EAAIiB,UAAYsD,EAAOnG,GAAI8B,EAAG,gBAAgB,CAACG,MAAM,CAAC,KAAO,MAAMH,EAAG,sBAAsB,CAACG,MAAM,CAAC,IAAMkE,EAAOiE,cAAcxI,EAAIoJ,MAAOpJ,EAAIoO,gBAAgB,EAAEyB,OAAM,IAAO,MAAK,IAAO,CAAC7P,EAAIQ,GAAG,WAAWR,EAAIU,GAAG6D,EAAOuC,YAAY9G,EAAIoJ,MAAOpJ,EAAIoO,cAAc,WAAW,IAAG,IAAI,EAC3/B,GACsB,IGUpB,EACA,KACA,WACA,MAI8B,QCnBhC,4BCwBA,SAAexI,EAAAA,QAAAA,OAAW,CACtB9H,SAAU,KACH2c,EAAAA,GAAAA,IAASnN,GAAoB,CAAC,YAAa,eAAgB,2BAC9Dc,cACI,OAAOnO,KAAKoO,YAAYC,MAC5B,EAIAoM,cAAc,IAAAC,EAAA5L,EACV,OAA0C,QAAnC4L,EAAA1a,KAAKsN,UAAUtN,KAAKmO,YAAYhQ,WAAG,IAAAuc,OAAA,EAAnCA,EAAqCC,gBACrB,QADiC7L,EACjD9O,KAAKmO,mBAAW,IAAAW,OAAA,EAAhBA,EAAkB8L,iBAClB,UACX,EAIAC,eAAe,IAAAC,EAEX,MAA4B,SADgC,QAAtCA,EAAG9a,KAAKsN,UAAUtN,KAAKmO,YAAYhQ,WAAG,IAAA2c,OAAA,EAAnCA,EAAqClN,kBAElE,GAEJvO,QAAS,CACL0b,aAAa1V,GAELrF,KAAKya,cAAgBpV,EAKzBrF,KAAKwN,aAAanI,EAAKrF,KAAKmO,YAAYhQ,IAJpC6B,KAAK0N,uBAAuB1N,KAAKmO,YAAYhQ,GAKrD,KCvD8P,GFMvPwH,EAAAA,QAAAA,OAAW,CACtBpJ,KAAM,wBACNmE,WAAY,CACRsa,SAAQ,KACRC,OAAM,KACNC,SAAQA,MAEZnB,OAAQ,CACJoB,IAEJve,MAAO,CACHL,KAAM,CACFO,KAAMC,OACNC,UAAU,GAEdoe,KAAM,CACFte,KAAMC,OACNC,UAAU,IAGlBqC,QAAS,CACLgc,cAAczC,GACV,MAAM0C,EAAY,KAAKT,aACjB,KAAKvZ,EAAE,QAAS,aAChB,KAAKA,EAAE,QAAS,cACtB,OAAO,KAAKA,EAAE,QAAS,sCAAuC,CAC1DsX,SACA0C,aAER,EACAha,EAAGiX,EAAAA,sBGzBP,GAAU,CAAC,EAEf,GAAQ7Y,kBAAoB,IAC5B,GAAQC,cAAgB,IAElB,GAAQC,OAAS,SAAc,KAAM,QAE3C,GAAQC,OAAS,IACjB,GAAQC,mBAAqB,IAEhB,IAAI,KAAS,IAKJ,MAAW,aAAiB,YCPlD,UAXgB,OACd,IJTW,WAAkB,IAAIC,EAAIC,KAAKC,EAAGF,EAAIG,MAAMD,GAAgC,OAAtBF,EAAIG,MAAMqP,YAAmBtP,EAAG,WAAW,CAACE,YAAY,iCAAiCK,MAAM,CAAC,yCAA0CT,EAAI0a,cAAgB1a,EAAIqb,MAAMhb,MAAM,CAAC,aAAaL,EAAIsb,cAActb,EAAIxD,MAAM,KAAO,YAAY+D,GAAG,CAAC,MAAQ,SAASwE,GAAyD,OAAjDA,EAAOE,kBAAkBF,EAAOC,iBAAwBhF,EAAIgb,aAAahb,EAAIqb,KAAK,IAAI,CAAErb,EAAI0a,cAAgB1a,EAAIqb,MAAQrb,EAAI8a,aAAc5a,EAAG,SAAS,CAACG,MAAM,CAAC,KAAO,QAAQmb,KAAK,SAAStb,EAAG,WAAW,CAACG,MAAM,CAAC,KAAO,QAAQmb,KAAK,SAASxb,EAAIQ,GAAG,OAAOR,EAAIU,GAAGV,EAAIxD,MAAM,OAAO,EAC/lB,GACsB,IIUpB,EACA,KACA,KACA,MAI8B,QCnBgO,GCSjPoJ,EAAAA,QAAAA,OAAW,CACtBpJ,KAAM,kBACNmE,WAAY,CACR8a,sBAAqB,GACrBpK,sBAAqB,KACrBqK,uBAAsBA,IAE1B1B,OAAQ,CACJoB,IAEJve,MAAO,CACH2U,gBAAiB,CACbzU,KAAMI,QACNC,SAAS,GAEbgM,MAAO,CACHrM,KAAM0U,MACNxU,UAAU,GAEdyU,eAAgB,CACZ3U,KAAMO,OACNF,QAAS,IAGjB8Q,MAAKA,KAGM,CACHC,WAHelD,KAIfmH,eAHmBxF,OAM3B9O,SAAU,CACNsQ,cACI,OAAO,KAAKC,YAAYC,MAC5B,EACAmE,UAAU,IAAA1D,EAEN,OAAI,KAAK2C,eAAiB,IACf,IAEY,QAAhB3C,EAAA,KAAKX,mBAAW,IAAAW,OAAA,EAAhBA,EAAkB0D,UAAW,EACxC,EACA/N,MAAM,IAAAgO,EAAAC,EAEF,QAAmB,QAAXD,EAAA,KAAKhE,cAAM,IAAAgE,GAAO,QAAPC,EAAXD,EAAaxK,aAAK,IAAAyK,OAAP,EAAXA,EAAoBjO,MAAO,KAAKhI,QAAQ,WAAY,KAChE,EACAif,gBACI,MAAMjZ,EAAQ,KAAKkZ,gBAAkB,KAAKC,eACpC,KAAKta,EAAE,QAAS,cAChB,KAAKA,EAAE,QAAS,gBACtB,MAAO,CACH,aAAcmB,EACdxF,QAAS,KAAK4e,cACdC,cAAe,KAAKF,eACpBtI,MAAO7Q,EAEf,EACAwX,gBACI,OAAO,KAAK9H,eAAevF,QAC/B,EACAiP,gBACI,OAAO,KAAK5B,cAActX,SAAW,KAAKwG,MAAMxG,MACpD,EACAgZ,iBACI,OAAqC,IAA9B,KAAK1B,cAActX,MAC9B,EACAiZ,iBACI,OAAQ,KAAKC,gBAAkB,KAAKF,cACxC,GAEJtc,QAAS,CACL+Z,eAAeR,GACX,MAAO,CACH,sBAAsB,EACtB,iCAAkCA,EAAO/D,KACzC,iCAAiC,EACjC,oBAAArY,OAAoB,KAAK2R,YAAYhQ,GAAE,KAAA3B,OAAIoc,EAAOza,MAAO,EAEjE,EACA4d,YAAYnP,GACR,GAAIA,EAAU,CACV,MAAMI,EAAY,KAAK7D,MAAMG,KAAIC,GAAQA,EAAKnM,OAAO0V,aACrDhS,EAAAA,MAAa,+BAAgC,CAAEkM,cAC/C,KAAKmF,eAAejF,aAAa,MACjC,KAAKiF,eAAepF,IAAIC,EAC5B,MAEIlM,EAAAA,MAAa,qBACb,KAAKqR,eAAehF,OAE5B,EACA7L,EAAGiX,EAAAA,sBC1FP,GAAU,CAAC,EAEf,GAAQ7Y,kBAAoB,IAC5B,GAAQC,cAAgB,IAElB,GAAQC,OAAS,SAAc,KAAM,QAE3C,GAAQC,OAAS,IACjB,GAAQC,mBAAqB,IAEhB,IAAI,KAAS,IAKJ,MAAW,aAAiB,YCPlD,UAXgB,OACd,IFTW,WAAkB,IAAIC,EAAIC,KAAKC,EAAGF,EAAIG,MAAMD,GAAgC,OAAtBF,EAAIG,MAAMqP,YAAmBtP,EAAG,KAAK,CAACA,EAAG,KAAK,CAACE,YAAY,+CAA+C,CAACF,EAAG,wBAAwBF,EAAIoF,GAAG,CAAC7E,GAAG,CAAC,iBAAiBP,EAAIgc,cAAc,wBAAwBhc,EAAI2b,eAAc,KAAS,GAAG3b,EAAIQ,GAAG,KAAOR,EAAI4b,eAAyH,CAAC1b,EAAG,KAAK,CAACE,YAAY,uEAAuEG,GAAG,CAAC,MAAQ,SAASwE,GAAyD,OAAjDA,EAAOE,kBAAkBF,EAAOC,iBAAwBhF,EAAIgb,aAAa,WAAW,IAAI,CAAC9a,EAAG,OAAO,CAACE,YAAY,yBAAyBJ,EAAIQ,GAAG,KAAKN,EAAG,wBAAwB,CAACG,MAAM,CAAC,KAAOL,EAAIuB,EAAE,QAAS,QAAQ,KAAO,eAAe,GAAGvB,EAAIQ,GAAG,KAAKN,EAAG,KAAK,CAACE,YAAY,4BAA4BJ,EAAIQ,GAAG,KAAMR,EAAIwR,gBAAiBtR,EAAG,KAAK,CAACE,YAAY,0CAA0CK,MAAM,CAAC,+BAAgCT,EAAIwR,kBAAkB,CAACtR,EAAG,wBAAwB,CAACG,MAAM,CAAC,KAAOL,EAAIuB,EAAE,QAAS,QAAQ,KAAO,WAAW,GAAGvB,EAAIuF,KAAKvF,EAAIQ,GAAG,KAAKR,EAAIqF,GAAIrF,EAAIyS,SAAS,SAASoG,GAAQ,OAAO3Y,EAAG,KAAK,CAACoF,IAAIuT,EAAOza,GAAGqC,MAAMT,EAAIqZ,eAAeR,IAAS,CAAIA,EAAO/D,KAAM5U,EAAG,wBAAwB,CAACG,MAAM,CAAC,KAAOwY,EAAOtF,MAAM,KAAOsF,EAAOza,MAAM8B,EAAG,OAAO,CAACF,EAAIQ,GAAG,aAAaR,EAAIU,GAAGmY,EAAOtF,OAAO,eAAe,EAAE,KAAhiCrT,EAAG,yBAAyB,CAACG,MAAM,CAAC,eAAeL,EAAIoO,YAAY,iBAAiBpO,EAAIka,kBAA68B,EACr3C,GACsB,IEUpB,EACA,KACA,WACA,MAI8B,QCnBiO,GtCOlPtU,EAAAA,QAAAA,OAAW,CACtBpJ,KAAM,mBACNmE,WAAY,CACRsb,gBAAe,MACfC,UAAS,GACTC,gBAAe,GACfC,gBAAeA,IAEnBpC,OAAQ,CACJC,IAEJpd,MAAO,CACHuR,YAAa,CACTrR,KAAMiE,OACN/D,UAAU,GAEdmM,MAAO,CACHrM,KAAM0U,MACNxU,UAAU,IAGlBW,KAAIA,KACO,CACHse,UAASA,KAGjBpe,SAAU,CACNqM,QACI,OAAO,KAAKf,MAAMsC,QAAOlC,GAAsB,SAAdA,EAAKzM,MAC1C,EACAsf,cACI,MAAMC,EAAQ,KAAKnS,MAAMvH,OACzB,OAAO2Z,EAAAA,EAAAA,IAAgB,QAAS,eAAgB,gBAAiBD,EAAO,CAAEA,SAC9E,EACAE,gBACI,MAAMF,EAAQ,KAAKlT,MAAMxG,OAAS,KAAKuH,MAAMvH,OAC7C,OAAO2Z,EAAAA,EAAAA,IAAgB,QAAS,iBAAkB,kBAAmBD,EAAO,CAAEA,SAClF,EACAvD,UACI,OAAOP,EAAAA,EAAAA,IAAU,QAAS,oCAAqC,KACnE,EACAhH,kBAEI,QAAI,KAAKE,eAAiB,MAGnB,KAAKtI,MAAMoB,MAAKhB,QAAiC0D,IAAzB1D,EAAK0F,WAAW8D,MACnD,GAEJtC,UAEI,MAAM+L,EAAQ,KAAKjM,IAAIkM,iBAAiB,+BACxCD,EAAM,GAAGE,aAAa,OAAQ,SAC9BF,EAAM,GAAGE,aAAa,OAAQ,QAClC,EACArd,QAAS,CACLsd,UAAUpT,GACCA,EAAKnM,OAEhBkE,EAAGiX,EAAAA,sBuCvDP,GAAU,CAAC,EAEf,GAAQ7Y,kBAAoB,IAC5B,GAAQC,cAAgB,IAElB,GAAQC,OAAS,SAAc,KAAM,QAE3C,GAAQC,OAAS,IACjB,GAAQC,mBAAqB,IAEhB,IAAI,KAAS,IAKJ,MAAW,aAAiB,YCPlD,UAXgB,OACd,IxCTW,WAAkB,IAAIC,EAAIC,KAAKC,EAAGF,EAAIG,MAAMD,GAAgC,OAAtBF,EAAIG,MAAMqP,YAAmBtP,EAAG,kBAAkB,CAACuY,IAAI,kBAAkBrY,YAAY,aAAaC,MAAM,CAAC,YAAY,SAAS,MAAQL,EAAIoJ,MAAM,YAAY,GAAG,cAAa,EAAK,aAAa,kBAAkB,WAAW,KAAK,aAAa,mBAAmB,WAAW,QAAQ,KAAO,SAASsG,YAAY1P,EAAI2P,GAAG,CAAC,CAACrK,IAAI,UAAUsK,GAAG,SAAA3H,GAAiC,IAAxB,KAAE4U,EAAI,OAAEvO,EAAM,MAAE9G,GAAOS,EAAE,MAAO,CAAC/H,EAAG,YAAY,CAACG,MAAM,CAAC,OAASiO,EAAO,MAAQ9G,EAAM,oBAAoBxH,EAAIwR,gBAAgB,mBAAmBxR,EAAI0R,eAAe,MAAQ1R,EAAIoJ,MAAM,OAASyT,KAAQ,GAAG,CAACvX,IAAI,SAASsK,GAAG,WAAW,MAAO,CAAC1P,EAAG,UAAU,CAACE,YAAY,mBAAmB,CAACJ,EAAIQ,GAAG,WAAWR,EAAIU,GAAGV,EAAIoO,YAAY0O,SAAW,IAAI,WAAW9c,EAAIU,GAAGV,EAAIuB,EAAE,QAAS,2HAA2H,YAAYvB,EAAIQ,GAAG,KAAKN,EAAG,kBAAkB,CAACG,MAAM,CAAC,mBAAmBL,EAAI0R,eAAe,oBAAoB1R,EAAIwR,gBAAgB,MAAQxR,EAAIoJ,SAAS,EAAEyG,OAAM,GAAM,CAACvK,IAAI,QAAQsK,GAAG,WAAW,MAAO,CAAC1P,EAAG,kBAAkB,CAACG,MAAM,CAAC,mBAAmBL,EAAI0R,eAAe,oBAAoB1R,EAAIwR,gBAAgB,MAAQxR,EAAIoJ,MAAM,QAAUpJ,EAAI+Y,WAAW,EAAElJ,OAAM,MAC5uC,GACsB,IwCUpB,EACA,KACA,WACA,MAI8B,+bCjBhC,eAGIxH,cAAc0U,GAAA,cAFL,IAAEA,GAAA,oBACI,MAEXhc,EAAAA,MAAa,iCACjB,CACAwG,SAAS8B,GACL,IACI2T,GAAkB3T,GAClB4T,GAAmB5T,EAAMpJ,KAAKid,OAClC,CACA,MAAO3I,GAIH,MAHIA,aAAa5R,OACb5B,EAAAA,MAAawT,EAAE4I,QAAS,CAAE9T,SAExBkL,CACV,CACIlL,EAAK+T,QACLrc,EAAAA,KAAY,+CAEZsI,EAAKrC,YACLqC,EAAK+T,QAAS,GAElBnd,KAAKid,OAAOhU,KAAKG,EACrB,CACAgU,OAAOjf,GACH,MAAMoJ,EAAQvH,KAAKid,OAAOI,WAAUjU,GAAQA,EAAKjL,KAAOA,KACzC,IAAXoJ,GACAvH,KAAKid,OAAOK,OAAO/V,EAAO,EAElC,CACIgW,YACA,OAAOvd,KAAKid,MAChB,CACAO,UAAUpU,GACNpJ,KAAKyd,aAAerU,CACxB,CACIiF,aACA,OAAOrO,KAAKyd,YAChB,GAMET,GAAqB,SAAU5T,EAAMmU,GACvC,GAAIA,EAAM7b,MAAKsH,GAAUA,EAAO7K,KAAOiL,EAAKjL,KACxC,MAAM,IAAIuE,MAAM,iBAADlG,OAAkB4M,EAAKjL,GAAE,2BAE5C,OAAO,CACX,EAKM4e,GAAoB,SAAU3T,GAChC,IAAKA,EAAKjL,IAAyB,iBAAZiL,EAAKjL,GACxB,MAAM,IAAIuE,MAAM,kDAEpB,IAAK0G,EAAK7M,MAA6B,iBAAd6M,EAAK7M,KAC1B,MAAM,IAAImG,MAAM,oDAMpB,IAAK0G,EAAK+T,OAAQ,CACd,IAAK/T,EAAKsU,aAA2C,mBAArBtU,EAAKsU,YACjC,MAAM,IAAIhb,MAAM,6DAEpB,IAAK0G,EAAKuU,MAA6B,iBAAdvU,EAAKuU,QAAsBC,EAAAA,GAAAA,GAAMxU,EAAKuU,MAC3D,MAAM,IAAIjb,MAAM,6DAExB,CACA,KAAM,UAAW0G,IAA+B,iBAAfA,EAAKT,MAClC,MAAM,IAAIjG,MAAM,qDAMpB,GAHI0G,EAAKoJ,SACLpJ,EAAKoJ,QAAQ1T,QAAQ+e,IAErBzU,EAAK0U,WAAuC,mBAAnB1U,EAAK0U,UAC9B,MAAM,IAAIpb,MAAM,2CAEpB,GAAI0G,EAAK2U,QAAiC,iBAAhB3U,EAAK2U,OAC3B,MAAM,IAAIrb,MAAM,sCAEpB,GAAI,WAAY0G,GAA+B,kBAAhBA,EAAK4U,OAChC,MAAM,IAAItb,MAAM,uCAEpB,GAAI,aAAc0G,GAAiC,kBAAlBA,EAAK6U,SAClC,MAAM,IAAIvb,MAAM,yCAEpB,GAAI0G,EAAKwR,gBAAiD,iBAAxBxR,EAAKwR,eACnC,MAAM,IAAIlY,MAAM,8CAEpB,OAAO,CACX,EAKMmb,GAAgB,SAAUjF,GAC5B,IAAKA,EAAOza,IAA2B,iBAAdya,EAAOza,GAC5B,MAAM,IAAIuE,MAAM,2BAEpB,IAAKkW,EAAOtF,OAAiC,iBAAjBsF,EAAOtF,MAC/B,MAAM,IAAI5Q,MAAM,8BAEpB,IAAKkW,EAAOzI,QAAmC,mBAAlByI,EAAOzI,OAChC,MAAM,IAAIzN,MAAM,iCAGpB,GAAIkW,EAAO/D,MAA+B,mBAAhB+D,EAAO/D,KAC7B,MAAM,IAAInS,MAAM,0CAEpB,GAAIkW,EAAOE,SAAqC,mBAAnBF,EAAOE,QAChC,MAAM,IAAIpW,MAAM,qCAEpB,OAAO,CACX,EC1H0P,GCmB3OiD,EAAAA,QAAAA,OAAW,CACtBpJ,KAAM,YACNmE,WAAY,CACRwd,YAAW,GACXC,iBAAgB,GAChBC,aAAY,KACZlD,SAAQ,KACRva,eAAc,IACd0Q,cAAa,KACbhI,SAAQA,GAAAA,GAEZ0Q,OAAQ,CACJoB,IAEJlN,QACI,MAAM3B,EAAaD,KAInB,MAAO,CACH6B,WAJelD,KAKfsB,aACA6F,eALmBxF,KAMnBkB,gBALoBR,KAO5B,EACA1P,KAAIA,KACO,CACHqD,SAAS,EACTqd,QAAS,OAGjBxgB,SAAU,CAENsQ,cACI,OAAO,KAAKC,YAAYC,QACjB,KAAKD,YAAYmP,MAAM7b,MAAK0H,GAAoB,UAAZA,EAAKjL,IACpD,EAMAsG,MAAM,IAAAgO,EAAAC,EAEF,QAAmB,QAAXD,EAAA,KAAKhE,cAAM,IAAAgE,GAAO,QAAPC,EAAXD,EAAaxK,aAAK,IAAAyK,OAAP,EAAXA,EAAoBjO,MAAO,KAAKhI,QAAQ,WAAY,KAChE,EAMAsc,gBAAgB,IAAAjK,EACZ,GAAqB,QAAjBA,EAAC,KAAKX,mBAAW,IAAAW,IAAhBA,EAAkB3Q,GACnB,OAEJ,GAAiB,MAAb,KAAKsG,IACL,OAAO,KAAKyJ,WAAWxC,QAAQ,KAAKyC,YAAYhQ,IAEpD,MAAM6Q,EAAS,KAAK1C,WAAWE,QAAQ,KAAK2B,YAAYhQ,GAAI,KAAKsG,KACjE,OAAO,KAAKyJ,WAAW5C,QAAQ0D,EACnC,EAMAsP,cAAc,IAAAtF,EAAAuF,EACV,IAAK,KAAKpQ,YACN,MAAO,GAEX,MAAMqQ,IAAgC,QAAhBxF,EAAA,KAAK7K,mBAAW,IAAA6K,OAAA,EAAhBA,EAAkBxG,UAAW,IAC9C9Q,MAAKkX,GAAUA,EAAOza,KAAO,KAAKsc,cAEvC,GAAI+D,SAAAA,EAAc3J,MAAqC,mBAAtB2J,EAAa3J,KAAqB,KAAAqE,EAC/D,MAAMmB,EAAU,MAAuB,QAAlBnB,EAAA,KAAKH,qBAAa,IAAAG,OAAA,EAAlBA,EAAoBuF,YAAa,IAAInV,IAAI,KAAKgC,SAASG,QAAO0M,GAAQA,KACtFtD,KAAK2J,EAAa3J,MACvB,OAAO,KAAKgG,aAAeR,EAAUA,EAAQqE,SACjD,CACA,OAAOC,EAAAA,GAAAA,GAAQ,MAAuB,QAAlBJ,EAAA,KAAKxF,qBAAa,IAAAwF,OAAA,EAAlBA,EAAoBE,YAAa,IAAInV,IAAI,KAAKgC,SAASG,QAAO0M,GAAQA,KAAQ,IAEtE,aAArB,KAAKsC,YAA6B,CAACmE,GAAgB,WAAXA,EAAE9hB,MAAqB,GAElE8hB,GAAKA,EAAE,KAAKnE,aAEZmE,GAAKA,EAAE/hB,UACR,KAAKge,aAAe,CAAC,MAAO,MAAO,OAAS,CAAC,OAAQ,OAAQ,QACpE,EAIAgE,aACI,OAAmC,IAA5B,KAAKP,YAAY3b,MAC5B,EAMAmc,eACI,YAA8B7R,IAAvB,KAAK8L,gBACJ,KAAK8F,YACN,KAAK7d,OAChB,EAIA+d,gBACI,MAAMta,EAAM,KAAKA,IAAIzG,MAAM,KAAKC,MAAM,GAAI,GAAGC,KAAK,MAAQ,IAC1D,MAAO,IAAK,KAAKuQ,OAAQxG,MAAO,CAAExD,OACtC,GAEJ6L,MAAO,CACHnC,YAAY6Q,EAASC,IACbD,aAAO,EAAPA,EAAS7gB,OAAO8gB,aAAO,EAAPA,EAAS9gB,MAG7B2C,EAAAA,MAAa,eAAgB,CAAEke,UAASC,YACxC,KAAK9M,eAAehF,QACpB,KAAK+R,eACT,EACAza,IAAI0a,EAAQC,GAAQ,IAAAC,EAAAC,EAChBxe,EAAAA,MAAa,oBAAqB,CAAEqe,SAAQC,WAE5C,KAAKjN,eAAehF,QACpB,KAAK+R,eAES,QAAdG,EAAI,KAAKE,aAAK,IAAAF,GAAkB,QAAlBC,EAAVD,EAAYG,wBAAgB,IAAAF,GAA5BA,EAA8B/O,MAC9B,KAAKgP,MAAMC,iBAAiBjP,IAAIkP,UAAY,EAEpD,GAEJpgB,QAAS,CACL,qBAAqB,IAAAqgB,EAAAC,EACjB,GAAoB,QAApBD,EAAI,KAAKvR,mBAAW,IAAAuR,GAAhBA,EAAkBvC,OAClB,OAEJ,KAAKnc,SAAU,EACf,MAAMyD,EAAM,KAAKA,IACX0J,EAAc,KAAKA,YAEW,mBAAb,QAAnBwR,EAAO,KAAKtB,eAAO,IAAAsB,OAAA,EAAZA,EAAcvI,UACrB,KAAKiH,QAAQjH,SACbtW,EAAAA,MAAa,qCAIjB,KAAKud,QAAUlQ,EAAYuP,YAAYjZ,GACvC,IACI,MAAM,OAAEmb,EAAM,SAAEC,SAAmB,KAAKxB,QACxCvd,EAAAA,MAAa,mBAAoB,CAAE2D,MAAKmb,SAAQC,aAEhD,KAAK3R,WAAWrC,YAAYgU,GAE5BD,EAAOnB,UAAYoB,EAASvW,KAAIC,GAAQA,EAAKnM,SAEjC,MAARqH,EACA,KAAKyJ,WAAWjC,QAAQ,CAAEN,QAASwC,EAAYhQ,GAAIsM,KAAMmV,IAIzDA,EAAOxiB,QACP,KAAK8Q,WAAWrC,YAAY,CAAC+T,IAC7B,KAAKtT,WAAWG,QAAQ,CAAEd,QAASwC,EAAYhQ,GAAIf,OAAQwiB,EAAOxiB,OAAQd,KAAMmI,KAIhF3D,EAAAA,MAAa,+BAAgC,CAAE2D,MAAKmb,SAAQzR,gBAGhD0R,EAASpU,QAAOlC,GAAsB,WAAdA,EAAKzM,OACrCgC,SAAQyK,IACZ,KAAK+C,WAAWG,QAAQ,CAAEd,QAASwC,EAAYhQ,GAAIf,OAAQmM,EAAKnM,OAAQd,MAAM4B,EAAAA,EAAAA,MAAKuG,EAAK8E,EAAK1M,WAAY,GAEjH,CACA,MAAO8H,GACH7D,EAAAA,MAAa,+BAAgC,CAAE6D,SACnD,CAAC,QAEG,KAAK3D,SAAU,CACnB,CACJ,EAOAsK,QAAQ0D,GACJ,OAAO,KAAKd,WAAW5C,QAAQ0D,EACnC,EACA1N,EAAGiX,EAAAA,qBCvMP,GAAU,CAAC,EAEf,GAAQ7Y,kBAAoB,IAC5B,GAAQC,cAAgB,IAElB,GAAQC,OAAS,SAAc,KAAM,QAE3C,GAAQC,OAAS,IACjB,GAAQC,mBAAqB,IAEhB,IAAI,KAAS,IAKJ,MAAW,aAAiB,YCPlD,UAXgB,OACd,IFTW,WAAiB,IAAA+Y,EAAAiH,EAAK/f,EAAIC,KAAKC,EAAGF,EAAIG,MAAMD,GAAgC,OAAtBF,EAAIG,MAAMqP,YAAmBtP,EAAG,eAAe,CAAC8f,WAAW,CAAC,CAACxjB,KAAK,OAAOyjB,QAAQ,SAASthB,QAAuB,QAAhBma,EAAC9Y,EAAIoO,mBAAW,IAAA0K,GAAfA,EAAiBsE,QAAQ8C,WAAW,yBAAyBzf,MAAM,CAAC,sBAAsC,QAAjBsf,EAAE/f,EAAIoO,mBAAW,IAAA2R,OAAA,EAAfA,EAAiB3C,QAAQ/c,MAAM,CAAC,wBAAwB,KAAK,CAACH,EAAG,MAAM,CAACE,YAAY,sBAAsB,CAACF,EAAG,cAAc,CAACG,MAAM,CAAC,KAAOL,EAAI0E,KAAKnE,GAAG,CAAC,OAASP,EAAImf,gBAAgBnf,EAAIQ,GAAG,KAAMR,EAAI+e,aAAc7e,EAAG,gBAAgB,CAACE,YAAY,6BAA6BJ,EAAIuF,MAAM,GAAGvF,EAAIQ,GAAG,KAAMR,EAAIiB,UAAYjB,EAAI+e,aAAc7e,EAAG,gBAAgB,CAACE,YAAY,2BAA2BC,MAAM,CAAC,KAAO,GAAG,MAAQL,EAAIuB,EAAE,QAAS,8BAA+BvB,EAAIiB,SAAWjB,EAAI8e,WAAY5e,EAAG,iBAAiB,CAACG,MAAM,CAAC,MAAQL,EAAIuB,EAAE,QAAS,oBAAoB,YAAcvB,EAAIuB,EAAE,QAAS,6CAA6C,8BAA8B,IAAImO,YAAY1P,EAAI2P,GAAG,CAAC,CAACrK,IAAI,SAASsK,GAAG,WAAW,MAAO,CAAc,MAAZ5P,EAAI0E,IAAaxE,EAAG,WAAW,CAACG,MAAM,CAAC,aAAa,0CAA0C,KAAO,UAAU,GAAKL,EAAIgf,gBAAgB,CAAChf,EAAIQ,GAAG,aAAaR,EAAIU,GAAGV,EAAIuB,EAAE,QAAS,YAAY,cAAcvB,EAAIuF,KAAK,EAAEsK,OAAM,GAAM,CAACvK,IAAI,OAAOsK,GAAG,WAAW,MAAO,CAAC1P,EAAG,YAAY,EAAE2P,OAAM,OAAU3P,EAAG,mBAAmB,CAACuY,IAAI,mBAAmBpY,MAAM,CAAC,eAAeL,EAAIoO,YAAY,MAAQpO,EAAIue,gBAAgB,EACj3C,GACsB,IEUpB,EACA,KACA,WACA,MAI8B,QCnBhC,qFCAA,mDCmCA,MCnC4L,GDmC5L,CACA/hB,KAAA,kBAEAmE,WAAA,CACAwf,SAAA,KACAC,oBAAA,KACAC,cAAAA,MAGAziB,KAAAA,KACA,CACA0iB,qBAAA,EACAC,cAAAra,EAAAA,EAAAA,GAAA,+BAIApI,SAAA,CACA0iB,oBAAA,IAAAC,EAAAC,EAAAC,EACA,MAAAC,GAAA1N,EAAAA,EAAAA,IAAA,QAAAuN,EAAA,KAAAF,oBAAA,IAAAE,OAAA,EAAAA,EAAAI,MACAC,GAAA5N,EAAAA,EAAAA,IAAA,QAAAwN,EAAA,KAAAH,oBAAA,IAAAG,OAAA,EAAAA,EAAAK,OAGA,eAAAJ,EAAA,KAAAJ,oBAAA,IAAAI,OAAA,EAAAA,EAAAI,OAAA,EACA,KAAAxf,EAAA,gCAAAqf,kBAGA,KAAArf,EAAA,kCACAsf,KAAAD,EACAG,MAAAD,GAEA,EACAE,sBACA,YAAAT,aAAAU,SAIA,KAAA1f,EAAA,gCAAAgf,cAHA,EAIA,GAGAW,cAKAC,YAAA,KAAAC,2BAAA,MAEApZ,EAAAA,EAAAA,IAAA,0BAAAoZ,6BACApZ,EAAAA,EAAAA,IAAA,0BAAAoZ,6BACApZ,EAAAA,EAAAA,IAAA,wBAAAoZ,6BACApZ,EAAAA,EAAAA,IAAA,0BAAAoZ,2BACA,EAEA9hB,QAAA,CAEA+hB,4BAAAlL,EAAAA,GAAAA,GAAA,cAAAjE,GACA,KAAAoP,mBAAApP,EACA,IAEAkP,4BAAAG,EAAAA,GAAAA,GAAA,cAAArP,GACA,KAAAoP,mBAAApP,EACA,IAQA,+BAAAA,EAAA/M,UAAAvC,OAAA,QAAAsK,IAAA/H,UAAA,GAAAA,UAAA,QACA,SAAAmb,oBAAA,CAIA,KAAAA,qBAAA,EACA,QAAAkB,EACA,MAAA7Z,QAAAtF,EAAAA,QAAAA,KAAA7D,EAAAA,EAAAA,aAAA,6BACA,GAAAmJ,SAAA,QAAA6Z,EAAA7Z,EAAA/J,YAAA,IAAA4jB,IAAAA,EAAA5jB,KACA,UAAA+E,MAAA,yBAEA,KAAA4d,aAAA5Y,EAAA/J,KAAAA,IACA,OAAAgH,GACA7D,EAAAA,MAAA,mCAAA6D,UAEAsN,IACApN,EAAAA,EAAAA,IAAAvD,EAAA,2CAEA,SACA,KAAA+e,qBAAA,CACA,CAjBA,CAkBA,EAEA/e,EAAAiX,EAAAA,qBEpHI,GAAU,CAAC,EAEf,GAAQ7Y,kBAAoB,IAC5B,GAAQC,cAAgB,IAElB,GAAQC,OAAS,SAAc,KAAM,QAE3C,GAAQC,OAAS,IACjB,GAAQC,mBAAqB,IAEhB,IAAI,KAAS,IAKJ,MAAW,aAAiB,YCPlD,UAXgB,OACd,IJTW,WAAkB,IAAIC,EAAIC,KAAKC,EAAGF,EAAIG,MAAMD,GAAG,OAAQF,EAAIugB,aAAcrgB,EAAG,sBAAsB,CAACE,YAAY,uCAAuCK,MAAM,CAAE,sDAAuDT,EAAIugB,aAAaQ,OAAS,GAAG1gB,MAAM,CAAC,aAAaL,EAAIuB,EAAE,QAAS,wBAAwB,QAAUvB,EAAIsgB,oBAAoB,KAAOtgB,EAAIwgB,kBAAkB,MAAQxgB,EAAIghB,oBAAoB,0CAA0C,IAAIzgB,GAAG,CAAC,MAAQ,SAASwE,GAAyD,OAAjDA,EAAOE,kBAAkBF,EAAOC,iBAAwBhF,EAAIqhB,2BAA2Bnc,MAAM,KAAMC,UAAU,IAAI,CAACjF,EAAG,WAAW,CAACG,MAAM,CAAC,KAAO,OAAO,KAAO,IAAImb,KAAK,SAASxb,EAAIQ,GAAG,KAAMR,EAAIugB,aAAaQ,OAAS,EAAG7gB,EAAG,gBAAgB,CAACG,MAAM,CAAC,KAAO,QAAQ,MAAQL,EAAIugB,aAAaU,SAAW,GAAG,MAAQhf,KAAK+V,IAAIhY,EAAIugB,aAAaU,SAAU,MAAMzF,KAAK,UAAUxb,EAAIuF,MAAM,GAAGvF,EAAIuF,IACh2B,GACsB,IIUpB,EACA,KACA,WACA,MAI8B,QCnBhC,qFC0BA,MC1BoL,GD0BpL,CACA/I,KAAA,UACAK,MAAA,CACA4kB,GAAA,CACA1kB,KAAAsT,SACApT,UAAA,IAGAyT,UACA,KAAAF,IAAAvK,YAAA,KAAAwb,KACA,GElBA,IAXgB,OACd,ICRW,WAA+C,OAAOvhB,EAA5BD,KAAYE,MAAMD,IAAa,MACtE,GACsB,IDSpB,EACA,KACA,KACA,MAI8B,QE4EhC,IACA1D,KAAA,WACAmE,WAAA,CACA+gB,UAAA,KACAC,oBAAA,KACAC,qBAAA,KACAvQ,sBAAA,KACAwQ,aAAA,KACAC,QAAAA,IAGAjlB,MAAA,CACA6K,KAAA,CACA3K,KAAAI,QACAC,SAAA,IAIA8Q,MAAAA,KAEA,CACAiC,gBAFAD,OAMAtS,OAAA,IAAAyM,EAAAC,EAAAyX,EAAAC,EACA,OAEAC,UAAA,QAAA5X,EAAA7D,OAAAtK,WAAA,IAAAmO,GAAA,QAAAC,EAAAD,EAAAlO,aAAA,IAAAmO,GAAA,QAAAyX,EAAAzX,EAAA4X,gBAAA,IAAAH,OAAA,EAAAA,EAAAE,WAAA,GAGAE,WAAAC,EAAAA,EAAAA,mBAAA,aAAAnjB,mBAAA,QAAA+iB,GAAAzjB,EAAAA,EAAAA,aAAA,IAAAyjB,OAAA,EAAAA,EAAAK,MACAC,WAAA,iEACAC,gBAAA/jB,EAAAA,EAAAA,aAAA,sDACAgkB,iBAAA,EAEA,EAEA1kB,SAAA,CACAiS,aACA,YAAAI,gBAAAJ,UACA,GAGAmR,cAEA,KAAAe,SAAAljB,SAAA0jB,GAAAA,EAAA/a,QACA,EAEA4O,gBAEA,KAAA2L,SAAAljB,SAAA0jB,GAAAA,EAAA3f,SACA,EAEAxD,QAAA,CACAojB,UACA,KAAAljB,MAAA,QACA,EAEAmjB,UAAArd,EAAA3G,GACA,KAAAwR,gBAAAzC,OAAApI,EAAA3G,EACA,EAEA,oBACAF,SAAA+T,cAAA,0BAAAoQ,SAEAC,UAAAC,iBAMAD,UAAAC,UAAAC,UAAA,KAAAZ,WACA,KAAAK,iBAAA,GACAjL,EAAAA,EAAAA,IAAAhW,EAAA,2CACAyhB,YAAA,KACA,KAAAR,iBAAA,IACA,OATA1d,EAAAA,EAAAA,IAAAvD,EAAA,sCAUA,EAEAA,EAAAiX,EAAAA,KC9KqL,sBCWjL,GAAU,CAAC,EAEf,GAAQ7Y,kBAAoB,IAC5B,GAAQC,cAAgB,IAElB,GAAQC,OAAS,SAAc,KAAM,QAE3C,GAAQC,OAAS,IACjB,GAAQC,mBAAqB,IAEhB,IAAI,KAAS,IAKJ,MAAW,aAAiB,YCPlD,UAXgB,OACd,IRTW,WAAkB,IAAIC,EAAIC,KAAKC,EAAGF,EAAIG,MAAMD,GAAG,OAAOA,EAAG,sBAAsB,CAACG,MAAM,CAAC,KAAOL,EAAI0H,KAAK,mBAAkB,EAAK,MAAQ1H,EAAIuB,EAAE,QAAS,mBAAmBhB,GAAG,CAAC,cAAcP,EAAI0iB,UAAU,CAACxiB,EAAG,uBAAuB,CAACG,MAAM,CAAC,GAAK,WAAW,MAAQL,EAAIuB,EAAE,QAAS,oBAAoB,CAACrB,EAAG,wBAAwB,CAACG,MAAM,CAAC,QAAUL,EAAI+P,WAAWC,aAAazP,GAAG,CAAC,iBAAiB,SAASwE,GAAQ,OAAO/E,EAAI2iB,UAAU,cAAe5d,EAAO,IAAI,CAAC/E,EAAIQ,GAAG,WAAWR,EAAIU,GAAGV,EAAIuB,EAAE,QAAS,sBAAsB,YAAYvB,EAAIQ,GAAG,KAAKN,EAAG,wBAAwB,CAACG,MAAM,CAAC,QAAUL,EAAI+P,WAAWE,qBAAqB1P,GAAG,CAAC,iBAAiB,SAASwE,GAAQ,OAAO/E,EAAI2iB,UAAU,sBAAuB5d,EAAO,IAAI,CAAC/E,EAAIQ,GAAG,WAAWR,EAAIU,GAAGV,EAAIuB,EAAE,QAAS,wBAAwB,aAAa,GAAGvB,EAAIQ,GAAG,KAA8B,IAAxBR,EAAIiiB,SAASrf,OAAc1C,EAAG,uBAAuB,CAACG,MAAM,CAAC,GAAK,gBAAgB,MAAQL,EAAIuB,EAAE,QAAS,yBAAyB,CAACvB,EAAIqF,GAAIrF,EAAIiiB,UAAU,SAASQ,GAAS,MAAO,CAACviB,EAAG,UAAU,CAACoF,IAAImd,EAAQjmB,KAAK6D,MAAM,CAAC,GAAKoiB,EAAQhB,MAAM,KAAI,GAAGzhB,EAAIuF,KAAKvF,EAAIQ,GAAG,KAAKN,EAAG,uBAAuB,CAACG,MAAM,CAAC,GAAK,SAAS,MAAQL,EAAIuB,EAAE,QAAS,YAAY,CAACrB,EAAG,eAAe,CAACG,MAAM,CAAC,GAAK,mBAAmB,wBAAuB,EAAK,QAAUL,EAAIwiB,gBAAgB,wBAAwBxiB,EAAIuB,EAAE,QAAS,qBAAqB,MAAQvB,EAAImiB,UAAU,SAAW,WAAW,KAAO,OAAO5hB,GAAG,CAAC,MAAQ,SAASwE,GAAQ,OAAOA,EAAO6U,OAAOgJ,QAAQ,EAAE,wBAAwB5iB,EAAIijB,aAAavT,YAAY1P,EAAI2P,GAAG,CAAC,CAACrK,IAAI,uBAAuBsK,GAAG,WAAW,MAAO,CAAC1P,EAAG,YAAY,CAACG,MAAM,CAAC,KAAO,MAAM,EAAEwP,OAAM,OAAU7P,EAAIQ,GAAG,KAAKN,EAAG,KAAK,CAACA,EAAG,IAAI,CAACE,YAAY,eAAeC,MAAM,CAAC,KAAOL,EAAIsiB,WAAW,OAAS,SAAS,IAAM,wBAAwB,CAACtiB,EAAIQ,GAAG,aAAaR,EAAIU,GAAGV,EAAIuB,EAAE,QAAS,qDAAqD,kBAAkBvB,EAAIQ,GAAG,KAAKN,EAAG,MAAMF,EAAIQ,GAAG,KAAKN,EAAG,KAAK,CAACA,EAAG,IAAI,CAACE,YAAY,eAAeC,MAAM,CAAC,KAAOL,EAAIuiB,iBAAiB,CAACviB,EAAIQ,GAAG,aAAaR,EAAIU,GAAGV,EAAIuB,EAAE,QAAS,0FAA0F,mBAAmB,IAAI,EACvlE,GACsB,IQUpB,EACA,KACA,WACA,MAI8B,QCsEhC,IACA/E,KAAA,aAEAmE,WAAA,CACAuiB,IAAA,WACAC,gBAAA,GACAC,gBAAA,KACAhD,oBAAA,KACAiD,iBAAA,KACAC,cAAAA,IAGAzmB,MAAA,CAEA0mB,WAAA,CACAxmB,KAAAwmB,GACAtmB,UAAA,IAIAiR,MAAAA,KAEA,CACAJ,gBAFAR,OAMA1P,KAAAA,KACA,CACA4lB,gBAAA,IAIA1lB,SAAA,CACA2lB,gBAAA,IAAA/Q,EAAAgR,EACA,eAAAhR,EAAA,KAAAhE,cAAA,IAAAgE,GAAA,QAAAgR,EAAAhR,EAAAiR,cAAA,IAAAD,OAAA,EAAAA,EAAAra,OAAA,OACA,EAGA+E,cACA,YAAAoP,MAAA7b,MAAA0H,GAAAA,EAAAjL,KAAA,KAAAqlB,eACA,EAGAjG,QACA,YAAA+F,WAAA/F,KACA,EAGAoG,cACA,YAAApG,MAEA9R,QAAArC,IAAAA,EAAA2U,SAEAlJ,MAAA,CAAAC,EAAAC,IACAD,EAAAnM,MAAAoM,EAAApM,OAEA,EAGAib,aACA,YAAArG,MAEA9R,QAAArC,KAAAA,EAAA2U,SAEAjS,QAAA,CAAA+X,EAAAza,KACAya,EAAAza,EAAA2U,QAAA,IAAA8F,EAAAza,EAAA2U,SAAA,GAAA3U,GAEAya,EAAAza,EAAA2U,QAAAlJ,MAAA,CAAAC,EAAAC,IACAD,EAAAnM,MAAAoM,EAAApM,QAEAkb,IACA,GACA,GAGAvT,MAAA,CACAnC,YAAA/E,EAAA6V,IAIA7V,aAAA,EAAAA,EAAAjL,OAAA8gB,aAAA,EAAAA,EAAA9gB,MAIA,KAAAmlB,WAAA9F,UAAApU,GACAtI,EAAAA,MAAA,sBAAA3C,GAAAiL,EAAAjL,GAAAiL,SAEA,KAAA0a,SAAA1a,EAAA6V,GACA,GAGAgC,cACA,KAAA9S,cACArN,EAAAA,MAAA,8CAAAsI,KAAA,KAAA+E,cACA,KAAA2V,SAAA,KAAA3V,eAGApG,EAAAA,EAAAA,IAAA,uCAAAgc,4BAGAhc,EAAAA,EAAAA,IAAA,sCACAjH,EAAAA,MAAA,mCAAAqN,cACA,KAAA2V,SAAA,KAAA3V,YAAA,GAEA,EAEA9O,QAAA,CAKAykB,SAAA1a,EAAA6V,GAAA,IAAA9U,EAAAC,EAAAC,EAAA2Z,EAAAC,EAIA,GAFA,QAAA9Z,EAAA5D,cAAA,IAAA4D,GAAA,QAAAC,EAAAD,EAAAlO,WAAA,IAAAmO,GAAA,QAAAC,EAAAD,EAAAlO,aAAA,IAAAmO,GAAA,QAAA2Z,EAAA3Z,EAAAC,eAAA,IAAA0Z,GAAA,QAAAC,EAAAD,EAAAnhB,aAAA,IAAAohB,GAAAA,EAAAlZ,KAAAiZ,GAEA5a,SAAAA,EAAA+T,OAAA,CACA,MAAA+G,EAAA1lB,SAAA+T,cAAA,kCAAApE,YAAAhQ,GAAA,kBACAK,SAAAie,iBAAA,+BAAA3d,SAAA0iB,IACAA,EAAA2C,UAAAC,IAAA,aAEAF,EAAAC,UAAA/G,OAAA,UAGA,UAAA3Y,EAAA,KAAAvF,GAAAmlB,KAAAC,QAAAC,gBACAb,EAAA,CAAAc,OAAApb,EAAAjL,GAAAsG,OAEA3D,EAAAA,MAAA,qCAAA4iB,GACAnd,OAAAke,OAAAP,GAAAQ,QAAA,IAAAne,OAAAke,OAAAE,MAAA,OAAAjB,IACAnd,OAAAke,OAAAP,GAAAQ,QAAA,IAAAne,OAAAke,OAAAE,MAAA,aAAAjB,GACA,CAEA,KAAAJ,WAAA9F,UAAApU,GC/LO,SAAwBwb,GAC9B,MAAMC,EAAYrmB,SAASC,eAAe,wBACtComB,IACHA,EAAUC,YAAcF,EAE1B,CD2LAG,CAAA3b,EAAA7M,OACAsN,EAAAA,EAAAA,IAAA,2BAAAT,EACA,EAQA2a,4BAAA,OAAA5lB,GAAA+G,UAAAvC,OAAA,QAAAsK,IAAA/H,UAAA,GAAAA,UAAA,IAAA/G,GAAA,SACA,MAAAiL,EAAA,KAAAka,WAAA/F,MAAA7b,MAAA0H,GAAAA,EAAAjL,KAAAA,IACAiL,GAAAA,EAAA+T,QAAA/T,EAAAjL,KAAA,KAAAgQ,YAAAhQ,KAGA,KAAA6mB,QAAAvoB,QAAA,SAAAgS,OAAAiV,OAAA,CAAAta,KAAAA,EAAAjL,MACA,KAAAmlB,WAAA9F,UAAApU,GACA,KAAA0a,SAAA1a,GAEA,EAQA6b,eAAA7b,GAEA,MAAA8b,EAAA,KAAAA,WAAA9b,GAEAA,EAAA6U,UAAAiH,EACA,KAAArX,gBAAAJ,OAAArE,EAAAjL,GAAA,YAAA+mB,EACA,EAQAA,WAAA9b,GAAA,IAAA+b,EACA,gCAAAA,EAAA,KAAAtX,gBAAAP,UAAAlE,EAAAjL,WAAA,IAAAgnB,OAAA,EAAAA,EAAAlH,WACA,SAAApQ,gBAAAP,UAAAlE,EAAAjL,IAAA8f,UACA,IAAA7U,EAAA6U,QACA,EAOAmH,qBAAAhc,GACA,GAAAA,EAAAsa,OAAA,CACA,UAAAjf,EAAA,OAAArH,GAAAgM,EAAAsa,OACA,OAAAnnB,KAAA,WAAAmnB,OAAAta,EAAAsa,OAAAzb,MAAA,CAAAxD,MAAArH,UACA,CACA,OAAAb,KAAA,WAAAmnB,OAAA,CAAAta,KAAAA,EAAAjL,IACA,EAKAknB,eACA,KAAA9B,gBAAA,CACA,EAKA+B,kBACA,KAAA/B,gBAAA,CACA,EAEAjiB,EAAAiX,EAAAA,KExSuL,sBCWnL,GAAU,CAAC,EAEf,GAAQ7Y,kBAAoB,IAC5B,GAAQC,cAAgB,IAElB,GAAQC,OAAS,SAAc,KAAM,QAE3C,GAAQC,OAAS,IACjB,GAAQC,mBAAqB,IAEhB,IAAI,KAAS,IAKJ,MAAW,aAAiB,YCPlD,UAXgB,OACd,InBTW,WAAkB,IAAIC,EAAIC,KAAKC,EAAGF,EAAIG,MAAMD,GAAG,OAAOA,EAAG,kBAAkB,CAACG,MAAM,CAAC,2BAA2B,IAAIqP,YAAY1P,EAAI2P,GAAG,CAAC,CAACrK,IAAI,OAAOsK,GAAG,WAAW,OAAO5P,EAAIqF,GAAIrF,EAAI4jB,aAAa,SAASva,GAAM,OAAOnJ,EAAG,sBAAsB,CAACoF,IAAI+D,EAAKjL,GAAGiC,MAAM,CAAC,kBAAiB,EAAK,gCAAgCgJ,EAAKjL,GAAG,KAAOiL,EAAKrC,UAAU,KAAOhH,EAAImlB,WAAW9b,GAAM,OAASA,EAAK4U,OAAO,MAAQ5U,EAAK7M,KAAK,GAAKwD,EAAIqlB,qBAAqBhc,IAAO9I,GAAG,CAAC,cAAc,SAASwE,GAAQ,OAAO/E,EAAIklB,eAAe7b,EAAK,IAAI,CAAEA,EAAKuU,KAAM1d,EAAG,mBAAmB,CAACG,MAAM,CAAC,KAAO,OAAO,IAAMgJ,EAAKuU,MAAMpC,KAAK,SAASxb,EAAIuF,KAAKvF,EAAIQ,GAAG,KAAKR,EAAIqF,GAAIrF,EAAI6jB,WAAWxa,EAAKjL,KAAK,SAASonB,GAAO,OAAOtlB,EAAG,sBAAsB,CAACoF,IAAIkgB,EAAMpnB,GAAGiC,MAAM,CAAC,gCAAgCmlB,EAAMpnB,GAAG,OAAQ,EAAK,KAAOonB,EAAMxe,UAAU,MAAQwe,EAAMhpB,KAAK,GAAKwD,EAAIqlB,qBAAqBG,KAAS,CAAEA,EAAM5H,KAAM1d,EAAG,mBAAmB,CAACG,MAAM,CAAC,KAAO,OAAO,IAAMmlB,EAAM5H,MAAMpC,KAAK,SAASxb,EAAIuF,MAAM,EAAE,KAAI,EAAE,GAAE,EAAEsK,OAAM,GAAM,CAACvK,IAAI,SAASsK,GAAG,WAAW,MAAO,CAAC1P,EAAG,KAAK,CAACE,YAAY,kCAAkC,CAACF,EAAG,mBAAmBF,EAAIQ,GAAG,KAAKN,EAAG,sBAAsB,CAACG,MAAM,CAAC,aAAaL,EAAIuB,EAAE,QAAS,+BAA+B,MAAQvB,EAAIuB,EAAE,QAAS,kBAAkB,2CAA2C,IAAIhB,GAAG,CAAC,MAAQ,SAASwE,GAAyD,OAAjDA,EAAOC,iBAAiBD,EAAOE,kBAAyBjF,EAAIslB,aAAapgB,MAAM,KAAMC,UAAU,IAAI,CAACjF,EAAG,MAAM,CAACG,MAAM,CAAC,KAAO,OAAO,KAAO,IAAImb,KAAK,UAAU,IAAI,GAAG,EAAE3L,OAAM,MAAS,CAAC7P,EAAIQ,GAAG,KAAKR,EAAIQ,GAAG,KAAKN,EAAG,gBAAgB,CAACG,MAAM,CAAC,KAAOL,EAAIwjB,eAAe,oCAAoC,IAAIjjB,GAAG,CAAC,MAAQP,EAAIulB,oBAAoB,EACtoD,GACsB,ImBUpB,EACA,KACA,WACA,MAI8B,QCuB1BE,GAAqB,SAAAxd,GAA4E,IAAnE,GAAE7J,EAAE,KAAE5B,EAAI,MAAEoM,EAAK,KAAEgV,EAAI,OAAEI,EAAM,QAAE0H,EAAU,GAAE,SAAExH,EAAQ,OAAEyF,GAAQ1b,EACpG0d,IAAIxpB,MAAMonB,WAAWhc,SAAS,CAC7BnJ,KACA5B,OACAoM,QACA+a,SACA3F,SACAE,UAAuB,IAAbA,EACVlX,UAAW4W,EAAO,QAAHnhB,OAAWmhB,GAAS,YAAcxf,EACjDgf,QAAQ,EACRa,OAAQyH,EAAQ1R,SAAS,WAE3B,8BC5BApO,EAAAA,QAAAA,IAAQggB,GAAAA,IAER,MA4BA,GA5Be,IAAIA,GAAAA,GAAO,CACzBvK,KAAM,UAINwK,MAAMrnB,EAAAA,EAAAA,aAAY,cAAe,IACjCsnB,gBAAiB,SAEjBC,OAAQ,CACP,CACCxpB,KAAM,IAENypB,MAAO,UAER,CACCzpB,KAAM,kBACNC,KAAM,WACNK,OAAO,IAKTopB,eAAe/d,GACd,MAAMqS,EAAS2L,GAAAA,EAAAA,UAAsBhe,GAAOxL,QAAQ,SAAU,KAC9D,OAAO6d,EAAU,IAAMA,EAAU,EAClC,icCrCD/T,OAAOtK,IAAIC,MAAwB,QAAnBmO,GAAG9D,OAAOtK,IAAIC,aAAK,IAAAmO,GAAAA,GAAI,CAAC,EACxC9D,OAAOmf,IAAIxpB,MAAwB,QAAnBgqB,GAAG3f,OAAOmf,IAAIxpB,aAAK,IAAAgqB,GAAAA,GAAI,CAAC,EAExC,MAAMP,GAAS,ICnBA,MAEXvd,YAAY+d,eAAQ,oaAChBnmB,KAAKomB,QAAUD,CACnB,CAQAE,KAAK/pB,GAAuB,IAAjBG,EAAOyI,UAAAvC,OAAA,QAAAsK,IAAA/H,UAAA,IAAAA,UAAA,GACd,OAAOlF,KAAKomB,QAAQnd,KAAK,CACrB3M,OACAG,WAER,CAUA6pB,UAAU/pB,EAAMmnB,EAAQzb,EAAOxL,GAC3B,OAAOuD,KAAKomB,QAAQnd,KAAK,CACrB1M,OACA0L,QACAyb,SACAjnB,WAER,GDf6B0pB,IACjCplB,OAAOwlB,OAAOhgB,OAAOmf,IAAIxpB,MAAO,CAAEypB,YAElChgB,EAAAA,QAAAA,IAAQ6gB,GAAAA,IACR,MAAMC,IAAQC,EAAAA,GAAAA,MAERpD,GAAa,IAAIqD,GACvB5lB,OAAOwlB,OAAOhgB,OAAOmf,IAAIxpB,MAAO,CAAEonB,WAAUA,KAC5C3d,EAAAA,QAAAA,UAAAA,YAA4B2d,GAE5B,MAAMrB,GAAW,IEPF,MAId7Z,0BAAc,saACbpI,KAAK4mB,UAAY,GACjBhiB,GAAQ1B,MAAM,iCACf,CASAoE,SAAS8B,GACR,OAAIpJ,KAAK4mB,UAAUnb,QAAO6I,GAAKA,EAAE/X,OAAS6M,EAAK7M,OAAMoG,OAAS,GAC7DiC,GAAQD,MAAM,uDACP,IAER3E,KAAK4mB,UAAU3d,KAAKG,IACb,EACR,CAOI4Y,eACH,OAAOhiB,KAAK4mB,SACb,GFxBD7lB,OAAOwlB,OAAOhgB,OAAOtK,IAAIC,MAAO,CAAE+lB,SAAQA,KAC1ClhB,OAAOwlB,OAAOhgB,OAAOtK,IAAIC,MAAM+lB,SAAU,CAAEJ,QGR5B,MAiBdzZ,YAAY7L,EAAIyL,GAAuB,IAArB,GAAEwZ,EAAE,KAAE/Z,EAAI,MAAE5E,GAAOmF,EAAA8U,GAAA,sBAAAA,GAAA,mBAAAA,GAAA,qBAAAA,GAAA,qBACpC9c,KAAK6mB,MAAQtqB,EACbyD,KAAK8mB,IAAMtF,EACXxhB,KAAK+mB,MAAQtf,EACbzH,KAAKgnB,OAASnkB,EAEY,mBAAf7C,KAAK+mB,QACf/mB,KAAK+mB,MAAQ,QAGa,mBAAhB/mB,KAAKgnB,SACfhnB,KAAKgnB,OAAS,OAEhB,CAEIzqB,WACH,OAAOyD,KAAK6mB,KACb,CAEIrF,SACH,OAAOxhB,KAAK8mB,GACb,CAEIrf,WACH,OAAOzH,KAAK+mB,KACb,CAEIlkB,YACH,OAAO7C,KAAKgnB,MACb,KHnC2B,IADfrhB,EAAAA,QAAAA,OAAWshB,IACI,CAAS,CACjC1qB,KAAM,sBACN8J,UAAW,CACPid,WAAUA,IAEd6C,OAAM,GACNM,MAAKA,KAEWngB,OAAO,yBAGT,IADDX,EAAAA,QAAAA,OAAWuhB,IACV,CAAa,CAC3B3qB,KAAM,gBACN4pB,OAAM,GACNM,MAAKA,KAECngB,OAAO,oBFtBF,WACd,MAAM6gB,EAAcpmB,OAAOqmB,QAAOnhB,EAAAA,EAAAA,GAAU,QAAS,aAAc,CAAC,IAEhEkhB,EAAYxkB,OAAS,IACxB7B,EAAAA,MAAa,6CAA8CqmB,GAC3DA,EAAYroB,SAAQsK,IACnBoc,GAAmBpc,GACfA,EAAKie,SACRje,EAAKie,QAAQvoB,SAAQwoB,GAAW9B,GAAmB,IAAK8B,EAASvJ,OAAQ3U,EAAKjL,MAC/E,IAGH,CEYAopB,GI3BK,kBAAmB3E,UAEtBrc,OAAOC,iBAAiB,QAAQrE,UAC/B,IACC,MAAM8R,GAAM1V,EAAAA,EAAAA,aAAY,wCAAyC,CAAC,EAAG,CAAEipB,WAAW,IAC5EC,QAAqB7E,UAAU8E,cAAcpgB,SAAS2M,EAAK,CAAE0T,MAAO,MAC1E7mB,EAAAA,MAAa,kBAAmB,CAAE2mB,gBACnC,CAAE,MAAO9iB,GACR7D,EAAAA,MAAa,2BAA4B,CAAE6D,SAC5C,KAGD7D,EAAAA,MAAa,uHClCX8mB,QAA0B,GAA4B,KAE1DA,EAAwB3e,KAAK,CAAC4e,EAAO1pB,GAAI,6HAA8H,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,yDAAyD,MAAQ,GAAG,SAAW,8CAA8C,eAAiB,CAAC,qKAAqK,WAAa,MAEngB,+ECJIypB,QAA0B,GAA4B,KAE1DA,EAAwB3e,KAAK,CAAC4e,EAAO1pB,GAAI,kPAAmP,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,iEAAiE,MAAQ,GAAG,SAAW,iIAAiI,eAAiB,CAAC,kXAAkX,WAAa,MAEh6B,+ECJIypB,QAA0B,GAA4B,KAE1DA,EAAwB3e,KAAK,CAAC4e,EAAO1pB,GAAI,6OAA8O,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,uDAAuD,MAAQ,GAAG,SAAW,oCAAoC,eAAiB,CAAC,iXAAiX,WAAa,MAEnzB,+ECJIypB,QAA0B,GAA4B,KAE1DA,EAAwB3e,KAAK,CAAC4e,EAAO1pB,GAAI,iPAAkP,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,6DAA6D,MAAQ,GAAG,SAAW,gFAAgF,eAAiB,CAAC,uXAAuX,WAAa,MAE/2B,+ECJIypB,QAA0B,GAA4B,KAE1DA,EAAwB3e,KAAK,CAAC4e,EAAO1pB,GAAI,sKAAuK,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,6DAA6D,MAAQ,GAAG,SAAW,8CAA8C,eAAiB,CAAC,wNAAwN,WAAa,MAEnmB,+ECJIypB,QAA0B,GAA4B,KAE1DA,EAAwB3e,KAAK,CAAC4e,EAAO1pB,GAAI,iTAAkT,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,oEAAoE,MAAQ,GAAG,SAAW,yEAAyE,eAAiB,CAAC,+UAA+U,WAAa,MAEv4B,+ECJIypB,QAA0B,GAA4B,KAE1DA,EAAwB3e,KAAK,CAAC4e,EAAO1pB,GAAI,yrBAA0rB,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,mEAAmE,MAAQ,GAAG,SAAW,iKAAiK,eAAiB,CAAC,43BAA43B,WAAa,MAEn5D,+ECJIypB,QAA0B,GAA4B,KAE1DA,EAAwB3e,KAAK,CAAC4e,EAAO1pB,GAAI,29HAA49H,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,8DAA8D,MAAQ,GAAG,SAAW,ylCAAylC,eAAiB,CAAC,67JAA67J,WAAa,MAEzqU,+ECJIypB,QAA0B,GAA4B,KAE1DA,EAAwB3e,KAAK,CAAC4e,EAAO1pB,GAAI,oQAAqQ,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,6DAA6D,MAAQ,GAAG,SAAW,mEAAmE,eAAiB,CAAC,gVAAgV,WAAa,MAE90B,8ECJIypB,QAA0B,GAA4B,KAE1DA,EAAwB3e,KAAK,CAAC4e,EAAO1pB,GAAI,0rCAA2rC,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,6DAA6D,MAAQ,GAAG,SAAW,uYAAuY,eAAiB,CAAC,06CAA06C,WAAa,MAElqG,8ECJIypB,QAA0B,GAA4B,KAE1DA,EAAwB3e,KAAK,CAAC4e,EAAO1pB,GAAI,qdAAsd,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,kDAAkD,MAAQ,GAAG,SAAW,qLAAqL,eAAiB,CAAC,o5BAAo5B,WAAa,MAE1sD,+ECJIypB,QAA0B,GAA4B,KAE1DA,EAAwB3e,KAAK,CAAC4e,EAAO1pB,GAAI,0WAA2W,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,mDAAmD,MAAQ,GAAG,SAAW,gGAAgG,eAAiB,CAAC,miBAAmiB,WAAa,MAE1pC,+ECJIypB,QAA0B,GAA4B,KAE1DA,EAAwB3e,KAAK,CAAC4e,EAAO1pB,GAAI,kEAAmE,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,iDAAiD,MAAQ,GAAG,SAAW,mBAAmB,eAAiB,CAAC,+DAA+D,WAAa,MAE/T,8ECJIypB,QAA0B,GAA4B,KAE1DA,EAAwB3e,KAAK,CAAC4e,EAAO1pB,GAAI,yiCAA0iC,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,uDAAuD,MAAQ,GAAG,SAAW,sVAAsV,eAAiB,CAAC,i4CAAi4C,WAAa,MAEj7F,+ECJIypB,QAA0B,GAA4B,KAE1DA,EAAwB3e,KAAK,CAAC4e,EAAO1pB,GAAI,yKAA0K,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,uDAAuD,MAAQ,GAAG,SAAW,wBAAwB,eAAiB,CAAC,q5lBAA40lB,WAAa,MAE9rmB,YCNI2pB,EAA2B,CAAC,EAGhC,SAASC,EAAoBC,GAE5B,IAAIC,EAAeH,EAAyBE,GAC5C,QAAqB/a,IAAjBgb,EACH,OAAOA,EAAaC,QAGrB,IAAIL,EAASC,EAAyBE,GAAY,CACjD7pB,GAAI6pB,EACJG,QAAQ,EACRD,QAAS,CAAC,GAUX,OANAE,EAAoBJ,GAAUjd,KAAK8c,EAAOK,QAASL,EAAQA,EAAOK,QAASH,GAG3EF,EAAOM,QAAS,EAGTN,EAAOK,OACf,CAGAH,EAAoBM,EAAID,ErH5BpB1sB,EAAW,GACfqsB,EAAoBO,EAAI,CAAChO,EAAQiO,EAAU5Y,EAAI6Y,KAC9C,IAAGD,EAAH,CAMA,IAAIE,EAAeC,IACnB,IAASC,EAAI,EAAGA,EAAIjtB,EAASiH,OAAQgmB,IAAK,CACrCJ,EAAW7sB,EAASitB,GAAG,GACvBhZ,EAAKjU,EAASitB,GAAG,GACjBH,EAAW9sB,EAASitB,GAAG,GAE3B,IAJA,IAGIC,GAAY,EACPC,EAAI,EAAGA,EAAIN,EAAS5lB,OAAQkmB,MACpB,EAAXL,GAAsBC,GAAgBD,IAAaznB,OAAO+nB,KAAKf,EAAoBO,GAAG7e,OAAOpE,GAAS0iB,EAAoBO,EAAEjjB,GAAKkjB,EAASM,MAC9IN,EAASjL,OAAOuL,IAAK,IAErBD,GAAY,EACTJ,EAAWC,IAAcA,EAAeD,IAG7C,GAAGI,EAAW,CACbltB,EAAS4hB,OAAOqL,IAAK,GACrB,IAAII,EAAIpZ,SACE1C,IAAN8b,IAAiBzO,EAASyO,EAC/B,CACD,CACA,OAAOzO,CArBP,CAJCkO,EAAWA,GAAY,EACvB,IAAI,IAAIG,EAAIjtB,EAASiH,OAAQgmB,EAAI,GAAKjtB,EAASitB,EAAI,GAAG,GAAKH,EAAUG,IAAKjtB,EAASitB,GAAKjtB,EAASitB,EAAI,GACrGjtB,EAASitB,GAAK,CAACJ,EAAU5Y,EAAI6Y,EAuBjB,EsH3BdT,EAAoBniB,EAAKiiB,IACxB,IAAImB,EAASnB,GAAUA,EAAOoB,WAC7B,IAAOpB,EAAiB,QACxB,IAAM,EAEP,OADAE,EAAoBmB,EAAEF,EAAQ,CAAElU,EAAGkU,IAC5BA,CAAM,ECLdjB,EAAoBmB,EAAI,CAAChB,EAASiB,KACjC,IAAI,IAAI9jB,KAAO8jB,EACXpB,EAAoBqB,EAAED,EAAY9jB,KAAS0iB,EAAoBqB,EAAElB,EAAS7iB,IAC5EtE,OAAOsoB,eAAenB,EAAS7iB,EAAK,CAAEikB,YAAY,EAAMlU,IAAK+T,EAAW9jB,IAE1E,ECND0iB,EAAoBwB,EAAI,WACvB,GAA0B,iBAAfC,WAAyB,OAAOA,WAC3C,IACC,OAAOxpB,MAAQ,IAAIoQ,SAAS,cAAb,EAChB,CAAE,MAAOkE,GACR,GAAsB,iBAAX/N,OAAqB,OAAOA,MACxC,CACA,CAPuB,GCAxBwhB,EAAoBqB,EAAI,CAACK,EAAKC,IAAU3oB,OAAO4oB,UAAUC,eAAe7e,KAAK0e,EAAKC,GCClF3B,EAAoBgB,EAAKb,IACH,oBAAX2B,QAA0BA,OAAOC,aAC1C/oB,OAAOsoB,eAAenB,EAAS2B,OAAOC,YAAa,CAAEprB,MAAO,WAE7DqC,OAAOsoB,eAAenB,EAAS,aAAc,CAAExpB,OAAO,GAAO,ECL9DqpB,EAAoBgC,IAAOlC,IAC1BA,EAAOtb,MAAQ,GACVsb,EAAOmC,WAAUnC,EAAOmC,SAAW,IACjCnC,GCHRE,EAAoBc,EAAI,WCAxBd,EAAoBhT,EAAIvW,SAASyrB,SAAWC,KAAK/V,SAASV,KAK1D,IAAI0W,EAAkB,CACrB,KAAM,GAaPpC,EAAoBO,EAAEO,EAAKuB,GAA0C,IAA7BD,EAAgBC,GAGxD,IAAIC,EAAuB,CAACC,EAA4B3sB,KACvD,IAKIqqB,EAAUoC,EALV7B,EAAW5qB,EAAK,GAChB4sB,EAAc5sB,EAAK,GACnB6sB,EAAU7sB,EAAK,GAGIgrB,EAAI,EAC3B,GAAGJ,EAAShe,MAAMpM,GAAgC,IAAxBgsB,EAAgBhsB,KAAa,CACtD,IAAI6pB,KAAYuC,EACZxC,EAAoBqB,EAAEmB,EAAavC,KACrCD,EAAoBM,EAAEL,GAAYuC,EAAYvC,IAGhD,GAAGwC,EAAS,IAAIlQ,EAASkQ,EAAQzC,EAClC,CAEA,IADGuC,GAA4BA,EAA2B3sB,GACrDgrB,EAAIJ,EAAS5lB,OAAQgmB,IACzByB,EAAU7B,EAASI,GAChBZ,EAAoBqB,EAAEe,EAAiBC,IAAYD,EAAgBC,IACrED,EAAgBC,GAAS,KAE1BD,EAAgBC,GAAW,EAE5B,OAAOrC,EAAoBO,EAAEhO,EAAO,EAGjCmQ,EAAqBP,KAA4B,sBAAIA,KAA4B,uBAAK,GAC1FO,EAAmB3rB,QAAQurB,EAAqBK,KAAK,KAAM,IAC3DD,EAAmBxhB,KAAOohB,EAAqBK,KAAK,KAAMD,EAAmBxhB,KAAKyhB,KAAKD,QClDvF1C,EAAoB4C,QAAK1d,ECGzB,IAAI2d,EAAsB7C,EAAoBO,OAAErb,EAAW,CAAC,OAAO,IAAO8a,EAAoB,QAC9F6C,EAAsB7C,EAAoBO,EAAEsC","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/apps/files/src/utils/davUtils.js","webpack:///nextcloud/apps/files/src/utils/fileUtils.js","webpack:///nextcloud/apps/files/src/components/TemplatePreview.vue","webpack:///nextcloud/apps/files/src/components/TemplatePreview.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files/src/components/TemplatePreview.vue?8258","webpack://nextcloud/./apps/files/src/components/TemplatePreview.vue?81db","webpack://nextcloud/./apps/files/src/components/TemplatePreview.vue?c414","webpack:///nextcloud/apps/files/src/views/TemplatePicker.vue","webpack:///nextcloud/apps/files/src/views/TemplatePicker.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/files/src/services/Templates.js","webpack://nextcloud/./apps/files/src/views/TemplatePicker.vue?6cbe","webpack://nextcloud/./apps/files/src/views/TemplatePicker.vue?afd8","webpack://nextcloud/./apps/files/src/views/TemplatePicker.vue?1f7b","webpack:///nextcloud/apps/files/src/templates.js","webpack:///nextcloud/apps/files/src/legacy/filelistSearch.js","webpack:///nextcloud/apps/files/src/logger.js","webpack:///nextcloud/apps/files/src/services/FileAction.ts","webpack:///nextcloud/apps/files/src/actions/deleteAction.ts","webpack:///nextcloud/apps/files/src/actions/sidebarAction.ts","webpack:///nextcloud/apps/files/src/store/files.ts","webpack:///nextcloud/apps/files/src/store/paths.ts","webpack:///nextcloud/apps/files/src/store/selection.ts","webpack:///nextcloud/apps/files/src/store/viewConfig.ts","webpack://nextcloud/./apps/files/src/components/BreadCrumbs.vue?e906","webpack:///nextcloud/apps/files/src/components/BreadCrumbs.vue","webpack:///nextcloud/apps/files/src/components/BreadCrumbs.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files/src/components/BreadCrumbs.vue?e59f","webpack://nextcloud/./apps/files/src/components/BreadCrumbs.vue?d357","webpack:///nextcloud/apps/files/src/components/FilesListVirtual.vue","webpack:///nextcloud/apps/files/src/utils/hashUtils.ts","webpack:///nextcloud/apps/files/src/store/actionsmenu.ts","webpack:///nextcloud/apps/files/src/store/userconfig.ts","webpack:///nextcloud/apps/files/src/components/CustomElementRender.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/files/src/components/CustomElementRender.vue","webpack://nextcloud/./apps/files/src/components/CustomElementRender.vue?5f5c","webpack://nextcloud/./apps/files/src/components/CustomElementRender.vue?4ee7","webpack://nextcloud/./apps/files/src/components/CustomSvgIconRender.vue?2c34","webpack:///nextcloud/apps/files/src/components/CustomSvgIconRender.vue","webpack:///nextcloud/apps/files/src/components/CustomSvgIconRender.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files/src/components/CustomSvgIconRender.vue?6bea","webpack://nextcloud/./apps/files/src/components/CustomSvgIconRender.vue?5641","webpack:///nextcloud/apps/files/src/components/FileEntry.vue","webpack:///nextcloud/apps/files/src/components/FileEntry.vue?vue&type=script&lang=ts&","webpack:///nextcloud/apps/files/src/store/keyboard.ts","webpack:///nextcloud/apps/files/src/services/PreviewService.ts","webpack://nextcloud/./apps/files/src/components/FileEntry.vue?0601","webpack://nextcloud/./apps/files/src/components/FileEntry.vue?bfb5","webpack://nextcloud/./apps/files/src/components/FileEntry.vue?da7c","webpack:///nextcloud/apps/files/src/components/FilesListFooter.vue?vue&type=script&lang=ts&","webpack:///nextcloud/apps/files/src/components/FilesListFooter.vue","webpack://nextcloud/./apps/files/src/components/FilesListFooter.vue?14b9","webpack://nextcloud/./apps/files/src/components/FilesListFooter.vue?80db","webpack:///nextcloud/apps/files/src/mixins/filesListWidth.ts","webpack:///nextcloud/apps/files/src/components/FilesListHeaderActions.vue","webpack:///nextcloud/apps/files/src/components/FilesListHeaderActions.vue?vue&type=script&lang=ts&","webpack://nextcloud/./apps/files/src/components/FilesListHeaderActions.vue?993d","webpack://nextcloud/./apps/files/src/components/FilesListHeaderActions.vue?9823","webpack:///nextcloud/apps/files/src/components/FilesListHeaderButton.vue","webpack:///nextcloud/apps/files/src/mixins/filesSorting.ts","webpack:///nextcloud/apps/files/src/components/FilesListHeaderButton.vue?vue&type=script&lang=ts&","webpack://nextcloud/./apps/files/src/components/FilesListHeaderButton.vue?d900","webpack://nextcloud/./apps/files/src/components/FilesListHeaderButton.vue?5686","webpack:///nextcloud/apps/files/src/components/FilesListHeader.vue?vue&type=script&lang=ts&","webpack:///nextcloud/apps/files/src/components/FilesListHeader.vue","webpack://nextcloud/./apps/files/src/components/FilesListHeader.vue?c7b4","webpack://nextcloud/./apps/files/src/components/FilesListHeader.vue?349b","webpack:///nextcloud/apps/files/src/components/FilesListVirtual.vue?vue&type=script&lang=ts&","webpack://nextcloud/./apps/files/src/components/FilesListVirtual.vue?034b","webpack://nextcloud/./apps/files/src/components/FilesListVirtual.vue?3555","webpack:///nextcloud/apps/files/src/services/Navigation.ts","webpack:///nextcloud/apps/files/src/views/FilesList.vue?vue&type=script&lang=ts&","webpack:///nextcloud/apps/files/src/views/FilesList.vue","webpack://nextcloud/./apps/files/src/views/FilesList.vue?b2cc","webpack://nextcloud/./apps/files/src/views/FilesList.vue?1e5b","webpack://nextcloud/./apps/files/src/views/Navigation.vue?8122","webpack://nextcloud/./apps/files/src/components/NavigationQuota.vue?08cb","webpack:///nextcloud/apps/files/src/components/NavigationQuota.vue","webpack:///nextcloud/apps/files/src/components/NavigationQuota.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files/src/components/NavigationQuota.vue?ff39","webpack://nextcloud/./apps/files/src/components/NavigationQuota.vue?2966","webpack://nextcloud/./apps/files/src/views/Settings.vue?84f7","webpack:///nextcloud/apps/files/src/components/Setting.vue","webpack:///nextcloud/apps/files/src/components/Setting.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files/src/components/Setting.vue?98ea","webpack://nextcloud/./apps/files/src/components/Setting.vue?8d57","webpack:///nextcloud/apps/files/src/views/Settings.vue","webpack:///nextcloud/apps/files/src/views/Settings.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files/src/views/Settings.vue?7e31","webpack://nextcloud/./apps/files/src/views/Settings.vue?b81b","webpack:///nextcloud/apps/files/src/views/Navigation.vue","webpack:///nextcloud/core/src/OCP/accessibility.js","webpack:///nextcloud/apps/files/src/views/Navigation.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files/src/views/Navigation.vue?e9dc","webpack://nextcloud/./apps/files/src/views/Navigation.vue?74b9","webpack:///nextcloud/apps/files/src/legacy/navigationMapper.js","webpack:///nextcloud/apps/files/src/router/router.js","webpack:///nextcloud/apps/files/src/main.ts","webpack:///nextcloud/apps/files/src/services/RouterService.ts","webpack:///nextcloud/apps/files/src/services/Settings.js","webpack:///nextcloud/apps/files/src/models/Setting.js","webpack:///nextcloud/apps/files/src/services/ServiceWorker.js","webpack:///nextcloud/apps/files/src/components/BreadCrumbs.vue?vue&type=style&index=0&id=68b3b20b&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/files/src/components/CustomSvgIconRender.vue?vue&type=style&index=0&id=93e9b2f4&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/files/src/components/FileEntry.vue?vue&type=style&index=0&id=0600090e&prod&scoped=true&lang=scss&","webpack:///nextcloud/apps/files/src/components/FilesListFooter.vue?vue&type=style&index=0&id=e6a083be&prod&scoped=true&lang=scss&","webpack:///nextcloud/apps/files/src/components/FilesListHeader.vue?vue&type=style&index=0&id=76b6186a&prod&scoped=true&lang=scss&","webpack:///nextcloud/apps/files/src/components/FilesListHeaderActions.vue?vue&type=style&index=0&id=03e57b1e&prod&scoped=true&lang=scss&","webpack:///nextcloud/apps/files/src/components/FilesListHeaderButton.vue?vue&type=style&index=0&id=e85a09d2&prod&lang=scss&","webpack:///nextcloud/apps/files/src/components/FilesListVirtual.vue?vue&type=style&index=0&id=640a8bb8&prod&scoped=true&lang=scss&","webpack:///nextcloud/apps/files/src/components/NavigationQuota.vue?vue&type=style&index=0&id=918797b2&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/files/src/components/TemplatePreview.vue?vue&type=style&index=0&id=6c072a31&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/files/src/views/FilesList.vue?vue&type=style&index=0&id=66068cbb&prod&scoped=true&lang=scss&","webpack:///nextcloud/apps/files/src/views/Navigation.vue?vue&type=style&index=0&id=657a978e&prod&scoped=true&lang=scss&","webpack:///nextcloud/apps/files/src/views/Settings.vue?vue&type=style&index=0&id=76ca5d1f&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/files/src/views/TemplatePicker.vue?vue&type=style&index=0&id=715b4161&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/files/src/components/FileEntry.vue?vue&type=style&index=1&id=0600090e&prod&lang=css&","webpack:///nextcloud/webpack/bootstrap","webpack:///nextcloud/webpack/runtime/compat get default export","webpack:///nextcloud/webpack/runtime/define property getters","webpack:///nextcloud/webpack/runtime/global","webpack:///nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack:///nextcloud/webpack/runtime/make namespace object","webpack:///nextcloud/webpack/runtime/node module decorator","webpack:///nextcloud/webpack/runtime/runtimeId","webpack:///nextcloud/webpack/runtime/jsonp chunk loading","webpack:///nextcloud/webpack/runtime/nonce","webpack:///nextcloud/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","/**\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { generateRemoteUrl } from '@nextcloud/router'\nimport { getCurrentUser } from '@nextcloud/auth'\n\nexport const getRootPath = function() {\n\tif (getCurrentUser()) {\n\t\treturn generateRemoteUrl(`dav/files/${getCurrentUser().uid}`)\n\t} else {\n\t\treturn generateRemoteUrl('webdav').replace('/remote.php', '/public.php')\n\t}\n}\n\nexport const isPublic = function() {\n\treturn !getCurrentUser()\n}\n\nexport const getToken = function() {\n\treturn document.getElementById('sharingToken') && document.getElementById('sharingToken').value\n}\n\n/**\n * Return the current directory, fallback to root\n *\n * @return {string}\n */\nexport const getCurrentDirectory = function() {\n\tconst currentDirInfo = OCA?.Files?.App?.currentFileList?.dirInfo\n\t\t|| { path: '/', name: '' }\n\n\t// Make sure we don't have double slashes\n\treturn `${currentDirInfo.path}/${currentDirInfo.name}`.replace(/\\/\\//gi, '/')\n}\n","/**\n * @copyright Copyright (c) 2021 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nconst encodeFilePath = function(path) {\n\tconst pathSections = (path.startsWith('/') ? path : `/${path}`).split('/')\n\tlet relativePath = ''\n\tpathSections.forEach((section) => {\n\t\tif (section !== '') {\n\t\t\trelativePath += '/' + encodeURIComponent(section)\n\t\t}\n\t})\n\treturn relativePath\n}\n\n/**\n * Extract dir and name from file path\n *\n * @param {string} path the full path\n * @return {string[]} [dirPath, fileName]\n */\nconst extractFilePaths = function(path) {\n\tconst pathSections = path.split('/')\n\tconst fileName = pathSections[pathSections.length - 1]\n\tconst dirPath = pathSections.slice(0, pathSections.length - 1).join('/')\n\treturn [dirPath, fileName]\n}\n\nexport { encodeFilePath, extractFilePaths }\n","<!--\n  - @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n  -\n  - @author John Molakvoæ <skjnldsv@protonmail.com>\n  -\n  - @license GNU AGPL version 3 or any later version\n  -\n  - This program is free software: you can redistribute it and/or modify\n  - it under the terms of the GNU Affero General Public License as\n  - published by the Free Software Foundation, either version 3 of the\n  - License, or (at your option) any later version.\n  -\n  - This program is distributed in the hope that it will be useful,\n  - but WITHOUT ANY WARRANTY; without even the implied warranty of\n  - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n  - GNU Affero General Public License for more details.\n  -\n  - You should have received a copy of the GNU Affero General Public License\n  - along with this program. If not, see <http://www.gnu.org/licenses/>.\n  -\n  -->\n\n<template>\n\t<li class=\"template-picker__item\">\n\t\t<input :id=\"id\"\n\t\t\t:checked=\"checked\"\n\t\t\ttype=\"radio\"\n\t\t\tclass=\"radio\"\n\t\t\tname=\"template-picker\"\n\t\t\t@change=\"onCheck\">\n\n\t\t<label :for=\"id\" class=\"template-picker__label\">\n\t\t\t<div class=\"template-picker__preview\"\n\t\t\t\t:class=\"failedPreview ? 'template-picker__preview--failed' : ''\">\n\t\t\t\t<img class=\"template-picker__image\"\n\t\t\t\t\t:src=\"realPreviewUrl\"\n\t\t\t\t\talt=\"\"\n\t\t\t\t\tdraggable=\"false\"\n\t\t\t\t\t@error=\"onFailure\">\n\t\t\t</div>\n\n\t\t\t<span class=\"template-picker__title\">\n\t\t\t\t{{ nameWithoutExt }}\n\t\t\t</span>\n\t\t</label>\n\t</li>\n</template>\n\n<script>\nimport { generateUrl } from '@nextcloud/router'\nimport { encodeFilePath } from '../utils/fileUtils.js'\nimport { getToken, isPublic } from '../utils/davUtils.js'\n\n// preview width generation\nconst previewWidth = 256\n\nexport default {\n\tname: 'TemplatePreview',\n\tinheritAttrs: false,\n\n\tprops: {\n\t\tbasename: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tchecked: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tfileid: {\n\t\t\ttype: [String, Number],\n\t\t\trequired: true,\n\t\t},\n\t\tfilename: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tpreviewUrl: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\t\thasPreview: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\tmime: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tratio: {\n\t\t\ttype: Number,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tfailedPreview: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/**\n\t\t * Strip away extension from name\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tnameWithoutExt() {\n\t\t\treturn this.basename.indexOf('.') > -1 ? this.basename.split('.').slice(0, -1).join('.') : this.basename\n\t\t},\n\n\t\tid() {\n\t\t\treturn `template-picker-${this.fileid}`\n\t\t},\n\n\t\trealPreviewUrl() {\n\t\t\t// If original preview failed, fallback to mime icon\n\t\t\tif (this.failedPreview && this.mimeIcon) {\n\t\t\t\treturn this.mimeIcon\n\t\t\t}\n\n\t\t\tif (this.previewUrl) {\n\t\t\t\treturn this.previewUrl\n\t\t\t}\n\t\t\t// TODO: find a nicer standard way of doing this?\n\t\t\tif (isPublic()) {\n\t\t\t\treturn generateUrl(`/apps/files_sharing/publicpreview/${getToken()}?fileId=${this.fileid}&file=${encodeFilePath(this.filename)}&x=${previewWidth}&y=${previewWidth}&a=1`)\n\t\t\t}\n\t\t\treturn generateUrl(`/core/preview?fileId=${this.fileid}&x=${previewWidth}&y=${previewWidth}&a=1`)\n\t\t},\n\n\t\tmimeIcon() {\n\t\t\treturn OC.MimeType.getIconUrl(this.mime)\n\t\t},\n\t},\n\n\tmethods: {\n\t\tonCheck() {\n\t\t\tthis.$emit('check', this.fileid)\n\t\t},\n\t\tonFailure() {\n\t\t\tthis.failedPreview = true\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n\n.template-picker {\n\t&__item {\n\t\tdisplay: flex;\n\t}\n\n\t&__label {\n\t\tdisplay: flex;\n\t\t// Align in the middle of the grid\n\t\talign-items: center;\n\t\tflex: 1 1;\n\t\tflex-direction: column;\n\n\t\t&, * {\n\t\t\tcursor: pointer;\n\t\t\tuser-select: none;\n\t\t}\n\n\t\t&::before {\n\t\t\tdisplay: none !important;\n\t\t}\n\t}\n\n\t&__preview {\n\t\tdisplay: block;\n\t\toverflow: hidden;\n\t\t// Stretch so all entries are the same width\n\t\tflex: 1 1;\n\t\twidth: var(--width);\n\t\tmin-height: var(--height);\n\t\tmax-height: var(--height);\n\t\tpadding: 0;\n\t\tborder: var(--border) solid var(--color-border);\n\t\tborder-radius: var(--border-radius-large);\n\n\t\tinput:checked + label > & {\n\t\t\tborder-color: var(--color-primary);\n\t\t}\n\n\t\t&--failed {\n\t\t\t// Make sure to properly center fallback icon\n\t\t\tdisplay: flex;\n\t\t}\n\t}\n\n\t&__image {\n\t\tmax-width: 100%;\n\t\tbackground-color: var(--color-main-background);\n\n\t\tobject-fit: cover;\n\t}\n\n\t// Failed preview, fallback to mime icon\n\t&__preview--failed &__image {\n\t\twidth: calc(var(--margin) * 8);\n\t\t// Center mime icon\n\t\tmargin: auto;\n\t\tbackground-color: transparent !important;\n\n\t\tobject-fit: initial;\n\t}\n\n\t&__title {\n\t\toverflow: hidden;\n\t\t// also count preview border\n\t\tmax-width: calc(var(--width) + 2*2px);\n\t\tpadding: var(--margin);\n\t\twhite-space: nowrap;\n\t\ttext-overflow: ellipsis;\n\t}\n}\n\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TemplatePreview.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TemplatePreview.vue?vue&type=script&lang=js&\"","\n      import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TemplatePreview.vue?vue&type=style&index=0&id=6c072a31&prod&lang=scss&scoped=true&\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TemplatePreview.vue?vue&type=style&index=0&id=6c072a31&prod&lang=scss&scoped=true&\";\n       export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./TemplatePreview.vue?vue&type=template&id=6c072a31&scoped=true&\"\nimport script from \"./TemplatePreview.vue?vue&type=script&lang=js&\"\nexport * from \"./TemplatePreview.vue?vue&type=script&lang=js&\"\nimport style0 from \"./TemplatePreview.vue?vue&type=style&index=0&id=6c072a31&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"6c072a31\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('li',{staticClass:\"template-picker__item\"},[_c('input',{staticClass:\"radio\",attrs:{\"id\":_vm.id,\"type\":\"radio\",\"name\":\"template-picker\"},domProps:{\"checked\":_vm.checked},on:{\"change\":_vm.onCheck}}),_vm._v(\" \"),_c('label',{staticClass:\"template-picker__label\",attrs:{\"for\":_vm.id}},[_c('div',{staticClass:\"template-picker__preview\",class:_vm.failedPreview ? 'template-picker__preview--failed' : ''},[_c('img',{staticClass:\"template-picker__image\",attrs:{\"src\":_vm.realPreviewUrl,\"alt\":\"\",\"draggable\":\"false\"},on:{\"error\":_vm.onFailure}})]),_vm._v(\" \"),_c('span',{staticClass:\"template-picker__title\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.nameWithoutExt)+\"\\n\\t\\t\")])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n  - @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n  -\n  - @author John Molakvoæ <skjnldsv@protonmail.com>\n  -\n  - @license GNU AGPL version 3 or any later version\n  -\n  - This program is free software: you can redistribute it and/or modify\n  - it under the terms of the GNU Affero General Public License as\n  - published by the Free Software Foundation, either version 3 of the\n  - License, or (at your option) any later version.\n  -\n  - This program is distributed in the hope that it will be useful,\n  - but WITHOUT ANY WARRANTY; without even the implied warranty of\n  - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n  - GNU Affero General Public License for more details.\n  -\n  - You should have received a copy of the GNU Affero General Public License\n  - along with this program. If not, see <http://www.gnu.org/licenses/>.\n  -\n  -->\n\n<template>\n\t<NcModal v-if=\"opened\"\n\t\t:clear-view-delay=\"-1\"\n\t\tclass=\"templates-picker\"\n\t\tsize=\"normal\"\n\t\t@close=\"close\">\n\t\t<form class=\"templates-picker__form\"\n\t\t\t:style=\"style\"\n\t\t\t@submit.prevent.stop=\"onSubmit\">\n\t\t\t<h2>{{ t('files', 'Pick a template for {name}', { name: nameWithoutExt }) }}</h2>\n\n\t\t\t<!-- Templates list -->\n\t\t\t<ul class=\"templates-picker__list\">\n\t\t\t\t<TemplatePreview v-bind=\"emptyTemplate\"\n\t\t\t\t\t:checked=\"checked === emptyTemplate.fileid\"\n\t\t\t\t\t@check=\"onCheck\" />\n\n\t\t\t\t<TemplatePreview v-for=\"template in provider.templates\"\n\t\t\t\t\t:key=\"template.fileid\"\n\t\t\t\t\tv-bind=\"template\"\n\t\t\t\t\t:checked=\"checked === template.fileid\"\n\t\t\t\t\t:ratio=\"provider.ratio\"\n\t\t\t\t\t@check=\"onCheck\" />\n\t\t\t</ul>\n\n\t\t\t<!-- Cancel and submit -->\n\t\t\t<div class=\"templates-picker__buttons\">\n\t\t\t\t<button @click=\"close\">\n\t\t\t\t\t{{ t('files', 'Cancel') }}\n\t\t\t\t</button>\n\t\t\t\t<input type=\"submit\"\n\t\t\t\t\tclass=\"primary\"\n\t\t\t\t\t:value=\"t('files', 'Create')\"\n\t\t\t\t\t:aria-label=\"t('files', 'Create a new file with the selected template')\">\n\t\t\t</div>\n\t\t</form>\n\n\t\t<NcEmptyContent v-if=\"loading\" class=\"templates-picker__loading\" icon=\"icon-loading\">\n\t\t\t{{ t('files', 'Creating file') }}\n\t\t</NcEmptyContent>\n\t</NcModal>\n</template>\n\n<script>\nimport { normalize } from 'path'\nimport { showError } from '@nextcloud/dialogs'\nimport NcEmptyContent from '@nextcloud/vue/dist/Components/NcEmptyContent.js'\nimport NcModal from '@nextcloud/vue/dist/Components/NcModal.js'\n\nimport { getCurrentDirectory } from '../utils/davUtils.js'\nimport { createFromTemplate, getTemplates } from '../services/Templates.js'\nimport TemplatePreview from '../components/TemplatePreview.vue'\n\nconst border = 2\nconst margin = 8\nconst width = margin * 20\n\nexport default {\n\tname: 'TemplatePicker',\n\n\tcomponents: {\n\t\tNcEmptyContent,\n\t\tNcModal,\n\t\tTemplatePreview,\n\t},\n\n\tprops: {\n\t\tlogger: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\t// Check empty template by default\n\t\t\tchecked: -1,\n\t\t\tloading: false,\n\t\t\tname: null,\n\t\t\topened: false,\n\t\t\tprovider: null,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/**\n\t\t * Strip away extension from name\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tnameWithoutExt() {\n\t\t\treturn this.name.indexOf('.') > -1\n\t\t\t\t? this.name.split('.').slice(0, -1).join('.')\n\t\t\t\t: this.name\n\t\t},\n\n\t\temptyTemplate() {\n\t\t\treturn {\n\t\t\t\tbasename: t('files', 'Blank'),\n\t\t\t\tfileid: -1,\n\t\t\t\tfilename: this.t('files', 'Blank'),\n\t\t\t\thasPreview: false,\n\t\t\t\tmime: this.provider?.mimetypes[0] || this.provider?.mimetypes,\n\t\t\t}\n\t\t},\n\n\t\tselectedTemplate() {\n\t\t\treturn this.provider.templates.find(template => template.fileid === this.checked)\n\t\t},\n\n\t\t/**\n\t\t * Style css vars bin,d\n\t\t *\n\t\t * @return {object}\n\t\t */\n\t\tstyle() {\n\t\t\treturn {\n\t\t\t\t'--margin': margin + 'px',\n\t\t\t\t'--width': width + 'px',\n\t\t\t\t'--border': border + 'px',\n\t\t\t\t'--fullwidth': width + 2 * margin + 2 * border + 'px',\n\t\t\t\t'--height': this.provider.ratio ? Math.round(width / this.provider.ratio) + 'px' : null,\n\t\t\t}\n\t\t},\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Open the picker\n\t\t *\n\t\t * @param {string} name the file name to create\n\t\t * @param {object} provider the template provider picked\n\t\t */\n\t\tasync open(name, provider) {\n\n\t\t\tthis.checked = this.emptyTemplate.fileid\n\t\t\tthis.name = name\n\t\t\tthis.provider = provider\n\n\t\t\tconst templates = await getTemplates()\n\t\t\tconst fetchedProvider = templates.find((fetchedProvider) => fetchedProvider.app === provider.app && fetchedProvider.label === provider.label)\n\t\t\tif (fetchedProvider === null) {\n\t\t\t\tthrow new Error('Failed to match provider in results')\n\t\t\t}\n\t\t\tthis.provider = fetchedProvider\n\n\t\t\t// If there is no templates available, just create an empty file\n\t\t\tif (fetchedProvider.templates.length === 0) {\n\t\t\t\tthis.onSubmit()\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// Else, open the picker\n\t\t\tthis.opened = true\n\t\t},\n\n\t\t/**\n\t\t * Close the picker and reset variables\n\t\t */\n\t\tclose() {\n\t\t\tthis.checked = this.emptyTemplate.fileid\n\t\t\tthis.loading = false\n\t\t\tthis.name = null\n\t\t\tthis.opened = false\n\t\t\tthis.provider = null\n\t\t},\n\n\t\t/**\n\t\t * Manages the radio template picker change\n\t\t *\n\t\t * @param {number} fileid the selected template file id\n\t\t */\n\t\tonCheck(fileid) {\n\t\t\tthis.checked = fileid\n\t\t},\n\n\t\tasync onSubmit() {\n\t\t\tthis.loading = true\n\t\t\tconst currentDirectory = getCurrentDirectory()\n\t\t\tconst fileList = OCA?.Files?.App?.currentFileList\n\n\t\t\t// If the file doesn't have an extension, add the default one\n\t\t\tif (this.nameWithoutExt === this.name) {\n\t\t\t\tthis.logger.debug('Fixed invalid filename', { name: this.name, extension: this.provider?.extension })\n\t\t\t\tthis.name = this.name + this.provider?.extension\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst fileInfo = await createFromTemplate(\n\t\t\t\t\tnormalize(`${currentDirectory}/${this.name}`),\n\t\t\t\t\tthis.selectedTemplate?.filename,\n\t\t\t\t\tthis.selectedTemplate?.templateType,\n\t\t\t\t)\n\t\t\t\tthis.logger.debug('Created new file', fileInfo)\n\n\t\t\t\t// Fetch FileInfo and model\n\t\t\t\tconst data = await fileList?.addAndFetchFileInfo(this.name).then((status, data) => data)\n\t\t\t\tconst model = new OCA.Files.FileInfoModel(data, {\n\t\t\t\t\tfilesClient: fileList?.filesClient,\n\t\t\t\t})\n\n\t\t\t\t// Run default action\n\t\t\t\tconst fileAction = OCA.Files.fileActions.getDefaultFileAction(fileInfo.mime, 'file', OC.PERMISSION_ALL)\n\t\t\t\tif (fileAction) {\n\t\t\t\t\tfileAction.action(fileInfo.basename, {\n\t\t\t\t\t\t$file: fileList?.findFileEl(this.name),\n\t\t\t\t\t\tdir: currentDirectory,\n\t\t\t\t\t\tfileList,\n\t\t\t\t\t\tfileActions: fileList?.fileActions,\n\t\t\t\t\t\tfileInfoModel: model,\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\tthis.close()\n\t\t\t} catch (error) {\n\t\t\t\tthis.logger.error('Error while creating the new file from template')\n\t\t\t\tconsole.error(error)\n\t\t\t\tshowError(this.t('files', 'Unable to create new file from template'))\n\t\t\t} finally {\n\t\t\t\tthis.loading = false\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.templates-picker {\n\t&__form {\n\t\tpadding: calc(var(--margin) * 2);\n\t\t// Will be handled by the buttons\n\t\tpadding-bottom: 0;\n\n\t\th2 {\n\t\t\ttext-align: center;\n\t\t\tfont-weight: bold;\n\t\t\tmargin: var(--margin) 0 calc(var(--margin) * 2);\n\t\t}\n\t}\n\n\t&__list {\n\t\tdisplay: grid;\n\t\tgrid-gap: calc(var(--margin) * 2);\n\t\tgrid-auto-columns: 1fr;\n\t\t// We want maximum 5 columns. Putting 6 as we don't count the grid gap. So it will always be lower than 6\n\t\tmax-width: calc(var(--fullwidth) * 6);\n\t\tgrid-template-columns: repeat(auto-fit, var(--fullwidth));\n\t\t// Make sure all rows are the same height\n\t\tgrid-auto-rows: 1fr;\n\t\t// Center the columns set\n\t\tjustify-content: center;\n\t}\n\n\t&__buttons {\n\t\tdisplay: flex;\n\t\tjustify-content: space-between;\n\t\tpadding: calc(var(--margin) * 2) var(--margin);\n\t\tposition: sticky;\n\t\tbottom: 0;\n\t\tbackground-image: linear-gradient(0, var(--gradient-main-background));\n\n\t\tbutton, input[type='submit'] {\n\t\t\theight: 44px;\n\t\t}\n\t}\n\n\t// Make sure we're relative for the loading emptycontent on top\n\t::v-deep .modal-container {\n\t\tposition: relative;\n\t}\n\n\t&__loading {\n\t\tposition: absolute;\n\t\ttop: 0;\n\t\tleft: 0;\n\t\tjustify-content: center;\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\tmargin: 0;\n\t\tbackground-color: var(--color-main-background-translucent);\n\t}\n}\n\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TemplatePicker.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TemplatePicker.vue?vue&type=script&lang=js&\"","/**\n * @copyright Copyright (c) 2021 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { generateOcsUrl } from '@nextcloud/router'\nimport axios from '@nextcloud/axios'\n\nexport const getTemplates = async function() {\n\tconst response = await axios.get(generateOcsUrl('apps/files/api/v1/templates'))\n\treturn response.data.ocs.data\n}\n\n/**\n * Create a new file from a specified template\n *\n * @param {string} filePath The new file destination path\n * @param {string} templatePath The template source path\n * @param {string} templateType The template type e.g 'user'\n */\nexport const createFromTemplate = async function(filePath, templatePath, templateType) {\n\tconst response = await axios.post(generateOcsUrl('apps/files/api/v1/templates/create'), {\n\t\tfilePath,\n\t\ttemplatePath,\n\t\ttemplateType,\n\t})\n\treturn response.data.ocs.data\n}\n","\n      import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TemplatePicker.vue?vue&type=style&index=0&id=715b4161&prod&lang=scss&scoped=true&\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TemplatePicker.vue?vue&type=style&index=0&id=715b4161&prod&lang=scss&scoped=true&\";\n       export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./TemplatePicker.vue?vue&type=template&id=715b4161&scoped=true&\"\nimport script from \"./TemplatePicker.vue?vue&type=script&lang=js&\"\nexport * from \"./TemplatePicker.vue?vue&type=script&lang=js&\"\nimport style0 from \"./TemplatePicker.vue?vue&type=style&index=0&id=715b4161&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"715b4161\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return (_vm.opened)?_c('NcModal',{staticClass:\"templates-picker\",attrs:{\"clear-view-delay\":-1,\"size\":\"normal\"},on:{\"close\":_vm.close}},[_c('form',{staticClass:\"templates-picker__form\",style:(_vm.style),on:{\"submit\":function($event){$event.preventDefault();$event.stopPropagation();return _vm.onSubmit.apply(null, arguments)}}},[_c('h2',[_vm._v(_vm._s(_vm.t('files', 'Pick a template for {name}', { name: _vm.nameWithoutExt })))]),_vm._v(\" \"),_c('ul',{staticClass:\"templates-picker__list\"},[_c('TemplatePreview',_vm._b({attrs:{\"checked\":_vm.checked === _vm.emptyTemplate.fileid},on:{\"check\":_vm.onCheck}},'TemplatePreview',_vm.emptyTemplate,false)),_vm._v(\" \"),_vm._l((_vm.provider.templates),function(template){return _c('TemplatePreview',_vm._b({key:template.fileid,attrs:{\"checked\":_vm.checked === template.fileid,\"ratio\":_vm.provider.ratio},on:{\"check\":_vm.onCheck}},'TemplatePreview',template,false))})],2),_vm._v(\" \"),_c('div',{staticClass:\"templates-picker__buttons\"},[_c('button',{on:{\"click\":_vm.close}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('files', 'Cancel'))+\"\\n\\t\\t\\t\")]),_vm._v(\" \"),_c('input',{staticClass:\"primary\",attrs:{\"type\":\"submit\",\"aria-label\":_vm.t('files', 'Create a new file with the selected template')},domProps:{\"value\":_vm.t('files', 'Create')}})])]),_vm._v(\" \"),(_vm.loading)?_c('NcEmptyContent',{staticClass:\"templates-picker__loading\",attrs:{\"icon\":\"icon-loading\"}},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('files', 'Creating file'))+\"\\n\\t\")]):_vm._e()],1):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { getLoggerBuilder } from '@nextcloud/logger'\nimport { loadState } from '@nextcloud/initial-state'\nimport { translate as t, translatePlural as n } from '@nextcloud/l10n'\nimport { generateOcsUrl } from '@nextcloud/router'\nimport { getCurrentDirectory } from './utils/davUtils.js'\nimport axios from '@nextcloud/axios'\nimport Vue from 'vue'\n\nimport TemplatePickerView from './views/TemplatePicker.vue'\nimport { showError } from '@nextcloud/dialogs'\n\n// Set up logger\nconst logger = getLoggerBuilder()\n\t.setApp('files')\n\t.detectUser()\n\t.build()\n\n// Add translates functions\nVue.mixin({\n\tmethods: {\n\t\tt,\n\t\tn,\n\t},\n})\n\n// Create document root\nconst TemplatePickerRoot = document.createElement('div')\nTemplatePickerRoot.id = 'template-picker'\ndocument.body.appendChild(TemplatePickerRoot)\n\n// Retrieve and init templates\nlet templates = loadState('files', 'templates', [])\nlet templatesPath = loadState('files', 'templates_path', false)\nlogger.debug('Templates providers', templates)\nlogger.debug('Templates folder', { templatesPath })\n\n// Init vue app\nconst View = Vue.extend(TemplatePickerView)\nconst TemplatePicker = new View({\n\tname: 'TemplatePicker',\n\tpropsData: {\n\t\tlogger,\n\t},\n})\nTemplatePicker.$mount('#template-picker')\n\n// Init template engine after load to make sure it's the last injected entry\nwindow.addEventListener('DOMContentLoaded', function() {\n\tif (!templatesPath) {\n\t\tlogger.debug('Templates folder not initialized')\n\t\tconst initTemplatesPlugin = {\n\t\t\tattach(menu) {\n\t\t\t\t// register the new menu entry\n\t\t\t\tmenu.addMenuEntry({\n\t\t\t\t\tid: 'template-init',\n\t\t\t\t\tdisplayName: t('files', 'Set up templates folder'),\n\t\t\t\t\ttemplateName: t('files', 'Templates'),\n\t\t\t\t\ticonClass: 'icon-template-add',\n\t\t\t\t\tfileType: 'file',\n\t\t\t\t\tactionLabel: t('files', 'Create new templates folder'),\n\t\t\t\t\tactionHandler(name) {\n\t\t\t\t\t\tinitTemplatesFolder(name)\n\t\t\t\t\t\tmenu.removeMenuEntry('template-init')\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t},\n\t\t}\n\t\tOC.Plugins.register('OCA.Files.NewFileMenu', initTemplatesPlugin)\n\t}\n})\n\n// Init template files menu\ntemplates.forEach((provider, index) => {\n\tconst newTemplatePlugin = {\n\t\tattach(menu) {\n\t\t\tconst fileList = menu.fileList\n\n\t\t\t// only attach to main file list, public view is not supported yet\n\t\t\tif (fileList.id !== 'files' && fileList.id !== 'files.public') {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// register the new menu entry\n\t\t\tmenu.addMenuEntry({\n\t\t\t\tid: `template-new-${provider.app}-${index}`,\n\t\t\t\tdisplayName: provider.label,\n\t\t\t\ttemplateName: provider.label + provider.extension,\n\t\t\t\ticonClass: provider.iconClass || 'icon-file',\n\t\t\t\tfileType: 'file',\n\t\t\t\tactionLabel: provider.actionLabel,\n\t\t\t\tactionHandler(name) {\n\t\t\t\t\tTemplatePicker.open(name, provider)\n\t\t\t\t},\n\t\t\t})\n\t\t},\n\t}\n\tOC.Plugins.register('OCA.Files.NewFileMenu', newTemplatePlugin)\n})\n\n/**\n * Init the template directory\n *\n * @param {string} name the templates folder name\n */\nconst initTemplatesFolder = async function(name) {\n\tconst templatePath = (getCurrentDirectory() + `/${name}`).replace('//', '/')\n\ttry {\n\t\tlogger.debug('Initializing the templates directory', { templatePath })\n\t\tconst response = await axios.post(generateOcsUrl('apps/files/api/v1/templates/path'), {\n\t\t\ttemplatePath,\n\t\t\tcopySystemTemplates: true,\n\t\t})\n\n\t\t// Go to template directory\n\t\tOCA.Files.App.currentFileList.changeDirectory(templatePath, true, true)\n\n\t\ttemplates = response.data.ocs.data.templates\n\t\ttemplatesPath = response.data.ocs.data.template_path\n\t} catch (error) {\n\t\tlogger.error('Unable to initialize the templates directory')\n\t\tshowError(t('files', 'Unable to initialize the templates directory'))\n\t}\n}\n","/*\n * @copyright Copyright (c) 2021 Julius Härtl <jus@bitgrid.net>\n *\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { subscribe } from '@nextcloud/event-bus'\n\n(function() {\n\n\tconst FilesPlugin = {\n\t\tattach(fileList) {\n\t\t\tsubscribe('nextcloud:unified-search.search', ({ query }) => {\n\t\t\t\tfileList.setFilter(query)\n\t\t\t})\n\t\t\tsubscribe('nextcloud:unified-search.reset', () => {\n\t\t\t\tthis.query = null\n\t\t\t\tfileList.setFilter('')\n\t\t\t})\n\n\t\t},\n\t}\n\n\twindow.OC.Plugins.register('OCA.Files.FileList', FilesPlugin)\n\n})()\n","/**\n * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport { getLoggerBuilder } from '@nextcloud/logger'\n\nexport default getLoggerBuilder()\n\t.setApp('files')\n\t.detectUser()\n\t.build()\n","/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport logger from '../logger';\nexport class FileAction {\n    _action;\n    constructor(action) {\n        this.validateAction(action);\n        this._action = action;\n    }\n    get id() {\n        return this._action.id;\n    }\n    get displayName() {\n        return this._action.displayName;\n    }\n    get iconSvgInline() {\n        return this._action.iconSvgInline;\n    }\n    get enabled() {\n        return this._action.enabled;\n    }\n    get exec() {\n        return this._action.exec;\n    }\n    get execBatch() {\n        return this._action.execBatch;\n    }\n    get order() {\n        return this._action.order;\n    }\n    get default() {\n        return this._action.default;\n    }\n    get inline() {\n        return this._action.inline;\n    }\n    get renderInline() {\n        return this._action.renderInline;\n    }\n    validateAction(action) {\n        if (!action.id || typeof action.id !== 'string') {\n            throw new Error('Invalid id');\n        }\n        if (!action.displayName || typeof action.displayName !== 'function') {\n            throw new Error('Invalid displayName function');\n        }\n        if (!action.iconSvgInline || typeof action.iconSvgInline !== 'function') {\n            throw new Error('Invalid iconSvgInline function');\n        }\n        if (!action.exec || typeof action.exec !== 'function') {\n            throw new Error('Invalid exec function');\n        }\n        // Optional properties --------------------------------------------\n        if ('enabled' in action && typeof action.enabled !== 'function') {\n            throw new Error('Invalid enabled function');\n        }\n        if ('execBatch' in action && typeof action.execBatch !== 'function') {\n            throw new Error('Invalid execBatch function');\n        }\n        if ('order' in action && typeof action.order !== 'number') {\n            throw new Error('Invalid order');\n        }\n        if ('default' in action && typeof action.default !== 'boolean') {\n            throw new Error('Invalid default');\n        }\n        if ('inline' in action && typeof action.inline !== 'function') {\n            throw new Error('Invalid inline function');\n        }\n        if ('renderInline' in action && typeof action.renderInline !== 'function') {\n            throw new Error('Invalid renderInline function');\n        }\n    }\n}\nexport const registerFileAction = function (action) {\n    if (typeof window._nc_fileactions === 'undefined') {\n        window._nc_fileactions = [];\n        logger.debug('FileActions initialized');\n    }\n    // Check duplicates\n    if (window._nc_fileactions.find(search => search.id === action.id)) {\n        logger.error(`FileAction ${action.id} already registered`, { action });\n        return;\n    }\n    window._nc_fileactions.push(action);\n};\nexport const getFileActions = function () {\n    return window._nc_fileactions || [];\n};\n","/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport { emit } from '@nextcloud/event-bus';\nimport { Permission, Node } from '@nextcloud/files';\nimport { translate as t } from '@nextcloud/l10n';\nimport axios from '@nextcloud/axios';\nimport TrashCan from '@mdi/svg/svg/trash-can.svg?raw';\nimport { registerFileAction, FileAction } from '../services/FileAction.ts';\nimport logger from '../logger.js';\nregisterFileAction(new FileAction({\n    id: 'delete',\n    displayName(nodes, view) {\n        return view.id === 'trashbin'\n            ? t('files_trashbin', 'Delete permanently')\n            : t('files', 'Delete');\n    },\n    iconSvgInline: () => TrashCan,\n    enabled(nodes) {\n        return nodes.length > 0 && nodes\n            .map(node => node.permissions)\n            .every(permission => (permission & Permission.DELETE) !== 0);\n    },\n    async exec(node) {\n        try {\n            await axios.delete(node.source);\n            // Let's delete even if it's moved to the trashbin\n            // since it has been removed from the current view\n            //  and changing the view will trigger a reload anyway.\n            emit('files:node:deleted', node);\n            return true;\n        }\n        catch (error) {\n            logger.error('Error while deleting a file', { error, source: node.source, node });\n            return false;\n        }\n    },\n    async execBatch(nodes, view, dir) {\n        return Promise.all(nodes.map(node => this.exec(node, view, dir)));\n    },\n    order: 100,\n}));\n","/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport { translate as t } from '@nextcloud/l10n';\nimport InformationSvg from '@mdi/svg/svg/information-variant.svg?raw';\nimport { registerFileAction, FileAction } from '../services/FileAction.ts';\nimport logger from '../logger.js';\nexport const ACTION_DETAILS = 'details';\nregisterFileAction(new FileAction({\n    id: ACTION_DETAILS,\n    displayName: () => t('files', 'Details'),\n    iconSvgInline: () => InformationSvg,\n    // Sidebar currently supports user folder only, /files/USER\n    enabled: (files) => !!window?.OCA?.Files?.Sidebar\n        && files.some(node => node.root?.startsWith('/files/')),\n    async exec(node) {\n        try {\n            // TODO: migrate Sidebar to use a Node instead\n            window?.OCA?.Files?.Sidebar?.open?.(node.path);\n            return null;\n        }\n        catch (error) {\n            logger.error('Error while opening sidebar', { error });\n            return false;\n        }\n    },\n    default: true,\n    order: -50,\n}));\n","import { defineStore } from 'pinia';\nimport { subscribe } from '@nextcloud/event-bus';\nimport logger from '../logger';\nimport Vue from 'vue';\nexport const useFilesStore = function () {\n    const store = defineStore('files', {\n        state: () => ({\n            files: {},\n            roots: {},\n        }),\n        getters: {\n            /**\n             * Get a file or folder by id\n             */\n            getNode: (state) => (id) => state.files[id],\n            /**\n             * Get a list of files or folders by their IDs\n             * Does not return undefined values\n             */\n            getNodes: (state) => (ids) => ids\n                .map(id => state.files[id])\n                .filter(Boolean),\n            /**\n             * Get a file or folder by id\n             */\n            getRoot: (state) => (service) => state.roots[service],\n        },\n        actions: {\n            updateNodes(nodes) {\n                // Update the store all at once\n                const files = nodes.reduce((acc, node) => {\n                    if (!node.fileid) {\n                        logger.warn('Trying to update/set a node without fileid', node);\n                        return acc;\n                    }\n                    acc[node.fileid] = node;\n                    return acc;\n                }, {});\n                Vue.set(this, 'files', { ...this.files, ...files });\n            },\n            deleteNodes(nodes) {\n                nodes.forEach(node => {\n                    if (node.fileid) {\n                        Vue.delete(this.files, node.fileid);\n                    }\n                });\n            },\n            setRoot({ service, root }) {\n                Vue.set(this.roots, service, root);\n            },\n            onDeletedNode(node) {\n                this.deleteNodes([node]);\n            },\n        }\n    });\n    const fileStore = store(...arguments);\n    // Make sure we only register the listeners once\n    if (!fileStore._initialized) {\n        // subscribe('files:node:created', fileStore.onCreatedNode)\n        subscribe('files:node:deleted', fileStore.onDeletedNode);\n        // subscribe('files:node:moved', fileStore.onMovedNode)\n        // subscribe('files:node:updated', fileStore.onUpdatedNode)\n        fileStore._initialized = true;\n    }\n    return fileStore;\n};\n","import { defineStore } from 'pinia';\nimport { subscribe } from '@nextcloud/event-bus';\nimport Vue from 'vue';\nexport const usePathsStore = function () {\n    const store = defineStore('paths', {\n        state: () => ({\n            paths: {}\n        }),\n        getters: {\n            getPath: (state) => {\n                return (service, path) => {\n                    if (!state.paths[service]) {\n                        return undefined;\n                    }\n                    return state.paths[service][path];\n                };\n            },\n        },\n        actions: {\n            addPath(payload) {\n                // If it doesn't exists, init the service state\n                if (!this.paths[payload.service]) {\n                    Vue.set(this.paths, payload.service, {});\n                }\n                // Now we can set the provided path\n                Vue.set(this.paths[payload.service], payload.path, payload.fileid);\n            },\n        }\n    });\n    const pathsStore = store(...arguments);\n    // Make sure we only register the listeners once\n    if (!pathsStore._initialized) {\n        // TODO: watch folders to update paths?\n        // subscribe('files:node:created', pathsStore.onCreatedNode)\n        // subscribe('files:node:deleted', pathsStore.onDeletedNode)\n        // subscribe('files:node:moved', pathsStore.onMovedNode)\n        pathsStore._initialized = true;\n    }\n    return pathsStore;\n};\n","/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n/* eslint-disable */\nimport { defineStore } from 'pinia';\nimport Vue from 'vue';\nimport { FileId, SelectionStore } from '../types';\nexport const useSelectionStore = defineStore('selection', {\n    state: () => ({\n        selected: [],\n        lastSelection: [],\n        lastSelectedIndex: null,\n    }),\n    actions: {\n        /**\n         * Set the selection of fileIds\n         */\n        set(selection = []) {\n            Vue.set(this, 'selected', selection);\n        },\n        /**\n         * Set the last selected index\n         */\n        setLastIndex(lastSelectedIndex = null) {\n            // Update the last selection if we provided a new selection starting point\n            Vue.set(this, 'lastSelection', lastSelectedIndex ? this.selected : []);\n            Vue.set(this, 'lastSelectedIndex', lastSelectedIndex);\n        },\n        /**\n         * Reset the selection\n         */\n        reset() {\n            Vue.set(this, 'selected', []);\n            Vue.set(this, 'lastSelection', []);\n            Vue.set(this, 'lastSelectedIndex', null);\n        }\n    }\n});\n","/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n/* eslint-disable */\nimport { defineStore } from 'pinia';\nimport { emit, subscribe } from '@nextcloud/event-bus';\nimport { generateUrl } from '@nextcloud/router';\nimport { loadState } from '@nextcloud/initial-state';\nimport axios from '@nextcloud/axios';\nimport Vue from 'vue';\nconst viewConfig = loadState('files', 'viewConfigs', {});\nexport const useViewConfigStore = function () {\n    const store = defineStore('viewconfig', {\n        state: () => ({\n            viewConfig,\n        }),\n        getters: {\n            getConfig: (state) => (view) => state.viewConfig[view] || {},\n        },\n        actions: {\n            /**\n             * Update the view config local store\n             */\n            onUpdate(view, key, value) {\n                if (!this.viewConfig[view]) {\n                    Vue.set(this.viewConfig, view, {});\n                }\n                Vue.set(this.viewConfig[view], key, value);\n            },\n            /**\n             * Update the view config local store AND on server side\n             */\n            async update(view, key, value) {\n                axios.put(generateUrl(`/apps/files/api/v1/views/${view}/${key}`), {\n                    value,\n                });\n                emit('files:viewconfig:updated', { view, key, value });\n            },\n            /**\n             * Set the sorting key AND sort by ASC\n             * The key param must be a valid key of a File object\n             * If not found, will be searched within the File attributes\n             */\n            setSortingBy(key = 'basename', view = 'files') {\n                // Save new config\n                this.update(view, 'sorting_mode', key);\n                this.update(view, 'sorting_direction', 'asc');\n            },\n            /**\n             * Toggle the sorting direction\n             */\n            toggleSortingDirection(view = 'files') {\n                const config = this.getConfig(view) || { 'sorting_direction': 'asc' };\n                const newDirection = config.sorting_direction === 'asc' ? 'desc' : 'asc';\n                // Save new config\n                this.update(view, 'sorting_direction', newDirection);\n            }\n        }\n    });\n    const viewConfigStore = store(...arguments);\n    // Make sure we only register the listeners once\n    if (!viewConfigStore._initialized) {\n        subscribe('files:viewconfig:updated', function ({ view, key, value }) {\n            viewConfigStore.onUpdate(view, key, value);\n        });\n        viewConfigStore._initialized = true;\n    }\n    return viewConfigStore;\n};\n","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('NcBreadcrumbs',{attrs:{\"data-cy-files-content-breadcrumbs\":\"\"}},_vm._l((_vm.sections),function(section,index){return _c('NcBreadcrumb',_vm._b({key:section.dir,attrs:{\"aria-label\":_vm.ariaLabel(section),\"title\":_vm.ariaLabel(section)},nativeOn:{\"click\":function($event){return _vm.onClick(section.to)}},scopedSlots:_vm._u([(index === 0)?{key:\"icon\",fn:function(){return [_c('Home',{attrs:{\"size\":20}})]},proxy:true}:null],null,true)},'NcBreadcrumb',section,false))}),1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n\t<NcBreadcrumbs data-cy-files-content-breadcrumbs>\n\t\t<!-- Current path sections -->\n\t\t<NcBreadcrumb v-for=\"(section, index) in sections\"\n\t\t\t:key=\"section.dir\"\n\t\t\t:aria-label=\"ariaLabel(section)\"\n\t\t\t:title=\"ariaLabel(section)\"\n\t\t\tv-bind=\"section\"\n\t\t\t@click.native=\"onClick(section.to)\">\n\t\t\t<template v-if=\"index === 0\" #icon>\n\t\t\t\t<Home :size=\"20\" />\n\t\t\t</template>\n\t\t</NcBreadcrumb>\n\t</NcBreadcrumbs>\n</template>\n\n<script>\nimport { basename } from 'path'\nimport Home from 'vue-material-design-icons/Home.vue'\nimport NcBreadcrumb from '@nextcloud/vue/dist/Components/NcBreadcrumb.js'\nimport NcBreadcrumbs from '@nextcloud/vue/dist/Components/NcBreadcrumbs.js'\nimport Vue from 'vue'\n\nimport { useFilesStore } from '../store/files.ts'\nimport { usePathsStore } from '../store/paths.ts'\n\nexport default Vue.extend({\n\tname: 'BreadCrumbs',\n\n\tcomponents: {\n\t\tHome,\n\t\tNcBreadcrumbs,\n\t\tNcBreadcrumb,\n\t},\n\n\tprops: {\n\t\tpath: {\n\t\t\ttype: String,\n\t\t\tdefault: '/',\n\t\t},\n\t},\n\n\tsetup() {\n\t\tconst filesStore = useFilesStore()\n\t\tconst pathsStore = usePathsStore()\n\t\treturn {\n\t\t\tfilesStore,\n\t\t\tpathsStore,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tcurrentView() {\n\t\t\treturn this.$navigation.active\n\t\t},\n\n\t\tdirs() {\n\t\t\tconst cumulativePath = (acc) => (value) => (acc += `${value}/`)\n\t\t\t// Generate a cumulative path for each path segment: ['/', '/foo', '/foo/bar', ...] etc\n\t\t\tconst paths = this.path.split('/').filter(Boolean).map(cumulativePath('/'))\n\t\t\t// Strip away trailing slash\n\t\t\treturn ['/', ...paths.map(path => path.replace(/^(.+)\\/$/, '$1'))]\n\t\t},\n\n\t\tsections() {\n\t\t\treturn this.dirs.map(dir => {\n\t\t\t\tconst to = { ...this.$route, query: { dir } }\n\t\t\t\treturn {\n\t\t\t\t\tdir,\n\t\t\t\t\texact: true,\n\t\t\t\t\tname: this.getDirDisplayName(dir),\n\t\t\t\t\tto,\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\t},\n\n\tmethods: {\n\t\tgetNodeFromId(id) {\n\t\t\treturn this.filesStore.getNode(id)\n\t\t},\n\t\tgetFileIdFromPath(path) {\n\t\t\treturn this.pathsStore.getPath(this.currentView?.id, path)\n\t\t},\n\t\tgetDirDisplayName(path) {\n\t\t\tif (path === '/') {\n\t\t\t\treturn t('files', 'Home')\n\t\t\t}\n\n\t\t\tconst fileId = this.getFileIdFromPath(path)\n\t\t\tconst node = this.getNodeFromId(fileId)\n\t\t\treturn node?.attributes?.displayName || basename(path)\n\t\t},\n\n\t\tonClick(to) {\n\t\t\tif (to?.query?.dir === this.$route.query.dir) {\n\t\t\t\tthis.$emit('reload')\n\t\t\t}\n\t\t},\n\n\t\tariaLabel(section) {\n\t\t\tif (section?.to?.query?.dir === this.$route.query.dir) {\n\t\t\t\treturn t('files', 'Reload current directory')\n\t\t\t}\n\t\t\treturn t('files', 'Go to the \"{dir}\" directory', section)\n\t\t},\n\t},\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.breadcrumb {\n\t// Take as much space as possible\n\tflex: 1 1 100% !important;\n\twidth: 100%;\n\n\t::v-deep a {\n\t\tcursor: pointer !important;\n\t}\n}\n\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BreadCrumbs.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BreadCrumbs.vue?vue&type=script&lang=js&\"","\n      import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BreadCrumbs.vue?vue&type=style&index=0&id=68b3b20b&prod&lang=scss&scoped=true&\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BreadCrumbs.vue?vue&type=style&index=0&id=68b3b20b&prod&lang=scss&scoped=true&\";\n       export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./BreadCrumbs.vue?vue&type=template&id=68b3b20b&scoped=true&\"\nimport script from \"./BreadCrumbs.vue?vue&type=script&lang=js&\"\nexport * from \"./BreadCrumbs.vue?vue&type=script&lang=js&\"\nimport style0 from \"./BreadCrumbs.vue?vue&type=style&index=0&id=68b3b20b&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"68b3b20b\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('RecycleScroller',{ref:\"recycleScroller\",staticClass:\"files-list\",attrs:{\"key-field\":\"source\",\"items\":_vm.nodes,\"item-size\":55,\"table-mode\":true,\"item-class\":\"files-list__row\",\"item-tag\":\"tr\",\"list-class\":\"files-list__body\",\"list-tag\":\"tbody\",\"role\":\"table\"},scopedSlots:_vm._u([{key:\"default\",fn:function({ item, active, index }){return [_c('FileEntry',{attrs:{\"active\":active,\"index\":index,\"is-size-available\":_vm.isSizeAvailable,\"files-list-width\":_vm.filesListWidth,\"nodes\":_vm.nodes,\"source\":item}})]}},{key:\"before\",fn:function(){return [_c('caption',{staticClass:\"hidden-visually\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.currentView.caption || '')+\"\\n\\t\\t\\t\"+_vm._s(_vm.t('files', 'This list is not fully rendered for performances reasons. The files will be rendered as you navigate through the list.'))+\"\\n\\t\\t\")]),_vm._v(\" \"),_c('FilesListHeader',{attrs:{\"files-list-width\":_vm.filesListWidth,\"is-size-available\":_vm.isSizeAvailable,\"nodes\":_vm.nodes}})]},proxy:true},{key:\"after\",fn:function(){return [_c('FilesListFooter',{attrs:{\"files-list-width\":_vm.filesListWidth,\"is-size-available\":_vm.isSizeAvailable,\"nodes\":_vm.nodes,\"summary\":_vm.summary}})]},proxy:true}])})\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nexport const hashCode = function (str) {\n    return str.split('').reduce(function (a, b) {\n        a = ((a << 5) - a) + b.charCodeAt(0);\n        return a & a;\n    }, 0);\n};\n","/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n/* eslint-disable */\nimport { defineStore } from 'pinia';\nexport const useActionsMenuStore = defineStore('actionsmenu', {\n    state: () => ({\n        opened: null,\n    }),\n});\n","/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n/* eslint-disable */\nimport { loadState } from '@nextcloud/initial-state';\nimport { generateUrl } from '@nextcloud/router';\nimport { defineStore } from 'pinia';\nimport Vue from 'vue';\nimport axios from '@nextcloud/axios';\nimport { emit, subscribe } from '@nextcloud/event-bus';\nconst userConfig = loadState('files', 'config', {\n    show_hidden: false,\n    crop_image_previews: true,\n});\nexport const useUserConfigStore = function () {\n    const store = defineStore('userconfig', {\n        state: () => ({\n            userConfig,\n        }),\n        actions: {\n            /**\n             * Update the user config local store\n             */\n            onUpdate(key, value) {\n                Vue.set(this.userConfig, key, value);\n            },\n            /**\n             * Update the user config local store AND on server side\n             */\n            async update(key, value) {\n                await axios.put(generateUrl('/apps/files/api/v1/config/' + key), {\n                    value,\n                });\n                emit('files:config:updated', { key, value });\n            }\n        }\n    });\n    const userConfigStore = store(...arguments);\n    // Make sure we only register the listeners once\n    if (!userConfigStore._initialized) {\n        subscribe('files:config:updated', function ({ key, value }) {\n            userConfigStore.onUpdate(key, value);\n        });\n        userConfigStore._initialized = true;\n    }\n    return userConfigStore;\n};\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CustomElementRender.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CustomElementRender.vue?vue&type=script&lang=js&\"","<!--\n  - @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n  -\n  - @author John Molakvoæ <skjnldsv@protonmail.com>\n  -\n  - @license GNU AGPL version 3 or any later version\n  -\n  - This program is free software: you can redistribute it and/or modify\n  - it under the terms of the GNU Affero General Public License as\n  - published by the Free Software Foundation, either version 3 of the\n  - License, or (at your option) any later version.\n  -\n  - This program is distributed in the hope that it will be useful,\n  - but WITHOUT ANY WARRANTY; without even the implied warranty of\n  - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n  - GNU Affero General Public License for more details.\n  -\n  - You should have received a copy of the GNU Affero General Public License\n  - along with this program. If not, see <http://www.gnu.org/licenses/>.\n  -\n  -->\n<template>\n\t<span />\n</template>\n\n<script>\n/**\n * This component is used to render custom\n * elements provided by an API. Vue doesn't allow\n * to directly render an HTMLElement, so we can do\n * this magic here.\n */\nexport default {\n\tname: 'CustomElementRender',\n\tprops: {\n\t\tsource: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t\tcurrentView: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t\trender: {\n\t\t\ttype: Function,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tcomputed: {\n\t\telement() {\n\t\t\treturn this.render(this.source, this.currentView)\n\t\t},\n\t},\n\twatch: {\n\t\telement() {\n\t\t\tthis.$el.replaceWith(this.element)\n\t\t\tthis.$el = this.element\n\t\t},\n\t},\n\tmounted() {\n\t\tthis.$el.replaceWith(this.element)\n\t\tthis.$el = this.element\n\t},\n}\n</script>\n","import { render, staticRenderFns } from \"./CustomElementRender.vue?vue&type=template&id=a261c93e&\"\nimport script from \"./CustomElementRender.vue?vue&type=script&lang=js&\"\nexport * from \"./CustomElementRender.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('span')\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('span',{staticClass:\"custom-svg-icon\"})\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n  - @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n  -\n  - @author John Molakvoæ <skjnldsv@protonmail.com>\n  -\n  - @license GNU AGPL version 3 or any later version\n  -\n  - This program is free software: you can redistribute it and/or modify\n  - it under the terms of the GNU Affero General Public License as\n  - published by the Free Software Foundation, either version 3 of the\n  - License, or (at your option) any later version.\n  -\n  - This program is distributed in the hope that it will be useful,\n  - but WITHOUT ANY WARRANTY; without even the implied warranty of\n  - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n  - GNU Affero General Public License for more details.\n  -\n  - You should have received a copy of the GNU Affero General Public License\n  - along with this program. If not, see <http://www.gnu.org/licenses/>.\n  -\n  -->\n<template>\n\t<span class=\"custom-svg-icon\" />\n</template>\n\n<script>\n// eslint-disable-next-line import/named\nimport { sanitize } from 'dompurify'\n\nexport default {\n\tname: 'CustomSvgIconRender',\n\tprops: {\n\t\tsvg: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t},\n\twatch: {\n\t\tsvg() {\n\t\t\tthis.$el.innerHTML = sanitize(this.svg)\n\t\t},\n\t},\n\tmounted() {\n\t\tthis.$el.innerHTML = sanitize(this.svg)\n\t},\n}\n</script>\n<style lang=\"scss\" scoped>\n.custom-svg-icon {\n\tdisplay: flex;\n\talign-items: center;\n\talign-self: center;\n\tjustify-content: center;\n\tjustify-self: center;\n\twidth: 44px;\n\theight: 44px;\n\topacity: 1;\n\n\t::v-deep svg {\n\t\t// mdi icons have a size of 24px\n\t\t// 22px results in roughly 16px inner size\n\t\theight: 22px;\n\t\twidth: 22px;\n\t\tfill: currentColor;\n\t}\n}\n\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CustomSvgIconRender.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CustomSvgIconRender.vue?vue&type=script&lang=js&\"","\n      import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CustomSvgIconRender.vue?vue&type=style&index=0&id=93e9b2f4&prod&lang=scss&scoped=true&\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CustomSvgIconRender.vue?vue&type=style&index=0&id=93e9b2f4&prod&lang=scss&scoped=true&\";\n       export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./CustomSvgIconRender.vue?vue&type=template&id=93e9b2f4&scoped=true&\"\nimport script from \"./CustomSvgIconRender.vue?vue&type=script&lang=js&\"\nexport * from \"./CustomSvgIconRender.vue?vue&type=script&lang=js&\"\nimport style0 from \"./CustomSvgIconRender.vue?vue&type=style&index=0&id=93e9b2f4&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"93e9b2f4\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('Fragment',[_c('td',{staticClass:\"files-list__row-checkbox\"},[(_vm.active)?_c('NcCheckboxRadioSwitch',{attrs:{\"aria-label\":_vm.t('files', 'Select the row for {displayName}', { displayName: _vm.displayName }),\"checked\":_vm.selectedFiles,\"value\":_vm.fileid,\"name\":\"selectedFiles\"},on:{\"update:checked\":_vm.onSelectionChange}}):_vm._e()],1),_vm._v(\" \"),_c('td',{staticClass:\"files-list__row-name\"},[_c('a',_vm._b({ref:\"name\",on:{\"click\":_vm.execDefaultAction}},'a',_vm.linkTo,false),[_c('span',{staticClass:\"files-list__row-icon\"},[(_vm.source.type === 'folder')?_c('FolderIcon'):(_vm.previewUrl && !_vm.backgroundFailed)?_c('span',{ref:\"previewImg\",staticClass:\"files-list__row-icon-preview\",style:({ backgroundImage: _vm.backgroundImage })}):(_vm.mimeIconUrl)?_c('span',{staticClass:\"files-list__row-icon-preview files-list__row-icon-preview--mime\",style:({ backgroundImage: _vm.mimeIconUrl })}):_c('FileIcon'),_vm._v(\" \"),(_vm.isFavorite)?_c('span',{staticClass:\"files-list__row-icon-favorite\",attrs:{\"aria-label\":_vm.t('files', 'Favorite')}},[_c('StarIcon',{attrs:{\"aria-hidden\":\"true\",\"size\":20}})],1):_vm._e()],1),_vm._v(\" \"),_c('span',{staticClass:\"files-list__row-name-text\"},[_vm._v(_vm._s(_vm.displayName))])])]),_vm._v(\" \"),_c('td',{staticClass:\"files-list__row-actions\",class:`files-list__row-actions-${_vm.uniqueId}`},[(_vm.active)?_c('NcActions',{ref:\"actionsMenu\",attrs:{\"boundaries-element\":_vm.boundariesElement,\"container\":_vm.boundariesElement,\"disabled\":_vm.source._loading,\"force-title\":true,\"force-menu\":true,\"inline\":_vm.enabledInlineActions.length,\"open\":_vm.openedMenu},on:{\"update:open\":function($event){_vm.openedMenu=$event}}},_vm._l((_vm.enabledMenuActions),function(action){return _c('NcActionButton',{key:action.id,class:'files-list__row-action-' + action.id,on:{\"click\":function($event){return _vm.onActionClick(action)}},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [(_vm.loading === action.id)?_c('NcLoadingIcon',{attrs:{\"size\":18}}):_c('CustomSvgIconRender',{attrs:{\"svg\":action.iconSvgInline([_vm.source], _vm.currentView)}})]},proxy:true}],null,true)},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(action.displayName([_vm.source], _vm.currentView))+\"\\n\\t\\t\\t\")])}),1):_vm._e()],1),_vm._v(\" \"),(_vm.isSizeAvailable)?_c('td',{staticClass:\"files-list__row-size\",style:({ opacity: _vm.sizeOpacity }),on:{\"click\":_vm.openDetailsIfAvailable}},[_c('span',[_vm._v(_vm._s(_vm.size))])]):_vm._e(),_vm._v(\" \"),_vm._l((_vm.columns),function(column){return _c('td',{key:column.id,staticClass:\"files-list__row-column-custom\",class:`files-list__row-${_vm.currentView?.id}-${column.id}`,on:{\"click\":_vm.openDetailsIfAvailable}},[(_vm.active)?_c('CustomElementRender',{attrs:{\"current-view\":_vm.currentView,\"render\":column.render,\"source\":_vm.source}}):_vm._e()],1)})],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileEntry.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileEntry.vue?vue&type=script&lang=ts&\"","/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n/* eslint-disable */\nimport { defineStore } from 'pinia';\nimport Vue from 'vue';\n/**\n * Observe various events and save the current\n * special keys states. Useful for checking the\n * current status of a key when executing a method.\n */\nexport const useKeyboardStore = function () {\n    const store = defineStore('keyboard', {\n        state: () => ({\n            altKey: false,\n            ctrlKey: false,\n            metaKey: false,\n            shiftKey: false,\n        }),\n        actions: {\n            onEvent(event) {\n                if (!event) {\n                    event = window.event;\n                }\n                Vue.set(this, 'altKey', !!event.altKey);\n                Vue.set(this, 'ctrlKey', !!event.ctrlKey);\n                Vue.set(this, 'metaKey', !!event.metaKey);\n                Vue.set(this, 'shiftKey', !!event.shiftKey);\n            },\n        }\n    });\n    const keyboardStore = store(...arguments);\n    // Make sure we only register the listeners once\n    if (!keyboardStore._initialized) {\n        window.addEventListener('keydown', keyboardStore.onEvent);\n        window.addEventListener('keyup', keyboardStore.onEvent);\n        window.addEventListener('mousemove', keyboardStore.onEvent);\n        keyboardStore._initialized = true;\n    }\n    return keyboardStore;\n};\n","/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n// The preview service worker cache name (see webpack config)\nconst SWCacheName = 'previews';\n/**\n * Check if the preview is already cached by the service worker\n */\nexport const isCachedPreview = function (previewUrl) {\n    return caches.open(SWCacheName)\n        .then(function (cache) {\n        return cache.match(previewUrl)\n            .then(function (response) {\n            return !!response;\n        });\n    });\n};\n","\n      import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileEntry.vue?vue&type=style&index=0&id=0600090e&prod&scoped=true&lang=scss&\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileEntry.vue?vue&type=style&index=0&id=0600090e&prod&scoped=true&lang=scss&\";\n       export default content && content.locals ? content.locals : undefined;\n","\n      import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileEntry.vue?vue&type=style&index=1&id=0600090e&prod&lang=css&\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileEntry.vue?vue&type=style&index=1&id=0600090e&prod&lang=css&\";\n       export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./FileEntry.vue?vue&type=template&id=0600090e&scoped=true&\"\nimport script from \"./FileEntry.vue?vue&type=script&lang=ts&\"\nexport * from \"./FileEntry.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./FileEntry.vue?vue&type=style&index=0&id=0600090e&prod&scoped=true&lang=scss&\"\nimport style1 from \"./FileEntry.vue?vue&type=style&index=1&id=0600090e&prod&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"0600090e\",\n  null\n  \n)\n\nexport default component.exports","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesListFooter.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesListFooter.vue?vue&type=script&lang=ts&\"","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('tr',[_c('th',{staticClass:\"files-list__row-checkbox\"},[_c('span',{staticClass:\"hidden-visually\"},[_vm._v(_vm._s(_vm.t('files', 'Total rows summary')))])]),_vm._v(\" \"),_c('td',{staticClass:\"files-list__row-name\"},[_c('span',{staticClass:\"files-list__row-icon\"}),_vm._v(\" \"),_c('span',[_vm._v(_vm._s(_vm.summary))])]),_vm._v(\" \"),_c('td',{staticClass:\"files-list__row-actions\"}),_vm._v(\" \"),(_vm.isSizeAvailable)?_c('td',{staticClass:\"files-list__column files-list__row-size\"},[_c('span',[_vm._v(_vm._s(_vm.totalSize))])]):_vm._e(),_vm._v(\" \"),_vm._l((_vm.columns),function(column){return _c('th',{key:column.id,class:_vm.classForColumn(column)},[_c('span',[_vm._v(_vm._s(column.summary?.(_vm.nodes, _vm.currentView)))])])})],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n      import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesListFooter.vue?vue&type=style&index=0&id=e6a083be&prod&scoped=true&lang=scss&\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesListFooter.vue?vue&type=style&index=0&id=e6a083be&prod&scoped=true&lang=scss&\";\n       export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./FilesListFooter.vue?vue&type=template&id=e6a083be&scoped=true&\"\nimport script from \"./FilesListFooter.vue?vue&type=script&lang=ts&\"\nexport * from \"./FilesListFooter.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./FilesListFooter.vue?vue&type=style&index=0&id=e6a083be&prod&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"e6a083be\",\n  null\n  \n)\n\nexport default component.exports","/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport Vue from 'vue';\nexport default Vue.extend({\n    data() {\n        return {\n            filesListWidth: null,\n        };\n    },\n    created() {\n        const fileListEl = document.querySelector('#app-content-vue');\n        this.$resizeObserver = new ResizeObserver((entries) => {\n            if (entries.length > 0 && entries[0].target === fileListEl) {\n                this.filesListWidth = entries[0].contentRect.width;\n            }\n        });\n        this.$resizeObserver.observe(fileListEl);\n    },\n    beforeDestroy() {\n        this.$resizeObserver.disconnect();\n    },\n});\n","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('th',{staticClass:\"files-list__column files-list__row-actions-batch\",attrs:{\"colspan\":\"2\"}},[_c('NcActions',{ref:\"actionsMenu\",attrs:{\"disabled\":!!_vm.loading || _vm.areSomeNodesLoading,\"force-title\":true,\"inline\":_vm.inlineActions,\"menu-title\":_vm.inlineActions <= 1 ? _vm.t('files', 'Actions') : null,\"open\":_vm.openedMenu},on:{\"update:open\":function($event){_vm.openedMenu=$event}}},_vm._l((_vm.enabledActions),function(action){return _c('NcActionButton',{key:action.id,class:'files-list__row-actions-batch-' + action.id,on:{\"click\":function($event){return _vm.onActionClick(action)}},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [(_vm.loading === action.id)?_c('NcLoadingIcon',{attrs:{\"size\":18}}):_c('CustomSvgIconRender',{attrs:{\"svg\":action.iconSvgInline(_vm.nodes, _vm.currentView)}})]},proxy:true}],null,true)},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(action.displayName(_vm.nodes, _vm.currentView))+\"\\n\\t\\t\")])}),1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesListHeaderActions.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesListHeaderActions.vue?vue&type=script&lang=ts&\"","\n      import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesListHeaderActions.vue?vue&type=style&index=0&id=03e57b1e&prod&scoped=true&lang=scss&\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesListHeaderActions.vue?vue&type=style&index=0&id=03e57b1e&prod&scoped=true&lang=scss&\";\n       export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./FilesListHeaderActions.vue?vue&type=template&id=03e57b1e&scoped=true&\"\nimport script from \"./FilesListHeaderActions.vue?vue&type=script&lang=ts&\"\nexport * from \"./FilesListHeaderActions.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./FilesListHeaderActions.vue?vue&type=style&index=0&id=03e57b1e&prod&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"03e57b1e\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('NcButton',{staticClass:\"files-list__column-sort-button\",class:{'files-list__column-sort-button--active': _vm.sortingMode === _vm.mode},attrs:{\"aria-label\":_vm.sortAriaLabel(_vm.name),\"type\":\"tertiary\"},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.toggleSortBy(_vm.mode)}}},[(_vm.sortingMode !== _vm.mode || _vm.isAscSorting)?_c('MenuUp',{attrs:{\"slot\":\"icon\"},slot:\"icon\"}):_c('MenuDown',{attrs:{\"slot\":\"icon\"},slot:\"icon\"}),_vm._v(\"\\n\\t\"+_vm._s(_vm.name)+\"\\n\")],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport Vue from 'vue';\nimport { mapState } from 'pinia';\nimport { useViewConfigStore } from '../store/viewConfig';\nexport default Vue.extend({\n    computed: {\n        ...mapState(useViewConfigStore, ['getConfig', 'setSortingBy', 'toggleSortingDirection']),\n        currentView() {\n            return this.$navigation.active;\n        },\n        /**\n         * Get the sorting mode for the current view\n         */\n        sortingMode() {\n            return this.getConfig(this.currentView.id)?.sorting_mode\n                || this.currentView?.defaultSortKey\n                || 'basename';\n        },\n        /**\n         * Get the sorting direction for the current view\n         */\n        isAscSorting() {\n            const sortingDirection = this.getConfig(this.currentView.id)?.sorting_direction;\n            return sortingDirection === 'asc';\n        },\n    },\n    methods: {\n        toggleSortBy(key) {\n            // If we're already sorting by this key, flip the direction\n            if (this.sortingMode === key) {\n                this.toggleSortingDirection(this.currentView.id);\n                return;\n            }\n            // else sort ASC by this new key\n            this.setSortingBy(key, this.currentView.id);\n        },\n    },\n});\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesListHeaderButton.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesListHeaderButton.vue?vue&type=script&lang=ts&\"","\n      import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesListHeaderButton.vue?vue&type=style&index=0&id=e85a09d2&prod&lang=scss&\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesListHeaderButton.vue?vue&type=style&index=0&id=e85a09d2&prod&lang=scss&\";\n       export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./FilesListHeaderButton.vue?vue&type=template&id=e85a09d2&\"\nimport script from \"./FilesListHeaderButton.vue?vue&type=script&lang=ts&\"\nexport * from \"./FilesListHeaderButton.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./FilesListHeaderButton.vue?vue&type=style&index=0&id=e85a09d2&prod&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesListHeader.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesListHeader.vue?vue&type=script&lang=ts&\"","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('tr',[_c('th',{staticClass:\"files-list__column files-list__row-checkbox\"},[_c('NcCheckboxRadioSwitch',_vm._b({on:{\"update:checked\":_vm.onToggleAll}},'NcCheckboxRadioSwitch',_vm.selectAllBind,false))],1),_vm._v(\" \"),(!_vm.isNoneSelected)?_c('FilesListHeaderActions',{attrs:{\"current-view\":_vm.currentView,\"selected-nodes\":_vm.selectedNodes}}):[_c('th',{staticClass:\"files-list__column files-list__row-name files-list__column--sortable\",on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.toggleSortBy('basename')}}},[_c('span',{staticClass:\"files-list__row-icon\"}),_vm._v(\" \"),_c('FilesListHeaderButton',{attrs:{\"name\":_vm.t('files', 'Name'),\"mode\":\"basename\"}})],1),_vm._v(\" \"),_c('th',{staticClass:\"files-list__row-actions\"}),_vm._v(\" \"),(_vm.isSizeAvailable)?_c('th',{staticClass:\"files-list__column files-list__row-size\",class:{'files-list__column--sortable': _vm.isSizeAvailable}},[_c('FilesListHeaderButton',{attrs:{\"name\":_vm.t('files', 'Size'),\"mode\":\"size\"}})],1):_vm._e(),_vm._v(\" \"),_vm._l((_vm.columns),function(column){return _c('th',{key:column.id,class:_vm.classForColumn(column)},[(!!column.sort)?_c('FilesListHeaderButton',{attrs:{\"name\":column.title,\"mode\":column.id}}):_c('span',[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(column.title)+\"\\n\\t\\t\\t\")])],1)})]],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n      import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesListHeader.vue?vue&type=style&index=0&id=76b6186a&prod&scoped=true&lang=scss&\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesListHeader.vue?vue&type=style&index=0&id=76b6186a&prod&scoped=true&lang=scss&\";\n       export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./FilesListHeader.vue?vue&type=template&id=76b6186a&scoped=true&\"\nimport script from \"./FilesListHeader.vue?vue&type=script&lang=ts&\"\nexport * from \"./FilesListHeader.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./FilesListHeader.vue?vue&type=style&index=0&id=76b6186a&prod&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"76b6186a\",\n  null\n  \n)\n\nexport default component.exports","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesListVirtual.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesListVirtual.vue?vue&type=script&lang=ts&\"","\n      import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesListVirtual.vue?vue&type=style&index=0&id=640a8bb8&prod&scoped=true&lang=scss&\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesListVirtual.vue?vue&type=style&index=0&id=640a8bb8&prod&scoped=true&lang=scss&\";\n       export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./FilesListVirtual.vue?vue&type=template&id=640a8bb8&scoped=true&\"\nimport script from \"./FilesListVirtual.vue?vue&type=script&lang=ts&\"\nexport * from \"./FilesListVirtual.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./FilesListVirtual.vue?vue&type=style&index=0&id=640a8bb8&prod&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"640a8bb8\",\n  null\n  \n)\n\nexport default component.exports","import isSvg from 'is-svg';\nimport logger from '../logger.js';\nexport default class {\n    _views = [];\n    _currentView = null;\n    constructor() {\n        logger.debug('Navigation service initialized');\n    }\n    register(view) {\n        try {\n            isValidNavigation(view);\n            isUniqueNavigation(view, this._views);\n        }\n        catch (e) {\n            if (e instanceof Error) {\n                logger.error(e.message, { view });\n            }\n            throw e;\n        }\n        if (view.legacy) {\n            logger.warn('Legacy view detected, please migrate to Vue');\n        }\n        if (view.iconClass) {\n            view.legacy = true;\n        }\n        this._views.push(view);\n    }\n    remove(id) {\n        const index = this._views.findIndex(view => view.id === id);\n        if (index !== -1) {\n            this._views.splice(index, 1);\n        }\n    }\n    get views() {\n        return this._views;\n    }\n    setActive(view) {\n        this._currentView = view;\n    }\n    get active() {\n        return this._currentView;\n    }\n}\n/**\n * Make sure the given view is unique\n * and not already registered.\n */\nconst isUniqueNavigation = function (view, views) {\n    if (views.find(search => search.id === view.id)) {\n        throw new Error(`Navigation id ${view.id} is already registered`);\n    }\n    return true;\n};\n/**\n * Typescript cannot validate an interface.\n * Please keep in sync with the Navigation interface requirements.\n */\nconst isValidNavigation = function (view) {\n    if (!view.id || typeof view.id !== 'string') {\n        throw new Error('Navigation id is required and must be a string');\n    }\n    if (!view.name || typeof view.name !== 'string') {\n        throw new Error('Navigation name is required and must be a string');\n    }\n    /**\n     * Legacy handle their content and icon differently\n     * TODO: remove when support for legacy views is removed\n     */\n    if (!view.legacy) {\n        if (!view.getContents || typeof view.getContents !== 'function') {\n            throw new Error('Navigation getContents is required and must be a function');\n        }\n        if (!view.icon || typeof view.icon !== 'string' || !isSvg(view.icon)) {\n            throw new Error('Navigation icon is required and must be a valid svg string');\n        }\n    }\n    if (!('order' in view) || typeof view.order !== 'number') {\n        throw new Error('Navigation order is required and must be a number');\n    }\n    // Optional properties\n    if (view.columns) {\n        view.columns.forEach(isValidColumn);\n    }\n    if (view.emptyView && typeof view.emptyView !== 'function') {\n        throw new Error('Navigation emptyView must be a function');\n    }\n    if (view.parent && typeof view.parent !== 'string') {\n        throw new Error('Navigation parent must be a string');\n    }\n    if ('sticky' in view && typeof view.sticky !== 'boolean') {\n        throw new Error('Navigation sticky must be a boolean');\n    }\n    if ('expanded' in view && typeof view.expanded !== 'boolean') {\n        throw new Error('Navigation expanded must be a boolean');\n    }\n    if (view.defaultSortKey && typeof view.defaultSortKey !== 'string') {\n        throw new Error('Navigation defaultSortKey must be a string');\n    }\n    return true;\n};\n/**\n * Typescript cannot validate an interface.\n * Please keep in sync with the Column interface requirements.\n */\nconst isValidColumn = function (column) {\n    if (!column.id || typeof column.id !== 'string') {\n        throw new Error('A column id is required');\n    }\n    if (!column.title || typeof column.title !== 'string') {\n        throw new Error('A column title is required');\n    }\n    if (!column.render || typeof column.render !== 'function') {\n        throw new Error('A render function is required');\n    }\n    // Optional properties\n    if (column.sort && typeof column.sort !== 'function') {\n        throw new Error('Column sortFunction must be a function');\n    }\n    if (column.summary && typeof column.summary !== 'function') {\n        throw new Error('Column summary must be a function');\n    }\n    return true;\n};\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesList.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesList.vue?vue&type=script&lang=ts&\"","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('NcAppContent',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.currentView?.legacy),expression:\"!currentView?.legacy\"}],class:{'app-content--hidden': _vm.currentView?.legacy},attrs:{\"data-cy-files-content\":\"\"}},[_c('div',{staticClass:\"files-list__header\"},[_c('BreadCrumbs',{attrs:{\"path\":_vm.dir},on:{\"reload\":_vm.fetchContent}}),_vm._v(\" \"),(_vm.isRefreshing)?_c('NcLoadingIcon',{staticClass:\"files-list__refresh-icon\"}):_vm._e()],1),_vm._v(\" \"),(_vm.loading && !_vm.isRefreshing)?_c('NcLoadingIcon',{staticClass:\"files-list__loading-icon\",attrs:{\"size\":38,\"title\":_vm.t('files', 'Loading current folder')}}):(!_vm.loading && _vm.isEmptyDir)?_c('NcEmptyContent',{attrs:{\"title\":_vm.t('files', 'No files in here'),\"description\":_vm.t('files', 'No files or folders have been deleted yet'),\"data-cy-files-content-empty\":\"\"},scopedSlots:_vm._u([{key:\"action\",fn:function(){return [(_vm.dir !== '/')?_c('NcButton',{attrs:{\"aria-label\":\"t('files', 'Go to the previous folder')\",\"type\":\"primary\",\"to\":_vm.toPreviousDir}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('files', 'Go back'))+\"\\n\\t\\t\\t\")]):_vm._e()]},proxy:true},{key:\"icon\",fn:function(){return [_c('TrashCan')]},proxy:true}])}):_c('FilesListVirtual',{ref:\"filesListVirtual\",attrs:{\"current-view\":_vm.currentView,\"nodes\":_vm.dirContents}})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n      import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesList.vue?vue&type=style&index=0&id=66068cbb&prod&scoped=true&lang=scss&\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilesList.vue?vue&type=style&index=0&id=66068cbb&prod&scoped=true&lang=scss&\";\n       export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./FilesList.vue?vue&type=template&id=66068cbb&scoped=true&\"\nimport script from \"./FilesList.vue?vue&type=script&lang=ts&\"\nexport * from \"./FilesList.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./FilesList.vue?vue&type=style&index=0&id=66068cbb&prod&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"66068cbb\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('NcAppNavigation',{attrs:{\"data-cy-files-navigation\":\"\"},scopedSlots:_vm._u([{key:\"list\",fn:function(){return _vm._l((_vm.parentViews),function(view){return _c('NcAppNavigationItem',{key:view.id,attrs:{\"allow-collapse\":true,\"data-cy-files-navigation-item\":view.id,\"icon\":view.iconClass,\"open\":_vm.isExpanded(view),\"pinned\":view.sticky,\"title\":view.name,\"to\":_vm.generateToNavigation(view)},on:{\"update:open\":function($event){return _vm.onToggleExpand(view)}}},[(view.icon)?_c('NcIconSvgWrapper',{attrs:{\"slot\":\"icon\",\"svg\":view.icon},slot:\"icon\"}):_vm._e(),_vm._v(\" \"),_vm._l((_vm.childViews[view.id]),function(child){return _c('NcAppNavigationItem',{key:child.id,attrs:{\"data-cy-files-navigation-item\":child.id,\"exact\":true,\"icon\":child.iconClass,\"title\":child.name,\"to\":_vm.generateToNavigation(child)}},[(child.icon)?_c('NcIconSvgWrapper',{attrs:{\"slot\":\"icon\",\"svg\":child.icon},slot:\"icon\"}):_vm._e()],1)})],2)})},proxy:true},{key:\"footer\",fn:function(){return [_c('ul',{staticClass:\"app-navigation-entry__settings\"},[_c('NavigationQuota'),_vm._v(\" \"),_c('NcAppNavigationItem',{attrs:{\"aria-label\":_vm.t('files', 'Open the files app settings'),\"title\":_vm.t('files', 'Files settings'),\"data-cy-files-navigation-settings-button\":\"\"},on:{\"click\":function($event){$event.preventDefault();$event.stopPropagation();return _vm.openSettings.apply(null, arguments)}}},[_c('Cog',{attrs:{\"slot\":\"icon\",\"size\":20},slot:\"icon\"})],1)],1)]},proxy:true}])},[_vm._v(\" \"),_vm._v(\" \"),_c('SettingsModal',{attrs:{\"open\":_vm.settingsOpened,\"data-cy-files-navigation-settings\":\"\"},on:{\"close\":_vm.onSettingsClose}})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return (_vm.storageStats)?_c('NcAppNavigationItem',{staticClass:\"app-navigation-entry__settings-quota\",class:{ 'app-navigation-entry__settings-quota--not-unlimited': _vm.storageStats.quota >= 0},attrs:{\"aria-label\":_vm.t('files', 'Storage informations'),\"loading\":_vm.loadingStorageStats,\"name\":_vm.storageStatsTitle,\"title\":_vm.storageStatsTooltip,\"data-cy-files-navigation-settings-quota\":\"\"},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.debounceUpdateStorageStats.apply(null, arguments)}}},[_c('ChartPie',{attrs:{\"slot\":\"icon\",\"size\":20},slot:\"icon\"}),_vm._v(\" \"),(_vm.storageStats.quota >= 0)?_c('NcProgressBar',{attrs:{\"slot\":\"extra\",\"error\":_vm.storageStats.relative > 80,\"value\":Math.min(_vm.storageStats.relative, 100)},slot:\"extra\"}):_vm._e()],1):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n\t<NcAppNavigationItem v-if=\"storageStats\"\n\t\t:aria-label=\"t('files', 'Storage informations')\"\n\t\t:class=\"{ 'app-navigation-entry__settings-quota--not-unlimited': storageStats.quota >= 0}\"\n\t\t:loading=\"loadingStorageStats\"\n\t\t:name=\"storageStatsTitle\"\n\t\t:title=\"storageStatsTooltip\"\n\t\tclass=\"app-navigation-entry__settings-quota\"\n\t\tdata-cy-files-navigation-settings-quota\n\t\t@click.stop.prevent=\"debounceUpdateStorageStats\">\n\t\t<ChartPie slot=\"icon\" :size=\"20\" />\n\n\t\t<!-- Progress bar -->\n\t\t<NcProgressBar v-if=\"storageStats.quota >= 0\"\n\t\t\tslot=\"extra\"\n\t\t\t:error=\"storageStats.relative > 80\"\n\t\t\t:value=\"Math.min(storageStats.relative, 100)\" />\n\t</NcAppNavigationItem>\n</template>\n\n<script>\nimport { formatFileSize } from '@nextcloud/files'\nimport { generateUrl } from '@nextcloud/router'\nimport { loadState } from '@nextcloud/initial-state'\nimport { showError } from '@nextcloud/dialogs'\nimport { debounce, throttle } from 'throttle-debounce'\nimport { translate } from '@nextcloud/l10n'\nimport axios from '@nextcloud/axios'\nimport ChartPie from 'vue-material-design-icons/ChartPie.vue'\nimport NcAppNavigationItem from '@nextcloud/vue/dist/Components/NcAppNavigationItem.js'\nimport NcProgressBar from '@nextcloud/vue/dist/Components/NcProgressBar.js'\n\nimport logger from '../logger.js'\nimport { subscribe } from '@nextcloud/event-bus'\n\nexport default {\n\tname: 'NavigationQuota',\n\n\tcomponents: {\n\t\tChartPie,\n\t\tNcAppNavigationItem,\n\t\tNcProgressBar,\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tloadingStorageStats: false,\n\t\t\tstorageStats: loadState('files', 'storageStats', null),\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tstorageStatsTitle() {\n\t\t\tconst usedQuotaByte = formatFileSize(this.storageStats?.used)\n\t\t\tconst quotaByte = formatFileSize(this.storageStats?.quota)\n\n\t\t\t// If no quota set\n\t\t\tif (this.storageStats?.quota < 0) {\n\t\t\t\treturn this.t('files', '{usedQuotaByte} used', { usedQuotaByte })\n\t\t\t}\n\n\t\t\treturn this.t('files', '{used} of {quota} used', {\n\t\t\t\tused: usedQuotaByte,\n\t\t\t\tquota: quotaByte,\n\t\t\t})\n\t\t},\n\t\tstorageStatsTooltip() {\n\t\t\tif (!this.storageStats.relative) {\n\t\t\t\treturn ''\n\t\t\t}\n\n\t\t\treturn this.t('files', '{relative}% used', this.storageStats)\n\t\t},\n\t},\n\n\tbeforeMount() {\n\t\t/**\n\t\t * Update storage stats every minute\n\t\t * TODO: remove when all views are migrated to Vue\n\t\t */\n\t\tsetInterval(this.throttleUpdateStorageStats, 60 * 1000)\n\n\t\tsubscribe('files:node:created', this.throttleUpdateStorageStats)\n\t\tsubscribe('files:node:deleted', this.throttleUpdateStorageStats)\n\t\tsubscribe('files:node:moved', this.throttleUpdateStorageStats)\n\t\tsubscribe('files:node:updated', this.throttleUpdateStorageStats)\n\t},\n\n\tmethods: {\n\t\t// From user input\n\t\tdebounceUpdateStorageStats: debounce(200, function(event) {\n\t\t\tthis.updateStorageStats(event)\n\t\t}),\n\t\t// From interval or event bus\n\t\tthrottleUpdateStorageStats: throttle(1000, function(event) {\n\t\t\tthis.updateStorageStats(event)\n\t\t}),\n\n\t\t/**\n\t\t * Update the storage stats\n\t\t * Throttled at max 1 refresh per minute\n\t\t *\n\t\t * @param {Event} [event = null] if user interaction\n\t\t */\n\t\tasync updateStorageStats(event = null) {\n\t\t\tif (this.loadingStorageStats) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tthis.loadingStorageStats = true\n\t\t\ttry {\n\t\t\t\tconst response = await axios.get(generateUrl('/apps/files/api/v1/stats'))\n\t\t\t\tif (!response?.data?.data) {\n\t\t\t\t\tthrow new Error('Invalid storage stats')\n\t\t\t\t}\n\t\t\t\tthis.storageStats = response.data.data\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error('Could not refresh storage stats', { error })\n\t\t\t\t// Only show to the user if it was manually triggered\n\t\t\t\tif (event) {\n\t\t\t\t\tshowError(t('files', 'Could not refresh storage stats'))\n\t\t\t\t}\n\t\t\t} finally {\n\t\t\t\tthis.loadingStorageStats = false\n\t\t\t}\n\t\t},\n\n\t\tt: translate,\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n// User storage stats display\n.app-navigation-entry__settings-quota {\n\t// Align title with progress and icon\n\t&--not-unlimited::v-deep .app-navigation-entry__title {\n\t\tmargin-top: -4px;\n\t}\n\n\tprogress {\n\t\tposition: absolute;\n\t\tbottom: 10px;\n\t\tmargin-left: 44px;\n\t\twidth: calc(100% - 44px - 22px);\n\t}\n}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NavigationQuota.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NavigationQuota.vue?vue&type=script&lang=js&\"","\n      import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NavigationQuota.vue?vue&type=style&index=0&id=918797b2&prod&lang=scss&scoped=true&\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NavigationQuota.vue?vue&type=style&index=0&id=918797b2&prod&lang=scss&scoped=true&\";\n       export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./NavigationQuota.vue?vue&type=template&id=918797b2&scoped=true&\"\nimport script from \"./NavigationQuota.vue?vue&type=script&lang=js&\"\nexport * from \"./NavigationQuota.vue?vue&type=script&lang=js&\"\nimport style0 from \"./NavigationQuota.vue?vue&type=style&index=0&id=918797b2&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"918797b2\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('NcAppSettingsDialog',{attrs:{\"open\":_vm.open,\"show-navigation\":true,\"title\":_vm.t('files', 'Files settings')},on:{\"update:open\":_vm.onClose}},[_c('NcAppSettingsSection',{attrs:{\"id\":\"settings\",\"title\":_vm.t('files', 'Files settings')}},[_c('NcCheckboxRadioSwitch',{attrs:{\"checked\":_vm.userConfig.show_hidden},on:{\"update:checked\":function($event){return _vm.setConfig('show_hidden', $event)}}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('files', 'Show hidden files'))+\"\\n\\t\\t\")]),_vm._v(\" \"),_c('NcCheckboxRadioSwitch',{attrs:{\"checked\":_vm.userConfig.crop_image_previews},on:{\"update:checked\":function($event){return _vm.setConfig('crop_image_previews', $event)}}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('files', 'Crop image previews'))+\"\\n\\t\\t\")])],1),_vm._v(\" \"),(_vm.settings.length !== 0)?_c('NcAppSettingsSection',{attrs:{\"id\":\"more-settings\",\"title\":_vm.t('files', 'Additional settings')}},[_vm._l((_vm.settings),function(setting){return [_c('Setting',{key:setting.name,attrs:{\"el\":setting.el}})]})],2):_vm._e(),_vm._v(\" \"),_c('NcAppSettingsSection',{attrs:{\"id\":\"webdav\",\"title\":_vm.t('files', 'WebDAV')}},[_c('NcInputField',{attrs:{\"id\":\"webdav-url-input\",\"show-trailing-button\":true,\"success\":_vm.webdavUrlCopied,\"trailing-button-label\":_vm.t('files', 'Copy to clipboard'),\"value\":_vm.webdavUrl,\"readonly\":\"readonly\",\"type\":\"url\"},on:{\"focus\":function($event){return $event.target.select()},\"trailing-button-click\":_vm.copyCloudId},scopedSlots:_vm._u([{key:\"trailing-button-icon\",fn:function(){return [_c('Clipboard',{attrs:{\"size\":20}})]},proxy:true}])}),_vm._v(\" \"),_c('em',[_c('a',{staticClass:\"setting-link\",attrs:{\"href\":_vm.webdavDocs,\"target\":\"_blank\",\"rel\":\"noreferrer noopener\"}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('files', 'Use this address to access your Files via WebDAV'))+\" ↗\\n\\t\\t\\t\")])]),_vm._v(\" \"),_c('br'),_vm._v(\" \"),_c('em',[_c('a',{staticClass:\"setting-link\",attrs:{\"href\":_vm.appPasswordUrl}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('files', 'If you have enabled 2FA, you must create and use a new app password by clicking here.'))+\" ↗\\n\\t\\t\\t\")])])],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n  - @copyright Copyright (c) 2020 Gary Kim <gary@garykim.dev>\n  -\n  - @author John Molakvoæ <skjnldsv@protonmail.com>\n  -\n  - @license GNU AGPL version 3 or any later version\n  -\n  - This program is free software: you can redistribute it and/or modify\n  - it under the terms of the GNU Affero General Public License as\n  - published by the Free Software Foundation, either version 3 of the\n  - License, or (at your option) any later version.\n  -\n  - This program is distributed in the hope that it will be useful,\n  - but WITHOUT ANY WARRANTY; without even the implied warranty of\n  - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n  - GNU Affero General Public License for more details.\n  -\n  - You should have received a copy of the GNU Affero General Public License\n  - along with this program. If not, see <http://www.gnu.org/licenses/>.\n  -\n  -->\n\n<template>\n\t<div />\n</template>\n<script>\nexport default {\n\tname: 'Setting',\n\tprops: {\n\t\tel: {\n\t\t\ttype: Function,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tmounted() {\n\t\tthis.$el.appendChild(this.el())\n\t},\n}\n</script>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Setting.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Setting.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Setting.vue?vue&type=template&id=61d69eae&\"\nimport script from \"./Setting.vue?vue&type=script&lang=js&\"\nexport * from \"./Setting.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div')\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n  - @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n  -\n  - @author John Molakvoæ <skjnldsv@protonmail.com>\n  -\n  - @license GNU AGPL version 3 or any later version\n  -\n  - This program is free software: you can redistribute it and/or modify\n  - it under the terms of the GNU Affero General Public License as\n  - published by the Free Software Foundation, either version 3 of the\n  - License, or (at your option) any later version.\n  -\n  - This program is distributed in the hope that it will be useful,\n  - but WITHOUT ANY WARRANTY; without even the implied warranty of\n  - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n  - GNU Affero General Public License for more details.\n  -\n  - You should have received a copy of the GNU Affero General Public License\n  - along with this program. If not, see <http://www.gnu.org/licenses/>.\n  -\n  -->\n<template>\n\t<NcAppSettingsDialog :open=\"open\"\n\t\t:show-navigation=\"true\"\n\t\t:title=\"t('files', 'Files settings')\"\n\t\t@update:open=\"onClose\">\n\t\t<!-- Settings API-->\n\t\t<NcAppSettingsSection id=\"settings\" :title=\"t('files', 'Files settings')\">\n\t\t\t<NcCheckboxRadioSwitch :checked=\"userConfig.show_hidden\"\n\t\t\t\t@update:checked=\"setConfig('show_hidden', $event)\">\n\t\t\t\t{{ t('files', 'Show hidden files') }}\n\t\t\t</NcCheckboxRadioSwitch>\n\t\t\t<NcCheckboxRadioSwitch :checked=\"userConfig.crop_image_previews\"\n\t\t\t\t@update:checked=\"setConfig('crop_image_previews', $event)\">\n\t\t\t\t{{ t('files', 'Crop image previews') }}\n\t\t\t</NcCheckboxRadioSwitch>\n\t\t</NcAppSettingsSection>\n\n\t\t<!-- Settings API-->\n\t\t<NcAppSettingsSection v-if=\"settings.length !== 0\"\n\t\t\tid=\"more-settings\"\n\t\t\t:title=\"t('files', 'Additional settings')\">\n\t\t\t<template v-for=\"setting in settings\">\n\t\t\t\t<Setting :key=\"setting.name\" :el=\"setting.el\" />\n\t\t\t</template>\n\t\t</NcAppSettingsSection>\n\n\t\t<!-- Webdav URL-->\n\t\t<NcAppSettingsSection id=\"webdav\" :title=\"t('files', 'WebDAV')\">\n\t\t\t<NcInputField id=\"webdav-url-input\"\n\t\t\t\t:show-trailing-button=\"true\"\n\t\t\t\t:success=\"webdavUrlCopied\"\n\t\t\t\t:trailing-button-label=\"t('files', 'Copy to clipboard')\"\n\t\t\t\t:value=\"webdavUrl\"\n\t\t\t\treadonly=\"readonly\"\n\t\t\t\ttype=\"url\"\n\t\t\t\t@focus=\"$event.target.select()\"\n\t\t\t\t@trailing-button-click=\"copyCloudId\">\n\t\t\t\t<template #trailing-button-icon>\n\t\t\t\t\t<Clipboard :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t</NcInputField>\n\t\t\t<em>\n\t\t\t\t<a class=\"setting-link\"\n\t\t\t\t\t:href=\"webdavDocs\"\n\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\trel=\"noreferrer noopener\">\n\t\t\t\t\t{{ t('files', 'Use this address to access your Files via WebDAV') }} ↗\n\t\t\t\t</a>\n\t\t\t</em>\n\t\t\t<br>\n\t\t\t<em>\n\t\t\t\t<a class=\"setting-link\" :href=\"appPasswordUrl\">\n\t\t\t\t\t{{ t('files', 'If you have enabled 2FA, you must create and use a new app password by clicking here.') }} ↗\n\t\t\t\t</a>\n\t\t\t</em>\n\t\t</NcAppSettingsSection>\n\t</NcAppSettingsDialog>\n</template>\n\n<script>\nimport NcAppSettingsDialog from '@nextcloud/vue/dist/Components/NcAppSettingsDialog.js'\nimport NcAppSettingsSection from '@nextcloud/vue/dist/Components/NcAppSettingsSection.js'\nimport NcCheckboxRadioSwitch from '@nextcloud/vue/dist/Components/NcCheckboxRadioSwitch.js'\nimport Clipboard from 'vue-material-design-icons/Clipboard.vue'\nimport NcInputField from '@nextcloud/vue/dist/Components/NcInputField.js'\nimport Setting from '../components/Setting.vue'\n\nimport { generateRemoteUrl, generateUrl } from '@nextcloud/router'\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { showError, showSuccess } from '@nextcloud/dialogs'\nimport { translate } from '@nextcloud/l10n'\nimport { useUserConfigStore } from '../store/userconfig.ts'\n\nexport default {\n\tname: 'Settings',\n\tcomponents: {\n\t\tClipboard,\n\t\tNcAppSettingsDialog,\n\t\tNcAppSettingsSection,\n\t\tNcCheckboxRadioSwitch,\n\t\tNcInputField,\n\t\tSetting,\n\t},\n\n\tprops: {\n\t\topen: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\n\tsetup() {\n\t\tconst userConfigStore = useUserConfigStore()\n\t\treturn {\n\t\t\tuserConfigStore,\n\t\t}\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\t// Settings API\n\t\t\tsettings: window.OCA?.Files?.Settings?.settings || [],\n\n\t\t\t// Webdav infos\n\t\t\twebdavUrl: generateRemoteUrl('dav/files/' + encodeURIComponent(getCurrentUser()?.uid)),\n\t\t\twebdavDocs: 'https://docs.nextcloud.com/server/stable/go.php?to=user-webdav',\n\t\t\tappPasswordUrl: generateUrl('/settings/user/security#generate-app-token-section'),\n\t\t\twebdavUrlCopied: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tuserConfig() {\n\t\t\treturn this.userConfigStore.userConfig\n\t\t},\n\t},\n\n\tbeforeMount() {\n\t\t// Update the settings API entries state\n\t\tthis.settings.forEach(setting => setting.open())\n\t},\n\n\tbeforeDestroy() {\n\t\t// Update the settings API entries state\n\t\tthis.settings.forEach(setting => setting.close())\n\t},\n\n\tmethods: {\n\t\tonClose() {\n\t\t\tthis.$emit('close')\n\t\t},\n\n\t\tsetConfig(key, value) {\n\t\t\tthis.userConfigStore.update(key, value)\n\t\t},\n\n\t\tasync copyCloudId() {\n\t\t\tdocument.querySelector('input#webdav-url-input').select()\n\n\t\t\tif (!navigator.clipboard) {\n\t\t\t\t// Clipboard API not available\n\t\t\t\tshowError(t('files', 'Clipboard is not available'))\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tawait navigator.clipboard.writeText(this.webdavUrl)\n\t\t\tthis.webdavUrlCopied = true\n\t\t\tshowSuccess(t('files', 'WebDAV URL copied to clipboard'))\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.webdavUrlCopied = false\n\t\t\t}, 5000)\n\t\t},\n\n\t\tt: translate,\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.setting-link:hover {\n\ttext-decoration: underline;\n}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Settings.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Settings.vue?vue&type=script&lang=js&\"","\n      import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Settings.vue?vue&type=style&index=0&id=76ca5d1f&prod&lang=scss&scoped=true&\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Settings.vue?vue&type=style&index=0&id=76ca5d1f&prod&lang=scss&scoped=true&\";\n       export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Settings.vue?vue&type=template&id=76ca5d1f&scoped=true&\"\nimport script from \"./Settings.vue?vue&type=script&lang=js&\"\nexport * from \"./Settings.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Settings.vue?vue&type=style&index=0&id=76ca5d1f&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"76ca5d1f\",\n  null\n  \n)\n\nexport default component.exports","<!--\n  - @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n  -\n  - @author John Molakvoæ <skjnldsv@protonmail.com>\n  -\n  - @license GNU AGPL version 3 or any later version\n  -\n  - This program is free software: you can redistribute it and/or modify\n  - it under the terms of the GNU Affero General Public License as\n  - published by the Free Software Foundation, either version 3 of the\n  - License, or (at your option) any later version.\n  -\n  - This program is distributed in the hope that it will be useful,\n  - but WITHOUT ANY WARRANTY; without even the implied warranty of\n  - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n  - GNU Affero General Public License for more details.\n  -\n  - You should have received a copy of the GNU Affero General Public License\n  - along with this program. If not, see <http://www.gnu.org/licenses/>.\n  -\n  -->\n<template>\n\t<NcAppNavigation data-cy-files-navigation>\n\t\t<template #list>\n\t\t\t<NcAppNavigationItem v-for=\"view in parentViews\"\n\t\t\t\t:key=\"view.id\"\n\t\t\t\t:allow-collapse=\"true\"\n\t\t\t\t:data-cy-files-navigation-item=\"view.id\"\n\t\t\t\t:icon=\"view.iconClass\"\n\t\t\t\t:open=\"isExpanded(view)\"\n\t\t\t\t:pinned=\"view.sticky\"\n\t\t\t\t:title=\"view.name\"\n\t\t\t\t:to=\"generateToNavigation(view)\"\n\t\t\t\t@update:open=\"onToggleExpand(view)\">\n\t\t\t\t<!-- Sanitized icon as svg if provided -->\n\t\t\t\t<NcIconSvgWrapper v-if=\"view.icon\" slot=\"icon\" :svg=\"view.icon\" />\n\n\t\t\t\t<!-- Child views if any -->\n\t\t\t\t<NcAppNavigationItem v-for=\"child in childViews[view.id]\"\n\t\t\t\t\t:key=\"child.id\"\n\t\t\t\t\t:data-cy-files-navigation-item=\"child.id\"\n\t\t\t\t\t:exact=\"true\"\n\t\t\t\t\t:icon=\"child.iconClass\"\n\t\t\t\t\t:title=\"child.name\"\n\t\t\t\t\t:to=\"generateToNavigation(child)\">\n\t\t\t\t\t<!-- Sanitized icon as svg if provided -->\n\t\t\t\t\t<NcIconSvgWrapper v-if=\"child.icon\" slot=\"icon\" :svg=\"child.icon\" />\n\t\t\t\t</NcAppNavigationItem>\n\t\t\t</NcAppNavigationItem>\n\t\t</template>\n\n\t\t<!-- Non-scrollable navigation bottom elements -->\n\t\t<template #footer>\n\t\t\t<ul class=\"app-navigation-entry__settings\">\n\t\t\t\t<!-- User storage usage statistics -->\n\t\t\t\t<NavigationQuota />\n\n\t\t\t\t<!-- Files settings modal toggle-->\n\t\t\t\t<NcAppNavigationItem :aria-label=\"t('files', 'Open the files app settings')\"\n\t\t\t\t\t:title=\"t('files', 'Files settings')\"\n\t\t\t\t\tdata-cy-files-navigation-settings-button\n\t\t\t\t\t@click.prevent.stop=\"openSettings\">\n\t\t\t\t\t<Cog slot=\"icon\" :size=\"20\" />\n\t\t\t\t</NcAppNavigationItem>\n\t\t\t</ul>\n\t\t</template>\n\n\t\t<!-- Settings modal-->\n\t\t<SettingsModal :open=\"settingsOpened\"\n\t\t\tdata-cy-files-navigation-settings\n\t\t\t@close=\"onSettingsClose\" />\n\t</NcAppNavigation>\n</template>\n\n<script>\nimport { emit, subscribe } from '@nextcloud/event-bus'\nimport { translate } from '@nextcloud/l10n'\nimport Cog from 'vue-material-design-icons/Cog.vue'\nimport NcAppNavigation from '@nextcloud/vue/dist/Components/NcAppNavigation.js'\nimport NcAppNavigationItem from '@nextcloud/vue/dist/Components/NcAppNavigationItem.js'\nimport NcIconSvgWrapper from '@nextcloud/vue/dist/Components/NcIconSvgWrapper.js'\n\nimport { setPageHeading } from '../../../../core/src/OCP/accessibility.js'\nimport { useViewConfigStore } from '../store/viewConfig.ts'\nimport logger from '../logger.js'\nimport Navigation from '../services/Navigation.ts'\nimport NavigationQuota from '../components/NavigationQuota.vue'\nimport SettingsModal from './Settings.vue'\n\nexport default {\n\tname: 'Navigation',\n\n\tcomponents: {\n\t\tCog,\n\t\tNavigationQuota,\n\t\tNcAppNavigation,\n\t\tNcAppNavigationItem,\n\t\tNcIconSvgWrapper,\n\t\tSettingsModal,\n\t},\n\n\tprops: {\n\t\t// eslint-disable-next-line vue/prop-name-casing\n\t\tNavigation: {\n\t\t\ttype: Navigation,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tsetup() {\n\t\tconst viewConfigStore = useViewConfigStore()\n\t\treturn {\n\t\t\tviewConfigStore,\n\t\t}\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tsettingsOpened: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tcurrentViewId() {\n\t\t\treturn this.$route?.params?.view || 'files'\n\t\t},\n\n\t\t/** @return {Navigation} */\n\t\tcurrentView() {\n\t\t\treturn this.views.find(view => view.id === this.currentViewId)\n\t\t},\n\n\t\t/** @return {Navigation[]} */\n\t\tviews() {\n\t\t\treturn this.Navigation.views\n\t\t},\n\n\t\t/** @return {Navigation[]} */\n\t\tparentViews() {\n\t\t\treturn this.views\n\t\t\t\t// filter child views\n\t\t\t\t.filter(view => !view.parent)\n\t\t\t\t// sort views by order\n\t\t\t\t.sort((a, b) => {\n\t\t\t\t\treturn a.order - b.order\n\t\t\t\t})\n\t\t},\n\n\t\t/** @return {Navigation[]} */\n\t\tchildViews() {\n\t\t\treturn this.views\n\t\t\t\t// filter parent views\n\t\t\t\t.filter(view => !!view.parent)\n\t\t\t\t// create a map of parents and their children\n\t\t\t\t.reduce((list, view) => {\n\t\t\t\t\tlist[view.parent] = [...(list[view.parent] || []), view]\n\t\t\t\t\t// Sort children by order\n\t\t\t\t\tlist[view.parent].sort((a, b) => {\n\t\t\t\t\t\treturn a.order - b.order\n\t\t\t\t\t})\n\t\t\t\t\treturn list\n\t\t\t\t}, {})\n\t\t},\n\t},\n\n\twatch: {\n\t\tcurrentView(view, oldView) {\n\t\t\t// If undefined, it means we're initializing the view\n\t\t\t// This is handled by the legacy-view:initialized event\n\t\t\t// TODO: remove when legacy views are dropped\n\t\t\tif (view?.id === oldView?.id) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tthis.Navigation.setActive(view)\n\t\t\tlogger.debug('Navigation changed', { id: view.id, view })\n\n\t\t\tthis.showView(view, oldView)\n\t\t},\n\t},\n\n\tbeforeMount() {\n\t\tif (this.currentView) {\n\t\t\tlogger.debug('Navigation mounted. Showing requested view', { view: this.currentView })\n\t\t\tthis.showView(this.currentView)\n\t\t}\n\n\t\tsubscribe('files:legacy-navigation:changed', this.onLegacyNavigationChanged)\n\n\t\t// TODO: remove this once the legacy navigation is gone\n\t\tsubscribe('files:legacy-view:initialized', () => {\n\t\t\tlogger.debug('Legacy view initialized', { ...this.currentView })\n\t\t\tthis.showView(this.currentView)\n\t\t})\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * @param {Navigation} view the new active view\n\t\t * @param {Navigation} oldView the old active view\n\t\t */\n\t\tshowView(view, oldView) {\n\t\t\t// Closing any opened sidebar\n\t\t\twindow?.OCA?.Files?.Sidebar?.close?.()\n\n\t\t\tif (view?.legacy) {\n\t\t\t\tconst newAppContent = document.querySelector('#app-content #app-content-' + this.currentView.id + '.viewcontainer')\n\t\t\t\tdocument.querySelectorAll('#app-content .viewcontainer').forEach(el => {\n\t\t\t\t\tel.classList.add('hidden')\n\t\t\t\t})\n\t\t\t\tnewAppContent.classList.remove('hidden')\n\n\t\t\t\t// Triggering legacy navigation events\n\t\t\t\tconst { dir = '/' } = OC.Util.History.parseUrlQuery()\n\t\t\t\tconst params = { itemId: view.id, dir }\n\n\t\t\t\tlogger.debug('Triggering legacy navigation event', params)\n\t\t\t\twindow.jQuery(newAppContent).trigger(new window.jQuery.Event('show', params))\n\t\t\t\twindow.jQuery(newAppContent).trigger(new window.jQuery.Event('urlChanged', params))\n\t\t\t}\n\n\t\t\tthis.Navigation.setActive(view)\n\t\t\tsetPageHeading(view.name)\n\t\t\temit('files:navigation:changed', view)\n\t\t},\n\n\t\t/**\n\t\t * Coming from the legacy files app.\n\t\t * TODO: remove when all views are migrated.\n\t\t *\n\t\t * @param {Navigation} view the new active view\n\t\t */\n\t\tonLegacyNavigationChanged({ id } = { id: 'files' }) {\n\t\t\tconst view = this.Navigation.views.find(view => view.id === id)\n\t\t\tif (view && view.legacy && view.id !== this.currentView.id) {\n\t\t\t\t// Force update the current route as the request comes\n\t\t\t\t// from the legacy files app router\n\t\t\t\tthis.$router.replace({ ...this.$route, params: { view: view.id } })\n\t\t\t\tthis.Navigation.setActive(view)\n\t\t\t\tthis.showView(view)\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Expand/collapse a a view with children and permanently\n\t\t * save this setting in the server.\n\t\t *\n\t\t * @param {Navigation} view the view to toggle\n\t\t */\n\t\tonToggleExpand(view) {\n\t\t\t// Invert state\n\t\t\tconst isExpanded = this.isExpanded(view)\n\t\t\t// Update the view expanded state, might not be necessary\n\t\t\tview.expanded = !isExpanded\n\t\t\tthis.viewConfigStore.update(view.id, 'expanded', !isExpanded)\n\t\t},\n\n\t\t/**\n\t\t * Check if a view is expanded by user config\n\t\t * or fallback to the default value.\n\t\t *\n\t\t * @param {Navigation} view the view to check\n\t\t */\n\t\tisExpanded(view) {\n\t\t\treturn typeof this.viewConfigStore.getConfig(view.id)?.expanded === 'boolean'\n\t\t\t\t? this.viewConfigStore.getConfig(view.id).expanded === true\n\t\t\t\t: view.expanded === true\n\t\t},\n\n\t\t/**\n\t\t * Generate the route to a view\n\t\t *\n\t\t * @param {Navigation} view the view to toggle\n\t\t */\n\t\tgenerateToNavigation(view) {\n\t\t\tif (view.params) {\n\t\t\t\tconst { dir, fileid } = view.params\n\t\t\t\treturn { name: 'filelist', params: view.params, query: { dir, fileid } }\n\t\t\t}\n\t\t\treturn { name: 'filelist', params: { view: view.id } }\n\t\t},\n\n\t\t/**\n\t\t * Open the settings modal\n\t\t */\n\t\topenSettings() {\n\t\t\tthis.settingsOpened = true\n\t\t},\n\n\t\t/**\n\t\t * Close the settings modal\n\t\t */\n\t\tonSettingsClose() {\n\t\t\tthis.settingsOpened = false\n\t\t},\n\n\t\tt: translate,\n\t},\n}\n</script>\n\n<style scoped lang=\"scss\">\n// TODO: remove when https://github.com/nextcloud/nextcloud-vue/pull/3539 is in\n.app-navigation::v-deep .app-navigation-entry-icon {\n\tbackground-repeat: no-repeat;\n\tbackground-position: center;\n}\n\n.app-navigation > ul.app-navigation__list {\n\t// Use flex gap value for more elegant spacing\n\tpadding-bottom: var(--default-grid-baseline, 4px);\n}\n\n.app-navigation-entry__settings {\n\theight: auto !important;\n\toverflow: hidden !important;\n\tpadding-top: 0 !important;\n\t// Prevent shrinking or growing\n\tflex: 0 0 auto;\n}\n</style>\n","/**\n * @copyright Copyright (c) 2022 Joas Schilling <coding@schilljs.com>\n *\n * @author Joas Schilling <coding@schilljs.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { loadState } from '@nextcloud/initial-state'\n\n/**\n * Set the page heading\n *\n * @param {string} heading page title from the history api\n * @since 27.0.0\n */\nexport function setPageHeading(heading) {\n\tconst headingEl = document.getElementById('page-heading-level-1')\n\tif (headingEl) {\n\t\theadingEl.textContent = heading\n\t}\n}\nexport default {\n\t/**\n\t * @return {boolean} Whether the user opted-out of shortcuts so that they should not be registered\n\t */\n\tdisableKeyboardShortcuts() {\n\t\treturn loadState('theming', 'shortcutsDisabled', false)\n\t},\n\tsetPageHeading,\n}\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Navigation.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Navigation.vue?vue&type=script&lang=js&\"","\n      import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Navigation.vue?vue&type=style&index=0&id=657a978e&prod&scoped=true&lang=scss&\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Navigation.vue?vue&type=style&index=0&id=657a978e&prod&scoped=true&lang=scss&\";\n       export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Navigation.vue?vue&type=template&id=657a978e&scoped=true&\"\nimport script from \"./Navigation.vue?vue&type=script&lang=js&\"\nexport * from \"./Navigation.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Navigation.vue?vue&type=style&index=0&id=657a978e&prod&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"657a978e\",\n  null\n  \n)\n\nexport default component.exports","/**\n * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { loadState } from '@nextcloud/initial-state'\nimport logger from '../logger.js'\n\n/**\n * Fetch and register the legacy files views\n */\nexport default function() {\n\tconst legacyViews = Object.values(loadState('files', 'navigation', {}))\n\n\tif (legacyViews.length > 0) {\n\t\tlogger.debug('Legacy files views detected. Processing...', legacyViews)\n\t\tlegacyViews.forEach(view => {\n\t\t\tregisterLegacyView(view)\n\t\t\tif (view.sublist) {\n\t\t\t\tview.sublist.forEach(subview => registerLegacyView({ ...subview, parent: view.id }))\n\t\t\t}\n\t\t})\n\t}\n}\n\nconst registerLegacyView = function({ id, name, order, icon, parent, classes = '', expanded, params }) {\n\tOCP.Files.Navigation.register({\n\t\tid,\n\t\tname,\n\t\torder,\n\t\tparams,\n\t\tparent,\n\t\texpanded: expanded === true,\n\t\ticonClass: icon ? `icon-${icon}` : 'nav-icon-' + id,\n\t\tlegacy: true,\n\t\tsticky: classes.includes('pinned'),\n\t})\n}\n","/**\n * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport Vue from 'vue'\nimport Router from 'vue-router'\nimport { generateUrl } from '@nextcloud/router'\nimport queryString from 'query-string'\n\nVue.use(Router)\n\nconst router = new Router({\n\tmode: 'history',\n\n\t// if index.php is in the url AND we got this far, then it's working:\n\t// let's keep using index.php in the url\n\tbase: generateUrl('/apps/files', ''),\n\tlinkActiveClass: 'active',\n\n\troutes: [\n\t\t{\n\t\t\tpath: '/',\n\t\t\t// Pretending we're using the default view\n\t\t\talias: '/files',\n\t\t},\n\t\t{\n\t\t\tpath: '/:view/:fileid?',\n\t\t\tname: 'filelist',\n\t\t\tprops: true,\n\t\t},\n\t],\n\n\t// Custom stringifyQuery to prevent encoding of slashes in the url\n\tstringifyQuery(query) {\n\t\tconst result = queryString.stringify(query).replace(/%2F/gmi, '/')\n\t\treturn result ? ('?' + result) : ''\n\t},\n})\n\nexport default router\n","import './templates.js';\nimport './legacy/filelistSearch.js';\nimport './actions/deleteAction';\nimport './actions/sidebarAction';\nimport Vue from 'vue';\nimport { createPinia, PiniaVuePlugin } from 'pinia';\nimport FilesListView from './views/FilesList.vue';\nimport NavigationService from './services/Navigation';\nimport NavigationView from './views/Navigation.vue';\nimport processLegacyFilesViews from './legacy/navigationMapper.js';\nimport registerPreviewServiceWorker from './services/ServiceWorker.js';\nimport router from './router/router.js';\nimport RouterService from './services/RouterService';\nimport SettingsModel from './models/Setting.js';\nimport SettingsService from './services/Settings.js';\n// Init private and public Files namespace\nwindow.OCA.Files = window.OCA.Files ?? {};\nwindow.OCP.Files = window.OCP.Files ?? {};\n// Expose router\nconst Router = new RouterService(router);\nObject.assign(window.OCP.Files, { Router });\n// Init Pinia store\nVue.use(PiniaVuePlugin);\nconst pinia = createPinia();\n// Init Navigation Service\nconst Navigation = new NavigationService();\nObject.assign(window.OCP.Files, { Navigation });\nVue.prototype.$navigation = Navigation;\n// Init Files App Settings Service\nconst Settings = new SettingsService();\nObject.assign(window.OCA.Files, { Settings });\nObject.assign(window.OCA.Files.Settings, { Setting: SettingsModel });\n// Init Navigation View\nconst View = Vue.extend(NavigationView);\nconst FilesNavigationRoot = new View({\n    name: 'FilesNavigationRoot',\n    propsData: {\n        Navigation,\n    },\n    router,\n    pinia,\n});\nFilesNavigationRoot.$mount('#app-navigation-files');\n// Init content list view\nconst ListView = Vue.extend(FilesListView);\nconst FilesList = new ListView({\n    name: 'FilesListRoot',\n    router,\n    pinia,\n});\nFilesList.$mount('#app-content-vue');\n// Init legacy and new files views\nprocessLegacyFilesViews();\n// Register preview service worker\nregisterPreviewServiceWorker();\n","export default class RouterService {\n    _router;\n    constructor(router) {\n        this._router = router;\n    }\n    /**\n     * Trigger a route change on the files app\n     *\n     * @param path the url path, eg: '/trashbin?dir=/Deleted'\n     * @param replace replace the current history\n     * @see https://router.vuejs.org/guide/essentials/navigation.html#navigate-to-a-different-location\n     */\n    goTo(path, replace = false) {\n        return this._router.push({\n            path,\n            replace,\n        });\n    }\n    /**\n     * Trigger a route change on the files App\n     *\n     * @param name the route name\n     * @param params the route parameters\n     * @param query the url query parameters\n     * @param replace replace the current history\n     * @see https://router.vuejs.org/guide/essentials/navigation.html#navigate-to-a-different-location\n     */\n    goToRoute(name, params, query, replace) {\n        return this._router.push({\n            name,\n            query,\n            params,\n            replace,\n        });\n    }\n}\n","/**\n * @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nexport default class Settings {\n\n\t_settings\n\n\tconstructor() {\n\t\tthis._settings = []\n\t\tconsole.debug('OCA.Files.Settings initialized')\n\t}\n\n\t/**\n\t * Register a new setting\n\t *\n\t * @since 19.0.0\n\t * @param {OCA.Files.Settings.Setting} view element to add to settings\n\t * @return {boolean} whether registering was successful\n\t */\n\tregister(view) {\n\t\tif (this._settings.filter(e => e.name === view.name).length > 0) {\n\t\t\tconsole.error('A setting with the same name is already registered')\n\t\t\treturn false\n\t\t}\n\t\tthis._settings.push(view)\n\t\treturn true\n\t}\n\n\t/**\n\t * All settings elements\n\t *\n\t * @return {OCA.Files.Settings.Setting[]} All currently registered settings\n\t */\n\tget settings() {\n\t\treturn this._settings\n\t}\n\n}\n","/**\n * @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nexport default class Setting {\n\n\t_close\n\t_el\n\t_name\n\t_open\n\n\t/**\n\t * Create a new files app setting\n\t *\n\t * @since 19.0.0\n\t * @param {string} name the name of this setting\n\t * @param {object} component the component\n\t * @param {Function} component.el function that returns an unmounted dom element to be added\n\t * @param {Function} [component.open] callback for when setting is added\n\t * @param {Function} [component.close] callback for when setting is closed\n\t */\n\tconstructor(name, { el, open, close }) {\n\t\tthis._name = name\n\t\tthis._el = el\n\t\tthis._open = open\n\t\tthis._close = close\n\n\t\tif (typeof this._open !== 'function') {\n\t\t\tthis._open = () => {}\n\t\t}\n\n\t\tif (typeof this._close !== 'function') {\n\t\t\tthis._close = () => {}\n\t\t}\n\t}\n\n\tget name() {\n\t\treturn this._name\n\t}\n\n\tget el() {\n\t\treturn this._el\n\t}\n\n\tget open() {\n\t\treturn this._open\n\t}\n\n\tget close() {\n\t\treturn this._close\n\t}\n\n}\n","/**\n * @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport { generateUrl } from '@nextcloud/router'\nimport logger from '../logger.js'\n\nexport default () => {\n\tif ('serviceWorker' in navigator) {\n\t\t// Use the window load event to keep the page load performant\n\t\twindow.addEventListener('load', async () => {\n\t\t\ttry {\n\t\t\t\tconst url = generateUrl('/apps/files/preview-service-worker.js', {}, { noRewrite: true })\n\t\t\t\tconst registration = await navigator.serviceWorker.register(url, { scope: '/' })\n\t\t\t\tlogger.debug('SW registered: ', { registration })\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error('SW registration failed: ', { error })\n\t\t\t}\n\t\t})\n\t} else {\n\t\tlogger.debug('Service Worker is not enabled on this browser.')\n\t}\n}\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".breadcrumb[data-v-68b3b20b]{flex:1 1 100% !important;width:100%}.breadcrumb[data-v-68b3b20b] a{cursor:pointer !important}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/components/BreadCrumbs.vue\"],\"names\":[],\"mappings\":\"AACA,6BAEC,wBAAA,CACA,UAAA,CAEA,+BACC,yBAAA\",\"sourcesContent\":[\"\\n.breadcrumb {\\n\\t// Take as much space as possible\\n\\tflex: 1 1 100% !important;\\n\\twidth: 100%;\\n\\n\\t::v-deep a {\\n\\t\\tcursor: pointer !important;\\n\\t}\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".custom-svg-icon[data-v-93e9b2f4]{display:flex;align-items:center;align-self:center;justify-content:center;justify-self:center;width:44px;height:44px;opacity:1}.custom-svg-icon[data-v-93e9b2f4] svg{height:22px;width:22px;fill:currentColor}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/components/CustomSvgIconRender.vue\"],\"names\":[],\"mappings\":\"AACA,kCACC,YAAA,CACA,kBAAA,CACA,iBAAA,CACA,sBAAA,CACA,mBAAA,CACA,UAAA,CACA,WAAA,CACA,SAAA,CAEA,sCAGC,WAAA,CACA,UAAA,CACA,iBAAA\",\"sourcesContent\":[\"\\n.custom-svg-icon {\\n\\tdisplay: flex;\\n\\talign-items: center;\\n\\talign-self: center;\\n\\tjustify-content: center;\\n\\tjustify-self: center;\\n\\twidth: 44px;\\n\\theight: 44px;\\n\\topacity: 1;\\n\\n\\t::v-deep svg {\\n\\t\\t// mdi icons have a size of 24px\\n\\t\\t// 22px results in roughly 16px inner size\\n\\t\\theight: 22px;\\n\\t\\twidth: 22px;\\n\\t\\tfill: currentColor;\\n\\t}\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"tr[data-v-0600090e]:hover,tr[data-v-0600090e]:focus,tr[data-v-0600090e]:active{background-color:var(--color-background-dark)}.files-list__row-icon-preview[data-v-0600090e]:not([style*=background]){background:var(--color-loading-dark)}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/components/FileEntry.vue\"],\"names\":[],\"mappings\":\"AAGC,+EAGC,6CAAA,CAKF,wEACI,oCAAA\",\"sourcesContent\":[\"\\n/* Hover effect on tbody lines only */\\ntr {\\n\\t&:hover,\\n\\t&:focus,\\n\\t&:active {\\n\\t\\tbackground-color: var(--color-background-dark);\\n\\t}\\n}\\n\\n/* Preview not loaded animation effect */\\n.files-list__row-icon-preview:not([style*='background']) {\\n    background: var(--color-loading-dark);\\n\\t// animation: preview-gradient-fade 1.2s ease-in-out infinite;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"tr[data-v-e6a083be]{padding-bottom:300px;border-top:1px solid var(--color-border);background-color:rgba(0,0,0,0) !important;border-bottom:none !important}td[data-v-e6a083be]{user-select:none;color:var(--color-text-maxcontrast) !important}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/components/FilesListFooter.vue\"],\"names\":[],\"mappings\":\"AAEA,oBACC,oBAAA,CACA,wCAAA,CAEA,yCAAA,CACA,6BAAA,CAGD,oBACC,gBAAA,CAEA,8CAAA\",\"sourcesContent\":[\"\\n// Scoped row\\ntr {\\n\\tpadding-bottom: 300px;\\n\\tborder-top: 1px solid var(--color-border);\\n\\t// Prevent hover effect on the whole row\\n\\tbackground-color: transparent !important;\\n\\tborder-bottom: none !important;\\n}\\n\\ntd {\\n\\tuser-select: none;\\n\\t// Make sure the cell colors don't apply to column headers\\n\\tcolor: var(--color-text-maxcontrast) !important;\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".files-list__column[data-v-76b6186a]{user-select:none;color:var(--color-text-maxcontrast) !important}.files-list__column--sortable[data-v-76b6186a]{cursor:pointer}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/components/FilesListHeader.vue\"],\"names\":[],\"mappings\":\"AACA,qCACC,gBAAA,CAEA,8CAAA,CAEA,+CACC,cAAA\",\"sourcesContent\":[\"\\n.files-list__column {\\n\\tuser-select: none;\\n\\t// Make sure the cell colors don't apply to column headers\\n\\tcolor: var(--color-text-maxcontrast) !important;\\n\\n\\t&--sortable {\\n\\t\\tcursor: pointer;\\n\\t}\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".files-list__row-actions-batch[data-v-03e57b1e]{flex:1 1 100% !important}.files-list__row-actions-batch[data-v-03e57b1e] .button-vue__wrapper{width:100%}.files-list__row-actions-batch[data-v-03e57b1e] .button-vue__wrapper span.button-vue__text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/components/FilesListHeaderActions.vue\"],\"names\":[],\"mappings\":\"AACA,gDACC,wBAAA,CAGA,qEACC,UAAA,CACA,2FACC,eAAA,CACA,sBAAA,CACA,kBAAA\",\"sourcesContent\":[\"\\n.files-list__row-actions-batch {\\n\\tflex: 1 1 100% !important;\\n\\n\\t// Remove when https://github.com/nextcloud/nextcloud-vue/pull/3936 is merged\\n\\t::v-deep .button-vue__wrapper {\\n\\t\\twidth: 100%;\\n\\t\\tspan.button-vue__text {\\n\\t\\t\\toverflow: hidden;\\n\\t\\t\\ttext-overflow: ellipsis;\\n\\t\\t\\twhite-space: nowrap;\\n\\t\\t}\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".files-list__column-sort-button{margin:0 calc(var(--cell-margin)*-1);padding:0 4px 0 16px !important}.files-list__column-sort-button .button-vue__wrapper{flex-direction:row-reverse;width:100%}.files-list__column-sort-button .button-vue__icon{transition-timing-function:linear;transition-duration:.1s;transition-property:opacity;opacity:0}.files-list__column-sort-button .button-vue__text{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.files-list__column-sort-button--active .button-vue__icon,.files-list__column-sort-button:hover .button-vue__icon,.files-list__column-sort-button:focus .button-vue__icon,.files-list__column-sort-button:active .button-vue__icon{opacity:1 !important}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/components/FilesListHeaderButton.vue\"],\"names\":[],\"mappings\":\"AACA,gCAEC,oCAAA,CAEA,+BAAA,CAGA,qDACC,0BAAA,CAGA,UAAA,CAGD,kDACC,iCAAA,CACA,uBAAA,CACA,2BAAA,CACA,SAAA,CAID,kDACC,eAAA,CACA,kBAAA,CACA,sBAAA,CAOA,mOACC,oBAAA\",\"sourcesContent\":[\"\\n.files-list__column-sort-button {\\n\\t// Compensate for cells margin\\n\\tmargin: 0 calc(var(--cell-margin) * -1);\\n\\t// Reverse padding\\n\\tpadding: 0 4px 0 16px !important;\\n\\n\\t// Icon after text\\n\\t.button-vue__wrapper {\\n\\t\\tflex-direction: row-reverse;\\n\\t\\t// Take max inner width for text overflow ellipsis\\n\\t\\t// Remove when https://github.com/nextcloud/nextcloud-vue/pull/3936 is merged\\n\\t\\twidth: 100%;\\n\\t}\\n\\n\\t.button-vue__icon {\\n\\t\\ttransition-timing-function: linear;\\n\\t\\ttransition-duration: .1s;\\n\\t\\ttransition-property: opacity;\\n\\t\\topacity: 0;\\n\\t}\\n\\n\\t// Remove when https://github.com/nextcloud/nextcloud-vue/pull/3936 is merged\\n\\t.button-vue__text {\\n\\t\\toverflow: hidden;\\n\\t\\twhite-space: nowrap;\\n\\t\\ttext-overflow: ellipsis;\\n\\t}\\n\\n\\t&--active,\\n\\t&:hover,\\n\\t&:focus,\\n\\t&:active {\\n\\t\\t.button-vue__icon {\\n\\t\\t\\topacity: 1 !important;\\n\\t\\t}\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".files-list[data-v-640a8bb8]{--row-height: 55px;--cell-margin: 14px;--checkbox-padding: calc((var(--row-height) - var(--checkbox-size)) / 2);--checkbox-size: 24px;--clickable-area: 44px;--icon-preview-size: 32px;display:block;overflow:auto;height:100%}.files-list[data-v-640a8bb8] tbody,.files-list[data-v-640a8bb8] .vue-recycle-scroller__slot{display:flex;flex-direction:column;width:100%;position:relative}.files-list[data-v-640a8bb8] .vue-recycle-scroller__slot[role=thead]{position:sticky;z-index:10;top:0;height:var(--row-height);background-color:var(--color-main-background)}.files-list[data-v-640a8bb8] tr{position:absolute;display:flex;align-items:center;width:100%;border-bottom:1px solid var(--color-border)}.files-list[data-v-640a8bb8] td,.files-list[data-v-640a8bb8] th{display:flex;align-items:center;flex:0 0 auto;justify-content:left;width:var(--row-height);height:var(--row-height);margin:0;padding:0;color:var(--color-text-maxcontrast);border:none}.files-list[data-v-640a8bb8] td span,.files-list[data-v-640a8bb8] th span{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.files-list[data-v-640a8bb8] .files-list__row-checkbox{justify-content:center}.files-list[data-v-640a8bb8] .files-list__row-checkbox .checkbox-radio-switch{display:flex;justify-content:center;--icon-size: var(--checkbox-size)}.files-list[data-v-640a8bb8] .files-list__row-checkbox .checkbox-radio-switch label.checkbox-radio-switch__label{width:var(--clickable-area);height:var(--clickable-area);margin:0;padding:calc((var(--clickable-area) - var(--checkbox-size))/2)}.files-list[data-v-640a8bb8] .files-list__row-checkbox .checkbox-radio-switch .checkbox-radio-switch__icon{margin:0 !important}.files-list[data-v-640a8bb8] .files-list__row-icon{position:relative;display:flex;overflow:visible;align-items:center;flex:0 0 var(--icon-preview-size);justify-content:center;width:var(--icon-preview-size);height:100%;margin-right:var(--checkbox-padding);color:var(--color-primary-element)}.files-list[data-v-640a8bb8] .files-list__row-icon>span{justify-content:flex-start}.files-list[data-v-640a8bb8] .files-list__row-icon>span:not(.files-list__row-icon-favorite) svg{width:var(--icon-preview-size);height:var(--icon-preview-size)}.files-list[data-v-640a8bb8] .files-list__row-icon-preview{overflow:hidden;width:var(--icon-preview-size);height:var(--icon-preview-size);border-radius:var(--border-radius);background-repeat:no-repeat;background-position:center;background-size:contain}.files-list[data-v-640a8bb8] .files-list__row-icon-favorite{position:absolute;top:4px;right:-8px;color:#fc0}.files-list[data-v-640a8bb8] .files-list__row-name{overflow:hidden;flex:1 1 auto}.files-list[data-v-640a8bb8] .files-list__row-name a{display:flex;align-items:center;width:100%;height:100%}.files-list[data-v-640a8bb8] .files-list__row-name a:focus .files-list__row-name-text,.files-list[data-v-640a8bb8] .files-list__row-name a:focus-visible .files-list__row-name-text{outline:2px solid var(--color-main-text) !important;border-radius:20px}.files-list[data-v-640a8bb8] .files-list__row-name .files-list__row-name-text{padding:5px 10px;margin-left:-10px}.files-list[data-v-640a8bb8] .files-list__row-actions{width:auto}.files-list[data-v-640a8bb8] .files-list__row-actions~td,.files-list[data-v-640a8bb8] .files-list__row-actions~th{margin:0 var(--cell-margin)}.files-list[data-v-640a8bb8] .files-list__row-actions button .button-vue__text{font-weight:normal}.files-list[data-v-640a8bb8] .files-list__row-actions button:not(:hover,:focus,:active) .button-vue__wrapper{color:var(--color-text-maxcontrast)}.files-list[data-v-640a8bb8] .files-list__row-size{justify-content:flex-end;width:calc(var(--row-height)*1.5);color:var(--color-main-text)}.files-list[data-v-640a8bb8] .files-list__row-size .files-list__column-sort-button{padding:0 16px 0 4px !important}.files-list[data-v-640a8bb8] .files-list__row-size .files-list__column-sort-button .button-vue__wrapper{flex-direction:row}.files-list[data-v-640a8bb8] .files-list__row-column-custom{width:calc(var(--row-height)*2)}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/components/FilesListVirtual.vue\"],\"names\":[],\"mappings\":\"AACA,6BACC,kBAAA,CACA,mBAAA,CAEA,wEAAA,CACA,qBAAA,CACA,sBAAA,CACA,yBAAA,CAEA,aAAA,CACA,aAAA,CACA,WAAA,CAIC,4FACC,YAAA,CACA,qBAAA,CACA,UAAA,CAEA,iBAAA,CAID,qEAEC,eAAA,CACA,UAAA,CACA,KAAA,CACA,wBAAA,CACA,6CAAA,CAGD,gCACC,iBAAA,CACA,YAAA,CACA,kBAAA,CACA,UAAA,CACA,2CAAA,CAGD,gEACC,YAAA,CACA,kBAAA,CACA,aAAA,CACA,oBAAA,CACA,uBAAA,CACA,wBAAA,CACA,QAAA,CACA,SAAA,CACA,mCAAA,CACA,WAAA,CAKA,0EACC,eAAA,CACA,kBAAA,CACA,sBAAA,CAIF,uDACC,sBAAA,CACA,8EACC,YAAA,CACA,sBAAA,CAEA,iCAAA,CAEA,iHACC,2BAAA,CACA,4BAAA,CACA,QAAA,CACA,8DAAA,CAGD,2GACC,mBAAA,CAKH,mDACC,iBAAA,CACA,YAAA,CACA,gBAAA,CACA,kBAAA,CAEA,iCAAA,CACA,sBAAA,CACA,8BAAA,CACA,WAAA,CAEA,oCAAA,CACA,kCAAA,CAEA,wDACC,0BAAA,CAGD,gGACC,8BAAA,CACA,+BAAA,CAGD,2DACC,eAAA,CACA,8BAAA,CACA,+BAAA,CACA,kCAAA,CACA,2BAAA,CAEA,0BAAA,CACA,uBAAA,CAGD,4DACC,iBAAA,CACA,OAAA,CACA,UAAA,CACA,UAAA,CAIF,mDAEC,eAAA,CAEA,aAAA,CAEA,qDACC,YAAA,CACA,kBAAA,CAEA,UAAA,CACA,WAAA,CAGA,oLAEC,mDAAA,CACA,kBAAA,CAIF,8EAEC,gBAAA,CACA,iBAAA,CAIF,sDACC,UAAA,CAGA,kHAEC,2BAAA,CAIA,+EAEC,kBAAA,CAED,6GAEC,mCAAA,CAKH,mDAEC,wBAAA,CACA,iCAAA,CAEA,4BAAA,CAGA,mFACC,+BAAA,CACA,wGACC,kBAAA,CAKH,4DACC,+BAAA\",\"sourcesContent\":[\"\\n.files-list {\\n\\t--row-height: 55px;\\n\\t--cell-margin: 14px;\\n\\n\\t--checkbox-padding: calc((var(--row-height) - var(--checkbox-size)) / 2);\\n\\t--checkbox-size: 24px;\\n\\t--clickable-area: 44px;\\n\\t--icon-preview-size: 32px;\\n\\n\\tdisplay: block;\\n\\toverflow: auto;\\n\\theight: 100%;\\n\\n\\t&::v-deep {\\n\\t\\t// Table head, body and footer\\n\\t\\ttbody, .vue-recycle-scroller__slot {\\n\\t\\t\\tdisplay: flex;\\n\\t\\t\\tflex-direction: column;\\n\\t\\t\\twidth: 100%;\\n\\t\\t\\t// Necessary for virtual scrolling absolute\\n\\t\\t\\tposition: relative;\\n\\t\\t}\\n\\n\\t\\t// Table header\\n\\t\\t.vue-recycle-scroller__slot[role='thead'] {\\n\\t\\t\\t// Pinned on top when scrolling\\n\\t\\t\\tposition: sticky;\\n\\t\\t\\tz-index: 10;\\n\\t\\t\\ttop: 0;\\n\\t\\t\\theight: var(--row-height);\\n\\t\\t\\tbackground-color: var(--color-main-background);\\n\\t\\t}\\n\\n\\t\\ttr {\\n\\t\\t\\tposition: absolute;\\n\\t\\t\\tdisplay: flex;\\n\\t\\t\\talign-items: center;\\n\\t\\t\\twidth: 100%;\\n\\t\\t\\tborder-bottom: 1px solid var(--color-border);\\n\\t\\t}\\n\\n\\t\\ttd, th {\\n\\t\\t\\tdisplay: flex;\\n\\t\\t\\talign-items: center;\\n\\t\\t\\tflex: 0 0 auto;\\n\\t\\t\\tjustify-content: left;\\n\\t\\t\\twidth: var(--row-height);\\n\\t\\t\\theight: var(--row-height);\\n\\t\\t\\tmargin: 0;\\n\\t\\t\\tpadding: 0;\\n\\t\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t\\t\\tborder: none;\\n\\n\\t\\t\\t// Columns should try to add any text\\n\\t\\t\\t// node wrapped in a span. That should help\\n\\t\\t\\t// with the ellipsis on overflow.\\n\\t\\t\\tspan {\\n\\t\\t\\t\\toverflow: hidden;\\n\\t\\t\\t\\twhite-space: nowrap;\\n\\t\\t\\t\\ttext-overflow: ellipsis;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t.files-list__row-checkbox {\\n\\t\\t\\tjustify-content: center;\\n\\t\\t\\t.checkbox-radio-switch {\\n\\t\\t\\t\\tdisplay: flex;\\n\\t\\t\\t\\tjustify-content: center;\\n\\n\\t\\t\\t\\t--icon-size: var(--checkbox-size);\\n\\n\\t\\t\\t\\tlabel.checkbox-radio-switch__label {\\n\\t\\t\\t\\t\\twidth: var(--clickable-area);\\n\\t\\t\\t\\t\\theight: var(--clickable-area);\\n\\t\\t\\t\\t\\tmargin: 0;\\n\\t\\t\\t\\t\\tpadding: calc((var(--clickable-area) - var(--checkbox-size)) / 2);\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t.checkbox-radio-switch__icon {\\n\\t\\t\\t\\t\\tmargin: 0 !important;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t.files-list__row-icon {\\n\\t\\t\\tposition: relative;\\n\\t\\t\\tdisplay: flex;\\n\\t\\t\\toverflow: visible;\\n\\t\\t\\talign-items: center;\\n\\t\\t\\t// No shrinking or growing allowed\\n\\t\\t\\tflex: 0 0 var(--icon-preview-size);\\n\\t\\t\\tjustify-content: center;\\n\\t\\t\\twidth: var(--icon-preview-size);\\n\\t\\t\\theight: 100%;\\n\\t\\t\\t// Show same padding as the checkbox right padding for visual balance\\n\\t\\t\\tmargin-right: var(--checkbox-padding);\\n\\t\\t\\tcolor: var(--color-primary-element);\\n\\n\\t\\t\\t& > span {\\n\\t\\t\\t\\tjustify-content: flex-start;\\n\\t\\t\\t}\\n\\n\\t\\t\\t&> span:not(.files-list__row-icon-favorite) svg {\\n\\t\\t\\t\\twidth: var(--icon-preview-size);\\n\\t\\t\\t\\theight: var(--icon-preview-size);\\n\\t\\t\\t}\\n\\n\\t\\t\\t&-preview {\\n\\t\\t\\t\\toverflow: hidden;\\n\\t\\t\\t\\twidth: var(--icon-preview-size);\\n\\t\\t\\t\\theight: var(--icon-preview-size);\\n\\t\\t\\t\\tborder-radius: var(--border-radius);\\n\\t\\t\\t\\tbackground-repeat: no-repeat;\\n\\t\\t\\t\\t// Center and contain the preview\\n\\t\\t\\t\\tbackground-position: center;\\n\\t\\t\\t\\tbackground-size: contain;\\n\\t\\t\\t}\\n\\n\\t\\t\\t&-favorite {\\n\\t\\t\\t\\tposition: absolute;\\n\\t\\t\\t\\ttop: 4px;\\n\\t\\t\\t\\tright: -8px;\\n\\t\\t\\t\\tcolor: #ffcc00;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t.files-list__row-name {\\n\\t\\t\\t// Prevent link from overflowing\\n\\t\\t\\toverflow: hidden;\\n\\t\\t\\t// Take as much space as possible\\n\\t\\t\\tflex: 1 1 auto;\\n\\n\\t\\t\\ta {\\n\\t\\t\\t\\tdisplay: flex;\\n\\t\\t\\t\\talign-items: center;\\n\\t\\t\\t\\t// Fill cell height and width\\n\\t\\t\\t\\twidth: 100%;\\n\\t\\t\\t\\theight: 100%;\\n\\n\\t\\t\\t\\t// Keyboard indicator a11y\\n\\t\\t\\t\\t&:focus .files-list__row-name-text,\\n\\t\\t\\t\\t&:focus-visible .files-list__row-name-text {\\n\\t\\t\\t\\t\\toutline: 2px solid var(--color-main-text) !important;\\n\\t\\t\\t\\t\\tborder-radius: 20px;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\n\\t\\t\\t.files-list__row-name-text {\\n\\t\\t\\t\\t// Make some space for the outline\\n\\t\\t\\t\\tpadding: 5px 10px;\\n\\t\\t\\t\\tmargin-left: -10px;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t.files-list__row-actions {\\n\\t\\t\\twidth: auto;\\n\\n\\t\\t\\t// Add margin to all cells after the actions\\n\\t\\t\\t& ~ td,\\n\\t\\t\\t& ~ th {\\n\\t\\t\\t\\tmargin: 0 var(--cell-margin);\\n\\t\\t\\t}\\n\\n\\t\\t\\tbutton {\\n\\t\\t\\t\\t.button-vue__text {\\n\\t\\t\\t\\t\\t// Remove bold from default button styling\\n\\t\\t\\t\\t\\tfont-weight: normal;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\t&:not(:hover, :focus, :active) .button-vue__wrapper {\\n\\t\\t\\t\\t\\t// Also apply color-text-maxcontrast to non-active button\\n\\t\\t\\t\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t.files-list__row-size {\\n\\t\\t\\t// Right align text\\n\\t\\t\\tjustify-content: flex-end;\\n\\t\\t\\twidth: calc(var(--row-height) * 1.5);\\n\\t\\t\\t// opacity varies with the size\\n\\t\\t\\tcolor: var(--color-main-text);\\n\\n\\t\\t\\t// Icon is before text since size is right aligned\\n\\t\\t\\t.files-list__column-sort-button {\\n\\t\\t\\t\\tpadding: 0 16px 0 4px !important;\\n\\t\\t\\t\\t.button-vue__wrapper {\\n\\t\\t\\t\\t\\tflex-direction: row;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t.files-list__row-column-custom {\\n\\t\\t\\twidth: calc(var(--row-height) * 2);\\n\\t\\t}\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".app-navigation-entry__settings-quota--not-unlimited[data-v-918797b2] .app-navigation-entry__title{margin-top:-4px}.app-navigation-entry__settings-quota progress[data-v-918797b2]{position:absolute;bottom:10px;margin-left:44px;width:calc(100% - 44px - 22px)}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/components/NavigationQuota.vue\"],\"names\":[],\"mappings\":\"AAIC,mGACC,eAAA,CAGD,gEACC,iBAAA,CACA,WAAA,CACA,gBAAA,CACA,8BAAA\",\"sourcesContent\":[\"\\n// User storage stats display\\n.app-navigation-entry__settings-quota {\\n\\t// Align title with progress and icon\\n\\t&--not-unlimited::v-deep .app-navigation-entry__title {\\n\\t\\tmargin-top: -4px;\\n\\t}\\n\\n\\tprogress {\\n\\t\\tposition: absolute;\\n\\t\\tbottom: 10px;\\n\\t\\tmargin-left: 44px;\\n\\t\\twidth: calc(100% - 44px - 22px);\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".template-picker__item[data-v-6c072a31]{display:flex}.template-picker__label[data-v-6c072a31]{display:flex;align-items:center;flex:1 1;flex-direction:column}.template-picker__label[data-v-6c072a31],.template-picker__label *[data-v-6c072a31]{cursor:pointer;user-select:none}.template-picker__label[data-v-6c072a31]::before{display:none !important}.template-picker__preview[data-v-6c072a31]{display:block;overflow:hidden;flex:1 1;width:var(--width);min-height:var(--height);max-height:var(--height);padding:0;border:var(--border) solid var(--color-border);border-radius:var(--border-radius-large)}input:checked+label>.template-picker__preview[data-v-6c072a31]{border-color:var(--color-primary)}.template-picker__preview--failed[data-v-6c072a31]{display:flex}.template-picker__image[data-v-6c072a31]{max-width:100%;background-color:var(--color-main-background);object-fit:cover}.template-picker__preview--failed .template-picker__image[data-v-6c072a31]{width:calc(var(--margin)*8);margin:auto;background-color:rgba(0,0,0,0) !important;object-fit:initial}.template-picker__title[data-v-6c072a31]{overflow:hidden;max-width:calc(var(--width) + 4px);padding:var(--margin);white-space:nowrap;text-overflow:ellipsis}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/components/TemplatePreview.vue\"],\"names\":[],\"mappings\":\"AAGC,wCACC,YAAA,CAGD,yCACC,YAAA,CAEA,kBAAA,CACA,QAAA,CACA,qBAAA,CAEA,oFACC,cAAA,CACA,gBAAA,CAGD,iDACC,uBAAA,CAIF,2CACC,aAAA,CACA,eAAA,CAEA,QAAA,CACA,kBAAA,CACA,wBAAA,CACA,wBAAA,CACA,SAAA,CACA,8CAAA,CACA,wCAAA,CAEA,+DACC,iCAAA,CAGD,mDAEC,YAAA,CAIF,yCACC,cAAA,CACA,6CAAA,CAEA,gBAAA,CAID,2EACC,2BAAA,CAEA,WAAA,CACA,yCAAA,CAEA,kBAAA,CAGD,yCACC,eAAA,CAEA,kCAAA,CACA,qBAAA,CACA,kBAAA,CACA,sBAAA\",\"sourcesContent\":[\"\\n\\n.template-picker {\\n\\t&__item {\\n\\t\\tdisplay: flex;\\n\\t}\\n\\n\\t&__label {\\n\\t\\tdisplay: flex;\\n\\t\\t// Align in the middle of the grid\\n\\t\\talign-items: center;\\n\\t\\tflex: 1 1;\\n\\t\\tflex-direction: column;\\n\\n\\t\\t&, * {\\n\\t\\t\\tcursor: pointer;\\n\\t\\t\\tuser-select: none;\\n\\t\\t}\\n\\n\\t\\t&::before {\\n\\t\\t\\tdisplay: none !important;\\n\\t\\t}\\n\\t}\\n\\n\\t&__preview {\\n\\t\\tdisplay: block;\\n\\t\\toverflow: hidden;\\n\\t\\t// Stretch so all entries are the same width\\n\\t\\tflex: 1 1;\\n\\t\\twidth: var(--width);\\n\\t\\tmin-height: var(--height);\\n\\t\\tmax-height: var(--height);\\n\\t\\tpadding: 0;\\n\\t\\tborder: var(--border) solid var(--color-border);\\n\\t\\tborder-radius: var(--border-radius-large);\\n\\n\\t\\tinput:checked + label > & {\\n\\t\\t\\tborder-color: var(--color-primary);\\n\\t\\t}\\n\\n\\t\\t&--failed {\\n\\t\\t\\t// Make sure to properly center fallback icon\\n\\t\\t\\tdisplay: flex;\\n\\t\\t}\\n\\t}\\n\\n\\t&__image {\\n\\t\\tmax-width: 100%;\\n\\t\\tbackground-color: var(--color-main-background);\\n\\n\\t\\tobject-fit: cover;\\n\\t}\\n\\n\\t// Failed preview, fallback to mime icon\\n\\t&__preview--failed &__image {\\n\\t\\twidth: calc(var(--margin) * 8);\\n\\t\\t// Center mime icon\\n\\t\\tmargin: auto;\\n\\t\\tbackground-color: transparent !important;\\n\\n\\t\\tobject-fit: initial;\\n\\t}\\n\\n\\t&__title {\\n\\t\\toverflow: hidden;\\n\\t\\t// also count preview border\\n\\t\\tmax-width: calc(var(--width) + 2*2px);\\n\\t\\tpadding: var(--margin);\\n\\t\\twhite-space: nowrap;\\n\\t\\ttext-overflow: ellipsis;\\n\\t}\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".app-content[data-v-66068cbb]{display:flex;overflow:hidden;flex-direction:column;max-height:100%}.app-content[data-v-66068cbb]:not(.app-content--hidden)+#app-content{display:none}.files-list__header[data-v-66068cbb]{display:flex;align-content:center;flex:0 0;margin:4px 4px 4px 50px}.files-list__header>*[data-v-66068cbb]{flex:0 0}.files-list__refresh-icon[data-v-66068cbb]{flex:0 0 44px;width:44px;height:44px}.files-list__loading-icon[data-v-66068cbb]{margin:auto}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/views/FilesList.vue\"],\"names\":[],\"mappings\":\"AACA,8BAEC,YAAA,CACA,eAAA,CACA,qBAAA,CACA,eAAA,CAIA,qEACC,YAAA,CAQD,qCACC,YAAA,CACA,oBAAA,CAEA,QAAA,CAEA,uBAAA,CACA,uCAGC,QAAA,CAGF,2CACC,aAAA,CACA,UAAA,CACA,WAAA,CAED,2CACC,WAAA\",\"sourcesContent\":[\"\\n.app-content {\\n\\t// Virtual list needs to be full height and is scrollable\\n\\tdisplay: flex;\\n\\toverflow: hidden;\\n\\tflex-direction: column;\\n\\tmax-height: 100%;\\n\\n\\t// TODO: remove after all legacy views are migrated\\n\\t// Hides the legacy app-content if shown view is not legacy\\n\\t&:not(&--hidden)::v-deep + #app-content {\\n\\t\\tdisplay: none;\\n\\t}\\n}\\n\\n$margin: 4px;\\n$navigationToggleSize: 50px;\\n\\n.files-list {\\n\\t&__header {\\n\\t\\tdisplay: flex;\\n\\t\\talign-content: center;\\n\\t\\t// Do not grow or shrink (vertically)\\n\\t\\tflex: 0 0;\\n\\t\\t// Align with the navigation toggle icon\\n\\t\\tmargin: $margin $margin $margin $navigationToggleSize;\\n\\t\\t> * {\\n\\t\\t\\t// Do not grow or shrink (horizontally)\\n\\t\\t\\t// Only the breadcrumbs shrinks\\n\\t\\t\\tflex: 0 0;\\n\\t\\t}\\n\\t}\\n\\t&__refresh-icon {\\n\\t\\tflex: 0 0 44px;\\n\\t\\twidth: 44px;\\n\\t\\theight: 44px;\\n\\t}\\n\\t&__loading-icon {\\n\\t\\tmargin: auto;\\n\\t}\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".app-navigation[data-v-657a978e] .app-navigation-entry-icon{background-repeat:no-repeat;background-position:center}.app-navigation>ul.app-navigation__list[data-v-657a978e]{padding-bottom:var(--default-grid-baseline, 4px)}.app-navigation-entry__settings[data-v-657a978e]{height:auto !important;overflow:hidden !important;padding-top:0 !important;flex:0 0 auto}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/views/Navigation.vue\"],\"names\":[],\"mappings\":\"AAEA,4DACC,2BAAA,CACA,0BAAA,CAGD,yDAEC,gDAAA,CAGD,iDACC,sBAAA,CACA,0BAAA,CACA,wBAAA,CAEA,aAAA\",\"sourcesContent\":[\"\\n// TODO: remove when https://github.com/nextcloud/nextcloud-vue/pull/3539 is in\\n.app-navigation::v-deep .app-navigation-entry-icon {\\n\\tbackground-repeat: no-repeat;\\n\\tbackground-position: center;\\n}\\n\\n.app-navigation > ul.app-navigation__list {\\n\\t// Use flex gap value for more elegant spacing\\n\\tpadding-bottom: var(--default-grid-baseline, 4px);\\n}\\n\\n.app-navigation-entry__settings {\\n\\theight: auto !important;\\n\\toverflow: hidden !important;\\n\\tpadding-top: 0 !important;\\n\\t// Prevent shrinking or growing\\n\\tflex: 0 0 auto;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".setting-link[data-v-76ca5d1f]:hover{text-decoration:underline}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/views/Settings.vue\"],\"names\":[],\"mappings\":\"AACA,qCACC,yBAAA\",\"sourcesContent\":[\"\\n.setting-link:hover {\\n\\ttext-decoration: underline;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".templates-picker__form[data-v-715b4161]{padding:calc(var(--margin)*2);padding-bottom:0}.templates-picker__form h2[data-v-715b4161]{text-align:center;font-weight:bold;margin:var(--margin) 0 calc(var(--margin)*2)}.templates-picker__list[data-v-715b4161]{display:grid;grid-gap:calc(var(--margin)*2);grid-auto-columns:1fr;max-width:calc(var(--fullwidth)*6);grid-template-columns:repeat(auto-fit, var(--fullwidth));grid-auto-rows:1fr;justify-content:center}.templates-picker__buttons[data-v-715b4161]{display:flex;justify-content:space-between;padding:calc(var(--margin)*2) var(--margin);position:sticky;bottom:0;background-image:linear-gradient(0, var(--gradient-main-background))}.templates-picker__buttons button[data-v-715b4161],.templates-picker__buttons input[type=submit][data-v-715b4161]{height:44px}.templates-picker[data-v-715b4161] .modal-container{position:relative}.templates-picker__loading[data-v-715b4161]{position:absolute;top:0;left:0;justify-content:center;width:100%;height:100%;margin:0;background-color:var(--color-main-background-translucent)}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/views/TemplatePicker.vue\"],\"names\":[],\"mappings\":\"AAEC,yCACC,6BAAA,CAEA,gBAAA,CAEA,4CACC,iBAAA,CACA,gBAAA,CACA,4CAAA,CAIF,yCACC,YAAA,CACA,8BAAA,CACA,qBAAA,CAEA,kCAAA,CACA,wDAAA,CAEA,kBAAA,CAEA,sBAAA,CAGD,4CACC,YAAA,CACA,6BAAA,CACA,2CAAA,CACA,eAAA,CACA,QAAA,CACA,oEAAA,CAEA,kHACC,WAAA,CAKF,oDACC,iBAAA,CAGD,4CACC,iBAAA,CACA,KAAA,CACA,MAAA,CACA,sBAAA,CACA,UAAA,CACA,WAAA,CACA,QAAA,CACA,yDAAA\",\"sourcesContent\":[\"\\n.templates-picker {\\n\\t&__form {\\n\\t\\tpadding: calc(var(--margin) * 2);\\n\\t\\t// Will be handled by the buttons\\n\\t\\tpadding-bottom: 0;\\n\\n\\t\\th2 {\\n\\t\\t\\ttext-align: center;\\n\\t\\t\\tfont-weight: bold;\\n\\t\\t\\tmargin: var(--margin) 0 calc(var(--margin) * 2);\\n\\t\\t}\\n\\t}\\n\\n\\t&__list {\\n\\t\\tdisplay: grid;\\n\\t\\tgrid-gap: calc(var(--margin) * 2);\\n\\t\\tgrid-auto-columns: 1fr;\\n\\t\\t// We want maximum 5 columns. Putting 6 as we don't count the grid gap. So it will always be lower than 6\\n\\t\\tmax-width: calc(var(--fullwidth) * 6);\\n\\t\\tgrid-template-columns: repeat(auto-fit, var(--fullwidth));\\n\\t\\t// Make sure all rows are the same height\\n\\t\\tgrid-auto-rows: 1fr;\\n\\t\\t// Center the columns set\\n\\t\\tjustify-content: center;\\n\\t}\\n\\n\\t&__buttons {\\n\\t\\tdisplay: flex;\\n\\t\\tjustify-content: space-between;\\n\\t\\tpadding: calc(var(--margin) * 2) var(--margin);\\n\\t\\tposition: sticky;\\n\\t\\tbottom: 0;\\n\\t\\tbackground-image: linear-gradient(0, var(--gradient-main-background));\\n\\n\\t\\tbutton, input[type='submit'] {\\n\\t\\t\\theight: 44px;\\n\\t\\t}\\n\\t}\\n\\n\\t// Make sure we're relative for the loading emptycontent on top\\n\\t::v-deep .modal-container {\\n\\t\\tposition: relative;\\n\\t}\\n\\n\\t&__loading {\\n\\t\\tposition: absolute;\\n\\t\\ttop: 0;\\n\\t\\tleft: 0;\\n\\t\\tjustify-content: center;\\n\\t\\twidth: 100%;\\n\\t\\theight: 100%;\\n\\t\\tmargin: 0;\\n\\t\\tbackground-color: var(--color-main-background-translucent);\\n\\t}\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"\\n/* @keyframes preview-gradient-fade {\\n    0% {\\n        opacity: 1;\\n    }\\n    50% {\\n        opacity: 0.5;\\n    }\\n    100% {\\n        opacity: 1;\\n    }\\n} */\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/components/FileEntry.vue\"],\"names\":[],\"mappings\":\";AA6mBA;;;;;;;;;;GAUA\",\"sourcesContent\":[\"<!--\\n  - @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\\n  -\\n  - @author John Molakvoæ <skjnldsv@protonmail.com>\\n  -\\n  - @license GNU AGPL version 3 or any later version\\n  -\\n  - This program is free software: you can redistribute it and/or modify\\n  - it under the terms of the GNU Affero General Public License as\\n  - published by the Free Software Foundation, either version 3 of the\\n  - License, or (at your option) any later version.\\n  -\\n  - This program is distributed in the hope that it will be useful,\\n  - but WITHOUT ANY WARRANTY; without even the implied warranty of\\n  - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\\n  - GNU Affero General Public License for more details.\\n  -\\n  - You should have received a copy of the GNU Affero General Public License\\n  - along with this program. If not, see <http://www.gnu.org/licenses/>.\\n  -\\n  -->\\n\\n<template>\\n\\t<Fragment>\\n\\t\\t<td class=\\\"files-list__row-checkbox\\\">\\n\\t\\t\\t<NcCheckboxRadioSwitch v-if=\\\"active\\\"\\n\\t\\t\\t\\t:aria-label=\\\"t('files', 'Select the row for {displayName}', { displayName })\\\"\\n\\t\\t\\t\\t:checked=\\\"selectedFiles\\\"\\n\\t\\t\\t\\t:value=\\\"fileid\\\"\\n\\t\\t\\t\\tname=\\\"selectedFiles\\\"\\n\\t\\t\\t\\t@update:checked=\\\"onSelectionChange\\\" />\\n\\t\\t</td>\\n\\n\\t\\t<!-- Link to file -->\\n\\t\\t<td class=\\\"files-list__row-name\\\">\\n\\t\\t\\t<a ref=\\\"name\\\" v-bind=\\\"linkTo\\\" @click=\\\"execDefaultAction\\\">\\n\\t\\t\\t\\t<!-- Icon or preview -->\\n\\t\\t\\t\\t<span class=\\\"files-list__row-icon\\\">\\n\\t\\t\\t\\t\\t<FolderIcon v-if=\\\"source.type === 'folder'\\\" />\\n\\n\\t\\t\\t\\t\\t<!-- Decorative image, should not be aria documented -->\\n\\t\\t\\t\\t\\t<span v-else-if=\\\"previewUrl && !backgroundFailed\\\"\\n\\t\\t\\t\\t\\t\\tref=\\\"previewImg\\\"\\n\\t\\t\\t\\t\\t\\tclass=\\\"files-list__row-icon-preview\\\"\\n\\t\\t\\t\\t\\t\\t:style=\\\"{ backgroundImage }\\\" />\\n\\n\\t\\t\\t\\t\\t<span v-else-if=\\\"mimeIconUrl\\\"\\n\\t\\t\\t\\t\\t\\tclass=\\\"files-list__row-icon-preview files-list__row-icon-preview--mime\\\"\\n\\t\\t\\t\\t\\t\\t:style=\\\"{ backgroundImage: mimeIconUrl }\\\" />\\n\\n\\t\\t\\t\\t\\t<FileIcon v-else />\\n\\n\\t\\t\\t\\t\\t<!-- Favorite icon -->\\n\\t\\t\\t\\t\\t<span v-if=\\\"isFavorite\\\"\\n\\t\\t\\t\\t\\t\\tclass=\\\"files-list__row-icon-favorite\\\"\\n\\t\\t\\t\\t\\t\\t:aria-label=\\\"t('files', 'Favorite')\\\">\\n\\t\\t\\t\\t\\t\\t<StarIcon aria-hidden=\\\"true\\\" :size=\\\"20\\\" />\\n\\t\\t\\t\\t\\t</span>\\n\\t\\t\\t\\t</span>\\n\\n\\t\\t\\t\\t<!-- File name -->\\n\\t\\t\\t\\t<span class=\\\"files-list__row-name-text\\\">{{ displayName }}</span>\\n\\t\\t\\t</a>\\n\\t\\t</td>\\n\\n\\t\\t<!-- Actions -->\\n\\t\\t<td :class=\\\"`files-list__row-actions-${uniqueId}`\\\" class=\\\"files-list__row-actions\\\">\\n\\t\\t\\t<!-- Inline actions -->\\n\\t\\t\\t<!-- TODO: implement CustomElementRender -->\\n\\n\\t\\t\\t<!-- Menu actions -->\\n\\t\\t\\t<NcActions v-if=\\\"active\\\"\\n\\t\\t\\t\\tref=\\\"actionsMenu\\\"\\n\\t\\t\\t\\t:boundaries-element=\\\"boundariesElement\\\"\\n\\t\\t\\t\\t:container=\\\"boundariesElement\\\"\\n\\t\\t\\t\\t:disabled=\\\"source._loading\\\"\\n\\t\\t\\t\\t:force-title=\\\"true\\\"\\n\\t\\t\\t\\t:force-menu=\\\"true\\\"\\n\\t\\t\\t\\t:inline=\\\"enabledInlineActions.length\\\"\\n\\t\\t\\t\\t:open.sync=\\\"openedMenu\\\">\\n\\t\\t\\t\\t<NcActionButton v-for=\\\"action in enabledMenuActions\\\"\\n\\t\\t\\t\\t\\t:key=\\\"action.id\\\"\\n\\t\\t\\t\\t\\t:class=\\\"'files-list__row-action-' + action.id\\\"\\n\\t\\t\\t\\t\\t@click=\\\"onActionClick(action)\\\">\\n\\t\\t\\t\\t\\t<template #icon>\\n\\t\\t\\t\\t\\t\\t<NcLoadingIcon v-if=\\\"loading === action.id\\\" :size=\\\"18\\\" />\\n\\t\\t\\t\\t\\t\\t<CustomSvgIconRender v-else :svg=\\\"action.iconSvgInline([source], currentView)\\\" />\\n\\t\\t\\t\\t\\t</template>\\n\\t\\t\\t\\t\\t{{ action.displayName([source], currentView) }}\\n\\t\\t\\t\\t</NcActionButton>\\n\\t\\t\\t</NcActions>\\n\\t\\t</td>\\n\\n\\t\\t<!-- Size -->\\n\\t\\t<td v-if=\\\"isSizeAvailable\\\"\\n\\t\\t\\t:style=\\\"{ opacity: sizeOpacity }\\\"\\n\\t\\t\\tclass=\\\"files-list__row-size\\\"\\n\\t\\t\\t@click=\\\"openDetailsIfAvailable\\\">\\n\\t\\t\\t<span>{{ size }}</span>\\n\\t\\t</td>\\n\\n\\t\\t<!-- View columns -->\\n\\t\\t<td v-for=\\\"column in columns\\\"\\n\\t\\t\\t:key=\\\"column.id\\\"\\n\\t\\t\\t:class=\\\"`files-list__row-${currentView?.id}-${column.id}`\\\"\\n\\t\\t\\tclass=\\\"files-list__row-column-custom\\\"\\n\\t\\t\\t@click=\\\"openDetailsIfAvailable\\\">\\n\\t\\t\\t<CustomElementRender v-if=\\\"active\\\"\\n\\t\\t\\t\\t:current-view=\\\"currentView\\\"\\n\\t\\t\\t\\t:render=\\\"column.render\\\"\\n\\t\\t\\t\\t:source=\\\"source\\\" />\\n\\t\\t</td>\\n\\t</Fragment>\\n</template>\\n\\n<script lang='ts'>\\nimport { debounce } from 'debounce'\\nimport { formatFileSize } from '@nextcloud/files'\\nimport { Fragment } from 'vue-frag'\\nimport { join } from 'path'\\nimport { showError, showSuccess } from '@nextcloud/dialogs'\\nimport { translate } from '@nextcloud/l10n'\\nimport CancelablePromise from 'cancelable-promise'\\nimport FileIcon from 'vue-material-design-icons/File.vue'\\nimport FolderIcon from 'vue-material-design-icons/Folder.vue'\\nimport NcActionButton from '@nextcloud/vue/dist/Components/NcActionButton.js'\\nimport NcActions from '@nextcloud/vue/dist/Components/NcActions.js'\\nimport NcCheckboxRadioSwitch from '@nextcloud/vue/dist/Components/NcCheckboxRadioSwitch.js'\\nimport NcLoadingIcon from '@nextcloud/vue/dist/Components/NcLoadingIcon.js'\\nimport StarIcon from 'vue-material-design-icons/Star.vue'\\nimport Vue from 'vue'\\n\\nimport { ACTION_DETAILS } from '../actions/sidebarAction.ts'\\nimport { getFileActions } from '../services/FileAction.ts'\\nimport { hashCode } from '../utils/hashUtils.ts'\\nimport { isCachedPreview } from '../services/PreviewService.ts'\\nimport { useActionsMenuStore } from '../store/actionsmenu.ts'\\nimport { useFilesStore } from '../store/files.ts'\\nimport { useKeyboardStore } from '../store/keyboard.ts'\\nimport { useSelectionStore } from '../store/selection.ts'\\nimport { useUserConfigStore } from '../store/userconfig.ts'\\nimport CustomElementRender from './CustomElementRender.vue'\\nimport CustomSvgIconRender from './CustomSvgIconRender.vue'\\nimport logger from '../logger.js'\\n\\n// The registered actions list\\nconst actions = getFileActions()\\n\\nexport default Vue.extend({\\n\\tname: 'FileEntry',\\n\\n\\tcomponents: {\\n\\t\\tCustomElementRender,\\n\\t\\tCustomSvgIconRender,\\n\\t\\tFileIcon,\\n\\t\\tFolderIcon,\\n\\t\\tFragment,\\n\\t\\tNcActionButton,\\n\\t\\tNcActions,\\n\\t\\tNcCheckboxRadioSwitch,\\n\\t\\tNcLoadingIcon,\\n\\t\\tStarIcon,\\n\\t},\\n\\n\\tprops: {\\n\\t\\tactive: {\\n\\t\\t\\ttype: Boolean,\\n\\t\\t\\tdefault: false,\\n\\t\\t},\\n\\t\\tisSizeAvailable: {\\n\\t\\t\\ttype: Boolean,\\n\\t\\t\\tdefault: false,\\n\\t\\t},\\n\\t\\tsource: {\\n\\t\\t\\ttype: Object,\\n\\t\\t\\trequired: true,\\n\\t\\t},\\n\\t\\tindex: {\\n\\t\\t\\ttype: Number,\\n\\t\\t\\trequired: true,\\n\\t\\t},\\n\\t\\tnodes: {\\n\\t\\t\\ttype: Array,\\n\\t\\t\\trequired: true,\\n\\t\\t},\\n\\t\\tfilesListWidth: {\\n\\t\\t\\ttype: Number,\\n\\t\\t\\tdefault: 0,\\n\\t\\t},\\n\\t},\\n\\n\\tsetup() {\\n\\t\\tconst actionsMenuStore = useActionsMenuStore()\\n\\t\\tconst filesStore = useFilesStore()\\n\\t\\tconst keyboardStore = useKeyboardStore()\\n\\t\\tconst selectionStore = useSelectionStore()\\n\\t\\tconst userConfigStore = useUserConfigStore()\\n\\t\\treturn {\\n\\t\\t\\tactionsMenuStore,\\n\\t\\t\\tfilesStore,\\n\\t\\t\\tkeyboardStore,\\n\\t\\t\\tselectionStore,\\n\\t\\t\\tuserConfigStore,\\n\\t\\t}\\n\\t},\\n\\n\\tdata() {\\n\\t\\treturn {\\n\\t\\t\\tbackgroundFailed: false,\\n\\t\\t\\tbackgroundImage: '',\\n\\t\\t\\tboundariesElement: document.querySelector('.app-content > .files-list'),\\n\\t\\t\\tloading: '',\\n\\t\\t}\\n\\t},\\n\\n\\tcomputed: {\\n\\t\\tuserConfig() {\\n\\t\\t\\treturn this.userConfigStore.userConfig\\n\\t\\t},\\n\\n\\t\\tcurrentView() {\\n\\t\\t\\treturn this.$navigation.active\\n\\t\\t},\\n\\t\\tcolumns() {\\n\\t\\t\\t// Hide columns if the list is too small\\n\\t\\t\\tif (this.filesListWidth < 512) {\\n\\t\\t\\t\\treturn []\\n\\t\\t\\t}\\n\\t\\t\\treturn this.currentView?.columns || []\\n\\t\\t},\\n\\n\\t\\tdir() {\\n\\t\\t\\t// Remove any trailing slash but leave root slash\\n\\t\\t\\treturn (this.$route?.query?.dir || '/').replace(/^(.+)\\\\/$/, '$1')\\n\\t\\t},\\n\\t\\tfileid() {\\n\\t\\t\\treturn this.source?.fileid?.toString?.()\\n\\t\\t},\\n\\t\\tdisplayName() {\\n\\t\\t\\treturn this.source.attributes.displayName\\n\\t\\t\\t\\t|| this.source.basename\\n\\t\\t},\\n\\n\\t\\tsize() {\\n\\t\\t\\tconst size = parseInt(this.source.size, 10) || 0\\n\\t\\t\\tif (typeof size !== 'number' || size < 0) {\\n\\t\\t\\t\\treturn this.t('files', 'Pending')\\n\\t\\t\\t}\\n\\t\\t\\treturn formatFileSize(size, true)\\n\\t\\t},\\n\\t\\tsizeOpacity() {\\n\\t\\t\\tconst size = parseInt(this.source.size, 10) || 0\\n\\t\\t\\tif (!size || size < 0) {\\n\\t\\t\\t\\treturn 1\\n\\t\\t\\t}\\n\\n\\t\\t\\t// Whatever theme is active, the contrast will pass WCAG AA\\n\\t\\t\\t// with color main text over main background and an opacity of 0.7\\n\\t\\t\\tconst minOpacity = 0.7\\n\\t\\t\\tconst maxOpacitySize = 10 * 1024 * 1024\\n\\t\\t\\treturn minOpacity + (1 - minOpacity) * Math.pow((this.source.size / maxOpacitySize), 2)\\n\\t\\t},\\n\\n\\t\\tlinkTo() {\\n\\t\\t\\tif (this.source.type === 'folder') {\\n\\t\\t\\t\\tconst to = { ...this.$route, query: { dir: join(this.dir, this.source.basename) } }\\n\\t\\t\\t\\treturn {\\n\\t\\t\\t\\t\\tis: 'router-link',\\n\\t\\t\\t\\t\\ttitle: this.t('files', 'Open folder {name}', { name: this.displayName }),\\n\\t\\t\\t\\t\\tto,\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\n\\t\\t\\tif (this.enabledDefaultActions.length > 0) {\\n\\t\\t\\t\\tconst action = this.enabledDefaultActions[0]\\n\\t\\t\\t\\tconst displayName = action.displayName([this.source], this.currentView)\\n\\t\\t\\t\\treturn {\\n\\t\\t\\t\\t\\ttitle: displayName,\\n\\t\\t\\t\\t\\trole: 'button',\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\n\\t\\t\\treturn {\\n\\t\\t\\t\\thref: this.source.source,\\n\\t\\t\\t\\t// TODO: Use first action title ?\\n\\t\\t\\t\\ttitle: this.t('files', 'Download file {name}', { name: this.displayName }),\\n\\t\\t\\t}\\n\\t\\t},\\n\\n\\t\\tselectedFiles() {\\n\\t\\t\\treturn this.selectionStore.selected\\n\\t\\t},\\n\\t\\tisSelected() {\\n\\t\\t\\treturn this.selectedFiles.includes(this.source?.fileid?.toString?.())\\n\\t\\t},\\n\\n\\t\\tcropPreviews() {\\n\\t\\t\\treturn this.userConfig.crop_image_previews\\n\\t\\t},\\n\\t\\tpreviewUrl() {\\n\\t\\t\\ttry {\\n\\t\\t\\t\\tconst url = new URL(window.location.origin + this.source.attributes.previewUrl)\\n\\t\\t\\t\\t// Request tiny previews\\n\\t\\t\\t\\turl.searchParams.set('x', '32')\\n\\t\\t\\t\\turl.searchParams.set('y', '32')\\n\\t\\t\\t\\t// Handle cropping\\n\\t\\t\\t\\turl.searchParams.set('a', this.cropPreviews === true ? '0' : '1')\\n\\t\\t\\t\\treturn url.href\\n\\t\\t\\t} catch (e) {\\n\\t\\t\\t\\treturn null\\n\\t\\t\\t}\\n\\t\\t},\\n\\t\\tmimeIconUrl() {\\n\\t\\t\\tconst mimeType = this.source.mime || 'application/octet-stream'\\n\\t\\t\\tconst mimeIconUrl = window.OC?.MimeType?.getIconUrl?.(mimeType)\\n\\t\\t\\tif (mimeIconUrl) {\\n\\t\\t\\t\\treturn `url(${mimeIconUrl})`\\n\\t\\t\\t}\\n\\t\\t\\treturn ''\\n\\t\\t},\\n\\n\\t\\tenabledActions() {\\n\\t\\t\\treturn actions\\n\\t\\t\\t\\t.filter(action => !action.enabled || action.enabled([this.source], this.currentView))\\n\\t\\t\\t\\t.sort((a, b) => (a.order || 0) - (b.order || 0))\\n\\t\\t},\\n\\t\\tenabledInlineActions() {\\n\\t\\t\\tif (this.filesListWidth < 768) {\\n\\t\\t\\t\\treturn []\\n\\t\\t\\t}\\n\\t\\t\\treturn this.enabledActions.filter(action => action?.inline?.(this.source, this.currentView))\\n\\t\\t},\\n\\t\\tenabledMenuActions() {\\n\\t\\t\\tif (this.filesListWidth < 768) {\\n\\t\\t\\t\\t// If we have a default action, do not render the first one\\n\\t\\t\\t\\tif (this.enabledDefaultActions.length > 0) {\\n\\t\\t\\t\\t\\treturn this.enabledActions.slice(1)\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\treturn this.enabledActions\\n\\t\\t\\t}\\n\\n\\t\\t\\tconst actions = [\\n\\t\\t\\t\\t...this.enabledInlineActions,\\n\\t\\t\\t\\t...this.enabledActions.filter(action => !action.inline),\\n\\t\\t\\t]\\n\\n\\t\\t\\t// If we have a default action, do not render the first one\\n\\t\\t\\tif (this.enabledDefaultActions.length > 0) {\\n\\t\\t\\t\\treturn actions.slice(1)\\n\\t\\t\\t}\\n\\n\\t\\t\\treturn actions\\n\\t\\t},\\n\\t\\tenabledDefaultActions() {\\n\\t\\t\\treturn [\\n\\t\\t\\t\\t...this.enabledActions.filter(action => action.default),\\n\\t\\t\\t]\\n\\t\\t},\\n\\t\\topenedMenu: {\\n\\t\\t\\tget() {\\n\\t\\t\\t\\treturn this.actionsMenuStore.opened === this.uniqueId\\n\\t\\t\\t},\\n\\t\\t\\tset(opened) {\\n\\t\\t\\t\\tthis.actionsMenuStore.opened = opened ? this.uniqueId : null\\n\\t\\t\\t},\\n\\t\\t},\\n\\n\\t\\tuniqueId() {\\n\\t\\t\\treturn hashCode(this.source.source)\\n\\t\\t},\\n\\n\\t\\tisFavorite() {\\n\\t\\t\\treturn this.source.attributes.favorite === 1\\n\\t\\t},\\n\\t},\\n\\n\\twatch: {\\n\\t\\tactive(active, before) {\\n\\t\\t\\tif (active === false && before === true) {\\n\\t\\t\\t\\tthis.resetState()\\n\\n\\t\\t\\t\\t// When the row is not active anymore\\n\\t\\t\\t\\t// remove the display from the row to prevent\\n\\t\\t\\t\\t// keyboard interaction with it.\\n\\t\\t\\t\\tthis.$el.parentNode.style.display = 'none'\\n\\t\\t\\t\\treturn\\n\\t\\t\\t}\\n\\n\\t\\t\\t// Restore default tabindex\\n\\t\\t\\tthis.$el.parentNode.style.display = ''\\n\\t\\t},\\n\\n\\t\\t/**\\n\\t\\t * When the source changes, reset the preview\\n\\t\\t * and fetch the new one.\\n\\t\\t */\\n\\t\\tpreviewUrl() {\\n\\t\\t\\tthis.clearImg()\\n\\t\\t\\tthis.debounceIfNotCached()\\n\\t\\t},\\n\\t},\\n\\n\\t/**\\n\\t * The row is mounted once and reused as we scroll.\\n\\t */\\n\\tmounted() {\\n\\t\\t// ⚠ Init the debounce function on mount and\\n\\t\\t// not when the module is imported  to\\n\\t\\t// avoid sharing between recycled components\\n\\t\\tthis.debounceGetPreview = debounce(function() {\\n\\t\\t\\tthis.fetchAndApplyPreview()\\n\\t\\t}, 150, false)\\n\\n\\t\\t// Fetch the preview on init\\n\\t\\tthis.debounceIfNotCached()\\n\\n\\t\\t// Right click watcher on tr\\n\\t\\tthis.$el.parentNode?.addEventListener?.('contextmenu', this.onRightClick)\\n\\t},\\n\\n\\tbeforeDestroy() {\\n\\t\\tthis.resetState()\\n\\t},\\n\\n\\tmethods: {\\n\\t\\tasync debounceIfNotCached() {\\n\\t\\t\\tif (!this.previewUrl) {\\n\\t\\t\\t\\treturn\\n\\t\\t\\t}\\n\\n\\t\\t\\t// Check if we already have this preview cached\\n\\t\\t\\tconst isCached = await isCachedPreview(this.previewUrl)\\n\\t\\t\\tif (isCached) {\\n\\t\\t\\t\\tthis.backgroundImage = `url(${this.previewUrl})`\\n\\t\\t\\t\\tthis.backgroundFailed = false\\n\\t\\t\\t\\treturn\\n\\t\\t\\t}\\n\\n\\t\\t\\t// We don't have this preview cached or it expired, requesting it\\n\\t\\t\\tthis.debounceGetPreview()\\n\\t\\t},\\n\\n\\t\\tfetchAndApplyPreview() {\\n\\t\\t\\t// Ignore if no preview\\n\\t\\t\\tif (!this.previewUrl) {\\n\\t\\t\\t\\treturn\\n\\t\\t\\t}\\n\\n\\t\\t\\t// If any image is being processed, reset it\\n\\t\\t\\tif (this.previewPromise) {\\n\\t\\t\\t\\tthis.clearImg()\\n\\t\\t\\t}\\n\\n\\t\\t\\t// Store the promise to be able to cancel it\\n\\t\\t\\tthis.previewPromise = new CancelablePromise((resolve, reject, onCancel) => {\\n\\t\\t\\t\\tconst img = new Image()\\n\\t\\t\\t\\t// If active, load the preview with higher priority\\n\\t\\t\\t\\timg.fetchpriority = this.active ? 'high' : 'auto'\\n\\t\\t\\t\\timg.onload = () => {\\n\\t\\t\\t\\t\\tthis.backgroundImage = `url(${this.previewUrl})`\\n\\t\\t\\t\\t\\tthis.backgroundFailed = false\\n\\t\\t\\t\\t\\tresolve(img)\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\timg.onerror = () => {\\n\\t\\t\\t\\t\\tthis.backgroundFailed = true\\n\\t\\t\\t\\t\\treject(img)\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\timg.src = this.previewUrl\\n\\n\\t\\t\\t\\t// Image loading has been canceled\\n\\t\\t\\t\\tonCancel(() => {\\n\\t\\t\\t\\t\\timg.onerror = null\\n\\t\\t\\t\\t\\timg.onload = null\\n\\t\\t\\t\\t\\timg.src = ''\\n\\t\\t\\t\\t})\\n\\t\\t\\t})\\n\\t\\t},\\n\\n\\t\\tresetState() {\\n\\t\\t\\t// Reset loading state\\n\\t\\t\\tthis.loading = ''\\n\\n\\t\\t\\t// Reset the preview\\n\\t\\t\\tthis.clearImg()\\n\\n\\t\\t\\t// Close menu\\n\\t\\t\\tthis.openedMenu = false\\n\\t\\t},\\n\\n\\t\\tclearImg() {\\n\\t\\t\\tthis.backgroundImage = ''\\n\\t\\t\\tthis.backgroundFailed = false\\n\\n\\t\\t\\tif (this.previewPromise) {\\n\\t\\t\\t\\tthis.previewPromise.cancel()\\n\\t\\t\\t\\tthis.previewPromise = null\\n\\t\\t\\t}\\n\\t\\t},\\n\\n\\t\\tasync onActionClick(action) {\\n\\t\\t\\tconst displayName = action.displayName([this.source], this.currentView)\\n\\t\\t\\ttry {\\n\\t\\t\\t\\t// Set the loading marker\\n\\t\\t\\t\\tthis.loading = action.id\\n\\t\\t\\t\\tVue.set(this.source, '_loading', true)\\n\\n\\t\\t\\t\\tconst success = await action.exec(this.source, this.currentView, this.dir)\\n\\n\\t\\t\\t\\t// If the action returns null, we stay silent\\n\\t\\t\\t\\tif (success === null) {\\n\\t\\t\\t\\t\\treturn\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\tif (success) {\\n\\t\\t\\t\\t\\tshowSuccess(this.t('files', '\\\"{displayName}\\\" action executed successfully', { displayName }))\\n\\t\\t\\t\\t\\treturn\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tshowError(this.t('files', '\\\"{displayName}\\\" action failed', { displayName }))\\n\\t\\t\\t} catch (e) {\\n\\t\\t\\t\\tlogger.error('Error while executing action', { action, e })\\n\\t\\t\\t\\tshowError(this.t('files', '\\\"{displayName}\\\" action failed', { displayName }))\\n\\t\\t\\t} finally {\\n\\t\\t\\t\\t// Reset the loading marker\\n\\t\\t\\t\\tthis.loading = ''\\n\\t\\t\\t\\tVue.set(this.source, '_loading', false)\\n\\t\\t\\t}\\n\\t\\t},\\n\\t\\texecDefaultAction(event) {\\n\\t\\t\\t// Do not execute the default action on the folder, navigate instead\\n\\t\\t\\tif (this.source.type === 'folder') {\\n\\t\\t\\t\\treturn\\n\\t\\t\\t}\\n\\n\\t\\t\\tif (this.enabledDefaultActions.length > 0) {\\n\\t\\t\\t\\tevent.preventDefault()\\n\\t\\t\\t\\tevent.stopPropagation()\\n\\t\\t\\t\\t// Execute the first default action if any\\n\\t\\t\\t\\tthis.enabledDefaultActions[0].exec(this.source, this.currentView, this.dir)\\n\\t\\t\\t}\\n\\t\\t},\\n\\n\\t\\topenDetailsIfAvailable(event) {\\n\\t\\t\\tconst detailsAction = this.enabledDefaultActions.find(action => action.id === ACTION_DETAILS)\\n\\t\\t\\tif (detailsAction) {\\n\\t\\t\\t\\tevent.preventDefault()\\n\\t\\t\\t\\tevent.stopPropagation()\\n\\t\\t\\t\\tdetailsAction.exec(this.source, this.currentView)\\n\\t\\t\\t}\\n\\t\\t},\\n\\n\\t\\tonSelectionChange(selection) {\\n\\t\\t\\tconst newSelectedIndex = this.index\\n\\t\\t\\tconst lastSelectedIndex = this.selectionStore.lastSelectedIndex\\n\\n\\t\\t\\t// Get the last selected and select all files in between\\n\\t\\t\\tif (this.keyboardStore?.shiftKey && lastSelectedIndex !== null) {\\n\\t\\t\\t\\tconst isAlreadySelected = this.selectedFiles.includes(this.fileid)\\n\\n\\t\\t\\t\\tconst start = Math.min(newSelectedIndex, lastSelectedIndex)\\n\\t\\t\\t\\tconst end = Math.max(lastSelectedIndex, newSelectedIndex)\\n\\n\\t\\t\\t\\tconst lastSelection = this.selectionStore.lastSelection\\n\\t\\t\\t\\tconst filesToSelect = this.nodes\\n\\t\\t\\t\\t\\t.map(file => file.fileid?.toString?.())\\n\\t\\t\\t\\t\\t.slice(start, end + 1)\\n\\n\\t\\t\\t\\t// If already selected, update the new selection _without_ the current file\\n\\t\\t\\t\\tconst selection = [...lastSelection, ...filesToSelect]\\n\\t\\t\\t\\t\\t.filter(fileId => !isAlreadySelected || fileId !== this.fileid)\\n\\n\\t\\t\\t\\tlogger.debug('Shift key pressed, selecting all files in between', { start, end, filesToSelect, isAlreadySelected })\\n\\t\\t\\t\\t// Keep previous lastSelectedIndex to be use for further shift selections\\n\\t\\t\\t\\tthis.selectionStore.set(selection)\\n\\t\\t\\t\\treturn\\n\\t\\t\\t}\\n\\n\\t\\t\\tlogger.debug('Updating selection', { selection })\\n\\t\\t\\tthis.selectionStore.set(selection)\\n\\t\\t\\tthis.selectionStore.setLastIndex(newSelectedIndex)\\n\\t\\t},\\n\\n\\t\\t// Open the actions menu on right click\\n\\t\\tonRightClick(event) {\\n\\t\\t\\t// If already opened, fallback to default browser\\n\\t\\t\\tif (this.openedMenu) {\\n\\t\\t\\t\\treturn\\n\\t\\t\\t}\\n\\n\\t\\t\\t// If the clicked row is in the selection, open global menu\\n\\t\\t\\tconst isMoreThanOneSelected = this.selectedFiles.length > 1\\n\\t\\t\\tthis.actionsMenuStore.opened = this.isSelected && isMoreThanOneSelected ? 'global' : this.uniqueId\\n\\n\\t\\t\\t// Prevent any browser defaults\\n\\t\\t\\tevent.preventDefault()\\n\\t\\t\\tevent.stopPropagation()\\n\\t\\t},\\n\\n\\t\\tt: translate,\\n\\t\\tformatFileSize,\\n\\t},\\n})\\n</script>\\n\\n<style scoped lang='scss'>\\n/* Hover effect on tbody lines only */\\ntr {\\n\\t&:hover,\\n\\t&:focus,\\n\\t&:active {\\n\\t\\tbackground-color: var(--color-background-dark);\\n\\t}\\n}\\n\\n/* Preview not loaded animation effect */\\n.files-list__row-icon-preview:not([style*='background']) {\\n    background: var(--color-loading-dark);\\n\\t// animation: preview-gradient-fade 1.2s ease-in-out infinite;\\n}\\n</style>\\n\\n<style>\\n/* @keyframes preview-gradient-fade {\\n    0% {\\n        opacity: 1;\\n    }\\n    50% {\\n        opacity: 0.5;\\n    }\\n    100% {\\n        opacity: 1;\\n    }\\n} */\\n</style>\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 2181;","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t2181: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [7874], () => (__webpack_require__(9570)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","getCurrentDirectory","_OCA","_OCA$Files","_OCA$Files$App","_OCA$Files$App$curren","currentDirInfo","OCA","Files","App","currentFileList","dirInfo","path","name","concat","replace","previewWidth","inheritAttrs","props","basename","type","String","required","checked","Boolean","default","fileid","Number","filename","previewUrl","hasPreview","mime","ratio","data","failedPreview","computed","nameWithoutExt","indexOf","split","slice","join","id","realPreviewUrl","mimeIcon","getCurrentUser","generateUrl","document","getElementById","value","pathSections","startsWith","relativePath","forEach","section","encodeURIComponent","encodeFilePath","OC","MimeType","getIconUrl","methods","onCheck","$emit","onFailure","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","_vm","this","_c","_self","staticClass","attrs","domProps","on","_v","class","_s","components","NcEmptyContent","NcModal","TemplatePreview","logger","Object","loading","opened","provider","emptyTemplate","_this$provider","_this$provider2","t","mimetypes","selectedTemplate","templates","find","template","style","margin","width","border","Math","round","fetchedProvider","async","axios","generateOcsUrl","ocs","getTemplates","app","label","Error","length","onSubmit","close","currentDirectory","fileList","_this$provider3","_this$provider4","debug","extension","_this$selectedTemplat","_this$selectedTemplat2","fileInfo","filePath","templatePath","templateType","createFromTemplate","normalize","addAndFetchFileInfo","then","status","model","FileInfoModel","filesClient","fileAction","fileActions","getDefaultFileAction","PERMISSION_ALL","action","$file","findFileEl","dir","fileInfoModel","error","console","showError","$event","preventDefault","stopPropagation","apply","arguments","_b","_l","key","_e","getLoggerBuilder","setApp","detectUser","build","Vue","n","TemplatePickerRoot","createElement","body","appendChild","loadState","templatesPath","TemplatePicker","TemplatePickerView","propsData","$mount","window","addEventListener","initTemplatesPlugin","attach","menu","addMenuEntry","displayName","templateName","iconClass","fileType","actionLabel","actionHandler","initTemplatesFolder","removeMenuEntry","Plugins","register","index","newTemplatePlugin","open","response","copySystemTemplates","changeDirectory","template_path","FilesPlugin","subscribe","_ref","query","setFilter","FileAction","constructor","validateAction","_action","iconSvgInline","enabled","exec","execBatch","order","inline","renderInline","registerFileAction","_nc_fileactions","search","push","getFileActions","nodes","view","TrashCan","map","node","permissions","every","permission","Permission","source","emit","Promise","all","ACTION_DETAILS","InformationSvg","files","_window","_window$OCA","_window$OCA$Files","Sidebar","some","_node$root","root","_window2","_window2$OCA","_window2$OCA$Files","_window2$OCA$Files$Si","_window2$OCA$Files$Si2","call","useFilesStore","fileStore","defineStore","state","roots","getters","getNode","getNodes","ids","filter","getRoot","service","actions","updateNodes","reduce","acc","deleteNodes","setRoot","onDeletedNode","store","_initialized","usePathsStore","pathsStore","paths","getPath","addPath","payload","useSelectionStore","selected","lastSelection","lastSelectedIndex","set","selection","undefined","setLastIndex","reset","viewConfig","useViewConfigStore","getConfig","onUpdate","setSortingBy","update","toggleSortingDirection","newDirection","sorting_direction","viewConfigStore","Home","NcBreadcrumbs","NcBreadcrumb","setup","filesStore","currentView","$navigation","active","dirs","sections","to","$route","exact","getDirDisplayName","getNodeFromId","getFileIdFromPath","_this$currentView","_node$attributes","fileId","attributes","onClick","_to$query","ariaLabel","_section$to","_section$to$query","_setupProxy","nativeOn","scopedSlots","_u","fn","proxy","useActionsMenuStore","userConfig","show_hidden","crop_image_previews","useUserConfigStore","userConfigStore","render","Function","element","watch","$el","replaceWith","mounted","svg","innerHTML","sanitize","CustomElementRender","CustomSvgIconRender","FileIcon","FolderIcon","Fragment","NcActionButton","NcActions","NcCheckboxRadioSwitch","NcLoadingIcon","StarIcon","isSizeAvailable","Array","filesListWidth","actionsMenuStore","keyboardStore","altKey","ctrlKey","metaKey","shiftKey","onEvent","event","useKeyboardStore","selectionStore","backgroundFailed","backgroundImage","boundariesElement","querySelector","columns","_this$$route","_this$$route$query","_this$source","_this$source$fileid","_this$source$fileid$t","toString","size","parseInt","formatFileSize","sizeOpacity","pow","linkTo","is","title","enabledDefaultActions","role","href","selectedFiles","isSelected","_this$source2","_this$source2$fileid","_this$source2$fileid$","includes","cropPreviews","url","URL","location","origin","searchParams","e","mimeIconUrl","_window$OC","_window$OC$MimeType","_window$OC$MimeType$g","mimeType","enabledActions","sort","a","b","enabledInlineActions","_action$inline","enabledMenuActions","openedMenu","get","uniqueId","charCodeAt","isFavorite","favorite","before","resetState","parentNode","display","clearImg","debounceIfNotCached","_this$$el$parentNode","_this$$el$parentNode$","debounceGetPreview","debounce","fetchAndApplyPreview","onRightClick","beforeDestroy","caches","cache","match","previewPromise","CancelablePromise","resolve","reject","onCancel","img","Image","fetchpriority","onload","onerror","src","cancel","success","showSuccess","execDefaultAction","openDetailsIfAvailable","detailsAction","onSelectionChange","_this$keyboardStore","newSelectedIndex","isAlreadySelected","start","min","end","max","filesToSelect","file","_file$fileid","_file$fileid$toString","isMoreThanOneSelected","translate","ref","_loading","onActionClick","opacity","column","_vm$currentView","summary","currentFolder","_this$currentView2","totalSize","_this$currentFolder","total","classForColumn","_column$summary","created","fileListEl","$resizeObserver","ResizeObserver","entries","target","contentRect","observe","disconnect","mixins","filesListWidthMixin","selectedNodes","areSomeNodesLoading","inlineActions","selectionIds","results","result","failedIds","mapState","sortingMode","_this$getConfig","sorting_mode","defaultSortKey","isAscSorting","_this$getConfig2","toggleSortBy","MenuDown","MenuUp","NcButton","filesSortingMixin","mode","sortAriaLabel","direction","slot","FilesListHeaderButton","FilesListHeaderActions","selectAllBind","isNoneSelected","isSomeSelected","isAllSelected","indeterminate","onToggleAll","RecycleScroller","FileEntry","FilesListHeader","FilesListFooter","summaryFile","count","translatePlural","summaryFolder","slots","querySelectorAll","setAttribute","getFileId","item","caption","_defineProperty","isValidNavigation","isUniqueNavigation","_views","message","legacy","remove","findIndex","splice","views","setActive","_currentView","getContents","icon","isSvg","isValidColumn","emptyView","parent","sticky","expanded","BreadCrumbs","FilesListVirtual","NcAppContent","promise","dirContents","_this$currentFolder2","customColumn","_children","reverse","orderBy","v","isEmptyDir","isRefreshing","toPreviousDir","newView","oldView","fetchContent","newDir","oldDir","_this$$refs","_this$$refs$filesList","$refs","filesListVirtual","scrollTop","_this$currentView3","_this$promise","folder","contents","_vm$currentView2","directives","rawName","expression","ChartPie","NcAppNavigationItem","NcProgressBar","loadingStorageStats","storageStats","storageStatsTitle","_this$storageStats","_this$storageStats2","_this$storageStats3","usedQuotaByte","used","quotaByte","quota","storageStatsTooltip","relative","beforeMount","setInterval","throttleUpdateStorageStats","debounceUpdateStorageStats","updateStorageStats","throttle","_response$data","el","Clipboard","NcAppSettingsDialog","NcAppSettingsSection","NcInputField","Setting","_window$OCA$Files$Set","_getCurrentUser","settings","Settings","webdavUrl","generateRemoteUrl","uid","webdavDocs","appPasswordUrl","webdavUrlCopied","setting","onClose","setConfig","select","navigator","clipboard","writeText","setTimeout","copyCloudId","Cog","NavigationQuota","NcAppNavigation","NcIconSvgWrapper","SettingsModal","Navigation","settingsOpened","currentViewId","_this$$route$params","params","parentViews","childViews","list","showView","onLegacyNavigationChanged","_window$OCA$Files$Sid","_window$OCA$Files$Sid2","newAppContent","classList","add","Util","History","parseUrlQuery","itemId","jQuery","trigger","Event","heading","headingEl","textContent","setPageHeading","$router","onToggleExpand","isExpanded","_this$viewConfigStore","generateToNavigation","openSettings","onSettingsClose","child","registerLegacyView","classes","OCP","Router","base","linkActiveClass","routes","alias","stringifyQuery","queryString","_window$OCP$Files","router","_router","goTo","goToRoute","assign","PiniaVuePlugin","pinia","createPinia","NavigationService","_settings","_name","_el","_open","_close","NavigationView","FilesListView","legacyViews","values","sublist","subview","processLegacyFilesViews","noRewrite","registration","serviceWorker","scope","___CSS_LOADER_EXPORT___","module","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","loaded","__webpack_modules__","m","O","chunkIds","priority","notFulfilled","Infinity","i","fulfilled","j","keys","r","getter","__esModule","d","definition","o","defineProperty","enumerable","g","globalThis","obj","prop","prototype","hasOwnProperty","Symbol","toStringTag","nmd","children","baseURI","self","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","chunkLoadingGlobal","bind","nc","__webpack_exports__"],"sourceRoot":""}
\ No newline at end of file
index 26edf585869da3dbf9964f17fefefbdc4a46f755..8a396be30e2fb44dad0713e39c8885d9b5944635 100644 (file)
@@ -37,6 +37,10 @@ final class TemplateFileCreator implements \JsonSerializable {
        protected $iconClass;
        protected $ratio = null;
        protected $order = 100;
+       /**
+        * @since 27.0.0
+        */
+       protected string $actionLabel;
 
        /**
         * @since 21.0.0
@@ -103,6 +107,21 @@ final class TemplateFileCreator implements \JsonSerializable {
                return $this->order;
        }
 
+       /**
+        * @since 27.0.0
+        */
+       public function setActionLabel(string $actionLabel): TemplateFileCreator {
+               $this->actionLabel = $actionLabel;
+               return $this;
+       }
+
+       /**
+        * @since 27.0.0
+        */
+       public function getActionLabel(): string {
+               return $this->actionLabel;
+       }
+
        /**
         * @since 21.0.0
         */
@@ -113,7 +132,8 @@ final class TemplateFileCreator implements \JsonSerializable {
                        'extension' => $this->fileExtension,
                        'iconClass' => $this->iconClass,
                        'mimetypes' => $this->mimetypes,
-                       'ratio' => $this->ratio
+                       'ratio' => $this->ratio,
+                       'actionLabel' => $this->actionLabel,
                ];
        }
 }