diff options
author | John Molakvoæ <skjnldsv@protonmail.com> | 2023-04-05 17:34:47 +0200 |
---|---|---|
committer | John Molakvoæ <skjnldsv@protonmail.com> | 2023-04-06 15:43:30 +0200 |
commit | ea3e77d6b91e86fd14e40dc1b68ed8a887c93c2c (patch) | |
tree | 2b418b35a476880996bc7dd9212ffacab184f6c8 | |
parent | 8298bb44fdb14024d8e7c0d651a4b219b8975f0e (diff) | |
download | nextcloud-server-ea3e77d6b91e86fd14e40dc1b68ed8a887c93c2c.tar.gz nextcloud-server-ea3e77d6b91e86fd14e40dc1b68ed8a887c93c2c.zip |
fix(files): better wording and catch single action run
Signed-off-by: John Molakvoæ <skjnldsv@protonmail.com>
-rw-r--r-- | apps/files/src/components/FileEntry.vue | 11 | ||||
-rw-r--r-- | apps/files/src/components/FilesListHeaderActions.vue | 4 | ||||
-rw-r--r-- | dist/files-main.js | 4 | ||||
-rw-r--r-- | dist/files-main.js.map | 2 | ||||
-rw-r--r-- | dist/files_trashbin-main.js | 4 | ||||
-rw-r--r-- | dist/files_trashbin-main.js.map | 2 | ||||
-rw-r--r-- | dist/settings-vue-settings-personal-security.js | 4 | ||||
-rw-r--r-- | dist/settings-vue-settings-personal-security.js.map | 2 |
8 files changed, 19 insertions, 14 deletions
diff --git a/apps/files/src/components/FileEntry.vue b/apps/files/src/components/FileEntry.vue index 260294e1a36..130cd12367e 100644 --- a/apps/files/src/components/FileEntry.vue +++ b/apps/files/src/components/FileEntry.vue @@ -103,7 +103,7 @@ import { debounce } from 'debounce' import { formatFileSize } from '@nextcloud/files' import { Fragment } from 'vue-fragment' import { join } from 'path' -import { showError } from '@nextcloud/dialogs' +import { showError, showSuccess } from '@nextcloud/dialogs' import { translate } from '@nextcloud/l10n' import CancelablePromise from 'cancelable-promise' import FileIcon from 'vue-material-design-icons/File.vue' @@ -434,10 +434,15 @@ export default Vue.extend({ const displayName = action.displayName([this.source], this.currentView) try { this.loading = action.id - await action.exec(this.source, this.currentView) + const success = await action.exec(this.source, this.currentView) + if (success) { + showSuccess(this.t('files', '"{displayName}" action executed successfully', { displayName })) + return + } + showError(this.t('files', '"{displayName}" action failed', { displayName })) } catch (e) { logger.error('Error while executing action', { action, e }) - showError(this.t('files', 'Error while executing action "{displayName}"', { displayName })) + showError(this.t('files', '"{displayName}" action failed', { displayName })) } finally { this.loading = '' } diff --git a/apps/files/src/components/FilesListHeaderActions.vue b/apps/files/src/components/FilesListHeaderActions.vue index 5cf0fdbe373..b7d48f1de25 100644 --- a/apps/files/src/components/FilesListHeaderActions.vue +++ b/apps/files/src/components/FilesListHeaderActions.vue @@ -136,11 +136,11 @@ export default Vue.extend({ } // Show success message and clear selection - showSuccess(this.t('files', '"{displayName}" batch action successfully executed', { displayName })) + showSuccess(this.t('files', '"{displayName}" batch action executed successfully', { displayName })) this.selectionStore.reset() } catch (e) { logger.error('Error while executing action', { action, e }) - showError(this.t('files', 'Error while executing action "{displayName}"', { displayName })) + showError(this.t('files', '"{displayName}" action failed', { displayName })) } finally { this.loading = null } diff --git a/dist/files-main.js b/dist/files-main.js index 93bc39f9080..0e77e6daa24 100644 --- a/dist/files-main.js +++ b/dist/files-main.js @@ -1,3 +1,3 @@ /*! For license information please see files-main.js.LICENSE.txt */ -!function(){"use strict";var e,n={71328:function(e,n,i){var r=i(17499),o=i(79954),a=i(31352),s=i(79753),l=i(45994),c=function(){var t,e,n,i,r=(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(r.path,"/").concat(r.name).replace(/\/\//gi,"/")},u=i(4820),d=i(20144),f=i(62520),p=i(64024),A=i(93455),v=i.n(A),h=i(70110),m=i.n(h);function g(t,e,n,i,r,o,a){try{var s=t[o](a),l=s.value}catch(t){return void n(t)}s.done?e(l):Promise.resolve(l).then(i,r)}function b(t){return function(){var e=this,n=arguments;return new Promise((function(i,r){var o=t.apply(e,n);function a(t){g(o,i,r,a,s,"next",t)}function s(t){g(o,i,r,a,s,"throw",t)}a(void 0)}))}}var w=function(){var t=b(regeneratorRuntime.mark((function t(){var e;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,u.default.get((0,s.generateOcsUrl)("apps/files/api/v1/templates"));case 2:return e=t.sent,t.abrupt("return",e.data.ocs.data);case 4:case"end":return t.stop()}}),t)})));return function(){return t.apply(this,arguments)}}(),y=function(){var t=b(regeneratorRuntime.mark((function t(e,n,i){var r;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,u.default.post((0,s.generateOcsUrl)("apps/files/api/v1/templates/create"),{filePath:e,templatePath:n,templateType:i});case 2:return r=t.sent,t.abrupt("return",r.data.ocs.data);case 4:case"end":return t.stop()}}),t)})));return function(e,n,i){return t.apply(this,arguments)}}(),C=256,_={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:function(){return{failedPreview:!1}},computed:{nameWithoutExt:function(){return this.basename.indexOf(".")>-1?this.basename.split(".").slice(0,-1).join("."):this.basename},id:function(){return"template-picker-".concat(this.fileid)},realPreviewUrl:function(){return this.failedPreview&&this.mimeIcon?this.mimeIcon:this.previewUrl?this.previewUrl:(0,l.ts)()?(0,s.generateUrl)("/core/preview?fileId=".concat(this.fileid,"&x=").concat(C,"&y=").concat(C,"&a=1")):(0,s.generateUrl)("/apps/files_sharing/publicpreview/".concat(document.getElementById("sharingToken")&&document.getElementById("sharingToken").value,"?fileId=").concat(this.fileid,"&file=").concat(function(t){var e=(t.startsWith("/")?t:"/".concat(t)).split("/"),n="";return e.forEach((function(t){""!==t&&(n+="/"+encodeURIComponent(t))})),n}(this.filename),"&x=").concat(C,"&y=").concat(C,"&a=1"))},mimeIcon:function(){return OC.MimeType.getIconUrl(this.mime)}},methods:{onCheck:function(){this.$emit("check",this.fileid)},onFailure:function(){this.failedPreview=!0}}},x=_,k=i(93379),S=i.n(k),P=i(7795),E=i.n(P),O=i(90569),N=i.n(O),j=i(3565),B=i.n(j),I=i(19216),F=i.n(I),T=i(44589),z=i.n(T),U=i(3491),D={};D.styleTagTransform=z(),D.setAttributes=B(),D.insert=N().bind(null,"head"),D.domAPI=E(),D.insertStyleElement=F(),S()(U.Z,D),U.Z&&U.Z.locals&&U.Z.locals;var R=i(51900),L=(0,R.Z)(x,(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,V=i(25108);function Z(t,e,n,i,r,o,a){try{var s=t[o](a),l=s.value}catch(t){return void n(t)}s.done?e(l):Promise.resolve(l).then(i,r)}function q(t){return function(){var e=this,n=arguments;return new Promise((function(i,r){var o=t.apply(e,n);function a(t){Z(o,i,r,a,s,"next",t)}function s(t){Z(o,i,r,a,s,"throw",t)}a(void 0)}))}}var G={name:"TemplatePicker",components:{NcEmptyContent:v(),NcModal:m(),TemplatePreview:L},props:{logger:{type:Object,required:!0}},data:function(){return{checked:-1,loading:!1,name:null,opened:!1,provider:null}},computed:{nameWithoutExt:function(){return this.name.indexOf(".")>-1?this.name.split(".").slice(0,-1).join("."):this.name},emptyTemplate:function(){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:function(){var t=this;return this.provider.templates.find((function(e){return e.fileid===t.checked}))},style:function(){return{"--margin":"8px","--width":"160px","--border":"2px","--fullwidth":"180px","--height":this.provider.ratio?Math.round(160/this.provider.ratio)+"px":null}}},methods:{open:function(t,e){var n=this;return q(regeneratorRuntime.mark((function i(){var r,o;return regeneratorRuntime.wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return n.checked=n.emptyTemplate.fileid,n.name=t,n.provider=e,i.next=5,w();case 5:if(r=i.sent,null!==(o=r.find((function(t){return t.app===e.app&&t.label===e.label})))){i.next=9;break}throw new Error("Failed to match provider in results");case 9:if(n.provider=o,0!==o.templates.length){i.next=13;break}return n.onSubmit(),i.abrupt("return");case 13:n.opened=!0;case 14:case"end":return i.stop()}}),i)})))()},close:function(){this.checked=this.emptyTemplate.fileid,this.loading=!1,this.name=null,this.opened=!1,this.provider=null},onCheck:function(t){this.checked=t},onSubmit:function(){var t=this;return q(regeneratorRuntime.mark((function e(){var n,i,r,o,a,s,l,u,d,A,v,h,m;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t.loading=!0,o=c(),a=null===(n=OCA)||void 0===n||null===(i=n.Files)||void 0===i||null===(r=i.App)||void 0===r?void 0:r.currentFileList,t.nameWithoutExt===t.name&&(t.logger.debug("Fixed invalid filename",{name:t.name,extension:null===(s=t.provider)||void 0===s?void 0:s.extension}),t.name=t.name+(null===(l=t.provider)||void 0===l?void 0:l.extension)),e.prev=4,e.next=7,y((0,f.normalize)("".concat(o,"/").concat(t.name)),null===(u=t.selectedTemplate)||void 0===u?void 0:u.filename,null===(d=t.selectedTemplate)||void 0===d?void 0:d.templateType);case 7:return A=e.sent,t.logger.debug("Created new file",A),e.next=11,null==a?void 0:a.addAndFetchFileInfo(t.name).then((function(t,e){return e}));case 11:v=e.sent,h=new OCA.Files.FileInfoModel(v,{filesClient:null==a?void 0:a.filesClient}),(m=OCA.Files.fileActions.getDefaultFileAction(A.mime,"file",OC.PERMISSION_ALL))&&m.action(A.basename,{$file:null==a?void 0:a.findFileEl(t.name),dir:o,fileList:a,fileActions:null==a?void 0:a.fileActions,fileInfoModel:h}),t.close(),e.next=23;break;case 18:e.prev=18,e.t0=e.catch(4),t.logger.error("Error while creating the new file from template"),V.error(e.t0),(0,p.x2)(t.t("files","Unable to create new file from template"));case 23:return e.prev=23,t.loading=!1,e.finish(23);case 26:case"end":return e.stop()}}),e,null,[[4,18,23,26]])})))()}}},M=G,$=i(5103),W={};W.styleTagTransform=z(),W.setAttributes=B(),W.insert=N().bind(null,"head"),W.domAPI=E(),W.insertStyleElement=F(),S()($.Z,W),$.Z&&$.Z.locals&&$.Z.locals;var H=(0,R.Z)(M,(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),Y=H.exports;function K(t,e,n,i,r,o,a){try{var s=t[o](a),l=s.value}catch(t){return void n(t)}s.done?e(l):Promise.resolve(l).then(i,r)}var Q=(0,r.IY)().setApp("files").detectUser().build();d.default.mixin({methods:{t:a.Iu,n:a.uN}});var J=document.createElement("div");J.id="template-picker",document.body.appendChild(J);var X=(0,o.j)("files","templates",[]),tt=(0,o.j)("files","templates_path",!1);Q.debug("Templates providers",X),Q.debug("Templates folder",{templatesPath:tt});var et=new(d.default.extend(Y))({name:"TemplatePicker",propsData:{logger:Q}});et.$mount("#template-picker"),window.addEventListener("DOMContentLoaded",(function(){if(!tt){Q.debug("Templates folder not initialized");var t={attach:function(t){t.addMenuEntry({id:"template-init",displayName:(0,a.Iu)("files","Set up templates folder"),templateName:(0,a.Iu)("files","Templates"),iconClass:"icon-template-add",fileType:"file",actionHandler:function(e){it(e),t.removeMenuEntry("template-init")}})}};OC.Plugins.register("OCA.Files.NewFileMenu",t)}})),X.forEach((function(t,e){var n={attach:function(n){var 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:function(e){et.open(e,t)}})}};OC.Plugins.register("OCA.Files.NewFileMenu",n)}));var nt,it=function(){var t,e=(t=regeneratorRuntime.mark((function t(e){var n,i;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return n=(c()+"/".concat(e)).replace("//","/"),t.prev=1,Q.debug("Initializing the templates directory",{templatePath:n}),t.next=5,u.default.post((0,s.generateOcsUrl)("apps/files/api/v1/templates/path"),{templatePath:n,copySystemTemplates:!0});case 5:i=t.sent,OCA.Files.App.currentFileList.changeDirectory(n,!0,!0),X=i.data.ocs.data.templates,tt=i.data.ocs.data.template_path,t.next=15;break;case 11:t.prev=11,t.t0=t.catch(1),Q.error("Unable to initialize the templates directory"),(0,p.x2)((0,a.Iu)("files","Unable to initialize the templates directory"));case 15:case"end":return t.stop()}}),t,null,[[1,11]])})),function(){var e=this,n=arguments;return new Promise((function(i,r){var o=t.apply(e,n);function a(t){K(o,i,r,a,s,"next",t)}function s(t){K(o,i,r,a,s,"throw",t)}a(void 0)}))});return function(t){return e.apply(this,arguments)}}(),rt=i(78595);nt={attach:function(t){var e=this;(0,rt.Ld)("nextcloud:unified-search.search",(function(e){var n=e.query;t.setFilter(n)})),(0,rt.Ld)("nextcloud:unified-search.reset",(function(){e.query=null,t.setFilter("")}))}},window.OC.Plugins.register("OCA.Files.FileList",nt);var ot=i(91770),at=i(78510),st=(0,r.IY)().setApp("files").detectUser().build();function lt(t){return lt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},lt(t)}function ct(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,ut(i.key),i)}}function ut(t){var e=function(t,e){if("object"!==lt(t)||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,e);if("object"!==lt(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t,"string");return"symbol"===lt(e)?e:String(e)}var dt,ft=function(){function t(e){var n,i,r;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),n=this,r=void 0,(i=ut(i="_action"))in n?Object.defineProperty(n,i,{value:r,enumerable:!0,configurable:!0,writable:!0}):n[i]=r,this.validateAction(e),this._action=e}var e,n;return e=t,(n=[{key:"id",get:function(){return this._action.id}},{key:"displayName",get:function(){return this._action.displayName}},{key:"iconSvgInline",get:function(){return this._action.iconSvgInline}},{key:"enabled",get:function(){return this._action.enabled}},{key:"exec",get:function(){return this._action.exec}},{key:"execBatch",get:function(){return this._action.execBatch}},{key:"order",get:function(){return this._action.order}},{key:"default",get:function(){return this._action.default}},{key:"inline",get:function(){return this._action.inline}},{key:"renderInline",get:function(){return this._action.renderInline}},{key:"validateAction",value:function(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")}}])&&ct(e.prototype,n),Object.defineProperty(e,"prototype",{writable:!1}),t}(),pt=function(){return window._nc_fileactions||[]};function At(t,e,n,i,r,o,a){try{var s=t[o](a),l=s.value}catch(t){return void n(t)}s.done?e(l):Promise.resolve(l).then(i,r)}function vt(t){return function(){var e=this,n=arguments;return new Promise((function(i,r){var o=t.apply(e,n);function a(t){At(o,i,r,a,s,"next",t)}function s(t){At(o,i,r,a,s,"throw",t)}a(void 0)}))}}function ht(t){return ht="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},ht(t)}function mt(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,i)}return n}function gt(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?mt(Object(n),!0).forEach((function(e){bt(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):mt(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}function bt(t,e,n){return(e=function(t){var e=function(t,e){if("object"!==ht(t)||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,e);if("object"!==ht(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t,"string");return"symbol"===ht(e)?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}dt=new ft({id:"delete",displayName:function(t,e){return"trashbin"===e.id?(0,a.Iu)("files_trashbin","Delete permanently"):(0,a.Iu)("files","Delete")},iconSvgInline:function(){return at},enabled:function(t){return t.length>0&&t.map((function(t){return t.permissions})).every((function(t){return 0!=(t&ot.y3.DELETE)}))},exec:function(t){return vt(regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,u.default.delete(t.source);case 3:return(0,rt.j8)("files:file:deleted",t),e.abrupt("return",!0);case 7:return e.prev=7,e.t0=e.catch(0),st.error("Error while deleting a file",{error:e.t0,source:t.source,node:t}),e.abrupt("return",!1);case 11:case"end":return e.stop()}}),e,null,[[0,7]])})))()},execBatch:function(t,e){var n=this;return vt(regeneratorRuntime.mark((function i(){return regeneratorRuntime.wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return i.abrupt("return",Promise.all(t.map((function(t){return n.exec(t,e)}))));case 1:case"end":return i.stop()}}),i)})))()},order:100}),void 0===window._nc_fileactions&&(window._nc_fileactions=[],st.debug("FileActions initialized")),window._nc_fileactions.find((function(t){return t.id===dt.id}))?st.error("FileAction ".concat(dt.id," already registered"),{action:dt}):window._nc_fileactions.push(dt);var wt=function(t){var e=t.id,n=t.name,i=t.order,r=t.icon,o=t.parent,a=t.classes,s=void 0===a?"":a,l=t.expanded,c=t.params;OCP.Files.Navigation.register({id:e,name:n,order:i,params:c,parent:o,expanded:!0===l,iconClass:r?"icon-".concat(r):"nav-icon-"+e,legacy:!0,sticky:s.includes("pinned")})},yt=i(59305),Ct=i(41487),_t=i.n(Ct);function xt(t){return xt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},xt(t)}function kt(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,Pt(i.key),i)}}function St(t,e,n){return(e=Pt(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function Pt(t){var e=function(t,e){if("object"!==xt(t)||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,e);if("object"!==xt(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t,"string");return"symbol"===xt(e)?e:String(e)}var Et=function(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),St(this,"_views",[]),St(this,"_currentView",null),st.debug("Navigation service initialized")}var e,n;return e=t,(n=[{key:"register",value:function(t){try{Nt(t),Ot(t,this._views)}catch(e){throw e instanceof Error&&st.error(e.message,{view:t}),e}t.legacy&&st.warn("Legacy view detected, please migrate to Vue"),t.iconClass&&(t.legacy=!0),this._views.push(t)}},{key:"views",get:function(){return this._views}},{key:"setActive",value:function(t){this._currentView=t}},{key:"active",get:function(){return this._currentView}}])&&kt(e.prototype,n),Object.defineProperty(e,"prototype",{writable:!1}),t}(),Ot=function(t,e){if(e.find((function(e){return e.id===t.id})))throw new Error("Navigation id ".concat(t.id," is already registered"));return!0},Nt=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||!_t()(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(jt),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},jt=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};function Bt(t,e,n,i,r,o,a){try{var s=t[o](a),l=s.value}catch(t){return void n(t)}s.done?e(l):Promise.resolve(l).then(i,r)}function It(t){return function(){var e=this,n=arguments;return new Promise((function(i,r){var o=t.apply(e,n);function a(t){Bt(o,i,r,a,s,"next",t)}function s(t){Bt(o,i,r,a,s,"throw",t)}a(void 0)}))}}var Ft=i(57638),Tt=i(55209),zt=i.n(Tt),Ut=i(14032),Dt=i.n(Ut),Rt=i(91211),Lt=i.n(Rt),Vt=i(28615),Zt=i(74184),qt=i(48959),Gt=i.n(qt);function Mt(t,e,n,i,r,o,a){try{var s=t[o](a),l=s.value}catch(t){return void n(t)}s.done?e(l):Promise.resolve(l).then(i,r)}function $t(t){return function(){var e=this,n=arguments;return new Promise((function(i,r){var o=t.apply(e,n);function a(t){Mt(o,i,r,a,s,"next",t)}function s(t){Mt(o,i,r,a,s,"throw",t)}a(void 0)}))}}var Wt={name:"NavigationQuota",components:{ChartPie:Zt.Z,NcAppNavigationItem:Dt(),NcProgressBar:Gt()},data:function(){return{loadingStorageStats:!1,storageStats:(0,o.j)("files","storageStats",null)}},computed:{storageStatsTitle:function(){var t,e,n,i=(0,ot.sS)(null===(t=this.storageStats)||void 0===t?void 0:t.used),r=(0,ot.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:r})},storageStatsTooltip:function(){return this.storageStats.relative?this.t("files","{relative}% used",this.storageStats):""}},beforeMount:function(){setInterval(this.throttleUpdateStorageStats,6e4),(0,rt.Ld)("files:file:created",this.throttleUpdateStorageStats),(0,rt.Ld)("files:file:deleted",this.throttleUpdateStorageStats),(0,rt.Ld)("files:file:moved",this.throttleUpdateStorageStats),(0,rt.Ld)("files:file:updated",this.throttleUpdateStorageStats),(0,rt.Ld)("files:folder:created",this.throttleUpdateStorageStats),(0,rt.Ld)("files:folder:deleted",this.throttleUpdateStorageStats),(0,rt.Ld)("files:folder:moved",this.throttleUpdateStorageStats),(0,rt.Ld)("files:folder:updated",this.throttleUpdateStorageStats)},methods:{debounceUpdateStorageStats:(0,Vt.D)(200,(function(t){this.updateStorageStats(t)})),throttleUpdateStorageStats:(0,Vt.P)(1e3,(function(t){this.updateStorageStats(t)})),updateStorageStats:function(){var e=arguments,n=this;return $t(regeneratorRuntime.mark((function i(){var r,o,a;return regeneratorRuntime.wrap((function(i){for(;;)switch(i.prev=i.next){case 0:if(r=e.length>0&&void 0!==e[0]?e[0]:null,!n.loadingStorageStats){i.next=3;break}return i.abrupt("return");case 3:return n.loadingStorageStats=!0,i.prev=4,i.next=7,u.default.get((0,s.generateUrl)("/apps/files/api/v1/stats"));case 7:if(null!=(a=i.sent)&&null!==(o=a.data)&&void 0!==o&&o.data){i.next=10;break}throw new Error("Invalid storage stats");case 10:n.storageStats=a.data.data,i.next=17;break;case 13:i.prev=13,i.t0=i.catch(4),st.error("Could not refresh storage stats",{error:i.t0}),r&&(0,p.x2)(t("files","Could not refresh storage stats"));case 17:return i.prev=17,n.loadingStorageStats=!1,i.finish(17);case 20:case"end":return i.stop()}}),i,null,[[4,13,17,20]])})))()},t:a.Iu}},Ht=Wt,Yt=i(358),Kt={};Kt.styleTagTransform=z(),Kt.setAttributes=B(),Kt.insert=N().bind(null,"head"),Kt.domAPI=E(),Kt.insertStyleElement=F(),S()(Yt.Z,Kt),Yt.Z&&Yt.Z.locals&&Yt.Z.locals;var Qt=(0,R.Z)(Ht,(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,"26c061ec",null),Jt=Qt.exports,Xt=i(68988),te=i.n(Xt),ee=i(16809),ne=i.n(ee),ie=i(20571),re=i.n(ie),oe=i(70386),ae=i(36029),se=i.n(ae),le={name:"Setting",props:{el:{type:Function,required:!0}},mounted:function(){this.$el.appendChild(this.el())}},ce=(0,R.Z)(le,(function(){return(0,this._self._c)("div")}),[],!1,null,null,null).exports;function ue(t,e,n,i,r,o,a){try{var s=t[o](a),l=s.value}catch(t){return void n(t)}s.done?e(l):Promise.resolve(l).then(i,r)}var de=(0,o.j)("files","config",{show_hidden:!1,crop_image_previews:!0}),fe=function(){var t=(0,yt.Q_)("userconfig",{state:function(){return{userConfig:de}},actions:{onUpdate:function(t,e){d.default.set(this.userConfig,t,e)},update:function(t,e){return(n=regeneratorRuntime.mark((function n(){return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,u.default.post((0,s.generateUrl)("/apps/files/api/v1/config/"+t),{value:e});case 2:(0,rt.j8)("files:config:updated",{key:t,value:e});case 3:case"end":return n.stop()}}),n)})),function(){var t=this,e=arguments;return new Promise((function(i,r){var o=n.apply(t,e);function a(t){ue(o,i,r,a,s,"next",t)}function s(t){ue(o,i,r,a,s,"throw",t)}a(void 0)}))})();var n}}}),e=t();return e.initialized||((0,rt.Ld)("files:config:updated",(function(t){var n=t.key,i=t.value;e.onUpdate(n,i)})),e.initialized=!0),e};function pe(t,e,n,i,r,o,a){try{var s=t[o](a),l=s.value}catch(t){return void n(t)}s.done?e(l):Promise.resolve(l).then(i,r)}var Ae={name:"Settings",components:{Clipboard:oe.Z,NcAppSettingsDialog:te(),NcAppSettingsSection:ne(),NcCheckboxRadioSwitch:re(),NcInputField:se(),Setting:ce},props:{open:{type:Boolean,default:!1}},setup:function(){return{userConfigStore:fe()}},data:function(){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,s.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,s.generateUrl)("/settings/user/security#generate-app-token-section"),webdavUrlCopied:!1}},computed:{userConfig:function(){return this.userConfigStore.userConfig}},beforeMount:function(){this.settings.forEach((function(t){return t.open()}))},beforeDestroy:function(){this.settings.forEach((function(t){return t.close()}))},methods:{onClose:function(){this.$emit("close")},setConfig:function(t,e){this.userConfigStore.update(t,e)},copyCloudId:function(){var e,n=this;return(e=regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(document.querySelector("input#webdav-url-input").select(),navigator.clipboard){e.next=4;break}return(0,p.x2)(t("files","Clipboard is not available")),e.abrupt("return");case 4:return e.next=6,navigator.clipboard.writeText(n.webdavUrl);case 6:n.webdavUrlCopied=!0,(0,p.s$)(t("files","WebDAV URL copied to clipboard")),setTimeout((function(){n.webdavUrlCopied=!1}),5e3);case 9:case"end":return e.stop()}}),e)})),function(){var t=this,n=arguments;return new Promise((function(i,r){var o=e.apply(t,n);function a(t){pe(o,i,r,a,s,"next",t)}function s(t){pe(o,i,r,a,s,"throw",t)}a(void 0)}))})()},t:a.Iu}},ve=Ae,he=i(40127),me={};me.styleTagTransform=z(),me.setAttributes=B(),me.insert=N().bind(null,"head"),me.domAPI=E(),me.insertStyleElement=F(),S()(he.Z,me),he.Z&&he.Z.locals&&he.Z.locals;var ge=(0,R.Z)(ve,(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,"b5e4b862",null).exports;function be(t){return be="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},be(t)}function we(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,i)}return n}function ye(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?we(Object(n),!0).forEach((function(e){Ce(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):we(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}function Ce(t,e,n){return(e=function(t){var e=function(t,e){if("object"!==be(t)||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,e);if("object"!==be(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t,"string");return"symbol"===be(e)?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function _e(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,i=new Array(e);n<e;n++)i[n]=t[n];return i}var xe={name:"Navigation",components:{Cog:Ft.default,NavigationQuota:Jt,NcAppNavigation:zt(),NcAppNavigationItem:Dt(),NcIconSvgWrapper:Lt(),SettingsModal:ge},props:{Navigation:{type:Et,required:!0}},data:function(){return{settingsOpened:!1}},computed:{currentViewId:function(){var t,e;return(null===(t=this.$route)||void 0===t||null===(e=t.params)||void 0===e?void 0:e.view)||"files"},currentView:function(){var t=this;return this.views.find((function(e){return e.id===t.currentViewId}))},views:function(){return this.Navigation.views},parentViews:function(){return this.views.filter((function(t){return!t.parent})).sort((function(t,e){return t.order-e.order}))},childViews:function(){return this.views.filter((function(t){return!!t.parent})).reduce((function(t,e){return t[e.parent]=[].concat(function(t){if(Array.isArray(t))return _e(t)}(n=t[e.parent]||[])||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(n)||function(t,e){if(t){if("string"==typeof t)return _e(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?_e(t,e):void 0}}(n)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(),[e]),t[e.parent].sort((function(t,e){return t.order-e.order})),t;var n}),{})}},watch:{currentView:function(t,e){(null==t?void 0:t.id)!==(null==e?void 0:e.id)&&(this.Navigation.setActive(t),st.debug("Navigation changed",{id:t.id,view:t}),this.showView(t,e))}},beforeMount:function(){var t=this;this.currentView&&(st.debug("Navigation mounted. Showing requested view",{view:this.currentView}),this.showView(this.currentView)),(0,rt.Ld)("files:legacy-navigation:changed",this.onLegacyNavigationChanged),(0,rt.Ld)("files:legacy-view:initialized",(function(){st.debug("Legacy view initialized",ye({},t.currentView)),t.showView(t.currentView)}))},methods:{showView:function(t,e){var n,i,r,o,a,s,l;if(null===(n=window)||void 0===n||null===(i=n.OCA)||void 0===i||null===(r=i.Files)||void 0===r||null===(o=r.Sidebar)||void 0===o||null===(a=o.close)||void 0===a||a.call(o),null!=t&&t.legacy){var c=document.querySelector("#app-content #app-content-"+this.currentView.id+".viewcontainer");document.querySelectorAll("#app-content .viewcontainer").forEach((function(t){t.classList.add("hidden")})),c.classList.remove("hidden");var u=OC.Util.History.parseUrlQuery().dir,d=void 0===u?"/":u,f={itemId:t.id,dir:d};st.debug("Triggering legacy navigation event",f),window.jQuery(c).trigger(new window.jQuery.Event("show",f)),window.jQuery(c).trigger(new window.jQuery.Event("urlChanged",f))}this.Navigation.setActive(t),s=t.name,(l=document.getElementById("page-heading-level-1"))&&(l.textContent=s),(0,rt.j8)("files:navigation:changed",t)},onLegacyNavigationChanged:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{id:"files"},e=t.id,n=this.Navigation.views.find((function(t){return t.id===e}));n&&n.legacy&&n.id!==this.currentView.id&&(this.$router.replace(ye(ye({},this.$route),{},{params:{view:n.id}})),this.Navigation.setActive(n),this.showView(n))},onToggleExpand:function(t){t.expanded=!t.expanded,u.default.post((0,s.generateUrl)("/apps/files/api/v1/toggleShowFolder/".concat(t.id)),{show:t.expanded})},generateToNavigation:function(t){if(t.params){var e=t.params,n=e.dir,i=e.fileid;return{name:"filelist",params:t.params,query:{dir:n,fileid:i}}}return{name:"filelist",params:{view:t.id}}},openSettings:function(){this.settingsOpened=!0},onSettingsClose:function(){this.settingsOpened=!1},t:a.Iu}},ke=xe,Se=i(93578),Pe={};Pe.styleTagTransform=z(),Pe.setAttributes=B(),Pe.insert=N().bind(null,"head"),Pe.domAPI=E(),Pe.insertStyleElement=F(),S()(Se.Z,Pe),Se.Z&&Se.Z.locals&&Se.Z.locals;var Ee=(0,R.Z)(ke,(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:n.expanded,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(i){return e("NcAppNavigationItem",{key:i.id,attrs:{"data-cy-files-navigation-item":i.id,exact:!0,icon:i.iconClass,title:i.name,to:t.generateToNavigation(i)}},[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,"5bdabc28",null),Oe=Ee.exports,Ne=i(23664),je=i(69680),Be=i.n(je),Ie=i(10861),Fe=i.n(Ie),Te=i(64192),ze=i.n(Te),Ue=i(33581);function De(t){return De="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},De(t)}function Re(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,i)}return n}function Le(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?Re(Object(n),!0).forEach((function(e){Ve(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Re(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}function Ve(t,e,n){return(e=function(t){var e=function(t,e){if("object"!==De(t)||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,e);if("object"!==De(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t,"string");return"symbol"===De(e)?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}var Ze=function(){var t=(0,yt.Q_)("files",{state:function(){return{files:{},roots:{}}},getters:{getNode:function(t){return function(e){return t.files[e]}},getNodes:function(t){return function(e){return e.map((function(e){return t.files[e]})).filter(Boolean)}},getRoot:function(t){return function(e){return t.roots[e]}}},actions:{updateNodes:function(t){var e=t.reduce((function(t,e){return e.attributes.fileid?(t[e.attributes.fileid]=e,t):(st.warn("Trying to update/set a node without fileid",e),t)}),{});d.default.set(this,"files",Le(Le({},this.files),e))},deleteNodes:function(t){var e=this;t.forEach((function(t){t.fileid&&d.default.delete(e.files,t.fileid)}))},setRoot:function(t){var e=t.service,n=t.root;d.default.set(this.roots,e,n)},onCreatedNode:function(){},onDeletedNode:function(t){this.deleteNodes([t])},onMovedNode:function(){}}})();return t.initialized||((0,rt.Ld)("files:file:created",t.onCreatedNode),(0,rt.Ld)("files:file:deleted",t.onDeletedNode),(0,rt.Ld)("files:file:moved",t.onMovedNode),(0,rt.Ld)("files:folder:created",t.onCreatedNode),(0,rt.Ld)("files:folder:deleted",t.onDeletedNode),(0,rt.Ld)("files:folder:moved",t.onMovedNode),t.initialized=!0),t},qe=function(){var t=(0,yt.Q_)("paths",{state:function(){return{}},getters:{getPath:function(t){return function(e,n){if(t[e])return t[e][n]}}},actions:{addPath:function(t){this[t.service]||d.default.set(this,t.service,{}),d.default.set(this[t.service],t.path,t.fileid)}}}),e=t();return e.initialized||(e.initialized=!0),e},Ge=(0,yt.Q_)("selection",{state:function(){return{selected:[]}},actions:{set:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];d.default.set(this,"selected",t)},reset:function(){d.default.set(this,"selected",[])}}}),Me=function(t,e,n){return u.default.post((0,s.generateUrl)("/apps/files/api/v1/sorting"),{mode:t,direction:e,view:n})},$e=(0,o.j)("files","filesSortingConfig",{}),We=(0,yt.Q_)("sorting",{state:function(){return{filesSortingConfig:$e}},getters:{isAscSorting:function(t){return function(){var e,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"files";return"desc"!==(null===(e=t.filesSortingConfig[n])||void 0===e?void 0:e.direction)}},getSortingMode:function(t){return function(){var e,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"files";return null===(e=t.filesSortingConfig[n])||void 0===e?void 0:e.mode}}},actions:{setSortingBy:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"basename",e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"files",n=this.filesSortingConfig[e]||{};n.mode=t,n.direction="asc",d.default.set(this.filesSortingConfig,e,n),Me(n.mode,n.direction,e)},toggleSortingDirection:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"files",e=this.filesSortingConfig[t]||{direction:"asc"},n="asc"===e.direction?"desc":"asc";e.direction=n,d.default.set(this.filesSortingConfig,t,e),Me(e.mode,e.direction,t)}}}),He=i(15764),Ye=i(64412),Ke=i.n(Ye),Qe=i(44706),Je=i.n(Qe);function Xe(t){return Xe="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Xe(t)}function tn(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,i)}return n}function en(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?tn(Object(n),!0).forEach((function(e){nn(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):tn(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}function nn(t,e,n){return(e=function(t){var e=function(t,e){if("object"!==Xe(t)||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,e);if("object"!==Xe(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t,"string");return"symbol"===Xe(e)?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function rn(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,i=new Array(e);n<e;n++)i[n]=t[n];return i}var on=d.default.extend({name:"BreadCrumbs",components:{Home:He.Z,NcBreadcrumbs:Je(),NcBreadcrumb:Ke()},props:{path:{type:String,default:"/"}},computed:{dirs:function(){var t,e,n=this.path.split("/").filter(Boolean).map((t="/",function(e){return t+="".concat(e,"/")}));return["/"].concat((e=n.map((function(t){return t.replace(/^(.+)\/$/,"$1")})),function(t){if(Array.isArray(t))return rn(t)}(e)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(e)||function(t,e){if(t){if("string"==typeof t)return rn(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?rn(t,e):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()))},sections:function(){var t=this;return this.dirs.map((function(e){var n=en(en({},t.$route),{},{query:{dir:e}});return{dir:e,exact:!0,name:(0,f.basename)(e),to:n}}))}},methods:{onClick:function(t){var e;(null==t||null===(e=t.query)||void 0===e?void 0:e.dir)===this.$route.query.dir&&this.$emit("reload")},ariaLabel:function(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)}}}),an=on,sn=i(94023),ln={};ln.styleTagTransform=z(),ln.setAttributes=B(),ln.insert=N().bind(null,"head"),ln.domAPI=E(),ln.insertStyleElement=F(),S()(sn.Z,ln),sn.Z&&sn.Z.locals&&sn.Z.locals;var cn=(0,R.Z)(an,(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,"260f47ba",null).exports,un=i(35212),dn=i(20296),fn=i(30266),pn=i(3443),An=i.n(pn),vn=i(79855),hn=i(34829),mn=i(45400),gn=i.n(mn),bn=i(12945),wn=i.n(bn),yn=function(t){return caches.open("previews").then((function(e){return e.match(t).then((function(t){return!!t}))}))},Cn={name:"CustomElementRender",props:{source:{type:Object,required:!0},currentView:{type:Object,required:!0},render:{type:Function,required:!0}},computed:{element:function(){return this.render(this.source,this.currentView)}},watch:{element:function(){this.$el.replaceWith(this.element),this.$el=this.element}},mounted:function(){this.$el.replaceWith(this.element),this.$el=this.element}},_n=(0,R.Z)(Cn,(function(){return(0,this._self._c)("span")}),[],!1,null,null,null).exports,xn=i(27856),kn={name:"CustomSvgIconRender",props:{svg:{type:String,required:!0}},watch:{svg:function(){this.$el.innerHTML=(0,xn.sanitize)(this.svg)}},mounted:function(){this.$el.innerHTML=(0,xn.sanitize)(this.svg)}},Sn=i(41929),Pn={};Pn.styleTagTransform=z(),Pn.setAttributes=B(),Pn.insert=N().bind(null,"head"),Pn.domAPI=E(),Pn.insertStyleElement=F(),S()(Sn.Z,Pn),Sn.Z&&Sn.Z.locals&&Sn.Z.locals;var En=(0,R.Z)(kn,(function(){return(0,this._self._c)("span",{staticClass:"custom-svg-icon"})}),[],!1,null,"6646d6a5",null).exports;function On(t){return On="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},On(t)}function Nn(t,e,n,i,r,o,a){try{var s=t[o](a),l=s.value}catch(t){return void n(t)}s.done?e(l):Promise.resolve(l).then(i,r)}function jn(t){return function(){var e=this,n=arguments;return new Promise((function(i,r){var o=t.apply(e,n);function a(t){Nn(o,i,r,a,s,"next",t)}function s(t){Nn(o,i,r,a,s,"throw",t)}a(void 0)}))}}function Bn(t){return function(t){if(Array.isArray(t))return In(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(t){if("string"==typeof t)return In(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?In(t,e):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function In(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,i=new Array(e);n<e;n++)i[n]=t[n];return i}function Fn(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,i)}return n}function Tn(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?Fn(Object(n),!0).forEach((function(e){zn(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Fn(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}function zn(t,e,n){return(e=function(t){var e=function(t,e){if("object"!==On(t)||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,e);if("object"!==On(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t,"string");return"symbol"===On(e)?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}var Un=pt(),Dn=d.default.extend({name:"FileEntry",components:{CustomElementRender:_n,CustomSvgIconRender:En,FileIcon:vn.Z,FolderIcon:hn.default,Fragment:fn.HY,NcActionButton:gn(),NcActions:wn(),NcCheckboxRadioSwitch:re(),NcLoadingIcon:ze()},props:{active:{type:Boolean,default:!1},isSizeAvailable:{type:Boolean,default:!1},source:{type:Object,required:!0},index:{type:Number,required:!0}},setup:function(){return{filesStore:Ze(),selectionStore:Ge(),userConfigStore:fe()}},data:function(){return{backgroundFailed:!1,backgroundImage:"",loading:""}},computed:{userConfig:function(){return this.userConfigStore.userConfig},currentView:function(){return this.$navigation.active},columns:function(){var t;return(null===(t=this.currentView)||void 0===t?void 0:t.columns)||[]},dir:function(){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:function(){return this.source.attributes.fileid},displayName:function(){return this.source.attributes.displayName||this.source.basename},size:function(){var t=parseInt(this.source.size,10)||0;return"number"!=typeof t||t<0?this.t("files","Pending"):(0,ot.sS)(t,!0)},sizeOpacity:function(){var t=parseInt(this.source.size,10)||0;return!t||t<0?1:.7+(1-.7)*Math.pow(this.source.size/10485760,2)},linkTo:function(){if("folder"===this.source.type){var t=Tn(Tn({},this.$route),{},{query:{dir:(0,f.join)(this.dir,this.source.basename)}});return{is:"router-link",title:this.t("files","Open folder {name}",{name:this.displayName}),to:t}}return{href:this.source.source,title:this.t("files","Download file {name}",{name:this.displayName})}},selectedFiles:{get:function(){return this.selectionStore.selected},set:function(t){st.debug("Changed nodes selection",{selection:t}),this.selectionStore.set(t)}},cropPreviews:function(){return this.userConfig.crop_image_previews},previewUrl:function(){try{var 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?"1":"0"),t.href}catch(t){return null}},mimeUrl:function(){var t,e,n,i=this.source.mime||"application/octet-stream",r=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 r?"url(".concat(r,")"):""},enabledActions:function(){var t=this;return Un.filter((function(e){return!e.enabled||e.enabled([t.source],t.currentView)})).sort((function(t,e){return(t.order||0)-(e.order||0)}))},enabledInlineActions:function(){var t=this;return this.enabledActions.filter((function(e){var n;return null==e||null===(n=e.inline)||void 0===n?void 0:n.call(e,t.source,t.currentView)}))},enabledMenuActions:function(){return[].concat(Bn(this.enabledInlineActions),Bn(Un.filter((function(t){return!t.inline}))))},uniqueId:function(){return this.hashCode(this.source.source)}},watch:{active:function(t,e){if(!1===t&&!0===e)return this.resetState(),void(this.$el.parentNode.style.display="none");this.$el.parentNode.style.display=""},previewUrl:function(){this.clearImg(),this.debounceIfNotCached()}},mounted:function(){this.debounceGetPreview=(0,dn.debounce)((function(){this.fetchAndApplyPreview()}),150,!1),this.debounceIfNotCached()},beforeDestroy:function(){this.resetState()},methods:{debounceIfNotCached:function(){var t=this;return jn(regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t.previewUrl){e.next=2;break}return e.abrupt("return");case 2:return e.next=4,yn(t.previewUrl);case 4:if(!e.sent){e.next=9;break}return t.backgroundImage="url(".concat(t.previewUrl,")"),t.backgroundFailed=!1,e.abrupt("return");case 9:t.debounceGetPreview();case 10:case"end":return e.stop()}}),e)})))()},fetchAndApplyPreview:function(){var t=this;if(this.previewUrl){this.previewPromise&&this.clearImg();var e=new AbortController;this.previewPromise=new(An())((function(n,i,r){var o=new Image;o.fetchpriority=t.active?"high":"auto",o.onload=function(){t.backgroundImage="url(".concat(t.previewUrl,")"),t.backgroundFailed=!1,n(o)},o.onerror=function(){t.backgroundFailed=!0,i(o)},o.src=t.previewUrl,r((function(){o.onerror=null,o.onload=null,o.src="",e.abort()}))}))}},resetState:function(){this.loading="",this.clearImg(),this.$refs.actionsMenu.closeMenu()},clearImg:function(){this.backgroundImage="",this.backgroundFailed=!1,this.previewPromise&&(this.previewPromise.cancel(),this.previewPromise=null)},hashCode:function(t){for(var e=0,n=0,i=t.length;n<i;n++)e=(e<<5)-e+t.charCodeAt(n),e|=0;return e},onActionClick:function(t){var e=this;return jn(regeneratorRuntime.mark((function n(){var i;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return i=t.displayName([e.source],e.currentView),n.prev=1,e.loading=t.id,n.next=5,t.exec(e.source,e.currentView);case 5:n.next=11;break;case 7:n.prev=7,n.t0=n.catch(1),st.error("Error while executing action",{action:t,e:n.t0}),(0,p.x2)(e.t("files",'Error while executing action "{displayName}"',{displayName:i}));case 11:return n.prev=11,e.loading="",n.finish(11);case 14:case"end":return n.stop()}}),n,null,[[1,7,11,14]])})))()},t:a.Iu,formatFileSize:ot.sS}}),Rn=Dn,Ln=i(50831),Vn={};Vn.styleTagTransform=z(),Vn.setAttributes=B(),Vn.insert=N().bind(null,"head"),Vn.domAPI=E(),Vn.insertStyleElement=F(),S()(Ln.Z,Vn),Ln.Z&&Ln.Z.locals&&Ln.Z.locals;var Zn=i(2974),qn={};qn.styleTagTransform=z(),qn.setAttributes=B(),qn.insert=N().bind(null,"head"),qn.domAPI=E(),qn.insertStyleElement=F(),S()(Zn.Z,qn),Zn.Z&&Zn.Z.locals&&Zn.Z.locals;var Gn=(0,R.Z)(Rn,(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.toString(),name:"selectedFiles"},on:{"update:checked":function(e){t.selectedFiles=e}}}):t._e()],1),t._v(" "),e("td",{staticClass:"files-list__row-name"},[e("a",t._b({ref:"name"},"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.mimeUrl?e("span",{staticClass:"files-list__row-icon-preview files-list__row-icon-preview--mime",style:{backgroundImage:t.mimeUrl}}):e("FileIcon")],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:{"force-title":!0,inline:t.enabledInlineActions.length}},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}},[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)},[t.active?e("CustomElementRender",{attrs:{"current-view":t.currentView,render:n.render,source:t.source}}):t._e()],1)}))],2)}),[],!1,null,"3600e364",null),Mn=Gn.exports;function $n(t){return $n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},$n(t)}var Wn=d.default.extend({name:"FilesListFooter",components:{},props:{isSizeAvailable:{type:Boolean,default:!1},nodes:{type:Array,required:!0},summary:{type:String,default:""}},setup:function(){var t=qe();return{filesStore:Ze(),pathsStore:t}},computed:{currentView:function(){return this.$navigation.active},dir:function(){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:function(){var t;if(null!==(t=this.currentView)&&void 0!==t&&t.id){if("/"===this.dir)return this.filesStore.getRoot(this.currentView.id);var e=this.pathsStore.getPath(this.currentView.id,this.dir);return this.filesStore.getNode(e)}},columns:function(){var t;return(null===(t=this.currentView)||void 0===t?void 0:t.columns)||[]},totalSize:function(){var t;return null!==(t=this.currentFolder)&&void 0!==t&&t.size?(0,ot.sS)(this.currentFolder.size,!0):(0,ot.sS)(this.nodes.reduce((function(t,e){return t+e.size||0}),0),!0)}},methods:{classForColumn:function(t){return e={"files-list__row-column-custom":!0},n="files-list__row-".concat(this.currentView.id,"-").concat(t.id),i=!0,(n=function(t){var e=function(t,e){if("object"!==$n(t)||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,e);if("object"!==$n(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t,"string");return"symbol"===$n(e)?e:String(e)}(n))in e?Object.defineProperty(e,n,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[n]=i,e;var e,n,i},t:a.Iu}}),Hn=i(78636),Yn={};Yn.styleTagTransform=z(),Yn.setAttributes=B(),Yn.insert=N().bind(null,"head"),Yn.domAPI=E(),Yn.insertStyleElement=F(),S()(Hn.Z,Yn),Hn.Z&&Hn.Z.locals&&Hn.Z.locals;var Kn=(0,R.Z)(Wn,(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,"cc078f7a",null).exports;function Qn(t,e,n,i,r,o,a){try{var s=t[o](a),l=s.value}catch(t){return void n(t)}s.done?e(l):Promise.resolve(l).then(i,r)}var Jn=pt(),Xn=d.default.extend({name:"FilesListHeaderActions",components:{CustomSvgIconRender:En,NcActions:wn(),NcActionButton:gn(),NcLoadingIcon:ze()},props:{currentView:{type:Object,required:!0},selectedNodes:{type:Array,default:function(){return[]}}},setup:function(){return{filesStore:Ze(),selectionStore:Ge()}},data:function(){return{loading:null}},computed:{enabledActions:function(){var t=this;return Jn.filter((function(t){return t.execBatch})).filter((function(e){return!e.enabled||e.enabled(t.nodes,t.currentView)})).sort((function(t,e){return(t.order||0)-(e.order||0)}))},nodes:function(){var t=this;return this.selectedNodes.map((function(e){return t.getNode(e)})).filter((function(t){return t}))}},methods:{getNode:function(t){return this.filesStore.getNode(t)},onActionClick:function(t){var e,n=this;return(e=regeneratorRuntime.mark((function e(){var i,r,o,a;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return i=t.displayName(n.nodes,n.currentView),r=n.selectedNodes,e.prev=2,n.loading=t.id,e.next=6,t.execBatch(n.nodes,n.currentView);case 6:if(!(o=e.sent).some((function(t){return!0!==t}))){e.next=12;break}return a=r.filter((function(t,e){return!0!==o[e]})),n.selectionStore.set(a),(0,p.x2)(n.t("files",'"{displayName}" failed on some elements ',{displayName:i})),e.abrupt("return");case 12:(0,p.s$)(n.t("files",'"{displayName}" batch action successfully executed',{displayName:i})),n.selectionStore.reset(),e.next=20;break;case 16:e.prev=16,e.t0=e.catch(2),st.error("Error while executing action",{action:t,e:e.t0}),(0,p.x2)(n.t("files",'Error while executing action "{displayName}"',{displayName:i}));case 20:return e.prev=20,n.loading=null,e.finish(20);case 23:case"end":return e.stop()}}),e,null,[[2,16,20,23]])})),function(){var t=this,n=arguments;return new Promise((function(i,r){var o=e.apply(t,n);function a(t){Qn(o,i,r,a,s,"next",t)}function s(t){Qn(o,i,r,a,s,"throw",t)}a(void 0)}))})()},t:a.Iu}}),ti=Xn,ei=i(47480),ni={};ni.styleTagTransform=z(),ni.setAttributes=B(),ni.insert=N().bind(null,"head"),ni.domAPI=E(),ni.insertStyleElement=F(),S()(ei.Z,ni),ei.Z&&ei.Z.locals&&ei.Z.locals;var ii=(0,R.Z)(ti,(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,"force-title":!0,inline:3}},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,"63bb14b6",null),ri=ii.exports,oi=i(20404),ai=i(23873);function si(t){return si="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},si(t)}function li(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,i)}return n}function ci(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?li(Object(n),!0).forEach((function(e){ui(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):li(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}function ui(t,e,n){return(e=function(t){var e=function(t,e){if("object"!==si(t)||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,e);if("object"!==si(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t,"string");return"symbol"===si(e)?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}var di=d.default.extend({name:"FilesListHeaderButton",components:{MenuDown:oi.Z,MenuUp:ai.Z,NcButton:Fe()},inject:["toggleSortBy"],props:{name:{type:String,required:!0},mode:{type:String,required:!0}},setup:function(){return{sortingStore:We()}},computed:ci(ci({},(0,yt.rn)(We,["filesSortingConfig"])),{},{currentView:function(){return this.$navigation.active},sortingMode:function(){return this.sortingStore.getSortingMode(this.currentView.id)||this.currentView.defaultSortKey||"basename"},isAscSorting:function(){return!0===this.sortingStore.isAscSorting(this.currentView.id)}}),methods:{sortAriaLabel:function(t){var 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:a.Iu}}),fi=i(6905),pi={};pi.styleTagTransform=z(),pi.setAttributes=B(),pi.insert=N().bind(null,"head"),pi.domAPI=E(),pi.insertStyleElement=F(),S()(fi.Z,pi),fi.Z&&fi.Z.locals&&fi.Z.locals;var Ai=(0,R.Z)(di,(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;function vi(t){return vi="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},vi(t)}function hi(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,i)}return n}function mi(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?hi(Object(n),!0).forEach((function(e){gi(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):hi(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}function gi(t,e,n){return(e=function(t){var e=function(t,e){if("object"!==vi(t)||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,e);if("object"!==vi(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t,"string");return"symbol"===vi(e)?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}var bi=d.default.extend({name:"FilesListHeader",components:{FilesListHeaderButton:Ai,NcCheckboxRadioSwitch:re(),FilesListHeaderActions:ri},provide:function(){return{toggleSortBy:this.toggleSortBy}},props:{isSizeAvailable:{type:Boolean,default:!1},nodes:{type:Array,required:!0}},setup:function(){return{filesStore:Ze(),selectionStore:Ge(),sortingStore:We()}},computed:mi(mi({},(0,yt.rn)(We,["filesSortingConfig"])),{},{currentView:function(){return this.$navigation.active},columns:function(){var t;return(null===(t=this.currentView)||void 0===t?void 0:t.columns)||[]},dir:function(){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:function(){var 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:function(){return this.selectionStore.selected},isAllSelected:function(){return this.selectedNodes.length===this.nodes.length},isNoneSelected:function(){return 0===this.selectedNodes.length},isSomeSelected:function(){return!this.isAllSelected&&!this.isNoneSelected},sortingMode:function(){return this.sortingStore.getSortingMode(this.currentView.id)||this.currentView.defaultSortKey||"basename"},isAscSorting:function(){return!0===this.sortingStore.isAscSorting(this.currentView.id)}}),methods:{classForColumn:function(t){return gi({"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:function(t){if(t){var e=this.nodes.map((function(t){return t.attributes.fileid.toString()}));st.debug("Added all nodes to selection",{selection:e}),this.selectionStore.set(e)}else st.debug("Cleared selection"),this.selectionStore.reset()},toggleSortBy:function(t){this.sortingMode!==t?this.sortingStore.setSortingBy(t,this.currentView.id):this.sortingStore.toggleSortingDirection(this.currentView.id)},t:a.Iu}}),wi=i(79238),yi={};yi.styleTagTransform=z(),yi.setAttributes=B(),yi.insert=N().bind(null,"head"),yi.domAPI=E(),yi.insertStyleElement=F(),S()(wi.Z,yi),wi.Z&&wi.Z.locals&&wi.Z.locals;var Ci=(0,R.Z)(bi,(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,"0bbf142f",null).exports,_i=d.default.extend({name:"FilesListVirtual",components:{RecycleScroller:un.EK,FileEntry:Mn,FilesListHeader:Ci,FilesListFooter:Kn},props:{currentView:{type:Object,required:!0},nodes:{type:Array,required:!0}},data:function(){return{FileEntry:Mn}},computed:{files:function(){return this.nodes.filter((function(t){return"file"===t.type}))},summaryFile:function(){var t=this.files.length;return(0,a.uN)("files","{count} file","{count} files",t,{count:t})},summaryFolder:function(){var t=this.nodes.length-this.files.length;return(0,a.uN)("files","{count} folder","{count} folders",t,{count:t})},summary:function(){return(0,a.Iu)("files","{summaryFile} and {summaryFolder}",this)},isSizeAvailable:function(){return this.nodes.some((function(t){return void 0!==t.attributes.size}))}},mounted:function(){var t=this.$el.querySelectorAll(".vue-recycle-scroller__slot");t[0].setAttribute("role","thead"),t[1].setAttribute("role","tfoot")},methods:{getFileId:function(t){return t.attributes.fileid},t:a.Iu}}),xi=i(40483),ki={};ki.styleTagTransform=z(),ki.setAttributes=B(),ki.insert=N().bind(null,"head"),ki.domAPI=E(),ki.insertStyleElement=F(),S()(xi.Z,ki),xi.Z&&xi.Z.locals&&xi.Z.locals;var Si=(0,R.Z)(_i,(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){var i=n.item,r=n.active,o=n.index;return[e("FileEntry",{attrs:{active:r,index:o,"is-size-available":t.isSizeAvailable,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:{"is-size-available":t.isSizeAvailable,nodes:t.nodes}})]},proxy:!0},{key:"after",fn:function(){return[e("FilesListFooter",{attrs:{"is-size-available":t.isSizeAvailable,nodes:t.nodes,summary:t.summary}})]},proxy:!0}])})}),[],!1,null,"6f4155ff",null).exports,Pi=i(25108);function Ei(t){return Ei="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Ei(t)}function Oi(t,e,n,i,r,o,a){try{var s=t[o](a),l=s.value}catch(t){return void n(t)}s.done?e(l):Promise.resolve(l).then(i,r)}function Ni(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,i)}return n}function ji(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?Ni(Object(n),!0).forEach((function(e){Bi(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Ni(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}function Bi(t,e,n){return(e=function(t){var e=function(t,e){if("object"!==Ei(t)||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,e);if("object"!==Ei(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t,"string");return"symbol"===Ei(e)?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function Ii(t){return function(t){if(Array.isArray(t))return Fi(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(t){if("string"==typeof t)return Fi(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Fi(t,e):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Fi(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,i=new Array(e);n<e;n++)i[n]=t[n];return i}var Ti=d.default.extend({name:"FilesList",components:{BreadCrumbs:cn,FilesListVirtual:Si,NcAppContent:Be(),NcButton:Fe(),NcEmptyContent:v(),NcLoadingIcon:ze(),TrashCan:Ue.Z},setup:function(){var t=qe();return{filesStore:Ze(),pathsStore:t,selectionStore:Ge(),sortingStore:We()}},data:function(){return{loading:!0,promise:null}},computed:{currentView:function(){return this.$navigation.active||this.$navigation.views.find((function(t){return"files"===t.id}))},dir:function(){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:function(){var t;if(null!==(t=this.currentView)&&void 0!==t&&t.id){if("/"===this.dir)return this.filesStore.getRoot(this.currentView.id);var e=this.pathsStore.getPath(this.currentView.id,this.dir);return this.filesStore.getNode(e)}},sortingMode:function(){return this.sortingStore.getSortingMode(this.currentView.id)||this.currentView.defaultSortKey||"basename"},isAscSorting:function(){return!0===this.sortingStore.isAscSorting(this.currentView.id)},dirContents:function(){var t,e=this;if(!this.currentView)return[];var n=this.currentView.columns.find((function(t){return t.id===e.sortingMode}));if(null!=n&&n.sort&&"function"==typeof n.sort){var i,r=Ii(((null===(i=this.currentFolder)||void 0===i?void 0:i.children)||[]).map(this.getNode).filter((function(t){return t}))).sort(n.sort);return this.isAscSorting?r:r.reverse()}return(0,Ne.X)(Ii(((null===(t=this.currentFolder)||void 0===t?void 0:t.children)||[]).map(this.getNode).filter((function(t){return t}))),[].concat(Ii("basename"===this.sortingMode?[function(t){return"folder"!==t.type}]:[]),[function(t){return t[e.sortingMode]},function(t){return t.basename}]),this.isAscSorting?["asc","asc","asc"]:["desc","desc","desc"])},isEmptyDir:function(){return 0===this.dirContents.length},isRefreshing:function(){return void 0!==this.currentFolder&&!this.isEmptyDir&&this.loading},toPreviousDir:function(){var t=this.dir.split("/").slice(0,-1).join("/")||"/";return ji(ji({},this.$route),{},{query:{dir:t}})}},watch:{currentView:function(t,e){(null==t?void 0:t.id)!==(null==e?void 0:e.id)&&(st.debug("View changed",{newView:t,oldView:e}),this.selectionStore.reset(),this.fetchContent())},dir:function(t,e){var n,i;st.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:{fetchContent:function(){var t,e=this;return(t=regeneratorRuntime.mark((function t(){var n,i,r,o,a,s,l;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(null===(n=e.currentView)||void 0===n||!n.legacy){t.next=2;break}return t.abrupt("return");case 2:return e.loading=!0,r=e.dir,o=e.currentView,"function"==typeof(null===(i=e.promise)||void 0===i?void 0:i.cancel)&&(e.promise.cancel(),st.debug("Cancelled previous ongoing fetch")),e.promise=o.getContents(r),t.prev=7,t.next=10,e.promise;case 10:a=t.sent,s=a.folder,l=a.contents,st.debug("Fetched contents",{dir:r,folder:s,contents:l}),e.filesStore.updateNodes(l),s.children=l.map((function(t){return t.attributes.fileid})),"/"===r?(Pi.debug("files","Setting root",{service:o.id,folder:s}),e.filesStore.setRoot({service:o.id,root:s})):s.attributes.fileid?(e.filesStore.updateNodes([s]),e.pathsStore.addPath({service:o.id,fileid:s.attributes.fileid,path:r})):st.error("Invalid root folder returned",{dir:r,folder:s,currentView:o}),l.filter((function(t){return"folder"===t.type})).forEach((function(t){e.pathsStore.addPath({service:o.id,fileid:t.attributes.fileid,path:(0,f.join)(r,t.basename)})})),t.next=24;break;case 21:t.prev=21,t.t0=t.catch(7),st.error("Error while fetching content",{error:t.t0});case 24:return t.prev=24,e.loading=!1,t.finish(24);case 27:case"end":return t.stop()}}),t,null,[[7,21,24,27]])})),function(){var e=this,n=arguments;return new Promise((function(i,r){var o=t.apply(e,n);function a(t){Oi(o,i,r,a,s,"next",t)}function s(t){Oi(o,i,r,a,s,"throw",t)}a(void 0)}))})()},getNode:function(t){return this.filesStore.getNode(t)},t:a.Iu}}),zi=Ti,Ui=i(15225),Di={};Di.styleTagTransform=z(),Di.setAttributes=B(),Di.insert=N().bind(null,"head"),Di.domAPI=E(),Di.insertStyleElement=F(),S()(Ui.Z,Di),Ui.Z&&Ui.Z.locals&&Ui.Z.locals;var Ri=(0,R.Z)(zi,(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,"3722ae64",null).exports,Li=i(25108);function Vi(t){return Vi="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Vi(t)}function Zi(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,qi(i.key),i)}}function qi(t){var e=function(t,e){if("object"!==Vi(t)||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,e);if("object"!==Vi(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t,"string");return"symbol"===Vi(e)?e:String(e)}var Gi=function(){function t(){var e,n,i;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),e=this,i=void 0,(n=qi(n="_settings"))in e?Object.defineProperty(e,n,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[n]=i,this._settings=[],Li.debug("OCA.Files.Settings initialized")}var e,n;return e=t,(n=[{key:"register",value:function(t){return this._settings.filter((function(e){return e.name===t.name})).length>0?(Li.error("A setting with the same name is already registered"),!1):(this._settings.push(t),!0)}},{key:"settings",get:function(){return this._settings}}])&&Zi(e.prototype,n),Object.defineProperty(e,"prototype",{writable:!1}),t}();function Mi(t){return Mi="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Mi(t)}function $i(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,Hi(i.key),i)}}function Wi(t,e,n){return(e=Hi(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function Hi(t){var e=function(t,e){if("object"!==Mi(t)||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,e);if("object"!==Mi(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t,"string");return"symbol"===Mi(e)?e:String(e)}var Yi=function(){function t(e,n){var i=n.el,r=n.open,o=n.close;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),Wi(this,"_close",void 0),Wi(this,"_el",void 0),Wi(this,"_name",void 0),Wi(this,"_open",void 0),this._name=e,this._el=i,this._open=r,this._close=o,"function"!=typeof this._open&&(this._open=function(){}),"function"!=typeof this._close&&(this._close=function(){})}var e,n;return e=t,(n=[{key:"name",get:function(){return this._name}},{key:"el",get:function(){return this._el}},{key:"open",get:function(){return this._open}},{key:"close",get:function(){return this._close}}])&&$i(e.prototype,n),Object.defineProperty(e,"prototype",{writable:!1}),t}(),Ki=i(78345),Qi=i(17563);d.default.use(Ki.ZP);var Ji,Xi,tr=new Ki.ZP({mode:"history",base:(0,s.generateUrl)("/apps/files",""),linkActiveClass:"active",routes:[{path:"/",alias:"/files"},{path:"/:view/:fileid?",name:"filelist",props:!0}],stringifyQuery:function(t){var e=(0,Qi.stringify)(t).replace(/%2F/gim,"/");return e?"?"+e:""}});window.OCA.Files=null!==(Ji=window.OCA.Files)&&void 0!==Ji?Ji:{},window.OCP.Files=null!==(Xi=window.OCP.Files)&&void 0!==Xi?Xi:{},d.default.use(yt.og);var er=(0,yt.WB)(),nr=new Et;Object.assign(window.OCP.Files,{Navigation:nr}),d.default.prototype.$navigation=nr;var ir,rr=new Gi;Object.assign(window.OCA.Files,{Settings:rr}),Object.assign(window.OCA.Files.Settings,{Setting:Yi}),new(d.default.extend(Oe))({name:"FilesNavigationRoot",propsData:{Navigation:nr},router:tr,pinia:er}).$mount("#app-navigation-files"),new(d.default.extend(Ri))({name:"FilesListRoot",router:tr,pinia:er}).$mount("#app-content-vue"),(ir=Object.values((0,o.j)("files","navigation",{}))).length>0&&(st.debug("Legacy files views detected. Processing...",ir),ir.forEach((function(t){wt(t),t.sublist&&t.sublist.forEach((function(e){return wt(gt(gt({},e),{},{parent:t.id}))}))}))),"serviceWorker"in navigator?window.addEventListener("load",It(regeneratorRuntime.mark((function t(){var e,n;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.prev=0,e=(0,s.generateUrl)("/apps/files/preview-service-worker.js",{},{noRewrite:!0}),t.next=4,navigator.serviceWorker.register(e,{scope:"/"});case 4:n=t.sent,st.debug("SW registered: ",{registration:n}),t.next=11;break;case 8:t.prev=8,t.t0=t.catch(0),st.error("SW registration failed: ",{error:t.t0});case 11:case"end":return t.stop()}}),t,null,[[0,8]])})))):st.debug("Service Worker is not enabled on this browser.")},94023:function(t,e,n){var i=n(87537),r=n.n(i),o=n(23645),a=n.n(o)()(r());a.push([t.id,".breadcrumb[data-v-260f47ba]{flex:1 1 100% !important;width:100%}.breadcrumb[data-v-260f47ba] 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:""}]),e.Z=a},41929:function(t,e,n){var i=n(87537),r=n.n(i),o=n(23645),a=n.n(o)()(r());a.push([t.id,".custom-svg-icon[data-v-6646d6a5]{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-6646d6a5] 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:""}]),e.Z=a},50831:function(t,e,n){var i=n(87537),r=n.n(i),o=n(23645),a=n.n(o)()(r());a.push([t.id,"td[data-v-3600e364],th[data-v-3600e364]{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}td span[data-v-3600e364],th span[data-v-3600e364]{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.files-list__row-checkbox[data-v-3600e364]{justify-content:center}.files-list__row-checkbox[data-v-3600e364] .checkbox-radio-switch{display:flex;justify-content:center;--icon-size: var(--checkbox-size)}.files-list__row-checkbox[data-v-3600e364] .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__row-checkbox[data-v-3600e364] .checkbox-radio-switch .checkbox-radio-switch__icon{margin:0 !important}.files-list__row-icon[data-v-3600e364]{display:flex;align-items:center;justify-content:center;width:var(--icon-preview-size);height:100%;margin-right:var(--checkbox-padding);color:var(--color-primary-element)}.files-list__row-icon>span[data-v-3600e364]{justify-content:flex-start}.files-list__row-icon[data-v-3600e364] svg{width:var(--icon-preview-size);height:var(--icon-preview-size)}.files-list__row-icon-preview[data-v-3600e364]{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__row-name[data-v-3600e364]{overflow:hidden;flex:1 1 auto}.files-list__row-name a[data-v-3600e364]{display:flex;align-items:center;width:100%;height:100%}.files-list__row-name a:focus .files-list__row-name-text[data-v-3600e364],.files-list__row-name a:focus-visible .files-list__row-name-text[data-v-3600e364]{outline:2px solid var(--color-main-text) !important;border-radius:20px}.files-list__row-name .files-list__row-name-text[data-v-3600e364]{padding:5px 10px;margin-left:-10px}.files-list__row-actions[data-v-3600e364]{width:auto}.files-list__row-actions~td[data-v-3600e364],.files-list__row-actions~th[data-v-3600e364]{margin:0 var(--cell-margin)}.files-list__row-actions[data-v-3600e364]>button .button-vue__text{font-weight:normal}.files-list__row-actions[data-v-3600e364]>button:not(:hover,:focus,:active) .button-vue__wrapper{color:var(--color-text-maxcontrast)}.files-list__row-size[data-v-3600e364]{justify-content:flex-end;width:calc(var(--row-height)*1.5);color:var(--color-main-text)}.files-list__row-size[data-v-3600e364] .files-list__column-sort-button{padding:0 16px 0 4px !important}.files-list__row-size[data-v-3600e364] .files-list__column-sort-button .button-vue__wrapper{flex-direction:row}.files-list__row-column-custom[data-v-3600e364]{width:calc(var(--row-height)*2)}tr[data-v-3600e364]:hover,tr[data-v-3600e364]:focus,tr[data-v-3600e364]:active{background-color:var(--color-background-dark)}.files-list__row-icon-preview[data-v-3600e364]:not([style*=background]){background:var(--color-loading-dark)}","",{version:3,sources:["webpack://./apps/files/src/mixins/fileslist-row.scss","webpack://./apps/files/src/components/FileEntry.vue"],names:[],mappings:"AA4BA,wCACC,YAAA,CACA,kBAAA,CACA,aAAA,CACA,oBAAA,CACA,uBAAA,CACA,wBAAA,CACA,QAAA,CACA,SAAA,CACA,mCAAA,CACA,WAAA,CAKA,kDACC,eAAA,CACA,kBAAA,CACA,sBAAA,CAIF,2CACC,sBAAA,CACA,kEACC,YAAA,CACA,sBAAA,CAEA,iCAAA,CAEA,qGACC,2BAAA,CACA,4BAAA,CACA,QAAA,CACA,8DAAA,CAGD,+FACC,mBAAA,CAKH,uCACC,YAAA,CACA,kBAAA,CACA,sBAAA,CACA,8BAAA,CACA,WAAA,CAEA,oCAAA,CACA,kCAAA,CAEA,4CACC,0BAAA,CAGD,2CACC,8BAAA,CACA,+BAAA,CAGD,+CACC,eAAA,CACA,8BAAA,CACA,+BAAA,CACA,kCAAA,CACA,2BAAA,CAEA,0BAAA,CACA,uBAAA,CAIF,uCAEC,eAAA,CAEA,aAAA,CAEA,yCACC,YAAA,CACA,kBAAA,CAEA,UAAA,CACA,WAAA,CAGA,4JAEC,mDAAA,CACA,kBAAA,CAIF,kEAEC,gBAAA,CACA,iBAAA,CAIF,0CACC,UAAA,CAGA,0FAEC,2BAAA,CAIA,mEAEC,kBAAA,CAED,iGAEC,mCAAA,CAKH,uCAEC,wBAAA,CACA,iCAAA,CAEA,4BAAA,CAGA,uEACC,+BAAA,CACA,4FACC,kBAAA,CAKH,gDACC,+BAAA,CCnKA,+EAGC,6CAAA,CAKF,wEACI,oCAAA",sourcesContent:["/**\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\n/**\n * ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠\n * This file is for every column styling that must be\n * shared between BOTH the files list AND the list header.\n * ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠\n */\ntd, th {\n\tdisplay: flex;\n\talign-items: center;\n\tflex: 0 0 auto;\n\tjustify-content: left;\n\twidth: var(--row-height);\n\theight: var(--row-height);\n\tmargin: 0;\n\tpadding: 0;\n\tcolor: var(--color-text-maxcontrast);\n\tborder: none;\n\n\t// Columns should try to add any text\n\t// node wrapped in a span. That should help\n\t// with the ellipsis on overflow.\n\tspan {\n\t\toverflow: hidden;\n\t\twhite-space: nowrap;\n\t\ttext-overflow: ellipsis;\n\t}\n}\n\n.files-list__row-checkbox {\n\tjustify-content: center;\n\t&::v-deep .checkbox-radio-switch {\n\t\tdisplay: flex;\n\t\tjustify-content: center;\n\n\t\t--icon-size: var(--checkbox-size);\n\n\t\tlabel.checkbox-radio-switch__label {\n\t\t\twidth: var(--clickable-area);\n\t\t\theight: var(--clickable-area);\n\t\t\tmargin: 0;\n\t\t\tpadding: calc((var(--clickable-area) - var(--checkbox-size)) / 2);\n\t\t}\n\n\t\t.checkbox-radio-switch__icon {\n\t\t\tmargin: 0 !important;\n\t\t}\n\t}\n}\n\n.files-list__row-icon {\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\twidth: var(--icon-preview-size);\n\theight: 100%;\n\t// Show same padding as the checkbox right padding for visual balance\n\tmargin-right: var(--checkbox-padding);\n\tcolor: var(--color-primary-element);\n\n\t& > span {\n\t\tjustify-content: flex-start;\n\t}\n\n\t&::v-deep svg {\n\t\twidth: var(--icon-preview-size);\n\t\theight: var(--icon-preview-size);\n\t}\n\n\t&-preview {\n\t\toverflow: hidden;\n\t\twidth: var(--icon-preview-size);\n\t\theight: var(--icon-preview-size);\n\t\tborder-radius: var(--border-radius);\n\t\tbackground-repeat: no-repeat;\n\t\t// Center and contain the preview\n\t\tbackground-position: center;\n\t\tbackground-size: contain;\n\t}\n}\n\n.files-list__row-name {\n\t// Prevent link from overflowing\n\toverflow: hidden;\n\t// Take as much space as possible\n\tflex: 1 1 auto;\n\n\ta {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\t// Fill cell height and width\n\t\twidth: 100%;\n\t\theight: 100%;\n\n\t\t// Keyboard indicator a11y\n\t\t&:focus .files-list__row-name-text,\n\t\t&:focus-visible .files-list__row-name-text {\n\t\t\toutline: 2px solid var(--color-main-text) !important;\n\t\t\tborder-radius: 20px;\n\t\t}\n\t}\n\n\t.files-list__row-name-text {\n\t\t// Make some space for the outline\n\t\tpadding: 5px 10px;\n\t\tmargin-left: -10px;\n\t}\n}\n\n.files-list__row-actions {\n\twidth: auto;\n\n\t// Add margin to all cells after the actions\n\t& ~ td,\n\t& ~ th {\n\t\tmargin: 0 var(--cell-margin);\n\t}\n\n\t&::v-deep > button {\n\t\t.button-vue__text {\n\t\t\t// Remove bold from default button styling\n\t\t\tfont-weight: normal;\n\t\t}\n\t\t&:not(:hover, :focus, :active) .button-vue__wrapper {\n\t\t\t// Also apply color-text-maxcontrast to non-active button\n\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t}\n\t}\n}\n\n.files-list__row-size {\n\t// Right align text\n\tjustify-content: flex-end;\n\twidth: calc(var(--row-height) * 1.5);\n\t// opacity varies with the size\n\tcolor: var(--color-main-text);\n\n\t// Icon is before text since size is right aligned\n\t::v-deep .files-list__column-sort-button {\n\t\tpadding: 0 16px 0 4px !important;\n\t\t.button-vue__wrapper {\n\t\t\tflex-direction: row;\n\t\t}\n\t}\n}\n\n.files-list__row-column-custom {\n\twidth: calc(var(--row-height) * 2);\n}\n","\n@import '../mixins/fileslist-row.scss';\n\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:""}]),e.Z=a},78636:function(t,e,n){var i=n(87537),r=n.n(i),o=n(23645),a=n.n(o)()(r());a.push([t.id,"td[data-v-cc078f7a],th[data-v-cc078f7a]{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}td span[data-v-cc078f7a],th span[data-v-cc078f7a]{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.files-list__row-checkbox[data-v-cc078f7a]{justify-content:center}.files-list__row-checkbox[data-v-cc078f7a] .checkbox-radio-switch{display:flex;justify-content:center;--icon-size: var(--checkbox-size)}.files-list__row-checkbox[data-v-cc078f7a] .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__row-checkbox[data-v-cc078f7a] .checkbox-radio-switch .checkbox-radio-switch__icon{margin:0 !important}.files-list__row-icon[data-v-cc078f7a]{display:flex;align-items:center;justify-content:center;width:var(--icon-preview-size);height:100%;margin-right:var(--checkbox-padding);color:var(--color-primary-element)}.files-list__row-icon>span[data-v-cc078f7a]{justify-content:flex-start}.files-list__row-icon[data-v-cc078f7a] svg{width:var(--icon-preview-size);height:var(--icon-preview-size)}.files-list__row-icon-preview[data-v-cc078f7a]{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__row-name[data-v-cc078f7a]{overflow:hidden;flex:1 1 auto}.files-list__row-name a[data-v-cc078f7a]{display:flex;align-items:center;width:100%;height:100%}.files-list__row-name a:focus .files-list__row-name-text[data-v-cc078f7a],.files-list__row-name a:focus-visible .files-list__row-name-text[data-v-cc078f7a]{outline:2px solid var(--color-main-text) !important;border-radius:20px}.files-list__row-name .files-list__row-name-text[data-v-cc078f7a]{padding:5px 10px;margin-left:-10px}.files-list__row-actions[data-v-cc078f7a]{width:auto}.files-list__row-actions~td[data-v-cc078f7a],.files-list__row-actions~th[data-v-cc078f7a]{margin:0 var(--cell-margin)}.files-list__row-actions[data-v-cc078f7a]>button .button-vue__text{font-weight:normal}.files-list__row-actions[data-v-cc078f7a]>button:not(:hover,:focus,:active) .button-vue__wrapper{color:var(--color-text-maxcontrast)}.files-list__row-size[data-v-cc078f7a]{justify-content:flex-end;width:calc(var(--row-height)*1.5);color:var(--color-main-text)}.files-list__row-size[data-v-cc078f7a] .files-list__column-sort-button{padding:0 16px 0 4px !important}.files-list__row-size[data-v-cc078f7a] .files-list__column-sort-button .button-vue__wrapper{flex-direction:row}.files-list__row-column-custom[data-v-cc078f7a]{width:calc(var(--row-height)*2)}tr[data-v-cc078f7a]{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-cc078f7a]{user-select:none;color:var(--color-text-maxcontrast) !important}","",{version:3,sources:["webpack://./apps/files/src/mixins/fileslist-row.scss","webpack://./apps/files/src/components/FilesListFooter.vue"],names:[],mappings:"AA4BA,wCACC,YAAA,CACA,kBAAA,CACA,aAAA,CACA,oBAAA,CACA,uBAAA,CACA,wBAAA,CACA,QAAA,CACA,SAAA,CACA,mCAAA,CACA,WAAA,CAKA,kDACC,eAAA,CACA,kBAAA,CACA,sBAAA,CAIF,2CACC,sBAAA,CACA,kEACC,YAAA,CACA,sBAAA,CAEA,iCAAA,CAEA,qGACC,2BAAA,CACA,4BAAA,CACA,QAAA,CACA,8DAAA,CAGD,+FACC,mBAAA,CAKH,uCACC,YAAA,CACA,kBAAA,CACA,sBAAA,CACA,8BAAA,CACA,WAAA,CAEA,oCAAA,CACA,kCAAA,CAEA,4CACC,0BAAA,CAGD,2CACC,8BAAA,CACA,+BAAA,CAGD,+CACC,eAAA,CACA,8BAAA,CACA,+BAAA,CACA,kCAAA,CACA,2BAAA,CAEA,0BAAA,CACA,uBAAA,CAIF,uCAEC,eAAA,CAEA,aAAA,CAEA,yCACC,YAAA,CACA,kBAAA,CAEA,UAAA,CACA,WAAA,CAGA,4JAEC,mDAAA,CACA,kBAAA,CAIF,kEAEC,gBAAA,CACA,iBAAA,CAIF,0CACC,UAAA,CAGA,0FAEC,2BAAA,CAIA,mEAEC,kBAAA,CAED,iGAEC,mCAAA,CAKH,uCAEC,wBAAA,CACA,iCAAA,CAEA,4BAAA,CAGA,uEACC,+BAAA,CACA,4FACC,kBAAA,CAKH,gDACC,+BAAA,CCpKD,oBACC,oBAAA,CACA,wCAAA,CAEA,yCAAA,CACA,6BAAA,CAGD,oBACC,gBAAA,CAEA,8CAAA",sourcesContent:["/**\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\n/**\n * ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠\n * This file is for every column styling that must be\n * shared between BOTH the files list AND the list header.\n * ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠\n */\ntd, th {\n\tdisplay: flex;\n\talign-items: center;\n\tflex: 0 0 auto;\n\tjustify-content: left;\n\twidth: var(--row-height);\n\theight: var(--row-height);\n\tmargin: 0;\n\tpadding: 0;\n\tcolor: var(--color-text-maxcontrast);\n\tborder: none;\n\n\t// Columns should try to add any text\n\t// node wrapped in a span. That should help\n\t// with the ellipsis on overflow.\n\tspan {\n\t\toverflow: hidden;\n\t\twhite-space: nowrap;\n\t\ttext-overflow: ellipsis;\n\t}\n}\n\n.files-list__row-checkbox {\n\tjustify-content: center;\n\t&::v-deep .checkbox-radio-switch {\n\t\tdisplay: flex;\n\t\tjustify-content: center;\n\n\t\t--icon-size: var(--checkbox-size);\n\n\t\tlabel.checkbox-radio-switch__label {\n\t\t\twidth: var(--clickable-area);\n\t\t\theight: var(--clickable-area);\n\t\t\tmargin: 0;\n\t\t\tpadding: calc((var(--clickable-area) - var(--checkbox-size)) / 2);\n\t\t}\n\n\t\t.checkbox-radio-switch__icon {\n\t\t\tmargin: 0 !important;\n\t\t}\n\t}\n}\n\n.files-list__row-icon {\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\twidth: var(--icon-preview-size);\n\theight: 100%;\n\t// Show same padding as the checkbox right padding for visual balance\n\tmargin-right: var(--checkbox-padding);\n\tcolor: var(--color-primary-element);\n\n\t& > span {\n\t\tjustify-content: flex-start;\n\t}\n\n\t&::v-deep svg {\n\t\twidth: var(--icon-preview-size);\n\t\theight: var(--icon-preview-size);\n\t}\n\n\t&-preview {\n\t\toverflow: hidden;\n\t\twidth: var(--icon-preview-size);\n\t\theight: var(--icon-preview-size);\n\t\tborder-radius: var(--border-radius);\n\t\tbackground-repeat: no-repeat;\n\t\t// Center and contain the preview\n\t\tbackground-position: center;\n\t\tbackground-size: contain;\n\t}\n}\n\n.files-list__row-name {\n\t// Prevent link from overflowing\n\toverflow: hidden;\n\t// Take as much space as possible\n\tflex: 1 1 auto;\n\n\ta {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\t// Fill cell height and width\n\t\twidth: 100%;\n\t\theight: 100%;\n\n\t\t// Keyboard indicator a11y\n\t\t&:focus .files-list__row-name-text,\n\t\t&:focus-visible .files-list__row-name-text {\n\t\t\toutline: 2px solid var(--color-main-text) !important;\n\t\t\tborder-radius: 20px;\n\t\t}\n\t}\n\n\t.files-list__row-name-text {\n\t\t// Make some space for the outline\n\t\tpadding: 5px 10px;\n\t\tmargin-left: -10px;\n\t}\n}\n\n.files-list__row-actions {\n\twidth: auto;\n\n\t// Add margin to all cells after the actions\n\t& ~ td,\n\t& ~ th {\n\t\tmargin: 0 var(--cell-margin);\n\t}\n\n\t&::v-deep > button {\n\t\t.button-vue__text {\n\t\t\t// Remove bold from default button styling\n\t\t\tfont-weight: normal;\n\t\t}\n\t\t&:not(:hover, :focus, :active) .button-vue__wrapper {\n\t\t\t// Also apply color-text-maxcontrast to non-active button\n\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t}\n\t}\n}\n\n.files-list__row-size {\n\t// Right align text\n\tjustify-content: flex-end;\n\twidth: calc(var(--row-height) * 1.5);\n\t// opacity varies with the size\n\tcolor: var(--color-main-text);\n\n\t// Icon is before text since size is right aligned\n\t::v-deep .files-list__column-sort-button {\n\t\tpadding: 0 16px 0 4px !important;\n\t\t.button-vue__wrapper {\n\t\t\tflex-direction: row;\n\t\t}\n\t}\n}\n\n.files-list__row-column-custom {\n\twidth: calc(var(--row-height) * 2);\n}\n","\n@import '../mixins/fileslist-row.scss';\n\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:""}]),e.Z=a},79238:function(t,e,n){var i=n(87537),r=n.n(i),o=n(23645),a=n.n(o)()(r());a.push([t.id,"td[data-v-0bbf142f],th[data-v-0bbf142f]{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}td span[data-v-0bbf142f],th span[data-v-0bbf142f]{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.files-list__row-checkbox[data-v-0bbf142f]{justify-content:center}.files-list__row-checkbox[data-v-0bbf142f] .checkbox-radio-switch{display:flex;justify-content:center;--icon-size: var(--checkbox-size)}.files-list__row-checkbox[data-v-0bbf142f] .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__row-checkbox[data-v-0bbf142f] .checkbox-radio-switch .checkbox-radio-switch__icon{margin:0 !important}.files-list__row-icon[data-v-0bbf142f]{display:flex;align-items:center;justify-content:center;width:var(--icon-preview-size);height:100%;margin-right:var(--checkbox-padding);color:var(--color-primary-element)}.files-list__row-icon>span[data-v-0bbf142f]{justify-content:flex-start}.files-list__row-icon[data-v-0bbf142f] svg{width:var(--icon-preview-size);height:var(--icon-preview-size)}.files-list__row-icon-preview[data-v-0bbf142f]{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__row-name[data-v-0bbf142f]{overflow:hidden;flex:1 1 auto}.files-list__row-name a[data-v-0bbf142f]{display:flex;align-items:center;width:100%;height:100%}.files-list__row-name a:focus .files-list__row-name-text[data-v-0bbf142f],.files-list__row-name a:focus-visible .files-list__row-name-text[data-v-0bbf142f]{outline:2px solid var(--color-main-text) !important;border-radius:20px}.files-list__row-name .files-list__row-name-text[data-v-0bbf142f]{padding:5px 10px;margin-left:-10px}.files-list__row-actions[data-v-0bbf142f]{width:auto}.files-list__row-actions~td[data-v-0bbf142f],.files-list__row-actions~th[data-v-0bbf142f]{margin:0 var(--cell-margin)}.files-list__row-actions[data-v-0bbf142f]>button .button-vue__text{font-weight:normal}.files-list__row-actions[data-v-0bbf142f]>button:not(:hover,:focus,:active) .button-vue__wrapper{color:var(--color-text-maxcontrast)}.files-list__row-size[data-v-0bbf142f]{justify-content:flex-end;width:calc(var(--row-height)*1.5);color:var(--color-main-text)}.files-list__row-size[data-v-0bbf142f] .files-list__column-sort-button{padding:0 16px 0 4px !important}.files-list__row-size[data-v-0bbf142f] .files-list__column-sort-button .button-vue__wrapper{flex-direction:row}.files-list__row-column-custom[data-v-0bbf142f]{width:calc(var(--row-height)*2)}.files-list__column[data-v-0bbf142f]{user-select:none;color:var(--color-text-maxcontrast) !important}.files-list__column--sortable[data-v-0bbf142f]{cursor:pointer}","",{version:3,sources:["webpack://./apps/files/src/mixins/fileslist-row.scss","webpack://./apps/files/src/components/FilesListHeader.vue"],names:[],mappings:"AA4BA,wCACC,YAAA,CACA,kBAAA,CACA,aAAA,CACA,oBAAA,CACA,uBAAA,CACA,wBAAA,CACA,QAAA,CACA,SAAA,CACA,mCAAA,CACA,WAAA,CAKA,kDACC,eAAA,CACA,kBAAA,CACA,sBAAA,CAIF,2CACC,sBAAA,CACA,kEACC,YAAA,CACA,sBAAA,CAEA,iCAAA,CAEA,qGACC,2BAAA,CACA,4BAAA,CACA,QAAA,CACA,8DAAA,CAGD,+FACC,mBAAA,CAKH,uCACC,YAAA,CACA,kBAAA,CACA,sBAAA,CACA,8BAAA,CACA,WAAA,CAEA,oCAAA,CACA,kCAAA,CAEA,4CACC,0BAAA,CAGD,2CACC,8BAAA,CACA,+BAAA,CAGD,+CACC,eAAA,CACA,8BAAA,CACA,+BAAA,CACA,kCAAA,CACA,2BAAA,CAEA,0BAAA,CACA,uBAAA,CAIF,uCAEC,eAAA,CAEA,aAAA,CAEA,yCACC,YAAA,CACA,kBAAA,CAEA,UAAA,CACA,WAAA,CAGA,4JAEC,mDAAA,CACA,kBAAA,CAIF,kEAEC,gBAAA,CACA,iBAAA,CAIF,0CACC,UAAA,CAGA,0FAEC,2BAAA,CAIA,mEAEC,kBAAA,CAED,iGAEC,mCAAA,CAKH,uCAEC,wBAAA,CACA,iCAAA,CAEA,4BAAA,CAGA,uEACC,+BAAA,CACA,4FACC,kBAAA,CAKH,gDACC,+BAAA,CCtKD,qCACC,gBAAA,CAEA,8CAAA,CAEA,+CACC,cAAA",sourcesContent:["/**\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\n/**\n * ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠\n * This file is for every column styling that must be\n * shared between BOTH the files list AND the list header.\n * ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠\n */\ntd, th {\n\tdisplay: flex;\n\talign-items: center;\n\tflex: 0 0 auto;\n\tjustify-content: left;\n\twidth: var(--row-height);\n\theight: var(--row-height);\n\tmargin: 0;\n\tpadding: 0;\n\tcolor: var(--color-text-maxcontrast);\n\tborder: none;\n\n\t// Columns should try to add any text\n\t// node wrapped in a span. That should help\n\t// with the ellipsis on overflow.\n\tspan {\n\t\toverflow: hidden;\n\t\twhite-space: nowrap;\n\t\ttext-overflow: ellipsis;\n\t}\n}\n\n.files-list__row-checkbox {\n\tjustify-content: center;\n\t&::v-deep .checkbox-radio-switch {\n\t\tdisplay: flex;\n\t\tjustify-content: center;\n\n\t\t--icon-size: var(--checkbox-size);\n\n\t\tlabel.checkbox-radio-switch__label {\n\t\t\twidth: var(--clickable-area);\n\t\t\theight: var(--clickable-area);\n\t\t\tmargin: 0;\n\t\t\tpadding: calc((var(--clickable-area) - var(--checkbox-size)) / 2);\n\t\t}\n\n\t\t.checkbox-radio-switch__icon {\n\t\t\tmargin: 0 !important;\n\t\t}\n\t}\n}\n\n.files-list__row-icon {\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\twidth: var(--icon-preview-size);\n\theight: 100%;\n\t// Show same padding as the checkbox right padding for visual balance\n\tmargin-right: var(--checkbox-padding);\n\tcolor: var(--color-primary-element);\n\n\t& > span {\n\t\tjustify-content: flex-start;\n\t}\n\n\t&::v-deep svg {\n\t\twidth: var(--icon-preview-size);\n\t\theight: var(--icon-preview-size);\n\t}\n\n\t&-preview {\n\t\toverflow: hidden;\n\t\twidth: var(--icon-preview-size);\n\t\theight: var(--icon-preview-size);\n\t\tborder-radius: var(--border-radius);\n\t\tbackground-repeat: no-repeat;\n\t\t// Center and contain the preview\n\t\tbackground-position: center;\n\t\tbackground-size: contain;\n\t}\n}\n\n.files-list__row-name {\n\t// Prevent link from overflowing\n\toverflow: hidden;\n\t// Take as much space as possible\n\tflex: 1 1 auto;\n\n\ta {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\t// Fill cell height and width\n\t\twidth: 100%;\n\t\theight: 100%;\n\n\t\t// Keyboard indicator a11y\n\t\t&:focus .files-list__row-name-text,\n\t\t&:focus-visible .files-list__row-name-text {\n\t\t\toutline: 2px solid var(--color-main-text) !important;\n\t\t\tborder-radius: 20px;\n\t\t}\n\t}\n\n\t.files-list__row-name-text {\n\t\t// Make some space for the outline\n\t\tpadding: 5px 10px;\n\t\tmargin-left: -10px;\n\t}\n}\n\n.files-list__row-actions {\n\twidth: auto;\n\n\t// Add margin to all cells after the actions\n\t& ~ td,\n\t& ~ th {\n\t\tmargin: 0 var(--cell-margin);\n\t}\n\n\t&::v-deep > button {\n\t\t.button-vue__text {\n\t\t\t// Remove bold from default button styling\n\t\t\tfont-weight: normal;\n\t\t}\n\t\t&:not(:hover, :focus, :active) .button-vue__wrapper {\n\t\t\t// Also apply color-text-maxcontrast to non-active button\n\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t}\n\t}\n}\n\n.files-list__row-size {\n\t// Right align text\n\tjustify-content: flex-end;\n\twidth: calc(var(--row-height) * 1.5);\n\t// opacity varies with the size\n\tcolor: var(--color-main-text);\n\n\t// Icon is before text since size is right aligned\n\t::v-deep .files-list__column-sort-button {\n\t\tpadding: 0 16px 0 4px !important;\n\t\t.button-vue__wrapper {\n\t\t\tflex-direction: row;\n\t\t}\n\t}\n}\n\n.files-list__row-column-custom {\n\twidth: calc(var(--row-height) * 2);\n}\n","\n@import '../mixins/fileslist-row.scss';\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:""}]),e.Z=a},47480:function(t,e,n){var i=n(87537),r=n.n(i),o=n(23645),a=n.n(o)()(r());a.push([t.id,".files-list__row-actions-batch[data-v-63bb14b6]{flex:1 1 100% !important}.files-list__row-actions-batch[data-v-63bb14b6] .button-vue__wrapper{width:100%}.files-list__row-actions-batch[data-v-63bb14b6] .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:""}]),e.Z=a},6905:function(t,e,n){var i=n(87537),r=n.n(i),o=n(23645),a=n.n(o)()(r());a.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:""}]),e.Z=a},40483:function(t,e,n){var i=n(87537),r=n.n(i),o=n(23645),a=n.n(o)()(r());a.push([t.id,".files-list[data-v-6f4155ff]{--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-6f4155ff] tbody,.files-list[data-v-6f4155ff] .vue-recycle-scroller__slot{display:flex;flex-direction:column;width:100%;position:relative}.files-list[data-v-6f4155ff] .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-6f4155ff] tr{position:absolute;display:flex;align-items:center;width:100%;border-bottom:1px solid var(--color-border)}","",{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,CAQD,gCACC,iBAAA,CACA,YAAA,CACA,kBAAA,CACA,UAAA,CACA,2CAAA",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\t/**\n\t\t * Common row styling. tr are handled by\n\t\t * vue-virtual-scroller, so we need to\n\t\t * have those rules in here.\n\t\t */\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\t}\n}\n\n"],sourceRoot:""}]),e.Z=a},358:function(t,e,n){var i=n(87537),r=n.n(i),o=n(23645),a=n.n(o)()(r());a.push([t.id,".app-navigation-entry__settings-quota--not-unlimited[data-v-26c061ec] .app-navigation-entry__title{margin-top:-4px}.app-navigation-entry__settings-quota progress[data-v-26c061ec]{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:""}]),e.Z=a},3491:function(t,e,n){var i=n(87537),r=n.n(i),o=n(23645),a=n.n(o)()(r());a.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:""}]),e.Z=a},15225:function(t,e,n){var i=n(87537),r=n.n(i),o=n(23645),a=n.n(o)()(r());a.push([t.id,".app-content[data-v-3722ae64]{display:flex;overflow:hidden;flex-direction:column;max-height:100%}.app-content[data-v-3722ae64]:not(.app-content--hidden)+#app-content{display:none}.files-list__header[data-v-3722ae64]{display:flex;align-content:center;flex:0 0;margin:4px 4px 4px 50px}.files-list__header>*[data-v-3722ae64]{flex:0 0}.files-list__refresh-icon[data-v-3722ae64]{flex:0 0 44px;width:44px;height:44px}.files-list__loading-icon[data-v-3722ae64]{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:""}]),e.Z=a},93578:function(t,e,n){var i=n(87537),r=n.n(i),o=n(23645),a=n.n(o)()(r());a.push([t.id,".app-navigation[data-v-5bdabc28] .app-navigation-entry-icon{background-repeat:no-repeat;background-position:center}.app-navigation>ul.app-navigation__list[data-v-5bdabc28]{padding-bottom:var(--default-grid-baseline, 4px)}.app-navigation-entry__settings[data-v-5bdabc28]{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:""}]),e.Z=a},40127:function(t,e,n){var i=n(87537),r=n.n(i),o=n(23645),a=n.n(o)()(r());a.push([t.id,".setting-link[data-v-b5e4b862]: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:""}]),e.Z=a},5103:function(t,e,n){var i=n(87537),r=n.n(i),o=n(23645),a=n.n(o)()(r());a.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:""}]),e.Z=a},2974:function(t,e,n){var i=n(87537),r=n.n(i),o=n(23645),a=n.n(o)()(r());a.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:";AA6dA;;;;;;;;;;GAUA",sourcesContent:["\x3c!--\n - @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\n -\n - @author Gary Kim <gary@garykim.dev>\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.sync=\"selectedFiles\"\n\t\t\t\t:value=\"fileid.toString()\"\n\t\t\t\tname=\"selectedFiles\" />\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\">\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=\"mimeUrl\"\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: mimeUrl }\" />\n\n\t\t\t\t\t<FileIcon v-else />\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:force-title=\"true\"\n\t\t\t\t:inline=\"enabledInlineActions.length\">\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<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<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 { Folder, File, formatFileSize } from '@nextcloud/files'\nimport { Fragment } from 'vue-fragment'\nimport { join } from 'path'\nimport { showError } 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 Vue from 'vue'\n\nimport { isCachedPreview } from '../services/PreviewService'\nimport { getFileActions } from '../services/FileAction'\nimport { useFilesStore } from '../store/files'\nimport { UserConfig } from '../types'\nimport { useSelectionStore } from '../store/selection'\nimport { useUserConfigStore } from '../store/userconfig'\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},\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},\n\n\tsetup() {\n\t\tconst filesStore = useFilesStore()\n\t\tconst selectionStore = useSelectionStore()\n\t\tconst userConfigStore = useUserConfigStore()\n\t\treturn {\n\t\t\tfilesStore,\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\tloading: '',\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/** @return {UserConfig} */\n\t\tuserConfig() {\n\t\t\treturn this.userConfigStore.userConfig\n\t\t},\n\n\t\t/** @return {Navigation} */\n\t\tcurrentView() {\n\t\t\treturn this.$navigation.active\n\t\t},\n\n\t\tcolumns() {\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\n\t\tfileid() {\n\t\t\treturn this.source.attributes.fileid\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\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\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\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\tget() {\n\t\t\t\treturn this.selectionStore.selected\n\t\t\t},\n\t\t\tset(selection) {\n\t\t\t\tlogger.debug('Changed nodes selection', { selection })\n\t\t\t\tthis.selectionStore.set(selection)\n\t\t\t},\n\t\t},\n\n\t\tcropPreviews() {\n\t\t\treturn this.userConfig.crop_image_previews\n\t\t},\n\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 ? '1' : '0')\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\n\t\tmimeUrl() {\n\t\t\tconst mimeType = this.source.mime || 'application/octet-stream'\n\t\t\tconst mimeUrl = window.OC?.MimeType?.getIconUrl?.(mimeType)\n\t\t\tif (mimeUrl) {\n\t\t\t\treturn `url(${mimeUrl})`\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\n\t\tenabledInlineActions() {\n\t\t\treturn this.enabledActions.filter(action => action?.inline?.(this.source, this.currentView))\n\t\t},\n\n\t\tenabledMenuActions() {\n\t\t\treturn [\n\t\t\t\t...this.enabledInlineActions,\n\t\t\t\t...actions.filter(action => !action.inline),\n\t\t\t]\n\t\t},\n\n\t\tuniqueId() {\n\t\t\treturn this.hashCode(this.source.source)\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 tabindex from the row\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\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// Ensure max 5 previews are being fetched at the same time\n\t\t\tconst controller = new AbortController()\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\tcontroller.abort()\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.$refs.actionsMenu.closeMenu()\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\thashCode(str) {\n\t\t\tlet hash = 0\n\t\t\tfor (let i = 0, len = str.length; i < len; i++) {\n\t\t\t\tconst chr = str.charCodeAt(i)\n\t\t\t\thash = (hash << 5) - hash + chr\n\t\t\t\thash |= 0 // Convert to 32bit integer\n\t\t\t}\n\t\t\treturn hash\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\tthis.loading = action.id\n\t\t\t\tawait action.exec(this.source, this.currentView)\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', 'Error while executing action \"{displayName}\"', { displayName }))\n\t\t\t} finally {\n\t\t\t\tthis.loading = ''\n\t\t\t}\n\t\t},\n\n\t\tt: translate,\n\t\tformatFileSize,\n\t},\n})\n<\/script>\n\n<style scoped lang='scss'>\n@import '../mixins/fileslist-row.scss';\n\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:""}]),e.Z=a}},i={};function r(t){var e=i[t];if(void 0!==e)return e.exports;var o=i[t]={id:t,loaded:!1,exports:{}};return n[t].call(o.exports,o,o.exports,r),o.loaded=!0,o.exports}r.m=n,e=[],r.O=function(t,n,i,o){if(!n){var a=1/0;for(u=0;u<e.length;u++){n=e[u][0],i=e[u][1],o=e[u][2];for(var s=!0,l=0;l<n.length;l++)(!1&o||a>=o)&&Object.keys(r.O).every((function(t){return r.O[t](n[l])}))?n.splice(l--,1):(s=!1,o<a&&(a=o));if(s){e.splice(u--,1);var c=i();void 0!==c&&(t=c)}}return t}o=o||0;for(var u=e.length;u>0&&e[u-1][2]>o;u--)e[u]=e[u-1];e[u]=[n,i,o]},r.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return r.d(e,{a:e}),e},r.d=function(t,e){for(var n in e)r.o(e,n)&&!r.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),r.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r.nmd=function(t){return t.paths=[],t.children||(t.children=[]),t},r.j=2181,function(){r.b=document.baseURI||self.location.href;var t={2181:0};r.O.j=function(e){return 0===t[e]};var e=function(e,n){var i,o,a=n[0],s=n[1],l=n[2],c=0;if(a.some((function(e){return 0!==t[e]}))){for(i in s)r.o(s,i)&&(r.m[i]=s[i]);if(l)var u=l(r)}for(e&&e(n);c<a.length;c++)o=a[c],r.o(t,o)&&t[o]&&t[o][0](),t[o]=0;return r.O(u)},n=self.webpackChunknextcloud=self.webpackChunknextcloud||[];n.forEach(e.bind(null,0)),n.push=e.bind(null,n.push.bind(n))}(),r.nc=void 0;var o=r.O(void 0,[7874],(function(){return r(71328)}));o=r.O(o)}(); -//# sourceMappingURL=files-main.js.map?v=7c76b002800db3e3f925
\ No newline at end of file +!function(){"use strict";var e,n={1944:function(e,n,i){var r=i(17499),o=i(79954),a=i(31352),s=i(79753),l=i(45994),c=function(){var t,e,n,i,r=(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(r.path,"/").concat(r.name).replace(/\/\//gi,"/")},u=i(4820),d=i(20144),f=i(62520),p=i(64024),A=i(93455),v=i.n(A),h=i(70110),m=i.n(h);function g(t,e,n,i,r,o,a){try{var s=t[o](a),l=s.value}catch(t){return void n(t)}s.done?e(l):Promise.resolve(l).then(i,r)}function b(t){return function(){var e=this,n=arguments;return new Promise((function(i,r){var o=t.apply(e,n);function a(t){g(o,i,r,a,s,"next",t)}function s(t){g(o,i,r,a,s,"throw",t)}a(void 0)}))}}var w=function(){var t=b(regeneratorRuntime.mark((function t(){var e;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,u.default.get((0,s.generateOcsUrl)("apps/files/api/v1/templates"));case 2:return e=t.sent,t.abrupt("return",e.data.ocs.data);case 4:case"end":return t.stop()}}),t)})));return function(){return t.apply(this,arguments)}}(),y=function(){var t=b(regeneratorRuntime.mark((function t(e,n,i){var r;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,u.default.post((0,s.generateOcsUrl)("apps/files/api/v1/templates/create"),{filePath:e,templatePath:n,templateType:i});case 2:return r=t.sent,t.abrupt("return",r.data.ocs.data);case 4:case"end":return t.stop()}}),t)})));return function(e,n,i){return t.apply(this,arguments)}}(),C=256,_={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:function(){return{failedPreview:!1}},computed:{nameWithoutExt:function(){return this.basename.indexOf(".")>-1?this.basename.split(".").slice(0,-1).join("."):this.basename},id:function(){return"template-picker-".concat(this.fileid)},realPreviewUrl:function(){return this.failedPreview&&this.mimeIcon?this.mimeIcon:this.previewUrl?this.previewUrl:(0,l.ts)()?(0,s.generateUrl)("/core/preview?fileId=".concat(this.fileid,"&x=").concat(C,"&y=").concat(C,"&a=1")):(0,s.generateUrl)("/apps/files_sharing/publicpreview/".concat(document.getElementById("sharingToken")&&document.getElementById("sharingToken").value,"?fileId=").concat(this.fileid,"&file=").concat(function(t){var e=(t.startsWith("/")?t:"/".concat(t)).split("/"),n="";return e.forEach((function(t){""!==t&&(n+="/"+encodeURIComponent(t))})),n}(this.filename),"&x=").concat(C,"&y=").concat(C,"&a=1"))},mimeIcon:function(){return OC.MimeType.getIconUrl(this.mime)}},methods:{onCheck:function(){this.$emit("check",this.fileid)},onFailure:function(){this.failedPreview=!0}}},x=_,k=i(93379),S=i.n(k),P=i(7795),E=i.n(P),O=i(90569),N=i.n(O),I=i(3565),j=i.n(I),B=i(19216),F=i.n(B),T=i(44589),z=i.n(T),U=i(3491),D={};D.styleTagTransform=z(),D.setAttributes=j(),D.insert=N().bind(null,"head"),D.domAPI=E(),D.insertStyleElement=F(),S()(U.Z,D),U.Z&&U.Z.locals&&U.Z.locals;var R=i(51900),L=(0,R.Z)(x,(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,V=i(25108);function Z(t,e,n,i,r,o,a){try{var s=t[o](a),l=s.value}catch(t){return void n(t)}s.done?e(l):Promise.resolve(l).then(i,r)}function q(t){return function(){var e=this,n=arguments;return new Promise((function(i,r){var o=t.apply(e,n);function a(t){Z(o,i,r,a,s,"next",t)}function s(t){Z(o,i,r,a,s,"throw",t)}a(void 0)}))}}var G={name:"TemplatePicker",components:{NcEmptyContent:v(),NcModal:m(),TemplatePreview:L},props:{logger:{type:Object,required:!0}},data:function(){return{checked:-1,loading:!1,name:null,opened:!1,provider:null}},computed:{nameWithoutExt:function(){return this.name.indexOf(".")>-1?this.name.split(".").slice(0,-1).join("."):this.name},emptyTemplate:function(){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:function(){var t=this;return this.provider.templates.find((function(e){return e.fileid===t.checked}))},style:function(){return{"--margin":"8px","--width":"160px","--border":"2px","--fullwidth":"180px","--height":this.provider.ratio?Math.round(160/this.provider.ratio)+"px":null}}},methods:{open:function(t,e){var n=this;return q(regeneratorRuntime.mark((function i(){var r,o;return regeneratorRuntime.wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return n.checked=n.emptyTemplate.fileid,n.name=t,n.provider=e,i.next=5,w();case 5:if(r=i.sent,null!==(o=r.find((function(t){return t.app===e.app&&t.label===e.label})))){i.next=9;break}throw new Error("Failed to match provider in results");case 9:if(n.provider=o,0!==o.templates.length){i.next=13;break}return n.onSubmit(),i.abrupt("return");case 13:n.opened=!0;case 14:case"end":return i.stop()}}),i)})))()},close:function(){this.checked=this.emptyTemplate.fileid,this.loading=!1,this.name=null,this.opened=!1,this.provider=null},onCheck:function(t){this.checked=t},onSubmit:function(){var t=this;return q(regeneratorRuntime.mark((function e(){var n,i,r,o,a,s,l,u,d,A,v,h,m;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t.loading=!0,o=c(),a=null===(n=OCA)||void 0===n||null===(i=n.Files)||void 0===i||null===(r=i.App)||void 0===r?void 0:r.currentFileList,t.nameWithoutExt===t.name&&(t.logger.debug("Fixed invalid filename",{name:t.name,extension:null===(s=t.provider)||void 0===s?void 0:s.extension}),t.name=t.name+(null===(l=t.provider)||void 0===l?void 0:l.extension)),e.prev=4,e.next=7,y((0,f.normalize)("".concat(o,"/").concat(t.name)),null===(u=t.selectedTemplate)||void 0===u?void 0:u.filename,null===(d=t.selectedTemplate)||void 0===d?void 0:d.templateType);case 7:return A=e.sent,t.logger.debug("Created new file",A),e.next=11,null==a?void 0:a.addAndFetchFileInfo(t.name).then((function(t,e){return e}));case 11:v=e.sent,h=new OCA.Files.FileInfoModel(v,{filesClient:null==a?void 0:a.filesClient}),(m=OCA.Files.fileActions.getDefaultFileAction(A.mime,"file",OC.PERMISSION_ALL))&&m.action(A.basename,{$file:null==a?void 0:a.findFileEl(t.name),dir:o,fileList:a,fileActions:null==a?void 0:a.fileActions,fileInfoModel:h}),t.close(),e.next=23;break;case 18:e.prev=18,e.t0=e.catch(4),t.logger.error("Error while creating the new file from template"),V.error(e.t0),(0,p.x2)(t.t("files","Unable to create new file from template"));case 23:return e.prev=23,t.loading=!1,e.finish(23);case 26:case"end":return e.stop()}}),e,null,[[4,18,23,26]])})))()}}},M=G,$=i(5103),W={};W.styleTagTransform=z(),W.setAttributes=j(),W.insert=N().bind(null,"head"),W.domAPI=E(),W.insertStyleElement=F(),S()($.Z,W),$.Z&&$.Z.locals&&$.Z.locals;var H=(0,R.Z)(M,(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),Y=H.exports;function K(t,e,n,i,r,o,a){try{var s=t[o](a),l=s.value}catch(t){return void n(t)}s.done?e(l):Promise.resolve(l).then(i,r)}var Q=(0,r.IY)().setApp("files").detectUser().build();d.default.mixin({methods:{t:a.Iu,n:a.uN}});var J=document.createElement("div");J.id="template-picker",document.body.appendChild(J);var X=(0,o.j)("files","templates",[]),tt=(0,o.j)("files","templates_path",!1);Q.debug("Templates providers",X),Q.debug("Templates folder",{templatesPath:tt});var et=new(d.default.extend(Y))({name:"TemplatePicker",propsData:{logger:Q}});et.$mount("#template-picker"),window.addEventListener("DOMContentLoaded",(function(){if(!tt){Q.debug("Templates folder not initialized");var t={attach:function(t){t.addMenuEntry({id:"template-init",displayName:(0,a.Iu)("files","Set up templates folder"),templateName:(0,a.Iu)("files","Templates"),iconClass:"icon-template-add",fileType:"file",actionHandler:function(e){it(e),t.removeMenuEntry("template-init")}})}};OC.Plugins.register("OCA.Files.NewFileMenu",t)}})),X.forEach((function(t,e){var n={attach:function(n){var 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:function(e){et.open(e,t)}})}};OC.Plugins.register("OCA.Files.NewFileMenu",n)}));var nt,it=function(){var t,e=(t=regeneratorRuntime.mark((function t(e){var n,i;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return n=(c()+"/".concat(e)).replace("//","/"),t.prev=1,Q.debug("Initializing the templates directory",{templatePath:n}),t.next=5,u.default.post((0,s.generateOcsUrl)("apps/files/api/v1/templates/path"),{templatePath:n,copySystemTemplates:!0});case 5:i=t.sent,OCA.Files.App.currentFileList.changeDirectory(n,!0,!0),X=i.data.ocs.data.templates,tt=i.data.ocs.data.template_path,t.next=15;break;case 11:t.prev=11,t.t0=t.catch(1),Q.error("Unable to initialize the templates directory"),(0,p.x2)((0,a.Iu)("files","Unable to initialize the templates directory"));case 15:case"end":return t.stop()}}),t,null,[[1,11]])})),function(){var e=this,n=arguments;return new Promise((function(i,r){var o=t.apply(e,n);function a(t){K(o,i,r,a,s,"next",t)}function s(t){K(o,i,r,a,s,"throw",t)}a(void 0)}))});return function(t){return e.apply(this,arguments)}}(),rt=i(78595);nt={attach:function(t){var e=this;(0,rt.Ld)("nextcloud:unified-search.search",(function(e){var n=e.query;t.setFilter(n)})),(0,rt.Ld)("nextcloud:unified-search.reset",(function(){e.query=null,t.setFilter("")}))}},window.OC.Plugins.register("OCA.Files.FileList",nt);var ot=i(91770),at=i(78510),st=(0,r.IY)().setApp("files").detectUser().build();function lt(t){return lt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},lt(t)}function ct(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,ut(i.key),i)}}function ut(t){var e=function(t,e){if("object"!==lt(t)||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,e);if("object"!==lt(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t,"string");return"symbol"===lt(e)?e:String(e)}var dt,ft=function(){function t(e){var n,i,r;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),n=this,r=void 0,(i=ut(i="_action"))in n?Object.defineProperty(n,i,{value:r,enumerable:!0,configurable:!0,writable:!0}):n[i]=r,this.validateAction(e),this._action=e}var e,n;return e=t,(n=[{key:"id",get:function(){return this._action.id}},{key:"displayName",get:function(){return this._action.displayName}},{key:"iconSvgInline",get:function(){return this._action.iconSvgInline}},{key:"enabled",get:function(){return this._action.enabled}},{key:"exec",get:function(){return this._action.exec}},{key:"execBatch",get:function(){return this._action.execBatch}},{key:"order",get:function(){return this._action.order}},{key:"default",get:function(){return this._action.default}},{key:"inline",get:function(){return this._action.inline}},{key:"renderInline",get:function(){return this._action.renderInline}},{key:"validateAction",value:function(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")}}])&&ct(e.prototype,n),Object.defineProperty(e,"prototype",{writable:!1}),t}(),pt=function(){return window._nc_fileactions||[]};function At(t,e,n,i,r,o,a){try{var s=t[o](a),l=s.value}catch(t){return void n(t)}s.done?e(l):Promise.resolve(l).then(i,r)}function vt(t){return function(){var e=this,n=arguments;return new Promise((function(i,r){var o=t.apply(e,n);function a(t){At(o,i,r,a,s,"next",t)}function s(t){At(o,i,r,a,s,"throw",t)}a(void 0)}))}}function ht(t){return ht="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},ht(t)}function mt(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,i)}return n}function gt(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?mt(Object(n),!0).forEach((function(e){bt(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):mt(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}function bt(t,e,n){return(e=function(t){var e=function(t,e){if("object"!==ht(t)||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,e);if("object"!==ht(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t,"string");return"symbol"===ht(e)?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}dt=new ft({id:"delete",displayName:function(t,e){return"trashbin"===e.id?(0,a.Iu)("files_trashbin","Delete permanently"):(0,a.Iu)("files","Delete")},iconSvgInline:function(){return at},enabled:function(t){return t.length>0&&t.map((function(t){return t.permissions})).every((function(t){return 0!=(t&ot.y3.DELETE)}))},exec:function(t){return vt(regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,u.default.delete(t.source);case 3:return(0,rt.j8)("files:file:deleted",t),e.abrupt("return",!0);case 7:return e.prev=7,e.t0=e.catch(0),st.error("Error while deleting a file",{error:e.t0,source:t.source,node:t}),e.abrupt("return",!1);case 11:case"end":return e.stop()}}),e,null,[[0,7]])})))()},execBatch:function(t,e){var n=this;return vt(regeneratorRuntime.mark((function i(){return regeneratorRuntime.wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return i.abrupt("return",Promise.all(t.map((function(t){return n.exec(t,e)}))));case 1:case"end":return i.stop()}}),i)})))()},order:100}),void 0===window._nc_fileactions&&(window._nc_fileactions=[],st.debug("FileActions initialized")),window._nc_fileactions.find((function(t){return t.id===dt.id}))?st.error("FileAction ".concat(dt.id," already registered"),{action:dt}):window._nc_fileactions.push(dt);var wt=function(t){var e=t.id,n=t.name,i=t.order,r=t.icon,o=t.parent,a=t.classes,s=void 0===a?"":a,l=t.expanded,c=t.params;OCP.Files.Navigation.register({id:e,name:n,order:i,params:c,parent:o,expanded:!0===l,iconClass:r?"icon-".concat(r):"nav-icon-"+e,legacy:!0,sticky:s.includes("pinned")})},yt=i(59305),Ct=i(41487),_t=i.n(Ct);function xt(t){return xt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},xt(t)}function kt(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,Pt(i.key),i)}}function St(t,e,n){return(e=Pt(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function Pt(t){var e=function(t,e){if("object"!==xt(t)||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,e);if("object"!==xt(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t,"string");return"symbol"===xt(e)?e:String(e)}var Et=function(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),St(this,"_views",[]),St(this,"_currentView",null),st.debug("Navigation service initialized")}var e,n;return e=t,(n=[{key:"register",value:function(t){try{Nt(t),Ot(t,this._views)}catch(e){throw e instanceof Error&&st.error(e.message,{view:t}),e}t.legacy&&st.warn("Legacy view detected, please migrate to Vue"),t.iconClass&&(t.legacy=!0),this._views.push(t)}},{key:"views",get:function(){return this._views}},{key:"setActive",value:function(t){this._currentView=t}},{key:"active",get:function(){return this._currentView}}])&&kt(e.prototype,n),Object.defineProperty(e,"prototype",{writable:!1}),t}(),Ot=function(t,e){if(e.find((function(e){return e.id===t.id})))throw new Error("Navigation id ".concat(t.id," is already registered"));return!0},Nt=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||!_t()(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(It),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},It=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};function jt(t,e,n,i,r,o,a){try{var s=t[o](a),l=s.value}catch(t){return void n(t)}s.done?e(l):Promise.resolve(l).then(i,r)}function Bt(t){return function(){var e=this,n=arguments;return new Promise((function(i,r){var o=t.apply(e,n);function a(t){jt(o,i,r,a,s,"next",t)}function s(t){jt(o,i,r,a,s,"throw",t)}a(void 0)}))}}var Ft=i(57638),Tt=i(55209),zt=i.n(Tt),Ut=i(14032),Dt=i.n(Ut),Rt=i(91211),Lt=i.n(Rt),Vt=i(28615),Zt=i(74184),qt=i(48959),Gt=i.n(qt);function Mt(t,e,n,i,r,o,a){try{var s=t[o](a),l=s.value}catch(t){return void n(t)}s.done?e(l):Promise.resolve(l).then(i,r)}function $t(t){return function(){var e=this,n=arguments;return new Promise((function(i,r){var o=t.apply(e,n);function a(t){Mt(o,i,r,a,s,"next",t)}function s(t){Mt(o,i,r,a,s,"throw",t)}a(void 0)}))}}var Wt={name:"NavigationQuota",components:{ChartPie:Zt.Z,NcAppNavigationItem:Dt(),NcProgressBar:Gt()},data:function(){return{loadingStorageStats:!1,storageStats:(0,o.j)("files","storageStats",null)}},computed:{storageStatsTitle:function(){var t,e,n,i=(0,ot.sS)(null===(t=this.storageStats)||void 0===t?void 0:t.used),r=(0,ot.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:r})},storageStatsTooltip:function(){return this.storageStats.relative?this.t("files","{relative}% used",this.storageStats):""}},beforeMount:function(){setInterval(this.throttleUpdateStorageStats,6e4),(0,rt.Ld)("files:file:created",this.throttleUpdateStorageStats),(0,rt.Ld)("files:file:deleted",this.throttleUpdateStorageStats),(0,rt.Ld)("files:file:moved",this.throttleUpdateStorageStats),(0,rt.Ld)("files:file:updated",this.throttleUpdateStorageStats),(0,rt.Ld)("files:folder:created",this.throttleUpdateStorageStats),(0,rt.Ld)("files:folder:deleted",this.throttleUpdateStorageStats),(0,rt.Ld)("files:folder:moved",this.throttleUpdateStorageStats),(0,rt.Ld)("files:folder:updated",this.throttleUpdateStorageStats)},methods:{debounceUpdateStorageStats:(0,Vt.D)(200,(function(t){this.updateStorageStats(t)})),throttleUpdateStorageStats:(0,Vt.P)(1e3,(function(t){this.updateStorageStats(t)})),updateStorageStats:function(){var e=arguments,n=this;return $t(regeneratorRuntime.mark((function i(){var r,o,a;return regeneratorRuntime.wrap((function(i){for(;;)switch(i.prev=i.next){case 0:if(r=e.length>0&&void 0!==e[0]?e[0]:null,!n.loadingStorageStats){i.next=3;break}return i.abrupt("return");case 3:return n.loadingStorageStats=!0,i.prev=4,i.next=7,u.default.get((0,s.generateUrl)("/apps/files/api/v1/stats"));case 7:if(null!=(a=i.sent)&&null!==(o=a.data)&&void 0!==o&&o.data){i.next=10;break}throw new Error("Invalid storage stats");case 10:n.storageStats=a.data.data,i.next=17;break;case 13:i.prev=13,i.t0=i.catch(4),st.error("Could not refresh storage stats",{error:i.t0}),r&&(0,p.x2)(t("files","Could not refresh storage stats"));case 17:return i.prev=17,n.loadingStorageStats=!1,i.finish(17);case 20:case"end":return i.stop()}}),i,null,[[4,13,17,20]])})))()},t:a.Iu}},Ht=Wt,Yt=i(358),Kt={};Kt.styleTagTransform=z(),Kt.setAttributes=j(),Kt.insert=N().bind(null,"head"),Kt.domAPI=E(),Kt.insertStyleElement=F(),S()(Yt.Z,Kt),Yt.Z&&Yt.Z.locals&&Yt.Z.locals;var Qt=(0,R.Z)(Ht,(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,"26c061ec",null),Jt=Qt.exports,Xt=i(68988),te=i.n(Xt),ee=i(16809),ne=i.n(ee),ie=i(20571),re=i.n(ie),oe=i(70386),ae=i(36029),se=i.n(ae),le={name:"Setting",props:{el:{type:Function,required:!0}},mounted:function(){this.$el.appendChild(this.el())}},ce=(0,R.Z)(le,(function(){return(0,this._self._c)("div")}),[],!1,null,null,null).exports;function ue(t,e,n,i,r,o,a){try{var s=t[o](a),l=s.value}catch(t){return void n(t)}s.done?e(l):Promise.resolve(l).then(i,r)}var de=(0,o.j)("files","config",{show_hidden:!1,crop_image_previews:!0}),fe=function(){var t=(0,yt.Q_)("userconfig",{state:function(){return{userConfig:de}},actions:{onUpdate:function(t,e){d.default.set(this.userConfig,t,e)},update:function(t,e){return(n=regeneratorRuntime.mark((function n(){return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,u.default.post((0,s.generateUrl)("/apps/files/api/v1/config/"+t),{value:e});case 2:(0,rt.j8)("files:config:updated",{key:t,value:e});case 3:case"end":return n.stop()}}),n)})),function(){var t=this,e=arguments;return new Promise((function(i,r){var o=n.apply(t,e);function a(t){ue(o,i,r,a,s,"next",t)}function s(t){ue(o,i,r,a,s,"throw",t)}a(void 0)}))})();var n}}}),e=t();return e.initialized||((0,rt.Ld)("files:config:updated",(function(t){var n=t.key,i=t.value;e.onUpdate(n,i)})),e.initialized=!0),e};function pe(t,e,n,i,r,o,a){try{var s=t[o](a),l=s.value}catch(t){return void n(t)}s.done?e(l):Promise.resolve(l).then(i,r)}var Ae={name:"Settings",components:{Clipboard:oe.Z,NcAppSettingsDialog:te(),NcAppSettingsSection:ne(),NcCheckboxRadioSwitch:re(),NcInputField:se(),Setting:ce},props:{open:{type:Boolean,default:!1}},setup:function(){return{userConfigStore:fe()}},data:function(){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,s.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,s.generateUrl)("/settings/user/security#generate-app-token-section"),webdavUrlCopied:!1}},computed:{userConfig:function(){return this.userConfigStore.userConfig}},beforeMount:function(){this.settings.forEach((function(t){return t.open()}))},beforeDestroy:function(){this.settings.forEach((function(t){return t.close()}))},methods:{onClose:function(){this.$emit("close")},setConfig:function(t,e){this.userConfigStore.update(t,e)},copyCloudId:function(){var e,n=this;return(e=regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(document.querySelector("input#webdav-url-input").select(),navigator.clipboard){e.next=4;break}return(0,p.x2)(t("files","Clipboard is not available")),e.abrupt("return");case 4:return e.next=6,navigator.clipboard.writeText(n.webdavUrl);case 6:n.webdavUrlCopied=!0,(0,p.s$)(t("files","WebDAV URL copied to clipboard")),setTimeout((function(){n.webdavUrlCopied=!1}),5e3);case 9:case"end":return e.stop()}}),e)})),function(){var t=this,n=arguments;return new Promise((function(i,r){var o=e.apply(t,n);function a(t){pe(o,i,r,a,s,"next",t)}function s(t){pe(o,i,r,a,s,"throw",t)}a(void 0)}))})()},t:a.Iu}},ve=Ae,he=i(20613),me={};me.styleTagTransform=z(),me.setAttributes=j(),me.insert=N().bind(null,"head"),me.domAPI=E(),me.insertStyleElement=F(),S()(he.Z,me),he.Z&&he.Z.locals&&he.Z.locals;var ge=(0,R.Z)(ve,(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,"2e129f40",null).exports;function be(t){return be="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},be(t)}function we(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,i)}return n}function ye(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?we(Object(n),!0).forEach((function(e){Ce(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):we(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}function Ce(t,e,n){return(e=function(t){var e=function(t,e){if("object"!==be(t)||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,e);if("object"!==be(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t,"string");return"symbol"===be(e)?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function _e(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,i=new Array(e);n<e;n++)i[n]=t[n];return i}var xe={name:"Navigation",components:{Cog:Ft.default,NavigationQuota:Jt,NcAppNavigation:zt(),NcAppNavigationItem:Dt(),NcIconSvgWrapper:Lt(),SettingsModal:ge},props:{Navigation:{type:Et,required:!0}},data:function(){return{settingsOpened:!1}},computed:{currentViewId:function(){var t,e;return(null===(t=this.$route)||void 0===t||null===(e=t.params)||void 0===e?void 0:e.view)||"files"},currentView:function(){var t=this;return this.views.find((function(e){return e.id===t.currentViewId}))},views:function(){return this.Navigation.views},parentViews:function(){return this.views.filter((function(t){return!t.parent})).sort((function(t,e){return t.order-e.order}))},childViews:function(){return this.views.filter((function(t){return!!t.parent})).reduce((function(t,e){return t[e.parent]=[].concat(function(t){if(Array.isArray(t))return _e(t)}(n=t[e.parent]||[])||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(n)||function(t,e){if(t){if("string"==typeof t)return _e(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?_e(t,e):void 0}}(n)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(),[e]),t[e.parent].sort((function(t,e){return t.order-e.order})),t;var n}),{})}},watch:{currentView:function(t,e){(null==t?void 0:t.id)!==(null==e?void 0:e.id)&&(this.Navigation.setActive(t),st.debug("Navigation changed",{id:t.id,view:t}),this.showView(t,e))}},beforeMount:function(){var t=this;this.currentView&&(st.debug("Navigation mounted. Showing requested view",{view:this.currentView}),this.showView(this.currentView)),(0,rt.Ld)("files:legacy-navigation:changed",this.onLegacyNavigationChanged),(0,rt.Ld)("files:legacy-view:initialized",(function(){st.debug("Legacy view initialized",ye({},t.currentView)),t.showView(t.currentView)}))},methods:{showView:function(t,e){var n,i,r,o,a,s,l;if(null===(n=window)||void 0===n||null===(i=n.OCA)||void 0===i||null===(r=i.Files)||void 0===r||null===(o=r.Sidebar)||void 0===o||null===(a=o.close)||void 0===a||a.call(o),null!=t&&t.legacy){var c=document.querySelector("#app-content #app-content-"+this.currentView.id+".viewcontainer");document.querySelectorAll("#app-content .viewcontainer").forEach((function(t){t.classList.add("hidden")})),c.classList.remove("hidden");var u=OC.Util.History.parseUrlQuery().dir,d=void 0===u?"/":u,f={itemId:t.id,dir:d};st.debug("Triggering legacy navigation event",f),window.jQuery(c).trigger(new window.jQuery.Event("show",f)),window.jQuery(c).trigger(new window.jQuery.Event("urlChanged",f))}this.Navigation.setActive(t),s=t.name,(l=document.getElementById("page-heading-level-1"))&&(l.textContent=s),(0,rt.j8)("files:navigation:changed",t)},onLegacyNavigationChanged:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{id:"files"},e=t.id,n=this.Navigation.views.find((function(t){return t.id===e}));n&&n.legacy&&n.id!==this.currentView.id&&(this.$router.replace(ye(ye({},this.$route),{},{params:{view:n.id}})),this.Navigation.setActive(n),this.showView(n))},onToggleExpand:function(t){t.expanded=!t.expanded,u.default.post((0,s.generateUrl)("/apps/files/api/v1/toggleShowFolder/".concat(t.id)),{show:t.expanded})},generateToNavigation:function(t){if(t.params){var e=t.params,n=e.dir,i=e.fileid;return{name:"filelist",params:t.params,query:{dir:n,fileid:i}}}return{name:"filelist",params:{view:t.id}}},openSettings:function(){this.settingsOpened=!0},onSettingsClose:function(){this.settingsOpened=!1},t:a.Iu}},ke=xe,Se=i(65581),Pe={};Pe.styleTagTransform=z(),Pe.setAttributes=j(),Pe.insert=N().bind(null,"head"),Pe.domAPI=E(),Pe.insertStyleElement=F(),S()(Se.Z,Pe),Se.Z&&Se.Z.locals&&Se.Z.locals;var Ee=(0,R.Z)(ke,(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:n.expanded,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(i){return e("NcAppNavigationItem",{key:i.id,attrs:{"data-cy-files-navigation-item":i.id,exact:!0,icon:i.iconClass,title:i.name,to:t.generateToNavigation(i)}},[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,"4238b71c",null),Oe=Ee.exports,Ne=i(23664),Ie=i(69680),je=i.n(Ie),Be=i(10861),Fe=i.n(Be),Te=i(64192),ze=i.n(Te),Ue=i(33581);function De(t){return De="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},De(t)}function Re(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,i)}return n}function Le(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?Re(Object(n),!0).forEach((function(e){Ve(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Re(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}function Ve(t,e,n){return(e=function(t){var e=function(t,e){if("object"!==De(t)||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,e);if("object"!==De(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t,"string");return"symbol"===De(e)?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}var Ze=function(){var t=(0,yt.Q_)("files",{state:function(){return{files:{},roots:{}}},getters:{getNode:function(t){return function(e){return t.files[e]}},getNodes:function(t){return function(e){return e.map((function(e){return t.files[e]})).filter(Boolean)}},getRoot:function(t){return function(e){return t.roots[e]}}},actions:{updateNodes:function(t){var e=t.reduce((function(t,e){return e.attributes.fileid?(t[e.attributes.fileid]=e,t):(st.warn("Trying to update/set a node without fileid",e),t)}),{});d.default.set(this,"files",Le(Le({},this.files),e))},deleteNodes:function(t){var e=this;t.forEach((function(t){t.fileid&&d.default.delete(e.files,t.fileid)}))},setRoot:function(t){var e=t.service,n=t.root;d.default.set(this.roots,e,n)},onCreatedNode:function(){},onDeletedNode:function(t){this.deleteNodes([t])},onMovedNode:function(){}}})();return t.initialized||((0,rt.Ld)("files:file:created",t.onCreatedNode),(0,rt.Ld)("files:file:deleted",t.onDeletedNode),(0,rt.Ld)("files:file:moved",t.onMovedNode),(0,rt.Ld)("files:folder:created",t.onCreatedNode),(0,rt.Ld)("files:folder:deleted",t.onDeletedNode),(0,rt.Ld)("files:folder:moved",t.onMovedNode),t.initialized=!0),t},qe=function(){var t=(0,yt.Q_)("paths",{state:function(){return{}},getters:{getPath:function(t){return function(e,n){if(t[e])return t[e][n]}}},actions:{addPath:function(t){this[t.service]||d.default.set(this,t.service,{}),d.default.set(this[t.service],t.path,t.fileid)}}}),e=t();return e.initialized||(e.initialized=!0),e},Ge=(0,yt.Q_)("selection",{state:function(){return{selected:[]}},actions:{set:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];d.default.set(this,"selected",t)},reset:function(){d.default.set(this,"selected",[])}}}),Me=function(t,e,n){return u.default.post((0,s.generateUrl)("/apps/files/api/v1/sorting"),{mode:t,direction:e,view:n})},$e=(0,o.j)("files","filesSortingConfig",{}),We=(0,yt.Q_)("sorting",{state:function(){return{filesSortingConfig:$e}},getters:{isAscSorting:function(t){return function(){var e,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"files";return"desc"!==(null===(e=t.filesSortingConfig[n])||void 0===e?void 0:e.direction)}},getSortingMode:function(t){return function(){var e,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"files";return null===(e=t.filesSortingConfig[n])||void 0===e?void 0:e.mode}}},actions:{setSortingBy:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"basename",e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"files",n=this.filesSortingConfig[e]||{};n.mode=t,n.direction="asc",d.default.set(this.filesSortingConfig,e,n),Me(n.mode,n.direction,e)},toggleSortingDirection:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"files",e=this.filesSortingConfig[t]||{direction:"asc"},n="asc"===e.direction?"desc":"asc";e.direction=n,d.default.set(this.filesSortingConfig,t,e),Me(e.mode,e.direction,t)}}}),He=i(15764),Ye=i(64412),Ke=i.n(Ye),Qe=i(44706),Je=i.n(Qe);function Xe(t){return Xe="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Xe(t)}function tn(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,i)}return n}function en(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?tn(Object(n),!0).forEach((function(e){nn(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):tn(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}function nn(t,e,n){return(e=function(t){var e=function(t,e){if("object"!==Xe(t)||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,e);if("object"!==Xe(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t,"string");return"symbol"===Xe(e)?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function rn(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,i=new Array(e);n<e;n++)i[n]=t[n];return i}var on=d.default.extend({name:"BreadCrumbs",components:{Home:He.Z,NcBreadcrumbs:Je(),NcBreadcrumb:Ke()},props:{path:{type:String,default:"/"}},computed:{dirs:function(){var t,e,n=this.path.split("/").filter(Boolean).map((t="/",function(e){return t+="".concat(e,"/")}));return["/"].concat((e=n.map((function(t){return t.replace(/^(.+)\/$/,"$1")})),function(t){if(Array.isArray(t))return rn(t)}(e)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(e)||function(t,e){if(t){if("string"==typeof t)return rn(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?rn(t,e):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()))},sections:function(){var t=this;return this.dirs.map((function(e){var n=en(en({},t.$route),{},{query:{dir:e}});return{dir:e,exact:!0,name:(0,f.basename)(e),to:n}}))}},methods:{onClick:function(t){var e;(null==t||null===(e=t.query)||void 0===e?void 0:e.dir)===this.$route.query.dir&&this.$emit("reload")},ariaLabel:function(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)}}}),an=on,sn=i(94023),ln={};ln.styleTagTransform=z(),ln.setAttributes=j(),ln.insert=N().bind(null,"head"),ln.domAPI=E(),ln.insertStyleElement=F(),S()(sn.Z,ln),sn.Z&&sn.Z.locals&&sn.Z.locals;var cn=(0,R.Z)(an,(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,"260f47ba",null).exports,un=i(35212),dn=i(20296),fn=i(30266),pn=i(3443),An=i.n(pn),vn=i(79855),hn=i(34829),mn=i(45400),gn=i.n(mn),bn=i(12945),wn=i.n(bn),yn=function(t){return caches.open("previews").then((function(e){return e.match(t).then((function(t){return!!t}))}))},Cn={name:"CustomElementRender",props:{source:{type:Object,required:!0},currentView:{type:Object,required:!0},render:{type:Function,required:!0}},computed:{element:function(){return this.render(this.source,this.currentView)}},watch:{element:function(){this.$el.replaceWith(this.element),this.$el=this.element}},mounted:function(){this.$el.replaceWith(this.element),this.$el=this.element}},_n=(0,R.Z)(Cn,(function(){return(0,this._self._c)("span")}),[],!1,null,null,null).exports,xn=i(27856),kn={name:"CustomSvgIconRender",props:{svg:{type:String,required:!0}},watch:{svg:function(){this.$el.innerHTML=(0,xn.sanitize)(this.svg)}},mounted:function(){this.$el.innerHTML=(0,xn.sanitize)(this.svg)}},Sn=i(41929),Pn={};Pn.styleTagTransform=z(),Pn.setAttributes=j(),Pn.insert=N().bind(null,"head"),Pn.domAPI=E(),Pn.insertStyleElement=F(),S()(Sn.Z,Pn),Sn.Z&&Sn.Z.locals&&Sn.Z.locals;var En=(0,R.Z)(kn,(function(){return(0,this._self._c)("span",{staticClass:"custom-svg-icon"})}),[],!1,null,"6646d6a5",null).exports;function On(t){return On="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},On(t)}function Nn(t,e,n,i,r,o,a){try{var s=t[o](a),l=s.value}catch(t){return void n(t)}s.done?e(l):Promise.resolve(l).then(i,r)}function In(t){return function(){var e=this,n=arguments;return new Promise((function(i,r){var o=t.apply(e,n);function a(t){Nn(o,i,r,a,s,"next",t)}function s(t){Nn(o,i,r,a,s,"throw",t)}a(void 0)}))}}function jn(t){return function(t){if(Array.isArray(t))return Bn(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(t){if("string"==typeof t)return Bn(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Bn(t,e):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Bn(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,i=new Array(e);n<e;n++)i[n]=t[n];return i}function Fn(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,i)}return n}function Tn(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?Fn(Object(n),!0).forEach((function(e){zn(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Fn(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}function zn(t,e,n){return(e=function(t){var e=function(t,e){if("object"!==On(t)||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,e);if("object"!==On(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t,"string");return"symbol"===On(e)?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}var Un=pt(),Dn=d.default.extend({name:"FileEntry",components:{CustomElementRender:_n,CustomSvgIconRender:En,FileIcon:vn.Z,FolderIcon:hn.default,Fragment:fn.HY,NcActionButton:gn(),NcActions:wn(),NcCheckboxRadioSwitch:re(),NcLoadingIcon:ze()},props:{active:{type:Boolean,default:!1},isSizeAvailable:{type:Boolean,default:!1},source:{type:Object,required:!0},index:{type:Number,required:!0}},setup:function(){return{filesStore:Ze(),selectionStore:Ge(),userConfigStore:fe()}},data:function(){return{backgroundFailed:!1,backgroundImage:"",loading:""}},computed:{userConfig:function(){return this.userConfigStore.userConfig},currentView:function(){return this.$navigation.active},columns:function(){var t;return(null===(t=this.currentView)||void 0===t?void 0:t.columns)||[]},dir:function(){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:function(){return this.source.attributes.fileid},displayName:function(){return this.source.attributes.displayName||this.source.basename},size:function(){var t=parseInt(this.source.size,10)||0;return"number"!=typeof t||t<0?this.t("files","Pending"):(0,ot.sS)(t,!0)},sizeOpacity:function(){var t=parseInt(this.source.size,10)||0;return!t||t<0?1:.7+(1-.7)*Math.pow(this.source.size/10485760,2)},linkTo:function(){if("folder"===this.source.type){var t=Tn(Tn({},this.$route),{},{query:{dir:(0,f.join)(this.dir,this.source.basename)}});return{is:"router-link",title:this.t("files","Open folder {name}",{name:this.displayName}),to:t}}return{href:this.source.source,title:this.t("files","Download file {name}",{name:this.displayName})}},selectedFiles:{get:function(){return this.selectionStore.selected},set:function(t){st.debug("Changed nodes selection",{selection:t}),this.selectionStore.set(t)}},cropPreviews:function(){return this.userConfig.crop_image_previews},previewUrl:function(){try{var 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?"1":"0"),t.href}catch(t){return null}},mimeIconUrl:function(){var t,e,n,i=this.source.mime||"application/octet-stream",r=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 r?"url(".concat(r,")"):""},enabledActions:function(){var t=this;return Un.filter((function(e){return!e.enabled||e.enabled([t.source],t.currentView)})).sort((function(t,e){return(t.order||0)-(e.order||0)}))},enabledInlineActions:function(){var t=this;return this.enabledActions.filter((function(e){var n;return null==e||null===(n=e.inline)||void 0===n?void 0:n.call(e,t.source,t.currentView)}))},enabledMenuActions:function(){return[].concat(jn(this.enabledInlineActions),jn(Un.filter((function(t){return!t.inline}))))},uniqueId:function(){return this.hashCode(this.source.source)}},watch:{active:function(t,e){if(!1===t&&!0===e)return this.resetState(),void(this.$el.parentNode.style.display="none");this.$el.parentNode.style.display=""},previewUrl:function(){this.clearImg(),this.debounceIfNotCached()}},mounted:function(){this.debounceGetPreview=(0,dn.debounce)((function(){this.fetchAndApplyPreview()}),150,!1),this.debounceIfNotCached()},beforeDestroy:function(){this.resetState()},methods:{debounceIfNotCached:function(){var t=this;return In(regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t.previewUrl){e.next=2;break}return e.abrupt("return");case 2:return e.next=4,yn(t.previewUrl);case 4:if(!e.sent){e.next=9;break}return t.backgroundImage="url(".concat(t.previewUrl,")"),t.backgroundFailed=!1,e.abrupt("return");case 9:t.debounceGetPreview();case 10:case"end":return e.stop()}}),e)})))()},fetchAndApplyPreview:function(){var t=this;this.previewUrl&&(this.previewPromise&&this.clearImg(),this.previewPromise=new(An())((function(e,n,i){var r=new Image;r.fetchpriority=t.active?"high":"auto",r.onload=function(){t.backgroundImage="url(".concat(t.previewUrl,")"),t.backgroundFailed=!1,e(r)},r.onerror=function(){t.backgroundFailed=!0,n(r)},r.src=t.previewUrl,i((function(){r.onerror=null,r.onload=null,r.src=""}))})))},resetState:function(){var t,e,n;this.loading="",this.clearImg(),null===(t=this.$refs)||void 0===t||null===(e=t.actionsMenu)||void 0===e||null===(n=e.closeMenu)||void 0===n||n.call(e)},clearImg:function(){this.backgroundImage="",this.backgroundFailed=!1,this.previewPromise&&(this.previewPromise.cancel(),this.previewPromise=null)},hashCode:function(t){for(var e=0,n=0,i=t.length;n<i;n++)e=(e<<5)-e+t.charCodeAt(n),e|=0;return e},onActionClick:function(t){var e=this;return In(regeneratorRuntime.mark((function n(){var i;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return i=t.displayName([e.source],e.currentView),n.prev=1,e.loading=t.id,n.next=5,t.exec(e.source,e.currentView);case 5:if(!n.sent){n.next=9;break}return(0,p.s$)(e.t("files",'"{displayName}" action executed successfully',{displayName:i})),n.abrupt("return");case 9:(0,p.x2)(e.t("files",'"{displayName}" action failed',{displayName:i})),n.next=16;break;case 12:n.prev=12,n.t0=n.catch(1),st.error("Error while executing action",{action:t,e:n.t0}),(0,p.x2)(e.t("files",'"{displayName}" action failed',{displayName:i}));case 16:return n.prev=16,e.loading="",n.finish(16);case 19:case"end":return n.stop()}}),n,null,[[1,12,16,19]])})))()},t:a.Iu,formatFileSize:ot.sS}}),Rn=Dn,Ln=i(57562),Vn={};Vn.styleTagTransform=z(),Vn.setAttributes=j(),Vn.insert=N().bind(null,"head"),Vn.domAPI=E(),Vn.insertStyleElement=F(),S()(Ln.Z,Vn),Ln.Z&&Ln.Z.locals&&Ln.Z.locals;var Zn=i(72033),qn={};qn.styleTagTransform=z(),qn.setAttributes=j(),qn.insert=N().bind(null,"head"),qn.domAPI=E(),qn.insertStyleElement=F(),S()(Zn.Z,qn),Zn.Z&&Zn.Z.locals&&Zn.Z.locals;var Gn=(0,R.Z)(Rn,(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.toString(),name:"selectedFiles"},on:{"update:checked":function(e){t.selectedFiles=e}}}):t._e()],1),t._v(" "),e("td",{staticClass:"files-list__row-name"},[e("a",t._b({ref:"name"},"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")],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:{"force-title":!0,inline:t.enabledInlineActions.length}},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}},[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)},[t.active?e("CustomElementRender",{attrs:{"current-view":t.currentView,render:n.render,source:t.source}}):t._e()],1)}))],2)}),[],!1,null,"50e87a0e",null),Mn=Gn.exports;function $n(t){return $n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},$n(t)}var Wn=d.default.extend({name:"FilesListFooter",components:{},props:{isSizeAvailable:{type:Boolean,default:!1},nodes:{type:Array,required:!0},summary:{type:String,default:""}},setup:function(){var t=qe();return{filesStore:Ze(),pathsStore:t}},computed:{currentView:function(){return this.$navigation.active},dir:function(){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:function(){var t;if(null!==(t=this.currentView)&&void 0!==t&&t.id){if("/"===this.dir)return this.filesStore.getRoot(this.currentView.id);var e=this.pathsStore.getPath(this.currentView.id,this.dir);return this.filesStore.getNode(e)}},columns:function(){var t;return(null===(t=this.currentView)||void 0===t?void 0:t.columns)||[]},totalSize:function(){var t;return null!==(t=this.currentFolder)&&void 0!==t&&t.size?(0,ot.sS)(this.currentFolder.size,!0):(0,ot.sS)(this.nodes.reduce((function(t,e){return t+e.size||0}),0),!0)}},methods:{classForColumn:function(t){return e={"files-list__row-column-custom":!0},n="files-list__row-".concat(this.currentView.id,"-").concat(t.id),i=!0,(n=function(t){var e=function(t,e){if("object"!==$n(t)||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,e);if("object"!==$n(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t,"string");return"symbol"===$n(e)?e:String(e)}(n))in e?Object.defineProperty(e,n,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[n]=i,e;var e,n,i},t:a.Iu}}),Hn=i(34689),Yn={};Yn.styleTagTransform=z(),Yn.setAttributes=j(),Yn.insert=N().bind(null,"head"),Yn.domAPI=E(),Yn.insertStyleElement=F(),S()(Hn.Z,Yn),Hn.Z&&Hn.Z.locals&&Hn.Z.locals;var Kn=(0,R.Z)(Wn,(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,"3a8b911c",null).exports;function Qn(t,e,n,i,r,o,a){try{var s=t[o](a),l=s.value}catch(t){return void n(t)}s.done?e(l):Promise.resolve(l).then(i,r)}var Jn=pt(),Xn=d.default.extend({name:"FilesListHeaderActions",components:{CustomSvgIconRender:En,NcActions:wn(),NcActionButton:gn(),NcLoadingIcon:ze()},props:{currentView:{type:Object,required:!0},selectedNodes:{type:Array,default:function(){return[]}}},setup:function(){return{filesStore:Ze(),selectionStore:Ge()}},data:function(){return{loading:null}},computed:{enabledActions:function(){var t=this;return Jn.filter((function(t){return t.execBatch})).filter((function(e){return!e.enabled||e.enabled(t.nodes,t.currentView)})).sort((function(t,e){return(t.order||0)-(e.order||0)}))},nodes:function(){var t=this;return this.selectedNodes.map((function(e){return t.getNode(e)})).filter((function(t){return t}))}},methods:{getNode:function(t){return this.filesStore.getNode(t)},onActionClick:function(t){var e,n=this;return(e=regeneratorRuntime.mark((function e(){var i,r,o,a;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return i=t.displayName(n.nodes,n.currentView),r=n.selectedNodes,e.prev=2,n.loading=t.id,e.next=6,t.execBatch(n.nodes,n.currentView);case 6:if(!(o=e.sent).some((function(t){return!0!==t}))){e.next=12;break}return a=r.filter((function(t,e){return!0!==o[e]})),n.selectionStore.set(a),(0,p.x2)(n.t("files",'"{displayName}" failed on some elements ',{displayName:i})),e.abrupt("return");case 12:(0,p.s$)(n.t("files",'"{displayName}" batch action executed successfully',{displayName:i})),n.selectionStore.reset(),e.next=20;break;case 16:e.prev=16,e.t0=e.catch(2),st.error("Error while executing action",{action:t,e:e.t0}),(0,p.x2)(n.t("files",'"{displayName}" action failed',{displayName:i}));case 20:return e.prev=20,n.loading=null,e.finish(20);case 23:case"end":return e.stop()}}),e,null,[[2,16,20,23]])})),function(){var t=this,n=arguments;return new Promise((function(i,r){var o=e.apply(t,n);function a(t){Qn(o,i,r,a,s,"next",t)}function s(t){Qn(o,i,r,a,s,"throw",t)}a(void 0)}))})()},t:a.Iu}}),ti=Xn,ei=i(98532),ni={};ni.styleTagTransform=z(),ni.setAttributes=j(),ni.insert=N().bind(null,"head"),ni.domAPI=E(),ni.insertStyleElement=F(),S()(ei.Z,ni),ei.Z&&ei.Z.locals&&ei.Z.locals;var ii=(0,R.Z)(ti,(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,"force-title":!0,inline:3}},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,"1dfa1154",null),ri=ii.exports,oi=i(20404),ai=i(23873);function si(t){return si="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},si(t)}function li(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,i)}return n}function ci(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?li(Object(n),!0).forEach((function(e){ui(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):li(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}function ui(t,e,n){return(e=function(t){var e=function(t,e){if("object"!==si(t)||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,e);if("object"!==si(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t,"string");return"symbol"===si(e)?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}var di=d.default.extend({name:"FilesListHeaderButton",components:{MenuDown:oi.Z,MenuUp:ai.Z,NcButton:Fe()},inject:["toggleSortBy"],props:{name:{type:String,required:!0},mode:{type:String,required:!0}},setup:function(){return{sortingStore:We()}},computed:ci(ci({},(0,yt.rn)(We,["filesSortingConfig"])),{},{currentView:function(){return this.$navigation.active},sortingMode:function(){return this.sortingStore.getSortingMode(this.currentView.id)||this.currentView.defaultSortKey||"basename"},isAscSorting:function(){return!0===this.sortingStore.isAscSorting(this.currentView.id)}}),methods:{sortAriaLabel:function(t){var 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:a.Iu}}),fi=i(33096),pi={};pi.styleTagTransform=z(),pi.setAttributes=j(),pi.insert=N().bind(null,"head"),pi.domAPI=E(),pi.insertStyleElement=F(),S()(fi.Z,pi),fi.Z&&fi.Z.locals&&fi.Z.locals;var Ai=(0,R.Z)(di,(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;function vi(t){return vi="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},vi(t)}function hi(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,i)}return n}function mi(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?hi(Object(n),!0).forEach((function(e){gi(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):hi(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}function gi(t,e,n){return(e=function(t){var e=function(t,e){if("object"!==vi(t)||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,e);if("object"!==vi(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t,"string");return"symbol"===vi(e)?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}var bi=d.default.extend({name:"FilesListHeader",components:{FilesListHeaderButton:Ai,NcCheckboxRadioSwitch:re(),FilesListHeaderActions:ri},provide:function(){return{toggleSortBy:this.toggleSortBy}},props:{isSizeAvailable:{type:Boolean,default:!1},nodes:{type:Array,required:!0}},setup:function(){return{filesStore:Ze(),selectionStore:Ge(),sortingStore:We()}},computed:mi(mi({},(0,yt.rn)(We,["filesSortingConfig"])),{},{currentView:function(){return this.$navigation.active},columns:function(){var t;return(null===(t=this.currentView)||void 0===t?void 0:t.columns)||[]},dir:function(){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:function(){var 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:function(){return this.selectionStore.selected},isAllSelected:function(){return this.selectedNodes.length===this.nodes.length},isNoneSelected:function(){return 0===this.selectedNodes.length},isSomeSelected:function(){return!this.isAllSelected&&!this.isNoneSelected},sortingMode:function(){return this.sortingStore.getSortingMode(this.currentView.id)||this.currentView.defaultSortKey||"basename"},isAscSorting:function(){return!0===this.sortingStore.isAscSorting(this.currentView.id)}}),methods:{classForColumn:function(t){return gi({"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:function(t){if(t){var e=this.nodes.map((function(t){return t.attributes.fileid.toString()}));st.debug("Added all nodes to selection",{selection:e}),this.selectionStore.set(e)}else st.debug("Cleared selection"),this.selectionStore.reset()},toggleSortBy:function(t){this.sortingMode!==t?this.sortingStore.setSortingBy(t,this.currentView.id):this.sortingStore.toggleSortingDirection(this.currentView.id)},t:a.Iu}}),wi=i(52652),yi={};yi.styleTagTransform=z(),yi.setAttributes=j(),yi.insert=N().bind(null,"head"),yi.domAPI=E(),yi.insertStyleElement=F(),S()(wi.Z,yi),wi.Z&&wi.Z.locals&&wi.Z.locals;var Ci=(0,R.Z)(bi,(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,"7f9e4535",null).exports,_i=d.default.extend({name:"FilesListVirtual",components:{RecycleScroller:un.EK,FileEntry:Mn,FilesListHeader:Ci,FilesListFooter:Kn},props:{currentView:{type:Object,required:!0},nodes:{type:Array,required:!0}},data:function(){return{FileEntry:Mn}},computed:{files:function(){return this.nodes.filter((function(t){return"file"===t.type}))},summaryFile:function(){var t=this.files.length;return(0,a.uN)("files","{count} file","{count} files",t,{count:t})},summaryFolder:function(){var t=this.nodes.length-this.files.length;return(0,a.uN)("files","{count} folder","{count} folders",t,{count:t})},summary:function(){return(0,a.Iu)("files","{summaryFile} and {summaryFolder}",this)},isSizeAvailable:function(){return this.nodes.some((function(t){return void 0!==t.attributes.size}))}},mounted:function(){var t=this.$el.querySelectorAll(".vue-recycle-scroller__slot");t[0].setAttribute("role","thead"),t[1].setAttribute("role","tfoot")},methods:{getFileId:function(t){return t.attributes.fileid},t:a.Iu}}),xi=i(40483),ki={};ki.styleTagTransform=z(),ki.setAttributes=j(),ki.insert=N().bind(null,"head"),ki.domAPI=E(),ki.insertStyleElement=F(),S()(xi.Z,ki),xi.Z&&xi.Z.locals&&xi.Z.locals;var Si=(0,R.Z)(_i,(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){var i=n.item,r=n.active,o=n.index;return[e("FileEntry",{attrs:{active:r,index:o,"is-size-available":t.isSizeAvailable,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:{"is-size-available":t.isSizeAvailable,nodes:t.nodes}})]},proxy:!0},{key:"after",fn:function(){return[e("FilesListFooter",{attrs:{"is-size-available":t.isSizeAvailable,nodes:t.nodes,summary:t.summary}})]},proxy:!0}])})}),[],!1,null,"6f4155ff",null).exports;function Pi(t){return Pi="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Pi(t)}function Ei(t,e,n,i,r,o,a){try{var s=t[o](a),l=s.value}catch(t){return void n(t)}s.done?e(l):Promise.resolve(l).then(i,r)}function Oi(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,i)}return n}function Ni(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?Oi(Object(n),!0).forEach((function(e){Ii(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Oi(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}function Ii(t,e,n){return(e=function(t){var e=function(t,e){if("object"!==Pi(t)||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,e);if("object"!==Pi(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t,"string");return"symbol"===Pi(e)?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function ji(t){return function(t){if(Array.isArray(t))return Bi(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(t){if("string"==typeof t)return Bi(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Bi(t,e):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Bi(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,i=new Array(e);n<e;n++)i[n]=t[n];return i}var Fi=d.default.extend({name:"FilesList",components:{BreadCrumbs:cn,FilesListVirtual:Si,NcAppContent:je(),NcButton:Fe(),NcEmptyContent:v(),NcLoadingIcon:ze(),TrashCan:Ue.Z},setup:function(){var t=qe();return{filesStore:Ze(),pathsStore:t,selectionStore:Ge(),sortingStore:We()}},data:function(){return{loading:!0,promise:null}},computed:{currentView:function(){return this.$navigation.active||this.$navigation.views.find((function(t){return"files"===t.id}))},dir:function(){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:function(){var t;if(null!==(t=this.currentView)&&void 0!==t&&t.id){if("/"===this.dir)return this.filesStore.getRoot(this.currentView.id);var e=this.pathsStore.getPath(this.currentView.id,this.dir);return this.filesStore.getNode(e)}},sortingMode:function(){return this.sortingStore.getSortingMode(this.currentView.id)||this.currentView.defaultSortKey||"basename"},isAscSorting:function(){return!0===this.sortingStore.isAscSorting(this.currentView.id)},dirContents:function(){var t,e=this;if(!this.currentView)return[];var n=this.currentView.columns.find((function(t){return t.id===e.sortingMode}));if(null!=n&&n.sort&&"function"==typeof n.sort){var i,r=ji(((null===(i=this.currentFolder)||void 0===i?void 0:i.children)||[]).map(this.getNode).filter((function(t){return t}))).sort(n.sort);return this.isAscSorting?r:r.reverse()}return(0,Ne.X)(ji(((null===(t=this.currentFolder)||void 0===t?void 0:t.children)||[]).map(this.getNode).filter((function(t){return t}))),[].concat(ji("basename"===this.sortingMode?[function(t){return"folder"!==t.type}]:[]),[function(t){return t[e.sortingMode]},function(t){return t.basename}]),this.isAscSorting?["asc","asc","asc"]:["desc","desc","desc"])},isEmptyDir:function(){return 0===this.dirContents.length},isRefreshing:function(){return void 0!==this.currentFolder&&!this.isEmptyDir&&this.loading},toPreviousDir:function(){var t=this.dir.split("/").slice(0,-1).join("/")||"/";return Ni(Ni({},this.$route),{},{query:{dir:t}})}},watch:{currentView:function(t,e){(null==t?void 0:t.id)!==(null==e?void 0:e.id)&&(st.debug("View changed",{newView:t,oldView:e}),this.selectionStore.reset(),this.fetchContent())},dir:function(t,e){var n,i;st.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:{fetchContent:function(){var t,e=this;return(t=regeneratorRuntime.mark((function t(){var n,i,r,o,a,s,l;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(null===(n=e.currentView)||void 0===n||!n.legacy){t.next=2;break}return t.abrupt("return");case 2:return e.loading=!0,r=e.dir,o=e.currentView,"function"==typeof(null===(i=e.promise)||void 0===i?void 0:i.cancel)&&(e.promise.cancel(),st.debug("Cancelled previous ongoing fetch")),e.promise=o.getContents(r),t.prev=7,t.next=10,e.promise;case 10:a=t.sent,s=a.folder,l=a.contents,st.debug("Fetched contents",{dir:r,folder:s,contents:l}),e.filesStore.updateNodes(l),s.children=l.map((function(t){return t.attributes.fileid})),"/"===r?e.filesStore.setRoot({service:o.id,root:s}):s.attributes.fileid?(e.filesStore.updateNodes([s]),e.pathsStore.addPath({service:o.id,fileid:s.attributes.fileid,path:r})):st.error("Invalid root folder returned",{dir:r,folder:s,currentView:o}),l.filter((function(t){return"folder"===t.type})).forEach((function(t){e.pathsStore.addPath({service:o.id,fileid:t.attributes.fileid,path:(0,f.join)(r,t.basename)})})),t.next=24;break;case 21:t.prev=21,t.t0=t.catch(7),st.error("Error while fetching content",{error:t.t0});case 24:return t.prev=24,e.loading=!1,t.finish(24);case 27:case"end":return t.stop()}}),t,null,[[7,21,24,27]])})),function(){var e=this,n=arguments;return new Promise((function(i,r){var o=t.apply(e,n);function a(t){Ei(o,i,r,a,s,"next",t)}function s(t){Ei(o,i,r,a,s,"throw",t)}a(void 0)}))})()},getNode:function(t){return this.filesStore.getNode(t)},t:a.Iu}}),Ti=Fi,zi=i(37063),Ui={};Ui.styleTagTransform=z(),Ui.setAttributes=j(),Ui.insert=N().bind(null,"head"),Ui.domAPI=E(),Ui.insertStyleElement=F(),S()(zi.Z,Ui),zi.Z&&zi.Z.locals&&zi.Z.locals;var Di=(0,R.Z)(Ti,(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,"42495694",null).exports,Ri=i(25108);function Li(t){return Li="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Li(t)}function Vi(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,Zi(i.key),i)}}function Zi(t){var e=function(t,e){if("object"!==Li(t)||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,e);if("object"!==Li(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t,"string");return"symbol"===Li(e)?e:String(e)}var qi=function(){function t(){var e,n,i;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),e=this,i=void 0,(n=Zi(n="_settings"))in e?Object.defineProperty(e,n,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[n]=i,this._settings=[],Ri.debug("OCA.Files.Settings initialized")}var e,n;return e=t,(n=[{key:"register",value:function(t){return this._settings.filter((function(e){return e.name===t.name})).length>0?(Ri.error("A setting with the same name is already registered"),!1):(this._settings.push(t),!0)}},{key:"settings",get:function(){return this._settings}}])&&Vi(e.prototype,n),Object.defineProperty(e,"prototype",{writable:!1}),t}();function Gi(t){return Gi="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Gi(t)}function Mi(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,Wi(i.key),i)}}function $i(t,e,n){return(e=Wi(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function Wi(t){var e=function(t,e){if("object"!==Gi(t)||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,e);if("object"!==Gi(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t,"string");return"symbol"===Gi(e)?e:String(e)}var Hi=function(){function t(e,n){var i=n.el,r=n.open,o=n.close;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),$i(this,"_close",void 0),$i(this,"_el",void 0),$i(this,"_name",void 0),$i(this,"_open",void 0),this._name=e,this._el=i,this._open=r,this._close=o,"function"!=typeof this._open&&(this._open=function(){}),"function"!=typeof this._close&&(this._close=function(){})}var e,n;return e=t,(n=[{key:"name",get:function(){return this._name}},{key:"el",get:function(){return this._el}},{key:"open",get:function(){return this._open}},{key:"close",get:function(){return this._close}}])&&Mi(e.prototype,n),Object.defineProperty(e,"prototype",{writable:!1}),t}(),Yi=i(78345),Ki=i(17563);d.default.use(Yi.ZP);var Qi,Ji,Xi=new Yi.ZP({mode:"history",base:(0,s.generateUrl)("/apps/files",""),linkActiveClass:"active",routes:[{path:"/",alias:"/files"},{path:"/:view/:fileid?",name:"filelist",props:!0}],stringifyQuery:function(t){var e=(0,Ki.stringify)(t).replace(/%2F/gim,"/");return e?"?"+e:""}});window.OCA.Files=null!==(Qi=window.OCA.Files)&&void 0!==Qi?Qi:{},window.OCP.Files=null!==(Ji=window.OCP.Files)&&void 0!==Ji?Ji:{},d.default.use(yt.og);var tr=(0,yt.WB)(),er=new Et;Object.assign(window.OCP.Files,{Navigation:er}),d.default.prototype.$navigation=er;var nr,ir=new qi;Object.assign(window.OCA.Files,{Settings:ir}),Object.assign(window.OCA.Files.Settings,{Setting:Hi}),new(d.default.extend(Oe))({name:"FilesNavigationRoot",propsData:{Navigation:er},router:Xi,pinia:tr}).$mount("#app-navigation-files"),new(d.default.extend(Di))({name:"FilesListRoot",router:Xi,pinia:tr}).$mount("#app-content-vue"),(nr=Object.values((0,o.j)("files","navigation",{}))).length>0&&(st.debug("Legacy files views detected. Processing...",nr),nr.forEach((function(t){wt(t),t.sublist&&t.sublist.forEach((function(e){return wt(gt(gt({},e),{},{parent:t.id}))}))}))),"serviceWorker"in navigator?window.addEventListener("load",Bt(regeneratorRuntime.mark((function t(){var e,n;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.prev=0,e=(0,s.generateUrl)("/apps/files/preview-service-worker.js",{},{noRewrite:!0}),t.next=4,navigator.serviceWorker.register(e,{scope:"/"});case 4:n=t.sent,st.debug("SW registered: ",{registration:n}),t.next=11;break;case 8:t.prev=8,t.t0=t.catch(0),st.error("SW registration failed: ",{error:t.t0});case 11:case"end":return t.stop()}}),t,null,[[0,8]])})))):st.debug("Service Worker is not enabled on this browser.")},94023:function(t,e,n){var i=n(87537),r=n.n(i),o=n(23645),a=n.n(o)()(r());a.push([t.id,".breadcrumb[data-v-260f47ba]{flex:1 1 100% !important;width:100%}.breadcrumb[data-v-260f47ba] 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:""}]),e.Z=a},41929:function(t,e,n){var i=n(87537),r=n.n(i),o=n(23645),a=n.n(o)()(r());a.push([t.id,".custom-svg-icon[data-v-6646d6a5]{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-6646d6a5] 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:""}]),e.Z=a},57562:function(t,e,n){var i=n(87537),r=n.n(i),o=n(23645),a=n.n(o)()(r());a.push([t.id,"td[data-v-50e87a0e],th[data-v-50e87a0e]{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}td span[data-v-50e87a0e],th span[data-v-50e87a0e]{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.files-list__row-checkbox[data-v-50e87a0e]{justify-content:center}.files-list__row-checkbox[data-v-50e87a0e] .checkbox-radio-switch{display:flex;justify-content:center;--icon-size: var(--checkbox-size)}.files-list__row-checkbox[data-v-50e87a0e] .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__row-checkbox[data-v-50e87a0e] .checkbox-radio-switch .checkbox-radio-switch__icon{margin:0 !important}.files-list__row-icon[data-v-50e87a0e]{display:flex;align-items:center;justify-content:center;width:var(--icon-preview-size);height:100%;margin-right:var(--checkbox-padding);color:var(--color-primary-element)}.files-list__row-icon>span[data-v-50e87a0e]{justify-content:flex-start}.files-list__row-icon[data-v-50e87a0e] svg{width:var(--icon-preview-size);height:var(--icon-preview-size)}.files-list__row-icon-preview[data-v-50e87a0e]{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__row-name[data-v-50e87a0e]{overflow:hidden;flex:1 1 auto}.files-list__row-name a[data-v-50e87a0e]{display:flex;align-items:center;width:100%;height:100%}.files-list__row-name a:focus .files-list__row-name-text[data-v-50e87a0e],.files-list__row-name a:focus-visible .files-list__row-name-text[data-v-50e87a0e]{outline:2px solid var(--color-main-text) !important;border-radius:20px}.files-list__row-name .files-list__row-name-text[data-v-50e87a0e]{padding:5px 10px;margin-left:-10px}.files-list__row-actions[data-v-50e87a0e]{width:auto}.files-list__row-actions~td[data-v-50e87a0e],.files-list__row-actions~th[data-v-50e87a0e]{margin:0 var(--cell-margin)}.files-list__row-actions[data-v-50e87a0e]>button .button-vue__text{font-weight:normal}.files-list__row-actions[data-v-50e87a0e]>button:not(:hover,:focus,:active) .button-vue__wrapper{color:var(--color-text-maxcontrast)}.files-list__row-size[data-v-50e87a0e]{justify-content:flex-end;width:calc(var(--row-height)*1.5);color:var(--color-main-text)}.files-list__row-size[data-v-50e87a0e] .files-list__column-sort-button{padding:0 16px 0 4px !important}.files-list__row-size[data-v-50e87a0e] .files-list__column-sort-button .button-vue__wrapper{flex-direction:row}.files-list__row-column-custom[data-v-50e87a0e]{width:calc(var(--row-height)*2)}tr[data-v-50e87a0e]:hover,tr[data-v-50e87a0e]:focus,tr[data-v-50e87a0e]:active{background-color:var(--color-background-dark)}.files-list__row-icon-preview[data-v-50e87a0e]:not([style*=background]){background:var(--color-loading-dark)}","",{version:3,sources:["webpack://./apps/files/src/mixins/fileslist-row.scss","webpack://./apps/files/src/components/FileEntry.vue"],names:[],mappings:"AA4BA,wCACC,YAAA,CACA,kBAAA,CACA,aAAA,CACA,oBAAA,CACA,uBAAA,CACA,wBAAA,CACA,QAAA,CACA,SAAA,CACA,mCAAA,CACA,WAAA,CAKA,kDACC,eAAA,CACA,kBAAA,CACA,sBAAA,CAIF,2CACC,sBAAA,CACA,kEACC,YAAA,CACA,sBAAA,CAEA,iCAAA,CAEA,qGACC,2BAAA,CACA,4BAAA,CACA,QAAA,CACA,8DAAA,CAGD,+FACC,mBAAA,CAKH,uCACC,YAAA,CACA,kBAAA,CACA,sBAAA,CACA,8BAAA,CACA,WAAA,CAEA,oCAAA,CACA,kCAAA,CAEA,4CACC,0BAAA,CAGD,2CACC,8BAAA,CACA,+BAAA,CAGD,+CACC,eAAA,CACA,8BAAA,CACA,+BAAA,CACA,kCAAA,CACA,2BAAA,CAEA,0BAAA,CACA,uBAAA,CAIF,uCAEC,eAAA,CAEA,aAAA,CAEA,yCACC,YAAA,CACA,kBAAA,CAEA,UAAA,CACA,WAAA,CAGA,4JAEC,mDAAA,CACA,kBAAA,CAIF,kEAEC,gBAAA,CACA,iBAAA,CAIF,0CACC,UAAA,CAGA,0FAEC,2BAAA,CAIA,mEAEC,kBAAA,CAED,iGAEC,mCAAA,CAKH,uCAEC,wBAAA,CACA,iCAAA,CAEA,4BAAA,CAGA,uEACC,+BAAA,CACA,4FACC,kBAAA,CAKH,gDACC,+BAAA,CCnKA,+EAGC,6CAAA,CAKF,wEACI,oCAAA",sourcesContent:["/**\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\n/**\n * ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠\n * This file is for every column styling that must be\n * shared between BOTH the files list AND the list header.\n * ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠\n */\ntd, th {\n\tdisplay: flex;\n\talign-items: center;\n\tflex: 0 0 auto;\n\tjustify-content: left;\n\twidth: var(--row-height);\n\theight: var(--row-height);\n\tmargin: 0;\n\tpadding: 0;\n\tcolor: var(--color-text-maxcontrast);\n\tborder: none;\n\n\t// Columns should try to add any text\n\t// node wrapped in a span. That should help\n\t// with the ellipsis on overflow.\n\tspan {\n\t\toverflow: hidden;\n\t\twhite-space: nowrap;\n\t\ttext-overflow: ellipsis;\n\t}\n}\n\n.files-list__row-checkbox {\n\tjustify-content: center;\n\t&::v-deep .checkbox-radio-switch {\n\t\tdisplay: flex;\n\t\tjustify-content: center;\n\n\t\t--icon-size: var(--checkbox-size);\n\n\t\tlabel.checkbox-radio-switch__label {\n\t\t\twidth: var(--clickable-area);\n\t\t\theight: var(--clickable-area);\n\t\t\tmargin: 0;\n\t\t\tpadding: calc((var(--clickable-area) - var(--checkbox-size)) / 2);\n\t\t}\n\n\t\t.checkbox-radio-switch__icon {\n\t\t\tmargin: 0 !important;\n\t\t}\n\t}\n}\n\n.files-list__row-icon {\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\twidth: var(--icon-preview-size);\n\theight: 100%;\n\t// Show same padding as the checkbox right padding for visual balance\n\tmargin-right: var(--checkbox-padding);\n\tcolor: var(--color-primary-element);\n\n\t& > span {\n\t\tjustify-content: flex-start;\n\t}\n\n\t&::v-deep svg {\n\t\twidth: var(--icon-preview-size);\n\t\theight: var(--icon-preview-size);\n\t}\n\n\t&-preview {\n\t\toverflow: hidden;\n\t\twidth: var(--icon-preview-size);\n\t\theight: var(--icon-preview-size);\n\t\tborder-radius: var(--border-radius);\n\t\tbackground-repeat: no-repeat;\n\t\t// Center and contain the preview\n\t\tbackground-position: center;\n\t\tbackground-size: contain;\n\t}\n}\n\n.files-list__row-name {\n\t// Prevent link from overflowing\n\toverflow: hidden;\n\t// Take as much space as possible\n\tflex: 1 1 auto;\n\n\ta {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\t// Fill cell height and width\n\t\twidth: 100%;\n\t\theight: 100%;\n\n\t\t// Keyboard indicator a11y\n\t\t&:focus .files-list__row-name-text,\n\t\t&:focus-visible .files-list__row-name-text {\n\t\t\toutline: 2px solid var(--color-main-text) !important;\n\t\t\tborder-radius: 20px;\n\t\t}\n\t}\n\n\t.files-list__row-name-text {\n\t\t// Make some space for the outline\n\t\tpadding: 5px 10px;\n\t\tmargin-left: -10px;\n\t}\n}\n\n.files-list__row-actions {\n\twidth: auto;\n\n\t// Add margin to all cells after the actions\n\t& ~ td,\n\t& ~ th {\n\t\tmargin: 0 var(--cell-margin);\n\t}\n\n\t&::v-deep > button {\n\t\t.button-vue__text {\n\t\t\t// Remove bold from default button styling\n\t\t\tfont-weight: normal;\n\t\t}\n\t\t&:not(:hover, :focus, :active) .button-vue__wrapper {\n\t\t\t// Also apply color-text-maxcontrast to non-active button\n\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t}\n\t}\n}\n\n.files-list__row-size {\n\t// Right align text\n\tjustify-content: flex-end;\n\twidth: calc(var(--row-height) * 1.5);\n\t// opacity varies with the size\n\tcolor: var(--color-main-text);\n\n\t// Icon is before text since size is right aligned\n\t::v-deep .files-list__column-sort-button {\n\t\tpadding: 0 16px 0 4px !important;\n\t\t.button-vue__wrapper {\n\t\t\tflex-direction: row;\n\t\t}\n\t}\n}\n\n.files-list__row-column-custom {\n\twidth: calc(var(--row-height) * 2);\n}\n","\n@import '../mixins/fileslist-row.scss';\n\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:""}]),e.Z=a},34689:function(t,e,n){var i=n(87537),r=n.n(i),o=n(23645),a=n.n(o)()(r());a.push([t.id,"td[data-v-3a8b911c],th[data-v-3a8b911c]{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}td span[data-v-3a8b911c],th span[data-v-3a8b911c]{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.files-list__row-checkbox[data-v-3a8b911c]{justify-content:center}.files-list__row-checkbox[data-v-3a8b911c] .checkbox-radio-switch{display:flex;justify-content:center;--icon-size: var(--checkbox-size)}.files-list__row-checkbox[data-v-3a8b911c] .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__row-checkbox[data-v-3a8b911c] .checkbox-radio-switch .checkbox-radio-switch__icon{margin:0 !important}.files-list__row-icon[data-v-3a8b911c]{display:flex;align-items:center;justify-content:center;width:var(--icon-preview-size);height:100%;margin-right:var(--checkbox-padding);color:var(--color-primary-element)}.files-list__row-icon>span[data-v-3a8b911c]{justify-content:flex-start}.files-list__row-icon[data-v-3a8b911c] svg{width:var(--icon-preview-size);height:var(--icon-preview-size)}.files-list__row-icon-preview[data-v-3a8b911c]{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__row-name[data-v-3a8b911c]{overflow:hidden;flex:1 1 auto}.files-list__row-name a[data-v-3a8b911c]{display:flex;align-items:center;width:100%;height:100%}.files-list__row-name a:focus .files-list__row-name-text[data-v-3a8b911c],.files-list__row-name a:focus-visible .files-list__row-name-text[data-v-3a8b911c]{outline:2px solid var(--color-main-text) !important;border-radius:20px}.files-list__row-name .files-list__row-name-text[data-v-3a8b911c]{padding:5px 10px;margin-left:-10px}.files-list__row-actions[data-v-3a8b911c]{width:auto}.files-list__row-actions~td[data-v-3a8b911c],.files-list__row-actions~th[data-v-3a8b911c]{margin:0 var(--cell-margin)}.files-list__row-actions[data-v-3a8b911c]>button .button-vue__text{font-weight:normal}.files-list__row-actions[data-v-3a8b911c]>button:not(:hover,:focus,:active) .button-vue__wrapper{color:var(--color-text-maxcontrast)}.files-list__row-size[data-v-3a8b911c]{justify-content:flex-end;width:calc(var(--row-height)*1.5);color:var(--color-main-text)}.files-list__row-size[data-v-3a8b911c] .files-list__column-sort-button{padding:0 16px 0 4px !important}.files-list__row-size[data-v-3a8b911c] .files-list__column-sort-button .button-vue__wrapper{flex-direction:row}.files-list__row-column-custom[data-v-3a8b911c]{width:calc(var(--row-height)*2)}tr[data-v-3a8b911c]{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-3a8b911c]{user-select:none;color:var(--color-text-maxcontrast) !important}","",{version:3,sources:["webpack://./apps/files/src/mixins/fileslist-row.scss","webpack://./apps/files/src/components/FilesListFooter.vue"],names:[],mappings:"AA4BA,wCACC,YAAA,CACA,kBAAA,CACA,aAAA,CACA,oBAAA,CACA,uBAAA,CACA,wBAAA,CACA,QAAA,CACA,SAAA,CACA,mCAAA,CACA,WAAA,CAKA,kDACC,eAAA,CACA,kBAAA,CACA,sBAAA,CAIF,2CACC,sBAAA,CACA,kEACC,YAAA,CACA,sBAAA,CAEA,iCAAA,CAEA,qGACC,2BAAA,CACA,4BAAA,CACA,QAAA,CACA,8DAAA,CAGD,+FACC,mBAAA,CAKH,uCACC,YAAA,CACA,kBAAA,CACA,sBAAA,CACA,8BAAA,CACA,WAAA,CAEA,oCAAA,CACA,kCAAA,CAEA,4CACC,0BAAA,CAGD,2CACC,8BAAA,CACA,+BAAA,CAGD,+CACC,eAAA,CACA,8BAAA,CACA,+BAAA,CACA,kCAAA,CACA,2BAAA,CAEA,0BAAA,CACA,uBAAA,CAIF,uCAEC,eAAA,CAEA,aAAA,CAEA,yCACC,YAAA,CACA,kBAAA,CAEA,UAAA,CACA,WAAA,CAGA,4JAEC,mDAAA,CACA,kBAAA,CAIF,kEAEC,gBAAA,CACA,iBAAA,CAIF,0CACC,UAAA,CAGA,0FAEC,2BAAA,CAIA,mEAEC,kBAAA,CAED,iGAEC,mCAAA,CAKH,uCAEC,wBAAA,CACA,iCAAA,CAEA,4BAAA,CAGA,uEACC,+BAAA,CACA,4FACC,kBAAA,CAKH,gDACC,+BAAA,CCpKD,oBACC,oBAAA,CACA,wCAAA,CAEA,yCAAA,CACA,6BAAA,CAGD,oBACC,gBAAA,CAEA,8CAAA",sourcesContent:["/**\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\n/**\n * ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠\n * This file is for every column styling that must be\n * shared between BOTH the files list AND the list header.\n * ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠\n */\ntd, th {\n\tdisplay: flex;\n\talign-items: center;\n\tflex: 0 0 auto;\n\tjustify-content: left;\n\twidth: var(--row-height);\n\theight: var(--row-height);\n\tmargin: 0;\n\tpadding: 0;\n\tcolor: var(--color-text-maxcontrast);\n\tborder: none;\n\n\t// Columns should try to add any text\n\t// node wrapped in a span. That should help\n\t// with the ellipsis on overflow.\n\tspan {\n\t\toverflow: hidden;\n\t\twhite-space: nowrap;\n\t\ttext-overflow: ellipsis;\n\t}\n}\n\n.files-list__row-checkbox {\n\tjustify-content: center;\n\t&::v-deep .checkbox-radio-switch {\n\t\tdisplay: flex;\n\t\tjustify-content: center;\n\n\t\t--icon-size: var(--checkbox-size);\n\n\t\tlabel.checkbox-radio-switch__label {\n\t\t\twidth: var(--clickable-area);\n\t\t\theight: var(--clickable-area);\n\t\t\tmargin: 0;\n\t\t\tpadding: calc((var(--clickable-area) - var(--checkbox-size)) / 2);\n\t\t}\n\n\t\t.checkbox-radio-switch__icon {\n\t\t\tmargin: 0 !important;\n\t\t}\n\t}\n}\n\n.files-list__row-icon {\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\twidth: var(--icon-preview-size);\n\theight: 100%;\n\t// Show same padding as the checkbox right padding for visual balance\n\tmargin-right: var(--checkbox-padding);\n\tcolor: var(--color-primary-element);\n\n\t& > span {\n\t\tjustify-content: flex-start;\n\t}\n\n\t&::v-deep svg {\n\t\twidth: var(--icon-preview-size);\n\t\theight: var(--icon-preview-size);\n\t}\n\n\t&-preview {\n\t\toverflow: hidden;\n\t\twidth: var(--icon-preview-size);\n\t\theight: var(--icon-preview-size);\n\t\tborder-radius: var(--border-radius);\n\t\tbackground-repeat: no-repeat;\n\t\t// Center and contain the preview\n\t\tbackground-position: center;\n\t\tbackground-size: contain;\n\t}\n}\n\n.files-list__row-name {\n\t// Prevent link from overflowing\n\toverflow: hidden;\n\t// Take as much space as possible\n\tflex: 1 1 auto;\n\n\ta {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\t// Fill cell height and width\n\t\twidth: 100%;\n\t\theight: 100%;\n\n\t\t// Keyboard indicator a11y\n\t\t&:focus .files-list__row-name-text,\n\t\t&:focus-visible .files-list__row-name-text {\n\t\t\toutline: 2px solid var(--color-main-text) !important;\n\t\t\tborder-radius: 20px;\n\t\t}\n\t}\n\n\t.files-list__row-name-text {\n\t\t// Make some space for the outline\n\t\tpadding: 5px 10px;\n\t\tmargin-left: -10px;\n\t}\n}\n\n.files-list__row-actions {\n\twidth: auto;\n\n\t// Add margin to all cells after the actions\n\t& ~ td,\n\t& ~ th {\n\t\tmargin: 0 var(--cell-margin);\n\t}\n\n\t&::v-deep > button {\n\t\t.button-vue__text {\n\t\t\t// Remove bold from default button styling\n\t\t\tfont-weight: normal;\n\t\t}\n\t\t&:not(:hover, :focus, :active) .button-vue__wrapper {\n\t\t\t// Also apply color-text-maxcontrast to non-active button\n\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t}\n\t}\n}\n\n.files-list__row-size {\n\t// Right align text\n\tjustify-content: flex-end;\n\twidth: calc(var(--row-height) * 1.5);\n\t// opacity varies with the size\n\tcolor: var(--color-main-text);\n\n\t// Icon is before text since size is right aligned\n\t::v-deep .files-list__column-sort-button {\n\t\tpadding: 0 16px 0 4px !important;\n\t\t.button-vue__wrapper {\n\t\t\tflex-direction: row;\n\t\t}\n\t}\n}\n\n.files-list__row-column-custom {\n\twidth: calc(var(--row-height) * 2);\n}\n","\n@import '../mixins/fileslist-row.scss';\n\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:""}]),e.Z=a},52652:function(t,e,n){var i=n(87537),r=n.n(i),o=n(23645),a=n.n(o)()(r());a.push([t.id,"td[data-v-7f9e4535],th[data-v-7f9e4535]{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}td span[data-v-7f9e4535],th span[data-v-7f9e4535]{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.files-list__row-checkbox[data-v-7f9e4535]{justify-content:center}.files-list__row-checkbox[data-v-7f9e4535] .checkbox-radio-switch{display:flex;justify-content:center;--icon-size: var(--checkbox-size)}.files-list__row-checkbox[data-v-7f9e4535] .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__row-checkbox[data-v-7f9e4535] .checkbox-radio-switch .checkbox-radio-switch__icon{margin:0 !important}.files-list__row-icon[data-v-7f9e4535]{display:flex;align-items:center;justify-content:center;width:var(--icon-preview-size);height:100%;margin-right:var(--checkbox-padding);color:var(--color-primary-element)}.files-list__row-icon>span[data-v-7f9e4535]{justify-content:flex-start}.files-list__row-icon[data-v-7f9e4535] svg{width:var(--icon-preview-size);height:var(--icon-preview-size)}.files-list__row-icon-preview[data-v-7f9e4535]{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__row-name[data-v-7f9e4535]{overflow:hidden;flex:1 1 auto}.files-list__row-name a[data-v-7f9e4535]{display:flex;align-items:center;width:100%;height:100%}.files-list__row-name a:focus .files-list__row-name-text[data-v-7f9e4535],.files-list__row-name a:focus-visible .files-list__row-name-text[data-v-7f9e4535]{outline:2px solid var(--color-main-text) !important;border-radius:20px}.files-list__row-name .files-list__row-name-text[data-v-7f9e4535]{padding:5px 10px;margin-left:-10px}.files-list__row-actions[data-v-7f9e4535]{width:auto}.files-list__row-actions~td[data-v-7f9e4535],.files-list__row-actions~th[data-v-7f9e4535]{margin:0 var(--cell-margin)}.files-list__row-actions[data-v-7f9e4535]>button .button-vue__text{font-weight:normal}.files-list__row-actions[data-v-7f9e4535]>button:not(:hover,:focus,:active) .button-vue__wrapper{color:var(--color-text-maxcontrast)}.files-list__row-size[data-v-7f9e4535]{justify-content:flex-end;width:calc(var(--row-height)*1.5);color:var(--color-main-text)}.files-list__row-size[data-v-7f9e4535] .files-list__column-sort-button{padding:0 16px 0 4px !important}.files-list__row-size[data-v-7f9e4535] .files-list__column-sort-button .button-vue__wrapper{flex-direction:row}.files-list__row-column-custom[data-v-7f9e4535]{width:calc(var(--row-height)*2)}.files-list__column[data-v-7f9e4535]{user-select:none;color:var(--color-text-maxcontrast) !important}.files-list__column--sortable[data-v-7f9e4535]{cursor:pointer}","",{version:3,sources:["webpack://./apps/files/src/mixins/fileslist-row.scss","webpack://./apps/files/src/components/FilesListHeader.vue"],names:[],mappings:"AA4BA,wCACC,YAAA,CACA,kBAAA,CACA,aAAA,CACA,oBAAA,CACA,uBAAA,CACA,wBAAA,CACA,QAAA,CACA,SAAA,CACA,mCAAA,CACA,WAAA,CAKA,kDACC,eAAA,CACA,kBAAA,CACA,sBAAA,CAIF,2CACC,sBAAA,CACA,kEACC,YAAA,CACA,sBAAA,CAEA,iCAAA,CAEA,qGACC,2BAAA,CACA,4BAAA,CACA,QAAA,CACA,8DAAA,CAGD,+FACC,mBAAA,CAKH,uCACC,YAAA,CACA,kBAAA,CACA,sBAAA,CACA,8BAAA,CACA,WAAA,CAEA,oCAAA,CACA,kCAAA,CAEA,4CACC,0BAAA,CAGD,2CACC,8BAAA,CACA,+BAAA,CAGD,+CACC,eAAA,CACA,8BAAA,CACA,+BAAA,CACA,kCAAA,CACA,2BAAA,CAEA,0BAAA,CACA,uBAAA,CAIF,uCAEC,eAAA,CAEA,aAAA,CAEA,yCACC,YAAA,CACA,kBAAA,CAEA,UAAA,CACA,WAAA,CAGA,4JAEC,mDAAA,CACA,kBAAA,CAIF,kEAEC,gBAAA,CACA,iBAAA,CAIF,0CACC,UAAA,CAGA,0FAEC,2BAAA,CAIA,mEAEC,kBAAA,CAED,iGAEC,mCAAA,CAKH,uCAEC,wBAAA,CACA,iCAAA,CAEA,4BAAA,CAGA,uEACC,+BAAA,CACA,4FACC,kBAAA,CAKH,gDACC,+BAAA,CCtKD,qCACC,gBAAA,CAEA,8CAAA,CAEA,+CACC,cAAA",sourcesContent:["/**\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\n/**\n * ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠\n * This file is for every column styling that must be\n * shared between BOTH the files list AND the list header.\n * ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠\n */\ntd, th {\n\tdisplay: flex;\n\talign-items: center;\n\tflex: 0 0 auto;\n\tjustify-content: left;\n\twidth: var(--row-height);\n\theight: var(--row-height);\n\tmargin: 0;\n\tpadding: 0;\n\tcolor: var(--color-text-maxcontrast);\n\tborder: none;\n\n\t// Columns should try to add any text\n\t// node wrapped in a span. That should help\n\t// with the ellipsis on overflow.\n\tspan {\n\t\toverflow: hidden;\n\t\twhite-space: nowrap;\n\t\ttext-overflow: ellipsis;\n\t}\n}\n\n.files-list__row-checkbox {\n\tjustify-content: center;\n\t&::v-deep .checkbox-radio-switch {\n\t\tdisplay: flex;\n\t\tjustify-content: center;\n\n\t\t--icon-size: var(--checkbox-size);\n\n\t\tlabel.checkbox-radio-switch__label {\n\t\t\twidth: var(--clickable-area);\n\t\t\theight: var(--clickable-area);\n\t\t\tmargin: 0;\n\t\t\tpadding: calc((var(--clickable-area) - var(--checkbox-size)) / 2);\n\t\t}\n\n\t\t.checkbox-radio-switch__icon {\n\t\t\tmargin: 0 !important;\n\t\t}\n\t}\n}\n\n.files-list__row-icon {\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\twidth: var(--icon-preview-size);\n\theight: 100%;\n\t// Show same padding as the checkbox right padding for visual balance\n\tmargin-right: var(--checkbox-padding);\n\tcolor: var(--color-primary-element);\n\n\t& > span {\n\t\tjustify-content: flex-start;\n\t}\n\n\t&::v-deep svg {\n\t\twidth: var(--icon-preview-size);\n\t\theight: var(--icon-preview-size);\n\t}\n\n\t&-preview {\n\t\toverflow: hidden;\n\t\twidth: var(--icon-preview-size);\n\t\theight: var(--icon-preview-size);\n\t\tborder-radius: var(--border-radius);\n\t\tbackground-repeat: no-repeat;\n\t\t// Center and contain the preview\n\t\tbackground-position: center;\n\t\tbackground-size: contain;\n\t}\n}\n\n.files-list__row-name {\n\t// Prevent link from overflowing\n\toverflow: hidden;\n\t// Take as much space as possible\n\tflex: 1 1 auto;\n\n\ta {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\t// Fill cell height and width\n\t\twidth: 100%;\n\t\theight: 100%;\n\n\t\t// Keyboard indicator a11y\n\t\t&:focus .files-list__row-name-text,\n\t\t&:focus-visible .files-list__row-name-text {\n\t\t\toutline: 2px solid var(--color-main-text) !important;\n\t\t\tborder-radius: 20px;\n\t\t}\n\t}\n\n\t.files-list__row-name-text {\n\t\t// Make some space for the outline\n\t\tpadding: 5px 10px;\n\t\tmargin-left: -10px;\n\t}\n}\n\n.files-list__row-actions {\n\twidth: auto;\n\n\t// Add margin to all cells after the actions\n\t& ~ td,\n\t& ~ th {\n\t\tmargin: 0 var(--cell-margin);\n\t}\n\n\t&::v-deep > button {\n\t\t.button-vue__text {\n\t\t\t// Remove bold from default button styling\n\t\t\tfont-weight: normal;\n\t\t}\n\t\t&:not(:hover, :focus, :active) .button-vue__wrapper {\n\t\t\t// Also apply color-text-maxcontrast to non-active button\n\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t}\n\t}\n}\n\n.files-list__row-size {\n\t// Right align text\n\tjustify-content: flex-end;\n\twidth: calc(var(--row-height) * 1.5);\n\t// opacity varies with the size\n\tcolor: var(--color-main-text);\n\n\t// Icon is before text since size is right aligned\n\t::v-deep .files-list__column-sort-button {\n\t\tpadding: 0 16px 0 4px !important;\n\t\t.button-vue__wrapper {\n\t\t\tflex-direction: row;\n\t\t}\n\t}\n}\n\n.files-list__row-column-custom {\n\twidth: calc(var(--row-height) * 2);\n}\n","\n@import '../mixins/fileslist-row.scss';\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:""}]),e.Z=a},98532:function(t,e,n){var i=n(87537),r=n.n(i),o=n(23645),a=n.n(o)()(r());a.push([t.id,".files-list__row-actions-batch[data-v-1dfa1154]{flex:1 1 100% !important}.files-list__row-actions-batch[data-v-1dfa1154] .button-vue__wrapper{width:100%}.files-list__row-actions-batch[data-v-1dfa1154] .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:""}]),e.Z=a},33096:function(t,e,n){var i=n(87537),r=n.n(i),o=n(23645),a=n.n(o)()(r());a.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:""}]),e.Z=a},40483:function(t,e,n){var i=n(87537),r=n.n(i),o=n(23645),a=n.n(o)()(r());a.push([t.id,".files-list[data-v-6f4155ff]{--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-6f4155ff] tbody,.files-list[data-v-6f4155ff] .vue-recycle-scroller__slot{display:flex;flex-direction:column;width:100%;position:relative}.files-list[data-v-6f4155ff] .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-6f4155ff] tr{position:absolute;display:flex;align-items:center;width:100%;border-bottom:1px solid var(--color-border)}","",{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,CAQD,gCACC,iBAAA,CACA,YAAA,CACA,kBAAA,CACA,UAAA,CACA,2CAAA",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\t/**\n\t\t * Common row styling. tr are handled by\n\t\t * vue-virtual-scroller, so we need to\n\t\t * have those rules in here.\n\t\t */\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\t}\n}\n\n"],sourceRoot:""}]),e.Z=a},358:function(t,e,n){var i=n(87537),r=n.n(i),o=n(23645),a=n.n(o)()(r());a.push([t.id,".app-navigation-entry__settings-quota--not-unlimited[data-v-26c061ec] .app-navigation-entry__title{margin-top:-4px}.app-navigation-entry__settings-quota progress[data-v-26c061ec]{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:""}]),e.Z=a},3491:function(t,e,n){var i=n(87537),r=n.n(i),o=n(23645),a=n.n(o)()(r());a.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:""}]),e.Z=a},37063:function(t,e,n){var i=n(87537),r=n.n(i),o=n(23645),a=n.n(o)()(r());a.push([t.id,".app-content[data-v-42495694]{display:flex;overflow:hidden;flex-direction:column;max-height:100%}.app-content[data-v-42495694]:not(.app-content--hidden)+#app-content{display:none}.files-list__header[data-v-42495694]{display:flex;align-content:center;flex:0 0;margin:4px 4px 4px 50px}.files-list__header>*[data-v-42495694]{flex:0 0}.files-list__refresh-icon[data-v-42495694]{flex:0 0 44px;width:44px;height:44px}.files-list__loading-icon[data-v-42495694]{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:""}]),e.Z=a},65581:function(t,e,n){var i=n(87537),r=n.n(i),o=n(23645),a=n.n(o)()(r());a.push([t.id,".app-navigation[data-v-4238b71c] .app-navigation-entry-icon{background-repeat:no-repeat;background-position:center}.app-navigation>ul.app-navigation__list[data-v-4238b71c]{padding-bottom:var(--default-grid-baseline, 4px)}.app-navigation-entry__settings[data-v-4238b71c]{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:""}]),e.Z=a},20613:function(t,e,n){var i=n(87537),r=n.n(i),o=n(23645),a=n.n(o)()(r());a.push([t.id,".setting-link[data-v-2e129f40]: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:""}]),e.Z=a},5103:function(t,e,n){var i=n(87537),r=n.n(i),o=n(23645),a=n.n(o)()(r());a.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:""}]),e.Z=a},72033:function(t,e,n){var i=n(87537),r=n.n(i),o=n(23645),a=n.n(o)()(r());a.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:";AA4dA;;;;;;;;;;GAUA",sourcesContent:["\x3c!--\n - @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\n -\n - @author Gary Kim <gary@garykim.dev>\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.sync=\"selectedFiles\"\n\t\t\t\t:value=\"fileid.toString()\"\n\t\t\t\tname=\"selectedFiles\" />\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\">\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\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:force-title=\"true\"\n\t\t\t\t:inline=\"enabledInlineActions.length\">\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<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<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-fragment'\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 Vue from 'vue'\n\nimport { isCachedPreview } from '../services/PreviewService.ts'\nimport { getFileActions } from '../services/FileAction.ts'\nimport { useFilesStore } from '../store/files.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},\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},\n\n\tsetup() {\n\t\tconst filesStore = useFilesStore()\n\t\tconst selectionStore = useSelectionStore()\n\t\tconst userConfigStore = useUserConfigStore()\n\t\treturn {\n\t\t\tfilesStore,\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\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\n\t\tcolumns() {\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\n\t\tfileid() {\n\t\t\treturn this.source.attributes.fileid\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\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\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\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\tget() {\n\t\t\t\treturn this.selectionStore.selected\n\t\t\t},\n\t\t\tset(selection) {\n\t\t\t\tlogger.debug('Changed nodes selection', { selection })\n\t\t\t\tthis.selectionStore.set(selection)\n\t\t\t},\n\t\t},\n\n\t\tcropPreviews() {\n\t\t\treturn this.userConfig.crop_image_previews\n\t\t},\n\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 ? '1' : '0')\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\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\n\t\tenabledInlineActions() {\n\t\t\treturn this.enabledActions.filter(action => action?.inline?.(this.source, this.currentView))\n\t\t},\n\n\t\tenabledMenuActions() {\n\t\t\treturn [\n\t\t\t\t...this.enabledInlineActions,\n\t\t\t\t...actions.filter(action => !action.inline),\n\t\t\t]\n\t\t},\n\n\t\tuniqueId() {\n\t\t\treturn this.hashCode(this.source.source)\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\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.$refs?.actionsMenu?.closeMenu?.()\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\thashCode(str) {\n\t\t\tlet hash = 0\n\t\t\tfor (let i = 0, len = str.length; i < len; i++) {\n\t\t\t\tconst chr = str.charCodeAt(i)\n\t\t\t\thash = (hash << 5) - hash + chr\n\t\t\t\thash |= 0 // Convert to 32bit integer\n\t\t\t}\n\t\t\treturn hash\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\tthis.loading = action.id\n\t\t\t\tconst success = await action.exec(this.source, this.currentView)\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\tthis.loading = ''\n\t\t\t}\n\t\t},\n\n\t\tt: translate,\n\t\tformatFileSize,\n\t},\n})\n<\/script>\n\n<style scoped lang='scss'>\n@import '../mixins/fileslist-row.scss';\n\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:""}]),e.Z=a}},i={};function r(t){var e=i[t];if(void 0!==e)return e.exports;var o=i[t]={id:t,loaded:!1,exports:{}};return n[t].call(o.exports,o,o.exports,r),o.loaded=!0,o.exports}r.m=n,e=[],r.O=function(t,n,i,o){if(!n){var a=1/0;for(u=0;u<e.length;u++){n=e[u][0],i=e[u][1],o=e[u][2];for(var s=!0,l=0;l<n.length;l++)(!1&o||a>=o)&&Object.keys(r.O).every((function(t){return r.O[t](n[l])}))?n.splice(l--,1):(s=!1,o<a&&(a=o));if(s){e.splice(u--,1);var c=i();void 0!==c&&(t=c)}}return t}o=o||0;for(var u=e.length;u>0&&e[u-1][2]>o;u--)e[u]=e[u-1];e[u]=[n,i,o]},r.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return r.d(e,{a:e}),e},r.d=function(t,e){for(var n in e)r.o(e,n)&&!r.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),r.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r.nmd=function(t){return t.paths=[],t.children||(t.children=[]),t},r.j=2181,function(){r.b=document.baseURI||self.location.href;var t={2181:0};r.O.j=function(e){return 0===t[e]};var e=function(e,n){var i,o,a=n[0],s=n[1],l=n[2],c=0;if(a.some((function(e){return 0!==t[e]}))){for(i in s)r.o(s,i)&&(r.m[i]=s[i]);if(l)var u=l(r)}for(e&&e(n);c<a.length;c++)o=a[c],r.o(t,o)&&t[o]&&t[o][0](),t[o]=0;return r.O(u)},n=self.webpackChunknextcloud=self.webpackChunknextcloud||[];n.forEach(e.bind(null,0)),n.push=e.bind(null,n.push.bind(n))}(),r.nc=void 0;var o=r.O(void 0,[7874],(function(){return r(1944)}));o=r.O(o)}(); +//# sourceMappingURL=files-main.js.map?v=354bf8881bc9b1645ade
\ No newline at end of file diff --git a/dist/files-main.js.map b/dist/files-main.js.map index f14f5f1156d..de2ebef6227 100644 --- a/dist/files-main.js.map +++ b/dist/files-main.js.map @@ -1 +1 @@ -{"version":3,"file":"files-main.js?v=7c76b002800db3e3f925","mappings":";6BAAIA,sFC8CSC,EAAsB,WAAW,YACvCC,GAAoB,QAAH,EAAAC,WAAG,OAAO,QAAP,EAAH,EAAKC,aAAK,OAAK,QAAL,EAAV,EAAYC,WAAG,OAAiB,QAAjB,EAAf,EAAiBC,uBAAe,WAA7B,EAAH,EAAkCC,UACrD,CAAEC,KAAM,IAAKC,KAAM,IAGvB,MAAO,UAAGP,EAAeM,KAAI,YAAIN,EAAeO,MAAOC,QAAQ,SAAU,IAC1E,iZC3BO,IAAMC,EAAY,4CAAG,mHACJC,EAAAA,QAAAA,KAAUC,EAAAA,EAAAA,gBAAe,gCAA+B,OAAjE,OAARC,EAAW,EAAH,uBACPA,EAASC,KAAKC,IAAID,MAAI,2CAC7B,kBAHwB,mCAYZE,EAAkB,4CAAG,WAAeC,EAAUC,EAAcC,GAAY,sGAC7DR,EAAAA,QAAAA,MAAWC,EAAAA,EAAAA,gBAAe,sCAAuC,CACvFK,SAAAA,EACAC,aAAAA,EACAC,aAAAA,IACC,OAJY,OAARN,EAAW,EAAH,uBAKPA,EAASC,KAAKC,IAAID,MAAI,2CAC7B,gBAP8B,0CCiB/B,MAEA,GACAN,KAAAA,kBACAY,cAAAA,EAEAC,MAAAA,CACAC,SAAAA,CACAC,KAAAA,OACAC,UAAAA,GAEAC,QAAAA,CACAF,KAAAA,QACAG,SAAAA,GAEAC,OAAAA,CACAJ,KAAAA,CAAAA,OAAAA,QACAC,UAAAA,GAEAI,SAAAA,CACAL,KAAAA,OACAC,UAAAA,GAEAK,WAAAA,CACAN,KAAAA,OACAG,QAAAA,MAEAI,WAAAA,CACAP,KAAAA,QACAG,SAAAA,GAEAK,KAAAA,CACAR,KAAAA,OACAC,UAAAA,GAEAQ,MAAAA,CACAT,KAAAA,OACAG,QAAAA,OAIAZ,KAAAA,WACA,OACAmB,eAAAA,EAEA,EAEAC,SAAAA,CAMAC,eAAAA,WACA,iGACA,EAEAC,GAAAA,WACA,4CACA,EAEAC,eAAAA,WAEA,yCACA,cAGA,gBACA,iBFxFSC,EAAAA,EAAAA,OE8FT,sGAFA,6DFxFQC,SAASC,eAAe,iBAAmBD,SAASC,eAAe,gBAAgBC,MEwF3F,gDCxGuB,SAASlC,GAC/B,IAAMmC,GAAgBnC,EAAKoC,WAAW,KAAOpC,EAAO,IAAH,OAAOA,IAAQqC,MAAM,KAClEC,EAAe,GAMnB,OALAH,EAAaI,SAAQ,SAACC,GACL,KAAZA,IACHF,GAAgB,IAAMG,mBAAmBD,GAE3C,IACOF,CACR,CD+FA,wDAGA,EAEAI,SAAAA,WACA,wCACA,GAGAC,QAAAA,CACAC,QAAAA,WACA,+BACA,EACAC,UAAAA,WACA,qBACA,IE9I4L,oICWxLC,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,WALlD,eCFA,GAXgB,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,EAAIvB,GAAG,KAAO,QAAQ,KAAO,mBAAmB6B,SAAS,CAAC,QAAUN,EAAIlC,SAASyC,GAAG,CAAC,OAASP,EAAIR,WAAWQ,EAAIQ,GAAG,KAAKN,EAAG,QAAQ,CAACE,YAAY,yBAAyBC,MAAM,CAAC,IAAML,EAAIvB,KAAK,CAACyB,EAAG,MAAM,CAACE,YAAY,2BAA2BK,MAAMT,EAAI1B,cAAgB,mCAAqC,IAAI,CAAC4B,EAAG,MAAM,CAACE,YAAY,yBAAyBC,MAAM,CAAC,IAAML,EAAItB,eAAe,IAAM,GAAG,UAAY,SAAS6B,GAAG,CAAC,MAAQP,EAAIP,eAAeO,EAAIQ,GAAG,KAAKN,EAAG,OAAO,CAACE,YAAY,0BAA0B,CAACJ,EAAIQ,GAAG,WAAWR,EAAIU,GAAGV,EAAIxB,gBAAgB,eAC3sB,GACsB,IDUpB,EACA,KACA,WACA,MAI8B,+UEwDhC,IAIA,GACA3B,KAAAA,iBAEA8D,WAAAA,CACAC,eAAAA,IACAC,QAAAA,IACAC,gBAAAA,GAGApD,MAAAA,CACAqD,OAAAA,CACAnD,KAAAA,OACAC,UAAAA,IAIAV,KAAAA,WACA,OAEAW,SAAAA,EACAkD,SAAAA,EACAnE,KAAAA,KACAoE,QAAAA,EACAC,SAAAA,KAEA,EAEA3C,SAAAA,CAMAC,eAAAA,WACA,iCACA,2CACA,SACA,EAEA2C,cAAAA,WAAA,QACA,OACAxD,SAAAA,EAAAA,QAAAA,SACAK,QAAAA,EACAC,SAAAA,KAAAA,EAAAA,QAAAA,SACAE,YAAAA,EACAC,MAAAA,QAAAA,EAAAA,KAAAA,gBAAAA,IAAAA,OAAAA,EAAAA,EAAAA,UAAAA,MAAAA,QAAAA,EAAAA,KAAAA,gBAAAA,IAAAA,OAAAA,EAAAA,EAAAA,WAEA,EAEAgD,iBAAAA,WAAA,WACA,+EACA,EAOAC,MAAAA,WACA,OACA,iBACA,kBACA,iBACA,sBACA,0CAlEA,IAkEA,+BAEA,GAGA9B,QAAAA,CAOA+B,KAAAA,SAAAA,EAAAA,GAAA,kJAIA,OAFA,iCACA,SACA,sBAEAvE,IAAA,OACA,GADAwE,EAAAA,EAAAA,KAEAC,QADAA,EAAAA,EAAAA,MAAAA,SAAAA,GAAA,4CACAA,CAAA,qBACA,wDAIA,GAFA,aAGAA,IAAAA,EAAAA,UAAAA,OAAAA,CAAA,gBACA,+CAKA,uDApBA,EAqBA,EAKAC,MAAAA,WACA,uCACA,gBACA,eACA,eACA,kBACA,EAOAjC,QAAAA,SAAAA,GACA,cACA,EAEAkC,SAAAA,WAAA,wKASA,OARA,aACAC,EAAAA,IACAC,EAAAA,QAAAA,EAAAA,WAAAA,IAAAA,GAAAA,QAAAA,EAAAA,EAAAA,aAAAA,IAAAA,GAAAA,QAAAA,EAAAA,EAAAA,WAAAA,IAAAA,OAAAA,EAAAA,EAAAA,gBAGA,4BACA,yCAAA/E,KAAAA,EAAAA,KAAAgF,UAAAA,QAAAA,EAAAA,EAAAA,gBAAAA,IAAAA,OAAAA,EAAAA,EAAAA,YACA,sEACA,kBAGAxE,GACAyE,EAAAA,EAAAA,WAAAA,GAAAA,OAAAA,EAAAA,KAAAA,OAAAA,EAAAA,OACA,QADAA,EACA,kDACA,QADA,EACA,uDACA,OAGA,OAPAC,EAAAA,EAAAA,KAKA,qCAEA,UACAH,aAAAA,EAAAA,EAAAA,oBAAAA,EAAAA,MAAAA,MAAAA,SAAAA,EAAAA,GAAA,oBAAAzE,EAAAA,EAAAA,KACA6E,EAAAA,IAAAA,IAAAA,MAAAA,cAAAA,EAAAA,CACAC,YAAAA,aAAAA,EAAAA,EAAAA,eAIAC,EAAAA,IAAAA,MAAAA,YAAAA,qBAAAA,EAAAA,KAAAA,OAAAA,GAAAA,kBAEAA,EAAAA,OAAAA,EAAAA,SAAAA,CACAC,MAAAA,aAAAA,EAAAA,EAAAA,WAAAA,EAAAA,MACAC,IAAAA,EACAR,SAAAA,EACAS,YAAAA,aAAAA,EAAAA,EAAAA,YACAC,cAAAA,IAIA,4DAEA,kEACAC,EAAAA,MAAAA,EAAAA,KACAC,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,QAAAA,4CAAA,QAEA,OAFA,UAEA,yFA3CA,EA6CA,ICnP2L,cCWvL,EAAU,CAAC,EAEf,EAAQ7C,kBAAoB,IAC5B,EAAQC,cAAgB,IAElB,EAAQC,OAAS,SAAc,KAAM,QAE3C,EAAQC,OAAS,IACjB,EAAQC,mBAAqB,IAEhB,IAAI,IAAS,GAKJ,KAAW,YAAiB,WALlD,ICbI,GAAY,OACd,GCTW,WAAkB,IAAIC,EAAIC,KAAKC,EAAGF,EAAIG,MAAMD,GAAG,OAAQF,EAAIiB,OAAQf,EAAG,UAAU,CAACE,YAAY,mBAAmBC,MAAM,CAAC,oBAAoB,EAAE,KAAO,UAAUE,GAAG,CAAC,MAAQP,EAAIyB,QAAQ,CAACvB,EAAG,OAAO,CAACE,YAAY,yBAAyBiB,MAAOrB,EAAIqB,MAAOd,GAAG,CAAC,OAAS,SAASkC,GAAyD,OAAjDA,EAAOC,iBAAiBD,EAAOE,kBAAyB3C,EAAI0B,SAASkB,MAAM,KAAMC,UAAU,IAAI,CAAC3C,EAAG,KAAK,CAACF,EAAIQ,GAAGR,EAAIU,GAAGV,EAAI8C,EAAE,QAAS,6BAA8B,CAAEjG,KAAMmD,EAAIxB,qBAAsBwB,EAAIQ,GAAG,KAAKN,EAAG,KAAK,CAACE,YAAY,0BAA0B,CAACF,EAAG,kBAAkBF,EAAI+C,GAAG,CAAC1C,MAAM,CAAC,QAAUL,EAAIlC,UAAYkC,EAAImB,cAAcnD,QAAQuC,GAAG,CAAC,MAAQP,EAAIR,UAAU,kBAAkBQ,EAAImB,eAAc,IAAQnB,EAAIQ,GAAG,KAAKR,EAAIgD,GAAIhD,EAAIkB,SAASK,WAAW,SAAS0B,GAAU,OAAO/C,EAAG,kBAAkBF,EAAI+C,GAAG,CAACG,IAAID,EAASjF,OAAOqC,MAAM,CAAC,QAAUL,EAAIlC,UAAYmF,EAASjF,OAAO,MAAQgC,EAAIkB,SAAS7C,OAAOkC,GAAG,CAAC,MAAQP,EAAIR,UAAU,kBAAkByD,GAAS,GAAO,KAAI,GAAGjD,EAAIQ,GAAG,KAAKN,EAAG,MAAM,CAACE,YAAY,6BAA6B,CAACF,EAAG,SAAS,CAACK,GAAG,CAAC,MAAQP,EAAIyB,QAAQ,CAACzB,EAAIQ,GAAG,aAAaR,EAAIU,GAAGV,EAAI8C,EAAE,QAAS,WAAW,cAAc9C,EAAIQ,GAAG,KAAKN,EAAG,QAAQ,CAACE,YAAY,UAAUC,MAAM,CAAC,KAAO,SAAS,aAAaL,EAAI8C,EAAE,QAAS,iDAAiDxC,SAAS,CAAC,MAAQN,EAAI8C,EAAE,QAAS,iBAAiB9C,EAAIQ,GAAG,KAAMR,EAAIgB,QAASd,EAAG,iBAAiB,CAACE,YAAY,4BAA4BC,MAAM,CAAC,KAAO,iBAAiB,CAACL,EAAIQ,GAAG,SAASR,EAAIU,GAAGV,EAAI8C,EAAE,QAAS,kBAAkB,UAAU9C,EAAImD,MAAM,GAAGnD,EAAImD,IAClgD,GACsB,IDUpB,EACA,KACA,WACA,MAIF,EAAe,EAAiB,iIEgBhC,IAAMpC,GAASqC,EAAAA,EAAAA,MACbC,OAAO,SACPC,aACAC,QAGFC,EAAAA,QAAAA,MAAU,CACTjE,QAAS,CACRuD,EAAAA,EAAAA,GACAW,EAAAA,EAAAA,MAKF,IAAMC,EAAqB9E,SAAS+E,cAAc,OAClDD,EAAmBjF,GAAK,kBACxBG,SAASgF,KAAKC,YAAYH,GAG1B,IAAInC,GAAYuC,EAAAA,EAAAA,GAAU,QAAS,YAAa,IAC5CC,IAAgBD,EAAAA,EAAAA,GAAU,QAAS,kBAAkB,GACzD/C,EAAOiD,MAAM,sBAAuBzC,GACpCR,EAAOiD,MAAM,mBAAoB,CAAED,cAAAA,KAGnC,IACME,GAAiB,IADVT,EAAAA,QAAAA,OAAWU,GACD,CAAS,CAC/BrH,KAAM,iBACNsH,UAAW,CACVpD,OAAAA,KAGFkD,GAAeG,OAAO,oBAGtBC,OAAOC,iBAAiB,oBAAoB,WAC3C,IAAKP,GAAe,CACnBhD,EAAOiD,MAAM,oCACb,IAAMO,EAAsB,CAC3BC,OAAM,SAACC,GAENA,EAAKC,aAAa,CACjBjG,GAAI,gBACJkG,aAAa7B,EAAAA,EAAAA,IAAE,QAAS,2BACxB8B,cAAc9B,EAAAA,EAAAA,IAAE,QAAS,aACzB+B,UAAW,oBACXC,SAAU,OACVC,cAAa,SAAClI,GACbmI,GAAoBnI,GACpB4H,EAAKQ,gBAAgB,gBACtB,GAEF,GAEDC,GAAGC,QAAQC,SAAS,wBAAyBb,EAC9C,CACD,IAGAhD,EAAUpC,SAAQ,SAAC+B,EAAUmE,GAC5B,IAAMC,EAAoB,CACzBd,OAAM,SAACC,GACN,IAAM7C,EAAW6C,EAAK7C,SAGF,UAAhBA,EAASnD,IAAkC,iBAAhBmD,EAASnD,IAKxCgG,EAAKC,aAAa,CACjBjG,GAAI,gBAAF,OAAkByC,EAASqE,IAAG,YAAIF,GACpCV,YAAazD,EAASsE,MACtBZ,aAAc1D,EAASsE,MAAQtE,EAASW,UACxCgD,UAAW3D,EAAS2D,WAAa,YACjCC,SAAU,OACVC,cAAa,SAAClI,GACboH,GAAe3C,KAAKzE,EAAMqE,EAC3B,GAEF,GAEDgE,GAAGC,QAAQC,SAAS,wBAAyBE,EAC9C,IAOA,ICnGOG,GDmGDT,GAAmB,+CAAG,WAAenI,GAAI,wFAGyB,OAFjEU,GAAgBlB,IAAwB,IAAH,OAAOQ,IAAQC,QAAQ,KAAM,KAAI,SAE3EiE,EAAOiD,MAAM,uCAAwC,CAAEzG,aAAAA,IAAe,SAC/CP,EAAAA,QAAAA,MAAWC,EAAAA,EAAAA,gBAAe,oCAAqC,CACrFM,aAAAA,EACAmI,qBAAqB,IACpB,OAHIxI,EAAW,EAAH,KAMdX,IAAIC,MAAMC,IAAIC,gBAAgBiJ,gBAAgBpI,GAAc,GAAM,GAElEgE,EAAYrE,EAASC,KAAKC,IAAID,KAAKoE,UACnCwC,GAAgB7G,EAASC,KAAKC,IAAID,KAAKyI,cAAa,kDAEpD7E,EAAO8E,MAAM,iDACbrD,EAAAA,EAAAA,KAAUM,EAAAA,EAAAA,IAAE,QAAS,iDAAgD,wOAEtE,gBAlBwB,kDCnGlB2C,GAAc,CACnBjB,OAAM,SAAC5C,GAAU,YAChBkE,EAAAA,GAAAA,IAAU,mCAAmC,YAAe,IAAZC,EAAK,EAALA,MAC/CnE,EAASoE,UAAUD,EACpB,KACAD,EAAAA,GAAAA,IAAU,kCAAkC,WAC3C,EAAKC,MAAQ,KACbnE,EAASoE,UAAU,GACpB,GAED,GAGD3B,OAAOa,GAAGC,QAAQC,SAAS,qBAAsBK,gCChBlD,IAAerC,EAAAA,EAAAA,MACbC,OAAO,SACPC,aACAC,qsBC8CK,IA8FoC0C,GA9F9BC,GAAU,WAItB,WAAYD,0GAAwB,uIACnChG,KAAKkG,eAAeF,GACpBhG,KAAKmG,QAAUH,CAChB,SAmFC,SAnFA,oBAED,WACC,OAAOhG,KAAKmG,QAAQ3H,EACrB,GAAC,uBAED,WACC,OAAOwB,KAAKmG,QAAQzB,WACrB,GAAC,yBAED,WACC,OAAO1E,KAAKmG,QAAQC,aACrB,GAAC,mBAED,WACC,OAAOpG,KAAKmG,QAAQE,OACrB,GAAC,gBAED,WACC,OAAOrG,KAAKmG,QAAQG,IACrB,GAAC,qBAED,WACC,OAAOtG,KAAKmG,QAAQI,SACrB,GAAC,iBAED,WACC,OAAOvG,KAAKmG,QAAQK,KACrB,GAAC,mBAED,WACC,OAAOxG,KAAKmG,QAAQrI,OACrB,GAAC,kBAED,WACC,OAAOkC,KAAKmG,QAAQM,MACrB,GAAC,wBAED,WACC,OAAOzG,KAAKmG,QAAQO,YACrB,GAAC,4BAED,SAAuBV,GACtB,IAAKA,EAAOxH,IAA2B,iBAAdwH,EAAOxH,GAC/B,MAAM,IAAImI,MAAM,cAGjB,IAAKX,EAAOtB,aAA6C,mBAAvBsB,EAAOtB,YACxC,MAAM,IAAIiC,MAAM,gCAGjB,IAAKX,EAAOI,eAAiD,mBAAzBJ,EAAOI,cAC1C,MAAM,IAAIO,MAAM,kCAGjB,IAAKX,EAAOM,MAA+B,mBAAhBN,EAAOM,KACjC,MAAM,IAAIK,MAAM,yBAIjB,GAAI,YAAaX,GAAoC,mBAAnBA,EAAOK,QACxC,MAAM,IAAIM,MAAM,4BAGjB,GAAI,cAAeX,GAAsC,mBAArBA,EAAOO,UAC1C,MAAM,IAAII,MAAM,8BAGjB,GAAI,UAAWX,GAAkC,iBAAjBA,EAAOQ,MACtC,MAAM,IAAIG,MAAM,iBAGjB,GAAI,YAAaX,GAAoC,kBAAnBA,EAAOlI,QACxC,MAAM,IAAI6I,MAAM,mBAGjB,GAAI,WAAYX,GAAmC,mBAAlBA,EAAOS,OACvC,MAAM,IAAIE,MAAM,2BAGjB,GAAI,iBAAkBX,GAAyC,mBAAxBA,EAAOU,aAC7C,MAAM,IAAIC,MAAM,gCAElB,2EAAC,EA1FqB,GA6GVC,GAAiB,WAC7B,OAAOxC,OAAOyC,iBAAmB,EAClC,khDAjB2Cb,GCxIxB,IAAIC,GAAW,CACjCzH,GAAI,SACJkG,YAAW,SAACoC,EAAeC,GAC1B,MAAmB,aAAZA,EAAKvI,IACTqE,EAAAA,EAAAA,IAAE,iBAAkB,uBACpBA,EAAAA,EAAAA,IAAE,QAAS,SACf,EACAuD,cAAe,kBAAMY,EAAQ,EAE7BX,QAAO,SAACS,GACP,OAAOA,EAAMG,OAAS,GAAKH,EACzBI,KAAI,SAAAC,GAAI,OAAIA,EAAKC,WAAW,IAC5BC,OAAM,SAAAC,GAAU,OAAyC,IAApCA,EAAaC,GAAAA,GAAAA,OAAwB,GAC7D,EAEMjB,KAAI,SAACa,GAAY,yJAEfpK,EAAAA,QAAAA,OAAaoK,EAAKK,QAAO,OAKC,OAAhCC,EAAAA,GAAAA,IAAK,qBAAsBN,GAAK,mBACzB,GAAI,OAEsE,OAFtE,yBAEXrG,GAAAA,MAAa,8BAA+B,CAAE8E,MAAK,KAAE4B,OAAQL,EAAKK,OAAQL,KAAAA,IAAO,mBAC1E,GAAK,wDAXS,EAavB,EACMZ,UAAS,SAACO,EAAeC,GAAM,oKAC7BW,QAAQC,IAAIb,EAAMI,KAAI,SAAAC,GAAI,OAAI,EAAKb,KAAKa,EAAMJ,EAAK,MAAE,0CADxB,EAErC,EAEAP,MAAO,WDwG+B,IAA3BpC,OAAOyC,kBACjBzC,OAAOyC,gBAAkB,GACzB/F,GAAAA,MAAa,4BAIVsD,OAAOyC,gBAAgBe,MAAK,SAAAC,GAAM,OAAIA,EAAOrJ,KAAOwH,GAAOxH,EAAE,IAChEsC,GAAAA,MAAa,cAAD,OAAekF,GAAOxH,GAAE,uBAAuB,CAAEwH,OAAAA,KAI9D5B,OAAOyC,gBAAgBiB,KAAK9B,IExI7B,IAAM+B,GAAqB,SAAH,GAA+E,IAAjEvJ,EAAE,EAAFA,GAAI5B,EAAI,EAAJA,KAAM4J,EAAK,EAALA,MAAOwB,EAAI,EAAJA,KAAMC,EAAM,EAANA,OAAM,IAAEC,QAAAA,OAAO,IAAG,KAAE,EAAEC,EAAQ,EAARA,SAAUC,EAAM,EAANA,OAC5FC,IAAI9L,MAAM+L,WAAWnD,SAAS,CAC7B3G,GAAAA,EACA5B,KAAAA,EACA4J,MAAAA,EACA4B,OAAAA,EACAH,OAAAA,EACAE,UAAuB,IAAbA,EACVvD,UAAWoD,EAAO,QAAH,OAAWA,GAAS,YAAcxJ,EACjD+J,QAAQ,EACRC,OAAQN,EAAQO,SAAS,WAE3B,i2BC7BiC,kBA2EhC,0GAAc,0BAHiB,IAAE,uBACS,MAGzC3H,GAAAA,MAAa,iCACd,SAkCC,SAlCA,4BAED,SAASiG,GACR,IACC2B,GAAkB3B,GAClB4B,GAAmB5B,EAAM/G,KAAK4I,OAM/B,CALE,MAAOC,GAIR,MAHIA,aAAalC,OAChB7F,GAAAA,MAAa+H,EAAEC,QAAS,CAAE/B,KAAAA,IAErB8B,CACP,CAEI9B,EAAKwB,QACRzH,GAAAA,KAAY,+CAGTiG,EAAKnC,YACRmC,EAAKwB,QAAS,GAGfvI,KAAK4I,OAAOd,KAAKf,EAClB,GAAC,iBAED,WACC,OAAO/G,KAAK4I,MACb,GAAC,uBAED,SAAU7B,GACT/G,KAAK+I,aAAehC,CACrB,GAAC,kBAED,WACC,OAAO/G,KAAK+I,YACb,2EAAC,EA/G+B,GAuH3BJ,GAAqB,SAAS5B,EAAkBiC,GACrD,GAAIA,EAAMpB,MAAK,SAAAC,GAAM,OAAIA,EAAOrJ,KAAOuI,EAAKvI,EAAE,IAC7C,MAAM,IAAImI,MAAM,iBAAD,OAAkBI,EAAKvI,GAAE,2BAEzC,OAAO,CACR,EAMMkK,GAAoB,SAAS3B,GAClC,IAAKA,EAAKvI,IAAyB,iBAAZuI,EAAKvI,GAC3B,MAAM,IAAImI,MAAM,kDAGjB,IAAKI,EAAKnK,MAA6B,iBAAdmK,EAAKnK,KAC7B,MAAM,IAAI+J,MAAM,oDAOjB,IAAKI,EAAKwB,OAAQ,CACjB,IAAKxB,EAAKkC,aAA2C,mBAArBlC,EAAKkC,YACpC,MAAM,IAAItC,MAAM,6DAGjB,IAAKI,EAAKiB,MAA6B,iBAAdjB,EAAKiB,OAAsBkB,KAAMnC,EAAKiB,MAC9D,MAAM,IAAIrB,MAAM,6DAElB,CAEA,KAAM,UAAWI,IAA+B,iBAAfA,EAAKP,MACrC,MAAM,IAAIG,MAAM,qDAQjB,GAJII,EAAKoC,SACRpC,EAAKoC,QAAQjK,QAAQkK,IAGlBrC,EAAKsC,WAAuC,mBAAnBtC,EAAKsC,UACjC,MAAM,IAAI1C,MAAM,2CAGjB,GAAII,EAAKkB,QAAiC,iBAAhBlB,EAAKkB,OAC9B,MAAM,IAAItB,MAAM,sCAGjB,GAAI,WAAYI,GAA+B,kBAAhBA,EAAKyB,OACnC,MAAM,IAAI7B,MAAM,uCAGjB,GAAI,aAAcI,GAAiC,kBAAlBA,EAAKoB,SACrC,MAAM,IAAIxB,MAAM,yCAGjB,GAAII,EAAKuC,gBAAiD,iBAAxBvC,EAAKuC,eACtC,MAAM,IAAI3C,MAAM,8CAGjB,OAAO,CACR,EAMMyC,GAAgB,SAASG,GAC9B,IAAKA,EAAO/K,IAA2B,iBAAd+K,EAAO/K,GAC/B,MAAM,IAAImI,MAAM,2BAGjB,IAAK4C,EAAOC,OAAiC,iBAAjBD,EAAOC,MAClC,MAAM,IAAI7C,MAAM,8BAGjB,IAAK4C,EAAOE,QAAmC,mBAAlBF,EAAOE,OACnC,MAAM,IAAI9C,MAAM,iCAIjB,GAAI4C,EAAOG,MAA+B,mBAAhBH,EAAOG,KAChC,MAAM,IAAI/C,MAAM,0CAGjB,GAAI4C,EAAOI,SAAqC,mBAAnBJ,EAAOI,QACnC,MAAM,IAAIhD,MAAM,qCAGjB,OAAO,CACR,kUCrNA,ocCWA,QACA/J,KAAAA,kBAEA8D,WAAAA,CACAkJ,SAAAA,GAAAA,EACAC,oBAAAA,KACAC,cAAAA,MAGA5M,KAAAA,WACA,OACA6M,qBAAAA,EACAC,cAAAA,EAAAA,EAAAA,GAAAA,QAAAA,eAAAA,MAEA,EAEA1L,SAAAA,CACA2L,kBAAAA,WAAA,UACA,oEACA,qEAGA,kEACA,uCAAAC,cAAAA,IAGA,yCACAC,KAAAA,EACAC,MAAAA,GAEA,EACAC,oBAAAA,WACA,kCAIA,qDAHA,EAIA,GAGAC,YAAAA,WAKAC,YAAAA,KAAAA,2BAAAA,MAEA1E,EAAAA,GAAAA,IAAAA,qBAAAA,KAAAA,6BACAA,EAAAA,GAAAA,IAAAA,qBAAAA,KAAAA,6BACAA,EAAAA,GAAAA,IAAAA,mBAAAA,KAAAA,6BACAA,EAAAA,GAAAA,IAAAA,qBAAAA,KAAAA,6BAEAA,EAAAA,GAAAA,IAAAA,uBAAAA,KAAAA,6BACAA,EAAAA,GAAAA,IAAAA,uBAAAA,KAAAA,6BACAA,EAAAA,GAAAA,IAAAA,qBAAAA,KAAAA,6BACAA,EAAAA,GAAAA,IAAAA,uBAAAA,KAAAA,2BACA,EAEAvG,QAAAA,CAEAkL,4BAAAA,EAAAA,GAAAA,GAAAA,KAAAA,SAAAA,GACA,0BACA,IAEAC,4BAAAA,EAAAA,GAAAA,GAAAA,KAAAA,SAAAA,GACA,0BACA,IAQAC,mBAAAA,WAAA,oKAAAC,EAAAA,EAAAA,OAAAA,QAAAA,IAAAA,EAAAA,GAAAA,EAAAA,GAAAA,MACA,uEAIA,kDAEA5N,EAAAA,QAAAA,KAAAA,EAAAA,EAAAA,aAAAA,6BAAA,UACAE,OADAA,EAAAA,EAAAA,OACAA,QAAAA,EAAAA,EAAAA,YAAAA,IAAAA,GAAAA,EAAAA,KAAAA,CAAA,sBACA,2CAEA,6EAEA6D,GAAAA,MAAAA,kCAAAA,CAAA8E,MAAAA,EAAAA,KAEA,IACArD,EAAAA,EAAAA,IAAAA,EAAAA,QAAAA,oCACA,QAEA,OAFA,UAEA,qGAnBA,EAqBA,EAEAM,EAAAA,EAAAA,KCpI4L,gBCWxL,GAAU,CAAC,EAEf,GAAQnD,kBAAoB,IAC5B,GAAQC,cAAgB,IAElB,GAAQC,OAAS,SAAc,KAAM,QAE3C,GAAQC,OAAS,IACjB,GAAQC,mBAAqB,IAEhB,IAAI,KAAS,IAKJ,MAAW,aAAiB,YALlD,ICbI,IAAY,OACd,ICTW,WAAkB,IAAIC,EAAIC,KAAKC,EAAGF,EAAIG,MAAMD,GAAG,OAAQF,EAAIiK,aAAc/J,EAAG,sBAAsB,CAACE,YAAY,uCAAuCK,MAAM,CAAE,sDAAuDT,EAAIiK,aAAaI,OAAS,GAAGhK,MAAM,CAAC,aAAaL,EAAI8C,EAAE,QAAS,wBAAwB,QAAU9C,EAAIgK,oBAAoB,KAAOhK,EAAIkK,kBAAkB,MAAQlK,EAAIsK,oBAAoB,0CAA0C,IAAI/J,GAAG,CAAC,MAAQ,SAASkC,GAAyD,OAAjDA,EAAOE,kBAAkBF,EAAOC,iBAAwB1C,EAAIyK,2BAA2B7H,MAAM,KAAMC,UAAU,IAAI,CAAC3C,EAAG,WAAW,CAACG,MAAM,CAAC,KAAO,OAAO,KAAO,IAAIwK,KAAK,SAAS7K,EAAIQ,GAAG,KAAMR,EAAIiK,aAAaI,OAAS,EAAGnK,EAAG,gBAAgB,CAACG,MAAM,CAAC,KAAO,QAAQ,MAAQL,EAAIiK,aAAaa,SAAW,GAAG,MAAQC,KAAKC,IAAIhL,EAAIiK,aAAaa,SAAU,MAAMD,KAAK,UAAU7K,EAAImD,MAAM,GAAGnD,EAAImD,IACh2B,GACsB,IDUpB,EACA,KACA,WACA,MAIF,GAAe,GAAiB,gHEnBoJ,GC0BpL,CACAtG,KAAAA,UACAa,MAAAA,CACAuN,GAAAA,CACArN,KAAAA,SACAC,UAAAA,IAGAqN,QAAAA,WACA,+BACA,GClBA,IAXgB,OACd,ICRW,WAA+C,OAAOhL,EAA5BD,KAAYE,MAAMD,IAAa,MACtE,GACsB,IDSpB,EACA,KACA,KACA,MAI8B,kIEahC,IAAMiL,IAAarH,EAAAA,EAAAA,GAAU,QAAS,SAAU,CAC/CsH,aAAa,EACbC,qBAAqB,IAGTC,GAAqB,WACjC,IAAMC,GAAQC,EAAAA,GAAAA,IAAY,aAAc,CACvCC,MAAO,iBAAO,CACbN,WAAAA,GACA,EAEDO,QAAS,CAIRC,SAAQ,SAACzI,EAAapE,GACrB0E,EAAAA,QAAAA,IAAQvD,KAAKkL,WAAYjI,EAAKpE,EAC/B,EAKM8M,OAAM,SAAC1I,EAAapE,GAAgB,+IACnC9B,EAAAA,QAAAA,MAAW6O,EAAAA,EAAAA,aAAY,6BAA+B3I,GAAM,CACjEpE,MAAAA,IACC,QAEF4I,EAAAA,GAAAA,IAAK,uBAAwB,CAAExE,IAAAA,EAAKpE,MAAAA,IAAQ,kOAC7C,KAIIgN,EAAkBP,IAUxB,OAPKO,EAAgBC,eACpBjG,EAAAA,GAAAA,IAAU,wBAAwB,YAA0D,IAA/C5C,EAAG,EAAHA,IAAKpE,EAAK,EAALA,MACjDgN,EAAgBH,SAASzI,EAAKpE,EAC/B,IACAgN,EAAgBC,aAAc,GAGxBD,CACR,4HCoBA,QACAjP,KAAAA,WACA8D,WAAAA,CACAqL,UAAAA,GAAAA,EACAC,oBAAAA,KACAC,qBAAAA,KACAC,sBAAAA,KACAC,aAAAA,KACAC,QAAAA,IAGA3O,MAAAA,CACA4D,KAAAA,CACA1D,KAAAA,QACAG,SAAAA,IAIAuO,MAAAA,WAEA,OACAR,gBAFA,KAIA,EAEA3O,KAAAA,WAAA,YACA,OAEAoP,UAAAA,QAAAA,EAAAA,OAAAA,WAAAA,IAAAA,GAAAA,QAAAA,EAAAA,EAAAA,aAAAA,IAAAA,GAAAA,QAAAA,EAAAA,EAAAA,gBAAAA,IAAAA,OAAAA,EAAAA,EAAAA,WAAAA,GAGAC,WAAAA,EAAAA,EAAAA,mBAAAA,aAAAA,mBAAAA,QAAAA,GAAAA,EAAAA,EAAAA,aAAAA,IAAAA,OAAAA,EAAAA,EAAAA,MACAC,WAAAA,iEACAC,gBAAAA,EAAAA,EAAAA,aAAAA,sDACAC,iBAAAA,EAEA,EAEApO,SAAAA,CACA4M,WAAAA,WACA,sCACA,GAGAZ,YAAAA,WAEA,qDACA,EAEAqC,cAAAA,WAEA,sDACA,EAEArN,QAAAA,CACAsN,QAAAA,WACA,mBACA,EAEAC,UAAAA,SAAAA,EAAAA,GACA,gCACA,EAEAC,YAAAA,WAAA,4IACA,GAAAnO,SAAAA,cAAAA,0BAAAA,SAEAoO,UAAAA,UAAAA,CAAA,eAEA,OAAAxK,EAAAA,EAAAA,IAAAA,EAAAA,QAAAA,+BAAA,0CAIAwK,UAAAA,UAAAA,UAAAA,EAAAA,WAAA,OACA,sBACAC,EAAAA,EAAAA,IAAAA,EAAAA,QAAAA,mCACAC,YAAAA,WACA,oBACA,oOACA,EAEApK,EAAAA,EAAAA,KC9KqL,kBCWjL,GAAU,CAAC,EAEf,GAAQnD,kBAAoB,IAC5B,GAAQC,cAAgB,IAElB,GAAQC,OAAS,SAAc,KAAM,QAE3C,GAAQC,OAAS,IACjB,GAAQC,mBAAqB,IAEhB,IAAI,KAAS,IAKJ,MAAW,aAAiB,YALlD,ICFA,IAXgB,OACd,ICTW,WAAkB,IAAIC,EAAIC,KAAKC,EAAGF,EAAIG,MAAMD,GAAG,OAAOA,EAAG,sBAAsB,CAACG,MAAM,CAAC,KAAOL,EAAIsB,KAAK,mBAAkB,EAAK,MAAQtB,EAAI8C,EAAE,QAAS,mBAAmBvC,GAAG,CAAC,cAAcP,EAAI6M,UAAU,CAAC3M,EAAG,uBAAuB,CAACG,MAAM,CAAC,GAAK,WAAW,MAAQL,EAAI8C,EAAE,QAAS,oBAAoB,CAAC5C,EAAG,wBAAwB,CAACG,MAAM,CAAC,QAAUL,EAAImL,WAAWC,aAAa7K,GAAG,CAAC,iBAAiB,SAASkC,GAAQ,OAAOzC,EAAI8M,UAAU,cAAerK,EAAO,IAAI,CAACzC,EAAIQ,GAAG,WAAWR,EAAIU,GAAGV,EAAI8C,EAAE,QAAS,sBAAsB,YAAY9C,EAAIQ,GAAG,KAAKN,EAAG,wBAAwB,CAACG,MAAM,CAAC,QAAUL,EAAImL,WAAWE,qBAAqB9K,GAAG,CAAC,iBAAiB,SAASkC,GAAQ,OAAOzC,EAAI8M,UAAU,sBAAuBrK,EAAO,IAAI,CAACzC,EAAIQ,GAAG,WAAWR,EAAIU,GAAGV,EAAI8C,EAAE,QAAS,wBAAwB,aAAa,GAAG9C,EAAIQ,GAAG,KAA8B,IAAxBR,EAAIuM,SAASrF,OAAchH,EAAG,uBAAuB,CAACG,MAAM,CAAC,GAAK,gBAAgB,MAAQL,EAAI8C,EAAE,QAAS,yBAAyB,CAAC9C,EAAIgD,GAAIhD,EAAIuM,UAAU,SAASY,GAAS,MAAO,CAACjN,EAAG,UAAU,CAACgD,IAAIiK,EAAQtQ,KAAKwD,MAAM,CAAC,GAAK8M,EAAQlC,MAAM,KAAI,GAAGjL,EAAImD,KAAKnD,EAAIQ,GAAG,KAAKN,EAAG,uBAAuB,CAACG,MAAM,CAAC,GAAK,SAAS,MAAQL,EAAI8C,EAAE,QAAS,YAAY,CAAC5C,EAAG,eAAe,CAACG,MAAM,CAAC,GAAK,mBAAmB,wBAAuB,EAAK,QAAUL,EAAI2M,gBAAgB,wBAAwB3M,EAAI8C,EAAE,QAAS,qBAAqB,MAAQ9C,EAAIwM,UAAU,SAAW,WAAW,KAAO,OAAOjM,GAAG,CAAC,MAAQ,SAASkC,GAAQ,OAAOA,EAAO2K,OAAOC,QAAQ,EAAE,wBAAwBrN,EAAI+M,aAAaO,YAAYtN,EAAIuN,GAAG,CAAC,CAACrK,IAAI,uBAAuBsK,GAAG,WAAW,MAAO,CAACtN,EAAG,YAAY,CAACG,MAAM,CAAC,KAAO,MAAM,EAAEoN,OAAM,OAAUzN,EAAIQ,GAAG,KAAKN,EAAG,KAAK,CAACA,EAAG,IAAI,CAACE,YAAY,eAAeC,MAAM,CAAC,KAAOL,EAAIyM,WAAW,OAAS,SAAS,IAAM,wBAAwB,CAACzM,EAAIQ,GAAG,aAAaR,EAAIU,GAAGV,EAAI8C,EAAE,QAAS,qDAAqD,kBAAkB9C,EAAIQ,GAAG,KAAKN,EAAG,MAAMF,EAAIQ,GAAG,KAAKN,EAAG,KAAK,CAACA,EAAG,IAAI,CAACE,YAAY,eAAeC,MAAM,CAAC,KAAOL,EAAI0M,iBAAiB,CAAC1M,EAAIQ,GAAG,aAAaR,EAAIU,GAAGV,EAAI8C,EAAE,QAAS,0FAA0F,mBAAmB,IAAI,EACvlE,GACsB,IDUpB,EACA,KACA,WACA,MAI8B,m0CEwEhC,QACAjG,KAAAA,aAEA8D,WAAAA,CACA+M,IAAAA,GAAAA,QACAC,gBAAAA,GACAC,gBAAAA,KACA9D,oBAAAA,KACA+D,iBAAAA,KACAC,cAAAA,IAGApQ,MAAAA,CAEA6K,WAAAA,CACA3K,KAAAA,GACAC,UAAAA,IAIAV,KAAAA,WACA,OACA4Q,gBAAAA,EAEA,EAEAxP,SAAAA,CACAyP,cAAAA,WAAA,QACA,kGACA,EAGAC,YAAAA,WAAA,WACA,oEACA,EAGAhF,MAAAA,WACA,4BACA,EAGAiF,YAAAA,WACA,kBAEAC,QAAAA,SAAAA,GAAA,mBAEAxE,MAAAA,SAAAA,EAAAA,GACA,sBACA,GACA,EAGAyE,WAAAA,WACA,kBAEAD,QAAAA,SAAAA,GAAA,oBAEAE,QAAAA,SAAAA,EAAAA,GAMA,OALAC,EAAAA,EAAAA,QAAAA,GAAAA,uDAAAA,EAAAA,EAAAA,SAAAA,ukBAAAA,CAAAA,IAEAA,EAAAA,EAAAA,QAAAA,MAAAA,SAAAA,EAAAA,GACA,sBACA,IACA,OACA,MACA,GAGAC,MAAAA,CACAN,YAAAA,SAAAA,EAAAA,IAGA,+CAIA,6BACAlN,GAAAA,MAAAA,qBAAAA,CAAAtC,GAAAA,EAAAA,GAAAuI,KAAAA,IAGA,mBACA,GAGAuD,YAAAA,WAAA,WACA,mBACAxJ,GAAAA,MAAAA,6CAAAA,CAAAiG,KAAAA,KAAAA,cACA,kCAGAlB,EAAAA,GAAAA,IAAAA,kCAAAA,KAAAA,4BAGAA,EAAAA,GAAAA,IAAAA,iCAAAA,WACA/E,GAAAA,MAAAA,0BAAAA,GAAAA,CAAAA,EAAAA,EAAAA,cACA,yBACA,GACA,EAEAxB,QAAAA,CAKAiP,SAAAA,SAAAA,EAAAA,GAAA,cCtK+BC,EACxBC,EDyKP,GAFA,yKAEA,mBACA,gGACA9P,SAAAA,iBAAAA,+BAAAA,SAAAA,SAAAA,GACAqM,EAAAA,UAAAA,IAAAA,SACA,IACA0D,EAAAA,UAAAA,OAAAA,UAGA,0CAAAvM,OAAAA,IAAAA,EAAAA,IAAAA,EACA,GAAAwM,OAAAA,EAAAA,GAAAxM,IAAAA,GAEArB,GAAAA,MAAAA,qCAAAA,GACAsD,OAAAA,OAAAA,GAAAA,QAAAA,IAAAA,OAAAA,OAAAA,MAAAA,OAAAA,IACAA,OAAAA,OAAAA,GAAAA,QAAAA,IAAAA,OAAAA,OAAAA,MAAAA,aAAAA,GACA,CAEA,6BC1L+BoK,ED2L/BI,EAAAA,MC1LOH,EAAY9P,SAASC,eAAe,2BAEzC6P,EAAUI,YAAcL,IDyL1B/G,EAAAA,GAAAA,IAAAA,2BAAAA,EACA,EAQAqH,0BAAAA,WAAA,8DAAAtQ,GAAAA,SAAAA,EAAAA,EAAAA,GACA,6DACA,0CAGA,+CAAA4J,OAAAA,CAAArB,KAAAA,EAAAA,OACA,6BACA,iBAEA,EAQAgI,eAAAA,SAAAA,GAEAhI,EAAAA,UAAAA,EAAAA,SACAhK,EAAAA,QAAAA,MAAAA,EAAAA,EAAAA,aAAAA,uCAAAA,OAAAA,EAAAA,KAAAA,CAAAiS,KAAAA,EAAAA,UACA,EAOAC,qBAAAA,SAAAA,GACA,aACA,eAAA9M,EAAAA,EAAAA,IAAApE,EAAAA,EAAAA,OACA,OAAAnB,KAAAA,WAAAwL,OAAAA,EAAAA,OAAAtC,MAAAA,CAAA3D,IAAAA,EAAApE,OAAAA,GACA,CACA,OAAAnB,KAAAA,WAAAwL,OAAAA,CAAArB,KAAAA,EAAAA,IACA,EAKAmI,aAAAA,WACA,sBACA,EAKAC,gBAAAA,WACA,sBACA,EAEAtM,EAAAA,EAAAA,KErRuL,kBCWnL,GAAU,CAAC,EAEf,GAAQnD,kBAAoB,IAC5B,GAAQC,cAAgB,IAElB,GAAQC,OAAS,SAAc,KAAM,QAE3C,GAAQC,OAAS,IACjB,GAAQC,mBAAqB,IAEhB,IAAI,KAAS,IAKJ,MAAW,aAAiB,YALlD,ICbI,IAAY,OACd,ICTW,WAAkB,IAAIC,EAAIC,KAAKC,EAAGF,EAAIG,MAAMD,GAAG,OAAOA,EAAG,kBAAkB,CAACG,MAAM,CAAC,2BAA2B,IAAIiN,YAAYtN,EAAIuN,GAAG,CAAC,CAACrK,IAAI,OAAOsK,GAAG,WAAW,OAAOxN,EAAIgD,GAAIhD,EAAIkO,aAAa,SAASlH,GAAM,OAAO9G,EAAG,sBAAsB,CAACgD,IAAI8D,EAAKvI,GAAG4B,MAAM,CAAC,kBAAiB,EAAK,gCAAgC2G,EAAKvI,GAAG,KAAOuI,EAAKnC,UAAU,KAAOmC,EAAKoB,SAAS,OAASpB,EAAKyB,OAAO,MAAQzB,EAAKnK,KAAK,GAAKmD,EAAIkP,qBAAqBlI,IAAOzG,GAAG,CAAC,cAAc,SAASkC,GAAQ,OAAOzC,EAAIgP,eAAehI,EAAK,IAAI,CAAEA,EAAKiB,KAAM/H,EAAG,mBAAmB,CAACG,MAAM,CAAC,KAAO,OAAO,IAAM2G,EAAKiB,MAAM4C,KAAK,SAAS7K,EAAImD,KAAKnD,EAAIQ,GAAG,KAAKR,EAAIgD,GAAIhD,EAAIoO,WAAWpH,EAAKvI,KAAK,SAAS4Q,GAAO,OAAOnP,EAAG,sBAAsB,CAACgD,IAAImM,EAAM5Q,GAAG4B,MAAM,CAAC,gCAAgCgP,EAAM5Q,GAAG,OAAQ,EAAK,KAAO4Q,EAAMxK,UAAU,MAAQwK,EAAMxS,KAAK,GAAKmD,EAAIkP,qBAAqBG,KAAS,CAAErI,EAAKiB,KAAM/H,EAAG,mBAAmB,CAACG,MAAM,CAAC,KAAO,OAAO,IAAM2G,EAAKiB,MAAM4C,KAAK,SAAS7K,EAAImD,MAAM,EAAE,KAAI,EAAE,GAAE,EAAEsK,OAAM,GAAM,CAACvK,IAAI,SAASsK,GAAG,WAAW,MAAO,CAACtN,EAAG,KAAK,CAACE,YAAY,kCAAkC,CAACF,EAAG,mBAAmBF,EAAIQ,GAAG,KAAKN,EAAG,sBAAsB,CAACG,MAAM,CAAC,aAAaL,EAAI8C,EAAE,QAAS,+BAA+B,MAAQ9C,EAAI8C,EAAE,QAAS,kBAAkB,2CAA2C,IAAIvC,GAAG,CAAC,MAAQ,SAASkC,GAAyD,OAAjDA,EAAOC,iBAAiBD,EAAOE,kBAAyB3C,EAAImP,aAAavM,MAAM,KAAMC,UAAU,IAAI,CAAC3C,EAAG,MAAM,CAACG,MAAM,CAAC,KAAO,OAAO,KAAO,IAAIwK,KAAK,UAAU,IAAI,GAAG,EAAE4C,OAAM,MAAS,CAACzN,EAAIQ,GAAG,KAAKR,EAAIQ,GAAG,KAAKN,EAAG,gBAAgB,CAACG,MAAM,CAAC,KAAOL,EAAI+N,eAAe,oCAAoC,IAAIxN,GAAG,CAAC,MAAQP,EAAIoP,oBAAoB,EAC7nD,GACsB,IDUpB,EACA,KACA,WACA,MAIF,GAAe,GAAiB,qzCEWzB,IAAME,GAAgB,WAC5B,IAkEMC,GAlEQ/D,EAAAA,GAAAA,IAAY,QAAS,CAClCC,MAAO,iBAAmB,CACzB+D,MAAO,CAAC,EACRC,MAAO,CAAC,EACR,EAEDC,QAAS,CAIRC,QAAS,SAAClE,GAAK,OAAM,SAAChN,GAAU,OAAqBgN,EAAM+D,MAAM/Q,EAAG,GAMpEmR,SAAU,SAACnE,GAAK,OAAK,SAACoE,GAAa,OAAaA,EAC9C1I,KAAI,SAAA1I,GAAE,OAAIgN,EAAM+D,MAAM/Q,EAAG,IACzB0P,OAAO2B,QAAQ,GAIjBC,QAAS,SAACtE,GAAK,OAAM,SAACuE,GAAgB,OAAuBvE,EAAMgE,MAAMO,EAAQ,IAGlFtE,QAAS,CACRuE,YAAW,SAAClJ,GAEX,IAAMyI,EAAQzI,EAAMsH,QAAO,SAAC6B,EAAK9I,GAChC,OAAKA,EAAK+I,WAAWnS,QAIrBkS,EAAI9I,EAAK+I,WAAWnS,QAAUoJ,EACvB8I,IAJNnP,GAAAA,KAAY,6CAA8CqG,GACnD8I,EAIT,GAAG,CAAC,GAEJ1M,EAAAA,QAAAA,IAAQvD,KAAM,QAAS,SAAIA,KAAKuP,OAAUA,GAC3C,EAEAY,YAAW,SAACrJ,GAAe,WAC1BA,EAAM5H,SAAQ,SAAAiI,GACTA,EAAKpJ,QACRwF,EAAAA,QAAAA,OAAW,EAAKgM,MAAOpI,EAAKpJ,OAE9B,GACD,EAEAqS,QAAO,YAAiC,IAA9BL,EAAO,EAAPA,QAASM,EAAI,EAAJA,KAClB9M,EAAAA,QAAAA,IAAQvD,KAAKwP,MAAOO,EAASM,EAC9B,EAEAC,cAAa,WACZ,EAGDC,cAAa,SAACpJ,GACbnH,KAAKmQ,YAAY,CAAChJ,GACnB,EAEAqJ,YAAW,WACV,IAKelF,GAgBlB,OAdKgE,EAAUxD,eACdjG,EAAAA,GAAAA,IAAU,qBAAsByJ,EAAUgB,gBAC1CzK,EAAAA,GAAAA,IAAU,qBAAsByJ,EAAUiB,gBAC1C1K,EAAAA,GAAAA,IAAU,mBAAoByJ,EAAUkB,cAGxC3K,EAAAA,GAAAA,IAAU,uBAAwByJ,EAAUgB,gBAC5CzK,EAAAA,GAAAA,IAAU,uBAAwByJ,EAAUiB,gBAC5C1K,EAAAA,GAAAA,IAAU,qBAAsByJ,EAAUkB,aAG1ClB,EAAUxD,aAAc,GAGlBwD,CACR,ECtFamB,GAAgB,WAC5B,IAAMnF,GAAQC,EAAAA,GAAAA,IAAY,QAAS,CAClCC,MAAO,iBAAsB,CAAC,CAAC,EAE/BiE,QAAS,CACRiB,QAAS,SAAClF,GACT,OAAO,SAACuE,EAAiBpT,GACxB,GAAK6O,EAAMuE,GAGX,OAAOvE,EAAMuE,GAASpT,EACvB,CACD,GAGD8O,QAAS,CACRkF,QAAO,SAACC,GAEF5Q,KAAK4Q,EAAQb,UACjBxM,EAAAA,QAAAA,IAAQvD,KAAM4Q,EAAQb,QAAS,CAAC,GAIjCxM,EAAAA,QAAAA,IAAQvD,KAAK4Q,EAAQb,SAAUa,EAAQjU,KAAMiU,EAAQ7S,OACtD,KAII8S,EAAavF,IAWnB,OATKuF,EAAW/E,cAMf+E,EAAW/E,aAAc,GAGnB+E,CACR,EC3CaC,IAAoBvF,EAAAA,GAAAA,IAAY,YAAa,CACzDC,MAAO,iBAAO,CACbuF,SAAU,GACV,EAEDtF,QAAS,CAIRuF,IAAG,WAA6B,IAA5BC,EAAY,UAAH,6CAAG,GACf1N,EAAAA,QAAAA,IAAQvD,KAAM,WAAYiR,EAC3B,EAKAC,MAAK,WACJ3N,EAAAA,QAAAA,IAAQvD,KAAM,WAAY,GAC3B,KCdImR,GAAiB,SAACC,EAAcC,EAAsBtK,GAC3D,OAAOhK,EAAAA,QAAAA,MAAW6O,EAAAA,EAAAA,aAAY,8BAA+B,CAC5DwF,KAAAA,EACAC,UAAAA,EACAtK,KAAAA,GAEF,EAEMuK,IAAqBzN,EAAAA,EAAAA,GAAU,QAAS,qBAAsB,CAAC,GAExD0N,IAAkBhG,EAAAA,GAAAA,IAAY,UAAW,CACrDC,MAAO,iBAAO,CACb8F,mBAAAA,GACA,EAED7B,QAAS,CACR+B,aAAc,SAAChG,GAAK,OAAK,iBAACzE,EAAe,UAAH,6CAAG,QAAO,MAAmD,UAAhB,QAA9B,EAAAyE,EAAM8F,mBAAmBvK,UAAK,aAA9B,EAAgCsK,UAAoB,GACzGI,eAAgB,SAACjG,GAAK,OAAK,iBAACzE,EAAe,UAAH,6CAAG,QAAO,OAAmC,QAAnC,EAAKyE,EAAM8F,mBAAmBvK,UAAK,aAA9B,EAAgCqK,IAAI,IAG5F3F,QAAS,CAMRiG,aAAY,WAAmD,IAAlDzO,EAAc,UAAH,6CAAG,WAAY8D,EAAe,UAAH,6CAAG,QAC/C4K,EAAS3R,KAAKsR,mBAAmBvK,IAAS,CAAC,EACjD4K,EAAOP,KAAOnO,EACd0O,EAAON,UAAY,MAGnB9N,EAAAA,QAAAA,IAAQvD,KAAKsR,mBAAoBvK,EAAM4K,GACvCR,GAAeQ,EAAOP,KAAMO,EAAON,UAAWtK,EAC/C,EAKA6K,uBAAsB,WAAyB,IAAxB7K,EAAe,UAAH,6CAAG,QAC/B4K,EAAS3R,KAAKsR,mBAAmBvK,IAAS,CAAE,UAAa,OACzD8K,EAAoC,QAArBF,EAAON,UAAsB,OAAS,MAC3DM,EAAON,UAAYQ,EAGnBtO,EAAAA,QAAAA,IAAQvD,KAAKsR,mBAAoBvK,EAAM4K,GACvCR,GAAeQ,EAAOP,KAAMO,EAAON,UAAWtK,EAC/C,03CCrDF,OAAe,iBAAW,CAC1BnK,KAAAA,cAEA8D,WAAAA,CACAoR,KAAAA,GAAAA,EACAC,cAAAA,KACAC,aAAAA,MAGAvU,MAAAA,CACAd,KAAAA,CACAgB,KAAAA,OACAG,QAAAA,MAIAQ,SAAAA,CACA2T,KAAAA,WACA,QAEA,4CAFA,EAEA,IAFA,0CAIA,msBACA,EAEAC,SAAAA,WAAA,WACA,kCACA,6BAAApM,MAAAA,CAAA3D,IAAAA,KACA,OACAA,IAAAA,EACAgQ,OAAAA,EACAvV,MAAAA,EAAAA,EAAAA,UAAAA,GACAwV,GAAAA,EAEA,GACA,GAGA9S,QAAAA,CACA+S,QAAAA,SAAAA,GAAA,OACA,+EACA,oBAEA,EAEAC,UAAAA,SAAAA,GAAA,QACA,kHACA,sCAEA,0CACA,KCzEwL,kBCWpL,GAAU,CAAC,EAEf,GAAQ5S,kBAAoB,IAC5B,GAAQC,cAAgB,IAElB,GAAQC,OAAS,SAAc,KAAM,QAE3C,GAAQC,OAAS,IACjB,GAAQC,mBAAqB,IAEhB,IAAI,KAAS,IAKJ,MAAW,aAAiB,YALlD,ICFA,IAXgB,OACd,ICTW,WAAkB,IAAIC,EAAIC,KAAKC,EAAGF,EAAIG,MAAMD,GAAgC,OAAtBF,EAAIG,MAAMqS,YAAmBtS,EAAG,gBAAgB,CAACG,MAAM,CAAC,oCAAoC,KAAKL,EAAIgD,GAAIhD,EAAImS,UAAU,SAAS/S,EAAQiG,GAAO,OAAOnF,EAAG,eAAeF,EAAI+C,GAAG,CAACG,IAAI9D,EAAQgD,IAAI/B,MAAM,CAAC,aAAaL,EAAIuS,UAAUnT,GAAS,MAAQY,EAAIuS,UAAUnT,IAAUqT,SAAS,CAAC,MAAQ,SAAShQ,GAAQ,OAAOzC,EAAIsS,QAAQlT,EAAQiT,GAAG,GAAG/E,YAAYtN,EAAIuN,GAAG,CAAY,IAAVlI,EAAa,CAACnC,IAAI,OAAOsK,GAAG,WAAW,MAAO,CAACtN,EAAG,OAAO,CAACG,MAAM,CAAC,KAAO,MAAM,EAAEoN,OAAM,GAAM,MAAM,MAAK,IAAO,eAAerO,GAAQ,GAAO,IAAG,EACtjB,GACsB,IDUpB,EACA,KACA,WACA,MAI8B,wIESnBsT,GAAkB,SAASxU,GACvC,OAAOyU,OAAOrR,KANK,YAOjBsR,MAAK,SAASC,GACd,OAAOA,EAAMC,MAAM5U,GACjB0U,MAAK,SAAS1V,GACd,QAASA,CACV,GACF,GACF,ECpCgM,GC0BhM,CACAL,KAAAA,sBACAa,MAAAA,CACA+J,OAAAA,CACA7J,KAAAA,OACAC,UAAAA,GAEAoQ,YAAAA,CACArQ,KAAAA,OACAC,UAAAA,GAEA6L,OAAAA,CACA9L,KAAAA,SACAC,UAAAA,IAGAU,SAAAA,CACAwU,QAAAA,WACA,gDACA,GAEAxE,MAAAA,CACAwE,QAAAA,WACA,mCACA,qBACA,GAEA7H,QAAAA,WACA,mCACA,qBACA,GCtCA,IAXgB,OACd,ICRW,WAA+C,OAAOhL,EAA5BD,KAAYE,MAAMD,IAAa,OACtE,GACsB,IDSpB,EACA,KACA,KACA,MAI8B,oBElBgK,GC6BhM,CACArD,KAAAA,sBACAa,MAAAA,CACAsV,IAAAA,CACApV,KAAAA,OACAC,UAAAA,IAGA0Q,MAAAA,CACAyE,IAAAA,WACA,4CACA,GAEA9H,QAAAA,WACA,4CACA,eCjCI,GAAU,CAAC,EAEf,GAAQvL,kBAAoB,IAC5B,GAAQC,cAAgB,IAElB,GAAQC,OAAS,SAAc,KAAM,QAE3C,GAAQC,OAAS,IACjB,GAAQC,mBAAqB,IAEhB,IAAI,KAAS,IAKJ,MAAW,aAAiB,YALlD,ICFA,IAXgB,OACd,ICTW,WAA+C,OAAOG,EAA5BD,KAAYE,MAAMD,IAAa,OAAO,CAACE,YAAY,mBAC1F,GACsB,IDUpB,EACA,KACA,WACA,MAI8B,6wEE4GhC,YAEA,GAAe,iBAAW,CAC1BvD,KAAAA,YAEA8D,WAAAA,CACAsS,oBAAAA,GACAC,oBAAAA,GACAC,SAAAA,GAAAA,EACAC,WAAAA,GAAAA,QACAC,SAAAA,GAAAA,GACAC,eAAAA,KACAC,UAAAA,KACApH,sBAAAA,KACAqH,cAAAA,MAGA9V,MAAAA,CACA+V,OAAAA,CACA7V,KAAAA,QACAG,SAAAA,GAEA2V,gBAAAA,CACA9V,KAAAA,QACAG,SAAAA,GAEA0J,OAAAA,CACA7J,KAAAA,OACAC,UAAAA,GAEAwH,MAAAA,CACAzH,KAAAA,OACAC,UAAAA,IAIAyO,MAAAA,WAIA,OACAqH,WAJA,KAKAC,eAJA,KAKA9H,gBAJA,KAMA,EAEA3O,KAAAA,WACA,OACA0W,kBAAAA,EACAC,gBAAAA,GACA9S,QAAAA,GAEA,EAEAzC,SAAAA,CAEA4M,WAAAA,WACA,sCACA,EAGA8C,YAAAA,WACA,8BACA,EAEA7E,QAAAA,WAAA,MACA,oEACA,EAEAhH,IAAAA,WAAA,QAEA,uHACA,EAEApE,OAAAA,WACA,oCACA,EACA2G,YAAAA,WACA,2CACA,oBACA,EACAoP,KAAAA,WACA,uCACA,8BACA,2BAEA,cACA,EAEAC,YAAAA,WACA,uCACA,cACA,EAKA,IAEA,EAFA,IAEA,0BADA,SACA,EACA,EAEAC,OAAAA,WACA,gCACA,gCAAAlO,MAAAA,CAAA3D,KAAAA,EAAAA,EAAAA,MAAAA,KAAAA,IAAAA,KAAAA,OAAAA,aACA,OACA8R,GAAAA,cACAzK,MAAAA,KAAAA,EAAAA,QAAAA,qBAAAA,CAAA5M,KAAAA,KAAAA,cACAwV,GAAAA,EAEA,CACA,OACA8B,KAAAA,KAAAA,OAAAA,OAEA1K,MAAAA,KAAAA,EAAAA,QAAAA,uBAAAA,CAAA5M,KAAAA,KAAAA,cAEA,EAEAuX,cAAAA,CACAC,IAAAA,WACA,mCACA,EACApD,IAAAA,SAAAA,GACAlQ,GAAAA,MAAAA,0BAAAA,CAAAmQ,UAAAA,IACA,0BACA,GAGAoD,aAAAA,WACA,0CACA,EAEApW,WAAAA,WACA,IACA,wEAMA,OAJAqW,EAAAA,aAAAA,IAAAA,IAAAA,MACAA,EAAAA,aAAAA,IAAAA,IAAAA,MAEAA,EAAAA,aAAAA,IAAAA,KAAAA,IAAAA,KAAAA,aAAAA,IAAAA,KACA,MAGA,CAFA,SACA,WACA,CACA,EAEAC,QAAAA,WAAA,UACA,+CACA,8HACA,SACA,qBAEA,EACA,EAEAC,eAAAA,WAAA,WACA,UACAtG,QAAAA,SAAAA,GAAA,yDACAxE,MAAAA,SAAAA,EAAAA,GAAA,kCACA,EAEA+K,qBAAAA,WAAA,WACA,+IACA,EAEAC,mBAAAA,WACA,mBACA,8BACAjJ,GAAAA,QAAAA,SAAAA,GAAA,oBAEA,EAEAkJ,SAAAA,WACA,wCACA,GAGArG,MAAAA,CACAkF,OAAAA,SAAAA,EAAAA,GACA,kBAMA,OALA,uBAIA,0CAKA,oCACA,EAMAvV,WAAAA,WACA,gBACA,0BACA,GAMAgN,QAAAA,WAIA,oDACA,2BACA,WAGA,0BACA,EAEA0B,cAAAA,WACA,iBACA,EAEArN,QAAAA,CACAsV,oBAAAA,WAAA,8IACA,8EAKAnC,GAAAA,EAAAA,YAAA,WAAAoC,EAAAA,KACAA,CAAA,eAEA,OADA,kDACA,gDAKA,kEAdA,EAeA,EAEAC,qBAAAA,WAAA,WAEA,oBAKA,qBACA,gBAIA,0BAGA,+CACA,gBAEAC,EAAAA,cAAAA,EAAAA,OAAAA,OAAAA,OACAA,EAAAA,OAAAA,WACA,kDACA,sBACAC,EAAAA,EACA,EACAD,EAAAA,QAAAA,WACA,sBACAE,EAAAA,EACA,EACAF,EAAAA,IAAAA,EAAAA,WAGAG,GAAAA,WACAH,EAAAA,QAAAA,KACAA,EAAAA,OAAAA,KACAA,EAAAA,IAAAA,GACAI,EAAAA,OACA,GACA,GAjCA,CAkCA,EAEAC,WAAAA,WAEA,gBAGA,gBAGA,kCACA,EAEAC,SAAAA,WACA,wBACA,yBAEA,sBACA,6BACA,yBAEA,EAEAC,SAAAA,SAAAA,GAEA,IADA,QACA,uBAEAC,GAAAA,GAAAA,GAAAA,EADA,gBAEAA,GAAAA,EAEA,QACA,EAEAC,cAAAA,SAAAA,GAAA,iJAGA,OAFA9Q,EAAAA,EAAAA,YAAAA,CAAAA,EAAAA,QAAAA,EAAAA,aAAA,SAEA,wBACAsB,EAAAA,KAAAA,EAAAA,OAAAA,EAAAA,aAAA,uDAEAlF,GAAAA,MAAAA,+BAAAA,CAAAkF,OAAAA,EAAA6C,EAAAA,EAAAA,MACAtG,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,QAAAA,+CAAAA,CAAAmC,YAAAA,KAAA,QAEA,OAFA,UAEA,wFATA,EAWA,EAEA7B,EAAAA,EAAAA,GACA4S,eAAAA,GAAAA,MCpcsL,kBCWlL,GAAU,CAAC,EAEf,GAAQ/V,kBAAoB,IAC5B,GAAQC,cAAgB,IAElB,GAAQC,OAAS,SAAc,KAAM,QAE3C,GAAQC,OAAS,IACjB,GAAQC,mBAAqB,IAEhB,IAAI,KAAS,IAKJ,MAAW,aAAiB,YALlD,eCVI,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,YALlD,ICZI,IAAY,OACd,ICVW,WAAkB,IAAIC,EAAIC,KAAKC,EAAGF,EAAIG,MAAMD,GAAgC,OAAtBF,EAAIG,MAAMqS,YAAmBtS,EAAG,WAAW,CAACA,EAAG,KAAK,CAACE,YAAY,4BAA4B,CAAEJ,EAAIyT,OAAQvT,EAAG,wBAAwB,CAACG,MAAM,CAAC,aAAaL,EAAI8C,EAAE,QAAS,mCAAoC,CAAE6B,YAAa3E,EAAI2E,cAAe,QAAU3E,EAAIoU,cAAc,MAAQpU,EAAIhC,OAAO2X,WAAW,KAAO,iBAAiBpV,GAAG,CAAC,iBAAiB,SAASkC,GAAQzC,EAAIoU,cAAc3R,CAAM,KAAKzC,EAAImD,MAAM,GAAGnD,EAAIQ,GAAG,KAAKN,EAAG,KAAK,CAACE,YAAY,wBAAwB,CAACF,EAAG,IAAIF,EAAI+C,GAAG,CAAC6S,IAAI,QAAQ,IAAI5V,EAAIiU,QAAO,GAAO,CAAC/T,EAAG,OAAO,CAACE,YAAY,wBAAwB,CAAsB,WAApBJ,EAAIyH,OAAO7J,KAAmBsC,EAAG,cAAeF,EAAI9B,aAAe8B,EAAI6T,iBAAkB3T,EAAG,OAAO,CAAC0V,IAAI,aAAaxV,YAAY,+BAA+BiB,MAAO,CAAEyS,gBAAiB9T,EAAI8T,mBAAsB9T,EAAIwU,QAAStU,EAAG,OAAO,CAACE,YAAY,kEAAkEiB,MAAO,CAAEyS,gBAAiB9T,EAAIwU,WAAatU,EAAG,aAAa,GAAGF,EAAIQ,GAAG,KAAKN,EAAG,OAAO,CAACE,YAAY,6BAA6B,CAACJ,EAAIQ,GAAGR,EAAIU,GAAGV,EAAI2E,oBAAoB3E,EAAIQ,GAAG,KAAKN,EAAG,KAAK,CAACE,YAAY,0BAA0BK,MAAK,kCAA4BT,EAAI4U,WAAY,CAAE5U,EAAIyT,OAAQvT,EAAG,YAAY,CAAC0V,IAAI,cAAcvV,MAAM,CAAC,eAAc,EAAK,OAASL,EAAI0U,qBAAqBxN,SAASlH,EAAIgD,GAAIhD,EAAI2U,oBAAoB,SAAS1O,GAAQ,OAAO/F,EAAG,iBAAiB,CAACgD,IAAI+C,EAAOxH,GAAGgC,MAAM,0BAA4BwF,EAAOxH,GAAG8B,GAAG,CAAC,MAAQ,SAASkC,GAAQ,OAAOzC,EAAIyV,cAAcxP,EAAO,GAAGqH,YAAYtN,EAAIuN,GAAG,CAAC,CAACrK,IAAI,OAAOsK,GAAG,WAAW,MAAO,CAAExN,EAAIgB,UAAYiF,EAAOxH,GAAIyB,EAAG,gBAAgB,CAACG,MAAM,CAAC,KAAO,MAAMH,EAAG,sBAAsB,CAACG,MAAM,CAAC,IAAM4F,EAAOI,cAAc,CAACrG,EAAIyH,QAASzH,EAAIiO,gBAAgB,EAAER,OAAM,IAAO,MAAK,IAAO,CAACzN,EAAIQ,GAAG,aAAaR,EAAIU,GAAGuF,EAAOtB,YAAY,CAAC3E,EAAIyH,QAASzH,EAAIiO,cAAc,aAAa,IAAG,GAAGjO,EAAImD,MAAM,GAAGnD,EAAIQ,GAAG,KAAMR,EAAI0T,gBAAiBxT,EAAG,KAAK,CAACE,YAAY,uBAAuBiB,MAAO,CAAEwU,QAAS7V,EAAIgU,cAAgB,CAAC9T,EAAG,OAAO,CAACF,EAAIQ,GAAGR,EAAIU,GAAGV,EAAI+T,WAAW/T,EAAImD,KAAKnD,EAAIQ,GAAG,KAAKR,EAAIgD,GAAIhD,EAAIoJ,SAAS,SAASI,GAAO,MAAC,OAAOtJ,EAAG,KAAK,CAACgD,IAAIsG,EAAO/K,GAAG2B,YAAY,gCAAgCK,MAAK,0BAAmC,QAAnC,EAAoBT,EAAIiO,mBAAW,aAAf,EAAiBxP,GAAE,YAAI+K,EAAO/K,KAAM,CAAEuB,EAAIyT,OAAQvT,EAAG,sBAAsB,CAACG,MAAM,CAAC,eAAeL,EAAIiO,YAAY,OAASzE,EAAOE,OAAO,OAAS1J,EAAIyH,UAAUzH,EAAImD,MAAM,EAAE,KAAI,EACt0E,GACsB,IDWpB,EACA,KACA,WACA,MAIF,GAAe,GAAiB,iPE0ChC,IC9D4L,GD8D7K,iBAAW,CAC1BtG,KAAAA,kBAEA8D,WAAAA,CACA,EAEAjD,MAAAA,CACAgW,gBAAAA,CACA9V,KAAAA,QACAG,SAAAA,GAEAgJ,MAAAA,CACAnJ,KAAAA,MACAC,UAAAA,GAEA+L,QAAAA,CACAhM,KAAAA,OACAG,QAAAA,KAIAuO,MAAAA,WACA,WAEA,OACAqH,WAFA,KAGA7C,WAAAA,EAEA,EAEAvS,SAAAA,CACA0P,YAAAA,WACA,8BACA,EAEA7L,IAAAA,WAAA,QAEA,uHACA,EAEA0T,cAAAA,WAAA,MACA,kDAIA,kBACA,oDAEA,4DACA,iCANA,CAOA,EAEA1M,QAAAA,WAAA,MACA,oEACA,EAEA2M,UAAAA,WAAA,MAEA,0DACA,sCAIA,qEACA,GAGAxW,QAAAA,CACAyW,eAAAA,SAAAA,GACA,UACA,gEACA,8bAEA,EAEAlT,EAAAA,EAAAA,kBE9HI,GAAU,CAAC,EAEf,GAAQnD,kBAAoB,IAC5B,GAAQC,cAAgB,IAElB,GAAQC,OAAS,SAAc,KAAM,QAE3C,GAAQC,OAAS,IACjB,GAAQC,mBAAqB,IAEhB,IAAI,KAAS,IAKJ,MAAW,aAAiB,YALlD,ICFA,IAXgB,OACd,ICTW,WAAkB,IAAIC,EAAIC,KAAKC,EAAGF,EAAIG,MAAMD,GAAgC,OAAtBF,EAAIG,MAAMqS,YAAmBtS,EAAG,KAAK,CAACA,EAAG,KAAK,CAACE,YAAY,4BAA4B,CAACF,EAAG,OAAO,CAACE,YAAY,mBAAmB,CAACJ,EAAIQ,GAAGR,EAAIU,GAAGV,EAAI8C,EAAE,QAAS,4BAA4B9C,EAAIQ,GAAG,KAAKN,EAAG,KAAK,CAACE,YAAY,wBAAwB,CAACF,EAAG,OAAO,CAACE,YAAY,yBAAyBJ,EAAIQ,GAAG,KAAKN,EAAG,OAAO,CAACF,EAAIQ,GAAGR,EAAIU,GAAGV,EAAI4J,cAAc5J,EAAIQ,GAAG,KAAKN,EAAG,KAAK,CAACE,YAAY,4BAA4BJ,EAAIQ,GAAG,KAAMR,EAAI0T,gBAAiBxT,EAAG,KAAK,CAACE,YAAY,2CAA2C,CAACF,EAAG,OAAO,CAACF,EAAIQ,GAAGR,EAAIU,GAAGV,EAAI+V,gBAAgB/V,EAAImD,KAAKnD,EAAIQ,GAAG,KAAKR,EAAIgD,GAAIhD,EAAIoJ,SAAS,SAASI,GAAO,MAAC,OAAOtJ,EAAG,KAAK,CAACgD,IAAIsG,EAAO/K,GAAGgC,MAAMT,EAAIgW,eAAexM,IAAS,CAACtJ,EAAG,OAAO,CAACF,EAAIQ,GAAGR,EAAIU,GAAiB,QAAf,EAAC8I,EAAOI,eAAO,aAAd,OAAAJ,EAAiBxJ,EAAI+G,MAAO/G,EAAIiO,kBAAkB,KAAI,EACxzB,GACsB,IDUpB,EACA,KACA,WACA,MAI8B,kIEqChC,YAEA,GAAe,iBAAW,CAC1BpR,KAAAA,yBAEA8D,WAAAA,CACAuS,oBAAAA,GACAK,UAAAA,KACAD,eAAAA,KACAE,cAAAA,MAGA9V,MAAAA,CACAuQ,YAAAA,CACArQ,KAAAA,OACAC,UAAAA,GAEAoY,cAAAA,CACArY,KAAAA,MACAG,QAAAA,WAAA,YAIAuO,MAAAA,WAGA,OACAqH,WAHA,KAIAC,eAHA,KAKA,EAEAzW,KAAAA,WACA,OACA6D,QAAAA,KAEA,EAEAzC,SAAAA,CACAkW,eAAAA,WAAA,WACA,UACAtG,QAAAA,SAAAA,GAAA,sBACAA,QAAAA,SAAAA,GAAA,sDACAxE,MAAAA,SAAAA,EAAAA,GAAA,kCACA,EAEA5C,MAAAA,WAAA,WACA,0BACAI,KAAAA,SAAAA,GAAA,uBACAgH,QAAAA,SAAAA,GAAA,WACA,GAGA5O,QAAAA,CAOAoQ,QAAAA,SAAAA,GACA,iCACA,EAEA8F,cAAAA,SAAAA,GAAA,wJAIA,OAHA9Q,EAAAA,EAAAA,YAAAA,EAAAA,MAAAA,EAAAA,aACAuR,EAAAA,EAAAA,cAAA,SAEA,wBACAjQ,EAAAA,UAAAA,EAAAA,MAAAA,EAAAA,aAAA,YAAAkQ,EAAAA,EAAAA,MAEAA,MAAAA,SAAAA,GAAA,iCAMA,OAJAC,EAAAA,EACAjI,QAAAA,SAAAA,EAAAA,GAAA,mBACA,yBAEA3L,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,QAAAA,2CAAAA,CAAAmC,YAAAA,KAAA,4BAKAsI,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,QAAAA,qDAAAA,CAAAtI,YAAAA,KACA,2EAEA5D,GAAAA,MAAAA,+BAAAA,CAAAkF,OAAAA,EAAA6C,EAAAA,EAAAA,MACAtG,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,QAAAA,+CAAAA,CAAAmC,YAAAA,KAAA,QAEA,OAFA,UAEA,6QAEA,EAEA7B,EAAAA,EAAAA,MCpJmM,kBCW/L,GAAU,CAAC,EAEf,GAAQnD,kBAAoB,IAC5B,GAAQC,cAAgB,IAElB,GAAQC,OAAS,SAAc,KAAM,QAE3C,GAAQC,OAAS,IACjB,GAAQC,mBAAqB,IAEhB,IAAI,KAAS,IAKJ,MAAW,aAAiB,YALlD,ICbI,IAAY,OACd,ICTW,WAAkB,IAAIC,EAAIC,KAAKC,EAAGF,EAAIG,MAAMD,GAAgC,OAAtBF,EAAIG,MAAMqS,YAAmBtS,EAAG,KAAK,CAACE,YAAY,mDAAmDC,MAAM,CAAC,QAAU,MAAM,CAACH,EAAG,YAAY,CAAC0V,IAAI,cAAcvV,MAAM,CAAC,WAAaL,EAAIgB,QAAQ,eAAc,EAAK,OAAS,IAAIhB,EAAIgD,GAAIhD,EAAIyU,gBAAgB,SAASxO,GAAQ,OAAO/F,EAAG,iBAAiB,CAACgD,IAAI+C,EAAOxH,GAAGgC,MAAM,iCAAmCwF,EAAOxH,GAAG8B,GAAG,CAAC,MAAQ,SAASkC,GAAQ,OAAOzC,EAAIyV,cAAcxP,EAAO,GAAGqH,YAAYtN,EAAIuN,GAAG,CAAC,CAACrK,IAAI,OAAOsK,GAAG,WAAW,MAAO,CAAExN,EAAIgB,UAAYiF,EAAOxH,GAAIyB,EAAG,gBAAgB,CAACG,MAAM,CAAC,KAAO,MAAMH,EAAG,sBAAsB,CAACG,MAAM,CAAC,IAAM4F,EAAOI,cAAcrG,EAAI+G,MAAO/G,EAAIiO,gBAAgB,EAAER,OAAM,IAAO,MAAK,IAAO,CAACzN,EAAIQ,GAAG,WAAWR,EAAIU,GAAGuF,EAAOtB,YAAY3E,EAAI+G,MAAO/G,EAAIiO,cAAc,WAAW,IAAG,IAAI,EACxzB,GACsB,IDUpB,EACA,KACA,WACA,MAIF,GAAe,GAAiB,gvCEyBhC,IC5CkM,GD4CnL,iBAAW,CAC1BpR,KAAAA,wBAEA8D,WAAAA,CACA0V,SAAAA,GAAAA,EACAC,OAAAA,GAAAA,EACAC,SAAAA,MAGAC,OAAAA,CAAAA,gBAEA9Y,MAAAA,CACAb,KAAAA,CACAe,KAAAA,OACAC,UAAAA,GAEAwT,KAAAA,CACAzT,KAAAA,OACAC,UAAAA,IAIAyO,MAAAA,WAEA,OACAmK,aAFA,KAIA,EAEAlY,SAAAA,GAAAA,GAAAA,CAAAA,GACAmY,EAAAA,GAAAA,IAAAA,GAAAA,CAAAA,wBAAAA,CAAAA,EAAAA,CAEAzI,YAAAA,WACA,8BACA,EAEA0I,YAAAA,WACA,8DACA,iCACA,UACA,EACAlF,aAAAA,WACA,8DACA,IAGAlS,QAAAA,CACAqX,cAAAA,SAAAA,GACA,wBACA,4BACA,6BACA,6DACApN,OAAAA,EACA8H,UAAAA,GAEA,EAEAxO,EAAAA,EAAAA,iBE1FI,GAAU,CAAC,EAEf,GAAQnD,kBAAoB,IAC5B,GAAQC,cAAgB,IAElB,GAAQC,OAAS,SAAc,KAAM,QAE3C,GAAQC,OAAS,IACjB,GAAQC,mBAAqB,IAEhB,IAAI,KAAS,IAKJ,MAAW,aAAiB,YALlD,ICFA,IAXgB,OACd,ICTW,WAAkB,IAAIC,EAAIC,KAAKC,EAAGF,EAAIG,MAAMD,GAAgC,OAAtBF,EAAIG,MAAMqS,YAAmBtS,EAAG,WAAW,CAACE,YAAY,iCAAiCK,MAAM,CAAC,yCAA0CT,EAAI2W,cAAgB3W,EAAIqR,MAAMhR,MAAM,CAAC,aAAaL,EAAI4W,cAAc5W,EAAInD,MAAM,KAAO,YAAY0D,GAAG,CAAC,MAAQ,SAASkC,GAAyD,OAAjDA,EAAOE,kBAAkBF,EAAOC,iBAAwB1C,EAAI6W,aAAa7W,EAAIqR,KAAK,IAAI,CAAErR,EAAI2W,cAAgB3W,EAAIqR,MAAQrR,EAAIyR,aAAcvR,EAAG,SAAS,CAACG,MAAM,CAAC,KAAO,QAAQwK,KAAK,SAAS3K,EAAG,WAAW,CAACG,MAAM,CAAC,KAAO,QAAQwK,KAAK,SAAS7K,EAAIQ,GAAG,OAAOR,EAAIU,GAAGV,EAAInD,MAAM,OAAO,EAC/lB,GACsB,IDUpB,EACA,KACA,KACA,MAI8B,wtCE8DhC,ICjF4L,GDiF7K,iBAAW,CAC1BA,KAAAA,kBAEA8D,WAAAA,CACAmW,sBAAAA,GACA3K,sBAAAA,KACA4K,uBAAAA,IAGAC,QAAAA,WACA,OACAH,aAAAA,KAAAA,aAEA,EAEAnZ,MAAAA,CACAgW,gBAAAA,CACA9V,KAAAA,QACAG,SAAAA,GAEAgJ,MAAAA,CACAnJ,KAAAA,MACAC,UAAAA,IAIAyO,MAAAA,WAIA,OACAqH,WAJA,KAKAC,eAJA,KAKA6C,aAJA,KAMA,EAEAlY,SAAAA,GAAAA,GAAAA,CAAAA,GACAmY,EAAAA,GAAAA,IAAAA,GAAAA,CAAAA,wBAAAA,CAAAA,EAAAA,CAGAzI,YAAAA,WACA,8BACA,EAEA7E,QAAAA,WAAA,MACA,oEACA,EAEAhH,IAAAA,WAAA,QAEA,uHACA,EAEA6U,cAAAA,WACA,+CACA,6BACA,+BACA,OACA,eACAnZ,QAAAA,KAAAA,cACAoZ,cAAAA,KAAAA,eACAzN,MAAAA,EAEA,EAEAwM,cAAAA,WACA,mCACA,EAEAkB,cAAAA,WACA,oDACA,EAEAC,eAAAA,WACA,oCACA,EAEAC,eAAAA,WACA,+CACA,EAEAV,YAAAA,WACA,8DACA,iCACA,UACA,EACAlF,aAAAA,WACA,8DACA,IAGAlS,QAAAA,CACAyW,eAAAA,SAAAA,GACA,WACA,wBACA,wCACA,8DACA,yCAEA,EAEAsB,YAAAA,SAAAA,GACA,MACA,2EACAvW,GAAAA,MAAAA,+BAAAA,CAAAmQ,UAAAA,IACA,0BACA,MACAnQ,GAAAA,MAAAA,qBACA,2BAEA,EAEA8V,aAAAA,SAAAA,GAEA,qBAKA,sDAJA,6DAKA,EAEA/T,EAAAA,EAAAA,kBEjMI,GAAU,CAAC,EAEf,GAAQnD,kBAAoB,IAC5B,GAAQC,cAAgB,IAElB,GAAQC,OAAS,SAAc,KAAM,QAE3C,GAAQC,OAAS,IACjB,GAAQC,mBAAqB,IAEhB,IAAI,KAAS,IAKJ,MAAW,aAAiB,YALlD,ICFA,IAXgB,OACd,ICTW,WAAkB,IAAIC,EAAIC,KAAKC,EAAGF,EAAIG,MAAMD,GAAgC,OAAtBF,EAAIG,MAAMqS,YAAmBtS,EAAG,KAAK,CAACA,EAAG,KAAK,CAACE,YAAY,+CAA+C,CAACF,EAAG,wBAAwBF,EAAI+C,GAAG,CAACxC,GAAG,CAAC,iBAAiBP,EAAIsX,cAAc,wBAAwBtX,EAAIiX,eAAc,KAAS,GAAGjX,EAAIQ,GAAG,KAAOR,EAAIoX,eAAyH,CAAClX,EAAG,KAAK,CAACE,YAAY,uEAAuEG,GAAG,CAAC,MAAQ,SAASkC,GAAyD,OAAjDA,EAAOE,kBAAkBF,EAAOC,iBAAwB1C,EAAI6W,aAAa,WAAW,IAAI,CAAC3W,EAAG,OAAO,CAACE,YAAY,yBAAyBJ,EAAIQ,GAAG,KAAKN,EAAG,wBAAwB,CAACG,MAAM,CAAC,KAAOL,EAAI8C,EAAE,QAAS,QAAQ,KAAO,eAAe,GAAG9C,EAAIQ,GAAG,KAAKN,EAAG,KAAK,CAACE,YAAY,4BAA4BJ,EAAIQ,GAAG,KAAMR,EAAI0T,gBAAiBxT,EAAG,KAAK,CAACE,YAAY,0CAA0CK,MAAM,CAAC,+BAAgCT,EAAI0T,kBAAkB,CAACxT,EAAG,wBAAwB,CAACG,MAAM,CAAC,KAAOL,EAAI8C,EAAE,QAAS,QAAQ,KAAO,WAAW,GAAG9C,EAAImD,KAAKnD,EAAIQ,GAAG,KAAKR,EAAIgD,GAAIhD,EAAIoJ,SAAS,SAASI,GAAQ,OAAOtJ,EAAG,KAAK,CAACgD,IAAIsG,EAAO/K,GAAGgC,MAAMT,EAAIgW,eAAexM,IAAS,CAAIA,EAAOG,KAAMzJ,EAAG,wBAAwB,CAACG,MAAM,CAAC,KAAOmJ,EAAOC,MAAM,KAAOD,EAAO/K,MAAMyB,EAAG,OAAO,CAACF,EAAIQ,GAAG,aAAaR,EAAIU,GAAG8I,EAAOC,OAAO,eAAe,EAAE,KAAhiCvJ,EAAG,yBAAyB,CAACG,MAAM,CAAC,eAAeL,EAAIiO,YAAY,iBAAiBjO,EAAIiW,kBAA68B,EACr3C,GACsB,IDUpB,EACA,KACA,WACA,MAI8B,QEnB6J,GCoE9K,iBAAW,CAC1BpZ,KAAAA,mBAEA8D,WAAAA,CACA4W,gBAAAA,GAAAA,GACAC,UAAAA,GACAC,gBAAAA,GACAC,gBAAAA,IAGAha,MAAAA,CACAuQ,YAAAA,CACArQ,KAAAA,OACAC,UAAAA,GAEAkJ,MAAAA,CACAnJ,KAAAA,MACAC,UAAAA,IAIAV,KAAAA,WACA,OACAqa,UAAAA,GAEA,EAEAjZ,SAAAA,CACAiR,MAAAA,WACA,8DACA,EAEAmI,YAAAA,WACA,wBACA,yDAAAC,MAAAA,GACA,EACAC,cAAAA,WACA,0CACA,6DAAAD,MAAAA,GACA,EACAhO,QAAAA,WACA,gEACA,EACA8J,gBAAAA,WACA,wEACA,GAGAxI,QAAAA,WAEA,+DACA4M,EAAAA,GAAAA,aAAAA,OAAAA,SACAA,EAAAA,GAAAA,aAAAA,OAAAA,QACA,EAEAvY,QAAAA,CACAwY,UAAAA,SAAAA,GACA,0BACA,EAEAjV,EAAAA,EAAAA,kBCrHI,GAAU,CAAC,EAEf,GAAQnD,kBAAoB,IAC5B,GAAQC,cAAgB,IAElB,GAAQC,OAAS,SAAc,KAAM,QAE3C,GAAQC,OAAS,IACjB,GAAQC,mBAAqB,IAEhB,IAAI,KAAS,IAKJ,MAAW,aAAiB,YALlD,ICFA,IAXgB,OACd,ICTW,WAAkB,IAAIC,EAAIC,KAAKC,EAAGF,EAAIG,MAAMD,GAAgC,OAAtBF,EAAIG,MAAMqS,YAAmBtS,EAAG,kBAAkB,CAAC0V,IAAI,kBAAkBxV,YAAY,aAAaC,MAAM,CAAC,YAAY,SAAS,MAAQL,EAAI+G,MAAM,YAAY,GAAG,cAAa,EAAK,aAAa,kBAAkB,WAAW,KAAK,aAAa,mBAAmB,WAAW,QAAQ,KAAO,SAASuG,YAAYtN,EAAIuN,GAAG,CAAC,CAACrK,IAAI,UAAUsK,GAAG,YAAiC,IAAtBwK,EAAI,EAAJA,KAAMvE,EAAM,EAANA,OAAQpO,EAAK,EAALA,MAAS,MAAO,CAACnF,EAAG,YAAY,CAACG,MAAM,CAAC,OAASoT,EAAO,MAAQpO,EAAM,oBAAoBrF,EAAI0T,gBAAgB,OAASsE,KAAQ,GAAG,CAAC9U,IAAI,SAASsK,GAAG,WAAW,MAAO,CAACtN,EAAG,UAAU,CAACE,YAAY,mBAAmB,CAACJ,EAAIQ,GAAG,WAAWR,EAAIU,GAAGV,EAAIiO,YAAYgK,SAAW,IAAI,WAAWjY,EAAIU,GAAGV,EAAI8C,EAAE,QAAS,2HAA2H,YAAY9C,EAAIQ,GAAG,KAAKN,EAAG,kBAAkB,CAACG,MAAM,CAAC,oBAAoBL,EAAI0T,gBAAgB,MAAQ1T,EAAI+G,SAAS,EAAE0G,OAAM,GAAM,CAACvK,IAAI,QAAQsK,GAAG,WAAW,MAAO,CAACtN,EAAG,kBAAkB,CAACG,MAAM,CAAC,oBAAoBL,EAAI0T,gBAAgB,MAAQ1T,EAAI+G,MAAM,QAAU/G,EAAI4J,WAAW,EAAE6D,OAAM,MACxmC,GACsB,IDUpB,EACA,KACA,WACA,MAI8B,mlEEmEhC,OAAe,iBAAW,CAC1B5Q,KAAAA,YAEA8D,WAAAA,CACAuX,YAAAA,GACAC,iBAAAA,GACAC,aAAAA,KACA7B,SAAAA,KACA3V,eAAAA,IACA4S,cAAAA,KACAvM,SAAAA,GAAAA,GAGAqF,MAAAA,WACA,WAIA,OACAqH,WAJA,KAKA7C,WAAAA,EACA8C,eALA,KAMA6C,aALA,KAOA,EAEAtZ,KAAAA,WACA,OACA6D,SAAAA,EACAqX,QAAAA,KAEA,EAEA9Z,SAAAA,CAEA0P,YAAAA,WACA,gCACA,gEACA,EAOA7L,IAAAA,WAAA,QAEA,uHACA,EAOA0T,cAAAA,WAAA,MACA,kDAIA,kBACA,oDAEA,4DACA,iCANA,CAOA,EAEAa,YAAAA,WACA,8DACA,iCACA,UACA,EACAlF,aAAAA,WACA,8DACA,EAOA6G,YAAAA,WAAA,aACA,qBACA,SAGA,+BACAzQ,MAAAA,SAAAA,GAAA,+BAGA,qDACA,4HACA8B,KAAAA,EAAAA,MACA,sCACA,CAEA,oBACA,kIAGA,0EAEA,qCAEA,iCAEA,6DAEA,EAKA4O,WAAAA,WACA,kCACA,EAOAC,aAAAA,WACA,qCACA,iBACA,YACA,EAKAC,cAAAA,WACA,qDACA,iCAAA1S,MAAAA,CAAA3D,IAAAA,IACA,GAGAmM,MAAAA,CACAN,YAAAA,SAAAA,EAAAA,IACA,+CAIAlN,GAAAA,MAAAA,eAAAA,CAAA2X,QAAAA,EAAAC,QAAAA,IACA,4BACA,oBACA,EAEAvW,IAAAA,SAAAA,EAAAA,GAAA,QACArB,GAAAA,MAAAA,oBAAAA,CAAA6X,OAAAA,EAAAC,OAAAA,IAEA,4BACA,oBAGA,sFACA,4CAEA,GAGAtZ,QAAAA,CACAuZ,aAAAA,WAAA,iKACA,QADA,EACA,uFAgBA,OAZA,aACA1W,EAAAA,EAAAA,IACA6L,EAAAA,EAAAA,YAGA,uEACA,mBACAlN,GAAAA,MAAAA,qCAKA,8CAEA,2BAAAgY,EAAAA,EAAAA,OAAAC,EAAAA,EAAAA,SACAjY,GAAAA,MAAAA,mBAAAA,CAAAqB,IAAAA,EAAA2W,OAAAA,EAAAC,SAAAA,IAGA,4BAGAD,EAAAA,SAAAA,EAAAA,KAAAA,SAAAA,GAAA,8BAGA,SACAxW,GAAAA,MAAAA,QAAAA,eAAAA,CAAAyN,QAAAA,EAAAA,GAAA+I,OAAAA,IACA,sBAAA/I,QAAAA,EAAAA,GAAAM,KAAAA,KAGA,qBACA,8BACA,sBAAAN,QAAAA,EAAAA,GAAAhS,OAAAA,EAAAA,WAAAA,OAAApB,KAAAA,KAGAmE,GAAAA,MAAAA,+BAAAA,CAAAqB,IAAAA,EAAA2W,OAAAA,EAAA9K,YAAAA,IAIAgL,EAAAA,QAAAA,SAAAA,GAAA,2BACAA,SAAAA,SAAAA,GACA,sBAAAjJ,QAAAA,EAAAA,GAAAhS,OAAAA,EAAAA,WAAAA,OAAApB,MAAAA,EAAAA,EAAAA,MAAAA,EAAAA,EAAAA,WACA,sDAEAmE,GAAAA,MAAAA,+BAAAA,CAAA8E,MAAAA,EAAAA,KAAA,QAEA,OAFA,UAEA,2QAGA,EAQA8J,QAAAA,SAAAA,GACA,iCACA,EAEA7M,EAAAA,EAAAA,MCzTsL,kBCWlL,GAAU,CAAC,EAEf,GAAQnD,kBAAoB,IAC5B,GAAQC,cAAgB,IAElB,GAAQC,OAAS,SAAc,KAAM,QAE3C,GAAQC,OAAS,IACjB,GAAQC,mBAAqB,IAEhB,IAAI,KAAS,IAKJ,MAAW,aAAiB,YALlD,ICFA,IAXgB,OACd,ICTW,WAAiB,QAAKC,EAAIC,KAAKC,EAAGF,EAAIG,MAAMD,GAAgC,OAAtBF,EAAIG,MAAMqS,YAAmBtS,EAAG,eAAe,CAACgZ,WAAW,CAAC,CAACrc,KAAK,OAAOsc,QAAQ,SAASra,QAAuB,QAAhB,EAACkB,EAAIiO,mBAAW,OAAf,EAAiBzF,QAAQ4Q,WAAW,yBAAyB3Y,MAAM,CAAC,sBAAsC,QAAjB,EAAET,EAAIiO,mBAAW,aAAf,EAAiBzF,QAAQnI,MAAM,CAAC,wBAAwB,KAAK,CAACH,EAAG,MAAM,CAACE,YAAY,sBAAsB,CAACF,EAAG,cAAc,CAACG,MAAM,CAAC,KAAOL,EAAIoC,KAAK7B,GAAG,CAAC,OAASP,EAAI8Y,gBAAgB9Y,EAAIQ,GAAG,KAAMR,EAAIwY,aAActY,EAAG,gBAAgB,CAACE,YAAY,6BAA6BJ,EAAImD,MAAM,GAAGnD,EAAIQ,GAAG,KAAMR,EAAIgB,UAAYhB,EAAIwY,aAActY,EAAG,gBAAgB,CAACE,YAAY,2BAA2BC,MAAM,CAAC,KAAO,GAAG,MAAQL,EAAI8C,EAAE,QAAS,8BAA+B9C,EAAIgB,SAAWhB,EAAIuY,WAAYrY,EAAG,iBAAiB,CAACG,MAAM,CAAC,MAAQL,EAAI8C,EAAE,QAAS,oBAAoB,YAAc9C,EAAI8C,EAAE,QAAS,6CAA6C,8BAA8B,IAAIwK,YAAYtN,EAAIuN,GAAG,CAAC,CAACrK,IAAI,SAASsK,GAAG,WAAW,MAAO,CAAc,MAAZxN,EAAIoC,IAAalC,EAAG,WAAW,CAACG,MAAM,CAAC,aAAa,0CAA0C,KAAO,UAAU,GAAKL,EAAIyY,gBAAgB,CAACzY,EAAIQ,GAAG,aAAaR,EAAIU,GAAGV,EAAI8C,EAAE,QAAS,YAAY,cAAc9C,EAAImD,KAAK,EAAEsK,OAAM,GAAM,CAACvK,IAAI,OAAOsK,GAAG,WAAW,MAAO,CAACtN,EAAG,YAAY,EAAEuN,OAAM,OAAUvN,EAAG,mBAAmB,CAAC0V,IAAI,mBAAmBvV,MAAM,CAAC,eAAeL,EAAIiO,YAAY,MAAQjO,EAAIsY,gBAAgB,EACj3C,GACsB,IDUpB,EACA,KACA,WACA,MAI8B,itBEnBhC,IAsBqBe,GAAQ,WAI5B,oHAAc,yIACbpZ,KAAKqZ,UAAY,GACjB/W,GAAQyB,MAAM,iCACf,SAyBC,SAvBD,4BAOA,SAASgD,GACR,OAAI/G,KAAKqZ,UAAUnL,QAAO,SAAArF,GAAC,OAAIA,EAAEjM,OAASmK,EAAKnK,IAAI,IAAEqK,OAAS,GAC7D3E,GAAQsD,MAAM,uDACP,IAER5F,KAAKqZ,UAAUvR,KAAKf,IACb,EACR,GAEA,oBAKA,WACC,OAAO/G,KAAKqZ,SACb,2EAAC,EAhC2B,+zBCtB7B,IAuBqBjN,GAAO,WAiB3B,WAAYxP,EAAM,GAAqB,IAAnBoO,EAAE,EAAFA,GAAI3J,EAAI,EAAJA,KAAMG,EAAK,EAALA,mGAAK,wGAClCxB,KAAKsZ,MAAQ1c,EACboD,KAAKuZ,IAAMvO,EACXhL,KAAKwZ,MAAQnY,EACbrB,KAAKyZ,OAASjY,EAEY,mBAAfxB,KAAKwZ,QACfxZ,KAAKwZ,MAAQ,WAAO,GAGM,mBAAhBxZ,KAAKyZ,SACfzZ,KAAKyZ,OAAS,WAAO,EAEvB,SAgBC,SAhBA,sBAED,WACC,OAAOzZ,KAAKsZ,KACb,GAAC,cAED,WACC,OAAOtZ,KAAKuZ,GACb,GAAC,gBAED,WACC,OAAOvZ,KAAKwZ,KACb,GAAC,iBAED,WACC,OAAOxZ,KAAKyZ,MACb,2EAAC,EA9C0B,2BCG5BlW,EAAAA,QAAAA,IAAQmW,GAAAA,IAER,UA4BA,GA5Be,IAAIA,GAAAA,GAAO,CACzBtI,KAAM,UAINuI,MAAM/N,EAAAA,EAAAA,aAAY,cAAe,IACjCgO,gBAAiB,SAEjBC,OAAQ,CACP,CACCld,KAAM,IAENmd,MAAO,UAER,CACCnd,KAAM,kBACNC,KAAM,WACNa,OAAO,IAKTsc,eAAc,SAACjU,GACd,IAAMkU,GAASC,EAAAA,GAAAA,WAAUnU,GAAOjJ,QAAQ,SAAU,KAClD,OAAOmd,EAAU,IAAMA,EAAU,EAClC,IChCD5V,OAAO9H,IAAIC,MAAwB,QAAnB,GAAG6H,OAAO9H,IAAIC,aAAK,UAAI,CAAC,EACxC6H,OAAOiE,IAAI9L,MAAwB,QAAnB,GAAG6H,OAAOiE,IAAI9L,aAAK,UAAI,CAAC,EAGxCgH,EAAAA,QAAAA,IAAQ2W,GAAAA,IACR,IAAMC,IAAQC,EAAAA,GAAAA,MAGR9R,GAAa,IAAI+R,GACvBC,OAAOC,OAAOnW,OAAOiE,IAAI9L,MAAO,CAAE+L,WAAAA,KAClC/E,EAAAA,QAAAA,UAAAA,YAA4B+E,GAG5B,IlFLOkS,GkFKDpB,GAAW,IAAIqB,GACrBH,OAAOC,OAAOnW,OAAO9H,IAAIC,MAAO,CAAE6c,SAAAA,KAClCkB,OAAOC,OAAOnW,OAAO9H,IAAIC,MAAM6c,SAAU,CAAEhN,QAASsO,KAIxB,IADfnX,EAAAA,QAAAA,OAAWoX,IACI,CAAS,CACpC/d,KAAM,sBACNsH,UAAW,CACVoE,WAAAA,IAEDsS,OAAAA,GACAT,MAAAA,KAEmBhW,OAAO,yBAIT,IADDZ,EAAAA,QAAAA,OAAWsX,IACV,CAAa,CAC9Bje,KAAM,gBACNge,OAAAA,GACAT,MAAAA,KAEShW,OAAO,qBlF5BVqW,GAAcF,OAAOQ,QAAOjX,EAAAA,EAAAA,GAAU,QAAS,aAAc,CAAC,KAEpDoD,OAAS,IACxBnG,GAAAA,MAAa,6CAA8C0Z,IAC3DA,GAAYtb,SAAQ,SAAA6H,GACnBgB,GAAmBhB,GACfA,EAAKgU,SACRhU,EAAKgU,QAAQ7b,SAAQ,SAAA8b,GAAO,OAAIjT,GAAmB,GAAD,MAAMiT,GAAO,IAAE/S,OAAQlB,EAAKvI,KAAK,GAErF,KEbG,kBAAmBuO,UAEtB3I,OAAOC,iBAAiB,OAAM,4BAAE,qGAE2D,OAF3D,SAExBiQ,GAAM1I,EAAAA,EAAAA,aAAY,wCAAyC,CAAC,EAAG,CAAEqP,WAAW,IAAO,SAC9DlO,UAAUmO,cAAc/V,SAASmP,EAAK,CAAE6G,MAAO,MAAM,OAA1EC,EAAe,EAAH,KAClBta,GAAAA,MAAa,kBAAmB,CAAEsa,aAAAA,IAAe,gDAEjDta,GAAAA,MAAa,2BAA4B,CAAE8E,MAAK,OAAG,0DAIrD9E,GAAAA,MAAa,4GiFlCXua,QAA0B,GAA4B,KAE1DA,EAAwBvT,KAAK,CAACwT,EAAO9c,GAAI,6HAA8H,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,yDAAyD,MAAQ,GAAG,SAAW,8CAA8C,eAAiB,CAAC,qKAAqK,WAAa,MAEngB,gECJI6c,QAA0B,GAA4B,KAE1DA,EAAwBvT,KAAK,CAACwT,EAAO9c,GAAI,kPAAmP,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,iEAAiE,MAAQ,GAAG,SAAW,iIAAiI,eAAiB,CAAC,kXAAkX,WAAa,MAEh6B,gECJI6c,QAA0B,GAA4B,KAE1DA,EAAwBvT,KAAK,CAACwT,EAAO9c,GAAI,q+FAAs+F,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,uDAAuD,uDAAuD,MAAQ,GAAG,SAAW,kyBAAkyB,eAAiB,CAAC,uyIAAuyI,4ZAA4Z,WAAa,MAElrR,gECJI6c,QAA0B,GAA4B,KAE1DA,EAAwBvT,KAAK,CAACwT,EAAO9c,GAAI,y+FAA0+F,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,uDAAuD,6DAA6D,MAAQ,GAAG,SAAW,80BAA80B,eAAiB,CAAC,uyIAAuyI,kaAAka,WAAa,MAE9uR,gECJI6c,QAA0B,GAA4B,KAE1DA,EAAwBvT,KAAK,CAACwT,EAAO9c,GAAI,85FAA+5F,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,uDAAuD,6DAA6D,MAAQ,GAAG,SAAW,4yBAA4yB,eAAiB,CAAC,uyIAAuyI,iQAAiQ,WAAa,MAEh+Q,gECJI6c,QAA0B,GAA4B,KAE1DA,EAAwBvT,KAAK,CAACwT,EAAO9c,GAAI,iTAAkT,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,oEAAoE,MAAQ,GAAG,SAAW,yEAAyE,eAAiB,CAAC,+UAA+U,WAAa,MAEv4B,+DCJI6c,QAA0B,GAA4B,KAE1DA,EAAwBvT,KAAK,CAACwT,EAAO9c,GAAI,yrBAA0rB,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,mEAAmE,MAAQ,GAAG,SAAW,iKAAiK,eAAiB,CAAC,43BAA43B,WAAa,MAEn5D,gECJI6c,QAA0B,GAA4B,KAE1DA,EAAwBvT,KAAK,CAACwT,EAAO9c,GAAI,itBAAktB,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,8DAA8D,MAAQ,GAAG,SAAW,6QAA6Q,eAAiB,CAAC,wmCAAwmC,WAAa,MAE9vE,8DCJI6c,QAA0B,GAA4B,KAE1DA,EAAwBvT,KAAK,CAACwT,EAAO9c,GAAI,oQAAqQ,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,6DAA6D,MAAQ,GAAG,SAAW,mEAAmE,eAAiB,CAAC,gVAAgV,WAAa,MAE90B,+DCJI6c,QAA0B,GAA4B,KAE1DA,EAAwBvT,KAAK,CAACwT,EAAO9c,GAAI,0rCAA2rC,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,6DAA6D,MAAQ,GAAG,SAAW,uYAAuY,eAAiB,CAAC,06CAA06C,WAAa,MAElqG,gECJI6c,QAA0B,GAA4B,KAE1DA,EAAwBvT,KAAK,CAACwT,EAAO9c,GAAI,qdAAsd,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,kDAAkD,MAAQ,GAAG,SAAW,qLAAqL,eAAiB,CAAC,o5BAAo5B,WAAa,MAE1sD,gECJI6c,QAA0B,GAA4B,KAE1DA,EAAwBvT,KAAK,CAACwT,EAAO9c,GAAI,0WAA2W,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,mDAAmD,MAAQ,GAAG,SAAW,gGAAgG,eAAiB,CAAC,miBAAmiB,WAAa,MAE1pC,gECJI6c,QAA0B,GAA4B,KAE1DA,EAAwBvT,KAAK,CAACwT,EAAO9c,GAAI,kEAAmE,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,iDAAiD,MAAQ,GAAG,SAAW,mBAAmB,eAAiB,CAAC,+DAA+D,WAAa,MAE/T,+DCJI6c,QAA0B,GAA4B,KAE1DA,EAAwBvT,KAAK,CAACwT,EAAO9c,GAAI,yiCAA0iC,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,uDAAuD,MAAQ,GAAG,SAAW,sVAAsV,eAAiB,CAAC,i4CAAi4C,WAAa,MAEj7F,+DCJI6c,QAA0B,GAA4B,KAE1DA,EAAwBvT,KAAK,CAACwT,EAAO9c,GAAI,yKAA0K,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,uDAAuD,MAAQ,GAAG,SAAW,uBAAuB,eAAiB,CAAC,ilbAA8gb,WAAa,MAE/3b,QCNI+c,EAA2B,CAAC,EAGhC,SAASC,EAAoBC,GAE5B,IAAIC,EAAeH,EAAyBE,GAC5C,QAAqBE,IAAjBD,EACH,OAAOA,EAAaE,QAGrB,IAAIN,EAASC,EAAyBE,GAAY,CACjDjd,GAAIid,EACJI,QAAQ,EACRD,QAAS,CAAC,GAUX,OANAE,EAAoBL,GAAUM,KAAKT,EAAOM,QAASN,EAAQA,EAAOM,QAASJ,GAG3EF,EAAOO,QAAS,EAGTP,EAAOM,OACf,CAGAJ,EAAoBQ,EAAIF,ErH5BpB3f,EAAW,GACfqf,EAAoBS,EAAI,SAASjC,EAAQkC,EAAU3O,EAAI4O,GACtD,IAAGD,EAAH,CAMA,IAAIE,EAAeC,IACnB,IAASC,EAAI,EAAGA,EAAIngB,EAAS8K,OAAQqV,IAAK,CACrCJ,EAAW/f,EAASmgB,GAAG,GACvB/O,EAAKpR,EAASmgB,GAAG,GACjBH,EAAWhgB,EAASmgB,GAAG,GAE3B,IAJA,IAGIC,GAAY,EACPC,EAAI,EAAGA,EAAIN,EAASjV,OAAQuV,MACpB,EAAXL,GAAsBC,GAAgBD,IAAa7B,OAAOmC,KAAKjB,EAAoBS,GAAG5U,OAAM,SAASpE,GAAO,OAAOuY,EAAoBS,EAAEhZ,GAAKiZ,EAASM,GAAK,IAChKN,EAASQ,OAAOF,IAAK,IAErBD,GAAY,EACTJ,EAAWC,IAAcA,EAAeD,IAG7C,GAAGI,EAAW,CACbpgB,EAASugB,OAAOJ,IAAK,GACrB,IAAIK,EAAIpP,SACEoO,IAANgB,IAAiB3C,EAAS2C,EAC/B,CACD,CACA,OAAO3C,CArBP,CAJCmC,EAAWA,GAAY,EACvB,IAAI,IAAIG,EAAIngB,EAAS8K,OAAQqV,EAAI,GAAKngB,EAASmgB,EAAI,GAAG,GAAKH,EAAUG,IAAKngB,EAASmgB,GAAKngB,EAASmgB,EAAI,GACrGngB,EAASmgB,GAAK,CAACJ,EAAU3O,EAAI4O,EAwB/B,EsH5BAX,EAAoBhY,EAAI,SAAS8X,GAChC,IAAIsB,EAAStB,GAAUA,EAAOuB,WAC7B,WAAa,OAAOvB,EAAgB,OAAG,EACvC,WAAa,OAAOA,CAAQ,EAE7B,OADAE,EAAoBsB,EAAEF,EAAQ,CAAEG,EAAGH,IAC5BA,CACR,ECNApB,EAAoBsB,EAAI,SAASlB,EAASoB,GACzC,IAAI,IAAI/Z,KAAO+Z,EACXxB,EAAoByB,EAAED,EAAY/Z,KAASuY,EAAoByB,EAAErB,EAAS3Y,IAC5EqX,OAAO4C,eAAetB,EAAS3Y,EAAK,CAAEka,YAAY,EAAM/I,IAAK4I,EAAW/Z,IAG3E,ECPAuY,EAAoB4B,EAAI,WACvB,GAA0B,iBAAfC,WAAyB,OAAOA,WAC3C,IACC,OAAOrd,MAAQ,IAAIsd,SAAS,cAAb,EAGhB,CAFE,MAAOzU,GACR,GAAsB,iBAAXzE,OAAqB,OAAOA,MACxC,CACA,CAPuB,GCAxBoX,EAAoByB,EAAI,SAASM,EAAKC,GAAQ,OAAOlD,OAAOmD,UAAUC,eAAe3B,KAAKwB,EAAKC,EAAO,ECCtGhC,EAAoBmB,EAAI,SAASf,GACX,oBAAX+B,QAA0BA,OAAOC,aAC1CtD,OAAO4C,eAAetB,EAAS+B,OAAOC,YAAa,CAAE/e,MAAO,WAE7Dyb,OAAO4C,eAAetB,EAAS,aAAc,CAAE/c,OAAO,GACvD,ECNA2c,EAAoBqC,IAAM,SAASvC,GAGlC,OAFAA,EAAOwC,MAAQ,GACVxC,EAAOyC,WAAUzC,EAAOyC,SAAW,IACjCzC,CACR,ECJAE,EAAoBgB,EAAI,gBCAxBhB,EAAoBwC,EAAIrf,SAASsf,SAAWC,KAAKC,SAASjK,KAK1D,IAAIkK,EAAkB,CACrB,KAAM,GAaP5C,EAAoBS,EAAEO,EAAI,SAAS6B,GAAW,OAAoC,IAA7BD,EAAgBC,EAAgB,EAGrF,IAAIC,EAAuB,SAASC,EAA4BrhB,GAC/D,IAKIue,EAAU4C,EALVnC,EAAWhf,EAAK,GAChBshB,EAActhB,EAAK,GACnBuhB,EAAUvhB,EAAK,GAGIof,EAAI,EAC3B,GAAGJ,EAASwC,MAAK,SAASlgB,GAAM,OAA+B,IAAxB4f,EAAgB5f,EAAW,IAAI,CACrE,IAAIid,KAAY+C,EACZhD,EAAoByB,EAAEuB,EAAa/C,KACrCD,EAAoBQ,EAAEP,GAAY+C,EAAY/C,IAGhD,GAAGgD,EAAS,IAAIzE,EAASyE,EAAQjD,EAClC,CAEA,IADG+C,GAA4BA,EAA2BrhB,GACrDof,EAAIJ,EAASjV,OAAQqV,IACzB+B,EAAUnC,EAASI,GAChBd,EAAoByB,EAAEmB,EAAiBC,IAAYD,EAAgBC,IACrED,EAAgBC,GAAS,KAE1BD,EAAgBC,GAAW,EAE5B,OAAO7C,EAAoBS,EAAEjC,EAC9B,EAEI2E,EAAqBT,KAA4B,sBAAIA,KAA4B,uBAAK,GAC1FS,EAAmBzf,QAAQof,EAAqBM,KAAK,KAAM,IAC3DD,EAAmB7W,KAAOwW,EAAqBM,KAAK,KAAMD,EAAmB7W,KAAK8W,KAAKD,OClDvFnD,EAAoBqD,QAAKlD,ECGzB,IAAImD,EAAsBtD,EAAoBS,OAAEN,EAAW,CAAC,OAAO,WAAa,OAAOH,EAAoB,MAAQ,IACnHsD,EAAsBtD,EAAoBS,EAAE6C","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/apps/files/src/utils/davUtils.js","webpack:///nextcloud/apps/files/src/services/Templates.js","webpack:///nextcloud/apps/files/src/components/TemplatePreview.vue","webpack:///nextcloud/apps/files/src/utils/fileUtils.js","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/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/legacy/navigationMapper.js","webpack:///nextcloud/apps/files/src/services/Navigation.ts","webpack:///nextcloud/apps/files/src/services/ServiceWorker.js","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?2b80","webpack://nextcloud/./apps/files/src/components/NavigationQuota.vue?2966","webpack://nextcloud/./apps/files/src/components/NavigationQuota.vue?08cb","webpack:///nextcloud/apps/files/src/components/Setting.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/files/src/components/Setting.vue","webpack://nextcloud/./apps/files/src/components/Setting.vue?98ea","webpack://nextcloud/./apps/files/src/components/Setting.vue?8d57","webpack:///nextcloud/apps/files/src/store/userconfig.ts","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?5f87","webpack://nextcloud/./apps/files/src/views/Settings.vue?b81b","webpack://nextcloud/./apps/files/src/views/Settings.vue?84f7","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?591a","webpack://nextcloud/./apps/files/src/views/Navigation.vue?74b9","webpack://nextcloud/./apps/files/src/views/Navigation.vue?8122","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/sorting.ts","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?0fe5","webpack://nextcloud/./apps/files/src/components/BreadCrumbs.vue?d357","webpack://nextcloud/./apps/files/src/components/BreadCrumbs.vue?e906","webpack:///nextcloud/apps/files/src/services/PreviewService.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?vue&type=script&lang=js&","webpack:///nextcloud/apps/files/src/components/CustomSvgIconRender.vue","webpack://nextcloud/./apps/files/src/components/CustomSvgIconRender.vue?822b","webpack://nextcloud/./apps/files/src/components/CustomSvgIconRender.vue?5641","webpack://nextcloud/./apps/files/src/components/CustomSvgIconRender.vue?2c34","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/components/FileEntry.vue?ad54","webpack://nextcloud/./apps/files/src/components/FileEntry.vue?c02e","webpack://nextcloud/./apps/files/src/components/FileEntry.vue?da7c","webpack://nextcloud/./apps/files/src/components/FileEntry.vue?77f7","webpack:///nextcloud/apps/files/src/components/FilesListFooter.vue","webpack:///nextcloud/apps/files/src/components/FilesListFooter.vue?vue&type=script&lang=ts&","webpack://nextcloud/./apps/files/src/components/FilesListFooter.vue?81c8","webpack://nextcloud/./apps/files/src/components/FilesListFooter.vue?80db","webpack://nextcloud/./apps/files/src/components/FilesListFooter.vue?a2f0","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?0473","webpack://nextcloud/./apps/files/src/components/FilesListHeaderActions.vue?9823","webpack://nextcloud/./apps/files/src/components/FilesListHeaderActions.vue?1b40","webpack:///nextcloud/apps/files/src/components/FilesListHeaderButton.vue","webpack:///nextcloud/apps/files/src/components/FilesListHeaderButton.vue?vue&type=script&lang=ts&","webpack://nextcloud/./apps/files/src/components/FilesListHeaderButton.vue?58be","webpack://nextcloud/./apps/files/src/components/FilesListHeaderButton.vue?5686","webpack://nextcloud/./apps/files/src/components/FilesListHeaderButton.vue?fb45","webpack:///nextcloud/apps/files/src/components/FilesListHeader.vue","webpack:///nextcloud/apps/files/src/components/FilesListHeader.vue?vue&type=script&lang=ts&","webpack://nextcloud/./apps/files/src/components/FilesListHeader.vue?c1b9","webpack://nextcloud/./apps/files/src/components/FilesListHeader.vue?349b","webpack://nextcloud/./apps/files/src/components/FilesListHeader.vue?635d","webpack:///nextcloud/apps/files/src/components/FilesListVirtual.vue?vue&type=script&lang=ts&","webpack:///nextcloud/apps/files/src/components/FilesListVirtual.vue","webpack://nextcloud/./apps/files/src/components/FilesListVirtual.vue?6c65","webpack://nextcloud/./apps/files/src/components/FilesListVirtual.vue?3555","webpack://nextcloud/./apps/files/src/components/FilesListVirtual.vue?9d6c","webpack:///nextcloud/apps/files/src/views/FilesList.vue","webpack:///nextcloud/apps/files/src/views/FilesList.vue?vue&type=script&lang=ts&","webpack://nextcloud/./apps/files/src/views/FilesList.vue?82be","webpack://nextcloud/./apps/files/src/views/FilesList.vue?1e5b","webpack://nextcloud/./apps/files/src/views/FilesList.vue?efeb","webpack:///nextcloud/apps/files/src/services/Settings.js","webpack:///nextcloud/apps/files/src/models/Setting.js","webpack:///nextcloud/apps/files/src/router/router.js","webpack:///nextcloud/apps/files/src/main.js","webpack:///nextcloud/apps/files/src/components/BreadCrumbs.vue?vue&type=style&index=0&id=260f47ba&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/files/src/components/CustomSvgIconRender.vue?vue&type=style&index=0&id=6646d6a5&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/files/src/components/FileEntry.vue?vue&type=style&index=0&id=3600e364&prod&scoped=true&lang=scss&","webpack:///nextcloud/apps/files/src/components/FilesListFooter.vue?vue&type=style&index=0&id=cc078f7a&prod&scoped=true&lang=scss&","webpack:///nextcloud/apps/files/src/components/FilesListHeader.vue?vue&type=style&index=0&id=0bbf142f&prod&scoped=true&lang=scss&","webpack:///nextcloud/apps/files/src/components/FilesListHeaderActions.vue?vue&type=style&index=0&id=63bb14b6&prod&scoped=true&lang=scss&","webpack:///nextcloud/apps/files/src/components/FilesListHeaderButton.vue?vue&type=style&index=0&id=1e0337f6&prod&lang=scss&","webpack:///nextcloud/apps/files/src/components/FilesListVirtual.vue?vue&type=style&index=0&id=6f4155ff&prod&scoped=true&lang=scss&","webpack:///nextcloud/apps/files/src/components/NavigationQuota.vue?vue&type=style&index=0&id=26c061ec&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=3722ae64&prod&scoped=true&lang=scss&","webpack:///nextcloud/apps/files/src/views/Navigation.vue?vue&type=style&index=0&id=5bdabc28&prod&scoped=true&lang=scss&","webpack:///nextcloud/apps/files/src/views/Settings.vue?vue&type=style&index=0&id=b5e4b862&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=3600e364&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 = function(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(function(key) { return __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\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 - @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","/**\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","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 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 */\n\nimport { Node } from '@nextcloud/files'\nimport logger from '../logger'\n\ndeclare global {\n\tinterface Window {\n\t\tOC: any;\n\t\t_nc_fileactions: FileAction[] | undefined;\n\t}\n}\n\n/**\n * TODO: remove and move to @nextcloud/files\n * @see https://github.com/nextcloud/nextcloud-files/pull/608\n */\ninterface FileActionData {\n\t/** Unique ID */\n\tid: string\n\t/** Translatable string displayed in the menu */\n\tdisplayName: (files: Node[], view) => string\n\t/** Svg as inline string. <svg><path fill=\"...\" /></svg> */\n\ticonSvgInline: (files: Node[], view) => string\n\t/** Condition wether this action is shown or not */\n\tenabled?: (files: Node[], view) => boolean\n\t/**\n\t * Function executed on single file action\n\t * @returns true if the action was executed, false otherwise\n\t * @throws Error if the action failed\n\t */\n\texec: (file: Node, view) => Promise<boolean>,\n\t/**\n\t * Function executed on multiple files action\n\t * @returns true if the action was executed, false otherwise\n\t * @throws Error if the action failed\n\t */\n\texecBatch?: (files: Node[], view) => Promise<boolean[]>\n\t/** This action order in the list */\n\torder?: number,\n\t/** Make this action the default */\n\tdefault?: boolean,\n\t/**\n\t * If true, the renderInline function will be called\n\t */\n\tinline?: (file: Node, view) => boolean,\n\t/**\n\t * If defined, the returned html element will be\n\t * appended before the actions menu.\n\t */\n\trenderInline?: (file: Node, view) => HTMLElement,\n}\n\nexport class FileAction {\n\n\tprivate _action: FileActionData\n\n\tconstructor(action: FileActionData) {\n\t\tthis.validateAction(action)\n\t\tthis._action = action\n\t}\n\n\tget id() {\n\t\treturn this._action.id\n\t}\n\n\tget displayName() {\n\t\treturn this._action.displayName\n\t}\n\n\tget iconSvgInline() {\n\t\treturn this._action.iconSvgInline\n\t}\n\n\tget enabled() {\n\t\treturn this._action.enabled\n\t}\n\n\tget exec() {\n\t\treturn this._action.exec\n\t}\n\n\tget execBatch() {\n\t\treturn this._action.execBatch\n\t}\n\n\tget order() {\n\t\treturn this._action.order\n\t}\n\n\tget default() {\n\t\treturn this._action.default\n\t}\n\n\tget inline() {\n\t\treturn this._action.inline\n\t}\n\n\tget renderInline() {\n\t\treturn this._action.renderInline\n\t}\n\n\tprivate validateAction(action: FileActionData) {\n\t\tif (!action.id || typeof action.id !== 'string') {\n\t\t\tthrow new Error('Invalid id')\n\t\t}\n\n\t\tif (!action.displayName || typeof action.displayName !== 'function') {\n\t\t\tthrow new Error('Invalid displayName function')\n\t\t}\n\n\t\tif (!action.iconSvgInline || typeof action.iconSvgInline !== 'function') {\n\t\t\tthrow new Error('Invalid iconSvgInline function')\n\t\t}\n\n\t\tif (!action.exec || typeof action.exec !== 'function') {\n\t\t\tthrow new Error('Invalid exec function')\n\t\t}\n\n\t\t// Optional properties --------------------------------------------\n\t\tif ('enabled' in action && typeof action.enabled !== 'function') {\n\t\t\tthrow new Error('Invalid enabled function')\n\t\t}\n\n\t\tif ('execBatch' in action && typeof action.execBatch !== 'function') {\n\t\t\tthrow new Error('Invalid execBatch function')\n\t\t}\n\n\t\tif ('order' in action && typeof action.order !== 'number') {\n\t\t\tthrow new Error('Invalid order')\n\t\t}\n\n\t\tif ('default' in action && typeof action.default !== 'boolean') {\n\t\t\tthrow new Error('Invalid default')\n\t\t}\n\n\t\tif ('inline' in action && typeof action.inline !== 'function') {\n\t\t\tthrow new Error('Invalid inline function')\n\t\t}\n\n\t\tif ('renderInline' in action && typeof action.renderInline !== 'function') {\n\t\t\tthrow new Error('Invalid renderInline function')\n\t\t}\n\t}\n\n}\n\nexport const registerFileAction = function(action: FileAction): void {\n\tif (typeof window._nc_fileactions === 'undefined') {\n\t\twindow._nc_fileactions = []\n\t\tlogger.debug('FileActions initialized')\n\t}\n\n\t// Check duplicates\n\tif (window._nc_fileactions.find(search => search.id === action.id)) {\n\t\tlogger.error(`FileAction ${action.id} already registered`, { action })\n\t\treturn\n\t}\n\n\twindow._nc_fileactions.push(action)\n}\n\nexport const getFileActions = function(): FileAction[] {\n\treturn 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'\n\nimport { registerFileAction, FileAction } from '../services/FileAction'\nimport logger from '../logger'\n\nregisterFileAction(new FileAction({\n\tid: 'delete',\n\tdisplayName(nodes: Node[], view) {\n\t\treturn view.id === 'trashbin'\n\t\t\t? t('files_trashbin', 'Delete permanently')\n\t\t\t: t('files', 'Delete')\n\t},\n\ticonSvgInline: () => TrashCan,\n\n\tenabled(nodes: Node[]) {\n\t\treturn nodes.length > 0 && nodes\n\t\t\t.map(node => node.permissions)\n\t\t\t.every(permission => (permission & Permission.DELETE) !== 0)\n\t},\n\n\tasync exec(node: Node) {\n\t\ttry {\n\t\t\tawait axios.delete(node.source)\n\n\t\t\t// Let's delete even if it's moved to the trashbin\n\t\t\t// since it has been removed from the current view\n\t\t\t// and changing the view will trigger a reload anyway.\n\t\t\temit('files:file:deleted', node)\n\t\t\treturn true\n\t\t} catch (error) {\n\t\t\tlogger.error('Error while deleting a file', { error, source: node.source, node })\n\t\t\treturn false\n\t\t}\n\t},\n\tasync execBatch(nodes: Node[], view) {\n\t\treturn Promise.all(nodes.map(node => this.exec(node, view)))\n\t},\n\n\torder: 100,\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 */\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 */\n/* eslint-disable */\nimport type { Folder, Node } from '@nextcloud/files'\nimport isSvg from 'is-svg'\n\nimport logger from '../logger.js'\n\nexport type ContentsWithRoot = {\n\tfolder: Folder,\n\tcontents: Node[]\n}\n\nexport interface Column {\n\t/** Unique column ID */\n\tid: string\n\t/** Translated column title */\n\ttitle: string\n\t/** The content of the cell. The element will be appended within */\n\trender: (node: Node, view: Navigation) => HTMLElement\n\t/** Function used to sort Nodes between them */\n\tsort?: (nodeA: Node, nodeB: Node) => number\n\t/** Custom summary of the column to display at the end of the list.\n\t Will not be displayed if nothing is provided */\n\tsummary?: (node: Node[], view: Navigation) => string\n}\n\nexport interface Navigation {\n\t/** Unique view ID */\n\tid: string\n\t/** Translated view name */\n\tname: string\n\t/**\n\t * Method return the content of the provided path\n\t * This ideally should be a cancellable promise.\n\t * promise.cancel(reason) will be called when the directory\n\t * change and the promise is not resolved yet.\n\t * You _must_ also return the current directory\n\t * information alongside with its content.\n\t */\n\tgetContents: (path: string) => Promise<ContentsWithRoot>\n\t/** The view icon as an inline svg */\n\ticon: string\n\t/** The view order */\n\torder: number\n\t/** This view column(s). Name and actions are\n\tby default always included */\n\tcolumns?: Column[]\n\t/** The empty view element to render your empty content into */\n\temptyView?: (div: HTMLDivElement) => void\n\t/** The parent unique ID */\n\tparent?: string\n\t/** This view is sticky (sent at the bottom) */\n\tsticky?: boolean\n\t/** This view has children and is expanded or not */\n\texpanded?: boolean\n\n\t/**\n\t * Will be used as default if the user\n\t * haven't customized their sorting column\n\t * */\n\tdefaultSortKey?: string\n\n\t/**\n\t * This view is sticky a legacy view.\n\t * Here until all the views are migrated to Vue.\n\t * @deprecated It will be removed in a near future\n\t */\n\tlegacy?: boolean\n\t/**\n\t * An icon class. \n\t * @deprecated It will be removed in a near future\n\t */\n\ticonClass?: string\n}\n\nexport default class {\n\n\tprivate _views: Navigation[] = []\n\tprivate _currentView: Navigation | null = null\n\n\tconstructor() {\n\t\tlogger.debug('Navigation service initialized')\n\t}\n\n\tregister(view: Navigation) {\n\t\ttry {\n\t\t\tisValidNavigation(view)\n\t\t\tisUniqueNavigation(view, this._views)\n\t\t} catch (e) {\n\t\t\tif (e instanceof Error) {\n\t\t\t\tlogger.error(e.message, { view })\n\t\t\t}\n\t\t\tthrow e\n\t\t}\n\n\t\tif (view.legacy) {\n\t\t\tlogger.warn('Legacy view detected, please migrate to Vue')\n\t\t}\n\n\t\tif (view.iconClass) {\n\t\t\tview.legacy = true\n\t\t}\n\n\t\tthis._views.push(view)\n\t}\n\n\tget views(): Navigation[] {\n\t\treturn this._views\n\t}\n\n\tsetActive(view: Navigation | null) {\n\t\tthis._currentView = view\n\t}\n\n\tget active(): Navigation | null {\n\t\treturn this._currentView\n\t}\n\n}\n\n/**\n * Make sure the given view is unique\n * and not already registered.\n */\nconst isUniqueNavigation = function(view: Navigation, views: Navigation[]): boolean {\n\tif (views.find(search => search.id === view.id)) {\n\t\tthrow new Error(`Navigation id ${view.id} is already registered`)\n\t}\n\treturn true\n}\n\n/**\n * Typescript cannot validate an interface.\n * Please keep in sync with the Navigation interface requirements.\n */\nconst isValidNavigation = function(view: Navigation): boolean {\n\tif (!view.id || typeof view.id !== 'string') {\n\t\tthrow new Error('Navigation id is required and must be a string')\n\t}\n\n\tif (!view.name || typeof view.name !== 'string') {\n\t\tthrow new Error('Navigation name is required and must be a string')\n\t}\n\n\t/**\n\t * Legacy handle their content and icon differently\n\t * TODO: remove when support for legacy views is removed\n\t */\n\tif (!view.legacy) {\n\t\tif (!view.getContents || typeof view.getContents !== 'function') {\n\t\t\tthrow new Error('Navigation getContents is required and must be a function')\n\t\t}\n\n\t\tif (!view.icon || typeof view.icon !== 'string' || !isSvg(view.icon)) {\n\t\t\tthrow new Error('Navigation icon is required and must be a valid svg string')\n\t\t}\n\t}\n\n\tif (!('order' in view) || typeof view.order !== 'number') {\n\t\tthrow new Error('Navigation order is required and must be a number')\n\t}\n\n\t// Optional properties\n\tif (view.columns) {\n\t\tview.columns.forEach(isValidColumn)\n\t}\n\n\tif (view.emptyView && typeof view.emptyView !== 'function') {\n\t\tthrow new Error('Navigation emptyView must be a function')\n\t}\n\n\tif (view.parent && typeof view.parent !== 'string') {\n\t\tthrow new Error('Navigation parent must be a string')\n\t}\n\n\tif ('sticky' in view && typeof view.sticky !== 'boolean') {\n\t\tthrow new Error('Navigation sticky must be a boolean')\n\t}\n\n\tif ('expanded' in view && typeof view.expanded !== 'boolean') {\n\t\tthrow new Error('Navigation expanded must be a boolean')\n\t}\n\n\tif (view.defaultSortKey && typeof view.defaultSortKey !== 'string') {\n\t\tthrow new Error('Navigation defaultSortKey must be a string')\n\t}\n\n\treturn true\n}\n\n/**\n * Typescript cannot validate an interface.\n * Please keep in sync with the Column interface requirements.\n */\nconst isValidColumn = function(column: Column): boolean {\n\tif (!column.id || typeof column.id !== 'string') {\n\t\tthrow new Error('A column id is required')\n\t}\n\n\tif (!column.title || typeof column.title !== 'string') {\n\t\tthrow new Error('A column title is required')\n\t}\n\n\tif (!column.render || typeof column.render !== 'function') {\n\t\tthrow new Error('A render function is required')\n\t}\n\n\t// Optional properties\n\tif (column.sort && typeof column.sort !== 'function') {\n\t\tthrow new Error('Column sortFunction must be a function')\n\t}\n\n\tif (column.summary && typeof column.summary !== 'function') {\n\t\tthrow new Error('Column summary must be a function')\n\t}\n\n\treturn true\n}\n","/**\n * @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\n *\n * @author Gary Kim <gary@garykim.dev>\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","<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:file:created', this.throttleUpdateStorageStats)\n\t\tsubscribe('files:file:deleted', this.throttleUpdateStorageStats)\n\t\tsubscribe('files:file:moved', this.throttleUpdateStorageStats)\n\t\tsubscribe('files:file:updated', this.throttleUpdateStorageStats)\n\n\t\tsubscribe('files:folder:created', this.throttleUpdateStorageStats)\n\t\tsubscribe('files:folder:deleted', this.throttleUpdateStorageStats)\n\t\tsubscribe('files:folder:moved', this.throttleUpdateStorageStats)\n\t\tsubscribe('files:folder: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=26c061ec&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=26c061ec&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=26c061ec&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=26c061ec&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 \"26c061ec\",\n null\n \n)\n\nexport default component.exports","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 }","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&\"","<!--\n - @copyright Copyright (c) 2020 Gary Kim <gary@garykim.dev>\n -\n - @author Gary Kim <gary@garykim.dev>\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 { render, staticRenderFns } from \"./Setting.vue?vue&type=template&id=03406edc&\"\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 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 type { UserConfig, UserConfigStore } from '../types'\nimport { emit, subscribe } from '@nextcloud/event-bus'\nimport type { update } from 'cypress/types/lodash'\n\nconst userConfig = loadState('files', 'config', {\n\tshow_hidden: false,\n\tcrop_image_previews: true,\n}) as UserConfig\n\nexport const useUserConfigStore = () => {\n\tconst store = defineStore('userconfig', {\n\t\tstate: () => ({\n\t\t\tuserConfig,\n\t\t} as UserConfigStore),\n\n\t\tactions: {\n\t\t\t/**\n\t\t\t * Update the user config local store\n\t\t\t */\n\t\t\tonUpdate(key: string, value: boolean) {\n\t\t\t\tVue.set(this.userConfig, key, value)\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Update the user config local store AND on server side\n\t\t\t */\n\t\t\tasync update(key: string, value: boolean) {\n\t\t\t\tawait axios.post(generateUrl('/apps/files/api/v1/config/' + key), {\n\t\t\t\t\tvalue,\n\t\t\t\t})\n\n\t\t\t\temit('files:config:updated', { key, value })\n\t\t\t}\n\t\t}\n\t})\n\n\tconst userConfigStore = store()\n\n\t// Make sure we only register the listeners once\n\tif (!userConfigStore.initialized) {\n\t\tsubscribe('files:config:updated', function({ key, value }: { key: string, value: boolean }) {\n\t\t\tuserConfigStore.onUpdate(key, value)\n\t\t})\n\t\tuserConfigStore.initialized = true\n\t}\n\n\treturn userConfigStore\n}\n\n","<!--\n - @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\n -\n - @author Gary Kim <gary@garykim.dev>\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'\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=b5e4b862&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=b5e4b862&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=b5e4b862&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=b5e4b862&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 \"b5e4b862\",\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) 2019 Gary Kim <gary@garykim.dev>\n -\n - @author Gary Kim <gary@garykim.dev>\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=\"view.expanded\"\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=\"view.icon\" slot=\"icon\" :svg=\"view.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 { generateUrl } from '@nextcloud/router'\nimport { translate } from '@nextcloud/l10n'\n\nimport axios from '@nextcloud/axios'\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 logger from '../logger.js'\nimport Navigation from '../services/Navigation.ts'\nimport NavigationQuota from '../components/NavigationQuota.vue'\nimport SettingsModal from './Settings.vue'\nimport { setPageHeading } from '../../../../core/src/OCP/accessibility.js'\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\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\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\t// debugger\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\tview.expanded = !view.expanded\n\t\t\taxios.post(generateUrl(`/apps/files/api/v1/toggleShowFolder/${view.id}`), { show: view.expanded })\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=5bdabc28&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=5bdabc28&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=5bdabc28&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=5bdabc28&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 \"5bdabc28\",\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\":view.expanded,\"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)}},[(view.icon)?_c('NcIconSvgWrapper',{attrs:{\"slot\":\"icon\",\"svg\":view.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 }","/**\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 type { Folder, Node } from '@nextcloud/files'\nimport type { FilesStore, RootsStore, RootOptions, Service, FilesState } from '../types'\n\nimport { defineStore } from 'pinia'\nimport { subscribe } from '@nextcloud/event-bus'\nimport Vue from 'vue'\nimport logger from '../logger'\n\nexport const useFilesStore = () => {\n\tconst store = defineStore('files', {\n\t\tstate: (): FilesState => ({\n\t\t\tfiles: {} as FilesStore,\n\t\t\troots: {} as RootsStore,\n\t\t}),\n\n\t\tgetters: {\n\t\t\t/**\n\t\t\t * Get a file or folder by id\n\t\t\t */\n\t\t\tgetNode: (state) => (id: number): Node|undefined => state.files[id],\n\n\t\t\t/**\n\t\t\t * Get a list of files or folders by their IDs\n\t\t\t * Does not return undefined values\n\t\t\t */\n\t\t\tgetNodes: (state) => (ids: number[]): Node[] => ids\n\t\t\t\t.map(id => state.files[id])\n\t\t\t\t.filter(Boolean),\n\t\t\t/**\n\t\t\t * Get a file or folder by id\n\t\t\t */\n\t\t\tgetRoot: (state) => (service: Service): Folder|undefined => state.roots[service],\n\t\t},\n\n\t\tactions: {\n\t\t\tupdateNodes(nodes: Node[]) {\n\t\t\t\t// Update the store all at once\n\t\t\t\tconst files = nodes.reduce((acc, node) => {\n\t\t\t\t\tif (!node.attributes.fileid) {\n\t\t\t\t\t\tlogger.warn('Trying to update/set a node without fileid', node)\n\t\t\t\t\t\treturn acc\n\t\t\t\t\t}\n\t\t\t\t\tacc[node.attributes.fileid] = node\n\t\t\t\t\treturn acc\n\t\t\t\t}, {} as FilesStore)\n\n\t\t\t\tVue.set(this, 'files', {...this.files, ...files})\n\t\t\t},\n\n\t\t\tdeleteNodes(nodes: Node[]) {\n\t\t\t\tnodes.forEach(node => {\n\t\t\t\t\tif (node.fileid) {\n\t\t\t\t\t\tVue.delete(this.files, node.fileid)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t},\n\n\t\t\tsetRoot({ service, root }: RootOptions) {\n\t\t\t\tVue.set(this.roots, service, root)\n\t\t\t},\n\n\t\t\tonCreatedNode() {\n\t\t\t\t// TODO: do something\n\t\t\t},\n\n\t\t\tonDeletedNode(node: Node) {\n\t\t\t\tthis.deleteNodes([node])\n\t\t\t},\n\n\t\t\tonMovedNode() {\n\t\t\t\t// TODO: do something\n\t\t\t},\n\t\t}\n\t})\n\n\tconst fileStore = store()\n\t// Make sure we only register the listeners once\n\tif (!fileStore.initialized) {\n\t\tsubscribe('files:file:created', fileStore.onCreatedNode)\n\t\tsubscribe('files:file:deleted', fileStore.onDeletedNode)\n\t\tsubscribe('files:file:moved', fileStore.onMovedNode)\n\t\t// subscribe('files:file:updated', fileStore.onUpdatedNode)\n\n\t\tsubscribe('files:folder:created', fileStore.onCreatedNode)\n\t\tsubscribe('files:folder:deleted', fileStore.onDeletedNode)\n\t\tsubscribe('files:folder:moved', fileStore.onMovedNode)\n\t\t// subscribe('files:folder:updated', fileStore.onUpdatedNode)\n\n\t\tfileStore.initialized = true\n\t}\n\n\treturn fileStore\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 type { PathOptions, ServicesState } from '../types'\n\nimport { defineStore } from 'pinia'\nimport Vue from 'vue'\nimport { subscribe } from '@nextcloud/event-bus'\n\nexport const usePathsStore = () => {\n\tconst store = defineStore('paths', {\n\t\tstate: (): ServicesState => ({}),\n\n\t\tgetters: {\n\t\t\tgetPath: (state) => {\n\t\t\t\treturn (service: string, path: string): number|undefined => {\n\t\t\t\t\tif (!state[service]) {\n\t\t\t\t\t\treturn undefined\n\t\t\t\t\t}\n\t\t\t\t\treturn state[service][path]\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\n\t\tactions: {\n\t\t\taddPath(payload: PathOptions) {\n\t\t\t\t// If it doesn't exists, init the service state\n\t\t\t\tif (!this[payload.service]) {\n\t\t\t\t\tVue.set(this, payload.service, {})\n\t\t\t\t}\n\n\t\t\t\t// Now we can set the provided path\n\t\t\t\tVue.set(this[payload.service], payload.path, payload.fileid)\n\t\t\t},\n\t\t}\n\t})\n\n\tconst pathsStore = store()\n\t// Make sure we only register the listeners once\n\tif (!pathsStore.initialized) {\n\t\t// TODO: watch folders to update paths?\n\t\t// subscribe('files:folder:created', pathsStore.onCreatedNode)\n\t\t// subscribe('files:folder:deleted', pathsStore.onDeletedNode)\n\t\t// subscribe('files:folder:moved', pathsStore.onMovedNode)\n\n\t\tpathsStore.initialized = true\n\t}\n\n\treturn 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'\n\nexport const useSelectionStore = defineStore('selection', {\n\tstate: () => ({\n\t\tselected: [] as number[]\n\t}),\n\n\tactions: {\n\t\t/**\n\t\t * Set the selection of fileIds\n\t\t */\n\t\tset(selection = [] as number[]) {\n\t\t\tVue.set(this, 'selected', selection)\n\t\t},\n\n\t\t/**\n\t\t * Reset the selection\n\t\t */\n\t\treset() {\n\t\t\tVue.set(this, 'selected', [])\n\t\t}\n\t}\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 type { direction, SortingStore } from '../types'\n\nconst saveUserConfig = (mode: string, direction: direction, view: string) => {\n\treturn axios.post(generateUrl('/apps/files/api/v1/sorting'), {\n\t\tmode,\n\t\tdirection,\n\t\tview,\n\t})\n}\n\nconst filesSortingConfig = loadState('files', 'filesSortingConfig', {}) as SortingStore\n\nexport const useSortingStore = defineStore('sorting', {\n\tstate: () => ({\n\t\tfilesSortingConfig,\n\t}),\n\n\tgetters: {\n\t\tisAscSorting: (state) => (view: string = 'files') => state.filesSortingConfig[view]?.direction !== 'desc',\n\t\tgetSortingMode: (state) => (view: string = 'files') => state.filesSortingConfig[view]?.mode,\n\t},\n\n\tactions: {\n\t\t/**\n\t\t * Set the sorting key AND sort by ASC\n\t\t * The key param must be a valid key of a File object\n\t\t * If not found, will be searched within the File attributes\n\t\t */\n\t\tsetSortingBy(key: string = 'basename', view: string = 'files') {\n\t\t\tconst config = this.filesSortingConfig[view] || {}\n\t\t\tconfig.mode = key\n\t\t\tconfig.direction = 'asc'\n\n\t\t\t// Save new config\n\t\t\tVue.set(this.filesSortingConfig, view, config)\n\t\t\tsaveUserConfig(config.mode, config.direction, view)\n\t\t},\n\n\t\t/**\n\t\t * Toggle the sorting direction\n\t\t */\n\t\ttoggleSortingDirection(view: string = 'files') {\n\t\t\tconst config = this.filesSortingConfig[view] || { 'direction': 'asc' }\n\t\t\tconst newDirection = config.direction === 'asc' ? 'desc' : 'asc'\n\t\t\tconfig.direction = newDirection\n\n\t\t\t// Save new config\n\t\t\tVue.set(this.filesSortingConfig, view, config)\n\t\t\tsaveUserConfig(config.mode, config.direction, view)\n\t\t}\n\t}\n})\n\n","<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\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\tcomputed: {\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: basename(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\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=260f47ba&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=260f47ba&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=260f47ba&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=260f47ba&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 \"260f47ba\",\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('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 }","/**\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\n// The preview service worker cache name (see webpack config)\nconst SWCacheName = 'previews'\n\n/**\n * Check if the preview is already cached by the service worker\n */\nexport const isCachedPreview = function(previewUrl: string) {\n\treturn caches.open(SWCacheName)\n\t\t.then(function(cache) {\n\t\t\treturn cache.match(previewUrl)\n\t\t\t\t.then(function(response) {\n\t\t\t\t\treturn !!response\n\t\t\t\t})\n\t\t})\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) 2019 Gary Kim <gary@garykim.dev>\n -\n - @author Gary Kim <gary@garykim.dev>\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>\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=532f723e&\"\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 }","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 - @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\n -\n - @author Gary Kim <gary@garykim.dev>\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","\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=6646d6a5&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=6646d6a5&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=6646d6a5&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=6646d6a5&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 \"6646d6a5\",\n null\n \n)\n\nexport default component.exports","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) 2019 Gary Kim <gary@garykim.dev>\n -\n - @author Gary Kim <gary@garykim.dev>\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.sync=\"selectedFiles\"\n\t\t\t\t:value=\"fileid.toString()\"\n\t\t\t\tname=\"selectedFiles\" />\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\">\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=\"mimeUrl\"\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: mimeUrl }\" />\n\n\t\t\t\t\t<FileIcon v-else />\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:force-title=\"true\"\n\t\t\t\t:inline=\"enabledInlineActions.length\">\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<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<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 { Folder, File, formatFileSize } from '@nextcloud/files'\nimport { Fragment } from 'vue-fragment'\nimport { join } from 'path'\nimport { showError } 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 Vue from 'vue'\n\nimport { isCachedPreview } from '../services/PreviewService'\nimport { getFileActions } from '../services/FileAction'\nimport { useFilesStore } from '../store/files'\nimport { UserConfig } from '../types'\nimport { useSelectionStore } from '../store/selection'\nimport { useUserConfigStore } from '../store/userconfig'\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},\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},\n\n\tsetup() {\n\t\tconst filesStore = useFilesStore()\n\t\tconst selectionStore = useSelectionStore()\n\t\tconst userConfigStore = useUserConfigStore()\n\t\treturn {\n\t\t\tfilesStore,\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\tloading: '',\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/** @return {UserConfig} */\n\t\tuserConfig() {\n\t\t\treturn this.userConfigStore.userConfig\n\t\t},\n\n\t\t/** @return {Navigation} */\n\t\tcurrentView() {\n\t\t\treturn this.$navigation.active\n\t\t},\n\n\t\tcolumns() {\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\n\t\tfileid() {\n\t\t\treturn this.source.attributes.fileid\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\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\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\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\tget() {\n\t\t\t\treturn this.selectionStore.selected\n\t\t\t},\n\t\t\tset(selection) {\n\t\t\t\tlogger.debug('Changed nodes selection', { selection })\n\t\t\t\tthis.selectionStore.set(selection)\n\t\t\t},\n\t\t},\n\n\t\tcropPreviews() {\n\t\t\treturn this.userConfig.crop_image_previews\n\t\t},\n\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 ? '1' : '0')\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\n\t\tmimeUrl() {\n\t\t\tconst mimeType = this.source.mime || 'application/octet-stream'\n\t\t\tconst mimeUrl = window.OC?.MimeType?.getIconUrl?.(mimeType)\n\t\t\tif (mimeUrl) {\n\t\t\t\treturn `url(${mimeUrl})`\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\n\t\tenabledInlineActions() {\n\t\t\treturn this.enabledActions.filter(action => action?.inline?.(this.source, this.currentView))\n\t\t},\n\n\t\tenabledMenuActions() {\n\t\t\treturn [\n\t\t\t\t...this.enabledInlineActions,\n\t\t\t\t...actions.filter(action => !action.inline),\n\t\t\t]\n\t\t},\n\n\t\tuniqueId() {\n\t\t\treturn this.hashCode(this.source.source)\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 tabindex from the row\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\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// Ensure max 5 previews are being fetched at the same time\n\t\t\tconst controller = new AbortController()\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\tcontroller.abort()\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.$refs.actionsMenu.closeMenu()\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\thashCode(str) {\n\t\t\tlet hash = 0\n\t\t\tfor (let i = 0, len = str.length; i < len; i++) {\n\t\t\t\tconst chr = str.charCodeAt(i)\n\t\t\t\thash = (hash << 5) - hash + chr\n\t\t\t\thash |= 0 // Convert to 32bit integer\n\t\t\t}\n\t\t\treturn hash\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\tthis.loading = action.id\n\t\t\t\tawait action.exec(this.source, this.currentView)\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', 'Error while executing action \"{displayName}\"', { displayName }))\n\t\t\t} finally {\n\t\t\t\tthis.loading = ''\n\t\t\t}\n\t\t},\n\n\t\tt: translate,\n\t\tformatFileSize,\n\t},\n})\n</script>\n\n<style scoped lang='scss'>\n@import '../mixins/fileslist-row.scss';\n\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","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../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/vue-loader/lib/index.js??vue-loader-options!./FileEntry.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!./FileEntry.vue?vue&type=style&index=0&id=3600e364&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=3600e364&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=3600e364&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=3600e364&prod&lang=css&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./FileEntry.vue?vue&type=template&id=3600e364&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=3600e364&prod&scoped=true&lang=scss&\"\nimport style1 from \"./FileEntry.vue?vue&type=style&index=1&id=3600e364&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 \"3600e364\",\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.toString(),\"name\":\"selectedFiles\"},on:{\"update:checked\":function($event){_vm.selectedFiles=$event}}}):_vm._e()],1),_vm._v(\" \"),_c('td',{staticClass:\"files-list__row-name\"},[_c('a',_vm._b({ref:\"name\"},'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.mimeUrl)?_c('span',{staticClass:\"files-list__row-icon-preview files-list__row-icon-preview--mime\",style:({ backgroundImage: _vm.mimeUrl })}):_c('FileIcon')],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:{\"force-title\":true,\"inline\":_vm.enabledInlineActions.length}},_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 })},[_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}`},[(_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 }","<!--\n - @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\n -\n - @author Gary Kim <gary@garykim.dev>\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<tr>\n\t\t<th class=\"files-list__row-checkbox\">\n\t\t\t<span class=\"hidden-visually\">{{ t('files', 'Total rows summary') }}</span>\n\t\t</th>\n\n\t\t<!-- Link to file -->\n\t\t<td class=\"files-list__row-name\">\n\t\t\t<!-- Icon or preview -->\n\t\t\t<span class=\"files-list__row-icon\" />\n\n\t\t\t<!-- Summary -->\n\t\t\t<span>{{ summary }}</span>\n\t\t</td>\n\n\t\t<!-- Actions -->\n\t\t<td class=\"files-list__row-actions\" />\n\n\t\t<!-- Size -->\n\t\t<td v-if=\"isSizeAvailable\" class=\"files-list__column files-list__row-size\">\n\t\t\t<span>{{ totalSize }}</span>\n\t\t</td>\n\n\t\t<!-- Custom views columns -->\n\t\t<th v-for=\"column in columns\"\n\t\t\t:key=\"column.id\"\n\t\t\t:class=\"classForColumn(column)\">\n\t\t\t<span>{{ column.summary?.(nodes, currentView) }}</span>\n\t\t</th>\n\t</tr>\n</template>\n\n<script lang=\"ts\">\nimport { formatFileSize } from '@nextcloud/files'\nimport { translate } from '@nextcloud/l10n'\nimport Vue from 'vue'\n\nimport Navigation from '../services/Navigation'\nimport { useFilesStore } from '../store/files'\nimport { usePathsStore } from '../store/paths'\n\nexport default Vue.extend({\n\tname: 'FilesListFooter',\n\n\tcomponents: {\n\t},\n\n\tprops: {\n\t\tisSizeAvailable: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tnodes: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t},\n\t\tsummary: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t},\n\n\tsetup() {\n\t\tconst pathsStore = usePathsStore()\n\t\tconst filesStore = useFilesStore()\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\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\n\t\tcurrentFolder() {\n\t\t\tif (!this.currentView?.id) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tif (this.dir === '/') {\n\t\t\t\treturn this.filesStore.getRoot(this.currentView.id)\n\t\t\t}\n\t\t\tconst fileId = this.pathsStore.getPath(this.currentView.id, this.dir)\n\t\t\treturn this.filesStore.getNode(fileId)\n\t\t},\n\n\t\tcolumns() {\n\t\t\treturn this.currentView?.columns || []\n\t\t},\n\n\t\ttotalSize() {\n\t\t\t// If we have the size already, let's use it\n\t\t\tif (this.currentFolder?.size) {\n\t\t\t\treturn formatFileSize(this.currentFolder.size, true)\n\t\t\t}\n\n\t\t\t// Otherwise let's compute it\n\t\t\treturn formatFileSize(this.nodes.reduce((total, node) => total + node.size || 0, 0), true)\n\t\t},\n\t},\n\n\tmethods: {\n\t\tclassForColumn(column) {\n\t\t\treturn {\n\t\t\t\t'files-list__row-column-custom': true,\n\t\t\t\t[`files-list__row-${this.currentView.id}-${column.id}`]: true,\n\t\t\t}\n\t\t},\n\n\t\tt: translate,\n\t},\n})\n</script>\n\n<style scoped lang=\"scss\">\n@import '../mixins/fileslist-row.scss';\n\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</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../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/vue-loader/lib/index.js??vue-loader-options!./FilesListFooter.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!./FilesListFooter.vue?vue&type=style&index=0&id=cc078f7a&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=cc078f7a&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=cc078f7a&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=cc078f7a&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 \"cc078f7a\",\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('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 - @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\n -\n - @author Gary Kim <gary@garykim.dev>\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<th class=\"files-list__column files-list__row-actions-batch\" colspan=\"2\">\n\t\t<NcActions ref=\"actionsMenu\"\n\t\t\t:disabled=\"!!loading\"\n\t\t\t:force-title=\"true\"\n\t\t\t:inline=\"3\">\n\t\t\t<NcActionButton v-for=\"action in enabledActions\"\n\t\t\t\t:key=\"action.id\"\n\t\t\t\t:class=\"'files-list__row-actions-batch-' + action.id\"\n\t\t\t\t@click=\"onActionClick(action)\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<NcLoadingIcon v-if=\"loading === action.id\" :size=\"18\" />\n\t\t\t\t\t<CustomSvgIconRender v-else :svg=\"action.iconSvgInline(nodes, currentView)\" />\n\t\t\t\t</template>\n\t\t\t\t{{ action.displayName(nodes, currentView) }}\n\t\t\t</NcActionButton>\n\t\t</NcActions>\n\t</th>\n</template>\n\n<script lang=\"ts\">\nimport { showError, showSuccess } from '@nextcloud/dialogs'\nimport { translate } from '@nextcloud/l10n'\nimport NcActions from '@nextcloud/vue/dist/Components/NcActions.js'\nimport NcActionButton from '@nextcloud/vue/dist/Components/NcActionButton.js'\nimport NcLoadingIcon from '@nextcloud/vue/dist/Components/NcLoadingIcon.js'\nimport Vue from 'vue'\n\nimport { getFileActions } from '../services/FileAction'\nimport { useFilesStore } from '../store/files'\nimport { useSelectionStore } from '../store/selection'\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: 'FilesListHeaderActions',\n\n\tcomponents: {\n\t\tCustomSvgIconRender,\n\t\tNcActions,\n\t\tNcActionButton,\n\t\tNcLoadingIcon,\n\t},\n\n\tprops: {\n\t\tcurrentView: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t\tselectedNodes: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => ([]),\n\t\t},\n\t},\n\n\tsetup() {\n\t\tconst filesStore = useFilesStore()\n\t\tconst selectionStore = useSelectionStore()\n\t\treturn {\n\t\t\tfilesStore,\n\t\t\tselectionStore,\n\t\t}\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tloading: null,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tenabledActions() {\n\t\t\treturn actions\n\t\t\t\t.filter(action => action.execBatch)\n\t\t\t\t.filter(action => !action.enabled || action.enabled(this.nodes, this.currentView))\n\t\t\t\t.sort((a, b) => (a.order || 0) - (b.order || 0))\n\t\t},\n\n\t\tnodes() {\n\t\t\treturn this.selectedNodes\n\t\t\t\t.map(fileid => this.getNode(fileid))\n\t\t\t\t.filter(node => node)\n\t\t},\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Get a cached note from the store\n\t\t *\n\t\t * @param {number} fileId the file id to get\n\t\t * @return {Folder|File}\n\t\t */\n\t\tgetNode(fileId) {\n\t\t\treturn this.filesStore.getNode(fileId)\n\t\t},\n\n\t\tasync onActionClick(action) {\n\t\t\tconst displayName = action.displayName(this.nodes, this.currentView)\n\t\t\tconst selectionIds = this.selectedNodes\n\t\t\ttry {\n\t\t\t\tthis.loading = action.id\n\t\t\t\tconst results = await action.execBatch(this.nodes, this.currentView)\n\n\t\t\t\tif (results.some(result => result !== true)) {\n\t\t\t\t\t// Remove the failed ids from the selection\n\t\t\t\t\tconst failedIds = selectionIds\n\t\t\t\t\t\t.filter((fileid, index) => results[index] !== true)\n\t\t\t\t\tthis.selectionStore.set(failedIds)\n\n\t\t\t\t\tshowError(this.t('files', '\"{displayName}\" failed on some elements ', { displayName }))\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\t// Show success message and clear selection\n\t\t\t\tshowSuccess(this.t('files', '\"{displayName}\" batch action successfully executed', { displayName }))\n\t\t\t\tthis.selectionStore.reset()\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', 'Error while executing action \"{displayName}\"', { displayName }))\n\t\t\t} finally {\n\t\t\t\tthis.loading = null\n\t\t\t}\n\t\t},\n\n\t\tt: translate,\n\t},\n})\n</script>\n\n<style scoped lang=\"scss\">\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</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../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/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=63bb14b6&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=63bb14b6&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=63bb14b6&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=63bb14b6&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 \"63bb14b6\",\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('th',{staticClass:\"files-list__column files-list__row-actions-batch\",attrs:{\"colspan\":\"2\"}},[_c('NcActions',{ref:\"actionsMenu\",attrs:{\"disabled\":!!_vm.loading,\"force-title\":true,\"inline\":3}},_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 }","<!--\n - @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\n -\n - @author Gary Kim <gary@garykim.dev>\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<NcButton :aria-label=\"sortAriaLabel(name)\"\n\t\t:class=\"{'files-list__column-sort-button--active': sortingMode === mode}\"\n\t\tclass=\"files-list__column-sort-button\"\n\t\ttype=\"tertiary\"\n\t\t@click.stop.prevent=\"toggleSortBy(mode)\">\n\t\t<!-- Sort icon before text as size is align right -->\n\t\t<MenuUp v-if=\"sortingMode !== mode || isAscSorting\" slot=\"icon\" />\n\t\t<MenuDown v-else slot=\"icon\" />\n\t\t{{ name }}\n\t</NcButton>\n</template>\n\n<script lang=\"ts\">\nimport { mapState } from 'pinia'\nimport { translate } from '@nextcloud/l10n'\nimport MenuDown from 'vue-material-design-icons/MenuDown.vue'\nimport MenuUp from 'vue-material-design-icons/MenuUp.vue'\nimport NcButton from '@nextcloud/vue/dist/Components/NcButton.js'\nimport Vue from 'vue'\n\nimport { useSortingStore } from '../store/sorting'\n\nexport default Vue.extend({\n\tname: 'FilesListHeaderButton',\n\n\tcomponents: {\n\t\tMenuDown,\n\t\tMenuUp,\n\t\tNcButton,\n\t},\n\n\tinject: ['toggleSortBy'],\n\n\tprops: {\n\t\tname: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tmode: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tsetup() {\n\t\tconst sortingStore = useSortingStore()\n\t\treturn {\n\t\t\tsortingStore,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t...mapState(useSortingStore, ['filesSortingConfig']),\n\n\t\tcurrentView() {\n\t\t\treturn this.$navigation.active\n\t\t},\n\n\t\tsortingMode() {\n\t\t\treturn this.sortingStore.getSortingMode(this.currentView.id)\n\t\t\t\t|| this.currentView.defaultSortKey\n\t\t\t\t|| 'basename'\n\t\t},\n\t\tisAscSorting() {\n\t\t\treturn this.sortingStore.isAscSorting(this.currentView.id) === true\n\t\t},\n\t},\n\n\tmethods: {\n\t\tsortAriaLabel(column) {\n\t\t\tconst direction = this.isAscSorting\n\t\t\t\t? this.t('files', 'ascending')\n\t\t\t\t: this.t('files', 'descending')\n\t\t\treturn this.t('files', 'Sort list by {column} ({direction})', {\n\t\t\t\tcolumn,\n\t\t\t\tdirection,\n\t\t\t})\n\t\t},\n\n\t\tt: translate,\n\t},\n})\n</script>\n\n<style lang=\"scss\">\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</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../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/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=1e0337f6&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=1e0337f6&prod&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./FilesListHeaderButton.vue?vue&type=template&id=1e0337f6&\"\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=1e0337f6&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","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) 2019 Gary Kim <gary@garykim.dev>\n -\n - @author Gary Kim <gary@garykim.dev>\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<tr>\n\t\t<th class=\"files-list__column files-list__row-checkbox\">\n\t\t\t<NcCheckboxRadioSwitch v-bind=\"selectAllBind\" @update:checked=\"onToggleAll\" />\n\t\t</th>\n\n\t\t<!-- Actions multiple if some are selected -->\n\t\t<FilesListHeaderActions v-if=\"!isNoneSelected\"\n\t\t\t:current-view=\"currentView\"\n\t\t\t:selected-nodes=\"selectedNodes\" />\n\n\t\t<!-- Columns display -->\n\t\t<template v-else>\n\t\t\t<!-- Link to file -->\n\t\t\t<th class=\"files-list__column files-list__row-name files-list__column--sortable\"\n\t\t\t\t@click.stop.prevent=\"toggleSortBy('basename')\">\n\t\t\t\t<!-- Icon or preview -->\n\t\t\t\t<span class=\"files-list__row-icon\" />\n\n\t\t\t\t<!-- Name -->\n\t\t\t\t<FilesListHeaderButton :name=\"t('files', 'Name')\" mode=\"basename\" />\n\t\t\t</th>\n\n\t\t\t<!-- Actions -->\n\t\t\t<th class=\"files-list__row-actions\" />\n\n\t\t\t<!-- Size -->\n\t\t\t<th v-if=\"isSizeAvailable\"\n\t\t\t\t:class=\"{'files-list__column--sortable': isSizeAvailable}\"\n\t\t\t\tclass=\"files-list__column files-list__row-size\">\n\t\t\t\t<FilesListHeaderButton :name=\"t('files', 'Size')\" mode=\"size\" />\n\t\t\t</th>\n\n\t\t\t<!-- Custom views columns -->\n\t\t\t<th v-for=\"column in columns\"\n\t\t\t\t:key=\"column.id\"\n\t\t\t\t:class=\"classForColumn(column)\">\n\t\t\t\t<FilesListHeaderButton v-if=\"!!column.sort\" :name=\"column.title\" :mode=\"column.id\" />\n\t\t\t\t<span v-else>\n\t\t\t\t\t{{ column.title }}\n\t\t\t\t</span>\n\t\t\t</th>\n\t\t</template>\n\t</tr>\n</template>\n\n<script lang=\"ts\">\nimport { mapState } from 'pinia'\nimport { translate } from '@nextcloud/l10n'\nimport NcCheckboxRadioSwitch from '@nextcloud/vue/dist/Components/NcCheckboxRadioSwitch.js'\nimport Vue from 'vue'\n\nimport { useFilesStore } from '../store/files'\nimport { useSelectionStore } from '../store/selection'\nimport { useSortingStore } from '../store/sorting'\nimport FilesListHeaderActions from './FilesListHeaderActions.vue'\nimport FilesListHeaderButton from './FilesListHeaderButton.vue'\nimport logger from '../logger.js'\nimport Navigation from '../services/Navigation'\n\nexport default Vue.extend({\n\tname: 'FilesListHeader',\n\n\tcomponents: {\n\t\tFilesListHeaderButton,\n\t\tNcCheckboxRadioSwitch,\n\t\tFilesListHeaderActions,\n\t},\n\n\tprovide() {\n\t\treturn {\n\t\t\ttoggleSortBy: this.toggleSortBy,\n\t\t}\n\t},\n\n\tprops: {\n\t\tisSizeAvailable: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tnodes: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tsetup() {\n\t\tconst filesStore = useFilesStore()\n\t\tconst selectionStore = useSelectionStore()\n\t\tconst sortingStore = useSortingStore()\n\t\treturn {\n\t\t\tfilesStore,\n\t\t\tselectionStore,\n\t\t\tsortingStore,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t...mapState(useSortingStore, ['filesSortingConfig']),\n\n\t\t/** @return {Navigation} */\n\t\tcurrentView() {\n\t\t\treturn this.$navigation.active\n\t\t},\n\n\t\tcolumns() {\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\n\t\tselectAllBind() {\n\t\t\tconst label = this.isNoneSelected || this.isSomeSelected\n\t\t\t\t? this.t('files', 'Select all')\n\t\t\t\t: this.t('files', 'Unselect all')\n\t\t\treturn {\n\t\t\t\t'aria-label': label,\n\t\t\t\tchecked: this.isAllSelected,\n\t\t\t\tindeterminate: this.isSomeSelected,\n\t\t\t\ttitle: label,\n\t\t\t}\n\t\t},\n\n\t\tselectedNodes() {\n\t\t\treturn this.selectionStore.selected\n\t\t},\n\n\t\tisAllSelected() {\n\t\t\treturn this.selectedNodes.length === this.nodes.length\n\t\t},\n\n\t\tisNoneSelected() {\n\t\t\treturn this.selectedNodes.length === 0\n\t\t},\n\n\t\tisSomeSelected() {\n\t\t\treturn !this.isAllSelected && !this.isNoneSelected\n\t\t},\n\n\t\tsortingMode() {\n\t\t\treturn this.sortingStore.getSortingMode(this.currentView.id)\n\t\t\t\t|| this.currentView.defaultSortKey\n\t\t\t\t|| 'basename'\n\t\t},\n\t\tisAscSorting() {\n\t\t\treturn this.sortingStore.isAscSorting(this.currentView.id) === true\n\t\t},\n\t},\n\n\tmethods: {\n\t\tclassForColumn(column) {\n\t\t\treturn {\n\t\t\t\t'files-list__column': true,\n\t\t\t\t'files-list__column--sortable': !!column.sort,\n\t\t\t\t'files-list__row-column-custom': true,\n\t\t\t\t[`files-list__row-${this.currentView.id}-${column.id}`]: true,\n\t\t\t}\n\t\t},\n\n\t\tonToggleAll(selected) {\n\t\t\tif (selected) {\n\t\t\t\tconst selection = this.nodes.map(node => node.attributes.fileid.toString())\n\t\t\t\tlogger.debug('Added all nodes to selection', { selection })\n\t\t\t\tthis.selectionStore.set(selection)\n\t\t\t} else {\n\t\t\t\tlogger.debug('Cleared selection')\n\t\t\t\tthis.selectionStore.reset()\n\t\t\t}\n\t\t},\n\n\t\ttoggleSortBy(key) {\n\t\t\t// If we're already sorting by this key, flip the direction\n\t\t\tif (this.sortingMode === key) {\n\t\t\t\tthis.sortingStore.toggleSortingDirection(this.currentView.id)\n\t\t\t\treturn\n\t\t\t}\n\t\t\t// else sort ASC by this new key\n\t\t\tthis.sortingStore.setSortingBy(key, this.currentView.id)\n\t\t},\n\n\t\tt: translate,\n\t},\n})\n</script>\n\n<style scoped lang=\"scss\">\n@import '../mixins/fileslist-row.scss';\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</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../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/vue-loader/lib/index.js??vue-loader-options!./FilesListHeader.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!./FilesListHeader.vue?vue&type=style&index=0&id=0bbf142f&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=0bbf142f&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=0bbf142f&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=0bbf142f&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 \"0bbf142f\",\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('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 }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../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/vue-loader/lib/index.js??vue-loader-options!./FilesListVirtual.vue?vue&type=script&lang=ts&\"","<!--\n - @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\n -\n - @author Gary Kim <gary@garykim.dev>\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<RecycleScroller ref=\"recycleScroller\"\n\t\tclass=\"files-list\"\n\t\tkey-field=\"source\"\n\t\t:items=\"nodes\"\n\t\t:item-size=\"55\"\n\t\t:table-mode=\"true\"\n\t\titem-class=\"files-list__row\"\n\t\titem-tag=\"tr\"\n\t\tlist-class=\"files-list__body\"\n\t\tlist-tag=\"tbody\"\n\t\trole=\"table\">\n\t\t<template #default=\"{ item, active, index }\">\n\t\t\t<!-- File row -->\n\t\t\t<FileEntry :active=\"active\"\n\t\t\t\t:index=\"index\"\n\t\t\t\t:is-size-available=\"isSizeAvailable\"\n\t\t\t\t:source=\"item\" />\n\t\t</template>\n\n\t\t<template #before>\n\t\t\t<!-- Accessibility description -->\n\t\t\t<caption class=\"hidden-visually\">\n\t\t\t\t{{ currentView.caption || '' }}\n\t\t\t\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</caption>\n\n\t\t\t<!-- Thead-->\n\t\t\t<FilesListHeader :is-size-available=\"isSizeAvailable\" :nodes=\"nodes\" />\n\t\t</template>\n\n\t\t<template #after>\n\t\t\t<!-- Tfoot-->\n\t\t\t<FilesListFooter :is-size-available=\"isSizeAvailable\" :nodes=\"nodes\" :summary=\"summary\" />\n\t\t</template>\n\t</RecycleScroller>\n</template>\n\n<script lang=\"ts\">\nimport { RecycleScroller } from 'vue-virtual-scroller'\nimport { translate, translatePlural } from '@nextcloud/l10n'\nimport Vue from 'vue'\n\nimport FileEntry from './FileEntry.vue'\nimport FilesListFooter from './FilesListFooter.vue'\nimport FilesListHeader from './FilesListHeader.vue'\n\nexport default Vue.extend({\n\tname: 'FilesListVirtual',\n\n\tcomponents: {\n\t\tRecycleScroller,\n\t\tFileEntry,\n\t\tFilesListHeader,\n\t\tFilesListFooter,\n\t},\n\n\tprops: {\n\t\tcurrentView: {\n\t\t\ttype: Object,\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},\n\n\tdata() {\n\t\treturn {\n\t\t\tFileEntry,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tfiles() {\n\t\t\treturn this.nodes.filter(node => node.type === 'file')\n\t\t},\n\n\t\tsummaryFile() {\n\t\t\tconst count = this.files.length\n\t\t\treturn translatePlural('files', '{count} file', '{count} files', count, { count })\n\t\t},\n\t\tsummaryFolder() {\n\t\t\tconst count = this.nodes.length - this.files.length\n\t\t\treturn translatePlural('files', '{count} folder', '{count} folders', count, { count })\n\t\t},\n\t\tsummary() {\n\t\t\treturn translate('files', '{summaryFile} and {summaryFolder}', this)\n\t\t},\n\t\tisSizeAvailable() {\n\t\t\treturn this.nodes.some(node => node.attributes.size !== undefined)\n\t\t},\n\t},\n\n\tmounted() {\n\t\t// Make the root recycle scroller a table for proper semantics\n\t\tconst slots = this.$el.querySelectorAll('.vue-recycle-scroller__slot')\n\t\tslots[0].setAttribute('role', 'thead')\n\t\tslots[1].setAttribute('role', 'tfoot')\n\t},\n\n\tmethods: {\n\t\tgetFileId(node) {\n\t\t\treturn node.attributes.fileid\n\t\t},\n\n\t\tt: translate,\n\t},\n})\n</script>\n\n<style scoped lang=\"scss\">\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\t/**\n\t\t * Common row styling. tr are handled by\n\t\t * vue-virtual-scroller, so we need to\n\t\t * have those rules in here.\n\t\t */\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\t}\n}\n\n</style>\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!./FilesListVirtual.vue?vue&type=style&index=0&id=6f4155ff&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=6f4155ff&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=6f4155ff&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=6f4155ff&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 \"6f4155ff\",\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,\"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:{\"is-size-available\":_vm.isSizeAvailable,\"nodes\":_vm.nodes}})]},proxy:true},{key:\"after\",fn:function(){return [_c('FilesListFooter',{attrs:{\"is-size-available\":_vm.isSizeAvailable,\"nodes\":_vm.nodes,\"summary\":_vm.summary}})]},proxy:true}])})\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\n -\n - @author Gary Kim <gary@garykim.dev>\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<NcAppContent v-show=\"!currentView?.legacy\"\n\t\t:class=\"{'app-content--hidden': currentView?.legacy}\"\n\t\tdata-cy-files-content>\n\t\t<div class=\"files-list__header\">\n\t\t\t<!-- Current folder breadcrumbs -->\n\t\t\t<BreadCrumbs :path=\"dir\" @reload=\"fetchContent\" />\n\n\t\t\t<!-- Secondary loading indicator -->\n\t\t\t<NcLoadingIcon v-if=\"isRefreshing\" class=\"files-list__refresh-icon\" />\n\t\t</div>\n\n\t\t<!-- Initial loading -->\n\t\t<NcLoadingIcon v-if=\"loading && !isRefreshing\"\n\t\t\tclass=\"files-list__loading-icon\"\n\t\t\t:size=\"38\"\n\t\t\t:title=\"t('files', 'Loading current folder')\" />\n\n\t\t<!-- Empty content placeholder -->\n\t\t<NcEmptyContent v-else-if=\"!loading && isEmptyDir\"\n\t\t\t:title=\"t('files', 'No files in here')\"\n\t\t\t:description=\"t('files', 'No files or folders have been deleted yet')\"\n\t\t\tdata-cy-files-content-empty>\n\t\t\t<template #action>\n\t\t\t\t<NcButton v-if=\"dir !== '/'\"\n\t\t\t\t\taria-label=\"t('files', 'Go to the previous folder')\"\n\t\t\t\t\ttype=\"primary\"\n\t\t\t\t\t:to=\"toPreviousDir\">\n\t\t\t\t\t{{ t('files', 'Go back') }}\n\t\t\t\t</NcButton>\n\t\t\t</template>\n\t\t\t<template #icon>\n\t\t\t\t<TrashCan />\n\t\t\t</template>\n\t\t</NcEmptyContent>\n\n\t\t<!-- File list -->\n\t\t<FilesListVirtual v-else\n\t\t\tref=\"filesListVirtual\"\n\t\t\t:current-view=\"currentView\"\n\t\t\t:nodes=\"dirContents\" />\n\t</NcAppContent>\n</template>\n\n<script lang=\"ts\">\nimport { Folder, File, Node } from '@nextcloud/files'\nimport { join } from 'path'\nimport { orderBy } from 'natural-orderby'\nimport { translate } from '@nextcloud/l10n'\nimport NcAppContent from '@nextcloud/vue/dist/Components/NcAppContent.js'\nimport NcButton from '@nextcloud/vue/dist/Components/NcButton.js'\nimport NcEmptyContent from '@nextcloud/vue/dist/Components/NcEmptyContent.js'\nimport NcLoadingIcon from '@nextcloud/vue/dist/Components/NcLoadingIcon.js'\nimport TrashCan from 'vue-material-design-icons/TrashCan.vue'\nimport Vue from 'vue'\n\nimport Navigation, { ContentsWithRoot } from '../services/Navigation'\nimport { useFilesStore } from '../store/files'\nimport { usePathsStore } from '../store/paths'\nimport { useSelectionStore } from '../store/selection'\nimport { useSortingStore } from '../store/sorting'\nimport BreadCrumbs from '../components/BreadCrumbs.vue'\nimport FilesListVirtual from '../components/FilesListVirtual.vue'\nimport logger from '../logger.js'\n\nexport default Vue.extend({\n\tname: 'FilesList',\n\n\tcomponents: {\n\t\tBreadCrumbs,\n\t\tFilesListVirtual,\n\t\tNcAppContent,\n\t\tNcButton,\n\t\tNcEmptyContent,\n\t\tNcLoadingIcon,\n\t\tTrashCan,\n\t},\n\n\tsetup() {\n\t\tconst pathsStore = usePathsStore()\n\t\tconst filesStore = useFilesStore()\n\t\tconst selectionStore = useSelectionStore()\n\t\tconst sortingStore = useSortingStore()\n\t\treturn {\n\t\t\tfilesStore,\n\t\t\tpathsStore,\n\t\t\tselectionStore,\n\t\t\tsortingStore,\n\t\t}\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tloading: true,\n\t\t\tpromise: null,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/** @return {Navigation} */\n\t\tcurrentView() {\n\t\t\treturn this.$navigation.active\n\t\t\t\t|| this.$navigation.views.find(view => view.id === 'files')\n\t\t},\n\n\t\t/**\n\t\t * The current directory query.\n\t\t *\n\t\t * @return {string}\n\t\t */\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\n\t\t/**\n\t\t * The current folder.\n\t\t *\n\t\t * @return {Folder|undefined}\n\t\t */\n\t\tcurrentFolder() {\n\t\t\tif (!this.currentView?.id) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tif (this.dir === '/') {\n\t\t\t\treturn this.filesStore.getRoot(this.currentView.id)\n\t\t\t}\n\t\t\tconst fileId = this.pathsStore.getPath(this.currentView.id, this.dir)\n\t\t\treturn this.filesStore.getNode(fileId)\n\t\t},\n\n\t\tsortingMode() {\n\t\t\treturn this.sortingStore.getSortingMode(this.currentView.id)\n\t\t\t\t|| this.currentView.defaultSortKey\n\t\t\t\t|| 'basename'\n\t\t},\n\t\tisAscSorting() {\n\t\t\treturn this.sortingStore.isAscSorting(this.currentView.id) === true\n\t\t},\n\n\t\t/**\n\t\t * The current directory contents.\n\t\t *\n\t\t * @return {Node[]}\n\t\t */\n\t\tdirContents() {\n\t\t\tif (!this.currentView) {\n\t\t\t\treturn []\n\t\t\t}\n\n\t\t\tconst customColumn = this.currentView.columns\n\t\t\t\t.find(column => column.id === this.sortingMode)\n\n\t\t\t// Custom column must provide their own sorting methods\n\t\t\tif (customColumn?.sort && typeof customColumn.sort === 'function') {\n\t\t\t\tconst results = [...(this.currentFolder?.children || []).map(this.getNode).filter(file => file)]\n\t\t\t\t\t.sort(customColumn.sort)\n\t\t\t\treturn this.isAscSorting ? results : results.reverse()\n\t\t\t}\n\n\t\t\treturn orderBy(\n\t\t\t\t[...(this.currentFolder?.children || []).map(this.getNode).filter(file => file)],\n\t\t\t\t[\n\t\t\t\t\t// Sort folders first if sorting by name\n\t\t\t\t\t...this.sortingMode === 'basename' ? [v => v.type !== 'folder'] : [],\n\t\t\t\t\t// Use sorting mode\n\t\t\t\t\tv => v[this.sortingMode],\n\t\t\t\t\t// Fallback to name\n\t\t\t\t\tv => v.basename,\n\t\t\t\t],\n\t\t\t\tthis.isAscSorting ? ['asc', 'asc', 'asc'] : ['desc', 'desc', 'desc'],\n\t\t\t)\n\t\t},\n\n\t\t/**\n\t\t * The current directory is empty.\n\t\t */\n\t\tisEmptyDir() {\n\t\t\treturn this.dirContents.length === 0\n\t\t},\n\n\t\t/**\n\t\t * We are refreshing the current directory.\n\t\t * But we already have a cached version of it\n\t\t * that is not empty.\n\t\t */\n\t\tisRefreshing() {\n\t\t\treturn this.currentFolder !== undefined\n\t\t\t\t&& !this.isEmptyDir\n\t\t\t\t&& this.loading\n\t\t},\n\n\t\t/**\n\t\t * Route to the previous directory.\n\t\t */\n\t\ttoPreviousDir() {\n\t\t\tconst dir = this.dir.split('/').slice(0, -1).join('/') || '/'\n\t\t\treturn { ...this.$route, query: { dir } }\n\t\t},\n\t},\n\n\twatch: {\n\t\tcurrentView(newView, oldView) {\n\t\t\tif (newView?.id === oldView?.id) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tlogger.debug('View changed', { newView, oldView })\n\t\t\tthis.selectionStore.reset()\n\t\t\tthis.fetchContent()\n\t\t},\n\n\t\tdir(newDir, oldDir) {\n\t\t\tlogger.debug('Directory changed', { newDir, oldDir })\n\t\t\t// TODO: preserve selection on browsing?\n\t\t\tthis.selectionStore.reset()\n\t\t\tthis.fetchContent()\n\n\t\t\t// Scroll to top, force virtual scroller to re-render\n\t\t\tif (this.$refs?.filesListVirtual?.$el) {\n\t\t\t\tthis.$refs.filesListVirtual.$el.scrollTop = 0\n\t\t\t}\n\t\t},\n\t},\n\n\tmethods: {\n\t\tasync fetchContent() {\n\t\t\tif (this.currentView?.legacy) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tthis.loading = true\n\t\t\tconst dir = this.dir\n\t\t\tconst currentView = this.currentView\n\n\t\t\t// If we have a cancellable promise ongoing, cancel it\n\t\t\tif (typeof this.promise?.cancel === 'function') {\n\t\t\t\tthis.promise.cancel()\n\t\t\t\tlogger.debug('Cancelled previous ongoing fetch')\n\t\t\t}\n\n\t\t\t// Fetch the current dir contents\n\t\t\t/** @type {Promise<ContentsWithRoot>} */\n\t\t\tthis.promise = currentView.getContents(dir)\n\t\t\ttry {\n\t\t\t\tconst { folder, contents } = await this.promise\n\t\t\t\tlogger.debug('Fetched contents', { dir, folder, contents })\n\n\t\t\t\t// Update store\n\t\t\t\tthis.filesStore.updateNodes(contents)\n\n\t\t\t\t// Define current directory children\n\t\t\t\tfolder.children = contents.map(node => node.attributes.fileid)\n\n\t\t\t\t// If we're in the root dir, define the root\n\t\t\t\tif (dir === '/') {\n\t\t\t\t\tconsole.debug('files', 'Setting root', { service: currentView.id, folder })\n\t\t\t\t\tthis.filesStore.setRoot({ service: currentView.id, root: folder })\n\t\t\t\t} else\n\t\t\t\t// Otherwise, add the folder to the store\n\t\t\t\tif (folder.attributes.fileid) {\n\t\t\t\t\tthis.filesStore.updateNodes([folder])\n\t\t\t\t\tthis.pathsStore.addPath({ service: currentView.id, fileid: folder.attributes.fileid, path: dir })\n\t\t\t\t} else {\n\t\t\t\t\t// If we're here, the view API messed up\n\t\t\t\t\tlogger.error('Invalid root folder returned', { dir, folder, currentView })\n\t\t\t\t}\n\n\t\t\t\t// Update paths store\n\t\t\t\tconst folders = contents.filter(node => node.type === 'folder')\n\t\t\t\tfolders.forEach(node => {\n\t\t\t\t\tthis.pathsStore.addPath({ service: currentView.id, fileid: node.attributes.fileid, path: join(dir, node.basename) })\n\t\t\t\t})\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error('Error while fetching content', { error })\n\t\t\t} finally {\n\t\t\t\tthis.loading = false\n\t\t\t}\n\n\t\t},\n\n\t\t/**\n\t\t * Get a cached note from the store\n\t\t *\n\t\t * @param {number} fileId the file id to get\n\t\t * @return {Folder|File}\n\t\t */\n\t\t getNode(fileId) {\n\t\t\treturn this.filesStore.getNode(fileId)\n\t\t},\n\n\t\tt: translate,\n\t},\n})\n</script>\n\n<style scoped lang=\"scss\">\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</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../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/vue-loader/lib/index.js??vue-loader-options!./FilesList.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!./FilesList.vue?vue&type=style&index=0&id=3722ae64&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=3722ae64&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=3722ae64&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=3722ae64&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 \"3722ae64\",\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('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 * @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\n *\n * @author Gary Kim <gary@garykim.dev>\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 Gary Kim <gary@garykim.dev>\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) 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 { stringify } 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 = 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'\n\nimport processLegacyFilesViews from './legacy/navigationMapper.js'\n\nimport Vue from 'vue'\nimport { createPinia, PiniaVuePlugin } from 'pinia'\n\nimport NavigationService from './services/Navigation.ts'\nimport registerPreviewServiceWorker from './services/ServiceWorker.js'\n\nimport NavigationView from './views/Navigation.vue'\nimport FilesListView from './views/FilesList.vue'\n\nimport SettingsService from './services/Settings.js'\nimport SettingsModel from './models/Setting.js'\n\nimport router from './router/router.js'\n\n// Init private and public Files namespace\nwindow.OCA.Files = window.OCA.Files ?? {}\nwindow.OCP.Files = window.OCP.Files ?? {}\n\n// Init Pinia store\nVue.use(PiniaVuePlugin)\nconst pinia = createPinia()\n\n// Init Navigation Service\nconst Navigation = new NavigationService()\nObject.assign(window.OCP.Files, { Navigation })\nVue.prototype.$navigation = Navigation\n\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\n// Init Navigation View\nconst View = Vue.extend(NavigationView)\nconst FilesNavigationRoot = new View({\n\tname: 'FilesNavigationRoot',\n\tpropsData: {\n\t\tNavigation,\n\t},\n\trouter,\n\tpinia,\n})\nFilesNavigationRoot.$mount('#app-navigation-files')\n\n// Init content list view\nconst ListView = Vue.extend(FilesListView)\nconst FilesList = new ListView({\n\tname: 'FilesListRoot',\n\trouter,\n\tpinia,\n})\nFilesList.$mount('#app-content-vue')\n\n// Init legacy files views\nprocessLegacyFilesViews()\n\n// Register preview service worker\nregisterPreviewServiceWorker()\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-260f47ba]{flex:1 1 100% !important;width:100%}.breadcrumb[data-v-260f47ba] 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-6646d6a5]{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-6646d6a5] 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, \"td[data-v-3600e364],th[data-v-3600e364]{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}td span[data-v-3600e364],th span[data-v-3600e364]{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.files-list__row-checkbox[data-v-3600e364]{justify-content:center}.files-list__row-checkbox[data-v-3600e364] .checkbox-radio-switch{display:flex;justify-content:center;--icon-size: var(--checkbox-size)}.files-list__row-checkbox[data-v-3600e364] .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__row-checkbox[data-v-3600e364] .checkbox-radio-switch .checkbox-radio-switch__icon{margin:0 !important}.files-list__row-icon[data-v-3600e364]{display:flex;align-items:center;justify-content:center;width:var(--icon-preview-size);height:100%;margin-right:var(--checkbox-padding);color:var(--color-primary-element)}.files-list__row-icon>span[data-v-3600e364]{justify-content:flex-start}.files-list__row-icon[data-v-3600e364] svg{width:var(--icon-preview-size);height:var(--icon-preview-size)}.files-list__row-icon-preview[data-v-3600e364]{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__row-name[data-v-3600e364]{overflow:hidden;flex:1 1 auto}.files-list__row-name a[data-v-3600e364]{display:flex;align-items:center;width:100%;height:100%}.files-list__row-name a:focus .files-list__row-name-text[data-v-3600e364],.files-list__row-name a:focus-visible .files-list__row-name-text[data-v-3600e364]{outline:2px solid var(--color-main-text) !important;border-radius:20px}.files-list__row-name .files-list__row-name-text[data-v-3600e364]{padding:5px 10px;margin-left:-10px}.files-list__row-actions[data-v-3600e364]{width:auto}.files-list__row-actions~td[data-v-3600e364],.files-list__row-actions~th[data-v-3600e364]{margin:0 var(--cell-margin)}.files-list__row-actions[data-v-3600e364]>button .button-vue__text{font-weight:normal}.files-list__row-actions[data-v-3600e364]>button:not(:hover,:focus,:active) .button-vue__wrapper{color:var(--color-text-maxcontrast)}.files-list__row-size[data-v-3600e364]{justify-content:flex-end;width:calc(var(--row-height)*1.5);color:var(--color-main-text)}.files-list__row-size[data-v-3600e364] .files-list__column-sort-button{padding:0 16px 0 4px !important}.files-list__row-size[data-v-3600e364] .files-list__column-sort-button .button-vue__wrapper{flex-direction:row}.files-list__row-column-custom[data-v-3600e364]{width:calc(var(--row-height)*2)}tr[data-v-3600e364]:hover,tr[data-v-3600e364]:focus,tr[data-v-3600e364]:active{background-color:var(--color-background-dark)}.files-list__row-icon-preview[data-v-3600e364]:not([style*=background]){background:var(--color-loading-dark)}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/mixins/fileslist-row.scss\",\"webpack://./apps/files/src/components/FileEntry.vue\"],\"names\":[],\"mappings\":\"AA4BA,wCACC,YAAA,CACA,kBAAA,CACA,aAAA,CACA,oBAAA,CACA,uBAAA,CACA,wBAAA,CACA,QAAA,CACA,SAAA,CACA,mCAAA,CACA,WAAA,CAKA,kDACC,eAAA,CACA,kBAAA,CACA,sBAAA,CAIF,2CACC,sBAAA,CACA,kEACC,YAAA,CACA,sBAAA,CAEA,iCAAA,CAEA,qGACC,2BAAA,CACA,4BAAA,CACA,QAAA,CACA,8DAAA,CAGD,+FACC,mBAAA,CAKH,uCACC,YAAA,CACA,kBAAA,CACA,sBAAA,CACA,8BAAA,CACA,WAAA,CAEA,oCAAA,CACA,kCAAA,CAEA,4CACC,0BAAA,CAGD,2CACC,8BAAA,CACA,+BAAA,CAGD,+CACC,eAAA,CACA,8BAAA,CACA,+BAAA,CACA,kCAAA,CACA,2BAAA,CAEA,0BAAA,CACA,uBAAA,CAIF,uCAEC,eAAA,CAEA,aAAA,CAEA,yCACC,YAAA,CACA,kBAAA,CAEA,UAAA,CACA,WAAA,CAGA,4JAEC,mDAAA,CACA,kBAAA,CAIF,kEAEC,gBAAA,CACA,iBAAA,CAIF,0CACC,UAAA,CAGA,0FAEC,2BAAA,CAIA,mEAEC,kBAAA,CAED,iGAEC,mCAAA,CAKH,uCAEC,wBAAA,CACA,iCAAA,CAEA,4BAAA,CAGA,uEACC,+BAAA,CACA,4FACC,kBAAA,CAKH,gDACC,+BAAA,CCnKA,+EAGC,6CAAA,CAKF,wEACI,oCAAA\",\"sourcesContent\":[\"/**\\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\\n/**\\n * ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠\\n * This file is for every column styling that must be\\n * shared between BOTH the files list AND the list header.\\n * ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠\\n */\\ntd, th {\\n\\tdisplay: flex;\\n\\talign-items: center;\\n\\tflex: 0 0 auto;\\n\\tjustify-content: left;\\n\\twidth: var(--row-height);\\n\\theight: var(--row-height);\\n\\tmargin: 0;\\n\\tpadding: 0;\\n\\tcolor: var(--color-text-maxcontrast);\\n\\tborder: none;\\n\\n\\t// Columns should try to add any text\\n\\t// node wrapped in a span. That should help\\n\\t// with the ellipsis on overflow.\\n\\tspan {\\n\\t\\toverflow: hidden;\\n\\t\\twhite-space: nowrap;\\n\\t\\ttext-overflow: ellipsis;\\n\\t}\\n}\\n\\n.files-list__row-checkbox {\\n\\tjustify-content: center;\\n\\t&::v-deep .checkbox-radio-switch {\\n\\t\\tdisplay: flex;\\n\\t\\tjustify-content: center;\\n\\n\\t\\t--icon-size: var(--checkbox-size);\\n\\n\\t\\tlabel.checkbox-radio-switch__label {\\n\\t\\t\\twidth: var(--clickable-area);\\n\\t\\t\\theight: var(--clickable-area);\\n\\t\\t\\tmargin: 0;\\n\\t\\t\\tpadding: calc((var(--clickable-area) - var(--checkbox-size)) / 2);\\n\\t\\t}\\n\\n\\t\\t.checkbox-radio-switch__icon {\\n\\t\\t\\tmargin: 0 !important;\\n\\t\\t}\\n\\t}\\n}\\n\\n.files-list__row-icon {\\n\\tdisplay: flex;\\n\\talign-items: center;\\n\\tjustify-content: center;\\n\\twidth: var(--icon-preview-size);\\n\\theight: 100%;\\n\\t// Show same padding as the checkbox right padding for visual balance\\n\\tmargin-right: var(--checkbox-padding);\\n\\tcolor: var(--color-primary-element);\\n\\n\\t& > span {\\n\\t\\tjustify-content: flex-start;\\n\\t}\\n\\n\\t&::v-deep svg {\\n\\t\\twidth: var(--icon-preview-size);\\n\\t\\theight: var(--icon-preview-size);\\n\\t}\\n\\n\\t&-preview {\\n\\t\\toverflow: hidden;\\n\\t\\twidth: var(--icon-preview-size);\\n\\t\\theight: var(--icon-preview-size);\\n\\t\\tborder-radius: var(--border-radius);\\n\\t\\tbackground-repeat: no-repeat;\\n\\t\\t// Center and contain the preview\\n\\t\\tbackground-position: center;\\n\\t\\tbackground-size: contain;\\n\\t}\\n}\\n\\n.files-list__row-name {\\n\\t// Prevent link from overflowing\\n\\toverflow: hidden;\\n\\t// Take as much space as possible\\n\\tflex: 1 1 auto;\\n\\n\\ta {\\n\\t\\tdisplay: flex;\\n\\t\\talign-items: center;\\n\\t\\t// Fill cell height and width\\n\\t\\twidth: 100%;\\n\\t\\theight: 100%;\\n\\n\\t\\t// Keyboard indicator a11y\\n\\t\\t&:focus .files-list__row-name-text,\\n\\t\\t&:focus-visible .files-list__row-name-text {\\n\\t\\t\\toutline: 2px solid var(--color-main-text) !important;\\n\\t\\t\\tborder-radius: 20px;\\n\\t\\t}\\n\\t}\\n\\n\\t.files-list__row-name-text {\\n\\t\\t// Make some space for the outline\\n\\t\\tpadding: 5px 10px;\\n\\t\\tmargin-left: -10px;\\n\\t}\\n}\\n\\n.files-list__row-actions {\\n\\twidth: auto;\\n\\n\\t// Add margin to all cells after the actions\\n\\t& ~ td,\\n\\t& ~ th {\\n\\t\\tmargin: 0 var(--cell-margin);\\n\\t}\\n\\n\\t&::v-deep > button {\\n\\t\\t.button-vue__text {\\n\\t\\t\\t// Remove bold from default button styling\\n\\t\\t\\tfont-weight: normal;\\n\\t\\t}\\n\\t\\t&:not(:hover, :focus, :active) .button-vue__wrapper {\\n\\t\\t\\t// Also apply color-text-maxcontrast to non-active button\\n\\t\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t\\t}\\n\\t}\\n}\\n\\n.files-list__row-size {\\n\\t// Right align text\\n\\tjustify-content: flex-end;\\n\\twidth: calc(var(--row-height) * 1.5);\\n\\t// opacity varies with the size\\n\\tcolor: var(--color-main-text);\\n\\n\\t// Icon is before text since size is right aligned\\n\\t::v-deep .files-list__column-sort-button {\\n\\t\\tpadding: 0 16px 0 4px !important;\\n\\t\\t.button-vue__wrapper {\\n\\t\\t\\tflex-direction: row;\\n\\t\\t}\\n\\t}\\n}\\n\\n.files-list__row-column-custom {\\n\\twidth: calc(var(--row-height) * 2);\\n}\\n\",\"\\n@import '../mixins/fileslist-row.scss';\\n\\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, \"td[data-v-cc078f7a],th[data-v-cc078f7a]{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}td span[data-v-cc078f7a],th span[data-v-cc078f7a]{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.files-list__row-checkbox[data-v-cc078f7a]{justify-content:center}.files-list__row-checkbox[data-v-cc078f7a] .checkbox-radio-switch{display:flex;justify-content:center;--icon-size: var(--checkbox-size)}.files-list__row-checkbox[data-v-cc078f7a] .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__row-checkbox[data-v-cc078f7a] .checkbox-radio-switch .checkbox-radio-switch__icon{margin:0 !important}.files-list__row-icon[data-v-cc078f7a]{display:flex;align-items:center;justify-content:center;width:var(--icon-preview-size);height:100%;margin-right:var(--checkbox-padding);color:var(--color-primary-element)}.files-list__row-icon>span[data-v-cc078f7a]{justify-content:flex-start}.files-list__row-icon[data-v-cc078f7a] svg{width:var(--icon-preview-size);height:var(--icon-preview-size)}.files-list__row-icon-preview[data-v-cc078f7a]{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__row-name[data-v-cc078f7a]{overflow:hidden;flex:1 1 auto}.files-list__row-name a[data-v-cc078f7a]{display:flex;align-items:center;width:100%;height:100%}.files-list__row-name a:focus .files-list__row-name-text[data-v-cc078f7a],.files-list__row-name a:focus-visible .files-list__row-name-text[data-v-cc078f7a]{outline:2px solid var(--color-main-text) !important;border-radius:20px}.files-list__row-name .files-list__row-name-text[data-v-cc078f7a]{padding:5px 10px;margin-left:-10px}.files-list__row-actions[data-v-cc078f7a]{width:auto}.files-list__row-actions~td[data-v-cc078f7a],.files-list__row-actions~th[data-v-cc078f7a]{margin:0 var(--cell-margin)}.files-list__row-actions[data-v-cc078f7a]>button .button-vue__text{font-weight:normal}.files-list__row-actions[data-v-cc078f7a]>button:not(:hover,:focus,:active) .button-vue__wrapper{color:var(--color-text-maxcontrast)}.files-list__row-size[data-v-cc078f7a]{justify-content:flex-end;width:calc(var(--row-height)*1.5);color:var(--color-main-text)}.files-list__row-size[data-v-cc078f7a] .files-list__column-sort-button{padding:0 16px 0 4px !important}.files-list__row-size[data-v-cc078f7a] .files-list__column-sort-button .button-vue__wrapper{flex-direction:row}.files-list__row-column-custom[data-v-cc078f7a]{width:calc(var(--row-height)*2)}tr[data-v-cc078f7a]{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-cc078f7a]{user-select:none;color:var(--color-text-maxcontrast) !important}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/mixins/fileslist-row.scss\",\"webpack://./apps/files/src/components/FilesListFooter.vue\"],\"names\":[],\"mappings\":\"AA4BA,wCACC,YAAA,CACA,kBAAA,CACA,aAAA,CACA,oBAAA,CACA,uBAAA,CACA,wBAAA,CACA,QAAA,CACA,SAAA,CACA,mCAAA,CACA,WAAA,CAKA,kDACC,eAAA,CACA,kBAAA,CACA,sBAAA,CAIF,2CACC,sBAAA,CACA,kEACC,YAAA,CACA,sBAAA,CAEA,iCAAA,CAEA,qGACC,2BAAA,CACA,4BAAA,CACA,QAAA,CACA,8DAAA,CAGD,+FACC,mBAAA,CAKH,uCACC,YAAA,CACA,kBAAA,CACA,sBAAA,CACA,8BAAA,CACA,WAAA,CAEA,oCAAA,CACA,kCAAA,CAEA,4CACC,0BAAA,CAGD,2CACC,8BAAA,CACA,+BAAA,CAGD,+CACC,eAAA,CACA,8BAAA,CACA,+BAAA,CACA,kCAAA,CACA,2BAAA,CAEA,0BAAA,CACA,uBAAA,CAIF,uCAEC,eAAA,CAEA,aAAA,CAEA,yCACC,YAAA,CACA,kBAAA,CAEA,UAAA,CACA,WAAA,CAGA,4JAEC,mDAAA,CACA,kBAAA,CAIF,kEAEC,gBAAA,CACA,iBAAA,CAIF,0CACC,UAAA,CAGA,0FAEC,2BAAA,CAIA,mEAEC,kBAAA,CAED,iGAEC,mCAAA,CAKH,uCAEC,wBAAA,CACA,iCAAA,CAEA,4BAAA,CAGA,uEACC,+BAAA,CACA,4FACC,kBAAA,CAKH,gDACC,+BAAA,CCpKD,oBACC,oBAAA,CACA,wCAAA,CAEA,yCAAA,CACA,6BAAA,CAGD,oBACC,gBAAA,CAEA,8CAAA\",\"sourcesContent\":[\"/**\\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\\n/**\\n * ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠\\n * This file is for every column styling that must be\\n * shared between BOTH the files list AND the list header.\\n * ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠\\n */\\ntd, th {\\n\\tdisplay: flex;\\n\\talign-items: center;\\n\\tflex: 0 0 auto;\\n\\tjustify-content: left;\\n\\twidth: var(--row-height);\\n\\theight: var(--row-height);\\n\\tmargin: 0;\\n\\tpadding: 0;\\n\\tcolor: var(--color-text-maxcontrast);\\n\\tborder: none;\\n\\n\\t// Columns should try to add any text\\n\\t// node wrapped in a span. That should help\\n\\t// with the ellipsis on overflow.\\n\\tspan {\\n\\t\\toverflow: hidden;\\n\\t\\twhite-space: nowrap;\\n\\t\\ttext-overflow: ellipsis;\\n\\t}\\n}\\n\\n.files-list__row-checkbox {\\n\\tjustify-content: center;\\n\\t&::v-deep .checkbox-radio-switch {\\n\\t\\tdisplay: flex;\\n\\t\\tjustify-content: center;\\n\\n\\t\\t--icon-size: var(--checkbox-size);\\n\\n\\t\\tlabel.checkbox-radio-switch__label {\\n\\t\\t\\twidth: var(--clickable-area);\\n\\t\\t\\theight: var(--clickable-area);\\n\\t\\t\\tmargin: 0;\\n\\t\\t\\tpadding: calc((var(--clickable-area) - var(--checkbox-size)) / 2);\\n\\t\\t}\\n\\n\\t\\t.checkbox-radio-switch__icon {\\n\\t\\t\\tmargin: 0 !important;\\n\\t\\t}\\n\\t}\\n}\\n\\n.files-list__row-icon {\\n\\tdisplay: flex;\\n\\talign-items: center;\\n\\tjustify-content: center;\\n\\twidth: var(--icon-preview-size);\\n\\theight: 100%;\\n\\t// Show same padding as the checkbox right padding for visual balance\\n\\tmargin-right: var(--checkbox-padding);\\n\\tcolor: var(--color-primary-element);\\n\\n\\t& > span {\\n\\t\\tjustify-content: flex-start;\\n\\t}\\n\\n\\t&::v-deep svg {\\n\\t\\twidth: var(--icon-preview-size);\\n\\t\\theight: var(--icon-preview-size);\\n\\t}\\n\\n\\t&-preview {\\n\\t\\toverflow: hidden;\\n\\t\\twidth: var(--icon-preview-size);\\n\\t\\theight: var(--icon-preview-size);\\n\\t\\tborder-radius: var(--border-radius);\\n\\t\\tbackground-repeat: no-repeat;\\n\\t\\t// Center and contain the preview\\n\\t\\tbackground-position: center;\\n\\t\\tbackground-size: contain;\\n\\t}\\n}\\n\\n.files-list__row-name {\\n\\t// Prevent link from overflowing\\n\\toverflow: hidden;\\n\\t// Take as much space as possible\\n\\tflex: 1 1 auto;\\n\\n\\ta {\\n\\t\\tdisplay: flex;\\n\\t\\talign-items: center;\\n\\t\\t// Fill cell height and width\\n\\t\\twidth: 100%;\\n\\t\\theight: 100%;\\n\\n\\t\\t// Keyboard indicator a11y\\n\\t\\t&:focus .files-list__row-name-text,\\n\\t\\t&:focus-visible .files-list__row-name-text {\\n\\t\\t\\toutline: 2px solid var(--color-main-text) !important;\\n\\t\\t\\tborder-radius: 20px;\\n\\t\\t}\\n\\t}\\n\\n\\t.files-list__row-name-text {\\n\\t\\t// Make some space for the outline\\n\\t\\tpadding: 5px 10px;\\n\\t\\tmargin-left: -10px;\\n\\t}\\n}\\n\\n.files-list__row-actions {\\n\\twidth: auto;\\n\\n\\t// Add margin to all cells after the actions\\n\\t& ~ td,\\n\\t& ~ th {\\n\\t\\tmargin: 0 var(--cell-margin);\\n\\t}\\n\\n\\t&::v-deep > button {\\n\\t\\t.button-vue__text {\\n\\t\\t\\t// Remove bold from default button styling\\n\\t\\t\\tfont-weight: normal;\\n\\t\\t}\\n\\t\\t&:not(:hover, :focus, :active) .button-vue__wrapper {\\n\\t\\t\\t// Also apply color-text-maxcontrast to non-active button\\n\\t\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t\\t}\\n\\t}\\n}\\n\\n.files-list__row-size {\\n\\t// Right align text\\n\\tjustify-content: flex-end;\\n\\twidth: calc(var(--row-height) * 1.5);\\n\\t// opacity varies with the size\\n\\tcolor: var(--color-main-text);\\n\\n\\t// Icon is before text since size is right aligned\\n\\t::v-deep .files-list__column-sort-button {\\n\\t\\tpadding: 0 16px 0 4px !important;\\n\\t\\t.button-vue__wrapper {\\n\\t\\t\\tflex-direction: row;\\n\\t\\t}\\n\\t}\\n}\\n\\n.files-list__row-column-custom {\\n\\twidth: calc(var(--row-height) * 2);\\n}\\n\",\"\\n@import '../mixins/fileslist-row.scss';\\n\\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, \"td[data-v-0bbf142f],th[data-v-0bbf142f]{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}td span[data-v-0bbf142f],th span[data-v-0bbf142f]{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.files-list__row-checkbox[data-v-0bbf142f]{justify-content:center}.files-list__row-checkbox[data-v-0bbf142f] .checkbox-radio-switch{display:flex;justify-content:center;--icon-size: var(--checkbox-size)}.files-list__row-checkbox[data-v-0bbf142f] .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__row-checkbox[data-v-0bbf142f] .checkbox-radio-switch .checkbox-radio-switch__icon{margin:0 !important}.files-list__row-icon[data-v-0bbf142f]{display:flex;align-items:center;justify-content:center;width:var(--icon-preview-size);height:100%;margin-right:var(--checkbox-padding);color:var(--color-primary-element)}.files-list__row-icon>span[data-v-0bbf142f]{justify-content:flex-start}.files-list__row-icon[data-v-0bbf142f] svg{width:var(--icon-preview-size);height:var(--icon-preview-size)}.files-list__row-icon-preview[data-v-0bbf142f]{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__row-name[data-v-0bbf142f]{overflow:hidden;flex:1 1 auto}.files-list__row-name a[data-v-0bbf142f]{display:flex;align-items:center;width:100%;height:100%}.files-list__row-name a:focus .files-list__row-name-text[data-v-0bbf142f],.files-list__row-name a:focus-visible .files-list__row-name-text[data-v-0bbf142f]{outline:2px solid var(--color-main-text) !important;border-radius:20px}.files-list__row-name .files-list__row-name-text[data-v-0bbf142f]{padding:5px 10px;margin-left:-10px}.files-list__row-actions[data-v-0bbf142f]{width:auto}.files-list__row-actions~td[data-v-0bbf142f],.files-list__row-actions~th[data-v-0bbf142f]{margin:0 var(--cell-margin)}.files-list__row-actions[data-v-0bbf142f]>button .button-vue__text{font-weight:normal}.files-list__row-actions[data-v-0bbf142f]>button:not(:hover,:focus,:active) .button-vue__wrapper{color:var(--color-text-maxcontrast)}.files-list__row-size[data-v-0bbf142f]{justify-content:flex-end;width:calc(var(--row-height)*1.5);color:var(--color-main-text)}.files-list__row-size[data-v-0bbf142f] .files-list__column-sort-button{padding:0 16px 0 4px !important}.files-list__row-size[data-v-0bbf142f] .files-list__column-sort-button .button-vue__wrapper{flex-direction:row}.files-list__row-column-custom[data-v-0bbf142f]{width:calc(var(--row-height)*2)}.files-list__column[data-v-0bbf142f]{user-select:none;color:var(--color-text-maxcontrast) !important}.files-list__column--sortable[data-v-0bbf142f]{cursor:pointer}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/mixins/fileslist-row.scss\",\"webpack://./apps/files/src/components/FilesListHeader.vue\"],\"names\":[],\"mappings\":\"AA4BA,wCACC,YAAA,CACA,kBAAA,CACA,aAAA,CACA,oBAAA,CACA,uBAAA,CACA,wBAAA,CACA,QAAA,CACA,SAAA,CACA,mCAAA,CACA,WAAA,CAKA,kDACC,eAAA,CACA,kBAAA,CACA,sBAAA,CAIF,2CACC,sBAAA,CACA,kEACC,YAAA,CACA,sBAAA,CAEA,iCAAA,CAEA,qGACC,2BAAA,CACA,4BAAA,CACA,QAAA,CACA,8DAAA,CAGD,+FACC,mBAAA,CAKH,uCACC,YAAA,CACA,kBAAA,CACA,sBAAA,CACA,8BAAA,CACA,WAAA,CAEA,oCAAA,CACA,kCAAA,CAEA,4CACC,0BAAA,CAGD,2CACC,8BAAA,CACA,+BAAA,CAGD,+CACC,eAAA,CACA,8BAAA,CACA,+BAAA,CACA,kCAAA,CACA,2BAAA,CAEA,0BAAA,CACA,uBAAA,CAIF,uCAEC,eAAA,CAEA,aAAA,CAEA,yCACC,YAAA,CACA,kBAAA,CAEA,UAAA,CACA,WAAA,CAGA,4JAEC,mDAAA,CACA,kBAAA,CAIF,kEAEC,gBAAA,CACA,iBAAA,CAIF,0CACC,UAAA,CAGA,0FAEC,2BAAA,CAIA,mEAEC,kBAAA,CAED,iGAEC,mCAAA,CAKH,uCAEC,wBAAA,CACA,iCAAA,CAEA,4BAAA,CAGA,uEACC,+BAAA,CACA,4FACC,kBAAA,CAKH,gDACC,+BAAA,CCtKD,qCACC,gBAAA,CAEA,8CAAA,CAEA,+CACC,cAAA\",\"sourcesContent\":[\"/**\\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\\n/**\\n * ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠\\n * This file is for every column styling that must be\\n * shared between BOTH the files list AND the list header.\\n * ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠\\n */\\ntd, th {\\n\\tdisplay: flex;\\n\\talign-items: center;\\n\\tflex: 0 0 auto;\\n\\tjustify-content: left;\\n\\twidth: var(--row-height);\\n\\theight: var(--row-height);\\n\\tmargin: 0;\\n\\tpadding: 0;\\n\\tcolor: var(--color-text-maxcontrast);\\n\\tborder: none;\\n\\n\\t// Columns should try to add any text\\n\\t// node wrapped in a span. That should help\\n\\t// with the ellipsis on overflow.\\n\\tspan {\\n\\t\\toverflow: hidden;\\n\\t\\twhite-space: nowrap;\\n\\t\\ttext-overflow: ellipsis;\\n\\t}\\n}\\n\\n.files-list__row-checkbox {\\n\\tjustify-content: center;\\n\\t&::v-deep .checkbox-radio-switch {\\n\\t\\tdisplay: flex;\\n\\t\\tjustify-content: center;\\n\\n\\t\\t--icon-size: var(--checkbox-size);\\n\\n\\t\\tlabel.checkbox-radio-switch__label {\\n\\t\\t\\twidth: var(--clickable-area);\\n\\t\\t\\theight: var(--clickable-area);\\n\\t\\t\\tmargin: 0;\\n\\t\\t\\tpadding: calc((var(--clickable-area) - var(--checkbox-size)) / 2);\\n\\t\\t}\\n\\n\\t\\t.checkbox-radio-switch__icon {\\n\\t\\t\\tmargin: 0 !important;\\n\\t\\t}\\n\\t}\\n}\\n\\n.files-list__row-icon {\\n\\tdisplay: flex;\\n\\talign-items: center;\\n\\tjustify-content: center;\\n\\twidth: var(--icon-preview-size);\\n\\theight: 100%;\\n\\t// Show same padding as the checkbox right padding for visual balance\\n\\tmargin-right: var(--checkbox-padding);\\n\\tcolor: var(--color-primary-element);\\n\\n\\t& > span {\\n\\t\\tjustify-content: flex-start;\\n\\t}\\n\\n\\t&::v-deep svg {\\n\\t\\twidth: var(--icon-preview-size);\\n\\t\\theight: var(--icon-preview-size);\\n\\t}\\n\\n\\t&-preview {\\n\\t\\toverflow: hidden;\\n\\t\\twidth: var(--icon-preview-size);\\n\\t\\theight: var(--icon-preview-size);\\n\\t\\tborder-radius: var(--border-radius);\\n\\t\\tbackground-repeat: no-repeat;\\n\\t\\t// Center and contain the preview\\n\\t\\tbackground-position: center;\\n\\t\\tbackground-size: contain;\\n\\t}\\n}\\n\\n.files-list__row-name {\\n\\t// Prevent link from overflowing\\n\\toverflow: hidden;\\n\\t// Take as much space as possible\\n\\tflex: 1 1 auto;\\n\\n\\ta {\\n\\t\\tdisplay: flex;\\n\\t\\talign-items: center;\\n\\t\\t// Fill cell height and width\\n\\t\\twidth: 100%;\\n\\t\\theight: 100%;\\n\\n\\t\\t// Keyboard indicator a11y\\n\\t\\t&:focus .files-list__row-name-text,\\n\\t\\t&:focus-visible .files-list__row-name-text {\\n\\t\\t\\toutline: 2px solid var(--color-main-text) !important;\\n\\t\\t\\tborder-radius: 20px;\\n\\t\\t}\\n\\t}\\n\\n\\t.files-list__row-name-text {\\n\\t\\t// Make some space for the outline\\n\\t\\tpadding: 5px 10px;\\n\\t\\tmargin-left: -10px;\\n\\t}\\n}\\n\\n.files-list__row-actions {\\n\\twidth: auto;\\n\\n\\t// Add margin to all cells after the actions\\n\\t& ~ td,\\n\\t& ~ th {\\n\\t\\tmargin: 0 var(--cell-margin);\\n\\t}\\n\\n\\t&::v-deep > button {\\n\\t\\t.button-vue__text {\\n\\t\\t\\t// Remove bold from default button styling\\n\\t\\t\\tfont-weight: normal;\\n\\t\\t}\\n\\t\\t&:not(:hover, :focus, :active) .button-vue__wrapper {\\n\\t\\t\\t// Also apply color-text-maxcontrast to non-active button\\n\\t\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t\\t}\\n\\t}\\n}\\n\\n.files-list__row-size {\\n\\t// Right align text\\n\\tjustify-content: flex-end;\\n\\twidth: calc(var(--row-height) * 1.5);\\n\\t// opacity varies with the size\\n\\tcolor: var(--color-main-text);\\n\\n\\t// Icon is before text since size is right aligned\\n\\t::v-deep .files-list__column-sort-button {\\n\\t\\tpadding: 0 16px 0 4px !important;\\n\\t\\t.button-vue__wrapper {\\n\\t\\t\\tflex-direction: row;\\n\\t\\t}\\n\\t}\\n}\\n\\n.files-list__row-column-custom {\\n\\twidth: calc(var(--row-height) * 2);\\n}\\n\",\"\\n@import '../mixins/fileslist-row.scss';\\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-63bb14b6]{flex:1 1 100% !important}.files-list__row-actions-batch[data-v-63bb14b6] .button-vue__wrapper{width:100%}.files-list__row-actions-batch[data-v-63bb14b6] .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-6f4155ff]{--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-6f4155ff] tbody,.files-list[data-v-6f4155ff] .vue-recycle-scroller__slot{display:flex;flex-direction:column;width:100%;position:relative}.files-list[data-v-6f4155ff] .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-6f4155ff] tr{position:absolute;display:flex;align-items:center;width:100%;border-bottom:1px solid var(--color-border)}\", \"\",{\"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,CAQD,gCACC,iBAAA,CACA,YAAA,CACA,kBAAA,CACA,UAAA,CACA,2CAAA\",\"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\\t/**\\n\\t\\t * Common row styling. tr are handled by\\n\\t\\t * vue-virtual-scroller, so we need to\\n\\t\\t * have those rules in here.\\n\\t\\t */\\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\\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-entry__settings-quota--not-unlimited[data-v-26c061ec] .app-navigation-entry__title{margin-top:-4px}.app-navigation-entry__settings-quota progress[data-v-26c061ec]{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-3722ae64]{display:flex;overflow:hidden;flex-direction:column;max-height:100%}.app-content[data-v-3722ae64]:not(.app-content--hidden)+#app-content{display:none}.files-list__header[data-v-3722ae64]{display:flex;align-content:center;flex:0 0;margin:4px 4px 4px 50px}.files-list__header>*[data-v-3722ae64]{flex:0 0}.files-list__refresh-icon[data-v-3722ae64]{flex:0 0 44px;width:44px;height:44px}.files-list__loading-icon[data-v-3722ae64]{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-5bdabc28] .app-navigation-entry-icon{background-repeat:no-repeat;background-position:center}.app-navigation>ul.app-navigation__list[data-v-5bdabc28]{padding-bottom:var(--default-grid-baseline, 4px)}.app-navigation-entry__settings[data-v-5bdabc28]{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-b5e4b862]: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\":\";AA6dA;;;;;;;;;;GAUA\",\"sourcesContent\":[\"<!--\\n - @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\\n -\\n - @author Gary Kim <gary@garykim.dev>\\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.sync=\\\"selectedFiles\\\"\\n\\t\\t\\t\\t:value=\\\"fileid.toString()\\\"\\n\\t\\t\\t\\tname=\\\"selectedFiles\\\" />\\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\\\">\\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=\\\"mimeUrl\\\"\\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: mimeUrl }\\\" />\\n\\n\\t\\t\\t\\t\\t<FileIcon v-else />\\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:force-title=\\\"true\\\"\\n\\t\\t\\t\\t:inline=\\\"enabledInlineActions.length\\\">\\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<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<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 { Folder, File, formatFileSize } from '@nextcloud/files'\\nimport { Fragment } from 'vue-fragment'\\nimport { join } from 'path'\\nimport { showError } 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 Vue from 'vue'\\n\\nimport { isCachedPreview } from '../services/PreviewService'\\nimport { getFileActions } from '../services/FileAction'\\nimport { useFilesStore } from '../store/files'\\nimport { UserConfig } from '../types'\\nimport { useSelectionStore } from '../store/selection'\\nimport { useUserConfigStore } from '../store/userconfig'\\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},\\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},\\n\\n\\tsetup() {\\n\\t\\tconst filesStore = useFilesStore()\\n\\t\\tconst selectionStore = useSelectionStore()\\n\\t\\tconst userConfigStore = useUserConfigStore()\\n\\t\\treturn {\\n\\t\\t\\tfilesStore,\\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\\tloading: '',\\n\\t\\t}\\n\\t},\\n\\n\\tcomputed: {\\n\\t\\t/** @return {UserConfig} */\\n\\t\\tuserConfig() {\\n\\t\\t\\treturn this.userConfigStore.userConfig\\n\\t\\t},\\n\\n\\t\\t/** @return {Navigation} */\\n\\t\\tcurrentView() {\\n\\t\\t\\treturn this.$navigation.active\\n\\t\\t},\\n\\n\\t\\tcolumns() {\\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\\n\\t\\tfileid() {\\n\\t\\t\\treturn this.source.attributes.fileid\\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\\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\\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\\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\\tget() {\\n\\t\\t\\t\\treturn this.selectionStore.selected\\n\\t\\t\\t},\\n\\t\\t\\tset(selection) {\\n\\t\\t\\t\\tlogger.debug('Changed nodes selection', { selection })\\n\\t\\t\\t\\tthis.selectionStore.set(selection)\\n\\t\\t\\t},\\n\\t\\t},\\n\\n\\t\\tcropPreviews() {\\n\\t\\t\\treturn this.userConfig.crop_image_previews\\n\\t\\t},\\n\\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 ? '1' : '0')\\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\\n\\t\\tmimeUrl() {\\n\\t\\t\\tconst mimeType = this.source.mime || 'application/octet-stream'\\n\\t\\t\\tconst mimeUrl = window.OC?.MimeType?.getIconUrl?.(mimeType)\\n\\t\\t\\tif (mimeUrl) {\\n\\t\\t\\t\\treturn `url(${mimeUrl})`\\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\\n\\t\\tenabledInlineActions() {\\n\\t\\t\\treturn this.enabledActions.filter(action => action?.inline?.(this.source, this.currentView))\\n\\t\\t},\\n\\n\\t\\tenabledMenuActions() {\\n\\t\\t\\treturn [\\n\\t\\t\\t\\t...this.enabledInlineActions,\\n\\t\\t\\t\\t...actions.filter(action => !action.inline),\\n\\t\\t\\t]\\n\\t\\t},\\n\\n\\t\\tuniqueId() {\\n\\t\\t\\treturn this.hashCode(this.source.source)\\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 tabindex from the row\\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\\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// Ensure max 5 previews are being fetched at the same time\\n\\t\\t\\tconst controller = new AbortController()\\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\\tcontroller.abort()\\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.$refs.actionsMenu.closeMenu()\\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\\thashCode(str) {\\n\\t\\t\\tlet hash = 0\\n\\t\\t\\tfor (let i = 0, len = str.length; i < len; i++) {\\n\\t\\t\\t\\tconst chr = str.charCodeAt(i)\\n\\t\\t\\t\\thash = (hash << 5) - hash + chr\\n\\t\\t\\t\\thash |= 0 // Convert to 32bit integer\\n\\t\\t\\t}\\n\\t\\t\\treturn hash\\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\\tthis.loading = action.id\\n\\t\\t\\t\\tawait action.exec(this.source, this.currentView)\\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', 'Error while executing action \\\"{displayName}\\\"', { displayName }))\\n\\t\\t\\t} finally {\\n\\t\\t\\t\\tthis.loading = ''\\n\\t\\t\\t}\\n\\t\\t},\\n\\n\\t\\tt: translate,\\n\\t\\tformatFileSize,\\n\\t},\\n})\\n</script>\\n\\n<style scoped lang='scss'>\\n@import '../mixins/fileslist-row.scss';\\n\\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 = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(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 = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(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 = function(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 = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(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(function(id) { return 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], function() { return __webpack_require__(71328); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","getCurrentDirectory","currentDirInfo","OCA","Files","App","currentFileList","dirInfo","path","name","replace","getTemplates","axios","generateOcsUrl","response","data","ocs","createFromTemplate","filePath","templatePath","templateType","inheritAttrs","props","basename","type","required","checked","default","fileid","filename","previewUrl","hasPreview","mime","ratio","failedPreview","computed","nameWithoutExt","id","realPreviewUrl","getCurrentUser","document","getElementById","value","pathSections","startsWith","split","relativePath","forEach","section","encodeURIComponent","mimeIcon","methods","onCheck","onFailure","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","_vm","this","_c","_self","staticClass","attrs","domProps","on","_v","class","_s","components","NcEmptyContent","NcModal","TemplatePreview","logger","loading","opened","provider","emptyTemplate","selectedTemplate","style","open","templates","fetchedProvider","close","onSubmit","currentDirectory","fileList","extension","normalize","fileInfo","model","filesClient","fileAction","$file","dir","fileActions","fileInfoModel","console","showError","$event","preventDefault","stopPropagation","apply","arguments","t","_b","_l","template","key","_e","getLoggerBuilder","setApp","detectUser","build","Vue","n","TemplatePickerRoot","createElement","body","appendChild","loadState","templatesPath","debug","TemplatePicker","TemplatePickerView","propsData","$mount","window","addEventListener","initTemplatesPlugin","attach","menu","addMenuEntry","displayName","templateName","iconClass","fileType","actionHandler","initTemplatesFolder","removeMenuEntry","OC","Plugins","register","index","newTemplatePlugin","app","label","FilesPlugin","copySystemTemplates","changeDirectory","template_path","error","subscribe","query","setFilter","action","FileAction","validateAction","_action","iconSvgInline","enabled","exec","execBatch","order","inline","renderInline","Error","getFileActions","_nc_fileactions","nodes","view","TrashCan","length","map","node","permissions","every","permission","Permission","source","emit","Promise","all","find","search","push","registerLegacyView","icon","parent","classes","expanded","params","OCP","Navigation","legacy","sticky","includes","isValidNavigation","isUniqueNavigation","_views","e","message","_currentView","views","getContents","isSvg","columns","isValidColumn","emptyView","defaultSortKey","column","title","render","sort","summary","ChartPie","NcAppNavigationItem","NcProgressBar","loadingStorageStats","storageStats","storageStatsTitle","usedQuotaByte","used","quota","storageStatsTooltip","beforeMount","setInterval","debounceUpdateStorageStats","throttleUpdateStorageStats","updateStorageStats","event","slot","relative","Math","min","el","mounted","userConfig","show_hidden","crop_image_previews","useUserConfigStore","store","defineStore","state","actions","onUpdate","update","generateUrl","userConfigStore","initialized","Clipboard","NcAppSettingsDialog","NcAppSettingsSection","NcCheckboxRadioSwitch","NcInputField","Setting","setup","settings","webdavUrl","webdavDocs","appPasswordUrl","webdavUrlCopied","beforeDestroy","onClose","setConfig","copyCloudId","navigator","showSuccess","setTimeout","setting","target","select","scopedSlots","_u","fn","proxy","Cog","NavigationQuota","NcAppNavigation","NcIconSvgWrapper","SettingsModal","settingsOpened","currentViewId","currentView","parentViews","filter","childViews","reduce","list","watch","showView","heading","headingEl","newAppContent","itemId","setPageHeading","textContent","onLegacyNavigationChanged","onToggleExpand","show","generateToNavigation","openSettings","onSettingsClose","child","useFilesStore","fileStore","files","roots","getters","getNode","getNodes","ids","Boolean","getRoot","service","updateNodes","acc","attributes","deleteNodes","setRoot","root","onCreatedNode","onDeletedNode","onMovedNode","usePathsStore","getPath","addPath","payload","pathsStore","useSelectionStore","selected","set","selection","reset","saveUserConfig","mode","direction","filesSortingConfig","useSortingStore","isAscSorting","getSortingMode","setSortingBy","config","toggleSortingDirection","newDirection","Home","NcBreadcrumbs","NcBreadcrumb","dirs","sections","exact","to","onClick","ariaLabel","_setupProxy","nativeOn","isCachedPreview","caches","then","cache","match","element","svg","CustomElementRender","CustomSvgIconRender","FileIcon","FolderIcon","Fragment","NcActionButton","NcActions","NcLoadingIcon","active","isSizeAvailable","filesStore","selectionStore","backgroundFailed","backgroundImage","size","sizeOpacity","linkTo","is","href","selectedFiles","get","cropPreviews","url","mimeUrl","enabledActions","enabledInlineActions","enabledMenuActions","uniqueId","debounceIfNotCached","isCached","fetchAndApplyPreview","img","resolve","reject","onCancel","controller","resetState","clearImg","hashCode","hash","onActionClick","formatFileSize","toString","ref","opacity","currentFolder","totalSize","classForColumn","selectedNodes","selectionIds","results","failedIds","MenuDown","MenuUp","NcButton","inject","sortingStore","mapState","sortingMode","sortAriaLabel","toggleSortBy","FilesListHeaderButton","FilesListHeaderActions","provide","selectAllBind","indeterminate","isAllSelected","isNoneSelected","isSomeSelected","onToggleAll","RecycleScroller","FileEntry","FilesListHeader","FilesListFooter","summaryFile","count","summaryFolder","slots","getFileId","item","caption","BreadCrumbs","FilesListVirtual","NcAppContent","promise","dirContents","isEmptyDir","isRefreshing","toPreviousDir","newView","oldView","newDir","oldDir","fetchContent","folder","contents","folders","directives","rawName","expression","Settings","_settings","_name","_el","_open","_close","Router","base","linkActiveClass","routes","alias","stringifyQuery","result","stringify","PiniaVuePlugin","pinia","createPinia","NavigationService","Object","assign","legacyViews","SettingsService","SettingsModel","NavigationView","router","FilesListView","values","sublist","subview","noRewrite","serviceWorker","scope","registration","___CSS_LOADER_EXPORT___","module","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","loaded","__webpack_modules__","call","m","O","chunkIds","priority","notFulfilled","Infinity","i","fulfilled","j","keys","splice","r","getter","__esModule","d","a","definition","o","defineProperty","enumerable","g","globalThis","Function","obj","prop","prototype","hasOwnProperty","Symbol","toStringTag","nmd","paths","children","b","baseURI","self","location","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","bind","nc","__webpack_exports__"],"sourceRoot":""}
\ No newline at end of file +{"version":3,"file":"files-main.js?v=354bf8881bc9b1645ade","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/services/Templates.js","webpack:///nextcloud/apps/files/src/components/TemplatePreview.vue","webpack:///nextcloud/apps/files/src/utils/fileUtils.js","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/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/legacy/navigationMapper.js","webpack:///nextcloud/apps/files/src/services/Navigation.ts","webpack:///nextcloud/apps/files/src/services/ServiceWorker.js","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?2b80","webpack://nextcloud/./apps/files/src/components/NavigationQuota.vue?2966","webpack://nextcloud/./apps/files/src/components/NavigationQuota.vue?08cb","webpack:///nextcloud/apps/files/src/components/Setting.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/files/src/components/Setting.vue","webpack://nextcloud/./apps/files/src/components/Setting.vue?98ea","webpack://nextcloud/./apps/files/src/components/Setting.vue?8d57","webpack:///nextcloud/apps/files/src/store/userconfig.ts","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?a515","webpack://nextcloud/./apps/files/src/views/Settings.vue?b81b","webpack://nextcloud/./apps/files/src/views/Settings.vue?84f7","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?7ba1","webpack://nextcloud/./apps/files/src/views/Navigation.vue?74b9","webpack://nextcloud/./apps/files/src/views/Navigation.vue?8122","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/sorting.ts","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?0fe5","webpack://nextcloud/./apps/files/src/components/BreadCrumbs.vue?d357","webpack://nextcloud/./apps/files/src/components/BreadCrumbs.vue?e906","webpack:///nextcloud/apps/files/src/services/PreviewService.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?vue&type=script&lang=js&","webpack:///nextcloud/apps/files/src/components/CustomSvgIconRender.vue","webpack://nextcloud/./apps/files/src/components/CustomSvgIconRender.vue?822b","webpack://nextcloud/./apps/files/src/components/CustomSvgIconRender.vue?5641","webpack://nextcloud/./apps/files/src/components/CustomSvgIconRender.vue?2c34","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/components/FileEntry.vue?2874","webpack://nextcloud/./apps/files/src/components/FileEntry.vue?908a","webpack://nextcloud/./apps/files/src/components/FileEntry.vue?da7c","webpack://nextcloud/./apps/files/src/components/FileEntry.vue?77f7","webpack:///nextcloud/apps/files/src/components/FilesListFooter.vue","webpack:///nextcloud/apps/files/src/components/FilesListFooter.vue?vue&type=script&lang=ts&","webpack://nextcloud/./apps/files/src/components/FilesListFooter.vue?489c","webpack://nextcloud/./apps/files/src/components/FilesListFooter.vue?80db","webpack://nextcloud/./apps/files/src/components/FilesListFooter.vue?a2f0","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?923e","webpack://nextcloud/./apps/files/src/components/FilesListHeaderActions.vue?9823","webpack://nextcloud/./apps/files/src/components/FilesListHeaderActions.vue?1b40","webpack:///nextcloud/apps/files/src/components/FilesListHeaderButton.vue","webpack:///nextcloud/apps/files/src/components/FilesListHeaderButton.vue?vue&type=script&lang=ts&","webpack://nextcloud/./apps/files/src/components/FilesListHeaderButton.vue?dfe5","webpack://nextcloud/./apps/files/src/components/FilesListHeaderButton.vue?5686","webpack://nextcloud/./apps/files/src/components/FilesListHeaderButton.vue?fb45","webpack:///nextcloud/apps/files/src/components/FilesListHeader.vue","webpack:///nextcloud/apps/files/src/components/FilesListHeader.vue?vue&type=script&lang=ts&","webpack://nextcloud/./apps/files/src/components/FilesListHeader.vue?9ba4","webpack://nextcloud/./apps/files/src/components/FilesListHeader.vue?349b","webpack://nextcloud/./apps/files/src/components/FilesListHeader.vue?635d","webpack:///nextcloud/apps/files/src/components/FilesListVirtual.vue?vue&type=script&lang=ts&","webpack:///nextcloud/apps/files/src/components/FilesListVirtual.vue","webpack://nextcloud/./apps/files/src/components/FilesListVirtual.vue?6c65","webpack://nextcloud/./apps/files/src/components/FilesListVirtual.vue?3555","webpack://nextcloud/./apps/files/src/components/FilesListVirtual.vue?9d6c","webpack:///nextcloud/apps/files/src/views/FilesList.vue","webpack:///nextcloud/apps/files/src/views/FilesList.vue?vue&type=script&lang=ts&","webpack://nextcloud/./apps/files/src/views/FilesList.vue?6003","webpack://nextcloud/./apps/files/src/views/FilesList.vue?1e5b","webpack://nextcloud/./apps/files/src/views/FilesList.vue?efeb","webpack:///nextcloud/apps/files/src/services/Settings.js","webpack:///nextcloud/apps/files/src/models/Setting.js","webpack:///nextcloud/apps/files/src/router/router.js","webpack:///nextcloud/apps/files/src/main.js","webpack:///nextcloud/apps/files/src/components/BreadCrumbs.vue?vue&type=style&index=0&id=260f47ba&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/files/src/components/CustomSvgIconRender.vue?vue&type=style&index=0&id=6646d6a5&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/files/src/components/FileEntry.vue?vue&type=style&index=0&id=50e87a0e&prod&scoped=true&lang=scss&","webpack:///nextcloud/apps/files/src/components/FilesListFooter.vue?vue&type=style&index=0&id=3a8b911c&prod&scoped=true&lang=scss&","webpack:///nextcloud/apps/files/src/components/FilesListHeader.vue?vue&type=style&index=0&id=7f9e4535&prod&scoped=true&lang=scss&","webpack:///nextcloud/apps/files/src/components/FilesListHeaderActions.vue?vue&type=style&index=0&id=1dfa1154&prod&scoped=true&lang=scss&","webpack:///nextcloud/apps/files/src/components/FilesListHeaderButton.vue?vue&type=style&index=0&id=443029be&prod&lang=scss&","webpack:///nextcloud/apps/files/src/components/FilesListVirtual.vue?vue&type=style&index=0&id=6f4155ff&prod&scoped=true&lang=scss&","webpack:///nextcloud/apps/files/src/components/NavigationQuota.vue?vue&type=style&index=0&id=26c061ec&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=42495694&prod&scoped=true&lang=scss&","webpack:///nextcloud/apps/files/src/views/Navigation.vue?vue&type=style&index=0&id=4238b71c&prod&scoped=true&lang=scss&","webpack:///nextcloud/apps/files/src/views/Settings.vue?vue&type=style&index=0&id=2e129f40&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=50e87a0e&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 = function(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(function(key) { return __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\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 - @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","/**\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","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 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 */\n\nimport { Node } from '@nextcloud/files'\nimport logger from '../logger'\n\ndeclare global {\n\tinterface Window {\n\t\tOC: any;\n\t\t_nc_fileactions: FileAction[] | undefined;\n\t}\n}\n\n/**\n * TODO: remove and move to @nextcloud/files\n * @see https://github.com/nextcloud/nextcloud-files/pull/608\n */\ninterface FileActionData {\n\t/** Unique ID */\n\tid: string\n\t/** Translatable string displayed in the menu */\n\tdisplayName: (files: Node[], view) => string\n\t/** Svg as inline string. <svg><path fill=\"...\" /></svg> */\n\ticonSvgInline: (files: Node[], view) => string\n\t/** Condition wether this action is shown or not */\n\tenabled?: (files: Node[], view) => boolean\n\t/**\n\t * Function executed on single file action\n\t * @returns true if the action was executed, false otherwise\n\t * @throws Error if the action failed\n\t */\n\texec: (file: Node, view) => Promise<boolean>,\n\t/**\n\t * Function executed on multiple files action\n\t * @returns true if the action was executed, false otherwise\n\t * @throws Error if the action failed\n\t */\n\texecBatch?: (files: Node[], view) => Promise<boolean[]>\n\t/** This action order in the list */\n\torder?: number,\n\t/** Make this action the default */\n\tdefault?: boolean,\n\t/**\n\t * If true, the renderInline function will be called\n\t */\n\tinline?: (file: Node, view) => boolean,\n\t/**\n\t * If defined, the returned html element will be\n\t * appended before the actions menu.\n\t */\n\trenderInline?: (file: Node, view) => HTMLElement,\n}\n\nexport class FileAction {\n\n\tprivate _action: FileActionData\n\n\tconstructor(action: FileActionData) {\n\t\tthis.validateAction(action)\n\t\tthis._action = action\n\t}\n\n\tget id() {\n\t\treturn this._action.id\n\t}\n\n\tget displayName() {\n\t\treturn this._action.displayName\n\t}\n\n\tget iconSvgInline() {\n\t\treturn this._action.iconSvgInline\n\t}\n\n\tget enabled() {\n\t\treturn this._action.enabled\n\t}\n\n\tget exec() {\n\t\treturn this._action.exec\n\t}\n\n\tget execBatch() {\n\t\treturn this._action.execBatch\n\t}\n\n\tget order() {\n\t\treturn this._action.order\n\t}\n\n\tget default() {\n\t\treturn this._action.default\n\t}\n\n\tget inline() {\n\t\treturn this._action.inline\n\t}\n\n\tget renderInline() {\n\t\treturn this._action.renderInline\n\t}\n\n\tprivate validateAction(action: FileActionData) {\n\t\tif (!action.id || typeof action.id !== 'string') {\n\t\t\tthrow new Error('Invalid id')\n\t\t}\n\n\t\tif (!action.displayName || typeof action.displayName !== 'function') {\n\t\t\tthrow new Error('Invalid displayName function')\n\t\t}\n\n\t\tif (!action.iconSvgInline || typeof action.iconSvgInline !== 'function') {\n\t\t\tthrow new Error('Invalid iconSvgInline function')\n\t\t}\n\n\t\tif (!action.exec || typeof action.exec !== 'function') {\n\t\t\tthrow new Error('Invalid exec function')\n\t\t}\n\n\t\t// Optional properties --------------------------------------------\n\t\tif ('enabled' in action && typeof action.enabled !== 'function') {\n\t\t\tthrow new Error('Invalid enabled function')\n\t\t}\n\n\t\tif ('execBatch' in action && typeof action.execBatch !== 'function') {\n\t\t\tthrow new Error('Invalid execBatch function')\n\t\t}\n\n\t\tif ('order' in action && typeof action.order !== 'number') {\n\t\t\tthrow new Error('Invalid order')\n\t\t}\n\n\t\tif ('default' in action && typeof action.default !== 'boolean') {\n\t\t\tthrow new Error('Invalid default')\n\t\t}\n\n\t\tif ('inline' in action && typeof action.inline !== 'function') {\n\t\t\tthrow new Error('Invalid inline function')\n\t\t}\n\n\t\tif ('renderInline' in action && typeof action.renderInline !== 'function') {\n\t\t\tthrow new Error('Invalid renderInline function')\n\t\t}\n\t}\n\n}\n\nexport const registerFileAction = function(action: FileAction): void {\n\tif (typeof window._nc_fileactions === 'undefined') {\n\t\twindow._nc_fileactions = []\n\t\tlogger.debug('FileActions initialized')\n\t}\n\n\t// Check duplicates\n\tif (window._nc_fileactions.find(search => search.id === action.id)) {\n\t\tlogger.error(`FileAction ${action.id} already registered`, { action })\n\t\treturn\n\t}\n\n\twindow._nc_fileactions.push(action)\n}\n\nexport const getFileActions = function(): FileAction[] {\n\treturn 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'\n\nimport { registerFileAction, FileAction } from '../services/FileAction.ts'\nimport logger from '../logger.js'\n\nregisterFileAction(new FileAction({\n\tid: 'delete',\n\tdisplayName(nodes: Node[], view) {\n\t\treturn view.id === 'trashbin'\n\t\t\t? t('files_trashbin', 'Delete permanently')\n\t\t\t: t('files', 'Delete')\n\t},\n\ticonSvgInline: () => TrashCan,\n\n\tenabled(nodes: Node[]) {\n\t\treturn nodes.length > 0 && nodes\n\t\t\t.map(node => node.permissions)\n\t\t\t.every(permission => (permission & Permission.DELETE) !== 0)\n\t},\n\n\tasync exec(node: Node) {\n\t\ttry {\n\t\t\tawait axios.delete(node.source)\n\n\t\t\t// Let's delete even if it's moved to the trashbin\n\t\t\t// since it has been removed from the current view\n\t\t\t// and changing the view will trigger a reload anyway.\n\t\t\temit('files:file:deleted', node)\n\t\t\treturn true\n\t\t} catch (error) {\n\t\t\tlogger.error('Error while deleting a file', { error, source: node.source, node })\n\t\t\treturn false\n\t\t}\n\t},\n\tasync execBatch(nodes: Node[], view) {\n\t\treturn Promise.all(nodes.map(node => this.exec(node, view)))\n\t},\n\n\torder: 100,\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 */\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 */\n/* eslint-disable */\nimport type { Folder, Node } from '@nextcloud/files'\nimport isSvg from 'is-svg'\n\nimport logger from '../logger.js'\n\nexport type ContentsWithRoot = {\n\tfolder: Folder,\n\tcontents: Node[]\n}\n\nexport interface Column {\n\t/** Unique column ID */\n\tid: string\n\t/** Translated column title */\n\ttitle: string\n\t/** The content of the cell. The element will be appended within */\n\trender: (node: Node, view: Navigation) => HTMLElement\n\t/** Function used to sort Nodes between them */\n\tsort?: (nodeA: Node, nodeB: Node) => number\n\t/** Custom summary of the column to display at the end of the list.\n\t Will not be displayed if nothing is provided */\n\tsummary?: (node: Node[], view: Navigation) => string\n}\n\nexport interface Navigation {\n\t/** Unique view ID */\n\tid: string\n\t/** Translated view name */\n\tname: string\n\t/**\n\t * Method return the content of the provided path\n\t * This ideally should be a cancellable promise.\n\t * promise.cancel(reason) will be called when the directory\n\t * change and the promise is not resolved yet.\n\t * You _must_ also return the current directory\n\t * information alongside with its content.\n\t */\n\tgetContents: (path: string) => Promise<ContentsWithRoot>\n\t/** The view icon as an inline svg */\n\ticon: string\n\t/** The view order */\n\torder: number\n\t/** This view column(s). Name and actions are\n\tby default always included */\n\tcolumns?: Column[]\n\t/** The empty view element to render your empty content into */\n\temptyView?: (div: HTMLDivElement) => void\n\t/** The parent unique ID */\n\tparent?: string\n\t/** This view is sticky (sent at the bottom) */\n\tsticky?: boolean\n\t/** This view has children and is expanded or not */\n\texpanded?: boolean\n\n\t/**\n\t * Will be used as default if the user\n\t * haven't customized their sorting column\n\t * */\n\tdefaultSortKey?: string\n\n\t/**\n\t * This view is sticky a legacy view.\n\t * Here until all the views are migrated to Vue.\n\t * @deprecated It will be removed in a near future\n\t */\n\tlegacy?: boolean\n\t/**\n\t * An icon class. \n\t * @deprecated It will be removed in a near future\n\t */\n\ticonClass?: string\n}\n\nexport default class {\n\n\tprivate _views: Navigation[] = []\n\tprivate _currentView: Navigation | null = null\n\n\tconstructor() {\n\t\tlogger.debug('Navigation service initialized')\n\t}\n\n\tregister(view: Navigation) {\n\t\ttry {\n\t\t\tisValidNavigation(view)\n\t\t\tisUniqueNavigation(view, this._views)\n\t\t} catch (e) {\n\t\t\tif (e instanceof Error) {\n\t\t\t\tlogger.error(e.message, { view })\n\t\t\t}\n\t\t\tthrow e\n\t\t}\n\n\t\tif (view.legacy) {\n\t\t\tlogger.warn('Legacy view detected, please migrate to Vue')\n\t\t}\n\n\t\tif (view.iconClass) {\n\t\t\tview.legacy = true\n\t\t}\n\n\t\tthis._views.push(view)\n\t}\n\n\tget views(): Navigation[] {\n\t\treturn this._views\n\t}\n\n\tsetActive(view: Navigation | null) {\n\t\tthis._currentView = view\n\t}\n\n\tget active(): Navigation | null {\n\t\treturn this._currentView\n\t}\n\n}\n\n/**\n * Make sure the given view is unique\n * and not already registered.\n */\nconst isUniqueNavigation = function(view: Navigation, views: Navigation[]): boolean {\n\tif (views.find(search => search.id === view.id)) {\n\t\tthrow new Error(`Navigation id ${view.id} is already registered`)\n\t}\n\treturn true\n}\n\n/**\n * Typescript cannot validate an interface.\n * Please keep in sync with the Navigation interface requirements.\n */\nconst isValidNavigation = function(view: Navigation): boolean {\n\tif (!view.id || typeof view.id !== 'string') {\n\t\tthrow new Error('Navigation id is required and must be a string')\n\t}\n\n\tif (!view.name || typeof view.name !== 'string') {\n\t\tthrow new Error('Navigation name is required and must be a string')\n\t}\n\n\t/**\n\t * Legacy handle their content and icon differently\n\t * TODO: remove when support for legacy views is removed\n\t */\n\tif (!view.legacy) {\n\t\tif (!view.getContents || typeof view.getContents !== 'function') {\n\t\t\tthrow new Error('Navigation getContents is required and must be a function')\n\t\t}\n\n\t\tif (!view.icon || typeof view.icon !== 'string' || !isSvg(view.icon)) {\n\t\t\tthrow new Error('Navigation icon is required and must be a valid svg string')\n\t\t}\n\t}\n\n\tif (!('order' in view) || typeof view.order !== 'number') {\n\t\tthrow new Error('Navigation order is required and must be a number')\n\t}\n\n\t// Optional properties\n\tif (view.columns) {\n\t\tview.columns.forEach(isValidColumn)\n\t}\n\n\tif (view.emptyView && typeof view.emptyView !== 'function') {\n\t\tthrow new Error('Navigation emptyView must be a function')\n\t}\n\n\tif (view.parent && typeof view.parent !== 'string') {\n\t\tthrow new Error('Navigation parent must be a string')\n\t}\n\n\tif ('sticky' in view && typeof view.sticky !== 'boolean') {\n\t\tthrow new Error('Navigation sticky must be a boolean')\n\t}\n\n\tif ('expanded' in view && typeof view.expanded !== 'boolean') {\n\t\tthrow new Error('Navigation expanded must be a boolean')\n\t}\n\n\tif (view.defaultSortKey && typeof view.defaultSortKey !== 'string') {\n\t\tthrow new Error('Navigation defaultSortKey must be a string')\n\t}\n\n\treturn true\n}\n\n/**\n * Typescript cannot validate an interface.\n * Please keep in sync with the Column interface requirements.\n */\nconst isValidColumn = function(column: Column): boolean {\n\tif (!column.id || typeof column.id !== 'string') {\n\t\tthrow new Error('A column id is required')\n\t}\n\n\tif (!column.title || typeof column.title !== 'string') {\n\t\tthrow new Error('A column title is required')\n\t}\n\n\tif (!column.render || typeof column.render !== 'function') {\n\t\tthrow new Error('A render function is required')\n\t}\n\n\t// Optional properties\n\tif (column.sort && typeof column.sort !== 'function') {\n\t\tthrow new Error('Column sortFunction must be a function')\n\t}\n\n\tif (column.summary && typeof column.summary !== 'function') {\n\t\tthrow new Error('Column summary must be a function')\n\t}\n\n\treturn true\n}\n","/**\n * @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\n *\n * @author Gary Kim <gary@garykim.dev>\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","<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:file:created', this.throttleUpdateStorageStats)\n\t\tsubscribe('files:file:deleted', this.throttleUpdateStorageStats)\n\t\tsubscribe('files:file:moved', this.throttleUpdateStorageStats)\n\t\tsubscribe('files:file:updated', this.throttleUpdateStorageStats)\n\n\t\tsubscribe('files:folder:created', this.throttleUpdateStorageStats)\n\t\tsubscribe('files:folder:deleted', this.throttleUpdateStorageStats)\n\t\tsubscribe('files:folder:moved', this.throttleUpdateStorageStats)\n\t\tsubscribe('files:folder: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=26c061ec&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=26c061ec&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=26c061ec&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=26c061ec&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 \"26c061ec\",\n null\n \n)\n\nexport default component.exports","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 }","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&\"","<!--\n - @copyright Copyright (c) 2020 Gary Kim <gary@garykim.dev>\n -\n - @author Gary Kim <gary@garykim.dev>\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 { render, staticRenderFns } from \"./Setting.vue?vue&type=template&id=03406edc&\"\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 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 type { UserConfig, UserConfigStore } from '../types.ts'\nimport { emit, subscribe } from '@nextcloud/event-bus'\n\nconst userConfig = loadState('files', 'config', {\n\tshow_hidden: false,\n\tcrop_image_previews: true,\n}) as UserConfig\n\nexport const useUserConfigStore = () => {\n\tconst store = defineStore('userconfig', {\n\t\tstate: () => ({\n\t\t\tuserConfig,\n\t\t} as UserConfigStore),\n\n\t\tactions: {\n\t\t\t/**\n\t\t\t * Update the user config local store\n\t\t\t */\n\t\t\tonUpdate(key: string, value: boolean) {\n\t\t\t\tVue.set(this.userConfig, key, value)\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Update the user config local store AND on server side\n\t\t\t */\n\t\t\tasync update(key: string, value: boolean) {\n\t\t\t\tawait axios.post(generateUrl('/apps/files/api/v1/config/' + key), {\n\t\t\t\t\tvalue,\n\t\t\t\t})\n\n\t\t\t\temit('files:config:updated', { key, value })\n\t\t\t}\n\t\t}\n\t})\n\n\tconst userConfigStore = store()\n\n\t// Make sure we only register the listeners once\n\tif (!userConfigStore.initialized) {\n\t\tsubscribe('files:config:updated', function({ key, value }: { key: string, value: boolean }) {\n\t\t\tuserConfigStore.onUpdate(key, value)\n\t\t})\n\t\tuserConfigStore.initialized = true\n\t}\n\n\treturn userConfigStore\n}\n\n","<!--\n - @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\n -\n - @author Gary Kim <gary@garykim.dev>\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=2e129f40&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=2e129f40&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=2e129f40&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=2e129f40&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 \"2e129f40\",\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) 2019 Gary Kim <gary@garykim.dev>\n -\n - @author Gary Kim <gary@garykim.dev>\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=\"view.expanded\"\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=\"view.icon\" slot=\"icon\" :svg=\"view.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 { generateUrl } from '@nextcloud/router'\nimport { translate } from '@nextcloud/l10n'\n\nimport axios from '@nextcloud/axios'\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 logger from '../logger.js'\nimport Navigation from '../services/Navigation.ts'\nimport NavigationQuota from '../components/NavigationQuota.vue'\nimport SettingsModal from './Settings.vue'\nimport { setPageHeading } from '../../../../core/src/OCP/accessibility.js'\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\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\t// debugger\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\tview.expanded = !view.expanded\n\t\t\taxios.post(generateUrl(`/apps/files/api/v1/toggleShowFolder/${view.id}`), { show: view.expanded })\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=4238b71c&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=4238b71c&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=4238b71c&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=4238b71c&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 \"4238b71c\",\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\":view.expanded,\"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)}},[(view.icon)?_c('NcIconSvgWrapper',{attrs:{\"slot\":\"icon\",\"svg\":view.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 }","/**\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 type { Folder, Node } from '@nextcloud/files'\nimport type { FilesStore, RootsStore, RootOptions, Service, FilesState } from '../types.ts'\n\nimport { defineStore } from 'pinia'\nimport { subscribe } from '@nextcloud/event-bus'\nimport Vue from 'vue'\nimport logger from '../logger'\n\nexport const useFilesStore = () => {\n\tconst store = defineStore('files', {\n\t\tstate: (): FilesState => ({\n\t\t\tfiles: {} as FilesStore,\n\t\t\troots: {} as RootsStore,\n\t\t}),\n\n\t\tgetters: {\n\t\t\t/**\n\t\t\t * Get a file or folder by id\n\t\t\t */\n\t\t\tgetNode: (state) => (id: number): Node|undefined => state.files[id],\n\n\t\t\t/**\n\t\t\t * Get a list of files or folders by their IDs\n\t\t\t * Does not return undefined values\n\t\t\t */\n\t\t\tgetNodes: (state) => (ids: number[]): Node[] => ids\n\t\t\t\t.map(id => state.files[id])\n\t\t\t\t.filter(Boolean),\n\t\t\t/**\n\t\t\t * Get a file or folder by id\n\t\t\t */\n\t\t\tgetRoot: (state) => (service: Service): Folder|undefined => state.roots[service],\n\t\t},\n\n\t\tactions: {\n\t\t\tupdateNodes(nodes: Node[]) {\n\t\t\t\t// Update the store all at once\n\t\t\t\tconst files = nodes.reduce((acc, node) => {\n\t\t\t\t\tif (!node.attributes.fileid) {\n\t\t\t\t\t\tlogger.warn('Trying to update/set a node without fileid', node)\n\t\t\t\t\t\treturn acc\n\t\t\t\t\t}\n\t\t\t\t\tacc[node.attributes.fileid] = node\n\t\t\t\t\treturn acc\n\t\t\t\t}, {} as FilesStore)\n\n\t\t\t\tVue.set(this, 'files', {...this.files, ...files})\n\t\t\t},\n\n\t\t\tdeleteNodes(nodes: Node[]) {\n\t\t\t\tnodes.forEach(node => {\n\t\t\t\t\tif (node.fileid) {\n\t\t\t\t\t\tVue.delete(this.files, node.fileid)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t},\n\n\t\t\tsetRoot({ service, root }: RootOptions) {\n\t\t\t\tVue.set(this.roots, service, root)\n\t\t\t},\n\n\t\t\tonCreatedNode() {\n\t\t\t\t// TODO: do something\n\t\t\t},\n\n\t\t\tonDeletedNode(node: Node) {\n\t\t\t\tthis.deleteNodes([node])\n\t\t\t},\n\n\t\t\tonMovedNode() {\n\t\t\t\t// TODO: do something\n\t\t\t},\n\t\t}\n\t})\n\n\tconst fileStore = store()\n\t// Make sure we only register the listeners once\n\tif (!fileStore.initialized) {\n\t\tsubscribe('files:file:created', fileStore.onCreatedNode)\n\t\tsubscribe('files:file:deleted', fileStore.onDeletedNode)\n\t\tsubscribe('files:file:moved', fileStore.onMovedNode)\n\t\t// subscribe('files:file:updated', fileStore.onUpdatedNode)\n\n\t\tsubscribe('files:folder:created', fileStore.onCreatedNode)\n\t\tsubscribe('files:folder:deleted', fileStore.onDeletedNode)\n\t\tsubscribe('files:folder:moved', fileStore.onMovedNode)\n\t\t// subscribe('files:folder:updated', fileStore.onUpdatedNode)\n\n\t\tfileStore.initialized = true\n\t}\n\n\treturn fileStore\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 type { PathOptions, ServicesState } from '../types.ts'\n\nimport { defineStore } from 'pinia'\nimport Vue from 'vue'\nimport { subscribe } from '@nextcloud/event-bus'\n\nexport const usePathsStore = () => {\n\tconst store = defineStore('paths', {\n\t\tstate: (): ServicesState => ({}),\n\n\t\tgetters: {\n\t\t\tgetPath: (state) => {\n\t\t\t\treturn (service: string, path: string): number|undefined => {\n\t\t\t\t\tif (!state[service]) {\n\t\t\t\t\t\treturn undefined\n\t\t\t\t\t}\n\t\t\t\t\treturn state[service][path]\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\n\t\tactions: {\n\t\t\taddPath(payload: PathOptions) {\n\t\t\t\t// If it doesn't exists, init the service state\n\t\t\t\tif (!this[payload.service]) {\n\t\t\t\t\tVue.set(this, payload.service, {})\n\t\t\t\t}\n\n\t\t\t\t// Now we can set the provided path\n\t\t\t\tVue.set(this[payload.service], payload.path, payload.fileid)\n\t\t\t},\n\t\t}\n\t})\n\n\tconst pathsStore = store()\n\t// Make sure we only register the listeners once\n\tif (!pathsStore.initialized) {\n\t\t// TODO: watch folders to update paths?\n\t\t// subscribe('files:folder:created', pathsStore.onCreatedNode)\n\t\t// subscribe('files:folder:deleted', pathsStore.onDeletedNode)\n\t\t// subscribe('files:folder:moved', pathsStore.onMovedNode)\n\n\t\tpathsStore.initialized = true\n\t}\n\n\treturn 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'\n\nexport const useSelectionStore = defineStore('selection', {\n\tstate: () => ({\n\t\tselected: [] as number[]\n\t}),\n\n\tactions: {\n\t\t/**\n\t\t * Set the selection of fileIds\n\t\t */\n\t\tset(selection = [] as number[]) {\n\t\t\tVue.set(this, 'selected', selection)\n\t\t},\n\n\t\t/**\n\t\t * Reset the selection\n\t\t */\n\t\treset() {\n\t\t\tVue.set(this, 'selected', [])\n\t\t}\n\t}\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 type { direction, SortingStore } from '../types.ts'\n\nconst saveUserConfig = (mode: string, direction: direction, view: string) => {\n\treturn axios.post(generateUrl('/apps/files/api/v1/sorting'), {\n\t\tmode,\n\t\tdirection,\n\t\tview,\n\t})\n}\n\nconst filesSortingConfig = loadState('files', 'filesSortingConfig', {}) as SortingStore\n\nexport const useSortingStore = defineStore('sorting', {\n\tstate: () => ({\n\t\tfilesSortingConfig,\n\t}),\n\n\tgetters: {\n\t\tisAscSorting: (state) => (view: string = 'files') => state.filesSortingConfig[view]?.direction !== 'desc',\n\t\tgetSortingMode: (state) => (view: string = 'files') => state.filesSortingConfig[view]?.mode,\n\t},\n\n\tactions: {\n\t\t/**\n\t\t * Set the sorting key AND sort by ASC\n\t\t * The key param must be a valid key of a File object\n\t\t * If not found, will be searched within the File attributes\n\t\t */\n\t\tsetSortingBy(key: string = 'basename', view: string = 'files') {\n\t\t\tconst config = this.filesSortingConfig[view] || {}\n\t\t\tconfig.mode = key\n\t\t\tconfig.direction = 'asc'\n\n\t\t\t// Save new config\n\t\t\tVue.set(this.filesSortingConfig, view, config)\n\t\t\tsaveUserConfig(config.mode, config.direction, view)\n\t\t},\n\n\t\t/**\n\t\t * Toggle the sorting direction\n\t\t */\n\t\ttoggleSortingDirection(view: string = 'files') {\n\t\t\tconst config = this.filesSortingConfig[view] || { 'direction': 'asc' }\n\t\t\tconst newDirection = config.direction === 'asc' ? 'desc' : 'asc'\n\t\t\tconfig.direction = newDirection\n\n\t\t\t// Save new config\n\t\t\tVue.set(this.filesSortingConfig, view, config)\n\t\t\tsaveUserConfig(config.mode, config.direction, view)\n\t\t}\n\t}\n})\n\n","<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\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\tcomputed: {\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: basename(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\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=260f47ba&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=260f47ba&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=260f47ba&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=260f47ba&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 \"260f47ba\",\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('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 }","/**\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\n// The preview service worker cache name (see webpack config)\nconst SWCacheName = 'previews'\n\n/**\n * Check if the preview is already cached by the service worker\n */\nexport const isCachedPreview = function(previewUrl: string) {\n\treturn caches.open(SWCacheName)\n\t\t.then(function(cache) {\n\t\t\treturn cache.match(previewUrl)\n\t\t\t\t.then(function(response) {\n\t\t\t\t\treturn !!response\n\t\t\t\t})\n\t\t})\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) 2019 Gary Kim <gary@garykim.dev>\n -\n - @author Gary Kim <gary@garykim.dev>\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=2c07e380&\"\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 }","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 - @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\n -\n - @author Gary Kim <gary@garykim.dev>\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","\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=6646d6a5&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=6646d6a5&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=6646d6a5&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=6646d6a5&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 \"6646d6a5\",\n null\n \n)\n\nexport default component.exports","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) 2019 Gary Kim <gary@garykim.dev>\n -\n - @author Gary Kim <gary@garykim.dev>\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.sync=\"selectedFiles\"\n\t\t\t\t:value=\"fileid.toString()\"\n\t\t\t\tname=\"selectedFiles\" />\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\">\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\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:force-title=\"true\"\n\t\t\t\t:inline=\"enabledInlineActions.length\">\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<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<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-fragment'\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 Vue from 'vue'\n\nimport { isCachedPreview } from '../services/PreviewService.ts'\nimport { getFileActions } from '../services/FileAction.ts'\nimport { useFilesStore } from '../store/files.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},\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},\n\n\tsetup() {\n\t\tconst filesStore = useFilesStore()\n\t\tconst selectionStore = useSelectionStore()\n\t\tconst userConfigStore = useUserConfigStore()\n\t\treturn {\n\t\t\tfilesStore,\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\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\n\t\tcolumns() {\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\n\t\tfileid() {\n\t\t\treturn this.source.attributes.fileid\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\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\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\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\tget() {\n\t\t\t\treturn this.selectionStore.selected\n\t\t\t},\n\t\t\tset(selection) {\n\t\t\t\tlogger.debug('Changed nodes selection', { selection })\n\t\t\t\tthis.selectionStore.set(selection)\n\t\t\t},\n\t\t},\n\n\t\tcropPreviews() {\n\t\t\treturn this.userConfig.crop_image_previews\n\t\t},\n\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 ? '1' : '0')\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\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\n\t\tenabledInlineActions() {\n\t\t\treturn this.enabledActions.filter(action => action?.inline?.(this.source, this.currentView))\n\t\t},\n\n\t\tenabledMenuActions() {\n\t\t\treturn [\n\t\t\t\t...this.enabledInlineActions,\n\t\t\t\t...actions.filter(action => !action.inline),\n\t\t\t]\n\t\t},\n\n\t\tuniqueId() {\n\t\t\treturn this.hashCode(this.source.source)\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\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.$refs?.actionsMenu?.closeMenu?.()\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\thashCode(str) {\n\t\t\tlet hash = 0\n\t\t\tfor (let i = 0, len = str.length; i < len; i++) {\n\t\t\t\tconst chr = str.charCodeAt(i)\n\t\t\t\thash = (hash << 5) - hash + chr\n\t\t\t\thash |= 0 // Convert to 32bit integer\n\t\t\t}\n\t\t\treturn hash\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\tthis.loading = action.id\n\t\t\t\tconst success = await action.exec(this.source, this.currentView)\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\tthis.loading = ''\n\t\t\t}\n\t\t},\n\n\t\tt: translate,\n\t\tformatFileSize,\n\t},\n})\n</script>\n\n<style scoped lang='scss'>\n@import '../mixins/fileslist-row.scss';\n\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","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../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/vue-loader/lib/index.js??vue-loader-options!./FileEntry.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!./FileEntry.vue?vue&type=style&index=0&id=50e87a0e&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=50e87a0e&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=50e87a0e&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=50e87a0e&prod&lang=css&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./FileEntry.vue?vue&type=template&id=50e87a0e&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=50e87a0e&prod&scoped=true&lang=scss&\"\nimport style1 from \"./FileEntry.vue?vue&type=style&index=1&id=50e87a0e&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 \"50e87a0e\",\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.toString(),\"name\":\"selectedFiles\"},on:{\"update:checked\":function($event){_vm.selectedFiles=$event}}}):_vm._e()],1),_vm._v(\" \"),_c('td',{staticClass:\"files-list__row-name\"},[_c('a',_vm._b({ref:\"name\"},'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')],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:{\"force-title\":true,\"inline\":_vm.enabledInlineActions.length}},_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 })},[_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}`},[(_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 }","<!--\n - @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\n -\n - @author Gary Kim <gary@garykim.dev>\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<tr>\n\t\t<th class=\"files-list__row-checkbox\">\n\t\t\t<span class=\"hidden-visually\">{{ t('files', 'Total rows summary') }}</span>\n\t\t</th>\n\n\t\t<!-- Link to file -->\n\t\t<td class=\"files-list__row-name\">\n\t\t\t<!-- Icon or preview -->\n\t\t\t<span class=\"files-list__row-icon\" />\n\n\t\t\t<!-- Summary -->\n\t\t\t<span>{{ summary }}</span>\n\t\t</td>\n\n\t\t<!-- Actions -->\n\t\t<td class=\"files-list__row-actions\" />\n\n\t\t<!-- Size -->\n\t\t<td v-if=\"isSizeAvailable\" class=\"files-list__column files-list__row-size\">\n\t\t\t<span>{{ totalSize }}</span>\n\t\t</td>\n\n\t\t<!-- Custom views columns -->\n\t\t<th v-for=\"column in columns\"\n\t\t\t:key=\"column.id\"\n\t\t\t:class=\"classForColumn(column)\">\n\t\t\t<span>{{ column.summary?.(nodes, currentView) }}</span>\n\t\t</th>\n\t</tr>\n</template>\n\n<script lang=\"ts\">\nimport { formatFileSize } from '@nextcloud/files'\nimport { translate } from '@nextcloud/l10n'\nimport Vue from 'vue'\n\nimport { useFilesStore } from '../store/files.ts'\nimport { usePathsStore } from '../store/paths.ts'\n\nexport default Vue.extend({\n\tname: 'FilesListFooter',\n\n\tcomponents: {\n\t},\n\n\tprops: {\n\t\tisSizeAvailable: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tnodes: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t},\n\t\tsummary: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t},\n\n\tsetup() {\n\t\tconst pathsStore = usePathsStore()\n\t\tconst filesStore = useFilesStore()\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\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\n\t\tcurrentFolder() {\n\t\t\tif (!this.currentView?.id) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tif (this.dir === '/') {\n\t\t\t\treturn this.filesStore.getRoot(this.currentView.id)\n\t\t\t}\n\t\t\tconst fileId = this.pathsStore.getPath(this.currentView.id, this.dir)\n\t\t\treturn this.filesStore.getNode(fileId)\n\t\t},\n\n\t\tcolumns() {\n\t\t\treturn this.currentView?.columns || []\n\t\t},\n\n\t\ttotalSize() {\n\t\t\t// If we have the size already, let's use it\n\t\t\tif (this.currentFolder?.size) {\n\t\t\t\treturn formatFileSize(this.currentFolder.size, true)\n\t\t\t}\n\n\t\t\t// Otherwise let's compute it\n\t\t\treturn formatFileSize(this.nodes.reduce((total, node) => total + node.size || 0, 0), true)\n\t\t},\n\t},\n\n\tmethods: {\n\t\tclassForColumn(column) {\n\t\t\treturn {\n\t\t\t\t'files-list__row-column-custom': true,\n\t\t\t\t[`files-list__row-${this.currentView.id}-${column.id}`]: true,\n\t\t\t}\n\t\t},\n\n\t\tt: translate,\n\t},\n})\n</script>\n\n<style scoped lang=\"scss\">\n@import '../mixins/fileslist-row.scss';\n\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</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../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/vue-loader/lib/index.js??vue-loader-options!./FilesListFooter.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!./FilesListFooter.vue?vue&type=style&index=0&id=3a8b911c&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=3a8b911c&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=3a8b911c&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=3a8b911c&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 \"3a8b911c\",\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('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 - @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\n -\n - @author Gary Kim <gary@garykim.dev>\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<th class=\"files-list__column files-list__row-actions-batch\" colspan=\"2\">\n\t\t<NcActions ref=\"actionsMenu\"\n\t\t\t:disabled=\"!!loading\"\n\t\t\t:force-title=\"true\"\n\t\t\t:inline=\"3\">\n\t\t\t<NcActionButton v-for=\"action in enabledActions\"\n\t\t\t\t:key=\"action.id\"\n\t\t\t\t:class=\"'files-list__row-actions-batch-' + action.id\"\n\t\t\t\t@click=\"onActionClick(action)\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<NcLoadingIcon v-if=\"loading === action.id\" :size=\"18\" />\n\t\t\t\t\t<CustomSvgIconRender v-else :svg=\"action.iconSvgInline(nodes, currentView)\" />\n\t\t\t\t</template>\n\t\t\t\t{{ action.displayName(nodes, currentView) }}\n\t\t\t</NcActionButton>\n\t\t</NcActions>\n\t</th>\n</template>\n\n<script lang=\"ts\">\nimport { showError, showSuccess } from '@nextcloud/dialogs'\nimport { translate } from '@nextcloud/l10n'\nimport NcActions from '@nextcloud/vue/dist/Components/NcActions.js'\nimport NcActionButton from '@nextcloud/vue/dist/Components/NcActionButton.js'\nimport NcLoadingIcon from '@nextcloud/vue/dist/Components/NcLoadingIcon.js'\nimport Vue from 'vue'\n\nimport { getFileActions } from '../services/FileAction.ts'\nimport { useFilesStore } from '../store/files.ts'\nimport { useSelectionStore } from '../store/selection.ts'\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: 'FilesListHeaderActions',\n\n\tcomponents: {\n\t\tCustomSvgIconRender,\n\t\tNcActions,\n\t\tNcActionButton,\n\t\tNcLoadingIcon,\n\t},\n\n\tprops: {\n\t\tcurrentView: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t\tselectedNodes: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => ([]),\n\t\t},\n\t},\n\n\tsetup() {\n\t\tconst filesStore = useFilesStore()\n\t\tconst selectionStore = useSelectionStore()\n\t\treturn {\n\t\t\tfilesStore,\n\t\t\tselectionStore,\n\t\t}\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tloading: null,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tenabledActions() {\n\t\t\treturn actions\n\t\t\t\t.filter(action => action.execBatch)\n\t\t\t\t.filter(action => !action.enabled || action.enabled(this.nodes, this.currentView))\n\t\t\t\t.sort((a, b) => (a.order || 0) - (b.order || 0))\n\t\t},\n\n\t\tnodes() {\n\t\t\treturn this.selectedNodes\n\t\t\t\t.map(fileid => this.getNode(fileid))\n\t\t\t\t.filter(node => node)\n\t\t},\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Get a cached note from the store\n\t\t *\n\t\t * @param {number} fileId the file id to get\n\t\t * @return {Folder|File}\n\t\t */\n\t\tgetNode(fileId) {\n\t\t\treturn this.filesStore.getNode(fileId)\n\t\t},\n\n\t\tasync onActionClick(action) {\n\t\t\tconst displayName = action.displayName(this.nodes, this.currentView)\n\t\t\tconst selectionIds = this.selectedNodes\n\t\t\ttry {\n\t\t\t\tthis.loading = action.id\n\t\t\t\tconst results = await action.execBatch(this.nodes, this.currentView)\n\n\t\t\t\tif (results.some(result => result !== true)) {\n\t\t\t\t\t// Remove the failed ids from the selection\n\t\t\t\t\tconst failedIds = selectionIds\n\t\t\t\t\t\t.filter((fileid, index) => results[index] !== true)\n\t\t\t\t\tthis.selectionStore.set(failedIds)\n\n\t\t\t\t\tshowError(this.t('files', '\"{displayName}\" failed on some elements ', { displayName }))\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\t// Show success message and clear selection\n\t\t\t\tshowSuccess(this.t('files', '\"{displayName}\" batch action executed successfully', { displayName }))\n\t\t\t\tthis.selectionStore.reset()\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\tthis.loading = null\n\t\t\t}\n\t\t},\n\n\t\tt: translate,\n\t},\n})\n</script>\n\n<style scoped lang=\"scss\">\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</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../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/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=1dfa1154&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=1dfa1154&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=1dfa1154&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=1dfa1154&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 \"1dfa1154\",\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('th',{staticClass:\"files-list__column files-list__row-actions-batch\",attrs:{\"colspan\":\"2\"}},[_c('NcActions',{ref:\"actionsMenu\",attrs:{\"disabled\":!!_vm.loading,\"force-title\":true,\"inline\":3}},_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 }","<!--\n - @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\n -\n - @author Gary Kim <gary@garykim.dev>\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<NcButton :aria-label=\"sortAriaLabel(name)\"\n\t\t:class=\"{'files-list__column-sort-button--active': sortingMode === mode}\"\n\t\tclass=\"files-list__column-sort-button\"\n\t\ttype=\"tertiary\"\n\t\t@click.stop.prevent=\"toggleSortBy(mode)\">\n\t\t<!-- Sort icon before text as size is align right -->\n\t\t<MenuUp v-if=\"sortingMode !== mode || isAscSorting\" slot=\"icon\" />\n\t\t<MenuDown v-else slot=\"icon\" />\n\t\t{{ name }}\n\t</NcButton>\n</template>\n\n<script lang=\"ts\">\nimport { mapState } from 'pinia'\nimport { translate } from '@nextcloud/l10n'\nimport MenuDown from 'vue-material-design-icons/MenuDown.vue'\nimport MenuUp from 'vue-material-design-icons/MenuUp.vue'\nimport NcButton from '@nextcloud/vue/dist/Components/NcButton.js'\nimport Vue from 'vue'\n\nimport { useSortingStore } from '../store/sorting.ts'\n\nexport default Vue.extend({\n\tname: 'FilesListHeaderButton',\n\n\tcomponents: {\n\t\tMenuDown,\n\t\tMenuUp,\n\t\tNcButton,\n\t},\n\n\tinject: ['toggleSortBy'],\n\n\tprops: {\n\t\tname: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tmode: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tsetup() {\n\t\tconst sortingStore = useSortingStore()\n\t\treturn {\n\t\t\tsortingStore,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t...mapState(useSortingStore, ['filesSortingConfig']),\n\n\t\tcurrentView() {\n\t\t\treturn this.$navigation.active\n\t\t},\n\n\t\tsortingMode() {\n\t\t\treturn this.sortingStore.getSortingMode(this.currentView.id)\n\t\t\t\t|| this.currentView.defaultSortKey\n\t\t\t\t|| 'basename'\n\t\t},\n\t\tisAscSorting() {\n\t\t\treturn this.sortingStore.isAscSorting(this.currentView.id) === true\n\t\t},\n\t},\n\n\tmethods: {\n\t\tsortAriaLabel(column) {\n\t\t\tconst direction = this.isAscSorting\n\t\t\t\t? this.t('files', 'ascending')\n\t\t\t\t: this.t('files', 'descending')\n\t\t\treturn this.t('files', 'Sort list by {column} ({direction})', {\n\t\t\t\tcolumn,\n\t\t\t\tdirection,\n\t\t\t})\n\t\t},\n\n\t\tt: translate,\n\t},\n})\n</script>\n\n<style lang=\"scss\">\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</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../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/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=443029be&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=443029be&prod&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./FilesListHeaderButton.vue?vue&type=template&id=443029be&\"\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=443029be&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","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) 2019 Gary Kim <gary@garykim.dev>\n -\n - @author Gary Kim <gary@garykim.dev>\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<tr>\n\t\t<th class=\"files-list__column files-list__row-checkbox\">\n\t\t\t<NcCheckboxRadioSwitch v-bind=\"selectAllBind\" @update:checked=\"onToggleAll\" />\n\t\t</th>\n\n\t\t<!-- Actions multiple if some are selected -->\n\t\t<FilesListHeaderActions v-if=\"!isNoneSelected\"\n\t\t\t:current-view=\"currentView\"\n\t\t\t:selected-nodes=\"selectedNodes\" />\n\n\t\t<!-- Columns display -->\n\t\t<template v-else>\n\t\t\t<!-- Link to file -->\n\t\t\t<th class=\"files-list__column files-list__row-name files-list__column--sortable\"\n\t\t\t\t@click.stop.prevent=\"toggleSortBy('basename')\">\n\t\t\t\t<!-- Icon or preview -->\n\t\t\t\t<span class=\"files-list__row-icon\" />\n\n\t\t\t\t<!-- Name -->\n\t\t\t\t<FilesListHeaderButton :name=\"t('files', 'Name')\" mode=\"basename\" />\n\t\t\t</th>\n\n\t\t\t<!-- Actions -->\n\t\t\t<th class=\"files-list__row-actions\" />\n\n\t\t\t<!-- Size -->\n\t\t\t<th v-if=\"isSizeAvailable\"\n\t\t\t\t:class=\"{'files-list__column--sortable': isSizeAvailable}\"\n\t\t\t\tclass=\"files-list__column files-list__row-size\">\n\t\t\t\t<FilesListHeaderButton :name=\"t('files', 'Size')\" mode=\"size\" />\n\t\t\t</th>\n\n\t\t\t<!-- Custom views columns -->\n\t\t\t<th v-for=\"column in columns\"\n\t\t\t\t:key=\"column.id\"\n\t\t\t\t:class=\"classForColumn(column)\">\n\t\t\t\t<FilesListHeaderButton v-if=\"!!column.sort\" :name=\"column.title\" :mode=\"column.id\" />\n\t\t\t\t<span v-else>\n\t\t\t\t\t{{ column.title }}\n\t\t\t\t</span>\n\t\t\t</th>\n\t\t</template>\n\t</tr>\n</template>\n\n<script lang=\"ts\">\nimport { mapState } from 'pinia'\nimport { translate } from '@nextcloud/l10n'\nimport NcCheckboxRadioSwitch from '@nextcloud/vue/dist/Components/NcCheckboxRadioSwitch.js'\nimport Vue from 'vue'\n\nimport { useFilesStore } from '../store/files.ts'\nimport { useSelectionStore } from '../store/selection.ts'\nimport { useSortingStore } from '../store/sorting.ts'\nimport FilesListHeaderActions from './FilesListHeaderActions.vue'\nimport FilesListHeaderButton from './FilesListHeaderButton.vue'\nimport logger from '../logger.js'\n\nexport default Vue.extend({\n\tname: 'FilesListHeader',\n\n\tcomponents: {\n\t\tFilesListHeaderButton,\n\t\tNcCheckboxRadioSwitch,\n\t\tFilesListHeaderActions,\n\t},\n\n\tprovide() {\n\t\treturn {\n\t\t\ttoggleSortBy: this.toggleSortBy,\n\t\t}\n\t},\n\n\tprops: {\n\t\tisSizeAvailable: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tnodes: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tsetup() {\n\t\tconst filesStore = useFilesStore()\n\t\tconst selectionStore = useSelectionStore()\n\t\tconst sortingStore = useSortingStore()\n\t\treturn {\n\t\t\tfilesStore,\n\t\t\tselectionStore,\n\t\t\tsortingStore,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t...mapState(useSortingStore, ['filesSortingConfig']),\n\n\t\tcurrentView() {\n\t\t\treturn this.$navigation.active\n\t\t},\n\n\t\tcolumns() {\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\n\t\tselectAllBind() {\n\t\t\tconst label = this.isNoneSelected || this.isSomeSelected\n\t\t\t\t? this.t('files', 'Select all')\n\t\t\t\t: this.t('files', 'Unselect all')\n\t\t\treturn {\n\t\t\t\t'aria-label': label,\n\t\t\t\tchecked: this.isAllSelected,\n\t\t\t\tindeterminate: this.isSomeSelected,\n\t\t\t\ttitle: label,\n\t\t\t}\n\t\t},\n\n\t\tselectedNodes() {\n\t\t\treturn this.selectionStore.selected\n\t\t},\n\n\t\tisAllSelected() {\n\t\t\treturn this.selectedNodes.length === this.nodes.length\n\t\t},\n\n\t\tisNoneSelected() {\n\t\t\treturn this.selectedNodes.length === 0\n\t\t},\n\n\t\tisSomeSelected() {\n\t\t\treturn !this.isAllSelected && !this.isNoneSelected\n\t\t},\n\n\t\tsortingMode() {\n\t\t\treturn this.sortingStore.getSortingMode(this.currentView.id)\n\t\t\t\t|| this.currentView.defaultSortKey\n\t\t\t\t|| 'basename'\n\t\t},\n\t\tisAscSorting() {\n\t\t\treturn this.sortingStore.isAscSorting(this.currentView.id) === true\n\t\t},\n\t},\n\n\tmethods: {\n\t\tclassForColumn(column) {\n\t\t\treturn {\n\t\t\t\t'files-list__column': true,\n\t\t\t\t'files-list__column--sortable': !!column.sort,\n\t\t\t\t'files-list__row-column-custom': true,\n\t\t\t\t[`files-list__row-${this.currentView.id}-${column.id}`]: true,\n\t\t\t}\n\t\t},\n\n\t\tonToggleAll(selected) {\n\t\t\tif (selected) {\n\t\t\t\tconst selection = this.nodes.map(node => node.attributes.fileid.toString())\n\t\t\t\tlogger.debug('Added all nodes to selection', { selection })\n\t\t\t\tthis.selectionStore.set(selection)\n\t\t\t} else {\n\t\t\t\tlogger.debug('Cleared selection')\n\t\t\t\tthis.selectionStore.reset()\n\t\t\t}\n\t\t},\n\n\t\ttoggleSortBy(key) {\n\t\t\t// If we're already sorting by this key, flip the direction\n\t\t\tif (this.sortingMode === key) {\n\t\t\t\tthis.sortingStore.toggleSortingDirection(this.currentView.id)\n\t\t\t\treturn\n\t\t\t}\n\t\t\t// else sort ASC by this new key\n\t\t\tthis.sortingStore.setSortingBy(key, this.currentView.id)\n\t\t},\n\n\t\tt: translate,\n\t},\n})\n</script>\n\n<style scoped lang=\"scss\">\n@import '../mixins/fileslist-row.scss';\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</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../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/vue-loader/lib/index.js??vue-loader-options!./FilesListHeader.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!./FilesListHeader.vue?vue&type=style&index=0&id=7f9e4535&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=7f9e4535&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=7f9e4535&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=7f9e4535&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 \"7f9e4535\",\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('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 }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../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/vue-loader/lib/index.js??vue-loader-options!./FilesListVirtual.vue?vue&type=script&lang=ts&\"","<!--\n - @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\n -\n - @author Gary Kim <gary@garykim.dev>\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<RecycleScroller ref=\"recycleScroller\"\n\t\tclass=\"files-list\"\n\t\tkey-field=\"source\"\n\t\t:items=\"nodes\"\n\t\t:item-size=\"55\"\n\t\t:table-mode=\"true\"\n\t\titem-class=\"files-list__row\"\n\t\titem-tag=\"tr\"\n\t\tlist-class=\"files-list__body\"\n\t\tlist-tag=\"tbody\"\n\t\trole=\"table\">\n\t\t<template #default=\"{ item, active, index }\">\n\t\t\t<!-- File row -->\n\t\t\t<FileEntry :active=\"active\"\n\t\t\t\t:index=\"index\"\n\t\t\t\t:is-size-available=\"isSizeAvailable\"\n\t\t\t\t:source=\"item\" />\n\t\t</template>\n\n\t\t<template #before>\n\t\t\t<!-- Accessibility description -->\n\t\t\t<caption class=\"hidden-visually\">\n\t\t\t\t{{ currentView.caption || '' }}\n\t\t\t\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</caption>\n\n\t\t\t<!-- Thead-->\n\t\t\t<FilesListHeader :is-size-available=\"isSizeAvailable\" :nodes=\"nodes\" />\n\t\t</template>\n\n\t\t<template #after>\n\t\t\t<!-- Tfoot-->\n\t\t\t<FilesListFooter :is-size-available=\"isSizeAvailable\" :nodes=\"nodes\" :summary=\"summary\" />\n\t\t</template>\n\t</RecycleScroller>\n</template>\n\n<script lang=\"ts\">\nimport { RecycleScroller } from 'vue-virtual-scroller'\nimport { translate, translatePlural } from '@nextcloud/l10n'\nimport Vue from 'vue'\n\nimport FileEntry from './FileEntry.vue'\nimport FilesListFooter from './FilesListFooter.vue'\nimport FilesListHeader from './FilesListHeader.vue'\n\nexport default Vue.extend({\n\tname: 'FilesListVirtual',\n\n\tcomponents: {\n\t\tRecycleScroller,\n\t\tFileEntry,\n\t\tFilesListHeader,\n\t\tFilesListFooter,\n\t},\n\n\tprops: {\n\t\tcurrentView: {\n\t\t\ttype: Object,\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},\n\n\tdata() {\n\t\treturn {\n\t\t\tFileEntry,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tfiles() {\n\t\t\treturn this.nodes.filter(node => node.type === 'file')\n\t\t},\n\n\t\tsummaryFile() {\n\t\t\tconst count = this.files.length\n\t\t\treturn translatePlural('files', '{count} file', '{count} files', count, { count })\n\t\t},\n\t\tsummaryFolder() {\n\t\t\tconst count = this.nodes.length - this.files.length\n\t\t\treturn translatePlural('files', '{count} folder', '{count} folders', count, { count })\n\t\t},\n\t\tsummary() {\n\t\t\treturn translate('files', '{summaryFile} and {summaryFolder}', this)\n\t\t},\n\t\tisSizeAvailable() {\n\t\t\treturn this.nodes.some(node => node.attributes.size !== undefined)\n\t\t},\n\t},\n\n\tmounted() {\n\t\t// Make the root recycle scroller a table for proper semantics\n\t\tconst slots = this.$el.querySelectorAll('.vue-recycle-scroller__slot')\n\t\tslots[0].setAttribute('role', 'thead')\n\t\tslots[1].setAttribute('role', 'tfoot')\n\t},\n\n\tmethods: {\n\t\tgetFileId(node) {\n\t\t\treturn node.attributes.fileid\n\t\t},\n\n\t\tt: translate,\n\t},\n})\n</script>\n\n<style scoped lang=\"scss\">\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\t/**\n\t\t * Common row styling. tr are handled by\n\t\t * vue-virtual-scroller, so we need to\n\t\t * have those rules in here.\n\t\t */\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\t}\n}\n\n</style>\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!./FilesListVirtual.vue?vue&type=style&index=0&id=6f4155ff&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=6f4155ff&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=6f4155ff&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=6f4155ff&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 \"6f4155ff\",\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,\"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:{\"is-size-available\":_vm.isSizeAvailable,\"nodes\":_vm.nodes}})]},proxy:true},{key:\"after\",fn:function(){return [_c('FilesListFooter',{attrs:{\"is-size-available\":_vm.isSizeAvailable,\"nodes\":_vm.nodes,\"summary\":_vm.summary}})]},proxy:true}])})\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\n -\n - @author Gary Kim <gary@garykim.dev>\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<NcAppContent v-show=\"!currentView?.legacy\"\n\t\t:class=\"{'app-content--hidden': currentView?.legacy}\"\n\t\tdata-cy-files-content>\n\t\t<div class=\"files-list__header\">\n\t\t\t<!-- Current folder breadcrumbs -->\n\t\t\t<BreadCrumbs :path=\"dir\" @reload=\"fetchContent\" />\n\n\t\t\t<!-- Secondary loading indicator -->\n\t\t\t<NcLoadingIcon v-if=\"isRefreshing\" class=\"files-list__refresh-icon\" />\n\t\t</div>\n\n\t\t<!-- Initial loading -->\n\t\t<NcLoadingIcon v-if=\"loading && !isRefreshing\"\n\t\t\tclass=\"files-list__loading-icon\"\n\t\t\t:size=\"38\"\n\t\t\t:title=\"t('files', 'Loading current folder')\" />\n\n\t\t<!-- Empty content placeholder -->\n\t\t<NcEmptyContent v-else-if=\"!loading && isEmptyDir\"\n\t\t\t:title=\"t('files', 'No files in here')\"\n\t\t\t:description=\"t('files', 'No files or folders have been deleted yet')\"\n\t\t\tdata-cy-files-content-empty>\n\t\t\t<template #action>\n\t\t\t\t<NcButton v-if=\"dir !== '/'\"\n\t\t\t\t\taria-label=\"t('files', 'Go to the previous folder')\"\n\t\t\t\t\ttype=\"primary\"\n\t\t\t\t\t:to=\"toPreviousDir\">\n\t\t\t\t\t{{ t('files', 'Go back') }}\n\t\t\t\t</NcButton>\n\t\t\t</template>\n\t\t\t<template #icon>\n\t\t\t\t<TrashCan />\n\t\t\t</template>\n\t\t</NcEmptyContent>\n\n\t\t<!-- File list -->\n\t\t<FilesListVirtual v-else\n\t\t\tref=\"filesListVirtual\"\n\t\t\t:current-view=\"currentView\"\n\t\t\t:nodes=\"dirContents\" />\n\t</NcAppContent>\n</template>\n\n<script lang=\"ts\">\nimport { Folder, File, Node } from '@nextcloud/files'\nimport { join } from 'path'\nimport { orderBy } from 'natural-orderby'\nimport { translate } from '@nextcloud/l10n'\nimport NcAppContent from '@nextcloud/vue/dist/Components/NcAppContent.js'\nimport NcButton from '@nextcloud/vue/dist/Components/NcButton.js'\nimport NcEmptyContent from '@nextcloud/vue/dist/Components/NcEmptyContent.js'\nimport NcLoadingIcon from '@nextcloud/vue/dist/Components/NcLoadingIcon.js'\nimport TrashCan from 'vue-material-design-icons/TrashCan.vue'\nimport Vue from 'vue'\n\nimport Navigation, { ContentsWithRoot } from '../services/Navigation.ts'\nimport { useFilesStore } from '../store/files.ts'\nimport { usePathsStore } from '../store/paths.ts'\nimport { useSelectionStore } from '../store/selection.ts'\nimport { useSortingStore } from '../store/sorting.ts'\nimport BreadCrumbs from '../components/BreadCrumbs.vue'\nimport FilesListVirtual from '../components/FilesListVirtual.vue'\nimport logger from '../logger.js'\n\nexport default Vue.extend({\n\tname: 'FilesList',\n\n\tcomponents: {\n\t\tBreadCrumbs,\n\t\tFilesListVirtual,\n\t\tNcAppContent,\n\t\tNcButton,\n\t\tNcEmptyContent,\n\t\tNcLoadingIcon,\n\t\tTrashCan,\n\t},\n\n\tsetup() {\n\t\tconst pathsStore = usePathsStore()\n\t\tconst filesStore = useFilesStore()\n\t\tconst selectionStore = useSelectionStore()\n\t\tconst sortingStore = useSortingStore()\n\t\treturn {\n\t\t\tfilesStore,\n\t\t\tpathsStore,\n\t\t\tselectionStore,\n\t\t\tsortingStore,\n\t\t}\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tloading: true,\n\t\t\tpromise: null,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/** @return {Navigation} */\n\t\tcurrentView() {\n\t\t\treturn this.$navigation.active\n\t\t\t\t|| this.$navigation.views.find(view => view.id === 'files')\n\t\t},\n\n\t\t/**\n\t\t * The current directory query.\n\t\t *\n\t\t * @return {string}\n\t\t */\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\n\t\t/**\n\t\t * The current folder.\n\t\t *\n\t\t * @return {Folder|undefined}\n\t\t */\n\t\tcurrentFolder() {\n\t\t\tif (!this.currentView?.id) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tif (this.dir === '/') {\n\t\t\t\treturn this.filesStore.getRoot(this.currentView.id)\n\t\t\t}\n\t\t\tconst fileId = this.pathsStore.getPath(this.currentView.id, this.dir)\n\t\t\treturn this.filesStore.getNode(fileId)\n\t\t},\n\n\t\tsortingMode() {\n\t\t\treturn this.sortingStore.getSortingMode(this.currentView.id)\n\t\t\t\t|| this.currentView.defaultSortKey\n\t\t\t\t|| 'basename'\n\t\t},\n\t\tisAscSorting() {\n\t\t\treturn this.sortingStore.isAscSorting(this.currentView.id) === true\n\t\t},\n\n\t\t/**\n\t\t * The current directory contents.\n\t\t *\n\t\t * @return {Node[]}\n\t\t */\n\t\tdirContents() {\n\t\t\tif (!this.currentView) {\n\t\t\t\treturn []\n\t\t\t}\n\n\t\t\tconst customColumn = this.currentView.columns\n\t\t\t\t.find(column => column.id === this.sortingMode)\n\n\t\t\t// Custom column must provide their own sorting methods\n\t\t\tif (customColumn?.sort && typeof customColumn.sort === 'function') {\n\t\t\t\tconst results = [...(this.currentFolder?.children || []).map(this.getNode).filter(file => file)]\n\t\t\t\t\t.sort(customColumn.sort)\n\t\t\t\treturn this.isAscSorting ? results : results.reverse()\n\t\t\t}\n\n\t\t\treturn orderBy(\n\t\t\t\t[...(this.currentFolder?.children || []).map(this.getNode).filter(file => file)],\n\t\t\t\t[\n\t\t\t\t\t// Sort folders first if sorting by name\n\t\t\t\t\t...this.sortingMode === 'basename' ? [v => v.type !== 'folder'] : [],\n\t\t\t\t\t// Use sorting mode\n\t\t\t\t\tv => v[this.sortingMode],\n\t\t\t\t\t// Fallback to name\n\t\t\t\t\tv => v.basename,\n\t\t\t\t],\n\t\t\t\tthis.isAscSorting ? ['asc', 'asc', 'asc'] : ['desc', 'desc', 'desc'],\n\t\t\t)\n\t\t},\n\n\t\t/**\n\t\t * The current directory is empty.\n\t\t */\n\t\tisEmptyDir() {\n\t\t\treturn this.dirContents.length === 0\n\t\t},\n\n\t\t/**\n\t\t * We are refreshing the current directory.\n\t\t * But we already have a cached version of it\n\t\t * that is not empty.\n\t\t */\n\t\tisRefreshing() {\n\t\t\treturn this.currentFolder !== undefined\n\t\t\t\t&& !this.isEmptyDir\n\t\t\t\t&& this.loading\n\t\t},\n\n\t\t/**\n\t\t * Route to the previous directory.\n\t\t */\n\t\ttoPreviousDir() {\n\t\t\tconst dir = this.dir.split('/').slice(0, -1).join('/') || '/'\n\t\t\treturn { ...this.$route, query: { dir } }\n\t\t},\n\t},\n\n\twatch: {\n\t\tcurrentView(newView, oldView) {\n\t\t\tif (newView?.id === oldView?.id) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tlogger.debug('View changed', { newView, oldView })\n\t\t\tthis.selectionStore.reset()\n\t\t\tthis.fetchContent()\n\t\t},\n\n\t\tdir(newDir, oldDir) {\n\t\t\tlogger.debug('Directory changed', { newDir, oldDir })\n\t\t\t// TODO: preserve selection on browsing?\n\t\t\tthis.selectionStore.reset()\n\t\t\tthis.fetchContent()\n\n\t\t\t// Scroll to top, force virtual scroller to re-render\n\t\t\tif (this.$refs?.filesListVirtual?.$el) {\n\t\t\t\tthis.$refs.filesListVirtual.$el.scrollTop = 0\n\t\t\t}\n\t\t},\n\t},\n\n\tmethods: {\n\t\tasync fetchContent() {\n\t\t\tif (this.currentView?.legacy) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tthis.loading = true\n\t\t\tconst dir = this.dir\n\t\t\tconst currentView = this.currentView\n\n\t\t\t// If we have a cancellable promise ongoing, cancel it\n\t\t\tif (typeof this.promise?.cancel === 'function') {\n\t\t\t\tthis.promise.cancel()\n\t\t\t\tlogger.debug('Cancelled previous ongoing fetch')\n\t\t\t}\n\n\t\t\t// Fetch the current dir contents\n\t\t\t/** @type {Promise<ContentsWithRoot>} */\n\t\t\tthis.promise = currentView.getContents(dir)\n\t\t\ttry {\n\t\t\t\tconst { folder, contents } = await this.promise\n\t\t\t\tlogger.debug('Fetched contents', { dir, folder, contents })\n\n\t\t\t\t// Update store\n\t\t\t\tthis.filesStore.updateNodes(contents)\n\n\t\t\t\t// Define current directory children\n\t\t\t\tfolder.children = contents.map(node => node.attributes.fileid)\n\n\t\t\t\t// If we're in the root dir, define the root\n\t\t\t\tif (dir === '/') {\n\t\t\t\t\tthis.filesStore.setRoot({ service: currentView.id, root: folder })\n\t\t\t\t} else\n\t\t\t\t// Otherwise, add the folder to the store\n\t\t\t\tif (folder.attributes.fileid) {\n\t\t\t\t\tthis.filesStore.updateNodes([folder])\n\t\t\t\t\tthis.pathsStore.addPath({ service: currentView.id, fileid: folder.attributes.fileid, path: dir })\n\t\t\t\t} else {\n\t\t\t\t\t// If we're here, the view API messed up\n\t\t\t\t\tlogger.error('Invalid root folder returned', { dir, folder, currentView })\n\t\t\t\t}\n\n\t\t\t\t// Update paths store\n\t\t\t\tconst folders = contents.filter(node => node.type === 'folder')\n\t\t\t\tfolders.forEach(node => {\n\t\t\t\t\tthis.pathsStore.addPath({ service: currentView.id, fileid: node.attributes.fileid, path: join(dir, node.basename) })\n\t\t\t\t})\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error('Error while fetching content', { error })\n\t\t\t} finally {\n\t\t\t\tthis.loading = false\n\t\t\t}\n\n\t\t},\n\n\t\t/**\n\t\t * Get a cached note from the store\n\t\t *\n\t\t * @param {number} fileId the file id to get\n\t\t * @return {Folder|File}\n\t\t */\n\t\t getNode(fileId) {\n\t\t\treturn this.filesStore.getNode(fileId)\n\t\t},\n\n\t\tt: translate,\n\t},\n})\n</script>\n\n<style scoped lang=\"scss\">\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</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../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/vue-loader/lib/index.js??vue-loader-options!./FilesList.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!./FilesList.vue?vue&type=style&index=0&id=42495694&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=42495694&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=42495694&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=42495694&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 \"42495694\",\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('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 * @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\n *\n * @author Gary Kim <gary@garykim.dev>\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 Gary Kim <gary@garykim.dev>\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) 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 { stringify } 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 = 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.ts'\n\nimport processLegacyFilesViews from './legacy/navigationMapper.js'\n\nimport Vue from 'vue'\nimport { createPinia, PiniaVuePlugin } from 'pinia'\n\nimport NavigationService from './services/Navigation.ts'\nimport registerPreviewServiceWorker from './services/ServiceWorker.js'\n\nimport NavigationView from './views/Navigation.vue'\nimport FilesListView from './views/FilesList.vue'\n\nimport SettingsService from './services/Settings.js'\nimport SettingsModel from './models/Setting.js'\n\nimport router from './router/router.js'\n\n// Init private and public Files namespace\nwindow.OCA.Files = window.OCA.Files ?? {}\nwindow.OCP.Files = window.OCP.Files ?? {}\n\n// Init Pinia store\nVue.use(PiniaVuePlugin)\nconst pinia = createPinia()\n\n// Init Navigation Service\nconst Navigation = new NavigationService()\nObject.assign(window.OCP.Files, { Navigation })\nVue.prototype.$navigation = Navigation\n\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\n// Init Navigation View\nconst View = Vue.extend(NavigationView)\nconst FilesNavigationRoot = new View({\n\tname: 'FilesNavigationRoot',\n\tpropsData: {\n\t\tNavigation,\n\t},\n\trouter,\n\tpinia,\n})\nFilesNavigationRoot.$mount('#app-navigation-files')\n\n// Init content list view\nconst ListView = Vue.extend(FilesListView)\nconst FilesList = new ListView({\n\tname: 'FilesListRoot',\n\trouter,\n\tpinia,\n})\nFilesList.$mount('#app-content-vue')\n\n// Init legacy files views\nprocessLegacyFilesViews()\n\n// Register preview service worker\nregisterPreviewServiceWorker()\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-260f47ba]{flex:1 1 100% !important;width:100%}.breadcrumb[data-v-260f47ba] 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-6646d6a5]{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-6646d6a5] 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, \"td[data-v-50e87a0e],th[data-v-50e87a0e]{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}td span[data-v-50e87a0e],th span[data-v-50e87a0e]{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.files-list__row-checkbox[data-v-50e87a0e]{justify-content:center}.files-list__row-checkbox[data-v-50e87a0e] .checkbox-radio-switch{display:flex;justify-content:center;--icon-size: var(--checkbox-size)}.files-list__row-checkbox[data-v-50e87a0e] .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__row-checkbox[data-v-50e87a0e] .checkbox-radio-switch .checkbox-radio-switch__icon{margin:0 !important}.files-list__row-icon[data-v-50e87a0e]{display:flex;align-items:center;justify-content:center;width:var(--icon-preview-size);height:100%;margin-right:var(--checkbox-padding);color:var(--color-primary-element)}.files-list__row-icon>span[data-v-50e87a0e]{justify-content:flex-start}.files-list__row-icon[data-v-50e87a0e] svg{width:var(--icon-preview-size);height:var(--icon-preview-size)}.files-list__row-icon-preview[data-v-50e87a0e]{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__row-name[data-v-50e87a0e]{overflow:hidden;flex:1 1 auto}.files-list__row-name a[data-v-50e87a0e]{display:flex;align-items:center;width:100%;height:100%}.files-list__row-name a:focus .files-list__row-name-text[data-v-50e87a0e],.files-list__row-name a:focus-visible .files-list__row-name-text[data-v-50e87a0e]{outline:2px solid var(--color-main-text) !important;border-radius:20px}.files-list__row-name .files-list__row-name-text[data-v-50e87a0e]{padding:5px 10px;margin-left:-10px}.files-list__row-actions[data-v-50e87a0e]{width:auto}.files-list__row-actions~td[data-v-50e87a0e],.files-list__row-actions~th[data-v-50e87a0e]{margin:0 var(--cell-margin)}.files-list__row-actions[data-v-50e87a0e]>button .button-vue__text{font-weight:normal}.files-list__row-actions[data-v-50e87a0e]>button:not(:hover,:focus,:active) .button-vue__wrapper{color:var(--color-text-maxcontrast)}.files-list__row-size[data-v-50e87a0e]{justify-content:flex-end;width:calc(var(--row-height)*1.5);color:var(--color-main-text)}.files-list__row-size[data-v-50e87a0e] .files-list__column-sort-button{padding:0 16px 0 4px !important}.files-list__row-size[data-v-50e87a0e] .files-list__column-sort-button .button-vue__wrapper{flex-direction:row}.files-list__row-column-custom[data-v-50e87a0e]{width:calc(var(--row-height)*2)}tr[data-v-50e87a0e]:hover,tr[data-v-50e87a0e]:focus,tr[data-v-50e87a0e]:active{background-color:var(--color-background-dark)}.files-list__row-icon-preview[data-v-50e87a0e]:not([style*=background]){background:var(--color-loading-dark)}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/mixins/fileslist-row.scss\",\"webpack://./apps/files/src/components/FileEntry.vue\"],\"names\":[],\"mappings\":\"AA4BA,wCACC,YAAA,CACA,kBAAA,CACA,aAAA,CACA,oBAAA,CACA,uBAAA,CACA,wBAAA,CACA,QAAA,CACA,SAAA,CACA,mCAAA,CACA,WAAA,CAKA,kDACC,eAAA,CACA,kBAAA,CACA,sBAAA,CAIF,2CACC,sBAAA,CACA,kEACC,YAAA,CACA,sBAAA,CAEA,iCAAA,CAEA,qGACC,2BAAA,CACA,4BAAA,CACA,QAAA,CACA,8DAAA,CAGD,+FACC,mBAAA,CAKH,uCACC,YAAA,CACA,kBAAA,CACA,sBAAA,CACA,8BAAA,CACA,WAAA,CAEA,oCAAA,CACA,kCAAA,CAEA,4CACC,0BAAA,CAGD,2CACC,8BAAA,CACA,+BAAA,CAGD,+CACC,eAAA,CACA,8BAAA,CACA,+BAAA,CACA,kCAAA,CACA,2BAAA,CAEA,0BAAA,CACA,uBAAA,CAIF,uCAEC,eAAA,CAEA,aAAA,CAEA,yCACC,YAAA,CACA,kBAAA,CAEA,UAAA,CACA,WAAA,CAGA,4JAEC,mDAAA,CACA,kBAAA,CAIF,kEAEC,gBAAA,CACA,iBAAA,CAIF,0CACC,UAAA,CAGA,0FAEC,2BAAA,CAIA,mEAEC,kBAAA,CAED,iGAEC,mCAAA,CAKH,uCAEC,wBAAA,CACA,iCAAA,CAEA,4BAAA,CAGA,uEACC,+BAAA,CACA,4FACC,kBAAA,CAKH,gDACC,+BAAA,CCnKA,+EAGC,6CAAA,CAKF,wEACI,oCAAA\",\"sourcesContent\":[\"/**\\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\\n/**\\n * ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠\\n * This file is for every column styling that must be\\n * shared between BOTH the files list AND the list header.\\n * ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠\\n */\\ntd, th {\\n\\tdisplay: flex;\\n\\talign-items: center;\\n\\tflex: 0 0 auto;\\n\\tjustify-content: left;\\n\\twidth: var(--row-height);\\n\\theight: var(--row-height);\\n\\tmargin: 0;\\n\\tpadding: 0;\\n\\tcolor: var(--color-text-maxcontrast);\\n\\tborder: none;\\n\\n\\t// Columns should try to add any text\\n\\t// node wrapped in a span. That should help\\n\\t// with the ellipsis on overflow.\\n\\tspan {\\n\\t\\toverflow: hidden;\\n\\t\\twhite-space: nowrap;\\n\\t\\ttext-overflow: ellipsis;\\n\\t}\\n}\\n\\n.files-list__row-checkbox {\\n\\tjustify-content: center;\\n\\t&::v-deep .checkbox-radio-switch {\\n\\t\\tdisplay: flex;\\n\\t\\tjustify-content: center;\\n\\n\\t\\t--icon-size: var(--checkbox-size);\\n\\n\\t\\tlabel.checkbox-radio-switch__label {\\n\\t\\t\\twidth: var(--clickable-area);\\n\\t\\t\\theight: var(--clickable-area);\\n\\t\\t\\tmargin: 0;\\n\\t\\t\\tpadding: calc((var(--clickable-area) - var(--checkbox-size)) / 2);\\n\\t\\t}\\n\\n\\t\\t.checkbox-radio-switch__icon {\\n\\t\\t\\tmargin: 0 !important;\\n\\t\\t}\\n\\t}\\n}\\n\\n.files-list__row-icon {\\n\\tdisplay: flex;\\n\\talign-items: center;\\n\\tjustify-content: center;\\n\\twidth: var(--icon-preview-size);\\n\\theight: 100%;\\n\\t// Show same padding as the checkbox right padding for visual balance\\n\\tmargin-right: var(--checkbox-padding);\\n\\tcolor: var(--color-primary-element);\\n\\n\\t& > span {\\n\\t\\tjustify-content: flex-start;\\n\\t}\\n\\n\\t&::v-deep svg {\\n\\t\\twidth: var(--icon-preview-size);\\n\\t\\theight: var(--icon-preview-size);\\n\\t}\\n\\n\\t&-preview {\\n\\t\\toverflow: hidden;\\n\\t\\twidth: var(--icon-preview-size);\\n\\t\\theight: var(--icon-preview-size);\\n\\t\\tborder-radius: var(--border-radius);\\n\\t\\tbackground-repeat: no-repeat;\\n\\t\\t// Center and contain the preview\\n\\t\\tbackground-position: center;\\n\\t\\tbackground-size: contain;\\n\\t}\\n}\\n\\n.files-list__row-name {\\n\\t// Prevent link from overflowing\\n\\toverflow: hidden;\\n\\t// Take as much space as possible\\n\\tflex: 1 1 auto;\\n\\n\\ta {\\n\\t\\tdisplay: flex;\\n\\t\\talign-items: center;\\n\\t\\t// Fill cell height and width\\n\\t\\twidth: 100%;\\n\\t\\theight: 100%;\\n\\n\\t\\t// Keyboard indicator a11y\\n\\t\\t&:focus .files-list__row-name-text,\\n\\t\\t&:focus-visible .files-list__row-name-text {\\n\\t\\t\\toutline: 2px solid var(--color-main-text) !important;\\n\\t\\t\\tborder-radius: 20px;\\n\\t\\t}\\n\\t}\\n\\n\\t.files-list__row-name-text {\\n\\t\\t// Make some space for the outline\\n\\t\\tpadding: 5px 10px;\\n\\t\\tmargin-left: -10px;\\n\\t}\\n}\\n\\n.files-list__row-actions {\\n\\twidth: auto;\\n\\n\\t// Add margin to all cells after the actions\\n\\t& ~ td,\\n\\t& ~ th {\\n\\t\\tmargin: 0 var(--cell-margin);\\n\\t}\\n\\n\\t&::v-deep > button {\\n\\t\\t.button-vue__text {\\n\\t\\t\\t// Remove bold from default button styling\\n\\t\\t\\tfont-weight: normal;\\n\\t\\t}\\n\\t\\t&:not(:hover, :focus, :active) .button-vue__wrapper {\\n\\t\\t\\t// Also apply color-text-maxcontrast to non-active button\\n\\t\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t\\t}\\n\\t}\\n}\\n\\n.files-list__row-size {\\n\\t// Right align text\\n\\tjustify-content: flex-end;\\n\\twidth: calc(var(--row-height) * 1.5);\\n\\t// opacity varies with the size\\n\\tcolor: var(--color-main-text);\\n\\n\\t// Icon is before text since size is right aligned\\n\\t::v-deep .files-list__column-sort-button {\\n\\t\\tpadding: 0 16px 0 4px !important;\\n\\t\\t.button-vue__wrapper {\\n\\t\\t\\tflex-direction: row;\\n\\t\\t}\\n\\t}\\n}\\n\\n.files-list__row-column-custom {\\n\\twidth: calc(var(--row-height) * 2);\\n}\\n\",\"\\n@import '../mixins/fileslist-row.scss';\\n\\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, \"td[data-v-3a8b911c],th[data-v-3a8b911c]{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}td span[data-v-3a8b911c],th span[data-v-3a8b911c]{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.files-list__row-checkbox[data-v-3a8b911c]{justify-content:center}.files-list__row-checkbox[data-v-3a8b911c] .checkbox-radio-switch{display:flex;justify-content:center;--icon-size: var(--checkbox-size)}.files-list__row-checkbox[data-v-3a8b911c] .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__row-checkbox[data-v-3a8b911c] .checkbox-radio-switch .checkbox-radio-switch__icon{margin:0 !important}.files-list__row-icon[data-v-3a8b911c]{display:flex;align-items:center;justify-content:center;width:var(--icon-preview-size);height:100%;margin-right:var(--checkbox-padding);color:var(--color-primary-element)}.files-list__row-icon>span[data-v-3a8b911c]{justify-content:flex-start}.files-list__row-icon[data-v-3a8b911c] svg{width:var(--icon-preview-size);height:var(--icon-preview-size)}.files-list__row-icon-preview[data-v-3a8b911c]{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__row-name[data-v-3a8b911c]{overflow:hidden;flex:1 1 auto}.files-list__row-name a[data-v-3a8b911c]{display:flex;align-items:center;width:100%;height:100%}.files-list__row-name a:focus .files-list__row-name-text[data-v-3a8b911c],.files-list__row-name a:focus-visible .files-list__row-name-text[data-v-3a8b911c]{outline:2px solid var(--color-main-text) !important;border-radius:20px}.files-list__row-name .files-list__row-name-text[data-v-3a8b911c]{padding:5px 10px;margin-left:-10px}.files-list__row-actions[data-v-3a8b911c]{width:auto}.files-list__row-actions~td[data-v-3a8b911c],.files-list__row-actions~th[data-v-3a8b911c]{margin:0 var(--cell-margin)}.files-list__row-actions[data-v-3a8b911c]>button .button-vue__text{font-weight:normal}.files-list__row-actions[data-v-3a8b911c]>button:not(:hover,:focus,:active) .button-vue__wrapper{color:var(--color-text-maxcontrast)}.files-list__row-size[data-v-3a8b911c]{justify-content:flex-end;width:calc(var(--row-height)*1.5);color:var(--color-main-text)}.files-list__row-size[data-v-3a8b911c] .files-list__column-sort-button{padding:0 16px 0 4px !important}.files-list__row-size[data-v-3a8b911c] .files-list__column-sort-button .button-vue__wrapper{flex-direction:row}.files-list__row-column-custom[data-v-3a8b911c]{width:calc(var(--row-height)*2)}tr[data-v-3a8b911c]{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-3a8b911c]{user-select:none;color:var(--color-text-maxcontrast) !important}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/mixins/fileslist-row.scss\",\"webpack://./apps/files/src/components/FilesListFooter.vue\"],\"names\":[],\"mappings\":\"AA4BA,wCACC,YAAA,CACA,kBAAA,CACA,aAAA,CACA,oBAAA,CACA,uBAAA,CACA,wBAAA,CACA,QAAA,CACA,SAAA,CACA,mCAAA,CACA,WAAA,CAKA,kDACC,eAAA,CACA,kBAAA,CACA,sBAAA,CAIF,2CACC,sBAAA,CACA,kEACC,YAAA,CACA,sBAAA,CAEA,iCAAA,CAEA,qGACC,2BAAA,CACA,4BAAA,CACA,QAAA,CACA,8DAAA,CAGD,+FACC,mBAAA,CAKH,uCACC,YAAA,CACA,kBAAA,CACA,sBAAA,CACA,8BAAA,CACA,WAAA,CAEA,oCAAA,CACA,kCAAA,CAEA,4CACC,0BAAA,CAGD,2CACC,8BAAA,CACA,+BAAA,CAGD,+CACC,eAAA,CACA,8BAAA,CACA,+BAAA,CACA,kCAAA,CACA,2BAAA,CAEA,0BAAA,CACA,uBAAA,CAIF,uCAEC,eAAA,CAEA,aAAA,CAEA,yCACC,YAAA,CACA,kBAAA,CAEA,UAAA,CACA,WAAA,CAGA,4JAEC,mDAAA,CACA,kBAAA,CAIF,kEAEC,gBAAA,CACA,iBAAA,CAIF,0CACC,UAAA,CAGA,0FAEC,2BAAA,CAIA,mEAEC,kBAAA,CAED,iGAEC,mCAAA,CAKH,uCAEC,wBAAA,CACA,iCAAA,CAEA,4BAAA,CAGA,uEACC,+BAAA,CACA,4FACC,kBAAA,CAKH,gDACC,+BAAA,CCpKD,oBACC,oBAAA,CACA,wCAAA,CAEA,yCAAA,CACA,6BAAA,CAGD,oBACC,gBAAA,CAEA,8CAAA\",\"sourcesContent\":[\"/**\\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\\n/**\\n * ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠\\n * This file is for every column styling that must be\\n * shared between BOTH the files list AND the list header.\\n * ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠\\n */\\ntd, th {\\n\\tdisplay: flex;\\n\\talign-items: center;\\n\\tflex: 0 0 auto;\\n\\tjustify-content: left;\\n\\twidth: var(--row-height);\\n\\theight: var(--row-height);\\n\\tmargin: 0;\\n\\tpadding: 0;\\n\\tcolor: var(--color-text-maxcontrast);\\n\\tborder: none;\\n\\n\\t// Columns should try to add any text\\n\\t// node wrapped in a span. That should help\\n\\t// with the ellipsis on overflow.\\n\\tspan {\\n\\t\\toverflow: hidden;\\n\\t\\twhite-space: nowrap;\\n\\t\\ttext-overflow: ellipsis;\\n\\t}\\n}\\n\\n.files-list__row-checkbox {\\n\\tjustify-content: center;\\n\\t&::v-deep .checkbox-radio-switch {\\n\\t\\tdisplay: flex;\\n\\t\\tjustify-content: center;\\n\\n\\t\\t--icon-size: var(--checkbox-size);\\n\\n\\t\\tlabel.checkbox-radio-switch__label {\\n\\t\\t\\twidth: var(--clickable-area);\\n\\t\\t\\theight: var(--clickable-area);\\n\\t\\t\\tmargin: 0;\\n\\t\\t\\tpadding: calc((var(--clickable-area) - var(--checkbox-size)) / 2);\\n\\t\\t}\\n\\n\\t\\t.checkbox-radio-switch__icon {\\n\\t\\t\\tmargin: 0 !important;\\n\\t\\t}\\n\\t}\\n}\\n\\n.files-list__row-icon {\\n\\tdisplay: flex;\\n\\talign-items: center;\\n\\tjustify-content: center;\\n\\twidth: var(--icon-preview-size);\\n\\theight: 100%;\\n\\t// Show same padding as the checkbox right padding for visual balance\\n\\tmargin-right: var(--checkbox-padding);\\n\\tcolor: var(--color-primary-element);\\n\\n\\t& > span {\\n\\t\\tjustify-content: flex-start;\\n\\t}\\n\\n\\t&::v-deep svg {\\n\\t\\twidth: var(--icon-preview-size);\\n\\t\\theight: var(--icon-preview-size);\\n\\t}\\n\\n\\t&-preview {\\n\\t\\toverflow: hidden;\\n\\t\\twidth: var(--icon-preview-size);\\n\\t\\theight: var(--icon-preview-size);\\n\\t\\tborder-radius: var(--border-radius);\\n\\t\\tbackground-repeat: no-repeat;\\n\\t\\t// Center and contain the preview\\n\\t\\tbackground-position: center;\\n\\t\\tbackground-size: contain;\\n\\t}\\n}\\n\\n.files-list__row-name {\\n\\t// Prevent link from overflowing\\n\\toverflow: hidden;\\n\\t// Take as much space as possible\\n\\tflex: 1 1 auto;\\n\\n\\ta {\\n\\t\\tdisplay: flex;\\n\\t\\talign-items: center;\\n\\t\\t// Fill cell height and width\\n\\t\\twidth: 100%;\\n\\t\\theight: 100%;\\n\\n\\t\\t// Keyboard indicator a11y\\n\\t\\t&:focus .files-list__row-name-text,\\n\\t\\t&:focus-visible .files-list__row-name-text {\\n\\t\\t\\toutline: 2px solid var(--color-main-text) !important;\\n\\t\\t\\tborder-radius: 20px;\\n\\t\\t}\\n\\t}\\n\\n\\t.files-list__row-name-text {\\n\\t\\t// Make some space for the outline\\n\\t\\tpadding: 5px 10px;\\n\\t\\tmargin-left: -10px;\\n\\t}\\n}\\n\\n.files-list__row-actions {\\n\\twidth: auto;\\n\\n\\t// Add margin to all cells after the actions\\n\\t& ~ td,\\n\\t& ~ th {\\n\\t\\tmargin: 0 var(--cell-margin);\\n\\t}\\n\\n\\t&::v-deep > button {\\n\\t\\t.button-vue__text {\\n\\t\\t\\t// Remove bold from default button styling\\n\\t\\t\\tfont-weight: normal;\\n\\t\\t}\\n\\t\\t&:not(:hover, :focus, :active) .button-vue__wrapper {\\n\\t\\t\\t// Also apply color-text-maxcontrast to non-active button\\n\\t\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t\\t}\\n\\t}\\n}\\n\\n.files-list__row-size {\\n\\t// Right align text\\n\\tjustify-content: flex-end;\\n\\twidth: calc(var(--row-height) * 1.5);\\n\\t// opacity varies with the size\\n\\tcolor: var(--color-main-text);\\n\\n\\t// Icon is before text since size is right aligned\\n\\t::v-deep .files-list__column-sort-button {\\n\\t\\tpadding: 0 16px 0 4px !important;\\n\\t\\t.button-vue__wrapper {\\n\\t\\t\\tflex-direction: row;\\n\\t\\t}\\n\\t}\\n}\\n\\n.files-list__row-column-custom {\\n\\twidth: calc(var(--row-height) * 2);\\n}\\n\",\"\\n@import '../mixins/fileslist-row.scss';\\n\\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, \"td[data-v-7f9e4535],th[data-v-7f9e4535]{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}td span[data-v-7f9e4535],th span[data-v-7f9e4535]{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.files-list__row-checkbox[data-v-7f9e4535]{justify-content:center}.files-list__row-checkbox[data-v-7f9e4535] .checkbox-radio-switch{display:flex;justify-content:center;--icon-size: var(--checkbox-size)}.files-list__row-checkbox[data-v-7f9e4535] .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__row-checkbox[data-v-7f9e4535] .checkbox-radio-switch .checkbox-radio-switch__icon{margin:0 !important}.files-list__row-icon[data-v-7f9e4535]{display:flex;align-items:center;justify-content:center;width:var(--icon-preview-size);height:100%;margin-right:var(--checkbox-padding);color:var(--color-primary-element)}.files-list__row-icon>span[data-v-7f9e4535]{justify-content:flex-start}.files-list__row-icon[data-v-7f9e4535] svg{width:var(--icon-preview-size);height:var(--icon-preview-size)}.files-list__row-icon-preview[data-v-7f9e4535]{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__row-name[data-v-7f9e4535]{overflow:hidden;flex:1 1 auto}.files-list__row-name a[data-v-7f9e4535]{display:flex;align-items:center;width:100%;height:100%}.files-list__row-name a:focus .files-list__row-name-text[data-v-7f9e4535],.files-list__row-name a:focus-visible .files-list__row-name-text[data-v-7f9e4535]{outline:2px solid var(--color-main-text) !important;border-radius:20px}.files-list__row-name .files-list__row-name-text[data-v-7f9e4535]{padding:5px 10px;margin-left:-10px}.files-list__row-actions[data-v-7f9e4535]{width:auto}.files-list__row-actions~td[data-v-7f9e4535],.files-list__row-actions~th[data-v-7f9e4535]{margin:0 var(--cell-margin)}.files-list__row-actions[data-v-7f9e4535]>button .button-vue__text{font-weight:normal}.files-list__row-actions[data-v-7f9e4535]>button:not(:hover,:focus,:active) .button-vue__wrapper{color:var(--color-text-maxcontrast)}.files-list__row-size[data-v-7f9e4535]{justify-content:flex-end;width:calc(var(--row-height)*1.5);color:var(--color-main-text)}.files-list__row-size[data-v-7f9e4535] .files-list__column-sort-button{padding:0 16px 0 4px !important}.files-list__row-size[data-v-7f9e4535] .files-list__column-sort-button .button-vue__wrapper{flex-direction:row}.files-list__row-column-custom[data-v-7f9e4535]{width:calc(var(--row-height)*2)}.files-list__column[data-v-7f9e4535]{user-select:none;color:var(--color-text-maxcontrast) !important}.files-list__column--sortable[data-v-7f9e4535]{cursor:pointer}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/mixins/fileslist-row.scss\",\"webpack://./apps/files/src/components/FilesListHeader.vue\"],\"names\":[],\"mappings\":\"AA4BA,wCACC,YAAA,CACA,kBAAA,CACA,aAAA,CACA,oBAAA,CACA,uBAAA,CACA,wBAAA,CACA,QAAA,CACA,SAAA,CACA,mCAAA,CACA,WAAA,CAKA,kDACC,eAAA,CACA,kBAAA,CACA,sBAAA,CAIF,2CACC,sBAAA,CACA,kEACC,YAAA,CACA,sBAAA,CAEA,iCAAA,CAEA,qGACC,2BAAA,CACA,4BAAA,CACA,QAAA,CACA,8DAAA,CAGD,+FACC,mBAAA,CAKH,uCACC,YAAA,CACA,kBAAA,CACA,sBAAA,CACA,8BAAA,CACA,WAAA,CAEA,oCAAA,CACA,kCAAA,CAEA,4CACC,0BAAA,CAGD,2CACC,8BAAA,CACA,+BAAA,CAGD,+CACC,eAAA,CACA,8BAAA,CACA,+BAAA,CACA,kCAAA,CACA,2BAAA,CAEA,0BAAA,CACA,uBAAA,CAIF,uCAEC,eAAA,CAEA,aAAA,CAEA,yCACC,YAAA,CACA,kBAAA,CAEA,UAAA,CACA,WAAA,CAGA,4JAEC,mDAAA,CACA,kBAAA,CAIF,kEAEC,gBAAA,CACA,iBAAA,CAIF,0CACC,UAAA,CAGA,0FAEC,2BAAA,CAIA,mEAEC,kBAAA,CAED,iGAEC,mCAAA,CAKH,uCAEC,wBAAA,CACA,iCAAA,CAEA,4BAAA,CAGA,uEACC,+BAAA,CACA,4FACC,kBAAA,CAKH,gDACC,+BAAA,CCtKD,qCACC,gBAAA,CAEA,8CAAA,CAEA,+CACC,cAAA\",\"sourcesContent\":[\"/**\\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\\n/**\\n * ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠\\n * This file is for every column styling that must be\\n * shared between BOTH the files list AND the list header.\\n * ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠ ⚠\\n */\\ntd, th {\\n\\tdisplay: flex;\\n\\talign-items: center;\\n\\tflex: 0 0 auto;\\n\\tjustify-content: left;\\n\\twidth: var(--row-height);\\n\\theight: var(--row-height);\\n\\tmargin: 0;\\n\\tpadding: 0;\\n\\tcolor: var(--color-text-maxcontrast);\\n\\tborder: none;\\n\\n\\t// Columns should try to add any text\\n\\t// node wrapped in a span. That should help\\n\\t// with the ellipsis on overflow.\\n\\tspan {\\n\\t\\toverflow: hidden;\\n\\t\\twhite-space: nowrap;\\n\\t\\ttext-overflow: ellipsis;\\n\\t}\\n}\\n\\n.files-list__row-checkbox {\\n\\tjustify-content: center;\\n\\t&::v-deep .checkbox-radio-switch {\\n\\t\\tdisplay: flex;\\n\\t\\tjustify-content: center;\\n\\n\\t\\t--icon-size: var(--checkbox-size);\\n\\n\\t\\tlabel.checkbox-radio-switch__label {\\n\\t\\t\\twidth: var(--clickable-area);\\n\\t\\t\\theight: var(--clickable-area);\\n\\t\\t\\tmargin: 0;\\n\\t\\t\\tpadding: calc((var(--clickable-area) - var(--checkbox-size)) / 2);\\n\\t\\t}\\n\\n\\t\\t.checkbox-radio-switch__icon {\\n\\t\\t\\tmargin: 0 !important;\\n\\t\\t}\\n\\t}\\n}\\n\\n.files-list__row-icon {\\n\\tdisplay: flex;\\n\\talign-items: center;\\n\\tjustify-content: center;\\n\\twidth: var(--icon-preview-size);\\n\\theight: 100%;\\n\\t// Show same padding as the checkbox right padding for visual balance\\n\\tmargin-right: var(--checkbox-padding);\\n\\tcolor: var(--color-primary-element);\\n\\n\\t& > span {\\n\\t\\tjustify-content: flex-start;\\n\\t}\\n\\n\\t&::v-deep svg {\\n\\t\\twidth: var(--icon-preview-size);\\n\\t\\theight: var(--icon-preview-size);\\n\\t}\\n\\n\\t&-preview {\\n\\t\\toverflow: hidden;\\n\\t\\twidth: var(--icon-preview-size);\\n\\t\\theight: var(--icon-preview-size);\\n\\t\\tborder-radius: var(--border-radius);\\n\\t\\tbackground-repeat: no-repeat;\\n\\t\\t// Center and contain the preview\\n\\t\\tbackground-position: center;\\n\\t\\tbackground-size: contain;\\n\\t}\\n}\\n\\n.files-list__row-name {\\n\\t// Prevent link from overflowing\\n\\toverflow: hidden;\\n\\t// Take as much space as possible\\n\\tflex: 1 1 auto;\\n\\n\\ta {\\n\\t\\tdisplay: flex;\\n\\t\\talign-items: center;\\n\\t\\t// Fill cell height and width\\n\\t\\twidth: 100%;\\n\\t\\theight: 100%;\\n\\n\\t\\t// Keyboard indicator a11y\\n\\t\\t&:focus .files-list__row-name-text,\\n\\t\\t&:focus-visible .files-list__row-name-text {\\n\\t\\t\\toutline: 2px solid var(--color-main-text) !important;\\n\\t\\t\\tborder-radius: 20px;\\n\\t\\t}\\n\\t}\\n\\n\\t.files-list__row-name-text {\\n\\t\\t// Make some space for the outline\\n\\t\\tpadding: 5px 10px;\\n\\t\\tmargin-left: -10px;\\n\\t}\\n}\\n\\n.files-list__row-actions {\\n\\twidth: auto;\\n\\n\\t// Add margin to all cells after the actions\\n\\t& ~ td,\\n\\t& ~ th {\\n\\t\\tmargin: 0 var(--cell-margin);\\n\\t}\\n\\n\\t&::v-deep > button {\\n\\t\\t.button-vue__text {\\n\\t\\t\\t// Remove bold from default button styling\\n\\t\\t\\tfont-weight: normal;\\n\\t\\t}\\n\\t\\t&:not(:hover, :focus, :active) .button-vue__wrapper {\\n\\t\\t\\t// Also apply color-text-maxcontrast to non-active button\\n\\t\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t\\t}\\n\\t}\\n}\\n\\n.files-list__row-size {\\n\\t// Right align text\\n\\tjustify-content: flex-end;\\n\\twidth: calc(var(--row-height) * 1.5);\\n\\t// opacity varies with the size\\n\\tcolor: var(--color-main-text);\\n\\n\\t// Icon is before text since size is right aligned\\n\\t::v-deep .files-list__column-sort-button {\\n\\t\\tpadding: 0 16px 0 4px !important;\\n\\t\\t.button-vue__wrapper {\\n\\t\\t\\tflex-direction: row;\\n\\t\\t}\\n\\t}\\n}\\n\\n.files-list__row-column-custom {\\n\\twidth: calc(var(--row-height) * 2);\\n}\\n\",\"\\n@import '../mixins/fileslist-row.scss';\\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-1dfa1154]{flex:1 1 100% !important}.files-list__row-actions-batch[data-v-1dfa1154] .button-vue__wrapper{width:100%}.files-list__row-actions-batch[data-v-1dfa1154] .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-6f4155ff]{--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-6f4155ff] tbody,.files-list[data-v-6f4155ff] .vue-recycle-scroller__slot{display:flex;flex-direction:column;width:100%;position:relative}.files-list[data-v-6f4155ff] .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-6f4155ff] tr{position:absolute;display:flex;align-items:center;width:100%;border-bottom:1px solid var(--color-border)}\", \"\",{\"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,CAQD,gCACC,iBAAA,CACA,YAAA,CACA,kBAAA,CACA,UAAA,CACA,2CAAA\",\"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\\t/**\\n\\t\\t * Common row styling. tr are handled by\\n\\t\\t * vue-virtual-scroller, so we need to\\n\\t\\t * have those rules in here.\\n\\t\\t */\\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\\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-entry__settings-quota--not-unlimited[data-v-26c061ec] .app-navigation-entry__title{margin-top:-4px}.app-navigation-entry__settings-quota progress[data-v-26c061ec]{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-42495694]{display:flex;overflow:hidden;flex-direction:column;max-height:100%}.app-content[data-v-42495694]:not(.app-content--hidden)+#app-content{display:none}.files-list__header[data-v-42495694]{display:flex;align-content:center;flex:0 0;margin:4px 4px 4px 50px}.files-list__header>*[data-v-42495694]{flex:0 0}.files-list__refresh-icon[data-v-42495694]{flex:0 0 44px;width:44px;height:44px}.files-list__loading-icon[data-v-42495694]{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-4238b71c] .app-navigation-entry-icon{background-repeat:no-repeat;background-position:center}.app-navigation>ul.app-navigation__list[data-v-4238b71c]{padding-bottom:var(--default-grid-baseline, 4px)}.app-navigation-entry__settings[data-v-4238b71c]{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-2e129f40]: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\":\";AA4dA;;;;;;;;;;GAUA\",\"sourcesContent\":[\"<!--\\n - @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\\n -\\n - @author Gary Kim <gary@garykim.dev>\\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.sync=\\\"selectedFiles\\\"\\n\\t\\t\\t\\t:value=\\\"fileid.toString()\\\"\\n\\t\\t\\t\\tname=\\\"selectedFiles\\\" />\\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\\\">\\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\\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:force-title=\\\"true\\\"\\n\\t\\t\\t\\t:inline=\\\"enabledInlineActions.length\\\">\\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<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<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-fragment'\\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 Vue from 'vue'\\n\\nimport { isCachedPreview } from '../services/PreviewService.ts'\\nimport { getFileActions } from '../services/FileAction.ts'\\nimport { useFilesStore } from '../store/files.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},\\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},\\n\\n\\tsetup() {\\n\\t\\tconst filesStore = useFilesStore()\\n\\t\\tconst selectionStore = useSelectionStore()\\n\\t\\tconst userConfigStore = useUserConfigStore()\\n\\t\\treturn {\\n\\t\\t\\tfilesStore,\\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\\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\\n\\t\\tcolumns() {\\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\\n\\t\\tfileid() {\\n\\t\\t\\treturn this.source.attributes.fileid\\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\\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\\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\\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\\tget() {\\n\\t\\t\\t\\treturn this.selectionStore.selected\\n\\t\\t\\t},\\n\\t\\t\\tset(selection) {\\n\\t\\t\\t\\tlogger.debug('Changed nodes selection', { selection })\\n\\t\\t\\t\\tthis.selectionStore.set(selection)\\n\\t\\t\\t},\\n\\t\\t},\\n\\n\\t\\tcropPreviews() {\\n\\t\\t\\treturn this.userConfig.crop_image_previews\\n\\t\\t},\\n\\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 ? '1' : '0')\\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\\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\\n\\t\\tenabledInlineActions() {\\n\\t\\t\\treturn this.enabledActions.filter(action => action?.inline?.(this.source, this.currentView))\\n\\t\\t},\\n\\n\\t\\tenabledMenuActions() {\\n\\t\\t\\treturn [\\n\\t\\t\\t\\t...this.enabledInlineActions,\\n\\t\\t\\t\\t...actions.filter(action => !action.inline),\\n\\t\\t\\t]\\n\\t\\t},\\n\\n\\t\\tuniqueId() {\\n\\t\\t\\treturn this.hashCode(this.source.source)\\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\\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.$refs?.actionsMenu?.closeMenu?.()\\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\\thashCode(str) {\\n\\t\\t\\tlet hash = 0\\n\\t\\t\\tfor (let i = 0, len = str.length; i < len; i++) {\\n\\t\\t\\t\\tconst chr = str.charCodeAt(i)\\n\\t\\t\\t\\thash = (hash << 5) - hash + chr\\n\\t\\t\\t\\thash |= 0 // Convert to 32bit integer\\n\\t\\t\\t}\\n\\t\\t\\treturn hash\\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\\tthis.loading = action.id\\n\\t\\t\\t\\tconst success = await action.exec(this.source, this.currentView)\\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\\tthis.loading = ''\\n\\t\\t\\t}\\n\\t\\t},\\n\\n\\t\\tt: translate,\\n\\t\\tformatFileSize,\\n\\t},\\n})\\n</script>\\n\\n<style scoped lang='scss'>\\n@import '../mixins/fileslist-row.scss';\\n\\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 = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(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 = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(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 = function(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 = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(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(function(id) { return 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], function() { return __webpack_require__(1944); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","getCurrentDirectory","currentDirInfo","OCA","Files","App","currentFileList","dirInfo","path","name","replace","getTemplates","axios","generateOcsUrl","response","data","ocs","createFromTemplate","filePath","templatePath","templateType","inheritAttrs","props","basename","type","required","checked","default","fileid","filename","previewUrl","hasPreview","mime","ratio","failedPreview","computed","nameWithoutExt","id","realPreviewUrl","getCurrentUser","document","getElementById","value","pathSections","startsWith","split","relativePath","forEach","section","encodeURIComponent","mimeIcon","methods","onCheck","onFailure","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","_vm","this","_c","_self","staticClass","attrs","domProps","on","_v","class","_s","components","NcEmptyContent","NcModal","TemplatePreview","logger","loading","opened","provider","emptyTemplate","selectedTemplate","style","open","templates","fetchedProvider","close","onSubmit","currentDirectory","fileList","extension","normalize","fileInfo","model","filesClient","fileAction","$file","dir","fileActions","fileInfoModel","console","showError","$event","preventDefault","stopPropagation","apply","arguments","t","_b","_l","template","key","_e","getLoggerBuilder","setApp","detectUser","build","Vue","n","TemplatePickerRoot","createElement","body","appendChild","loadState","templatesPath","debug","TemplatePicker","TemplatePickerView","propsData","$mount","window","addEventListener","initTemplatesPlugin","attach","menu","addMenuEntry","displayName","templateName","iconClass","fileType","actionHandler","initTemplatesFolder","removeMenuEntry","OC","Plugins","register","index","newTemplatePlugin","app","label","FilesPlugin","copySystemTemplates","changeDirectory","template_path","error","subscribe","query","setFilter","action","FileAction","validateAction","_action","iconSvgInline","enabled","exec","execBatch","order","inline","renderInline","Error","getFileActions","_nc_fileactions","nodes","view","TrashCan","length","map","node","permissions","every","permission","Permission","source","emit","Promise","all","find","search","push","registerLegacyView","icon","parent","classes","expanded","params","OCP","Navigation","legacy","sticky","includes","isValidNavigation","isUniqueNavigation","_views","e","message","_currentView","views","getContents","isSvg","columns","isValidColumn","emptyView","defaultSortKey","column","title","render","sort","summary","ChartPie","NcAppNavigationItem","NcProgressBar","loadingStorageStats","storageStats","storageStatsTitle","usedQuotaByte","used","quota","storageStatsTooltip","beforeMount","setInterval","debounceUpdateStorageStats","throttleUpdateStorageStats","updateStorageStats","event","slot","relative","Math","min","el","mounted","userConfig","show_hidden","crop_image_previews","useUserConfigStore","store","defineStore","state","actions","onUpdate","update","generateUrl","userConfigStore","initialized","Clipboard","NcAppSettingsDialog","NcAppSettingsSection","NcCheckboxRadioSwitch","NcInputField","Setting","setup","settings","webdavUrl","webdavDocs","appPasswordUrl","webdavUrlCopied","beforeDestroy","onClose","setConfig","copyCloudId","navigator","showSuccess","setTimeout","setting","target","select","scopedSlots","_u","fn","proxy","Cog","NavigationQuota","NcAppNavigation","NcIconSvgWrapper","SettingsModal","settingsOpened","currentViewId","currentView","parentViews","filter","childViews","reduce","list","watch","showView","heading","headingEl","newAppContent","itemId","setPageHeading","textContent","onLegacyNavigationChanged","onToggleExpand","show","generateToNavigation","openSettings","onSettingsClose","child","useFilesStore","fileStore","files","roots","getters","getNode","getNodes","ids","Boolean","getRoot","service","updateNodes","acc","attributes","deleteNodes","setRoot","root","onCreatedNode","onDeletedNode","onMovedNode","usePathsStore","getPath","addPath","payload","pathsStore","useSelectionStore","selected","set","selection","reset","saveUserConfig","mode","direction","filesSortingConfig","useSortingStore","isAscSorting","getSortingMode","setSortingBy","config","toggleSortingDirection","newDirection","Home","NcBreadcrumbs","NcBreadcrumb","dirs","sections","exact","to","onClick","ariaLabel","_setupProxy","nativeOn","isCachedPreview","caches","then","cache","match","element","svg","CustomElementRender","CustomSvgIconRender","FileIcon","FolderIcon","Fragment","NcActionButton","NcActions","NcLoadingIcon","active","isSizeAvailable","filesStore","selectionStore","backgroundFailed","backgroundImage","size","sizeOpacity","linkTo","is","href","selectedFiles","get","cropPreviews","url","mimeIconUrl","enabledActions","enabledInlineActions","enabledMenuActions","uniqueId","debounceIfNotCached","isCached","fetchAndApplyPreview","img","resolve","reject","onCancel","resetState","clearImg","hashCode","hash","onActionClick","success","formatFileSize","toString","ref","opacity","currentFolder","totalSize","classForColumn","selectedNodes","selectionIds","results","failedIds","MenuDown","MenuUp","NcButton","inject","sortingStore","mapState","sortingMode","sortAriaLabel","toggleSortBy","FilesListHeaderButton","FilesListHeaderActions","provide","selectAllBind","indeterminate","isAllSelected","isNoneSelected","isSomeSelected","onToggleAll","RecycleScroller","FileEntry","FilesListHeader","FilesListFooter","summaryFile","count","summaryFolder","slots","getFileId","item","caption","BreadCrumbs","FilesListVirtual","NcAppContent","promise","dirContents","isEmptyDir","isRefreshing","toPreviousDir","newView","oldView","newDir","oldDir","fetchContent","folder","contents","folders","directives","rawName","expression","Settings","_settings","_name","_el","_open","_close","Router","base","linkActiveClass","routes","alias","stringifyQuery","result","stringify","PiniaVuePlugin","pinia","createPinia","NavigationService","Object","assign","legacyViews","SettingsService","SettingsModel","NavigationView","router","FilesListView","values","sublist","subview","noRewrite","serviceWorker","scope","registration","___CSS_LOADER_EXPORT___","module","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","loaded","__webpack_modules__","call","m","O","chunkIds","priority","notFulfilled","Infinity","i","fulfilled","j","keys","splice","r","getter","__esModule","d","a","definition","o","defineProperty","enumerable","g","globalThis","Function","obj","prop","prototype","hasOwnProperty","Symbol","toStringTag","nmd","paths","children","b","baseURI","self","location","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","bind","nc","__webpack_exports__"],"sourceRoot":""}
\ No newline at end of file diff --git a/dist/files_trashbin-main.js b/dist/files_trashbin-main.js index a7f615fd8d2..705ecfc7494 100644 --- a/dist/files_trashbin-main.js +++ b/dist/files_trashbin-main.js @@ -1,3 +1,3 @@ /*! For license information please see files_trashbin-main.js.LICENSE.txt */ -!function(){var e,n={95761:function(e,n,t){"use strict";var r,i=t(31352),o=t(61137),s=t(80351),a=t.n(s),u=t(45994),c=t(91770),l=t(79753),f=t(14596),d="/trashbin/".concat(null===(r=(0,u.ts)())||void 0===r?void 0:r.uid,"/trash"),j=(0,l.generateRemoteUrl)("dav"+d),p=(0,f.eI)(j,{headers:{requesttoken:(0,u.IH)()}});function m(e){return m="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},m(e)}function v(e,n,t,r,i,o,s){try{var a=e[o](s),u=a.value}catch(e){return void t(e)}a.done?n(u):Promise.resolve(u).then(r,i)}function b(e){return function(){var n=this,t=arguments;return new Promise((function(r,i){var o=e.apply(n,t);function s(e){v(o,r,i,s,a,"next",e)}function a(e){v(o,r,i,s,a,"throw",e)}s(void 0)}))}}function h(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function y(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?h(Object(t),!0).forEach((function(n){g(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):h(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function g(e,n,t){return(n=function(e){var n=function(e,n){if("object"!==m(e)||null===e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,n);if("object"!==m(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e,"string");return"symbol"===m(n)?n:String(n)}(n))in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}var w='<?xml version="1.0"?>\n<d:propfind xmlns:d="DAV:"\n\txmlns:oc="http://owncloud.org/ns"\n\txmlns:nc="http://nextcloud.org/ns">\n\t<d:prop>\n\t\t<nc:trashbin-filename />\n\t\t<nc:trashbin-deletion-time />\n\t\t<nc:trashbin-original-location />\n\t\t<nc:trashbin-title />\n\t\t<d:getlastmodified />\n\t\t<d:getetag />\n\t\t<d:getcontenttype />\n\t\t<d:resourcetype />\n\t\t<oc:fileid />\n\t\t<oc:permissions />\n\t\t<oc:size />\n\t\t<d:getcontentlength />\n\t</d:prop>\n</d:propfind>',k=function(e){var n,t,r,i,o,s=(0,c.wE)(null===(n=e.props)||void 0===n?void 0:n.permissions),a=null===(t=(0,u.ts)())||void 0===t?void 0:t.uid,f=(0,l.generateUrl)("/apps/files_trashbin/preview?fileId={fileid}&x=32&y=32",e.props),j={id:(null===(r=e.props)||void 0===r?void 0:r.fileid)||0,source:(0,l.generateRemoteUrl)("dav"+d+e.filename),mtime:new Date(e.lastmod),mime:e.mime,size:(null===(i=e.props)||void 0===i?void 0:i.size)||0,permissions:s,owner:a,root:d,attributes:y(y(y({},e),e.props),{},{displayName:null===(o=e.props)||void 0===o?void 0:o["trashbin-filename"],previewUrl:f})};return"file"===e.type?new c.$B(j):new c.gt(j)},x=b(regeneratorRuntime.mark((function e(){var n,t,r,i=arguments;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=i.length>0&&void 0!==i[0]?i[0]:"/",e.next=3,p.stat(n,{details:!0,data:w});case 3:return t=e.sent,e.next=6,p.getDirectoryContents(n,{details:!0,data:w});case 6:return r=e.sent,e.abrupt("return",{folder:k(t.data),contents:r.data.map(k)});case 8:case"end":return e.stop()}}),e)}))),O=t(78595),_=t(4820),I=t(64009),S=(0,t(17499).IY)().setApp("files").detectUser().build();function z(e){return z="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},z(e)}function P(e,n){for(var t=0;t<n.length;t++){var r=n[t];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,E(r.key),r)}}function E(e){var n=function(e,n){if("object"!==z(e)||null===e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,n);if("object"!==z(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e,"string");return"symbol"===z(n)?n:String(n)}var D,R=function(){function e(n){var t,r,i;!function(e,n){if(!(e instanceof n))throw new TypeError("Cannot call a class as a function")}(this,e),t=this,i=void 0,(r=E(r="_action"))in t?Object.defineProperty(t,r,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[r]=i,this.validateAction(n),this._action=n}var n,t;return n=e,(t=[{key:"id",get:function(){return this._action.id}},{key:"displayName",get:function(){return this._action.displayName}},{key:"iconSvgInline",get:function(){return this._action.iconSvgInline}},{key:"enabled",get:function(){return this._action.enabled}},{key:"exec",get:function(){return this._action.exec}},{key:"execBatch",get:function(){return this._action.execBatch}},{key:"order",get:function(){return this._action.order}},{key:"default",get:function(){return this._action.default}},{key:"inline",get:function(){return this._action.inline}},{key:"renderInline",get:function(){return this._action.renderInline}},{key:"validateAction",value:function(e){if(!e.id||"string"!=typeof e.id)throw new Error("Invalid id");if(!e.displayName||"function"!=typeof e.displayName)throw new Error("Invalid displayName function");if(!e.iconSvgInline||"function"!=typeof e.iconSvgInline)throw new Error("Invalid iconSvgInline function");if(!e.exec||"function"!=typeof e.exec)throw new Error("Invalid exec function");if("enabled"in e&&"function"!=typeof e.enabled)throw new Error("Invalid enabled function");if("execBatch"in e&&"function"!=typeof e.execBatch)throw new Error("Invalid execBatch function");if("order"in e&&"number"!=typeof e.order)throw new Error("Invalid order");if("default"in e&&"boolean"!=typeof e.default)throw new Error("Invalid default");if("inline"in e&&"function"!=typeof e.inline)throw new Error("Invalid inline function");if("renderInline"in e&&"function"!=typeof e.renderInline)throw new Error("Invalid renderInline function")}}])&&P(n.prototype,t),Object.defineProperty(n,"prototype",{writable:!1}),e}(),N=t(25108);function C(e,n,t,r,i,o,s){try{var a=e[o](s),u=a.value}catch(e){return void t(e)}a.done?n(u):Promise.resolve(u).then(r,i)}function U(e){return function(){var n=this,t=arguments;return new Promise((function(r,i){var o=e.apply(n,t);function s(e){C(o,r,i,s,a,"next",e)}function a(e){C(o,r,i,s,a,"throw",e)}s(void 0)}))}}D=new R({id:"restore",displayName:function(){return(0,i.Iu)("files_trashbin","Restore")},iconSvgInline:function(){return I},enabled:function(e,n){return"trashbin"===n.id&&e.length>0&&e.map((function(e){return e.permissions})).every((function(e){return 0!=(e&c.y3.READ)}))},exec:function(e){return U(regeneratorRuntime.mark((function n(){var t,r;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.prev=0,r=(0,l.generateRemoteUrl)("dav/trashbin/".concat(null===(t=(0,u.ts)())||void 0===t?void 0:t.uid,"/restore/").concat(e.basename)),n.next=4,(0,_.default)({method:"MOVE",url:e.source,headers:{destination:r}});case 4:return(0,O.j8)("files:file:deleted",e),n.abrupt("return",!0);case 8:return n.prev=8,n.t0=n.catch(0),N.error(n.t0),n.abrupt("return",!1);case 12:case"end":return n.stop()}}),n,null,[[0,8]])})))()},execBatch:function(e,n){var t=this;return U(regeneratorRuntime.mark((function r(){return regeneratorRuntime.wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return r.abrupt("return",Promise.all(e.map((function(e){return t.exec(e,n)}))));case 1:case"end":return r.stop()}}),r)})))()},order:1,inline:function(){return!0}}),void 0===window._nc_fileactions&&(window._nc_fileactions=[],S.debug("FileActions initialized")),window._nc_fileactions.find((function(e){return e.id===D.id}))?S.error("FileAction ".concat(D.id," already registered"),{action:D}):window._nc_fileactions.push(D),window.OCP.Files.Navigation.register({id:"trashbin",name:(0,i.Iu)("files_trashbin","Deleted files"),caption:(0,i.Iu)("files_trashbin","List of files that have been deleted."),icon:o,order:50,sticky:!0,defaultSortKey:"deleted",columns:[{id:"deleted",title:(0,i.Iu)("files_trashbin","Deleted"),render:function(e){var n,t=null===(n=e.attributes)||void 0===n?void 0:n["trashbin-deletion-time"],r=document.createElement("span");return t?(r.title=a().unix(t).format("LLL"),r.textContent=a().unix(t).fromNow(),r):(r.textContent=(0,i.Iu)("files_trashbin","A long time ago"),r)},sort:function(e,n){var t,r,i=(null===(t=e.attributes)||void 0===t?void 0:t["trashbin-deletion-time"])||(null==e?void 0:e.mtime)||0;return((null===(r=n.attributes)||void 0===r?void 0:r["trashbin-deletion-time"])||(null==n?void 0:n.mtime)||0)-i}}],getContents:x})},46700:function(e,n,t){var r={"./af":42786,"./af.js":42786,"./ar":30867,"./ar-dz":14130,"./ar-dz.js":14130,"./ar-kw":96135,"./ar-kw.js":96135,"./ar-ly":56440,"./ar-ly.js":56440,"./ar-ma":47702,"./ar-ma.js":47702,"./ar-sa":16040,"./ar-sa.js":16040,"./ar-tn":37100,"./ar-tn.js":37100,"./ar.js":30867,"./az":31083,"./az.js":31083,"./be":9808,"./be.js":9808,"./bg":68338,"./bg.js":68338,"./bm":67438,"./bm.js":67438,"./bn":8905,"./bn-bd":76225,"./bn-bd.js":76225,"./bn.js":8905,"./bo":11560,"./bo.js":11560,"./br":1278,"./br.js":1278,"./bs":80622,"./bs.js":80622,"./ca":2468,"./ca.js":2468,"./cs":5822,"./cs.js":5822,"./cv":50877,"./cv.js":50877,"./cy":47373,"./cy.js":47373,"./da":24780,"./da.js":24780,"./de":59740,"./de-at":60217,"./de-at.js":60217,"./de-ch":60894,"./de-ch.js":60894,"./de.js":59740,"./dv":5300,"./dv.js":5300,"./el":50837,"./el.js":50837,"./en-au":78348,"./en-au.js":78348,"./en-ca":77925,"./en-ca.js":77925,"./en-gb":22243,"./en-gb.js":22243,"./en-ie":46436,"./en-ie.js":46436,"./en-il":47207,"./en-il.js":47207,"./en-in":44175,"./en-in.js":44175,"./en-nz":76319,"./en-nz.js":76319,"./en-sg":31662,"./en-sg.js":31662,"./eo":92915,"./eo.js":92915,"./es":55655,"./es-do":55251,"./es-do.js":55251,"./es-mx":96112,"./es-mx.js":96112,"./es-us":71146,"./es-us.js":71146,"./es.js":55655,"./et":5603,"./et.js":5603,"./eu":77763,"./eu.js":77763,"./fa":76959,"./fa.js":76959,"./fi":11897,"./fi.js":11897,"./fil":42549,"./fil.js":42549,"./fo":94694,"./fo.js":94694,"./fr":94470,"./fr-ca":63049,"./fr-ca.js":63049,"./fr-ch":52330,"./fr-ch.js":52330,"./fr.js":94470,"./fy":5044,"./fy.js":5044,"./ga":29295,"./ga.js":29295,"./gd":2101,"./gd.js":2101,"./gl":38794,"./gl.js":38794,"./gom-deva":27884,"./gom-deva.js":27884,"./gom-latn":23168,"./gom-latn.js":23168,"./gu":95349,"./gu.js":95349,"./he":24206,"./he.js":24206,"./hi":30094,"./hi.js":30094,"./hr":30316,"./hr.js":30316,"./hu":22138,"./hu.js":22138,"./hy-am":11423,"./hy-am.js":11423,"./id":29218,"./id.js":29218,"./is":90135,"./is.js":90135,"./it":90626,"./it-ch":10150,"./it-ch.js":10150,"./it.js":90626,"./ja":39183,"./ja.js":39183,"./jv":24286,"./jv.js":24286,"./ka":12105,"./ka.js":12105,"./kk":47772,"./kk.js":47772,"./km":18758,"./km.js":18758,"./kn":79282,"./kn.js":79282,"./ko":33730,"./ko.js":33730,"./ku":1408,"./ku.js":1408,"./ky":33291,"./ky.js":33291,"./lb":36841,"./lb.js":36841,"./lo":55466,"./lo.js":55466,"./lt":57010,"./lt.js":57010,"./lv":37595,"./lv.js":37595,"./me":39861,"./me.js":39861,"./mi":35493,"./mi.js":35493,"./mk":95966,"./mk.js":95966,"./ml":87341,"./ml.js":87341,"./mn":5115,"./mn.js":5115,"./mr":10370,"./mr.js":10370,"./ms":9847,"./ms-my":41237,"./ms-my.js":41237,"./ms.js":9847,"./mt":72126,"./mt.js":72126,"./my":56165,"./my.js":56165,"./nb":64924,"./nb.js":64924,"./ne":16744,"./ne.js":16744,"./nl":93901,"./nl-be":59814,"./nl-be.js":59814,"./nl.js":93901,"./nn":83877,"./nn.js":83877,"./oc-lnc":92135,"./oc-lnc.js":92135,"./pa-in":15858,"./pa-in.js":15858,"./pl":64495,"./pl.js":64495,"./pt":89520,"./pt-br":57971,"./pt-br.js":57971,"./pt.js":89520,"./ro":96459,"./ro.js":96459,"./ru":21793,"./ru.js":21793,"./sd":40950,"./sd.js":40950,"./se":10490,"./se.js":10490,"./si":90124,"./si.js":90124,"./sk":64249,"./sk.js":64249,"./sl":14985,"./sl.js":14985,"./sq":51104,"./sq.js":51104,"./sr":49131,"./sr-cyrl":79915,"./sr-cyrl.js":79915,"./sr.js":49131,"./ss":85893,"./ss.js":85893,"./sv":98760,"./sv.js":98760,"./sw":91172,"./sw.js":91172,"./ta":27333,"./ta.js":27333,"./te":23110,"./te.js":23110,"./tet":52095,"./tet.js":52095,"./tg":27321,"./tg.js":27321,"./th":9041,"./th.js":9041,"./tk":19005,"./tk.js":19005,"./tl-ph":75768,"./tl-ph.js":75768,"./tlh":89444,"./tlh.js":89444,"./tr":72397,"./tr.js":72397,"./tzl":28254,"./tzl.js":28254,"./tzm":51106,"./tzm-latn":30699,"./tzm-latn.js":30699,"./tzm.js":51106,"./ug-cn":9288,"./ug-cn.js":9288,"./uk":67691,"./uk.js":67691,"./ur":13795,"./ur.js":13795,"./uz":6791,"./uz-latn":60588,"./uz-latn.js":60588,"./uz.js":6791,"./vi":65666,"./vi.js":65666,"./x-pseudo":14378,"./x-pseudo.js":14378,"./yo":75805,"./yo.js":75805,"./zh-cn":83839,"./zh-cn.js":83839,"./zh-hk":55726,"./zh-hk.js":55726,"./zh-mo":99807,"./zh-mo.js":99807,"./zh-tw":74152,"./zh-tw.js":74152};function i(e){var n=o(e);return t(n)}function o(e){if(!t.o(r,e)){var n=new Error("Cannot find module '"+e+"'");throw n.code="MODULE_NOT_FOUND",n}return r[e]}i.keys=function(){return Object.keys(r)},i.resolve=o,e.exports=i,i.id=46700}},t={};function r(e){var i=t[e];if(void 0!==i)return i.exports;var o=t[e]={id:e,loaded:!1,exports:{}};return n[e].call(o.exports,o,o.exports,r),o.loaded=!0,o.exports}r.m=n,e=[],r.O=function(n,t,i,o){if(!t){var s=1/0;for(l=0;l<e.length;l++){t=e[l][0],i=e[l][1],o=e[l][2];for(var a=!0,u=0;u<t.length;u++)(!1&o||s>=o)&&Object.keys(r.O).every((function(e){return r.O[e](t[u])}))?t.splice(u--,1):(a=!1,o<s&&(s=o));if(a){e.splice(l--,1);var c=i();void 0!==c&&(n=c)}}return n}o=o||0;for(var l=e.length;l>0&&e[l-1][2]>o;l--)e[l]=e[l-1];e[l]=[t,i,o]},r.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(n,{a:n}),n},r.d=function(e,n){for(var t in n)r.o(n,t)&&!r.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:n[t]})},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.nmd=function(e){return e.paths=[],e.children||(e.children=[]),e},r.j=5992,function(){r.b=document.baseURI||self.location.href;var e={5992:0};r.O.j=function(n){return 0===e[n]};var n=function(n,t){var i,o,s=t[0],a=t[1],u=t[2],c=0;if(s.some((function(n){return 0!==e[n]}))){for(i in a)r.o(a,i)&&(r.m[i]=a[i]);if(u)var l=u(r)}for(n&&n(t);c<s.length;c++)o=s[c],r.o(e,o)&&e[o]&&e[o][0](),e[o]=0;return r.O(l)},t=self.webpackChunknextcloud=self.webpackChunknextcloud||[];t.forEach(n.bind(null,0)),t.push=n.bind(null,t.push.bind(t))}(),r.nc=void 0;var i=r.O(void 0,[7874],(function(){return r(95761)}));i=r.O(i)}(); -//# sourceMappingURL=files_trashbin-main.js.map?v=73864c82ff210662b6f7
\ No newline at end of file +!function(){var e,n={95761:function(e,n,t){"use strict";var r,i=t(31352),o=t(61137),s=t(80351),a=t.n(s),u=t(45994),c=t(91770),l=t(79753),f=t(14596),d="/trashbin/".concat(null===(r=(0,u.ts)())||void 0===r?void 0:r.uid,"/trash"),j=(0,l.generateRemoteUrl)("dav"+d),p=(0,f.eI)(j,{headers:{requesttoken:(0,u.IH)()}});function m(e){return m="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},m(e)}function v(e,n,t,r,i,o,s){try{var a=e[o](s),u=a.value}catch(e){return void t(e)}a.done?n(u):Promise.resolve(u).then(r,i)}function b(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function h(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?b(Object(t),!0).forEach((function(n){y(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):b(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function y(e,n,t){return(n=function(e){var n=function(e,n){if("object"!==m(e)||null===e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,n);if("object"!==m(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e,"string");return"symbol"===m(n)?n:String(n)}(n))in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}var g='<?xml version="1.0"?>\n<d:propfind xmlns:d="DAV:"\n\txmlns:oc="http://owncloud.org/ns"\n\txmlns:nc="http://nextcloud.org/ns">\n\t<d:prop>\n\t\t<nc:trashbin-filename />\n\t\t<nc:trashbin-deletion-time />\n\t\t<nc:trashbin-original-location />\n\t\t<nc:trashbin-title />\n\t\t<d:getlastmodified />\n\t\t<d:getetag />\n\t\t<d:getcontenttype />\n\t\t<d:resourcetype />\n\t\t<oc:fileid />\n\t\t<oc:permissions />\n\t\t<oc:size />\n\t\t<d:getcontentlength />\n\t</d:prop>\n</d:propfind>',w=function(e){var n,t,r,i,o,s=(0,c.wE)(null===(n=e.props)||void 0===n?void 0:n.permissions),a=null===(t=(0,u.ts)())||void 0===t?void 0:t.uid,f=(0,l.generateUrl)("/apps/files_trashbin/preview?fileId={fileid}&x=32&y=32",e.props),j={id:(null===(r=e.props)||void 0===r?void 0:r.fileid)||0,source:(0,l.generateRemoteUrl)("dav"+d+e.filename),mtime:new Date(e.lastmod),mime:e.mime,size:(null===(i=e.props)||void 0===i?void 0:i.size)||0,permissions:s,owner:a,root:d,attributes:h(h(h({},e),e.props),{},{displayName:null===(o=e.props)||void 0===o?void 0:o["trashbin-filename"],previewUrl:f})};return"file"===e.type?new c.$B(j):new c.gt(j)},k=function(){var e,n=(e=regeneratorRuntime.mark((function e(){var n,t,r,i=arguments;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=i.length>0&&void 0!==i[0]?i[0]:"/",e.next=3,p.stat(n,{details:!0,data:g});case 3:return t=e.sent,e.next=6,p.getDirectoryContents(n,{details:!0,data:g});case 6:return r=e.sent,e.abrupt("return",{folder:w(t.data),contents:r.data.map(w)});case 8:case"end":return e.stop()}}),e)})),function(){var n=this,t=arguments;return new Promise((function(r,i){var o=e.apply(n,t);function s(e){v(o,r,i,s,a,"next",e)}function a(e){v(o,r,i,s,a,"throw",e)}s(void 0)}))});return function(){return n.apply(this,arguments)}}(),x=t(78595),O=t(4820),_=t(64009),I=(0,t(17499).IY)().setApp("files").detectUser().build();function S(e){return S="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},S(e)}function z(e,n){for(var t=0;t<n.length;t++){var r=n[t];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,P(r.key),r)}}function P(e){var n=function(e,n){if("object"!==S(e)||null===e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,n);if("object"!==S(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e,"string");return"symbol"===S(n)?n:String(n)}var E,D=function(){function e(n){var t,r,i;!function(e,n){if(!(e instanceof n))throw new TypeError("Cannot call a class as a function")}(this,e),t=this,i=void 0,(r=P(r="_action"))in t?Object.defineProperty(t,r,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[r]=i,this.validateAction(n),this._action=n}var n,t;return n=e,(t=[{key:"id",get:function(){return this._action.id}},{key:"displayName",get:function(){return this._action.displayName}},{key:"iconSvgInline",get:function(){return this._action.iconSvgInline}},{key:"enabled",get:function(){return this._action.enabled}},{key:"exec",get:function(){return this._action.exec}},{key:"execBatch",get:function(){return this._action.execBatch}},{key:"order",get:function(){return this._action.order}},{key:"default",get:function(){return this._action.default}},{key:"inline",get:function(){return this._action.inline}},{key:"renderInline",get:function(){return this._action.renderInline}},{key:"validateAction",value:function(e){if(!e.id||"string"!=typeof e.id)throw new Error("Invalid id");if(!e.displayName||"function"!=typeof e.displayName)throw new Error("Invalid displayName function");if(!e.iconSvgInline||"function"!=typeof e.iconSvgInline)throw new Error("Invalid iconSvgInline function");if(!e.exec||"function"!=typeof e.exec)throw new Error("Invalid exec function");if("enabled"in e&&"function"!=typeof e.enabled)throw new Error("Invalid enabled function");if("execBatch"in e&&"function"!=typeof e.execBatch)throw new Error("Invalid execBatch function");if("order"in e&&"number"!=typeof e.order)throw new Error("Invalid order");if("default"in e&&"boolean"!=typeof e.default)throw new Error("Invalid default");if("inline"in e&&"function"!=typeof e.inline)throw new Error("Invalid inline function");if("renderInline"in e&&"function"!=typeof e.renderInline)throw new Error("Invalid renderInline function")}}])&&z(n.prototype,t),Object.defineProperty(n,"prototype",{writable:!1}),e}();function R(e,n,t,r,i,o,s){try{var a=e[o](s),u=a.value}catch(e){return void t(e)}a.done?n(u):Promise.resolve(u).then(r,i)}function N(e){return function(){var n=this,t=arguments;return new Promise((function(r,i){var o=e.apply(n,t);function s(e){R(o,r,i,s,a,"next",e)}function a(e){R(o,r,i,s,a,"throw",e)}s(void 0)}))}}E=new D({id:"restore",displayName:function(){return(0,i.Iu)("files_trashbin","Restore")},iconSvgInline:function(){return _},enabled:function(e,n){return"trashbin"===n.id&&e.length>0&&e.map((function(e){return e.permissions})).every((function(e){return 0!=(e&c.y3.READ)}))},exec:function(e){return N(regeneratorRuntime.mark((function n(){var t,r;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.prev=0,r=(0,l.generateRemoteUrl)("dav/trashbin/".concat(null===(t=(0,u.ts)())||void 0===t?void 0:t.uid,"/restore/").concat(e.basename)),n.next=4,(0,O.default)({method:"MOVE",url:e.source,headers:{destination:r}});case 4:return(0,x.j8)("files:file:deleted",e),n.abrupt("return",!0);case 8:return n.prev=8,n.t0=n.catch(0),I.error(n.t0),n.abrupt("return",!1);case 12:case"end":return n.stop()}}),n,null,[[0,8]])})))()},execBatch:function(e,n){var t=this;return N(regeneratorRuntime.mark((function r(){return regeneratorRuntime.wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return r.abrupt("return",Promise.all(e.map((function(e){return t.exec(e,n)}))));case 1:case"end":return r.stop()}}),r)})))()},order:1,inline:function(){return!0}}),void 0===window._nc_fileactions&&(window._nc_fileactions=[],I.debug("FileActions initialized")),window._nc_fileactions.find((function(e){return e.id===E.id}))?I.error("FileAction ".concat(E.id," already registered"),{action:E}):window._nc_fileactions.push(E),window.OCP.Files.Navigation.register({id:"trashbin",name:(0,i.Iu)("files_trashbin","Deleted files"),caption:(0,i.Iu)("files_trashbin","List of files that have been deleted."),icon:o,order:50,sticky:!0,defaultSortKey:"deleted",columns:[{id:"deleted",title:(0,i.Iu)("files_trashbin","Deleted"),render:function(e){var n,t=null===(n=e.attributes)||void 0===n?void 0:n["trashbin-deletion-time"],r=document.createElement("span");return t?(r.title=a().unix(t).format("LLL"),r.textContent=a().unix(t).fromNow(),r):(r.textContent=(0,i.Iu)("files_trashbin","A long time ago"),r)},sort:function(e,n){var t,r,i=(null===(t=e.attributes)||void 0===t?void 0:t["trashbin-deletion-time"])||(null==e?void 0:e.mtime)||0;return((null===(r=n.attributes)||void 0===r?void 0:r["trashbin-deletion-time"])||(null==n?void 0:n.mtime)||0)-i}}],getContents:k})},46700:function(e,n,t){var r={"./af":42786,"./af.js":42786,"./ar":30867,"./ar-dz":14130,"./ar-dz.js":14130,"./ar-kw":96135,"./ar-kw.js":96135,"./ar-ly":56440,"./ar-ly.js":56440,"./ar-ma":47702,"./ar-ma.js":47702,"./ar-sa":16040,"./ar-sa.js":16040,"./ar-tn":37100,"./ar-tn.js":37100,"./ar.js":30867,"./az":31083,"./az.js":31083,"./be":9808,"./be.js":9808,"./bg":68338,"./bg.js":68338,"./bm":67438,"./bm.js":67438,"./bn":8905,"./bn-bd":76225,"./bn-bd.js":76225,"./bn.js":8905,"./bo":11560,"./bo.js":11560,"./br":1278,"./br.js":1278,"./bs":80622,"./bs.js":80622,"./ca":2468,"./ca.js":2468,"./cs":5822,"./cs.js":5822,"./cv":50877,"./cv.js":50877,"./cy":47373,"./cy.js":47373,"./da":24780,"./da.js":24780,"./de":59740,"./de-at":60217,"./de-at.js":60217,"./de-ch":60894,"./de-ch.js":60894,"./de.js":59740,"./dv":5300,"./dv.js":5300,"./el":50837,"./el.js":50837,"./en-au":78348,"./en-au.js":78348,"./en-ca":77925,"./en-ca.js":77925,"./en-gb":22243,"./en-gb.js":22243,"./en-ie":46436,"./en-ie.js":46436,"./en-il":47207,"./en-il.js":47207,"./en-in":44175,"./en-in.js":44175,"./en-nz":76319,"./en-nz.js":76319,"./en-sg":31662,"./en-sg.js":31662,"./eo":92915,"./eo.js":92915,"./es":55655,"./es-do":55251,"./es-do.js":55251,"./es-mx":96112,"./es-mx.js":96112,"./es-us":71146,"./es-us.js":71146,"./es.js":55655,"./et":5603,"./et.js":5603,"./eu":77763,"./eu.js":77763,"./fa":76959,"./fa.js":76959,"./fi":11897,"./fi.js":11897,"./fil":42549,"./fil.js":42549,"./fo":94694,"./fo.js":94694,"./fr":94470,"./fr-ca":63049,"./fr-ca.js":63049,"./fr-ch":52330,"./fr-ch.js":52330,"./fr.js":94470,"./fy":5044,"./fy.js":5044,"./ga":29295,"./ga.js":29295,"./gd":2101,"./gd.js":2101,"./gl":38794,"./gl.js":38794,"./gom-deva":27884,"./gom-deva.js":27884,"./gom-latn":23168,"./gom-latn.js":23168,"./gu":95349,"./gu.js":95349,"./he":24206,"./he.js":24206,"./hi":30094,"./hi.js":30094,"./hr":30316,"./hr.js":30316,"./hu":22138,"./hu.js":22138,"./hy-am":11423,"./hy-am.js":11423,"./id":29218,"./id.js":29218,"./is":90135,"./is.js":90135,"./it":90626,"./it-ch":10150,"./it-ch.js":10150,"./it.js":90626,"./ja":39183,"./ja.js":39183,"./jv":24286,"./jv.js":24286,"./ka":12105,"./ka.js":12105,"./kk":47772,"./kk.js":47772,"./km":18758,"./km.js":18758,"./kn":79282,"./kn.js":79282,"./ko":33730,"./ko.js":33730,"./ku":1408,"./ku.js":1408,"./ky":33291,"./ky.js":33291,"./lb":36841,"./lb.js":36841,"./lo":55466,"./lo.js":55466,"./lt":57010,"./lt.js":57010,"./lv":37595,"./lv.js":37595,"./me":39861,"./me.js":39861,"./mi":35493,"./mi.js":35493,"./mk":95966,"./mk.js":95966,"./ml":87341,"./ml.js":87341,"./mn":5115,"./mn.js":5115,"./mr":10370,"./mr.js":10370,"./ms":9847,"./ms-my":41237,"./ms-my.js":41237,"./ms.js":9847,"./mt":72126,"./mt.js":72126,"./my":56165,"./my.js":56165,"./nb":64924,"./nb.js":64924,"./ne":16744,"./ne.js":16744,"./nl":93901,"./nl-be":59814,"./nl-be.js":59814,"./nl.js":93901,"./nn":83877,"./nn.js":83877,"./oc-lnc":92135,"./oc-lnc.js":92135,"./pa-in":15858,"./pa-in.js":15858,"./pl":64495,"./pl.js":64495,"./pt":89520,"./pt-br":57971,"./pt-br.js":57971,"./pt.js":89520,"./ro":96459,"./ro.js":96459,"./ru":21793,"./ru.js":21793,"./sd":40950,"./sd.js":40950,"./se":10490,"./se.js":10490,"./si":90124,"./si.js":90124,"./sk":64249,"./sk.js":64249,"./sl":14985,"./sl.js":14985,"./sq":51104,"./sq.js":51104,"./sr":49131,"./sr-cyrl":79915,"./sr-cyrl.js":79915,"./sr.js":49131,"./ss":85893,"./ss.js":85893,"./sv":98760,"./sv.js":98760,"./sw":91172,"./sw.js":91172,"./ta":27333,"./ta.js":27333,"./te":23110,"./te.js":23110,"./tet":52095,"./tet.js":52095,"./tg":27321,"./tg.js":27321,"./th":9041,"./th.js":9041,"./tk":19005,"./tk.js":19005,"./tl-ph":75768,"./tl-ph.js":75768,"./tlh":89444,"./tlh.js":89444,"./tr":72397,"./tr.js":72397,"./tzl":28254,"./tzl.js":28254,"./tzm":51106,"./tzm-latn":30699,"./tzm-latn.js":30699,"./tzm.js":51106,"./ug-cn":9288,"./ug-cn.js":9288,"./uk":67691,"./uk.js":67691,"./ur":13795,"./ur.js":13795,"./uz":6791,"./uz-latn":60588,"./uz-latn.js":60588,"./uz.js":6791,"./vi":65666,"./vi.js":65666,"./x-pseudo":14378,"./x-pseudo.js":14378,"./yo":75805,"./yo.js":75805,"./zh-cn":83839,"./zh-cn.js":83839,"./zh-hk":55726,"./zh-hk.js":55726,"./zh-mo":99807,"./zh-mo.js":99807,"./zh-tw":74152,"./zh-tw.js":74152};function i(e){var n=o(e);return t(n)}function o(e){if(!t.o(r,e)){var n=new Error("Cannot find module '"+e+"'");throw n.code="MODULE_NOT_FOUND",n}return r[e]}i.keys=function(){return Object.keys(r)},i.resolve=o,e.exports=i,i.id=46700}},t={};function r(e){var i=t[e];if(void 0!==i)return i.exports;var o=t[e]={id:e,loaded:!1,exports:{}};return n[e].call(o.exports,o,o.exports,r),o.loaded=!0,o.exports}r.m=n,e=[],r.O=function(n,t,i,o){if(!t){var s=1/0;for(l=0;l<e.length;l++){t=e[l][0],i=e[l][1],o=e[l][2];for(var a=!0,u=0;u<t.length;u++)(!1&o||s>=o)&&Object.keys(r.O).every((function(e){return r.O[e](t[u])}))?t.splice(u--,1):(a=!1,o<s&&(s=o));if(a){e.splice(l--,1);var c=i();void 0!==c&&(n=c)}}return n}o=o||0;for(var l=e.length;l>0&&e[l-1][2]>o;l--)e[l]=e[l-1];e[l]=[t,i,o]},r.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(n,{a:n}),n},r.d=function(e,n){for(var t in n)r.o(n,t)&&!r.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:n[t]})},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.nmd=function(e){return e.paths=[],e.children||(e.children=[]),e},r.j=5992,function(){r.b=document.baseURI||self.location.href;var e={5992:0};r.O.j=function(n){return 0===e[n]};var n=function(n,t){var i,o,s=t[0],a=t[1],u=t[2],c=0;if(s.some((function(n){return 0!==e[n]}))){for(i in a)r.o(a,i)&&(r.m[i]=a[i]);if(u)var l=u(r)}for(n&&n(t);c<s.length;c++)o=s[c],r.o(e,o)&&e[o]&&e[o][0](),e[o]=0;return r.O(l)},t=self.webpackChunknextcloud=self.webpackChunknextcloud||[];t.forEach(n.bind(null,0)),t.push=n.bind(null,t.push.bind(t))}(),r.nc=void 0;var i=r.O(void 0,[7874],(function(){return r(95761)}));i=r.O(i)}(); +//# sourceMappingURL=files_trashbin-main.js.map?v=f6a9263984e9a15cb653
\ No newline at end of file diff --git a/dist/files_trashbin-main.js.map b/dist/files_trashbin-main.js.map index 780d62d0b0d..d23ca9e3cb1 100644 --- a/dist/files_trashbin-main.js.map +++ b/dist/files_trashbin-main.js.map @@ -1 +1 @@ -{"version":3,"file":"files_trashbin-main.js?v=73864c82ff210662b6f7","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/apps/files_trashbin/src/services/client.ts","webpack:///nextcloud/apps/files_trashbin/src/services/trashbin.ts","webpack:///nextcloud/apps/files/src/logger.js","webpack:///nextcloud/apps/files/src/services/FileAction.ts","webpack:///nextcloud/apps/files_trashbin/src/actions/restoreAction.ts","webpack:///nextcloud/apps/files_trashbin/src/main.ts","webpack:///nextcloud/node_modules/moment/locale|sync|/^\\.\\/.*$","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 = function(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(function(key) { return __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) 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 { createClient } from 'webdav'\nimport { generateRemoteUrl } from '@nextcloud/router'\nimport { getCurrentUser, getRequestToken } from '@nextcloud/auth'\n\nexport const rootPath = `/trashbin/${getCurrentUser()?.uid}/trash`\nexport const rootUrl = generateRemoteUrl('dav' + rootPath)\nconst client = createClient(rootUrl, {\n\theaders: {\n\t\trequesttoken: getRequestToken(),\n\t},\n})\nexport default client\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 { getCurrentUser } from '@nextcloud/auth'\nimport { File, Folder, parseWebdavPermissions } from '@nextcloud/files'\nimport { generateRemoteUrl, generateUrl } from '@nextcloud/router'\n\nimport type { FileStat, ResponseDataDetailed } from 'webdav'\nimport type { ContentsWithRoot } from '../../../files/src/services/Navigation'\n\nimport client, { rootPath } from './client'\n\nconst data = `<?xml version=\"1.0\"?>\n<d:propfind xmlns:d=\"DAV:\"\n\txmlns:oc=\"http://owncloud.org/ns\"\n\txmlns:nc=\"http://nextcloud.org/ns\">\n\t<d:prop>\n\t\t<nc:trashbin-filename />\n\t\t<nc:trashbin-deletion-time />\n\t\t<nc:trashbin-original-location />\n\t\t<nc:trashbin-title />\n\t\t<d:getlastmodified />\n\t\t<d:getetag />\n\t\t<d:getcontenttype />\n\t\t<d:resourcetype />\n\t\t<oc:fileid />\n\t\t<oc:permissions />\n\t\t<oc:size />\n\t\t<d:getcontentlength />\n\t</d:prop>\n</d:propfind>`\n\n\nconst resultToNode = function(node: FileStat): File | Folder {\n\tconst permissions = parseWebdavPermissions(node.props?.permissions)\n\tconst owner = getCurrentUser()?.uid as string\n\tconst previewUrl = generateUrl('/apps/files_trashbin/preview?fileId={fileid}&x=32&y=32', node.props)\n\n\tconst nodeData = {\n\t\tid: node.props?.fileid as number || 0,\n\t\tsource: generateRemoteUrl('dav' + rootPath + node.filename),\n\t\tmtime: new Date(node.lastmod),\n\t\tmime: node.mime as string,\n\t\tsize: node.props?.size as number || 0,\n\t\tpermissions,\n\t\towner,\n\t\troot: rootPath,\n\t\tattributes: {\n\t\t\t...node,\n\t\t\t...node.props,\n\t\t\t// Override displayed name on the list\n\t\t\tdisplayName: node.props?.['trashbin-filename'],\n\t\t\tpreviewUrl,\n\t\t},\n\t}\n\n\treturn node.type === 'file'\n\t\t? new File(nodeData)\n\t\t: new Folder(nodeData)\n}\n\nexport default async (path: string = '/'): Promise<ContentsWithRoot> => {\n\t// TODO: use only one request when webdav-client supports it\n\t// @see https://github.com/perry-mitchell/webdav-client/pull/334\n\tconst rootResponse = await client.stat(path, {\n\t\tdetails: true,\n\t\tdata,\n\t}) as ResponseDataDetailed<FileStat>\n\n\tconst contentsResponse = await client.getDirectoryContents(path, {\n\t\tdetails: true,\n\t\tdata,\n\t}) as ResponseDataDetailed<FileStat[]>\n\n\treturn {\n\t\tfolder: resultToNode(rootResponse.data) as Folder,\n\t\tcontents: contentsResponse.data.map(resultToNode),\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 { 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 */\n\nimport { Node } from '@nextcloud/files'\nimport logger from '../logger'\n\ndeclare global {\n\tinterface Window {\n\t\tOC: any;\n\t\t_nc_fileactions: FileAction[] | undefined;\n\t}\n}\n\n/**\n * TODO: remove and move to @nextcloud/files\n * @see https://github.com/nextcloud/nextcloud-files/pull/608\n */\ninterface FileActionData {\n\t/** Unique ID */\n\tid: string\n\t/** Translatable string displayed in the menu */\n\tdisplayName: (files: Node[], view) => string\n\t/** Svg as inline string. <svg><path fill=\"...\" /></svg> */\n\ticonSvgInline: (files: Node[], view) => string\n\t/** Condition wether this action is shown or not */\n\tenabled?: (files: Node[], view) => boolean\n\t/**\n\t * Function executed on single file action\n\t * @returns true if the action was executed, false otherwise\n\t * @throws Error if the action failed\n\t */\n\texec: (file: Node, view) => Promise<boolean>,\n\t/**\n\t * Function executed on multiple files action\n\t * @returns true if the action was executed, false otherwise\n\t * @throws Error if the action failed\n\t */\n\texecBatch?: (files: Node[], view) => Promise<boolean[]>\n\t/** This action order in the list */\n\torder?: number,\n\t/** Make this action the default */\n\tdefault?: boolean,\n\t/**\n\t * If true, the renderInline function will be called\n\t */\n\tinline?: (file: Node, view) => boolean,\n\t/**\n\t * If defined, the returned html element will be\n\t * appended before the actions menu.\n\t */\n\trenderInline?: (file: Node, view) => HTMLElement,\n}\n\nexport class FileAction {\n\n\tprivate _action: FileActionData\n\n\tconstructor(action: FileActionData) {\n\t\tthis.validateAction(action)\n\t\tthis._action = action\n\t}\n\n\tget id() {\n\t\treturn this._action.id\n\t}\n\n\tget displayName() {\n\t\treturn this._action.displayName\n\t}\n\n\tget iconSvgInline() {\n\t\treturn this._action.iconSvgInline\n\t}\n\n\tget enabled() {\n\t\treturn this._action.enabled\n\t}\n\n\tget exec() {\n\t\treturn this._action.exec\n\t}\n\n\tget execBatch() {\n\t\treturn this._action.execBatch\n\t}\n\n\tget order() {\n\t\treturn this._action.order\n\t}\n\n\tget default() {\n\t\treturn this._action.default\n\t}\n\n\tget inline() {\n\t\treturn this._action.inline\n\t}\n\n\tget renderInline() {\n\t\treturn this._action.renderInline\n\t}\n\n\tprivate validateAction(action: FileActionData) {\n\t\tif (!action.id || typeof action.id !== 'string') {\n\t\t\tthrow new Error('Invalid id')\n\t\t}\n\n\t\tif (!action.displayName || typeof action.displayName !== 'function') {\n\t\t\tthrow new Error('Invalid displayName function')\n\t\t}\n\n\t\tif (!action.iconSvgInline || typeof action.iconSvgInline !== 'function') {\n\t\t\tthrow new Error('Invalid iconSvgInline function')\n\t\t}\n\n\t\tif (!action.exec || typeof action.exec !== 'function') {\n\t\t\tthrow new Error('Invalid exec function')\n\t\t}\n\n\t\t// Optional properties --------------------------------------------\n\t\tif ('enabled' in action && typeof action.enabled !== 'function') {\n\t\t\tthrow new Error('Invalid enabled function')\n\t\t}\n\n\t\tif ('execBatch' in action && typeof action.execBatch !== 'function') {\n\t\t\tthrow new Error('Invalid execBatch function')\n\t\t}\n\n\t\tif ('order' in action && typeof action.order !== 'number') {\n\t\t\tthrow new Error('Invalid order')\n\t\t}\n\n\t\tif ('default' in action && typeof action.default !== 'boolean') {\n\t\t\tthrow new Error('Invalid default')\n\t\t}\n\n\t\tif ('inline' in action && typeof action.inline !== 'function') {\n\t\t\tthrow new Error('Invalid inline function')\n\t\t}\n\n\t\tif ('renderInline' in action && typeof action.renderInline !== 'function') {\n\t\t\tthrow new Error('Invalid renderInline function')\n\t\t}\n\t}\n\n}\n\nexport const registerFileAction = function(action: FileAction): void {\n\tif (typeof window._nc_fileactions === 'undefined') {\n\t\twindow._nc_fileactions = []\n\t\tlogger.debug('FileActions initialized')\n\t}\n\n\t// Check duplicates\n\tif (window._nc_fileactions.find(search => search.id === action.id)) {\n\t\tlogger.error(`FileAction ${action.id} already registered`, { action })\n\t\treturn\n\t}\n\n\twindow._nc_fileactions.push(action)\n}\n\nexport const getFileActions = function(): FileAction[] {\n\treturn 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 { generateRemoteUrl } from '@nextcloud/router'\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { Permission, Node } from '@nextcloud/files'\nimport { translate as t } from '@nextcloud/l10n'\nimport axios from '@nextcloud/axios'\nimport History from '@mdi/svg/svg/history.svg?raw'\n\nimport { registerFileAction, FileAction } from '../../../files/src/services/FileAction'\n\nregisterFileAction(new FileAction({\n\tid: 'restore',\n\tdisplayName() {\n\t\treturn t('files_trashbin', 'Restore')\n\t},\n\ticonSvgInline: () => History,\n\n\tenabled(nodes: Node[], view) {\n\t\t// Only available in the trashbin view\n\t\tif (view.id !== 'trashbin') {\n\t\t\treturn false\n\t\t}\n\n\t\t// Only available if all nodes have read permission\n\t\treturn nodes.length > 0 && nodes\n\t\t\t.map(node => node.permissions)\n\t\t\t.every(permission => (permission & Permission.READ) !== 0)\n\t},\n\n\tasync exec(node: Node) {\n\t\ttry {\n\t\t\tconst destination = generateRemoteUrl(`dav/trashbin/${getCurrentUser()?.uid}/restore/${node.basename}`)\n\t\t\tawait axios({\n\t\t\t\tmethod: 'MOVE',\n\t\t\t\turl: node.source,\n\t\t\t\theaders: {\n\t\t\t\t\tdestination,\n\t\t\t\t},\n\t\t\t})\n\n\t\t\t// Let's pretend the file is deleted since\n\t\t\t// we don't know the restored location\n\t\t\temit('files:file:deleted', node)\n\t\t\treturn true\n\t\t} catch (error) {\n\t\t\tconsole.error(error)\n\t\t\treturn false\n\t\t}\n\t},\n\tasync execBatch(nodes: Node[], view) {\n\t\treturn Promise.all(nodes.map(node => this.exec(node, view)))\n\t},\n\n\torder: 1,\n\tinline: () => true,\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 type NavigationService from '../../files/src/services/Navigation'\nimport type { Navigation } from '../../files/src/services/Navigation'\n\nimport { translate as t, translate } from '@nextcloud/l10n'\nimport DeleteSvg from '@mdi/svg/svg/delete.svg?raw'\nimport moment from '@nextcloud/moment'\n\nimport getContents from './services/trashbin'\n\n// Register restore action\nimport './actions/restoreAction'\n\nconst Navigation = window.OCP.Files.Navigation as NavigationService\nNavigation.register({\n\tid: 'trashbin',\n\tname: t('files_trashbin', 'Deleted files'),\n\tcaption: t('files_trashbin', 'List of files that have been deleted.'),\n\n\ticon: DeleteSvg,\n\torder: 50,\n\tsticky: true,\n\n\tdefaultSortKey: 'deleted',\n\n\tcolumns: [\n\t\t{\n\t\t\tid: 'deleted',\n\t\t\ttitle: t('files_trashbin', 'Deleted'),\n\t\t\trender(node) {\n\t\t\t\tconst deletionTime = node.attributes?.['trashbin-deletion-time']\n\t\t\t\tconst span = document.createElement('span')\n\t\t\t\tif (deletionTime) {\n\t\t\t\t\tspan.title = moment.unix(deletionTime).format('LLL')\n\t\t\t\t\tspan.textContent = moment.unix(deletionTime).fromNow()\n\t\t\t\t\treturn span\n\t\t\t\t}\n\n\t\t\t\t// Unknown deletion time\n\t\t\t\tspan.textContent = translate('files_trashbin', 'A long time ago')\n\t\t\t\treturn span\n\t\t\t},\n\t\t\tsort(nodeA, nodeB) {\n\t\t\t\tconst deletionTimeA = nodeA.attributes?.['trashbin-deletion-time'] || nodeA?.mtime || 0\n\t\t\t\tconst deletionTimeB = nodeB.attributes?.['trashbin-deletion-time'] || nodeB?.mtime || 0\n\t\t\t\treturn deletionTimeB - deletionTimeA\n\t\t\t},\n\t\t},\n\t],\n\n\tgetContents,\n} as Navigation)\n","var map = {\n\t\"./af\": 42786,\n\t\"./af.js\": 42786,\n\t\"./ar\": 30867,\n\t\"./ar-dz\": 14130,\n\t\"./ar-dz.js\": 14130,\n\t\"./ar-kw\": 96135,\n\t\"./ar-kw.js\": 96135,\n\t\"./ar-ly\": 56440,\n\t\"./ar-ly.js\": 56440,\n\t\"./ar-ma\": 47702,\n\t\"./ar-ma.js\": 47702,\n\t\"./ar-sa\": 16040,\n\t\"./ar-sa.js\": 16040,\n\t\"./ar-tn\": 37100,\n\t\"./ar-tn.js\": 37100,\n\t\"./ar.js\": 30867,\n\t\"./az\": 31083,\n\t\"./az.js\": 31083,\n\t\"./be\": 9808,\n\t\"./be.js\": 9808,\n\t\"./bg\": 68338,\n\t\"./bg.js\": 68338,\n\t\"./bm\": 67438,\n\t\"./bm.js\": 67438,\n\t\"./bn\": 8905,\n\t\"./bn-bd\": 76225,\n\t\"./bn-bd.js\": 76225,\n\t\"./bn.js\": 8905,\n\t\"./bo\": 11560,\n\t\"./bo.js\": 11560,\n\t\"./br\": 1278,\n\t\"./br.js\": 1278,\n\t\"./bs\": 80622,\n\t\"./bs.js\": 80622,\n\t\"./ca\": 2468,\n\t\"./ca.js\": 2468,\n\t\"./cs\": 5822,\n\t\"./cs.js\": 5822,\n\t\"./cv\": 50877,\n\t\"./cv.js\": 50877,\n\t\"./cy\": 47373,\n\t\"./cy.js\": 47373,\n\t\"./da\": 24780,\n\t\"./da.js\": 24780,\n\t\"./de\": 59740,\n\t\"./de-at\": 60217,\n\t\"./de-at.js\": 60217,\n\t\"./de-ch\": 60894,\n\t\"./de-ch.js\": 60894,\n\t\"./de.js\": 59740,\n\t\"./dv\": 5300,\n\t\"./dv.js\": 5300,\n\t\"./el\": 50837,\n\t\"./el.js\": 50837,\n\t\"./en-au\": 78348,\n\t\"./en-au.js\": 78348,\n\t\"./en-ca\": 77925,\n\t\"./en-ca.js\": 77925,\n\t\"./en-gb\": 22243,\n\t\"./en-gb.js\": 22243,\n\t\"./en-ie\": 46436,\n\t\"./en-ie.js\": 46436,\n\t\"./en-il\": 47207,\n\t\"./en-il.js\": 47207,\n\t\"./en-in\": 44175,\n\t\"./en-in.js\": 44175,\n\t\"./en-nz\": 76319,\n\t\"./en-nz.js\": 76319,\n\t\"./en-sg\": 31662,\n\t\"./en-sg.js\": 31662,\n\t\"./eo\": 92915,\n\t\"./eo.js\": 92915,\n\t\"./es\": 55655,\n\t\"./es-do\": 55251,\n\t\"./es-do.js\": 55251,\n\t\"./es-mx\": 96112,\n\t\"./es-mx.js\": 96112,\n\t\"./es-us\": 71146,\n\t\"./es-us.js\": 71146,\n\t\"./es.js\": 55655,\n\t\"./et\": 5603,\n\t\"./et.js\": 5603,\n\t\"./eu\": 77763,\n\t\"./eu.js\": 77763,\n\t\"./fa\": 76959,\n\t\"./fa.js\": 76959,\n\t\"./fi\": 11897,\n\t\"./fi.js\": 11897,\n\t\"./fil\": 42549,\n\t\"./fil.js\": 42549,\n\t\"./fo\": 94694,\n\t\"./fo.js\": 94694,\n\t\"./fr\": 94470,\n\t\"./fr-ca\": 63049,\n\t\"./fr-ca.js\": 63049,\n\t\"./fr-ch\": 52330,\n\t\"./fr-ch.js\": 52330,\n\t\"./fr.js\": 94470,\n\t\"./fy\": 5044,\n\t\"./fy.js\": 5044,\n\t\"./ga\": 29295,\n\t\"./ga.js\": 29295,\n\t\"./gd\": 2101,\n\t\"./gd.js\": 2101,\n\t\"./gl\": 38794,\n\t\"./gl.js\": 38794,\n\t\"./gom-deva\": 27884,\n\t\"./gom-deva.js\": 27884,\n\t\"./gom-latn\": 23168,\n\t\"./gom-latn.js\": 23168,\n\t\"./gu\": 95349,\n\t\"./gu.js\": 95349,\n\t\"./he\": 24206,\n\t\"./he.js\": 24206,\n\t\"./hi\": 30094,\n\t\"./hi.js\": 30094,\n\t\"./hr\": 30316,\n\t\"./hr.js\": 30316,\n\t\"./hu\": 22138,\n\t\"./hu.js\": 22138,\n\t\"./hy-am\": 11423,\n\t\"./hy-am.js\": 11423,\n\t\"./id\": 29218,\n\t\"./id.js\": 29218,\n\t\"./is\": 90135,\n\t\"./is.js\": 90135,\n\t\"./it\": 90626,\n\t\"./it-ch\": 10150,\n\t\"./it-ch.js\": 10150,\n\t\"./it.js\": 90626,\n\t\"./ja\": 39183,\n\t\"./ja.js\": 39183,\n\t\"./jv\": 24286,\n\t\"./jv.js\": 24286,\n\t\"./ka\": 12105,\n\t\"./ka.js\": 12105,\n\t\"./kk\": 47772,\n\t\"./kk.js\": 47772,\n\t\"./km\": 18758,\n\t\"./km.js\": 18758,\n\t\"./kn\": 79282,\n\t\"./kn.js\": 79282,\n\t\"./ko\": 33730,\n\t\"./ko.js\": 33730,\n\t\"./ku\": 1408,\n\t\"./ku.js\": 1408,\n\t\"./ky\": 33291,\n\t\"./ky.js\": 33291,\n\t\"./lb\": 36841,\n\t\"./lb.js\": 36841,\n\t\"./lo\": 55466,\n\t\"./lo.js\": 55466,\n\t\"./lt\": 57010,\n\t\"./lt.js\": 57010,\n\t\"./lv\": 37595,\n\t\"./lv.js\": 37595,\n\t\"./me\": 39861,\n\t\"./me.js\": 39861,\n\t\"./mi\": 35493,\n\t\"./mi.js\": 35493,\n\t\"./mk\": 95966,\n\t\"./mk.js\": 95966,\n\t\"./ml\": 87341,\n\t\"./ml.js\": 87341,\n\t\"./mn\": 5115,\n\t\"./mn.js\": 5115,\n\t\"./mr\": 10370,\n\t\"./mr.js\": 10370,\n\t\"./ms\": 9847,\n\t\"./ms-my\": 41237,\n\t\"./ms-my.js\": 41237,\n\t\"./ms.js\": 9847,\n\t\"./mt\": 72126,\n\t\"./mt.js\": 72126,\n\t\"./my\": 56165,\n\t\"./my.js\": 56165,\n\t\"./nb\": 64924,\n\t\"./nb.js\": 64924,\n\t\"./ne\": 16744,\n\t\"./ne.js\": 16744,\n\t\"./nl\": 93901,\n\t\"./nl-be\": 59814,\n\t\"./nl-be.js\": 59814,\n\t\"./nl.js\": 93901,\n\t\"./nn\": 83877,\n\t\"./nn.js\": 83877,\n\t\"./oc-lnc\": 92135,\n\t\"./oc-lnc.js\": 92135,\n\t\"./pa-in\": 15858,\n\t\"./pa-in.js\": 15858,\n\t\"./pl\": 64495,\n\t\"./pl.js\": 64495,\n\t\"./pt\": 89520,\n\t\"./pt-br\": 57971,\n\t\"./pt-br.js\": 57971,\n\t\"./pt.js\": 89520,\n\t\"./ro\": 96459,\n\t\"./ro.js\": 96459,\n\t\"./ru\": 21793,\n\t\"./ru.js\": 21793,\n\t\"./sd\": 40950,\n\t\"./sd.js\": 40950,\n\t\"./se\": 10490,\n\t\"./se.js\": 10490,\n\t\"./si\": 90124,\n\t\"./si.js\": 90124,\n\t\"./sk\": 64249,\n\t\"./sk.js\": 64249,\n\t\"./sl\": 14985,\n\t\"./sl.js\": 14985,\n\t\"./sq\": 51104,\n\t\"./sq.js\": 51104,\n\t\"./sr\": 49131,\n\t\"./sr-cyrl\": 79915,\n\t\"./sr-cyrl.js\": 79915,\n\t\"./sr.js\": 49131,\n\t\"./ss\": 85893,\n\t\"./ss.js\": 85893,\n\t\"./sv\": 98760,\n\t\"./sv.js\": 98760,\n\t\"./sw\": 91172,\n\t\"./sw.js\": 91172,\n\t\"./ta\": 27333,\n\t\"./ta.js\": 27333,\n\t\"./te\": 23110,\n\t\"./te.js\": 23110,\n\t\"./tet\": 52095,\n\t\"./tet.js\": 52095,\n\t\"./tg\": 27321,\n\t\"./tg.js\": 27321,\n\t\"./th\": 9041,\n\t\"./th.js\": 9041,\n\t\"./tk\": 19005,\n\t\"./tk.js\": 19005,\n\t\"./tl-ph\": 75768,\n\t\"./tl-ph.js\": 75768,\n\t\"./tlh\": 89444,\n\t\"./tlh.js\": 89444,\n\t\"./tr\": 72397,\n\t\"./tr.js\": 72397,\n\t\"./tzl\": 28254,\n\t\"./tzl.js\": 28254,\n\t\"./tzm\": 51106,\n\t\"./tzm-latn\": 30699,\n\t\"./tzm-latn.js\": 30699,\n\t\"./tzm.js\": 51106,\n\t\"./ug-cn\": 9288,\n\t\"./ug-cn.js\": 9288,\n\t\"./uk\": 67691,\n\t\"./uk.js\": 67691,\n\t\"./ur\": 13795,\n\t\"./ur.js\": 13795,\n\t\"./uz\": 6791,\n\t\"./uz-latn\": 60588,\n\t\"./uz-latn.js\": 60588,\n\t\"./uz.js\": 6791,\n\t\"./vi\": 65666,\n\t\"./vi.js\": 65666,\n\t\"./x-pseudo\": 14378,\n\t\"./x-pseudo.js\": 14378,\n\t\"./yo\": 75805,\n\t\"./yo.js\": 75805,\n\t\"./zh-cn\": 83839,\n\t\"./zh-cn.js\": 83839,\n\t\"./zh-hk\": 55726,\n\t\"./zh-hk.js\": 55726,\n\t\"./zh-mo\": 99807,\n\t\"./zh-mo.js\": 99807,\n\t\"./zh-tw\": 74152,\n\t\"./zh-tw.js\": 74152\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 46700;","// 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 = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(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 = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(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 = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 5992;","__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\t5992: 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 = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(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(function(id) { return 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], function() { return __webpack_require__(95761); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","rootPath","getCurrentUser","uid","rootUrl","generateRemoteUrl","createClient","headers","requesttoken","getRequestToken","data","resultToNode","node","permissions","parseWebdavPermissions","props","owner","previewUrl","generateUrl","nodeData","id","fileid","source","filename","mtime","Date","lastmod","mime","size","root","attributes","displayName","type","File","Folder","path","client","details","rootResponse","contentsResponse","folder","contents","map","getLoggerBuilder","setApp","detectUser","build","action","FileAction","this","validateAction","_action","iconSvgInline","enabled","exec","execBatch","order","default","inline","renderInline","Error","t","History","nodes","view","length","every","permission","Permission","destination","basename","axios","method","url","emit","console","error","Promise","all","window","_nc_fileactions","logger","debug","find","search","push","OCP","Files","Navigation","register","name","caption","icon","DeleteSvg","sticky","defaultSortKey","columns","title","render","deletionTime","span","document","createElement","moment","format","textContent","fromNow","translate","sort","nodeA","nodeB","deletionTimeA","getContents","webpackContext","req","webpackContextResolve","__webpack_require__","o","e","code","keys","Object","resolve","module","exports","__webpack_module_cache__","moduleId","cachedModule","undefined","loaded","__webpack_modules__","call","m","O","result","chunkIds","fn","priority","notFulfilled","Infinity","i","fulfilled","j","key","splice","r","n","getter","__esModule","d","a","definition","defineProperty","enumerable","get","g","globalThis","Function","obj","prop","prototype","hasOwnProperty","Symbol","toStringTag","value","nmd","paths","children","b","baseURI","self","location","href","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","forEach","bind","nc","__webpack_exports__"],"sourceRoot":""}
\ No newline at end of file +{"version":3,"file":"files_trashbin-main.js?v=f6a9263984e9a15cb653","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/apps/files_trashbin/src/services/client.ts","webpack:///nextcloud/apps/files_trashbin/src/services/trashbin.ts","webpack:///nextcloud/apps/files/src/logger.js","webpack:///nextcloud/apps/files/src/services/FileAction.ts","webpack:///nextcloud/apps/files_trashbin/src/actions/restoreAction.ts","webpack:///nextcloud/apps/files_trashbin/src/main.ts","webpack:///nextcloud/node_modules/moment/locale|sync|/^\\.\\/.*$","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 = function(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(function(key) { return __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) 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 { createClient } from 'webdav'\nimport { generateRemoteUrl } from '@nextcloud/router'\nimport { getCurrentUser, getRequestToken } from '@nextcloud/auth'\n\nexport const rootPath = `/trashbin/${getCurrentUser()?.uid}/trash`\nexport const rootUrl = generateRemoteUrl('dav' + rootPath)\nconst client = createClient(rootUrl, {\n\theaders: {\n\t\trequesttoken: getRequestToken(),\n\t},\n})\nexport default client\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 { getCurrentUser } from '@nextcloud/auth'\nimport { File, Folder, parseWebdavPermissions } from '@nextcloud/files'\nimport { generateRemoteUrl, generateUrl } from '@nextcloud/router'\n\nimport type { FileStat, ResponseDataDetailed } from 'webdav'\nimport type { ContentsWithRoot } from '../../../files/src/services/Navigation.ts'\n\nimport client, { rootPath } from './client'\n\nconst data = `<?xml version=\"1.0\"?>\n<d:propfind xmlns:d=\"DAV:\"\n\txmlns:oc=\"http://owncloud.org/ns\"\n\txmlns:nc=\"http://nextcloud.org/ns\">\n\t<d:prop>\n\t\t<nc:trashbin-filename />\n\t\t<nc:trashbin-deletion-time />\n\t\t<nc:trashbin-original-location />\n\t\t<nc:trashbin-title />\n\t\t<d:getlastmodified />\n\t\t<d:getetag />\n\t\t<d:getcontenttype />\n\t\t<d:resourcetype />\n\t\t<oc:fileid />\n\t\t<oc:permissions />\n\t\t<oc:size />\n\t\t<d:getcontentlength />\n\t</d:prop>\n</d:propfind>`\n\n\nconst resultToNode = function(node: FileStat): File | Folder {\n\tconst permissions = parseWebdavPermissions(node.props?.permissions)\n\tconst owner = getCurrentUser()?.uid as string\n\tconst previewUrl = generateUrl('/apps/files_trashbin/preview?fileId={fileid}&x=32&y=32', node.props)\n\n\tconst nodeData = {\n\t\tid: node.props?.fileid as number || 0,\n\t\tsource: generateRemoteUrl('dav' + rootPath + node.filename),\n\t\tmtime: new Date(node.lastmod),\n\t\tmime: node.mime as string,\n\t\tsize: node.props?.size as number || 0,\n\t\tpermissions,\n\t\towner,\n\t\troot: rootPath,\n\t\tattributes: {\n\t\t\t...node,\n\t\t\t...node.props,\n\t\t\t// Override displayed name on the list\n\t\t\tdisplayName: node.props?.['trashbin-filename'],\n\t\t\tpreviewUrl,\n\t\t},\n\t}\n\n\treturn node.type === 'file'\n\t\t? new File(nodeData)\n\t\t: new Folder(nodeData)\n}\n\nexport const getContents = async (path: string = '/'): Promise<ContentsWithRoot> => {\n\t// TODO: use only one request when webdav-client supports it\n\t// @see https://github.com/perry-mitchell/webdav-client/pull/334\n\tconst rootResponse = await client.stat(path, {\n\t\tdetails: true,\n\t\tdata,\n\t}) as ResponseDataDetailed<FileStat>\n\n\tconst contentsResponse = await client.getDirectoryContents(path, {\n\t\tdetails: true,\n\t\tdata,\n\t}) as ResponseDataDetailed<FileStat[]>\n\n\treturn {\n\t\tfolder: resultToNode(rootResponse.data) as Folder,\n\t\tcontents: contentsResponse.data.map(resultToNode),\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 { 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 */\n\nimport { Node } from '@nextcloud/files'\nimport logger from '../logger'\n\ndeclare global {\n\tinterface Window {\n\t\tOC: any;\n\t\t_nc_fileactions: FileAction[] | undefined;\n\t}\n}\n\n/**\n * TODO: remove and move to @nextcloud/files\n * @see https://github.com/nextcloud/nextcloud-files/pull/608\n */\ninterface FileActionData {\n\t/** Unique ID */\n\tid: string\n\t/** Translatable string displayed in the menu */\n\tdisplayName: (files: Node[], view) => string\n\t/** Svg as inline string. <svg><path fill=\"...\" /></svg> */\n\ticonSvgInline: (files: Node[], view) => string\n\t/** Condition wether this action is shown or not */\n\tenabled?: (files: Node[], view) => boolean\n\t/**\n\t * Function executed on single file action\n\t * @returns true if the action was executed, false otherwise\n\t * @throws Error if the action failed\n\t */\n\texec: (file: Node, view) => Promise<boolean>,\n\t/**\n\t * Function executed on multiple files action\n\t * @returns true if the action was executed, false otherwise\n\t * @throws Error if the action failed\n\t */\n\texecBatch?: (files: Node[], view) => Promise<boolean[]>\n\t/** This action order in the list */\n\torder?: number,\n\t/** Make this action the default */\n\tdefault?: boolean,\n\t/**\n\t * If true, the renderInline function will be called\n\t */\n\tinline?: (file: Node, view) => boolean,\n\t/**\n\t * If defined, the returned html element will be\n\t * appended before the actions menu.\n\t */\n\trenderInline?: (file: Node, view) => HTMLElement,\n}\n\nexport class FileAction {\n\n\tprivate _action: FileActionData\n\n\tconstructor(action: FileActionData) {\n\t\tthis.validateAction(action)\n\t\tthis._action = action\n\t}\n\n\tget id() {\n\t\treturn this._action.id\n\t}\n\n\tget displayName() {\n\t\treturn this._action.displayName\n\t}\n\n\tget iconSvgInline() {\n\t\treturn this._action.iconSvgInline\n\t}\n\n\tget enabled() {\n\t\treturn this._action.enabled\n\t}\n\n\tget exec() {\n\t\treturn this._action.exec\n\t}\n\n\tget execBatch() {\n\t\treturn this._action.execBatch\n\t}\n\n\tget order() {\n\t\treturn this._action.order\n\t}\n\n\tget default() {\n\t\treturn this._action.default\n\t}\n\n\tget inline() {\n\t\treturn this._action.inline\n\t}\n\n\tget renderInline() {\n\t\treturn this._action.renderInline\n\t}\n\n\tprivate validateAction(action: FileActionData) {\n\t\tif (!action.id || typeof action.id !== 'string') {\n\t\t\tthrow new Error('Invalid id')\n\t\t}\n\n\t\tif (!action.displayName || typeof action.displayName !== 'function') {\n\t\t\tthrow new Error('Invalid displayName function')\n\t\t}\n\n\t\tif (!action.iconSvgInline || typeof action.iconSvgInline !== 'function') {\n\t\t\tthrow new Error('Invalid iconSvgInline function')\n\t\t}\n\n\t\tif (!action.exec || typeof action.exec !== 'function') {\n\t\t\tthrow new Error('Invalid exec function')\n\t\t}\n\n\t\t// Optional properties --------------------------------------------\n\t\tif ('enabled' in action && typeof action.enabled !== 'function') {\n\t\t\tthrow new Error('Invalid enabled function')\n\t\t}\n\n\t\tif ('execBatch' in action && typeof action.execBatch !== 'function') {\n\t\t\tthrow new Error('Invalid execBatch function')\n\t\t}\n\n\t\tif ('order' in action && typeof action.order !== 'number') {\n\t\t\tthrow new Error('Invalid order')\n\t\t}\n\n\t\tif ('default' in action && typeof action.default !== 'boolean') {\n\t\t\tthrow new Error('Invalid default')\n\t\t}\n\n\t\tif ('inline' in action && typeof action.inline !== 'function') {\n\t\t\tthrow new Error('Invalid inline function')\n\t\t}\n\n\t\tif ('renderInline' in action && typeof action.renderInline !== 'function') {\n\t\t\tthrow new Error('Invalid renderInline function')\n\t\t}\n\t}\n\n}\n\nexport const registerFileAction = function(action: FileAction): void {\n\tif (typeof window._nc_fileactions === 'undefined') {\n\t\twindow._nc_fileactions = []\n\t\tlogger.debug('FileActions initialized')\n\t}\n\n\t// Check duplicates\n\tif (window._nc_fileactions.find(search => search.id === action.id)) {\n\t\tlogger.error(`FileAction ${action.id} already registered`, { action })\n\t\treturn\n\t}\n\n\twindow._nc_fileactions.push(action)\n}\n\nexport const getFileActions = function(): FileAction[] {\n\treturn 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 { generateRemoteUrl } from '@nextcloud/router'\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { Permission, Node } from '@nextcloud/files'\nimport { translate as t } from '@nextcloud/l10n'\nimport axios from '@nextcloud/axios'\nimport History from '@mdi/svg/svg/history.svg?raw'\n\nimport { registerFileAction, FileAction } from '../../../files/src/services/FileAction.ts'\nimport logger from '../../../files/src/logger.js'\n\nregisterFileAction(new FileAction({\n\tid: 'restore',\n\tdisplayName() {\n\t\treturn t('files_trashbin', 'Restore')\n\t},\n\ticonSvgInline: () => History,\n\n\tenabled(nodes: Node[], view) {\n\t\t// Only available in the trashbin view\n\t\tif (view.id !== 'trashbin') {\n\t\t\treturn false\n\t\t}\n\n\t\t// Only available if all nodes have read permission\n\t\treturn nodes.length > 0 && nodes\n\t\t\t.map(node => node.permissions)\n\t\t\t.every(permission => (permission & Permission.READ) !== 0)\n\t},\n\n\tasync exec(node: Node) {\n\t\ttry {\n\t\t\tconst destination = generateRemoteUrl(`dav/trashbin/${getCurrentUser()?.uid}/restore/${node.basename}`)\n\t\t\tawait axios({\n\t\t\t\tmethod: 'MOVE',\n\t\t\t\turl: node.source,\n\t\t\t\theaders: {\n\t\t\t\t\tdestination,\n\t\t\t\t},\n\t\t\t})\n\n\t\t\t// Let's pretend the file is deleted since\n\t\t\t// we don't know the restored location\n\t\t\temit('files:file:deleted', node)\n\t\t\treturn true\n\t\t} catch (error) {\n\t\t\tlogger.error(error)\n\t\t\treturn false\n\t\t}\n\t},\n\tasync execBatch(nodes: Node[], view) {\n\t\treturn Promise.all(nodes.map(node => this.exec(node, view)))\n\t},\n\n\torder: 1,\n\tinline: () => true,\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 type NavigationService from '../../files/src/services/Navigation.ts'\nimport type { Navigation } from '../../files/src/services/Navigation.ts'\n\nimport { translate as t, translate } from '@nextcloud/l10n'\nimport DeleteSvg from '@mdi/svg/svg/delete.svg?raw'\nimport moment from '@nextcloud/moment'\n\nimport { getContents } from './services/trashbin'\n\n// Register restore action\nimport './actions/restoreAction'\n\nconst Navigation = window.OCP.Files.Navigation as NavigationService\nNavigation.register({\n\tid: 'trashbin',\n\tname: t('files_trashbin', 'Deleted files'),\n\tcaption: t('files_trashbin', 'List of files that have been deleted.'),\n\n\ticon: DeleteSvg,\n\torder: 50,\n\tsticky: true,\n\n\tdefaultSortKey: 'deleted',\n\n\tcolumns: [\n\t\t{\n\t\t\tid: 'deleted',\n\t\t\ttitle: t('files_trashbin', 'Deleted'),\n\t\t\trender(node) {\n\t\t\t\tconst deletionTime = node.attributes?.['trashbin-deletion-time']\n\t\t\t\tconst span = document.createElement('span')\n\t\t\t\tif (deletionTime) {\n\t\t\t\t\tspan.title = moment.unix(deletionTime).format('LLL')\n\t\t\t\t\tspan.textContent = moment.unix(deletionTime).fromNow()\n\t\t\t\t\treturn span\n\t\t\t\t}\n\n\t\t\t\t// Unknown deletion time\n\t\t\t\tspan.textContent = translate('files_trashbin', 'A long time ago')\n\t\t\t\treturn span\n\t\t\t},\n\t\t\tsort(nodeA, nodeB) {\n\t\t\t\tconst deletionTimeA = nodeA.attributes?.['trashbin-deletion-time'] || nodeA?.mtime || 0\n\t\t\t\tconst deletionTimeB = nodeB.attributes?.['trashbin-deletion-time'] || nodeB?.mtime || 0\n\t\t\t\treturn deletionTimeB - deletionTimeA\n\t\t\t},\n\t\t},\n\t],\n\n\tgetContents,\n} as Navigation)\n","var map = {\n\t\"./af\": 42786,\n\t\"./af.js\": 42786,\n\t\"./ar\": 30867,\n\t\"./ar-dz\": 14130,\n\t\"./ar-dz.js\": 14130,\n\t\"./ar-kw\": 96135,\n\t\"./ar-kw.js\": 96135,\n\t\"./ar-ly\": 56440,\n\t\"./ar-ly.js\": 56440,\n\t\"./ar-ma\": 47702,\n\t\"./ar-ma.js\": 47702,\n\t\"./ar-sa\": 16040,\n\t\"./ar-sa.js\": 16040,\n\t\"./ar-tn\": 37100,\n\t\"./ar-tn.js\": 37100,\n\t\"./ar.js\": 30867,\n\t\"./az\": 31083,\n\t\"./az.js\": 31083,\n\t\"./be\": 9808,\n\t\"./be.js\": 9808,\n\t\"./bg\": 68338,\n\t\"./bg.js\": 68338,\n\t\"./bm\": 67438,\n\t\"./bm.js\": 67438,\n\t\"./bn\": 8905,\n\t\"./bn-bd\": 76225,\n\t\"./bn-bd.js\": 76225,\n\t\"./bn.js\": 8905,\n\t\"./bo\": 11560,\n\t\"./bo.js\": 11560,\n\t\"./br\": 1278,\n\t\"./br.js\": 1278,\n\t\"./bs\": 80622,\n\t\"./bs.js\": 80622,\n\t\"./ca\": 2468,\n\t\"./ca.js\": 2468,\n\t\"./cs\": 5822,\n\t\"./cs.js\": 5822,\n\t\"./cv\": 50877,\n\t\"./cv.js\": 50877,\n\t\"./cy\": 47373,\n\t\"./cy.js\": 47373,\n\t\"./da\": 24780,\n\t\"./da.js\": 24780,\n\t\"./de\": 59740,\n\t\"./de-at\": 60217,\n\t\"./de-at.js\": 60217,\n\t\"./de-ch\": 60894,\n\t\"./de-ch.js\": 60894,\n\t\"./de.js\": 59740,\n\t\"./dv\": 5300,\n\t\"./dv.js\": 5300,\n\t\"./el\": 50837,\n\t\"./el.js\": 50837,\n\t\"./en-au\": 78348,\n\t\"./en-au.js\": 78348,\n\t\"./en-ca\": 77925,\n\t\"./en-ca.js\": 77925,\n\t\"./en-gb\": 22243,\n\t\"./en-gb.js\": 22243,\n\t\"./en-ie\": 46436,\n\t\"./en-ie.js\": 46436,\n\t\"./en-il\": 47207,\n\t\"./en-il.js\": 47207,\n\t\"./en-in\": 44175,\n\t\"./en-in.js\": 44175,\n\t\"./en-nz\": 76319,\n\t\"./en-nz.js\": 76319,\n\t\"./en-sg\": 31662,\n\t\"./en-sg.js\": 31662,\n\t\"./eo\": 92915,\n\t\"./eo.js\": 92915,\n\t\"./es\": 55655,\n\t\"./es-do\": 55251,\n\t\"./es-do.js\": 55251,\n\t\"./es-mx\": 96112,\n\t\"./es-mx.js\": 96112,\n\t\"./es-us\": 71146,\n\t\"./es-us.js\": 71146,\n\t\"./es.js\": 55655,\n\t\"./et\": 5603,\n\t\"./et.js\": 5603,\n\t\"./eu\": 77763,\n\t\"./eu.js\": 77763,\n\t\"./fa\": 76959,\n\t\"./fa.js\": 76959,\n\t\"./fi\": 11897,\n\t\"./fi.js\": 11897,\n\t\"./fil\": 42549,\n\t\"./fil.js\": 42549,\n\t\"./fo\": 94694,\n\t\"./fo.js\": 94694,\n\t\"./fr\": 94470,\n\t\"./fr-ca\": 63049,\n\t\"./fr-ca.js\": 63049,\n\t\"./fr-ch\": 52330,\n\t\"./fr-ch.js\": 52330,\n\t\"./fr.js\": 94470,\n\t\"./fy\": 5044,\n\t\"./fy.js\": 5044,\n\t\"./ga\": 29295,\n\t\"./ga.js\": 29295,\n\t\"./gd\": 2101,\n\t\"./gd.js\": 2101,\n\t\"./gl\": 38794,\n\t\"./gl.js\": 38794,\n\t\"./gom-deva\": 27884,\n\t\"./gom-deva.js\": 27884,\n\t\"./gom-latn\": 23168,\n\t\"./gom-latn.js\": 23168,\n\t\"./gu\": 95349,\n\t\"./gu.js\": 95349,\n\t\"./he\": 24206,\n\t\"./he.js\": 24206,\n\t\"./hi\": 30094,\n\t\"./hi.js\": 30094,\n\t\"./hr\": 30316,\n\t\"./hr.js\": 30316,\n\t\"./hu\": 22138,\n\t\"./hu.js\": 22138,\n\t\"./hy-am\": 11423,\n\t\"./hy-am.js\": 11423,\n\t\"./id\": 29218,\n\t\"./id.js\": 29218,\n\t\"./is\": 90135,\n\t\"./is.js\": 90135,\n\t\"./it\": 90626,\n\t\"./it-ch\": 10150,\n\t\"./it-ch.js\": 10150,\n\t\"./it.js\": 90626,\n\t\"./ja\": 39183,\n\t\"./ja.js\": 39183,\n\t\"./jv\": 24286,\n\t\"./jv.js\": 24286,\n\t\"./ka\": 12105,\n\t\"./ka.js\": 12105,\n\t\"./kk\": 47772,\n\t\"./kk.js\": 47772,\n\t\"./km\": 18758,\n\t\"./km.js\": 18758,\n\t\"./kn\": 79282,\n\t\"./kn.js\": 79282,\n\t\"./ko\": 33730,\n\t\"./ko.js\": 33730,\n\t\"./ku\": 1408,\n\t\"./ku.js\": 1408,\n\t\"./ky\": 33291,\n\t\"./ky.js\": 33291,\n\t\"./lb\": 36841,\n\t\"./lb.js\": 36841,\n\t\"./lo\": 55466,\n\t\"./lo.js\": 55466,\n\t\"./lt\": 57010,\n\t\"./lt.js\": 57010,\n\t\"./lv\": 37595,\n\t\"./lv.js\": 37595,\n\t\"./me\": 39861,\n\t\"./me.js\": 39861,\n\t\"./mi\": 35493,\n\t\"./mi.js\": 35493,\n\t\"./mk\": 95966,\n\t\"./mk.js\": 95966,\n\t\"./ml\": 87341,\n\t\"./ml.js\": 87341,\n\t\"./mn\": 5115,\n\t\"./mn.js\": 5115,\n\t\"./mr\": 10370,\n\t\"./mr.js\": 10370,\n\t\"./ms\": 9847,\n\t\"./ms-my\": 41237,\n\t\"./ms-my.js\": 41237,\n\t\"./ms.js\": 9847,\n\t\"./mt\": 72126,\n\t\"./mt.js\": 72126,\n\t\"./my\": 56165,\n\t\"./my.js\": 56165,\n\t\"./nb\": 64924,\n\t\"./nb.js\": 64924,\n\t\"./ne\": 16744,\n\t\"./ne.js\": 16744,\n\t\"./nl\": 93901,\n\t\"./nl-be\": 59814,\n\t\"./nl-be.js\": 59814,\n\t\"./nl.js\": 93901,\n\t\"./nn\": 83877,\n\t\"./nn.js\": 83877,\n\t\"./oc-lnc\": 92135,\n\t\"./oc-lnc.js\": 92135,\n\t\"./pa-in\": 15858,\n\t\"./pa-in.js\": 15858,\n\t\"./pl\": 64495,\n\t\"./pl.js\": 64495,\n\t\"./pt\": 89520,\n\t\"./pt-br\": 57971,\n\t\"./pt-br.js\": 57971,\n\t\"./pt.js\": 89520,\n\t\"./ro\": 96459,\n\t\"./ro.js\": 96459,\n\t\"./ru\": 21793,\n\t\"./ru.js\": 21793,\n\t\"./sd\": 40950,\n\t\"./sd.js\": 40950,\n\t\"./se\": 10490,\n\t\"./se.js\": 10490,\n\t\"./si\": 90124,\n\t\"./si.js\": 90124,\n\t\"./sk\": 64249,\n\t\"./sk.js\": 64249,\n\t\"./sl\": 14985,\n\t\"./sl.js\": 14985,\n\t\"./sq\": 51104,\n\t\"./sq.js\": 51104,\n\t\"./sr\": 49131,\n\t\"./sr-cyrl\": 79915,\n\t\"./sr-cyrl.js\": 79915,\n\t\"./sr.js\": 49131,\n\t\"./ss\": 85893,\n\t\"./ss.js\": 85893,\n\t\"./sv\": 98760,\n\t\"./sv.js\": 98760,\n\t\"./sw\": 91172,\n\t\"./sw.js\": 91172,\n\t\"./ta\": 27333,\n\t\"./ta.js\": 27333,\n\t\"./te\": 23110,\n\t\"./te.js\": 23110,\n\t\"./tet\": 52095,\n\t\"./tet.js\": 52095,\n\t\"./tg\": 27321,\n\t\"./tg.js\": 27321,\n\t\"./th\": 9041,\n\t\"./th.js\": 9041,\n\t\"./tk\": 19005,\n\t\"./tk.js\": 19005,\n\t\"./tl-ph\": 75768,\n\t\"./tl-ph.js\": 75768,\n\t\"./tlh\": 89444,\n\t\"./tlh.js\": 89444,\n\t\"./tr\": 72397,\n\t\"./tr.js\": 72397,\n\t\"./tzl\": 28254,\n\t\"./tzl.js\": 28254,\n\t\"./tzm\": 51106,\n\t\"./tzm-latn\": 30699,\n\t\"./tzm-latn.js\": 30699,\n\t\"./tzm.js\": 51106,\n\t\"./ug-cn\": 9288,\n\t\"./ug-cn.js\": 9288,\n\t\"./uk\": 67691,\n\t\"./uk.js\": 67691,\n\t\"./ur\": 13795,\n\t\"./ur.js\": 13795,\n\t\"./uz\": 6791,\n\t\"./uz-latn\": 60588,\n\t\"./uz-latn.js\": 60588,\n\t\"./uz.js\": 6791,\n\t\"./vi\": 65666,\n\t\"./vi.js\": 65666,\n\t\"./x-pseudo\": 14378,\n\t\"./x-pseudo.js\": 14378,\n\t\"./yo\": 75805,\n\t\"./yo.js\": 75805,\n\t\"./zh-cn\": 83839,\n\t\"./zh-cn.js\": 83839,\n\t\"./zh-hk\": 55726,\n\t\"./zh-hk.js\": 55726,\n\t\"./zh-mo\": 99807,\n\t\"./zh-mo.js\": 99807,\n\t\"./zh-tw\": 74152,\n\t\"./zh-tw.js\": 74152\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 46700;","// 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 = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(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 = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(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 = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 5992;","__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\t5992: 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 = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(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(function(id) { return 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], function() { return __webpack_require__(95761); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","rootPath","getCurrentUser","uid","rootUrl","generateRemoteUrl","createClient","headers","requesttoken","getRequestToken","data","resultToNode","node","permissions","parseWebdavPermissions","props","owner","previewUrl","generateUrl","nodeData","id","fileid","source","filename","mtime","Date","lastmod","mime","size","root","attributes","displayName","type","File","Folder","getContents","path","client","details","rootResponse","contentsResponse","folder","contents","map","getLoggerBuilder","setApp","detectUser","build","action","FileAction","this","validateAction","_action","iconSvgInline","enabled","exec","execBatch","order","default","inline","renderInline","Error","t","History","nodes","view","length","every","permission","Permission","destination","basename","axios","method","url","emit","logger","error","Promise","all","window","_nc_fileactions","debug","find","search","push","OCP","Files","Navigation","register","name","caption","icon","DeleteSvg","sticky","defaultSortKey","columns","title","render","deletionTime","span","document","createElement","moment","format","textContent","fromNow","translate","sort","nodeA","nodeB","deletionTimeA","webpackContext","req","webpackContextResolve","__webpack_require__","o","e","code","keys","Object","resolve","module","exports","__webpack_module_cache__","moduleId","cachedModule","undefined","loaded","__webpack_modules__","call","m","O","result","chunkIds","fn","priority","notFulfilled","Infinity","i","fulfilled","j","key","splice","r","n","getter","__esModule","d","a","definition","defineProperty","enumerable","get","g","globalThis","Function","obj","prop","prototype","hasOwnProperty","Symbol","toStringTag","value","nmd","paths","children","b","baseURI","self","location","href","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","forEach","bind","nc","__webpack_exports__"],"sourceRoot":""}
\ No newline at end of file diff --git a/dist/settings-vue-settings-personal-security.js b/dist/settings-vue-settings-personal-security.js index 83f282d990e..8b8f4e775f4 100644 --- a/dist/settings-vue-settings-personal-security.js +++ b/dist/settings-vue-settings-personal-security.js @@ -1,3 +1,3 @@ /*! For license information please see settings-vue-settings-personal-security.js.LICENSE.txt */ -!function(){"use strict";var e,n={82773:function(e,n,o){var i=o(79954),a=o(20144),r=o(61361),s=o(4820),p=o(10128),c=(o(65509),o(79753)),d=o(15961),l={ie:/(?:MSIE|Trident|Trident\/7.0; rv)[ :](\d+)/,edge:/^Mozilla\/5\.0 \([^)]+\) AppleWebKit\/[0-9.]+ \(KHTML, like Gecko\) Chrome\/[0-9.]+ (?:Mobile Safari|Safari)\/[0-9.]+ Edge\/[0-9.]+$/,firefox:/^Mozilla\/5\.0 \([^)]*(Windows|OS X|Linux)[^)]+\) Gecko\/[0-9.]+ Firefox\/(\d+)(?:\.\d)?$/,chrome:/^Mozilla\/5\.0 \([^)]*(Windows|OS X|Linux)[^)]+\) AppleWebKit\/[0-9.]+ \(KHTML, like Gecko\) Chrome\/(\d+)[0-9.]+ (?:Mobile Safari|Safari)\/[0-9.]+$/,safari:/^Mozilla\/5\.0 \([^)]*(Windows|OS X)[^)]+\) AppleWebKit\/[0-9.]+ \(KHTML, like Gecko\)(?: Version\/([0-9]+)[0-9.]+)? Safari\/[0-9.A-Z]+$/,androidChrome:/Android.*(?:; (.*) Build\/).*Chrome\/(\d+)[0-9.]+/,iphone:/ *CPU +iPhone +OS +([0-9]+)_(?:[0-9_])+ +like +Mac +OS +X */,ipad:/\(iPad; *CPU +OS +([0-9]+)_(?:[0-9_])+ +like +Mac +OS +X */,iosClient:/^Mozilla\/5\.0 \(iOS\) (?:ownCloud|Nextcloud)-iOS.*$/,androidClient:/^Mozilla\/5\.0 \(Android\) (?:ownCloud|Nextcloud)-android.*$/,iosTalkClient:/^Mozilla\/5\.0 \(iOS\) Nextcloud-Talk.*$/,androidTalkClient:/^Mozilla\/5\.0 \(Android\) Nextcloud-Talk.*$/,davx5:/DAV(?:droid|x5)\/([^ ]+)/,webPirate:/(Sailfish).*WebPirate\/(\d+)/,sailfishBrowser:/(Sailfish).*SailfishBrowser\/(\d+)/,neon:/Neon \d+\.\d+\.\d+\+\d+/},u={ie:t("setting","Internet Explorer"),edge:t("setting","Edge"),firefox:t("setting","Firefox"),chrome:t("setting","Google Chrome"),safari:t("setting","Safari"),androidChrome:t("setting","Google Chrome for Android"),iphone:t("setting","iPhone"),ipad:t("setting","iPad"),iosClient:t("setting","{productName} iOS app",{productName:window.oc_defaults.productName}),androidClient:t("setting","{productName} Android app",{productName:window.oc_defaults.productName}),iosTalkClient:t("setting","{productName} Talk for iOS",{productName:window.oc_defaults.productName}),androidTalkClient:t("setting","{productName} Talk for Android",{productName:window.oc_defaults.productName}),davx5:"DAVx5",webPirate:"WebPirate",sailfishBrowser:"SailfishBrowser",neon:"Neon"},A={ie:"icon-desktop",edge:"icon-desktop",firefox:"icon-desktop",chrome:"icon-desktop",safari:"icon-desktop",androidChrome:"icon-phone",iphone:"icon-phone",ipad:"icon-tablet",iosClient:"icon-phone",androidClient:"icon-phone",iosTalkClient:"icon-phone",androidTalkClient:"icon-phone",davx5:"icon-phone",webPirate:"icon-link",sailfishBrowser:"icon-link"},h={name:"AuthToken",components:{NcActions:d.O3,NcActionButton:d.Js,NcActionCheckbox:d.Bt},props:{token:{type:Object,required:!0}},data:function(){return{showMore:this.token.canScope||this.token.canDelete,renaming:!1,newName:"",oldName:"",actionOpen:!1}},computed:{lastActivityRelative:function(){return OC.Util.relativeModifiedDate(1e3*this.token.lastActivity)},lastActivity:function(){return OC.Util.formatDate(1e3*this.token.lastActivity,"LLL")},iconName:function(){var e=this.token.name.match(/Mozilla\/5\.0 \((\w+)\) (?:mirall|csyncoC)\/(\d+\.\d+\.\d+)/),n="";e&&(this.token.name=t("settings","Sync client - {os}",{os:e[1],version:e[2]}),n="icon-desktop");var o=this.token.name,i=this.token.name;for(var a in l){var r=o.match(l[a]);r&&(i=r[2]&&r[1]?u[a]+" "+r[2]+" - "+r[1]:r[1]?u[a]+" "+r[1]:u[a],n=A[a])}return this.token.current&&(i=t("settings","This session")),{icon:n,name:i}},wiping:function(){return 2===this.token.type}},methods:{startRename:function(){var t=this;this.actionOpen=!1,this.oldName=this.token.name,this.newName=this.token.name,this.renaming=!0,this.$nextTick((function(){t.$refs.input.select()}))},cancelRename:function(){this.renaming=!1,this.$emit("rename",this.token,this.oldName)},revoke:function(){this.actionOpen=!1,this.$emit("delete",this.token)},rename:function(){this.renaming=!1,this.$emit("rename",this.token,this.newName)},wipe:function(){this.actionOpen=!1,this.$emit("wipe",this.token)}}},g=o(93379),f=o.n(g),m=o(7795),v=o.n(m),C=o(90569),k=o.n(C),w=o(3565),y=o.n(w),x=o(19216),b=o.n(x),_=o(44589),T=o.n(_),N=o(12283),B={};B.styleTagTransform=T(),B.setAttributes=y(),B.insert=k().bind(null,"head"),B.domAPI=v(),B.insertStyleElement=b(),f()(N.Z,B),N.Z&&N.Z.locals&&N.Z.locals;var O=o(51900),S=(0,O.Z)(h,(function(){var t=this,e=t._self._c;return e("tr",{class:t.wiping,attrs:{"data-id":t.token.id}},[e("td",{staticClass:"client"},[e("div",{class:t.iconName.icon})]),t._v(" "),e("td",{staticClass:"token-name"},[t.token.canRename&&t.renaming?e("input",{directives:[{name:"model",rawName:"v-model",value:t.newName,expression:"newName"}],ref:"input",attrs:{type:"text"},domProps:{value:t.newName},on:{keyup:[function(e){return!e.type.indexOf("key")&&t._k(e.keyCode,"enter",13,e.key,"Enter")?null:t.rename.apply(null,arguments)},function(e){return!e.type.indexOf("key")&&t._k(e.keyCode,"esc",27,e.key,["Esc","Escape"])?null:t.cancelRename.apply(null,arguments)}],change:t.rename,input:function(e){e.target.composing||(t.newName=e.target.value)}}}):e("span",[t._v(t._s(t.iconName.name))]),t._v(" "),t.wiping?e("span",{staticClass:"wiping-warning"},[t._v("("+t._s(t.t("settings","Marked for remote wipe"))+")")]):t._e()]),t._v(" "),e("td",[e("span",{staticClass:"last-activity",attrs:{title:t.lastActivity}},[t._v(t._s(t.lastActivityRelative))])]),t._v(" "),e("td",{staticClass:"more"},[t.token.current?t._e():e("NcActions",{attrs:{title:t.t("settings","Device settings"),"aria-label":t.t("settings","Device settings"),open:t.actionOpen},on:{"update:open":function(e){t.actionOpen=e}}},[1===t.token.type?e("NcActionCheckbox",{attrs:{checked:t.token.scope.filesystem},on:{change:function(e){return e.stopPropagation(),e.preventDefault(),t.$emit("toggle-scope",t.token,"filesystem",!t.token.scope.filesystem)}}},[t._v("\n\t\t\t\t"+t._s(t.t("settings","Allow filesystem access"))+"\n\t\t\t")]):t._e(),t._v(" "),t.token.canRename?e("NcActionButton",{attrs:{icon:"icon-rename"},on:{click:function(e){return e.stopPropagation(),e.preventDefault(),t.startRename.apply(null,arguments)}}},[t._v("\n\t\t\t\t"+t._s(t.t("settings","Rename"))+"\n\t\t\t")]):t._e(),t._v(" "),t.token.canDelete?[2!==t.token.type?[e("NcActionButton",{attrs:{icon:"icon-delete"},on:{click:function(e){return e.stopPropagation(),e.preventDefault(),t.revoke.apply(null,arguments)}}},[t._v("\n\t\t\t\t\t\t"+t._s(t.t("settings","Revoke"))+"\n\t\t\t\t\t")]),t._v(" "),e("NcActionButton",{attrs:{icon:"icon-delete"},on:{click:function(e){return e.stopPropagation(),e.preventDefault(),t.wipe.apply(null,arguments)}}},[t._v("\n\t\t\t\t\t\t"+t._s(t.t("settings","Wipe device"))+"\n\t\t\t\t\t")])]:2===t.token.type?e("NcActionButton",{attrs:{icon:"icon-delete",title:t.t("settings","Revoke")},on:{click:function(e){return e.stopPropagation(),e.preventDefault(),t.revoke.apply(null,arguments)}}},[t._v("\n\t\t\t\t\t"+t._s(t.t("settings","Revoking this token might prevent the wiping of your device if it has not started the wipe yet."))+"\n\t\t\t\t")]):t._e()]:t._e()],2)],1)])}),[],!1,null,"0f73a400",null),P={name:"AuthTokenList",components:{AuthToken:S.exports},props:{tokens:{type:Array,required:!0}},computed:{sortedTokens:function(){return this.tokens.slice().sort((function(t,e){var n=parseInt(t.lastActivity,10);return parseInt(e.lastActivity,10)-n}))}},methods:{toggleScope:function(t,e,n){this.$emit("toggle-scope",t,e,n)},rename:function(t,e){this.$emit("rename",t,e)},onDelete:function(t){this.$emit("delete",t)},onWipe:function(t){this.$emit("wipe",t)}}},D=o(46533),R={};R.styleTagTransform=T(),R.setAttributes=y(),R.insert=k().bind(null,"head"),R.domAPI=v(),R.insertStyleElement=b(),f()(D.Z,R),D.Z&&D.Z.locals&&D.Z.locals;var Z=o(38778),E={};E.styleTagTransform=T(),E.setAttributes=y(),E.insert=k().bind(null,"head"),E.domAPI=v(),E.insertStyleElement=b(),f()(Z.Z,E),Z.Z&&Z.Z.locals&&Z.Z.locals;var U=(0,O.Z)(P,(function(){var t=this,e=t._self._c;return e("table",{attrs:{id:"app-tokens-table"}},[t.tokens.length?e("thead",[e("tr",[e("th"),t._v(" "),e("th",[t._v(t._s(t.t("settings","Device")))]),t._v(" "),e("th",[t._v(t._s(t.t("settings","Last activity")))]),t._v(" "),e("th")])]):t._e(),t._v(" "),e("tbody",{staticClass:"token-list"},t._l(t.sortedTokens,(function(n){return e("AuthToken",{key:n.id,attrs:{token:n},on:{"toggle-scope":t.toggleScope,rename:t.rename,delete:t.onDelete,wipe:t.onWipe}})})),1)])}),[],!1,null,"1474f25b",null).exports,M=o(147),$=o.n(M),G=o(64024),W=o(10861),q=o.n(W),z=o(80419),L=o(85226),I=o(25108);function j(t,e,n,o,i,a,r){try{var s=t[a](r),p=s.value}catch(t){return void n(t)}s.done?e(p):Promise.resolve(p).then(o,i)}var K={name:"AuthTokenSetupDialogue",components:{Check:z.default,ContentCopy:L.Z,NcButton:q(),QR:$()},props:{add:{type:Function,required:!0}},data:function(){return{adding:!1,loading:!1,deviceName:"",appPassword:"",loginName:"",copied:!1,showQR:!1,qrUrl:""}},computed:{copyTooltipOptions:function(){return this.copied?t("settings","Copied!"):t("settings","Copy")}},methods:{selectInput:function(t){t.currentTarget.select()},submit:function(){var e=this;(0,p.confirmPassword)().then((function(){return e.loading=!0,e.add(e.deviceName)})).then((function(t){e.adding=!0,e.loginName=t.loginName,e.appPassword=t.token;var n=window.location.protocol+"//"+window.location.host+(0,c.getRootUrl)();e.qrUrl="nc://login/user:".concat(t.loginName,"&password:").concat(t.token,"&server:").concat(n),e.$nextTick((function(){e.$refs.appPassword.select()}))})).catch((function(n){I.error("could not create a new app password",n),OC.Notification.showTemporary(t("settings","Error while creating device token")),e.reset()}))},copyPassword:function(){var e,n=this;return(e=regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,navigator.clipboard.writeText(n.appPassword);case 3:n.copied=!0,e.next=11;break;case 6:e.prev=6,e.t0=e.catch(0),n.copied=!1,I.error(e.t0),(0,G.x2)(t("settings","Could not copy app password. Please copy it manually."));case 11:return e.prev=11,setTimeout((function(){n.copied=!1}),4e3),e.finish(11);case 14:case"end":return e.stop()}}),e,null,[[0,6,11,14]])})),function(){var t=this,n=arguments;return new Promise((function(o,i){var a=e.apply(t,n);function r(t){j(a,o,i,r,s,"next",t)}function s(t){j(a,o,i,r,s,"throw",t)}r(void 0)}))})()},reset:function(){this.adding=!1,this.loading=!1,this.showQR=!1,this.qrUrl="",this.deviceName="",this.appPassword="",this.loginName=""}}},Q=K,F=o(30139),X={};X.styleTagTransform=T(),X.setAttributes=y(),X.insert=k().bind(null,"head"),X.domAPI=v(),X.insertStyleElement=b(),f()(F.Z,X),F.Z&&F.Z.locals&&F.Z.locals;var H=(0,O.Z)(Q,(function(){var t=this,e=t._self._c;return t.adding?e("div",{staticClass:"spacing"},[t._v("\n\t"+t._s(t.t("settings","Use the credentials below to configure your app or device."))+"\n\t"+t._s(t.t("settings","For security reasons this password will only be shown once."))+"\n\t"),e("div",{staticClass:"app-password-row"},[e("label",{staticClass:"app-password-label",attrs:{for:"app-username"}},[t._v(t._s(t.t("settings","Username")))]),t._v(" "),e("input",{staticClass:"monospaced",attrs:{id:"app-username",type:"text",readonly:"readonly"},domProps:{value:t.loginName},on:{focus:t.selectInput}})]),t._v(" "),e("div",{staticClass:"app-password-row"},[e("label",{staticClass:"app-password-label",attrs:{for:"app-password"}},[t._v(t._s(t.t("settings","Password")))]),t._v(" "),e("input",{ref:"appPassword",staticClass:"monospaced",attrs:{id:"app-password",type:"text",readonly:"readonly"},domProps:{value:t.appPassword},on:{focus:t.selectInput}}),t._v(" "),e("NcButton",{attrs:{type:"tertiary",title:t.copyTooltipOptions,"aria-label":t.copyTooltipOptions},on:{click:t.copyPassword},scopedSlots:t._u([{key:"icon",fn:function(){return[t.copied?e("Check",{attrs:{size:20}}):e("ContentCopy",{attrs:{size:20}})]},proxy:!0}])}),t._v(" "),e("NcButton",{on:{click:t.reset}},[t._v("\n\t\t\t"+t._s(t.t("settings","Done"))+"\n\t\t")])],1),t._v(" "),e("div",{staticClass:"app-password-row"},[e("span",{staticClass:"app-password-label"}),t._v(" "),t.showQR?e("QR",{attrs:{value:t.qrUrl}}):e("a",{on:{click:function(e){t.showQR=!0}}},[t._v("\n\t\t\t"+t._s(t.t("settings","Show QR code for mobile apps"))+"\n\t\t")])],1)]):e("div",{staticClass:"row spacing",attrs:{id:"generate-app-token-section"}},[e("input",{directives:[{name:"model",rawName:"v-model",value:t.deviceName,expression:"deviceName"}],attrs:{type:"text",maxlength:120,disabled:t.loading,placeholder:t.t("settings","App name")},domProps:{value:t.deviceName},on:{keydown:function(e){return!e.type.indexOf("key")&&t._k(e.keyCode,"enter",13,e.key,"Enter")?null:t.submit.apply(null,arguments)},input:function(e){e.target.composing||(t.deviceName=e.target.value)}}}),t._v(" "),e("NcButton",{attrs:{disabled:t.loading||0===t.deviceName.length,type:"primary"},on:{click:t.submit}},[t._v("\n\t\t"+t._s(t.t("settings","Create new app password"))+"\n\t")])],1)}),[],!1,null,"7831fe39",null),V=H.exports,Y=o(25108);function J(t,e,n,o,i,a,r){try{var s=t[a](r),p=s.value}catch(t){return void n(t)}s.done?e(p):Promise.resolve(p).then(o,i)}var tt=function(t){return function(e){return t(e),e}},et={name:"AuthTokenSection",components:{AuthTokenSetupDialogue:V,AuthTokenList:U},props:{tokens:{type:Array,required:!0},canCreateToken:{type:Boolean,required:!0}},data:function(){return{baseUrl:(0,c.generateUrl)("/settings/personal/authtokens")}},methods:{addNewToken:function(e){var n=this;Y.debug("creating a new app token",e);var o={name:e};return s.default.post(this.baseUrl,o).then((function(t){return t.data})).then(tt((function(){return Y.debug("app token created")}))).then(tt((function(t){return n.tokens.push(t.deviceToken)}))).catch((function(e){throw Y.error.bind("could not create app password",e),OC.Notification.showTemporary(t("settings","Error while creating device token")),e}))},toggleTokenScope:function(e,n,o){Y.debug("updating app token scope",e.id,n,o);var i=e.scope[n];return e.scope[n]=o,this.updateToken(e).then(tt((function(){return Y.debug("app token scope updated")}))).catch((function(o){throw Y.error.bind("could not update app token scope",o),OC.Notification.showTemporary(t("settings","Error while updating device token scope")),e.scope[n]=i,o}))},rename:function(e,n){Y.debug("renaming app token",e.id,e.name,n);var o=e.name;return e.name=n,this.updateToken(e).then(tt((function(){return Y.debug("app token name updated")}))).catch((function(n){Y.error.bind("could not update app token name",n),OC.Notification.showTemporary(t("settings","Error while updating device token name")),e.name=o}))},updateToken:function(t){return s.default.put(this.baseUrl+"/"+t.id,t).then((function(t){return t.data}))},deleteToken:function(e){var n=this;return Y.debug("deleting app token",e),this.tokens=this.tokens.filter((function(t){return t!==e})),s.default.delete(this.baseUrl+"/"+e.id).then((function(t){return t.data})).then(tt((function(){return Y.debug("app token deleted")}))).catch((function(o){Y.error.bind("could not delete app token",o),OC.Notification.showTemporary(t("settings","Error while deleting the token")),n.tokens.push(e)}))},wipeToken:function(e){var n,o=this;return(n=regeneratorRuntime.mark((function n(){return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return Y.debug("wiping app token",e),n.prev=1,n.next=4,(0,p.confirmPassword)();case 4:return n.next=6,new Promise((function(e){OC.dialogs.confirm(t("settings","Do you really want to wipe your data from this device?"),t("settings","Confirm wipe"),e,!0)}));case 6:if(n.sent){n.next=9;break}return Y.debug("wipe aborted by user"),n.abrupt("return");case 9:return n.next=11,s.default.post(o.baseUrl+"/wipe/"+e.id);case 11:Y.debug("app token marked for wipe"),e.type=2,n.next=19;break;case 15:n.prev=15,n.t0=n.catch(1),Y.error("could not wipe app token",n.t0),OC.Notification.showTemporary(t("settings","Error while wiping the device with the token"));case 19:case"end":return n.stop()}}),n,null,[[1,15]])})),function(){var t=this,e=arguments;return new Promise((function(o,i){var a=n.apply(t,e);function r(t){J(a,o,i,r,s,"next",t)}function s(t){J(a,o,i,r,s,"throw",t)}r(void 0)}))})()}}},nt=et,ot=(0,O.Z)(nt,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"section",attrs:{id:"security"}},[e("h2",[t._v(t._s(t.t("settings","Devices & sessions",{},void 0,{sanitize:!1})))]),t._v(" "),e("p",{staticClass:"settings-hint hidden-when-empty"},[t._v("\n\t\t"+t._s(t.t("settings","Web, desktop and mobile clients currently logged in to your account."))+"\n\t")]),t._v(" "),e("AuthTokenList",{attrs:{tokens:t.tokens},on:{"toggle-scope":t.toggleTokenScope,rename:t.rename,delete:t.deleteToken,wipe:t.wipeToken}}),t._v(" "),t.canCreateToken?e("AuthTokenSetupDialogue",{attrs:{add:t.addNewToken}}):t._e()],1)}),[],!1,null,"b9985220",null).exports;o.nc=btoa(OC.requestToken),a.default.use(r.default,{defaultHtml:!1}),a.default.prototype.t=t,new(a.default.extend(ot))({propsData:{tokens:(0,i.j)("settings","app_tokens"),canCreateToken:(0,i.j)("settings","can_create_app_token")}}).$mount("#security-authtokens")},12283:function(t,e,n){var o=n(87537),i=n.n(o),a=n(23645),r=n.n(a)()(i());r.push([t.id,".wiping[data-v-0f73a400]{background-color:var(--color-background-darker)}td[data-v-0f73a400]{border-top:1px solid var(--color-border);max-width:200px;white-space:normal;vertical-align:middle;position:relative}td.client[data-v-0f73a400],td.more[data-v-0f73a400]{overflow:visible;position:relative;width:44px;height:44px}td.token-name[data-v-0f73a400]{padding:10px 6px}td.token-name.token-rename[data-v-0f73a400]{padding:0}td.token-name input[data-v-0f73a400]{width:100%;margin:0}td.token-name .wiping-warning[data-v-0f73a400]{color:var(--color-text-lighter)}td.more[data-v-0f73a400]{padding:0 10px}td.client div[data-v-0f73a400]{opacity:.57;width:44px;height:44px}","",{version:3,sources:["webpack://./apps/settings/src/components/AuthToken.vue"],names:[],mappings:"AACA,yBACC,+CAAA,CAGD,oBACC,wCAAA,CACA,eAAA,CACA,kBAAA,CACA,qBAAA,CACA,iBAAA,CAEA,oDACC,gBAAA,CACA,iBAAA,CACA,UAAA,CACA,WAAA,CAGD,+BACC,gBAAA,CAEA,4CACC,SAAA,CAGD,qCACC,UAAA,CACA,QAAA,CAGF,+CACC,+BAAA,CAGD,yBAEC,cAAA,CAMA,+BACC,WAAA,CACA,UAAA,CACA,WAAA",sourcesContent:["\n.wiping {\n\tbackground-color: var(--color-background-darker);\n}\n\ntd {\n\tborder-top: 1px solid var(--color-border);\n\tmax-width: 200px;\n\twhite-space: normal;\n\tvertical-align: middle;\n\tposition: relative;\n\n\t&%icon {\n\t\toverflow: visible;\n\t\tposition: relative;\n\t\twidth: 44px;\n\t\theight: 44px;\n\t}\n\n\t&.token-name {\n\t\tpadding: 10px 6px;\n\n\t\t&.token-rename {\n\t\t\tpadding: 0;\n\t\t}\n\n\t\tinput {\n\t\t\twidth: 100%;\n\t\t\tmargin: 0;\n\t\t}\n\t}\n\t&.token-name .wiping-warning {\n\t\tcolor: var(--color-text-lighter);\n\t}\n\n\t&.more {\n\t\t@extend %icon;\n\t\tpadding: 0 10px;\n\t}\n\n\t&.client {\n\t\t@extend %icon;\n\n\t\tdiv {\n\t\t\topacity: 0.57;\n\t\t\twidth: 44px;\n\t\t\theight: 44px;\n\t\t}\n\t}\n}\n"],sourceRoot:""}]),e.Z=r},46533:function(t,e,n){var o=n(87537),i=n.n(o),a=n(23645),r=n.n(a)()(i());r.push([t.id,"table[data-v-1474f25b]{width:100%;min-height:50px;padding-top:5px;max-width:580px}table th[data-v-1474f25b]{opacity:.5;padding:10px 0}.token-list td>a.icon-more[data-v-1474f25b]{transition:opacity var(--animation-quick)}.token-list a.icon-more[data-v-1474f25b]{padding:14px;display:block;width:44px;height:44px;opacity:.5}.token-list tr:hover td>a.icon[data-v-1474f25b],.token-list tr td>a.icon[data-v-1474f25b]:focus,.token-list tr.active td>a.icon[data-v-1474f25b]{opacity:1}","",{version:3,sources:["webpack://./apps/settings/src/components/AuthTokenList.vue"],names:[],mappings:"AACA,uBACC,UAAA,CACA,eAAA,CACA,eAAA,CACA,eAAA,CAEA,0BACC,UAAA,CACA,cAAA,CAKD,4CACC,yCAAA,CAGD,yCACC,YAAA,CACA,aAAA,CACA,UAAA,CACA,WAAA,CACA,UAAA,CAIA,iJAGC,SAAA",sourcesContent:["\ntable {\n\twidth: 100%;\n\tmin-height: 50px;\n\tpadding-top: 5px;\n\tmax-width: 580px;\n\n\tth {\n\t\topacity: .5;\n\t\tpadding: 10px 0;\n\t}\n}\n\n.token-list {\n\ttd > a.icon-more {\n\t\ttransition: opacity var(--animation-quick);\n\t}\n\n\ta.icon-more {\n\t\tpadding: 14px;\n\t\tdisplay: block;\n\t\twidth: 44px;\n\t\theight: 44px;\n\t\topacity: .5;\n\t}\n\n\ttr {\n\t\t&:hover td > a.icon,\n\t\ttd > a.icon:focus,\n\t\t&.active td > a.icon {\n\t\t\topacity: 1;\n\t\t}\n\t}\n}\n"],sourceRoot:""}]),e.Z=r},38778:function(t,e,n){var o=n(87537),i=n.n(o),a=n(23645),r=n.n(a)()(i());r.push([t.id,"#app-tokens-table tr>*:nth-child(2){padding-left:6px}#app-tokens-table tr>*:nth-child(3){text-align:right}","",{version:3,sources:["webpack://./apps/settings/src/components/AuthTokenList.vue"],names:[],mappings:"AAEC,oCACC,gBAAA,CAGD,oCACC,gBAAA",sourcesContent:["\n#app-tokens-table {\n\ttr > *:nth-child(2) {\n\t\tpadding-left: 6px;\n\t}\n\n\ttr > *:nth-child(3) {\n\t\ttext-align: right;\n\t}\n}\n"],sourceRoot:""}]),e.Z=r},30139:function(t,e,n){var o=n(87537),i=n.n(o),a=n(23645),r=n.n(a)()(i());r.push([t.id,".app-password-row[data-v-7831fe39]{display:flex;align-items:center}.app-password-row .icon[data-v-7831fe39]{background-size:16px 16px;display:inline-block;position:relative;top:3px;margin-left:5px;margin-right:8px}.app-password-label[data-v-7831fe39]{display:table-cell;padding-right:1em;text-align:right;vertical-align:middle;width:100px}.row input[data-v-7831fe39]{height:44px !important;padding:7px 12px;margin-right:12px;width:200px}.monospaced[data-v-7831fe39]{width:245px;font-family:monospace}.button-vue[data-v-7831fe39]{display:inline-block;margin:3px 3px 3px 3px}.row[data-v-7831fe39]{display:flex;align-items:center}.spacing[data-v-7831fe39]{padding-top:16px}","",{version:3,sources:["webpack://./apps/settings/src/components/AuthTokenSetupDialogue.vue"],names:[],mappings:"AACA,mCACC,YAAA,CACA,kBAAA,CAEA,yCACC,yBAAA,CACA,oBAAA,CACA,iBAAA,CACA,OAAA,CACA,eAAA,CACA,gBAAA,CAKF,qCACC,kBAAA,CACA,iBAAA,CACA,gBAAA,CACA,qBAAA,CACA,WAAA,CAGD,4BACC,sBAAA,CACA,gBAAA,CACA,iBAAA,CACA,WAAA,CAGD,6BACC,WAAA,CACA,qBAAA,CAGD,6BACC,oBAAA,CACA,sBAAA,CAGD,sBACC,YAAA,CACA,kBAAA,CAGD,0BACC,gBAAA",sourcesContent:["\n.app-password-row {\n\tdisplay: flex;\n\talign-items: center;\n\n\t.icon {\n\t\tbackground-size: 16px 16px;\n\t\tdisplay: inline-block;\n\t\tposition: relative;\n\t\ttop: 3px;\n\t\tmargin-left: 5px;\n\t\tmargin-right: 8px;\n\t}\n\n}\n\n.app-password-label {\n\tdisplay: table-cell;\n\tpadding-right: 1em;\n\ttext-align: right;\n\tvertical-align: middle;\n\twidth: 100px;\n}\n\n.row input {\n\theight: 44px !important;\n\tpadding: 7px 12px;\n\tmargin-right: 12px;\n\twidth: 200px;\n}\n\n.monospaced {\n\twidth: 245px;\n\tfont-family: monospace;\n}\n\n.button-vue{\n\tdisplay:inline-block;\n\tmargin: 3px 3px 3px 3px;\n}\n\n.row {\n\tdisplay: flex;\n\talign-items: center;\n}\n\n.spacing {\n\tpadding-top: 16px;\n}\n"],sourceRoot:""}]),e.Z=r}},o={};function i(t){var e=o[t];if(void 0!==e)return e.exports;var a=o[t]={id:t,loaded:!1,exports:{}};return n[t].call(a.exports,a,a.exports,i),a.loaded=!0,a.exports}i.m=n,e=[],i.O=function(t,n,o,a){if(!n){var r=1/0;for(d=0;d<e.length;d++){n=e[d][0],o=e[d][1],a=e[d][2];for(var s=!0,p=0;p<n.length;p++)(!1&a||r>=a)&&Object.keys(i.O).every((function(t){return i.O[t](n[p])}))?n.splice(p--,1):(s=!1,a<r&&(r=a));if(s){e.splice(d--,1);var c=o();void 0!==c&&(t=c)}}return t}a=a||0;for(var d=e.length;d>0&&e[d-1][2]>a;d--)e[d]=e[d-1];e[d]=[n,o,a]},i.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return i.d(e,{a:e}),e},i.d=function(t,e){for(var n in e)i.o(e,n)&&!i.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},i.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),i.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},i.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},i.nmd=function(t){return t.paths=[],t.children||(t.children=[]),t},i.j=4783,function(){i.b=document.baseURI||self.location.href;var t={4783:0};i.O.j=function(e){return 0===t[e]};var e=function(e,n){var o,a,r=n[0],s=n[1],p=n[2],c=0;if(r.some((function(e){return 0!==t[e]}))){for(o in s)i.o(s,o)&&(i.m[o]=s[o]);if(p)var d=p(i)}for(e&&e(n);c<r.length;c++)a=r[c],i.o(t,a)&&t[a]&&t[a][0](),t[a]=0;return i.O(d)},n=self.webpackChunknextcloud=self.webpackChunknextcloud||[];n.forEach(e.bind(null,0)),n.push=e.bind(null,n.push.bind(n))}(),i.nc=void 0;var a=i.O(void 0,[7874],(function(){return i(82773)}));a=i.O(a)}(); -//# sourceMappingURL=settings-vue-settings-personal-security.js.map?v=529dca461a63c6a4187e
\ No newline at end of file +!function(){"use strict";var e,n={82773:function(e,n,o){var i=o(79954),a=o(20144),r=o(61361),s=o(4820),p=o(10128),c=(o(65509),o(79753)),d=o(15961),l={ie:/(?:MSIE|Trident|Trident\/7.0; rv)[ :](\d+)/,edge:/^Mozilla\/5\.0 \([^)]+\) AppleWebKit\/[0-9.]+ \(KHTML, like Gecko\) Chrome\/[0-9.]+ (?:Mobile Safari|Safari)\/[0-9.]+ Edge\/[0-9.]+$/,firefox:/^Mozilla\/5\.0 \([^)]*(Windows|OS X|Linux)[^)]+\) Gecko\/[0-9.]+ Firefox\/(\d+)(?:\.\d)?$/,chrome:/^Mozilla\/5\.0 \([^)]*(Windows|OS X|Linux)[^)]+\) AppleWebKit\/[0-9.]+ \(KHTML, like Gecko\) Chrome\/(\d+)[0-9.]+ (?:Mobile Safari|Safari)\/[0-9.]+$/,safari:/^Mozilla\/5\.0 \([^)]*(Windows|OS X)[^)]+\) AppleWebKit\/[0-9.]+ \(KHTML, like Gecko\)(?: Version\/([0-9]+)[0-9.]+)? Safari\/[0-9.A-Z]+$/,androidChrome:/Android.*(?:; (.*) Build\/).*Chrome\/(\d+)[0-9.]+/,iphone:/ *CPU +iPhone +OS +([0-9]+)_(?:[0-9_])+ +like +Mac +OS +X */,ipad:/\(iPad; *CPU +OS +([0-9]+)_(?:[0-9_])+ +like +Mac +OS +X */,iosClient:/^Mozilla\/5\.0 \(iOS\) (?:ownCloud|Nextcloud)-iOS.*$/,androidClient:/^Mozilla\/5\.0 \(Android\) (?:ownCloud|Nextcloud)-android.*$/,iosTalkClient:/^Mozilla\/5\.0 \(iOS\) Nextcloud-Talk.*$/,androidTalkClient:/^Mozilla\/5\.0 \(Android\) Nextcloud-Talk.*$/,davx5:/DAV(?:droid|x5)\/([^ ]+)/,webPirate:/(Sailfish).*WebPirate\/(\d+)/,sailfishBrowser:/(Sailfish).*SailfishBrowser\/(\d+)/,neon:/Neon \d+\.\d+\.\d+\+\d+/},u={ie:t("setting","Internet Explorer"),edge:t("setting","Edge"),firefox:t("setting","Firefox"),chrome:t("setting","Google Chrome"),safari:t("setting","Safari"),androidChrome:t("setting","Google Chrome for Android"),iphone:t("setting","iPhone"),ipad:t("setting","iPad"),iosClient:t("setting","{productName} iOS app",{productName:window.oc_defaults.productName}),androidClient:t("setting","{productName} Android app",{productName:window.oc_defaults.productName}),iosTalkClient:t("setting","{productName} Talk for iOS",{productName:window.oc_defaults.productName}),androidTalkClient:t("setting","{productName} Talk for Android",{productName:window.oc_defaults.productName}),davx5:"DAVx5",webPirate:"WebPirate",sailfishBrowser:"SailfishBrowser",neon:"Neon"},A={ie:"icon-desktop",edge:"icon-desktop",firefox:"icon-desktop",chrome:"icon-desktop",safari:"icon-desktop",androidChrome:"icon-phone",iphone:"icon-phone",ipad:"icon-tablet",iosClient:"icon-phone",androidClient:"icon-phone",iosTalkClient:"icon-phone",androidTalkClient:"icon-phone",davx5:"icon-phone",webPirate:"icon-link",sailfishBrowser:"icon-link"},h={name:"AuthToken",components:{NcActions:d.O3,NcActionButton:d.Js,NcActionCheckbox:d.Bt},props:{token:{type:Object,required:!0}},data:function(){return{showMore:this.token.canScope||this.token.canDelete,renaming:!1,newName:"",oldName:"",actionOpen:!1}},computed:{lastActivityRelative:function(){return OC.Util.relativeModifiedDate(1e3*this.token.lastActivity)},lastActivity:function(){return OC.Util.formatDate(1e3*this.token.lastActivity,"LLL")},iconName:function(){var e=this.token.name.match(/Mozilla\/5\.0 \((\w+)\) (?:mirall|csyncoC)\/(\d+\.\d+\.\d+)/),n="";e&&(this.token.name=t("settings","Sync client - {os}",{os:e[1],version:e[2]}),n="icon-desktop");var o=this.token.name,i=this.token.name;for(var a in l){var r=o.match(l[a]);r&&(i=r[2]&&r[1]?u[a]+" "+r[2]+" - "+r[1]:r[1]?u[a]+" "+r[1]:u[a],n=A[a])}return this.token.current&&(i=t("settings","This session")),{icon:n,name:i}},wiping:function(){return 2===this.token.type}},methods:{startRename:function(){var t=this;this.actionOpen=!1,this.oldName=this.token.name,this.newName=this.token.name,this.renaming=!0,this.$nextTick((function(){t.$refs.input.select()}))},cancelRename:function(){this.renaming=!1,this.$emit("rename",this.token,this.oldName)},revoke:function(){this.actionOpen=!1,this.$emit("delete",this.token)},rename:function(){this.renaming=!1,this.$emit("rename",this.token,this.newName)},wipe:function(){this.actionOpen=!1,this.$emit("wipe",this.token)}}},g=o(93379),f=o.n(g),m=o(7795),v=o.n(m),C=o(90569),k=o.n(C),w=o(3565),y=o.n(w),x=o(19216),b=o.n(x),_=o(44589),T=o.n(_),N=o(12283),B={};B.styleTagTransform=T(),B.setAttributes=y(),B.insert=k().bind(null,"head"),B.domAPI=v(),B.insertStyleElement=b(),f()(N.Z,B),N.Z&&N.Z.locals&&N.Z.locals;var O=o(51900),S=(0,O.Z)(h,(function(){var t=this,e=t._self._c;return e("tr",{class:t.wiping,attrs:{"data-id":t.token.id}},[e("td",{staticClass:"client"},[e("div",{class:t.iconName.icon})]),t._v(" "),e("td",{staticClass:"token-name"},[t.token.canRename&&t.renaming?e("input",{directives:[{name:"model",rawName:"v-model",value:t.newName,expression:"newName"}],ref:"input",attrs:{type:"text"},domProps:{value:t.newName},on:{keyup:[function(e){return!e.type.indexOf("key")&&t._k(e.keyCode,"enter",13,e.key,"Enter")?null:t.rename.apply(null,arguments)},function(e){return!e.type.indexOf("key")&&t._k(e.keyCode,"esc",27,e.key,["Esc","Escape"])?null:t.cancelRename.apply(null,arguments)}],change:t.rename,input:function(e){e.target.composing||(t.newName=e.target.value)}}}):e("span",[t._v(t._s(t.iconName.name))]),t._v(" "),t.wiping?e("span",{staticClass:"wiping-warning"},[t._v("("+t._s(t.t("settings","Marked for remote wipe"))+")")]):t._e()]),t._v(" "),e("td",[e("span",{staticClass:"last-activity",attrs:{title:t.lastActivity}},[t._v(t._s(t.lastActivityRelative))])]),t._v(" "),e("td",{staticClass:"more"},[t.token.current?t._e():e("NcActions",{attrs:{title:t.t("settings","Device settings"),"aria-label":t.t("settings","Device settings"),open:t.actionOpen},on:{"update:open":function(e){t.actionOpen=e}}},[1===t.token.type?e("NcActionCheckbox",{attrs:{checked:t.token.scope.filesystem},on:{change:function(e){return e.stopPropagation(),e.preventDefault(),t.$emit("toggle-scope",t.token,"filesystem",!t.token.scope.filesystem)}}},[t._v("\n\t\t\t\t"+t._s(t.t("settings","Allow filesystem access"))+"\n\t\t\t")]):t._e(),t._v(" "),t.token.canRename?e("NcActionButton",{attrs:{icon:"icon-rename"},on:{click:function(e){return e.stopPropagation(),e.preventDefault(),t.startRename.apply(null,arguments)}}},[t._v("\n\t\t\t\t"+t._s(t.t("settings","Rename"))+"\n\t\t\t")]):t._e(),t._v(" "),t.token.canDelete?[2!==t.token.type?[e("NcActionButton",{attrs:{icon:"icon-delete"},on:{click:function(e){return e.stopPropagation(),e.preventDefault(),t.revoke.apply(null,arguments)}}},[t._v("\n\t\t\t\t\t\t"+t._s(t.t("settings","Revoke"))+"\n\t\t\t\t\t")]),t._v(" "),e("NcActionButton",{attrs:{icon:"icon-delete"},on:{click:function(e){return e.stopPropagation(),e.preventDefault(),t.wipe.apply(null,arguments)}}},[t._v("\n\t\t\t\t\t\t"+t._s(t.t("settings","Wipe device"))+"\n\t\t\t\t\t")])]:2===t.token.type?e("NcActionButton",{attrs:{icon:"icon-delete",title:t.t("settings","Revoke")},on:{click:function(e){return e.stopPropagation(),e.preventDefault(),t.revoke.apply(null,arguments)}}},[t._v("\n\t\t\t\t\t"+t._s(t.t("settings","Revoking this token might prevent the wiping of your device if it has not started the wipe yet."))+"\n\t\t\t\t")]):t._e()]:t._e()],2)],1)])}),[],!1,null,"0f73a400",null),P={name:"AuthTokenList",components:{AuthToken:S.exports},props:{tokens:{type:Array,required:!0}},computed:{sortedTokens:function(){return this.tokens.slice().sort((function(t,e){var n=parseInt(t.lastActivity,10);return parseInt(e.lastActivity,10)-n}))}},methods:{toggleScope:function(t,e,n){this.$emit("toggle-scope",t,e,n)},rename:function(t,e){this.$emit("rename",t,e)},onDelete:function(t){this.$emit("delete",t)},onWipe:function(t){this.$emit("wipe",t)}}},D=o(46533),R={};R.styleTagTransform=T(),R.setAttributes=y(),R.insert=k().bind(null,"head"),R.domAPI=v(),R.insertStyleElement=b(),f()(D.Z,R),D.Z&&D.Z.locals&&D.Z.locals;var Z=o(71328),E={};E.styleTagTransform=T(),E.setAttributes=y(),E.insert=k().bind(null,"head"),E.domAPI=v(),E.insertStyleElement=b(),f()(Z.Z,E),Z.Z&&Z.Z.locals&&Z.Z.locals;var U=(0,O.Z)(P,(function(){var t=this,e=t._self._c;return e("table",{attrs:{id:"app-tokens-table"}},[t.tokens.length?e("thead",[e("tr",[e("th"),t._v(" "),e("th",[t._v(t._s(t.t("settings","Device")))]),t._v(" "),e("th",[t._v(t._s(t.t("settings","Last activity")))]),t._v(" "),e("th")])]):t._e(),t._v(" "),e("tbody",{staticClass:"token-list"},t._l(t.sortedTokens,(function(n){return e("AuthToken",{key:n.id,attrs:{token:n},on:{"toggle-scope":t.toggleScope,rename:t.rename,delete:t.onDelete,wipe:t.onWipe}})})),1)])}),[],!1,null,"1474f25b",null).exports,M=o(147),$=o.n(M),G=o(64024),W=o(10861),q=o.n(W),z=o(80419),L=o(85226),I=o(25108);function j(t,e,n,o,i,a,r){try{var s=t[a](r),p=s.value}catch(t){return void n(t)}s.done?e(p):Promise.resolve(p).then(o,i)}var K={name:"AuthTokenSetupDialogue",components:{Check:z.default,ContentCopy:L.Z,NcButton:q(),QR:$()},props:{add:{type:Function,required:!0}},data:function(){return{adding:!1,loading:!1,deviceName:"",appPassword:"",loginName:"",copied:!1,showQR:!1,qrUrl:""}},computed:{copyTooltipOptions:function(){return this.copied?t("settings","Copied!"):t("settings","Copy")}},methods:{selectInput:function(t){t.currentTarget.select()},submit:function(){var e=this;(0,p.confirmPassword)().then((function(){return e.loading=!0,e.add(e.deviceName)})).then((function(t){e.adding=!0,e.loginName=t.loginName,e.appPassword=t.token;var n=window.location.protocol+"//"+window.location.host+(0,c.getRootUrl)();e.qrUrl="nc://login/user:".concat(t.loginName,"&password:").concat(t.token,"&server:").concat(n),e.$nextTick((function(){e.$refs.appPassword.select()}))})).catch((function(n){I.error("could not create a new app password",n),OC.Notification.showTemporary(t("settings","Error while creating device token")),e.reset()}))},copyPassword:function(){var e,n=this;return(e=regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,navigator.clipboard.writeText(n.appPassword);case 3:n.copied=!0,e.next=11;break;case 6:e.prev=6,e.t0=e.catch(0),n.copied=!1,I.error(e.t0),(0,G.x2)(t("settings","Could not copy app password. Please copy it manually."));case 11:return e.prev=11,setTimeout((function(){n.copied=!1}),4e3),e.finish(11);case 14:case"end":return e.stop()}}),e,null,[[0,6,11,14]])})),function(){var t=this,n=arguments;return new Promise((function(o,i){var a=e.apply(t,n);function r(t){j(a,o,i,r,s,"next",t)}function s(t){j(a,o,i,r,s,"throw",t)}r(void 0)}))})()},reset:function(){this.adding=!1,this.loading=!1,this.showQR=!1,this.qrUrl="",this.deviceName="",this.appPassword="",this.loginName=""}}},Q=K,F=o(30139),X={};X.styleTagTransform=T(),X.setAttributes=y(),X.insert=k().bind(null,"head"),X.domAPI=v(),X.insertStyleElement=b(),f()(F.Z,X),F.Z&&F.Z.locals&&F.Z.locals;var H=(0,O.Z)(Q,(function(){var t=this,e=t._self._c;return t.adding?e("div",{staticClass:"spacing"},[t._v("\n\t"+t._s(t.t("settings","Use the credentials below to configure your app or device."))+"\n\t"+t._s(t.t("settings","For security reasons this password will only be shown once."))+"\n\t"),e("div",{staticClass:"app-password-row"},[e("label",{staticClass:"app-password-label",attrs:{for:"app-username"}},[t._v(t._s(t.t("settings","Username")))]),t._v(" "),e("input",{staticClass:"monospaced",attrs:{id:"app-username",type:"text",readonly:"readonly"},domProps:{value:t.loginName},on:{focus:t.selectInput}})]),t._v(" "),e("div",{staticClass:"app-password-row"},[e("label",{staticClass:"app-password-label",attrs:{for:"app-password"}},[t._v(t._s(t.t("settings","Password")))]),t._v(" "),e("input",{ref:"appPassword",staticClass:"monospaced",attrs:{id:"app-password",type:"text",readonly:"readonly"},domProps:{value:t.appPassword},on:{focus:t.selectInput}}),t._v(" "),e("NcButton",{attrs:{type:"tertiary",title:t.copyTooltipOptions,"aria-label":t.copyTooltipOptions},on:{click:t.copyPassword},scopedSlots:t._u([{key:"icon",fn:function(){return[t.copied?e("Check",{attrs:{size:20}}):e("ContentCopy",{attrs:{size:20}})]},proxy:!0}])}),t._v(" "),e("NcButton",{on:{click:t.reset}},[t._v("\n\t\t\t"+t._s(t.t("settings","Done"))+"\n\t\t")])],1),t._v(" "),e("div",{staticClass:"app-password-row"},[e("span",{staticClass:"app-password-label"}),t._v(" "),t.showQR?e("QR",{attrs:{value:t.qrUrl}}):e("a",{on:{click:function(e){t.showQR=!0}}},[t._v("\n\t\t\t"+t._s(t.t("settings","Show QR code for mobile apps"))+"\n\t\t")])],1)]):e("div",{staticClass:"row spacing",attrs:{id:"generate-app-token-section"}},[e("input",{directives:[{name:"model",rawName:"v-model",value:t.deviceName,expression:"deviceName"}],attrs:{type:"text",maxlength:120,disabled:t.loading,placeholder:t.t("settings","App name")},domProps:{value:t.deviceName},on:{keydown:function(e){return!e.type.indexOf("key")&&t._k(e.keyCode,"enter",13,e.key,"Enter")?null:t.submit.apply(null,arguments)},input:function(e){e.target.composing||(t.deviceName=e.target.value)}}}),t._v(" "),e("NcButton",{attrs:{disabled:t.loading||0===t.deviceName.length,type:"primary"},on:{click:t.submit}},[t._v("\n\t\t"+t._s(t.t("settings","Create new app password"))+"\n\t")])],1)}),[],!1,null,"7831fe39",null),V=H.exports,Y=o(25108);function J(t,e,n,o,i,a,r){try{var s=t[a](r),p=s.value}catch(t){return void n(t)}s.done?e(p):Promise.resolve(p).then(o,i)}var tt=function(t){return function(e){return t(e),e}},et={name:"AuthTokenSection",components:{AuthTokenSetupDialogue:V,AuthTokenList:U},props:{tokens:{type:Array,required:!0},canCreateToken:{type:Boolean,required:!0}},data:function(){return{baseUrl:(0,c.generateUrl)("/settings/personal/authtokens")}},methods:{addNewToken:function(e){var n=this;Y.debug("creating a new app token",e);var o={name:e};return s.default.post(this.baseUrl,o).then((function(t){return t.data})).then(tt((function(){return Y.debug("app token created")}))).then(tt((function(t){return n.tokens.push(t.deviceToken)}))).catch((function(e){throw Y.error.bind("could not create app password",e),OC.Notification.showTemporary(t("settings","Error while creating device token")),e}))},toggleTokenScope:function(e,n,o){Y.debug("updating app token scope",e.id,n,o);var i=e.scope[n];return e.scope[n]=o,this.updateToken(e).then(tt((function(){return Y.debug("app token scope updated")}))).catch((function(o){throw Y.error.bind("could not update app token scope",o),OC.Notification.showTemporary(t("settings","Error while updating device token scope")),e.scope[n]=i,o}))},rename:function(e,n){Y.debug("renaming app token",e.id,e.name,n);var o=e.name;return e.name=n,this.updateToken(e).then(tt((function(){return Y.debug("app token name updated")}))).catch((function(n){Y.error.bind("could not update app token name",n),OC.Notification.showTemporary(t("settings","Error while updating device token name")),e.name=o}))},updateToken:function(t){return s.default.put(this.baseUrl+"/"+t.id,t).then((function(t){return t.data}))},deleteToken:function(e){var n=this;return Y.debug("deleting app token",e),this.tokens=this.tokens.filter((function(t){return t!==e})),s.default.delete(this.baseUrl+"/"+e.id).then((function(t){return t.data})).then(tt((function(){return Y.debug("app token deleted")}))).catch((function(o){Y.error.bind("could not delete app token",o),OC.Notification.showTemporary(t("settings","Error while deleting the token")),n.tokens.push(e)}))},wipeToken:function(e){var n,o=this;return(n=regeneratorRuntime.mark((function n(){return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return Y.debug("wiping app token",e),n.prev=1,n.next=4,(0,p.confirmPassword)();case 4:return n.next=6,new Promise((function(e){OC.dialogs.confirm(t("settings","Do you really want to wipe your data from this device?"),t("settings","Confirm wipe"),e,!0)}));case 6:if(n.sent){n.next=9;break}return Y.debug("wipe aborted by user"),n.abrupt("return");case 9:return n.next=11,s.default.post(o.baseUrl+"/wipe/"+e.id);case 11:Y.debug("app token marked for wipe"),e.type=2,n.next=19;break;case 15:n.prev=15,n.t0=n.catch(1),Y.error("could not wipe app token",n.t0),OC.Notification.showTemporary(t("settings","Error while wiping the device with the token"));case 19:case"end":return n.stop()}}),n,null,[[1,15]])})),function(){var t=this,e=arguments;return new Promise((function(o,i){var a=n.apply(t,e);function r(t){J(a,o,i,r,s,"next",t)}function s(t){J(a,o,i,r,s,"throw",t)}r(void 0)}))})()}}},nt=et,ot=(0,O.Z)(nt,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"section",attrs:{id:"security"}},[e("h2",[t._v(t._s(t.t("settings","Devices & sessions",{},void 0,{sanitize:!1})))]),t._v(" "),e("p",{staticClass:"settings-hint hidden-when-empty"},[t._v("\n\t\t"+t._s(t.t("settings","Web, desktop and mobile clients currently logged in to your account."))+"\n\t")]),t._v(" "),e("AuthTokenList",{attrs:{tokens:t.tokens},on:{"toggle-scope":t.toggleTokenScope,rename:t.rename,delete:t.deleteToken,wipe:t.wipeToken}}),t._v(" "),t.canCreateToken?e("AuthTokenSetupDialogue",{attrs:{add:t.addNewToken}}):t._e()],1)}),[],!1,null,"b9985220",null).exports;o.nc=btoa(OC.requestToken),a.default.use(r.default,{defaultHtml:!1}),a.default.prototype.t=t,new(a.default.extend(ot))({propsData:{tokens:(0,i.j)("settings","app_tokens"),canCreateToken:(0,i.j)("settings","can_create_app_token")}}).$mount("#security-authtokens")},12283:function(t,e,n){var o=n(87537),i=n.n(o),a=n(23645),r=n.n(a)()(i());r.push([t.id,".wiping[data-v-0f73a400]{background-color:var(--color-background-darker)}td[data-v-0f73a400]{border-top:1px solid var(--color-border);max-width:200px;white-space:normal;vertical-align:middle;position:relative}td.client[data-v-0f73a400],td.more[data-v-0f73a400]{overflow:visible;position:relative;width:44px;height:44px}td.token-name[data-v-0f73a400]{padding:10px 6px}td.token-name.token-rename[data-v-0f73a400]{padding:0}td.token-name input[data-v-0f73a400]{width:100%;margin:0}td.token-name .wiping-warning[data-v-0f73a400]{color:var(--color-text-lighter)}td.more[data-v-0f73a400]{padding:0 10px}td.client div[data-v-0f73a400]{opacity:.57;width:44px;height:44px}","",{version:3,sources:["webpack://./apps/settings/src/components/AuthToken.vue"],names:[],mappings:"AACA,yBACC,+CAAA,CAGD,oBACC,wCAAA,CACA,eAAA,CACA,kBAAA,CACA,qBAAA,CACA,iBAAA,CAEA,oDACC,gBAAA,CACA,iBAAA,CACA,UAAA,CACA,WAAA,CAGD,+BACC,gBAAA,CAEA,4CACC,SAAA,CAGD,qCACC,UAAA,CACA,QAAA,CAGF,+CACC,+BAAA,CAGD,yBAEC,cAAA,CAMA,+BACC,WAAA,CACA,UAAA,CACA,WAAA",sourcesContent:["\n.wiping {\n\tbackground-color: var(--color-background-darker);\n}\n\ntd {\n\tborder-top: 1px solid var(--color-border);\n\tmax-width: 200px;\n\twhite-space: normal;\n\tvertical-align: middle;\n\tposition: relative;\n\n\t&%icon {\n\t\toverflow: visible;\n\t\tposition: relative;\n\t\twidth: 44px;\n\t\theight: 44px;\n\t}\n\n\t&.token-name {\n\t\tpadding: 10px 6px;\n\n\t\t&.token-rename {\n\t\t\tpadding: 0;\n\t\t}\n\n\t\tinput {\n\t\t\twidth: 100%;\n\t\t\tmargin: 0;\n\t\t}\n\t}\n\t&.token-name .wiping-warning {\n\t\tcolor: var(--color-text-lighter);\n\t}\n\n\t&.more {\n\t\t@extend %icon;\n\t\tpadding: 0 10px;\n\t}\n\n\t&.client {\n\t\t@extend %icon;\n\n\t\tdiv {\n\t\t\topacity: 0.57;\n\t\t\twidth: 44px;\n\t\t\theight: 44px;\n\t\t}\n\t}\n}\n"],sourceRoot:""}]),e.Z=r},46533:function(t,e,n){var o=n(87537),i=n.n(o),a=n(23645),r=n.n(a)()(i());r.push([t.id,"table[data-v-1474f25b]{width:100%;min-height:50px;padding-top:5px;max-width:580px}table th[data-v-1474f25b]{opacity:.5;padding:10px 0}.token-list td>a.icon-more[data-v-1474f25b]{transition:opacity var(--animation-quick)}.token-list a.icon-more[data-v-1474f25b]{padding:14px;display:block;width:44px;height:44px;opacity:.5}.token-list tr:hover td>a.icon[data-v-1474f25b],.token-list tr td>a.icon[data-v-1474f25b]:focus,.token-list tr.active td>a.icon[data-v-1474f25b]{opacity:1}","",{version:3,sources:["webpack://./apps/settings/src/components/AuthTokenList.vue"],names:[],mappings:"AACA,uBACC,UAAA,CACA,eAAA,CACA,eAAA,CACA,eAAA,CAEA,0BACC,UAAA,CACA,cAAA,CAKD,4CACC,yCAAA,CAGD,yCACC,YAAA,CACA,aAAA,CACA,UAAA,CACA,WAAA,CACA,UAAA,CAIA,iJAGC,SAAA",sourcesContent:["\ntable {\n\twidth: 100%;\n\tmin-height: 50px;\n\tpadding-top: 5px;\n\tmax-width: 580px;\n\n\tth {\n\t\topacity: .5;\n\t\tpadding: 10px 0;\n\t}\n}\n\n.token-list {\n\ttd > a.icon-more {\n\t\ttransition: opacity var(--animation-quick);\n\t}\n\n\ta.icon-more {\n\t\tpadding: 14px;\n\t\tdisplay: block;\n\t\twidth: 44px;\n\t\theight: 44px;\n\t\topacity: .5;\n\t}\n\n\ttr {\n\t\t&:hover td > a.icon,\n\t\ttd > a.icon:focus,\n\t\t&.active td > a.icon {\n\t\t\topacity: 1;\n\t\t}\n\t}\n}\n"],sourceRoot:""}]),e.Z=r},71328:function(t,e,n){var o=n(87537),i=n.n(o),a=n(23645),r=n.n(a)()(i());r.push([t.id,"#app-tokens-table tr>*:nth-child(2){padding-left:6px}#app-tokens-table tr>*:nth-child(3){text-align:right}","",{version:3,sources:["webpack://./apps/settings/src/components/AuthTokenList.vue"],names:[],mappings:"AAEC,oCACC,gBAAA,CAGD,oCACC,gBAAA",sourcesContent:["\n#app-tokens-table {\n\ttr > *:nth-child(2) {\n\t\tpadding-left: 6px;\n\t}\n\n\ttr > *:nth-child(3) {\n\t\ttext-align: right;\n\t}\n}\n"],sourceRoot:""}]),e.Z=r},30139:function(t,e,n){var o=n(87537),i=n.n(o),a=n(23645),r=n.n(a)()(i());r.push([t.id,".app-password-row[data-v-7831fe39]{display:flex;align-items:center}.app-password-row .icon[data-v-7831fe39]{background-size:16px 16px;display:inline-block;position:relative;top:3px;margin-left:5px;margin-right:8px}.app-password-label[data-v-7831fe39]{display:table-cell;padding-right:1em;text-align:right;vertical-align:middle;width:100px}.row input[data-v-7831fe39]{height:44px !important;padding:7px 12px;margin-right:12px;width:200px}.monospaced[data-v-7831fe39]{width:245px;font-family:monospace}.button-vue[data-v-7831fe39]{display:inline-block;margin:3px 3px 3px 3px}.row[data-v-7831fe39]{display:flex;align-items:center}.spacing[data-v-7831fe39]{padding-top:16px}","",{version:3,sources:["webpack://./apps/settings/src/components/AuthTokenSetupDialogue.vue"],names:[],mappings:"AACA,mCACC,YAAA,CACA,kBAAA,CAEA,yCACC,yBAAA,CACA,oBAAA,CACA,iBAAA,CACA,OAAA,CACA,eAAA,CACA,gBAAA,CAKF,qCACC,kBAAA,CACA,iBAAA,CACA,gBAAA,CACA,qBAAA,CACA,WAAA,CAGD,4BACC,sBAAA,CACA,gBAAA,CACA,iBAAA,CACA,WAAA,CAGD,6BACC,WAAA,CACA,qBAAA,CAGD,6BACC,oBAAA,CACA,sBAAA,CAGD,sBACC,YAAA,CACA,kBAAA,CAGD,0BACC,gBAAA",sourcesContent:["\n.app-password-row {\n\tdisplay: flex;\n\talign-items: center;\n\n\t.icon {\n\t\tbackground-size: 16px 16px;\n\t\tdisplay: inline-block;\n\t\tposition: relative;\n\t\ttop: 3px;\n\t\tmargin-left: 5px;\n\t\tmargin-right: 8px;\n\t}\n\n}\n\n.app-password-label {\n\tdisplay: table-cell;\n\tpadding-right: 1em;\n\ttext-align: right;\n\tvertical-align: middle;\n\twidth: 100px;\n}\n\n.row input {\n\theight: 44px !important;\n\tpadding: 7px 12px;\n\tmargin-right: 12px;\n\twidth: 200px;\n}\n\n.monospaced {\n\twidth: 245px;\n\tfont-family: monospace;\n}\n\n.button-vue{\n\tdisplay:inline-block;\n\tmargin: 3px 3px 3px 3px;\n}\n\n.row {\n\tdisplay: flex;\n\talign-items: center;\n}\n\n.spacing {\n\tpadding-top: 16px;\n}\n"],sourceRoot:""}]),e.Z=r}},o={};function i(t){var e=o[t];if(void 0!==e)return e.exports;var a=o[t]={id:t,loaded:!1,exports:{}};return n[t].call(a.exports,a,a.exports,i),a.loaded=!0,a.exports}i.m=n,e=[],i.O=function(t,n,o,a){if(!n){var r=1/0;for(d=0;d<e.length;d++){n=e[d][0],o=e[d][1],a=e[d][2];for(var s=!0,p=0;p<n.length;p++)(!1&a||r>=a)&&Object.keys(i.O).every((function(t){return i.O[t](n[p])}))?n.splice(p--,1):(s=!1,a<r&&(r=a));if(s){e.splice(d--,1);var c=o();void 0!==c&&(t=c)}}return t}a=a||0;for(var d=e.length;d>0&&e[d-1][2]>a;d--)e[d]=e[d-1];e[d]=[n,o,a]},i.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return i.d(e,{a:e}),e},i.d=function(t,e){for(var n in e)i.o(e,n)&&!i.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},i.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),i.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},i.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},i.nmd=function(t){return t.paths=[],t.children||(t.children=[]),t},i.j=4783,function(){i.b=document.baseURI||self.location.href;var t={4783:0};i.O.j=function(e){return 0===t[e]};var e=function(e,n){var o,a,r=n[0],s=n[1],p=n[2],c=0;if(r.some((function(e){return 0!==t[e]}))){for(o in s)i.o(s,o)&&(i.m[o]=s[o]);if(p)var d=p(i)}for(e&&e(n);c<r.length;c++)a=r[c],i.o(t,a)&&t[a]&&t[a][0](),t[a]=0;return i.O(d)},n=self.webpackChunknextcloud=self.webpackChunknextcloud||[];n.forEach(e.bind(null,0)),n.push=e.bind(null,n.push.bind(n))}(),i.nc=void 0;var a=i.O(void 0,[7874],(function(){return i(82773)}));a=i.O(a)}(); +//# sourceMappingURL=settings-vue-settings-personal-security.js.map?v=2a58f86278ad9ad866f1
\ No newline at end of file diff --git a/dist/settings-vue-settings-personal-security.js.map b/dist/settings-vue-settings-personal-security.js.map index f3e49124fc7..7e493f9ec8e 100644 --- a/dist/settings-vue-settings-personal-security.js.map +++ b/dist/settings-vue-settings-personal-security.js.map @@ -1 +1 @@ -{"version":3,"file":"settings-vue-settings-personal-security.js?v=529dca461a63c6a4187e","mappings":";6BAAIA,sHC4FJ,GACAC,GAAAA,6CAEAC,KAAAA,uIAEAC,QAAAA,4FAEAC,OAAAA,uJAEAC,OAAAA,2IAEAC,cAAAA,oDACAC,OAAAA,8DACAC,KAAAA,6DACAC,UAAAA,uDACAC,cAAAA,+DACAC,cAAAA,2CACAC,kBAAAA,+CAEAC,MAAAA,2BAEAC,UAAAA,+BAEAC,gBAAAA,qCAEAC,KAAAA,2BAEA,GACAf,GAAAA,EAAAA,UAAAA,qBACAC,KAAAA,EAAAA,UAAAA,QACAC,QAAAA,EAAAA,UAAAA,WACAC,OAAAA,EAAAA,UAAAA,iBACAC,OAAAA,EAAAA,UAAAA,UACAC,cAAAA,EAAAA,UAAAA,6BACAC,OAAAA,EAAAA,UAAAA,UACAC,KAAAA,EAAAA,UAAAA,QACAC,UAAAA,EAAAA,UAAAA,wBAAAA,CAAAQ,YAAAA,OAAAA,YAAAA,cACAP,cAAAA,EAAAA,UAAAA,4BAAAA,CAAAO,YAAAA,OAAAA,YAAAA,cACAN,cAAAA,EAAAA,UAAAA,6BAAAA,CAAAM,YAAAA,OAAAA,YAAAA,cACAL,kBAAAA,EAAAA,UAAAA,iCAAAA,CAAAK,YAAAA,OAAAA,YAAAA,cACAJ,MAAAA,QACAC,UAAAA,YACAC,gBAAAA,kBACAC,KAAAA,QAEA,GACAf,GAAAA,eACAC,KAAAA,eACAC,QAAAA,eACAC,OAAAA,eACAC,OAAAA,eACAC,cAAAA,aACAC,OAAAA,aACAC,KAAAA,cACAC,UAAAA,aACAC,cAAAA,aACAC,cAAAA,aACAC,kBAAAA,aACAC,MAAAA,aACAC,UAAAA,YACAC,gBAAAA,aCxJsL,ED2JtL,CACAG,KAAAA,YACAC,WAAAA,CACAC,UAAAA,EAAAA,GACAC,eAAAA,EAAAA,GACAC,iBAAAA,EAAAA,IAEAC,MAAAA,CACAC,MAAAA,CACAC,KAAAA,OACAC,UAAAA,IAGAC,KAAAA,WACA,OACAC,SAAAA,KAAAA,MAAAA,UAAAA,KAAAA,MAAAA,UACAC,UAAAA,EACAC,QAAAA,GACAC,QAAAA,GACAC,YAAAA,EAEA,EACAC,SAAAA,CACAC,qBAAAA,WACA,gEACA,EACAC,aAAAA,WACA,4DACA,EACAC,SAAAA,WAEA,2FAEA,KACA,IAEA,mDACAC,GAAAA,EAAAA,GACAC,QAAAA,EAAAA,KAEAC,EAAAA,gBAIA,sBACA,kBACA,gBACA,oBACA,IAEArB,EADA,WACAA,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,MAAAA,EAAAA,GACA,KACAA,EAAAA,GAAAA,IAAAA,EAAAA,GAEAA,EAAAA,GAGAqB,EAAAA,EAAAA,GAEA,CAKA,OAJA,qBACArB,EAAAA,EAAAA,WAAAA,iBAGA,CACAqB,KAAAA,EACArB,KAAAA,EAEA,EACAsB,OAAAA,WACA,0BACA,GAEAC,QAAAA,CACAC,YAAAA,WAAA,WAEA,mBAEA,6BACA,6BACA,iBACA,2BACA,sBACA,GACA,EACAC,aAAAA,WACA,iBACA,4CACA,EACAC,OAAAA,WACA,mBACA,+BACA,EACAC,OAAAA,WACA,iBACA,4CACA,EACAC,KAAAA,WACA,mBACA,6BACA,qIEpPIC,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,WALlD,eCbIM,GAAY,OACd,GCTW,WAAkB,IAAIC,EAAIC,KAAKC,EAAGF,EAAIG,MAAMD,GAAG,OAAOA,EAAG,KAAK,CAACE,MAAMJ,EAAId,OAAOmB,MAAM,CAAC,UAAUL,EAAI9B,MAAMoC,KAAK,CAACJ,EAAG,KAAK,CAACK,YAAY,UAAU,CAACL,EAAG,MAAM,CAACE,MAAMJ,EAAIlB,SAASG,SAASe,EAAIQ,GAAG,KAAKN,EAAG,KAAK,CAACK,YAAY,cAAc,CAAEP,EAAI9B,MAAMuC,WAAaT,EAAIzB,SAAU2B,EAAG,QAAQ,CAACQ,WAAW,CAAC,CAAC9C,KAAK,QAAQ+C,QAAQ,UAAUC,MAAOZ,EAAIxB,QAASqC,WAAW,YAAYC,IAAI,QAAQT,MAAM,CAAC,KAAO,QAAQU,SAAS,CAAC,MAASf,EAAIxB,SAAUwC,GAAG,CAAC,MAAQ,CAAC,SAASC,GAAQ,OAAIA,EAAO9C,KAAK+C,QAAQ,QAAQlB,EAAImB,GAAGF,EAAOG,QAAQ,QAAQ,GAAGH,EAAOI,IAAI,SAAgB,KAAYrB,EAAIT,OAAO+B,MAAM,KAAMC,UAAU,EAAE,SAASN,GAAQ,OAAIA,EAAO9C,KAAK+C,QAAQ,QAAQlB,EAAImB,GAAGF,EAAOG,QAAQ,MAAM,GAAGH,EAAOI,IAAI,CAAC,MAAM,WAAkB,KAAYrB,EAAIX,aAAaiC,MAAM,KAAMC,UAAU,GAAG,OAASvB,EAAIT,OAAO,MAAQ,SAAS0B,GAAWA,EAAOO,OAAOC,YAAiBzB,EAAIxB,QAAQyC,EAAOO,OAAOZ,MAAK,KAAKV,EAAG,OAAO,CAACF,EAAIQ,GAAGR,EAAI0B,GAAG1B,EAAIlB,SAASlB,SAASoC,EAAIQ,GAAG,KAAMR,EAAId,OAAQgB,EAAG,OAAO,CAACK,YAAY,kBAAkB,CAACP,EAAIQ,GAAG,IAAIR,EAAI0B,GAAG1B,EAAI2B,EAAE,WAAY,2BAA2B,OAAO3B,EAAI4B,OAAO5B,EAAIQ,GAAG,KAAKN,EAAG,KAAK,CAACA,EAAG,OAAO,CAACK,YAAY,gBAAgBF,MAAM,CAAC,MAAQL,EAAInB,eAAe,CAACmB,EAAIQ,GAAGR,EAAI0B,GAAG1B,EAAIpB,2BAA2BoB,EAAIQ,GAAG,KAAKN,EAAG,KAAK,CAACK,YAAY,QAAQ,CAAGP,EAAI9B,MAAM2D,QAA8zD7B,EAAI4B,KAAzzD1B,EAAG,YAAY,CAACG,MAAM,CAAC,MAAQL,EAAI2B,EAAE,WAAY,mBAAmB,aAAa3B,EAAI2B,EAAE,WAAY,mBAAmB,KAAO3B,EAAItB,YAAYsC,GAAG,CAAC,cAAc,SAASC,GAAQjB,EAAItB,WAAWuC,CAAM,IAAI,CAAqB,IAAnBjB,EAAI9B,MAAMC,KAAY+B,EAAG,mBAAmB,CAACG,MAAM,CAAC,QAAUL,EAAI9B,MAAM4D,MAAMC,YAAYf,GAAG,CAAC,OAAS,SAASC,GAAyD,OAAjDA,EAAOe,kBAAkBf,EAAOgB,iBAAwBjC,EAAIkC,MAAM,eAAgBlC,EAAI9B,MAAO,cAAe8B,EAAI9B,MAAM4D,MAAMC,WAAW,IAAI,CAAC/B,EAAIQ,GAAG,aAAaR,EAAI0B,GAAG1B,EAAI2B,EAAE,WAAY,4BAA4B,cAAc3B,EAAI4B,KAAK5B,EAAIQ,GAAG,KAAMR,EAAI9B,MAAMuC,UAAWP,EAAG,iBAAiB,CAACG,MAAM,CAAC,KAAO,eAAeW,GAAG,CAAC,MAAQ,SAASC,GAAyD,OAAjDA,EAAOe,kBAAkBf,EAAOgB,iBAAwBjC,EAAIZ,YAAYkC,MAAM,KAAMC,UAAU,IAAI,CAACvB,EAAIQ,GAAG,aAAaR,EAAI0B,GAAG1B,EAAI2B,EAAE,WAAY,WAAW,cAAc3B,EAAI4B,KAAK5B,EAAIQ,GAAG,KAAMR,EAAI9B,MAAMiE,UAAW,CAAqB,IAAnBnC,EAAI9B,MAAMC,KAAY,CAAC+B,EAAG,iBAAiB,CAACG,MAAM,CAAC,KAAO,eAAeW,GAAG,CAAC,MAAQ,SAASC,GAAyD,OAAjDA,EAAOe,kBAAkBf,EAAOgB,iBAAwBjC,EAAIV,OAAOgC,MAAM,KAAMC,UAAU,IAAI,CAACvB,EAAIQ,GAAG,iBAAiBR,EAAI0B,GAAG1B,EAAI2B,EAAE,WAAY,WAAW,kBAAkB3B,EAAIQ,GAAG,KAAKN,EAAG,iBAAiB,CAACG,MAAM,CAAC,KAAO,eAAeW,GAAG,CAAC,MAAQ,SAASC,GAAyD,OAAjDA,EAAOe,kBAAkBf,EAAOgB,iBAAwBjC,EAAIR,KAAK8B,MAAM,KAAMC,UAAU,IAAI,CAACvB,EAAIQ,GAAG,iBAAiBR,EAAI0B,GAAG1B,EAAI2B,EAAE,WAAY,gBAAgB,mBAAuC,IAAnB3B,EAAI9B,MAAMC,KAAY+B,EAAG,iBAAiB,CAACG,MAAM,CAAC,KAAO,cAAc,MAAQL,EAAI2B,EAAE,WAAY,WAAWX,GAAG,CAAC,MAAQ,SAASC,GAAyD,OAAjDA,EAAOe,kBAAkBf,EAAOgB,iBAAwBjC,EAAIV,OAAOgC,MAAM,KAAMC,UAAU,IAAI,CAACvB,EAAIQ,GAAG,eAAeR,EAAI0B,GAAG1B,EAAI2B,EAAE,WAAY,oGAAoG,gBAAgB3B,EAAI4B,MAAM5B,EAAI4B,MAAM,IAAa,IACnlG,GACsB,IDUpB,EACA,KACA,WACA,MEfwL,EC8C1L,CACAhE,KAAAA,gBACAC,WAAAA,CACAuE,UH9BerC,EAAiB,SGgChC9B,MAAAA,CACAoE,OAAAA,CACAlE,KAAAA,MACAC,UAAAA,IAGAO,SAAAA,CACA2D,aAAAA,WACA,+CACA,kCAEA,OADA,4BACA,CACA,GACA,GAEAnD,QAAAA,CACAoD,YAAAA,SAAAA,EAAAA,EAAAA,GAEA,gCACA,EACAhD,OAAAA,SAAAA,EAAAA,GAEA,wBACA,EACAiD,SAAAA,SAAAA,GAEA,sBACA,EACAC,OAAAA,SAAAA,GAEA,oBACA,eCvEI,EAAU,CAAC,EAEf,EAAQ/C,kBAAoB,IAC5B,EAAQC,cAAgB,IAElB,EAAQC,OAAS,SAAc,KAAM,QAE3C,EAAQC,OAAS,IACjB,EAAQC,mBAAqB,IAEhB,IAAI,IAAS,GAKJ,KAAW,YAAiB,WALlD,eCVI,EAAU,CAAC,EAEf,EAAQJ,kBAAoB,IAC5B,EAAQC,cAAgB,IAElB,EAAQC,OAAS,SAAc,KAAM,QAE3C,EAAQC,OAAS,IACjB,EAAQC,mBAAqB,IAEhB,IAAI,IAAS,GAKJ,KAAW,YAAiB,WALlD,ICDA,GAXgB,OACd,GCVW,WAAkB,IAAIE,EAAIC,KAAKC,EAAGF,EAAIG,MAAMD,GAAG,OAAOA,EAAG,QAAQ,CAACG,MAAM,CAAC,GAAK,qBAAqB,CAAEL,EAAIqC,OAAOK,OAAQxC,EAAG,QAAQ,CAACA,EAAG,KAAK,CAACA,EAAG,MAAMF,EAAIQ,GAAG,KAAKN,EAAG,KAAK,CAACF,EAAIQ,GAAGR,EAAI0B,GAAG1B,EAAI2B,EAAE,WAAY,cAAc3B,EAAIQ,GAAG,KAAKN,EAAG,KAAK,CAACF,EAAIQ,GAAGR,EAAI0B,GAAG1B,EAAI2B,EAAE,WAAY,qBAAqB3B,EAAIQ,GAAG,KAAKN,EAAG,UAAUF,EAAI4B,KAAK5B,EAAIQ,GAAG,KAAKN,EAAG,QAAQ,CAACK,YAAY,cAAcP,EAAI2C,GAAI3C,EAAIsC,cAAc,SAASpE,GAAO,OAAOgC,EAAG,YAAY,CAACmB,IAAInD,EAAMoC,GAAGD,MAAM,CAAC,MAAQnC,GAAO8C,GAAG,CAAC,eAAehB,EAAIuC,YAAY,OAASvC,EAAIT,OAAO,OAASS,EAAIwC,SAAS,KAAOxC,EAAIyC,SAAS,IAAG,IAC5kB,GACsB,IDWpB,EACA,KACA,WACA,MAI8B,mNEyEhC,OACA7E,KAAAA,yBACAC,WAAAA,CACA+E,MAAAA,EAAAA,QACAC,YAAAA,EAAAA,EACAC,SAAAA,IACAC,GAAAA,KAEA9E,MAAAA,CACA+E,IAAAA,CACA7E,KAAAA,SACAC,UAAAA,IAGAC,KAAAA,WACA,OACA4E,QAAAA,EACAC,SAAAA,EACAC,WAAAA,GACAC,YAAAA,GACAC,UAAAA,GACAC,QAAAA,EACAC,QAAAA,EACAC,MAAAA,GAEA,EACA7E,SAAAA,CACA8E,mBAAAA,WACA,mBACA,wBAEA,oBACA,GAEAtE,QAAAA,CACAuE,YAAAA,SAAAA,GACAC,EAAAA,cAAAA,QACA,EACAC,OAAAA,WAAA,YACAC,EAAAA,EAAAA,mBACAC,MAAAA,WAEA,OADA,aACA,mBACA,IACAA,MAAAA,SAAAA,GACA,YACA,wBACA,sBAEA,4EACA,iGAEA,wBACA,4BACA,GACA,IACAC,OAAAA,SAAAA,GACAC,EAAAA,MAAAA,sCAAAA,GACAC,GAAAA,aAAAA,cAAAA,EAAAA,WAAAA,sCAEA,SACA,GACA,EACAC,aAAAA,WAAA,qKAEAC,UAAAA,UAAAA,UAAAA,EAAAA,aAAA,OACA,4DAEA,YACAH,EAAAA,MAAAA,EAAAA,KACAI,EAAAA,EAAAA,IAAAA,EAAAA,WAAAA,0DAAA,QAIA,OAJA,UAEAC,YAAAA,WACA,WACA,mQAEA,EACAC,MAAAA,WACA,eACA,gBACA,eACA,cACA,mBACA,oBACA,iBACA,IClLmM,eCW/L,EAAU,CAAC,EAEf,EAAQ5E,kBAAoB,IAC5B,EAAQC,cAAgB,IAElB,EAAQC,OAAS,SAAc,KAAM,QAE3C,EAAQC,OAAS,IACjB,EAAQC,mBAAqB,IAEhB,IAAI,IAAS,GAKJ,KAAW,YAAiB,WALlD,ICbI,GAAY,OACd,GCTW,WAAkB,IAAIE,EAAIC,KAAKC,EAAGF,EAAIG,MAAMD,GAAG,OAASF,EAAIiD,OAAizB/C,EAAG,MAAM,CAACK,YAAY,WAAW,CAACP,EAAIQ,GAAG,OAAOR,EAAI0B,GAAG1B,EAAI2B,EAAE,WAAY,+DAA+D,OAAO3B,EAAI0B,GAAG1B,EAAI2B,EAAE,WAAY,gEAAgE,QAAQzB,EAAG,MAAM,CAACK,YAAY,oBAAoB,CAACL,EAAG,QAAQ,CAACK,YAAY,qBAAqBF,MAAM,CAAC,IAAM,iBAAiB,CAACL,EAAIQ,GAAGR,EAAI0B,GAAG1B,EAAI2B,EAAE,WAAY,gBAAgB3B,EAAIQ,GAAG,KAAKN,EAAG,QAAQ,CAACK,YAAY,aAAaF,MAAM,CAAC,GAAK,eAAe,KAAO,OAAO,SAAW,YAAYU,SAAS,CAAC,MAAQf,EAAIqD,WAAWrC,GAAG,CAAC,MAAQhB,EAAI0D,iBAAiB1D,EAAIQ,GAAG,KAAKN,EAAG,MAAM,CAACK,YAAY,oBAAoB,CAACL,EAAG,QAAQ,CAACK,YAAY,qBAAqBF,MAAM,CAAC,IAAM,iBAAiB,CAACL,EAAIQ,GAAGR,EAAI0B,GAAG1B,EAAI2B,EAAE,WAAY,gBAAgB3B,EAAIQ,GAAG,KAAKN,EAAG,QAAQ,CAACY,IAAI,cAAcP,YAAY,aAAaF,MAAM,CAAC,GAAK,eAAe,KAAO,OAAO,SAAW,YAAYU,SAAS,CAAC,MAAQf,EAAIoD,aAAapC,GAAG,CAAC,MAAQhB,EAAI0D,eAAe1D,EAAIQ,GAAG,KAAKN,EAAG,WAAW,CAACG,MAAM,CAAC,KAAO,WAAW,MAAQL,EAAIyD,mBAAmB,aAAazD,EAAIyD,oBAAoBzC,GAAG,CAAC,MAAQhB,EAAIkE,cAAcK,YAAYvE,EAAIwE,GAAG,CAAC,CAACnD,IAAI,OAAOoD,GAAG,WAAW,MAAO,CAAEzE,EAAIsD,OAAQpD,EAAG,QAAQ,CAACG,MAAM,CAAC,KAAO,MAAMH,EAAG,cAAc,CAACG,MAAM,CAAC,KAAO,MAAM,EAAEqE,OAAM,OAAU1E,EAAIQ,GAAG,KAAKN,EAAG,WAAW,CAACc,GAAG,CAAC,MAAQhB,EAAIsE,QAAQ,CAACtE,EAAIQ,GAAG,WAAWR,EAAI0B,GAAG1B,EAAI2B,EAAE,WAAY,SAAS,aAAa,GAAG3B,EAAIQ,GAAG,KAAKN,EAAG,MAAM,CAACK,YAAY,oBAAoB,CAACL,EAAG,OAAO,CAACK,YAAY,uBAAuBP,EAAIQ,GAAG,KAAOR,EAAIuD,OAA2JrD,EAAG,KAAK,CAACG,MAAM,CAAC,MAAQL,EAAIwD,SAA/KtD,EAAG,IAAI,CAACc,GAAG,CAAC,MAAQ,SAASC,GAAQjB,EAAIuD,QAAS,CAAI,IAAI,CAACvD,EAAIQ,GAAG,WAAWR,EAAI0B,GAAG1B,EAAI2B,EAAE,WAAY,iCAAiC,aAAkD,KAA58EzB,EAAG,MAAM,CAACK,YAAY,cAAcF,MAAM,CAAC,GAAK,+BAA+B,CAACH,EAAG,QAAQ,CAACQ,WAAW,CAAC,CAAC9C,KAAK,QAAQ+C,QAAQ,UAAUC,MAAOZ,EAAImD,WAAYtC,WAAW,eAAeR,MAAM,CAAC,KAAO,OAAO,UAAY,IAAI,SAAWL,EAAIkD,QAAQ,YAAclD,EAAI2B,EAAE,WAAY,aAAaZ,SAAS,CAAC,MAASf,EAAImD,YAAanC,GAAG,CAAC,QAAU,SAASC,GAAQ,OAAIA,EAAO9C,KAAK+C,QAAQ,QAAQlB,EAAImB,GAAGF,EAAOG,QAAQ,QAAQ,GAAGH,EAAOI,IAAI,SAAgB,KAAYrB,EAAI4D,OAAOtC,MAAM,KAAMC,UAAU,EAAE,MAAQ,SAASN,GAAWA,EAAOO,OAAOC,YAAiBzB,EAAImD,WAAWlC,EAAOO,OAAOZ,MAAK,KAAKZ,EAAIQ,GAAG,KAAKN,EAAG,WAAW,CAACG,MAAM,CAAC,SAAWL,EAAIkD,SAAqC,IAA1BlD,EAAImD,WAAWT,OAAa,KAAO,WAAW1B,GAAG,CAAC,MAAQhB,EAAI4D,SAAS,CAAC5D,EAAIQ,GAAG,SAASR,EAAI0B,GAAG1B,EAAI2B,EAAE,WAAY,4BAA4B,WAAW,EACv3B,GACsB,IDUpB,EACA,KACA,WACA,MAIF,EAAe,EAAiB,4IE0BhC,IAiBA,kCAEA,OADAgD,EAAAA,GACA,CACA,GAEA,IACA/G,KAAAA,mBACAC,WAAAA,CACA+G,uBAAAA,EACAC,cAAAA,GAEA5G,MAAAA,CACAoE,OAAAA,CACAlE,KAAAA,MACAC,UAAAA,GAEA0G,eAAAA,CACA3G,KAAAA,QACAC,UAAAA,IAGAC,KAAAA,WACA,OACA0G,SAAAA,EAAAA,EAAAA,aAAAA,iCAEA,EACA5F,QAAAA,CACA6F,YAAAA,SAAAA,GAAA,WACAhB,EAAAA,MAAAA,2BAAAA,GAEA,OACApG,KAAAA,GAEA,sCACAkG,MAAAA,SAAAA,GAAA,iBACAA,KAAAA,IAAAA,WAAA,wCAEAA,KAAAA,IAAAA,SAAAA,GAAA,wCACAC,OAAAA,SAAAA,GAGA,MAFAC,EAAAA,MAAAA,KAAAA,gCAAAA,GACAC,GAAAA,aAAAA,cAAAA,EAAAA,WAAAA,sCACA,CACA,GACA,EACAgB,iBAAAA,SAAAA,EAAAA,EAAAA,GACAjB,EAAAA,MAAAA,2BAAAA,EAAAA,GAAAA,EAAAA,GAEA,iBAGA,OAFA9F,EAAAA,MAAAA,GAAAA,EAEA,oBACA4F,KAAAA,IAAAA,WAAA,8CACAC,OAAAA,SAAAA,GAOA,MANAC,EAAAA,MAAAA,KAAAA,mCAAAA,GACAC,GAAAA,aAAAA,cAAAA,EAAAA,WAAAA,4CAGA/F,EAAAA,MAAAA,GAAAA,EAEA,CACA,GACA,EACAqB,OAAAA,SAAAA,EAAAA,GACAyE,EAAAA,MAAAA,qBAAAA,EAAAA,GAAAA,EAAAA,KAAAA,GAEA,aAGA,OAFA9F,EAAAA,KAAAA,EAEA,oBACA4F,KAAAA,IAAAA,WAAA,6CACAC,OAAAA,SAAAA,GACAC,EAAAA,MAAAA,KAAAA,kCAAAA,GACAC,GAAAA,aAAAA,cAAAA,EAAAA,WAAAA,2CAGA/F,EAAAA,KAAAA,CACA,GACA,EACAgH,YAAAA,SAAAA,GACA,8CACApB,MAAAA,SAAAA,GAAA,gBACA,EACAqB,YAAAA,SAAAA,GAAA,WAMA,OALAnB,EAAAA,MAAAA,qBAAAA,GAGA,4DAEA,wCACAF,MAAAA,SAAAA,GAAA,iBACAA,KAAAA,IAAAA,WAAA,wCACAC,OAAAA,SAAAA,GACAC,EAAAA,MAAAA,KAAAA,6BAAAA,GACAC,GAAAA,aAAAA,cAAAA,EAAAA,WAAAA,mCAIA,gBACA,GACA,EACAmB,UAAAA,SAAAA,GAAA,4IACA,OAAApB,EAAAA,MAAAA,mBAAAA,GAAA,mBAGAH,EAAAA,EAAAA,mBAAA,uBAxHA,yBACAI,GAAAA,QAAAA,QACAtC,EAAAA,WAAAA,0DACAA,EAAAA,WAAAA,gBACA0D,GACA,EAEA,IAmHA,iCACA,OAAArB,EAAAA,MAAAA,wBAAA,2CAGAsB,EAAAA,QAAAA,KAAAA,EAAAA,QAAAA,SAAAA,EAAAA,IAAA,QACAtB,EAAAA,MAAAA,6BAEA9F,EAAAA,KAAAA,EAAA,kDAEA8F,EAAAA,MAAAA,2BAAAA,EAAAA,IACAC,GAAAA,aAAAA,cAAAA,EAAAA,WAAAA,iDAAA,yOAEA,ICpL6L,MCkB7L,IAXgB,OACd,ICRW,WAAkB,IAAIjE,EAAIC,KAAKC,EAAGF,EAAIG,MAAMD,GAAG,OAAOA,EAAG,MAAM,CAACK,YAAY,UAAUF,MAAM,CAAC,GAAK,aAAa,CAACH,EAAG,KAAK,CAACF,EAAIQ,GAAGR,EAAI0B,GAAG1B,EAAI2B,EAAE,WAAY,qBAAsB,CAAC,OAAG4D,EAAW,CAACC,UAAU,QAAYxF,EAAIQ,GAAG,KAAKN,EAAG,IAAI,CAACK,YAAY,mCAAmC,CAACP,EAAIQ,GAAG,SAASR,EAAI0B,GAAG1B,EAAI2B,EAAE,WAAY,yEAAyE,UAAU3B,EAAIQ,GAAG,KAAKN,EAAG,gBAAgB,CAACG,MAAM,CAAC,OAASL,EAAIqC,QAAQrB,GAAG,CAAC,eAAehB,EAAIiF,iBAAiB,OAASjF,EAAIT,OAAO,OAASS,EAAImF,YAAY,KAAOnF,EAAIoF,aAAapF,EAAIQ,GAAG,KAAMR,EAAI8E,eAAgB5E,EAAG,yBAAyB,CAACG,MAAM,CAAC,IAAML,EAAIgF,eAAehF,EAAI4B,MAAM,EACnrB,GACsB,IDSpB,EACA,KACA,WACA,MAI8B,QEYhC6D,EAAAA,GAAoBC,KAAKzB,GAAG0B,cAE5BC,EAAAA,QAAAA,IAAQC,EAAAA,QAAU,CAAEC,aAAa,IACjCF,EAAAA,QAAAA,UAAAA,EAAkBjE,EAGlB,IADaiE,EAAAA,QAAAA,OAAWG,IACxB,CAAS,CACRC,UAAW,CACV3D,QAAQ4D,EAAAA,EAAAA,GAAU,WAAY,cAC9BnB,gBAAgBmB,EAAAA,EAAAA,GAAU,WAAY,2BAErCC,OAAO,kFCtCNC,QAA0B,GAA4B,KAE1DA,EAAwBC,KAAK,CAACC,EAAO/F,GAAI,0pBAA2pB,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,0DAA0D,MAAQ,GAAG,SAAW,+PAA+P,eAAiB,CAAC,gvBAAgvB,WAAa,MAE7zD,gECJI6F,QAA0B,GAA4B,KAE1DA,EAAwBC,KAAK,CAACC,EAAO/F,GAAI,geAAie,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,8DAA8D,MAAQ,GAAG,SAAW,mKAAmK,eAAiB,CAAC,ueAAue,WAAa,MAElyC,gECJI6F,QAA0B,GAA4B,KAE1DA,EAAwBC,KAAK,CAACC,EAAO/F,GAAI,6GAA8G,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,8DAA8D,MAAQ,GAAG,SAAW,oCAAoC,eAAiB,CAAC,4IAA4I,WAAa,MAErd,gECJI6F,QAA0B,GAA4B,KAE1DA,EAAwBC,KAAK,CAACC,EAAO/F,GAAI,iqBAAkqB,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,uEAAuE,MAAQ,GAAG,SAAW,mTAAmT,eAAiB,CAAC,gtBAAgtB,WAAa,MAEr2D,QCNIgG,EAA2B,CAAC,EAGhC,SAASC,EAAoBC,GAE5B,IAAIC,EAAeH,EAAyBE,GAC5C,QAAqBjB,IAAjBkB,EACH,OAAOA,EAAaC,QAGrB,IAAIL,EAASC,EAAyBE,GAAY,CACjDlG,GAAIkG,EACJG,QAAQ,EACRD,QAAS,CAAC,GAUX,OANAE,EAAoBJ,GAAUK,KAAKR,EAAOK,QAASL,EAAQA,EAAOK,QAASH,GAG3EF,EAAOM,QAAS,EAGTN,EAAOK,OACf,CAGAH,EAAoBO,EAAIF,E1B5BpBlK,EAAW,GACf6J,EAAoBQ,EAAI,SAASC,EAAQC,EAAUxC,EAAIyC,GACtD,IAAGD,EAAH,CAMA,IAAIE,EAAeC,IACnB,IAASC,EAAI,EAAGA,EAAI3K,EAASgG,OAAQ2E,IAAK,CACrCJ,EAAWvK,EAAS2K,GAAG,GACvB5C,EAAK/H,EAAS2K,GAAG,GACjBH,EAAWxK,EAAS2K,GAAG,GAE3B,IAJA,IAGIC,GAAY,EACPC,EAAI,EAAGA,EAAIN,EAASvE,OAAQ6E,MACpB,EAAXL,GAAsBC,GAAgBD,IAAaM,OAAOC,KAAKlB,EAAoBQ,GAAGW,OAAM,SAASrG,GAAO,OAAOkF,EAAoBQ,EAAE1F,GAAK4F,EAASM,GAAK,IAChKN,EAASU,OAAOJ,IAAK,IAErBD,GAAY,EACTJ,EAAWC,IAAcA,EAAeD,IAG7C,GAAGI,EAAW,CACb5K,EAASiL,OAAON,IAAK,GACrB,IAAIO,EAAInD,SACEc,IAANqC,IAAiBZ,EAASY,EAC/B,CACD,CACA,OAAOZ,CArBP,CAJCE,EAAWA,GAAY,EACvB,IAAI,IAAIG,EAAI3K,EAASgG,OAAQ2E,EAAI,GAAK3K,EAAS2K,EAAI,GAAG,GAAKH,EAAUG,IAAK3K,EAAS2K,GAAK3K,EAAS2K,EAAI,GACrG3K,EAAS2K,GAAK,CAACJ,EAAUxC,EAAIyC,EAwB/B,E2B5BAX,EAAoBsB,EAAI,SAASxB,GAChC,IAAIyB,EAASzB,GAAUA,EAAO0B,WAC7B,WAAa,OAAO1B,EAAgB,OAAG,EACvC,WAAa,OAAOA,CAAQ,EAE7B,OADAE,EAAoByB,EAAEF,EAAQ,CAAEG,EAAGH,IAC5BA,CACR,ECNAvB,EAAoByB,EAAI,SAAStB,EAASwB,GACzC,IAAI,IAAI7G,KAAO6G,EACX3B,EAAoB4B,EAAED,EAAY7G,KAASkF,EAAoB4B,EAAEzB,EAASrF,IAC5EmG,OAAOY,eAAe1B,EAASrF,EAAK,CAAEgH,YAAY,EAAMC,IAAKJ,EAAW7G,IAG3E,ECPAkF,EAAoBgC,EAAI,WACvB,GAA0B,iBAAfC,WAAyB,OAAOA,WAC3C,IACC,OAAOvI,MAAQ,IAAIwI,SAAS,cAAb,EAGhB,CAFE,MAAO9E,GACR,GAAsB,iBAAX+E,OAAqB,OAAOA,MACxC,CACA,CAPuB,GCAxBnC,EAAoB4B,EAAI,SAASQ,EAAKC,GAAQ,OAAOpB,OAAOqB,UAAUC,eAAejC,KAAK8B,EAAKC,EAAO,ECCtGrC,EAAoBqB,EAAI,SAASlB,GACX,oBAAXqC,QAA0BA,OAAOC,aAC1CxB,OAAOY,eAAe1B,EAASqC,OAAOC,YAAa,CAAEpI,MAAO,WAE7D4G,OAAOY,eAAe1B,EAAS,aAAc,CAAE9F,OAAO,GACvD,ECNA2F,EAAoB0C,IAAM,SAAS5C,GAGlC,OAFAA,EAAO6C,MAAQ,GACV7C,EAAO8C,WAAU9C,EAAO8C,SAAW,IACjC9C,CACR,ECJAE,EAAoBgB,EAAI,gBCAxBhB,EAAoB6C,EAAIC,SAASC,SAAWC,KAAKC,SAASC,KAK1D,IAAIC,EAAkB,CACrB,KAAM,GAaPnD,EAAoBQ,EAAEQ,EAAI,SAASoC,GAAW,OAAoC,IAA7BD,EAAgBC,EAAgB,EAGrF,IAAIC,EAAuB,SAASC,EAA4BxL,GAC/D,IAKImI,EAAUmD,EALV1C,EAAW5I,EAAK,GAChByL,EAAczL,EAAK,GACnB0L,EAAU1L,EAAK,GAGIgJ,EAAI,EAC3B,GAAGJ,EAAS+C,MAAK,SAAS1J,GAAM,OAA+B,IAAxBoJ,EAAgBpJ,EAAW,IAAI,CACrE,IAAIkG,KAAYsD,EACZvD,EAAoB4B,EAAE2B,EAAatD,KACrCD,EAAoBO,EAAEN,GAAYsD,EAAYtD,IAGhD,GAAGuD,EAAS,IAAI/C,EAAS+C,EAAQxD,EAClC,CAEA,IADGsD,GAA4BA,EAA2BxL,GACrDgJ,EAAIJ,EAASvE,OAAQ2E,IACzBsC,EAAU1C,EAASI,GAChBd,EAAoB4B,EAAEuB,EAAiBC,IAAYD,EAAgBC,IACrED,EAAgBC,GAAS,KAE1BD,EAAgBC,GAAW,EAE5B,OAAOpD,EAAoBQ,EAAEC,EAC9B,EAEIiD,EAAqBV,KAA4B,sBAAIA,KAA4B,uBAAK,GAC1FU,EAAmBC,QAAQN,EAAqBO,KAAK,KAAM,IAC3DF,EAAmB7D,KAAOwD,EAAqBO,KAAK,KAAMF,EAAmB7D,KAAK+D,KAAKF,OClDvF1D,EAAoB6D,QAAK7E,ECGzB,IAAI8E,EAAsB9D,EAAoBQ,OAAExB,EAAW,CAAC,OAAO,WAAa,OAAOgB,EAAoB,MAAQ,IACnH8D,EAAsB9D,EAAoBQ,EAAEsD","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/apps/settings/src/components/AuthToken.vue","webpack:///nextcloud/apps/settings/src/components/AuthToken.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/AuthToken.vue?70ef","webpack://nextcloud/./apps/settings/src/components/AuthToken.vue?1338","webpack://nextcloud/./apps/settings/src/components/AuthToken.vue?ca52","webpack:///nextcloud/apps/settings/src/components/AuthTokenList.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/settings/src/components/AuthTokenList.vue","webpack://nextcloud/./apps/settings/src/components/AuthTokenList.vue?6b8b","webpack://nextcloud/./apps/settings/src/components/AuthTokenList.vue?4748","webpack://nextcloud/./apps/settings/src/components/AuthTokenList.vue?90cb","webpack://nextcloud/./apps/settings/src/components/AuthTokenList.vue?5c2d","webpack:///nextcloud/apps/settings/src/components/AuthTokenSetupDialogue.vue","webpack:///nextcloud/apps/settings/src/components/AuthTokenSetupDialogue.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/AuthTokenSetupDialogue.vue?2afd","webpack://nextcloud/./apps/settings/src/components/AuthTokenSetupDialogue.vue?521c","webpack://nextcloud/./apps/settings/src/components/AuthTokenSetupDialogue.vue?6bad","webpack:///nextcloud/apps/settings/src/components/AuthTokenSection.vue","webpack:///nextcloud/apps/settings/src/components/AuthTokenSection.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/AuthTokenSection.vue?e9d0","webpack://nextcloud/./apps/settings/src/components/AuthTokenSection.vue?a091","webpack:///nextcloud/apps/settings/src/main-personal-security.js","webpack:///nextcloud/apps/settings/src/components/AuthToken.vue?vue&type=style&index=0&id=0f73a400&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/settings/src/components/AuthTokenList.vue?vue&type=style&index=0&id=1474f25b&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/settings/src/components/AuthTokenList.vue?vue&type=style&index=1&id=1474f25b&prod&lang=scss&","webpack:///nextcloud/apps/settings/src/components/AuthTokenSetupDialogue.vue?vue&type=style&index=0&id=7831fe39&prod&lang=scss&scoped=true&","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 = function(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(function(key) { return __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 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\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<tr :data-id=\"token.id\"\n\t\t:class=\"wiping\">\n\t\t<td class=\"client\">\n\t\t\t<div :class=\"iconName.icon\" />\n\t\t</td>\n\t\t<td class=\"token-name\">\n\t\t\t<input v-if=\"token.canRename && renaming\"\n\t\t\t\tref=\"input\"\n\t\t\t\tv-model=\"newName\"\n\t\t\t\ttype=\"text\"\n\t\t\t\t@keyup.enter=\"rename\"\n\t\t\t\t@change=\"rename\"\n\t\t\t\t@keyup.esc=\"cancelRename\">\n\t\t\t<span v-else>{{ iconName.name }}</span>\n\t\t\t<span v-if=\"wiping\" class=\"wiping-warning\">({{ t('settings', 'Marked for remote wipe') }})</span>\n\t\t</td>\n\t\t<td>\n\t\t\t<span :title=\"lastActivity\" class=\"last-activity\">{{ lastActivityRelative }}</span>\n\t\t</td>\n\t\t<td class=\"more\">\n\t\t\t<NcActions v-if=\"!token.current\"\n\t\t\t\t:title=\"t('settings', 'Device settings')\"\n\t\t\t\t:aria-label=\"t('settings', 'Device settings')\"\n\t\t\t\t:open.sync=\"actionOpen\">\n\t\t\t\t<NcActionCheckbox v-if=\"token.type === 1\"\n\t\t\t\t\t:checked=\"token.scope.filesystem\"\n\t\t\t\t\t@change.stop.prevent=\"$emit('toggle-scope', token, 'filesystem', !token.scope.filesystem)\">\n\t\t\t\t\t<!-- TODO: add text/longtext with some description -->\n\t\t\t\t\t{{ t('settings', 'Allow filesystem access') }}\n\t\t\t\t</NcActionCheckbox>\n\t\t\t\t<NcActionButton v-if=\"token.canRename\"\n\t\t\t\t\ticon=\"icon-rename\"\n\t\t\t\t\t@click.stop.prevent=\"startRename\">\n\t\t\t\t\t<!-- TODO: add text/longtext with some description -->\n\t\t\t\t\t{{ t('settings', 'Rename') }}\n\t\t\t\t</NcActionButton>\n\n\t\t\t\t<!-- revoke & wipe -->\n\t\t\t\t<template v-if=\"token.canDelete\">\n\t\t\t\t\t<template v-if=\"token.type !== 2\">\n\t\t\t\t\t\t<NcActionButton icon=\"icon-delete\"\n\t\t\t\t\t\t\t@click.stop.prevent=\"revoke\">\n\t\t\t\t\t\t\t<!-- TODO: add text/longtext with some description -->\n\t\t\t\t\t\t\t{{ t('settings', 'Revoke') }}\n\t\t\t\t\t\t</NcActionButton>\n\t\t\t\t\t\t<NcActionButton icon=\"icon-delete\"\n\t\t\t\t\t\t\t@click.stop.prevent=\"wipe\">\n\t\t\t\t\t\t\t{{ t('settings', 'Wipe device') }}\n\t\t\t\t\t\t</NcActionButton>\n\t\t\t\t\t</template>\n\t\t\t\t\t<NcActionButton v-else-if=\"token.type === 2\"\n\t\t\t\t\t\ticon=\"icon-delete\"\n\t\t\t\t\t\t:title=\"t('settings', 'Revoke')\"\n\t\t\t\t\t\t@click.stop.prevent=\"revoke\">\n\t\t\t\t\t\t{{ t('settings', 'Revoking this token might prevent the wiping of your device if it has not started the wipe yet.') }}\n\t\t\t\t\t</NcActionButton>\n\t\t\t\t</template>\n\t\t\t</NcActions>\n\t\t</td>\n\t</tr>\n</template>\n\n<script>\nimport {\n\tNcActions,\n\tNcActionButton,\n\tNcActionCheckbox,\n} from '@nextcloud/vue'\n\n// When using capture groups the following parts are extracted the first is used as the version number, the second as the OS\nconst userAgentMap = {\n\tie: /(?:MSIE|Trident|Trident\\/7.0; rv)[ :](\\d+)/,\n\t// Microsoft Edge User Agent from https://msdn.microsoft.com/en-us/library/hh869301(v=vs.85).aspx\n\tedge: /^Mozilla\\/5\\.0 \\([^)]+\\) AppleWebKit\\/[0-9.]+ \\(KHTML, like Gecko\\) Chrome\\/[0-9.]+ (?:Mobile Safari|Safari)\\/[0-9.]+ Edge\\/[0-9.]+$/,\n\t// Firefox User Agent from https://developer.mozilla.org/en-US/docs/Web/HTTP/Gecko_user_agent_string_reference\n\tfirefox: /^Mozilla\\/5\\.0 \\([^)]*(Windows|OS X|Linux)[^)]+\\) Gecko\\/[0-9.]+ Firefox\\/(\\d+)(?:\\.\\d)?$/,\n\t// Chrome User Agent from https://developer.chrome.com/multidevice/user-agent\n\tchrome: /^Mozilla\\/5\\.0 \\([^)]*(Windows|OS X|Linux)[^)]+\\) AppleWebKit\\/[0-9.]+ \\(KHTML, like Gecko\\) Chrome\\/(\\d+)[0-9.]+ (?:Mobile Safari|Safari)\\/[0-9.]+$/,\n\t// Safari User Agent from http://www.useragentstring.com/pages/Safari/\n\tsafari: /^Mozilla\\/5\\.0 \\([^)]*(Windows|OS X)[^)]+\\) AppleWebKit\\/[0-9.]+ \\(KHTML, like Gecko\\)(?: Version\\/([0-9]+)[0-9.]+)? Safari\\/[0-9.A-Z]+$/,\n\t// Android Chrome user agent: https://developers.google.com/chrome/mobile/docs/user-agent\n\tandroidChrome: /Android.*(?:; (.*) Build\\/).*Chrome\\/(\\d+)[0-9.]+/,\n\tiphone: / *CPU +iPhone +OS +([0-9]+)_(?:[0-9_])+ +like +Mac +OS +X */,\n\tipad: /\\(iPad; *CPU +OS +([0-9]+)_(?:[0-9_])+ +like +Mac +OS +X */,\n\tiosClient: /^Mozilla\\/5\\.0 \\(iOS\\) (?:ownCloud|Nextcloud)-iOS.*$/,\n\tandroidClient: /^Mozilla\\/5\\.0 \\(Android\\) (?:ownCloud|Nextcloud)-android.*$/,\n\tiosTalkClient: /^Mozilla\\/5\\.0 \\(iOS\\) Nextcloud-Talk.*$/,\n\tandroidTalkClient: /^Mozilla\\/5\\.0 \\(Android\\) Nextcloud-Talk.*$/,\n\t// DAVx5/3.3.8-beta2-gplay (2021/01/02; dav4jvm; okhttp/4.9.0) Android/10\n\tdavx5: /DAV(?:droid|x5)\\/([^ ]+)/,\n\t// Mozilla/5.0 (U; Linux; Maemo; Jolla; Sailfish; like Android 4.3) AppleWebKit/538.1 (KHTML, like Gecko) WebPirate/2.0 like Mobile Safari/538.1 (compatible)\n\twebPirate: /(Sailfish).*WebPirate\\/(\\d+)/,\n\t// Mozilla/5.0 (Maemo; Linux; U; Jolla; Sailfish; Mobile; rv:31.0) Gecko/31.0 Firefox/31.0 SailfishBrowser/1.0\n\tsailfishBrowser: /(Sailfish).*SailfishBrowser\\/(\\d+)/,\n\t// Neon 1.0.0+1\n\tneon: /Neon \\d+\\.\\d+\\.\\d+\\+\\d+/,\n}\nconst nameMap = {\n\tie: t('setting', 'Internet Explorer'),\n\tedge: t('setting', 'Edge'),\n\tfirefox: t('setting', 'Firefox'),\n\tchrome: t('setting', 'Google Chrome'),\n\tsafari: t('setting', 'Safari'),\n\tandroidChrome: t('setting', 'Google Chrome for Android'),\n\tiphone: t('setting', 'iPhone'),\n\tipad: t('setting', 'iPad'),\n\tiosClient: t('setting', '{productName} iOS app', { productName: window.oc_defaults.productName }),\n\tandroidClient: t('setting', '{productName} Android app', { productName: window.oc_defaults.productName }),\n\tiosTalkClient: t('setting', '{productName} Talk for iOS', { productName: window.oc_defaults.productName }),\n\tandroidTalkClient: t('setting', '{productName} Talk for Android', { productName: window.oc_defaults.productName }),\n\tdavx5: 'DAVx5',\n\twebPirate: 'WebPirate',\n\tsailfishBrowser: 'SailfishBrowser',\n\tneon: 'Neon',\n}\nconst iconMap = {\n\tie: 'icon-desktop',\n\tedge: 'icon-desktop',\n\tfirefox: 'icon-desktop',\n\tchrome: 'icon-desktop',\n\tsafari: 'icon-desktop',\n\tandroidChrome: 'icon-phone',\n\tiphone: 'icon-phone',\n\tipad: 'icon-tablet',\n\tiosClient: 'icon-phone',\n\tandroidClient: 'icon-phone',\n\tiosTalkClient: 'icon-phone',\n\tandroidTalkClient: 'icon-phone',\n\tdavx5: 'icon-phone',\n\twebPirate: 'icon-link',\n\tsailfishBrowser: 'icon-link',\n}\n\nexport default {\n\tname: 'AuthToken',\n\tcomponents: {\n\t\tNcActions,\n\t\tNcActionButton,\n\t\tNcActionCheckbox,\n\t},\n\tprops: {\n\t\ttoken: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tshowMore: this.token.canScope || this.token.canDelete,\n\t\t\trenaming: false,\n\t\t\tnewName: '',\n\t\t\toldName: '',\n\t\t\tactionOpen: false,\n\t\t}\n\t},\n\tcomputed: {\n\t\tlastActivityRelative() {\n\t\t\treturn OC.Util.relativeModifiedDate(this.token.lastActivity * 1000)\n\t\t},\n\t\tlastActivity() {\n\t\t\treturn OC.Util.formatDate(this.token.lastActivity * 1000, 'LLL')\n\t\t},\n\t\ticonName() {\n\t\t\t// pretty format sync client user agent\n\t\t\tconst matches = this.token.name.match(/Mozilla\\/5\\.0 \\((\\w+)\\) (?:mirall|csyncoC)\\/(\\d+\\.\\d+\\.\\d+)/)\n\n\t\t\tlet icon = ''\n\t\t\tif (matches) {\n\t\t\t\t/* eslint-disable-next-line */\n\t\t\t\tthis.token.name = t('settings', 'Sync client - {os}', {\n\t\t\t\t\tos: matches[1],\n\t\t\t\t\tversion: matches[2],\n\t\t\t\t})\n\t\t\t\ticon = 'icon-desktop'\n\t\t\t}\n\n\t\t\t// preserve title for cases where we format it further\n\t\t\tconst title = this.token.name\n\t\t\tlet name = this.token.name\n\t\t\tfor (const client in userAgentMap) {\n\t\t\t\tconst matches = title.match(userAgentMap[client])\n\t\t\t\tif (matches) {\n\t\t\t\t\tif (matches[2] && matches[1]) { // version number and os\n\t\t\t\t\t\tname = nameMap[client] + ' ' + matches[2] + ' - ' + matches[1]\n\t\t\t\t\t} else if (matches[1]) { // only version number\n\t\t\t\t\t\tname = nameMap[client] + ' ' + matches[1]\n\t\t\t\t\t} else {\n\t\t\t\t\t\tname = nameMap[client]\n\t\t\t\t\t}\n\n\t\t\t\t\ticon = iconMap[client]\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.token.current) {\n\t\t\t\tname = t('settings', 'This session')\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\ticon,\n\t\t\t\tname,\n\t\t\t}\n\t\t},\n\t\twiping() {\n\t\t\treturn this.token.type === 2\n\t\t},\n\t},\n\tmethods: {\n\t\tstartRename() {\n\t\t\t// Close action (popover menu)\n\t\t\tthis.actionOpen = false\n\n\t\t\tthis.oldName = this.token.name\n\t\t\tthis.newName = this.token.name\n\t\t\tthis.renaming = true\n\t\t\tthis.$nextTick(() => {\n\t\t\t\tthis.$refs.input.select()\n\t\t\t})\n\t\t},\n\t\tcancelRename() {\n\t\t\tthis.renaming = false\n\t\t\tthis.$emit('rename', this.token, this.oldName)\n\t\t},\n\t\trevoke() {\n\t\t\tthis.actionOpen = false\n\t\t\tthis.$emit('delete', this.token)\n\t\t},\n\t\trename() {\n\t\t\tthis.renaming = false\n\t\t\tthis.$emit('rename', this.token, this.newName)\n\t\t},\n\t\twipe() {\n\t\t\tthis.actionOpen = false\n\t\t\tthis.$emit('wipe', this.token)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.wiping {\n\t\tbackground-color: var(--color-background-darker);\n\t}\n\n\ttd {\n\t\tborder-top: 1px solid var(--color-border);\n\t\tmax-width: 200px;\n\t\twhite-space: normal;\n\t\tvertical-align: middle;\n\t\tposition: relative;\n\n\t\t&%icon {\n\t\t\toverflow: visible;\n\t\t\tposition: relative;\n\t\t\twidth: 44px;\n\t\t\theight: 44px;\n\t\t}\n\n\t\t&.token-name {\n\t\t\tpadding: 10px 6px;\n\n\t\t\t&.token-rename {\n\t\t\t\tpadding: 0;\n\t\t\t}\n\n\t\t\tinput {\n\t\t\t\twidth: 100%;\n\t\t\t\tmargin: 0;\n\t\t\t}\n\t\t}\n\t\t&.token-name .wiping-warning {\n\t\t\tcolor: var(--color-text-lighter);\n\t\t}\n\n\t\t&.more {\n\t\t\t@extend %icon;\n\t\t\tpadding: 0 10px;\n\t\t}\n\n\t\t&.client {\n\t\t\t@extend %icon;\n\n\t\t\tdiv {\n\t\t\t\topacity: 0.57;\n\t\t\t\twidth: 44px;\n\t\t\t\theight: 44px;\n\t\t\t}\n\t\t}\n\t}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthToken.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!./AuthToken.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!./AuthToken.vue?vue&type=style&index=0&id=0f73a400&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!./AuthToken.vue?vue&type=style&index=0&id=0f73a400&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AuthToken.vue?vue&type=template&id=0f73a400&scoped=true&\"\nimport script from \"./AuthToken.vue?vue&type=script&lang=js&\"\nexport * from \"./AuthToken.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AuthToken.vue?vue&type=style&index=0&id=0f73a400&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 \"0f73a400\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('tr',{class:_vm.wiping,attrs:{\"data-id\":_vm.token.id}},[_c('td',{staticClass:\"client\"},[_c('div',{class:_vm.iconName.icon})]),_vm._v(\" \"),_c('td',{staticClass:\"token-name\"},[(_vm.token.canRename && _vm.renaming)?_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.newName),expression:\"newName\"}],ref:\"input\",attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.newName)},on:{\"keyup\":[function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\"))return null;return _vm.rename.apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"esc\",27,$event.key,[\"Esc\",\"Escape\"]))return null;return _vm.cancelRename.apply(null, arguments)}],\"change\":_vm.rename,\"input\":function($event){if($event.target.composing)return;_vm.newName=$event.target.value}}}):_c('span',[_vm._v(_vm._s(_vm.iconName.name))]),_vm._v(\" \"),(_vm.wiping)?_c('span',{staticClass:\"wiping-warning\"},[_vm._v(\"(\"+_vm._s(_vm.t('settings', 'Marked for remote wipe'))+\")\")]):_vm._e()]),_vm._v(\" \"),_c('td',[_c('span',{staticClass:\"last-activity\",attrs:{\"title\":_vm.lastActivity}},[_vm._v(_vm._s(_vm.lastActivityRelative))])]),_vm._v(\" \"),_c('td',{staticClass:\"more\"},[(!_vm.token.current)?_c('NcActions',{attrs:{\"title\":_vm.t('settings', 'Device settings'),\"aria-label\":_vm.t('settings', 'Device settings'),\"open\":_vm.actionOpen},on:{\"update:open\":function($event){_vm.actionOpen=$event}}},[(_vm.token.type === 1)?_c('NcActionCheckbox',{attrs:{\"checked\":_vm.token.scope.filesystem},on:{\"change\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.$emit('toggle-scope', _vm.token, 'filesystem', !_vm.token.scope.filesystem)}}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Allow filesystem access'))+\"\\n\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.token.canRename)?_c('NcActionButton',{attrs:{\"icon\":\"icon-rename\"},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.startRename.apply(null, arguments)}}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Rename'))+\"\\n\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.token.canDelete)?[(_vm.token.type !== 2)?[_c('NcActionButton',{attrs:{\"icon\":\"icon-delete\"},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.revoke.apply(null, arguments)}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Revoke'))+\"\\n\\t\\t\\t\\t\\t\")]),_vm._v(\" \"),_c('NcActionButton',{attrs:{\"icon\":\"icon-delete\"},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.wipe.apply(null, arguments)}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Wipe device'))+\"\\n\\t\\t\\t\\t\\t\")])]:(_vm.token.type === 2)?_c('NcActionButton',{attrs:{\"icon\":\"icon-delete\",\"title\":_vm.t('settings', 'Revoke')},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.revoke.apply(null, arguments)}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Revoking this token might prevent the wiping of your device if it has not started the wipe yet.'))+\"\\n\\t\\t\\t\\t\")]):_vm._e()]:_vm._e()],2):_vm._e()],1)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthTokenList.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!./AuthTokenList.vue?vue&type=script&lang=js&\"","<!--\n - @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\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<table id=\"app-tokens-table\">\n\t\t<thead v-if=\"tokens.length\">\n\t\t\t<tr>\n\t\t\t\t<th />\n\t\t\t\t<th>{{ t('settings', 'Device') }}</th>\n\t\t\t\t<th>{{ t('settings', 'Last activity') }}</th>\n\t\t\t\t<th />\n\t\t\t</tr>\n\t\t</thead>\n\t\t<tbody class=\"token-list\">\n\t\t\t<AuthToken v-for=\"token in sortedTokens\"\n\t\t\t\t:key=\"token.id\"\n\t\t\t\t:token=\"token\"\n\t\t\t\t@toggle-scope=\"toggleScope\"\n\t\t\t\t@rename=\"rename\"\n\t\t\t\t@delete=\"onDelete\"\n\t\t\t\t@wipe=\"onWipe\" />\n\t\t</tbody>\n\t</table>\n</template>\n\n<script>\nimport AuthToken from './AuthToken.vue'\n\nexport default {\n\tname: 'AuthTokenList',\n\tcomponents: {\n\t\tAuthToken,\n\t},\n\tprops: {\n\t\ttokens: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tcomputed: {\n\t\tsortedTokens() {\n\t\t\treturn this.tokens.slice().sort((t1, t2) => {\n\t\t\t\tconst ts1 = parseInt(t1.lastActivity, 10)\n\t\t\t\tconst ts2 = parseInt(t2.lastActivity, 10)\n\t\t\t\treturn ts2 - ts1\n\t\t\t})\n\t\t},\n\t},\n\tmethods: {\n\t\ttoggleScope(token, scope, value) {\n\t\t\t// Just pass it on\n\t\t\tthis.$emit('toggle-scope', token, scope, value)\n\t\t},\n\t\trename(token, newName) {\n\t\t\t// Just pass it on\n\t\t\tthis.$emit('rename', token, newName)\n\t\t},\n\t\tonDelete(token) {\n\t\t\t// Just pass it on\n\t\t\tthis.$emit('delete', token)\n\t\t},\n\t\tonWipe(token) {\n\t\t\t// Just pass it on\n\t\t\tthis.$emit('wipe', token)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n\ttable {\n\t\twidth: 100%;\n\t\tmin-height: 50px;\n\t\tpadding-top: 5px;\n\t\tmax-width: 580px;\n\n\t\tth {\n\t\t\topacity: .5;\n\t\t\tpadding: 10px 0;\n\t\t}\n\t}\n\n\t.token-list {\n\t\ttd > a.icon-more {\n\t\t\ttransition: opacity var(--animation-quick);\n\t\t}\n\n\t\ta.icon-more {\n\t\t\tpadding: 14px;\n\t\t\tdisplay: block;\n\t\t\twidth: 44px;\n\t\t\theight: 44px;\n\t\t\topacity: .5;\n\t\t}\n\n\t\ttr {\n\t\t\t&:hover td > a.icon,\n\t\t\ttd > a.icon:focus,\n\t\t\t&.active td > a.icon {\n\t\t\t\topacity: 1;\n\t\t\t}\n\t\t}\n\t}\n</style>\n\n<!-- some styles are not scoped to make them work on subcomponents -->\n<style lang=\"scss\">\n\t#app-tokens-table {\n\t\ttr > *:nth-child(2) {\n\t\t\tpadding-left: 6px;\n\t\t}\n\n\t\ttr > *:nth-child(3) {\n\t\t\ttext-align: right;\n\t\t}\n\t}\n</style>\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!./AuthTokenList.vue?vue&type=style&index=0&id=1474f25b&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!./AuthTokenList.vue?vue&type=style&index=0&id=1474f25b&prod&lang=scss&scoped=true&\";\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/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthTokenList.vue?vue&type=style&index=1&id=1474f25b&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!./AuthTokenList.vue?vue&type=style&index=1&id=1474f25b&prod&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AuthTokenList.vue?vue&type=template&id=1474f25b&scoped=true&\"\nimport script from \"./AuthTokenList.vue?vue&type=script&lang=js&\"\nexport * from \"./AuthTokenList.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AuthTokenList.vue?vue&type=style&index=0&id=1474f25b&prod&lang=scss&scoped=true&\"\nimport style1 from \"./AuthTokenList.vue?vue&type=style&index=1&id=1474f25b&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 \"1474f25b\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('table',{attrs:{\"id\":\"app-tokens-table\"}},[(_vm.tokens.length)?_c('thead',[_c('tr',[_c('th'),_vm._v(\" \"),_c('th',[_vm._v(_vm._s(_vm.t('settings', 'Device')))]),_vm._v(\" \"),_c('th',[_vm._v(_vm._s(_vm.t('settings', 'Last activity')))]),_vm._v(\" \"),_c('th')])]):_vm._e(),_vm._v(\" \"),_c('tbody',{staticClass:\"token-list\"},_vm._l((_vm.sortedTokens),function(token){return _c('AuthToken',{key:token.id,attrs:{\"token\":token},on:{\"toggle-scope\":_vm.toggleScope,\"rename\":_vm.rename,\"delete\":_vm.onDelete,\"wipe\":_vm.onWipe}})}),1)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\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<div v-if=\"!adding\" id=\"generate-app-token-section\" class=\"row spacing\">\n\t\t<!-- Port to TextField component when available -->\n\t\t<input v-model=\"deviceName\"\n\t\t\ttype=\"text\"\n\t\t\t:maxlength=\"120\"\n\t\t\t:disabled=\"loading\"\n\t\t\t:placeholder=\"t('settings', 'App name')\"\n\t\t\t@keydown.enter=\"submit\">\n\t\t<NcButton :disabled=\"loading || deviceName.length === 0\"\n\t\t\ttype=\"primary\"\n\t\t\t@click=\"submit\">\n\t\t\t{{ t('settings', 'Create new app password') }}\n\t\t</NcButton>\n\t</div>\n\t<div v-else class=\"spacing\">\n\t\t{{ t('settings', 'Use the credentials below to configure your app or device.') }}\n\t\t{{ t('settings', 'For security reasons this password will only be shown once.') }}\n\t\t<div class=\"app-password-row\">\n\t\t\t<label for=\"app-username\" class=\"app-password-label\">{{ t('settings', 'Username') }}</label>\n\t\t\t<input id=\"app-username\"\n\t\t\t\t:value=\"loginName\"\n\t\t\t\ttype=\"text\"\n\t\t\t\tclass=\"monospaced\"\n\t\t\t\treadonly=\"readonly\"\n\t\t\t\t@focus=\"selectInput\">\n\t\t</div>\n\t\t<div class=\"app-password-row\">\n\t\t\t<label for=\"app-password\" class=\"app-password-label\">{{ t('settings', 'Password') }}</label>\n\t\t\t<input id=\"app-password\"\n\t\t\t\tref=\"appPassword\"\n\t\t\t\t:value=\"appPassword\"\n\t\t\t\ttype=\"text\"\n\t\t\t\tclass=\"monospaced\"\n\t\t\t\treadonly=\"readonly\"\n\t\t\t\t@focus=\"selectInput\">\n\t\t\t<NcButton type=\"tertiary\"\n\t\t\t\t:title=\"copyTooltipOptions\"\n\t\t\t\t:aria-label=\"copyTooltipOptions\"\n\t\t\t\t@click=\"copyPassword\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<Check v-if=\"copied\" :size=\"20\" />\n\t\t\t\t\t<ContentCopy v-else :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t</NcButton>\n\t\t\t<NcButton @click=\"reset\">\n\t\t\t\t{{ t('settings', 'Done') }}\n\t\t\t</NcButton>\n\t\t</div>\n\t\t<div class=\"app-password-row\">\n\t\t\t<span class=\"app-password-label\" />\n\t\t\t<a v-if=\"!showQR\"\n\t\t\t\t@click=\"showQR = true\">\n\t\t\t\t{{ t('settings', 'Show QR code for mobile apps') }}\n\t\t\t</a>\n\t\t\t<QR v-else\n\t\t\t\t:value=\"qrUrl\" />\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport QR from '@chenfengyuan/vue-qrcode'\nimport { confirmPassword } from '@nextcloud/password-confirmation'\nimport '@nextcloud/password-confirmation/dist/style.css'\nimport { showError } from '@nextcloud/dialogs'\nimport { getRootUrl } from '@nextcloud/router'\nimport NcButton from '@nextcloud/vue/dist/Components/NcButton.js'\n\nimport Check from 'vue-material-design-icons/Check.vue'\nimport ContentCopy from 'vue-material-design-icons/ContentCopy.vue'\n\nexport default {\n\tname: 'AuthTokenSetupDialogue',\n\tcomponents: {\n\t\tCheck,\n\t\tContentCopy,\n\t\tNcButton,\n\t\tQR,\n\t},\n\tprops: {\n\t\tadd: {\n\t\t\ttype: Function,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tadding: false,\n\t\t\tloading: false,\n\t\t\tdeviceName: '',\n\t\t\tappPassword: '',\n\t\t\tloginName: '',\n\t\t\tcopied: false,\n\t\t\tshowQR: false,\n\t\t\tqrUrl: '',\n\t\t}\n\t},\n\tcomputed: {\n\t\tcopyTooltipOptions() {\n\t\t\tif (this.copied) {\n\t\t\t\treturn t('settings', 'Copied!')\n\t\t\t}\n\t\t\treturn t('settings', 'Copy')\n\t\t},\n\t},\n\tmethods: {\n\t\tselectInput(e) {\n\t\t\te.currentTarget.select()\n\t\t},\n\t\tsubmit() {\n\t\t\tconfirmPassword()\n\t\t\t\t.then(() => {\n\t\t\t\t\tthis.loading = true\n\t\t\t\t\treturn this.add(this.deviceName)\n\t\t\t\t})\n\t\t\t\t.then(token => {\n\t\t\t\t\tthis.adding = true\n\t\t\t\t\tthis.loginName = token.loginName\n\t\t\t\t\tthis.appPassword = token.token\n\n\t\t\t\t\tconst server = window.location.protocol + '//' + window.location.host + getRootUrl()\n\t\t\t\t\tthis.qrUrl = `nc://login/user:${token.loginName}&password:${token.token}&server:${server}`\n\n\t\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t\tthis.$refs.appPassword.select()\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t\t.catch(err => {\n\t\t\t\t\tconsole.error('could not create a new app password', err)\n\t\t\t\t\tOC.Notification.showTemporary(t('settings', 'Error while creating device token'))\n\n\t\t\t\t\tthis.reset()\n\t\t\t\t})\n\t\t},\n\t\tasync copyPassword() {\n\t\t\ttry {\n\t\t\t\tawait navigator.clipboard.writeText(this.appPassword)\n\t\t\t\tthis.copied = true\n\t\t\t} catch (e) {\n\t\t\t\tthis.copied = false\n\t\t\t\tconsole.error(e)\n\t\t\t\tshowError(t('settings', 'Could not copy app password. Please copy it manually.'))\n\t\t\t} finally {\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.copied = false\n\t\t\t\t}, 4000)\n\t\t\t}\n\t\t},\n\t\treset() {\n\t\t\tthis.adding = false\n\t\t\tthis.loading = false\n\t\t\tthis.showQR = false\n\t\t\tthis.qrUrl = ''\n\t\t\tthis.deviceName = ''\n\t\t\tthis.appPassword = ''\n\t\t\tthis.loginName = ''\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.app-password-row {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\n\t\t.icon {\n\t\t\tbackground-size: 16px 16px;\n\t\t\tdisplay: inline-block;\n\t\t\tposition: relative;\n\t\t\ttop: 3px;\n\t\t\tmargin-left: 5px;\n\t\t\tmargin-right: 8px;\n\t\t}\n\n\t}\n\n\t.app-password-label {\n\t\tdisplay: table-cell;\n\t\tpadding-right: 1em;\n\t\ttext-align: right;\n\t\tvertical-align: middle;\n\t\twidth: 100px;\n\t}\n\n\t.row input {\n\t\theight: 44px !important;\n\t\tpadding: 7px 12px;\n\t\tmargin-right: 12px;\n\t\twidth: 200px;\n\t}\n\n\t.monospaced {\n\t\twidth: 245px;\n\t\tfont-family: monospace;\n\t}\n\n\t.button-vue{\n\t\tdisplay:inline-block;\n\t\tmargin: 3px 3px 3px 3px;\n\t}\n\n\t.row {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t}\n\n\t.spacing {\n\t\tpadding-top: 16px;\n\t}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthTokenSetupDialogue.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!./AuthTokenSetupDialogue.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!./AuthTokenSetupDialogue.vue?vue&type=style&index=0&id=7831fe39&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!./AuthTokenSetupDialogue.vue?vue&type=style&index=0&id=7831fe39&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AuthTokenSetupDialogue.vue?vue&type=template&id=7831fe39&scoped=true&\"\nimport script from \"./AuthTokenSetupDialogue.vue?vue&type=script&lang=js&\"\nexport * from \"./AuthTokenSetupDialogue.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AuthTokenSetupDialogue.vue?vue&type=style&index=0&id=7831fe39&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 \"7831fe39\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return (!_vm.adding)?_c('div',{staticClass:\"row spacing\",attrs:{\"id\":\"generate-app-token-section\"}},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.deviceName),expression:\"deviceName\"}],attrs:{\"type\":\"text\",\"maxlength\":120,\"disabled\":_vm.loading,\"placeholder\":_vm.t('settings', 'App name')},domProps:{\"value\":(_vm.deviceName)},on:{\"keydown\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\"))return null;return _vm.submit.apply(null, arguments)},\"input\":function($event){if($event.target.composing)return;_vm.deviceName=$event.target.value}}}),_vm._v(\" \"),_c('NcButton',{attrs:{\"disabled\":_vm.loading || _vm.deviceName.length === 0,\"type\":\"primary\"},on:{\"click\":_vm.submit}},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('settings', 'Create new app password'))+\"\\n\\t\")])],1):_c('div',{staticClass:\"spacing\"},[_vm._v(\"\\n\\t\"+_vm._s(_vm.t('settings', 'Use the credentials below to configure your app or device.'))+\"\\n\\t\"+_vm._s(_vm.t('settings', 'For security reasons this password will only be shown once.'))+\"\\n\\t\"),_c('div',{staticClass:\"app-password-row\"},[_c('label',{staticClass:\"app-password-label\",attrs:{\"for\":\"app-username\"}},[_vm._v(_vm._s(_vm.t('settings', 'Username')))]),_vm._v(\" \"),_c('input',{staticClass:\"monospaced\",attrs:{\"id\":\"app-username\",\"type\":\"text\",\"readonly\":\"readonly\"},domProps:{\"value\":_vm.loginName},on:{\"focus\":_vm.selectInput}})]),_vm._v(\" \"),_c('div',{staticClass:\"app-password-row\"},[_c('label',{staticClass:\"app-password-label\",attrs:{\"for\":\"app-password\"}},[_vm._v(_vm._s(_vm.t('settings', 'Password')))]),_vm._v(\" \"),_c('input',{ref:\"appPassword\",staticClass:\"monospaced\",attrs:{\"id\":\"app-password\",\"type\":\"text\",\"readonly\":\"readonly\"},domProps:{\"value\":_vm.appPassword},on:{\"focus\":_vm.selectInput}}),_vm._v(\" \"),_c('NcButton',{attrs:{\"type\":\"tertiary\",\"title\":_vm.copyTooltipOptions,\"aria-label\":_vm.copyTooltipOptions},on:{\"click\":_vm.copyPassword},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [(_vm.copied)?_c('Check',{attrs:{\"size\":20}}):_c('ContentCopy',{attrs:{\"size\":20}})]},proxy:true}])}),_vm._v(\" \"),_c('NcButton',{on:{\"click\":_vm.reset}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Done'))+\"\\n\\t\\t\")])],1),_vm._v(\" \"),_c('div',{staticClass:\"app-password-row\"},[_c('span',{staticClass:\"app-password-label\"}),_vm._v(\" \"),(!_vm.showQR)?_c('a',{on:{\"click\":function($event){_vm.showQR = true}}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Show QR code for mobile apps'))+\"\\n\\t\\t\")]):_c('QR',{attrs:{\"value\":_vm.qrUrl}})],1)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\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<div id=\"security\" class=\"section\">\n\t\t<h2>{{ t('settings', 'Devices & sessions', {}, undefined, {sanitize: false}) }}</h2>\n\t\t<p class=\"settings-hint hidden-when-empty\">\n\t\t\t{{ t('settings', 'Web, desktop and mobile clients currently logged in to your account.') }}\n\t\t</p>\n\t\t<AuthTokenList :tokens=\"tokens\"\n\t\t\t@toggle-scope=\"toggleTokenScope\"\n\t\t\t@rename=\"rename\"\n\t\t\t@delete=\"deleteToken\"\n\t\t\t@wipe=\"wipeToken\" />\n\t\t<AuthTokenSetupDialogue v-if=\"canCreateToken\" :add=\"addNewToken\" />\n\t</div>\n</template>\n\n<script>\nimport axios from '@nextcloud/axios'\nimport { confirmPassword } from '@nextcloud/password-confirmation'\nimport '@nextcloud/password-confirmation/dist/style.css'\nimport { generateUrl } from '@nextcloud/router'\n\nimport AuthTokenList from './AuthTokenList.vue'\nimport AuthTokenSetupDialogue from './AuthTokenSetupDialogue.vue'\n\nconst confirm = () => {\n\treturn new Promise(resolve => {\n\t\tOC.dialogs.confirm(\n\t\t\tt('settings', 'Do you really want to wipe your data from this device?'),\n\t\t\tt('settings', 'Confirm wipe'),\n\t\t\tresolve,\n\t\t\ttrue\n\t\t)\n\t})\n}\n\n/**\n * Tap into a promise without losing the value\n *\n * @param {Function} cb the callback\n * @return {any} val the value\n */\nconst tap = cb => val => {\n\tcb(val)\n\treturn val\n}\n\nexport default {\n\tname: 'AuthTokenSection',\n\tcomponents: {\n\t\tAuthTokenSetupDialogue,\n\t\tAuthTokenList,\n\t},\n\tprops: {\n\t\ttokens: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t},\n\t\tcanCreateToken: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tbaseUrl: generateUrl('/settings/personal/authtokens'),\n\t\t}\n\t},\n\tmethods: {\n\t\taddNewToken(name) {\n\t\t\tconsole.debug('creating a new app token', name)\n\n\t\t\tconst data = {\n\t\t\t\tname,\n\t\t\t}\n\t\t\treturn axios.post(this.baseUrl, data)\n\t\t\t\t.then(resp => resp.data)\n\t\t\t\t.then(tap(() => console.debug('app token created')))\n\t\t\t\t// eslint-disable-next-line vue/no-mutating-props\n\t\t\t\t.then(tap(data => this.tokens.push(data.deviceToken)))\n\t\t\t\t.catch(err => {\n\t\t\t\t\tconsole.error.bind('could not create app password', err)\n\t\t\t\t\tOC.Notification.showTemporary(t('settings', 'Error while creating device token'))\n\t\t\t\t\tthrow err\n\t\t\t\t})\n\t\t},\n\t\ttoggleTokenScope(token, scope, value) {\n\t\t\tconsole.debug('updating app token scope', token.id, scope, value)\n\n\t\t\tconst oldVal = token.scope[scope]\n\t\t\ttoken.scope[scope] = value\n\n\t\t\treturn this.updateToken(token)\n\t\t\t\t.then(tap(() => console.debug('app token scope updated')))\n\t\t\t\t.catch(err => {\n\t\t\t\t\tconsole.error.bind('could not update app token scope', err)\n\t\t\t\t\tOC.Notification.showTemporary(t('settings', 'Error while updating device token scope'))\n\n\t\t\t\t\t// Restore\n\t\t\t\t\ttoken.scope[scope] = oldVal\n\n\t\t\t\t\tthrow err\n\t\t\t\t})\n\t\t},\n\t\trename(token, newName) {\n\t\t\tconsole.debug('renaming app token', token.id, token.name, newName)\n\n\t\t\tconst oldName = token.name\n\t\t\ttoken.name = newName\n\n\t\t\treturn this.updateToken(token)\n\t\t\t\t.then(tap(() => console.debug('app token name updated')))\n\t\t\t\t.catch(err => {\n\t\t\t\t\tconsole.error.bind('could not update app token name', err)\n\t\t\t\t\tOC.Notification.showTemporary(t('settings', 'Error while updating device token name'))\n\n\t\t\t\t\t// Restore\n\t\t\t\t\ttoken.name = oldName\n\t\t\t\t})\n\t\t},\n\t\tupdateToken(token) {\n\t\t\treturn axios.put(this.baseUrl + '/' + token.id, token)\n\t\t\t\t.then(resp => resp.data)\n\t\t},\n\t\tdeleteToken(token) {\n\t\t\tconsole.debug('deleting app token', token)\n\n\t\t\t// eslint-disable-next-line vue/no-mutating-props\n\t\t\tthis.tokens = this.tokens.filter(t => t !== token)\n\n\t\t\treturn axios.delete(this.baseUrl + '/' + token.id)\n\t\t\t\t.then(resp => resp.data)\n\t\t\t\t.then(tap(() => console.debug('app token deleted')))\n\t\t\t\t.catch(err => {\n\t\t\t\t\tconsole.error.bind('could not delete app token', err)\n\t\t\t\t\tOC.Notification.showTemporary(t('settings', 'Error while deleting the token'))\n\n\t\t\t\t\t// Restore\n\t\t\t\t\t// eslint-disable-next-line vue/no-mutating-props\n\t\t\t\t\tthis.tokens.push(token)\n\t\t\t\t})\n\t\t},\n\t\tasync wipeToken(token) {\n\t\t\tconsole.debug('wiping app token', token)\n\n\t\t\ttry {\n\t\t\t\tawait confirmPassword()\n\n\t\t\t\tif (!(await confirm())) {\n\t\t\t\t\tconsole.debug('wipe aborted by user')\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tawait axios.post(this.baseUrl + '/wipe/' + token.id)\n\t\t\t\tconsole.debug('app token marked for wipe')\n\n\t\t\t\ttoken.type = 2\n\t\t\t} catch (err) {\n\t\t\t\tconsole.error('could not wipe app token', err)\n\t\t\t\tOC.Notification.showTemporary(t('settings', 'Error while wiping the device with the token'))\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style scoped>\n\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthTokenSection.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!./AuthTokenSection.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AuthTokenSection.vue?vue&type=template&id=b9985220&scoped=true&\"\nimport script from \"./AuthTokenSection.vue?vue&type=script&lang=js&\"\nexport * from \"./AuthTokenSection.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 \"b9985220\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"section\",attrs:{\"id\":\"security\"}},[_c('h2',[_vm._v(_vm._s(_vm.t('settings', 'Devices & sessions', {}, undefined, {sanitize: false})))]),_vm._v(\" \"),_c('p',{staticClass:\"settings-hint hidden-when-empty\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('settings', 'Web, desktop and mobile clients currently logged in to your account.'))+\"\\n\\t\")]),_vm._v(\" \"),_c('AuthTokenList',{attrs:{\"tokens\":_vm.tokens},on:{\"toggle-scope\":_vm.toggleTokenScope,\"rename\":_vm.rename,\"delete\":_vm.deleteToken,\"wipe\":_vm.wipeToken}}),_vm._v(\" \"),(_vm.canCreateToken)?_c('AuthTokenSetupDialogue',{attrs:{\"add\":_vm.addNewToken}}):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\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 Vue from 'vue'\nimport VTooltip from 'v-tooltip'\n\nimport AuthTokenSection from './components/AuthTokenSection.vue'\n\n// eslint-disable-next-line camelcase\n__webpack_nonce__ = btoa(OC.requestToken)\n\nVue.use(VTooltip, { defaultHtml: false })\nVue.prototype.t = t\n\nconst View = Vue.extend(AuthTokenSection)\nnew View({\n\tpropsData: {\n\t\ttokens: loadState('settings', 'app_tokens'),\n\t\tcanCreateToken: loadState('settings', 'can_create_app_token'),\n\t},\n}).$mount('#security-authtokens')\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, \".wiping[data-v-0f73a400]{background-color:var(--color-background-darker)}td[data-v-0f73a400]{border-top:1px solid var(--color-border);max-width:200px;white-space:normal;vertical-align:middle;position:relative}td.client[data-v-0f73a400],td.more[data-v-0f73a400]{overflow:visible;position:relative;width:44px;height:44px}td.token-name[data-v-0f73a400]{padding:10px 6px}td.token-name.token-rename[data-v-0f73a400]{padding:0}td.token-name input[data-v-0f73a400]{width:100%;margin:0}td.token-name .wiping-warning[data-v-0f73a400]{color:var(--color-text-lighter)}td.more[data-v-0f73a400]{padding:0 10px}td.client div[data-v-0f73a400]{opacity:.57;width:44px;height:44px}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AuthToken.vue\"],\"names\":[],\"mappings\":\"AACA,yBACC,+CAAA,CAGD,oBACC,wCAAA,CACA,eAAA,CACA,kBAAA,CACA,qBAAA,CACA,iBAAA,CAEA,oDACC,gBAAA,CACA,iBAAA,CACA,UAAA,CACA,WAAA,CAGD,+BACC,gBAAA,CAEA,4CACC,SAAA,CAGD,qCACC,UAAA,CACA,QAAA,CAGF,+CACC,+BAAA,CAGD,yBAEC,cAAA,CAMA,+BACC,WAAA,CACA,UAAA,CACA,WAAA\",\"sourcesContent\":[\"\\n.wiping {\\n\\tbackground-color: var(--color-background-darker);\\n}\\n\\ntd {\\n\\tborder-top: 1px solid var(--color-border);\\n\\tmax-width: 200px;\\n\\twhite-space: normal;\\n\\tvertical-align: middle;\\n\\tposition: relative;\\n\\n\\t&%icon {\\n\\t\\toverflow: visible;\\n\\t\\tposition: relative;\\n\\t\\twidth: 44px;\\n\\t\\theight: 44px;\\n\\t}\\n\\n\\t&.token-name {\\n\\t\\tpadding: 10px 6px;\\n\\n\\t\\t&.token-rename {\\n\\t\\t\\tpadding: 0;\\n\\t\\t}\\n\\n\\t\\tinput {\\n\\t\\t\\twidth: 100%;\\n\\t\\t\\tmargin: 0;\\n\\t\\t}\\n\\t}\\n\\t&.token-name .wiping-warning {\\n\\t\\tcolor: var(--color-text-lighter);\\n\\t}\\n\\n\\t&.more {\\n\\t\\t@extend %icon;\\n\\t\\tpadding: 0 10px;\\n\\t}\\n\\n\\t&.client {\\n\\t\\t@extend %icon;\\n\\n\\t\\tdiv {\\n\\t\\t\\topacity: 0.57;\\n\\t\\t\\twidth: 44px;\\n\\t\\t\\theight: 44px;\\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, \"table[data-v-1474f25b]{width:100%;min-height:50px;padding-top:5px;max-width:580px}table th[data-v-1474f25b]{opacity:.5;padding:10px 0}.token-list td>a.icon-more[data-v-1474f25b]{transition:opacity var(--animation-quick)}.token-list a.icon-more[data-v-1474f25b]{padding:14px;display:block;width:44px;height:44px;opacity:.5}.token-list tr:hover td>a.icon[data-v-1474f25b],.token-list tr td>a.icon[data-v-1474f25b]:focus,.token-list tr.active td>a.icon[data-v-1474f25b]{opacity:1}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AuthTokenList.vue\"],\"names\":[],\"mappings\":\"AACA,uBACC,UAAA,CACA,eAAA,CACA,eAAA,CACA,eAAA,CAEA,0BACC,UAAA,CACA,cAAA,CAKD,4CACC,yCAAA,CAGD,yCACC,YAAA,CACA,aAAA,CACA,UAAA,CACA,WAAA,CACA,UAAA,CAIA,iJAGC,SAAA\",\"sourcesContent\":[\"\\ntable {\\n\\twidth: 100%;\\n\\tmin-height: 50px;\\n\\tpadding-top: 5px;\\n\\tmax-width: 580px;\\n\\n\\tth {\\n\\t\\topacity: .5;\\n\\t\\tpadding: 10px 0;\\n\\t}\\n}\\n\\n.token-list {\\n\\ttd > a.icon-more {\\n\\t\\ttransition: opacity var(--animation-quick);\\n\\t}\\n\\n\\ta.icon-more {\\n\\t\\tpadding: 14px;\\n\\t\\tdisplay: block;\\n\\t\\twidth: 44px;\\n\\t\\theight: 44px;\\n\\t\\topacity: .5;\\n\\t}\\n\\n\\ttr {\\n\\t\\t&:hover td > a.icon,\\n\\t\\ttd > a.icon:focus,\\n\\t\\t&.active td > a.icon {\\n\\t\\t\\topacity: 1;\\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-tokens-table tr>*:nth-child(2){padding-left:6px}#app-tokens-table tr>*:nth-child(3){text-align:right}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AuthTokenList.vue\"],\"names\":[],\"mappings\":\"AAEC,oCACC,gBAAA,CAGD,oCACC,gBAAA\",\"sourcesContent\":[\"\\n#app-tokens-table {\\n\\ttr > *:nth-child(2) {\\n\\t\\tpadding-left: 6px;\\n\\t}\\n\\n\\ttr > *:nth-child(3) {\\n\\t\\ttext-align: right;\\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-password-row[data-v-7831fe39]{display:flex;align-items:center}.app-password-row .icon[data-v-7831fe39]{background-size:16px 16px;display:inline-block;position:relative;top:3px;margin-left:5px;margin-right:8px}.app-password-label[data-v-7831fe39]{display:table-cell;padding-right:1em;text-align:right;vertical-align:middle;width:100px}.row input[data-v-7831fe39]{height:44px !important;padding:7px 12px;margin-right:12px;width:200px}.monospaced[data-v-7831fe39]{width:245px;font-family:monospace}.button-vue[data-v-7831fe39]{display:inline-block;margin:3px 3px 3px 3px}.row[data-v-7831fe39]{display:flex;align-items:center}.spacing[data-v-7831fe39]{padding-top:16px}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AuthTokenSetupDialogue.vue\"],\"names\":[],\"mappings\":\"AACA,mCACC,YAAA,CACA,kBAAA,CAEA,yCACC,yBAAA,CACA,oBAAA,CACA,iBAAA,CACA,OAAA,CACA,eAAA,CACA,gBAAA,CAKF,qCACC,kBAAA,CACA,iBAAA,CACA,gBAAA,CACA,qBAAA,CACA,WAAA,CAGD,4BACC,sBAAA,CACA,gBAAA,CACA,iBAAA,CACA,WAAA,CAGD,6BACC,WAAA,CACA,qBAAA,CAGD,6BACC,oBAAA,CACA,sBAAA,CAGD,sBACC,YAAA,CACA,kBAAA,CAGD,0BACC,gBAAA\",\"sourcesContent\":[\"\\n.app-password-row {\\n\\tdisplay: flex;\\n\\talign-items: center;\\n\\n\\t.icon {\\n\\t\\tbackground-size: 16px 16px;\\n\\t\\tdisplay: inline-block;\\n\\t\\tposition: relative;\\n\\t\\ttop: 3px;\\n\\t\\tmargin-left: 5px;\\n\\t\\tmargin-right: 8px;\\n\\t}\\n\\n}\\n\\n.app-password-label {\\n\\tdisplay: table-cell;\\n\\tpadding-right: 1em;\\n\\ttext-align: right;\\n\\tvertical-align: middle;\\n\\twidth: 100px;\\n}\\n\\n.row input {\\n\\theight: 44px !important;\\n\\tpadding: 7px 12px;\\n\\tmargin-right: 12px;\\n\\twidth: 200px;\\n}\\n\\n.monospaced {\\n\\twidth: 245px;\\n\\tfont-family: monospace;\\n}\\n\\n.button-vue{\\n\\tdisplay:inline-block;\\n\\tmargin: 3px 3px 3px 3px;\\n}\\n\\n.row {\\n\\tdisplay: flex;\\n\\talign-items: center;\\n}\\n\\n.spacing {\\n\\tpadding-top: 16px;\\n}\\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 = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(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 = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(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 = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 4783;","__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\t4783: 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 = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(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(function(id) { return 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], function() { return __webpack_require__(82773); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","ie","edge","firefox","chrome","safari","androidChrome","iphone","ipad","iosClient","androidClient","iosTalkClient","androidTalkClient","davx5","webPirate","sailfishBrowser","neon","productName","name","components","NcActions","NcActionButton","NcActionCheckbox","props","token","type","required","data","showMore","renaming","newName","oldName","actionOpen","computed","lastActivityRelative","lastActivity","iconName","os","version","icon","wiping","methods","startRename","cancelRename","revoke","rename","wipe","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","component","_vm","this","_c","_self","class","attrs","id","staticClass","_v","canRename","directives","rawName","value","expression","ref","domProps","on","$event","indexOf","_k","keyCode","key","apply","arguments","target","composing","_s","t","_e","current","scope","filesystem","stopPropagation","preventDefault","$emit","canDelete","AuthToken","tokens","sortedTokens","toggleScope","onDelete","onWipe","length","_l","Check","ContentCopy","NcButton","QR","add","adding","loading","deviceName","appPassword","loginName","copied","showQR","qrUrl","copyTooltipOptions","selectInput","e","submit","confirmPassword","then","catch","console","OC","copyPassword","navigator","showError","setTimeout","reset","scopedSlots","_u","fn","proxy","cb","AuthTokenSetupDialogue","AuthTokenList","canCreateToken","baseUrl","addNewToken","toggleTokenScope","updateToken","deleteToken","wipeToken","resolve","axios","undefined","sanitize","__webpack_nonce__","btoa","requestToken","Vue","VTooltip","defaultHtml","AuthTokenSection","propsData","loadState","$mount","___CSS_LOADER_EXPORT___","push","module","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","loaded","__webpack_modules__","call","m","O","result","chunkIds","priority","notFulfilled","Infinity","i","fulfilled","j","Object","keys","every","splice","r","n","getter","__esModule","d","a","definition","o","defineProperty","enumerable","get","g","globalThis","Function","window","obj","prop","prototype","hasOwnProperty","Symbol","toStringTag","nmd","paths","children","b","document","baseURI","self","location","href","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","forEach","bind","nc","__webpack_exports__"],"sourceRoot":""}
\ No newline at end of file +{"version":3,"file":"settings-vue-settings-personal-security.js?v=2a58f86278ad9ad866f1","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/apps/settings/src/components/AuthToken.vue","webpack:///nextcloud/apps/settings/src/components/AuthToken.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/AuthToken.vue?70ef","webpack://nextcloud/./apps/settings/src/components/AuthToken.vue?1338","webpack://nextcloud/./apps/settings/src/components/AuthToken.vue?ca52","webpack:///nextcloud/apps/settings/src/components/AuthTokenList.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/settings/src/components/AuthTokenList.vue","webpack://nextcloud/./apps/settings/src/components/AuthTokenList.vue?6b8b","webpack://nextcloud/./apps/settings/src/components/AuthTokenList.vue?4748","webpack://nextcloud/./apps/settings/src/components/AuthTokenList.vue?90cb","webpack://nextcloud/./apps/settings/src/components/AuthTokenList.vue?5c2d","webpack:///nextcloud/apps/settings/src/components/AuthTokenSetupDialogue.vue","webpack:///nextcloud/apps/settings/src/components/AuthTokenSetupDialogue.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/AuthTokenSetupDialogue.vue?2afd","webpack://nextcloud/./apps/settings/src/components/AuthTokenSetupDialogue.vue?521c","webpack://nextcloud/./apps/settings/src/components/AuthTokenSetupDialogue.vue?6bad","webpack:///nextcloud/apps/settings/src/components/AuthTokenSection.vue","webpack:///nextcloud/apps/settings/src/components/AuthTokenSection.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/AuthTokenSection.vue?e9d0","webpack://nextcloud/./apps/settings/src/components/AuthTokenSection.vue?a091","webpack:///nextcloud/apps/settings/src/main-personal-security.js","webpack:///nextcloud/apps/settings/src/components/AuthToken.vue?vue&type=style&index=0&id=0f73a400&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/settings/src/components/AuthTokenList.vue?vue&type=style&index=0&id=1474f25b&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/settings/src/components/AuthTokenList.vue?vue&type=style&index=1&id=1474f25b&prod&lang=scss&","webpack:///nextcloud/apps/settings/src/components/AuthTokenSetupDialogue.vue?vue&type=style&index=0&id=7831fe39&prod&lang=scss&scoped=true&","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 = function(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(function(key) { return __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 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\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<tr :data-id=\"token.id\"\n\t\t:class=\"wiping\">\n\t\t<td class=\"client\">\n\t\t\t<div :class=\"iconName.icon\" />\n\t\t</td>\n\t\t<td class=\"token-name\">\n\t\t\t<input v-if=\"token.canRename && renaming\"\n\t\t\t\tref=\"input\"\n\t\t\t\tv-model=\"newName\"\n\t\t\t\ttype=\"text\"\n\t\t\t\t@keyup.enter=\"rename\"\n\t\t\t\t@change=\"rename\"\n\t\t\t\t@keyup.esc=\"cancelRename\">\n\t\t\t<span v-else>{{ iconName.name }}</span>\n\t\t\t<span v-if=\"wiping\" class=\"wiping-warning\">({{ t('settings', 'Marked for remote wipe') }})</span>\n\t\t</td>\n\t\t<td>\n\t\t\t<span :title=\"lastActivity\" class=\"last-activity\">{{ lastActivityRelative }}</span>\n\t\t</td>\n\t\t<td class=\"more\">\n\t\t\t<NcActions v-if=\"!token.current\"\n\t\t\t\t:title=\"t('settings', 'Device settings')\"\n\t\t\t\t:aria-label=\"t('settings', 'Device settings')\"\n\t\t\t\t:open.sync=\"actionOpen\">\n\t\t\t\t<NcActionCheckbox v-if=\"token.type === 1\"\n\t\t\t\t\t:checked=\"token.scope.filesystem\"\n\t\t\t\t\t@change.stop.prevent=\"$emit('toggle-scope', token, 'filesystem', !token.scope.filesystem)\">\n\t\t\t\t\t<!-- TODO: add text/longtext with some description -->\n\t\t\t\t\t{{ t('settings', 'Allow filesystem access') }}\n\t\t\t\t</NcActionCheckbox>\n\t\t\t\t<NcActionButton v-if=\"token.canRename\"\n\t\t\t\t\ticon=\"icon-rename\"\n\t\t\t\t\t@click.stop.prevent=\"startRename\">\n\t\t\t\t\t<!-- TODO: add text/longtext with some description -->\n\t\t\t\t\t{{ t('settings', 'Rename') }}\n\t\t\t\t</NcActionButton>\n\n\t\t\t\t<!-- revoke & wipe -->\n\t\t\t\t<template v-if=\"token.canDelete\">\n\t\t\t\t\t<template v-if=\"token.type !== 2\">\n\t\t\t\t\t\t<NcActionButton icon=\"icon-delete\"\n\t\t\t\t\t\t\t@click.stop.prevent=\"revoke\">\n\t\t\t\t\t\t\t<!-- TODO: add text/longtext with some description -->\n\t\t\t\t\t\t\t{{ t('settings', 'Revoke') }}\n\t\t\t\t\t\t</NcActionButton>\n\t\t\t\t\t\t<NcActionButton icon=\"icon-delete\"\n\t\t\t\t\t\t\t@click.stop.prevent=\"wipe\">\n\t\t\t\t\t\t\t{{ t('settings', 'Wipe device') }}\n\t\t\t\t\t\t</NcActionButton>\n\t\t\t\t\t</template>\n\t\t\t\t\t<NcActionButton v-else-if=\"token.type === 2\"\n\t\t\t\t\t\ticon=\"icon-delete\"\n\t\t\t\t\t\t:title=\"t('settings', 'Revoke')\"\n\t\t\t\t\t\t@click.stop.prevent=\"revoke\">\n\t\t\t\t\t\t{{ t('settings', 'Revoking this token might prevent the wiping of your device if it has not started the wipe yet.') }}\n\t\t\t\t\t</NcActionButton>\n\t\t\t\t</template>\n\t\t\t</NcActions>\n\t\t</td>\n\t</tr>\n</template>\n\n<script>\nimport {\n\tNcActions,\n\tNcActionButton,\n\tNcActionCheckbox,\n} from '@nextcloud/vue'\n\n// When using capture groups the following parts are extracted the first is used as the version number, the second as the OS\nconst userAgentMap = {\n\tie: /(?:MSIE|Trident|Trident\\/7.0; rv)[ :](\\d+)/,\n\t// Microsoft Edge User Agent from https://msdn.microsoft.com/en-us/library/hh869301(v=vs.85).aspx\n\tedge: /^Mozilla\\/5\\.0 \\([^)]+\\) AppleWebKit\\/[0-9.]+ \\(KHTML, like Gecko\\) Chrome\\/[0-9.]+ (?:Mobile Safari|Safari)\\/[0-9.]+ Edge\\/[0-9.]+$/,\n\t// Firefox User Agent from https://developer.mozilla.org/en-US/docs/Web/HTTP/Gecko_user_agent_string_reference\n\tfirefox: /^Mozilla\\/5\\.0 \\([^)]*(Windows|OS X|Linux)[^)]+\\) Gecko\\/[0-9.]+ Firefox\\/(\\d+)(?:\\.\\d)?$/,\n\t// Chrome User Agent from https://developer.chrome.com/multidevice/user-agent\n\tchrome: /^Mozilla\\/5\\.0 \\([^)]*(Windows|OS X|Linux)[^)]+\\) AppleWebKit\\/[0-9.]+ \\(KHTML, like Gecko\\) Chrome\\/(\\d+)[0-9.]+ (?:Mobile Safari|Safari)\\/[0-9.]+$/,\n\t// Safari User Agent from http://www.useragentstring.com/pages/Safari/\n\tsafari: /^Mozilla\\/5\\.0 \\([^)]*(Windows|OS X)[^)]+\\) AppleWebKit\\/[0-9.]+ \\(KHTML, like Gecko\\)(?: Version\\/([0-9]+)[0-9.]+)? Safari\\/[0-9.A-Z]+$/,\n\t// Android Chrome user agent: https://developers.google.com/chrome/mobile/docs/user-agent\n\tandroidChrome: /Android.*(?:; (.*) Build\\/).*Chrome\\/(\\d+)[0-9.]+/,\n\tiphone: / *CPU +iPhone +OS +([0-9]+)_(?:[0-9_])+ +like +Mac +OS +X */,\n\tipad: /\\(iPad; *CPU +OS +([0-9]+)_(?:[0-9_])+ +like +Mac +OS +X */,\n\tiosClient: /^Mozilla\\/5\\.0 \\(iOS\\) (?:ownCloud|Nextcloud)-iOS.*$/,\n\tandroidClient: /^Mozilla\\/5\\.0 \\(Android\\) (?:ownCloud|Nextcloud)-android.*$/,\n\tiosTalkClient: /^Mozilla\\/5\\.0 \\(iOS\\) Nextcloud-Talk.*$/,\n\tandroidTalkClient: /^Mozilla\\/5\\.0 \\(Android\\) Nextcloud-Talk.*$/,\n\t// DAVx5/3.3.8-beta2-gplay (2021/01/02; dav4jvm; okhttp/4.9.0) Android/10\n\tdavx5: /DAV(?:droid|x5)\\/([^ ]+)/,\n\t// Mozilla/5.0 (U; Linux; Maemo; Jolla; Sailfish; like Android 4.3) AppleWebKit/538.1 (KHTML, like Gecko) WebPirate/2.0 like Mobile Safari/538.1 (compatible)\n\twebPirate: /(Sailfish).*WebPirate\\/(\\d+)/,\n\t// Mozilla/5.0 (Maemo; Linux; U; Jolla; Sailfish; Mobile; rv:31.0) Gecko/31.0 Firefox/31.0 SailfishBrowser/1.0\n\tsailfishBrowser: /(Sailfish).*SailfishBrowser\\/(\\d+)/,\n\t// Neon 1.0.0+1\n\tneon: /Neon \\d+\\.\\d+\\.\\d+\\+\\d+/,\n}\nconst nameMap = {\n\tie: t('setting', 'Internet Explorer'),\n\tedge: t('setting', 'Edge'),\n\tfirefox: t('setting', 'Firefox'),\n\tchrome: t('setting', 'Google Chrome'),\n\tsafari: t('setting', 'Safari'),\n\tandroidChrome: t('setting', 'Google Chrome for Android'),\n\tiphone: t('setting', 'iPhone'),\n\tipad: t('setting', 'iPad'),\n\tiosClient: t('setting', '{productName} iOS app', { productName: window.oc_defaults.productName }),\n\tandroidClient: t('setting', '{productName} Android app', { productName: window.oc_defaults.productName }),\n\tiosTalkClient: t('setting', '{productName} Talk for iOS', { productName: window.oc_defaults.productName }),\n\tandroidTalkClient: t('setting', '{productName} Talk for Android', { productName: window.oc_defaults.productName }),\n\tdavx5: 'DAVx5',\n\twebPirate: 'WebPirate',\n\tsailfishBrowser: 'SailfishBrowser',\n\tneon: 'Neon',\n}\nconst iconMap = {\n\tie: 'icon-desktop',\n\tedge: 'icon-desktop',\n\tfirefox: 'icon-desktop',\n\tchrome: 'icon-desktop',\n\tsafari: 'icon-desktop',\n\tandroidChrome: 'icon-phone',\n\tiphone: 'icon-phone',\n\tipad: 'icon-tablet',\n\tiosClient: 'icon-phone',\n\tandroidClient: 'icon-phone',\n\tiosTalkClient: 'icon-phone',\n\tandroidTalkClient: 'icon-phone',\n\tdavx5: 'icon-phone',\n\twebPirate: 'icon-link',\n\tsailfishBrowser: 'icon-link',\n}\n\nexport default {\n\tname: 'AuthToken',\n\tcomponents: {\n\t\tNcActions,\n\t\tNcActionButton,\n\t\tNcActionCheckbox,\n\t},\n\tprops: {\n\t\ttoken: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tshowMore: this.token.canScope || this.token.canDelete,\n\t\t\trenaming: false,\n\t\t\tnewName: '',\n\t\t\toldName: '',\n\t\t\tactionOpen: false,\n\t\t}\n\t},\n\tcomputed: {\n\t\tlastActivityRelative() {\n\t\t\treturn OC.Util.relativeModifiedDate(this.token.lastActivity * 1000)\n\t\t},\n\t\tlastActivity() {\n\t\t\treturn OC.Util.formatDate(this.token.lastActivity * 1000, 'LLL')\n\t\t},\n\t\ticonName() {\n\t\t\t// pretty format sync client user agent\n\t\t\tconst matches = this.token.name.match(/Mozilla\\/5\\.0 \\((\\w+)\\) (?:mirall|csyncoC)\\/(\\d+\\.\\d+\\.\\d+)/)\n\n\t\t\tlet icon = ''\n\t\t\tif (matches) {\n\t\t\t\t/* eslint-disable-next-line */\n\t\t\t\tthis.token.name = t('settings', 'Sync client - {os}', {\n\t\t\t\t\tos: matches[1],\n\t\t\t\t\tversion: matches[2],\n\t\t\t\t})\n\t\t\t\ticon = 'icon-desktop'\n\t\t\t}\n\n\t\t\t// preserve title for cases where we format it further\n\t\t\tconst title = this.token.name\n\t\t\tlet name = this.token.name\n\t\t\tfor (const client in userAgentMap) {\n\t\t\t\tconst matches = title.match(userAgentMap[client])\n\t\t\t\tif (matches) {\n\t\t\t\t\tif (matches[2] && matches[1]) { // version number and os\n\t\t\t\t\t\tname = nameMap[client] + ' ' + matches[2] + ' - ' + matches[1]\n\t\t\t\t\t} else if (matches[1]) { // only version number\n\t\t\t\t\t\tname = nameMap[client] + ' ' + matches[1]\n\t\t\t\t\t} else {\n\t\t\t\t\t\tname = nameMap[client]\n\t\t\t\t\t}\n\n\t\t\t\t\ticon = iconMap[client]\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.token.current) {\n\t\t\t\tname = t('settings', 'This session')\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\ticon,\n\t\t\t\tname,\n\t\t\t}\n\t\t},\n\t\twiping() {\n\t\t\treturn this.token.type === 2\n\t\t},\n\t},\n\tmethods: {\n\t\tstartRename() {\n\t\t\t// Close action (popover menu)\n\t\t\tthis.actionOpen = false\n\n\t\t\tthis.oldName = this.token.name\n\t\t\tthis.newName = this.token.name\n\t\t\tthis.renaming = true\n\t\t\tthis.$nextTick(() => {\n\t\t\t\tthis.$refs.input.select()\n\t\t\t})\n\t\t},\n\t\tcancelRename() {\n\t\t\tthis.renaming = false\n\t\t\tthis.$emit('rename', this.token, this.oldName)\n\t\t},\n\t\trevoke() {\n\t\t\tthis.actionOpen = false\n\t\t\tthis.$emit('delete', this.token)\n\t\t},\n\t\trename() {\n\t\t\tthis.renaming = false\n\t\t\tthis.$emit('rename', this.token, this.newName)\n\t\t},\n\t\twipe() {\n\t\t\tthis.actionOpen = false\n\t\t\tthis.$emit('wipe', this.token)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.wiping {\n\t\tbackground-color: var(--color-background-darker);\n\t}\n\n\ttd {\n\t\tborder-top: 1px solid var(--color-border);\n\t\tmax-width: 200px;\n\t\twhite-space: normal;\n\t\tvertical-align: middle;\n\t\tposition: relative;\n\n\t\t&%icon {\n\t\t\toverflow: visible;\n\t\t\tposition: relative;\n\t\t\twidth: 44px;\n\t\t\theight: 44px;\n\t\t}\n\n\t\t&.token-name {\n\t\t\tpadding: 10px 6px;\n\n\t\t\t&.token-rename {\n\t\t\t\tpadding: 0;\n\t\t\t}\n\n\t\t\tinput {\n\t\t\t\twidth: 100%;\n\t\t\t\tmargin: 0;\n\t\t\t}\n\t\t}\n\t\t&.token-name .wiping-warning {\n\t\t\tcolor: var(--color-text-lighter);\n\t\t}\n\n\t\t&.more {\n\t\t\t@extend %icon;\n\t\t\tpadding: 0 10px;\n\t\t}\n\n\t\t&.client {\n\t\t\t@extend %icon;\n\n\t\t\tdiv {\n\t\t\t\topacity: 0.57;\n\t\t\t\twidth: 44px;\n\t\t\t\theight: 44px;\n\t\t\t}\n\t\t}\n\t}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthToken.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!./AuthToken.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!./AuthToken.vue?vue&type=style&index=0&id=0f73a400&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!./AuthToken.vue?vue&type=style&index=0&id=0f73a400&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AuthToken.vue?vue&type=template&id=0f73a400&scoped=true&\"\nimport script from \"./AuthToken.vue?vue&type=script&lang=js&\"\nexport * from \"./AuthToken.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AuthToken.vue?vue&type=style&index=0&id=0f73a400&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 \"0f73a400\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('tr',{class:_vm.wiping,attrs:{\"data-id\":_vm.token.id}},[_c('td',{staticClass:\"client\"},[_c('div',{class:_vm.iconName.icon})]),_vm._v(\" \"),_c('td',{staticClass:\"token-name\"},[(_vm.token.canRename && _vm.renaming)?_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.newName),expression:\"newName\"}],ref:\"input\",attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.newName)},on:{\"keyup\":[function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\"))return null;return _vm.rename.apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"esc\",27,$event.key,[\"Esc\",\"Escape\"]))return null;return _vm.cancelRename.apply(null, arguments)}],\"change\":_vm.rename,\"input\":function($event){if($event.target.composing)return;_vm.newName=$event.target.value}}}):_c('span',[_vm._v(_vm._s(_vm.iconName.name))]),_vm._v(\" \"),(_vm.wiping)?_c('span',{staticClass:\"wiping-warning\"},[_vm._v(\"(\"+_vm._s(_vm.t('settings', 'Marked for remote wipe'))+\")\")]):_vm._e()]),_vm._v(\" \"),_c('td',[_c('span',{staticClass:\"last-activity\",attrs:{\"title\":_vm.lastActivity}},[_vm._v(_vm._s(_vm.lastActivityRelative))])]),_vm._v(\" \"),_c('td',{staticClass:\"more\"},[(!_vm.token.current)?_c('NcActions',{attrs:{\"title\":_vm.t('settings', 'Device settings'),\"aria-label\":_vm.t('settings', 'Device settings'),\"open\":_vm.actionOpen},on:{\"update:open\":function($event){_vm.actionOpen=$event}}},[(_vm.token.type === 1)?_c('NcActionCheckbox',{attrs:{\"checked\":_vm.token.scope.filesystem},on:{\"change\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.$emit('toggle-scope', _vm.token, 'filesystem', !_vm.token.scope.filesystem)}}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Allow filesystem access'))+\"\\n\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.token.canRename)?_c('NcActionButton',{attrs:{\"icon\":\"icon-rename\"},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.startRename.apply(null, arguments)}}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Rename'))+\"\\n\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.token.canDelete)?[(_vm.token.type !== 2)?[_c('NcActionButton',{attrs:{\"icon\":\"icon-delete\"},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.revoke.apply(null, arguments)}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Revoke'))+\"\\n\\t\\t\\t\\t\\t\")]),_vm._v(\" \"),_c('NcActionButton',{attrs:{\"icon\":\"icon-delete\"},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.wipe.apply(null, arguments)}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Wipe device'))+\"\\n\\t\\t\\t\\t\\t\")])]:(_vm.token.type === 2)?_c('NcActionButton',{attrs:{\"icon\":\"icon-delete\",\"title\":_vm.t('settings', 'Revoke')},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.revoke.apply(null, arguments)}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Revoking this token might prevent the wiping of your device if it has not started the wipe yet.'))+\"\\n\\t\\t\\t\\t\")]):_vm._e()]:_vm._e()],2):_vm._e()],1)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthTokenList.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!./AuthTokenList.vue?vue&type=script&lang=js&\"","<!--\n - @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\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<table id=\"app-tokens-table\">\n\t\t<thead v-if=\"tokens.length\">\n\t\t\t<tr>\n\t\t\t\t<th />\n\t\t\t\t<th>{{ t('settings', 'Device') }}</th>\n\t\t\t\t<th>{{ t('settings', 'Last activity') }}</th>\n\t\t\t\t<th />\n\t\t\t</tr>\n\t\t</thead>\n\t\t<tbody class=\"token-list\">\n\t\t\t<AuthToken v-for=\"token in sortedTokens\"\n\t\t\t\t:key=\"token.id\"\n\t\t\t\t:token=\"token\"\n\t\t\t\t@toggle-scope=\"toggleScope\"\n\t\t\t\t@rename=\"rename\"\n\t\t\t\t@delete=\"onDelete\"\n\t\t\t\t@wipe=\"onWipe\" />\n\t\t</tbody>\n\t</table>\n</template>\n\n<script>\nimport AuthToken from './AuthToken.vue'\n\nexport default {\n\tname: 'AuthTokenList',\n\tcomponents: {\n\t\tAuthToken,\n\t},\n\tprops: {\n\t\ttokens: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tcomputed: {\n\t\tsortedTokens() {\n\t\t\treturn this.tokens.slice().sort((t1, t2) => {\n\t\t\t\tconst ts1 = parseInt(t1.lastActivity, 10)\n\t\t\t\tconst ts2 = parseInt(t2.lastActivity, 10)\n\t\t\t\treturn ts2 - ts1\n\t\t\t})\n\t\t},\n\t},\n\tmethods: {\n\t\ttoggleScope(token, scope, value) {\n\t\t\t// Just pass it on\n\t\t\tthis.$emit('toggle-scope', token, scope, value)\n\t\t},\n\t\trename(token, newName) {\n\t\t\t// Just pass it on\n\t\t\tthis.$emit('rename', token, newName)\n\t\t},\n\t\tonDelete(token) {\n\t\t\t// Just pass it on\n\t\t\tthis.$emit('delete', token)\n\t\t},\n\t\tonWipe(token) {\n\t\t\t// Just pass it on\n\t\t\tthis.$emit('wipe', token)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n\ttable {\n\t\twidth: 100%;\n\t\tmin-height: 50px;\n\t\tpadding-top: 5px;\n\t\tmax-width: 580px;\n\n\t\tth {\n\t\t\topacity: .5;\n\t\t\tpadding: 10px 0;\n\t\t}\n\t}\n\n\t.token-list {\n\t\ttd > a.icon-more {\n\t\t\ttransition: opacity var(--animation-quick);\n\t\t}\n\n\t\ta.icon-more {\n\t\t\tpadding: 14px;\n\t\t\tdisplay: block;\n\t\t\twidth: 44px;\n\t\t\theight: 44px;\n\t\t\topacity: .5;\n\t\t}\n\n\t\ttr {\n\t\t\t&:hover td > a.icon,\n\t\t\ttd > a.icon:focus,\n\t\t\t&.active td > a.icon {\n\t\t\t\topacity: 1;\n\t\t\t}\n\t\t}\n\t}\n</style>\n\n<!-- some styles are not scoped to make them work on subcomponents -->\n<style lang=\"scss\">\n\t#app-tokens-table {\n\t\ttr > *:nth-child(2) {\n\t\t\tpadding-left: 6px;\n\t\t}\n\n\t\ttr > *:nth-child(3) {\n\t\t\ttext-align: right;\n\t\t}\n\t}\n</style>\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!./AuthTokenList.vue?vue&type=style&index=0&id=1474f25b&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!./AuthTokenList.vue?vue&type=style&index=0&id=1474f25b&prod&lang=scss&scoped=true&\";\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/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthTokenList.vue?vue&type=style&index=1&id=1474f25b&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!./AuthTokenList.vue?vue&type=style&index=1&id=1474f25b&prod&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AuthTokenList.vue?vue&type=template&id=1474f25b&scoped=true&\"\nimport script from \"./AuthTokenList.vue?vue&type=script&lang=js&\"\nexport * from \"./AuthTokenList.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AuthTokenList.vue?vue&type=style&index=0&id=1474f25b&prod&lang=scss&scoped=true&\"\nimport style1 from \"./AuthTokenList.vue?vue&type=style&index=1&id=1474f25b&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 \"1474f25b\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('table',{attrs:{\"id\":\"app-tokens-table\"}},[(_vm.tokens.length)?_c('thead',[_c('tr',[_c('th'),_vm._v(\" \"),_c('th',[_vm._v(_vm._s(_vm.t('settings', 'Device')))]),_vm._v(\" \"),_c('th',[_vm._v(_vm._s(_vm.t('settings', 'Last activity')))]),_vm._v(\" \"),_c('th')])]):_vm._e(),_vm._v(\" \"),_c('tbody',{staticClass:\"token-list\"},_vm._l((_vm.sortedTokens),function(token){return _c('AuthToken',{key:token.id,attrs:{\"token\":token},on:{\"toggle-scope\":_vm.toggleScope,\"rename\":_vm.rename,\"delete\":_vm.onDelete,\"wipe\":_vm.onWipe}})}),1)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\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<div v-if=\"!adding\" id=\"generate-app-token-section\" class=\"row spacing\">\n\t\t<!-- Port to TextField component when available -->\n\t\t<input v-model=\"deviceName\"\n\t\t\ttype=\"text\"\n\t\t\t:maxlength=\"120\"\n\t\t\t:disabled=\"loading\"\n\t\t\t:placeholder=\"t('settings', 'App name')\"\n\t\t\t@keydown.enter=\"submit\">\n\t\t<NcButton :disabled=\"loading || deviceName.length === 0\"\n\t\t\ttype=\"primary\"\n\t\t\t@click=\"submit\">\n\t\t\t{{ t('settings', 'Create new app password') }}\n\t\t</NcButton>\n\t</div>\n\t<div v-else class=\"spacing\">\n\t\t{{ t('settings', 'Use the credentials below to configure your app or device.') }}\n\t\t{{ t('settings', 'For security reasons this password will only be shown once.') }}\n\t\t<div class=\"app-password-row\">\n\t\t\t<label for=\"app-username\" class=\"app-password-label\">{{ t('settings', 'Username') }}</label>\n\t\t\t<input id=\"app-username\"\n\t\t\t\t:value=\"loginName\"\n\t\t\t\ttype=\"text\"\n\t\t\t\tclass=\"monospaced\"\n\t\t\t\treadonly=\"readonly\"\n\t\t\t\t@focus=\"selectInput\">\n\t\t</div>\n\t\t<div class=\"app-password-row\">\n\t\t\t<label for=\"app-password\" class=\"app-password-label\">{{ t('settings', 'Password') }}</label>\n\t\t\t<input id=\"app-password\"\n\t\t\t\tref=\"appPassword\"\n\t\t\t\t:value=\"appPassword\"\n\t\t\t\ttype=\"text\"\n\t\t\t\tclass=\"monospaced\"\n\t\t\t\treadonly=\"readonly\"\n\t\t\t\t@focus=\"selectInput\">\n\t\t\t<NcButton type=\"tertiary\"\n\t\t\t\t:title=\"copyTooltipOptions\"\n\t\t\t\t:aria-label=\"copyTooltipOptions\"\n\t\t\t\t@click=\"copyPassword\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<Check v-if=\"copied\" :size=\"20\" />\n\t\t\t\t\t<ContentCopy v-else :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t</NcButton>\n\t\t\t<NcButton @click=\"reset\">\n\t\t\t\t{{ t('settings', 'Done') }}\n\t\t\t</NcButton>\n\t\t</div>\n\t\t<div class=\"app-password-row\">\n\t\t\t<span class=\"app-password-label\" />\n\t\t\t<a v-if=\"!showQR\"\n\t\t\t\t@click=\"showQR = true\">\n\t\t\t\t{{ t('settings', 'Show QR code for mobile apps') }}\n\t\t\t</a>\n\t\t\t<QR v-else\n\t\t\t\t:value=\"qrUrl\" />\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport QR from '@chenfengyuan/vue-qrcode'\nimport { confirmPassword } from '@nextcloud/password-confirmation'\nimport '@nextcloud/password-confirmation/dist/style.css'\nimport { showError } from '@nextcloud/dialogs'\nimport { getRootUrl } from '@nextcloud/router'\nimport NcButton from '@nextcloud/vue/dist/Components/NcButton.js'\n\nimport Check from 'vue-material-design-icons/Check.vue'\nimport ContentCopy from 'vue-material-design-icons/ContentCopy.vue'\n\nexport default {\n\tname: 'AuthTokenSetupDialogue',\n\tcomponents: {\n\t\tCheck,\n\t\tContentCopy,\n\t\tNcButton,\n\t\tQR,\n\t},\n\tprops: {\n\t\tadd: {\n\t\t\ttype: Function,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tadding: false,\n\t\t\tloading: false,\n\t\t\tdeviceName: '',\n\t\t\tappPassword: '',\n\t\t\tloginName: '',\n\t\t\tcopied: false,\n\t\t\tshowQR: false,\n\t\t\tqrUrl: '',\n\t\t}\n\t},\n\tcomputed: {\n\t\tcopyTooltipOptions() {\n\t\t\tif (this.copied) {\n\t\t\t\treturn t('settings', 'Copied!')\n\t\t\t}\n\t\t\treturn t('settings', 'Copy')\n\t\t},\n\t},\n\tmethods: {\n\t\tselectInput(e) {\n\t\t\te.currentTarget.select()\n\t\t},\n\t\tsubmit() {\n\t\t\tconfirmPassword()\n\t\t\t\t.then(() => {\n\t\t\t\t\tthis.loading = true\n\t\t\t\t\treturn this.add(this.deviceName)\n\t\t\t\t})\n\t\t\t\t.then(token => {\n\t\t\t\t\tthis.adding = true\n\t\t\t\t\tthis.loginName = token.loginName\n\t\t\t\t\tthis.appPassword = token.token\n\n\t\t\t\t\tconst server = window.location.protocol + '//' + window.location.host + getRootUrl()\n\t\t\t\t\tthis.qrUrl = `nc://login/user:${token.loginName}&password:${token.token}&server:${server}`\n\n\t\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t\tthis.$refs.appPassword.select()\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t\t.catch(err => {\n\t\t\t\t\tconsole.error('could not create a new app password', err)\n\t\t\t\t\tOC.Notification.showTemporary(t('settings', 'Error while creating device token'))\n\n\t\t\t\t\tthis.reset()\n\t\t\t\t})\n\t\t},\n\t\tasync copyPassword() {\n\t\t\ttry {\n\t\t\t\tawait navigator.clipboard.writeText(this.appPassword)\n\t\t\t\tthis.copied = true\n\t\t\t} catch (e) {\n\t\t\t\tthis.copied = false\n\t\t\t\tconsole.error(e)\n\t\t\t\tshowError(t('settings', 'Could not copy app password. Please copy it manually.'))\n\t\t\t} finally {\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.copied = false\n\t\t\t\t}, 4000)\n\t\t\t}\n\t\t},\n\t\treset() {\n\t\t\tthis.adding = false\n\t\t\tthis.loading = false\n\t\t\tthis.showQR = false\n\t\t\tthis.qrUrl = ''\n\t\t\tthis.deviceName = ''\n\t\t\tthis.appPassword = ''\n\t\t\tthis.loginName = ''\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.app-password-row {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\n\t\t.icon {\n\t\t\tbackground-size: 16px 16px;\n\t\t\tdisplay: inline-block;\n\t\t\tposition: relative;\n\t\t\ttop: 3px;\n\t\t\tmargin-left: 5px;\n\t\t\tmargin-right: 8px;\n\t\t}\n\n\t}\n\n\t.app-password-label {\n\t\tdisplay: table-cell;\n\t\tpadding-right: 1em;\n\t\ttext-align: right;\n\t\tvertical-align: middle;\n\t\twidth: 100px;\n\t}\n\n\t.row input {\n\t\theight: 44px !important;\n\t\tpadding: 7px 12px;\n\t\tmargin-right: 12px;\n\t\twidth: 200px;\n\t}\n\n\t.monospaced {\n\t\twidth: 245px;\n\t\tfont-family: monospace;\n\t}\n\n\t.button-vue{\n\t\tdisplay:inline-block;\n\t\tmargin: 3px 3px 3px 3px;\n\t}\n\n\t.row {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t}\n\n\t.spacing {\n\t\tpadding-top: 16px;\n\t}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthTokenSetupDialogue.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!./AuthTokenSetupDialogue.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!./AuthTokenSetupDialogue.vue?vue&type=style&index=0&id=7831fe39&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!./AuthTokenSetupDialogue.vue?vue&type=style&index=0&id=7831fe39&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AuthTokenSetupDialogue.vue?vue&type=template&id=7831fe39&scoped=true&\"\nimport script from \"./AuthTokenSetupDialogue.vue?vue&type=script&lang=js&\"\nexport * from \"./AuthTokenSetupDialogue.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AuthTokenSetupDialogue.vue?vue&type=style&index=0&id=7831fe39&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 \"7831fe39\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return (!_vm.adding)?_c('div',{staticClass:\"row spacing\",attrs:{\"id\":\"generate-app-token-section\"}},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.deviceName),expression:\"deviceName\"}],attrs:{\"type\":\"text\",\"maxlength\":120,\"disabled\":_vm.loading,\"placeholder\":_vm.t('settings', 'App name')},domProps:{\"value\":(_vm.deviceName)},on:{\"keydown\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\"))return null;return _vm.submit.apply(null, arguments)},\"input\":function($event){if($event.target.composing)return;_vm.deviceName=$event.target.value}}}),_vm._v(\" \"),_c('NcButton',{attrs:{\"disabled\":_vm.loading || _vm.deviceName.length === 0,\"type\":\"primary\"},on:{\"click\":_vm.submit}},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('settings', 'Create new app password'))+\"\\n\\t\")])],1):_c('div',{staticClass:\"spacing\"},[_vm._v(\"\\n\\t\"+_vm._s(_vm.t('settings', 'Use the credentials below to configure your app or device.'))+\"\\n\\t\"+_vm._s(_vm.t('settings', 'For security reasons this password will only be shown once.'))+\"\\n\\t\"),_c('div',{staticClass:\"app-password-row\"},[_c('label',{staticClass:\"app-password-label\",attrs:{\"for\":\"app-username\"}},[_vm._v(_vm._s(_vm.t('settings', 'Username')))]),_vm._v(\" \"),_c('input',{staticClass:\"monospaced\",attrs:{\"id\":\"app-username\",\"type\":\"text\",\"readonly\":\"readonly\"},domProps:{\"value\":_vm.loginName},on:{\"focus\":_vm.selectInput}})]),_vm._v(\" \"),_c('div',{staticClass:\"app-password-row\"},[_c('label',{staticClass:\"app-password-label\",attrs:{\"for\":\"app-password\"}},[_vm._v(_vm._s(_vm.t('settings', 'Password')))]),_vm._v(\" \"),_c('input',{ref:\"appPassword\",staticClass:\"monospaced\",attrs:{\"id\":\"app-password\",\"type\":\"text\",\"readonly\":\"readonly\"},domProps:{\"value\":_vm.appPassword},on:{\"focus\":_vm.selectInput}}),_vm._v(\" \"),_c('NcButton',{attrs:{\"type\":\"tertiary\",\"title\":_vm.copyTooltipOptions,\"aria-label\":_vm.copyTooltipOptions},on:{\"click\":_vm.copyPassword},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [(_vm.copied)?_c('Check',{attrs:{\"size\":20}}):_c('ContentCopy',{attrs:{\"size\":20}})]},proxy:true}])}),_vm._v(\" \"),_c('NcButton',{on:{\"click\":_vm.reset}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Done'))+\"\\n\\t\\t\")])],1),_vm._v(\" \"),_c('div',{staticClass:\"app-password-row\"},[_c('span',{staticClass:\"app-password-label\"}),_vm._v(\" \"),(!_vm.showQR)?_c('a',{on:{\"click\":function($event){_vm.showQR = true}}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Show QR code for mobile apps'))+\"\\n\\t\\t\")]):_c('QR',{attrs:{\"value\":_vm.qrUrl}})],1)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\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<div id=\"security\" class=\"section\">\n\t\t<h2>{{ t('settings', 'Devices & sessions', {}, undefined, {sanitize: false}) }}</h2>\n\t\t<p class=\"settings-hint hidden-when-empty\">\n\t\t\t{{ t('settings', 'Web, desktop and mobile clients currently logged in to your account.') }}\n\t\t</p>\n\t\t<AuthTokenList :tokens=\"tokens\"\n\t\t\t@toggle-scope=\"toggleTokenScope\"\n\t\t\t@rename=\"rename\"\n\t\t\t@delete=\"deleteToken\"\n\t\t\t@wipe=\"wipeToken\" />\n\t\t<AuthTokenSetupDialogue v-if=\"canCreateToken\" :add=\"addNewToken\" />\n\t</div>\n</template>\n\n<script>\nimport axios from '@nextcloud/axios'\nimport { confirmPassword } from '@nextcloud/password-confirmation'\nimport '@nextcloud/password-confirmation/dist/style.css'\nimport { generateUrl } from '@nextcloud/router'\n\nimport AuthTokenList from './AuthTokenList.vue'\nimport AuthTokenSetupDialogue from './AuthTokenSetupDialogue.vue'\n\nconst confirm = () => {\n\treturn new Promise(resolve => {\n\t\tOC.dialogs.confirm(\n\t\t\tt('settings', 'Do you really want to wipe your data from this device?'),\n\t\t\tt('settings', 'Confirm wipe'),\n\t\t\tresolve,\n\t\t\ttrue\n\t\t)\n\t})\n}\n\n/**\n * Tap into a promise without losing the value\n *\n * @param {Function} cb the callback\n * @return {any} val the value\n */\nconst tap = cb => val => {\n\tcb(val)\n\treturn val\n}\n\nexport default {\n\tname: 'AuthTokenSection',\n\tcomponents: {\n\t\tAuthTokenSetupDialogue,\n\t\tAuthTokenList,\n\t},\n\tprops: {\n\t\ttokens: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t},\n\t\tcanCreateToken: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tbaseUrl: generateUrl('/settings/personal/authtokens'),\n\t\t}\n\t},\n\tmethods: {\n\t\taddNewToken(name) {\n\t\t\tconsole.debug('creating a new app token', name)\n\n\t\t\tconst data = {\n\t\t\t\tname,\n\t\t\t}\n\t\t\treturn axios.post(this.baseUrl, data)\n\t\t\t\t.then(resp => resp.data)\n\t\t\t\t.then(tap(() => console.debug('app token created')))\n\t\t\t\t// eslint-disable-next-line vue/no-mutating-props\n\t\t\t\t.then(tap(data => this.tokens.push(data.deviceToken)))\n\t\t\t\t.catch(err => {\n\t\t\t\t\tconsole.error.bind('could not create app password', err)\n\t\t\t\t\tOC.Notification.showTemporary(t('settings', 'Error while creating device token'))\n\t\t\t\t\tthrow err\n\t\t\t\t})\n\t\t},\n\t\ttoggleTokenScope(token, scope, value) {\n\t\t\tconsole.debug('updating app token scope', token.id, scope, value)\n\n\t\t\tconst oldVal = token.scope[scope]\n\t\t\ttoken.scope[scope] = value\n\n\t\t\treturn this.updateToken(token)\n\t\t\t\t.then(tap(() => console.debug('app token scope updated')))\n\t\t\t\t.catch(err => {\n\t\t\t\t\tconsole.error.bind('could not update app token scope', err)\n\t\t\t\t\tOC.Notification.showTemporary(t('settings', 'Error while updating device token scope'))\n\n\t\t\t\t\t// Restore\n\t\t\t\t\ttoken.scope[scope] = oldVal\n\n\t\t\t\t\tthrow err\n\t\t\t\t})\n\t\t},\n\t\trename(token, newName) {\n\t\t\tconsole.debug('renaming app token', token.id, token.name, newName)\n\n\t\t\tconst oldName = token.name\n\t\t\ttoken.name = newName\n\n\t\t\treturn this.updateToken(token)\n\t\t\t\t.then(tap(() => console.debug('app token name updated')))\n\t\t\t\t.catch(err => {\n\t\t\t\t\tconsole.error.bind('could not update app token name', err)\n\t\t\t\t\tOC.Notification.showTemporary(t('settings', 'Error while updating device token name'))\n\n\t\t\t\t\t// Restore\n\t\t\t\t\ttoken.name = oldName\n\t\t\t\t})\n\t\t},\n\t\tupdateToken(token) {\n\t\t\treturn axios.put(this.baseUrl + '/' + token.id, token)\n\t\t\t\t.then(resp => resp.data)\n\t\t},\n\t\tdeleteToken(token) {\n\t\t\tconsole.debug('deleting app token', token)\n\n\t\t\t// eslint-disable-next-line vue/no-mutating-props\n\t\t\tthis.tokens = this.tokens.filter(t => t !== token)\n\n\t\t\treturn axios.delete(this.baseUrl + '/' + token.id)\n\t\t\t\t.then(resp => resp.data)\n\t\t\t\t.then(tap(() => console.debug('app token deleted')))\n\t\t\t\t.catch(err => {\n\t\t\t\t\tconsole.error.bind('could not delete app token', err)\n\t\t\t\t\tOC.Notification.showTemporary(t('settings', 'Error while deleting the token'))\n\n\t\t\t\t\t// Restore\n\t\t\t\t\t// eslint-disable-next-line vue/no-mutating-props\n\t\t\t\t\tthis.tokens.push(token)\n\t\t\t\t})\n\t\t},\n\t\tasync wipeToken(token) {\n\t\t\tconsole.debug('wiping app token', token)\n\n\t\t\ttry {\n\t\t\t\tawait confirmPassword()\n\n\t\t\t\tif (!(await confirm())) {\n\t\t\t\t\tconsole.debug('wipe aborted by user')\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tawait axios.post(this.baseUrl + '/wipe/' + token.id)\n\t\t\t\tconsole.debug('app token marked for wipe')\n\n\t\t\t\ttoken.type = 2\n\t\t\t} catch (err) {\n\t\t\t\tconsole.error('could not wipe app token', err)\n\t\t\t\tOC.Notification.showTemporary(t('settings', 'Error while wiping the device with the token'))\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style scoped>\n\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthTokenSection.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!./AuthTokenSection.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AuthTokenSection.vue?vue&type=template&id=b9985220&scoped=true&\"\nimport script from \"./AuthTokenSection.vue?vue&type=script&lang=js&\"\nexport * from \"./AuthTokenSection.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 \"b9985220\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"section\",attrs:{\"id\":\"security\"}},[_c('h2',[_vm._v(_vm._s(_vm.t('settings', 'Devices & sessions', {}, undefined, {sanitize: false})))]),_vm._v(\" \"),_c('p',{staticClass:\"settings-hint hidden-when-empty\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('settings', 'Web, desktop and mobile clients currently logged in to your account.'))+\"\\n\\t\")]),_vm._v(\" \"),_c('AuthTokenList',{attrs:{\"tokens\":_vm.tokens},on:{\"toggle-scope\":_vm.toggleTokenScope,\"rename\":_vm.rename,\"delete\":_vm.deleteToken,\"wipe\":_vm.wipeToken}}),_vm._v(\" \"),(_vm.canCreateToken)?_c('AuthTokenSetupDialogue',{attrs:{\"add\":_vm.addNewToken}}):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\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 Vue from 'vue'\nimport VTooltip from 'v-tooltip'\n\nimport AuthTokenSection from './components/AuthTokenSection.vue'\n\n// eslint-disable-next-line camelcase\n__webpack_nonce__ = btoa(OC.requestToken)\n\nVue.use(VTooltip, { defaultHtml: false })\nVue.prototype.t = t\n\nconst View = Vue.extend(AuthTokenSection)\nnew View({\n\tpropsData: {\n\t\ttokens: loadState('settings', 'app_tokens'),\n\t\tcanCreateToken: loadState('settings', 'can_create_app_token'),\n\t},\n}).$mount('#security-authtokens')\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, \".wiping[data-v-0f73a400]{background-color:var(--color-background-darker)}td[data-v-0f73a400]{border-top:1px solid var(--color-border);max-width:200px;white-space:normal;vertical-align:middle;position:relative}td.client[data-v-0f73a400],td.more[data-v-0f73a400]{overflow:visible;position:relative;width:44px;height:44px}td.token-name[data-v-0f73a400]{padding:10px 6px}td.token-name.token-rename[data-v-0f73a400]{padding:0}td.token-name input[data-v-0f73a400]{width:100%;margin:0}td.token-name .wiping-warning[data-v-0f73a400]{color:var(--color-text-lighter)}td.more[data-v-0f73a400]{padding:0 10px}td.client div[data-v-0f73a400]{opacity:.57;width:44px;height:44px}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AuthToken.vue\"],\"names\":[],\"mappings\":\"AACA,yBACC,+CAAA,CAGD,oBACC,wCAAA,CACA,eAAA,CACA,kBAAA,CACA,qBAAA,CACA,iBAAA,CAEA,oDACC,gBAAA,CACA,iBAAA,CACA,UAAA,CACA,WAAA,CAGD,+BACC,gBAAA,CAEA,4CACC,SAAA,CAGD,qCACC,UAAA,CACA,QAAA,CAGF,+CACC,+BAAA,CAGD,yBAEC,cAAA,CAMA,+BACC,WAAA,CACA,UAAA,CACA,WAAA\",\"sourcesContent\":[\"\\n.wiping {\\n\\tbackground-color: var(--color-background-darker);\\n}\\n\\ntd {\\n\\tborder-top: 1px solid var(--color-border);\\n\\tmax-width: 200px;\\n\\twhite-space: normal;\\n\\tvertical-align: middle;\\n\\tposition: relative;\\n\\n\\t&%icon {\\n\\t\\toverflow: visible;\\n\\t\\tposition: relative;\\n\\t\\twidth: 44px;\\n\\t\\theight: 44px;\\n\\t}\\n\\n\\t&.token-name {\\n\\t\\tpadding: 10px 6px;\\n\\n\\t\\t&.token-rename {\\n\\t\\t\\tpadding: 0;\\n\\t\\t}\\n\\n\\t\\tinput {\\n\\t\\t\\twidth: 100%;\\n\\t\\t\\tmargin: 0;\\n\\t\\t}\\n\\t}\\n\\t&.token-name .wiping-warning {\\n\\t\\tcolor: var(--color-text-lighter);\\n\\t}\\n\\n\\t&.more {\\n\\t\\t@extend %icon;\\n\\t\\tpadding: 0 10px;\\n\\t}\\n\\n\\t&.client {\\n\\t\\t@extend %icon;\\n\\n\\t\\tdiv {\\n\\t\\t\\topacity: 0.57;\\n\\t\\t\\twidth: 44px;\\n\\t\\t\\theight: 44px;\\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, \"table[data-v-1474f25b]{width:100%;min-height:50px;padding-top:5px;max-width:580px}table th[data-v-1474f25b]{opacity:.5;padding:10px 0}.token-list td>a.icon-more[data-v-1474f25b]{transition:opacity var(--animation-quick)}.token-list a.icon-more[data-v-1474f25b]{padding:14px;display:block;width:44px;height:44px;opacity:.5}.token-list tr:hover td>a.icon[data-v-1474f25b],.token-list tr td>a.icon[data-v-1474f25b]:focus,.token-list tr.active td>a.icon[data-v-1474f25b]{opacity:1}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AuthTokenList.vue\"],\"names\":[],\"mappings\":\"AACA,uBACC,UAAA,CACA,eAAA,CACA,eAAA,CACA,eAAA,CAEA,0BACC,UAAA,CACA,cAAA,CAKD,4CACC,yCAAA,CAGD,yCACC,YAAA,CACA,aAAA,CACA,UAAA,CACA,WAAA,CACA,UAAA,CAIA,iJAGC,SAAA\",\"sourcesContent\":[\"\\ntable {\\n\\twidth: 100%;\\n\\tmin-height: 50px;\\n\\tpadding-top: 5px;\\n\\tmax-width: 580px;\\n\\n\\tth {\\n\\t\\topacity: .5;\\n\\t\\tpadding: 10px 0;\\n\\t}\\n}\\n\\n.token-list {\\n\\ttd > a.icon-more {\\n\\t\\ttransition: opacity var(--animation-quick);\\n\\t}\\n\\n\\ta.icon-more {\\n\\t\\tpadding: 14px;\\n\\t\\tdisplay: block;\\n\\t\\twidth: 44px;\\n\\t\\theight: 44px;\\n\\t\\topacity: .5;\\n\\t}\\n\\n\\ttr {\\n\\t\\t&:hover td > a.icon,\\n\\t\\ttd > a.icon:focus,\\n\\t\\t&.active td > a.icon {\\n\\t\\t\\topacity: 1;\\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-tokens-table tr>*:nth-child(2){padding-left:6px}#app-tokens-table tr>*:nth-child(3){text-align:right}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AuthTokenList.vue\"],\"names\":[],\"mappings\":\"AAEC,oCACC,gBAAA,CAGD,oCACC,gBAAA\",\"sourcesContent\":[\"\\n#app-tokens-table {\\n\\ttr > *:nth-child(2) {\\n\\t\\tpadding-left: 6px;\\n\\t}\\n\\n\\ttr > *:nth-child(3) {\\n\\t\\ttext-align: right;\\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-password-row[data-v-7831fe39]{display:flex;align-items:center}.app-password-row .icon[data-v-7831fe39]{background-size:16px 16px;display:inline-block;position:relative;top:3px;margin-left:5px;margin-right:8px}.app-password-label[data-v-7831fe39]{display:table-cell;padding-right:1em;text-align:right;vertical-align:middle;width:100px}.row input[data-v-7831fe39]{height:44px !important;padding:7px 12px;margin-right:12px;width:200px}.monospaced[data-v-7831fe39]{width:245px;font-family:monospace}.button-vue[data-v-7831fe39]{display:inline-block;margin:3px 3px 3px 3px}.row[data-v-7831fe39]{display:flex;align-items:center}.spacing[data-v-7831fe39]{padding-top:16px}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AuthTokenSetupDialogue.vue\"],\"names\":[],\"mappings\":\"AACA,mCACC,YAAA,CACA,kBAAA,CAEA,yCACC,yBAAA,CACA,oBAAA,CACA,iBAAA,CACA,OAAA,CACA,eAAA,CACA,gBAAA,CAKF,qCACC,kBAAA,CACA,iBAAA,CACA,gBAAA,CACA,qBAAA,CACA,WAAA,CAGD,4BACC,sBAAA,CACA,gBAAA,CACA,iBAAA,CACA,WAAA,CAGD,6BACC,WAAA,CACA,qBAAA,CAGD,6BACC,oBAAA,CACA,sBAAA,CAGD,sBACC,YAAA,CACA,kBAAA,CAGD,0BACC,gBAAA\",\"sourcesContent\":[\"\\n.app-password-row {\\n\\tdisplay: flex;\\n\\talign-items: center;\\n\\n\\t.icon {\\n\\t\\tbackground-size: 16px 16px;\\n\\t\\tdisplay: inline-block;\\n\\t\\tposition: relative;\\n\\t\\ttop: 3px;\\n\\t\\tmargin-left: 5px;\\n\\t\\tmargin-right: 8px;\\n\\t}\\n\\n}\\n\\n.app-password-label {\\n\\tdisplay: table-cell;\\n\\tpadding-right: 1em;\\n\\ttext-align: right;\\n\\tvertical-align: middle;\\n\\twidth: 100px;\\n}\\n\\n.row input {\\n\\theight: 44px !important;\\n\\tpadding: 7px 12px;\\n\\tmargin-right: 12px;\\n\\twidth: 200px;\\n}\\n\\n.monospaced {\\n\\twidth: 245px;\\n\\tfont-family: monospace;\\n}\\n\\n.button-vue{\\n\\tdisplay:inline-block;\\n\\tmargin: 3px 3px 3px 3px;\\n}\\n\\n.row {\\n\\tdisplay: flex;\\n\\talign-items: center;\\n}\\n\\n.spacing {\\n\\tpadding-top: 16px;\\n}\\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 = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(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 = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(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 = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 4783;","__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\t4783: 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 = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(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(function(id) { return 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], function() { return __webpack_require__(82773); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","ie","edge","firefox","chrome","safari","androidChrome","iphone","ipad","iosClient","androidClient","iosTalkClient","androidTalkClient","davx5","webPirate","sailfishBrowser","neon","productName","name","components","NcActions","NcActionButton","NcActionCheckbox","props","token","type","required","data","showMore","renaming","newName","oldName","actionOpen","computed","lastActivityRelative","lastActivity","iconName","os","version","icon","wiping","methods","startRename","cancelRename","revoke","rename","wipe","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","component","_vm","this","_c","_self","class","attrs","id","staticClass","_v","canRename","directives","rawName","value","expression","ref","domProps","on","$event","indexOf","_k","keyCode","key","apply","arguments","target","composing","_s","t","_e","current","scope","filesystem","stopPropagation","preventDefault","$emit","canDelete","AuthToken","tokens","sortedTokens","toggleScope","onDelete","onWipe","length","_l","Check","ContentCopy","NcButton","QR","add","adding","loading","deviceName","appPassword","loginName","copied","showQR","qrUrl","copyTooltipOptions","selectInput","e","submit","confirmPassword","then","catch","console","OC","copyPassword","navigator","showError","setTimeout","reset","scopedSlots","_u","fn","proxy","cb","AuthTokenSetupDialogue","AuthTokenList","canCreateToken","baseUrl","addNewToken","toggleTokenScope","updateToken","deleteToken","wipeToken","resolve","axios","undefined","sanitize","__webpack_nonce__","btoa","requestToken","Vue","VTooltip","defaultHtml","AuthTokenSection","propsData","loadState","$mount","___CSS_LOADER_EXPORT___","push","module","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","loaded","__webpack_modules__","call","m","O","result","chunkIds","priority","notFulfilled","Infinity","i","fulfilled","j","Object","keys","every","splice","r","n","getter","__esModule","d","a","definition","o","defineProperty","enumerable","get","g","globalThis","Function","window","obj","prop","prototype","hasOwnProperty","Symbol","toStringTag","nmd","paths","children","b","document","baseURI","self","location","href","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","forEach","bind","nc","__webpack_exports__"],"sourceRoot":""}
\ No newline at end of file |