From 47e69b95a19db23e7fd220c186c717e540afdf0d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Jan 2025 11:37:57 +0000 Subject: [PATCH 1/2] Chore(deps): Bump uuid from 10.0.0 to 11.0.5 Dependabot couldn't find the original pull request head commit, 59a4030c96feff92d05111650aa37d27d58ee918. --- package-lock.json | 10 +++++----- package.json | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index 74193ab1..7a272d82 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,7 +23,7 @@ "debounce": "^2.1.0", "fast-xml-parser": "^4.5.1", "pkijs": "^3.2.4", - "uuid": "^10.0.0", + "uuid": "^11.0.5", "vue": "^2.7.16", "vue-material-design-icons": "^5.3.1", "webdav": "^5.7.1" @@ -22892,15 +22892,15 @@ } }, "node_modules/uuid": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", - "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.0.5.tgz", + "integrity": "sha512-508e6IcKLrhxKdBbcA2b4KQZlLVp2+J5UwQ6F7Drckkc5N9ZJwFa4TgWtsww9UG8fGHbm6gbV19TdM5pQ4GaIA==", "funding": [ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" ], "bin": { - "uuid": "dist/bin/uuid" + "uuid": "dist/esm/bin/uuid" } }, "node_modules/v8-to-istanbul": { diff --git a/package.json b/package.json index 44ee71aa..402587a3 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,7 @@ "debounce": "^2.1.0", "fast-xml-parser": "^4.5.1", "pkijs": "^3.2.4", - "uuid": "^10.0.0", + "uuid": "^11.0.5", "vue": "^2.7.16", "vue-material-design-icons": "^5.3.1", "webdav": "^5.7.1" From 7a1afae0395068d5088d36115cbcc8a87dfe2f5f Mon Sep 17 00:00:00 2001 From: nextcloud-command Date: Mon, 20 Jan 2025 15:43:05 +0000 Subject: [PATCH 2/2] chore(assets): Recompile assets Signed-off-by: nextcloud-command --- js/end_to_end_encryption-filedrop.mjs | 2 +- js/end_to_end_encryption-filedrop.mjs.license | 2 +- js/end_to_end_encryption-filedrop.mjs.map | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/js/end_to_end_encryption-filedrop.mjs b/js/end_to_end_encryption-filedrop.mjs index 40a130d3..47acf35c 100644 --- a/js/end_to_end_encryption-filedrop.mjs +++ b/js/end_to_end_encryption-filedrop.mjs @@ -1,2 +1,2 @@ (function(){"use strict";try{if(typeof document<"u"){var t=document.createElement("style");t.appendChild(document.createTextNode('.material-design-icon[data-v-089eb524]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.app-details-toggle[data-v-089eb524]{position:-webkit-sticky;position:sticky;width:var(--default-clickable-area);height:var(--default-clickable-area);padding:calc((var(--default-clickable-area) - 16px) / 2);cursor:pointer;opacity:.6;transform:rotate(180deg);background-color:var(--color-main-background);z-index:2000;top:var(--app-navigation-padding);inset-inline-start:calc(var(--default-clickable-area) + var(--app-navigation-padding) * 2)}.app-details-toggle--mobile[data-v-089eb524]{inset-inline-start:var(--app-navigation-padding)}.app-details-toggle[data-v-089eb524]:active,.app-details-toggle[data-v-089eb524]:hover,.app-details-toggle[data-v-089eb524]:focus{opacity:1}.material-design-icon[data-v-e905d7c8]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.app-content[data-v-e905d7c8]{position:initial;z-index:1000;flex-basis:100vw;height:100%;margin:0!important;background-color:var(--color-main-background);min-width:0}.app-content[data-v-e905d7c8]:not(.app-content--has-list){overflow:auto}.app-content-wrapper[data-v-e905d7c8]{position:relative;width:100%;height:100%}.app-content-wrapper--no-split.app-content-wrapper--show-list[data-v-e905d7c8] .app-content-list{display:flex}.app-content-wrapper--no-split.app-content-wrapper--show-list[data-v-e905d7c8] .app-content-details,.app-content-wrapper--no-split.app-content-wrapper--show-details[data-v-e905d7c8] .app-content-list{display:none}.app-content-wrapper--no-split.app-content-wrapper--show-details[data-v-e905d7c8] .app-content-details{display:block}[data-v-e905d7c8] .splitpanes.default-theme .app-content-list{max-width:none;scrollbar-width:auto}[data-v-e905d7c8] .splitpanes.default-theme .splitpanes__pane{background-color:transparent;transition:none}[data-v-e905d7c8] .splitpanes.default-theme .splitpanes__pane-list{min-width:300px;position:-webkit-sticky;position:sticky}@media only screen and (width < 1024px){[data-v-e905d7c8] .splitpanes.default-theme .splitpanes__pane-list{display:none}}[data-v-e905d7c8] .splitpanes.default-theme .splitpanes__pane-details{overflow-y:auto}@media only screen and (width < 1024px){[data-v-e905d7c8] .splitpanes.default-theme .splitpanes__pane-details{min-width:100%}}[data-v-e905d7c8] .splitpanes.default-theme .splitpanes__splitter{background-color:var(--color-main-background)}[data-v-e905d7c8] .splitpanes.default-theme .splitpanes__splitter:before,[data-v-e905d7c8] .splitpanes.default-theme .splitpanes__splitter:after{background-color:var(--color-border)}[data-v-e905d7c8] .splitpanes.default-theme.splitpanes--vertical .splitpanes__splitter{border-left:1px solid var(--color-border)}[data-v-e905d7c8] .splitpanes.default-theme.splitpanes--horizontal .splitpanes__splitter{border-top:1px solid var(--color-border)}.app-content-wrapper--show-list[data-v-e905d7c8] .app-content-list{max-width:none}.splitpanes{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%;height:100%}.splitpanes--vertical{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.splitpanes--horizontal{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.splitpanes--dragging *{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.splitpanes__pane{width:100%;height:100%;overflow:hidden}.splitpanes--vertical .splitpanes__pane{-webkit-transition:width .2s ease-out;-o-transition:width .2s ease-out;transition:width .2s ease-out}.splitpanes--horizontal .splitpanes__pane{-webkit-transition:height .2s ease-out;-o-transition:height .2s ease-out;transition:height .2s ease-out}.splitpanes--dragging .splitpanes__pane{-webkit-transition:none;-o-transition:none;transition:none}.splitpanes__splitter{-ms-touch-action:none;touch-action:none}.splitpanes--vertical>.splitpanes__splitter{min-width:1px;cursor:col-resize}.splitpanes--horizontal>.splitpanes__splitter{min-height:1px;cursor:row-resize}.splitpanes.default-theme .splitpanes__pane{background-color:#f2f2f2}.splitpanes.default-theme .splitpanes__splitter{background-color:#fff;-webkit-box-sizing:border-box;box-sizing:border-box;position:relative;-ms-flex-negative:0;flex-shrink:0}.splitpanes.default-theme .splitpanes__splitter:before,.splitpanes.default-theme .splitpanes__splitter:after{content:"";position:absolute;top:50%;left:50%;background-color:#00000026;-webkit-transition:background-color .3s;-o-transition:background-color .3s;transition:background-color .3s}.splitpanes.default-theme .splitpanes__splitter:hover:before,.splitpanes.default-theme .splitpanes__splitter:hover:after{background-color:#00000040}.splitpanes.default-theme .splitpanes__splitter:first-child{cursor:auto}.default-theme.splitpanes .splitpanes .splitpanes__splitter{z-index:1}.default-theme.splitpanes--vertical>.splitpanes__splitter,.default-theme .splitpanes--vertical>.splitpanes__splitter{width:7px;border-left:1px solid #eee;margin-left:-1px}.default-theme.splitpanes--vertical>.splitpanes__splitter:before,.default-theme.splitpanes--vertical>.splitpanes__splitter:after,.default-theme .splitpanes--vertical>.splitpanes__splitter:before,.default-theme .splitpanes--vertical>.splitpanes__splitter:after{-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);width:1px;height:30px}.default-theme.splitpanes--vertical>.splitpanes__splitter:before,.default-theme .splitpanes--vertical>.splitpanes__splitter:before{margin-left:-2px}.default-theme.splitpanes--vertical>.splitpanes__splitter:after,.default-theme .splitpanes--vertical>.splitpanes__splitter:after{margin-left:1px}.default-theme.splitpanes--horizontal>.splitpanes__splitter,.default-theme .splitpanes--horizontal>.splitpanes__splitter{height:7px;border-top:1px solid #eee;margin-top:-1px}.default-theme.splitpanes--horizontal>.splitpanes__splitter:before,.default-theme.splitpanes--horizontal>.splitpanes__splitter:after,.default-theme .splitpanes--horizontal>.splitpanes__splitter:before,.default-theme .splitpanes--horizontal>.splitpanes__splitter:after{-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translate(-50%);width:30px;height:1px}.default-theme.splitpanes--horizontal>.splitpanes__splitter:before,.default-theme .splitpanes--horizontal>.splitpanes__splitter:before{margin-top:-2px}.default-theme.splitpanes--horizontal>.splitpanes__splitter:after,.default-theme .splitpanes--horizontal>.splitpanes__splitter:after{margin-top:1px}.material-design-icon{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}#skip-actions.vue-skip-actions:focus-within{top:0!important;left:0!important;width:100vw;height:100vh;padding:var(--body-container-margin)!important;-webkit-backdrop-filter:brightness(50%);backdrop-filter:brightness(50%)}.material-design-icon[data-v-d8f0539f]{display:flex;align-self:center;justify-self:center;align-items:center;justify-content:center}.vue-skip-actions__container[data-v-d8f0539f]{background-color:var(--color-main-background);border-radius:var(--border-radius-large);padding:22px}.vue-skip-actions__headline[data-v-d8f0539f]{font-weight:700;font-size:20px;line-height:30px;margin-bottom:12px}.vue-skip-actions__buttons[data-v-d8f0539f]{display:flex;flex-wrap:wrap;gap:12px}.vue-skip-actions__buttons>*[data-v-d8f0539f]{flex:1 0 fit-content}.vue-skip-actions__image[data-v-d8f0539f]{margin-top:12px}.content[data-v-d8f0539f]{box-sizing:border-box;margin:var(--body-container-margin);margin-top:var(--header-height);display:flex;width:calc(100% - var(--body-container-margin) * 2);border-radius:var(--body-container-radius);height:var(--body-height);overflow:hidden;padding:0}.content[data-v-d8f0539f]:not(.with-sidebar--full){position:fixed}.content[data-v-d8f0539f] *{box-sizing:border-box}#app-content-vue[data-v-8a5d9b72]{display:flex;align-items:center;justify-content:center}#app-content-vue .uploader-form[data-v-8a5d9b72]{width:700px;height:700px;display:flex;align-items:center;justify-content:center;flex-direction:column}#app-content-vue .uploader-form.highlight[data-v-8a5d9b72]{border:4px solid var(--color-primary);border-radius:var(--border-radius-large);background:var(--color-primary-element-light-hover)}#app-content-vue .uploader-form__label[data-v-8a5d9b72]{display:flex;align-items:center;justify-content:center;flex-direction:column;font-weight:700;font-size:20px;text-align:center;position:-webkit-sticky;position:sticky}#app-content-vue .uploader-form__icon[data-v-8a5d9b72]{margin-bottom:12px;height:48px;width:48px;background-size:48px}#app-content-vue .uploader-form__input[data-v-8a5d9b72]{margin-top:20px}#app-content-vue .uploader-form__input input[data-v-8a5d9b72]{display:none}#app-content-vue .uploader-form__file-list[data-v-8a5d9b72]{margin-top:12px;height:100%;overflow:scroll;padding:0 32px}#app-content-vue .uploader-form__file-list__item[data-v-8a5d9b72]{display:flex;align-items:center}#app-content-vue .uploader-form__file-list__item .material-design-icon[data-v-8a5d9b72]{margin-right:8px}#app-content-vue .uploader-form__file-list__item .loading-icon[data-v-8a5d9b72] svg{animation:rotate var(--animation-duration, .8s) linear infinite}')),document.head.appendChild(t)}}catch(e){console.error("vite-plugin-css-injected-by-js",e)}})(); -var X=Object.defineProperty;var N=Object.getOwnPropertySymbols;var J=Object.prototype.hasOwnProperty,Y=Object.prototype.propertyIsEnumerable;var M=(e,t,i)=>t in e?X(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i,S=(e,t)=>{for(var i in t||(t={}))J.call(t,i)&&M(e,i,t[i]);if(N)for(var i of N(t))Y.call(t,i)&&M(e,i,t[i]);return e};import{v as ee,d as F,a8 as te,P as ie,s as b,n as C,r as O,Z as ne,a9 as se,I as R,aa as ae,ab as w,ac as re,N as V,t as U,V as g,ad as oe,a2 as le,B as pe,l as f,y as k,k as ce}from"./_plugin-vue2_normalizer-ohAsO3uW.chunk.mjs";import{X as he,L as de}from"./ArrowRight-CY2b9hgN-CHOX6Yhg.chunk.mjs";import{l as c}from"./logger-BdEh6xXd.chunk.mjs";import{u as P}from"./useIsMobile-iGu5AIXN.chunk.mjs";const Q="end_to_end_encryption";for(var l=[],D=0;D<256;++D)l.push((D+256).toString(16).slice(1));function ue(e,t=0){return(l[e[t+0]]+l[e[t+1]]+l[e[t+2]]+l[e[t+3]]+"-"+l[e[t+4]]+l[e[t+5]]+"-"+l[e[t+6]]+l[e[t+7]]+"-"+l[e[t+8]]+l[e[t+9]]+"-"+l[e[t+10]]+l[e[t+11]]+l[e[t+12]]+l[e[t+13]]+l[e[t+14]]+l[e[t+15]]).toLowerCase()}var y,me=new Uint8Array(16);function fe(){if(!y&&(y=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!y))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return y(me)}var ge=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto);const A={randomUUID:ge};function ye(e,t,i){if(A.randomUUID&&!t&&!e)return A.randomUUID();e=e||{};var n=e.random||(e.rng||fe)();return n[6]=n[6]&15|64,n[8]=n[8]&63|128,ue(n)}function d(e){return btoa(String.fromCharCode(...new Uint8Array(e)))}async function ve(e,t){const i=await xe(JSON.stringify(e));c.debug("[FileDrop] Encryption info compressed (".concat(e.filename,")"),{encryptionInfo:e,compressedEncryptionInfo:i});const n=await B(),{content:s,tag:a}=await H(n,new Uint8Array(i));return c.debug("[FileDrop] Encryption info encrypted (".concat(e.filename,")"),{content:s,tag:a,encryptionParams:n}),c.debug("[FileDrop] Encryption info base64ed (".concat(e.filename,")"),{ciphertext:d(s)}),{ciphertext:d(s),nonce:d(n.initializationVector),authenticationTag:d(a),users:await Ce(t,n)}}async function we(e,t,i,n){const s=ee("apps/end_to_end_encryption/api/v{encryptionVersion}/meta-data/{folderId}",{encryptionVersion:e,folderId:t}),{data:{ocs:{meta:a}}}=await F.put("".concat(s,"/filedrop"),{filedrop:JSON.stringify(i)},{headers:{"x-e2ee-supported":!0},params:{shareToken:n}});if(a.statuscode!==200)throw new Error("Failed to upload metadata: ".concat(a.message))}async function xe(e){const t=new Blob([e]).stream().pipeThrough(new CompressionStream("gzip")),i=[],n=t.getReader();for(;;){const{value:s}=await n.read();if(s===void 0)break;i.push(s)}return new Uint8Array(await new Blob(i).arrayBuffer())}async function Ce(e,t){return Promise.all(Object.entries(e).map(async([i,n])=>{const s=await window.crypto.subtle.exportKey("raw",t.key),a=await be(n,s);return{userId:i,encryptedFiledropKey:d(a)}}))}function ze(e){return e.slice(e.byteLength-16)}async function Se(){return await window.crypto.subtle.generateKey({name:"AES-GCM",length:128},!0,["encrypt","decrypt"])}async function B(){return{key:await Se(),initializationVector:window.crypto.getRandomValues(new Uint8Array(16))}}async function H({key:e,initializationVector:t},i){const n=await window.crypto.subtle.encrypt({name:"AES-GCM",iv:t},e,i);return{content:n,tag:ze(n)}}async function De(e){const t=await e.arrayBuffer(),i=await B(),{content:n,tag:s}=await H(i,new Uint8Array(t));return c.debug("[FileDrop] File encrypted: ".concat(e.name),{file:e,content:n,tag:s,encryptionParams:i,rawKey:d(await window.crypto.subtle.exportKey("raw",i.key))}),{encryptedFileContent:n,encryptionInfo:{filename:e.name,mimetype:e.type||"application/octet-stream",nonce:d(i.initializationVector),key:d(await window.crypto.subtle.exportKey("raw",i.key)),authenticationTag:d(s)}}}async function _e(e){const t=new he(e);return await window.crypto.subtle.importKey("spki",t.publicKey.rawData,{name:"RSA-OAEP",hash:"SHA-256"},!0,["encrypt"])}async function be(e,t){return await window.crypto.subtle.encrypt({name:"RSA-OAEP"},await _e(e),t)}async function Pe(e,t,i,n){await F.put(te.join(ie(),e,t),i,{headers:{Authorization:"Basic ".concat(btoa("".concat(n,":")))}})}const Ee={name:"CheckIcon",emits:["click"],props:{title:{type:String},fillColor:{type:String,default:"currentColor"},size:{type:Number,default:24}}};var Ne=function(){var e=this,t=e._self._c;return t("span",e._b({staticClass:"material-design-icon check-icon",attrs:{"aria-hidden":e.title?null:"true","aria-label":e.title,role:"img"},on:{click:function(i){return e.$emit("click",i)}}},"span",e.$attrs,!1),[t("svg",{staticClass:"material-design-icon__svg",attrs:{fill:e.fillColor,width:e.size,height:e.size,viewBox:"0 0 24 24"}},[t("path",{attrs:{d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"}},[e.title?t("title",[e._v(e._s(e.title))]):e._e()])])])},Me=[],ke=b(Ee,Ne,Me,!1,null,null);const Ae=ke.exports,Ie={name:"AlertCircleIcon",emits:["click"],props:{title:{type:String},fillColor:{type:String,default:"currentColor"},size:{type:Number,default:24}}};var Le=function(){var e=this,t=e._self._c;return t("span",e._b({staticClass:"material-design-icon alert-circle-icon",attrs:{"aria-hidden":e.title?null:"true","aria-label":e.title,role:"img"},on:{click:function(i){return e.$emit("click",i)}}},"span",e.$attrs,!1),[t("svg",{staticClass:"material-design-icon__svg",attrs:{fill:e.fillColor,width:e.size,height:e.size,viewBox:"0 0 24 24"}},[t("path",{attrs:{d:"M13,13H11V7H13M13,17H11V15H13M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2Z"}},[e.title?t("title",[e._v(e._s(e.title))]):e._e()])])])},$e=[],Te=b(Ie,Le,$e,!1,null,null);const Fe=Te.exports,Oe={name:"ArrowLeftIcon",emits:["click"],props:{title:{type:String},fillColor:{type:String,default:"currentColor"},size:{type:Number,default:24}}};var Re=function(){var e=this,t=e._self._c;return t("span",e._b({staticClass:"material-design-icon arrow-left-icon",attrs:{"aria-hidden":e.title?null:"true","aria-label":e.title,role:"img"},on:{click:function(i){return e.$emit("click",i)}}},"span",e.$attrs,!1),[t("svg",{staticClass:"material-design-icon__svg",attrs:{fill:e.fillColor,width:e.size,height:e.size,viewBox:"0 0 24 24"}},[t("path",{attrs:{d:"M20,11V13H8L13.5,18.5L12.08,19.92L4.16,12L12.08,4.08L13.5,5.5L8,11H20Z"}},[e.title?t("title",[e._v(e._s(e.title))]):e._e()])])])},Ve=[],Ue=C(Oe,Re,Ve,!1,null,null);const Be=Ue.exports;var He=Object.defineProperty,Ze=Object.defineProperties,je=Object.getOwnPropertyDescriptors,x=Object.getOwnPropertySymbols,Z=Object.prototype.hasOwnProperty,j=Object.prototype.propertyIsEnumerable,I=(e,t,i)=>t in e?He(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i,qe=(e,t)=>{for(var i in t||(t={}))Z.call(t,i)&&I(e,i,t[i]);if(x)for(var i of x(t))j.call(t,i)&&I(e,i,t[i]);return e},Ke=(e,t)=>Ze(e,je(t)),Ge=(e,t)=>{var i={};for(var n in e)Z.call(e,n)&&t.indexOf(n)<0&&(i[n]=e[n]);if(e!=null&&x)for(var n of x(e))t.indexOf(n)<0&&j.call(e,n)&&(i[n]=e[n]);return i};function q(e,t,i,n,s,a,r,p){var o=typeof e=="function"?e.options:e;t&&(o.render=t,o.staticRenderFns=i,o._compiled=!0);var h;if(s&&(h=s),h)if(o.functional){o._injectStyles=h;var z=o.render;o.render=function(W,E){return h.call(E),z(W,E)}}else{var m=o.beforeCreate;o.beforeCreate=m?[].concat(m,h):[h]}return{exports:e,options:o}}const We={name:"splitpanes",props:{horizontal:{type:Boolean},pushOtherPanes:{type:Boolean,default:!0},dblClickSplitter:{type:Boolean,default:!0},rtl:{type:Boolean,default:!1},firstSplitter:{type:Boolean}},provide(){return{requestUpdate:this.requestUpdate,onPaneAdd:this.onPaneAdd,onPaneRemove:this.onPaneRemove,onPaneClick:this.onPaneClick}},data:()=>({container:null,ready:!1,panes:[],touch:{mouseDown:!1,dragging:!1,activeSplitter:null},splitterTaps:{splitter:null,timeoutId:null}}),computed:{panesCount(){return this.panes.length},indexedPanes(){return this.panes.reduce((e,t)=>(e[t.id]=t)&&e,{})}},methods:{updatePaneComponents(){this.panes.forEach(e=>{e.update&&e.update({[this.horizontal?"height":"width"]:"".concat(this.indexedPanes[e.id].size,"%")})})},bindEvents(){document.addEventListener("mousemove",this.onMouseMove,{passive:!1}),document.addEventListener("mouseup",this.onMouseUp),"ontouchstart"in window&&(document.addEventListener("touchmove",this.onMouseMove,{passive:!1}),document.addEventListener("touchend",this.onMouseUp))},unbindEvents(){document.removeEventListener("mousemove",this.onMouseMove,{passive:!1}),document.removeEventListener("mouseup",this.onMouseUp),"ontouchstart"in window&&(document.removeEventListener("touchmove",this.onMouseMove,{passive:!1}),document.removeEventListener("touchend",this.onMouseUp))},onMouseDown(e,t){this.bindEvents(),this.touch.mouseDown=!0,this.touch.activeSplitter=t},onMouseMove(e){this.touch.mouseDown&&(e.preventDefault(),this.touch.dragging=!0,this.calculatePanesSize(this.getCurrentMouseDrag(e)),this.$emit("resize",this.panes.map(t=>({min:t.min,max:t.max,size:t.size}))))},onMouseUp(){this.touch.dragging&&this.$emit("resized",this.panes.map(e=>({min:e.min,max:e.max,size:e.size}))),this.touch.mouseDown=!1,setTimeout(()=>{this.touch.dragging=!1,this.unbindEvents()},100)},onSplitterClick(e,t){"ontouchstart"in window&&(e.preventDefault(),this.dblClickSplitter&&(this.splitterTaps.splitter===t?(clearTimeout(this.splitterTaps.timeoutId),this.splitterTaps.timeoutId=null,this.onSplitterDblClick(e,t),this.splitterTaps.splitter=null):(this.splitterTaps.splitter=t,this.splitterTaps.timeoutId=setTimeout(()=>{this.splitterTaps.splitter=null},500)))),this.touch.dragging||this.$emit("splitter-click",this.panes[t])},onSplitterDblClick(e,t){let i=0;this.panes=this.panes.map((n,s)=>(n.size=s===t?n.max:n.min,s!==t&&(i+=n.min),n)),this.panes[t].size-=i,this.$emit("pane-maximize",this.panes[t])},onPaneClick(e,t){this.$emit("pane-click",this.indexedPanes[t])},getCurrentMouseDrag(e){const t=this.container.getBoundingClientRect(),{clientX:i,clientY:n}="ontouchstart"in window&&e.touches?e.touches[0]:e;return{x:i-t.left,y:n-t.top}},getCurrentDragPercentage(e){e=e[this.horizontal?"y":"x"];const t=this.container[this.horizontal?"clientHeight":"clientWidth"];return this.rtl&&!this.horizontal&&(e=t-e),e*100/t},calculatePanesSize(e){const t=this.touch.activeSplitter;let i={prevPanesSize:this.sumPrevPanesSize(t),nextPanesSize:this.sumNextPanesSize(t),prevReachedMinPanes:0,nextReachedMinPanes:0};const n=0+(this.pushOtherPanes?0:i.prevPanesSize),s=100-(this.pushOtherPanes?0:i.nextPanesSize),a=Math.max(Math.min(this.getCurrentDragPercentage(e),s),n);let r=[t,t+1],p=this.panes[r[0]]||null,o=this.panes[r[1]]||null;const h=p.max<100&&a>=p.max+i.prevPanesSize,z=o.max<100&&a<=100-(o.max+this.sumNextPanesSize(t+1));if(h||z){h?(p.size=p.max,o.size=Math.max(100-p.max-i.prevPanesSize-i.nextPanesSize,0)):(p.size=Math.max(100-o.max-i.prevPanesSize-this.sumNextPanesSize(t+1),0),o.size=o.max);return}if(this.pushOtherPanes){const m=this.doPushOtherPanes(i,a);if(!m)return;({sums:i,panesToResize:r}=m),p=this.panes[r[0]]||null,o=this.panes[r[1]]||null}p!==null&&(p.size=Math.min(Math.max(a-i.prevPanesSize-i.prevReachedMinPanes,p.min),p.max)),o!==null&&(o.size=Math.min(Math.max(100-a-i.nextPanesSize-i.nextReachedMinPanes,o.min),o.max))},doPushOtherPanes(e,t){const i=this.touch.activeSplitter,n=[i,i+1];return t{a>n[0]&&a<=i&&(s.size=s.min,e.prevReachedMinPanes+=s.min)}),e.prevPanesSize=this.sumPrevPanesSize(n[0]),n[0]===void 0)?(e.prevReachedMinPanes=0,this.panes[0].size=this.panes[0].min,this.panes.forEach((s,a)=>{a>0&&a<=i&&(s.size=s.min,e.prevReachedMinPanes+=s.min)}),this.panes[n[1]].size=100-e.prevReachedMinPanes-this.panes[0].min-e.prevPanesSize-e.nextPanesSize,null):t>100-e.nextPanesSize-this.panes[n[1]].min&&(n[1]=this.findNextExpandedPane(i).index,e.nextReachedMinPanes=0,n[1]>i+1&&this.panes.forEach((s,a)=>{a>i&&a{a=i+1&&(s.size=s.min,e.nextReachedMinPanes+=s.min)}),this.panes[n[0]].size=100-e.prevPanesSize-e.nextReachedMinPanes-this.panes[this.panesCount-1].min-e.nextPanesSize,null):{sums:e,panesToResize:n}},sumPrevPanesSize(e){return this.panes.reduce((t,i,n)=>t+(nt+(n>e+1?i.size:0),0)},findPrevExpandedPane(e){return[...this.panes].reverse().find(t=>t.indext.min)||{}},findNextExpandedPane(e){return this.panes.find(t=>t.index>e+1&&t.size>t.min)||{}},checkSplitpanesNodes(){Array.from(this.container.children).forEach(e=>{const t=e.classList.contains("splitpanes__pane"),i=e.classList.contains("splitpanes__splitter");if(!t&&!i){e.parentNode.removeChild(e),console.warn("Splitpanes: Only elements are allowed at the root of . One of your DOM nodes was removed.");return}})},addSplitter(e,t,i=!1){const n=e-1,s=document.createElement("div");s.classList.add("splitpanes__splitter"),i||(s.onmousedown=a=>this.onMouseDown(a,n),typeof window<"u"&&"ontouchstart"in window&&(s.ontouchstart=a=>this.onMouseDown(a,n)),s.onclick=a=>this.onSplitterClick(a,n+1)),this.dblClickSplitter&&(s.ondblclick=a=>this.onSplitterDblClick(a,n+1)),t.parentNode.insertBefore(s,t)},removeSplitter(e){e.onmousedown=void 0,e.onclick=void 0,e.ondblclick=void 0,e.parentNode.removeChild(e)},redoSplitters(){const e=Array.from(this.container.children);e.forEach(i=>{i.className.includes("splitpanes__splitter")&&this.removeSplitter(i)});let t=0;e.forEach(i=>{i.className.includes("splitpanes__pane")&&(!t&&this.firstSplitter?this.addSplitter(t,i,!0):t&&this.addSplitter(t,i),t++)})},requestUpdate(e){var t=e,{target:i}=t,n=Ge(t,["target"]);const s=this.indexedPanes[i._uid];Object.entries(n).forEach(([a,r])=>s[a]=r)},onPaneAdd(e){let t=-1;Array.from(e.$el.parentNode.children).some(s=>(s.className.includes("splitpanes__pane")&&t++,s===e.$el));const i=parseFloat(e.minSize),n=parseFloat(e.maxSize);this.panes.splice(t,0,{id:e._uid,index:t,min:isNaN(i)?0:i,max:isNaN(n)?100:n,size:e.size===null?null:parseFloat(e.size),givenSize:e.size,update:e.update}),this.panes.forEach((s,a)=>s.index=a),this.ready&&this.$nextTick(()=>{this.redoSplitters(),this.resetPaneSizes({addedPane:this.panes[t]}),this.$emit("pane-add",{index:t,panes:this.panes.map(s=>({min:s.min,max:s.max,size:s.size}))})})},onPaneRemove(e){const t=this.panes.findIndex(n=>n.id===e._uid),i=this.panes.splice(t,1)[0];this.panes.forEach((n,s)=>n.index=s),this.$nextTick(()=>{this.redoSplitters(),this.resetPaneSizes({removedPane:Ke(qe({},i),{index:t})}),this.$emit("pane-remove",{removed:i,panes:this.panes.map(n=>({min:n.min,max:n.max,size:n.size}))})})},resetPaneSizes(e={}){!e.addedPane&&!e.removedPane?this.initialPanesSizing():this.panes.some(t=>t.givenSize!==null||t.min||t.max<100)?this.equalizeAfterAddOrRemove(e):this.equalize(),this.ready&&this.$emit("resized",this.panes.map(t=>({min:t.min,max:t.max,size:t.size})))},equalize(){const e=100/this.panesCount;let t=0,i=[],n=[];this.panes.forEach(s=>{s.size=Math.max(Math.min(e,s.max),s.min),t-=s.size,s.size>=s.max&&i.push(s.id),s.size<=s.min&&n.push(s.id)}),t>.1&&this.readjustSizes(t,i,n)},initialPanesSizing(){100/this.panesCount;let e=100,t=[],i=[],n=0;this.panes.forEach(a=>{e-=a.size,a.size!==null&&n++,a.size>=a.max&&t.push(a.id),a.size<=a.min&&i.push(a.id)});let s=100;e>.1&&(this.panes.forEach(a=>{a.size===null&&(a.size=Math.max(Math.min(e/(this.panesCount-n),a.max),a.min)),s-=a.size}),s>.1&&this.readjustSizes(e,t,i))},equalizeAfterAddOrRemove({addedPane:e,removedPane:t}={}){let i=100/this.panesCount,n=0,s=[],a=[];e&&e.givenSize!==null&&(i=(100-e.givenSize)/(this.panesCount-1)),this.panes.forEach(r=>{n-=r.size,r.size>=r.max&&s.push(r.id),r.size<=r.min&&a.push(r.id)}),!(Math.abs(n)<.1)&&(this.panes.forEach(r=>{e&&e.givenSize!==null&&e.id===r.id||(r.size=Math.max(Math.min(i,r.max),r.min)),n-=r.size,r.size>=r.max&&s.push(r.id),r.size<=r.min&&a.push(r.id)}),n>.1&&this.readjustSizes(n,s,a))},readjustSizes(e,t,i){let n;e>0?n=e/(this.panesCount-t.length):n=e/(this.panesCount-i.length),this.panes.forEach((s,a)=>{if(e>0&&!t.includes(s.id)){const r=Math.max(Math.min(s.size+n,s.max),s.min),p=r-s.size;e-=p,s.size=r}else if(!i.includes(s.id)){const r=Math.max(Math.min(s.size+n,s.max),s.min),p=r-s.size;e-=p,s.size=r}s.update({[this.horizontal?"height":"width"]:"".concat(this.indexedPanes[s.id].size,"%")})}),Math.abs(e)>.1&&this.$nextTick(()=>{this.ready&&console.warn("Splitpanes: Could not resize panes correctly due to their constraints.")})}},watch:{panes:{deep:!0,immediate:!1,handler(){this.updatePaneComponents()}},horizontal(){this.updatePaneComponents()},firstSplitter(){this.redoSplitters()},dblClickSplitter(e){[...this.container.querySelectorAll(".splitpanes__splitter")].forEach((t,i)=>{t.ondblclick=e?n=>this.onSplitterDblClick(n,i):void 0})}},beforeDestroy(){this.ready=!1},mounted(){this.container=this.$refs.container,this.checkSplitpanesNodes(),this.redoSplitters(),this.resetPaneSizes(),this.$emit("ready"),this.ready=!0},render(e){return e("div",{ref:"container",class:["splitpanes","splitpanes--".concat(this.horizontal?"horizontal":"vertical"),{"splitpanes--dragging":this.touch.dragging}]},this.$slots.default)}};let Xe,Je;const L={};var Ye=q(We,Xe,Je,!1,Qe);function Qe(e){for(let t in L)this[t]=L[t]}var et=function(){return Ye.exports}(),tt=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"splitpanes__pane",style:e.style,on:{click:function(n){return e.onPaneClick(n,e._uid)}}},[e._t("default")],2)},it=[];const nt={name:"pane",inject:["requestUpdate","onPaneAdd","onPaneRemove","onPaneClick"],props:{size:{type:[Number,String],default:null},minSize:{type:[Number,String],default:0},maxSize:{type:[Number,String],default:100}},data:()=>({style:{}}),mounted(){this.onPaneAdd(this)},beforeDestroy(){this.onPaneRemove(this)},methods:{update(e){this.style=e}},computed:{sizeNumber(){return this.size||this.size===0?parseFloat(this.size):null},minSizeNumber(){return parseFloat(this.minSize)},maxSizeNumber(){return parseFloat(this.maxSize)}},watch:{sizeNumber(e){this.requestUpdate({target:this,size:e})},minSizeNumber(e){this.requestUpdate({target:this,min:e})},maxSizeNumber(e){this.requestUpdate({target:this,max:e})}}},$={};var st=q(nt,tt,it,!1,at);function at(e){for(let t in $)this[t]=$[t]}var rt=function(){return st.exports}();O(se);const ot={name:"NcAppDetailsToggle",directives:{tooltip:re},components:{NcButton:V,ArrowRight:de,ArrowLeft:Be},setup(){return{isRTL:R(),isMobile:P()}},computed:{title(){return U("Go back to the list")}},watch:{isMobile:{immediate:!0,handler(){this.toggleAppNavigationButton(this.isMobile)}}},beforeDestroy(){this.isMobile&&this.toggleAppNavigationButton(!1)},methods:{toggleAppNavigationButton(e=!0){const t=document.querySelector(".app-navigation .app-navigation-toggle");t&&(t.style.display=e?"none":null,e===!0&&w("toggle-navigation",{open:!1}))}}};var lt=function(){var e=this,t=e._self._c;return t("NcButton",{directives:[{name:"tooltip",rawName:"v-tooltip",value:e.title,expression:"title"}],staticClass:"app-details-toggle",class:{"app-details-toggle--mobile":e.isMobile},attrs:{type:"tertiary","aria-label":e.title},scopedSlots:e._u([{key:"icon",fn:function(){return[e.isRTL?t("ArrowLeft",{attrs:{size:20}}):t("ArrowRight",{attrs:{size:20}})]},proxy:!0}])})},pt=[],ct=C(ot,lt,pt,!1,null,"089eb524");const ht=ct.exports,T=ne("nextcloud").persist().build(),dt={name:"NcAppContent",components:{NcAppDetailsToggle:ht,Pane:rt,Splitpanes:et},props:{allowSwipeNavigation:{type:Boolean,default:!0},listSize:{type:Number,default:20},listMinWidth:{type:Number,default:15},listMaxWidth:{type:Number,default:40},paneConfigKey:{type:String,default:""},showDetails:{type:Boolean,default:!0},pageHeading:{type:String,default:null},layout:{type:String,default:"vertical-split",validator(e){return["no-split","vertical-split","horizontal-split"].includes(e)}}},emits:["update:showDetails","resize:list"],setup(){return{isMobile:P(),isRTL:R()}},data(){return{contentHeight:0,hasList:!1,hasContent:!1,swiping:{},listPaneSize:this.restorePaneConfig()}},computed:{paneConfigID(){if(this.paneConfigKey!=="")return"pane-list-size-".concat(this.paneConfigKey);try{return"pane-list-size-".concat(Q)}catch(e){return console.info("[INFO] AppContent:","falling back to global nextcloud pane config"),"pane-list-size-nextcloud"}},detailsPaneSize(){return this.listPaneSize?100-this.listPaneSize:this.paneDefaults.details.size},paneDefaults(){return{list:{size:this.listSize,min:this.listMinWidth,max:this.listMaxWidth},details:{size:100-this.listSize,min:100-this.listMaxWidth,max:100-this.listMinWidth}}}},updated(){this.checkSlots()},mounted(){this.allowSwipeNavigation&&(this.swiping=ae(this.$el,{onSwipeEnd:this.handleSwipe})),this.checkSlots(),this.restorePaneConfig()},methods:{handleSwipe(e,t){Math.abs(this.swiping.lengthX)>70&&(this.swiping.coordsStart.x<300/2&&t==="right"?w("toggle-navigation",{open:!0}):this.swiping.coordsStart.x<300*1.5&&t==="left"&&w("toggle-navigation",{open:!1}))},handlePaneResize(e){const t=parseInt(e[0].size,10);T.setItem(this.paneConfigID,JSON.stringify(t)),this.listPaneSize=t,this.$emit("resize:list",{size:t}),console.debug("AppContent pane config",t)},checkSlots(){this.hasList=!!this.$scopedSlots.list,this.hasContent=!!this.$scopedSlots.default},restorePaneConfig(){const e=parseInt(T.getItem(this.paneConfigID),10);if(!isNaN(e)&&e!==this.listPaneSize)return console.debug("AppContent pane config",e),this.listPaneSize=e,e},hideDetails(){this.$emit("update:showDetails",!1)}}};var ut=function(){var e=this,t=e._self._c;return t("main",{staticClass:"app-content no-snapper",class:{"app-content--has-list":e.hasList},attrs:{id:"app-content-vue"}},[e.pageHeading?t("h1",{staticClass:"hidden-visually"},[e._v(" "+e._s(e.pageHeading)+" ")]):e._e(),e.hasList?[e.isMobile||e.layout==="no-split"?t("div",{staticClass:"app-content-wrapper app-content-wrapper--no-split",class:{"app-content-wrapper--show-details":e.showDetails,"app-content-wrapper--show-list":!e.showDetails,"app-content-wrapper--mobile":e.isMobile}},[e.showDetails?t("NcAppDetailsToggle",{nativeOn:{click:function(i){return i.stopPropagation(),i.preventDefault(),e.hideDetails.apply(null,arguments)}}}):e._e(),e.showDetails?e._t("default"):e._t("list")],2):e.layout==="vertical-split"||e.layout==="horizontal-split"?t("div",{staticClass:"app-content-wrapper"},[t("Splitpanes",{staticClass:"default-theme",class:{"splitpanes--horizontal":e.layout==="horizontal-split","splitpanes--vertical":e.layout==="vertical-split"},attrs:{horizontal:e.layout==="horizontal-split",rtl:e.isRTL},on:{resized:e.handlePaneResize}},[t("Pane",{staticClass:"splitpanes__pane-list",attrs:{size:e.listPaneSize||e.paneDefaults.list.size,"min-size":e.paneDefaults.list.min,"max-size":e.paneDefaults.list.max}},[e._t("list")],2),t("Pane",{staticClass:"splitpanes__pane-details",attrs:{size:e.detailsPaneSize,"min-size":e.paneDefaults.details.min,"max-size":e.paneDefaults.details.max}},[e._t("default")],2)],1)],1):e._e()]:e._e(),e.hasList?e._e():e._t("default")],2)},mt=[],ft=C(dt,ut,mt,!1,null,"e905d7c8");const gt=ft.exports;let yt="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict",vt=(e=21)=>{let t="",i=e|0;for(;i--;)t+=yt[Math.random()*64|0];return t};function v(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?v=function(t){return typeof t}:v=function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},v(e)}var K={selector:"vue-portal-target-".concat(vt())},wt=function(e){return K.selector=e},_=typeof window<"u"&&(typeof document>"u"?"undefined":v(document))!==void 0,xt=g.extend({abstract:!0,name:"PortalOutlet",props:["nodes","tag"],data:function(e){return{updatedNodes:e.nodes}},render:function(e){var t=this.updatedNodes&&this.updatedNodes();return t?t.length===1&&!t[0].text?t:e(this.tag||"DIV",t):e()},destroyed:function(){var e=this.$el;e&&e.parentNode.removeChild(e)}}),G=g.extend({name:"VueSimplePortal",props:{disabled:{type:Boolean},prepend:{type:Boolean},selector:{type:String,default:function(){return"#".concat(K.selector)}},tag:{type:String,default:"DIV"}},render:function(e){if(this.disabled){var t=this.$scopedSlots&&this.$scopedSlots.default();return t?t.length<2&&!t[0].text?t:e(this.tag,t):e()}return e()},created:function(){this.getTargetEl()||this.insertTargetEl()},updated:function(){var e=this;this.$nextTick(function(){!e.disabled&&e.slotFn!==e.$scopedSlots.default&&(e.container.updatedNodes=e.$scopedSlots.default),e.slotFn=e.$scopedSlots.default})},beforeDestroy:function(){this.unmount()},watch:{disabled:{immediate:!0,handler:function(e){e?this.unmount():this.$nextTick(this.mount)}}},methods:{getTargetEl:function(){if(_)return document.querySelector(this.selector)},insertTargetEl:function(){if(_){var e=document.querySelector("body"),t=document.createElement(this.tag);t.id=this.selector.substring(1),e.appendChild(t)}},mount:function(){if(_){var e=this.getTargetEl(),t=document.createElement("DIV");this.prepend&&e.firstChild?e.insertBefore(t,e.firstChild):e.appendChild(t),this.container=new xt({el:t,parent:this,propsData:{tag:this.tag,nodes:this.$scopedSlots.default}})}},unmount:function(){this.container&&(this.container.$destroy(),delete this.container)}}});function Ct(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};e.component(t.name||"portal",G),t.defaultSelector&&wt(t.defaultSelector)}typeof window<"u"&&window.Vue&&window.Vue===g&&g.use(Ct),O(oe);const zt='\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n',St='\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n',Dt={name:"NcContent",components:{NcButton:V,NcIconSvgWrapper:le,Teleport:G},provide(){return{"NcContent:setHasAppNavigation":this.setAppNavigation,"NcContent:selector":"#content-vue"}},props:{appName:{type:String,required:!0}},setup(){return{isMobile:P()}},data(){return{hasAppNavigation:!1,currentFocus:""}},computed:{currentImage(){return this.currentFocus==="navigation"?St:zt}},beforeMount(){const e=document.getElementById("skip-actions");e&&(e.innerHTML="",e.classList.add("vue-skip-actions"))},methods:{t:U,openAppNavigation(){w("toggle-navigation",{open:!0}),this.$nextTick(()=>{window.location.hash="app-navigation-vue",document.getElementById("app-navigation-vue").focus()})},setAppNavigation(e){this.hasAppNavigation=e,this.currentFocus===""&&(this.currentFocus="navigation")}}};var _t=function(){var e=this,t=e._self._c;return t("div",{class:["content","app-".concat(e.appName.toLowerCase())],attrs:{id:"content-vue"}},[t("Teleport",{attrs:{selector:"#skip-actions"}},[t("div",{staticClass:"vue-skip-actions__container"},[t("div",{staticClass:"vue-skip-actions__headline"},[e._v(" "+e._s(e.t("Keyboard navigation help"))+" ")]),t("div",{staticClass:"vue-skip-actions__buttons"},[t("NcButton",{directives:[{name:"show",rawName:"v-show",value:e.hasAppNavigation,expression:"hasAppNavigation"}],attrs:{type:"tertiary",href:"#app-navigation-vue"},on:{click:function(i){return i.preventDefault(),e.openAppNavigation.apply(null,arguments)},focusin:function(i){e.currentFocus="navigation"},mouseover:function(i){e.currentFocus="navigation"}}},[e._v(" "+e._s(e.t("Skip to app navigation"))+" ")]),t("NcButton",{attrs:{type:"tertiary",href:"#app-content-vue"},on:{focusin:function(i){e.currentFocus="content"},mouseover:function(i){e.currentFocus="content"}}},[e._v(" "+e._s(e.t("Skip to main content"))+" ")])],1),t("NcIconSvgWrapper",{directives:[{name:"show",rawName:"v-show",value:!e.isMobile,expression:"!isMobile"}],staticClass:"vue-skip-actions__image",attrs:{svg:e.currentImage,size:"auto"}})],1),e._v("  ")]),e._t("default")],2)},bt=[],Pt=C(Dt,_t,bt,!1,null,"d8f0539f");const Et=Pt.exports,u={NONE:"none",ENCRYPTING:"encrypting",UPLOADING:"uploading",UPLOADED:"uploaded",UPLOADING_METADATA:"uploading_metadata",DONE:"done"},Nt={name:"FileDrop",components:{NcContent:Et,NcAppContent:gt,NcLoadingIcon:pe,IconCheck:Ae,IconAlertCircle:Fe},data(){return{shareToken:f("end_to_end_encryption","token"),folderId:f("end_to_end_encryption","fileId"),publicKeys:f("end_to_end_encryption","publicKeys"),fileName:f("end_to_end_encryption","fileName"),encryptionVersion:Number.parseInt(f("end_to_end_encryption","encryptionVersion")),uploadedFiles:[],loading:!1,UploadStep:u,highlightDropZone:!1}},methods:{handleDragOver(e){var t;(t=e.dataTransfer)!=null&&t.types.includes("Files")&&(e.dataTransfer.dropEffect="copy",this.highlightDropZone=!0)},handleDrop(e){var t;(t=e.dataTransfer)!=null&&t.types.includes("Files")&&(this.filesChange(e.dataTransfer.files),this.highlightDropZone=!1)},async filesChange(e){if(!(e!=null&&e.length)||this.loading)return;this.loading=!0;let t=[];try{t=await Promise.all(Array.from(e).map(i=>this.uploadFile(i))),c.debug("[FileDrop] Files uploaded",{progresses:t})}catch(i){c.error("[FileDrop] Error while uploading files",{exception:i}),k(this.t("end_to_end_encryption","Error while uploading files")),t.forEach(n=>{n.error=!0})}try{t.filter(({error:n})=>!n).forEach(n=>{n.step=u.UPLOADING_METADATA});const i=t.filter(({error:n})=>!n).reduce((n,{fileDrop:s})=>S(S({},n),s),{});c.debug("[FileDrop] FileDrop entries computed",{fileDrops:i}),await we(this.encryptionVersion,this.folderId,i,this.shareToken)}catch(i){c.error("[FileDrop] Error while uploading metadata",{exception:i}),k(this.t("end_to_end_encryption","Error while uploading metadata")),t.forEach(n=>{n.error=!0})}t.filter(({error:i})=>!i).forEach(i=>{i.step=u.DONE}),this.loading=!1},async uploadFile(e){const t={file:e,step:u.NONE,error:!1,fileDrop:{}};this.uploadedFiles.push(t);try{t.step=u.ENCRYPTING;const{encryptedFileContent:i,encryptionInfo:n}=await De(e),s=ye().replaceAll("-","");t.fileDrop[s]=await ve(n,this.publicKeys),c.debug("[FileDrop] Filedrop entry computed: ".concat(e.name),{fileDropEntry:t.fileDrop[s]}),t.step=u.UPLOADING,await Pe("/public.php/dav/files/".concat(this.shareToken),s,i,this.shareToken),t.step=u.UPLOADED,c.debug("[FileDrop] File uploaded: ".concat(e.name),{encryptedFileContent:i,encryptionInfo:n,encryptedFileName:s,shareToken:this.shareToken})}catch(i){t.error=!0,c.error("[FileDrop] Fail to upload the file (".concat(t.step,")"),{exception:i})}return t},t:ce}};var Mt=function(){var e=this,t=e._self._c;return t("NcContent",{attrs:{"app-name":"end_to_end_encryption"}},[t("NcAppContent",{nativeOn:{drop:function(i){return i.preventDefault(),e.handleDrop.apply(null,arguments)},dragover:function(i){return i.preventDefault(),e.handleDragOver.apply(null,arguments)},dragleave:function(i){e.highlightDropZone=!1}}},[t("div",{staticClass:"uploader-form",class:{highlight:e.highlightDropZone}},[t("div",{staticClass:"uploader-form__label"},[t("div",{staticClass:"uploader-form__icon icon-folder"}),e._v(" "+e._s(e.t("end_to_end_encryption","Upload encrypted files to {fileName}",{fileName:e.fileName}))+" "),t("label",{staticClass:"uploader-form__input button primary",class:{loading:e.loading}},[e._v(" "+e._s(e.t("end_to_end_encryption","Select or drop files"))+" "),t("input",{attrs:{type:"file",multiple:"",disabled:e.loading},on:{change:function(i){var n;return e.filesChange((n=i.target)==null?void 0:n.files)}}})])]),t("ul",{staticClass:"uploader-form__file-list"},e._l(e.uploadedFiles,function({file:i,step:n,error:s},a){return t("li",{key:a,staticClass:"uploader-form__file-list__item"},[s?t("IconAlertCircle",{attrs:{size:20}}):n===e.UploadStep.DONE?t("IconCheck",{attrs:{size:20}}):t("NcLoadingIcon"),t("b",[e._v(e._s(i.name))])],1)}),0)])])],1)},kt=[],At=b(Nt,Mt,kt,!1,null,"8a5d9b72");const It=At.exports,Lt=g.extend(It);new Lt({}).$mount("#content"); +var W=Object.defineProperty;var E=Object.getOwnPropertySymbols;var X=Object.prototype.hasOwnProperty,J=Object.prototype.propertyIsEnumerable;var N=(e,t,i)=>t in e?W(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i,z=(e,t)=>{for(var i in t||(t={}))X.call(t,i)&&N(e,i,t[i]);if(E)for(var i of E(t))J.call(t,i)&&N(e,i,t[i]);return e};import{v as Q,d as T,a8 as ee,P as te,s as _,n as x,r as F,Z as ie,a9 as ne,I as O,aa as se,ab as v,ac as ae,N as R,t as V,V as g,ad as oe,a2 as re,B as le,l as f,y as M,k as pe}from"./_plugin-vue2_normalizer-ohAsO3uW.chunk.mjs";import{X as ce,L as he}from"./ArrowRight-CY2b9hgN-CHOX6Yhg.chunk.mjs";import{l as c}from"./logger-BdEh6xXd.chunk.mjs";import{u as b}from"./useIsMobile-iGu5AIXN.chunk.mjs";const Y="end_to_end_encryption";const l=[];for(let e=0;e<256;++e)l.push((e+256).toString(16).slice(1));function de(e,t=0){return(l[e[t+0]]+l[e[t+1]]+l[e[t+2]]+l[e[t+3]]+"-"+l[e[t+4]]+l[e[t+5]]+"-"+l[e[t+6]]+l[e[t+7]]+"-"+l[e[t+8]]+l[e[t+9]]+"-"+l[e[t+10]]+l[e[t+11]]+l[e[t+12]]+l[e[t+13]]+l[e[t+14]]+l[e[t+15]]).toLowerCase()}let S;const ue=new Uint8Array(16);function me(){if(!S){if(typeof crypto>"u"||!crypto.getRandomValues)throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");S=crypto.getRandomValues.bind(crypto)}return S(ue)}const fe=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto),k={randomUUID:fe};function ge(e,t,i){var s,a,o;if(k.randomUUID&&!t&&!e)return k.randomUUID();e=e||{};const n=(o=(a=e.random)!=null?a:(s=e.rng)==null?void 0:s.call(e))!=null?o:me();if(n.length<16)throw new Error("Random bytes length must be >= 16");return n[6]=n[6]&15|64,n[8]=n[8]&63|128,de(n)}function d(e){return btoa(String.fromCharCode(...new Uint8Array(e)))}async function ye(e,t){const i=await we(JSON.stringify(e));c.debug("[FileDrop] Encryption info compressed (".concat(e.filename,")"),{encryptionInfo:e,compressedEncryptionInfo:i});const n=await U(),{content:s,tag:a}=await B(n,new Uint8Array(i));return c.debug("[FileDrop] Encryption info encrypted (".concat(e.filename,")"),{content:s,tag:a,encryptionParams:n}),c.debug("[FileDrop] Encryption info base64ed (".concat(e.filename,")"),{ciphertext:d(s)}),{ciphertext:d(s),nonce:d(n.initializationVector),authenticationTag:d(a),users:await xe(t,n)}}async function ve(e,t,i,n){const s=Q("apps/end_to_end_encryption/api/v{encryptionVersion}/meta-data/{folderId}",{encryptionVersion:e,folderId:t}),{data:{ocs:{meta:a}}}=await T.put("".concat(s,"/filedrop"),{filedrop:JSON.stringify(i)},{headers:{"x-e2ee-supported":!0},params:{shareToken:n}});if(a.statuscode!==200)throw new Error("Failed to upload metadata: ".concat(a.message))}async function we(e){const t=new Blob([e]).stream().pipeThrough(new CompressionStream("gzip")),i=[],n=t.getReader();for(;;){const{value:s}=await n.read();if(s===void 0)break;i.push(s)}return new Uint8Array(await new Blob(i).arrayBuffer())}async function xe(e,t){return Promise.all(Object.entries(e).map(async([i,n])=>{const s=await window.crypto.subtle.exportKey("raw",t.key),a=await _e(n,s);return{userId:i,encryptedFiledropKey:d(a)}}))}function Ce(e){return e.slice(e.byteLength-16)}async function ze(){return await window.crypto.subtle.generateKey({name:"AES-GCM",length:128},!0,["encrypt","decrypt"])}async function U(){return{key:await ze(),initializationVector:window.crypto.getRandomValues(new Uint8Array(16))}}async function B({key:e,initializationVector:t},i){const n=await window.crypto.subtle.encrypt({name:"AES-GCM",iv:t},e,i);return{content:n,tag:Ce(n)}}async function Se(e){const t=await e.arrayBuffer(),i=await U(),{content:n,tag:s}=await B(i,new Uint8Array(t));return c.debug("[FileDrop] File encrypted: ".concat(e.name),{file:e,content:n,tag:s,encryptionParams:i,rawKey:d(await window.crypto.subtle.exportKey("raw",i.key))}),{encryptedFileContent:n,encryptionInfo:{filename:e.name,mimetype:e.type||"application/octet-stream",nonce:d(i.initializationVector),key:d(await window.crypto.subtle.exportKey("raw",i.key)),authenticationTag:d(s)}}}async function De(e){const t=new ce(e);return await window.crypto.subtle.importKey("spki",t.publicKey.rawData,{name:"RSA-OAEP",hash:"SHA-256"},!0,["encrypt"])}async function _e(e,t){return await window.crypto.subtle.encrypt({name:"RSA-OAEP"},await De(e),t)}async function be(e,t,i,n){await T.put(ee.join(te(),e,t),i,{headers:{Authorization:"Basic ".concat(btoa("".concat(n,":")))}})}const Pe={name:"CheckIcon",emits:["click"],props:{title:{type:String},fillColor:{type:String,default:"currentColor"},size:{type:Number,default:24}}};var Ee=function(){var e=this,t=e._self._c;return t("span",e._b({staticClass:"material-design-icon check-icon",attrs:{"aria-hidden":e.title?null:"true","aria-label":e.title,role:"img"},on:{click:function(i){return e.$emit("click",i)}}},"span",e.$attrs,!1),[t("svg",{staticClass:"material-design-icon__svg",attrs:{fill:e.fillColor,width:e.size,height:e.size,viewBox:"0 0 24 24"}},[t("path",{attrs:{d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"}},[e.title?t("title",[e._v(e._s(e.title))]):e._e()])])])},Ne=[],Me=_(Pe,Ee,Ne,!1,null,null);const ke=Me.exports,Ae={name:"AlertCircleIcon",emits:["click"],props:{title:{type:String},fillColor:{type:String,default:"currentColor"},size:{type:Number,default:24}}};var Ie=function(){var e=this,t=e._self._c;return t("span",e._b({staticClass:"material-design-icon alert-circle-icon",attrs:{"aria-hidden":e.title?null:"true","aria-label":e.title,role:"img"},on:{click:function(i){return e.$emit("click",i)}}},"span",e.$attrs,!1),[t("svg",{staticClass:"material-design-icon__svg",attrs:{fill:e.fillColor,width:e.size,height:e.size,viewBox:"0 0 24 24"}},[t("path",{attrs:{d:"M13,13H11V7H13M13,17H11V15H13M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2Z"}},[e.title?t("title",[e._v(e._s(e.title))]):e._e()])])])},Le=[],$e=_(Ae,Ie,Le,!1,null,null);const Te=$e.exports,Fe={name:"ArrowLeftIcon",emits:["click"],props:{title:{type:String},fillColor:{type:String,default:"currentColor"},size:{type:Number,default:24}}};var Oe=function(){var e=this,t=e._self._c;return t("span",e._b({staticClass:"material-design-icon arrow-left-icon",attrs:{"aria-hidden":e.title?null:"true","aria-label":e.title,role:"img"},on:{click:function(i){return e.$emit("click",i)}}},"span",e.$attrs,!1),[t("svg",{staticClass:"material-design-icon__svg",attrs:{fill:e.fillColor,width:e.size,height:e.size,viewBox:"0 0 24 24"}},[t("path",{attrs:{d:"M20,11V13H8L13.5,18.5L12.08,19.92L4.16,12L12.08,4.08L13.5,5.5L8,11H20Z"}},[e.title?t("title",[e._v(e._s(e.title))]):e._e()])])])},Re=[],Ve=x(Fe,Oe,Re,!1,null,null);const Ue=Ve.exports;var Be=Object.defineProperty,He=Object.defineProperties,Ze=Object.getOwnPropertyDescriptors,w=Object.getOwnPropertySymbols,H=Object.prototype.hasOwnProperty,Z=Object.prototype.propertyIsEnumerable,A=(e,t,i)=>t in e?Be(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i,je=(e,t)=>{for(var i in t||(t={}))H.call(t,i)&&A(e,i,t[i]);if(w)for(var i of w(t))Z.call(t,i)&&A(e,i,t[i]);return e},qe=(e,t)=>He(e,Ze(t)),Ke=(e,t)=>{var i={};for(var n in e)H.call(e,n)&&t.indexOf(n)<0&&(i[n]=e[n]);if(e!=null&&w)for(var n of w(e))t.indexOf(n)<0&&Z.call(e,n)&&(i[n]=e[n]);return i};function j(e,t,i,n,s,a,o,p){var r=typeof e=="function"?e.options:e;t&&(r.render=t,r.staticRenderFns=i,r._compiled=!0);var h;if(s&&(h=s),h)if(r.functional){r._injectStyles=h;var C=r.render;r.render=function(G,P){return h.call(P),C(G,P)}}else{var m=r.beforeCreate;r.beforeCreate=m?[].concat(m,h):[h]}return{exports:e,options:r}}const Ge={name:"splitpanes",props:{horizontal:{type:Boolean},pushOtherPanes:{type:Boolean,default:!0},dblClickSplitter:{type:Boolean,default:!0},rtl:{type:Boolean,default:!1},firstSplitter:{type:Boolean}},provide(){return{requestUpdate:this.requestUpdate,onPaneAdd:this.onPaneAdd,onPaneRemove:this.onPaneRemove,onPaneClick:this.onPaneClick}},data:()=>({container:null,ready:!1,panes:[],touch:{mouseDown:!1,dragging:!1,activeSplitter:null},splitterTaps:{splitter:null,timeoutId:null}}),computed:{panesCount(){return this.panes.length},indexedPanes(){return this.panes.reduce((e,t)=>(e[t.id]=t)&&e,{})}},methods:{updatePaneComponents(){this.panes.forEach(e=>{e.update&&e.update({[this.horizontal?"height":"width"]:"".concat(this.indexedPanes[e.id].size,"%")})})},bindEvents(){document.addEventListener("mousemove",this.onMouseMove,{passive:!1}),document.addEventListener("mouseup",this.onMouseUp),"ontouchstart"in window&&(document.addEventListener("touchmove",this.onMouseMove,{passive:!1}),document.addEventListener("touchend",this.onMouseUp))},unbindEvents(){document.removeEventListener("mousemove",this.onMouseMove,{passive:!1}),document.removeEventListener("mouseup",this.onMouseUp),"ontouchstart"in window&&(document.removeEventListener("touchmove",this.onMouseMove,{passive:!1}),document.removeEventListener("touchend",this.onMouseUp))},onMouseDown(e,t){this.bindEvents(),this.touch.mouseDown=!0,this.touch.activeSplitter=t},onMouseMove(e){this.touch.mouseDown&&(e.preventDefault(),this.touch.dragging=!0,this.calculatePanesSize(this.getCurrentMouseDrag(e)),this.$emit("resize",this.panes.map(t=>({min:t.min,max:t.max,size:t.size}))))},onMouseUp(){this.touch.dragging&&this.$emit("resized",this.panes.map(e=>({min:e.min,max:e.max,size:e.size}))),this.touch.mouseDown=!1,setTimeout(()=>{this.touch.dragging=!1,this.unbindEvents()},100)},onSplitterClick(e,t){"ontouchstart"in window&&(e.preventDefault(),this.dblClickSplitter&&(this.splitterTaps.splitter===t?(clearTimeout(this.splitterTaps.timeoutId),this.splitterTaps.timeoutId=null,this.onSplitterDblClick(e,t),this.splitterTaps.splitter=null):(this.splitterTaps.splitter=t,this.splitterTaps.timeoutId=setTimeout(()=>{this.splitterTaps.splitter=null},500)))),this.touch.dragging||this.$emit("splitter-click",this.panes[t])},onSplitterDblClick(e,t){let i=0;this.panes=this.panes.map((n,s)=>(n.size=s===t?n.max:n.min,s!==t&&(i+=n.min),n)),this.panes[t].size-=i,this.$emit("pane-maximize",this.panes[t])},onPaneClick(e,t){this.$emit("pane-click",this.indexedPanes[t])},getCurrentMouseDrag(e){const t=this.container.getBoundingClientRect(),{clientX:i,clientY:n}="ontouchstart"in window&&e.touches?e.touches[0]:e;return{x:i-t.left,y:n-t.top}},getCurrentDragPercentage(e){e=e[this.horizontal?"y":"x"];const t=this.container[this.horizontal?"clientHeight":"clientWidth"];return this.rtl&&!this.horizontal&&(e=t-e),e*100/t},calculatePanesSize(e){const t=this.touch.activeSplitter;let i={prevPanesSize:this.sumPrevPanesSize(t),nextPanesSize:this.sumNextPanesSize(t),prevReachedMinPanes:0,nextReachedMinPanes:0};const n=0+(this.pushOtherPanes?0:i.prevPanesSize),s=100-(this.pushOtherPanes?0:i.nextPanesSize),a=Math.max(Math.min(this.getCurrentDragPercentage(e),s),n);let o=[t,t+1],p=this.panes[o[0]]||null,r=this.panes[o[1]]||null;const h=p.max<100&&a>=p.max+i.prevPanesSize,C=r.max<100&&a<=100-(r.max+this.sumNextPanesSize(t+1));if(h||C){h?(p.size=p.max,r.size=Math.max(100-p.max-i.prevPanesSize-i.nextPanesSize,0)):(p.size=Math.max(100-r.max-i.prevPanesSize-this.sumNextPanesSize(t+1),0),r.size=r.max);return}if(this.pushOtherPanes){const m=this.doPushOtherPanes(i,a);if(!m)return;({sums:i,panesToResize:o}=m),p=this.panes[o[0]]||null,r=this.panes[o[1]]||null}p!==null&&(p.size=Math.min(Math.max(a-i.prevPanesSize-i.prevReachedMinPanes,p.min),p.max)),r!==null&&(r.size=Math.min(Math.max(100-a-i.nextPanesSize-i.nextReachedMinPanes,r.min),r.max))},doPushOtherPanes(e,t){const i=this.touch.activeSplitter,n=[i,i+1];return t{a>n[0]&&a<=i&&(s.size=s.min,e.prevReachedMinPanes+=s.min)}),e.prevPanesSize=this.sumPrevPanesSize(n[0]),n[0]===void 0)?(e.prevReachedMinPanes=0,this.panes[0].size=this.panes[0].min,this.panes.forEach((s,a)=>{a>0&&a<=i&&(s.size=s.min,e.prevReachedMinPanes+=s.min)}),this.panes[n[1]].size=100-e.prevReachedMinPanes-this.panes[0].min-e.prevPanesSize-e.nextPanesSize,null):t>100-e.nextPanesSize-this.panes[n[1]].min&&(n[1]=this.findNextExpandedPane(i).index,e.nextReachedMinPanes=0,n[1]>i+1&&this.panes.forEach((s,a)=>{a>i&&a{a=i+1&&(s.size=s.min,e.nextReachedMinPanes+=s.min)}),this.panes[n[0]].size=100-e.prevPanesSize-e.nextReachedMinPanes-this.panes[this.panesCount-1].min-e.nextPanesSize,null):{sums:e,panesToResize:n}},sumPrevPanesSize(e){return this.panes.reduce((t,i,n)=>t+(nt+(n>e+1?i.size:0),0)},findPrevExpandedPane(e){return[...this.panes].reverse().find(t=>t.indext.min)||{}},findNextExpandedPane(e){return this.panes.find(t=>t.index>e+1&&t.size>t.min)||{}},checkSplitpanesNodes(){Array.from(this.container.children).forEach(e=>{const t=e.classList.contains("splitpanes__pane"),i=e.classList.contains("splitpanes__splitter");if(!t&&!i){e.parentNode.removeChild(e),console.warn("Splitpanes: Only elements are allowed at the root of . One of your DOM nodes was removed.");return}})},addSplitter(e,t,i=!1){const n=e-1,s=document.createElement("div");s.classList.add("splitpanes__splitter"),i||(s.onmousedown=a=>this.onMouseDown(a,n),typeof window<"u"&&"ontouchstart"in window&&(s.ontouchstart=a=>this.onMouseDown(a,n)),s.onclick=a=>this.onSplitterClick(a,n+1)),this.dblClickSplitter&&(s.ondblclick=a=>this.onSplitterDblClick(a,n+1)),t.parentNode.insertBefore(s,t)},removeSplitter(e){e.onmousedown=void 0,e.onclick=void 0,e.ondblclick=void 0,e.parentNode.removeChild(e)},redoSplitters(){const e=Array.from(this.container.children);e.forEach(i=>{i.className.includes("splitpanes__splitter")&&this.removeSplitter(i)});let t=0;e.forEach(i=>{i.className.includes("splitpanes__pane")&&(!t&&this.firstSplitter?this.addSplitter(t,i,!0):t&&this.addSplitter(t,i),t++)})},requestUpdate(e){var t=e,{target:i}=t,n=Ke(t,["target"]);const s=this.indexedPanes[i._uid];Object.entries(n).forEach(([a,o])=>s[a]=o)},onPaneAdd(e){let t=-1;Array.from(e.$el.parentNode.children).some(s=>(s.className.includes("splitpanes__pane")&&t++,s===e.$el));const i=parseFloat(e.minSize),n=parseFloat(e.maxSize);this.panes.splice(t,0,{id:e._uid,index:t,min:isNaN(i)?0:i,max:isNaN(n)?100:n,size:e.size===null?null:parseFloat(e.size),givenSize:e.size,update:e.update}),this.panes.forEach((s,a)=>s.index=a),this.ready&&this.$nextTick(()=>{this.redoSplitters(),this.resetPaneSizes({addedPane:this.panes[t]}),this.$emit("pane-add",{index:t,panes:this.panes.map(s=>({min:s.min,max:s.max,size:s.size}))})})},onPaneRemove(e){const t=this.panes.findIndex(n=>n.id===e._uid),i=this.panes.splice(t,1)[0];this.panes.forEach((n,s)=>n.index=s),this.$nextTick(()=>{this.redoSplitters(),this.resetPaneSizes({removedPane:qe(je({},i),{index:t})}),this.$emit("pane-remove",{removed:i,panes:this.panes.map(n=>({min:n.min,max:n.max,size:n.size}))})})},resetPaneSizes(e={}){!e.addedPane&&!e.removedPane?this.initialPanesSizing():this.panes.some(t=>t.givenSize!==null||t.min||t.max<100)?this.equalizeAfterAddOrRemove(e):this.equalize(),this.ready&&this.$emit("resized",this.panes.map(t=>({min:t.min,max:t.max,size:t.size})))},equalize(){const e=100/this.panesCount;let t=0,i=[],n=[];this.panes.forEach(s=>{s.size=Math.max(Math.min(e,s.max),s.min),t-=s.size,s.size>=s.max&&i.push(s.id),s.size<=s.min&&n.push(s.id)}),t>.1&&this.readjustSizes(t,i,n)},initialPanesSizing(){100/this.panesCount;let e=100,t=[],i=[],n=0;this.panes.forEach(a=>{e-=a.size,a.size!==null&&n++,a.size>=a.max&&t.push(a.id),a.size<=a.min&&i.push(a.id)});let s=100;e>.1&&(this.panes.forEach(a=>{a.size===null&&(a.size=Math.max(Math.min(e/(this.panesCount-n),a.max),a.min)),s-=a.size}),s>.1&&this.readjustSizes(e,t,i))},equalizeAfterAddOrRemove({addedPane:e,removedPane:t}={}){let i=100/this.panesCount,n=0,s=[],a=[];e&&e.givenSize!==null&&(i=(100-e.givenSize)/(this.panesCount-1)),this.panes.forEach(o=>{n-=o.size,o.size>=o.max&&s.push(o.id),o.size<=o.min&&a.push(o.id)}),!(Math.abs(n)<.1)&&(this.panes.forEach(o=>{e&&e.givenSize!==null&&e.id===o.id||(o.size=Math.max(Math.min(i,o.max),o.min)),n-=o.size,o.size>=o.max&&s.push(o.id),o.size<=o.min&&a.push(o.id)}),n>.1&&this.readjustSizes(n,s,a))},readjustSizes(e,t,i){let n;e>0?n=e/(this.panesCount-t.length):n=e/(this.panesCount-i.length),this.panes.forEach((s,a)=>{if(e>0&&!t.includes(s.id)){const o=Math.max(Math.min(s.size+n,s.max),s.min),p=o-s.size;e-=p,s.size=o}else if(!i.includes(s.id)){const o=Math.max(Math.min(s.size+n,s.max),s.min),p=o-s.size;e-=p,s.size=o}s.update({[this.horizontal?"height":"width"]:"".concat(this.indexedPanes[s.id].size,"%")})}),Math.abs(e)>.1&&this.$nextTick(()=>{this.ready&&console.warn("Splitpanes: Could not resize panes correctly due to their constraints.")})}},watch:{panes:{deep:!0,immediate:!1,handler(){this.updatePaneComponents()}},horizontal(){this.updatePaneComponents()},firstSplitter(){this.redoSplitters()},dblClickSplitter(e){[...this.container.querySelectorAll(".splitpanes__splitter")].forEach((t,i)=>{t.ondblclick=e?n=>this.onSplitterDblClick(n,i):void 0})}},beforeDestroy(){this.ready=!1},mounted(){this.container=this.$refs.container,this.checkSplitpanesNodes(),this.redoSplitters(),this.resetPaneSizes(),this.$emit("ready"),this.ready=!0},render(e){return e("div",{ref:"container",class:["splitpanes","splitpanes--".concat(this.horizontal?"horizontal":"vertical"),{"splitpanes--dragging":this.touch.dragging}]},this.$slots.default)}};let We,Xe;const I={};var Je=j(Ge,We,Xe,!1,Ye);function Ye(e){for(let t in I)this[t]=I[t]}var Qe=function(){return Je.exports}(),et=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"splitpanes__pane",style:e.style,on:{click:function(n){return e.onPaneClick(n,e._uid)}}},[e._t("default")],2)},tt=[];const it={name:"pane",inject:["requestUpdate","onPaneAdd","onPaneRemove","onPaneClick"],props:{size:{type:[Number,String],default:null},minSize:{type:[Number,String],default:0},maxSize:{type:[Number,String],default:100}},data:()=>({style:{}}),mounted(){this.onPaneAdd(this)},beforeDestroy(){this.onPaneRemove(this)},methods:{update(e){this.style=e}},computed:{sizeNumber(){return this.size||this.size===0?parseFloat(this.size):null},minSizeNumber(){return parseFloat(this.minSize)},maxSizeNumber(){return parseFloat(this.maxSize)}},watch:{sizeNumber(e){this.requestUpdate({target:this,size:e})},minSizeNumber(e){this.requestUpdate({target:this,min:e})},maxSizeNumber(e){this.requestUpdate({target:this,max:e})}}},L={};var nt=j(it,et,tt,!1,st);function st(e){for(let t in L)this[t]=L[t]}var at=function(){return nt.exports}();F(ne);const ot={name:"NcAppDetailsToggle",directives:{tooltip:ae},components:{NcButton:R,ArrowRight:he,ArrowLeft:Ue},setup(){return{isRTL:O(),isMobile:b()}},computed:{title(){return V("Go back to the list")}},watch:{isMobile:{immediate:!0,handler(){this.toggleAppNavigationButton(this.isMobile)}}},beforeDestroy(){this.isMobile&&this.toggleAppNavigationButton(!1)},methods:{toggleAppNavigationButton(e=!0){const t=document.querySelector(".app-navigation .app-navigation-toggle");t&&(t.style.display=e?"none":null,e===!0&&v("toggle-navigation",{open:!1}))}}};var rt=function(){var e=this,t=e._self._c;return t("NcButton",{directives:[{name:"tooltip",rawName:"v-tooltip",value:e.title,expression:"title"}],staticClass:"app-details-toggle",class:{"app-details-toggle--mobile":e.isMobile},attrs:{type:"tertiary","aria-label":e.title},scopedSlots:e._u([{key:"icon",fn:function(){return[e.isRTL?t("ArrowLeft",{attrs:{size:20}}):t("ArrowRight",{attrs:{size:20}})]},proxy:!0}])})},lt=[],pt=x(ot,rt,lt,!1,null,"089eb524");const ct=pt.exports,$=ie("nextcloud").persist().build(),ht={name:"NcAppContent",components:{NcAppDetailsToggle:ct,Pane:at,Splitpanes:Qe},props:{allowSwipeNavigation:{type:Boolean,default:!0},listSize:{type:Number,default:20},listMinWidth:{type:Number,default:15},listMaxWidth:{type:Number,default:40},paneConfigKey:{type:String,default:""},showDetails:{type:Boolean,default:!0},pageHeading:{type:String,default:null},layout:{type:String,default:"vertical-split",validator(e){return["no-split","vertical-split","horizontal-split"].includes(e)}}},emits:["update:showDetails","resize:list"],setup(){return{isMobile:b(),isRTL:O()}},data(){return{contentHeight:0,hasList:!1,hasContent:!1,swiping:{},listPaneSize:this.restorePaneConfig()}},computed:{paneConfigID(){if(this.paneConfigKey!=="")return"pane-list-size-".concat(this.paneConfigKey);try{return"pane-list-size-".concat(Y)}catch(e){return console.info("[INFO] AppContent:","falling back to global nextcloud pane config"),"pane-list-size-nextcloud"}},detailsPaneSize(){return this.listPaneSize?100-this.listPaneSize:this.paneDefaults.details.size},paneDefaults(){return{list:{size:this.listSize,min:this.listMinWidth,max:this.listMaxWidth},details:{size:100-this.listSize,min:100-this.listMaxWidth,max:100-this.listMinWidth}}}},updated(){this.checkSlots()},mounted(){this.allowSwipeNavigation&&(this.swiping=se(this.$el,{onSwipeEnd:this.handleSwipe})),this.checkSlots(),this.restorePaneConfig()},methods:{handleSwipe(e,t){Math.abs(this.swiping.lengthX)>70&&(this.swiping.coordsStart.x<300/2&&t==="right"?v("toggle-navigation",{open:!0}):this.swiping.coordsStart.x<300*1.5&&t==="left"&&v("toggle-navigation",{open:!1}))},handlePaneResize(e){const t=parseInt(e[0].size,10);$.setItem(this.paneConfigID,JSON.stringify(t)),this.listPaneSize=t,this.$emit("resize:list",{size:t}),console.debug("AppContent pane config",t)},checkSlots(){this.hasList=!!this.$scopedSlots.list,this.hasContent=!!this.$scopedSlots.default},restorePaneConfig(){const e=parseInt($.getItem(this.paneConfigID),10);if(!isNaN(e)&&e!==this.listPaneSize)return console.debug("AppContent pane config",e),this.listPaneSize=e,e},hideDetails(){this.$emit("update:showDetails",!1)}}};var dt=function(){var e=this,t=e._self._c;return t("main",{staticClass:"app-content no-snapper",class:{"app-content--has-list":e.hasList},attrs:{id:"app-content-vue"}},[e.pageHeading?t("h1",{staticClass:"hidden-visually"},[e._v(" "+e._s(e.pageHeading)+" ")]):e._e(),e.hasList?[e.isMobile||e.layout==="no-split"?t("div",{staticClass:"app-content-wrapper app-content-wrapper--no-split",class:{"app-content-wrapper--show-details":e.showDetails,"app-content-wrapper--show-list":!e.showDetails,"app-content-wrapper--mobile":e.isMobile}},[e.showDetails?t("NcAppDetailsToggle",{nativeOn:{click:function(i){return i.stopPropagation(),i.preventDefault(),e.hideDetails.apply(null,arguments)}}}):e._e(),e.showDetails?e._t("default"):e._t("list")],2):e.layout==="vertical-split"||e.layout==="horizontal-split"?t("div",{staticClass:"app-content-wrapper"},[t("Splitpanes",{staticClass:"default-theme",class:{"splitpanes--horizontal":e.layout==="horizontal-split","splitpanes--vertical":e.layout==="vertical-split"},attrs:{horizontal:e.layout==="horizontal-split",rtl:e.isRTL},on:{resized:e.handlePaneResize}},[t("Pane",{staticClass:"splitpanes__pane-list",attrs:{size:e.listPaneSize||e.paneDefaults.list.size,"min-size":e.paneDefaults.list.min,"max-size":e.paneDefaults.list.max}},[e._t("list")],2),t("Pane",{staticClass:"splitpanes__pane-details",attrs:{size:e.detailsPaneSize,"min-size":e.paneDefaults.details.min,"max-size":e.paneDefaults.details.max}},[e._t("default")],2)],1)],1):e._e()]:e._e(),e.hasList?e._e():e._t("default")],2)},ut=[],mt=x(ht,dt,ut,!1,null,"e905d7c8");const ft=mt.exports;let gt="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict",yt=(e=21)=>{let t="",i=e|0;for(;i--;)t+=gt[Math.random()*64|0];return t};function y(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?y=function(t){return typeof t}:y=function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},y(e)}var q={selector:"vue-portal-target-".concat(yt())},vt=function(e){return q.selector=e},D=typeof window<"u"&&(typeof document>"u"?"undefined":y(document))!==void 0,wt=g.extend({abstract:!0,name:"PortalOutlet",props:["nodes","tag"],data:function(e){return{updatedNodes:e.nodes}},render:function(e){var t=this.updatedNodes&&this.updatedNodes();return t?t.length===1&&!t[0].text?t:e(this.tag||"DIV",t):e()},destroyed:function(){var e=this.$el;e&&e.parentNode.removeChild(e)}}),K=g.extend({name:"VueSimplePortal",props:{disabled:{type:Boolean},prepend:{type:Boolean},selector:{type:String,default:function(){return"#".concat(q.selector)}},tag:{type:String,default:"DIV"}},render:function(e){if(this.disabled){var t=this.$scopedSlots&&this.$scopedSlots.default();return t?t.length<2&&!t[0].text?t:e(this.tag,t):e()}return e()},created:function(){this.getTargetEl()||this.insertTargetEl()},updated:function(){var e=this;this.$nextTick(function(){!e.disabled&&e.slotFn!==e.$scopedSlots.default&&(e.container.updatedNodes=e.$scopedSlots.default),e.slotFn=e.$scopedSlots.default})},beforeDestroy:function(){this.unmount()},watch:{disabled:{immediate:!0,handler:function(e){e?this.unmount():this.$nextTick(this.mount)}}},methods:{getTargetEl:function(){if(D)return document.querySelector(this.selector)},insertTargetEl:function(){if(D){var e=document.querySelector("body"),t=document.createElement(this.tag);t.id=this.selector.substring(1),e.appendChild(t)}},mount:function(){if(D){var e=this.getTargetEl(),t=document.createElement("DIV");this.prepend&&e.firstChild?e.insertBefore(t,e.firstChild):e.appendChild(t),this.container=new wt({el:t,parent:this,propsData:{tag:this.tag,nodes:this.$scopedSlots.default}})}},unmount:function(){this.container&&(this.container.$destroy(),delete this.container)}}});function xt(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};e.component(t.name||"portal",K),t.defaultSelector&&vt(t.defaultSelector)}typeof window<"u"&&window.Vue&&window.Vue===g&&g.use(xt),F(oe);const Ct='\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n',zt='\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n',St={name:"NcContent",components:{NcButton:R,NcIconSvgWrapper:re,Teleport:K},provide(){return{"NcContent:setHasAppNavigation":this.setAppNavigation,"NcContent:selector":"#content-vue"}},props:{appName:{type:String,required:!0}},setup(){return{isMobile:b()}},data(){return{hasAppNavigation:!1,currentFocus:""}},computed:{currentImage(){return this.currentFocus==="navigation"?zt:Ct}},beforeMount(){const e=document.getElementById("skip-actions");e&&(e.innerHTML="",e.classList.add("vue-skip-actions"))},methods:{t:V,openAppNavigation(){v("toggle-navigation",{open:!0}),this.$nextTick(()=>{window.location.hash="app-navigation-vue",document.getElementById("app-navigation-vue").focus()})},setAppNavigation(e){this.hasAppNavigation=e,this.currentFocus===""&&(this.currentFocus="navigation")}}};var Dt=function(){var e=this,t=e._self._c;return t("div",{class:["content","app-".concat(e.appName.toLowerCase())],attrs:{id:"content-vue"}},[t("Teleport",{attrs:{selector:"#skip-actions"}},[t("div",{staticClass:"vue-skip-actions__container"},[t("div",{staticClass:"vue-skip-actions__headline"},[e._v(" "+e._s(e.t("Keyboard navigation help"))+" ")]),t("div",{staticClass:"vue-skip-actions__buttons"},[t("NcButton",{directives:[{name:"show",rawName:"v-show",value:e.hasAppNavigation,expression:"hasAppNavigation"}],attrs:{type:"tertiary",href:"#app-navigation-vue"},on:{click:function(i){return i.preventDefault(),e.openAppNavigation.apply(null,arguments)},focusin:function(i){e.currentFocus="navigation"},mouseover:function(i){e.currentFocus="navigation"}}},[e._v(" "+e._s(e.t("Skip to app navigation"))+" ")]),t("NcButton",{attrs:{type:"tertiary",href:"#app-content-vue"},on:{focusin:function(i){e.currentFocus="content"},mouseover:function(i){e.currentFocus="content"}}},[e._v(" "+e._s(e.t("Skip to main content"))+" ")])],1),t("NcIconSvgWrapper",{directives:[{name:"show",rawName:"v-show",value:!e.isMobile,expression:"!isMobile"}],staticClass:"vue-skip-actions__image",attrs:{svg:e.currentImage,size:"auto"}})],1),e._v("  ")]),e._t("default")],2)},_t=[],bt=x(St,Dt,_t,!1,null,"d8f0539f");const Pt=bt.exports,u={NONE:"none",ENCRYPTING:"encrypting",UPLOADING:"uploading",UPLOADED:"uploaded",UPLOADING_METADATA:"uploading_metadata",DONE:"done"},Et={name:"FileDrop",components:{NcContent:Pt,NcAppContent:ft,NcLoadingIcon:le,IconCheck:ke,IconAlertCircle:Te},data(){return{shareToken:f("end_to_end_encryption","token"),folderId:f("end_to_end_encryption","fileId"),publicKeys:f("end_to_end_encryption","publicKeys"),fileName:f("end_to_end_encryption","fileName"),encryptionVersion:Number.parseInt(f("end_to_end_encryption","encryptionVersion")),uploadedFiles:[],loading:!1,UploadStep:u,highlightDropZone:!1}},methods:{handleDragOver(e){var t;(t=e.dataTransfer)!=null&&t.types.includes("Files")&&(e.dataTransfer.dropEffect="copy",this.highlightDropZone=!0)},handleDrop(e){var t;(t=e.dataTransfer)!=null&&t.types.includes("Files")&&(this.filesChange(e.dataTransfer.files),this.highlightDropZone=!1)},async filesChange(e){if(!(e!=null&&e.length)||this.loading)return;this.loading=!0;let t=[];try{t=await Promise.all(Array.from(e).map(i=>this.uploadFile(i))),c.debug("[FileDrop] Files uploaded",{progresses:t})}catch(i){c.error("[FileDrop] Error while uploading files",{exception:i}),M(this.t("end_to_end_encryption","Error while uploading files")),t.forEach(n=>{n.error=!0})}try{t.filter(({error:n})=>!n).forEach(n=>{n.step=u.UPLOADING_METADATA});const i=t.filter(({error:n})=>!n).reduce((n,{fileDrop:s})=>z(z({},n),s),{});c.debug("[FileDrop] FileDrop entries computed",{fileDrops:i}),await ve(this.encryptionVersion,this.folderId,i,this.shareToken)}catch(i){c.error("[FileDrop] Error while uploading metadata",{exception:i}),M(this.t("end_to_end_encryption","Error while uploading metadata")),t.forEach(n=>{n.error=!0})}t.filter(({error:i})=>!i).forEach(i=>{i.step=u.DONE}),this.loading=!1},async uploadFile(e){const t={file:e,step:u.NONE,error:!1,fileDrop:{}};this.uploadedFiles.push(t);try{t.step=u.ENCRYPTING;const{encryptedFileContent:i,encryptionInfo:n}=await Se(e),s=ge().replaceAll("-","");t.fileDrop[s]=await ye(n,this.publicKeys),c.debug("[FileDrop] Filedrop entry computed: ".concat(e.name),{fileDropEntry:t.fileDrop[s]}),t.step=u.UPLOADING,await be("/public.php/dav/files/".concat(this.shareToken),s,i,this.shareToken),t.step=u.UPLOADED,c.debug("[FileDrop] File uploaded: ".concat(e.name),{encryptedFileContent:i,encryptionInfo:n,encryptedFileName:s,shareToken:this.shareToken})}catch(i){t.error=!0,c.error("[FileDrop] Fail to upload the file (".concat(t.step,")"),{exception:i})}return t},t:pe}};var Nt=function(){var e=this,t=e._self._c;return t("NcContent",{attrs:{"app-name":"end_to_end_encryption"}},[t("NcAppContent",{nativeOn:{drop:function(i){return i.preventDefault(),e.handleDrop.apply(null,arguments)},dragover:function(i){return i.preventDefault(),e.handleDragOver.apply(null,arguments)},dragleave:function(i){e.highlightDropZone=!1}}},[t("div",{staticClass:"uploader-form",class:{highlight:e.highlightDropZone}},[t("div",{staticClass:"uploader-form__label"},[t("div",{staticClass:"uploader-form__icon icon-folder"}),e._v(" "+e._s(e.t("end_to_end_encryption","Upload encrypted files to {fileName}",{fileName:e.fileName}))+" "),t("label",{staticClass:"uploader-form__input button primary",class:{loading:e.loading}},[e._v(" "+e._s(e.t("end_to_end_encryption","Select or drop files"))+" "),t("input",{attrs:{type:"file",multiple:"",disabled:e.loading},on:{change:function(i){var n;return e.filesChange((n=i.target)==null?void 0:n.files)}}})])]),t("ul",{staticClass:"uploader-form__file-list"},e._l(e.uploadedFiles,function({file:i,step:n,error:s},a){return t("li",{key:a,staticClass:"uploader-form__file-list__item"},[s?t("IconAlertCircle",{attrs:{size:20}}):n===e.UploadStep.DONE?t("IconCheck",{attrs:{size:20}}):t("NcLoadingIcon"),t("b",[e._v(e._s(i.name))])],1)}),0)])])],1)},Mt=[],kt=_(Et,Nt,Mt,!1,null,"8a5d9b72");const At=kt.exports,It=g.extend(At);new It({}).$mount("#content"); diff --git a/js/end_to_end_encryption-filedrop.mjs.license b/js/end_to_end_encryption-filedrop.mjs.license index 17c251d7..64eb4496 100644 --- a/js/end_to_end_encryption-filedrop.mjs.license +++ b/js/end_to_end_encryption-filedrop.mjs.license @@ -26,7 +26,7 @@ This file is generated from multiple sources. Included packages: - version: 2.4.1 - license: MIT - uuid - - version: 10.0.0 + - version: 11.0.5 - license: MIT - vue-material-design-icons - version: 5.3.1 diff --git a/js/end_to_end_encryption-filedrop.mjs.map b/js/end_to_end_encryption-filedrop.mjs.map index ff737ff4..92948a65 100644 --- a/js/end_to_end_encryption-filedrop.mjs.map +++ b/js/end_to_end_encryption-filedrop.mjs.map @@ -1 +1 @@ -{"version":3,"file":"end_to_end_encryption-filedrop.mjs","sources":["../node_modules/uuid/dist/esm-browser/stringify.js","../node_modules/uuid/dist/esm-browser/rng.js","../node_modules/uuid/dist/esm-browser/native.js","../node_modules/uuid/dist/esm-browser/v4.js","../src/services/filedrop.js","../src/services/crypto.js","../src/services/uploadFile.js","../node_modules/vue-material-design-icons/Check.vue","../node_modules/vue-material-design-icons/AlertCircle.vue","../node_modules/@nextcloud/vue/dist/chunks/ArrowLeft-DuT2LZOm.mjs","../node_modules/splitpanes/dist/splitpanes.es.js","../node_modules/@nextcloud/vue/dist/chunks/NcAppContent-BuY1ebnE.mjs","../node_modules/nanoid/non-secure/index.js","../node_modules/@linusborg/vue-simple-portal/dist/index.esm.js","../node_modules/@nextcloud/vue/dist/chunks/NcContent-D7q7hI8k.mjs","../src/views/FileDrop.vue","../src/filedrop.js"],"sourcesContent":["import validate from './validate.js';\n\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\nvar byteToHex = [];\nfor (var i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\nexport function unsafeStringify(arr, offset = 0) {\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n //\n // Note to future-self: No, you can't remove the `toLowerCase()` call.\n // REF: https://github.com/uuidjs/uuid/pull/677#issuecomment-1757351351\n return (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase();\n}\nfunction stringify(arr, offset = 0) {\n var uuid = unsafeStringify(arr, offset);\n // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n return uuid;\n}\nexport default stringify;","// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\n\nvar getRandomValues;\nvar rnds8 = new Uint8Array(16);\nexport default function rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto);\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n return getRandomValues(rnds8);\n}","var randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nexport default {\n randomUUID\n};","import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\nfunction v4(options, buf, offset) {\n if (native.randomUUID && !buf && !options) {\n return native.randomUUID();\n }\n options = options || {};\n var rnds = options.random || (options.rng || rng)();\n\n // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80;\n\n // Copy bytes to buffer, if provided\n if (buf) {\n offset = offset || 0;\n for (var i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n return buf;\n }\n return unsafeStringify(rnds);\n}\nexport default v4;","/**\n * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nimport axios from '@nextcloud/axios'\nimport { generateOcsUrl } from '@nextcloud/router'\nimport { encryptStringAsymmetric, encryptWithAES, getRandomEncryptionParams } from './crypto.js'\nimport logger from './logger.js'\n\n/**\n * @typedef {object} FileMetadata\n * @property {string} filename - Original file name (ex: \"/foo/test.txt\")\n * @property {string} mimetype - Mimetype, if unknown use \"application/octet-stream\" (ex: \"plain/text\")\n * @property {string} key - Encryption key of the file (ex: \"jtboLmgGR1OQf2uneqCVHpklQLlIwWL5TXAQ0keK\")\n * @property {string} nonce - Initialisation vector\n * @property {string} authenticationTag - Authentication tag of the file (ex: \"LYRaJghbZUzBiNWb51ypWw==\")\n */\n\n/**\n * @typedef {object} UserEncryptionInformation\n * @property {string } userId\n * @property {string } encryptedFiledropKey\n */\n\n/**\n * @typedef {object} FileDropPayload\n * @property {string } ciphertext\n * @property {string } nonce\n * @property {string } authenticationTag\n * @property {UserEncryptionInformation[]} users\n */\n\n/**\n * @param {ArrayBuffer} buffer\n * @return {string}\n */\nexport function bufferToBase64(buffer) {\n\treturn btoa(String.fromCharCode(...new Uint8Array(buffer)))\n}\n\n/**\n * @param {import('./crypto.js').FileEncryptionInfo} encryptionInfo\n * @param {{[userId: string]: string}} publicKeys\n * @return {Promise}\n */\nexport async function getFileDropEntry(encryptionInfo, publicKeys) {\n\tconst compressedEncryptionInfo = await compress(JSON.stringify(encryptionInfo))\n\tlogger.debug(`[FileDrop] Encryption info compressed (${encryptionInfo.filename})`, { encryptionInfo, compressedEncryptionInfo })\n\n\tconst encryptionParams = await getRandomEncryptionParams()\n\tconst { content, tag } = await encryptWithAES(\n\t\tencryptionParams,\n\t\tnew Uint8Array(compressedEncryptionInfo),\n\t)\n\tlogger.debug(`[FileDrop] Encryption info encrypted (${encryptionInfo.filename})`, { content, tag, encryptionParams })\n\tlogger.debug(`[FileDrop] Encryption info base64ed (${encryptionInfo.filename})`, { ciphertext: bufferToBase64(content) })\n\n\treturn {\n\t\tciphertext: bufferToBase64(content),\n\t\tnonce: bufferToBase64(encryptionParams.initializationVector),\n\t\tauthenticationTag: bufferToBase64(tag),\n\t\tusers: await encryptRandomKeyForUsers(publicKeys, encryptionParams),\n\t}\n}\n\n/**\n * @param {1|2} encryptionVersion - The encrypted version for the folder\n * @param {number} folderId\n * @param {{[uid: string]: FileDropPayload}} fileDrops\n * @param {string} shareToken\n */\nexport async function uploadFileDrop(encryptionVersion, folderId, fileDrops, shareToken) {\n\tconst ocsUrl = generateOcsUrl(\n\t\t'apps/end_to_end_encryption/api/v{encryptionVersion}/meta-data/{folderId}',\n\t\t{\n\t\t\tencryptionVersion,\n\t\t\tfolderId,\n\t\t},\n\t)\n\n\tconst { data: { ocs: { meta } } } = await axios.put(\n\t\t`${ocsUrl}/filedrop`,\n\t\t{\n\t\t\tfiledrop: JSON.stringify(fileDrops),\n\t\t},\n\t\t{\n\t\t\theaders: {\n\t\t\t\t'x-e2ee-supported': true,\n\t\t\t},\n\t\t\tparams: {\n\t\t\t\tshareToken,\n\t\t\t},\n\t\t},\n\t)\n\n\tif (meta.statuscode !== 200) {\n\t\tthrow new Error(`Failed to upload metadata: ${meta.message}`)\n\t}\n}\n\n/**\n * @param {string} str\n * @return {Promise}\n */\nasync function compress(str) {\n\tconst stream = new Blob([str]).stream()\n\tconst compressedStream = stream.pipeThrough(\n\t\t// eslint-disable-next-line no-undef\n\t\tnew CompressionStream('gzip'),\n\t)\n\n\tconst chunks = []\n\tconst reader = compressedStream.getReader()\n\n\twhile (true) {\n\t\tconst { value } = await reader.read()\n\t\tif (value === undefined) {\n\t\t\tbreak\n\t\t}\n\t\tchunks.push(value)\n\t}\n\n\treturn new Uint8Array(await new Blob(chunks).arrayBuffer())\n}\n\n/**\n * @param {{[userId: string]: string}} usersPublicKeys\n * @param {import('./crypto.js').EncryptionParams} encryptionParams\n * @return {Promise}\n */\nasync function encryptRandomKeyForUsers(usersPublicKeys, encryptionParams) {\n\treturn Promise.all(Object.entries(usersPublicKeys).map(async ([userId, publicKey]) => {\n\t\tconst rawKey = await window.crypto.subtle.exportKey('raw', encryptionParams.key)\n\n\t\tconst encryptedFileDropKey = await encryptStringAsymmetric(\n\t\t\tpublicKey,\n\t\t\trawKey,\n\t\t)\n\n\t\treturn { userId, encryptedFiledropKey: bufferToBase64(encryptedFileDropKey) }\n\t}))\n}\n","/**\n * SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport * as x509 from '@peculiar/x509'\nimport { bufferToBase64 } from './filedrop.js'\nimport logger from './logger.js'\n\n/**\n * Gets tag from encrypted data\n *\n * @param {ArrayBuffer} encrypted Encrypted data\n * @return {ArrayBuffer}\n */\nfunction getTag(encrypted) {\n\treturn encrypted.slice(encrypted.byteLength - 16)\n}\n\n/**\n * @return {Promise}\n */\nexport async function getRandomAESKey() {\n\treturn await window.crypto.subtle.generateKey(\n\t\t{\n\t\t\tname: 'AES-GCM',\n\t\t\tlength: 128,\n\t\t},\n\t\ttrue,\n\t\t['encrypt', 'decrypt'],\n\t)\n}\n\n/**\n * @typedef {object} EncryptionParams\n * @property {CryptoKey} key - Encryption key of the file (ex: \"jtboLmgGR1OQf2uneqCVHpklQLlIwWL5TXAQ0keK\")\n * @property {Uint8Array} initializationVector - Mimetype, if unknown use \"application/octet-stream\" (ex: \"plain/text\")\n */\n\n/**\n * @return {Promise}\n */\nexport async function getRandomEncryptionParams() {\n\treturn {\n\t\tkey: await getRandomAESKey(),\n\t\tinitializationVector: window.crypto.getRandomValues(new Uint8Array(16)),\n\t}\n}\n\n/**\n * Encrypt file content\n *\n * @param {EncryptionParams} encryptionData\n * @param {Uint8Array} content\n * @return {Promise<{content: ArrayBuffer, tag: ArrayBuffer}>}\n */\nexport async function encryptWithAES({ key, initializationVector }, content) {\n\tconst encrypted = await window.crypto.subtle.encrypt(\n\t\t{ name: 'AES-GCM', iv: initializationVector },\n\t\tkey,\n\t\tcontent,\n\t)\n\n\treturn {\n\t\tcontent: encrypted,\n\t\ttag: getTag(encrypted),\n\t}\n}\n\n/**\n * @typedef {object} FileEncryptionInfo\n * @property {string} filename - Original file name (ex: \"/foo/test.txt\")\n * @property {string} mimetype - Mimetype, if unknown use \"application/octet-stream\" (ex: \"plain/text\")\n * @property {string} key - Encryption key of the file (ex: \"jtboLmgGR1OQf2uneqCVHpklQLlIwWL5TXAQ0keK\")\n * @property {string} nonce - Initialisation vector\n * @property {string} authenticationTag - Authentication tag of the file (ex: \"LYRaJghbZUzBiNWb51ypWw==\")\n */\n\n/**\n * Encrypt file content\n *\n * @param {File} file\n * @return {Promise<{encryptedFileContent: ArrayBuffer, encryptionInfo: FileEncryptionInfo}>}\n */\nexport async function encryptFile(file) {\n\tconst blob = await file.arrayBuffer()\n\tconst encryptionParams = await getRandomEncryptionParams()\n\tconst { content, tag } = await encryptWithAES(encryptionParams, new Uint8Array(blob))\n\tlogger.debug(`[FileDrop] File encrypted: ${file.name}`, { file, content, tag, encryptionParams, rawKey: bufferToBase64(await window.crypto.subtle.exportKey('raw', encryptionParams.key)) })\n\n\treturn {\n\t\tencryptedFileContent: content,\n\t\tencryptionInfo: {\n\t\t\tfilename: file.name,\n\t\t\tmimetype: file.type || 'application/octet-stream',\n\t\t\tnonce: bufferToBase64(encryptionParams.initializationVector),\n\t\t\tkey: bufferToBase64(await window.crypto.subtle.exportKey('raw', encryptionParams.key)),\n\t\t\tauthenticationTag: bufferToBase64(tag),\n\t\t},\n\t}\n}\n\n/**\n *\n * @param {string} pem\n * @return {Promise}\n */\nasync function importPublicKey(pem) {\n\t// fetch the part of the PEM string between header and footer\n\tconst cert = new x509.X509Certificate(pem)\n\n\treturn await window.crypto.subtle.importKey(\n\t\t'spki',\n\t\tcert.publicKey.rawData,\n\t\t{\n\t\t\tname: 'RSA-OAEP',\n\t\t\thash: 'SHA-256',\n\t\t},\n\t\ttrue,\n\t\t['encrypt'],\n\t)\n}\n\n/**\n * @param {string} publicKey\n * @param {BufferSource} buffer\n * @return {Promise}\n */\nexport async function encryptStringAsymmetric(publicKey, buffer) {\n\treturn await window.crypto.subtle.encrypt(\n\t\t{ name: 'RSA-OAEP' },\n\t\tawait importPublicKey(publicKey),\n\t\tbuffer,\n\t)\n}\n","/**\n * SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport axios from '@nextcloud/axios'\nimport { getRootUrl } from '@nextcloud/router'\nimport path from 'path'\n\n/**\n * @param {string} davEndpoint\n * @param {string} fileName\n * @param {string} content\n * @param {string} shareToken\n */\nexport async function uploadFile(davEndpoint, fileName, content, shareToken) {\n\tawait axios.put(\n\t\tpath.join(getRootUrl(), davEndpoint, fileName),\n\t\tcontent,\n\t\t{\n\t\t\theaders: {\n\t\t\t\tAuthorization: `Basic ${btoa(`${shareToken}:`)}`,\n\t\t\t},\n\t\t},\n\t)\n}\n","\n\n","\n\n","import { n as normalizeComponent } from \"./_plugin-vue2_normalizer-DU4iP6Vu.mjs\";\nconst _sfc_main = {\n name: \"ArrowLeftIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nvar _sfc_render = function render() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"span\", _vm._b({ staticClass: \"material-design-icon arrow-left-icon\", attrs: { \"aria-hidden\": _vm.title ? null : \"true\", \"aria-label\": _vm.title, \"role\": \"img\" }, on: { \"click\": function($event) {\n return _vm.$emit(\"click\", $event);\n } } }, \"span\", _vm.$attrs, false), [_c(\"svg\", { staticClass: \"material-design-icon__svg\", attrs: { \"fill\": _vm.fillColor, \"width\": _vm.size, \"height\": _vm.size, \"viewBox\": \"0 0 24 24\" } }, [_c(\"path\", { attrs: { \"d\": \"M20,11V13H8L13.5,18.5L12.08,19.92L4.16,12L12.08,4.08L13.5,5.5L8,11H20Z\" } }, [_vm.title ? _c(\"title\", [_vm._v(_vm._s(_vm.title))]) : _vm._e()])])]);\n};\nvar _sfc_staticRenderFns = [];\nvar __component__ = /* @__PURE__ */ normalizeComponent(\n _sfc_main,\n _sfc_render,\n _sfc_staticRenderFns,\n false,\n null,\n null\n);\nconst ArrowLeft = __component__.exports;\nexport {\n ArrowLeft as A\n};\n","var __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\nvar __objRest = (source, exclude) => {\n var target = {};\n for (var prop in source)\n if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)\n target[prop] = source[prop];\n if (source != null && __getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(source)) {\n if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))\n target[prop] = source[prop];\n }\n return target;\n};\nvar splitpanes_vue_vue_type_style_index_0_lang = \"\";\nfunction normalizeComponent(scriptExports, render2, staticRenderFns2, functionalTemplate, injectStyles, scopeId, moduleIdentifier, shadowMode) {\n var options = typeof scriptExports === \"function\" ? scriptExports.options : scriptExports;\n if (render2) {\n options.render = render2;\n options.staticRenderFns = staticRenderFns2;\n options._compiled = true;\n }\n if (functionalTemplate) {\n options.functional = true;\n }\n if (scopeId) {\n options._scopeId = \"data-v-\" + scopeId;\n }\n var hook;\n if (moduleIdentifier) {\n hook = function(context) {\n context = context || this.$vnode && this.$vnode.ssrContext || this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext;\n if (!context && typeof __VUE_SSR_CONTEXT__ !== \"undefined\") {\n context = __VUE_SSR_CONTEXT__;\n }\n if (injectStyles) {\n injectStyles.call(this, context);\n }\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier);\n }\n };\n options._ssrRegister = hook;\n } else if (injectStyles) {\n hook = shadowMode ? function() {\n injectStyles.call(this, (options.functional ? this.parent : this).$root.$options.shadowRoot);\n } : injectStyles;\n }\n if (hook) {\n if (options.functional) {\n options._injectStyles = hook;\n var originalRender = options.render;\n options.render = function renderWithStyleInjection(h, context) {\n hook.call(context);\n return originalRender(h, context);\n };\n } else {\n var existing = options.beforeCreate;\n options.beforeCreate = existing ? [].concat(existing, hook) : [hook];\n }\n }\n return {\n exports: scriptExports,\n options\n };\n}\nconst __vue2_script$1 = {\n name: \"splitpanes\",\n props: {\n horizontal: { type: Boolean },\n pushOtherPanes: { type: Boolean, default: true },\n dblClickSplitter: { type: Boolean, default: true },\n rtl: { type: Boolean, default: false },\n firstSplitter: { type: Boolean }\n },\n provide() {\n return {\n requestUpdate: this.requestUpdate,\n onPaneAdd: this.onPaneAdd,\n onPaneRemove: this.onPaneRemove,\n onPaneClick: this.onPaneClick\n };\n },\n data: () => ({\n container: null,\n ready: false,\n panes: [],\n touch: {\n mouseDown: false,\n dragging: false,\n activeSplitter: null\n },\n splitterTaps: {\n splitter: null,\n timeoutId: null\n }\n }),\n computed: {\n panesCount() {\n return this.panes.length;\n },\n indexedPanes() {\n return this.panes.reduce((obj, pane2) => (obj[pane2.id] = pane2) && obj, {});\n }\n },\n methods: {\n updatePaneComponents() {\n this.panes.forEach((pane2) => {\n pane2.update && pane2.update({\n [this.horizontal ? \"height\" : \"width\"]: `${this.indexedPanes[pane2.id].size}%`\n });\n });\n },\n bindEvents() {\n document.addEventListener(\"mousemove\", this.onMouseMove, { passive: false });\n document.addEventListener(\"mouseup\", this.onMouseUp);\n if (\"ontouchstart\" in window) {\n document.addEventListener(\"touchmove\", this.onMouseMove, { passive: false });\n document.addEventListener(\"touchend\", this.onMouseUp);\n }\n },\n unbindEvents() {\n document.removeEventListener(\"mousemove\", this.onMouseMove, { passive: false });\n document.removeEventListener(\"mouseup\", this.onMouseUp);\n if (\"ontouchstart\" in window) {\n document.removeEventListener(\"touchmove\", this.onMouseMove, { passive: false });\n document.removeEventListener(\"touchend\", this.onMouseUp);\n }\n },\n onMouseDown(event, splitterIndex) {\n this.bindEvents();\n this.touch.mouseDown = true;\n this.touch.activeSplitter = splitterIndex;\n },\n onMouseMove(event) {\n if (this.touch.mouseDown) {\n event.preventDefault();\n this.touch.dragging = true;\n this.calculatePanesSize(this.getCurrentMouseDrag(event));\n this.$emit(\"resize\", this.panes.map((pane2) => ({ min: pane2.min, max: pane2.max, size: pane2.size })));\n }\n },\n onMouseUp() {\n if (this.touch.dragging) {\n this.$emit(\"resized\", this.panes.map((pane2) => ({ min: pane2.min, max: pane2.max, size: pane2.size })));\n }\n this.touch.mouseDown = false;\n setTimeout(() => {\n this.touch.dragging = false;\n this.unbindEvents();\n }, 100);\n },\n onSplitterClick(event, splitterIndex) {\n if (\"ontouchstart\" in window) {\n event.preventDefault();\n if (this.dblClickSplitter) {\n if (this.splitterTaps.splitter === splitterIndex) {\n clearTimeout(this.splitterTaps.timeoutId);\n this.splitterTaps.timeoutId = null;\n this.onSplitterDblClick(event, splitterIndex);\n this.splitterTaps.splitter = null;\n } else {\n this.splitterTaps.splitter = splitterIndex;\n this.splitterTaps.timeoutId = setTimeout(() => {\n this.splitterTaps.splitter = null;\n }, 500);\n }\n }\n }\n if (!this.touch.dragging)\n this.$emit(\"splitter-click\", this.panes[splitterIndex]);\n },\n onSplitterDblClick(event, splitterIndex) {\n let totalMinSizes = 0;\n this.panes = this.panes.map((pane2, i) => {\n pane2.size = i === splitterIndex ? pane2.max : pane2.min;\n if (i !== splitterIndex)\n totalMinSizes += pane2.min;\n return pane2;\n });\n this.panes[splitterIndex].size -= totalMinSizes;\n this.$emit(\"pane-maximize\", this.panes[splitterIndex]);\n },\n onPaneClick(event, paneId) {\n this.$emit(\"pane-click\", this.indexedPanes[paneId]);\n },\n getCurrentMouseDrag(event) {\n const rect = this.container.getBoundingClientRect();\n const { clientX, clientY } = \"ontouchstart\" in window && event.touches ? event.touches[0] : event;\n return {\n x: clientX - rect.left,\n y: clientY - rect.top\n };\n },\n getCurrentDragPercentage(drag) {\n drag = drag[this.horizontal ? \"y\" : \"x\"];\n const containerSize = this.container[this.horizontal ? \"clientHeight\" : \"clientWidth\"];\n if (this.rtl && !this.horizontal)\n drag = containerSize - drag;\n return drag * 100 / containerSize;\n },\n calculatePanesSize(drag) {\n const splitterIndex = this.touch.activeSplitter;\n let sums = {\n prevPanesSize: this.sumPrevPanesSize(splitterIndex),\n nextPanesSize: this.sumNextPanesSize(splitterIndex),\n prevReachedMinPanes: 0,\n nextReachedMinPanes: 0\n };\n const minDrag = 0 + (this.pushOtherPanes ? 0 : sums.prevPanesSize);\n const maxDrag = 100 - (this.pushOtherPanes ? 0 : sums.nextPanesSize);\n const dragPercentage = Math.max(Math.min(this.getCurrentDragPercentage(drag), maxDrag), minDrag);\n let panesToResize = [splitterIndex, splitterIndex + 1];\n let paneBefore = this.panes[panesToResize[0]] || null;\n let paneAfter = this.panes[panesToResize[1]] || null;\n const paneBeforeMaxReached = paneBefore.max < 100 && dragPercentage >= paneBefore.max + sums.prevPanesSize;\n const paneAfterMaxReached = paneAfter.max < 100 && dragPercentage <= 100 - (paneAfter.max + this.sumNextPanesSize(splitterIndex + 1));\n if (paneBeforeMaxReached || paneAfterMaxReached) {\n if (paneBeforeMaxReached) {\n paneBefore.size = paneBefore.max;\n paneAfter.size = Math.max(100 - paneBefore.max - sums.prevPanesSize - sums.nextPanesSize, 0);\n } else {\n paneBefore.size = Math.max(100 - paneAfter.max - sums.prevPanesSize - this.sumNextPanesSize(splitterIndex + 1), 0);\n paneAfter.size = paneAfter.max;\n }\n return;\n }\n if (this.pushOtherPanes) {\n const vars = this.doPushOtherPanes(sums, dragPercentage);\n if (!vars)\n return;\n ({ sums, panesToResize } = vars);\n paneBefore = this.panes[panesToResize[0]] || null;\n paneAfter = this.panes[panesToResize[1]] || null;\n }\n if (paneBefore !== null) {\n paneBefore.size = Math.min(Math.max(dragPercentage - sums.prevPanesSize - sums.prevReachedMinPanes, paneBefore.min), paneBefore.max);\n }\n if (paneAfter !== null) {\n paneAfter.size = Math.min(Math.max(100 - dragPercentage - sums.nextPanesSize - sums.nextReachedMinPanes, paneAfter.min), paneAfter.max);\n }\n },\n doPushOtherPanes(sums, dragPercentage) {\n const splitterIndex = this.touch.activeSplitter;\n const panesToResize = [splitterIndex, splitterIndex + 1];\n if (dragPercentage < sums.prevPanesSize + this.panes[panesToResize[0]].min) {\n panesToResize[0] = this.findPrevExpandedPane(splitterIndex).index;\n sums.prevReachedMinPanes = 0;\n if (panesToResize[0] < splitterIndex) {\n this.panes.forEach((pane2, i) => {\n if (i > panesToResize[0] && i <= splitterIndex) {\n pane2.size = pane2.min;\n sums.prevReachedMinPanes += pane2.min;\n }\n });\n }\n sums.prevPanesSize = this.sumPrevPanesSize(panesToResize[0]);\n if (panesToResize[0] === void 0) {\n sums.prevReachedMinPanes = 0;\n this.panes[0].size = this.panes[0].min;\n this.panes.forEach((pane2, i) => {\n if (i > 0 && i <= splitterIndex) {\n pane2.size = pane2.min;\n sums.prevReachedMinPanes += pane2.min;\n }\n });\n this.panes[panesToResize[1]].size = 100 - sums.prevReachedMinPanes - this.panes[0].min - sums.prevPanesSize - sums.nextPanesSize;\n return null;\n }\n }\n if (dragPercentage > 100 - sums.nextPanesSize - this.panes[panesToResize[1]].min) {\n panesToResize[1] = this.findNextExpandedPane(splitterIndex).index;\n sums.nextReachedMinPanes = 0;\n if (panesToResize[1] > splitterIndex + 1) {\n this.panes.forEach((pane2, i) => {\n if (i > splitterIndex && i < panesToResize[1]) {\n pane2.size = pane2.min;\n sums.nextReachedMinPanes += pane2.min;\n }\n });\n }\n sums.nextPanesSize = this.sumNextPanesSize(panesToResize[1] - 1);\n if (panesToResize[1] === void 0) {\n sums.nextReachedMinPanes = 0;\n this.panes[this.panesCount - 1].size = this.panes[this.panesCount - 1].min;\n this.panes.forEach((pane2, i) => {\n if (i < this.panesCount - 1 && i >= splitterIndex + 1) {\n pane2.size = pane2.min;\n sums.nextReachedMinPanes += pane2.min;\n }\n });\n this.panes[panesToResize[0]].size = 100 - sums.prevPanesSize - sums.nextReachedMinPanes - this.panes[this.panesCount - 1].min - sums.nextPanesSize;\n return null;\n }\n }\n return { sums, panesToResize };\n },\n sumPrevPanesSize(splitterIndex) {\n return this.panes.reduce((total, pane2, i) => total + (i < splitterIndex ? pane2.size : 0), 0);\n },\n sumNextPanesSize(splitterIndex) {\n return this.panes.reduce((total, pane2, i) => total + (i > splitterIndex + 1 ? pane2.size : 0), 0);\n },\n findPrevExpandedPane(splitterIndex) {\n const pane2 = [...this.panes].reverse().find((p) => p.index < splitterIndex && p.size > p.min);\n return pane2 || {};\n },\n findNextExpandedPane(splitterIndex) {\n const pane2 = this.panes.find((p) => p.index > splitterIndex + 1 && p.size > p.min);\n return pane2 || {};\n },\n checkSplitpanesNodes() {\n const children = Array.from(this.container.children);\n children.forEach((child) => {\n const isPane = child.classList.contains(\"splitpanes__pane\");\n const isSplitter = child.classList.contains(\"splitpanes__splitter\");\n if (!isPane && !isSplitter) {\n child.parentNode.removeChild(child);\n console.warn(\"Splitpanes: Only elements are allowed at the root of . One of your DOM nodes was removed.\");\n return;\n }\n });\n },\n addSplitter(paneIndex, nextPaneNode, isVeryFirst = false) {\n const splitterIndex = paneIndex - 1;\n const elm = document.createElement(\"div\");\n elm.classList.add(\"splitpanes__splitter\");\n if (!isVeryFirst) {\n elm.onmousedown = (event) => this.onMouseDown(event, splitterIndex);\n if (typeof window !== \"undefined\" && \"ontouchstart\" in window) {\n elm.ontouchstart = (event) => this.onMouseDown(event, splitterIndex);\n }\n elm.onclick = (event) => this.onSplitterClick(event, splitterIndex + 1);\n }\n if (this.dblClickSplitter) {\n elm.ondblclick = (event) => this.onSplitterDblClick(event, splitterIndex + 1);\n }\n nextPaneNode.parentNode.insertBefore(elm, nextPaneNode);\n },\n removeSplitter(node) {\n node.onmousedown = void 0;\n node.onclick = void 0;\n node.ondblclick = void 0;\n node.parentNode.removeChild(node);\n },\n redoSplitters() {\n const children = Array.from(this.container.children);\n children.forEach((el) => {\n if (el.className.includes(\"splitpanes__splitter\"))\n this.removeSplitter(el);\n });\n let paneIndex = 0;\n children.forEach((el) => {\n if (el.className.includes(\"splitpanes__pane\")) {\n if (!paneIndex && this.firstSplitter)\n this.addSplitter(paneIndex, el, true);\n else if (paneIndex)\n this.addSplitter(paneIndex, el);\n paneIndex++;\n }\n });\n },\n requestUpdate(_a) {\n var _b = _a, { target } = _b, args = __objRest(_b, [\"target\"]);\n const pane2 = this.indexedPanes[target._uid];\n Object.entries(args).forEach(([key, value]) => pane2[key] = value);\n },\n onPaneAdd(pane2) {\n let index = -1;\n Array.from(pane2.$el.parentNode.children).some((el) => {\n if (el.className.includes(\"splitpanes__pane\"))\n index++;\n return el === pane2.$el;\n });\n const min = parseFloat(pane2.minSize);\n const max = parseFloat(pane2.maxSize);\n this.panes.splice(index, 0, {\n id: pane2._uid,\n index,\n min: isNaN(min) ? 0 : min,\n max: isNaN(max) ? 100 : max,\n size: pane2.size === null ? null : parseFloat(pane2.size),\n givenSize: pane2.size,\n update: pane2.update\n });\n this.panes.forEach((p, i) => p.index = i);\n if (this.ready) {\n this.$nextTick(() => {\n this.redoSplitters();\n this.resetPaneSizes({ addedPane: this.panes[index] });\n this.$emit(\"pane-add\", { index, panes: this.panes.map((pane3) => ({ min: pane3.min, max: pane3.max, size: pane3.size })) });\n });\n }\n },\n onPaneRemove(pane2) {\n const index = this.panes.findIndex((p) => p.id === pane2._uid);\n const removed = this.panes.splice(index, 1)[0];\n this.panes.forEach((p, i) => p.index = i);\n this.$nextTick(() => {\n this.redoSplitters();\n this.resetPaneSizes({ removedPane: __spreadProps(__spreadValues({}, removed), { index }) });\n this.$emit(\"pane-remove\", { removed, panes: this.panes.map((pane3) => ({ min: pane3.min, max: pane3.max, size: pane3.size })) });\n });\n },\n resetPaneSizes(changedPanes = {}) {\n if (!changedPanes.addedPane && !changedPanes.removedPane)\n this.initialPanesSizing();\n else if (this.panes.some((pane2) => pane2.givenSize !== null || pane2.min || pane2.max < 100))\n this.equalizeAfterAddOrRemove(changedPanes);\n else\n this.equalize();\n if (this.ready)\n this.$emit(\"resized\", this.panes.map((pane2) => ({ min: pane2.min, max: pane2.max, size: pane2.size })));\n },\n equalize() {\n const equalSpace = 100 / this.panesCount;\n let leftToAllocate = 0;\n let ungrowable = [];\n let unshrinkable = [];\n this.panes.forEach((pane2) => {\n pane2.size = Math.max(Math.min(equalSpace, pane2.max), pane2.min);\n leftToAllocate -= pane2.size;\n if (pane2.size >= pane2.max)\n ungrowable.push(pane2.id);\n if (pane2.size <= pane2.min)\n unshrinkable.push(pane2.id);\n });\n if (leftToAllocate > 0.1)\n this.readjustSizes(leftToAllocate, ungrowable, unshrinkable);\n },\n initialPanesSizing() {\n 100 / this.panesCount;\n let leftToAllocate = 100;\n let ungrowable = [];\n let unshrinkable = [];\n let definedSizes = 0;\n this.panes.forEach((pane2) => {\n leftToAllocate -= pane2.size;\n if (pane2.size !== null)\n definedSizes++;\n if (pane2.size >= pane2.max)\n ungrowable.push(pane2.id);\n if (pane2.size <= pane2.min)\n unshrinkable.push(pane2.id);\n });\n let leftToAllocate2 = 100;\n if (leftToAllocate > 0.1) {\n this.panes.forEach((pane2) => {\n if (pane2.size === null) {\n pane2.size = Math.max(Math.min(leftToAllocate / (this.panesCount - definedSizes), pane2.max), pane2.min);\n }\n leftToAllocate2 -= pane2.size;\n });\n if (leftToAllocate2 > 0.1)\n this.readjustSizes(leftToAllocate, ungrowable, unshrinkable);\n }\n },\n equalizeAfterAddOrRemove({ addedPane, removedPane } = {}) {\n let equalSpace = 100 / this.panesCount;\n let leftToAllocate = 0;\n let ungrowable = [];\n let unshrinkable = [];\n if (addedPane && addedPane.givenSize !== null) {\n equalSpace = (100 - addedPane.givenSize) / (this.panesCount - 1);\n }\n this.panes.forEach((pane2) => {\n leftToAllocate -= pane2.size;\n if (pane2.size >= pane2.max)\n ungrowable.push(pane2.id);\n if (pane2.size <= pane2.min)\n unshrinkable.push(pane2.id);\n });\n if (Math.abs(leftToAllocate) < 0.1)\n return;\n this.panes.forEach((pane2) => {\n if (addedPane && addedPane.givenSize !== null && addedPane.id === pane2.id)\n ;\n else\n pane2.size = Math.max(Math.min(equalSpace, pane2.max), pane2.min);\n leftToAllocate -= pane2.size;\n if (pane2.size >= pane2.max)\n ungrowable.push(pane2.id);\n if (pane2.size <= pane2.min)\n unshrinkable.push(pane2.id);\n });\n if (leftToAllocate > 0.1)\n this.readjustSizes(leftToAllocate, ungrowable, unshrinkable);\n },\n readjustSizes(leftToAllocate, ungrowable, unshrinkable) {\n let equalSpaceToAllocate;\n if (leftToAllocate > 0)\n equalSpaceToAllocate = leftToAllocate / (this.panesCount - ungrowable.length);\n else\n equalSpaceToAllocate = leftToAllocate / (this.panesCount - unshrinkable.length);\n this.panes.forEach((pane2, i) => {\n if (leftToAllocate > 0 && !ungrowable.includes(pane2.id)) {\n const newPaneSize = Math.max(Math.min(pane2.size + equalSpaceToAllocate, pane2.max), pane2.min);\n const allocated = newPaneSize - pane2.size;\n leftToAllocate -= allocated;\n pane2.size = newPaneSize;\n } else if (!unshrinkable.includes(pane2.id)) {\n const newPaneSize = Math.max(Math.min(pane2.size + equalSpaceToAllocate, pane2.max), pane2.min);\n const allocated = newPaneSize - pane2.size;\n leftToAllocate -= allocated;\n pane2.size = newPaneSize;\n }\n pane2.update({\n [this.horizontal ? \"height\" : \"width\"]: `${this.indexedPanes[pane2.id].size}%`\n });\n });\n if (Math.abs(leftToAllocate) > 0.1) {\n this.$nextTick(() => {\n if (this.ready) {\n console.warn(\"Splitpanes: Could not resize panes correctly due to their constraints.\");\n }\n });\n }\n }\n },\n watch: {\n panes: {\n deep: true,\n immediate: false,\n handler() {\n this.updatePaneComponents();\n }\n },\n horizontal() {\n this.updatePaneComponents();\n },\n firstSplitter() {\n this.redoSplitters();\n },\n dblClickSplitter(enable) {\n const splitters = [...this.container.querySelectorAll(\".splitpanes__splitter\")];\n splitters.forEach((splitter, i) => {\n splitter.ondblclick = enable ? (event) => this.onSplitterDblClick(event, i) : void 0;\n });\n }\n },\n beforeDestroy() {\n this.ready = false;\n },\n mounted() {\n this.container = this.$refs.container;\n this.checkSplitpanesNodes();\n this.redoSplitters();\n this.resetPaneSizes();\n this.$emit(\"ready\");\n this.ready = true;\n },\n render(h) {\n return h(\"div\", {\n ref: \"container\",\n class: [\n \"splitpanes\",\n `splitpanes--${this.horizontal ? \"horizontal\" : \"vertical\"}`,\n {\n \"splitpanes--dragging\": this.touch.dragging\n }\n ]\n }, this.$slots.default);\n }\n};\nlet __vue2_render, __vue2_staticRenderFns;\nconst __cssModules$1 = {};\nvar __component__$1 = /* @__PURE__ */ normalizeComponent(__vue2_script$1, __vue2_render, __vue2_staticRenderFns, false, __vue2_injectStyles$1, null, null, null);\nfunction __vue2_injectStyles$1(context) {\n for (let o in __cssModules$1) {\n this[o] = __cssModules$1[o];\n }\n}\nvar splitpanes = /* @__PURE__ */ function() {\n return __component__$1.exports;\n}();\nvar render = function() {\n var _vm = this;\n var _h = _vm.$createElement;\n var _c = _vm._self._c || _h;\n return _c(\"div\", { staticClass: \"splitpanes__pane\", style: _vm.style, on: { \"click\": function($event) {\n return _vm.onPaneClick($event, _vm._uid);\n } } }, [_vm._t(\"default\")], 2);\n};\nvar staticRenderFns = [];\nconst __vue2_script = {\n name: \"pane\",\n inject: [\"requestUpdate\", \"onPaneAdd\", \"onPaneRemove\", \"onPaneClick\"],\n props: {\n size: { type: [Number, String], default: null },\n minSize: { type: [Number, String], default: 0 },\n maxSize: { type: [Number, String], default: 100 }\n },\n data: () => ({\n style: {}\n }),\n mounted() {\n this.onPaneAdd(this);\n },\n beforeDestroy() {\n this.onPaneRemove(this);\n },\n methods: {\n update(style) {\n this.style = style;\n }\n },\n computed: {\n sizeNumber() {\n return this.size || this.size === 0 ? parseFloat(this.size) : null;\n },\n minSizeNumber() {\n return parseFloat(this.minSize);\n },\n maxSizeNumber() {\n return parseFloat(this.maxSize);\n }\n },\n watch: {\n sizeNumber(size) {\n this.requestUpdate({ target: this, size });\n },\n minSizeNumber(min) {\n this.requestUpdate({ target: this, min });\n },\n maxSizeNumber(max) {\n this.requestUpdate({ target: this, max });\n }\n }\n};\nconst __cssModules = {};\nvar __component__ = /* @__PURE__ */ normalizeComponent(__vue2_script, render, staticRenderFns, false, __vue2_injectStyles, null, null, null);\nfunction __vue2_injectStyles(context) {\n for (let o in __cssModules) {\n this[o] = __cssModules[o];\n }\n}\nvar pane = /* @__PURE__ */ function() {\n return __component__.exports;\n}();\nexport { pane as Pane, splitpanes as Splitpanes };\n","import '../assets/NcAppContent-CsPEhdzg.css';\nimport NcButton from \"../Components/NcButton.mjs\";\nimport { r as register, D as t25, a as t } from \"./_l10n-C6OUA0Ge.mjs\";\nimport \"../Directives/Tooltip.mjs\";\nimport { emit } from \"@nextcloud/event-bus\";\nimport { A as ArrowRight } from \"./ArrowRight-CY2b9hgN.mjs\";\nimport { A as ArrowLeft } from \"./ArrowLeft-DuT2LZOm.mjs\";\nimport { useIsMobile } from \"../Composables/useIsMobile.mjs\";\nimport { isRTL } from \"@nextcloud/l10n\";\nimport { n as normalizeComponent } from \"./_plugin-vue2_normalizer-DU4iP6Vu.mjs\";\nimport { VTooltip } from \"floating-vue\";\nimport { getBuilder } from \"@nextcloud/browser-storage\";\nimport { useSwipe } from \"@vueuse/core\";\nimport { Pane, Splitpanes } from \"splitpanes\";\nimport \"splitpanes/dist/splitpanes.css\";\nregister(t25);\nconst _sfc_main$1 = {\n name: \"NcAppDetailsToggle\",\n directives: {\n tooltip: VTooltip\n },\n components: {\n NcButton,\n ArrowRight,\n ArrowLeft\n },\n setup() {\n return {\n isRTL: isRTL(),\n isMobile: useIsMobile()\n };\n },\n computed: {\n title() {\n return t(\"Go back to the list\");\n }\n },\n watch: {\n isMobile: {\n immediate: true,\n handler() {\n this.toggleAppNavigationButton(this.isMobile);\n }\n }\n },\n beforeDestroy() {\n if (this.isMobile) {\n this.toggleAppNavigationButton(false);\n }\n },\n methods: {\n toggleAppNavigationButton(hide = true) {\n const appNavigationToggle = document.querySelector(\".app-navigation .app-navigation-toggle\");\n if (appNavigationToggle) {\n appNavigationToggle.style.display = hide ? \"none\" : null;\n if (hide === true) {\n emit(\"toggle-navigation\", { open: false });\n }\n }\n }\n }\n};\nvar _sfc_render$1 = function render() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"NcButton\", { directives: [{ name: \"tooltip\", rawName: \"v-tooltip\", value: _vm.title, expression: \"title\" }], staticClass: \"app-details-toggle\", class: { \"app-details-toggle--mobile\": _vm.isMobile }, attrs: { \"type\": \"tertiary\", \"aria-label\": _vm.title }, scopedSlots: _vm._u([{ key: \"icon\", fn: function() {\n return [_vm.isRTL ? _c(\"ArrowLeft\", { attrs: { \"size\": 20 } }) : _c(\"ArrowRight\", { attrs: { \"size\": 20 } })];\n }, proxy: true }]) });\n};\nvar _sfc_staticRenderFns$1 = [];\nvar __component__$1 = /* @__PURE__ */ normalizeComponent(\n _sfc_main$1,\n _sfc_render$1,\n _sfc_staticRenderFns$1,\n false,\n null,\n \"089eb524\"\n);\nconst NcAppDetailsToggle = __component__$1.exports;\nconst browserStorage = getBuilder(\"nextcloud\").persist().build();\nconst _sfc_main = {\n name: \"NcAppContent\",\n components: {\n NcAppDetailsToggle,\n Pane,\n Splitpanes\n },\n props: {\n /**\n * Allows to disable the control by swipe of the app navigation open state\n */\n allowSwipeNavigation: {\n type: Boolean,\n default: true\n },\n /**\n * Allows you to set the default width of the resizable list in % on vertical-split\n * Allows you to set the default height of the resizable list in % on horizontal-split\n * Must be between listMinWidth and listMaxWidth\n */\n listSize: {\n type: Number,\n default: 20\n },\n /**\n * Allows you to set the minimum width of the list column in % on vertical-split\n * Allows you to set the minimum height of the list column in % on horizontal-split\n */\n listMinWidth: {\n type: Number,\n default: 15\n },\n /**\n * Allows you to set the maximum width of the list column in % on vertical-split\n * Allows you to set the maximum height of the list column in % on horizontal-split\n */\n listMaxWidth: {\n type: Number,\n default: 40\n },\n /**\n * Specify the config key for the pane config sizes\n * Default is the global var appName if you use the webpack-vue-config\n */\n paneConfigKey: {\n type: String,\n default: \"\"\n },\n /**\n * When in mobile view, only the list or the details are shown\n * If you provide a list, you need to provide a variable\n * that will be set to true by the user when an element of\n * the list gets selected. The details will then show a back\n * arrow to return to the list that will update this prop to false.\n */\n showDetails: {\n type: Boolean,\n default: true\n },\n /**\n * Specify the `

` page heading\n */\n pageHeading: {\n type: String,\n default: null\n },\n /**\n * Content layout used when there is a list together with content:\n * - `vertical-split` - a 2-column layout with list and default content separated vertically\n * - `no-split` - a single column layout; List is shown when `showDetails` is `false`, otherwise the default slot content is shown with a back button to return to the list.\n * - 'horizontal-split' - a 2-column layout with list and default content separated horizontally\n * On mobile screen `no-split` layout is forced.\n */\n layout: {\n type: String,\n default: \"vertical-split\",\n validator(value) {\n return [\"no-split\", \"vertical-split\", \"horizontal-split\"].includes(value);\n }\n }\n },\n emits: [\n \"update:showDetails\",\n \"resize:list\"\n ],\n setup() {\n return {\n isMobile: useIsMobile(),\n isRTL: isRTL()\n };\n },\n data() {\n return {\n contentHeight: 0,\n hasList: false,\n hasContent: false,\n swiping: {},\n listPaneSize: this.restorePaneConfig()\n };\n },\n computed: {\n paneConfigID() {\n if (this.paneConfigKey !== \"\") {\n return `pane-list-size-${this.paneConfigKey}`;\n }\n try {\n return `pane-list-size-${appName}`;\n } catch (e) {\n console.info(\"[INFO] AppContent:\", \"falling back to global nextcloud pane config\");\n return \"pane-list-size-nextcloud\";\n }\n },\n detailsPaneSize() {\n if (this.listPaneSize) {\n return 100 - this.listPaneSize;\n }\n return this.paneDefaults.details.size;\n },\n paneDefaults() {\n return {\n list: {\n size: this.listSize,\n min: this.listMinWidth,\n max: this.listMaxWidth\n },\n // set the inverse values of the details column\n // based on the provided (or default) values of the list column\n details: {\n size: 100 - this.listSize,\n min: 100 - this.listMaxWidth,\n max: 100 - this.listMinWidth\n }\n };\n }\n },\n updated() {\n this.checkSlots();\n },\n mounted() {\n if (this.allowSwipeNavigation) {\n this.swiping = useSwipe(this.$el, {\n onSwipeEnd: this.handleSwipe\n });\n }\n this.checkSlots();\n this.restorePaneConfig();\n },\n methods: {\n /**\n * handle the swipe event\n *\n * @param {TouchEvent} e The touch event\n * @param {import('@vueuse/core').SwipeDirection} direction The swipe direction of the event\n */\n handleSwipe(e, direction) {\n const minSwipeX = 70;\n const touchZone = 300;\n if (Math.abs(this.swiping.lengthX) > minSwipeX) {\n if (this.swiping.coordsStart.x < touchZone / 2 && direction === \"right\") {\n emit(\"toggle-navigation\", {\n open: true\n });\n } else if (this.swiping.coordsStart.x < touchZone * 1.5 && direction === \"left\") {\n emit(\"toggle-navigation\", {\n open: false\n });\n }\n }\n },\n handlePaneResize(event) {\n const listPaneSize = parseInt(event[0].size, 10);\n browserStorage.setItem(this.paneConfigID, JSON.stringify(listPaneSize));\n this.listPaneSize = listPaneSize;\n this.$emit(\"resize:list\", { size: listPaneSize });\n console.debug(\"AppContent pane config\", listPaneSize);\n },\n // $slots is not reactive, we need to update this manually\n checkSlots() {\n this.hasList = !!this.$scopedSlots.list;\n this.hasContent = !!this.$scopedSlots.default;\n },\n // browserStorage is not reactive, we need to update this manually\n restorePaneConfig() {\n const listPaneSize = parseInt(browserStorage.getItem(this.paneConfigID), 10);\n if (!isNaN(listPaneSize) && listPaneSize !== this.listPaneSize) {\n console.debug(\"AppContent pane config\", listPaneSize);\n this.listPaneSize = listPaneSize;\n return listPaneSize;\n }\n },\n /**\n * The user clicked the back arrow from the details view\n */\n hideDetails() {\n this.$emit(\"update:showDetails\", false);\n }\n }\n};\nvar _sfc_render = function render2() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"main\", { staticClass: \"app-content no-snapper\", class: { \"app-content--has-list\": _vm.hasList }, attrs: { \"id\": \"app-content-vue\" } }, [_vm.pageHeading ? _c(\"h1\", { staticClass: \"hidden-visually\" }, [_vm._v(\" \" + _vm._s(_vm.pageHeading) + \" \")]) : _vm._e(), _vm.hasList ? [_vm.isMobile || _vm.layout === \"no-split\" ? _c(\"div\", { staticClass: \"app-content-wrapper app-content-wrapper--no-split\", class: {\n \"app-content-wrapper--show-details\": _vm.showDetails,\n \"app-content-wrapper--show-list\": !_vm.showDetails,\n \"app-content-wrapper--mobile\": _vm.isMobile\n } }, [_vm.showDetails ? _c(\"NcAppDetailsToggle\", { nativeOn: { \"click\": function($event) {\n $event.stopPropagation();\n $event.preventDefault();\n return _vm.hideDetails.apply(null, arguments);\n } } }) : _vm._e(), !_vm.showDetails ? _vm._t(\"list\") : _vm._t(\"default\")], 2) : _vm.layout === \"vertical-split\" || _vm.layout === \"horizontal-split\" ? _c(\"div\", { staticClass: \"app-content-wrapper\" }, [_c(\"Splitpanes\", { staticClass: \"default-theme\", class: {\n \"splitpanes--horizontal\": _vm.layout === \"horizontal-split\",\n \"splitpanes--vertical\": _vm.layout === \"vertical-split\"\n }, attrs: { \"horizontal\": _vm.layout === \"horizontal-split\", \"rtl\": _vm.isRTL }, on: { \"resized\": _vm.handlePaneResize } }, [_c(\"Pane\", { staticClass: \"splitpanes__pane-list\", attrs: { \"size\": _vm.listPaneSize || _vm.paneDefaults.list.size, \"min-size\": _vm.paneDefaults.list.min, \"max-size\": _vm.paneDefaults.list.max } }, [_vm._t(\"list\")], 2), _c(\"Pane\", { staticClass: \"splitpanes__pane-details\", attrs: { \"size\": _vm.detailsPaneSize, \"min-size\": _vm.paneDefaults.details.min, \"max-size\": _vm.paneDefaults.details.max } }, [_vm._t(\"default\")], 2)], 1)], 1) : _vm._e()] : _vm._e(), !_vm.hasList ? _vm._t(\"default\") : _vm._e()], 2);\n};\nvar _sfc_staticRenderFns = [];\nvar __component__ = /* @__PURE__ */ normalizeComponent(\n _sfc_main,\n _sfc_render,\n _sfc_staticRenderFns,\n false,\n null,\n \"e905d7c8\"\n);\nconst NcAppContent = __component__.exports;\nexport {\n NcAppContent as N\n};\n","// This alphabet uses `A-Za-z0-9_-` symbols.\n// The order of characters is optimized for better gzip and brotli compression.\n// References to the same file (works both for gzip and brotli):\n// `'use`, `andom`, and `rict'`\n// References to the brotli default dictionary:\n// `-26T`, `1983`, `40px`, `75px`, `bush`, `jack`, `mind`, `very`, and `wolf`\nlet urlAlphabet =\n 'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict'\n\nlet customAlphabet = (alphabet, defaultSize = 21) => {\n return (size = defaultSize) => {\n let id = ''\n // A compact alternative for `for (var i = 0; i < step; i++)`.\n let i = size | 0\n while (i--) {\n // `| 0` is more compact and faster than `Math.floor()`.\n id += alphabet[(Math.random() * alphabet.length) | 0]\n }\n return id\n }\n}\n\nlet nanoid = (size = 21) => {\n let id = ''\n // A compact alternative for `for (var i = 0; i < step; i++)`.\n let i = size | 0\n while (i--) {\n // `| 0` is more compact and faster than `Math.floor()`.\n id += urlAlphabet[(Math.random() * 64) | 0]\n }\n return id\n}\n\nexport { nanoid, customAlphabet }\n","\n/**\n * vue-simple-portal\n * version: 0.1.5,\n * (c) Thorsten Lünborg, 2021 - present\n * LICENCE: Apache-2.0\n * http://github.com/linusborg/vue-simple-portal\n*/\nimport Vue from 'vue';\nimport { nanoid } from 'nanoid/non-secure';\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nvar config = {\n selector: \"vue-portal-target-\".concat(nanoid())\n};\nvar setSelector = function setSelector(selector) {\n return config.selector = selector;\n};\nvar isBrowser = typeof window !== 'undefined' && (typeof document === \"undefined\" ? \"undefined\" : _typeof(document)) !== undefined;\n\nvar TargetContainer = Vue.extend({\n // as an abstract component, it doesn't appear in\n // the $parent chain of components.\n // which means the next parent of any component rendered inside of this oen\n // will be the parent from which is was sent\n // @ts-expect-error\n abstract: true,\n name: 'PortalOutlet',\n props: ['nodes', 'tag'],\n data: function data(vm) {\n return {\n updatedNodes: vm.nodes\n };\n },\n render: function render(h) {\n var nodes = this.updatedNodes && this.updatedNodes();\n if (!nodes) return h();\n return nodes.length === 1 && !nodes[0].text ? nodes : h(this.tag || 'DIV', nodes);\n },\n destroyed: function destroyed() {\n var el = this.$el;\n el && el.parentNode.removeChild(el);\n }\n});\n\nvar Portal = Vue.extend({\n name: 'VueSimplePortal',\n props: {\n disabled: {\n type: Boolean\n },\n prepend: {\n type: Boolean\n },\n selector: {\n type: String,\n default: function _default() {\n return \"#\".concat(config.selector);\n }\n },\n tag: {\n type: String,\n default: 'DIV'\n }\n },\n render: function render(h) {\n if (this.disabled) {\n var nodes = this.$scopedSlots && this.$scopedSlots.default();\n if (!nodes) return h();\n return nodes.length < 2 && !nodes[0].text ? nodes : h(this.tag, nodes);\n }\n\n return h();\n },\n created: function created() {\n if (!this.getTargetEl()) {\n this.insertTargetEl();\n }\n },\n updated: function updated() {\n var _this = this;\n\n // We only update the target container component\n // if the scoped slot function is a fresh one\n // The new slot syntax (since Vue 2.6) can cache unchanged slot functions\n // and we want to respect that here.\n this.$nextTick(function () {\n if (!_this.disabled && _this.slotFn !== _this.$scopedSlots.default) {\n _this.container.updatedNodes = _this.$scopedSlots.default;\n }\n\n _this.slotFn = _this.$scopedSlots.default;\n });\n },\n beforeDestroy: function beforeDestroy() {\n this.unmount();\n },\n watch: {\n disabled: {\n immediate: true,\n handler: function handler(disabled) {\n disabled ? this.unmount() : this.$nextTick(this.mount);\n }\n }\n },\n methods: {\n // This returns the element into which the content should be mounted.\n getTargetEl: function getTargetEl() {\n if (!isBrowser) return;\n return document.querySelector(this.selector);\n },\n insertTargetEl: function insertTargetEl() {\n if (!isBrowser) return;\n var parent = document.querySelector('body');\n var child = document.createElement(this.tag);\n child.id = this.selector.substring(1);\n parent.appendChild(child);\n },\n mount: function mount() {\n if (!isBrowser) return;\n var targetEl = this.getTargetEl();\n var el = document.createElement('DIV');\n\n if (this.prepend && targetEl.firstChild) {\n targetEl.insertBefore(el, targetEl.firstChild);\n } else {\n targetEl.appendChild(el);\n }\n\n this.container = new TargetContainer({\n el: el,\n parent: this,\n propsData: {\n tag: this.tag,\n nodes: this.$scopedSlots.default\n }\n });\n },\n unmount: function unmount() {\n if (this.container) {\n this.container.$destroy();\n delete this.container;\n }\n }\n }\n});\n\nfunction install(_Vue) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n _Vue.component(options.name || 'portal', Portal);\n\n if (options.defaultSelector) {\n setSelector(options.defaultSelector);\n }\n}\n\nif (typeof window !== 'undefined' && window.Vue && window.Vue === Vue) {\n // plugin was inlcuded directly in a browser\n Vue.use(install);\n}\n\nexport default install;\nexport { Portal, config, setSelector };\n","import '../assets/NcContent-CZamE_IP.css';\nimport { emit } from \"@nextcloud/event-bus\";\nimport { Portal } from \"@linusborg/vue-simple-portal\";\nimport { useIsMobile } from \"../Composables/useIsMobile.mjs\";\nimport { r as register, F as t28, a as t } from \"./_l10n-C6OUA0Ge.mjs\";\nimport NcButton from \"../Components/NcButton.mjs\";\nimport { N as NcIconSvgWrapper } from \"./NcIconSvgWrapper-CHmdAuhg.mjs\";\nimport { n as normalizeComponent } from \"./_plugin-vue2_normalizer-DU4iP6Vu.mjs\";\nregister(t28);\nconst contentSvg = '\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n';\nconst navigationSvg = '\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n';\nconst _sfc_main = {\n name: \"NcContent\",\n components: {\n NcButton,\n NcIconSvgWrapper,\n Teleport: Portal\n },\n provide() {\n return {\n \"NcContent:setHasAppNavigation\": this.setAppNavigation,\n \"NcContent:selector\": \"#content-vue\"\n };\n },\n props: {\n appName: {\n type: String,\n required: true\n }\n },\n setup() {\n const isMobile = useIsMobile();\n return {\n isMobile\n };\n },\n data() {\n return {\n hasAppNavigation: false,\n currentFocus: \"\"\n // unknown\n };\n },\n computed: {\n currentImage() {\n if (this.currentFocus === \"navigation\") {\n return navigationSvg;\n }\n return contentSvg;\n }\n },\n beforeMount() {\n const container = document.getElementById(\"skip-actions\");\n if (container) {\n container.innerHTML = \"\";\n container.classList.add(\"vue-skip-actions\");\n }\n },\n methods: {\n t,\n openAppNavigation() {\n emit(\"toggle-navigation\", { open: true });\n this.$nextTick(() => {\n window.location.hash = \"app-navigation-vue\";\n document.getElementById(\"app-navigation-vue\").focus();\n });\n },\n setAppNavigation(value) {\n this.hasAppNavigation = value;\n if (this.currentFocus === \"\") {\n this.currentFocus = \"navigation\";\n }\n }\n }\n};\nvar _sfc_render = function render() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"div\", { class: [\"content\", `app-${_vm.appName.toLowerCase()}`], attrs: { \"id\": \"content-vue\" } }, [_c(\"Teleport\", { attrs: { \"selector\": \"#skip-actions\" } }, [_c(\"div\", { staticClass: \"vue-skip-actions__container\" }, [_c(\"div\", { staticClass: \"vue-skip-actions__headline\" }, [_vm._v(\" \" + _vm._s(_vm.t(\"Keyboard navigation help\")) + \" \")]), _c(\"div\", { staticClass: \"vue-skip-actions__buttons\" }, [_c(\"NcButton\", { directives: [{ name: \"show\", rawName: \"v-show\", value: _vm.hasAppNavigation, expression: \"hasAppNavigation\" }], attrs: { \"type\": \"tertiary\", \"href\": \"#app-navigation-vue\" }, on: { \"click\": function($event) {\n $event.preventDefault();\n return _vm.openAppNavigation.apply(null, arguments);\n }, \"focusin\": function($event) {\n _vm.currentFocus = \"navigation\";\n }, \"mouseover\": function($event) {\n _vm.currentFocus = \"navigation\";\n } } }, [_vm._v(\" \" + _vm._s(_vm.t(\"Skip to app navigation\")) + \" \")]), _c(\"NcButton\", { attrs: { \"type\": \"tertiary\", \"href\": \"#app-content-vue\" }, on: { \"focusin\": function($event) {\n _vm.currentFocus = \"content\";\n }, \"mouseover\": function($event) {\n _vm.currentFocus = \"content\";\n } } }, [_vm._v(\" \" + _vm._s(_vm.t(\"Skip to main content\")) + \" \")])], 1), _c(\"NcIconSvgWrapper\", { directives: [{ name: \"show\", rawName: \"v-show\", value: !_vm.isMobile, expression: \"!isMobile\" }], staticClass: \"vue-skip-actions__image\", attrs: { \"svg\": _vm.currentImage, \"size\": \"auto\" } })], 1), _vm._v(\"  \")]), _vm._t(\"default\")], 2);\n};\nvar _sfc_staticRenderFns = [];\nvar __component__ = /* @__PURE__ */ normalizeComponent(\n _sfc_main,\n _sfc_render,\n _sfc_staticRenderFns,\n false,\n null,\n \"d8f0539f\"\n);\nconst NcContent = __component__.exports;\nexport {\n NcContent as N\n};\n","\n\n\n\n\n\n","/**\n * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport Vue from 'vue'\nimport FileDrop from './views/FileDrop.vue'\n\nconst View = Vue.extend(FileDrop)\nnew View({}).$mount('#content')\n"],"names":["byteToHex","i","unsafeStringify","arr","offset","getRandomValues","rnds8","rng","randomUUID","native","v4","options","buf","rnds","bufferToBase64","buffer","getFileDropEntry","encryptionInfo","publicKeys","compressedEncryptionInfo","compress","logger","encryptionParams","getRandomEncryptionParams","content","tag","encryptWithAES","encryptRandomKeyForUsers","uploadFileDrop","encryptionVersion","folderId","fileDrops","shareToken","ocsUrl","generateOcsUrl","meta","axios","str","compressedStream","chunks","reader","value","usersPublicKeys","userId","publicKey","rawKey","encryptedFileDropKey","encryptStringAsymmetric","getTag","encrypted","getRandomAESKey","key","initializationVector","encryptFile","file","blob","importPublicKey","pem","cert","x509.X509Certificate","uploadFile","davEndpoint","fileName","path","getRootUrl","_sfc_main","_sfc_render","_vm","_c","$event","_sfc_staticRenderFns","__component__","normalizeComponent","ArrowLeft","__defProp","__defProps","__getOwnPropDescs","__getOwnPropSymbols","__hasOwnProp","__propIsEnum","__defNormalProp","obj","__spreadValues","a","b","prop","__spreadProps","__objRest","source","exclude","target","scriptExports","render2","staticRenderFns2","functionalTemplate","injectStyles","scopeId","moduleIdentifier","shadowMode","hook","originalRender","h","context","existing","__vue2_script$1","pane2","event","splitterIndex","totalMinSizes","paneId","rect","clientX","clientY","drag","containerSize","sums","minDrag","maxDrag","dragPercentage","panesToResize","paneBefore","paneAfter","paneBeforeMaxReached","paneAfterMaxReached","vars","total","p","child","isPane","isSplitter","paneIndex","nextPaneNode","isVeryFirst","elm","node","children","el","_a","_b","args","index","min","max","pane3","removed","changedPanes","equalSpace","leftToAllocate","ungrowable","unshrinkable","definedSizes","leftToAllocate2","addedPane","removedPane","equalSpaceToAllocate","newPaneSize","allocated","enable","splitter","__vue2_render","__vue2_staticRenderFns","__cssModules$1","__component__$1","__vue2_injectStyles$1","o","splitpanes","render","_h","staticRenderFns","__vue2_script","style","size","__cssModules","__vue2_injectStyles","pane","register","t25","_sfc_main$1","VTooltip","NcButton","ArrowRight","isRTL","useIsMobile","t","hide","appNavigationToggle","emit","_sfc_render$1","_sfc_staticRenderFns$1","NcAppDetailsToggle","browserStorage","getBuilder","Pane","Splitpanes","appName","useSwipe","e","direction","listPaneSize","NcAppContent","urlAlphabet","nanoid","id","_typeof","config","setSelector","selector","isBrowser","TargetContainer","Vue","vm","nodes","Portal","_this","disabled","parent","targetEl","install","_Vue","t28","contentSvg","navigationSvg","NcIconSvgWrapper","container","NcContent","UploadStep","NcLoadingIcon","IconCheck","IconAlertCircle","loadState","fileList","progresses","exception","showError","progress","error","fileDropEntries","fileDrop","unencryptedFile","encryptedFileContent","encryptedFileName","uuidv4","translate","View","FileDrop"],"mappings":"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","x_google_ignoreList":[0,1,2,3,7,8,9,10,11,12,13,14]} \ No newline at end of file +{"version":3,"file":"end_to_end_encryption-filedrop.mjs","sources":["../node_modules/uuid/dist/esm-browser/stringify.js","../node_modules/uuid/dist/esm-browser/rng.js","../node_modules/uuid/dist/esm-browser/native.js","../node_modules/uuid/dist/esm-browser/v4.js","../src/services/filedrop.js","../src/services/crypto.js","../src/services/uploadFile.js","../node_modules/vue-material-design-icons/Check.vue","../node_modules/vue-material-design-icons/AlertCircle.vue","../node_modules/@nextcloud/vue/dist/chunks/ArrowLeft-DuT2LZOm.mjs","../node_modules/splitpanes/dist/splitpanes.es.js","../node_modules/@nextcloud/vue/dist/chunks/NcAppContent-BuY1ebnE.mjs","../node_modules/nanoid/non-secure/index.js","../node_modules/@linusborg/vue-simple-portal/dist/index.esm.js","../node_modules/@nextcloud/vue/dist/chunks/NcContent-D7q7hI8k.mjs","../src/views/FileDrop.vue","../src/filedrop.js"],"sourcesContent":["import validate from './validate.js';\nconst byteToHex = [];\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\nexport function unsafeStringify(arr, offset = 0) {\n return (byteToHex[arr[offset + 0]] +\n byteToHex[arr[offset + 1]] +\n byteToHex[arr[offset + 2]] +\n byteToHex[arr[offset + 3]] +\n '-' +\n byteToHex[arr[offset + 4]] +\n byteToHex[arr[offset + 5]] +\n '-' +\n byteToHex[arr[offset + 6]] +\n byteToHex[arr[offset + 7]] +\n '-' +\n byteToHex[arr[offset + 8]] +\n byteToHex[arr[offset + 9]] +\n '-' +\n byteToHex[arr[offset + 10]] +\n byteToHex[arr[offset + 11]] +\n byteToHex[arr[offset + 12]] +\n byteToHex[arr[offset + 13]] +\n byteToHex[arr[offset + 14]] +\n byteToHex[arr[offset + 15]]).toLowerCase();\n}\nfunction stringify(arr, offset = 0) {\n const uuid = unsafeStringify(arr, offset);\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n return uuid;\n}\nexport default stringify;\n","let getRandomValues;\nconst rnds8 = new Uint8Array(16);\nexport default function rng() {\n if (!getRandomValues) {\n if (typeof crypto === 'undefined' || !crypto.getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n getRandomValues = crypto.getRandomValues.bind(crypto);\n }\n return getRandomValues(rnds8);\n}\n","const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nexport default { randomUUID };\n","import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\nfunction v4(options, buf, offset) {\n if (native.randomUUID && !buf && !options) {\n return native.randomUUID();\n }\n options = options || {};\n const rnds = options.random ?? options.rng?.() ?? rng();\n if (rnds.length < 16) {\n throw new Error('Random bytes length must be >= 16');\n }\n rnds[6] = (rnds[6] & 0x0f) | 0x40;\n rnds[8] = (rnds[8] & 0x3f) | 0x80;\n if (buf) {\n offset = offset || 0;\n if (offset < 0 || offset + 16 > buf.length) {\n throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);\n }\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n return buf;\n }\n return unsafeStringify(rnds);\n}\nexport default v4;\n","/**\n * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nimport axios from '@nextcloud/axios'\nimport { generateOcsUrl } from '@nextcloud/router'\nimport { encryptStringAsymmetric, encryptWithAES, getRandomEncryptionParams } from './crypto.js'\nimport logger from './logger.js'\n\n/**\n * @typedef {object} FileMetadata\n * @property {string} filename - Original file name (ex: \"/foo/test.txt\")\n * @property {string} mimetype - Mimetype, if unknown use \"application/octet-stream\" (ex: \"plain/text\")\n * @property {string} key - Encryption key of the file (ex: \"jtboLmgGR1OQf2uneqCVHpklQLlIwWL5TXAQ0keK\")\n * @property {string} nonce - Initialisation vector\n * @property {string} authenticationTag - Authentication tag of the file (ex: \"LYRaJghbZUzBiNWb51ypWw==\")\n */\n\n/**\n * @typedef {object} UserEncryptionInformation\n * @property {string } userId\n * @property {string } encryptedFiledropKey\n */\n\n/**\n * @typedef {object} FileDropPayload\n * @property {string } ciphertext\n * @property {string } nonce\n * @property {string } authenticationTag\n * @property {UserEncryptionInformation[]} users\n */\n\n/**\n * @param {ArrayBuffer} buffer\n * @return {string}\n */\nexport function bufferToBase64(buffer) {\n\treturn btoa(String.fromCharCode(...new Uint8Array(buffer)))\n}\n\n/**\n * @param {import('./crypto.js').FileEncryptionInfo} encryptionInfo\n * @param {{[userId: string]: string}} publicKeys\n * @return {Promise}\n */\nexport async function getFileDropEntry(encryptionInfo, publicKeys) {\n\tconst compressedEncryptionInfo = await compress(JSON.stringify(encryptionInfo))\n\tlogger.debug(`[FileDrop] Encryption info compressed (${encryptionInfo.filename})`, { encryptionInfo, compressedEncryptionInfo })\n\n\tconst encryptionParams = await getRandomEncryptionParams()\n\tconst { content, tag } = await encryptWithAES(\n\t\tencryptionParams,\n\t\tnew Uint8Array(compressedEncryptionInfo),\n\t)\n\tlogger.debug(`[FileDrop] Encryption info encrypted (${encryptionInfo.filename})`, { content, tag, encryptionParams })\n\tlogger.debug(`[FileDrop] Encryption info base64ed (${encryptionInfo.filename})`, { ciphertext: bufferToBase64(content) })\n\n\treturn {\n\t\tciphertext: bufferToBase64(content),\n\t\tnonce: bufferToBase64(encryptionParams.initializationVector),\n\t\tauthenticationTag: bufferToBase64(tag),\n\t\tusers: await encryptRandomKeyForUsers(publicKeys, encryptionParams),\n\t}\n}\n\n/**\n * @param {1|2} encryptionVersion - The encrypted version for the folder\n * @param {number} folderId\n * @param {{[uid: string]: FileDropPayload}} fileDrops\n * @param {string} shareToken\n */\nexport async function uploadFileDrop(encryptionVersion, folderId, fileDrops, shareToken) {\n\tconst ocsUrl = generateOcsUrl(\n\t\t'apps/end_to_end_encryption/api/v{encryptionVersion}/meta-data/{folderId}',\n\t\t{\n\t\t\tencryptionVersion,\n\t\t\tfolderId,\n\t\t},\n\t)\n\n\tconst { data: { ocs: { meta } } } = await axios.put(\n\t\t`${ocsUrl}/filedrop`,\n\t\t{\n\t\t\tfiledrop: JSON.stringify(fileDrops),\n\t\t},\n\t\t{\n\t\t\theaders: {\n\t\t\t\t'x-e2ee-supported': true,\n\t\t\t},\n\t\t\tparams: {\n\t\t\t\tshareToken,\n\t\t\t},\n\t\t},\n\t)\n\n\tif (meta.statuscode !== 200) {\n\t\tthrow new Error(`Failed to upload metadata: ${meta.message}`)\n\t}\n}\n\n/**\n * @param {string} str\n * @return {Promise}\n */\nasync function compress(str) {\n\tconst stream = new Blob([str]).stream()\n\tconst compressedStream = stream.pipeThrough(\n\t\t// eslint-disable-next-line no-undef\n\t\tnew CompressionStream('gzip'),\n\t)\n\n\tconst chunks = []\n\tconst reader = compressedStream.getReader()\n\n\twhile (true) {\n\t\tconst { value } = await reader.read()\n\t\tif (value === undefined) {\n\t\t\tbreak\n\t\t}\n\t\tchunks.push(value)\n\t}\n\n\treturn new Uint8Array(await new Blob(chunks).arrayBuffer())\n}\n\n/**\n * @param {{[userId: string]: string}} usersPublicKeys\n * @param {import('./crypto.js').EncryptionParams} encryptionParams\n * @return {Promise}\n */\nasync function encryptRandomKeyForUsers(usersPublicKeys, encryptionParams) {\n\treturn Promise.all(Object.entries(usersPublicKeys).map(async ([userId, publicKey]) => {\n\t\tconst rawKey = await window.crypto.subtle.exportKey('raw', encryptionParams.key)\n\n\t\tconst encryptedFileDropKey = await encryptStringAsymmetric(\n\t\t\tpublicKey,\n\t\t\trawKey,\n\t\t)\n\n\t\treturn { userId, encryptedFiledropKey: bufferToBase64(encryptedFileDropKey) }\n\t}))\n}\n","/**\n * SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport * as x509 from '@peculiar/x509'\nimport { bufferToBase64 } from './filedrop.js'\nimport logger from './logger.js'\n\n/**\n * Gets tag from encrypted data\n *\n * @param {ArrayBuffer} encrypted Encrypted data\n * @return {ArrayBuffer}\n */\nfunction getTag(encrypted) {\n\treturn encrypted.slice(encrypted.byteLength - 16)\n}\n\n/**\n * @return {Promise}\n */\nexport async function getRandomAESKey() {\n\treturn await window.crypto.subtle.generateKey(\n\t\t{\n\t\t\tname: 'AES-GCM',\n\t\t\tlength: 128,\n\t\t},\n\t\ttrue,\n\t\t['encrypt', 'decrypt'],\n\t)\n}\n\n/**\n * @typedef {object} EncryptionParams\n * @property {CryptoKey} key - Encryption key of the file (ex: \"jtboLmgGR1OQf2uneqCVHpklQLlIwWL5TXAQ0keK\")\n * @property {Uint8Array} initializationVector - Mimetype, if unknown use \"application/octet-stream\" (ex: \"plain/text\")\n */\n\n/**\n * @return {Promise}\n */\nexport async function getRandomEncryptionParams() {\n\treturn {\n\t\tkey: await getRandomAESKey(),\n\t\tinitializationVector: window.crypto.getRandomValues(new Uint8Array(16)),\n\t}\n}\n\n/**\n * Encrypt file content\n *\n * @param {EncryptionParams} encryptionData\n * @param {Uint8Array} content\n * @return {Promise<{content: ArrayBuffer, tag: ArrayBuffer}>}\n */\nexport async function encryptWithAES({ key, initializationVector }, content) {\n\tconst encrypted = await window.crypto.subtle.encrypt(\n\t\t{ name: 'AES-GCM', iv: initializationVector },\n\t\tkey,\n\t\tcontent,\n\t)\n\n\treturn {\n\t\tcontent: encrypted,\n\t\ttag: getTag(encrypted),\n\t}\n}\n\n/**\n * @typedef {object} FileEncryptionInfo\n * @property {string} filename - Original file name (ex: \"/foo/test.txt\")\n * @property {string} mimetype - Mimetype, if unknown use \"application/octet-stream\" (ex: \"plain/text\")\n * @property {string} key - Encryption key of the file (ex: \"jtboLmgGR1OQf2uneqCVHpklQLlIwWL5TXAQ0keK\")\n * @property {string} nonce - Initialisation vector\n * @property {string} authenticationTag - Authentication tag of the file (ex: \"LYRaJghbZUzBiNWb51ypWw==\")\n */\n\n/**\n * Encrypt file content\n *\n * @param {File} file\n * @return {Promise<{encryptedFileContent: ArrayBuffer, encryptionInfo: FileEncryptionInfo}>}\n */\nexport async function encryptFile(file) {\n\tconst blob = await file.arrayBuffer()\n\tconst encryptionParams = await getRandomEncryptionParams()\n\tconst { content, tag } = await encryptWithAES(encryptionParams, new Uint8Array(blob))\n\tlogger.debug(`[FileDrop] File encrypted: ${file.name}`, { file, content, tag, encryptionParams, rawKey: bufferToBase64(await window.crypto.subtle.exportKey('raw', encryptionParams.key)) })\n\n\treturn {\n\t\tencryptedFileContent: content,\n\t\tencryptionInfo: {\n\t\t\tfilename: file.name,\n\t\t\tmimetype: file.type || 'application/octet-stream',\n\t\t\tnonce: bufferToBase64(encryptionParams.initializationVector),\n\t\t\tkey: bufferToBase64(await window.crypto.subtle.exportKey('raw', encryptionParams.key)),\n\t\t\tauthenticationTag: bufferToBase64(tag),\n\t\t},\n\t}\n}\n\n/**\n *\n * @param {string} pem\n * @return {Promise}\n */\nasync function importPublicKey(pem) {\n\t// fetch the part of the PEM string between header and footer\n\tconst cert = new x509.X509Certificate(pem)\n\n\treturn await window.crypto.subtle.importKey(\n\t\t'spki',\n\t\tcert.publicKey.rawData,\n\t\t{\n\t\t\tname: 'RSA-OAEP',\n\t\t\thash: 'SHA-256',\n\t\t},\n\t\ttrue,\n\t\t['encrypt'],\n\t)\n}\n\n/**\n * @param {string} publicKey\n * @param {BufferSource} buffer\n * @return {Promise}\n */\nexport async function encryptStringAsymmetric(publicKey, buffer) {\n\treturn await window.crypto.subtle.encrypt(\n\t\t{ name: 'RSA-OAEP' },\n\t\tawait importPublicKey(publicKey),\n\t\tbuffer,\n\t)\n}\n","/**\n * SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport axios from '@nextcloud/axios'\nimport { getRootUrl } from '@nextcloud/router'\nimport path from 'path'\n\n/**\n * @param {string} davEndpoint\n * @param {string} fileName\n * @param {string} content\n * @param {string} shareToken\n */\nexport async function uploadFile(davEndpoint, fileName, content, shareToken) {\n\tawait axios.put(\n\t\tpath.join(getRootUrl(), davEndpoint, fileName),\n\t\tcontent,\n\t\t{\n\t\t\theaders: {\n\t\t\t\tAuthorization: `Basic ${btoa(`${shareToken}:`)}`,\n\t\t\t},\n\t\t},\n\t)\n}\n","\n\n","\n\n","import { n as normalizeComponent } from \"./_plugin-vue2_normalizer-DU4iP6Vu.mjs\";\nconst _sfc_main = {\n name: \"ArrowLeftIcon\",\n emits: [\"click\"],\n props: {\n title: {\n type: String\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n};\nvar _sfc_render = function render() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"span\", _vm._b({ staticClass: \"material-design-icon arrow-left-icon\", attrs: { \"aria-hidden\": _vm.title ? null : \"true\", \"aria-label\": _vm.title, \"role\": \"img\" }, on: { \"click\": function($event) {\n return _vm.$emit(\"click\", $event);\n } } }, \"span\", _vm.$attrs, false), [_c(\"svg\", { staticClass: \"material-design-icon__svg\", attrs: { \"fill\": _vm.fillColor, \"width\": _vm.size, \"height\": _vm.size, \"viewBox\": \"0 0 24 24\" } }, [_c(\"path\", { attrs: { \"d\": \"M20,11V13H8L13.5,18.5L12.08,19.92L4.16,12L12.08,4.08L13.5,5.5L8,11H20Z\" } }, [_vm.title ? _c(\"title\", [_vm._v(_vm._s(_vm.title))]) : _vm._e()])])]);\n};\nvar _sfc_staticRenderFns = [];\nvar __component__ = /* @__PURE__ */ normalizeComponent(\n _sfc_main,\n _sfc_render,\n _sfc_staticRenderFns,\n false,\n null,\n null\n);\nconst ArrowLeft = __component__.exports;\nexport {\n ArrowLeft as A\n};\n","var __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\nvar __objRest = (source, exclude) => {\n var target = {};\n for (var prop in source)\n if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)\n target[prop] = source[prop];\n if (source != null && __getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(source)) {\n if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))\n target[prop] = source[prop];\n }\n return target;\n};\nvar splitpanes_vue_vue_type_style_index_0_lang = \"\";\nfunction normalizeComponent(scriptExports, render2, staticRenderFns2, functionalTemplate, injectStyles, scopeId, moduleIdentifier, shadowMode) {\n var options = typeof scriptExports === \"function\" ? scriptExports.options : scriptExports;\n if (render2) {\n options.render = render2;\n options.staticRenderFns = staticRenderFns2;\n options._compiled = true;\n }\n if (functionalTemplate) {\n options.functional = true;\n }\n if (scopeId) {\n options._scopeId = \"data-v-\" + scopeId;\n }\n var hook;\n if (moduleIdentifier) {\n hook = function(context) {\n context = context || this.$vnode && this.$vnode.ssrContext || this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext;\n if (!context && typeof __VUE_SSR_CONTEXT__ !== \"undefined\") {\n context = __VUE_SSR_CONTEXT__;\n }\n if (injectStyles) {\n injectStyles.call(this, context);\n }\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier);\n }\n };\n options._ssrRegister = hook;\n } else if (injectStyles) {\n hook = shadowMode ? function() {\n injectStyles.call(this, (options.functional ? this.parent : this).$root.$options.shadowRoot);\n } : injectStyles;\n }\n if (hook) {\n if (options.functional) {\n options._injectStyles = hook;\n var originalRender = options.render;\n options.render = function renderWithStyleInjection(h, context) {\n hook.call(context);\n return originalRender(h, context);\n };\n } else {\n var existing = options.beforeCreate;\n options.beforeCreate = existing ? [].concat(existing, hook) : [hook];\n }\n }\n return {\n exports: scriptExports,\n options\n };\n}\nconst __vue2_script$1 = {\n name: \"splitpanes\",\n props: {\n horizontal: { type: Boolean },\n pushOtherPanes: { type: Boolean, default: true },\n dblClickSplitter: { type: Boolean, default: true },\n rtl: { type: Boolean, default: false },\n firstSplitter: { type: Boolean }\n },\n provide() {\n return {\n requestUpdate: this.requestUpdate,\n onPaneAdd: this.onPaneAdd,\n onPaneRemove: this.onPaneRemove,\n onPaneClick: this.onPaneClick\n };\n },\n data: () => ({\n container: null,\n ready: false,\n panes: [],\n touch: {\n mouseDown: false,\n dragging: false,\n activeSplitter: null\n },\n splitterTaps: {\n splitter: null,\n timeoutId: null\n }\n }),\n computed: {\n panesCount() {\n return this.panes.length;\n },\n indexedPanes() {\n return this.panes.reduce((obj, pane2) => (obj[pane2.id] = pane2) && obj, {});\n }\n },\n methods: {\n updatePaneComponents() {\n this.panes.forEach((pane2) => {\n pane2.update && pane2.update({\n [this.horizontal ? \"height\" : \"width\"]: `${this.indexedPanes[pane2.id].size}%`\n });\n });\n },\n bindEvents() {\n document.addEventListener(\"mousemove\", this.onMouseMove, { passive: false });\n document.addEventListener(\"mouseup\", this.onMouseUp);\n if (\"ontouchstart\" in window) {\n document.addEventListener(\"touchmove\", this.onMouseMove, { passive: false });\n document.addEventListener(\"touchend\", this.onMouseUp);\n }\n },\n unbindEvents() {\n document.removeEventListener(\"mousemove\", this.onMouseMove, { passive: false });\n document.removeEventListener(\"mouseup\", this.onMouseUp);\n if (\"ontouchstart\" in window) {\n document.removeEventListener(\"touchmove\", this.onMouseMove, { passive: false });\n document.removeEventListener(\"touchend\", this.onMouseUp);\n }\n },\n onMouseDown(event, splitterIndex) {\n this.bindEvents();\n this.touch.mouseDown = true;\n this.touch.activeSplitter = splitterIndex;\n },\n onMouseMove(event) {\n if (this.touch.mouseDown) {\n event.preventDefault();\n this.touch.dragging = true;\n this.calculatePanesSize(this.getCurrentMouseDrag(event));\n this.$emit(\"resize\", this.panes.map((pane2) => ({ min: pane2.min, max: pane2.max, size: pane2.size })));\n }\n },\n onMouseUp() {\n if (this.touch.dragging) {\n this.$emit(\"resized\", this.panes.map((pane2) => ({ min: pane2.min, max: pane2.max, size: pane2.size })));\n }\n this.touch.mouseDown = false;\n setTimeout(() => {\n this.touch.dragging = false;\n this.unbindEvents();\n }, 100);\n },\n onSplitterClick(event, splitterIndex) {\n if (\"ontouchstart\" in window) {\n event.preventDefault();\n if (this.dblClickSplitter) {\n if (this.splitterTaps.splitter === splitterIndex) {\n clearTimeout(this.splitterTaps.timeoutId);\n this.splitterTaps.timeoutId = null;\n this.onSplitterDblClick(event, splitterIndex);\n this.splitterTaps.splitter = null;\n } else {\n this.splitterTaps.splitter = splitterIndex;\n this.splitterTaps.timeoutId = setTimeout(() => {\n this.splitterTaps.splitter = null;\n }, 500);\n }\n }\n }\n if (!this.touch.dragging)\n this.$emit(\"splitter-click\", this.panes[splitterIndex]);\n },\n onSplitterDblClick(event, splitterIndex) {\n let totalMinSizes = 0;\n this.panes = this.panes.map((pane2, i) => {\n pane2.size = i === splitterIndex ? pane2.max : pane2.min;\n if (i !== splitterIndex)\n totalMinSizes += pane2.min;\n return pane2;\n });\n this.panes[splitterIndex].size -= totalMinSizes;\n this.$emit(\"pane-maximize\", this.panes[splitterIndex]);\n },\n onPaneClick(event, paneId) {\n this.$emit(\"pane-click\", this.indexedPanes[paneId]);\n },\n getCurrentMouseDrag(event) {\n const rect = this.container.getBoundingClientRect();\n const { clientX, clientY } = \"ontouchstart\" in window && event.touches ? event.touches[0] : event;\n return {\n x: clientX - rect.left,\n y: clientY - rect.top\n };\n },\n getCurrentDragPercentage(drag) {\n drag = drag[this.horizontal ? \"y\" : \"x\"];\n const containerSize = this.container[this.horizontal ? \"clientHeight\" : \"clientWidth\"];\n if (this.rtl && !this.horizontal)\n drag = containerSize - drag;\n return drag * 100 / containerSize;\n },\n calculatePanesSize(drag) {\n const splitterIndex = this.touch.activeSplitter;\n let sums = {\n prevPanesSize: this.sumPrevPanesSize(splitterIndex),\n nextPanesSize: this.sumNextPanesSize(splitterIndex),\n prevReachedMinPanes: 0,\n nextReachedMinPanes: 0\n };\n const minDrag = 0 + (this.pushOtherPanes ? 0 : sums.prevPanesSize);\n const maxDrag = 100 - (this.pushOtherPanes ? 0 : sums.nextPanesSize);\n const dragPercentage = Math.max(Math.min(this.getCurrentDragPercentage(drag), maxDrag), minDrag);\n let panesToResize = [splitterIndex, splitterIndex + 1];\n let paneBefore = this.panes[panesToResize[0]] || null;\n let paneAfter = this.panes[panesToResize[1]] || null;\n const paneBeforeMaxReached = paneBefore.max < 100 && dragPercentage >= paneBefore.max + sums.prevPanesSize;\n const paneAfterMaxReached = paneAfter.max < 100 && dragPercentage <= 100 - (paneAfter.max + this.sumNextPanesSize(splitterIndex + 1));\n if (paneBeforeMaxReached || paneAfterMaxReached) {\n if (paneBeforeMaxReached) {\n paneBefore.size = paneBefore.max;\n paneAfter.size = Math.max(100 - paneBefore.max - sums.prevPanesSize - sums.nextPanesSize, 0);\n } else {\n paneBefore.size = Math.max(100 - paneAfter.max - sums.prevPanesSize - this.sumNextPanesSize(splitterIndex + 1), 0);\n paneAfter.size = paneAfter.max;\n }\n return;\n }\n if (this.pushOtherPanes) {\n const vars = this.doPushOtherPanes(sums, dragPercentage);\n if (!vars)\n return;\n ({ sums, panesToResize } = vars);\n paneBefore = this.panes[panesToResize[0]] || null;\n paneAfter = this.panes[panesToResize[1]] || null;\n }\n if (paneBefore !== null) {\n paneBefore.size = Math.min(Math.max(dragPercentage - sums.prevPanesSize - sums.prevReachedMinPanes, paneBefore.min), paneBefore.max);\n }\n if (paneAfter !== null) {\n paneAfter.size = Math.min(Math.max(100 - dragPercentage - sums.nextPanesSize - sums.nextReachedMinPanes, paneAfter.min), paneAfter.max);\n }\n },\n doPushOtherPanes(sums, dragPercentage) {\n const splitterIndex = this.touch.activeSplitter;\n const panesToResize = [splitterIndex, splitterIndex + 1];\n if (dragPercentage < sums.prevPanesSize + this.panes[panesToResize[0]].min) {\n panesToResize[0] = this.findPrevExpandedPane(splitterIndex).index;\n sums.prevReachedMinPanes = 0;\n if (panesToResize[0] < splitterIndex) {\n this.panes.forEach((pane2, i) => {\n if (i > panesToResize[0] && i <= splitterIndex) {\n pane2.size = pane2.min;\n sums.prevReachedMinPanes += pane2.min;\n }\n });\n }\n sums.prevPanesSize = this.sumPrevPanesSize(panesToResize[0]);\n if (panesToResize[0] === void 0) {\n sums.prevReachedMinPanes = 0;\n this.panes[0].size = this.panes[0].min;\n this.panes.forEach((pane2, i) => {\n if (i > 0 && i <= splitterIndex) {\n pane2.size = pane2.min;\n sums.prevReachedMinPanes += pane2.min;\n }\n });\n this.panes[panesToResize[1]].size = 100 - sums.prevReachedMinPanes - this.panes[0].min - sums.prevPanesSize - sums.nextPanesSize;\n return null;\n }\n }\n if (dragPercentage > 100 - sums.nextPanesSize - this.panes[panesToResize[1]].min) {\n panesToResize[1] = this.findNextExpandedPane(splitterIndex).index;\n sums.nextReachedMinPanes = 0;\n if (panesToResize[1] > splitterIndex + 1) {\n this.panes.forEach((pane2, i) => {\n if (i > splitterIndex && i < panesToResize[1]) {\n pane2.size = pane2.min;\n sums.nextReachedMinPanes += pane2.min;\n }\n });\n }\n sums.nextPanesSize = this.sumNextPanesSize(panesToResize[1] - 1);\n if (panesToResize[1] === void 0) {\n sums.nextReachedMinPanes = 0;\n this.panes[this.panesCount - 1].size = this.panes[this.panesCount - 1].min;\n this.panes.forEach((pane2, i) => {\n if (i < this.panesCount - 1 && i >= splitterIndex + 1) {\n pane2.size = pane2.min;\n sums.nextReachedMinPanes += pane2.min;\n }\n });\n this.panes[panesToResize[0]].size = 100 - sums.prevPanesSize - sums.nextReachedMinPanes - this.panes[this.panesCount - 1].min - sums.nextPanesSize;\n return null;\n }\n }\n return { sums, panesToResize };\n },\n sumPrevPanesSize(splitterIndex) {\n return this.panes.reduce((total, pane2, i) => total + (i < splitterIndex ? pane2.size : 0), 0);\n },\n sumNextPanesSize(splitterIndex) {\n return this.panes.reduce((total, pane2, i) => total + (i > splitterIndex + 1 ? pane2.size : 0), 0);\n },\n findPrevExpandedPane(splitterIndex) {\n const pane2 = [...this.panes].reverse().find((p) => p.index < splitterIndex && p.size > p.min);\n return pane2 || {};\n },\n findNextExpandedPane(splitterIndex) {\n const pane2 = this.panes.find((p) => p.index > splitterIndex + 1 && p.size > p.min);\n return pane2 || {};\n },\n checkSplitpanesNodes() {\n const children = Array.from(this.container.children);\n children.forEach((child) => {\n const isPane = child.classList.contains(\"splitpanes__pane\");\n const isSplitter = child.classList.contains(\"splitpanes__splitter\");\n if (!isPane && !isSplitter) {\n child.parentNode.removeChild(child);\n console.warn(\"Splitpanes: Only elements are allowed at the root of . One of your DOM nodes was removed.\");\n return;\n }\n });\n },\n addSplitter(paneIndex, nextPaneNode, isVeryFirst = false) {\n const splitterIndex = paneIndex - 1;\n const elm = document.createElement(\"div\");\n elm.classList.add(\"splitpanes__splitter\");\n if (!isVeryFirst) {\n elm.onmousedown = (event) => this.onMouseDown(event, splitterIndex);\n if (typeof window !== \"undefined\" && \"ontouchstart\" in window) {\n elm.ontouchstart = (event) => this.onMouseDown(event, splitterIndex);\n }\n elm.onclick = (event) => this.onSplitterClick(event, splitterIndex + 1);\n }\n if (this.dblClickSplitter) {\n elm.ondblclick = (event) => this.onSplitterDblClick(event, splitterIndex + 1);\n }\n nextPaneNode.parentNode.insertBefore(elm, nextPaneNode);\n },\n removeSplitter(node) {\n node.onmousedown = void 0;\n node.onclick = void 0;\n node.ondblclick = void 0;\n node.parentNode.removeChild(node);\n },\n redoSplitters() {\n const children = Array.from(this.container.children);\n children.forEach((el) => {\n if (el.className.includes(\"splitpanes__splitter\"))\n this.removeSplitter(el);\n });\n let paneIndex = 0;\n children.forEach((el) => {\n if (el.className.includes(\"splitpanes__pane\")) {\n if (!paneIndex && this.firstSplitter)\n this.addSplitter(paneIndex, el, true);\n else if (paneIndex)\n this.addSplitter(paneIndex, el);\n paneIndex++;\n }\n });\n },\n requestUpdate(_a) {\n var _b = _a, { target } = _b, args = __objRest(_b, [\"target\"]);\n const pane2 = this.indexedPanes[target._uid];\n Object.entries(args).forEach(([key, value]) => pane2[key] = value);\n },\n onPaneAdd(pane2) {\n let index = -1;\n Array.from(pane2.$el.parentNode.children).some((el) => {\n if (el.className.includes(\"splitpanes__pane\"))\n index++;\n return el === pane2.$el;\n });\n const min = parseFloat(pane2.minSize);\n const max = parseFloat(pane2.maxSize);\n this.panes.splice(index, 0, {\n id: pane2._uid,\n index,\n min: isNaN(min) ? 0 : min,\n max: isNaN(max) ? 100 : max,\n size: pane2.size === null ? null : parseFloat(pane2.size),\n givenSize: pane2.size,\n update: pane2.update\n });\n this.panes.forEach((p, i) => p.index = i);\n if (this.ready) {\n this.$nextTick(() => {\n this.redoSplitters();\n this.resetPaneSizes({ addedPane: this.panes[index] });\n this.$emit(\"pane-add\", { index, panes: this.panes.map((pane3) => ({ min: pane3.min, max: pane3.max, size: pane3.size })) });\n });\n }\n },\n onPaneRemove(pane2) {\n const index = this.panes.findIndex((p) => p.id === pane2._uid);\n const removed = this.panes.splice(index, 1)[0];\n this.panes.forEach((p, i) => p.index = i);\n this.$nextTick(() => {\n this.redoSplitters();\n this.resetPaneSizes({ removedPane: __spreadProps(__spreadValues({}, removed), { index }) });\n this.$emit(\"pane-remove\", { removed, panes: this.panes.map((pane3) => ({ min: pane3.min, max: pane3.max, size: pane3.size })) });\n });\n },\n resetPaneSizes(changedPanes = {}) {\n if (!changedPanes.addedPane && !changedPanes.removedPane)\n this.initialPanesSizing();\n else if (this.panes.some((pane2) => pane2.givenSize !== null || pane2.min || pane2.max < 100))\n this.equalizeAfterAddOrRemove(changedPanes);\n else\n this.equalize();\n if (this.ready)\n this.$emit(\"resized\", this.panes.map((pane2) => ({ min: pane2.min, max: pane2.max, size: pane2.size })));\n },\n equalize() {\n const equalSpace = 100 / this.panesCount;\n let leftToAllocate = 0;\n let ungrowable = [];\n let unshrinkable = [];\n this.panes.forEach((pane2) => {\n pane2.size = Math.max(Math.min(equalSpace, pane2.max), pane2.min);\n leftToAllocate -= pane2.size;\n if (pane2.size >= pane2.max)\n ungrowable.push(pane2.id);\n if (pane2.size <= pane2.min)\n unshrinkable.push(pane2.id);\n });\n if (leftToAllocate > 0.1)\n this.readjustSizes(leftToAllocate, ungrowable, unshrinkable);\n },\n initialPanesSizing() {\n 100 / this.panesCount;\n let leftToAllocate = 100;\n let ungrowable = [];\n let unshrinkable = [];\n let definedSizes = 0;\n this.panes.forEach((pane2) => {\n leftToAllocate -= pane2.size;\n if (pane2.size !== null)\n definedSizes++;\n if (pane2.size >= pane2.max)\n ungrowable.push(pane2.id);\n if (pane2.size <= pane2.min)\n unshrinkable.push(pane2.id);\n });\n let leftToAllocate2 = 100;\n if (leftToAllocate > 0.1) {\n this.panes.forEach((pane2) => {\n if (pane2.size === null) {\n pane2.size = Math.max(Math.min(leftToAllocate / (this.panesCount - definedSizes), pane2.max), pane2.min);\n }\n leftToAllocate2 -= pane2.size;\n });\n if (leftToAllocate2 > 0.1)\n this.readjustSizes(leftToAllocate, ungrowable, unshrinkable);\n }\n },\n equalizeAfterAddOrRemove({ addedPane, removedPane } = {}) {\n let equalSpace = 100 / this.panesCount;\n let leftToAllocate = 0;\n let ungrowable = [];\n let unshrinkable = [];\n if (addedPane && addedPane.givenSize !== null) {\n equalSpace = (100 - addedPane.givenSize) / (this.panesCount - 1);\n }\n this.panes.forEach((pane2) => {\n leftToAllocate -= pane2.size;\n if (pane2.size >= pane2.max)\n ungrowable.push(pane2.id);\n if (pane2.size <= pane2.min)\n unshrinkable.push(pane2.id);\n });\n if (Math.abs(leftToAllocate) < 0.1)\n return;\n this.panes.forEach((pane2) => {\n if (addedPane && addedPane.givenSize !== null && addedPane.id === pane2.id)\n ;\n else\n pane2.size = Math.max(Math.min(equalSpace, pane2.max), pane2.min);\n leftToAllocate -= pane2.size;\n if (pane2.size >= pane2.max)\n ungrowable.push(pane2.id);\n if (pane2.size <= pane2.min)\n unshrinkable.push(pane2.id);\n });\n if (leftToAllocate > 0.1)\n this.readjustSizes(leftToAllocate, ungrowable, unshrinkable);\n },\n readjustSizes(leftToAllocate, ungrowable, unshrinkable) {\n let equalSpaceToAllocate;\n if (leftToAllocate > 0)\n equalSpaceToAllocate = leftToAllocate / (this.panesCount - ungrowable.length);\n else\n equalSpaceToAllocate = leftToAllocate / (this.panesCount - unshrinkable.length);\n this.panes.forEach((pane2, i) => {\n if (leftToAllocate > 0 && !ungrowable.includes(pane2.id)) {\n const newPaneSize = Math.max(Math.min(pane2.size + equalSpaceToAllocate, pane2.max), pane2.min);\n const allocated = newPaneSize - pane2.size;\n leftToAllocate -= allocated;\n pane2.size = newPaneSize;\n } else if (!unshrinkable.includes(pane2.id)) {\n const newPaneSize = Math.max(Math.min(pane2.size + equalSpaceToAllocate, pane2.max), pane2.min);\n const allocated = newPaneSize - pane2.size;\n leftToAllocate -= allocated;\n pane2.size = newPaneSize;\n }\n pane2.update({\n [this.horizontal ? \"height\" : \"width\"]: `${this.indexedPanes[pane2.id].size}%`\n });\n });\n if (Math.abs(leftToAllocate) > 0.1) {\n this.$nextTick(() => {\n if (this.ready) {\n console.warn(\"Splitpanes: Could not resize panes correctly due to their constraints.\");\n }\n });\n }\n }\n },\n watch: {\n panes: {\n deep: true,\n immediate: false,\n handler() {\n this.updatePaneComponents();\n }\n },\n horizontal() {\n this.updatePaneComponents();\n },\n firstSplitter() {\n this.redoSplitters();\n },\n dblClickSplitter(enable) {\n const splitters = [...this.container.querySelectorAll(\".splitpanes__splitter\")];\n splitters.forEach((splitter, i) => {\n splitter.ondblclick = enable ? (event) => this.onSplitterDblClick(event, i) : void 0;\n });\n }\n },\n beforeDestroy() {\n this.ready = false;\n },\n mounted() {\n this.container = this.$refs.container;\n this.checkSplitpanesNodes();\n this.redoSplitters();\n this.resetPaneSizes();\n this.$emit(\"ready\");\n this.ready = true;\n },\n render(h) {\n return h(\"div\", {\n ref: \"container\",\n class: [\n \"splitpanes\",\n `splitpanes--${this.horizontal ? \"horizontal\" : \"vertical\"}`,\n {\n \"splitpanes--dragging\": this.touch.dragging\n }\n ]\n }, this.$slots.default);\n }\n};\nlet __vue2_render, __vue2_staticRenderFns;\nconst __cssModules$1 = {};\nvar __component__$1 = /* @__PURE__ */ normalizeComponent(__vue2_script$1, __vue2_render, __vue2_staticRenderFns, false, __vue2_injectStyles$1, null, null, null);\nfunction __vue2_injectStyles$1(context) {\n for (let o in __cssModules$1) {\n this[o] = __cssModules$1[o];\n }\n}\nvar splitpanes = /* @__PURE__ */ function() {\n return __component__$1.exports;\n}();\nvar render = function() {\n var _vm = this;\n var _h = _vm.$createElement;\n var _c = _vm._self._c || _h;\n return _c(\"div\", { staticClass: \"splitpanes__pane\", style: _vm.style, on: { \"click\": function($event) {\n return _vm.onPaneClick($event, _vm._uid);\n } } }, [_vm._t(\"default\")], 2);\n};\nvar staticRenderFns = [];\nconst __vue2_script = {\n name: \"pane\",\n inject: [\"requestUpdate\", \"onPaneAdd\", \"onPaneRemove\", \"onPaneClick\"],\n props: {\n size: { type: [Number, String], default: null },\n minSize: { type: [Number, String], default: 0 },\n maxSize: { type: [Number, String], default: 100 }\n },\n data: () => ({\n style: {}\n }),\n mounted() {\n this.onPaneAdd(this);\n },\n beforeDestroy() {\n this.onPaneRemove(this);\n },\n methods: {\n update(style) {\n this.style = style;\n }\n },\n computed: {\n sizeNumber() {\n return this.size || this.size === 0 ? parseFloat(this.size) : null;\n },\n minSizeNumber() {\n return parseFloat(this.minSize);\n },\n maxSizeNumber() {\n return parseFloat(this.maxSize);\n }\n },\n watch: {\n sizeNumber(size) {\n this.requestUpdate({ target: this, size });\n },\n minSizeNumber(min) {\n this.requestUpdate({ target: this, min });\n },\n maxSizeNumber(max) {\n this.requestUpdate({ target: this, max });\n }\n }\n};\nconst __cssModules = {};\nvar __component__ = /* @__PURE__ */ normalizeComponent(__vue2_script, render, staticRenderFns, false, __vue2_injectStyles, null, null, null);\nfunction __vue2_injectStyles(context) {\n for (let o in __cssModules) {\n this[o] = __cssModules[o];\n }\n}\nvar pane = /* @__PURE__ */ function() {\n return __component__.exports;\n}();\nexport { pane as Pane, splitpanes as Splitpanes };\n","import '../assets/NcAppContent-CsPEhdzg.css';\nimport NcButton from \"../Components/NcButton.mjs\";\nimport { r as register, D as t25, a as t } from \"./_l10n-C6OUA0Ge.mjs\";\nimport \"../Directives/Tooltip.mjs\";\nimport { emit } from \"@nextcloud/event-bus\";\nimport { A as ArrowRight } from \"./ArrowRight-CY2b9hgN.mjs\";\nimport { A as ArrowLeft } from \"./ArrowLeft-DuT2LZOm.mjs\";\nimport { useIsMobile } from \"../Composables/useIsMobile.mjs\";\nimport { isRTL } from \"@nextcloud/l10n\";\nimport { n as normalizeComponent } from \"./_plugin-vue2_normalizer-DU4iP6Vu.mjs\";\nimport { VTooltip } from \"floating-vue\";\nimport { getBuilder } from \"@nextcloud/browser-storage\";\nimport { useSwipe } from \"@vueuse/core\";\nimport { Pane, Splitpanes } from \"splitpanes\";\nimport \"splitpanes/dist/splitpanes.css\";\nregister(t25);\nconst _sfc_main$1 = {\n name: \"NcAppDetailsToggle\",\n directives: {\n tooltip: VTooltip\n },\n components: {\n NcButton,\n ArrowRight,\n ArrowLeft\n },\n setup() {\n return {\n isRTL: isRTL(),\n isMobile: useIsMobile()\n };\n },\n computed: {\n title() {\n return t(\"Go back to the list\");\n }\n },\n watch: {\n isMobile: {\n immediate: true,\n handler() {\n this.toggleAppNavigationButton(this.isMobile);\n }\n }\n },\n beforeDestroy() {\n if (this.isMobile) {\n this.toggleAppNavigationButton(false);\n }\n },\n methods: {\n toggleAppNavigationButton(hide = true) {\n const appNavigationToggle = document.querySelector(\".app-navigation .app-navigation-toggle\");\n if (appNavigationToggle) {\n appNavigationToggle.style.display = hide ? \"none\" : null;\n if (hide === true) {\n emit(\"toggle-navigation\", { open: false });\n }\n }\n }\n }\n};\nvar _sfc_render$1 = function render() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"NcButton\", { directives: [{ name: \"tooltip\", rawName: \"v-tooltip\", value: _vm.title, expression: \"title\" }], staticClass: \"app-details-toggle\", class: { \"app-details-toggle--mobile\": _vm.isMobile }, attrs: { \"type\": \"tertiary\", \"aria-label\": _vm.title }, scopedSlots: _vm._u([{ key: \"icon\", fn: function() {\n return [_vm.isRTL ? _c(\"ArrowLeft\", { attrs: { \"size\": 20 } }) : _c(\"ArrowRight\", { attrs: { \"size\": 20 } })];\n }, proxy: true }]) });\n};\nvar _sfc_staticRenderFns$1 = [];\nvar __component__$1 = /* @__PURE__ */ normalizeComponent(\n _sfc_main$1,\n _sfc_render$1,\n _sfc_staticRenderFns$1,\n false,\n null,\n \"089eb524\"\n);\nconst NcAppDetailsToggle = __component__$1.exports;\nconst browserStorage = getBuilder(\"nextcloud\").persist().build();\nconst _sfc_main = {\n name: \"NcAppContent\",\n components: {\n NcAppDetailsToggle,\n Pane,\n Splitpanes\n },\n props: {\n /**\n * Allows to disable the control by swipe of the app navigation open state\n */\n allowSwipeNavigation: {\n type: Boolean,\n default: true\n },\n /**\n * Allows you to set the default width of the resizable list in % on vertical-split\n * Allows you to set the default height of the resizable list in % on horizontal-split\n * Must be between listMinWidth and listMaxWidth\n */\n listSize: {\n type: Number,\n default: 20\n },\n /**\n * Allows you to set the minimum width of the list column in % on vertical-split\n * Allows you to set the minimum height of the list column in % on horizontal-split\n */\n listMinWidth: {\n type: Number,\n default: 15\n },\n /**\n * Allows you to set the maximum width of the list column in % on vertical-split\n * Allows you to set the maximum height of the list column in % on horizontal-split\n */\n listMaxWidth: {\n type: Number,\n default: 40\n },\n /**\n * Specify the config key for the pane config sizes\n * Default is the global var appName if you use the webpack-vue-config\n */\n paneConfigKey: {\n type: String,\n default: \"\"\n },\n /**\n * When in mobile view, only the list or the details are shown\n * If you provide a list, you need to provide a variable\n * that will be set to true by the user when an element of\n * the list gets selected. The details will then show a back\n * arrow to return to the list that will update this prop to false.\n */\n showDetails: {\n type: Boolean,\n default: true\n },\n /**\n * Specify the `

` page heading\n */\n pageHeading: {\n type: String,\n default: null\n },\n /**\n * Content layout used when there is a list together with content:\n * - `vertical-split` - a 2-column layout with list and default content separated vertically\n * - `no-split` - a single column layout; List is shown when `showDetails` is `false`, otherwise the default slot content is shown with a back button to return to the list.\n * - 'horizontal-split' - a 2-column layout with list and default content separated horizontally\n * On mobile screen `no-split` layout is forced.\n */\n layout: {\n type: String,\n default: \"vertical-split\",\n validator(value) {\n return [\"no-split\", \"vertical-split\", \"horizontal-split\"].includes(value);\n }\n }\n },\n emits: [\n \"update:showDetails\",\n \"resize:list\"\n ],\n setup() {\n return {\n isMobile: useIsMobile(),\n isRTL: isRTL()\n };\n },\n data() {\n return {\n contentHeight: 0,\n hasList: false,\n hasContent: false,\n swiping: {},\n listPaneSize: this.restorePaneConfig()\n };\n },\n computed: {\n paneConfigID() {\n if (this.paneConfigKey !== \"\") {\n return `pane-list-size-${this.paneConfigKey}`;\n }\n try {\n return `pane-list-size-${appName}`;\n } catch (e) {\n console.info(\"[INFO] AppContent:\", \"falling back to global nextcloud pane config\");\n return \"pane-list-size-nextcloud\";\n }\n },\n detailsPaneSize() {\n if (this.listPaneSize) {\n return 100 - this.listPaneSize;\n }\n return this.paneDefaults.details.size;\n },\n paneDefaults() {\n return {\n list: {\n size: this.listSize,\n min: this.listMinWidth,\n max: this.listMaxWidth\n },\n // set the inverse values of the details column\n // based on the provided (or default) values of the list column\n details: {\n size: 100 - this.listSize,\n min: 100 - this.listMaxWidth,\n max: 100 - this.listMinWidth\n }\n };\n }\n },\n updated() {\n this.checkSlots();\n },\n mounted() {\n if (this.allowSwipeNavigation) {\n this.swiping = useSwipe(this.$el, {\n onSwipeEnd: this.handleSwipe\n });\n }\n this.checkSlots();\n this.restorePaneConfig();\n },\n methods: {\n /**\n * handle the swipe event\n *\n * @param {TouchEvent} e The touch event\n * @param {import('@vueuse/core').SwipeDirection} direction The swipe direction of the event\n */\n handleSwipe(e, direction) {\n const minSwipeX = 70;\n const touchZone = 300;\n if (Math.abs(this.swiping.lengthX) > minSwipeX) {\n if (this.swiping.coordsStart.x < touchZone / 2 && direction === \"right\") {\n emit(\"toggle-navigation\", {\n open: true\n });\n } else if (this.swiping.coordsStart.x < touchZone * 1.5 && direction === \"left\") {\n emit(\"toggle-navigation\", {\n open: false\n });\n }\n }\n },\n handlePaneResize(event) {\n const listPaneSize = parseInt(event[0].size, 10);\n browserStorage.setItem(this.paneConfigID, JSON.stringify(listPaneSize));\n this.listPaneSize = listPaneSize;\n this.$emit(\"resize:list\", { size: listPaneSize });\n console.debug(\"AppContent pane config\", listPaneSize);\n },\n // $slots is not reactive, we need to update this manually\n checkSlots() {\n this.hasList = !!this.$scopedSlots.list;\n this.hasContent = !!this.$scopedSlots.default;\n },\n // browserStorage is not reactive, we need to update this manually\n restorePaneConfig() {\n const listPaneSize = parseInt(browserStorage.getItem(this.paneConfigID), 10);\n if (!isNaN(listPaneSize) && listPaneSize !== this.listPaneSize) {\n console.debug(\"AppContent pane config\", listPaneSize);\n this.listPaneSize = listPaneSize;\n return listPaneSize;\n }\n },\n /**\n * The user clicked the back arrow from the details view\n */\n hideDetails() {\n this.$emit(\"update:showDetails\", false);\n }\n }\n};\nvar _sfc_render = function render2() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"main\", { staticClass: \"app-content no-snapper\", class: { \"app-content--has-list\": _vm.hasList }, attrs: { \"id\": \"app-content-vue\" } }, [_vm.pageHeading ? _c(\"h1\", { staticClass: \"hidden-visually\" }, [_vm._v(\" \" + _vm._s(_vm.pageHeading) + \" \")]) : _vm._e(), _vm.hasList ? [_vm.isMobile || _vm.layout === \"no-split\" ? _c(\"div\", { staticClass: \"app-content-wrapper app-content-wrapper--no-split\", class: {\n \"app-content-wrapper--show-details\": _vm.showDetails,\n \"app-content-wrapper--show-list\": !_vm.showDetails,\n \"app-content-wrapper--mobile\": _vm.isMobile\n } }, [_vm.showDetails ? _c(\"NcAppDetailsToggle\", { nativeOn: { \"click\": function($event) {\n $event.stopPropagation();\n $event.preventDefault();\n return _vm.hideDetails.apply(null, arguments);\n } } }) : _vm._e(), !_vm.showDetails ? _vm._t(\"list\") : _vm._t(\"default\")], 2) : _vm.layout === \"vertical-split\" || _vm.layout === \"horizontal-split\" ? _c(\"div\", { staticClass: \"app-content-wrapper\" }, [_c(\"Splitpanes\", { staticClass: \"default-theme\", class: {\n \"splitpanes--horizontal\": _vm.layout === \"horizontal-split\",\n \"splitpanes--vertical\": _vm.layout === \"vertical-split\"\n }, attrs: { \"horizontal\": _vm.layout === \"horizontal-split\", \"rtl\": _vm.isRTL }, on: { \"resized\": _vm.handlePaneResize } }, [_c(\"Pane\", { staticClass: \"splitpanes__pane-list\", attrs: { \"size\": _vm.listPaneSize || _vm.paneDefaults.list.size, \"min-size\": _vm.paneDefaults.list.min, \"max-size\": _vm.paneDefaults.list.max } }, [_vm._t(\"list\")], 2), _c(\"Pane\", { staticClass: \"splitpanes__pane-details\", attrs: { \"size\": _vm.detailsPaneSize, \"min-size\": _vm.paneDefaults.details.min, \"max-size\": _vm.paneDefaults.details.max } }, [_vm._t(\"default\")], 2)], 1)], 1) : _vm._e()] : _vm._e(), !_vm.hasList ? _vm._t(\"default\") : _vm._e()], 2);\n};\nvar _sfc_staticRenderFns = [];\nvar __component__ = /* @__PURE__ */ normalizeComponent(\n _sfc_main,\n _sfc_render,\n _sfc_staticRenderFns,\n false,\n null,\n \"e905d7c8\"\n);\nconst NcAppContent = __component__.exports;\nexport {\n NcAppContent as N\n};\n","// This alphabet uses `A-Za-z0-9_-` symbols.\n// The order of characters is optimized for better gzip and brotli compression.\n// References to the same file (works both for gzip and brotli):\n// `'use`, `andom`, and `rict'`\n// References to the brotli default dictionary:\n// `-26T`, `1983`, `40px`, `75px`, `bush`, `jack`, `mind`, `very`, and `wolf`\nlet urlAlphabet =\n 'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict'\n\nlet customAlphabet = (alphabet, defaultSize = 21) => {\n return (size = defaultSize) => {\n let id = ''\n // A compact alternative for `for (var i = 0; i < step; i++)`.\n let i = size | 0\n while (i--) {\n // `| 0` is more compact and faster than `Math.floor()`.\n id += alphabet[(Math.random() * alphabet.length) | 0]\n }\n return id\n }\n}\n\nlet nanoid = (size = 21) => {\n let id = ''\n // A compact alternative for `for (var i = 0; i < step; i++)`.\n let i = size | 0\n while (i--) {\n // `| 0` is more compact and faster than `Math.floor()`.\n id += urlAlphabet[(Math.random() * 64) | 0]\n }\n return id\n}\n\nexport { nanoid, customAlphabet }\n","\n/**\n * vue-simple-portal\n * version: 0.1.5,\n * (c) Thorsten Lünborg, 2021 - present\n * LICENCE: Apache-2.0\n * http://github.com/linusborg/vue-simple-portal\n*/\nimport Vue from 'vue';\nimport { nanoid } from 'nanoid/non-secure';\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nvar config = {\n selector: \"vue-portal-target-\".concat(nanoid())\n};\nvar setSelector = function setSelector(selector) {\n return config.selector = selector;\n};\nvar isBrowser = typeof window !== 'undefined' && (typeof document === \"undefined\" ? \"undefined\" : _typeof(document)) !== undefined;\n\nvar TargetContainer = Vue.extend({\n // as an abstract component, it doesn't appear in\n // the $parent chain of components.\n // which means the next parent of any component rendered inside of this oen\n // will be the parent from which is was sent\n // @ts-expect-error\n abstract: true,\n name: 'PortalOutlet',\n props: ['nodes', 'tag'],\n data: function data(vm) {\n return {\n updatedNodes: vm.nodes\n };\n },\n render: function render(h) {\n var nodes = this.updatedNodes && this.updatedNodes();\n if (!nodes) return h();\n return nodes.length === 1 && !nodes[0].text ? nodes : h(this.tag || 'DIV', nodes);\n },\n destroyed: function destroyed() {\n var el = this.$el;\n el && el.parentNode.removeChild(el);\n }\n});\n\nvar Portal = Vue.extend({\n name: 'VueSimplePortal',\n props: {\n disabled: {\n type: Boolean\n },\n prepend: {\n type: Boolean\n },\n selector: {\n type: String,\n default: function _default() {\n return \"#\".concat(config.selector);\n }\n },\n tag: {\n type: String,\n default: 'DIV'\n }\n },\n render: function render(h) {\n if (this.disabled) {\n var nodes = this.$scopedSlots && this.$scopedSlots.default();\n if (!nodes) return h();\n return nodes.length < 2 && !nodes[0].text ? nodes : h(this.tag, nodes);\n }\n\n return h();\n },\n created: function created() {\n if (!this.getTargetEl()) {\n this.insertTargetEl();\n }\n },\n updated: function updated() {\n var _this = this;\n\n // We only update the target container component\n // if the scoped slot function is a fresh one\n // The new slot syntax (since Vue 2.6) can cache unchanged slot functions\n // and we want to respect that here.\n this.$nextTick(function () {\n if (!_this.disabled && _this.slotFn !== _this.$scopedSlots.default) {\n _this.container.updatedNodes = _this.$scopedSlots.default;\n }\n\n _this.slotFn = _this.$scopedSlots.default;\n });\n },\n beforeDestroy: function beforeDestroy() {\n this.unmount();\n },\n watch: {\n disabled: {\n immediate: true,\n handler: function handler(disabled) {\n disabled ? this.unmount() : this.$nextTick(this.mount);\n }\n }\n },\n methods: {\n // This returns the element into which the content should be mounted.\n getTargetEl: function getTargetEl() {\n if (!isBrowser) return;\n return document.querySelector(this.selector);\n },\n insertTargetEl: function insertTargetEl() {\n if (!isBrowser) return;\n var parent = document.querySelector('body');\n var child = document.createElement(this.tag);\n child.id = this.selector.substring(1);\n parent.appendChild(child);\n },\n mount: function mount() {\n if (!isBrowser) return;\n var targetEl = this.getTargetEl();\n var el = document.createElement('DIV');\n\n if (this.prepend && targetEl.firstChild) {\n targetEl.insertBefore(el, targetEl.firstChild);\n } else {\n targetEl.appendChild(el);\n }\n\n this.container = new TargetContainer({\n el: el,\n parent: this,\n propsData: {\n tag: this.tag,\n nodes: this.$scopedSlots.default\n }\n });\n },\n unmount: function unmount() {\n if (this.container) {\n this.container.$destroy();\n delete this.container;\n }\n }\n }\n});\n\nfunction install(_Vue) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n _Vue.component(options.name || 'portal', Portal);\n\n if (options.defaultSelector) {\n setSelector(options.defaultSelector);\n }\n}\n\nif (typeof window !== 'undefined' && window.Vue && window.Vue === Vue) {\n // plugin was inlcuded directly in a browser\n Vue.use(install);\n}\n\nexport default install;\nexport { Portal, config, setSelector };\n","import '../assets/NcContent-CZamE_IP.css';\nimport { emit } from \"@nextcloud/event-bus\";\nimport { Portal } from \"@linusborg/vue-simple-portal\";\nimport { useIsMobile } from \"../Composables/useIsMobile.mjs\";\nimport { r as register, F as t28, a as t } from \"./_l10n-C6OUA0Ge.mjs\";\nimport NcButton from \"../Components/NcButton.mjs\";\nimport { N as NcIconSvgWrapper } from \"./NcIconSvgWrapper-CHmdAuhg.mjs\";\nimport { n as normalizeComponent } from \"./_plugin-vue2_normalizer-DU4iP6Vu.mjs\";\nregister(t28);\nconst contentSvg = '\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n';\nconst navigationSvg = '\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n';\nconst _sfc_main = {\n name: \"NcContent\",\n components: {\n NcButton,\n NcIconSvgWrapper,\n Teleport: Portal\n },\n provide() {\n return {\n \"NcContent:setHasAppNavigation\": this.setAppNavigation,\n \"NcContent:selector\": \"#content-vue\"\n };\n },\n props: {\n appName: {\n type: String,\n required: true\n }\n },\n setup() {\n const isMobile = useIsMobile();\n return {\n isMobile\n };\n },\n data() {\n return {\n hasAppNavigation: false,\n currentFocus: \"\"\n // unknown\n };\n },\n computed: {\n currentImage() {\n if (this.currentFocus === \"navigation\") {\n return navigationSvg;\n }\n return contentSvg;\n }\n },\n beforeMount() {\n const container = document.getElementById(\"skip-actions\");\n if (container) {\n container.innerHTML = \"\";\n container.classList.add(\"vue-skip-actions\");\n }\n },\n methods: {\n t,\n openAppNavigation() {\n emit(\"toggle-navigation\", { open: true });\n this.$nextTick(() => {\n window.location.hash = \"app-navigation-vue\";\n document.getElementById(\"app-navigation-vue\").focus();\n });\n },\n setAppNavigation(value) {\n this.hasAppNavigation = value;\n if (this.currentFocus === \"\") {\n this.currentFocus = \"navigation\";\n }\n }\n }\n};\nvar _sfc_render = function render() {\n var _vm = this, _c = _vm._self._c;\n return _c(\"div\", { class: [\"content\", `app-${_vm.appName.toLowerCase()}`], attrs: { \"id\": \"content-vue\" } }, [_c(\"Teleport\", { attrs: { \"selector\": \"#skip-actions\" } }, [_c(\"div\", { staticClass: \"vue-skip-actions__container\" }, [_c(\"div\", { staticClass: \"vue-skip-actions__headline\" }, [_vm._v(\" \" + _vm._s(_vm.t(\"Keyboard navigation help\")) + \" \")]), _c(\"div\", { staticClass: \"vue-skip-actions__buttons\" }, [_c(\"NcButton\", { directives: [{ name: \"show\", rawName: \"v-show\", value: _vm.hasAppNavigation, expression: \"hasAppNavigation\" }], attrs: { \"type\": \"tertiary\", \"href\": \"#app-navigation-vue\" }, on: { \"click\": function($event) {\n $event.preventDefault();\n return _vm.openAppNavigation.apply(null, arguments);\n }, \"focusin\": function($event) {\n _vm.currentFocus = \"navigation\";\n }, \"mouseover\": function($event) {\n _vm.currentFocus = \"navigation\";\n } } }, [_vm._v(\" \" + _vm._s(_vm.t(\"Skip to app navigation\")) + \" \")]), _c(\"NcButton\", { attrs: { \"type\": \"tertiary\", \"href\": \"#app-content-vue\" }, on: { \"focusin\": function($event) {\n _vm.currentFocus = \"content\";\n }, \"mouseover\": function($event) {\n _vm.currentFocus = \"content\";\n } } }, [_vm._v(\" \" + _vm._s(_vm.t(\"Skip to main content\")) + \" \")])], 1), _c(\"NcIconSvgWrapper\", { directives: [{ name: \"show\", rawName: \"v-show\", value: !_vm.isMobile, expression: \"!isMobile\" }], staticClass: \"vue-skip-actions__image\", attrs: { \"svg\": _vm.currentImage, \"size\": \"auto\" } })], 1), _vm._v(\"  \")]), _vm._t(\"default\")], 2);\n};\nvar _sfc_staticRenderFns = [];\nvar __component__ = /* @__PURE__ */ normalizeComponent(\n _sfc_main,\n _sfc_render,\n _sfc_staticRenderFns,\n false,\n null,\n \"d8f0539f\"\n);\nconst NcContent = __component__.exports;\nexport {\n NcContent as N\n};\n","\n\n\n\n\n\n","/**\n * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport Vue from 'vue'\nimport FileDrop from './views/FileDrop.vue'\n\nconst View = Vue.extend(FileDrop)\nnew View({}).$mount('#content')\n"],"names":["byteToHex","i","unsafeStringify","arr","offset","getRandomValues","rnds8","rng","randomUUID","native","v4","options","buf","rnds","bufferToBase64","buffer","getFileDropEntry","encryptionInfo","publicKeys","compressedEncryptionInfo","compress","logger","encryptionParams","getRandomEncryptionParams","content","tag","encryptWithAES","encryptRandomKeyForUsers","uploadFileDrop","encryptionVersion","folderId","fileDrops","shareToken","ocsUrl","generateOcsUrl","meta","axios","str","compressedStream","chunks","reader","value","usersPublicKeys","userId","publicKey","rawKey","encryptedFileDropKey","encryptStringAsymmetric","getTag","encrypted","getRandomAESKey","key","initializationVector","encryptFile","file","blob","importPublicKey","pem","cert","x509.X509Certificate","uploadFile","davEndpoint","fileName","path","getRootUrl","_sfc_main","_sfc_render","_vm","_c","$event","_sfc_staticRenderFns","__component__","normalizeComponent","ArrowLeft","__defProp","__defProps","__getOwnPropDescs","__getOwnPropSymbols","__hasOwnProp","__propIsEnum","__defNormalProp","obj","__spreadValues","a","b","prop","__spreadProps","__objRest","source","exclude","target","scriptExports","render2","staticRenderFns2","functionalTemplate","injectStyles","scopeId","moduleIdentifier","shadowMode","hook","originalRender","h","context","existing","__vue2_script$1","pane2","event","splitterIndex","totalMinSizes","paneId","rect","clientX","clientY","drag","containerSize","sums","minDrag","maxDrag","dragPercentage","panesToResize","paneBefore","paneAfter","paneBeforeMaxReached","paneAfterMaxReached","vars","total","p","child","isPane","isSplitter","paneIndex","nextPaneNode","isVeryFirst","elm","node","children","el","_a","_b","args","index","min","max","pane3","removed","changedPanes","equalSpace","leftToAllocate","ungrowable","unshrinkable","definedSizes","leftToAllocate2","addedPane","removedPane","equalSpaceToAllocate","newPaneSize","allocated","enable","splitter","__vue2_render","__vue2_staticRenderFns","__cssModules$1","__component__$1","__vue2_injectStyles$1","o","splitpanes","render","_h","staticRenderFns","__vue2_script","style","size","__cssModules","__vue2_injectStyles","pane","register","t25","_sfc_main$1","VTooltip","NcButton","ArrowRight","isRTL","useIsMobile","t","hide","appNavigationToggle","emit","_sfc_render$1","_sfc_staticRenderFns$1","NcAppDetailsToggle","browserStorage","getBuilder","Pane","Splitpanes","appName","useSwipe","e","direction","listPaneSize","NcAppContent","urlAlphabet","nanoid","id","_typeof","config","setSelector","selector","isBrowser","TargetContainer","Vue","vm","nodes","Portal","_this","disabled","parent","targetEl","install","_Vue","t28","contentSvg","navigationSvg","NcIconSvgWrapper","container","NcContent","UploadStep","NcLoadingIcon","IconCheck","IconAlertCircle","loadState","fileList","progresses","exception","showError","progress","error","fileDropEntries","fileDrop","unencryptedFile","encryptedFileContent","encryptedFileName","uuidv4","translate","View","FileDrop"],"mappings":"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","x_google_ignoreList":[0,1,2,3,7,8,9,10,11,12,13,14]} \ No newline at end of file