From a422a3a7d02f890550ff5dbac985b4ddf152fb08 Mon Sep 17 00:00:00 2001 From: nextcloud-command Date: Thu, 18 Jul 2024 14:22:05 +0000 Subject: [PATCH] chore(assets): recompile assets Signed-off-by: nextcloud-command --- js/Wrapper.chunk.mjs | 2 +- js/Wrapper.chunk.mjs.map | 2 +- js/vendor.LICENSE.txt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/js/Wrapper.chunk.mjs b/js/Wrapper.chunk.mjs index 14b50b8ab45..1b8bc691224 100644 --- a/js/Wrapper.chunk.mjs +++ b/js/Wrapper.chunk.mjs @@ -1,2 +1,2 @@ /*! third party licenses: js/vendor.LICENSE.txt */ -var Ut=e=>{throw TypeError(e)};var ft=(e,s,i)=>s.has(e)||Ut("Cannot "+i);var o=(e,s,i)=>(ft(e,s,"read from private field"),i?i.call(e):s.get(e)),u=(e,s,i)=>s.has(e)?Ut("Cannot add the same private member more than once"):s instanceof WeakSet?s.add(e):s.set(e,i),d=(e,s,i,n)=>(ft(e,s,"write to private field"),n?n.call(e,i):s.set(e,i),i),v=(e,s,i)=>(ft(e,s,"access private method"),i);var Lt=(e,s,i,n)=>({set _(a){d(e,s,a,i)},get _(){return o(e,s,n)}});import{d as mt,r as Se}from"./vue.runtime.esm.chunk.mjs";import{O as jt,A as Ae,B as K,G as Kt,H as x,J as Ie,K as S,L as O,Q,V as zt,W as Jt,X as It,t as Qt,Z as qt,_ as Yt,$ as Oe,a0 as Ne,a1 as Me,a2 as $e,a3 as Zt,a4 as Gt,a5 as Xt,a6 as H,j as Ot,a7 as Nt,k as te,a8 as Re,a9 as Te,aa as De,ab as Ue,ac as Le,ad as Pe,ae as Fe,af as ee,ag as Pt,ah as Be,ai as He,aj as Ve,ak as We,al as je,am as Ke,an as ze,ao as Je,ap as Qe,aq as qe,ar as Ye,as as Ze,at as Ge}from"./RichText.chunk.mjs";import{n as R}from"./_plugin-vue2_normalizer.chunk.mjs";import{c as se,_ as ie,U as Xe}from"./index.chunk3.mjs";import{g as ts}from"./emoji-picker.chunk.mjs";import{d as ne,s as ae,m as es}from"./index.chunk.mjs";import{N as Mt,f as ss,d as Ft,g as is}from"./NcUserBubble-DMjZyrGY.chunk.mjs";import{b as ns,N as as,u as os,s as gt}from"./NcNoteCard-BLPU1den.chunk.mjs";import{p as ht,e as oe,l as rs}from"./modulepreload-polyfill.chunk.mjs";import{l as cs}from"./index.chunk4.mjs";import{u as vt,e as ls,c as re,g as ce,h as hs,d as ds,A as us,m as ps,n as ms,o as vs}from"./MediaHandler.provider.chunk.mjs";import{l as y}from"./logger.chunk.mjs";const bt=3e4;class _s extends jt{constructor(s){super(),this.doc=s,this.clientID=s.clientID,this.states=new Map,this.meta=new Map,this._checkInterval=setInterval(()=>{const i=K();this.getLocalState()!==null&&bt/2<=i-this.meta.get(this.clientID).lastUpdated&&this.setLocalState(this.getLocalState());const n=[];this.meta.forEach((a,r)=>{r!==this.clientID&&bt<=i-a.lastUpdated&&this.states.has(r)&&n.push(r)}),n.length>0&&$t(this,n,"timeout")},Ae(bt/10)),s.on("destroy",()=>{this.destroy()}),this.setLocalState({})}destroy(){this.emit("destroy",[this]),this.setLocalState(null),super.destroy(),clearInterval(this._checkInterval)}getLocalState(){return this.states.get(this.clientID)||null}setLocalState(s){const i=this.clientID,n=this.meta.get(i),a=n===void 0?0:n.clock+1,r=this.states.get(i);s===null?this.states.delete(i):this.states.set(i,s),this.meta.set(i,{clock:a,lastUpdated:K()});const c=[],g=[],f=[],D=[];s===null?D.push(i):r==null?s!=null&&c.push(i):(g.push(i),Kt(r,s)||f.push(i)),(c.length>0||f.length>0||D.length>0)&&this.emit("change",[{added:c,updated:f,removed:D},"local"]),this.emit("update",[{added:c,updated:g,removed:D},"local"])}setLocalStateField(s,i){const n=this.getLocalState();n!==null&&this.setLocalState({...n,[s]:i})}getStates(){return this.states}}const $t=(e,s,i)=>{const n=[];for(let a=0;a0&&(e.emit("change",[{added:[],updated:[],removed:n},i]),e.emit("update",[{added:[],updated:[],removed:n},i]))},st=(e,s,i=e.states)=>{const n=s.length,a=O();x(a,n);for(let r=0;r{const n=Jt(s),a=K(),r=[],c=[],g=[],f=[],D=Q(n);for(let b=0;b0||g.length>0||f.length>0)&&e.emit("change",[{added:r,updated:g,removed:f},i]),(r.length>0||c.length>0||f.length>0)&&e.emit("update",[{added:r,updated:c,removed:f},i])},gs={name:"NcActionButton",components:{NextcloudVueNcActionButton:Mt},extends:It,mounted(){this.$editor.on("transaction",()=>this.updateState())},methods:{runAction(){var s;const{actionEntry:e}=this;e.click?e.click(this):(s=e.action(this.$editor.chain().focus()))==null||s.run(),this.$nextTick(()=>{this.$emit("trigged",{...e})})}}};var bs=function(){var e=this,s=e._self._c;return s("NextcloudVueNcActionButton",e._g({staticClass:"entry-single-action entry-action entry-action-item",class:e.state.class,attrs:{disabled:e.state.disabled,"aria-keyshortcuts":e.keyshortcuts||void 0,"data-text-action-entry":e.actionEntry.key,type:e.state.type,"model-value":e.state.type!=="button"?e.state.active:void 0,"close-after-click":""},on:{click:e.runAction},scopedSlots:e._u([{key:"icon",fn:function(){return[s(e.icon,{tag:"component"})]},proxy:!0}])},e.$listeners),[e._v(" "+e._s(e.label)+" ")])},ys=[],ks=R(gs,bs,ys,!1,null,null,null,null);const xs=ks.exports,ws={name:"ActionList",components:{NcActions:ns,NcActionSeparator:Qt,ActionListItem:xs},extends:It,mixins:[qt,Yt,Oe],props:{forceEnabled:{type:Boolean,default:!1}},data:()=>({visible:!1,hasEnabledChild:!0}),computed:{currentChild(){const{state:e,$editor:s,actionEntry:{children:i}}=this;return e.active?i.find(n=>Ne(n,s)):null},icon(){return this.currentChild?this.currentChild.icon:this.actionEntry.icon},iconKey(){return"".concat(this.actionEntry.key,"/").concat(this.activeKey)},activeKey(){var e;return(e=this.currentChild)==null?void 0:e.key},children(){return this.actionEntry.children.filter(({visible:e})=>e===void 0?!0:typeof e=="function"?e(this):e)},labelWithSelected(){return this.currentChild?t("text",'{menuItemName}, "{selectedSubMenuItemName}" is selected',{menuItemName:this.actionEntry.label,selectedSubMenuItemName:this.currentChild.label}):this.actionEntry.label},isEnabled(){return this.forceEnabled||this.hasEnabledChild}},mounted(){this.$_updateState=ne(this.checkStateOfChildren.bind(this),50),this.$editor.on("update",this.$_updateState),this.$editor.on("selectionUpdate",this.$_updateState)},beforeDestroy(){this.$editor.off("update",this.$_updateState),this.$editor.off("selectionUpdate",this.$_updateState)},methods:{onOpenChange(e){this.visible=e},runAction(){},onTrigger(e){e!=null&&e.click||(this.$editor.chain().focus().run(),this.$emit("trigged",e))},checkStateOfChildren(){this.hasEnabledChild=this.children.some(e=>this.isChildEnabled(e))},isChildEnabled(e){return!e.isSeparator&&!Me(e,this.$editor).disabled}}};var Cs=function(){var e=this,s=e._self._c;return s("NcActions",e._b({staticClass:"entry-list-action entry-action",attrs:{title:e.tooltip,container:e.menuIDSelector,"aria-label":e.labelWithSelected,type:e.state.active?"primary":"tertiary","force-menu":!0,"data-text-action-entry":e.actionEntry.key,"data-text-action-active":e.activeKey,disabled:!e.isEnabled},on:{"update:open":e.onOpenChange},scopedSlots:e._u([{key:"icon",fn:function(){return[s(e.icon,{key:e.iconKey,tag:"component"})]},proxy:!0}])},"NcActions",e.state,!1),[e._l(e.children,function(i){var n;return[i.isSeparator?s("NcActionSeparator",{key:"child-".concat(i.key)}):s("ActionListItem",e._g({key:"child-".concat(i.key),attrs:{active:((n=e.currentChild)==null?void 0:n.key)===i.key,"is-item":"","action-entry":i},on:{trigged:e.onTrigger}},e.$listeners))]}),e._t("lastAction",null,null,{visible:e.visible})],2)},Es=[],Ss=R(ws,Cs,Es,!1,null,null,null,null);const le=Ss.exports,As={name:"ActionSingle",components:{NcButton:as},extends:It,props:{isItem:{type:Boolean,default:!1}},mounted(){this.$editor.on("transaction",()=>this.updateState())},methods:{runAction(){var s;const{actionEntry:e}=this;e.click?e.click(this):(s=e.action(this.$editor.chain().focus()))==null||s.run(),this.$nextTick(()=>{this.$emit("trigged",{...e})})}}};var Is=function(){var e=this,s=e._self._c;return s("NcButton",e._g({staticClass:"entry-single-action entry-action",class:e.state.class,attrs:{disabled:e.state.disabled,"aria-keyshortcuts":e.keyshortcuts||void 0,"data-text-action-entry":e.actionEntry.key,"aria-label":e.label,title:e.tooltip,type:"tertiary",pressed:e.state.type!=="button"?e.state.active:void 0},on:{click:e.runAction},scopedSlots:e._u([{key:"icon",fn:function(){return[s(e.icon,{tag:"component"})]},proxy:!0},e.actionEntry.forceLabel?{key:"default",fn:function(){return[e._v(" "+e._s(e.label)+" ")]},proxy:!0}:null],null,!0)},e.$listeners))},Os=[],Ns=R(As,Is,Os,!1,null,null,null,null);const he=Ns.exports,de=mt({data(){return{activeMenuEntry:0,entries:[]}},computed:{visibleEntries(){return this.entries}},watch:{visibleEntries(){this.$nextTick(()=>{var e;(this.activeMenuEntry>this.visibleEntries.length||(e=this.visibleEntries[this.activeMenuEntry])!=null&&e.disabled)&&this.setNextMenuEntry()})}},methods:{disableMenuEntry(e,s){const i=this.visibleEntries.findIndex(({key:n})=>n===e);this.visibleEntries[i].disabled=s,s===!1&&this.activeMenuEntry===i&&this.$nextTick(()=>this.setNextMenuEntry())},setNextMenuEntry(){const e=this.visibleEntries.length+(this.$refs.remainingEntries?1:0);do this.activeMenuEntry=(this.activeMenuEntry+1)%e;while(this.activeMenuEntrythis.visibleEntries.findIndex(({key:r})=>r===n.$vnode.data.key)-this.visibleEntries.findIndex(({key:r})=>r===a.$vnode.data.key))[this.activeMenuEntry].focusButton()}}}),Ms=mt({name:"ReadonlyBar",components:{ActionList:le,ActionSingle:he},extends:de,data(){return{entries:$e}}});var $s=function(){var e=this,s=e._self._c;return e._self._setupProxy,s("div",{staticClass:"text-readonly-bar",attrs:{"data-text-el":"readonly-bar"}},[s("div",{ref:"menubar",staticClass:"text-readonly-bar__entries",attrs:{role:"toolbar","aria-label":e.t("text","Editor actions")}},e._l(e.visibleEntries,function(i,n){return s(i.component?i.component:i.children?"ActionList":"ActionSingle",{key:i.key,ref:"menuEntries",refInFor:!0,tag:"component",attrs:{"action-entry":i,"can-be-focussed":e.activeMenuEntry===n},on:{disabled:function(a){return e.disableMenuEntry(i.key,a)}}})}),1),s("div",{staticClass:"text-menubar__slot"},[e._t("default")],2)])},Rs=[],Ts=R(Ms,$s,Rs,!1,null,"c35c5130",null,null);const ln=Ts.exports;function Rt(e){const s=new Uint8Array(e);return Zt(s)}function ue(e){return Gt(e)}const pe=0,Tt=1,me=2,kt=(e,s)=>{x(e,pe);const i=Xt(s);H(e,i)},ve=(e,s,i)=>{x(e,Tt),H(e,Ot(s,i))},Ds=(e,s,i)=>ve(s,i,Nt(e)),_e=(e,s,i)=>{try{te(s,Nt(e),i)}catch(n){console.error("Caught error while handling a Yjs update",n)}},fe=(e,s)=>{x(e,me),H(e,s)},Us=_e,Ls=(e,s,i,n)=>{const a=Q(e);switch(a){case pe:Ds(e,s,i);break;case Tt:_e(e,i,n);break;case me:Us(e,i,n);break;default:throw new Error("Unknown message type")}return a},ge=new Map;class Ps{constructor(s){this.room=s,this.onmessage=null,this._onChange=i=>i.key===s&&this.onmessage!==null&&this.onmessage({data:Gt(i.newValue||"")}),De(this._onChange)}postMessage(s){Ue.setItem(this.room,Zt(Le(s)))}close(){Pe(this._onChange)}}const Fs=typeof BroadcastChannel>"u"?Ps:BroadcastChannel,Dt=e=>Re(ge,e,()=>{const s=Te(),i=new Fs(e);return i.onmessage=n=>s.forEach(a=>a(n.data,"broadcastchannel")),{bc:i,subs:s}}),Bs=(e,s)=>(Dt(e).subs.add(s),s),Hs=(e,s)=>{const i=Dt(e),n=i.subs.delete(s);return n&&i.subs.size===0&&(i.bc.close(),ge.delete(e)),n},z=(e,s,i=null)=>{const n=Dt(e);n.bc.postMessage(s),n.subs.forEach(a=>a(s,i))},Vs=0,Ws=(e,s,i)=>{switch(Q(e)){case Vs:i(s,zt(e))}},js=e=>Fe(e,(s,i)=>"".concat(encodeURIComponent(i),"=").concat(encodeURIComponent(s))).join("&"),B=0,be=3,q=1,Ks=2,et=[];et[B]=(e,s,i,n,a)=>{x(e,B);const r=Ls(s,e,i.doc,i);n&&r===Tt&&!i.synced&&(i.synced=!0)},et[be]=(e,s,i,n,a)=>{x(e,q),H(e,st(i.awareness,Array.from(i.awareness.getStates().keys())))},et[q]=(e,s,i,n,a)=>{fs(i.awareness,Nt(s),i)},et[Ks]=(e,s,i,n,a)=>{Ws(s,i.doc,(r,c)=>zs(i,c))};const Bt=3e4,zs=(e,s)=>console.warn("Permission denied to access ".concat(e.url,".\n").concat(s)),ye=(e,s,i)=>{const n=Jt(s),a=O(),r=Q(n),c=e.messageHandlers[r];return c?c(a,n,e,i,r):console.error("Unable to compute message"),a},ke=e=>{if(e.shouldConnect&&e.ws===null){const s=new e._WS(e.url);s.binaryType="arraybuffer",e.ws=s,e.wsconnecting=!0,e.wsconnected=!1,e.synced=!1,s.onmessage=i=>{e.wsLastMessageReceived=K();const n=ye(e,new Uint8Array(i.data),!0);ee(n)>1&&s.send(S(n))},s.onerror=i=>{e.emit("connection-error",[i,e])},s.onclose=i=>{e.emit("connection-close",[i,e]),e.ws=null,e.wsconnecting=!1,e.wsconnected?(e.wsconnected=!1,e.synced=!1,$t(e.awareness,Array.from(e.awareness.getStates().keys()).filter(n=>n!==e.doc.clientID),e),e.emit("status",[{status:"disconnected"}])):e.wsUnsuccessfulReconnects++,setTimeout(ke,Be(He(2,e.wsUnsuccessfulReconnects)*100,e.maxBackoffTime),e)},s.onopen=()=>{e.wsLastMessageReceived=K(),e.wsconnecting=!1,e.wsconnected=!0,e.wsUnsuccessfulReconnects=0,e.emit("status",[{status:"connected"}]);const i=O();if(x(i,B),kt(i,e.doc),s.send(S(i)),e.awareness.getLocalState()!==null){const n=O();x(n,q),H(n,st(e.awareness,[e.doc.clientID])),s.send(S(n))}},e.emit("status",[{status:"connecting"}])}},yt=(e,s)=>{const i=e.ws;e.wsconnected&&i&&i.readyState===i.OPEN&&i.send(s),e.bcconnected&&z(e.bcChannel,s,e)};class hn extends jt{constructor(s,i,n,{connect:a=!0,awareness:r=new _s(n),params:c={},WebSocketPolyfill:g=WebSocket,resyncInterval:f=-1,maxBackoffTime:D=2500,disableBc:b=!1}={}){for(super();s[s.length-1]==="/";)s=s.slice(0,s.length-1);this.serverUrl=s,this.bcChannel=s+"/"+i,this.maxBackoffTime=D,this.params=c,this.roomname=i,this.doc=n,this._WS=g,this.awareness=r,this.wsconnected=!1,this.wsconnecting=!1,this.bcconnected=!1,this.disableBc=b,this.wsUnsuccessfulReconnects=0,this.messageHandlers=et.slice(),this._synced=!1,this.ws=null,this.wsLastMessageReceived=0,this.shouldConnect=a,this._resyncInterval=0,f>0&&(this._resyncInterval=setInterval(()=>{if(this.ws&&this.ws.readyState===WebSocket.OPEN){const l=O();x(l,B),kt(l,n),this.ws.send(S(l))}},f)),this._bcSubscriber=(l,h)=>{if(h!==this){const m=ye(this,new Uint8Array(l),!1);ee(m)>1&&z(this.bcChannel,S(m),this)}},this._updateHandler=(l,h)=>{if(h!==this){const m=O();x(m,B),fe(m,l),yt(this,S(m))}},this.doc.on("update",this._updateHandler),this._awarenessUpdateHandler=({added:l,updated:h,removed:m},E)=>{const N=l.concat(h).concat(m),M=O();x(M,q),H(M,st(r,N)),yt(this,S(M))},this._exitHandler=()=>{$t(this.awareness,[n.clientID],"app closed")},Pt&&typeof ht<"u"&&ht.on("exit",this._exitHandler),r.on("update",this._awarenessUpdateHandler),this._checkInterval=setInterval(()=>{this.wsconnected&&BtRt(s)).filter(s=>s<"AQ")}function Qs(e){return e.map(s=>Rt(s)).findLast(s=>s>"AQ")||""}function qs(e,s){return e.length===s.length&&e.every((i,n)=>s[n]===i)}function Ys(e){return{all:e=e||new Map,on:function(s,i){var n=e.get(s);n?n.push(i):e.set(s,[i])},off:function(s,i){var n=e.get(s);n&&(i?n.splice(n.indexOf(i)>>>0,1):e.set(s,[]))},emit:function(s,i){var n=e.get(s);n&&n.slice().map(function(a){a(i)}),(n=e.get("*"))&&n.slice().map(function(a){a(s,i)})}}}class Zs extends Error{constructor(s="Close has already been called on the connection",...i){super(s,...i)}}var U,ut,xe;class Gs{constructor(s={}){u(this,ut);u(this,U);d(this,U,s)}open({fileId:s,baseVersionEtag:i}){return se.put(v(this,ut,xe).call(this,"session/".concat(s,"/create")),{fileId:s,baseVersionEtag:i,filePath:o(this,U).filePath,token:o(this,U).shareToken,guestName:o(this,U).guestName,forceRecreate:o(this,U).forceRecreate}).then(n=>new we(n,o(this,U)))}}U=new WeakMap,ut=new WeakSet,xe=function(s){const i=!!o(this,U).shareToken;return dt(s,i)};var it,At,Y,k,I,pt,nt,L,_,V,P,J;class we{constructor(s,i){u(this,_);u(this,it);u(this,At);u(this,Y);u(this,k);u(this,I);u(this,pt);u(this,nt);u(this,L);const{document:n,session:a,lock:r,readOnly:c,content:g,documentState:f}=s.data;d(this,k,n),d(this,I,a),d(this,pt,r),d(this,nt,c),d(this,it,g),d(this,Y,f),d(this,L,i),this.isPublic=!!i.shareToken,this.closed=!1}get session(){return o(this,I)}get document(){return o(this,k)}get docStateVersion(){return o(this,Y)?o(this,k).lastSavedVersion:0}get state(){return{document:{...o(this,k),readOnly:o(this,nt)},session:o(this,I),documentSource:o(this,it)||"",documentState:o(this,Y)}}get isClosed(){return this.closed}sync({version:s}){return v(this,_,P).call(this,v(this,_,J).call(this,"session/".concat(o(this,k).id,"/sync")),{...o(this,_,V),filePath:o(this,L).filePath,baseVersionEtag:o(this,k).baseVersionEtag,version:s})}save({version:s,autosaveContent:i,documentState:n,force:a,manualSave:r}){return v(this,_,P).call(this,v(this,_,J).call(this,"session/".concat(o(this,k).id,"/save")),{...o(this,_,V),filePath:o(this,L).filePath,baseVersionEtag:o(this,k).baseVersionEtag,version:s,autosaveContent:i,documentState:n,force:a,manualSave:r})}push({steps:s,version:i,awareness:n}){return v(this,_,P).call(this,v(this,_,J).call(this,"session/".concat(o(this,k).id,"/push")),{...o(this,_,V),filePath:o(this,L).filePath,baseVersionEtag:o(this,k).baseVersionEtag,steps:s,version:i,awareness:n})}update(s){return v(this,_,P).call(this,v(this,_,J).call(this,"session/".concat(o(this,k).id,"/session")),{...o(this,_,V),guestName:s}).then(({data:i})=>{d(this,I,i)})}uploadAttachment(s){const i=new FormData;i.append("file",s);const n=dt("attachment/upload")+"?documentId="+encodeURIComponent(o(this,k).id)+"&sessionId="+encodeURIComponent(o(this,I).id)+"&sessionToken="+encodeURIComponent(o(this,I).token)+"&shareToken="+encodeURIComponent(o(this,L).shareToken||"");return v(this,_,P).call(this,n,i,{headers:{"Content-Type":"multipart/form-data"}})}insertAttachmentFile(s){return v(this,_,P).call(this,dt("attachment/filepath"),{documentId:o(this,k).id,sessionId:o(this,I).id,sessionToken:o(this,I).token,filePath:s})}close(){return v(this,_,P).call(this,v(this,_,J).call(this,"session/".concat(o(this,k).id,"/close")),o(this,_,V)).then(()=>{this.closed=!0})}setBaseVersionEtag(s){o(this,k).baseVersionEtag=s}}it=new WeakMap,At=new WeakMap,Y=new WeakMap,k=new WeakMap,I=new WeakMap,pt=new WeakMap,nt=new WeakMap,L=new WeakMap,_=new WeakSet,V=function(){return{documentId:o(this,k).id,sessionId:o(this,I).id,sessionToken:o(this,I).token,token:o(this,L).shareToken}},P=function(...s){return this.closed?Promise.reject(new Zs):se.post(...s)},J=function(s){const i=!!o(this,_,V).token;return dt(s,i)};function dt(e,s=!1){const i=ie("/apps/text");return s?"".concat(i,"/public/").concat(e):"".concat(i,"/").concat(e)}const Ht=300,Xs=5e3,ti=5e3,ei=3e4,Ce=6e4,si=5,ii=Ce*1.5;var w,at,Z,T,W,G,j;class ni{constructor(s,i){u(this,w);u(this,at);u(this,Z);u(this,T);u(this,W);u(this,G);u(this,j);d(this,w,s),d(this,at,i),d(this,T,Ht),d(this,W,0),d(this,Z,0)}connect(){if(this.fetcher>0){console.error("Trying to connect, but already connected");return}d(this,j,!1),this.fetcher=setInterval(this._fetchSteps.bind(this),50),document.addEventListener("visibilitychange",this.visibilitychange.bind(this))}async _fetchSteps(){if(o(this,G))return;const s=Date.now();if(!(o(this,Z)>s-o(this,T))){if(!this.fetcher){console.error("No inverval but triggered");return}d(this,G,!0),y.debug("[PollingBackend] Fetching steps",o(this,w).version),await o(this,at).sync({version:o(this,w).version}).then(this._handleResponse.bind(this),this._handleError.bind(this)),d(this,Z,Date.now()),d(this,G,!1)}}_handleResponse({data:s}){const{document:i,sessions:n}=s;if(d(this,W,0),o(this,w).emit("change",{document:i,sessions:n}),o(this,w)._receiveSteps(s),s.steps.length===0){if(o(this,j)||d(this,j,!0),o(this,w).checkIdle())return;const a=Date.now()-ii,r=n.filter(c=>c.lastContact*1e3>a);o(this,w).isReadOnly?this.maximumReadOnlyTimer():r.length<2?this.maximumRefetchTimer():this.increaseRefetchTimer(),o(this,w).emit("stateChange",{initialLoading:!0});return}o(this,j)&&this.resetRefetchTimer()}_handleError(s){!s.response||s.code==="ECONNABORTED"?Lt(this,W)._++>=si?(y.error("[PollingBackend:fetchSteps] Network error when fetching steps, emitting CONNECTION_FAILED"),o(this,w).emit("error",{type:A.CONNECTION_FAILED,data:{}})):y.error("[PollingBackend:fetchSteps] Network error when fetching steps, retry ".concat(o(this,W))):s.response.status===409?(this._handleResponse(s.response),y.error("Conflict during file save, please resolve"),o(this,w).emit("error",{type:A.SAVE_COLLISSION,data:{outsideChange:s.response.data.outsideChange}})):s.response.status===412?(o(this,w).emit("error",{type:A.LOAD_ERROR,data:s.response}),this.disconnect()):s.response.status===403?(o(this,w).emit("error",{type:A.SOURCE_NOT_FOUND,data:{}}),this.disconnect()):s.response.status===404?(o(this,w).emit("error",{type:A.SOURCE_NOT_FOUND,data:{}}),this.disconnect()):s.response.status===503?(this.increaseRefetchTimer(),o(this,w).emit("error",{type:A.CONNECTION_FAILED,data:{}}),y.error("Failed to fetch steps due to unavailable service",{error:s})):(this.disconnect(),o(this,w).emit("error",{type:A.CONNECTION_FAILED,data:{}}),y.error("Failed to fetch steps due to other reason",{error:s}))}disconnect(){clearInterval(this.fetcher),this.fetcher=0,document.removeEventListener("visibilitychange",this.visibilitychange.bind(this))}resetRefetchTimer(){d(this,T,Ht)}increaseRefetchTimer(){d(this,T,Math.min(o(this,T)*2,Xs))}maximumRefetchTimer(){d(this,T,ti)}maximumReadOnlyTimer(){d(this,T,ei)}visibilitychange(){document.visibilityState==="hidden"?d(this,T,Ce):this.resetRefetchTimer()}}w=new WeakMap,at=new WeakMap,Z=new WeakMap,T=new WeakMap,W=new WeakMap,G=new WeakMap,j=new WeakMap;const ai=1440,oi=3e4,mn=60,ri=90,A={SAVE_COLLISSION:0,PUSH_FAILURE:1,LOAD_ERROR:2,CONNECTION_FAILED:3,SOURCE_NOT_FOUND:4,PUSH_FORBIDDEN:5};var F,p;class vn{constructor({baseVersionEtag:s,serialize:i,getDocumentState:n,...a}){u(this,F);u(this,p);return this._bus=Ys(),this.serialize=i,this.getDocumentState=n,this._api=new Gs(a),d(this,p,null),this.stepClientIDs=[],this.lastStepPush=Date.now(),this.version=null,this.baseVersionEtag=s,this.sending=!1,d(this,F,null),this.autosave=ne(this._autosave.bind(this),oi),this}get isReadOnly(){return o(this,p).state.document.readOnly}get guestName(){return o(this,p).session.guestName}async open({fileId:s,initialSession:i}){const n=i?Promise.resolve(new we({data:i},{})):this._api.open({fileId:s,baseVersionEtag:this.baseVersionEtag}).catch(a=>this._emitError(a));d(this,p,await n),o(this,p)&&(this.backend=new ni(this,o(this,p)),this.version=o(this,p).docStateVersion,this.baseVersionEtag=o(this,p).document.baseVersionEtag,this.emit("opened",{...o(this,p).state,version:this.version}),this.emit("loaded",{...o(this,p).state,version:this.version}))}startSync(){this.backend.connect()}syncUp(){this.backend.resetRefetchTimer()}_emitError(s){!s.response||s.code==="ECONNABORTED"?this.emit("error",{type:A.CONNECTION_FAILED,data:{}}):this.emit("error",{type:A.LOAD_ERROR,data:s.response})}updateSession(s){return o(this,p).isPublic?o(this,p).update(s).catch(i=>(y.error("Failed to update the session",{error:i}),Promise.reject(i))):Promise.reject(new Error)}sendSteps(s){if(!o(this,F))return new Promise((i,n)=>{d(this,F,setInterval(()=>{o(this,p)&&!this.sending&&this.sendStepsNow(s).then(i).catch(n)},200))})}sendStepsNow(s){this.sending=!0,clearInterval(o(this,F)),d(this,F,null);const i=s();return i.steps.length>0&&this.emit("stateChange",{dirty:!0}),o(this,p).push(i).then(n=>{this.sending=!1,this.emit("sync",{steps:[],document:o(this,p).document,version:this.version})}).catch(n=>{var c;const{response:a,code:r}=n;throw this.sending=!1,(!a||r==="ECONNABORTED")&&this.emit("error",{type:A.CONNECTION_FAILED,data:{}}),(a==null?void 0:a.status)===412?this.emit("error",{type:A.LOAD_ERROR,data:a}):(a==null?void 0:a.status)===403&&(i.document||(y.error("failed to write to document - not allowed"),this.emit("error",{type:A.PUSH_FORBIDDEN,data:{}})),((c=a.data.document)==null?void 0:c.currentVersion)===this.version&&(this.emit("error",{type:A.PUSH_FAILURE,data:{}}),OC.Notification.showTemporary("Changes could not be sent yet"))),new Error("Failed to apply steps. Retry!",{cause:n})})}_receiveSteps({steps:s,document:i,sessions:n}){const a=[...n.filter(r=>r.lastContact>Math.floor(Date.now()/1e3)-ri).filter(r=>r.lastAwarenessMessage).map(r=>({step:r.lastAwarenessMessage,clientId:r.clientId}))];for(let r=0;r{a.push({step:g,clientID:s[r].sessionId})})}this.lastStepPush=Date.now(),this.emit("sync",{steps:a,document:o(this,p).document,version:this.version})}checkIdle(){return(Date.now()-this.lastStepPush)/1e3/60>ai?(y.debug("[SyncService] Document is idle for ".concat(this.IDLE_TIMEOUT," minutes, suspending connection")),this.emit("idle"),!0):!1}_getContent(){return this.serialize()}async save({force:s=!1,manualSave:i=!0}={}){y.debug("[SyncService] saving",arguments[0]);try{const n=await o(this,p).save({version:this.version,autosaveContent:this._getContent(),documentState:this.getDocumentState(),force:s,manualSave:i});this.emit("stateChange",{dirty:!1}),o(this,p).document.lastSavedVersionTime=Date.now()/1e3,y.debug("[SyncService] saved",n);const{document:a,sessions:r}=n.data;this.emit("save",{document:a,sessions:r}),this.autosave.clear()}catch(n){throw y.error("Failed to save document.",{error:n}),n}}forceSave(){return this.save({force:!0})}_autosave(){return this.save({manualSave:!1}).catch(s=>{y.error("Failed to autosave document.",{error:s})})}async sendRemainingSteps(s){var r;if(s.length===0)return;let i=[];const n=Js(s),a=Qs(s);return(r=this.sendStepsNow(()=>{const c={steps:n,awareness:a,version:this.version};return i=[...s],y.debug("sending final steps ",c),c}))==null?void 0:r.then(()=>{s.splice(0,s.length,...s.filter(c=>!i.includes(c)))},c=>y.error(c))}async close(){var s;if(this.autosave.clear(),(s=this.backend)==null||s.disconnect(),!(!o(this,p)||o(this,p).isClosed))return o(this,p).close().catch(i=>{y.info("Failed to close connection.",{e:i})})}uploadAttachment(s){return o(this,p).uploadAttachment(s)}insertAttachmentFile(s){return o(this,p).insertAttachmentFile(s)}on(s,i){return this._bus.on(s,i),this}off(s,i){return this._bus.off(s,i),this}emit(s,i){this._bus.emit(s,i)}}F=new WeakMap,p=new WeakMap;var xt={exports:{}};(function(e,s){Object.defineProperty(s,"__esModule",{value:!0}),s.default=void 0;function i(b){"@babel/helpers - typeof";return i=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(l){return typeof l}:function(l){return l&&typeof Symbol=="function"&&l.constructor===Symbol&&l!==Symbol.prototype?"symbol":typeof l},i(b)}var n=47,a=46,r=function(b){var l=i(b);if(l!=="string")throw new TypeError("Expected a string, got a ".concat(l))},c=function(b,l){for(var h="",m=0,E=-1,N=0,M,$=0;$<=b.length;++$){if($2){var _t=h.lastIndexOf("/");if(_t!==h.length-1){_t===-1?(h="",m=0):(h=h.slice(0,_t),m=h.length-1-h.lastIndexOf("/")),E=$,N=0;continue}}else if(h.length===2||h.length===1){h="",m=0,E=$,N=0;continue}}l&&(h.length>0?h+="/..":h="..",m=2)}else h.length>0?h+="/"+b.slice(E+1,$):h=b.slice(E+1,$),m=$-E-1;E=$,N=0}else M===a&&N!==-1?++N:N=-1}return h},g=function(b){try{return decodeURIComponent(b)}catch{return b}},f=function(b){r(b);var l=b;if(l.length===0)return".";var h=l.charCodeAt(0)===n,m=l.charCodeAt(l.length-1)===n;return l=g(l),l=c(l,!h),l.length===0&&!h&&(l="."),l.length>0&&m&&(l+="/"),h?"/"+l:l},D=f;s.default=D,e.exports=s.default})(xt,xt.exports);var ci=xt.exports;const li=ts(ci),hi=e=>ae.dispatch("text/setAttachmentList",e),Vt=ae.getters["text/findAttachment"];var ot,X,tt,rt,ct,lt,C,wt,Ct,Et,Ee,St;class _n{constructor({session:s,user:i,shareToken:n,currentDirectory:a,fileId:r}){u(this,C);u(this,ot);u(this,X);u(this,tt);u(this,rt);u(this,ct);u(this,lt);d(this,ot,s),d(this,X,i),d(this,tt,n),d(this,rt,a),d(this,ct,r!=null?r:s.documentId),d(this,lt,v(this,C,wt).call(this))}async resolve(s,i=!0){let n;const a=/^\.attachments\.\d+\//;if(s.match(a)){const r=decodeURIComponent(s.replace(a,"").split("?")[0]);if(await o(this,lt),n=Vt(r),i&&!n&&(await v(this,C,wt).call(this),n=Vt(r)),n)return n}return di(s)?{isImage:!0,name:v(this,C,Ct).call(this,s),previewUrl:s,fullUrl:s}:{isImage:!0,name:v(this,C,Ct).call(this,s),previewUrl:v(this,C,Et).call(this,s),fullUrl:v(this,C,Et).call(this,s)}}}ot=new WeakMap,X=new WeakMap,tt=new WeakMap,rt=new WeakMap,ct=new WeakMap,lt=new WeakMap,C=new WeakSet,wt=async function(){return hi({documentId:o(this,ct),session:o(this,ot),shareToken:o(this,tt)})},Ct=function(s){return s.split("/").pop()},Et=function(s){if(o(this,X)){const r=o(this,X).uid,c=v(this,C,St).call(this,s).split("/").map(encodeURIComponent).join("/");return Xe("dav/files/".concat(r).concat(c))}const i=v(this,C,St).call(this,s).split("/"),n=i.pop(),a=i.join("/");return ie("/s/{token}/download?path={dirname}&files={basename}",{token:o(this,tt),basename:n,dirname:a})},Ee=function(s){return decodeURI(s.split("?")[0])},St=function(s){const i=[o(this,rt),v(this,C,Ee).call(this,s)].join("/");return li(i)};function di(e){return e.startsWith("http://")||e.startsWith("https://")||e.startsWith("data:")}const ui=mt({name:"NcActionButton",components:{NextcloudVueNcActionButton:Mt,Help:We}});var pi=function(){var e=this,s=e._self._c;return e._self._setupProxy,s("NextcloudVueNcActionButton",e._g({attrs:{"close-after-click":"","data-text-action-entry":"formatting-help"},scopedSlots:e._u([{key:"icon",fn:function(){return[s("Help")]},proxy:!0}])},e.$listeners),[e._v(" "+e._s(e.t("text","Formatting help"))+" ")])},mi=[],vi=R(ui,pi,mi,!1,null,null,null,null);const _i=vi.exports,fi=mt({name:"CharacterCount",components:{AlphabeticalVariant:je,NcActionText:ss},mixins:[vt],props:{visible:Boolean},data:()=>({wordCount:0,charCount:0}),computed:{countString(){return"".concat(Ft("text","%n word","%n words",this.wordCount),", ").concat(Ft("text","%n char","%n chars",this.charCount))}},watch:{visible:"refresh"},created(){this.refresh()},methods:{refresh(){this.wordCount=this.$editor.storage.characterCount.words(),this.charCount=this.$editor.storage.characterCount.characters()}}});var gi=function(){var e=this,s=e._self._c;return e._self._setupProxy,s("NcActionText",{attrs:{"data-text-action-entry":"character-count"},scopedSlots:e._u([{key:"icon",fn:function(){return[s("AlphabeticalVariant")]},proxy:!0},{key:"default",fn:function(){return[e._v(" "+e._s(e.countString)+" ")]},proxy:!0}])})},bi=[],yi=R(fi,gi,bi,!1,null,null,null,null);const ki=yi.exports;function xi(){var e;return((e=navigator==null?void 0:navigator.userAgentData)==null?void 0:e.mobile)!==void 0?navigator.userAgentData.mobile:[/Android/i,/webOS/i,/iPhone/i,/iPad/i,/iPod/i,/playbook/i,/silk/i,/BlackBerry/i,/Windows Phone/i].some(s=>navigator.userAgent.match(s))}const wi={name:"HelpModal",components:{NcDialog:is},data(){return{formatted:{bold:!0,italic:!0,strikethrough:!0,heading1:!0,heading6:!0,unorderdList:!0,orderedList:!0,checkList:!0,blockQuote:!0,codeBlock:!0}}},computed:{isFormatted(){return e=>this.formatted[e]},isMobileCached(){return this.isMobilePlatform()}},methods:{toggleFormatted(e){this.formatted[e]=!this.formatted[e]},isMobilePlatform:xi}};var Ci=function(){var e=this,s=e._self._c;return s("NcDialog",{attrs:{size:"normal","data-text-el":"formatting-help",name:e.t("text","Formatting and shortcuts"),"close-on-click-outside":!0},on:{closing:function(i){return e.$emit("close")}}},[s("h2",[e._v(e._s(e.t("text","Formatting and shortcuts")))]),s("p",[e._v(e._s(e.t("text","Speed up your writing with simple shortcuts.")))]),e.isMobileCached?s("p",[e._v(" "+e._s(e.t("text","Just type the Markdown syntax from below."))+" ")]):s("p",[e._v(" "+e._s(e.t("text","Just type the Markdown syntax or use keyboard shortcuts from below."))+" ")]),s("table",[s("thead",[s("tr",[s("th",[e._v(e._s(e.t("text","Style")))]),s("th",[e._v(e._s(e.t("text","Syntax")))]),e.isMobileCached?e._e():s("th",[e._v(" "+e._s(e.t("text","Keyboard shortcuts"))+" ")])])]),s("tbody",[s("tr",[s("td",[e._v(e._s(e.t("text","New paragraph")))]),s("td",[s("kbd",[e._v(e._s(e.t("text","Enter")))])]),e.isMobileCached?e._e():s("td")]),s("tr",[s("td",[e._v(e._s(e.t("text","Hard line break")))]),s("td",[s("kbd",[e._v(e._s(e.t("text","Enter")))]),e._v(" "+e._s(e.t("text","followed by"))+" "),s("kbd",[e._v(e._s(e.t("text","Backspace")))])]),e.isMobileCached?e._e():s("td",[s("kbd",[e._v(e._s(e.t("text","Shift")))]),e._v(" + "),s("kbd",[e._v(e._s(e.t("text","Enter")))])])]),s("tr",[s("td",[e._v(e._s(e.t("text","Bold")))]),s("td",[s("code",[e._v("**"+e._s(e.t("text","Bold text"))+"**")])]),e.isMobileCached?e._e():s("td",[s("kbd",[e._v(e._s(e.t("text","Ctrl")))]),e._v(" + "),s("kbd",[e._v("B")])])]),s("tr",[s("td",[e._v(e._s(e.t("text","Italic")))]),s("td",[s("code",[e._v("*"+e._s(e.t("text","Italicized text"))+"*")])]),e.isMobileCached?e._e():s("td",[s("kbd",[e._v(e._s(e.t("text","Ctrl")))]),e._v(" + "),s("kbd",[e._v("I")])])]),s("tr",[s("td",[e._v(e._s(e.t("text","Strikethrough")))]),s("td",[s("code",[e._v("~~"+e._s(e.t("text","Mistaken text"))+"~~")])]),e.isMobileCached?e._e():s("td",[s("kbd",[e._v(e._s(e.t("text","Ctrl")))]),e._v(" + "),s("kbd",[e._v(e._s(e.t("text","Shift")))]),e._v(" + "),s("kbd",[e._v("S")])])]),s("tr",[s("td",[e._v(e._s(e.t("text","Underline")))]),s("td",[s("code",[e._v("__"+e._s(e.t("text","Underlined text"))+"__")])]),e.isMobileCached?e._e():s("td",[s("kbd",[e._v(e._s(e.t("text","Ctrl")))]),e._v(" + "),s("kbd",[e._v("U")])])]),s("tr",[s("td",{staticClass:"ellipsis_top"},[e._v(" "+e._s(e.t("text","Heading 1"))+" ")]),s("td",{staticClass:"ellipsis_top"},[s("code",[e._v("# "+e._s(e.t("text","Heading level 1")))])]),e.isMobileCached?e._e():s("td",{staticClass:"ellipsis_top"},[s("kbd",[e._v(e._s(e.t("text","Ctrl")))]),e._v(" + "),s("kbd",[e._v(e._s(e.t("text","Shift")))]),e._v(" + "),s("kbd",[e._v("1")])])]),s("tr",[s("td",{staticClass:"noborder ellipsis"},[e._v(" … ")]),s("td",{staticClass:"noborder ellipsis"},[e._v(" … ")]),e.isMobileCached?e._e():s("td",{staticClass:"ellipsis noborder"},[e._v(" … ")])]),s("tr",[s("td",{staticClass:"noborder ellipsis_bottom"},[e._v(" "+e._s(e.t("text","Heading 6"))+" ")]),s("td",{staticClass:"noborder ellipsis_bottom"},[s("code",[e._v("###### "+e._s(e.t("text","Heading level 6")))])]),e.isMobileCached?e._e():s("td",{staticClass:"noborder ellipsis_bottom"},[s("kbd",[e._v(e._s(e.t("text","Ctrl")))]),e._v(" + "),s("kbd",[e._v(e._s(e.t("text","Shift")))]),e._v(" + "),s("kbd",[e._v("6")])])]),s("tr",[s("td",[e._v(e._s(e.t("text","Unordered list")))]),s("td",[s("code",[e._v("* "+e._s(e.t("text","An item")))])]),e.isMobileCached?e._e():s("td",[s("kbd",[e._v(e._s(e.t("text","Ctrl")))]),e._v(" + "),s("kbd",[e._v(e._s(e.t("text","Shift")))]),e._v(" + "),s("kbd",[e._v("8")])])]),s("tr",[s("td",[e._v(e._s(e.t("text","Ordered list")))]),s("td",[s("code",[e._v("1. "+e._s(e.t("text","First item")))])]),e.isMobileCached?e._e():s("td",[s("kbd",[e._v(e._s(e.t("text","Ctrl")))]),e._v(" + "),s("kbd",[e._v(e._s(e.t("text","Shift")))]),e._v(" + "),s("kbd",[e._v("7")])])]),s("tr",[s("td",[e._v(e._s(e.t("text","Checklist")))]),s("td",[s("code",[e._v("* [] "+e._s(e.t("text","To-Do item")))])]),e.isMobileCached?e._e():s("td")]),s("tr",[s("td",[e._v(e._s(e.t("text","Blockquote")))]),s("td",[s("code",[e._v("> "+e._s(e.t("text","Quoted text")))])]),e.isMobileCached?e._e():s("td",[s("kbd",[e._v(e._s(e.t("text","Ctrl")))]),e._v(" + "),s("kbd",[e._v(">")])])]),s("tr",[s("td",[e._v(e._s(e.t("text","Code block")))]),s("td",[s("code",[e._v("``` "+e._s(e.t("text","Some code")))])]),e.isMobileCached?e._e():s("td")]),s("tr",[s("td",[e._v(e._s(e.t("text","Link")))]),s("td",[s("code",[e._v("[Title](https://example.org)")])]),e.isMobileCached?e._e():s("td")]),s("tr",[s("td",[e._v(e._s(e.t("text","Insert emoji")))]),s("td",[s("code",[e._v(":"+e._s(e.t("text","emoji")))])]),e.isMobileCached?e._e():s("td")]),s("tr",[s("td",[e._v(e._s(e.t("text","Mention someone")))]),s("td",[s("code",[e._v("@"+e._s(e.t("text","name")))])]),e.isMobileCached?e._e():s("td")]),s("tr",[s("td",[e._v(e._s(e.t("text","Smart picker")))]),s("td",[s("code",[e._v("/"+e._s(e.t("text","something")))])]),e.isMobileCached?e._e():s("td")])])]),s("table",{attrs:{vif:"!isMobileCached"}},[s("thead",[s("tr",[s("th",[e._v(e._s(e.t("text","Action")))]),s("th",[e._v(e._s(e.t("text","Keyboard shortcuts")))])])]),s("tbody",[s("tr",[s("td",[e._v(e._s(e.t("text","Undo")))]),s("td",[s("kbd",[e._v(e._s(e.t("text","Ctrl")))]),e._v(" + "),s("kbd",[e._v("Z")])])]),s("tr",[s("td",[e._v(e._s(e.t("text","Redo")))]),s("td",[s("kbd",[e._v(e._s(e.t("text","Ctrl")))]),e._v(" + "),s("kbd",[e._v("Y")])])]),s("tr",[s("td",[e._v(e._s(e.t("text","Toggle outline")))]),s("td",[s("kbd",[e._v(e._s(e.t("text","Ctrl")))]),e._v(" + "),s("kbd",[e._v(e._s(e.t("text","Alt")))]),e._v(" + "),s("kbd",[e._v("H")])])])])])])},Ei=[],Si=R(wi,Ci,Ei,!1,null,"bdf077d8",null,null);const Ai=Si.exports,Ii={name:"MenuBar",components:{ActionFormattingHelp:_i,ActionList:le,ActionSingle:he,HelpModal:Ai,NcActionSeparator:Qt,NcActionButton:Mt,CharacterCount:ki,TranslateVariant:Ke},extends:de,mixins:[vt,ls,re,ce],provide(){const e={};return Object.defineProperties(e,{[Qe]:{get:()=>this.randomID}}),e},props:{isHidden:{type:Boolean,default:!1}},setup(){const e=Se(),{width:s}=os(e);return{menubar:e,width:s}},data(){return{entries:[...ze],randomID:"menu-bar-".concat(Math.ceil(Math.random()*1e4+500).toString(16)),displayHelp:!1,isReady:!1,canTranslate:cs("text","translation_languages",[]).length>0,resize:null}},computed:{visibleEntries(){return this.entries.filter(({priority:e})=>e===void 0||e<=this.iconsLimit)},hiddenEntries(){const e=this.entries.filter(({priority:i})=>i!==void 0&&i>this.iconsLimit),s=e.reduce((i,n,a)=>{var c;const r=(c=n.children)!=null?c:[n];if(r.length>1){const g=i.length&&!i.at(-1).isSeparator?[{key:"separator-before-".concat(n.id),isSeparator:!0}]:[],f=a!==e.length-1?[{key:"separator-after-".concat(n.id),isSeparator:!0}]:[];return[...i,...g,...r,...f]}return[...i,...r]},[]);return{key:"remain",label:this.t("text","Remaining actions"),icon:Je,children:s}},iconWidth(){var s;const e=(s=this.menubar&&getComputedStyle(this.menubar))==null?void 0:s.getPropertyValue("--default-clickable-area");return parseInt(e)||34},iconsLimit(){const e=this.width-4,s=this.$isMobile?this.iconWidth:this.iconWidth+2;return Math.floor(e/s)-1}},mounted(){this.$nextTick(()=>{this.isReady=!0,this.$emit("update:loaded",!0)})},methods:{showHelp(){this.displayHelp=!0},hideHelp(){this.displayHelp=!1},showTranslate(){const{from:e,to:s}=this.$editor.view.state.selection;let i=this.$editor.view.state.doc.textBetween(e,s," ");i.trim().length||(this.$editor.commands.selectAll(),i=this.$editor.view.state.doc.textContent),console.debug("translation click",this.$editor.view.state.selection,i),oe("text:translate-modal:show",{content:i})}}};var Oi=function(){var e=this,s=e._self._c;return s("div",{staticClass:"text-menubar",class:{"text-menubar--ready":e.isReady,"text-menubar--hide":e.isHidden,"text-menubar--is-workspace":e.$isRichWorkspace},attrs:{id:e.randomID,"data-text-el":"menubar",role:"region","aria-label":e.t("text","Editor actions")}},[e.displayHelp?s("HelpModal",{on:{close:e.hideHelp}}):e._e(),e.$isRichEditor?s("div",{ref:"menubar",staticClass:"text-menubar__entries",attrs:{role:"toolbar","aria-label":e.t("text","Formatting menu bar")},on:{keydown:[function(i){return!i.type.indexOf("key")&&e._k(i.keyCode,"left",37,i.key,["Left","ArrowLeft"])||"button"in i&&i.button!==0?null:(i.stopPropagation(),e.handleToolbarNavigation.apply(null,arguments))},function(i){return!i.type.indexOf("key")&&e._k(i.keyCode,"right",39,i.key,["Right","ArrowRight"])||"button"in i&&i.button!==2?null:(i.stopPropagation(),e.handleToolbarNavigation.apply(null,arguments))}]}},[e._l(e.visibleEntries,function(i,n){return s(i.component?i.component:i.children?"ActionList":"ActionSingle",{key:i.key,ref:"menuEntries",refInFor:!0,tag:"component",attrs:{"action-entry":i,"can-be-focussed":e.activeMenuEntry===n},on:{disabled:function(a){return e.disableMenuEntry(i.key,a)},click:function(a){e.activeMenuEntry=n}}})}),s("ActionList",{ref:"remainingEntries",attrs:{"action-entry":e.hiddenEntries,"can-be-focussed":e.activeMenuEntry===e.visibleEntries.length,"force-enabled":!0},on:{click:function(i){e.activeMenuEntry="remain"}},scopedSlots:e._u([{key:"lastAction",fn:function({visible:i}){return[e.canTranslate?s("NcActionButton",{attrs:{"close-after-click":""},on:{click:e.showTranslate},scopedSlots:e._u([{key:"icon",fn:function(){return[s("TranslateVariant")]},proxy:!0}],null,!0)},[e._v(" "+e._s(e.t("text","Translate"))+" ")]):e._e(),s("ActionFormattingHelp",{on:{click:e.showHelp}}),s("NcActionSeparator"),s("CharacterCount",e._b({},"CharacterCount",{visible:i},!1))]}}],null,!1,2316723924)})],2):e._e(),s("div",{staticClass:"text-menubar__slot"},[e._t("default")],2)],1)},Ni=[],Mi=R(Ii,Oi,Ni,!1,null,"adb1028b",null,null);const fn=Mi.exports,$i={name:"ContentContainer",components:{EditorContent:qe,EditorOutline:Ye},mixins:[vt,Yt],computed:{showOutline(){return this.$outlineState.visible}}};var Ri=function(){var e=this,s=e._self._c;return s("div",{staticClass:"content-wrapper text-editor__content-wrapper",class:{"--show-outline":e.showOutline},attrs:{"data-text-el":"editor-content-wrapper"}},[e.showOutline?s("div",{staticClass:"text-editor__content-wrapper__left"},[s("EditorOutline")],1):e._e(),e._t("default"),s("EditorContent",{staticClass:"editor__content text-editor__content",attrs:{role:"document",editor:e.$editor}}),s("div",{staticClass:"text-editor__content-wrapper__right"})],2)},Ti=[],Di=R($i,Ri,Ti,!1,null,"a3b97a85",null,null);const gn=Di.exports,Wt=e=>e.split("/").slice(0,-1).join("/"),Ui={name:"MediaHandler",mixins:[vt,hs,ds],provide(){const e={};return Object.defineProperties(e,{[us]:{get:()=>this.showAttachmentPrompt},[ps]:{get:()=>this.chooseLocalFile},[ms]:{get:()=>this.state}}),e},data(){return{lastFilePath:null,draggedOver:!1,state:{isUploadingAttachments:!1}}},computed:{initialFilePath(){var e,s,i;return(i=this.lastFilePath)!=null?i:Wt((s=(e=this.$file)==null?void 0:e.relativePath)!=null?s:"/")}},methods:{setDraggedOver(e){this.draggedOver=e},onPaste(e){this.uploadAttachmentFiles(e.detail.files)},onEditorDrop(e){this.uploadAttachmentFiles(e.detail.files,e.detail.position),this.draggedOver=!1},onAttachmentUploadFilePicked(e){this.uploadAttachmentFiles(e.target.files),e.target.value=""},chooseLocalFile(){this.$refs.attachmentFileInput.click()},async uploadAttachmentFiles(e,s=null){if(!e)return;this.state.isUploadingAttachments=!0;const i=[...e].map(n=>this.uploadAttachmentFile(n,s));return Promise.all(i).catch(n=>{var a,r;y.error("Uploading multiple images failed",{error:n}),gt(((r=(a=n==null?void 0:n.response)==null?void 0:a.data)==null?void 0:r.error)||n.message)}).then(()=>{this.state.isUploadingAttachments=!1})},async uploadAttachmentFile(e,s=null){return this.state.isUploadingAttachments=!0,this.$syncService.uploadAttachment(e).then(i=>{var n,a,r;this.insertAttachment((n=i.data)==null?void 0:n.name,(a=i.data)==null?void 0:a.id,e.type,s,(r=i.data)==null?void 0:r.dirname)}).catch(i=>{var n,a;y.error("Uploading image failed",{error:i}),gt((a=(n=i==null?void 0:i.response)==null?void 0:n.data)==null?void 0:a.error)}).then(()=>{this.state.isUploadingAttachments=!1})},showAttachmentPrompt(){rs()&&OC.dialogs.filepicker(t("text","Insert an attachment"),e=>{this.insertFromPath(e)},!1,[],!0,void 0,this.initialFilePath)},insertFromPath(e){return this.lastFilePath=Wt(e),this.state.isUploadingAttachments=!0,this.$syncService.insertAttachmentFile(e).then(s=>{var i,n,a,r;this.insertAttachment((i=s.data)==null?void 0:i.name,(n=s.data)==null?void 0:n.id,(a=s.data)==null?void 0:a.mimetype,null,(r=s.data)==null?void 0:r.dirname)}).catch(s=>{var i,n;y.error("Failed to insert image path",{error:s}),gt(((n=(i=s==null?void 0:s.response)==null?void 0:i.data)==null?void 0:n.error)||s.message)}).then(()=>{this.state.isUploadingAttachments=!1})},insertAttachment(e,s,i,n=null,a=""){const r=a+"/"+encodeURIComponent(e).replace(/[!'()*]/g,f=>"%"+f.charCodeAt(0).toString(16).toUpperCase()),c=e.replaceAll(/[[\]]/g,"");(n?this.$editor.chain().focus(n):this.$editor.chain()).setImage({src:r,alt:c}).run();const g=this.$editor.view.state.selection;g.empty||this.$editor.commands.focus(g.to),this.$editor.commands.scrollIntoView(),oe("text:image-node:add",null)}}};var Li=function(){var e=this,s=e._self._c;return s("div",{staticClass:"editor editor-media-handler",class:{draggedOver:e.draggedOver},attrs:{"data-text-el":"editor-media-handler"},on:{"image-paste":e.onPaste,dragover:function(i){return i.preventDefault(),i.stopPropagation(),e.setDraggedOver(!0)},dragleave:function(i){return i.preventDefault(),i.stopPropagation(),e.setDraggedOver(!1)},"file-drop":e.onEditorDrop}},[s("input",{directives:[{name:"show",rawName:"v-show",value:!1,expression:"false"}],ref:"attachmentFileInput",attrs:{"data-text-el":"attachment-file-input",type:"file",accept:"*/*",multiple:""},on:{change:e.onAttachmentUploadFilePicked}}),e._t("default")],2)},Pi=[],Fi=R(Ui,Li,Pi,!1,null,null,null,null);const Bi=Fi.exports,Hi={name:"MainContainer",components:{MediaHandler:Bi},mixins:[vs]};var Vi=function(){var e=this,s=e._self._c;return s("div",{staticClass:"editor"},[e.$editorUpload?s("MediaHandler",{staticClass:"text-editor__main"},[e._t("default")],2):e._t("default")],2)},Wi=[],ji=R(Hi,Vi,Wi,!1,null,"f2d30048",null,null);const bn=ji.exports,Ki={name:"Wrapper",mixins:[qt,re,ce],provide(){const e={};return Object.defineProperties(e,{[Ze]:{get:()=>this.outline},[Ge]:{get:()=>({toggle:this.outlineToggle})}}),e},props:{syncError:{type:Object,default:null},hasConnectionIssue:{type:Boolean,default:!1},contentLoaded:{type:Boolean,default:!0},showOutlineOutside:{type:Boolean,default:!1}},data:()=>({outline:{visible:!1,enable:!1}}),computed:{...es({viewWidth:e=>e.text.viewWidth}),hasSyncCollission(){return this.syncError&&this.syncError.type===A.SAVE_COLLISSION},showOutline(){return this.isAbleToShowOutline?this.outline.visible:!1},isAbleToShowOutline(){return this.$isRichWorkspace?!1:this.viewWidth>1265}},watch:{showOutlineOutside(){this.outline.visible=this.showOutlineOutside}},mounted(){this.outline.enable=this.isAbleToShowOutline,this.$watch(()=>this.isAbleToShowOutline,e=>{Object.assign(this.outline,{enable:e})}),document.addEventListener("keydown",this.handleKeyDown)},beforeDestroy(){document.removeEventListener("keydown",this.handleKeyDown)},methods:{outlineToggle(){this.outline.visible=!this.outline.visible,this.$emit("outline-toggled",this.outline.visible)},handleKeyDown(e){e.ctrlKey&&e.altKey&&e.key==="h"&&this.outlineToggle()}}};var zi=function(){var e=this,s=e._self._c;return s("div",{staticClass:"text-editor__wrapper",class:{"has-conflicts":e.hasSyncCollission,"is-rich-workspace":e.$isRichWorkspace,"is-rich-editor":e.$isRichEditor}},[e._t("default")],2)},Ji=[],Qi=R(Ki,zi,Ji,!1,null,"b579724b",null,null);const yn=Qi.exports;export{_n as A,gn as C,A as E,ai as I,bn as M,ln as R,vn as S,hn as W,Qs as a,yn as b,fn as c,ue as d,dn as e,un as f,Js as g,pn as h,ri as i,mn as j}; +var Ut=e=>{throw TypeError(e)};var ft=(e,s,i)=>s.has(e)||Ut("Cannot "+i);var o=(e,s,i)=>(ft(e,s,"read from private field"),i?i.call(e):s.get(e)),u=(e,s,i)=>s.has(e)?Ut("Cannot add the same private member more than once"):s instanceof WeakSet?s.add(e):s.set(e,i),d=(e,s,i,n)=>(ft(e,s,"write to private field"),n?n.call(e,i):s.set(e,i),i),v=(e,s,i)=>(ft(e,s,"access private method"),i);var Lt=(e,s,i,n)=>({set _(a){d(e,s,a,i)},get _(){return o(e,s,n)}});import{d as mt,r as Se}from"./vue.runtime.esm.chunk.mjs";import{O as jt,A as Ae,B as K,G as Kt,H as x,J as Ie,K as S,L as O,Q,V as zt,W as Jt,X as It,t as Qt,Z as qt,_ as Yt,$ as Oe,a0 as Ne,a1 as Me,a2 as $e,a3 as Zt,a4 as Gt,a5 as Xt,a6 as H,j as Ot,a7 as Nt,k as te,a8 as Re,a9 as Te,aa as De,ab as Ue,ac as Le,ad as Pe,ae as Fe,af as ee,ag as Pt,ah as Be,ai as He,aj as Ve,ak as We,al as je,am as Ke,an as ze,ao as Je,ap as Qe,aq as qe,ar as Ye,as as Ze,at as Ge}from"./RichText.chunk.mjs";import{n as R}from"./_plugin-vue2_normalizer.chunk.mjs";import{c as se,_ as ie,U as Xe}from"./index.chunk3.mjs";import{g as ts}from"./emoji-picker.chunk.mjs";import{d as ne,s as ae,m as es}from"./index.chunk.mjs";import{N as Mt,f as ss,d as Ft,g as is}from"./NcUserBubble-DMjZyrGY.chunk.mjs";import{b as ns,N as as,u as os,s as gt}from"./NcNoteCard-BLPU1den.chunk.mjs";import{p as ht,e as oe,l as rs}from"./modulepreload-polyfill.chunk.mjs";import{l as cs}from"./index.chunk4.mjs";import{u as vt,e as ls,c as re,g as ce,h as hs,d as ds,A as us,m as ps,n as ms,o as vs}from"./MediaHandler.provider.chunk.mjs";import{l as y}from"./logger.chunk.mjs";const bt=3e4;class _s extends jt{constructor(s){super(),this.doc=s,this.clientID=s.clientID,this.states=new Map,this.meta=new Map,this._checkInterval=setInterval(()=>{const i=K();this.getLocalState()!==null&&bt/2<=i-this.meta.get(this.clientID).lastUpdated&&this.setLocalState(this.getLocalState());const n=[];this.meta.forEach((a,r)=>{r!==this.clientID&&bt<=i-a.lastUpdated&&this.states.has(r)&&n.push(r)}),n.length>0&&$t(this,n,"timeout")},Ae(bt/10)),s.on("destroy",()=>{this.destroy()}),this.setLocalState({})}destroy(){this.emit("destroy",[this]),this.setLocalState(null),super.destroy(),clearInterval(this._checkInterval)}getLocalState(){return this.states.get(this.clientID)||null}setLocalState(s){const i=this.clientID,n=this.meta.get(i),a=n===void 0?0:n.clock+1,r=this.states.get(i);s===null?this.states.delete(i):this.states.set(i,s),this.meta.set(i,{clock:a,lastUpdated:K()});const c=[],g=[],f=[],D=[];s===null?D.push(i):r==null?s!=null&&c.push(i):(g.push(i),Kt(r,s)||f.push(i)),(c.length>0||f.length>0||D.length>0)&&this.emit("change",[{added:c,updated:f,removed:D},"local"]),this.emit("update",[{added:c,updated:g,removed:D},"local"])}setLocalStateField(s,i){const n=this.getLocalState();n!==null&&this.setLocalState({...n,[s]:i})}getStates(){return this.states}}const $t=(e,s,i)=>{const n=[];for(let a=0;a0&&(e.emit("change",[{added:[],updated:[],removed:n},i]),e.emit("update",[{added:[],updated:[],removed:n},i]))},st=(e,s,i=e.states)=>{const n=s.length,a=O();x(a,n);for(let r=0;r{const n=Jt(s),a=K(),r=[],c=[],g=[],f=[],D=Q(n);for(let b=0;b0||g.length>0||f.length>0)&&e.emit("change",[{added:r,updated:g,removed:f},i]),(r.length>0||c.length>0||f.length>0)&&e.emit("update",[{added:r,updated:c,removed:f},i])},gs={name:"NcActionButton",components:{NextcloudVueNcActionButton:Mt},extends:It,mounted(){this.$editor.on("transaction",()=>this.updateState())},methods:{runAction(){var s;const{actionEntry:e}=this;e.click?e.click(this):(s=e.action(this.$editor.chain().focus()))==null||s.run(),this.$nextTick(()=>{this.$emit("trigged",{...e})})}}};var bs=function(){var e=this,s=e._self._c;return s("NextcloudVueNcActionButton",e._g({staticClass:"entry-single-action entry-action entry-action-item",class:e.state.class,attrs:{disabled:e.state.disabled,"aria-keyshortcuts":e.keyshortcuts||void 0,"data-text-action-entry":e.actionEntry.key,type:e.state.type,"model-value":e.state.type!=="button"?e.state.active:void 0,"close-after-click":""},on:{click:e.runAction},scopedSlots:e._u([{key:"icon",fn:function(){return[s(e.icon,{tag:"component"})]},proxy:!0}])},e.$listeners),[e._v(" "+e._s(e.label)+" ")])},ys=[],ks=R(gs,bs,ys,!1,null,null,null,null);const xs=ks.exports,ws={name:"ActionList",components:{NcActions:ns,NcActionSeparator:Qt,ActionListItem:xs},extends:It,mixins:[qt,Yt,Oe],props:{forceEnabled:{type:Boolean,default:!1}},data:()=>({visible:!1,hasEnabledChild:!0}),computed:{currentChild(){const{state:e,$editor:s,actionEntry:{children:i}}=this;return e.active?i.find(n=>Ne(n,s)):null},icon(){return this.currentChild?this.currentChild.icon:this.actionEntry.icon},iconKey(){return"".concat(this.actionEntry.key,"/").concat(this.activeKey)},activeKey(){var e;return(e=this.currentChild)==null?void 0:e.key},children(){return this.actionEntry.children.filter(({visible:e})=>e===void 0?!0:typeof e=="function"?e(this):e)},labelWithSelected(){return this.currentChild?t("text",'{menuItemName}, "{selectedSubMenuItemName}" is selected',{menuItemName:this.actionEntry.label,selectedSubMenuItemName:this.currentChild.label}):this.actionEntry.label},isEnabled(){return this.forceEnabled||this.hasEnabledChild}},mounted(){this.$_updateState=ne(this.checkStateOfChildren.bind(this),50),this.$editor.on("update",this.$_updateState),this.$editor.on("selectionUpdate",this.$_updateState)},beforeDestroy(){this.$editor.off("update",this.$_updateState),this.$editor.off("selectionUpdate",this.$_updateState)},methods:{onOpenChange(e){this.visible=e},runAction(){},onTrigger(e){e!=null&&e.click||(this.$editor.chain().focus().run(),this.$emit("trigged",e))},checkStateOfChildren(){this.hasEnabledChild=this.children.some(e=>this.isChildEnabled(e))},isChildEnabled(e){return!e.isSeparator&&!Me(e,this.$editor).disabled}}};var Cs=function(){var e=this,s=e._self._c;return s("NcActions",e._b({staticClass:"entry-list-action entry-action",attrs:{title:e.tooltip,container:e.menuIDSelector,"aria-label":e.labelWithSelected,type:e.state.active?"primary":"tertiary","force-menu":!0,"data-text-action-entry":e.actionEntry.key,"data-text-action-active":e.activeKey,disabled:!e.isEnabled},on:{"update:open":e.onOpenChange},scopedSlots:e._u([{key:"icon",fn:function(){return[s(e.icon,{key:e.iconKey,tag:"component"})]},proxy:!0}])},"NcActions",e.state,!1),[e._l(e.children,function(i){var n;return[i.isSeparator?s("NcActionSeparator",{key:"child-".concat(i.key)}):s("ActionListItem",e._g({key:"child-".concat(i.key),attrs:{active:((n=e.currentChild)==null?void 0:n.key)===i.key,"is-item":"","action-entry":i},on:{trigged:e.onTrigger}},e.$listeners))]}),e._t("lastAction",null,null,{visible:e.visible})],2)},Es=[],Ss=R(ws,Cs,Es,!1,null,null,null,null);const le=Ss.exports,As={name:"ActionSingle",components:{NcButton:as},extends:It,props:{isItem:{type:Boolean,default:!1}},mounted(){this.$editor.on("transaction",()=>this.updateState())},methods:{runAction(){var s;const{actionEntry:e}=this;e.click?e.click(this):(s=e.action(this.$editor.chain().focus()))==null||s.run(),this.$nextTick(()=>{this.$emit("trigged",{...e})})}}};var Is=function(){var e=this,s=e._self._c;return s("NcButton",e._g({staticClass:"entry-single-action entry-action",class:e.state.class,attrs:{disabled:e.state.disabled,"aria-keyshortcuts":e.keyshortcuts||void 0,"data-text-action-entry":e.actionEntry.key,"aria-label":e.label,title:e.tooltip,type:"tertiary",pressed:e.state.type!=="button"?e.state.active:void 0},on:{click:e.runAction},scopedSlots:e._u([{key:"icon",fn:function(){return[s(e.icon,{tag:"component"})]},proxy:!0},e.actionEntry.forceLabel?{key:"default",fn:function(){return[e._v(" "+e._s(e.label)+" ")]},proxy:!0}:null],null,!0)},e.$listeners))},Os=[],Ns=R(As,Is,Os,!1,null,null,null,null);const he=Ns.exports,de=mt({data(){return{activeMenuEntry:0,entries:[]}},computed:{visibleEntries(){return this.entries}},watch:{visibleEntries(){this.$nextTick(()=>{var e;(this.activeMenuEntry>this.visibleEntries.length||(e=this.visibleEntries[this.activeMenuEntry])!=null&&e.disabled)&&this.setNextMenuEntry()})}},methods:{disableMenuEntry(e,s){const i=this.visibleEntries.findIndex(({key:n})=>n===e);this.visibleEntries[i].disabled=s,s===!1&&this.activeMenuEntry===i&&this.$nextTick(()=>this.setNextMenuEntry())},setNextMenuEntry(){const e=this.visibleEntries.length+(this.$refs.remainingEntries?1:0);do this.activeMenuEntry=(this.activeMenuEntry+1)%e;while(this.activeMenuEntrythis.visibleEntries.findIndex(({key:r})=>r===n.$vnode.data.key)-this.visibleEntries.findIndex(({key:r})=>r===a.$vnode.data.key))[this.activeMenuEntry].focusButton()}}}),Ms=mt({name:"ReadonlyBar",components:{ActionList:le,ActionSingle:he},extends:de,data(){return{entries:$e}}});var $s=function(){var e=this,s=e._self._c;return e._self._setupProxy,s("div",{staticClass:"text-readonly-bar",attrs:{"data-text-el":"readonly-bar"}},[s("div",{ref:"menubar",staticClass:"text-readonly-bar__entries",attrs:{role:"toolbar","aria-label":e.t("text","Editor actions")}},e._l(e.visibleEntries,function(i,n){return s(i.component?i.component:i.children?"ActionList":"ActionSingle",{key:i.key,ref:"menuEntries",refInFor:!0,tag:"component",attrs:{"action-entry":i,"can-be-focussed":e.activeMenuEntry===n},on:{disabled:function(a){return e.disableMenuEntry(i.key,a)}}})}),1),s("div",{staticClass:"text-menubar__slot"},[e._t("default")],2)])},Rs=[],Ts=R(Ms,$s,Rs,!1,null,"c35c5130",null,null);const ln=Ts.exports;function Rt(e){const s=new Uint8Array(e);return Zt(s)}function ue(e){return Gt(e)}const pe=0,Tt=1,me=2,kt=(e,s)=>{x(e,pe);const i=Xt(s);H(e,i)},ve=(e,s,i)=>{x(e,Tt),H(e,Ot(s,i))},Ds=(e,s,i)=>ve(s,i,Nt(e)),_e=(e,s,i)=>{try{te(s,Nt(e),i)}catch(n){console.error("Caught error while handling a Yjs update",n)}},fe=(e,s)=>{x(e,me),H(e,s)},Us=_e,Ls=(e,s,i,n)=>{const a=Q(e);switch(a){case pe:Ds(e,s,i);break;case Tt:_e(e,i,n);break;case me:Us(e,i,n);break;default:throw new Error("Unknown message type")}return a},ge=new Map;class Ps{constructor(s){this.room=s,this.onmessage=null,this._onChange=i=>i.key===s&&this.onmessage!==null&&this.onmessage({data:Gt(i.newValue||"")}),De(this._onChange)}postMessage(s){Ue.setItem(this.room,Zt(Le(s)))}close(){Pe(this._onChange)}}const Fs=typeof BroadcastChannel>"u"?Ps:BroadcastChannel,Dt=e=>Re(ge,e,()=>{const s=Te(),i=new Fs(e);return i.onmessage=n=>s.forEach(a=>a(n.data,"broadcastchannel")),{bc:i,subs:s}}),Bs=(e,s)=>(Dt(e).subs.add(s),s),Hs=(e,s)=>{const i=Dt(e),n=i.subs.delete(s);return n&&i.subs.size===0&&(i.bc.close(),ge.delete(e)),n},z=(e,s,i=null)=>{const n=Dt(e);n.bc.postMessage(s),n.subs.forEach(a=>a(s,i))},Vs=0,Ws=(e,s,i)=>{switch(Q(e)){case Vs:i(s,zt(e))}},js=e=>Fe(e,(s,i)=>"".concat(encodeURIComponent(i),"=").concat(encodeURIComponent(s))).join("&"),B=0,be=3,q=1,Ks=2,et=[];et[B]=(e,s,i,n,a)=>{x(e,B);const r=Ls(s,e,i.doc,i);n&&r===Tt&&!i.synced&&(i.synced=!0)},et[be]=(e,s,i,n,a)=>{x(e,q),H(e,st(i.awareness,Array.from(i.awareness.getStates().keys())))},et[q]=(e,s,i,n,a)=>{fs(i.awareness,Nt(s),i)},et[Ks]=(e,s,i,n,a)=>{Ws(s,i.doc,(r,c)=>zs(i,c))};const Bt=3e4,zs=(e,s)=>console.warn("Permission denied to access ".concat(e.url,".\n").concat(s)),ye=(e,s,i)=>{const n=Jt(s),a=O(),r=Q(n),c=e.messageHandlers[r];return c?c(a,n,e,i,r):console.error("Unable to compute message"),a},ke=e=>{if(e.shouldConnect&&e.ws===null){const s=new e._WS(e.url);s.binaryType="arraybuffer",e.ws=s,e.wsconnecting=!0,e.wsconnected=!1,e.synced=!1,s.onmessage=i=>{e.wsLastMessageReceived=K();const n=ye(e,new Uint8Array(i.data),!0);ee(n)>1&&s.send(S(n))},s.onerror=i=>{e.emit("connection-error",[i,e])},s.onclose=i=>{e.emit("connection-close",[i,e]),e.ws=null,e.wsconnecting=!1,e.wsconnected?(e.wsconnected=!1,e.synced=!1,$t(e.awareness,Array.from(e.awareness.getStates().keys()).filter(n=>n!==e.doc.clientID),e),e.emit("status",[{status:"disconnected"}])):e.wsUnsuccessfulReconnects++,setTimeout(ke,Be(He(2,e.wsUnsuccessfulReconnects)*100,e.maxBackoffTime),e)},s.onopen=()=>{e.wsLastMessageReceived=K(),e.wsconnecting=!1,e.wsconnected=!0,e.wsUnsuccessfulReconnects=0,e.emit("status",[{status:"connected"}]);const i=O();if(x(i,B),kt(i,e.doc),s.send(S(i)),e.awareness.getLocalState()!==null){const n=O();x(n,q),H(n,st(e.awareness,[e.doc.clientID])),s.send(S(n))}},e.emit("status",[{status:"connecting"}])}},yt=(e,s)=>{const i=e.ws;e.wsconnected&&i&&i.readyState===i.OPEN&&i.send(s),e.bcconnected&&z(e.bcChannel,s,e)};class hn extends jt{constructor(s,i,n,{connect:a=!0,awareness:r=new _s(n),params:c={},WebSocketPolyfill:g=WebSocket,resyncInterval:f=-1,maxBackoffTime:D=2500,disableBc:b=!1}={}){for(super();s[s.length-1]==="/";)s=s.slice(0,s.length-1);this.serverUrl=s,this.bcChannel=s+"/"+i,this.maxBackoffTime=D,this.params=c,this.roomname=i,this.doc=n,this._WS=g,this.awareness=r,this.wsconnected=!1,this.wsconnecting=!1,this.bcconnected=!1,this.disableBc=b,this.wsUnsuccessfulReconnects=0,this.messageHandlers=et.slice(),this._synced=!1,this.ws=null,this.wsLastMessageReceived=0,this.shouldConnect=a,this._resyncInterval=0,f>0&&(this._resyncInterval=setInterval(()=>{if(this.ws&&this.ws.readyState===WebSocket.OPEN){const l=O();x(l,B),kt(l,n),this.ws.send(S(l))}},f)),this._bcSubscriber=(l,h)=>{if(h!==this){const m=ye(this,new Uint8Array(l),!1);ee(m)>1&&z(this.bcChannel,S(m),this)}},this._updateHandler=(l,h)=>{if(h!==this){const m=O();x(m,B),fe(m,l),yt(this,S(m))}},this.doc.on("update",this._updateHandler),this._awarenessUpdateHandler=({added:l,updated:h,removed:m},E)=>{const N=l.concat(h).concat(m),M=O();x(M,q),H(M,st(r,N)),yt(this,S(M))},this._exitHandler=()=>{$t(this.awareness,[n.clientID],"app closed")},Pt&&typeof ht<"u"&&ht.on("exit",this._exitHandler),r.on("update",this._awarenessUpdateHandler),this._checkInterval=setInterval(()=>{this.wsconnected&&BtRt(s)).filter(s=>s<"AQ")}function Qs(e){return e.map(s=>Rt(s)).findLast(s=>s>"AQ")||""}function qs(e,s){return e.length===s.length&&e.every((i,n)=>s[n]===i)}function Ys(e){return{all:e=e||new Map,on:function(s,i){var n=e.get(s);n?n.push(i):e.set(s,[i])},off:function(s,i){var n=e.get(s);n&&(i?n.splice(n.indexOf(i)>>>0,1):e.set(s,[]))},emit:function(s,i){var n=e.get(s);n&&n.slice().map(function(a){a(i)}),(n=e.get("*"))&&n.slice().map(function(a){a(s,i)})}}}class Zs extends Error{constructor(s="Close has already been called on the connection",...i){super(s,...i)}}var U,ut,xe;class Gs{constructor(s={}){u(this,ut);u(this,U);d(this,U,s)}open({fileId:s,baseVersionEtag:i}){return se.put(v(this,ut,xe).call(this,"session/".concat(s,"/create")),{fileId:s,baseVersionEtag:i,filePath:o(this,U).filePath,token:o(this,U).shareToken,guestName:o(this,U).guestName,forceRecreate:o(this,U).forceRecreate}).then(n=>new we(n,o(this,U)))}}U=new WeakMap,ut=new WeakSet,xe=function(s){const i=!!o(this,U).shareToken;return dt(s,i)};var it,At,Y,k,I,pt,nt,L,_,V,P,J;class we{constructor(s,i){u(this,_);u(this,it);u(this,At);u(this,Y);u(this,k);u(this,I);u(this,pt);u(this,nt);u(this,L);const{document:n,session:a,lock:r,readOnly:c,content:g,documentState:f}=s.data;d(this,k,n),d(this,I,a),d(this,pt,r),d(this,nt,c),d(this,it,g),d(this,Y,f),d(this,L,i),this.isPublic=!!i.shareToken,this.closed=!1}get session(){return o(this,I)}get document(){return o(this,k)}get docStateVersion(){return o(this,Y)?o(this,k).lastSavedVersion:0}get state(){return{document:{...o(this,k),readOnly:o(this,nt)},session:o(this,I),documentSource:o(this,it)||"",documentState:o(this,Y)}}get isClosed(){return this.closed}sync({version:s}){return v(this,_,P).call(this,v(this,_,J).call(this,"session/".concat(o(this,k).id,"/sync")),{...o(this,_,V),filePath:o(this,L).filePath,baseVersionEtag:o(this,k).baseVersionEtag,version:s})}save({version:s,autosaveContent:i,documentState:n,force:a,manualSave:r}){return v(this,_,P).call(this,v(this,_,J).call(this,"session/".concat(o(this,k).id,"/save")),{...o(this,_,V),filePath:o(this,L).filePath,baseVersionEtag:o(this,k).baseVersionEtag,version:s,autosaveContent:i,documentState:n,force:a,manualSave:r})}push({steps:s,version:i,awareness:n}){return v(this,_,P).call(this,v(this,_,J).call(this,"session/".concat(o(this,k).id,"/push")),{...o(this,_,V),filePath:o(this,L).filePath,baseVersionEtag:o(this,k).baseVersionEtag,steps:s,version:i,awareness:n})}update(s){return v(this,_,P).call(this,v(this,_,J).call(this,"session/".concat(o(this,k).id,"/session")),{...o(this,_,V),guestName:s}).then(({data:i})=>{d(this,I,i)})}uploadAttachment(s){const i=new FormData;i.append("file",s);const n=dt("attachment/upload")+"?documentId="+encodeURIComponent(o(this,k).id)+"&sessionId="+encodeURIComponent(o(this,I).id)+"&sessionToken="+encodeURIComponent(o(this,I).token)+"&shareToken="+encodeURIComponent(o(this,L).shareToken||"");return v(this,_,P).call(this,n,i,{headers:{"Content-Type":"multipart/form-data"}})}insertAttachmentFile(s){return v(this,_,P).call(this,dt("attachment/filepath"),{documentId:o(this,k).id,sessionId:o(this,I).id,sessionToken:o(this,I).token,filePath:s})}close(){return v(this,_,P).call(this,v(this,_,J).call(this,"session/".concat(o(this,k).id,"/close")),o(this,_,V)).then(()=>{this.closed=!0})}setBaseVersionEtag(s){o(this,k).baseVersionEtag=s}}it=new WeakMap,At=new WeakMap,Y=new WeakMap,k=new WeakMap,I=new WeakMap,pt=new WeakMap,nt=new WeakMap,L=new WeakMap,_=new WeakSet,V=function(){return{documentId:o(this,k).id,sessionId:o(this,I).id,sessionToken:o(this,I).token,token:o(this,L).shareToken}},P=function(...s){return this.closed?Promise.reject(new Zs):se.post(...s)},J=function(s){const i=!!o(this,_,V).token;return dt(s,i)};function dt(e,s=!1){const i=ie("/apps/text");return s?"".concat(i,"/public/").concat(e):"".concat(i,"/").concat(e)}const Ht=300,Xs=5e3,ti=5e3,ei=3e4,Ce=6e4,si=5,ii=Ce*1.5;var w,at,Z,T,W,G,j;class ni{constructor(s,i){u(this,w);u(this,at);u(this,Z);u(this,T);u(this,W);u(this,G);u(this,j);d(this,w,s),d(this,at,i),d(this,T,Ht),d(this,W,0),d(this,Z,0)}connect(){if(this.fetcher>0){console.error("Trying to connect, but already connected");return}d(this,j,!1),this.fetcher=setInterval(this._fetchSteps.bind(this),50),document.addEventListener("visibilitychange",this.visibilitychange.bind(this))}async _fetchSteps(){if(o(this,G))return;const s=Date.now();if(!(o(this,Z)>s-o(this,T))){if(!this.fetcher){console.error("No inverval but triggered");return}d(this,G,!0),y.debug("[PollingBackend] Fetching steps",o(this,w).version),await o(this,at).sync({version:o(this,w).version}).then(this._handleResponse.bind(this),this._handleError.bind(this)),d(this,Z,Date.now()),d(this,G,!1)}}_handleResponse({data:s}){const{document:i,sessions:n}=s;if(d(this,W,0),o(this,w).emit("change",{document:i,sessions:n}),o(this,w)._receiveSteps(s),s.steps.length===0){if(o(this,j)||d(this,j,!0),o(this,w).checkIdle())return;const a=Date.now()-ii,r=n.filter(c=>c.lastContact*1e3>a);o(this,w).isReadOnly?this.maximumReadOnlyTimer():r.length<2?this.maximumRefetchTimer():this.increaseRefetchTimer(),o(this,w).emit("stateChange",{initialLoading:!0});return}o(this,j)&&this.resetRefetchTimer()}_handleError(s){!s.response||s.code==="ECONNABORTED"?Lt(this,W)._++>=si?(y.error("[PollingBackend:fetchSteps] Network error when fetching steps, emitting CONNECTION_FAILED"),o(this,w).emit("error",{type:A.CONNECTION_FAILED,data:{}})):y.error("[PollingBackend:fetchSteps] Network error when fetching steps, retry ".concat(o(this,W))):s.response.status===409?(this._handleResponse(s.response),y.error("Conflict during file save, please resolve"),o(this,w).emit("error",{type:A.SAVE_COLLISSION,data:{outsideChange:s.response.data.outsideChange}})):s.response.status===412?(o(this,w).emit("error",{type:A.LOAD_ERROR,data:s.response}),this.disconnect()):s.response.status===403?(o(this,w).emit("error",{type:A.SOURCE_NOT_FOUND,data:{}}),this.disconnect()):s.response.status===404?(o(this,w).emit("error",{type:A.SOURCE_NOT_FOUND,data:{}}),this.disconnect()):s.response.status===503?(this.increaseRefetchTimer(),o(this,w).emit("error",{type:A.CONNECTION_FAILED,data:{}}),y.error("Failed to fetch steps due to unavailable service",{error:s})):(this.disconnect(),o(this,w).emit("error",{type:A.CONNECTION_FAILED,data:{}}),y.error("Failed to fetch steps due to other reason",{error:s}))}disconnect(){clearInterval(this.fetcher),this.fetcher=0,document.removeEventListener("visibilitychange",this.visibilitychange.bind(this))}resetRefetchTimer(){d(this,T,Ht)}increaseRefetchTimer(){d(this,T,Math.min(o(this,T)*2,Xs))}maximumRefetchTimer(){d(this,T,ti)}maximumReadOnlyTimer(){d(this,T,ei)}visibilitychange(){document.visibilityState==="hidden"?d(this,T,Ce):this.resetRefetchTimer()}}w=new WeakMap,at=new WeakMap,Z=new WeakMap,T=new WeakMap,W=new WeakMap,G=new WeakMap,j=new WeakMap;const ai=1440,oi=3e4,mn=60,ri=90,A={SAVE_COLLISSION:0,PUSH_FAILURE:1,LOAD_ERROR:2,CONNECTION_FAILED:3,SOURCE_NOT_FOUND:4,PUSH_FORBIDDEN:5};var F,p;class vn{constructor({baseVersionEtag:s,serialize:i,getDocumentState:n,...a}){u(this,F);u(this,p);return this._bus=Ys(),this.serialize=i,this.getDocumentState=n,this._api=new Gs(a),d(this,p,null),this.stepClientIDs=[],this.lastStepPush=Date.now(),this.version=null,this.baseVersionEtag=s,this.sending=!1,d(this,F,null),this.autosave=ne(this._autosave.bind(this),oi),this}get isReadOnly(){return o(this,p).state.document.readOnly}get guestName(){return o(this,p).session.guestName}async open({fileId:s,initialSession:i}){if(o(this,p)&&!o(this,p).isClosed)return;const n=i?Promise.resolve(new we({data:i},{})):this._api.open({fileId:s,baseVersionEtag:this.baseVersionEtag}).catch(a=>this._emitError(a));d(this,p,await n),o(this,p)&&(this.backend=new ni(this,o(this,p)),this.version=o(this,p).docStateVersion,this.baseVersionEtag=o(this,p).document.baseVersionEtag,this.emit("opened",{...o(this,p).state,version:this.version}),this.emit("loaded",{...o(this,p).state,version:this.version}))}startSync(){this.backend.connect()}syncUp(){this.backend.resetRefetchTimer()}_emitError(s){!s.response||s.code==="ECONNABORTED"?this.emit("error",{type:A.CONNECTION_FAILED,data:{}}):this.emit("error",{type:A.LOAD_ERROR,data:s.response})}updateSession(s){return o(this,p).isPublic?o(this,p).update(s).catch(i=>(y.error("Failed to update the session",{error:i}),Promise.reject(i))):Promise.reject(new Error)}sendSteps(s){if(!o(this,F))return new Promise((i,n)=>{d(this,F,setInterval(()=>{o(this,p)&&!this.sending&&this.sendStepsNow(s).then(i).catch(n)},200))})}sendStepsNow(s){this.sending=!0,clearInterval(o(this,F)),d(this,F,null);const i=s();return i.steps.length>0&&this.emit("stateChange",{dirty:!0}),o(this,p).push(i).then(n=>{this.sending=!1,this.emit("sync",{steps:[],document:o(this,p).document,version:this.version})}).catch(n=>{var c;const{response:a,code:r}=n;throw this.sending=!1,(!a||r==="ECONNABORTED")&&this.emit("error",{type:A.CONNECTION_FAILED,data:{}}),(a==null?void 0:a.status)===412?this.emit("error",{type:A.LOAD_ERROR,data:a}):(a==null?void 0:a.status)===403&&(i.document||(y.error("failed to write to document - not allowed"),this.emit("error",{type:A.PUSH_FORBIDDEN,data:{}})),((c=a.data.document)==null?void 0:c.currentVersion)===this.version&&(this.emit("error",{type:A.PUSH_FAILURE,data:{}}),OC.Notification.showTemporary("Changes could not be sent yet"))),new Error("Failed to apply steps. Retry!",{cause:n})})}_receiveSteps({steps:s,document:i,sessions:n}){const a=[...n.filter(r=>r.lastContact>Math.floor(Date.now()/1e3)-ri).filter(r=>r.lastAwarenessMessage).map(r=>({step:r.lastAwarenessMessage,clientId:r.clientId}))];for(let r=0;r{a.push({step:g,clientID:s[r].sessionId})})}this.lastStepPush=Date.now(),this.emit("sync",{steps:a,document:o(this,p).document,version:this.version})}checkIdle(){return(Date.now()-this.lastStepPush)/1e3/60>ai?(y.debug("[SyncService] Document is idle for ".concat(this.IDLE_TIMEOUT," minutes, suspending connection")),this.emit("idle"),!0):!1}_getContent(){return this.serialize()}async save({force:s=!1,manualSave:i=!0}={}){y.debug("[SyncService] saving",arguments[0]);try{const n=await o(this,p).save({version:this.version,autosaveContent:this._getContent(),documentState:this.getDocumentState(),force:s,manualSave:i});this.emit("stateChange",{dirty:!1}),o(this,p).document.lastSavedVersionTime=Date.now()/1e3,y.debug("[SyncService] saved",n);const{document:a,sessions:r}=n.data;this.emit("save",{document:a,sessions:r}),this.autosave.clear()}catch(n){throw y.error("Failed to save document.",{error:n}),n}}forceSave(){return this.save({force:!0})}_autosave(){return this.save({manualSave:!1}).catch(s=>{y.error("Failed to autosave document.",{error:s})})}async sendRemainingSteps(s){var r;if(s.length===0)return;let i=[];const n=Js(s),a=Qs(s);return(r=this.sendStepsNow(()=>{const c={steps:n,awareness:a,version:this.version};return i=[...s],y.debug("sending final steps ",c),c}))==null?void 0:r.then(()=>{s.splice(0,s.length,...s.filter(c=>!i.includes(c)))},c=>y.error(c))}async close(){var s;if(this.autosave.clear(),(s=this.backend)==null||s.disconnect(),!(!o(this,p)||o(this,p).isClosed))return o(this,p).close().catch(i=>{y.info("Failed to close connection.",{e:i})})}uploadAttachment(s){return o(this,p).uploadAttachment(s)}insertAttachmentFile(s){return o(this,p).insertAttachmentFile(s)}on(s,i){return this._bus.on(s,i),this}off(s,i){return this._bus.off(s,i),this}emit(s,i){this._bus.emit(s,i)}}F=new WeakMap,p=new WeakMap;var xt={exports:{}};(function(e,s){Object.defineProperty(s,"__esModule",{value:!0}),s.default=void 0;function i(b){"@babel/helpers - typeof";return i=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(l){return typeof l}:function(l){return l&&typeof Symbol=="function"&&l.constructor===Symbol&&l!==Symbol.prototype?"symbol":typeof l},i(b)}var n=47,a=46,r=function(b){var l=i(b);if(l!=="string")throw new TypeError("Expected a string, got a ".concat(l))},c=function(b,l){for(var h="",m=0,E=-1,N=0,M,$=0;$<=b.length;++$){if($2){var _t=h.lastIndexOf("/");if(_t!==h.length-1){_t===-1?(h="",m=0):(h=h.slice(0,_t),m=h.length-1-h.lastIndexOf("/")),E=$,N=0;continue}}else if(h.length===2||h.length===1){h="",m=0,E=$,N=0;continue}}l&&(h.length>0?h+="/..":h="..",m=2)}else h.length>0?h+="/"+b.slice(E+1,$):h=b.slice(E+1,$),m=$-E-1;E=$,N=0}else M===a&&N!==-1?++N:N=-1}return h},g=function(b){try{return decodeURIComponent(b)}catch{return b}},f=function(b){r(b);var l=b;if(l.length===0)return".";var h=l.charCodeAt(0)===n,m=l.charCodeAt(l.length-1)===n;return l=g(l),l=c(l,!h),l.length===0&&!h&&(l="."),l.length>0&&m&&(l+="/"),h?"/"+l:l},D=f;s.default=D,e.exports=s.default})(xt,xt.exports);var ci=xt.exports;const li=ts(ci),hi=e=>ae.dispatch("text/setAttachmentList",e),Vt=ae.getters["text/findAttachment"];var ot,X,tt,rt,ct,lt,C,wt,Ct,Et,Ee,St;class _n{constructor({session:s,user:i,shareToken:n,currentDirectory:a,fileId:r}){u(this,C);u(this,ot);u(this,X);u(this,tt);u(this,rt);u(this,ct);u(this,lt);d(this,ot,s),d(this,X,i),d(this,tt,n),d(this,rt,a),d(this,ct,r!=null?r:s.documentId),d(this,lt,v(this,C,wt).call(this))}async resolve(s,i=!0){let n;const a=/^\.attachments\.\d+\//;if(s.match(a)){const r=decodeURIComponent(s.replace(a,"").split("?")[0]);if(await o(this,lt),n=Vt(r),i&&!n&&(await v(this,C,wt).call(this),n=Vt(r)),n)return n}return di(s)?{isImage:!0,name:v(this,C,Ct).call(this,s),previewUrl:s,fullUrl:s}:{isImage:!0,name:v(this,C,Ct).call(this,s),previewUrl:v(this,C,Et).call(this,s),fullUrl:v(this,C,Et).call(this,s)}}}ot=new WeakMap,X=new WeakMap,tt=new WeakMap,rt=new WeakMap,ct=new WeakMap,lt=new WeakMap,C=new WeakSet,wt=async function(){return hi({documentId:o(this,ct),session:o(this,ot),shareToken:o(this,tt)})},Ct=function(s){return s.split("/").pop()},Et=function(s){if(o(this,X)){const r=o(this,X).uid,c=v(this,C,St).call(this,s).split("/").map(encodeURIComponent).join("/");return Xe("dav/files/".concat(r).concat(c))}const i=v(this,C,St).call(this,s).split("/"),n=i.pop(),a=i.join("/");return ie("/s/{token}/download?path={dirname}&files={basename}",{token:o(this,tt),basename:n,dirname:a})},Ee=function(s){return decodeURI(s.split("?")[0])},St=function(s){const i=[o(this,rt),v(this,C,Ee).call(this,s)].join("/");return li(i)};function di(e){return e.startsWith("http://")||e.startsWith("https://")||e.startsWith("data:")}const ui=mt({name:"NcActionButton",components:{NextcloudVueNcActionButton:Mt,Help:We}});var pi=function(){var e=this,s=e._self._c;return e._self._setupProxy,s("NextcloudVueNcActionButton",e._g({attrs:{"close-after-click":"","data-text-action-entry":"formatting-help"},scopedSlots:e._u([{key:"icon",fn:function(){return[s("Help")]},proxy:!0}])},e.$listeners),[e._v(" "+e._s(e.t("text","Formatting help"))+" ")])},mi=[],vi=R(ui,pi,mi,!1,null,null,null,null);const _i=vi.exports,fi=mt({name:"CharacterCount",components:{AlphabeticalVariant:je,NcActionText:ss},mixins:[vt],props:{visible:Boolean},data:()=>({wordCount:0,charCount:0}),computed:{countString(){return"".concat(Ft("text","%n word","%n words",this.wordCount),", ").concat(Ft("text","%n char","%n chars",this.charCount))}},watch:{visible:"refresh"},created(){this.refresh()},methods:{refresh(){this.wordCount=this.$editor.storage.characterCount.words(),this.charCount=this.$editor.storage.characterCount.characters()}}});var gi=function(){var e=this,s=e._self._c;return e._self._setupProxy,s("NcActionText",{attrs:{"data-text-action-entry":"character-count"},scopedSlots:e._u([{key:"icon",fn:function(){return[s("AlphabeticalVariant")]},proxy:!0},{key:"default",fn:function(){return[e._v(" "+e._s(e.countString)+" ")]},proxy:!0}])})},bi=[],yi=R(fi,gi,bi,!1,null,null,null,null);const ki=yi.exports;function xi(){var e;return((e=navigator==null?void 0:navigator.userAgentData)==null?void 0:e.mobile)!==void 0?navigator.userAgentData.mobile:[/Android/i,/webOS/i,/iPhone/i,/iPad/i,/iPod/i,/playbook/i,/silk/i,/BlackBerry/i,/Windows Phone/i].some(s=>navigator.userAgent.match(s))}const wi={name:"HelpModal",components:{NcDialog:is},data(){return{formatted:{bold:!0,italic:!0,strikethrough:!0,heading1:!0,heading6:!0,unorderdList:!0,orderedList:!0,checkList:!0,blockQuote:!0,codeBlock:!0}}},computed:{isFormatted(){return e=>this.formatted[e]},isMobileCached(){return this.isMobilePlatform()}},methods:{toggleFormatted(e){this.formatted[e]=!this.formatted[e]},isMobilePlatform:xi}};var Ci=function(){var e=this,s=e._self._c;return s("NcDialog",{attrs:{size:"normal","data-text-el":"formatting-help",name:e.t("text","Formatting and shortcuts"),"close-on-click-outside":!0},on:{closing:function(i){return e.$emit("close")}}},[s("h2",[e._v(e._s(e.t("text","Formatting and shortcuts")))]),s("p",[e._v(e._s(e.t("text","Speed up your writing with simple shortcuts.")))]),e.isMobileCached?s("p",[e._v(" "+e._s(e.t("text","Just type the Markdown syntax from below."))+" ")]):s("p",[e._v(" "+e._s(e.t("text","Just type the Markdown syntax or use keyboard shortcuts from below."))+" ")]),s("table",[s("thead",[s("tr",[s("th",[e._v(e._s(e.t("text","Style")))]),s("th",[e._v(e._s(e.t("text","Syntax")))]),e.isMobileCached?e._e():s("th",[e._v(" "+e._s(e.t("text","Keyboard shortcuts"))+" ")])])]),s("tbody",[s("tr",[s("td",[e._v(e._s(e.t("text","New paragraph")))]),s("td",[s("kbd",[e._v(e._s(e.t("text","Enter")))])]),e.isMobileCached?e._e():s("td")]),s("tr",[s("td",[e._v(e._s(e.t("text","Hard line break")))]),s("td",[s("kbd",[e._v(e._s(e.t("text","Enter")))]),e._v(" "+e._s(e.t("text","followed by"))+" "),s("kbd",[e._v(e._s(e.t("text","Backspace")))])]),e.isMobileCached?e._e():s("td",[s("kbd",[e._v(e._s(e.t("text","Shift")))]),e._v(" + "),s("kbd",[e._v(e._s(e.t("text","Enter")))])])]),s("tr",[s("td",[e._v(e._s(e.t("text","Bold")))]),s("td",[s("code",[e._v("**"+e._s(e.t("text","Bold text"))+"**")])]),e.isMobileCached?e._e():s("td",[s("kbd",[e._v(e._s(e.t("text","Ctrl")))]),e._v(" + "),s("kbd",[e._v("B")])])]),s("tr",[s("td",[e._v(e._s(e.t("text","Italic")))]),s("td",[s("code",[e._v("*"+e._s(e.t("text","Italicized text"))+"*")])]),e.isMobileCached?e._e():s("td",[s("kbd",[e._v(e._s(e.t("text","Ctrl")))]),e._v(" + "),s("kbd",[e._v("I")])])]),s("tr",[s("td",[e._v(e._s(e.t("text","Strikethrough")))]),s("td",[s("code",[e._v("~~"+e._s(e.t("text","Mistaken text"))+"~~")])]),e.isMobileCached?e._e():s("td",[s("kbd",[e._v(e._s(e.t("text","Ctrl")))]),e._v(" + "),s("kbd",[e._v(e._s(e.t("text","Shift")))]),e._v(" + "),s("kbd",[e._v("S")])])]),s("tr",[s("td",[e._v(e._s(e.t("text","Underline")))]),s("td",[s("code",[e._v("__"+e._s(e.t("text","Underlined text"))+"__")])]),e.isMobileCached?e._e():s("td",[s("kbd",[e._v(e._s(e.t("text","Ctrl")))]),e._v(" + "),s("kbd",[e._v("U")])])]),s("tr",[s("td",{staticClass:"ellipsis_top"},[e._v(" "+e._s(e.t("text","Heading 1"))+" ")]),s("td",{staticClass:"ellipsis_top"},[s("code",[e._v("# "+e._s(e.t("text","Heading level 1")))])]),e.isMobileCached?e._e():s("td",{staticClass:"ellipsis_top"},[s("kbd",[e._v(e._s(e.t("text","Ctrl")))]),e._v(" + "),s("kbd",[e._v(e._s(e.t("text","Shift")))]),e._v(" + "),s("kbd",[e._v("1")])])]),s("tr",[s("td",{staticClass:"noborder ellipsis"},[e._v(" … ")]),s("td",{staticClass:"noborder ellipsis"},[e._v(" … ")]),e.isMobileCached?e._e():s("td",{staticClass:"ellipsis noborder"},[e._v(" … ")])]),s("tr",[s("td",{staticClass:"noborder ellipsis_bottom"},[e._v(" "+e._s(e.t("text","Heading 6"))+" ")]),s("td",{staticClass:"noborder ellipsis_bottom"},[s("code",[e._v("###### "+e._s(e.t("text","Heading level 6")))])]),e.isMobileCached?e._e():s("td",{staticClass:"noborder ellipsis_bottom"},[s("kbd",[e._v(e._s(e.t("text","Ctrl")))]),e._v(" + "),s("kbd",[e._v(e._s(e.t("text","Shift")))]),e._v(" + "),s("kbd",[e._v("6")])])]),s("tr",[s("td",[e._v(e._s(e.t("text","Unordered list")))]),s("td",[s("code",[e._v("* "+e._s(e.t("text","An item")))])]),e.isMobileCached?e._e():s("td",[s("kbd",[e._v(e._s(e.t("text","Ctrl")))]),e._v(" + "),s("kbd",[e._v(e._s(e.t("text","Shift")))]),e._v(" + "),s("kbd",[e._v("8")])])]),s("tr",[s("td",[e._v(e._s(e.t("text","Ordered list")))]),s("td",[s("code",[e._v("1. "+e._s(e.t("text","First item")))])]),e.isMobileCached?e._e():s("td",[s("kbd",[e._v(e._s(e.t("text","Ctrl")))]),e._v(" + "),s("kbd",[e._v(e._s(e.t("text","Shift")))]),e._v(" + "),s("kbd",[e._v("7")])])]),s("tr",[s("td",[e._v(e._s(e.t("text","Checklist")))]),s("td",[s("code",[e._v("* [] "+e._s(e.t("text","To-Do item")))])]),e.isMobileCached?e._e():s("td")]),s("tr",[s("td",[e._v(e._s(e.t("text","Blockquote")))]),s("td",[s("code",[e._v("> "+e._s(e.t("text","Quoted text")))])]),e.isMobileCached?e._e():s("td",[s("kbd",[e._v(e._s(e.t("text","Ctrl")))]),e._v(" + "),s("kbd",[e._v(">")])])]),s("tr",[s("td",[e._v(e._s(e.t("text","Code block")))]),s("td",[s("code",[e._v("``` "+e._s(e.t("text","Some code")))])]),e.isMobileCached?e._e():s("td")]),s("tr",[s("td",[e._v(e._s(e.t("text","Link")))]),s("td",[s("code",[e._v("[Title](https://example.org)")])]),e.isMobileCached?e._e():s("td")]),s("tr",[s("td",[e._v(e._s(e.t("text","Insert emoji")))]),s("td",[s("code",[e._v(":"+e._s(e.t("text","emoji")))])]),e.isMobileCached?e._e():s("td")]),s("tr",[s("td",[e._v(e._s(e.t("text","Mention someone")))]),s("td",[s("code",[e._v("@"+e._s(e.t("text","name")))])]),e.isMobileCached?e._e():s("td")]),s("tr",[s("td",[e._v(e._s(e.t("text","Smart picker")))]),s("td",[s("code",[e._v("/"+e._s(e.t("text","something")))])]),e.isMobileCached?e._e():s("td")])])]),s("table",{attrs:{vif:"!isMobileCached"}},[s("thead",[s("tr",[s("th",[e._v(e._s(e.t("text","Action")))]),s("th",[e._v(e._s(e.t("text","Keyboard shortcuts")))])])]),s("tbody",[s("tr",[s("td",[e._v(e._s(e.t("text","Undo")))]),s("td",[s("kbd",[e._v(e._s(e.t("text","Ctrl")))]),e._v(" + "),s("kbd",[e._v("Z")])])]),s("tr",[s("td",[e._v(e._s(e.t("text","Redo")))]),s("td",[s("kbd",[e._v(e._s(e.t("text","Ctrl")))]),e._v(" + "),s("kbd",[e._v("Y")])])]),s("tr",[s("td",[e._v(e._s(e.t("text","Toggle outline")))]),s("td",[s("kbd",[e._v(e._s(e.t("text","Ctrl")))]),e._v(" + "),s("kbd",[e._v(e._s(e.t("text","Alt")))]),e._v(" + "),s("kbd",[e._v("H")])])])])])])},Ei=[],Si=R(wi,Ci,Ei,!1,null,"bdf077d8",null,null);const Ai=Si.exports,Ii={name:"MenuBar",components:{ActionFormattingHelp:_i,ActionList:le,ActionSingle:he,HelpModal:Ai,NcActionSeparator:Qt,NcActionButton:Mt,CharacterCount:ki,TranslateVariant:Ke},extends:de,mixins:[vt,ls,re,ce],provide(){const e={};return Object.defineProperties(e,{[Qe]:{get:()=>this.randomID}}),e},props:{isHidden:{type:Boolean,default:!1}},setup(){const e=Se(),{width:s}=os(e);return{menubar:e,width:s}},data(){return{entries:[...ze],randomID:"menu-bar-".concat(Math.ceil(Math.random()*1e4+500).toString(16)),displayHelp:!1,isReady:!1,canTranslate:cs("text","translation_languages",[]).length>0,resize:null}},computed:{visibleEntries(){return this.entries.filter(({priority:e})=>e===void 0||e<=this.iconsLimit)},hiddenEntries(){const e=this.entries.filter(({priority:i})=>i!==void 0&&i>this.iconsLimit),s=e.reduce((i,n,a)=>{var c;const r=(c=n.children)!=null?c:[n];if(r.length>1){const g=i.length&&!i.at(-1).isSeparator?[{key:"separator-before-".concat(n.id),isSeparator:!0}]:[],f=a!==e.length-1?[{key:"separator-after-".concat(n.id),isSeparator:!0}]:[];return[...i,...g,...r,...f]}return[...i,...r]},[]);return{key:"remain",label:this.t("text","Remaining actions"),icon:Je,children:s}},iconWidth(){var s;const e=(s=this.menubar&&getComputedStyle(this.menubar))==null?void 0:s.getPropertyValue("--default-clickable-area");return parseInt(e)||34},iconsLimit(){const e=this.width-4,s=this.$isMobile?this.iconWidth:this.iconWidth+2;return Math.floor(e/s)-1}},mounted(){this.$nextTick(()=>{this.isReady=!0,this.$emit("update:loaded",!0)})},methods:{showHelp(){this.displayHelp=!0},hideHelp(){this.displayHelp=!1},showTranslate(){const{from:e,to:s}=this.$editor.view.state.selection;let i=this.$editor.view.state.doc.textBetween(e,s," ");i.trim().length||(this.$editor.commands.selectAll(),i=this.$editor.view.state.doc.textContent),console.debug("translation click",this.$editor.view.state.selection,i),oe("text:translate-modal:show",{content:i})}}};var Oi=function(){var e=this,s=e._self._c;return s("div",{staticClass:"text-menubar",class:{"text-menubar--ready":e.isReady,"text-menubar--hide":e.isHidden,"text-menubar--is-workspace":e.$isRichWorkspace},attrs:{id:e.randomID,"data-text-el":"menubar",role:"region","aria-label":e.t("text","Editor actions")}},[e.displayHelp?s("HelpModal",{on:{close:e.hideHelp}}):e._e(),e.$isRichEditor?s("div",{ref:"menubar",staticClass:"text-menubar__entries",attrs:{role:"toolbar","aria-label":e.t("text","Formatting menu bar")},on:{keydown:[function(i){return!i.type.indexOf("key")&&e._k(i.keyCode,"left",37,i.key,["Left","ArrowLeft"])||"button"in i&&i.button!==0?null:(i.stopPropagation(),e.handleToolbarNavigation.apply(null,arguments))},function(i){return!i.type.indexOf("key")&&e._k(i.keyCode,"right",39,i.key,["Right","ArrowRight"])||"button"in i&&i.button!==2?null:(i.stopPropagation(),e.handleToolbarNavigation.apply(null,arguments))}]}},[e._l(e.visibleEntries,function(i,n){return s(i.component?i.component:i.children?"ActionList":"ActionSingle",{key:i.key,ref:"menuEntries",refInFor:!0,tag:"component",attrs:{"action-entry":i,"can-be-focussed":e.activeMenuEntry===n},on:{disabled:function(a){return e.disableMenuEntry(i.key,a)},click:function(a){e.activeMenuEntry=n}}})}),s("ActionList",{ref:"remainingEntries",attrs:{"action-entry":e.hiddenEntries,"can-be-focussed":e.activeMenuEntry===e.visibleEntries.length,"force-enabled":!0},on:{click:function(i){e.activeMenuEntry="remain"}},scopedSlots:e._u([{key:"lastAction",fn:function({visible:i}){return[e.canTranslate?s("NcActionButton",{attrs:{"close-after-click":""},on:{click:e.showTranslate},scopedSlots:e._u([{key:"icon",fn:function(){return[s("TranslateVariant")]},proxy:!0}],null,!0)},[e._v(" "+e._s(e.t("text","Translate"))+" ")]):e._e(),s("ActionFormattingHelp",{on:{click:e.showHelp}}),s("NcActionSeparator"),s("CharacterCount",e._b({},"CharacterCount",{visible:i},!1))]}}],null,!1,2316723924)})],2):e._e(),s("div",{staticClass:"text-menubar__slot"},[e._t("default")],2)],1)},Ni=[],Mi=R(Ii,Oi,Ni,!1,null,"adb1028b",null,null);const fn=Mi.exports,$i={name:"ContentContainer",components:{EditorContent:qe,EditorOutline:Ye},mixins:[vt,Yt],computed:{showOutline(){return this.$outlineState.visible}}};var Ri=function(){var e=this,s=e._self._c;return s("div",{staticClass:"content-wrapper text-editor__content-wrapper",class:{"--show-outline":e.showOutline},attrs:{"data-text-el":"editor-content-wrapper"}},[e.showOutline?s("div",{staticClass:"text-editor__content-wrapper__left"},[s("EditorOutline")],1):e._e(),e._t("default"),s("EditorContent",{staticClass:"editor__content text-editor__content",attrs:{role:"document",editor:e.$editor}}),s("div",{staticClass:"text-editor__content-wrapper__right"})],2)},Ti=[],Di=R($i,Ri,Ti,!1,null,"a3b97a85",null,null);const gn=Di.exports,Wt=e=>e.split("/").slice(0,-1).join("/"),Ui={name:"MediaHandler",mixins:[vt,hs,ds],provide(){const e={};return Object.defineProperties(e,{[us]:{get:()=>this.showAttachmentPrompt},[ps]:{get:()=>this.chooseLocalFile},[ms]:{get:()=>this.state}}),e},data(){return{lastFilePath:null,draggedOver:!1,state:{isUploadingAttachments:!1}}},computed:{initialFilePath(){var e,s,i;return(i=this.lastFilePath)!=null?i:Wt((s=(e=this.$file)==null?void 0:e.relativePath)!=null?s:"/")}},methods:{setDraggedOver(e){this.draggedOver=e},onPaste(e){this.uploadAttachmentFiles(e.detail.files)},onEditorDrop(e){this.uploadAttachmentFiles(e.detail.files,e.detail.position),this.draggedOver=!1},onAttachmentUploadFilePicked(e){this.uploadAttachmentFiles(e.target.files),e.target.value=""},chooseLocalFile(){this.$refs.attachmentFileInput.click()},async uploadAttachmentFiles(e,s=null){if(!e)return;this.state.isUploadingAttachments=!0;const i=[...e].map(n=>this.uploadAttachmentFile(n,s));return Promise.all(i).catch(n=>{var a,r;y.error("Uploading multiple images failed",{error:n}),gt(((r=(a=n==null?void 0:n.response)==null?void 0:a.data)==null?void 0:r.error)||n.message)}).then(()=>{this.state.isUploadingAttachments=!1})},async uploadAttachmentFile(e,s=null){return this.state.isUploadingAttachments=!0,this.$syncService.uploadAttachment(e).then(i=>{var n,a,r;this.insertAttachment((n=i.data)==null?void 0:n.name,(a=i.data)==null?void 0:a.id,e.type,s,(r=i.data)==null?void 0:r.dirname)}).catch(i=>{var n,a;y.error("Uploading image failed",{error:i}),gt((a=(n=i==null?void 0:i.response)==null?void 0:n.data)==null?void 0:a.error)}).then(()=>{this.state.isUploadingAttachments=!1})},showAttachmentPrompt(){rs()&&OC.dialogs.filepicker(t("text","Insert an attachment"),e=>{this.insertFromPath(e)},!1,[],!0,void 0,this.initialFilePath)},insertFromPath(e){return this.lastFilePath=Wt(e),this.state.isUploadingAttachments=!0,this.$syncService.insertAttachmentFile(e).then(s=>{var i,n,a,r;this.insertAttachment((i=s.data)==null?void 0:i.name,(n=s.data)==null?void 0:n.id,(a=s.data)==null?void 0:a.mimetype,null,(r=s.data)==null?void 0:r.dirname)}).catch(s=>{var i,n;y.error("Failed to insert image path",{error:s}),gt(((n=(i=s==null?void 0:s.response)==null?void 0:i.data)==null?void 0:n.error)||s.message)}).then(()=>{this.state.isUploadingAttachments=!1})},insertAttachment(e,s,i,n=null,a=""){const r=a+"/"+encodeURIComponent(e).replace(/[!'()*]/g,f=>"%"+f.charCodeAt(0).toString(16).toUpperCase()),c=e.replaceAll(/[[\]]/g,"");(n?this.$editor.chain().focus(n):this.$editor.chain()).setImage({src:r,alt:c}).run();const g=this.$editor.view.state.selection;g.empty||this.$editor.commands.focus(g.to),this.$editor.commands.scrollIntoView(),oe("text:image-node:add",null)}}};var Li=function(){var e=this,s=e._self._c;return s("div",{staticClass:"editor editor-media-handler",class:{draggedOver:e.draggedOver},attrs:{"data-text-el":"editor-media-handler"},on:{"image-paste":e.onPaste,dragover:function(i){return i.preventDefault(),i.stopPropagation(),e.setDraggedOver(!0)},dragleave:function(i){return i.preventDefault(),i.stopPropagation(),e.setDraggedOver(!1)},"file-drop":e.onEditorDrop}},[s("input",{directives:[{name:"show",rawName:"v-show",value:!1,expression:"false"}],ref:"attachmentFileInput",attrs:{"data-text-el":"attachment-file-input",type:"file",accept:"*/*",multiple:""},on:{change:e.onAttachmentUploadFilePicked}}),e._t("default")],2)},Pi=[],Fi=R(Ui,Li,Pi,!1,null,null,null,null);const Bi=Fi.exports,Hi={name:"MainContainer",components:{MediaHandler:Bi},mixins:[vs]};var Vi=function(){var e=this,s=e._self._c;return s("div",{staticClass:"editor"},[e.$editorUpload?s("MediaHandler",{staticClass:"text-editor__main"},[e._t("default")],2):e._t("default")],2)},Wi=[],ji=R(Hi,Vi,Wi,!1,null,"f2d30048",null,null);const bn=ji.exports,Ki={name:"Wrapper",mixins:[qt,re,ce],provide(){const e={};return Object.defineProperties(e,{[Ze]:{get:()=>this.outline},[Ge]:{get:()=>({toggle:this.outlineToggle})}}),e},props:{syncError:{type:Object,default:null},hasConnectionIssue:{type:Boolean,default:!1},contentLoaded:{type:Boolean,default:!0},showOutlineOutside:{type:Boolean,default:!1}},data:()=>({outline:{visible:!1,enable:!1}}),computed:{...es({viewWidth:e=>e.text.viewWidth}),hasSyncCollission(){return this.syncError&&this.syncError.type===A.SAVE_COLLISSION},showOutline(){return this.isAbleToShowOutline?this.outline.visible:!1},isAbleToShowOutline(){return this.$isRichWorkspace?!1:this.viewWidth>1265}},watch:{showOutlineOutside(){this.outline.visible=this.showOutlineOutside}},mounted(){this.outline.enable=this.isAbleToShowOutline,this.$watch(()=>this.isAbleToShowOutline,e=>{Object.assign(this.outline,{enable:e})}),document.addEventListener("keydown",this.handleKeyDown)},beforeDestroy(){document.removeEventListener("keydown",this.handleKeyDown)},methods:{outlineToggle(){this.outline.visible=!this.outline.visible,this.$emit("outline-toggled",this.outline.visible)},handleKeyDown(e){e.ctrlKey&&e.altKey&&e.key==="h"&&this.outlineToggle()}}};var zi=function(){var e=this,s=e._self._c;return s("div",{staticClass:"text-editor__wrapper",class:{"has-conflicts":e.hasSyncCollission,"is-rich-workspace":e.$isRichWorkspace,"is-rich-editor":e.$isRichEditor}},[e._t("default")],2)},Ji=[],Qi=R(Ki,zi,Ji,!1,null,"b579724b",null,null);const yn=Qi.exports;export{_n as A,gn as C,A as E,ai as I,bn as M,ln as R,vn as S,hn as W,Qs as a,yn as b,fn as c,ue as d,dn as e,un as f,Js as g,pn as h,ri as i,mn as j}; diff --git a/js/Wrapper.chunk.mjs.map b/js/Wrapper.chunk.mjs.map index 120c93ba96f..01a3692bed0 100644 --- a/js/Wrapper.chunk.mjs.map +++ b/js/Wrapper.chunk.mjs.map @@ -1 +1 @@ -{"version":3,"file":"Wrapper.chunk.mjs","sources":["../node_modules/y-protocols/awareness.js","../src/components/Menu/ActionListItem.vue","../src/components/Menu/ActionList.vue","../src/components/Menu/ActionSingle.vue","../src/components/Menu/ToolBarLogic.js","../src/components/Menu/ReadonlyBar.vue","../src/helpers/base64.ts","../node_modules/y-protocols/sync.js","../node_modules/lib0/broadcastchannel.js","../node_modules/y-protocols/auth.js","../node_modules/lib0/url.js","../node_modules/y-websocket/src/y-websocket.js","../src/helpers/yjs.js","../node_modules/mitt/dist/mitt.mjs","../src/services/SessionApi.js","../src/services/PollingBackend.js","../src/services/SyncService.js","../node_modules/path-normalize/lib/index.js","../src/services/AttachmentResolver.js","../src/components/Menu/ActionFormattingHelp.vue","../src/components/Menu/CharacterCount.vue","../src/helpers/platform.js","../src/components/HelpModal.vue","../src/components/Menu/MenuBar.vue","../src/components/Editor/ContentContainer.vue","../src/components/Editor/MediaHandler.vue","../src/components/Editor/MainContainer.vue","../src/components/Editor/Wrapper.vue"],"sourcesContent":["/**\n * @module awareness-protocol\n */\n\nimport * as encoding from 'lib0/encoding'\nimport * as decoding from 'lib0/decoding'\nimport * as time from 'lib0/time'\nimport * as math from 'lib0/math'\nimport { Observable } from 'lib0/observable'\nimport * as f from 'lib0/function'\nimport * as Y from 'yjs' // eslint-disable-line\n\nexport const outdatedTimeout = 30000\n\n/**\n * @typedef {Object} MetaClientState\n * @property {number} MetaClientState.clock\n * @property {number} MetaClientState.lastUpdated unix timestamp\n */\n\n/**\n * The Awareness class implements a simple shared state protocol that can be used for non-persistent data like awareness information\n * (cursor, username, status, ..). Each client can update its own local state and listen to state changes of\n * remote clients. Every client may set a state of a remote peer to `null` to mark the client as offline.\n *\n * Each client is identified by a unique client id (something we borrow from `doc.clientID`). A client can override\n * its own state by propagating a message with an increasing timestamp (`clock`). If such a message is received, it is\n * applied if the known state of that client is older than the new state (`clock < newClock`). If a client thinks that\n * a remote client is offline, it may propagate a message with\n * `{ clock: currentClientClock, state: null, client: remoteClient }`. If such a\n * message is received, and the known clock of that client equals the received clock, it will override the state with `null`.\n *\n * Before a client disconnects, it should propagate a `null` state with an updated clock.\n *\n * Awareness states must be updated every 30 seconds. Otherwise the Awareness instance will delete the client state.\n *\n * @extends {Observable}\n */\nexport class Awareness extends Observable {\n /**\n * @param {Y.Doc} doc\n */\n constructor (doc) {\n super()\n this.doc = doc\n /**\n * @type {number}\n */\n this.clientID = doc.clientID\n /**\n * Maps from client id to client state\n * @type {Map>}\n */\n this.states = new Map()\n /**\n * @type {Map}\n */\n this.meta = new Map()\n this._checkInterval = /** @type {any} */ (setInterval(() => {\n const now = time.getUnixTime()\n if (this.getLocalState() !== null && (outdatedTimeout / 2 <= now - /** @type {{lastUpdated:number}} */ (this.meta.get(this.clientID)).lastUpdated)) {\n // renew local clock\n this.setLocalState(this.getLocalState())\n }\n /**\n * @type {Array}\n */\n const remove = []\n this.meta.forEach((meta, clientid) => {\n if (clientid !== this.clientID && outdatedTimeout <= now - meta.lastUpdated && this.states.has(clientid)) {\n remove.push(clientid)\n }\n })\n if (remove.length > 0) {\n removeAwarenessStates(this, remove, 'timeout')\n }\n }, math.floor(outdatedTimeout / 10)))\n doc.on('destroy', () => {\n this.destroy()\n })\n this.setLocalState({})\n }\n\n destroy () {\n this.emit('destroy', [this])\n this.setLocalState(null)\n super.destroy()\n clearInterval(this._checkInterval)\n }\n\n /**\n * @return {Object|null}\n */\n getLocalState () {\n return this.states.get(this.clientID) || null\n }\n\n /**\n * @param {Object|null} state\n */\n setLocalState (state) {\n const clientID = this.clientID\n const currLocalMeta = this.meta.get(clientID)\n const clock = currLocalMeta === undefined ? 0 : currLocalMeta.clock + 1\n const prevState = this.states.get(clientID)\n if (state === null) {\n this.states.delete(clientID)\n } else {\n this.states.set(clientID, state)\n }\n this.meta.set(clientID, {\n clock,\n lastUpdated: time.getUnixTime()\n })\n const added = []\n const updated = []\n const filteredUpdated = []\n const removed = []\n if (state === null) {\n removed.push(clientID)\n } else if (prevState == null) {\n if (state != null) {\n added.push(clientID)\n }\n } else {\n updated.push(clientID)\n if (!f.equalityDeep(prevState, state)) {\n filteredUpdated.push(clientID)\n }\n }\n if (added.length > 0 || filteredUpdated.length > 0 || removed.length > 0) {\n this.emit('change', [{ added, updated: filteredUpdated, removed }, 'local'])\n }\n this.emit('update', [{ added, updated, removed }, 'local'])\n }\n\n /**\n * @param {string} field\n * @param {any} value\n */\n setLocalStateField (field, value) {\n const state = this.getLocalState()\n if (state !== null) {\n this.setLocalState({\n ...state,\n [field]: value\n })\n }\n }\n\n /**\n * @return {Map>}\n */\n getStates () {\n return this.states\n }\n}\n\n/**\n * Mark (remote) clients as inactive and remove them from the list of active peers.\n * This change will be propagated to remote clients.\n *\n * @param {Awareness} awareness\n * @param {Array} clients\n * @param {any} origin\n */\nexport const removeAwarenessStates = (awareness, clients, origin) => {\n const removed = []\n for (let i = 0; i < clients.length; i++) {\n const clientID = clients[i]\n if (awareness.states.has(clientID)) {\n awareness.states.delete(clientID)\n if (clientID === awareness.clientID) {\n const curMeta = /** @type {MetaClientState} */ (awareness.meta.get(clientID))\n awareness.meta.set(clientID, {\n clock: curMeta.clock + 1,\n lastUpdated: time.getUnixTime()\n })\n }\n removed.push(clientID)\n }\n }\n if (removed.length > 0) {\n awareness.emit('change', [{ added: [], updated: [], removed }, origin])\n awareness.emit('update', [{ added: [], updated: [], removed }, origin])\n }\n}\n\n/**\n * @param {Awareness} awareness\n * @param {Array} clients\n * @return {Uint8Array}\n */\nexport const encodeAwarenessUpdate = (awareness, clients, states = awareness.states) => {\n const len = clients.length\n const encoder = encoding.createEncoder()\n encoding.writeVarUint(encoder, len)\n for (let i = 0; i < len; i++) {\n const clientID = clients[i]\n const state = states.get(clientID) || null\n const clock = /** @type {MetaClientState} */ (awareness.meta.get(clientID)).clock\n encoding.writeVarUint(encoder, clientID)\n encoding.writeVarUint(encoder, clock)\n encoding.writeVarString(encoder, JSON.stringify(state))\n }\n return encoding.toUint8Array(encoder)\n}\n\n/**\n * Modify the content of an awareness update before re-encoding it to an awareness update.\n *\n * This might be useful when you have a central server that wants to ensure that clients\n * cant hijack somebody elses identity.\n *\n * @param {Uint8Array} update\n * @param {function(any):any} modify\n * @return {Uint8Array}\n */\nexport const modifyAwarenessUpdate = (update, modify) => {\n const decoder = decoding.createDecoder(update)\n const encoder = encoding.createEncoder()\n const len = decoding.readVarUint(decoder)\n encoding.writeVarUint(encoder, len)\n for (let i = 0; i < len; i++) {\n const clientID = decoding.readVarUint(decoder)\n const clock = decoding.readVarUint(decoder)\n const state = JSON.parse(decoding.readVarString(decoder))\n const modifiedState = modify(state)\n encoding.writeVarUint(encoder, clientID)\n encoding.writeVarUint(encoder, clock)\n encoding.writeVarString(encoder, JSON.stringify(modifiedState))\n }\n return encoding.toUint8Array(encoder)\n}\n\n/**\n * @param {Awareness} awareness\n * @param {Uint8Array} update\n * @param {any} origin This will be added to the emitted change event\n */\nexport const applyAwarenessUpdate = (awareness, update, origin) => {\n const decoder = decoding.createDecoder(update)\n const timestamp = time.getUnixTime()\n const added = []\n const updated = []\n const filteredUpdated = []\n const removed = []\n const len = decoding.readVarUint(decoder)\n for (let i = 0; i < len; i++) {\n const clientID = decoding.readVarUint(decoder)\n let clock = decoding.readVarUint(decoder)\n const state = JSON.parse(decoding.readVarString(decoder))\n const clientMeta = awareness.meta.get(clientID)\n const prevState = awareness.states.get(clientID)\n const currClock = clientMeta === undefined ? 0 : clientMeta.clock\n if (currClock < clock || (currClock === clock && state === null && awareness.states.has(clientID))) {\n if (state === null) {\n // never let a remote client remove this local state\n if (clientID === awareness.clientID && awareness.getLocalState() != null) {\n // remote client removed the local state. Do not remote state. Broadcast a message indicating\n // that this client still exists by increasing the clock\n clock++\n } else {\n awareness.states.delete(clientID)\n }\n } else {\n awareness.states.set(clientID, state)\n }\n awareness.meta.set(clientID, {\n clock,\n lastUpdated: timestamp\n })\n if (clientMeta === undefined && state !== null) {\n added.push(clientID)\n } else if (clientMeta !== undefined && state === null) {\n removed.push(clientID)\n } else if (state !== null) {\n if (!f.equalityDeep(state, prevState)) {\n filteredUpdated.push(clientID)\n }\n updated.push(clientID)\n }\n }\n }\n if (added.length > 0 || filteredUpdated.length > 0 || removed.length > 0) {\n awareness.emit('change', [{\n added, updated: filteredUpdated, removed\n }, origin])\n }\n if (added.length > 0 || updated.length > 0 || removed.length > 0) {\n awareness.emit('update', [{\n added, updated, removed\n }, origin])\n }\n}\n","\n\n\n\n\n","\n\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 { defineComponent } from 'vue'\n\nexport default defineComponent({\n\tdata() {\n\t\treturn {\n\t\t\t/** Current menu entry that has focus */\n\t\t\tactiveMenuEntry: 0,\n\t\t\tentries: [],\n\t\t}\n\t},\n\tcomputed: {\n\t\tvisibleEntries() {\n\t\t\treturn this.entries\n\t\t},\n\t},\n\twatch: {\n\t\tvisibleEntries() {\n\t\t\tthis.$nextTick(() => {\n\t\t\t\tif (this.activeMenuEntry > this.visibleEntries.length || this.visibleEntries[this.activeMenuEntry]?.disabled) {\n\t\t\t\t\tthis.setNextMenuEntry()\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\t},\n\tmethods: {\n\t\t/**\n\t\t * Update the disabled state of an menu entry\n\t\t * @param {string} menuKey The key of the menu entry that changed\n\t\t * @param {boolean} state The new disabled state\n\t\t */\n\t\tdisableMenuEntry(menuKey, state) {\n\t\t\tconst index = this.visibleEntries.findIndex(({ key }) => key === menuKey)\n\t\t\tthis.visibleEntries[index].disabled = state\n\t\t\tif (state === false && this.activeMenuEntry === index) {\n\t\t\t\tthis.$nextTick(() => this.setNextMenuEntry())\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * Set the active menu entry to the next one (or reset to first)\n\t\t */\n\t\tsetNextMenuEntry() {\n\t\t\t// refs is not reactive so we must check this every time\n\t\t\tconst modulo = this.visibleEntries.length + (this.$refs.remainingEntries ? 1 : 0)\n\n\t\t\tdo {\n\t\t\t\tthis.activeMenuEntry = (this.activeMenuEntry + 1) % modulo\n\t\t\t} while (this.activeMenuEntry < this.visibleEntries.length && this.visibleEntries[this.activeMenuEntry].disabled)\n\t\t},\n\t\t/**\n\t\t * Set the active menu entry to the previous one (or reset to last entry (remaining actions))\n\t\t */\n\t\tsetPreviousMenuEntry() {\n\t\t\t// refs is not reactive so we must check this every time\n\t\t\tconst modulo = this.visibleEntries.length + (this.$refs.remainingEntries ? 1 : 0)\n\n\t\t\tdo {\n\t\t\t\tconst index = this.activeMenuEntry - 1\n\t\t\t\tthis.activeMenuEntry = ((index % modulo) + modulo) % modulo // needed as JS does not work with negative modulos\n\t\t\t} while (this.activeMenuEntry < this.visibleEntries.length && this.visibleEntries[this.activeMenuEntry].disabled)\n\t\t},\n\n\t\t/**\n\t\t * Handle navigation in toolbar\n\t\t * @param {KeyboardEvent} event The keydown event\n\t\t */\n\t\thandleToolbarNavigation(event) {\n\t\t\tif (event.key === 'ArrowRight') {\n\t\t\t\tthis.setNextMenuEntry()\n\t\t\t} else if (event.key === 'ArrowLeft') {\n\t\t\t\tthis.setPreviousMenuEntry()\n\t\t\t}\n\n\t\t\tif (this.activeMenuEntry === this.visibleEntries.length) {\n\t\t\t\tthis.$refs.remainingEntries?.focusButton?.()\n\t\t\t} else {\n\t\t\t\t// The ref is in no order (ordered by the time they needed to mount), so we need to order them like they are shown on the menu\n\t\t\t\tconst entries = [...this.$refs.menuEntries].sort((a, b) => this.visibleEntries.findIndex(({ key }) => key === a.$vnode.data.key) - this.visibleEntries.findIndex(({ key }) => key === b.$vnode.data.key))\n\t\t\t\tentries[this.activeMenuEntry].focusButton()\n\t\t\t}\n\t\t},\n\t},\n})\n","\n\n\n\n\n\n\n","/**\n * SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\n/*\n * This helper provides Base64 encoding and decoding for ArrayBuffers.\n *\n * We use lib0/buffer for now as it's a dependency of y.js\n * and does not add new dependencies.\n *\n */\n\nimport { toBase64, fromBase64 } from 'lib0/buffer'\n\n/**\n *\n * @param {ArrayBuffer} data - binary data to encode\n */\nexport function encodeArrayBuffer(data: ArrayBuffer): string {\n\tconst view = new Uint8Array(data)\n\treturn toBase64(view)\n}\n\n/**\n *\n * @param {string} encoded - base64 encoded string to decode\n */\nexport function decodeArrayBuffer(encoded: string): ArrayBuffer {\n\treturn fromBase64(encoded)\n}\n","/**\n * @module sync-protocol\n */\n\nimport * as encoding from 'lib0/encoding'\nimport * as decoding from 'lib0/decoding'\nimport * as Y from 'yjs'\n\n/**\n * @typedef {Map} StateMap\n */\n\n/**\n * Core Yjs defines two message types:\n * • YjsSyncStep1: Includes the State Set of the sending client. When received, the client should reply with YjsSyncStep2.\n * • YjsSyncStep2: Includes all missing structs and the complete delete set. When received, the client is assured that it\n * received all information from the remote client.\n *\n * In a peer-to-peer network, you may want to introduce a SyncDone message type. Both parties should initiate the connection\n * with SyncStep1. When a client received SyncStep2, it should reply with SyncDone. When the local client received both\n * SyncStep2 and SyncDone, it is assured that it is synced to the remote client.\n *\n * In a client-server model, you want to handle this differently: The client should initiate the connection with SyncStep1.\n * When the server receives SyncStep1, it should reply with SyncStep2 immediately followed by SyncStep1. The client replies\n * with SyncStep2 when it receives SyncStep1. Optionally the server may send a SyncDone after it received SyncStep2, so the\n * client knows that the sync is finished. There are two reasons for this more elaborated sync model: 1. This protocol can\n * easily be implemented on top of http and websockets. 2. The server should only reply to requests, and not initiate them.\n * Therefore it is necessary that the client initiates the sync.\n *\n * Construction of a message:\n * [messageType : varUint, message definition..]\n *\n * Note: A message does not include information about the room name. This must to be handled by the upper layer protocol!\n *\n * stringify[messageType] stringifies a message definition (messageType is already read from the bufffer)\n */\n\nexport const messageYjsSyncStep1 = 0\nexport const messageYjsSyncStep2 = 1\nexport const messageYjsUpdate = 2\n\n/**\n * Create a sync step 1 message based on the state of the current shared document.\n *\n * @param {encoding.Encoder} encoder\n * @param {Y.Doc} doc\n */\nexport const writeSyncStep1 = (encoder, doc) => {\n encoding.writeVarUint(encoder, messageYjsSyncStep1)\n const sv = Y.encodeStateVector(doc)\n encoding.writeVarUint8Array(encoder, sv)\n}\n\n/**\n * @param {encoding.Encoder} encoder\n * @param {Y.Doc} doc\n * @param {Uint8Array} [encodedStateVector]\n */\nexport const writeSyncStep2 = (encoder, doc, encodedStateVector) => {\n encoding.writeVarUint(encoder, messageYjsSyncStep2)\n encoding.writeVarUint8Array(encoder, Y.encodeStateAsUpdate(doc, encodedStateVector))\n}\n\n/**\n * Read SyncStep1 message and reply with SyncStep2.\n *\n * @param {decoding.Decoder} decoder The reply to the received message\n * @param {encoding.Encoder} encoder The received message\n * @param {Y.Doc} doc\n */\nexport const readSyncStep1 = (decoder, encoder, doc) =>\n writeSyncStep2(encoder, doc, decoding.readVarUint8Array(decoder))\n\n/**\n * Read and apply Structs and then DeleteStore to a y instance.\n *\n * @param {decoding.Decoder} decoder\n * @param {Y.Doc} doc\n * @param {any} transactionOrigin\n */\nexport const readSyncStep2 = (decoder, doc, transactionOrigin) => {\n try {\n Y.applyUpdate(doc, decoding.readVarUint8Array(decoder), transactionOrigin)\n } catch (error) {\n // This catches errors that are thrown by event handlers\n console.error('Caught error while handling a Yjs update', error)\n }\n}\n\n/**\n * @param {encoding.Encoder} encoder\n * @param {Uint8Array} update\n */\nexport const writeUpdate = (encoder, update) => {\n encoding.writeVarUint(encoder, messageYjsUpdate)\n encoding.writeVarUint8Array(encoder, update)\n}\n\n/**\n * Read and apply Structs and then DeleteStore to a y instance.\n *\n * @param {decoding.Decoder} decoder\n * @param {Y.Doc} doc\n * @param {any} transactionOrigin\n */\nexport const readUpdate = readSyncStep2\n\n/**\n * @param {decoding.Decoder} decoder A message received from another client\n * @param {encoding.Encoder} encoder The reply message. Does not need to be sent if empty.\n * @param {Y.Doc} doc\n * @param {any} transactionOrigin\n */\nexport const readSyncMessage = (decoder, encoder, doc, transactionOrigin) => {\n const messageType = decoding.readVarUint(decoder)\n switch (messageType) {\n case messageYjsSyncStep1:\n readSyncStep1(decoder, encoder, doc)\n break\n case messageYjsSyncStep2:\n readSyncStep2(decoder, doc, transactionOrigin)\n break\n case messageYjsUpdate:\n readUpdate(decoder, doc, transactionOrigin)\n break\n default:\n throw new Error('Unknown message type')\n }\n return messageType\n}\n","/* eslint-env browser */\n\n/**\n * Helpers for cross-tab communication using broadcastchannel with LocalStorage fallback.\n *\n * ```js\n * // In browser window A:\n * broadcastchannel.subscribe('my events', data => console.log(data))\n * broadcastchannel.publish('my events', 'Hello world!') // => A: 'Hello world!' fires synchronously in same tab\n *\n * // In browser window B:\n * broadcastchannel.publish('my events', 'hello from tab B') // => A: 'hello from tab B'\n * ```\n *\n * @module broadcastchannel\n */\n\n// @todo before next major: use Uint8Array instead as buffer object\n\nimport * as map from './map.js'\nimport * as set from './set.js'\nimport * as buffer from './buffer.js'\nimport * as storage from './storage.js'\n\n/**\n * @typedef {Object} Channel\n * @property {Set} Channel.subs\n * @property {any} Channel.bc\n */\n\n/**\n * @type {Map}\n */\nconst channels = new Map()\n\n/* c8 ignore start */\nclass LocalStoragePolyfill {\n /**\n * @param {string} room\n */\n constructor (room) {\n this.room = room\n /**\n * @type {null|function({data:ArrayBuffer}):void}\n */\n this.onmessage = null\n /**\n * @param {any} e\n */\n this._onChange = e => e.key === room && this.onmessage !== null && this.onmessage({ data: buffer.fromBase64(e.newValue || '') })\n storage.onChange(this._onChange)\n }\n\n /**\n * @param {ArrayBuffer} buf\n */\n postMessage (buf) {\n storage.varStorage.setItem(this.room, buffer.toBase64(buffer.createUint8ArrayFromArrayBuffer(buf)))\n }\n\n close () {\n storage.offChange(this._onChange)\n }\n}\n/* c8 ignore stop */\n\n// Use BroadcastChannel or Polyfill\n/* c8 ignore next */\nconst BC = typeof BroadcastChannel === 'undefined' ? LocalStoragePolyfill : BroadcastChannel\n\n/**\n * @param {string} room\n * @return {Channel}\n */\nconst getChannel = room =>\n map.setIfUndefined(channels, room, () => {\n const subs = set.create()\n const bc = new BC(room)\n /**\n * @param {{data:ArrayBuffer}} e\n */\n /* c8 ignore next */\n bc.onmessage = e => subs.forEach(sub => sub(e.data, 'broadcastchannel'))\n return {\n bc, subs\n }\n })\n\n/**\n * Subscribe to global `publish` events.\n *\n * @function\n * @param {string} room\n * @param {function(any, any):any} f\n */\nexport const subscribe = (room, f) => {\n getChannel(room).subs.add(f)\n return f\n}\n\n/**\n * Unsubscribe from `publish` global events.\n *\n * @function\n * @param {string} room\n * @param {function(any, any):any} f\n */\nexport const unsubscribe = (room, f) => {\n const channel = getChannel(room)\n const unsubscribed = channel.subs.delete(f)\n if (unsubscribed && channel.subs.size === 0) {\n channel.bc.close()\n channels.delete(room)\n }\n return unsubscribed\n}\n\n/**\n * Publish data to all subscribers (including subscribers on this tab)\n *\n * @function\n * @param {string} room\n * @param {any} data\n * @param {any} [origin]\n */\nexport const publish = (room, data, origin = null) => {\n const c = getChannel(room)\n c.bc.postMessage(data)\n c.subs.forEach(sub => sub(data, origin))\n}\n","\nimport * as Y from 'yjs' // eslint-disable-line\nimport * as encoding from 'lib0/encoding'\nimport * as decoding from 'lib0/decoding'\n\nexport const messagePermissionDenied = 0\n\n/**\n * @param {encoding.Encoder} encoder\n * @param {string} reason\n */\nexport const writePermissionDenied = (encoder, reason) => {\n encoding.writeVarUint(encoder, messagePermissionDenied)\n encoding.writeVarString(encoder, reason)\n}\n\n/**\n * @callback PermissionDeniedHandler\n * @param {any} y\n * @param {string} reason\n */\n\n/**\n *\n * @param {decoding.Decoder} decoder\n * @param {Y.Doc} y\n * @param {PermissionDeniedHandler} permissionDeniedHandler\n */\nexport const readAuthMessage = (decoder, y, permissionDeniedHandler) => {\n switch (decoding.readVarUint(decoder)) {\n case messagePermissionDenied: permissionDeniedHandler(y, decoding.readVarString(decoder))\n }\n}\n","/**\n * Utility module to work with urls.\n *\n * @module url\n */\n\nimport * as object from './object.js'\n\n/**\n * Parse query parameters from an url.\n *\n * @param {string} url\n * @return {Object}\n */\nexport const decodeQueryParams = url => {\n /**\n * @type {Object}\n */\n const query = {}\n const urlQuerySplit = url.split('?')\n const pairs = urlQuerySplit[urlQuerySplit.length - 1].split('&')\n for (let i = 0; i < pairs.length; i++) {\n const item = pairs[i]\n if (item.length > 0) {\n const pair = item.split('=')\n query[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1] || '')\n }\n }\n return query\n}\n\n/**\n * @param {Object} params\n * @return {string}\n */\nexport const encodeQueryParams = params =>\n object.map(params, (val, key) => `${encodeURIComponent(key)}=${encodeURIComponent(val)}`).join('&')\n","/**\n * @module provider/websocket\n */\n\n/* eslint-env browser */\n\nimport * as Y from 'yjs' // eslint-disable-line\nimport * as bc from 'lib0/broadcastchannel'\nimport * as time from 'lib0/time'\nimport * as encoding from 'lib0/encoding'\nimport * as decoding from 'lib0/decoding'\nimport * as syncProtocol from 'y-protocols/sync'\nimport * as authProtocol from 'y-protocols/auth'\nimport * as awarenessProtocol from 'y-protocols/awareness'\nimport { Observable } from 'lib0/observable'\nimport * as math from 'lib0/math'\nimport * as url from 'lib0/url'\nimport * as env from 'lib0/environment'\n\nexport const messageSync = 0\nexport const messageQueryAwareness = 3\nexport const messageAwareness = 1\nexport const messageAuth = 2\n\n/**\n * encoder, decoder, provider, emitSynced, messageType\n * @type {Array}\n */\nconst messageHandlers = []\n\nmessageHandlers[messageSync] = (\n encoder,\n decoder,\n provider,\n emitSynced,\n _messageType\n) => {\n encoding.writeVarUint(encoder, messageSync)\n const syncMessageType = syncProtocol.readSyncMessage(\n decoder,\n encoder,\n provider.doc,\n provider\n )\n if (\n emitSynced && syncMessageType === syncProtocol.messageYjsSyncStep2 &&\n !provider.synced\n ) {\n provider.synced = true\n }\n}\n\nmessageHandlers[messageQueryAwareness] = (\n encoder,\n _decoder,\n provider,\n _emitSynced,\n _messageType\n) => {\n encoding.writeVarUint(encoder, messageAwareness)\n encoding.writeVarUint8Array(\n encoder,\n awarenessProtocol.encodeAwarenessUpdate(\n provider.awareness,\n Array.from(provider.awareness.getStates().keys())\n )\n )\n}\n\nmessageHandlers[messageAwareness] = (\n _encoder,\n decoder,\n provider,\n _emitSynced,\n _messageType\n) => {\n awarenessProtocol.applyAwarenessUpdate(\n provider.awareness,\n decoding.readVarUint8Array(decoder),\n provider\n )\n}\n\nmessageHandlers[messageAuth] = (\n _encoder,\n decoder,\n provider,\n _emitSynced,\n _messageType\n) => {\n authProtocol.readAuthMessage(\n decoder,\n provider.doc,\n (_ydoc, reason) => permissionDeniedHandler(provider, reason)\n )\n}\n\n// @todo - this should depend on awareness.outdatedTime\nconst messageReconnectTimeout = 30000\n\n/**\n * @param {WebsocketProvider} provider\n * @param {string} reason\n */\nconst permissionDeniedHandler = (provider, reason) =>\n console.warn(`Permission denied to access ${provider.url}.\\n${reason}`)\n\n/**\n * @param {WebsocketProvider} provider\n * @param {Uint8Array} buf\n * @param {boolean} emitSynced\n * @return {encoding.Encoder}\n */\nconst readMessage = (provider, buf, emitSynced) => {\n const decoder = decoding.createDecoder(buf)\n const encoder = encoding.createEncoder()\n const messageType = decoding.readVarUint(decoder)\n const messageHandler = provider.messageHandlers[messageType]\n if (/** @type {any} */ (messageHandler)) {\n messageHandler(encoder, decoder, provider, emitSynced, messageType)\n } else {\n console.error('Unable to compute message')\n }\n return encoder\n}\n\n/**\n * @param {WebsocketProvider} provider\n */\nconst setupWS = (provider) => {\n if (provider.shouldConnect && provider.ws === null) {\n const websocket = new provider._WS(provider.url)\n websocket.binaryType = 'arraybuffer'\n provider.ws = websocket\n provider.wsconnecting = true\n provider.wsconnected = false\n provider.synced = false\n\n websocket.onmessage = (event) => {\n provider.wsLastMessageReceived = time.getUnixTime()\n const encoder = readMessage(provider, new Uint8Array(event.data), true)\n if (encoding.length(encoder) > 1) {\n websocket.send(encoding.toUint8Array(encoder))\n }\n }\n websocket.onerror = (event) => {\n provider.emit('connection-error', [event, provider])\n }\n websocket.onclose = (event) => {\n provider.emit('connection-close', [event, provider])\n provider.ws = null\n provider.wsconnecting = false\n if (provider.wsconnected) {\n provider.wsconnected = false\n provider.synced = false\n // update awareness (all users except local left)\n awarenessProtocol.removeAwarenessStates(\n provider.awareness,\n Array.from(provider.awareness.getStates().keys()).filter((client) =>\n client !== provider.doc.clientID\n ),\n provider\n )\n provider.emit('status', [{\n status: 'disconnected'\n }])\n } else {\n provider.wsUnsuccessfulReconnects++\n }\n // Start with no reconnect timeout and increase timeout by\n // using exponential backoff starting with 100ms\n setTimeout(\n setupWS,\n math.min(\n math.pow(2, provider.wsUnsuccessfulReconnects) * 100,\n provider.maxBackoffTime\n ),\n provider\n )\n }\n websocket.onopen = () => {\n provider.wsLastMessageReceived = time.getUnixTime()\n provider.wsconnecting = false\n provider.wsconnected = true\n provider.wsUnsuccessfulReconnects = 0\n provider.emit('status', [{\n status: 'connected'\n }])\n // always send sync step 1 when connected\n const encoder = encoding.createEncoder()\n encoding.writeVarUint(encoder, messageSync)\n syncProtocol.writeSyncStep1(encoder, provider.doc)\n websocket.send(encoding.toUint8Array(encoder))\n // broadcast local awareness state\n if (provider.awareness.getLocalState() !== null) {\n const encoderAwarenessState = encoding.createEncoder()\n encoding.writeVarUint(encoderAwarenessState, messageAwareness)\n encoding.writeVarUint8Array(\n encoderAwarenessState,\n awarenessProtocol.encodeAwarenessUpdate(provider.awareness, [\n provider.doc.clientID\n ])\n )\n websocket.send(encoding.toUint8Array(encoderAwarenessState))\n }\n }\n provider.emit('status', [{\n status: 'connecting'\n }])\n }\n}\n\n/**\n * @param {WebsocketProvider} provider\n * @param {ArrayBuffer} buf\n */\nconst broadcastMessage = (provider, buf) => {\n const ws = provider.ws\n if (provider.wsconnected && ws && ws.readyState === ws.OPEN) {\n ws.send(buf)\n }\n if (provider.bcconnected) {\n bc.publish(provider.bcChannel, buf, provider)\n }\n}\n\n/**\n * Websocket Provider for Yjs. Creates a websocket connection to sync the shared document.\n * The document name is attached to the provided url. I.e. the following example\n * creates a websocket connection to http://localhost:1234/my-document-name\n *\n * @example\n * import * as Y from 'yjs'\n * import { WebsocketProvider } from 'y-websocket'\n * const doc = new Y.Doc()\n * const provider = new WebsocketProvider('http://localhost:1234', 'my-document-name', doc)\n *\n * @extends {Observable}\n */\nexport class WebsocketProvider extends Observable {\n /**\n * @param {string} serverUrl\n * @param {string} roomname\n * @param {Y.Doc} doc\n * @param {object} opts\n * @param {boolean} [opts.connect]\n * @param {awarenessProtocol.Awareness} [opts.awareness]\n * @param {Object} [opts.params] specify url parameters\n * @param {typeof WebSocket} [opts.WebSocketPolyfill] Optionall provide a WebSocket polyfill\n * @param {number} [opts.resyncInterval] Request server state every `resyncInterval` milliseconds\n * @param {number} [opts.maxBackoffTime] Maximum amount of time to wait before trying to reconnect (we try to reconnect using exponential backoff)\n * @param {boolean} [opts.disableBc] Disable cross-tab BroadcastChannel communication\n */\n constructor (serverUrl, roomname, doc, {\n connect = true,\n awareness = new awarenessProtocol.Awareness(doc),\n params = {},\n WebSocketPolyfill = WebSocket,\n resyncInterval = -1,\n maxBackoffTime = 2500,\n disableBc = false\n } = {}) {\n super()\n // ensure that url is always ends with /\n while (serverUrl[serverUrl.length - 1] === '/') {\n serverUrl = serverUrl.slice(0, serverUrl.length - 1)\n }\n this.serverUrl = serverUrl\n this.bcChannel = serverUrl + '/' + roomname\n this.maxBackoffTime = maxBackoffTime\n /**\n * The specified url parameters. This can be safely updated. The changed parameters will be used\n * when a new connection is established.\n * @type {Object}\n */\n this.params = params\n this.roomname = roomname\n this.doc = doc\n this._WS = WebSocketPolyfill\n this.awareness = awareness\n this.wsconnected = false\n this.wsconnecting = false\n this.bcconnected = false\n this.disableBc = disableBc\n this.wsUnsuccessfulReconnects = 0\n this.messageHandlers = messageHandlers.slice()\n /**\n * @type {boolean}\n */\n this._synced = false\n /**\n * @type {WebSocket?}\n */\n this.ws = null\n this.wsLastMessageReceived = 0\n /**\n * Whether to connect to other peers or not\n * @type {boolean}\n */\n this.shouldConnect = connect\n\n /**\n * @type {number}\n */\n this._resyncInterval = 0\n if (resyncInterval > 0) {\n this._resyncInterval = /** @type {any} */ (setInterval(() => {\n if (this.ws && this.ws.readyState === WebSocket.OPEN) {\n // resend sync step 1\n const encoder = encoding.createEncoder()\n encoding.writeVarUint(encoder, messageSync)\n syncProtocol.writeSyncStep1(encoder, doc)\n this.ws.send(encoding.toUint8Array(encoder))\n }\n }, resyncInterval))\n }\n\n /**\n * @param {ArrayBuffer} data\n * @param {any} origin\n */\n this._bcSubscriber = (data, origin) => {\n if (origin !== this) {\n const encoder = readMessage(this, new Uint8Array(data), false)\n if (encoding.length(encoder) > 1) {\n bc.publish(this.bcChannel, encoding.toUint8Array(encoder), this)\n }\n }\n }\n /**\n * Listens to Yjs updates and sends them to remote peers (ws and broadcastchannel)\n * @param {Uint8Array} update\n * @param {any} origin\n */\n this._updateHandler = (update, origin) => {\n if (origin !== this) {\n const encoder = encoding.createEncoder()\n encoding.writeVarUint(encoder, messageSync)\n syncProtocol.writeUpdate(encoder, update)\n broadcastMessage(this, encoding.toUint8Array(encoder))\n }\n }\n this.doc.on('update', this._updateHandler)\n /**\n * @param {any} changed\n * @param {any} _origin\n */\n this._awarenessUpdateHandler = ({ added, updated, removed }, _origin) => {\n const changedClients = added.concat(updated).concat(removed)\n const encoder = encoding.createEncoder()\n encoding.writeVarUint(encoder, messageAwareness)\n encoding.writeVarUint8Array(\n encoder,\n awarenessProtocol.encodeAwarenessUpdate(awareness, changedClients)\n )\n broadcastMessage(this, encoding.toUint8Array(encoder))\n }\n this._exitHandler = () => {\n awarenessProtocol.removeAwarenessStates(\n this.awareness,\n [doc.clientID],\n 'app closed'\n )\n }\n if (env.isNode && typeof process !== 'undefined') {\n process.on('exit', this._exitHandler)\n }\n awareness.on('update', this._awarenessUpdateHandler)\n this._checkInterval = /** @type {any} */ (setInterval(() => {\n if (\n this.wsconnected &&\n messageReconnectTimeout <\n time.getUnixTime() - this.wsLastMessageReceived\n ) {\n // no message received in a long time - not even your own awareness\n // updates (which are updated every 15 seconds)\n /** @type {WebSocket} */ (this.ws).close()\n }\n }, messageReconnectTimeout / 10))\n if (connect) {\n this.connect()\n }\n }\n\n get url () {\n const encodedParams = url.encodeQueryParams(this.params)\n return this.serverUrl + '/' + this.roomname +\n (encodedParams.length === 0 ? '' : '?' + encodedParams)\n }\n\n /**\n * @type {boolean}\n */\n get synced () {\n return this._synced\n }\n\n set synced (state) {\n if (this._synced !== state) {\n this._synced = state\n this.emit('synced', [state])\n this.emit('sync', [state])\n }\n }\n\n destroy () {\n if (this._resyncInterval !== 0) {\n clearInterval(this._resyncInterval)\n }\n clearInterval(this._checkInterval)\n this.disconnect()\n if (env.isNode && typeof process !== 'undefined') {\n process.off('exit', this._exitHandler)\n }\n this.awareness.off('update', this._awarenessUpdateHandler)\n this.doc.off('update', this._updateHandler)\n super.destroy()\n }\n\n connectBc () {\n if (this.disableBc) {\n return\n }\n if (!this.bcconnected) {\n bc.subscribe(this.bcChannel, this._bcSubscriber)\n this.bcconnected = true\n }\n // send sync step1 to bc\n // write sync step 1\n const encoderSync = encoding.createEncoder()\n encoding.writeVarUint(encoderSync, messageSync)\n syncProtocol.writeSyncStep1(encoderSync, this.doc)\n bc.publish(this.bcChannel, encoding.toUint8Array(encoderSync), this)\n // broadcast local state\n const encoderState = encoding.createEncoder()\n encoding.writeVarUint(encoderState, messageSync)\n syncProtocol.writeSyncStep2(encoderState, this.doc)\n bc.publish(this.bcChannel, encoding.toUint8Array(encoderState), this)\n // write queryAwareness\n const encoderAwarenessQuery = encoding.createEncoder()\n encoding.writeVarUint(encoderAwarenessQuery, messageQueryAwareness)\n bc.publish(\n this.bcChannel,\n encoding.toUint8Array(encoderAwarenessQuery),\n this\n )\n // broadcast local awareness state\n const encoderAwarenessState = encoding.createEncoder()\n encoding.writeVarUint(encoderAwarenessState, messageAwareness)\n encoding.writeVarUint8Array(\n encoderAwarenessState,\n awarenessProtocol.encodeAwarenessUpdate(this.awareness, [\n this.doc.clientID\n ])\n )\n bc.publish(\n this.bcChannel,\n encoding.toUint8Array(encoderAwarenessState),\n this\n )\n }\n\n disconnectBc () {\n // broadcast message with local awareness state set to null (indicating disconnect)\n const encoder = encoding.createEncoder()\n encoding.writeVarUint(encoder, messageAwareness)\n encoding.writeVarUint8Array(\n encoder,\n awarenessProtocol.encodeAwarenessUpdate(this.awareness, [\n this.doc.clientID\n ], new Map())\n )\n broadcastMessage(this, encoding.toUint8Array(encoder))\n if (this.bcconnected) {\n bc.unsubscribe(this.bcChannel, this._bcSubscriber)\n this.bcconnected = false\n }\n }\n\n disconnect () {\n this.shouldConnect = false\n this.disconnectBc()\n if (this.ws !== null) {\n this.ws.close()\n }\n }\n\n connect () {\n this.shouldConnect = true\n if (!this.wsconnected && this.ws === null) {\n setupWS(this)\n this.connectBc()\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 { encodeArrayBuffer, decodeArrayBuffer } from '../helpers/base64.ts'\nimport * as Y from 'yjs'\nimport * as decoding from 'lib0/decoding.js'\nimport * as encoding from 'lib0/encoding.js'\nimport * as syncProtocol from 'y-protocols/sync'\nimport { messageSync } from 'y-websocket'\n\n/**\n * Get Document state encode as base64.\n *\n * Used to store yjs state on the server.\n * @param {Y.Doc} ydoc - encode state of this doc\n * @return {string}\n */\nexport function getDocumentState(ydoc) {\n\tconst update = Y.encodeStateAsUpdate(ydoc)\n\treturn encodeArrayBuffer(update)\n}\n\n/**\n *\n * @param {Y.Doc} ydoc - apply state to this doc\n * @param {string} documentState - base64 encoded doc state\n * @param {object} origin - initiator object e.g. WebsocketProvider\n */\nexport function applyDocumentState(ydoc, documentState, origin) {\n\tconst update = decodeArrayBuffer(documentState)\n\tY.applyUpdate(ydoc, update, origin)\n}\n\n/**\n * Update message for everything in ydoc that is not in encodedBaseUpdate\n *\n * @param {Y.Doc} ydoc - encode state of this doc\n * @param {string} encodedBaseUpdate - base64 encoded doc update to build upon\n * @return {Uint8Array|undefined}\n */\nexport function getUpdateMessage(ydoc, encodedBaseUpdate) {\n\tconst baseUpdate = decodeArrayBuffer(encodedBaseUpdate)\n\tconst baseStateVector = Y.encodeStateVectorFromUpdate(baseUpdate)\n\tconst docStateVector = Y.encodeStateVector(ydoc)\n\tif (sameState(baseStateVector, docStateVector)) {\n\t\t// no additional state in the ydoc - early return\n\t\treturn\n\t}\n\tconst encoder = encoding.createEncoder()\n\tencoding.writeVarUint(encoder, messageSync)\n\tconst update = Y.encodeStateAsUpdate(ydoc, baseStateVector)\n\tsyncProtocol.writeUpdate(encoder, update)\n\treturn encoding.toUint8Array(encoder)\n}\n\n/**\n * Apply an updated message to the ydoc.\n *\n * Only used in tests right now.\n * @param {Y.Doc} ydoc - encode state of this doc\n * @param {Uint8Array} updateMessage - y-websocket sync message with update\n * @param {object} origin - initiator object e.g. WebsocketProvider\n */\nexport function applyUpdateMessage(ydoc, updateMessage, origin = 'origin') {\n\tconst decoder = decoding.createDecoder(updateMessage)\n\tconst messageType = decoding.readVarUint(decoder)\n\tif (messageType !== messageSync) {\n\t\tconsole.error('y.js update message with invalid type', messageType)\n\t\treturn\n\t}\n\t// There are no responses to updates - so this is a dummy.\n\tconst encoder = encoding.createEncoder()\n\tsyncProtocol.readSyncMessage(\n\t\tdecoder,\n\t\tencoder,\n\t\tydoc,\n\t\torigin,\n\t)\n}\n\n/**\n * Get the steps for sending to the server\n *\n * @param {object[]} queue - queue for the outgoing steps\n */\nexport function getSteps(queue) {\n\treturn queue.map(s => encodeArrayBuffer(s))\n\t\t.filter(s => s < 'AQ')\n}\n\n/**\n * Encode the latest awareness message for sending\n *\n * @param {object[]} queue - queue for the outgoing steps\n */\nexport function getAwareness(queue) {\n\treturn queue.map(s => encodeArrayBuffer(s))\n\t\t.findLast(s => s > 'AQ') || ''\n}\n\n/**\n * Log y.js messages with their type and initiator call stack\n *\n * @param {string} step - Y.js message\n */\nexport function logStep(step) {\n\t// Create error for stack trace\n\tconst err = new Error()\n\n\tconst decoder = decoding.createDecoder(step)\n\n\tconst messageType = decoding.readVarUint(decoder)\n\tconst subType = decoding.readVarUint(decoder)\n\n\tconst encodedStep = encodeArrayBuffer(step)\n\tswitch (messageType) {\n\tcase 0:\n\t\tconsole.debug('y.js message sync', subType, encodedStep, err.stack)\n\t\tbreak\n\tcase 3:\n\t\tconsole.debug('y.js message awareness_query', encodedStep, err.stack)\n\t\tbreak\n\tcase 1:\n\t\tconsole.debug('y.js message awareness', encodedStep, err.stack)\n\t\tbreak\n\t}\n}\n\n/**\n * Helper function to check if two state vectors have the same state\n * @param {Array} arr - state vector to compare\n * @param {Array} other - state vector to compare against\n */\nfunction sameState(arr, other) {\n\treturn arr.length === other.length\n\t\t&& arr.every((value, index) => other[index] === value)\n}\n","export default function(n){return{all:n=n||new Map,on:function(t,e){var i=n.get(t);i?i.push(e):n.set(t,[e])},off:function(t,e){var i=n.get(t);i&&(e?i.splice(i.indexOf(e)>>>0,1):n.set(t,[]))},emit:function(t,e){var i=n.get(t);i&&i.slice().map(function(n){n(e)}),(i=n.get(\"*\"))&&i.slice().map(function(n){n(t,e)})}}}\n//# sourceMappingURL=mitt.mjs.map\n","/**\n * SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nimport axios from '@nextcloud/axios'\nimport { generateUrl } from '@nextcloud/router'\n\nexport class ConnectionClosedError extends Error {\n\n\tconstructor(message = 'Close has already been called on the connection', ...rest) {\n\t\tsuper(message, ...rest)\n\t}\n\n}\n\nclass SessionApi {\n\n\t#options\n\n\tconstructor(options = {}) {\n\t\tthis.#options = options\n\t}\n\n\topen({ fileId, baseVersionEtag }) {\n\t\treturn axios.put(this.#url(`session/${fileId}/create`), {\n\t\t\tfileId,\n\t\t\tbaseVersionEtag,\n\t\t\tfilePath: this.#options.filePath,\n\t\t\ttoken: this.#options.shareToken,\n\t\t\tguestName: this.#options.guestName,\n\t\t\tforceRecreate: this.#options.forceRecreate,\n\t\t}).then(response => new Connection(response, this.#options))\n\t}\n\n\t#url(endpoint) {\n\t\tconst isPublic = !!this.#options.shareToken\n\t\treturn _endpointUrl(endpoint, isPublic)\n\t}\n\n}\n\nexport class Connection {\n\n\t#content\n\t#closed\n\t#documentState\n\t#document\n\t#session\n\t#lock\n\t#readOnly\n\t#options\n\n\tconstructor(response, options) {\n\t\tconst { document, session, lock, readOnly, content, documentState } = response.data\n\t\tthis.#document = document\n\t\tthis.#session = session\n\t\tthis.#lock = lock\n\t\tthis.#readOnly = readOnly\n\t\tthis.#content = content\n\t\tthis.#documentState = documentState\n\t\tthis.#options = options\n\t\tthis.isPublic = !!options.shareToken\n\t\tthis.closed = false\n\t}\n\n\tget session() {\n\t\treturn this.#session\n\t}\n\n\tget document() {\n\t\treturn this.#document\n\t}\n\n\tget docStateVersion() {\n\t\treturn this.#documentState ? this.#document.lastSavedVersion : 0\n\t}\n\n\tget state() {\n\t\treturn {\n\t\t\tdocument: { ...this.#document, readOnly: this.#readOnly },\n\t\t\tsession: this.#session,\n\t\t\tdocumentSource: this.#content || '',\n\t\t\tdocumentState: this.#documentState,\n\t\t}\n\t}\n\n\tget isClosed() {\n\t\treturn this.closed\n\t}\n\n\tget #defaultParams() {\n\t\treturn {\n\t\t\tdocumentId: this.#document.id,\n\t\t\tsessionId: this.#session.id,\n\t\t\tsessionToken: this.#session.token,\n\t\t\ttoken: this.#options.shareToken,\n\t\t}\n\t}\n\n\tsync({ version }) {\n\t\treturn this.#post(this.#url(`session/${this.#document.id}/sync`), {\n\t\t\t...this.#defaultParams,\n\t\t\tfilePath: this.#options.filePath,\n\t\t\tbaseVersionEtag: this.#document.baseVersionEtag,\n\t\t\tversion,\n\t\t})\n\t}\n\n\tsave({ version, autosaveContent, documentState, force, manualSave }) {\n\t\treturn this.#post(this.#url(`session/${this.#document.id}/save`), {\n\t\t\t...this.#defaultParams,\n\t\t\tfilePath: this.#options.filePath,\n\t\t\tbaseVersionEtag: this.#document.baseVersionEtag,\n\t\t\tversion,\n\t\t\tautosaveContent,\n\t\t\tdocumentState,\n\t\t\tforce,\n\t\t\tmanualSave,\n\t\t})\n\t}\n\n\tpush({ steps, version, awareness }) {\n\t\treturn this.#post(this.#url(`session/${this.#document.id}/push`), {\n\t\t\t...this.#defaultParams,\n\t\t\tfilePath: this.#options.filePath,\n\t\t\tbaseVersionEtag: this.#document.baseVersionEtag,\n\t\t\tsteps,\n\t\t\tversion,\n\t\t\tawareness,\n\t\t})\n\t}\n\n\t// TODO: maybe return a new connection here so connections have immutable state\n\tupdate(guestName) {\n\t\treturn this.#post(this.#url(`session/${this.#document.id}/session`), {\n\t\t\t...this.#defaultParams,\n\t\t\tguestName,\n\t\t}).then(({ data }) => {\n\t\t\tthis.#session = data\n\t\t})\n\t}\n\n\tuploadAttachment(file) {\n\t\tconst formData = new FormData()\n\t\tformData.append('file', file)\n\t\tconst url = _endpointUrl('attachment/upload')\n\t\t\t+ '?documentId=' + encodeURIComponent(this.#document.id)\n\t\t\t+ '&sessionId=' + encodeURIComponent(this.#session.id)\n\t\t\t+ '&sessionToken=' + encodeURIComponent(this.#session.token)\n\t\t\t+ '&shareToken=' + encodeURIComponent(this.#options.shareToken || '')\n\t\treturn this.#post(url, formData, {\n\t\t\theaders: {\n\t\t\t\t'Content-Type': 'multipart/form-data',\n\t\t\t},\n\t\t})\n\t}\n\n\tinsertAttachmentFile(filePath) {\n\t\treturn this.#post(_endpointUrl('attachment/filepath'), {\n\t\t\tdocumentId: this.#document.id,\n\t\t\tsessionId: this.#session.id,\n\t\t\tsessionToken: this.#session.token,\n\t\t\tfilePath,\n\t\t})\n\t}\n\n\tclose() {\n\t\treturn this.#post(\n\t\t\tthis.#url(`session/${this.#document.id}/close`),\n\t\t\tthis.#defaultParams,\n\t\t).then(() => {\n\t\t\tthis.closed = true\n\t\t})\n\t}\n\n\t// To be used in Cypress tests only\n\tsetBaseVersionEtag(baseVersionEtag) {\n\t\tthis.#document.baseVersionEtag = baseVersionEtag\n\t}\n\n\t#post(...args) {\n\t\tif (this.closed) {\n\t\t\treturn Promise.reject(new ConnectionClosedError())\n\t\t}\n\t\treturn axios.post(...args)\n\t}\n\n\t#url(endpoint) {\n\t\tconst isPublic = !!this.#defaultParams.token\n\t\treturn _endpointUrl(endpoint, isPublic)\n\t}\n\n}\n\n/**\n *\n * @param {string} endpoint - endpoint of the url inside apps/text\n * @param {boolean} isPublic - public url or not\n */\nfunction _endpointUrl(endpoint, isPublic = false) {\n\tconst _baseUrl = generateUrl('/apps/text')\n\tif (isPublic) {\n\t\treturn `${_baseUrl}/public/${endpoint}`\n\t}\n\treturn `${_baseUrl}/${endpoint}`\n}\n\nexport default SessionApi\n","/**\n * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nimport { logger } from '../helpers/logger.js'\nimport { SyncService, ERROR_TYPE } from './SyncService.js'\nimport { Connection } from './SessionApi.js'\n\n/**\n * Minimum inverval to refetch the document changes\n *\n * @type {number} time in ms\n */\nconst FETCH_INTERVAL = 300\n\n/**\n * Maximum interval between refetches of document state if multiple users have joined\n *\n * @type {number} time in ms\n */\nconst FETCH_INTERVAL_MAX = 5000\n\n/**\n * Interval to check for changes when there is only one user joined\n *\n * @type {number} time in ms\n */\nconst FETCH_INTERVAL_SINGLE_EDITOR = 5000\n\n/**\n * Interval to check for changes for read only users\n * @type {number}\n */\nconst FETCH_INTERVAL_READ_ONLY = 30000\n\n/**\n * Interval to fetch for changes when a browser window is considered invisible by the\n * page visibility API https://developer.mozilla.org/de/docs/Web/API/Page_Visibility_API\n *\n * @type {number} time in ms\n */\nconst FETCH_INTERVAL_INVISIBLE = 60000\n\n/* Maximum number of retries for fetching before emitting a connection error */\nconst MAX_RETRY_FETCH_COUNT = 5\n\n/**\n * Timeout for sessions to be marked as disconnected\n * Make sure that this is higher than any FETCH_INTERVAL_ values\n */\nconst COLLABORATOR_DISCONNECT_TIME = FETCH_INTERVAL_INVISIBLE * 1.5\n\nclass PollingBackend {\n\n\t/** @type {SyncService} */\n\t#syncService\n\t/** @type {Connection} */\n\t#connection\n\n\t#lastPoll\n\t#fetchInterval\n\t#fetchRetryCounter\n\t#pollActive\n\t#initialLoadingFinished\n\n\tconstructor(syncService, connection) {\n\t\tthis.#syncService = syncService\n\t\tthis.#connection = connection\n\t\tthis.#fetchInterval = FETCH_INTERVAL\n\t\tthis.#fetchRetryCounter = 0\n\t\tthis.#lastPoll = 0\n\t}\n\n\tconnect() {\n\t\tif (this.fetcher > 0) {\n\t\t\tconsole.error('Trying to connect, but already connected')\n\t\t\treturn\n\t\t}\n\t\tthis.#initialLoadingFinished = false\n\t\tthis.fetcher = setInterval(this._fetchSteps.bind(this), 50)\n\t\tdocument.addEventListener('visibilitychange', this.visibilitychange.bind(this))\n\t}\n\n\t/**\n\t * This method is only called though the timer\n\t */\n\tasync _fetchSteps() {\n\t\tif (this.#pollActive) {\n\t\t\treturn\n\t\t}\n\n\t\tconst now = Date.now()\n\n\t\tif (this.#lastPoll > (now - this.#fetchInterval)) {\n\t\t\treturn\n\t\t}\n\n\t\tif (!this.fetcher) {\n\t\t\tconsole.error('No inverval but triggered')\n\t\t\treturn\n\t\t}\n\n\t\tthis.#pollActive = true\n\n\t\tlogger.debug('[PollingBackend] Fetching steps', this.#syncService.version)\n\t\tawait this.#connection.sync({\n\t\t\tversion: this.#syncService.version,\n\t\t}).then(this._handleResponse.bind(this), this._handleError.bind(this))\n\t\tthis.#lastPoll = Date.now()\n\t\tthis.#pollActive = false\n\t}\n\n\t_handleResponse({ data }) {\n\t\tconst { document, sessions } = data\n\t\tthis.#fetchRetryCounter = 0\n\n\t\tthis.#syncService.emit('change', { document, sessions })\n\t\tthis.#syncService._receiveSteps(data)\n\n\t\tif (data.steps.length === 0) {\n\t\t\tif (!this.#initialLoadingFinished) {\n\t\t\t\tthis.#initialLoadingFinished = true\n\t\t\t}\n\t\t\tif (this.#syncService.checkIdle()) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst disconnect = Date.now() - COLLABORATOR_DISCONNECT_TIME\n\t\t\tconst alive = sessions.filter((s) => s.lastContact * 1000 > disconnect)\n\t\t\tif (this.#syncService.isReadOnly) {\n\t\t\t\tthis.maximumReadOnlyTimer()\n\t\t\t} else if (alive.length < 2) {\n\t\t\t\tthis.maximumRefetchTimer()\n\t\t\t} else {\n\t\t\t\tthis.increaseRefetchTimer()\n\t\t\t}\n\t\t\tthis.#syncService.emit('stateChange', { initialLoading: true })\n\t\t\treturn\n\t\t}\n\n\t\tif (this.#initialLoadingFinished) {\n\t\t\tthis.resetRefetchTimer()\n\t\t}\n\t}\n\n\t_handleError(e) {\n\t\tif (!e.response || e.code === 'ECONNABORTED') {\n\t\t\tif (this.#fetchRetryCounter++ >= MAX_RETRY_FETCH_COUNT) {\n\t\t\t\tlogger.error('[PollingBackend:fetchSteps] Network error when fetching steps, emitting CONNECTION_FAILED')\n\t\t\t\tthis.#syncService.emit('error', { type: ERROR_TYPE.CONNECTION_FAILED, data: {} })\n\n\t\t\t} else {\n\t\t\t\tlogger.error(`[PollingBackend:fetchSteps] Network error when fetching steps, retry ${this.#fetchRetryCounter}`)\n\t\t\t}\n\t\t} else if (e.response.status === 409) {\n\t\t\t// Still apply the steps to update our version of the document\n\t\t\tthis._handleResponse(e.response)\n\t\t\tlogger.error('Conflict during file save, please resolve')\n\t\t\tthis.#syncService.emit('error', {\n\t\t\t\ttype: ERROR_TYPE.SAVE_COLLISSION,\n\t\t\t\tdata: {\n\t\t\t\t\toutsideChange: e.response.data.outsideChange,\n\t\t\t\t},\n\t\t\t})\n\t\t} else if (e.response.status === 412) {\n\t\t\tthis.#syncService.emit('error', { type: ERROR_TYPE.LOAD_ERROR, data: e.response })\n\t\t\tthis.disconnect()\n\t\t} else if (e.response.status === 403) {\n\t\t\tthis.#syncService.emit('error', { type: ERROR_TYPE.SOURCE_NOT_FOUND, data: {} })\n\t\t\tthis.disconnect()\n\t\t} else if (e.response.status === 404) {\n\t\t\tthis.#syncService.emit('error', { type: ERROR_TYPE.SOURCE_NOT_FOUND, data: {} })\n\t\t\tthis.disconnect()\n\t\t} else if (e.response.status === 503) {\n\t\t\tthis.increaseRefetchTimer()\n\t\t\tthis.#syncService.emit('error', { type: ERROR_TYPE.CONNECTION_FAILED, data: {} })\n\t\t\tlogger.error('Failed to fetch steps due to unavailable service', { error: e })\n\t\t} else {\n\t\t\tthis.disconnect()\n\t\t\tthis.#syncService.emit('error', { type: ERROR_TYPE.CONNECTION_FAILED, data: {} })\n\t\t\tlogger.error('Failed to fetch steps due to other reason', { error: e })\n\t\t}\n\n\t}\n\n\tdisconnect() {\n\t\tclearInterval(this.fetcher)\n\t\tthis.fetcher = 0\n\t\tdocument.removeEventListener('visibilitychange', this.visibilitychange.bind(this))\n\t}\n\n\tresetRefetchTimer() {\n\t\tthis.#fetchInterval = FETCH_INTERVAL\n\n\t}\n\n\tincreaseRefetchTimer() {\n\t\tthis.#fetchInterval = Math.min(this.#fetchInterval * 2, FETCH_INTERVAL_MAX)\n\t}\n\n\tmaximumRefetchTimer() {\n\t\tthis.#fetchInterval = FETCH_INTERVAL_SINGLE_EDITOR\n\t}\n\n\tmaximumReadOnlyTimer() {\n\t\tthis.#fetchInterval = FETCH_INTERVAL_READ_ONLY\n\t}\n\n\tvisibilitychange() {\n\t\tif (document.visibilityState === 'hidden') {\n\t\t\tthis.#fetchInterval = FETCH_INTERVAL_INVISIBLE\n\t\t} else {\n\t\t\tthis.resetRefetchTimer()\n\t\t}\n\t}\n\n}\n\nexport default PollingBackend\n","/**\n * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\n/* eslint-disable jsdoc/valid-types */\n\nimport mitt from 'mitt'\nimport debounce from 'debounce'\n\nimport PollingBackend from './PollingBackend.js'\nimport SessionApi, { Connection } from './SessionApi.js'\nimport { getSteps, getAwareness } from '../helpers/yjs.js'\nimport { logger } from '../helpers/logger.js'\n\n/**\n * Timeout after which the editor will consider a document without changes being synced as idle\n * The session will be terminated and the document will stay open in read-only mode with a button to reconnect if needed\n *\n * @type {number}\n */\nconst IDLE_TIMEOUT = 1440\n\n/**\n * Interval to save the serialized document and the document state\n *\n * @type {number} time in ms\n */\nconst AUTOSAVE_INTERVAL = 30000\n\nconst COLLABORATOR_IDLE_TIME = 60\n\nconst COLLABORATOR_DISCONNECT_TIME = 90\n\nconst ERROR_TYPE = {\n\t/**\n\t * Failed to save collaborative document due to external change\n\t * collission needs to be resolved manually\n\t */\n\tSAVE_COLLISSION: 0,\n\t/**\n\t * Failed to push changes for MAX_REBASE_RETRY times\n\t */\n\tPUSH_FAILURE: 1,\n\n\tLOAD_ERROR: 2,\n\n\tCONNECTION_FAILED: 3,\n\n\tSOURCE_NOT_FOUND: 4,\n\n\tPUSH_FORBIDDEN: 5,\n}\n\nclass SyncService {\n\n\t#sendIntervalId\n\t#connection\n\n\tconstructor({ baseVersionEtag, serialize, getDocumentState, ...options }) {\n\t\t/** @type {import('mitt').Emitter} _bus */\n\t\tthis._bus = mitt()\n\n\t\tthis.serialize = serialize\n\t\tthis.getDocumentState = getDocumentState\n\t\tthis._api = new SessionApi(options)\n\t\tthis.#connection = null\n\n\t\tthis.stepClientIDs = []\n\n\t\tthis.lastStepPush = Date.now()\n\n\t\tthis.version = null\n\t\tthis.baseVersionEtag = baseVersionEtag\n\t\tthis.sending = false\n\t\tthis.#sendIntervalId = null\n\n\t\tthis.autosave = debounce(this._autosave.bind(this), AUTOSAVE_INTERVAL)\n\n\t\treturn this\n\t}\n\n\tget isReadOnly() {\n\t\treturn this.#connection.state.document.readOnly\n\t}\n\n\tget guestName() {\n\t\treturn this.#connection.session.guestName\n\t}\n\n\tasync open({ fileId, initialSession }) {\n\n\t\tconst connect = initialSession\n\t\t\t? Promise.resolve(new Connection({ data: initialSession }, {}))\n\t\t\t: this._api.open({ fileId, baseVersionEtag: this.baseVersionEtag })\n\t\t\t\t.catch(error => this._emitError(error))\n\n\t\tthis.#connection = await connect\n\t\tif (!this.#connection) {\n\t\t\t// Error was already emitted in connect\n\t\t\treturn\n\t\t}\n\t\tthis.backend = new PollingBackend(this, this.#connection)\n\t\tthis.version = this.#connection.docStateVersion\n\t\tthis.baseVersionEtag = this.#connection.document.baseVersionEtag\n\t\tthis.emit('opened', {\n\t\t\t...this.#connection.state,\n\t\t\tversion: this.version,\n\t\t})\n\t\tthis.emit('loaded', {\n\t\t\t...this.#connection.state,\n\t\t\tversion: this.version,\n\t\t})\n\t}\n\n\tstartSync() {\n\t\tthis.backend.connect()\n\t}\n\n\tsyncUp() {\n\t\tthis.backend.resetRefetchTimer()\n\t}\n\n\t_emitError(error) {\n\t\tif (!error.response || error.code === 'ECONNABORTED') {\n\t\t\tthis.emit('error', { type: ERROR_TYPE.CONNECTION_FAILED, data: {} })\n\t\t} else {\n\t\t\tthis.emit('error', { type: ERROR_TYPE.LOAD_ERROR, data: error.response })\n\t\t}\n\t}\n\n\tupdateSession(guestName) {\n\t\tif (!this.#connection.isPublic) {\n\t\t\treturn Promise.reject(new Error())\n\t\t}\n\t\treturn this.#connection.update(guestName)\n\t\t\t.catch((error) => {\n\t\t\t\tlogger.error('Failed to update the session', { error })\n\t\t\t\treturn Promise.reject(error)\n\t\t\t})\n\t}\n\n\tsendSteps(getSendable) {\n\t\t// If already waiting to send, do nothing.\n\t\tif (this.#sendIntervalId) {\n\t\t\treturn\n\t\t}\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis.#sendIntervalId = setInterval(() => {\n\t\t\t\tif (this.#connection && !this.sending) {\n\t\t\t\t\tthis.sendStepsNow(getSendable).then(resolve).catch(reject)\n\t\t\t\t}\n\t\t\t}, 200)\n\t\t})\n\t}\n\n\tsendStepsNow(getSendable) {\n\t\tthis.sending = true\n\t\tclearInterval(this.#sendIntervalId)\n\t\tthis.#sendIntervalId = null\n\t\tconst data = getSendable()\n\t\tif (data.steps.length > 0) {\n\t\t\tthis.emit('stateChange', { dirty: true })\n\t\t}\n\t\treturn this.#connection.push(data)\n\t\t\t.then((response) => {\n\t\t\t\tthis.sending = false\n\t\t\t\tthis.emit('sync', {\n\t\t\t\t\tsteps: [],\n\t\t\t\t\tdocument: this.#connection.document,\n\t\t\t\t\tversion: this.version,\n\t\t\t\t})\n\t\t\t}).catch(err => {\n\t\t\t\tconst { response, code } = err\n\t\t\t\tthis.sending = false\n\t\t\t\tif (!response || code === 'ECONNABORTED') {\n\t\t\t\t\tthis.emit('error', { type: ERROR_TYPE.CONNECTION_FAILED, data: {} })\n\t\t\t\t}\n\t\t\t\tif (response?.status === 412) {\n\t\t\t\t\tthis.emit('error', { type: ERROR_TYPE.LOAD_ERROR, data: response })\n\t\t\t\t} else if (response?.status === 403) {\n\t\t\t\t\tif (!data.document) {\n\t\t\t\t\t\t// either the session is invalid or the document is read only.\n\t\t\t\t\t\tlogger.error('failed to write to document - not allowed')\n\t\t\t\t\t\tthis.emit('error', { type: ERROR_TYPE.PUSH_FORBIDDEN, data: {} })\n\t\t\t\t\t}\n\t\t\t\t\t// Only emit conflict event if we have synced until the latest version\n\t\t\t\t\tif (response.data.document?.currentVersion === this.version) {\n\t\t\t\t\t\tthis.emit('error', { type: ERROR_TYPE.PUSH_FAILURE, data: {} })\n\t\t\t\t\t\tOC.Notification.showTemporary('Changes could not be sent yet')\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new Error('Failed to apply steps. Retry!', { cause: err })\n\t\t\t})\n\t}\n\n\t_receiveSteps({ steps, document, sessions }) {\n\t\tconst awareness = sessions\n\t\t\t.filter(s => s.lastContact > (Math.floor(Date.now() / 1000) - COLLABORATOR_DISCONNECT_TIME))\n\t\t\t.filter(s => s.lastAwarenessMessage)\n\t\t\t.map(s => {\n\t\t\t\treturn { step: s.lastAwarenessMessage, clientId: s.clientId }\n\t\t\t})\n\t\tconst newSteps = [...awareness]\n\t\tfor (let i = 0; i < steps.length; i++) {\n\t\t\tconst singleSteps = steps[i].data\n\t\t\tif (this.version < steps[i].version) {\n\t\t\t\tthis.version = steps[i].version\n\t\t\t}\n\t\t\tif (!Array.isArray(singleSteps)) {\n\t\t\t\tlogger.error('Invalid step data, skipping step', { step: steps[i] })\n\t\t\t\t// TODO: recover\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tsingleSteps.forEach(step => {\n\t\t\t\tnewSteps.push({\n\t\t\t\t\tstep,\n\t\t\t\t\tclientID: steps[i].sessionId,\n\t\t\t\t})\n\t\t\t})\n\t\t}\n\t\tthis.lastStepPush = Date.now()\n\t\tthis.emit('sync', {\n\t\t\tsteps: newSteps,\n\t\t\t// TODO: do we actually need to dig into the connection here?\n\t\t\tdocument: this.#connection.document,\n\t\t\tversion: this.version,\n\t\t})\n\t}\n\n\tcheckIdle() {\n\t\tconst lastPushMinutesAgo = (Date.now() - this.lastStepPush) / 1000 / 60\n\t\tif (lastPushMinutesAgo > IDLE_TIMEOUT) {\n\t\t\tlogger.debug(`[SyncService] Document is idle for ${this.IDLE_TIMEOUT} minutes, suspending connection`)\n\t\t\tthis.emit('idle')\n\t\t\treturn true\n\t\t}\n\t\treturn false\n\t}\n\n\t_getContent() {\n\t\treturn this.serialize()\n\t}\n\n\tasync save({ force = false, manualSave = true } = {}) {\n\t\tlogger.debug('[SyncService] saving', arguments[0])\n\t\ttry {\n\t\t\tconst response = await this.#connection.save({\n\t\t\t\tversion: this.version,\n\t\t\t\tautosaveContent: this._getContent(),\n\t\t\t\tdocumentState: this.getDocumentState(),\n\t\t\t\tforce,\n\t\t\t\tmanualSave,\n\t\t\t})\n\t\t\tthis.emit('stateChange', { dirty: false })\n\t\t\tthis.#connection.document.lastSavedVersionTime = Date.now() / 1000\n\t\t\tlogger.debug('[SyncService] saved', response)\n\t\t\tconst { document, sessions } = response.data\n\t\t\tthis.emit('save', { document, sessions })\n\t\t\tthis.autosave.clear()\n\t\t} catch (e) {\n\t\t\tlogger.error('Failed to save document.', { error: e })\n\t\t\tthrow e\n\t\t}\n\t}\n\n\tforceSave() {\n\t\treturn this.save({ force: true })\n\t}\n\n\t_autosave() {\n\t\treturn this.save({ manualSave: false }).catch((error) => {\n\t\t\tlogger.error('Failed to autosave document.', { error })\n\t\t})\n\t}\n\n\tasync sendRemainingSteps(queue) {\n\t\tif (queue.length === 0) {\n\t\t\treturn\n\t\t}\n\t\tlet outbox = []\n\t\tconst steps = getSteps(queue)\n\t\tconst awareness = getAwareness(queue)\n\t\treturn this.sendStepsNow(() => {\n\t\t\tconst data = { steps, awareness, version: this.version }\n\t\t\toutbox = [...queue]\n\t\t\tlogger.debug('sending final steps ', data)\n\t\t\treturn data\n\t\t})?.then(() => {\n\t\t\t// only keep the steps that were not send yet\n\t\t\tqueue.splice(0,\n\t\t\t\tqueue.length,\n\t\t\t\t...queue.filter(s => !outbox.includes(s)),\n\t\t\t)\n\t\t}, err => logger.error(err))\n\t}\n\n\tasync close() {\n\t\t// Make sure to leave no pending requests behind.\n\t\tthis.autosave.clear()\n\t\tthis.backend?.disconnect()\n\t\tif (!this.#connection || this.#connection.isClosed) {\n\t\t\treturn\n\t\t}\n\t\treturn this.#connection.close()\n\t\t\t// Log and ignore possible network issues.\n\t\t\t.catch(e => {\n\t\t\t\tlogger.info('Failed to close connection.', { e })\n\t\t\t})\n\t}\n\n\tuploadAttachment(file) {\n\t\treturn this.#connection.uploadAttachment(file)\n\t}\n\n\tinsertAttachmentFile(filePath) {\n\t\treturn this.#connection.insertAttachmentFile(filePath)\n\t}\n\n\ton(event, callback) {\n\t\tthis._bus.on(event, callback)\n\t\treturn this\n\t}\n\n\toff(event, callback) {\n\t\tthis._bus.off(event, callback)\n\t\treturn this\n\t}\n\n\temit(event, data) {\n\t\tthis._bus.emit(event, data)\n\t}\n\n}\n\nexport default SyncService\nexport { SyncService, ERROR_TYPE, IDLE_TIMEOUT, COLLABORATOR_IDLE_TIME, COLLABORATOR_DISCONNECT_TIME }\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = void 0;\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n/* eslint-disable max-depth, max-statements, complexity, max-lines-per-function */\nvar SLASH = 47;\nvar DOT = 46;\nvar assertPath = function assertPath(path) {\n var t = _typeof(path);\n if (t !== 'string') {\n throw new TypeError(\"Expected a string, got a \".concat(t));\n }\n};\n\n// this function is directly from node source\nvar posixNormalize = function posixNormalize(path, allowAboveRoot) {\n var res = '';\n var lastSegmentLength = 0;\n var lastSlash = -1;\n var dots = 0;\n var code;\n for (var i = 0; i <= path.length; ++i) {\n if (i < path.length) {\n code = path.charCodeAt(i);\n } else if (code === SLASH) {\n break;\n } else {\n code = SLASH;\n }\n if (code === SLASH) {\n if (lastSlash === i - 1 || dots === 1) {\n // NOOP\n } else if (lastSlash !== i - 1 && dots === 2) {\n if (res.length < 2 || lastSegmentLength !== 2 || res.charCodeAt(res.length - 1) !== DOT || res.charCodeAt(res.length - 2) !== DOT) {\n if (res.length > 2) {\n var lastSlashIndex = res.lastIndexOf('/');\n if (lastSlashIndex !== res.length - 1) {\n if (lastSlashIndex === -1) {\n res = '';\n lastSegmentLength = 0;\n } else {\n res = res.slice(0, lastSlashIndex);\n lastSegmentLength = res.length - 1 - res.lastIndexOf('/');\n }\n lastSlash = i;\n dots = 0;\n continue;\n }\n } else if (res.length === 2 || res.length === 1) {\n res = '';\n lastSegmentLength = 0;\n lastSlash = i;\n dots = 0;\n continue;\n }\n }\n if (allowAboveRoot) {\n if (res.length > 0) {\n res += '/..';\n } else {\n res = '..';\n }\n lastSegmentLength = 2;\n }\n } else {\n if (res.length > 0) {\n res += '/' + path.slice(lastSlash + 1, i);\n } else {\n res = path.slice(lastSlash + 1, i);\n }\n lastSegmentLength = i - lastSlash - 1;\n }\n lastSlash = i;\n dots = 0;\n } else if (code === DOT && dots !== -1) {\n ++dots;\n } else {\n dots = -1;\n }\n }\n return res;\n};\nvar decode = function decode(s) {\n try {\n return decodeURIComponent(s);\n } catch (_unused) {\n return s;\n }\n};\nvar normalize = function normalize(p) {\n assertPath(p);\n var path = p;\n if (path.length === 0) {\n return '.';\n }\n var isAbsolute = path.charCodeAt(0) === SLASH;\n var trailingSeparator = path.charCodeAt(path.length - 1) === SLASH;\n path = decode(path);\n path = posixNormalize(path, !isAbsolute);\n if (path.length === 0 && !isAbsolute) {\n path = '.';\n }\n if (path.length > 0 && trailingSeparator) {\n path += '/';\n }\n if (isAbsolute) {\n return '/' + path;\n }\n return path;\n};\nvar _default = normalize;\nexports[\"default\"] = _default;\nmodule.exports = exports.default;\n","/**\n * SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { generateUrl, generateRemoteUrl } from '@nextcloud/router'\nimport pathNormalize from 'path-normalize'\n\nimport store from '../store/index.js'\n\nconst setAttachmentList = (val) => store.dispatch('text/setAttachmentList', val)\nconst findAttachment = store.getters['text/findAttachment']\n\nexport default class AttachmentResolver {\n\n\t#session\n\t#user\n\t#shareToken\n\t#currentDirectory\n\t#documentId\n\t#initAttachmentListPromise\n\n\tconstructor({ session, user, shareToken, currentDirectory, fileId }) {\n\t\tthis.#session = session\n\t\tthis.#user = user\n\t\tthis.#shareToken = shareToken\n\t\tthis.#currentDirectory = currentDirectory\n\t\tthis.#documentId = fileId ?? session.documentId\n\t\tthis.#initAttachmentListPromise = this.#updateAttachmentList()\n\t}\n\n\tasync #updateAttachmentList() {\n\t\treturn setAttachmentList({ documentId: this.#documentId, session: this.#session, shareToken: this.#shareToken })\n\t}\n\n\t/*\n\t * Resolve a given image/attachment src.\n\t * @param { string } src - the original src in the node.\n\t * @param { bool } fallback - fetch again attachmentsList if not found | defaul = true\n\t */\n\tasync resolve(src, fallback = true) {\n\t\tlet attachment\n\n\t\t// Native attachment\n\t\tconst directoryRegexp = /^\\.attachments\\.\\d+\\//\n\t\tif (src.match(directoryRegexp)) {\n\t\t\tconst imageFileName = decodeURIComponent(src.replace(directoryRegexp, '').split('?')[0])\n\n\t\t\t// Wait until attachment list got fetched (initialized by constructor)\n\t\t\tawait this.#initAttachmentListPromise\n\t\t\tattachment = findAttachment(imageFileName)\n\n\t\t\tif (fallback && !attachment) {\n\t\t\t\t// Update attachments list. Needed if attachments gets added to the session\n\t\t\t\tawait this.#updateAttachmentList()\n\t\t\t\tattachment = findAttachment(imageFileName)\n\t\t\t}\n\n\t\t\tif (attachment) {\n\t\t\t\treturn attachment\n\t\t\t}\n\n\t\t}\n\n\t\t// Direct URLs\n\t\tif (isDirectUrl(src)) {\n\t\t\treturn {\n\t\t\t\tisImage: true,\n\t\t\t\tname: this.#name(src),\n\t\t\t\tpreviewUrl: src,\n\t\t\t\tfullUrl: src,\n\t\t\t}\n\t\t}\n\n\t\t// Fallback: Return DAV url (e.g. for relative paths to images)\n\t\treturn {\n\t\t\tisImage: true,\n\t\t\tname: this.#name(src),\n\t\t\tpreviewUrl: this.#davUrl(src),\n\t\t\tfullUrl: this.#davUrl(src),\n\t\t}\n\t}\n\n\t#name(src) {\n\t\treturn src.split('/').pop()\n\t}\n\n\t#davUrl(src) {\n\t\tif (this.#user) {\n\t\t\tconst uid = this.#user.uid\n\t\t\tconst encoded = this.#filePath(src).split('/').map(encodeURIComponent).join('/')\n\t\t\treturn generateRemoteUrl(`dav/files/${uid}${encoded}`)\n\t\t}\n\n\t\tconst path = this.#filePath(src).split('/')\n\t\tconst basename = path.pop()\n\t\tconst dirname = path.join('/')\n\n\t\treturn generateUrl('/s/{token}/download?path={dirname}&files={basename}', {\n\t\t\ttoken: this.#shareToken,\n\t\t\tbasename,\n\t\t\tdirname,\n\t\t})\n\t}\n\n\t/**\n\t * Return the relativePath to a file specified in the url\n\t *\n\t * @param {string} src - url to extract path from\n\t */\n\t#relativePath(src) {\n\t\treturn decodeURI(src.split('?')[0])\n\t}\n\n\t#filePath(src) {\n\t\tconst f = [\n\t\t\tthis.#currentDirectory,\n\t\t\tthis.#relativePath(src),\n\t\t].join('/')\n\n\t\treturn pathNormalize(f)\n\t}\n\n}\n\n/**\n * Check if src is a direct URL.\n * Full URLs only work for images on the same Nextcloud instance (due to CORS restrictions).\n *\n * @param {string} src - the url to check\n */\nfunction isDirectUrl(src) {\n\treturn src.startsWith('http://')\n\t\t|| src.startsWith('https://')\n\t\t|| src.startsWith('data:')\n}\n","\n\n\n\n","\n\n\n\n\n","/**\n * SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\n/**\n * Check if current platform is a mobile device\n *\n * @return {boolean} whether the platform is a mobile device\n */\nexport function isMobilePlatform() {\n\t// Use client hints if already available\n\tif (navigator?.userAgentData?.mobile !== undefined) return navigator.userAgentData.mobile\n\n\t// use regex to match userAgent (required for Safari and Firefox in 2022)\n\tconst mobileDevices = [\n\t\t/Android/i,\n\t\t/webOS/i,\n\t\t/iPhone/i,\n\t\t/iPad/i,\n\t\t/iPod/i,\n\t\t/playbook/i,\n\t\t/silk/i,\n\t\t/BlackBerry/i,\n\t\t/Windows Phone/i,\n\t]\n\n\treturn mobileDevices.some(regex => navigator.userAgent.match(regex))\n}\n","\n\n\n\n\n\n\n","\n\n\n\n\n\n\n","\n\n\n\n\n\n\n","\n\n\n\n\n","\n\n\n\n\n\n\n","\n\n\n\n\n\n\n"],"names":["outdatedTimeout","Awareness","Observable","doc","now","time.getUnixTime","remove","meta","clientid","removeAwarenessStates","math.floor","state","clientID","currLocalMeta","clock","prevState","added","updated","filteredUpdated","removed","f.equalityDeep","field","value","awareness","clients","origin","i","curMeta","encodeAwarenessUpdate","states","len","encoder","encoding.createEncoder","encoding.writeVarUint","encoding.writeVarString","encoding.toUint8Array","applyAwarenessUpdate","update","decoder","decoding.createDecoder","timestamp","decoding.readVarUint","decoding.readVarString","clientMeta","currClock","_sfc_main","NextcloudVueNcActionButton","BaseActionEntry","actionEntry","NcActions","NcActionSeparator","ActionListItem","useStore","useOutlineStateMixin","useMenuIDMixin","$editor","children","child","getIsActive","_a","visible","debounce","val","entry","getActionState","NcButton","ToolBarLogic","defineComponent","menuKey","index","key","modulo","event","_b","a","b","ActionList","ActionSingle","entries","encodeArrayBuffer","data","view","toBase64","decodeArrayBuffer","encoded","fromBase64","messageYjsSyncStep1","messageYjsSyncStep2","messageYjsUpdate","writeSyncStep1","sv","Y.encodeStateVector","encoding.writeVarUint8Array","writeSyncStep2","encodedStateVector","Y.encodeStateAsUpdate","readSyncStep1","decoding.readVarUint8Array","readSyncStep2","transactionOrigin","Y.applyUpdate","error","writeUpdate","readUpdate","readSyncMessage","messageType","channels","LocalStoragePolyfill","room","e","buffer.fromBase64","storage.onChange","buf","storage.varStorage","buffer.toBase64","buffer.createUint8ArrayFromArrayBuffer","storage.offChange","BC","getChannel","map.setIfUndefined","subs","set.create","bc","sub","subscribe","f","unsubscribe","channel","unsubscribed","publish","c","messagePermissionDenied","readAuthMessage","y","permissionDeniedHandler","encodeQueryParams","params","object.map","messageSync","messageQueryAwareness","messageAwareness","messageAuth","messageHandlers","provider","emitSynced","_messageType","syncMessageType","syncProtocol.readSyncMessage","syncProtocol.messageYjsSyncStep2","_decoder","_emitSynced","awarenessProtocol.encodeAwarenessUpdate","_encoder","awarenessProtocol.applyAwarenessUpdate","authProtocol.readAuthMessage","_ydoc","reason","messageReconnectTimeout","readMessage","messageHandler","setupWS","websocket","encoding.length","awarenessProtocol.removeAwarenessStates","client","math.min","math.pow","syncProtocol.writeSyncStep1","encoderAwarenessState","broadcastMessage","ws","bc.publish","WebsocketProvider","serverUrl","roomname","connect","awarenessProtocol.Awareness","WebSocketPolyfill","resyncInterval","maxBackoffTime","disableBc","syncProtocol.writeUpdate","_origin","changedClients","env.isNode","process","encodedParams","url.encodeQueryParams","bc.subscribe","encoderSync","encoderState","syncProtocol.writeSyncStep2","encoderAwarenessQuery","bc.unsubscribe","getDocumentState","ydoc","applyDocumentState","documentState","getUpdateMessage","encodedBaseUpdate","baseUpdate","baseStateVector","Y.encodeStateVectorFromUpdate","docStateVector","sameState","getSteps","queue","s","getAwareness","arr","other","mitt","n","t","ConnectionClosedError","message","rest","SessionApi","options","__privateAdd","_gs_instances","#options","__privateSet","fileId","baseVersionEtag","axios","__privateMethod","#url","__privateGet","response","Connection","endpoint","isPublic","_endpointUrl","_Dt_instances","#content","#closed","#documentState","#document","#session","#lock","#readOnly","document","session","lock","readOnly","content","version","#post","#defaultParams","autosaveContent","force","manualSave","steps","guestName","file","formData","url","filePath","args","_baseUrl","generateUrl","FETCH_INTERVAL","FETCH_INTERVAL_MAX","FETCH_INTERVAL_SINGLE_EDITOR","FETCH_INTERVAL_READ_ONLY","FETCH_INTERVAL_INVISIBLE","MAX_RETRY_FETCH_COUNT","COLLABORATOR_DISCONNECT_TIME","PollingBackend","syncService","connection","#syncService","#connection","#lastPoll","#fetchInterval","#fetchRetryCounter","#pollActive","#initialLoadingFinished","logger","sessions","disconnect","alive","__privateWrapper","ERROR_TYPE","IDLE_TIMEOUT","AUTOSAVE_INTERVAL","COLLABORATOR_IDLE_TIME","SyncService","serialize","#sendIntervalId","initialSession","getSendable","resolve","reject","err","code","newSteps","singleSteps","step","outbox","callback","exports","_typeof","obj","SLASH","DOT","assertPath","path","posixNormalize","allowAboveRoot","res","lastSegmentLength","lastSlash","dots","lastSlashIndex","decode","normalize","p","isAbsolute","trailingSeparator","_default","module","setAttachmentList","store","findAttachment","AttachmentResolver","user","shareToken","currentDirectory","_Os_instances","#user","#shareToken","#currentDirectory","#documentId","#initAttachmentListPromise","#updateAttachmentList","src","fallback","attachment","directoryRegexp","imageFileName","isDirectUrl","#name","#davUrl","uid","#filePath","generateRemoteUrl","basename","dirname","#relativePath","pathNormalize","Help","AlphabeticalVariant","NcActionText","useEditorMixin","isMobilePlatform","regex","NcDialog","style","ActionFormattingHelp","HelpModal","NcActionButton","CharacterCount","TranslateVariant","useIsMobileMixin","useIsRichEditorMixin","useIsRichWorkspaceMixin","MENU_ID","menubar","ref","width","useElementSize","actionsFullEntries","loadState","priority","remainingEntries","acc","separatorBefore","separatorAfter","DotsHorizontal","clickableArea","spaceToFill","spacePerSlot","from","to","selectedText","emit","EditorContent","EditorOutline","getDir","useFileMixin","useSyncServiceMixin","ACTION_ATTACHMENT_PROMPT","ACTION_CHOOSE_LOCAL_ATTACHMENT","STATE_UPLOADING","_c","files","position","uploadPromises","showError","getCurrentUser","name","mimeType","alt","selection","MediaHandler","useEditorUpload","OUTLINE_STATE","OUTLINE_ACTIONS","mapState","enable"],"mappings":"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","x_google_ignoreList":[0,7,8,9,10,11,13,17]} \ No newline at end of file +{"version":3,"file":"Wrapper.chunk.mjs","sources":["../node_modules/y-protocols/awareness.js","../src/components/Menu/ActionListItem.vue","../src/components/Menu/ActionList.vue","../src/components/Menu/ActionSingle.vue","../src/components/Menu/ToolBarLogic.js","../src/components/Menu/ReadonlyBar.vue","../src/helpers/base64.ts","../node_modules/y-protocols/sync.js","../node_modules/lib0/broadcastchannel.js","../node_modules/y-protocols/auth.js","../node_modules/lib0/url.js","../node_modules/y-websocket/src/y-websocket.js","../src/helpers/yjs.js","../node_modules/mitt/dist/mitt.mjs","../src/services/SessionApi.js","../src/services/PollingBackend.js","../src/services/SyncService.js","../node_modules/path-normalize/lib/index.js","../src/services/AttachmentResolver.js","../src/components/Menu/ActionFormattingHelp.vue","../src/components/Menu/CharacterCount.vue","../src/helpers/platform.js","../src/components/HelpModal.vue","../src/components/Menu/MenuBar.vue","../src/components/Editor/ContentContainer.vue","../src/components/Editor/MediaHandler.vue","../src/components/Editor/MainContainer.vue","../src/components/Editor/Wrapper.vue"],"sourcesContent":["/**\n * @module awareness-protocol\n */\n\nimport * as encoding from 'lib0/encoding'\nimport * as decoding from 'lib0/decoding'\nimport * as time from 'lib0/time'\nimport * as math from 'lib0/math'\nimport { Observable } from 'lib0/observable'\nimport * as f from 'lib0/function'\nimport * as Y from 'yjs' // eslint-disable-line\n\nexport const outdatedTimeout = 30000\n\n/**\n * @typedef {Object} MetaClientState\n * @property {number} MetaClientState.clock\n * @property {number} MetaClientState.lastUpdated unix timestamp\n */\n\n/**\n * The Awareness class implements a simple shared state protocol that can be used for non-persistent data like awareness information\n * (cursor, username, status, ..). Each client can update its own local state and listen to state changes of\n * remote clients. Every client may set a state of a remote peer to `null` to mark the client as offline.\n *\n * Each client is identified by a unique client id (something we borrow from `doc.clientID`). A client can override\n * its own state by propagating a message with an increasing timestamp (`clock`). If such a message is received, it is\n * applied if the known state of that client is older than the new state (`clock < newClock`). If a client thinks that\n * a remote client is offline, it may propagate a message with\n * `{ clock: currentClientClock, state: null, client: remoteClient }`. If such a\n * message is received, and the known clock of that client equals the received clock, it will override the state with `null`.\n *\n * Before a client disconnects, it should propagate a `null` state with an updated clock.\n *\n * Awareness states must be updated every 30 seconds. Otherwise the Awareness instance will delete the client state.\n *\n * @extends {Observable}\n */\nexport class Awareness extends Observable {\n /**\n * @param {Y.Doc} doc\n */\n constructor (doc) {\n super()\n this.doc = doc\n /**\n * @type {number}\n */\n this.clientID = doc.clientID\n /**\n * Maps from client id to client state\n * @type {Map>}\n */\n this.states = new Map()\n /**\n * @type {Map}\n */\n this.meta = new Map()\n this._checkInterval = /** @type {any} */ (setInterval(() => {\n const now = time.getUnixTime()\n if (this.getLocalState() !== null && (outdatedTimeout / 2 <= now - /** @type {{lastUpdated:number}} */ (this.meta.get(this.clientID)).lastUpdated)) {\n // renew local clock\n this.setLocalState(this.getLocalState())\n }\n /**\n * @type {Array}\n */\n const remove = []\n this.meta.forEach((meta, clientid) => {\n if (clientid !== this.clientID && outdatedTimeout <= now - meta.lastUpdated && this.states.has(clientid)) {\n remove.push(clientid)\n }\n })\n if (remove.length > 0) {\n removeAwarenessStates(this, remove, 'timeout')\n }\n }, math.floor(outdatedTimeout / 10)))\n doc.on('destroy', () => {\n this.destroy()\n })\n this.setLocalState({})\n }\n\n destroy () {\n this.emit('destroy', [this])\n this.setLocalState(null)\n super.destroy()\n clearInterval(this._checkInterval)\n }\n\n /**\n * @return {Object|null}\n */\n getLocalState () {\n return this.states.get(this.clientID) || null\n }\n\n /**\n * @param {Object|null} state\n */\n setLocalState (state) {\n const clientID = this.clientID\n const currLocalMeta = this.meta.get(clientID)\n const clock = currLocalMeta === undefined ? 0 : currLocalMeta.clock + 1\n const prevState = this.states.get(clientID)\n if (state === null) {\n this.states.delete(clientID)\n } else {\n this.states.set(clientID, state)\n }\n this.meta.set(clientID, {\n clock,\n lastUpdated: time.getUnixTime()\n })\n const added = []\n const updated = []\n const filteredUpdated = []\n const removed = []\n if (state === null) {\n removed.push(clientID)\n } else if (prevState == null) {\n if (state != null) {\n added.push(clientID)\n }\n } else {\n updated.push(clientID)\n if (!f.equalityDeep(prevState, state)) {\n filteredUpdated.push(clientID)\n }\n }\n if (added.length > 0 || filteredUpdated.length > 0 || removed.length > 0) {\n this.emit('change', [{ added, updated: filteredUpdated, removed }, 'local'])\n }\n this.emit('update', [{ added, updated, removed }, 'local'])\n }\n\n /**\n * @param {string} field\n * @param {any} value\n */\n setLocalStateField (field, value) {\n const state = this.getLocalState()\n if (state !== null) {\n this.setLocalState({\n ...state,\n [field]: value\n })\n }\n }\n\n /**\n * @return {Map>}\n */\n getStates () {\n return this.states\n }\n}\n\n/**\n * Mark (remote) clients as inactive and remove them from the list of active peers.\n * This change will be propagated to remote clients.\n *\n * @param {Awareness} awareness\n * @param {Array} clients\n * @param {any} origin\n */\nexport const removeAwarenessStates = (awareness, clients, origin) => {\n const removed = []\n for (let i = 0; i < clients.length; i++) {\n const clientID = clients[i]\n if (awareness.states.has(clientID)) {\n awareness.states.delete(clientID)\n if (clientID === awareness.clientID) {\n const curMeta = /** @type {MetaClientState} */ (awareness.meta.get(clientID))\n awareness.meta.set(clientID, {\n clock: curMeta.clock + 1,\n lastUpdated: time.getUnixTime()\n })\n }\n removed.push(clientID)\n }\n }\n if (removed.length > 0) {\n awareness.emit('change', [{ added: [], updated: [], removed }, origin])\n awareness.emit('update', [{ added: [], updated: [], removed }, origin])\n }\n}\n\n/**\n * @param {Awareness} awareness\n * @param {Array} clients\n * @return {Uint8Array}\n */\nexport const encodeAwarenessUpdate = (awareness, clients, states = awareness.states) => {\n const len = clients.length\n const encoder = encoding.createEncoder()\n encoding.writeVarUint(encoder, len)\n for (let i = 0; i < len; i++) {\n const clientID = clients[i]\n const state = states.get(clientID) || null\n const clock = /** @type {MetaClientState} */ (awareness.meta.get(clientID)).clock\n encoding.writeVarUint(encoder, clientID)\n encoding.writeVarUint(encoder, clock)\n encoding.writeVarString(encoder, JSON.stringify(state))\n }\n return encoding.toUint8Array(encoder)\n}\n\n/**\n * Modify the content of an awareness update before re-encoding it to an awareness update.\n *\n * This might be useful when you have a central server that wants to ensure that clients\n * cant hijack somebody elses identity.\n *\n * @param {Uint8Array} update\n * @param {function(any):any} modify\n * @return {Uint8Array}\n */\nexport const modifyAwarenessUpdate = (update, modify) => {\n const decoder = decoding.createDecoder(update)\n const encoder = encoding.createEncoder()\n const len = decoding.readVarUint(decoder)\n encoding.writeVarUint(encoder, len)\n for (let i = 0; i < len; i++) {\n const clientID = decoding.readVarUint(decoder)\n const clock = decoding.readVarUint(decoder)\n const state = JSON.parse(decoding.readVarString(decoder))\n const modifiedState = modify(state)\n encoding.writeVarUint(encoder, clientID)\n encoding.writeVarUint(encoder, clock)\n encoding.writeVarString(encoder, JSON.stringify(modifiedState))\n }\n return encoding.toUint8Array(encoder)\n}\n\n/**\n * @param {Awareness} awareness\n * @param {Uint8Array} update\n * @param {any} origin This will be added to the emitted change event\n */\nexport const applyAwarenessUpdate = (awareness, update, origin) => {\n const decoder = decoding.createDecoder(update)\n const timestamp = time.getUnixTime()\n const added = []\n const updated = []\n const filteredUpdated = []\n const removed = []\n const len = decoding.readVarUint(decoder)\n for (let i = 0; i < len; i++) {\n const clientID = decoding.readVarUint(decoder)\n let clock = decoding.readVarUint(decoder)\n const state = JSON.parse(decoding.readVarString(decoder))\n const clientMeta = awareness.meta.get(clientID)\n const prevState = awareness.states.get(clientID)\n const currClock = clientMeta === undefined ? 0 : clientMeta.clock\n if (currClock < clock || (currClock === clock && state === null && awareness.states.has(clientID))) {\n if (state === null) {\n // never let a remote client remove this local state\n if (clientID === awareness.clientID && awareness.getLocalState() != null) {\n // remote client removed the local state. Do not remote state. Broadcast a message indicating\n // that this client still exists by increasing the clock\n clock++\n } else {\n awareness.states.delete(clientID)\n }\n } else {\n awareness.states.set(clientID, state)\n }\n awareness.meta.set(clientID, {\n clock,\n lastUpdated: timestamp\n })\n if (clientMeta === undefined && state !== null) {\n added.push(clientID)\n } else if (clientMeta !== undefined && state === null) {\n removed.push(clientID)\n } else if (state !== null) {\n if (!f.equalityDeep(state, prevState)) {\n filteredUpdated.push(clientID)\n }\n updated.push(clientID)\n }\n }\n }\n if (added.length > 0 || filteredUpdated.length > 0 || removed.length > 0) {\n awareness.emit('change', [{\n added, updated: filteredUpdated, removed\n }, origin])\n }\n if (added.length > 0 || updated.length > 0 || removed.length > 0) {\n awareness.emit('update', [{\n added, updated, removed\n }, origin])\n }\n}\n","\n\n\n\n\n","\n\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 { defineComponent } from 'vue'\n\nexport default defineComponent({\n\tdata() {\n\t\treturn {\n\t\t\t/** Current menu entry that has focus */\n\t\t\tactiveMenuEntry: 0,\n\t\t\tentries: [],\n\t\t}\n\t},\n\tcomputed: {\n\t\tvisibleEntries() {\n\t\t\treturn this.entries\n\t\t},\n\t},\n\twatch: {\n\t\tvisibleEntries() {\n\t\t\tthis.$nextTick(() => {\n\t\t\t\tif (this.activeMenuEntry > this.visibleEntries.length || this.visibleEntries[this.activeMenuEntry]?.disabled) {\n\t\t\t\t\tthis.setNextMenuEntry()\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\t},\n\tmethods: {\n\t\t/**\n\t\t * Update the disabled state of an menu entry\n\t\t * @param {string} menuKey The key of the menu entry that changed\n\t\t * @param {boolean} state The new disabled state\n\t\t */\n\t\tdisableMenuEntry(menuKey, state) {\n\t\t\tconst index = this.visibleEntries.findIndex(({ key }) => key === menuKey)\n\t\t\tthis.visibleEntries[index].disabled = state\n\t\t\tif (state === false && this.activeMenuEntry === index) {\n\t\t\t\tthis.$nextTick(() => this.setNextMenuEntry())\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * Set the active menu entry to the next one (or reset to first)\n\t\t */\n\t\tsetNextMenuEntry() {\n\t\t\t// refs is not reactive so we must check this every time\n\t\t\tconst modulo = this.visibleEntries.length + (this.$refs.remainingEntries ? 1 : 0)\n\n\t\t\tdo {\n\t\t\t\tthis.activeMenuEntry = (this.activeMenuEntry + 1) % modulo\n\t\t\t} while (this.activeMenuEntry < this.visibleEntries.length && this.visibleEntries[this.activeMenuEntry].disabled)\n\t\t},\n\t\t/**\n\t\t * Set the active menu entry to the previous one (or reset to last entry (remaining actions))\n\t\t */\n\t\tsetPreviousMenuEntry() {\n\t\t\t// refs is not reactive so we must check this every time\n\t\t\tconst modulo = this.visibleEntries.length + (this.$refs.remainingEntries ? 1 : 0)\n\n\t\t\tdo {\n\t\t\t\tconst index = this.activeMenuEntry - 1\n\t\t\t\tthis.activeMenuEntry = ((index % modulo) + modulo) % modulo // needed as JS does not work with negative modulos\n\t\t\t} while (this.activeMenuEntry < this.visibleEntries.length && this.visibleEntries[this.activeMenuEntry].disabled)\n\t\t},\n\n\t\t/**\n\t\t * Handle navigation in toolbar\n\t\t * @param {KeyboardEvent} event The keydown event\n\t\t */\n\t\thandleToolbarNavigation(event) {\n\t\t\tif (event.key === 'ArrowRight') {\n\t\t\t\tthis.setNextMenuEntry()\n\t\t\t} else if (event.key === 'ArrowLeft') {\n\t\t\t\tthis.setPreviousMenuEntry()\n\t\t\t}\n\n\t\t\tif (this.activeMenuEntry === this.visibleEntries.length) {\n\t\t\t\tthis.$refs.remainingEntries?.focusButton?.()\n\t\t\t} else {\n\t\t\t\t// The ref is in no order (ordered by the time they needed to mount), so we need to order them like they are shown on the menu\n\t\t\t\tconst entries = [...this.$refs.menuEntries].sort((a, b) => this.visibleEntries.findIndex(({ key }) => key === a.$vnode.data.key) - this.visibleEntries.findIndex(({ key }) => key === b.$vnode.data.key))\n\t\t\t\tentries[this.activeMenuEntry].focusButton()\n\t\t\t}\n\t\t},\n\t},\n})\n","\n\n\n\n\n\n\n","/**\n * SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\n/*\n * This helper provides Base64 encoding and decoding for ArrayBuffers.\n *\n * We use lib0/buffer for now as it's a dependency of y.js\n * and does not add new dependencies.\n *\n */\n\nimport { toBase64, fromBase64 } from 'lib0/buffer'\n\n/**\n *\n * @param {ArrayBuffer} data - binary data to encode\n */\nexport function encodeArrayBuffer(data: ArrayBuffer): string {\n\tconst view = new Uint8Array(data)\n\treturn toBase64(view)\n}\n\n/**\n *\n * @param {string} encoded - base64 encoded string to decode\n */\nexport function decodeArrayBuffer(encoded: string): ArrayBuffer {\n\treturn fromBase64(encoded)\n}\n","/**\n * @module sync-protocol\n */\n\nimport * as encoding from 'lib0/encoding'\nimport * as decoding from 'lib0/decoding'\nimport * as Y from 'yjs'\n\n/**\n * @typedef {Map} StateMap\n */\n\n/**\n * Core Yjs defines two message types:\n * • YjsSyncStep1: Includes the State Set of the sending client. When received, the client should reply with YjsSyncStep2.\n * • YjsSyncStep2: Includes all missing structs and the complete delete set. When received, the client is assured that it\n * received all information from the remote client.\n *\n * In a peer-to-peer network, you may want to introduce a SyncDone message type. Both parties should initiate the connection\n * with SyncStep1. When a client received SyncStep2, it should reply with SyncDone. When the local client received both\n * SyncStep2 and SyncDone, it is assured that it is synced to the remote client.\n *\n * In a client-server model, you want to handle this differently: The client should initiate the connection with SyncStep1.\n * When the server receives SyncStep1, it should reply with SyncStep2 immediately followed by SyncStep1. The client replies\n * with SyncStep2 when it receives SyncStep1. Optionally the server may send a SyncDone after it received SyncStep2, so the\n * client knows that the sync is finished. There are two reasons for this more elaborated sync model: 1. This protocol can\n * easily be implemented on top of http and websockets. 2. The server should only reply to requests, and not initiate them.\n * Therefore it is necessary that the client initiates the sync.\n *\n * Construction of a message:\n * [messageType : varUint, message definition..]\n *\n * Note: A message does not include information about the room name. This must to be handled by the upper layer protocol!\n *\n * stringify[messageType] stringifies a message definition (messageType is already read from the bufffer)\n */\n\nexport const messageYjsSyncStep1 = 0\nexport const messageYjsSyncStep2 = 1\nexport const messageYjsUpdate = 2\n\n/**\n * Create a sync step 1 message based on the state of the current shared document.\n *\n * @param {encoding.Encoder} encoder\n * @param {Y.Doc} doc\n */\nexport const writeSyncStep1 = (encoder, doc) => {\n encoding.writeVarUint(encoder, messageYjsSyncStep1)\n const sv = Y.encodeStateVector(doc)\n encoding.writeVarUint8Array(encoder, sv)\n}\n\n/**\n * @param {encoding.Encoder} encoder\n * @param {Y.Doc} doc\n * @param {Uint8Array} [encodedStateVector]\n */\nexport const writeSyncStep2 = (encoder, doc, encodedStateVector) => {\n encoding.writeVarUint(encoder, messageYjsSyncStep2)\n encoding.writeVarUint8Array(encoder, Y.encodeStateAsUpdate(doc, encodedStateVector))\n}\n\n/**\n * Read SyncStep1 message and reply with SyncStep2.\n *\n * @param {decoding.Decoder} decoder The reply to the received message\n * @param {encoding.Encoder} encoder The received message\n * @param {Y.Doc} doc\n */\nexport const readSyncStep1 = (decoder, encoder, doc) =>\n writeSyncStep2(encoder, doc, decoding.readVarUint8Array(decoder))\n\n/**\n * Read and apply Structs and then DeleteStore to a y instance.\n *\n * @param {decoding.Decoder} decoder\n * @param {Y.Doc} doc\n * @param {any} transactionOrigin\n */\nexport const readSyncStep2 = (decoder, doc, transactionOrigin) => {\n try {\n Y.applyUpdate(doc, decoding.readVarUint8Array(decoder), transactionOrigin)\n } catch (error) {\n // This catches errors that are thrown by event handlers\n console.error('Caught error while handling a Yjs update', error)\n }\n}\n\n/**\n * @param {encoding.Encoder} encoder\n * @param {Uint8Array} update\n */\nexport const writeUpdate = (encoder, update) => {\n encoding.writeVarUint(encoder, messageYjsUpdate)\n encoding.writeVarUint8Array(encoder, update)\n}\n\n/**\n * Read and apply Structs and then DeleteStore to a y instance.\n *\n * @param {decoding.Decoder} decoder\n * @param {Y.Doc} doc\n * @param {any} transactionOrigin\n */\nexport const readUpdate = readSyncStep2\n\n/**\n * @param {decoding.Decoder} decoder A message received from another client\n * @param {encoding.Encoder} encoder The reply message. Does not need to be sent if empty.\n * @param {Y.Doc} doc\n * @param {any} transactionOrigin\n */\nexport const readSyncMessage = (decoder, encoder, doc, transactionOrigin) => {\n const messageType = decoding.readVarUint(decoder)\n switch (messageType) {\n case messageYjsSyncStep1:\n readSyncStep1(decoder, encoder, doc)\n break\n case messageYjsSyncStep2:\n readSyncStep2(decoder, doc, transactionOrigin)\n break\n case messageYjsUpdate:\n readUpdate(decoder, doc, transactionOrigin)\n break\n default:\n throw new Error('Unknown message type')\n }\n return messageType\n}\n","/* eslint-env browser */\n\n/**\n * Helpers for cross-tab communication using broadcastchannel with LocalStorage fallback.\n *\n * ```js\n * // In browser window A:\n * broadcastchannel.subscribe('my events', data => console.log(data))\n * broadcastchannel.publish('my events', 'Hello world!') // => A: 'Hello world!' fires synchronously in same tab\n *\n * // In browser window B:\n * broadcastchannel.publish('my events', 'hello from tab B') // => A: 'hello from tab B'\n * ```\n *\n * @module broadcastchannel\n */\n\n// @todo before next major: use Uint8Array instead as buffer object\n\nimport * as map from './map.js'\nimport * as set from './set.js'\nimport * as buffer from './buffer.js'\nimport * as storage from './storage.js'\n\n/**\n * @typedef {Object} Channel\n * @property {Set} Channel.subs\n * @property {any} Channel.bc\n */\n\n/**\n * @type {Map}\n */\nconst channels = new Map()\n\n/* c8 ignore start */\nclass LocalStoragePolyfill {\n /**\n * @param {string} room\n */\n constructor (room) {\n this.room = room\n /**\n * @type {null|function({data:ArrayBuffer}):void}\n */\n this.onmessage = null\n /**\n * @param {any} e\n */\n this._onChange = e => e.key === room && this.onmessage !== null && this.onmessage({ data: buffer.fromBase64(e.newValue || '') })\n storage.onChange(this._onChange)\n }\n\n /**\n * @param {ArrayBuffer} buf\n */\n postMessage (buf) {\n storage.varStorage.setItem(this.room, buffer.toBase64(buffer.createUint8ArrayFromArrayBuffer(buf)))\n }\n\n close () {\n storage.offChange(this._onChange)\n }\n}\n/* c8 ignore stop */\n\n// Use BroadcastChannel or Polyfill\n/* c8 ignore next */\nconst BC = typeof BroadcastChannel === 'undefined' ? LocalStoragePolyfill : BroadcastChannel\n\n/**\n * @param {string} room\n * @return {Channel}\n */\nconst getChannel = room =>\n map.setIfUndefined(channels, room, () => {\n const subs = set.create()\n const bc = new BC(room)\n /**\n * @param {{data:ArrayBuffer}} e\n */\n /* c8 ignore next */\n bc.onmessage = e => subs.forEach(sub => sub(e.data, 'broadcastchannel'))\n return {\n bc, subs\n }\n })\n\n/**\n * Subscribe to global `publish` events.\n *\n * @function\n * @param {string} room\n * @param {function(any, any):any} f\n */\nexport const subscribe = (room, f) => {\n getChannel(room).subs.add(f)\n return f\n}\n\n/**\n * Unsubscribe from `publish` global events.\n *\n * @function\n * @param {string} room\n * @param {function(any, any):any} f\n */\nexport const unsubscribe = (room, f) => {\n const channel = getChannel(room)\n const unsubscribed = channel.subs.delete(f)\n if (unsubscribed && channel.subs.size === 0) {\n channel.bc.close()\n channels.delete(room)\n }\n return unsubscribed\n}\n\n/**\n * Publish data to all subscribers (including subscribers on this tab)\n *\n * @function\n * @param {string} room\n * @param {any} data\n * @param {any} [origin]\n */\nexport const publish = (room, data, origin = null) => {\n const c = getChannel(room)\n c.bc.postMessage(data)\n c.subs.forEach(sub => sub(data, origin))\n}\n","\nimport * as Y from 'yjs' // eslint-disable-line\nimport * as encoding from 'lib0/encoding'\nimport * as decoding from 'lib0/decoding'\n\nexport const messagePermissionDenied = 0\n\n/**\n * @param {encoding.Encoder} encoder\n * @param {string} reason\n */\nexport const writePermissionDenied = (encoder, reason) => {\n encoding.writeVarUint(encoder, messagePermissionDenied)\n encoding.writeVarString(encoder, reason)\n}\n\n/**\n * @callback PermissionDeniedHandler\n * @param {any} y\n * @param {string} reason\n */\n\n/**\n *\n * @param {decoding.Decoder} decoder\n * @param {Y.Doc} y\n * @param {PermissionDeniedHandler} permissionDeniedHandler\n */\nexport const readAuthMessage = (decoder, y, permissionDeniedHandler) => {\n switch (decoding.readVarUint(decoder)) {\n case messagePermissionDenied: permissionDeniedHandler(y, decoding.readVarString(decoder))\n }\n}\n","/**\n * Utility module to work with urls.\n *\n * @module url\n */\n\nimport * as object from './object.js'\n\n/**\n * Parse query parameters from an url.\n *\n * @param {string} url\n * @return {Object}\n */\nexport const decodeQueryParams = url => {\n /**\n * @type {Object}\n */\n const query = {}\n const urlQuerySplit = url.split('?')\n const pairs = urlQuerySplit[urlQuerySplit.length - 1].split('&')\n for (let i = 0; i < pairs.length; i++) {\n const item = pairs[i]\n if (item.length > 0) {\n const pair = item.split('=')\n query[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1] || '')\n }\n }\n return query\n}\n\n/**\n * @param {Object} params\n * @return {string}\n */\nexport const encodeQueryParams = params =>\n object.map(params, (val, key) => `${encodeURIComponent(key)}=${encodeURIComponent(val)}`).join('&')\n","/**\n * @module provider/websocket\n */\n\n/* eslint-env browser */\n\nimport * as Y from 'yjs' // eslint-disable-line\nimport * as bc from 'lib0/broadcastchannel'\nimport * as time from 'lib0/time'\nimport * as encoding from 'lib0/encoding'\nimport * as decoding from 'lib0/decoding'\nimport * as syncProtocol from 'y-protocols/sync'\nimport * as authProtocol from 'y-protocols/auth'\nimport * as awarenessProtocol from 'y-protocols/awareness'\nimport { Observable } from 'lib0/observable'\nimport * as math from 'lib0/math'\nimport * as url from 'lib0/url'\nimport * as env from 'lib0/environment'\n\nexport const messageSync = 0\nexport const messageQueryAwareness = 3\nexport const messageAwareness = 1\nexport const messageAuth = 2\n\n/**\n * encoder, decoder, provider, emitSynced, messageType\n * @type {Array}\n */\nconst messageHandlers = []\n\nmessageHandlers[messageSync] = (\n encoder,\n decoder,\n provider,\n emitSynced,\n _messageType\n) => {\n encoding.writeVarUint(encoder, messageSync)\n const syncMessageType = syncProtocol.readSyncMessage(\n decoder,\n encoder,\n provider.doc,\n provider\n )\n if (\n emitSynced && syncMessageType === syncProtocol.messageYjsSyncStep2 &&\n !provider.synced\n ) {\n provider.synced = true\n }\n}\n\nmessageHandlers[messageQueryAwareness] = (\n encoder,\n _decoder,\n provider,\n _emitSynced,\n _messageType\n) => {\n encoding.writeVarUint(encoder, messageAwareness)\n encoding.writeVarUint8Array(\n encoder,\n awarenessProtocol.encodeAwarenessUpdate(\n provider.awareness,\n Array.from(provider.awareness.getStates().keys())\n )\n )\n}\n\nmessageHandlers[messageAwareness] = (\n _encoder,\n decoder,\n provider,\n _emitSynced,\n _messageType\n) => {\n awarenessProtocol.applyAwarenessUpdate(\n provider.awareness,\n decoding.readVarUint8Array(decoder),\n provider\n )\n}\n\nmessageHandlers[messageAuth] = (\n _encoder,\n decoder,\n provider,\n _emitSynced,\n _messageType\n) => {\n authProtocol.readAuthMessage(\n decoder,\n provider.doc,\n (_ydoc, reason) => permissionDeniedHandler(provider, reason)\n )\n}\n\n// @todo - this should depend on awareness.outdatedTime\nconst messageReconnectTimeout = 30000\n\n/**\n * @param {WebsocketProvider} provider\n * @param {string} reason\n */\nconst permissionDeniedHandler = (provider, reason) =>\n console.warn(`Permission denied to access ${provider.url}.\\n${reason}`)\n\n/**\n * @param {WebsocketProvider} provider\n * @param {Uint8Array} buf\n * @param {boolean} emitSynced\n * @return {encoding.Encoder}\n */\nconst readMessage = (provider, buf, emitSynced) => {\n const decoder = decoding.createDecoder(buf)\n const encoder = encoding.createEncoder()\n const messageType = decoding.readVarUint(decoder)\n const messageHandler = provider.messageHandlers[messageType]\n if (/** @type {any} */ (messageHandler)) {\n messageHandler(encoder, decoder, provider, emitSynced, messageType)\n } else {\n console.error('Unable to compute message')\n }\n return encoder\n}\n\n/**\n * @param {WebsocketProvider} provider\n */\nconst setupWS = (provider) => {\n if (provider.shouldConnect && provider.ws === null) {\n const websocket = new provider._WS(provider.url)\n websocket.binaryType = 'arraybuffer'\n provider.ws = websocket\n provider.wsconnecting = true\n provider.wsconnected = false\n provider.synced = false\n\n websocket.onmessage = (event) => {\n provider.wsLastMessageReceived = time.getUnixTime()\n const encoder = readMessage(provider, new Uint8Array(event.data), true)\n if (encoding.length(encoder) > 1) {\n websocket.send(encoding.toUint8Array(encoder))\n }\n }\n websocket.onerror = (event) => {\n provider.emit('connection-error', [event, provider])\n }\n websocket.onclose = (event) => {\n provider.emit('connection-close', [event, provider])\n provider.ws = null\n provider.wsconnecting = false\n if (provider.wsconnected) {\n provider.wsconnected = false\n provider.synced = false\n // update awareness (all users except local left)\n awarenessProtocol.removeAwarenessStates(\n provider.awareness,\n Array.from(provider.awareness.getStates().keys()).filter((client) =>\n client !== provider.doc.clientID\n ),\n provider\n )\n provider.emit('status', [{\n status: 'disconnected'\n }])\n } else {\n provider.wsUnsuccessfulReconnects++\n }\n // Start with no reconnect timeout and increase timeout by\n // using exponential backoff starting with 100ms\n setTimeout(\n setupWS,\n math.min(\n math.pow(2, provider.wsUnsuccessfulReconnects) * 100,\n provider.maxBackoffTime\n ),\n provider\n )\n }\n websocket.onopen = () => {\n provider.wsLastMessageReceived = time.getUnixTime()\n provider.wsconnecting = false\n provider.wsconnected = true\n provider.wsUnsuccessfulReconnects = 0\n provider.emit('status', [{\n status: 'connected'\n }])\n // always send sync step 1 when connected\n const encoder = encoding.createEncoder()\n encoding.writeVarUint(encoder, messageSync)\n syncProtocol.writeSyncStep1(encoder, provider.doc)\n websocket.send(encoding.toUint8Array(encoder))\n // broadcast local awareness state\n if (provider.awareness.getLocalState() !== null) {\n const encoderAwarenessState = encoding.createEncoder()\n encoding.writeVarUint(encoderAwarenessState, messageAwareness)\n encoding.writeVarUint8Array(\n encoderAwarenessState,\n awarenessProtocol.encodeAwarenessUpdate(provider.awareness, [\n provider.doc.clientID\n ])\n )\n websocket.send(encoding.toUint8Array(encoderAwarenessState))\n }\n }\n provider.emit('status', [{\n status: 'connecting'\n }])\n }\n}\n\n/**\n * @param {WebsocketProvider} provider\n * @param {ArrayBuffer} buf\n */\nconst broadcastMessage = (provider, buf) => {\n const ws = provider.ws\n if (provider.wsconnected && ws && ws.readyState === ws.OPEN) {\n ws.send(buf)\n }\n if (provider.bcconnected) {\n bc.publish(provider.bcChannel, buf, provider)\n }\n}\n\n/**\n * Websocket Provider for Yjs. Creates a websocket connection to sync the shared document.\n * The document name is attached to the provided url. I.e. the following example\n * creates a websocket connection to http://localhost:1234/my-document-name\n *\n * @example\n * import * as Y from 'yjs'\n * import { WebsocketProvider } from 'y-websocket'\n * const doc = new Y.Doc()\n * const provider = new WebsocketProvider('http://localhost:1234', 'my-document-name', doc)\n *\n * @extends {Observable}\n */\nexport class WebsocketProvider extends Observable {\n /**\n * @param {string} serverUrl\n * @param {string} roomname\n * @param {Y.Doc} doc\n * @param {object} opts\n * @param {boolean} [opts.connect]\n * @param {awarenessProtocol.Awareness} [opts.awareness]\n * @param {Object} [opts.params] specify url parameters\n * @param {typeof WebSocket} [opts.WebSocketPolyfill] Optionall provide a WebSocket polyfill\n * @param {number} [opts.resyncInterval] Request server state every `resyncInterval` milliseconds\n * @param {number} [opts.maxBackoffTime] Maximum amount of time to wait before trying to reconnect (we try to reconnect using exponential backoff)\n * @param {boolean} [opts.disableBc] Disable cross-tab BroadcastChannel communication\n */\n constructor (serverUrl, roomname, doc, {\n connect = true,\n awareness = new awarenessProtocol.Awareness(doc),\n params = {},\n WebSocketPolyfill = WebSocket,\n resyncInterval = -1,\n maxBackoffTime = 2500,\n disableBc = false\n } = {}) {\n super()\n // ensure that url is always ends with /\n while (serverUrl[serverUrl.length - 1] === '/') {\n serverUrl = serverUrl.slice(0, serverUrl.length - 1)\n }\n this.serverUrl = serverUrl\n this.bcChannel = serverUrl + '/' + roomname\n this.maxBackoffTime = maxBackoffTime\n /**\n * The specified url parameters. This can be safely updated. The changed parameters will be used\n * when a new connection is established.\n * @type {Object}\n */\n this.params = params\n this.roomname = roomname\n this.doc = doc\n this._WS = WebSocketPolyfill\n this.awareness = awareness\n this.wsconnected = false\n this.wsconnecting = false\n this.bcconnected = false\n this.disableBc = disableBc\n this.wsUnsuccessfulReconnects = 0\n this.messageHandlers = messageHandlers.slice()\n /**\n * @type {boolean}\n */\n this._synced = false\n /**\n * @type {WebSocket?}\n */\n this.ws = null\n this.wsLastMessageReceived = 0\n /**\n * Whether to connect to other peers or not\n * @type {boolean}\n */\n this.shouldConnect = connect\n\n /**\n * @type {number}\n */\n this._resyncInterval = 0\n if (resyncInterval > 0) {\n this._resyncInterval = /** @type {any} */ (setInterval(() => {\n if (this.ws && this.ws.readyState === WebSocket.OPEN) {\n // resend sync step 1\n const encoder = encoding.createEncoder()\n encoding.writeVarUint(encoder, messageSync)\n syncProtocol.writeSyncStep1(encoder, doc)\n this.ws.send(encoding.toUint8Array(encoder))\n }\n }, resyncInterval))\n }\n\n /**\n * @param {ArrayBuffer} data\n * @param {any} origin\n */\n this._bcSubscriber = (data, origin) => {\n if (origin !== this) {\n const encoder = readMessage(this, new Uint8Array(data), false)\n if (encoding.length(encoder) > 1) {\n bc.publish(this.bcChannel, encoding.toUint8Array(encoder), this)\n }\n }\n }\n /**\n * Listens to Yjs updates and sends them to remote peers (ws and broadcastchannel)\n * @param {Uint8Array} update\n * @param {any} origin\n */\n this._updateHandler = (update, origin) => {\n if (origin !== this) {\n const encoder = encoding.createEncoder()\n encoding.writeVarUint(encoder, messageSync)\n syncProtocol.writeUpdate(encoder, update)\n broadcastMessage(this, encoding.toUint8Array(encoder))\n }\n }\n this.doc.on('update', this._updateHandler)\n /**\n * @param {any} changed\n * @param {any} _origin\n */\n this._awarenessUpdateHandler = ({ added, updated, removed }, _origin) => {\n const changedClients = added.concat(updated).concat(removed)\n const encoder = encoding.createEncoder()\n encoding.writeVarUint(encoder, messageAwareness)\n encoding.writeVarUint8Array(\n encoder,\n awarenessProtocol.encodeAwarenessUpdate(awareness, changedClients)\n )\n broadcastMessage(this, encoding.toUint8Array(encoder))\n }\n this._exitHandler = () => {\n awarenessProtocol.removeAwarenessStates(\n this.awareness,\n [doc.clientID],\n 'app closed'\n )\n }\n if (env.isNode && typeof process !== 'undefined') {\n process.on('exit', this._exitHandler)\n }\n awareness.on('update', this._awarenessUpdateHandler)\n this._checkInterval = /** @type {any} */ (setInterval(() => {\n if (\n this.wsconnected &&\n messageReconnectTimeout <\n time.getUnixTime() - this.wsLastMessageReceived\n ) {\n // no message received in a long time - not even your own awareness\n // updates (which are updated every 15 seconds)\n /** @type {WebSocket} */ (this.ws).close()\n }\n }, messageReconnectTimeout / 10))\n if (connect) {\n this.connect()\n }\n }\n\n get url () {\n const encodedParams = url.encodeQueryParams(this.params)\n return this.serverUrl + '/' + this.roomname +\n (encodedParams.length === 0 ? '' : '?' + encodedParams)\n }\n\n /**\n * @type {boolean}\n */\n get synced () {\n return this._synced\n }\n\n set synced (state) {\n if (this._synced !== state) {\n this._synced = state\n this.emit('synced', [state])\n this.emit('sync', [state])\n }\n }\n\n destroy () {\n if (this._resyncInterval !== 0) {\n clearInterval(this._resyncInterval)\n }\n clearInterval(this._checkInterval)\n this.disconnect()\n if (env.isNode && typeof process !== 'undefined') {\n process.off('exit', this._exitHandler)\n }\n this.awareness.off('update', this._awarenessUpdateHandler)\n this.doc.off('update', this._updateHandler)\n super.destroy()\n }\n\n connectBc () {\n if (this.disableBc) {\n return\n }\n if (!this.bcconnected) {\n bc.subscribe(this.bcChannel, this._bcSubscriber)\n this.bcconnected = true\n }\n // send sync step1 to bc\n // write sync step 1\n const encoderSync = encoding.createEncoder()\n encoding.writeVarUint(encoderSync, messageSync)\n syncProtocol.writeSyncStep1(encoderSync, this.doc)\n bc.publish(this.bcChannel, encoding.toUint8Array(encoderSync), this)\n // broadcast local state\n const encoderState = encoding.createEncoder()\n encoding.writeVarUint(encoderState, messageSync)\n syncProtocol.writeSyncStep2(encoderState, this.doc)\n bc.publish(this.bcChannel, encoding.toUint8Array(encoderState), this)\n // write queryAwareness\n const encoderAwarenessQuery = encoding.createEncoder()\n encoding.writeVarUint(encoderAwarenessQuery, messageQueryAwareness)\n bc.publish(\n this.bcChannel,\n encoding.toUint8Array(encoderAwarenessQuery),\n this\n )\n // broadcast local awareness state\n const encoderAwarenessState = encoding.createEncoder()\n encoding.writeVarUint(encoderAwarenessState, messageAwareness)\n encoding.writeVarUint8Array(\n encoderAwarenessState,\n awarenessProtocol.encodeAwarenessUpdate(this.awareness, [\n this.doc.clientID\n ])\n )\n bc.publish(\n this.bcChannel,\n encoding.toUint8Array(encoderAwarenessState),\n this\n )\n }\n\n disconnectBc () {\n // broadcast message with local awareness state set to null (indicating disconnect)\n const encoder = encoding.createEncoder()\n encoding.writeVarUint(encoder, messageAwareness)\n encoding.writeVarUint8Array(\n encoder,\n awarenessProtocol.encodeAwarenessUpdate(this.awareness, [\n this.doc.clientID\n ], new Map())\n )\n broadcastMessage(this, encoding.toUint8Array(encoder))\n if (this.bcconnected) {\n bc.unsubscribe(this.bcChannel, this._bcSubscriber)\n this.bcconnected = false\n }\n }\n\n disconnect () {\n this.shouldConnect = false\n this.disconnectBc()\n if (this.ws !== null) {\n this.ws.close()\n }\n }\n\n connect () {\n this.shouldConnect = true\n if (!this.wsconnected && this.ws === null) {\n setupWS(this)\n this.connectBc()\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 { encodeArrayBuffer, decodeArrayBuffer } from '../helpers/base64.ts'\nimport * as Y from 'yjs'\nimport * as decoding from 'lib0/decoding.js'\nimport * as encoding from 'lib0/encoding.js'\nimport * as syncProtocol from 'y-protocols/sync'\nimport { messageSync } from 'y-websocket'\n\n/**\n * Get Document state encode as base64.\n *\n * Used to store yjs state on the server.\n * @param {Y.Doc} ydoc - encode state of this doc\n * @return {string}\n */\nexport function getDocumentState(ydoc) {\n\tconst update = Y.encodeStateAsUpdate(ydoc)\n\treturn encodeArrayBuffer(update)\n}\n\n/**\n *\n * @param {Y.Doc} ydoc - apply state to this doc\n * @param {string} documentState - base64 encoded doc state\n * @param {object} origin - initiator object e.g. WebsocketProvider\n */\nexport function applyDocumentState(ydoc, documentState, origin) {\n\tconst update = decodeArrayBuffer(documentState)\n\tY.applyUpdate(ydoc, update, origin)\n}\n\n/**\n * Update message for everything in ydoc that is not in encodedBaseUpdate\n *\n * @param {Y.Doc} ydoc - encode state of this doc\n * @param {string} encodedBaseUpdate - base64 encoded doc update to build upon\n * @return {Uint8Array|undefined}\n */\nexport function getUpdateMessage(ydoc, encodedBaseUpdate) {\n\tconst baseUpdate = decodeArrayBuffer(encodedBaseUpdate)\n\tconst baseStateVector = Y.encodeStateVectorFromUpdate(baseUpdate)\n\tconst docStateVector = Y.encodeStateVector(ydoc)\n\tif (sameState(baseStateVector, docStateVector)) {\n\t\t// no additional state in the ydoc - early return\n\t\treturn\n\t}\n\tconst encoder = encoding.createEncoder()\n\tencoding.writeVarUint(encoder, messageSync)\n\tconst update = Y.encodeStateAsUpdate(ydoc, baseStateVector)\n\tsyncProtocol.writeUpdate(encoder, update)\n\treturn encoding.toUint8Array(encoder)\n}\n\n/**\n * Apply an updated message to the ydoc.\n *\n * Only used in tests right now.\n * @param {Y.Doc} ydoc - encode state of this doc\n * @param {Uint8Array} updateMessage - y-websocket sync message with update\n * @param {object} origin - initiator object e.g. WebsocketProvider\n */\nexport function applyUpdateMessage(ydoc, updateMessage, origin = 'origin') {\n\tconst decoder = decoding.createDecoder(updateMessage)\n\tconst messageType = decoding.readVarUint(decoder)\n\tif (messageType !== messageSync) {\n\t\tconsole.error('y.js update message with invalid type', messageType)\n\t\treturn\n\t}\n\t// There are no responses to updates - so this is a dummy.\n\tconst encoder = encoding.createEncoder()\n\tsyncProtocol.readSyncMessage(\n\t\tdecoder,\n\t\tencoder,\n\t\tydoc,\n\t\torigin,\n\t)\n}\n\n/**\n * Get the steps for sending to the server\n *\n * @param {object[]} queue - queue for the outgoing steps\n */\nexport function getSteps(queue) {\n\treturn queue.map(s => encodeArrayBuffer(s))\n\t\t.filter(s => s < 'AQ')\n}\n\n/**\n * Encode the latest awareness message for sending\n *\n * @param {object[]} queue - queue for the outgoing steps\n */\nexport function getAwareness(queue) {\n\treturn queue.map(s => encodeArrayBuffer(s))\n\t\t.findLast(s => s > 'AQ') || ''\n}\n\n/**\n * Log y.js messages with their type and initiator call stack\n *\n * @param {string} step - Y.js message\n */\nexport function logStep(step) {\n\t// Create error for stack trace\n\tconst err = new Error()\n\n\tconst decoder = decoding.createDecoder(step)\n\n\tconst messageType = decoding.readVarUint(decoder)\n\tconst subType = decoding.readVarUint(decoder)\n\n\tconst encodedStep = encodeArrayBuffer(step)\n\tswitch (messageType) {\n\tcase 0:\n\t\tconsole.debug('y.js message sync', subType, encodedStep, err.stack)\n\t\tbreak\n\tcase 3:\n\t\tconsole.debug('y.js message awareness_query', encodedStep, err.stack)\n\t\tbreak\n\tcase 1:\n\t\tconsole.debug('y.js message awareness', encodedStep, err.stack)\n\t\tbreak\n\t}\n}\n\n/**\n * Helper function to check if two state vectors have the same state\n * @param {Array} arr - state vector to compare\n * @param {Array} other - state vector to compare against\n */\nfunction sameState(arr, other) {\n\treturn arr.length === other.length\n\t\t&& arr.every((value, index) => other[index] === value)\n}\n","export default function(n){return{all:n=n||new Map,on:function(t,e){var i=n.get(t);i?i.push(e):n.set(t,[e])},off:function(t,e){var i=n.get(t);i&&(e?i.splice(i.indexOf(e)>>>0,1):n.set(t,[]))},emit:function(t,e){var i=n.get(t);i&&i.slice().map(function(n){n(e)}),(i=n.get(\"*\"))&&i.slice().map(function(n){n(t,e)})}}}\n//# sourceMappingURL=mitt.mjs.map\n","/**\n * SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nimport axios from '@nextcloud/axios'\nimport { generateUrl } from '@nextcloud/router'\n\nexport class ConnectionClosedError extends Error {\n\n\tconstructor(message = 'Close has already been called on the connection', ...rest) {\n\t\tsuper(message, ...rest)\n\t}\n\n}\n\nclass SessionApi {\n\n\t#options\n\n\tconstructor(options = {}) {\n\t\tthis.#options = options\n\t}\n\n\topen({ fileId, baseVersionEtag }) {\n\t\treturn axios.put(this.#url(`session/${fileId}/create`), {\n\t\t\tfileId,\n\t\t\tbaseVersionEtag,\n\t\t\tfilePath: this.#options.filePath,\n\t\t\ttoken: this.#options.shareToken,\n\t\t\tguestName: this.#options.guestName,\n\t\t\tforceRecreate: this.#options.forceRecreate,\n\t\t}).then(response => new Connection(response, this.#options))\n\t}\n\n\t#url(endpoint) {\n\t\tconst isPublic = !!this.#options.shareToken\n\t\treturn _endpointUrl(endpoint, isPublic)\n\t}\n\n}\n\nexport class Connection {\n\n\t#content\n\t#closed\n\t#documentState\n\t#document\n\t#session\n\t#lock\n\t#readOnly\n\t#options\n\n\tconstructor(response, options) {\n\t\tconst { document, session, lock, readOnly, content, documentState } = response.data\n\t\tthis.#document = document\n\t\tthis.#session = session\n\t\tthis.#lock = lock\n\t\tthis.#readOnly = readOnly\n\t\tthis.#content = content\n\t\tthis.#documentState = documentState\n\t\tthis.#options = options\n\t\tthis.isPublic = !!options.shareToken\n\t\tthis.closed = false\n\t}\n\n\tget session() {\n\t\treturn this.#session\n\t}\n\n\tget document() {\n\t\treturn this.#document\n\t}\n\n\tget docStateVersion() {\n\t\treturn this.#documentState ? this.#document.lastSavedVersion : 0\n\t}\n\n\tget state() {\n\t\treturn {\n\t\t\tdocument: { ...this.#document, readOnly: this.#readOnly },\n\t\t\tsession: this.#session,\n\t\t\tdocumentSource: this.#content || '',\n\t\t\tdocumentState: this.#documentState,\n\t\t}\n\t}\n\n\tget isClosed() {\n\t\treturn this.closed\n\t}\n\n\tget #defaultParams() {\n\t\treturn {\n\t\t\tdocumentId: this.#document.id,\n\t\t\tsessionId: this.#session.id,\n\t\t\tsessionToken: this.#session.token,\n\t\t\ttoken: this.#options.shareToken,\n\t\t}\n\t}\n\n\tsync({ version }) {\n\t\treturn this.#post(this.#url(`session/${this.#document.id}/sync`), {\n\t\t\t...this.#defaultParams,\n\t\t\tfilePath: this.#options.filePath,\n\t\t\tbaseVersionEtag: this.#document.baseVersionEtag,\n\t\t\tversion,\n\t\t})\n\t}\n\n\tsave({ version, autosaveContent, documentState, force, manualSave }) {\n\t\treturn this.#post(this.#url(`session/${this.#document.id}/save`), {\n\t\t\t...this.#defaultParams,\n\t\t\tfilePath: this.#options.filePath,\n\t\t\tbaseVersionEtag: this.#document.baseVersionEtag,\n\t\t\tversion,\n\t\t\tautosaveContent,\n\t\t\tdocumentState,\n\t\t\tforce,\n\t\t\tmanualSave,\n\t\t})\n\t}\n\n\tpush({ steps, version, awareness }) {\n\t\treturn this.#post(this.#url(`session/${this.#document.id}/push`), {\n\t\t\t...this.#defaultParams,\n\t\t\tfilePath: this.#options.filePath,\n\t\t\tbaseVersionEtag: this.#document.baseVersionEtag,\n\t\t\tsteps,\n\t\t\tversion,\n\t\t\tawareness,\n\t\t})\n\t}\n\n\t// TODO: maybe return a new connection here so connections have immutable state\n\tupdate(guestName) {\n\t\treturn this.#post(this.#url(`session/${this.#document.id}/session`), {\n\t\t\t...this.#defaultParams,\n\t\t\tguestName,\n\t\t}).then(({ data }) => {\n\t\t\tthis.#session = data\n\t\t})\n\t}\n\n\tuploadAttachment(file) {\n\t\tconst formData = new FormData()\n\t\tformData.append('file', file)\n\t\tconst url = _endpointUrl('attachment/upload')\n\t\t\t+ '?documentId=' + encodeURIComponent(this.#document.id)\n\t\t\t+ '&sessionId=' + encodeURIComponent(this.#session.id)\n\t\t\t+ '&sessionToken=' + encodeURIComponent(this.#session.token)\n\t\t\t+ '&shareToken=' + encodeURIComponent(this.#options.shareToken || '')\n\t\treturn this.#post(url, formData, {\n\t\t\theaders: {\n\t\t\t\t'Content-Type': 'multipart/form-data',\n\t\t\t},\n\t\t})\n\t}\n\n\tinsertAttachmentFile(filePath) {\n\t\treturn this.#post(_endpointUrl('attachment/filepath'), {\n\t\t\tdocumentId: this.#document.id,\n\t\t\tsessionId: this.#session.id,\n\t\t\tsessionToken: this.#session.token,\n\t\t\tfilePath,\n\t\t})\n\t}\n\n\tclose() {\n\t\treturn this.#post(\n\t\t\tthis.#url(`session/${this.#document.id}/close`),\n\t\t\tthis.#defaultParams,\n\t\t).then(() => {\n\t\t\tthis.closed = true\n\t\t})\n\t}\n\n\t// To be used in Cypress tests only\n\tsetBaseVersionEtag(baseVersionEtag) {\n\t\tthis.#document.baseVersionEtag = baseVersionEtag\n\t}\n\n\t#post(...args) {\n\t\tif (this.closed) {\n\t\t\treturn Promise.reject(new ConnectionClosedError())\n\t\t}\n\t\treturn axios.post(...args)\n\t}\n\n\t#url(endpoint) {\n\t\tconst isPublic = !!this.#defaultParams.token\n\t\treturn _endpointUrl(endpoint, isPublic)\n\t}\n\n}\n\n/**\n *\n * @param {string} endpoint - endpoint of the url inside apps/text\n * @param {boolean} isPublic - public url or not\n */\nfunction _endpointUrl(endpoint, isPublic = false) {\n\tconst _baseUrl = generateUrl('/apps/text')\n\tif (isPublic) {\n\t\treturn `${_baseUrl}/public/${endpoint}`\n\t}\n\treturn `${_baseUrl}/${endpoint}`\n}\n\nexport default SessionApi\n","/**\n * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nimport { logger } from '../helpers/logger.js'\nimport { SyncService, ERROR_TYPE } from './SyncService.js'\nimport { Connection } from './SessionApi.js'\n\n/**\n * Minimum inverval to refetch the document changes\n *\n * @type {number} time in ms\n */\nconst FETCH_INTERVAL = 300\n\n/**\n * Maximum interval between refetches of document state if multiple users have joined\n *\n * @type {number} time in ms\n */\nconst FETCH_INTERVAL_MAX = 5000\n\n/**\n * Interval to check for changes when there is only one user joined\n *\n * @type {number} time in ms\n */\nconst FETCH_INTERVAL_SINGLE_EDITOR = 5000\n\n/**\n * Interval to check for changes for read only users\n * @type {number}\n */\nconst FETCH_INTERVAL_READ_ONLY = 30000\n\n/**\n * Interval to fetch for changes when a browser window is considered invisible by the\n * page visibility API https://developer.mozilla.org/de/docs/Web/API/Page_Visibility_API\n *\n * @type {number} time in ms\n */\nconst FETCH_INTERVAL_INVISIBLE = 60000\n\n/* Maximum number of retries for fetching before emitting a connection error */\nconst MAX_RETRY_FETCH_COUNT = 5\n\n/**\n * Timeout for sessions to be marked as disconnected\n * Make sure that this is higher than any FETCH_INTERVAL_ values\n */\nconst COLLABORATOR_DISCONNECT_TIME = FETCH_INTERVAL_INVISIBLE * 1.5\n\nclass PollingBackend {\n\n\t/** @type {SyncService} */\n\t#syncService\n\t/** @type {Connection} */\n\t#connection\n\n\t#lastPoll\n\t#fetchInterval\n\t#fetchRetryCounter\n\t#pollActive\n\t#initialLoadingFinished\n\n\tconstructor(syncService, connection) {\n\t\tthis.#syncService = syncService\n\t\tthis.#connection = connection\n\t\tthis.#fetchInterval = FETCH_INTERVAL\n\t\tthis.#fetchRetryCounter = 0\n\t\tthis.#lastPoll = 0\n\t}\n\n\tconnect() {\n\t\tif (this.fetcher > 0) {\n\t\t\tconsole.error('Trying to connect, but already connected')\n\t\t\treturn\n\t\t}\n\t\tthis.#initialLoadingFinished = false\n\t\tthis.fetcher = setInterval(this._fetchSteps.bind(this), 50)\n\t\tdocument.addEventListener('visibilitychange', this.visibilitychange.bind(this))\n\t}\n\n\t/**\n\t * This method is only called though the timer\n\t */\n\tasync _fetchSteps() {\n\t\tif (this.#pollActive) {\n\t\t\treturn\n\t\t}\n\n\t\tconst now = Date.now()\n\n\t\tif (this.#lastPoll > (now - this.#fetchInterval)) {\n\t\t\treturn\n\t\t}\n\n\t\tif (!this.fetcher) {\n\t\t\tconsole.error('No inverval but triggered')\n\t\t\treturn\n\t\t}\n\n\t\tthis.#pollActive = true\n\n\t\tlogger.debug('[PollingBackend] Fetching steps', this.#syncService.version)\n\t\tawait this.#connection.sync({\n\t\t\tversion: this.#syncService.version,\n\t\t}).then(this._handleResponse.bind(this), this._handleError.bind(this))\n\t\tthis.#lastPoll = Date.now()\n\t\tthis.#pollActive = false\n\t}\n\n\t_handleResponse({ data }) {\n\t\tconst { document, sessions } = data\n\t\tthis.#fetchRetryCounter = 0\n\n\t\tthis.#syncService.emit('change', { document, sessions })\n\t\tthis.#syncService._receiveSteps(data)\n\n\t\tif (data.steps.length === 0) {\n\t\t\tif (!this.#initialLoadingFinished) {\n\t\t\t\tthis.#initialLoadingFinished = true\n\t\t\t}\n\t\t\tif (this.#syncService.checkIdle()) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst disconnect = Date.now() - COLLABORATOR_DISCONNECT_TIME\n\t\t\tconst alive = sessions.filter((s) => s.lastContact * 1000 > disconnect)\n\t\t\tif (this.#syncService.isReadOnly) {\n\t\t\t\tthis.maximumReadOnlyTimer()\n\t\t\t} else if (alive.length < 2) {\n\t\t\t\tthis.maximumRefetchTimer()\n\t\t\t} else {\n\t\t\t\tthis.increaseRefetchTimer()\n\t\t\t}\n\t\t\tthis.#syncService.emit('stateChange', { initialLoading: true })\n\t\t\treturn\n\t\t}\n\n\t\tif (this.#initialLoadingFinished) {\n\t\t\tthis.resetRefetchTimer()\n\t\t}\n\t}\n\n\t_handleError(e) {\n\t\tif (!e.response || e.code === 'ECONNABORTED') {\n\t\t\tif (this.#fetchRetryCounter++ >= MAX_RETRY_FETCH_COUNT) {\n\t\t\t\tlogger.error('[PollingBackend:fetchSteps] Network error when fetching steps, emitting CONNECTION_FAILED')\n\t\t\t\tthis.#syncService.emit('error', { type: ERROR_TYPE.CONNECTION_FAILED, data: {} })\n\n\t\t\t} else {\n\t\t\t\tlogger.error(`[PollingBackend:fetchSteps] Network error when fetching steps, retry ${this.#fetchRetryCounter}`)\n\t\t\t}\n\t\t} else if (e.response.status === 409) {\n\t\t\t// Still apply the steps to update our version of the document\n\t\t\tthis._handleResponse(e.response)\n\t\t\tlogger.error('Conflict during file save, please resolve')\n\t\t\tthis.#syncService.emit('error', {\n\t\t\t\ttype: ERROR_TYPE.SAVE_COLLISSION,\n\t\t\t\tdata: {\n\t\t\t\t\toutsideChange: e.response.data.outsideChange,\n\t\t\t\t},\n\t\t\t})\n\t\t} else if (e.response.status === 412) {\n\t\t\tthis.#syncService.emit('error', { type: ERROR_TYPE.LOAD_ERROR, data: e.response })\n\t\t\tthis.disconnect()\n\t\t} else if (e.response.status === 403) {\n\t\t\tthis.#syncService.emit('error', { type: ERROR_TYPE.SOURCE_NOT_FOUND, data: {} })\n\t\t\tthis.disconnect()\n\t\t} else if (e.response.status === 404) {\n\t\t\tthis.#syncService.emit('error', { type: ERROR_TYPE.SOURCE_NOT_FOUND, data: {} })\n\t\t\tthis.disconnect()\n\t\t} else if (e.response.status === 503) {\n\t\t\tthis.increaseRefetchTimer()\n\t\t\tthis.#syncService.emit('error', { type: ERROR_TYPE.CONNECTION_FAILED, data: {} })\n\t\t\tlogger.error('Failed to fetch steps due to unavailable service', { error: e })\n\t\t} else {\n\t\t\tthis.disconnect()\n\t\t\tthis.#syncService.emit('error', { type: ERROR_TYPE.CONNECTION_FAILED, data: {} })\n\t\t\tlogger.error('Failed to fetch steps due to other reason', { error: e })\n\t\t}\n\n\t}\n\n\tdisconnect() {\n\t\tclearInterval(this.fetcher)\n\t\tthis.fetcher = 0\n\t\tdocument.removeEventListener('visibilitychange', this.visibilitychange.bind(this))\n\t}\n\n\tresetRefetchTimer() {\n\t\tthis.#fetchInterval = FETCH_INTERVAL\n\n\t}\n\n\tincreaseRefetchTimer() {\n\t\tthis.#fetchInterval = Math.min(this.#fetchInterval * 2, FETCH_INTERVAL_MAX)\n\t}\n\n\tmaximumRefetchTimer() {\n\t\tthis.#fetchInterval = FETCH_INTERVAL_SINGLE_EDITOR\n\t}\n\n\tmaximumReadOnlyTimer() {\n\t\tthis.#fetchInterval = FETCH_INTERVAL_READ_ONLY\n\t}\n\n\tvisibilitychange() {\n\t\tif (document.visibilityState === 'hidden') {\n\t\t\tthis.#fetchInterval = FETCH_INTERVAL_INVISIBLE\n\t\t} else {\n\t\t\tthis.resetRefetchTimer()\n\t\t}\n\t}\n\n}\n\nexport default PollingBackend\n","/**\n * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\n/* eslint-disable jsdoc/valid-types */\n\nimport mitt from 'mitt'\nimport debounce from 'debounce'\n\nimport PollingBackend from './PollingBackend.js'\nimport SessionApi, { Connection } from './SessionApi.js'\nimport { getSteps, getAwareness } from '../helpers/yjs.js'\nimport { logger } from '../helpers/logger.js'\n\n/**\n * Timeout after which the editor will consider a document without changes being synced as idle\n * The session will be terminated and the document will stay open in read-only mode with a button to reconnect if needed\n *\n * @type {number}\n */\nconst IDLE_TIMEOUT = 1440\n\n/**\n * Interval to save the serialized document and the document state\n *\n * @type {number} time in ms\n */\nconst AUTOSAVE_INTERVAL = 30000\n\nconst COLLABORATOR_IDLE_TIME = 60\n\nconst COLLABORATOR_DISCONNECT_TIME = 90\n\nconst ERROR_TYPE = {\n\t/**\n\t * Failed to save collaborative document due to external change\n\t * collission needs to be resolved manually\n\t */\n\tSAVE_COLLISSION: 0,\n\t/**\n\t * Failed to push changes for MAX_REBASE_RETRY times\n\t */\n\tPUSH_FAILURE: 1,\n\n\tLOAD_ERROR: 2,\n\n\tCONNECTION_FAILED: 3,\n\n\tSOURCE_NOT_FOUND: 4,\n\n\tPUSH_FORBIDDEN: 5,\n}\n\nclass SyncService {\n\n\t#sendIntervalId\n\t#connection\n\n\tconstructor({ baseVersionEtag, serialize, getDocumentState, ...options }) {\n\t\t/** @type {import('mitt').Emitter} _bus */\n\t\tthis._bus = mitt()\n\n\t\tthis.serialize = serialize\n\t\tthis.getDocumentState = getDocumentState\n\t\tthis._api = new SessionApi(options)\n\t\tthis.#connection = null\n\n\t\tthis.stepClientIDs = []\n\n\t\tthis.lastStepPush = Date.now()\n\n\t\tthis.version = null\n\t\tthis.baseVersionEtag = baseVersionEtag\n\t\tthis.sending = false\n\t\tthis.#sendIntervalId = null\n\n\t\tthis.autosave = debounce(this._autosave.bind(this), AUTOSAVE_INTERVAL)\n\n\t\treturn this\n\t}\n\n\tget isReadOnly() {\n\t\treturn this.#connection.state.document.readOnly\n\t}\n\n\tget guestName() {\n\t\treturn this.#connection.session.guestName\n\t}\n\n\tasync open({ fileId, initialSession }) {\n\t\tif (this.#connection && !this.#connection.isClosed) {\n\t\t\t// We're already connected.\n\t\t\treturn\n\t\t}\n\t\tconst connect = initialSession\n\t\t\t? Promise.resolve(new Connection({ data: initialSession }, {}))\n\t\t\t: this._api.open({ fileId, baseVersionEtag: this.baseVersionEtag })\n\t\t\t\t.catch(error => this._emitError(error))\n\t\tthis.#connection = await connect\n\t\tif (!this.#connection) {\n\t\t\t// Error was already emitted in connect\n\t\t\treturn\n\t\t}\n\t\tthis.backend = new PollingBackend(this, this.#connection)\n\t\tthis.version = this.#connection.docStateVersion\n\t\tthis.baseVersionEtag = this.#connection.document.baseVersionEtag\n\t\tthis.emit('opened', {\n\t\t\t...this.#connection.state,\n\t\t\tversion: this.version,\n\t\t})\n\t\tthis.emit('loaded', {\n\t\t\t...this.#connection.state,\n\t\t\tversion: this.version,\n\t\t})\n\t}\n\n\tstartSync() {\n\t\tthis.backend.connect()\n\t}\n\n\tsyncUp() {\n\t\tthis.backend.resetRefetchTimer()\n\t}\n\n\t_emitError(error) {\n\t\tif (!error.response || error.code === 'ECONNABORTED') {\n\t\t\tthis.emit('error', { type: ERROR_TYPE.CONNECTION_FAILED, data: {} })\n\t\t} else {\n\t\t\tthis.emit('error', { type: ERROR_TYPE.LOAD_ERROR, data: error.response })\n\t\t}\n\t}\n\n\tupdateSession(guestName) {\n\t\tif (!this.#connection.isPublic) {\n\t\t\treturn Promise.reject(new Error())\n\t\t}\n\t\treturn this.#connection.update(guestName)\n\t\t\t.catch((error) => {\n\t\t\t\tlogger.error('Failed to update the session', { error })\n\t\t\t\treturn Promise.reject(error)\n\t\t\t})\n\t}\n\n\tsendSteps(getSendable) {\n\t\t// If already waiting to send, do nothing.\n\t\tif (this.#sendIntervalId) {\n\t\t\treturn\n\t\t}\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis.#sendIntervalId = setInterval(() => {\n\t\t\t\tif (this.#connection && !this.sending) {\n\t\t\t\t\tthis.sendStepsNow(getSendable).then(resolve).catch(reject)\n\t\t\t\t}\n\t\t\t}, 200)\n\t\t})\n\t}\n\n\tsendStepsNow(getSendable) {\n\t\tthis.sending = true\n\t\tclearInterval(this.#sendIntervalId)\n\t\tthis.#sendIntervalId = null\n\t\tconst data = getSendable()\n\t\tif (data.steps.length > 0) {\n\t\t\tthis.emit('stateChange', { dirty: true })\n\t\t}\n\t\treturn this.#connection.push(data)\n\t\t\t.then((response) => {\n\t\t\t\tthis.sending = false\n\t\t\t\tthis.emit('sync', {\n\t\t\t\t\tsteps: [],\n\t\t\t\t\tdocument: this.#connection.document,\n\t\t\t\t\tversion: this.version,\n\t\t\t\t})\n\t\t\t}).catch(err => {\n\t\t\t\tconst { response, code } = err\n\t\t\t\tthis.sending = false\n\t\t\t\tif (!response || code === 'ECONNABORTED') {\n\t\t\t\t\tthis.emit('error', { type: ERROR_TYPE.CONNECTION_FAILED, data: {} })\n\t\t\t\t}\n\t\t\t\tif (response?.status === 412) {\n\t\t\t\t\tthis.emit('error', { type: ERROR_TYPE.LOAD_ERROR, data: response })\n\t\t\t\t} else if (response?.status === 403) {\n\t\t\t\t\tif (!data.document) {\n\t\t\t\t\t\t// either the session is invalid or the document is read only.\n\t\t\t\t\t\tlogger.error('failed to write to document - not allowed')\n\t\t\t\t\t\tthis.emit('error', { type: ERROR_TYPE.PUSH_FORBIDDEN, data: {} })\n\t\t\t\t\t}\n\t\t\t\t\t// Only emit conflict event if we have synced until the latest version\n\t\t\t\t\tif (response.data.document?.currentVersion === this.version) {\n\t\t\t\t\t\tthis.emit('error', { type: ERROR_TYPE.PUSH_FAILURE, data: {} })\n\t\t\t\t\t\tOC.Notification.showTemporary('Changes could not be sent yet')\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow new Error('Failed to apply steps. Retry!', { cause: err })\n\t\t\t})\n\t}\n\n\t_receiveSteps({ steps, document, sessions }) {\n\t\tconst awareness = sessions\n\t\t\t.filter(s => s.lastContact > (Math.floor(Date.now() / 1000) - COLLABORATOR_DISCONNECT_TIME))\n\t\t\t.filter(s => s.lastAwarenessMessage)\n\t\t\t.map(s => {\n\t\t\t\treturn { step: s.lastAwarenessMessage, clientId: s.clientId }\n\t\t\t})\n\t\tconst newSteps = [...awareness]\n\t\tfor (let i = 0; i < steps.length; i++) {\n\t\t\tconst singleSteps = steps[i].data\n\t\t\tif (this.version < steps[i].version) {\n\t\t\t\tthis.version = steps[i].version\n\t\t\t}\n\t\t\tif (!Array.isArray(singleSteps)) {\n\t\t\t\tlogger.error('Invalid step data, skipping step', { step: steps[i] })\n\t\t\t\t// TODO: recover\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tsingleSteps.forEach(step => {\n\t\t\t\tnewSteps.push({\n\t\t\t\t\tstep,\n\t\t\t\t\tclientID: steps[i].sessionId,\n\t\t\t\t})\n\t\t\t})\n\t\t}\n\t\tthis.lastStepPush = Date.now()\n\t\tthis.emit('sync', {\n\t\t\tsteps: newSteps,\n\t\t\t// TODO: do we actually need to dig into the connection here?\n\t\t\tdocument: this.#connection.document,\n\t\t\tversion: this.version,\n\t\t})\n\t}\n\n\tcheckIdle() {\n\t\tconst lastPushMinutesAgo = (Date.now() - this.lastStepPush) / 1000 / 60\n\t\tif (lastPushMinutesAgo > IDLE_TIMEOUT) {\n\t\t\tlogger.debug(`[SyncService] Document is idle for ${this.IDLE_TIMEOUT} minutes, suspending connection`)\n\t\t\tthis.emit('idle')\n\t\t\treturn true\n\t\t}\n\t\treturn false\n\t}\n\n\t_getContent() {\n\t\treturn this.serialize()\n\t}\n\n\tasync save({ force = false, manualSave = true } = {}) {\n\t\tlogger.debug('[SyncService] saving', arguments[0])\n\t\ttry {\n\t\t\tconst response = await this.#connection.save({\n\t\t\t\tversion: this.version,\n\t\t\t\tautosaveContent: this._getContent(),\n\t\t\t\tdocumentState: this.getDocumentState(),\n\t\t\t\tforce,\n\t\t\t\tmanualSave,\n\t\t\t})\n\t\t\tthis.emit('stateChange', { dirty: false })\n\t\t\tthis.#connection.document.lastSavedVersionTime = Date.now() / 1000\n\t\t\tlogger.debug('[SyncService] saved', response)\n\t\t\tconst { document, sessions } = response.data\n\t\t\tthis.emit('save', { document, sessions })\n\t\t\tthis.autosave.clear()\n\t\t} catch (e) {\n\t\t\tlogger.error('Failed to save document.', { error: e })\n\t\t\tthrow e\n\t\t}\n\t}\n\n\tforceSave() {\n\t\treturn this.save({ force: true })\n\t}\n\n\t_autosave() {\n\t\treturn this.save({ manualSave: false }).catch((error) => {\n\t\t\tlogger.error('Failed to autosave document.', { error })\n\t\t})\n\t}\n\n\tasync sendRemainingSteps(queue) {\n\t\tif (queue.length === 0) {\n\t\t\treturn\n\t\t}\n\t\tlet outbox = []\n\t\tconst steps = getSteps(queue)\n\t\tconst awareness = getAwareness(queue)\n\t\treturn this.sendStepsNow(() => {\n\t\t\tconst data = { steps, awareness, version: this.version }\n\t\t\toutbox = [...queue]\n\t\t\tlogger.debug('sending final steps ', data)\n\t\t\treturn data\n\t\t})?.then(() => {\n\t\t\t// only keep the steps that were not send yet\n\t\t\tqueue.splice(0,\n\t\t\t\tqueue.length,\n\t\t\t\t...queue.filter(s => !outbox.includes(s)),\n\t\t\t)\n\t\t}, err => logger.error(err))\n\t}\n\n\tasync close() {\n\t\t// Make sure to leave no pending requests behind.\n\t\tthis.autosave.clear()\n\t\tthis.backend?.disconnect()\n\t\tif (!this.#connection || this.#connection.isClosed) {\n\t\t\treturn\n\t\t}\n\t\treturn this.#connection.close()\n\t\t\t// Log and ignore possible network issues.\n\t\t\t.catch(e => {\n\t\t\t\tlogger.info('Failed to close connection.', { e })\n\t\t\t})\n\t}\n\n\tuploadAttachment(file) {\n\t\treturn this.#connection.uploadAttachment(file)\n\t}\n\n\tinsertAttachmentFile(filePath) {\n\t\treturn this.#connection.insertAttachmentFile(filePath)\n\t}\n\n\ton(event, callback) {\n\t\tthis._bus.on(event, callback)\n\t\treturn this\n\t}\n\n\toff(event, callback) {\n\t\tthis._bus.off(event, callback)\n\t\treturn this\n\t}\n\n\temit(event, data) {\n\t\tthis._bus.emit(event, data)\n\t}\n\n}\n\nexport default SyncService\nexport { SyncService, ERROR_TYPE, IDLE_TIMEOUT, COLLABORATOR_IDLE_TIME, COLLABORATOR_DISCONNECT_TIME }\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = void 0;\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n/* eslint-disable max-depth, max-statements, complexity, max-lines-per-function */\nvar SLASH = 47;\nvar DOT = 46;\nvar assertPath = function assertPath(path) {\n var t = _typeof(path);\n if (t !== 'string') {\n throw new TypeError(\"Expected a string, got a \".concat(t));\n }\n};\n\n// this function is directly from node source\nvar posixNormalize = function posixNormalize(path, allowAboveRoot) {\n var res = '';\n var lastSegmentLength = 0;\n var lastSlash = -1;\n var dots = 0;\n var code;\n for (var i = 0; i <= path.length; ++i) {\n if (i < path.length) {\n code = path.charCodeAt(i);\n } else if (code === SLASH) {\n break;\n } else {\n code = SLASH;\n }\n if (code === SLASH) {\n if (lastSlash === i - 1 || dots === 1) {\n // NOOP\n } else if (lastSlash !== i - 1 && dots === 2) {\n if (res.length < 2 || lastSegmentLength !== 2 || res.charCodeAt(res.length - 1) !== DOT || res.charCodeAt(res.length - 2) !== DOT) {\n if (res.length > 2) {\n var lastSlashIndex = res.lastIndexOf('/');\n if (lastSlashIndex !== res.length - 1) {\n if (lastSlashIndex === -1) {\n res = '';\n lastSegmentLength = 0;\n } else {\n res = res.slice(0, lastSlashIndex);\n lastSegmentLength = res.length - 1 - res.lastIndexOf('/');\n }\n lastSlash = i;\n dots = 0;\n continue;\n }\n } else if (res.length === 2 || res.length === 1) {\n res = '';\n lastSegmentLength = 0;\n lastSlash = i;\n dots = 0;\n continue;\n }\n }\n if (allowAboveRoot) {\n if (res.length > 0) {\n res += '/..';\n } else {\n res = '..';\n }\n lastSegmentLength = 2;\n }\n } else {\n if (res.length > 0) {\n res += '/' + path.slice(lastSlash + 1, i);\n } else {\n res = path.slice(lastSlash + 1, i);\n }\n lastSegmentLength = i - lastSlash - 1;\n }\n lastSlash = i;\n dots = 0;\n } else if (code === DOT && dots !== -1) {\n ++dots;\n } else {\n dots = -1;\n }\n }\n return res;\n};\nvar decode = function decode(s) {\n try {\n return decodeURIComponent(s);\n } catch (_unused) {\n return s;\n }\n};\nvar normalize = function normalize(p) {\n assertPath(p);\n var path = p;\n if (path.length === 0) {\n return '.';\n }\n var isAbsolute = path.charCodeAt(0) === SLASH;\n var trailingSeparator = path.charCodeAt(path.length - 1) === SLASH;\n path = decode(path);\n path = posixNormalize(path, !isAbsolute);\n if (path.length === 0 && !isAbsolute) {\n path = '.';\n }\n if (path.length > 0 && trailingSeparator) {\n path += '/';\n }\n if (isAbsolute) {\n return '/' + path;\n }\n return path;\n};\nvar _default = normalize;\nexports[\"default\"] = _default;\nmodule.exports = exports.default;\n","/**\n * SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { generateUrl, generateRemoteUrl } from '@nextcloud/router'\nimport pathNormalize from 'path-normalize'\n\nimport store from '../store/index.js'\n\nconst setAttachmentList = (val) => store.dispatch('text/setAttachmentList', val)\nconst findAttachment = store.getters['text/findAttachment']\n\nexport default class AttachmentResolver {\n\n\t#session\n\t#user\n\t#shareToken\n\t#currentDirectory\n\t#documentId\n\t#initAttachmentListPromise\n\n\tconstructor({ session, user, shareToken, currentDirectory, fileId }) {\n\t\tthis.#session = session\n\t\tthis.#user = user\n\t\tthis.#shareToken = shareToken\n\t\tthis.#currentDirectory = currentDirectory\n\t\tthis.#documentId = fileId ?? session.documentId\n\t\tthis.#initAttachmentListPromise = this.#updateAttachmentList()\n\t}\n\n\tasync #updateAttachmentList() {\n\t\treturn setAttachmentList({ documentId: this.#documentId, session: this.#session, shareToken: this.#shareToken })\n\t}\n\n\t/*\n\t * Resolve a given image/attachment src.\n\t * @param { string } src - the original src in the node.\n\t * @param { bool } fallback - fetch again attachmentsList if not found | defaul = true\n\t */\n\tasync resolve(src, fallback = true) {\n\t\tlet attachment\n\n\t\t// Native attachment\n\t\tconst directoryRegexp = /^\\.attachments\\.\\d+\\//\n\t\tif (src.match(directoryRegexp)) {\n\t\t\tconst imageFileName = decodeURIComponent(src.replace(directoryRegexp, '').split('?')[0])\n\n\t\t\t// Wait until attachment list got fetched (initialized by constructor)\n\t\t\tawait this.#initAttachmentListPromise\n\t\t\tattachment = findAttachment(imageFileName)\n\n\t\t\tif (fallback && !attachment) {\n\t\t\t\t// Update attachments list. Needed if attachments gets added to the session\n\t\t\t\tawait this.#updateAttachmentList()\n\t\t\t\tattachment = findAttachment(imageFileName)\n\t\t\t}\n\n\t\t\tif (attachment) {\n\t\t\t\treturn attachment\n\t\t\t}\n\n\t\t}\n\n\t\t// Direct URLs\n\t\tif (isDirectUrl(src)) {\n\t\t\treturn {\n\t\t\t\tisImage: true,\n\t\t\t\tname: this.#name(src),\n\t\t\t\tpreviewUrl: src,\n\t\t\t\tfullUrl: src,\n\t\t\t}\n\t\t}\n\n\t\t// Fallback: Return DAV url (e.g. for relative paths to images)\n\t\treturn {\n\t\t\tisImage: true,\n\t\t\tname: this.#name(src),\n\t\t\tpreviewUrl: this.#davUrl(src),\n\t\t\tfullUrl: this.#davUrl(src),\n\t\t}\n\t}\n\n\t#name(src) {\n\t\treturn src.split('/').pop()\n\t}\n\n\t#davUrl(src) {\n\t\tif (this.#user) {\n\t\t\tconst uid = this.#user.uid\n\t\t\tconst encoded = this.#filePath(src).split('/').map(encodeURIComponent).join('/')\n\t\t\treturn generateRemoteUrl(`dav/files/${uid}${encoded}`)\n\t\t}\n\n\t\tconst path = this.#filePath(src).split('/')\n\t\tconst basename = path.pop()\n\t\tconst dirname = path.join('/')\n\n\t\treturn generateUrl('/s/{token}/download?path={dirname}&files={basename}', {\n\t\t\ttoken: this.#shareToken,\n\t\t\tbasename,\n\t\t\tdirname,\n\t\t})\n\t}\n\n\t/**\n\t * Return the relativePath to a file specified in the url\n\t *\n\t * @param {string} src - url to extract path from\n\t */\n\t#relativePath(src) {\n\t\treturn decodeURI(src.split('?')[0])\n\t}\n\n\t#filePath(src) {\n\t\tconst f = [\n\t\t\tthis.#currentDirectory,\n\t\t\tthis.#relativePath(src),\n\t\t].join('/')\n\n\t\treturn pathNormalize(f)\n\t}\n\n}\n\n/**\n * Check if src is a direct URL.\n * Full URLs only work for images on the same Nextcloud instance (due to CORS restrictions).\n *\n * @param {string} src - the url to check\n */\nfunction isDirectUrl(src) {\n\treturn src.startsWith('http://')\n\t\t|| src.startsWith('https://')\n\t\t|| src.startsWith('data:')\n}\n","\n\n\n\n","\n\n\n\n\n","/**\n * SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\n/**\n * Check if current platform is a mobile device\n *\n * @return {boolean} whether the platform is a mobile device\n */\nexport function isMobilePlatform() {\n\t// Use client hints if already available\n\tif (navigator?.userAgentData?.mobile !== undefined) return navigator.userAgentData.mobile\n\n\t// use regex to match userAgent (required for Safari and Firefox in 2022)\n\tconst mobileDevices = [\n\t\t/Android/i,\n\t\t/webOS/i,\n\t\t/iPhone/i,\n\t\t/iPad/i,\n\t\t/iPod/i,\n\t\t/playbook/i,\n\t\t/silk/i,\n\t\t/BlackBerry/i,\n\t\t/Windows Phone/i,\n\t]\n\n\treturn mobileDevices.some(regex => navigator.userAgent.match(regex))\n}\n","\n\n\n\n\n\n\n","\n\n\n\n\n\n\n","\n\n\n\n\n\n\n","\n\n\n\n\n","\n\n\n\n\n\n\n","\n\n\n\n\n\n\n"],"names":["outdatedTimeout","Awareness","Observable","doc","now","time.getUnixTime","remove","meta","clientid","removeAwarenessStates","math.floor","state","clientID","currLocalMeta","clock","prevState","added","updated","filteredUpdated","removed","f.equalityDeep","field","value","awareness","clients","origin","i","curMeta","encodeAwarenessUpdate","states","len","encoder","encoding.createEncoder","encoding.writeVarUint","encoding.writeVarString","encoding.toUint8Array","applyAwarenessUpdate","update","decoder","decoding.createDecoder","timestamp","decoding.readVarUint","decoding.readVarString","clientMeta","currClock","_sfc_main","NextcloudVueNcActionButton","BaseActionEntry","actionEntry","NcActions","NcActionSeparator","ActionListItem","useStore","useOutlineStateMixin","useMenuIDMixin","$editor","children","child","getIsActive","_a","visible","debounce","val","entry","getActionState","NcButton","ToolBarLogic","defineComponent","menuKey","index","key","modulo","event","_b","a","b","ActionList","ActionSingle","entries","encodeArrayBuffer","data","view","toBase64","decodeArrayBuffer","encoded","fromBase64","messageYjsSyncStep1","messageYjsSyncStep2","messageYjsUpdate","writeSyncStep1","sv","Y.encodeStateVector","encoding.writeVarUint8Array","writeSyncStep2","encodedStateVector","Y.encodeStateAsUpdate","readSyncStep1","decoding.readVarUint8Array","readSyncStep2","transactionOrigin","Y.applyUpdate","error","writeUpdate","readUpdate","readSyncMessage","messageType","channels","LocalStoragePolyfill","room","e","buffer.fromBase64","storage.onChange","buf","storage.varStorage","buffer.toBase64","buffer.createUint8ArrayFromArrayBuffer","storage.offChange","BC","getChannel","map.setIfUndefined","subs","set.create","bc","sub","subscribe","f","unsubscribe","channel","unsubscribed","publish","c","messagePermissionDenied","readAuthMessage","y","permissionDeniedHandler","encodeQueryParams","params","object.map","messageSync","messageQueryAwareness","messageAwareness","messageAuth","messageHandlers","provider","emitSynced","_messageType","syncMessageType","syncProtocol.readSyncMessage","syncProtocol.messageYjsSyncStep2","_decoder","_emitSynced","awarenessProtocol.encodeAwarenessUpdate","_encoder","awarenessProtocol.applyAwarenessUpdate","authProtocol.readAuthMessage","_ydoc","reason","messageReconnectTimeout","readMessage","messageHandler","setupWS","websocket","encoding.length","awarenessProtocol.removeAwarenessStates","client","math.min","math.pow","syncProtocol.writeSyncStep1","encoderAwarenessState","broadcastMessage","ws","bc.publish","WebsocketProvider","serverUrl","roomname","connect","awarenessProtocol.Awareness","WebSocketPolyfill","resyncInterval","maxBackoffTime","disableBc","syncProtocol.writeUpdate","_origin","changedClients","env.isNode","process","encodedParams","url.encodeQueryParams","bc.subscribe","encoderSync","encoderState","syncProtocol.writeSyncStep2","encoderAwarenessQuery","bc.unsubscribe","getDocumentState","ydoc","applyDocumentState","documentState","getUpdateMessage","encodedBaseUpdate","baseUpdate","baseStateVector","Y.encodeStateVectorFromUpdate","docStateVector","sameState","getSteps","queue","s","getAwareness","arr","other","mitt","n","t","ConnectionClosedError","message","rest","SessionApi","options","__privateAdd","_gs_instances","#options","__privateSet","fileId","baseVersionEtag","axios","__privateMethod","#url","__privateGet","response","Connection","endpoint","isPublic","_endpointUrl","_Dt_instances","#content","#closed","#documentState","#document","#session","#lock","#readOnly","document","session","lock","readOnly","content","version","#post","#defaultParams","autosaveContent","force","manualSave","steps","guestName","file","formData","url","filePath","args","_baseUrl","generateUrl","FETCH_INTERVAL","FETCH_INTERVAL_MAX","FETCH_INTERVAL_SINGLE_EDITOR","FETCH_INTERVAL_READ_ONLY","FETCH_INTERVAL_INVISIBLE","MAX_RETRY_FETCH_COUNT","COLLABORATOR_DISCONNECT_TIME","PollingBackend","syncService","connection","#syncService","#connection","#lastPoll","#fetchInterval","#fetchRetryCounter","#pollActive","#initialLoadingFinished","logger","sessions","disconnect","alive","__privateWrapper","ERROR_TYPE","IDLE_TIMEOUT","AUTOSAVE_INTERVAL","COLLABORATOR_IDLE_TIME","SyncService","serialize","#sendIntervalId","initialSession","getSendable","resolve","reject","err","code","newSteps","singleSteps","step","outbox","callback","exports","_typeof","obj","SLASH","DOT","assertPath","path","posixNormalize","allowAboveRoot","res","lastSegmentLength","lastSlash","dots","lastSlashIndex","decode","normalize","p","isAbsolute","trailingSeparator","_default","module","setAttachmentList","store","findAttachment","AttachmentResolver","user","shareToken","currentDirectory","_Os_instances","#user","#shareToken","#currentDirectory","#documentId","#initAttachmentListPromise","#updateAttachmentList","src","fallback","attachment","directoryRegexp","imageFileName","isDirectUrl","#name","#davUrl","uid","#filePath","generateRemoteUrl","basename","dirname","#relativePath","pathNormalize","Help","AlphabeticalVariant","NcActionText","useEditorMixin","isMobilePlatform","regex","NcDialog","style","ActionFormattingHelp","HelpModal","NcActionButton","CharacterCount","TranslateVariant","useIsMobileMixin","useIsRichEditorMixin","useIsRichWorkspaceMixin","MENU_ID","menubar","ref","width","useElementSize","actionsFullEntries","loadState","priority","remainingEntries","acc","separatorBefore","separatorAfter","DotsHorizontal","clickableArea","spaceToFill","spacePerSlot","from","to","selectedText","emit","EditorContent","EditorOutline","getDir","useFileMixin","useSyncServiceMixin","ACTION_ATTACHMENT_PROMPT","ACTION_CHOOSE_LOCAL_ATTACHMENT","STATE_UPLOADING","_c","files","position","uploadPromises","showError","getCurrentUser","name","mimeType","alt","selection","MediaHandler","useEditorUpload","OUTLINE_STATE","OUTLINE_ACTIONS","mapState","enable"],"mappings":"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","x_google_ignoreList":[0,7,8,9,10,11,13,17]} \ No newline at end of file diff --git a/js/vendor.LICENSE.txt b/js/vendor.LICENSE.txt index 62477dcda38..28cfd7b34af 100644 --- a/js/vendor.LICENSE.txt +++ b/js/vendor.LICENSE.txt @@ -81,7 +81,7 @@ version: 2.1.0 license: GPL-3.0-or-later @nextcloud/router -version: 3.0.1 +version: 2.2.1 license: GPL-3.0-or-later @nextcloud/sharing