From 72249a20b26cd881a37fd2c8137371ce818a4566 Mon Sep 17 00:00:00 2001 From: Max Date: Mon, 11 Dec 2023 13:56:28 +0100 Subject: [PATCH 1/6] fix(sync): preserve queue if sendRemainingSteps fails During a network disconnect Yjs-websocket notices missing awareness messages and closes the connection. In this case the remaining steps can also not be send out and the request fails. Preserve the queue so we can use it once the network is back up. Signed-off-by: Max --- src/services/WebSocketPolyfill.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/services/WebSocketPolyfill.js b/src/services/WebSocketPolyfill.js index 8e4f4bba4d2..6a012267fff 100644 --- a/src/services/WebSocketPolyfill.js +++ b/src/services/WebSocketPolyfill.js @@ -122,7 +122,9 @@ export default function initWebSocketPolyfill(syncService, fileId, initialSessio #sendRemainingSteps() { if (this.#queue.length) { + let outbox = [] return syncService.sendStepsNow(() => { + outbox = [...this.#queue] const data = { steps: this.#steps, awareness: this.#awareness, @@ -133,6 +135,7 @@ export default function initWebSocketPolyfill(syncService, fileId, initialSessio return data })?.catch(err => { logger.error(err) + this.#queue = [...outbox, ...this.#queue] }) } } From 6632a744ae516808f01a0f6136d6ca77b89aa55d Mon Sep 17 00:00:00 2001 From: Max Date: Mon, 11 Dec 2023 14:51:49 +0100 Subject: [PATCH 2/6] fix(sync): keep queue around during reconnects When yjs does not receive awareness updates it will close and reopen the websocket. Keep the content of the queue, i.e. the outgoing steps so they can be send out once the connection is back. Signed-off-by: Max --- cypress/e2e/api/SyncServiceProvider.spec.js | 2 ++ src/components/Editor.vue | 2 ++ src/services/SyncServiceProvider.js | 5 +++-- src/services/WebSocketPolyfill.js | 25 ++++++++++----------- 4 files changed, 19 insertions(+), 15 deletions(-) diff --git a/cypress/e2e/api/SyncServiceProvider.spec.js b/cypress/e2e/api/SyncServiceProvider.spec.js index c8ee4d7bd31..ecb1ade7ef7 100644 --- a/cypress/e2e/api/SyncServiceProvider.spec.js +++ b/cypress/e2e/api/SyncServiceProvider.spec.js @@ -60,6 +60,7 @@ describe('Sync service provider', function() { * @param {object} ydoc Yjs document */ function createProvider(ydoc) { + const queue = [] const syncService = new SyncService({ serialize: () => 'Serialized', getDocumentState: () => null, @@ -70,6 +71,7 @@ describe('Sync service provider', function() { syncService, fileId, initialSession: null, + queue, disableBc: true, }) } diff --git a/src/components/Editor.vue b/src/components/Editor.vue index a9a29b0e065..0775f0ceefe 100644 --- a/src/components/Editor.vue +++ b/src/components/Editor.vue @@ -323,6 +323,7 @@ export default { }, created() { this.$ydoc = new Doc() + this.$queue = [] this.$providers = [] this.$editor = null this.$syncService = null @@ -370,6 +371,7 @@ export default { ydoc: this.$ydoc, syncService: this.$syncService, fileId: this.fileId, + queue: this.$queue, initialSession: this.initialSession, }) this.$providers.push(syncServiceProvider) diff --git a/src/services/SyncServiceProvider.js b/src/services/SyncServiceProvider.js index dc015304f97..8dff59e4e6c 100644 --- a/src/services/SyncServiceProvider.js +++ b/src/services/SyncServiceProvider.js @@ -30,15 +30,16 @@ import { logger } from '../helpers/logger.js' * @param {object} options.ydoc - the Ydoc * @param {object} options.syncService - sync service to build upon * @param {number} options.fileId - file id of the file to open + * @param {number} options.queue - queue for outgoing steps * @param {object} options.initialSession - initialSession to start from * @param {boolean} options.disableBc - disable broadcast channel synchronization (default: disabled in debug mode, enabled otherwise) */ -export default function createSyncServiceProvider({ ydoc, syncService, fileId, initialSession, disableBc }) { +export default function createSyncServiceProvider({ ydoc, syncService, fileId, initialSession, queue, disableBc }) { if (!fileId) { // We need a file id as a unique identifier for y.js as otherwise state might leak between different files throw new Error('fileId is required') } - const WebSocketPolyfill = initWebSocketPolyfill(syncService, fileId, initialSession) + const WebSocketPolyfill = initWebSocketPolyfill(syncService, fileId, initialSession, queue) disableBc = disableBc ?? !!window?._oc_debug const websocketProvider = new WebsocketProvider( 'ws://localhost:1234', diff --git a/src/services/WebSocketPolyfill.js b/src/services/WebSocketPolyfill.js index 6a012267fff..f96595e1bae 100644 --- a/src/services/WebSocketPolyfill.js +++ b/src/services/WebSocketPolyfill.js @@ -28,8 +28,9 @@ import { encodeArrayBuffer, decodeArrayBuffer } from '../helpers/base64.js' * @param {object} syncService - the sync service to build upon * @param {number} fileId - id of the file to open * @param {object} initialSession - initial session to open + * @param {object[]} queue - queue for the outgoing steps */ -export default function initWebSocketPolyfill(syncService, fileId, initialSession) { +export default function initWebSocketPolyfill(syncService, fileId, initialSession, queue) { return class WebSocketPolyfill { #url @@ -41,11 +42,9 @@ export default function initWebSocketPolyfill(syncService, fileId, initialSessio onclose onopen #handlers - #queue constructor(url) { this.url = url - this.#queue = [] logger.debug('WebSocketPolyfill#constructor', { url, fileId, initialSession }) this.#registerHandlers({ opened: ({ version, session }) => { @@ -80,32 +79,32 @@ export default function initWebSocketPolyfill(syncService, fileId, initialSessio } send(...data) { - this.#queue.push(...data) + queue.push(...data) let outbox = [] return syncService.sendSteps(() => { - outbox = [...this.#queue] + outbox = [...queue] const data = { steps: this.#steps, awareness: this.#awareness, version: this.#version, } - this.#queue = [] + queue = [] logger.debug('sending steps ', data) return data })?.catch(err => { logger.error(err) // try to send the steps again - this.#queue = [...outbox, ...this.#queue] + queue = [...outbox, ...queue] }) } get #steps() { - return this.#queue.map(s => encodeArrayBuffer(s)) + return queue.map(s => encodeArrayBuffer(s)) .filter(s => s < 'AQ') } get #awareness() { - return this.#queue.map(s => encodeArrayBuffer(s)) + return queue.map(s => encodeArrayBuffer(s)) .findLast(s => s > 'AQ') || '' } @@ -121,21 +120,21 @@ export default function initWebSocketPolyfill(syncService, fileId, initialSessio } #sendRemainingSteps() { - if (this.#queue.length) { + if (queue.length) { let outbox = [] return syncService.sendStepsNow(() => { - outbox = [...this.#queue] + outbox = [...queue] const data = { steps: this.#steps, awareness: this.#awareness, version: this.#version, } - this.#queue = [] + queue = [] logger.debug('sending final steps ', data) return data })?.catch(err => { logger.error(err) - this.#queue = [...outbox, ...this.#queue] + queue = [...outbox, ...queue] }) } } From 8954454e9ac8031dace2cc3ffacc12d0cf6fc142 Mon Sep 17 00:00:00 2001 From: Max Date: Fri, 15 Dec 2023 21:19:41 +0100 Subject: [PATCH 3/6] fix(sync): ensure queue stays the same array Change the content of `queue` with `queue.splice` rather than setting `queue` to another array. Signed-off-by: Max --- src/services/WebSocketPolyfill.js | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/services/WebSocketPolyfill.js b/src/services/WebSocketPolyfill.js index f96595e1bae..46186bb2f15 100644 --- a/src/services/WebSocketPolyfill.js +++ b/src/services/WebSocketPolyfill.js @@ -80,21 +80,20 @@ export default function initWebSocketPolyfill(syncService, fileId, initialSessio send(...data) { queue.push(...data) - let outbox = [] + let outbox return syncService.sendSteps(() => { - outbox = [...queue] const data = { steps: this.#steps, awareness: this.#awareness, version: this.#version, } - queue = [] + outbox = queue.splice(0, queue.length) logger.debug('sending steps ', data) return data })?.catch(err => { logger.error(err) - // try to send the steps again - queue = [...outbox, ...queue] + // Prefix the queue with the steps in outbox to send them again + queue.splice(0, 0, ...outbox) }) } @@ -123,18 +122,18 @@ export default function initWebSocketPolyfill(syncService, fileId, initialSessio if (queue.length) { let outbox = [] return syncService.sendStepsNow(() => { - outbox = [...queue] const data = { steps: this.#steps, awareness: this.#awareness, version: this.#version, } - queue = [] + outbox = queue.splice(0, queue.length) logger.debug('sending final steps ', data) return data })?.catch(err => { logger.error(err) - queue = [...outbox, ...queue] + // Prefix the queue with the steps in outbox to send them again + queue.splice(0, 0, ...outbox) }) } } From 161fb3c691fb1d255b23a7a69c15037273d4cc7e Mon Sep 17 00:00:00 2001 From: Max Date: Mon, 18 Dec 2023 15:26:59 +0100 Subject: [PATCH 4/6] fix(sync): only clear queue after successful send Also add a unit test for the websocket polyfill Signed-off-by: Max --- src/services/WebSocketPolyfill.js | 31 ++--- src/tests/services/WebsocketPolyfill.spec.js | 114 +++++++++++++++++++ 2 files changed, 132 insertions(+), 13 deletions(-) create mode 100644 src/tests/services/WebsocketPolyfill.spec.js diff --git a/src/services/WebSocketPolyfill.js b/src/services/WebSocketPolyfill.js index 46186bb2f15..3c4b9d1c4f9 100644 --- a/src/services/WebSocketPolyfill.js +++ b/src/services/WebSocketPolyfill.js @@ -80,21 +80,24 @@ export default function initWebSocketPolyfill(syncService, fileId, initialSessio send(...data) { queue.push(...data) - let outbox + let outbox = [] return syncService.sendSteps(() => { const data = { steps: this.#steps, awareness: this.#awareness, version: this.#version, } - outbox = queue.splice(0, queue.length) + outbox = [...queue] logger.debug('sending steps ', data) return data - })?.catch(err => { - logger.error(err) - // Prefix the queue with the steps in outbox to send them again - queue.splice(0, 0, ...outbox) - }) + })?.then(ret => { + // only keep the steps that were not send yet + queue.splice(0, + queue.length, + ...queue.filter(s => !outbox.includes(s)), + ) + return ret + }, err => logger.error(err)) } get #steps() { @@ -127,14 +130,16 @@ export default function initWebSocketPolyfill(syncService, fileId, initialSessio awareness: this.#awareness, version: this.#version, } - outbox = queue.splice(0, queue.length) + outbox = [...queue] logger.debug('sending final steps ', data) return data - })?.catch(err => { - logger.error(err) - // Prefix the queue with the steps in outbox to send them again - queue.splice(0, 0, ...outbox) - }) + })?.then(() => { + // only keep the steps that were not send yet + queue.splice(0, + queue.length, + ...queue.filter(s => !outbox.includes(s)), + ) + }, err => logger.error(err)) } } diff --git a/src/tests/services/WebsocketPolyfill.spec.js b/src/tests/services/WebsocketPolyfill.spec.js new file mode 100644 index 00000000000..1536d6e6992 --- /dev/null +++ b/src/tests/services/WebsocketPolyfill.spec.js @@ -0,0 +1,114 @@ +import initWebSocketPolyfill from '../../services/WebSocketPolyfill.js' + +describe('Init function', () => { + + it('returns a websocket polyfill class', () => { + const syncService = { on: jest.fn(), open: jest.fn() } + const Polyfill = initWebSocketPolyfill(syncService) + const websocket = new Polyfill('url') + expect(websocket).toBeInstanceOf(Polyfill) + }) + + it('registers handlers', () => { + const syncService = { on: jest.fn(), open: jest.fn() } + const Polyfill = initWebSocketPolyfill(syncService) + const websocket = new Polyfill('url') + expect(syncService.on).toHaveBeenCalled() + }) + + it('opens sync service', () => { + const syncService = { on: jest.fn(), open: jest.fn() } + const fileId = 123 + const initialSession = { } + const Polyfill = initWebSocketPolyfill(syncService, fileId, initialSession) + const websocket = new Polyfill('url') + expect(syncService.open).toHaveBeenCalledWith({ fileId, initialSession }) + }) + + it('sends steps to sync service', async () => { + const syncService = { + on: jest.fn(), + open: jest.fn(), + sendSteps: async getData => getData(), + } + const queue = [ 'initial' ] + const data = { dummy: 'data' } + const Polyfill = initWebSocketPolyfill(syncService, null, null, queue) + const websocket = new Polyfill('url') + const result = websocket.send(data) + expect(result).toBeInstanceOf(Promise) + expect(queue).toEqual([ 'initial' , data ]) + const dataSendOut = await result + expect(queue).toEqual([]) + expect(dataSendOut).toHaveProperty('awareness') + expect(dataSendOut).toHaveProperty('steps') + expect(dataSendOut).toHaveProperty('version') + }) + + it('handles early reject', async () => { + const syncService = { + on: jest.fn(), + open: jest.fn(), + sendSteps: jest.fn().mockRejectedValue('error before reading steps in sync service'), + } + const queue = [ 'initial' ] + const data = { dummy: 'data' } + const Polyfill = initWebSocketPolyfill(syncService, null, null, queue) + const websocket = new Polyfill('url') + const result = websocket.send(data) + expect(queue).toEqual([ 'initial' , data ]) + expect(result).toBeInstanceOf(Promise) + const returned = await result + expect(returned).toBeUndefined() + expect(queue).toEqual([ 'initial' , data ]) + }) + + it('handles reject after reading data', async () => { + const syncService = { + on: jest.fn(), + open: jest.fn(), + sendSteps: jest.fn().mockImplementation( async getData => { + getData() + throw 'error when sending in sync service' + }), + } + const queue = [ 'initial' ] + const data = { dummy: 'data' } + const Polyfill = initWebSocketPolyfill(syncService, null, null, queue) + const websocket = new Polyfill('url') + const result = websocket.send(data) + expect(queue).toEqual([ 'initial' , data ]) + expect(result).toBeInstanceOf(Promise) + const returned = await result + expect(returned).toBeUndefined() + expect(queue).toEqual([ 'initial' , data ]) + }) + + it('queue survives a close', async () => { + const syncService = { + on: jest.fn(), + open: jest.fn(), + sendSteps: jest.fn().mockImplementation( async getData => { + getData() + throw 'error when sending in sync service' + }), + sendStepsNow: jest.fn().mockImplementation( async getData => { + getData() + throw 'sendStepsNow error when sending' + }), + off: jest.fn(), + close: jest.fn( async data => data ), + } + const queue = [ 'initial' ] + const data = { dummy: 'data' } + const Polyfill = initWebSocketPolyfill(syncService, null, null, queue) + const websocket = new Polyfill('url') + websocket.onclose = jest.fn() + await websocket.send(data) + const promise = websocket.close() + expect(queue).toEqual([ 'initial' , data ]) + await promise + expect(queue).toEqual([ 'initial' , data ]) + }) + +}) From ba8b28ad5bec5996b12ba87a1f1c31e64da642f1 Mon Sep 17 00:00:00 2001 From: Max Date: Mon, 18 Dec 2023 15:35:51 +0100 Subject: [PATCH 5/6] fix(sync): clear old providers on reconnect avoids the old provider leaking error events. Signed-off-by: Max --- src/components/Editor.vue | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/components/Editor.vue b/src/components/Editor.vue index 0775f0ceefe..21521a92de1 100644 --- a/src/components/Editor.vue +++ b/src/components/Editor.vue @@ -367,6 +367,8 @@ export default { this.listenSyncServiceEvents() + this.$providers.forEach(p => p?.destroy()) + this.$providers = [] const syncServiceProvider = createSyncServiceProvider({ ydoc: this.$ydoc, syncService: this.$syncService, From 9ba8c3c581db983bb5edb7b2217feaf33c304c90 Mon Sep 17 00:00:00 2001 From: nextcloud-command Date: Tue, 9 Jan 2024 11:28:06 +0000 Subject: [PATCH 6/6] chore(assets): Recompile assets Signed-off-by: nextcloud-command --- js/editor.js | 4 ++-- js/editor.js.map | 2 +- js/files-modal.js | 4 ++-- js/files-modal.js.map | 2 +- js/text-editors.js | 4 ++-- js/text-editors.js.map | 2 +- js/text-files.js | 4 ++-- js/text-files.js.map | 2 +- js/text-public.js | 4 ++-- js/text-public.js.map | 2 +- js/text-text.js | 4 ++-- js/text-text.js.map | 2 +- js/text-viewer.js | 4 ++-- js/text-viewer.js.map | 2 +- 14 files changed, 21 insertions(+), 21 deletions(-) diff --git a/js/editor.js b/js/editor.js index 1d1a2f3ae80..9520405d009 100644 --- a/js/editor.js +++ b/js/editor.js @@ -1,3 +1,3 @@ /*! For license information please see editor.js.LICENSE.txt */ -(self.webpackChunk_nextcloud_text=self.webpackChunk_nextcloud_text||[]).push([["editor"],{31728:(t,e,n)=>{"use strict";n.d(e,{$r:()=>k,BG:()=>b,C6:()=>A,Cy:()=>m,FQ:()=>a,HB:()=>o,IT:()=>d,OV:()=>u,QT:()=>v,Uw:()=>r,Zf:()=>x,a_:()=>y,cY:()=>l,eP:()=>w,fB:()=>f,q$:()=>s,rz:()=>C,sw:()=>p,vo:()=>c,wU:()=>h,ww:()=>_,zZ:()=>g});var i=n(52029);const r=Symbol("tiptap:editor"),o=Symbol("editor:file"),a=Symbol("attachment:resolver"),s=Symbol("editor:is-mobile"),l=Symbol("editor:is-public"),c=Symbol("editor:is-rich-editor"),d=Symbol("editor:is-rich-woskapace"),h=Symbol("sync:service"),A=Symbol("editor:upload"),u=Symbol("hook:link-click"),p=Symbol("hook:mention-search"),g=Symbol("hook:mention-insert"),m={inject:{$editor:{from:r,default:null}}},b={inject:{$syncService:{from:h,default:null}}},f={inject:{$isPublic:{from:l,default:!1}}},C={inject:{$isRichWorkspace:{from:d,default:!1}}},v={inject:{$isRichEditor:{from:c,default:!1}}},_={inject:{$isMobile:{from:s,default:!1}}},y={inject:{$file:{from:o,default:()=>({fileId:0,relativePath:null,document:null})}}},x={inject:{$attachmentResolver:{from:a,default:{resolve:t=>(i.k.warn("No attachment resolver provided. Some attachment sources cannot be resolved."),[t])}}}},w={inject:{$editorUpload:{from:A,default:!0}}},k={inject:{$linkHookClick:{from:u,default:null}}}},33528:(t,e,n)=>{"use strict";n.d(e,{TI:()=>s,eS:()=>o,gn:()=>r,kZ:()=>a,qj:()=>l,uT:()=>i});const i=Symbol("state:uploading-state"),r=Symbol("editor:action:attachment-prompt"),o=Symbol("editor:action:upload-attachment"),a={inject:{$uploadingState:{from:i,default:{isUploadingAttachments:!1}}}},s={inject:{$callAttachmentPrompt:{from:r,default:()=>{}}}},l={inject:{$callChooseLocalAttachment:{from:o,default:()=>{}}}}},28612:(t,e,n)=>{"use strict";n.d(e,{Ad:()=>a,Dr:()=>i,aM:()=>r,vV:()=>o});const i=Symbol("wrapper:outline-state"),r=Symbol("wrapper:outline-actions"),o={inject:{$outlineState:{from:i,default:{visible:!1,enable:!1}}}},a={inject:{$outlineActions:{from:r,default:{toggle:()=>{}}}}}},85724:(t,e,n)=>{"use strict";n.d(e,{Z:()=>o});var i=n(68418),r=n(68794);const o={name:"ActionEntry",functional:!0,render(t,e){const{actionEntry:n}=e.props,{data:o,props:a,listeners:s}=e,{key:l}=o,c={data:o,key:l,props:a,on:s};return n.component?t(n.component,c):n.children?t(r.Z,c):t(i.Z,c)}}},76115:(t,e,n)=>{"use strict";n.d(e,{b:()=>w});var i=n(15961),r=n(20296),o=n.n(r),a=n(31728),s=n(28612),l=n(72076),c=n(13815),d=n(93379),h=n.n(d),A=n(7795),u=n.n(A),p=n(90569),g=n.n(p),m=n(3565),b=n.n(m),f=n(19216),C=n.n(f),v=n(44589),_=n.n(v),y=n(97646),x={};x.styleTagTransform=_(),x.setAttributes=b(),x.insert=g().bind(null,"head"),x.domAPI=u(),x.insertStyleElement=C();h()(y.Z,x);y.Z&&y.Z.locals&&y.Z.locals;const w={directives:{Tooltip:i.u},mixins:[a.Cy,a.ww,c.Z,s.Ad,s.vV],props:{actionEntry:{type:Object,required:!0}},data(){return{state:(0,l.wr)(this.actionEntry,this.$editor)}},computed:{label(){const{label:t}=this.actionEntry;return"function"==typeof t?t(this):t},icon(){return this.actionEntry.icon},keyshortcuts(){return(0,l.FZ)(this.actionEntry)},tooltip(){return[this.label,(0,l.RR)(this.$isMobile,this.actionEntry)].join(" ")}},mounted(){this.$_updateState=o()(this.updateState.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:{updateState(){this.state=(0,l.wr)(this.actionEntry,this.$editor)}}}},60948:(t,e,n)=>{"use strict";n.d(e,{V:()=>i,q:()=>r});const i=Symbol("menu::id"),r={inject:{$menuID:{from:i,default:null}},computed:{menuIDSelector(){return"#".concat(this.$menuID)}}}},81334:(e,n,i)=>{"use strict";i.d(n,{E:()=>O,Z:()=>R});var r=i(32318),o=i(76115),a=i(15961),s=i(60948);const l={name:"EmojiPickerAction",components:{NcEmojiPicker:a.Xo,NcButton:a.P2},extends:o.b,mixins:[s.q],methods:{addEmoji(t){let{id:e,native:n}=t;this.actionEntry.action(this.$editor.chain(),{id:e,native:n}).focus().run()}}};var c=i(51900);const d=(0,c.Z)(l,(function(){var t=this,e=t._self._c;return e("NcEmojiPicker",{staticClass:"entry-action entry-action__emoji",attrs:{"data-text-action-entry":t.actionEntry.key,container:t.menuIDSelector},on:{"select-data":t.addEmoji}},[e("NcButton",{directives:[{name:"tooltip",rawName:"v-tooltip",value:t.actionEntry.label,expression:"actionEntry.label"}],staticClass:"entry-action__button",attrs:{role:"menu",title:t.actionEntry.label,"aria-label":t.actionEntry.label,"aria-haspopup":!0},scopedSlots:t._u([{key:"icon",fn:function(){return[e(t.icon,{tag:"component"})]},proxy:!0}])})],1)}),[],!1,null,null,null).exports;var h=i(31728),A=i(33528);const u={name:"ActionAttachmentUpload",components:{NcActions:a.O3,NcActionButton:a.Js,Loading:r.gb,Folder:r.gt,Upload:r.gq},extends:o.b,mixins:[h.fB,h.eP,A.TI,A.kZ,A.qj,s.q],computed:{icon(){return this.isUploadingAttachments?r.gb:this.actionEntry.icon},isUploadingAttachments(){return this.$uploadingState.isUploadingAttachments}}};const p=(0,c.Z)(u,(function(){var t=this,e=t._self._c;return e("NcActions",{staticClass:"entry-action entry-action__image-upload",attrs:{"data-text-action-entry":t.actionEntry.key,title:t.actionEntry.label,"aria-label":t.actionEntry.label,container:t.menuIDSelector,role:"menu","aria-haspopup":""},scopedSlots:t._u([{key:"icon",fn:function(){return[e(t.icon,{tag:"component",attrs:{title:t.actionEntry.label,"aria-label":t.actionEntry.label,"aria-haspopup":""}})]},proxy:!0}])},[t._v(" "),t.$editorUpload?e("NcActionButton",{attrs:{"close-after-click":"",disabled:t.isUploadingAttachments,"data-text-action-entry":"".concat(t.actionEntry.key,"-upload")},on:{click:t.$callChooseLocalAttachment},scopedSlots:t._u([{key:"icon",fn:function(){return[e("Upload")]},proxy:!0}],null,!1,933298848)},[t._v("\n\t\t"+t._s(t.t("text","Upload from computer"))+"\n\t")]):t._e(),t._v(" "),t.$isPublic?t._e():e("NcActionButton",{attrs:{"close-after-click":"",disabled:t.isUploadingAttachments,"data-text-action-entry":"".concat(t.actionEntry.key,"-insert")},on:{click:t.$callAttachmentPrompt},scopedSlots:t._u([{key:"icon",fn:function(){return[e("Folder")]},proxy:!0}],null,!1,2750733237)},[t._v("\n\t\t"+t._s(t.t("text","Insert from Files"))+"\n\t")])],1)}),[],!1,null,null,null).exports;var g=i(86680),m=i(3255),b=i(73845),f=i(27415);const C={name:"ActionInsertLink",components:{NcActions:a.O3,NcActionButton:a.Js,NcActionInput:a.Iw,Document:r.BB,Loading:r.gb,LinkOff:r.pR,Web:r.ph,Shape:r.bn},extends:o.b,mixins:[h.a_,s.q],data:()=>({href:null,isInputMode:!1,startPath:null}),computed:{activeClass(){return this.state.active?"is-active":""},relativePath(){var t,e;return null!==(t=null===(e=this.$file)||void 0===e?void 0:e.relativePath)&&void 0!==t?t:"/"}},methods:{linkFile(){null===this.startPath&&(this.startPath=this.relativePath.split("/").slice(0,-1).join("/"));new m.GB(t("text","Select file or folder to link to"),!1,[],!0,m.K9.Choose,!0,this.startPath).pick().then((t=>{OC.Files.getClient().getFileInfo(t).then(((t,e)=>{const n=(0,f.Lz)(this.relativePath,"".concat(e.path,"/").concat(e.name)).split("/").map(encodeURIComponent).join("/")+("dir"===e.type?"/":""),i="".concat(n,"?fileId=").concat(e.id);this.setLink(i,e.name),this.startPath=e.path+("dir"===e.type?"/".concat(e.name,"/"):"")}))}))},linkWebsite(t){if("submit"===(null==t?void 0:t.type)){const e=[...t.target.elements].filter((t=>"text"===(null==t?void 0:t.type)))[0].value;return this.$refs.menu.closeMenu(),this.isInputMode=!1,this.href=null,this.setLink(e,e)}if((0,b.zh)(this.$editor.state,"link")){const t=(0,b.Jo)(this.$editor.state,"link");this.href=t.href}this.isInputMode=!0},setLink(t,e){var n;t&&![/^[a-zA-Z]+:/,/^\//,/\?fileId=/,/^\.\.?\//,/^[^.]*[/$]/,/^#/].find((e=>t.match(e)))&&(t="https://"+t);const i=t.replaceAll(" ","%20"),r=this.$editor.chain();null!==(n=this.$editor.view.state)&&void 0!==n&&n.selection.empty?r.insertContent({type:"paragraph",content:[{type:"text",marks:[{type:"link",attrs:{href:i}}],text:e}]}):r.setLink({href:i}),r.focus().run()},removeLink(){this.$editor.chain().unsetLink().focus().run()},linkPicker(){(0,g.getLinkWithPicker)(null,!0).then((t=>{this.$editor.chain().focus().insertContent(t+" ").run()})).catch((t=>{console.error("Smart picker promise rejected",t)}))}}};var v=i(93379),_=i.n(v),y=i(7795),x=i.n(y),w=i(90569),k=i.n(w),E=i(3565),j=i.n(E),M=i(19216),S=i.n(M),N=i(44589),B=i.n(N),I=i(43731),T={};T.styleTagTransform=B(),T.setAttributes=j(),T.insert=k().bind(null,"head"),T.domAPI=x(),T.insertStyleElement=S();_()(I.Z,T);I.Z&&I.Z.locals&&I.Z.locals;const D=(0,c.Z)(C,(function(){var t=this,e=t._self._c;return e("NcActions",{ref:"menu",staticClass:"entry-action entry-action__insert-link",class:t.activeClass,attrs:{"aria-haspopup":"","aria-label":t.actionEntry.label,container:t.menuIDSelector,"data-text-action-entry":t.actionEntry.key,title:t.actionEntry.label},scopedSlots:t._u([{key:"icon",fn:function(){return[e(t.icon,{tag:"component",attrs:{title:t.actionEntry.label,"aria-label":t.actionEntry.label,"aria-haspopup":""}})]},proxy:!0}])},[t._v(" "),t.state.active?e("NcActionButton",{attrs:{"close-after-click":"","data-text-action-entry":"".concat(t.actionEntry.key,"-remove")},on:{click:t.removeLink},scopedSlots:t._u([{key:"icon",fn:function(){return[e("LinkOff")]},proxy:!0}],null,!1,3589828876)},[t._v("\n\t\t"+t._s(t.t("text","Remove link"))+"\n\t")]):t._e(),t._v(" "),e("NcActionButton",{attrs:{"close-after-click":"","data-text-action-entry":"".concat(t.actionEntry.key,"-file")},on:{click:t.linkFile},scopedSlots:t._u([{key:"icon",fn:function(){return[e("Document")]},proxy:!0}])},[t._v("\n\t\t"+t._s(t.t("text","Link to file or folder"))+"\n\t")]),t._v(" "),t.isInputMode?e("NcActionInput",{attrs:{type:"text",value:t.href,"data-text-action-entry":"".concat(t.actionEntry.key,"-input")},on:{submit:t.linkWebsite},scopedSlots:t._u([{key:"icon",fn:function(){return[e("Web")]},proxy:!0}],null,!1,1844845715)},[t._v("\n\t\t"+t._s(t.t("text","Link to website"))+"\n\t")]):e("NcActionButton",{attrs:{"data-text-action-entry":"".concat(t.actionEntry.key,"-website")},on:{click:t.linkWebsite},scopedSlots:t._u([{key:"icon",fn:function(){return[e("Web")]},proxy:!0}])},[t._v("\n\t\t"+t._s(t.state.active?t.t("text","Update link"):t.t("text","Link to website"))+"\n\t")]),t._v(" "),e("NcActionButton",{attrs:{"data-text-action-entry":"".concat(t.actionEntry.key,"-picker")},on:{click:t.linkPicker},scopedSlots:t._u([{key:"icon",fn:function(){return[e("Shape")]},proxy:!0}])},[t._v("\n\t\t"+t._s(t.t("text","Open the Smart Picker"))+"\n\t")])],1)}),[],!1,null,"05e4c2f2",null).exports;var P=i(59400);const O=[{key:"outline",forceLabel:!0,icon:r.Cj,click:t=>{let{$outlineActions:e}=t;return e.toggle()},label:e=>{let{$outlineState:n}=e;return n.visible?t("text","Hide outline"):t("text","Show outline")}}],R=[{key:"undo",label:t("text","Undo"),keyChar:"z",keyModifiers:[P.v.Mod],icon:r.WP,action:t=>t.undo(),priority:6},{key:"redo",label:t("text","Redo"),keyChar:"y",keyModifiers:[P.v.Mod],icon:r.Jw,action:t=>t.redo(),priority:12},{key:"bold",label:t("text","Bold"),keyChar:"b",keyModifiers:[P.v.Mod],icon:r.VK,isActive:"strong",action:t=>t.toggleBold(),priority:7},{key:"italic",label:t("text","Italic"),keyChar:"i",keyModifiers:[P.v.Mod],icon:r.mV,isActive:"em",action:t=>t.toggleItalic(),priority:8},{key:"underline",label:t("text","Underline"),keyChar:"u",keyModifiers:[P.v.Mod],icon:r.Bz,isActive:"underline",action:t=>t.toggleUnderline(),priority:15},{key:"strikethrough",label:t("text","Strikethrough"),keyChar:"s",keyModifiers:[P.v.Mod,P.v.Shift],icon:r.Lo,isActive:"strike",action:t=>t.toggleStrike(),priority:16},{key:"headings",label:t("text","Headings"),keyChar:"1…6",keyModifiers:[P.v.Mod,P.v.Shift],icon:r.Lz,isActive:"heading",children:[{key:"headings-h1",label:t("text","Heading 1"),icon:r.Lz,isActive:["heading",{level:1}],action:t=>t.toggleHeading({level:1})},{key:"headings-h2",label:t("text","Heading 2"),icon:r.DB,isActive:["heading",{level:2}],action:t=>t.toggleHeading({level:2})},{key:"headings-h3",label:t("text","Heading 3"),icon:r.XD,isActive:["heading",{level:3}],action:t=>t.toggleHeading({level:3})},{key:"headings-h4",label:t("text","Heading 4"),isActive:["heading",{level:4}],icon:r.fy,action:t=>t.toggleHeading({level:4})},{key:"headings-h5",label:t("text","Heading 5"),isActive:["heading",{level:5}],icon:r.Ze,action:t=>t.toggleHeading({level:5})},{key:"headings-h6",label:t("text","Heading 6"),isActive:["heading",{level:6}],icon:r.J4,action:t=>t.toggleHeading({level:6})},{key:"outline",icon:r.Cj,click:t=>{let{$outlineActions:e}=t;return e.toggle()},visible:t=>{let{$outlineState:e}=t;return e.enable},label:e=>{let{$outlineState:n}=e;return n.visible?t("text","Hide outline"):t("text","Show outline")}}],priority:1},{key:"unordered-list",label:t("text","Unordered list"),keyChar:"8",keyModifiers:[P.v.Mod,P.v.Shift],isActive:"bulletList",icon:r.Cj,action:t=>t.toggleBulletList(),priority:9},{key:"ordered-list",label:t("text","Ordered list"),keyChar:"7",keyModifiers:[P.v.Mod,P.v.Shift],isActive:"orderedList",icon:r.mH,action:t=>t.toggleOrderedList(),priority:10},{key:"task-list",label:t("text","To-Do list"),keyChar:"9",keyModifiers:[P.v.Mod,P.v.Shift],isActive:"taskList",icon:r.Fv,action:t=>t.toggleTaskList(),priority:11},{key:"insert-link",label:t("text","Insert link"),isActive:"link",icon:r.xP,component:D,priority:2},{key:"blockquote",label:t("text","Blockquote"),keyChar:"b",keyModifiers:[P.v.Mod,P.v.Shift],isActive:"blockquote",icon:r.UX,action:t=>t.toggleBlockquote(),priority:13},{key:"callouts",label:t("text","Callouts"),visible:!1,icon:r.kI,isActive:"callout",children:[{key:"callout-info",label:t("text","Info"),isActive:["callout",{type:"info"}],icon:r.kI,action:t=>t.toggleCallout({type:"info"})},{key:"callout-success",label:t("text","Success"),isActive:["callout",{type:"success"}],icon:r.Ho,action:t=>t.toggleCallout({type:"success"})},{key:"callout-warn",label:t("text","Warning"),isActive:["callout",{type:"warn"}],icon:r.uU,action:t=>t.toggleCallout({type:"warn"})},{key:"callout-error",label:t("text","Danger"),isActive:["callout",{type:"error"}],icon:r.b0,action:t=>t.toggleCallout({type:"error"})}],priority:3},{key:"code-block",label:t("text","Code block"),keyChar:"c",keyModifiers:[P.v.Mod,P.v.Alt],isActive:"codeBlock",icon:r.Nk,action:t=>t.toggleCodeBlock(),priority:14},{key:"table",label:t("text","Table"),isActive:"table",icon:r.iA,action:t=>t.insertTable(),priority:17},{key:"emoji-picker",label:t("text","Insert emoji"),icon:r.tk,component:d,action:function(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return t.emoji(e)},priority:5},{key:"insert-attachment",label:t("text","Insert attachment"),icon:r.rU,component:p,priority:4}]},59400:(e,n,i)=>{"use strict";i.d(n,{K:()=>a,v:()=>o});const r=navigator.userAgent.includes("Mac"),o={Mod:r?"Meta":"Control",Alt:"Alt",Control:"Control",Shift:"Shift"},a={[o.Mod]:r?t("text","Command"):t("text","Control"),[o.Control]:t("text","Ctrl"),[o.Alt]:t("text",r?"Option":"Alt"),[o.Shift]:t("text","Shift")}},72076:(t,e,n)=>{"use strict";n.d(e,{FZ:()=>o,RR:()=>a,vK:()=>l,wr:()=>c});var i=n(59400);const r=(t,e)=>({"is-active":e,["action-menu-".concat(t.key)]:!0}),o=t=>{let{keyChar:e,keyModifiers:n=[]}=t;return n.map((t=>i.v[t])).concat(e).join("+")},a=(t,e)=>{let{keyChar:n,keyModifiers:r}=e;return!t&&n?"(".concat(function(t){return(arguments.length>1&&void 0!==arguments[1]?arguments[1]:[]).map((t=>i.K[t])).concat(t.toUpperCase()).join("+")}(n,r),")"):""},s=(t,e)=>t.action&&!t.action(e.can()),l=(t,e)=>{let{isActive:n}=t;if(!n)return!1;const i=Array.isArray(n)?n:[n];return e.isActive(...i)},c=(t,e)=>{const n=l(t,e);return{disabled:s(t,e),class:r(t,n),active:n}}},28374:(t,e,n)=>{"use strict";n.d(e,{Z:()=>o});var i=n(13861),r=n(79835);const o=t=>{let{listComponent:e,items:n=(()=>{}),command:o=(t=>{let{editor:e,range:n,props:i}=t})}=t;return{items:n,command:o,render:()=>{let t,n;return{onStart:o=>{t=new r.aA(e,{parent:void 0,propsData:o}),o.clientRect&&(n=(0,i.ZP)("body",{getReferenceClientRect:o.clientRect,appendTo:()=>document.body,content:t.element,showOnCreate:!0,interactive:!0,trigger:"manual",placement:"bottom-start"}),t.ref.$on("select",(()=>{n.length>0&&n[0].hide()})))},onUpdate(e){t.updateProps(e),e.clientRect&&n&&n[0].setProps({getReferenceClientRect:e.clientRect})},onKeyDown(e){var i,r;if(n)return"Escape"===e.event.key?(n[0].hide(),n[0].destroy(),t.destroy(),n=null,!0):null===(i=t.ref)||void 0===i||null===(r=i.onKeyDown)||void 0===r?void 0:r.call(i,e)},onExit(){n&&(n[0].destroy(),t.destroy())}}}}}},32318:(t,e,n)=>{"use strict";n.d(e,{Ah:()=>zt,BB:()=>ut,BF:()=>pt,Bz:()=>Nt,Cj:()=>kt,DB:()=>Ct,Ee:()=>It,F5:()=>Ft,Fq:()=>qt,Fv:()=>Et,HG:()=>At,Ho:()=>Rt,IY:()=>Ut,J4:()=>xt,Jr:()=>lt,Jw:()=>Lt,L9:()=>ot,Lo:()=>St,Lz:()=>ft,Nk:()=>ct,Pn:()=>it,QK:()=>rt,UX:()=>Mt,VK:()=>bt,WP:()=>Wt,WW:()=>Bt,XD:()=>vt,Ze:()=>yt,_2:()=>Gt,b0:()=>ht,bn:()=>$t,fy:()=>_t,gb:()=>nt,gq:()=>Kt,gr:()=>at,gt:()=>mt,iA:()=>Zt,iY:()=>dt,kI:()=>Dt,mH:()=>jt,mV:()=>wt,pR:()=>Ot,ph:()=>Yt,pn:()=>Ht,rU:()=>Tt,tk:()=>gt,uU:()=>Vt,x8:()=>st,xP:()=>Pt});var i=n(96963),r=n(82675),o=n(80419),a=n(75441),s=n(45795),l=n(75816),c=n(57612),d=n(13881),h=n(89115),A=n(37319),u=n(34829),p=n(88723),g=n(10864),m=n(39027),b=n(4738),f=n(57637),C=n(13237),v=n(52986),_=n(17238),y=n(11465),x=n(94669),w=n(34415),k=n(9829),E=n(65875),j=n(35357),M=n(92801),S=n(42413),N=n(88505),B=n(39227),I=n(5039),T=n(93603),D=n(37838),P=n(19695),O=n(72468),R=n(64836),L=n(65745),$=n(79542),Z=n(91265),z=n(96104),U=n(21666),F=n(61562),H=n(52880),G=n(49759),q=n(39850),W=n(9571),K=n(69699),V=n(33581),Y=n(4650),Q=n(75762),X=n(8421),J=n(97859),tt=n(54503);const et=t=>({functional:!0,render(e,n){let{data:i,props:r}=n;return e(t,{data:i,key:i.key,staticClass:i.staticClass,props:{size:20,...r}})}}),nt={functional:!0,render(t,e){let{data:n,props:i}=e;return t(L.Z,{data:n,staticClass:"animation-rotate",props:{size:20,...i}})}},it=et(i.Z),rt=et(g.Z),ot=et(m.Z),at=et(b.Z),st=et(r.default),lt=et(o.default),ct=et(s.Z),dt=et(a.Z),ht=et(l.default),At=et(c.Z),ut=et(d.Z),pt=et(h.default),gt=et(A.Z),mt=et(u.default),bt=et(p.Z),ft=et(f.Z),Ct=et(C.Z),vt=et(v.Z),_t=et(_.Z),yt=et(y.Z),xt=et(x.Z),wt=et(w.Z),kt=et(k.Z),Et=et(E.Z),jt=et(j.Z),Mt=et(M.Z),St=et(S.Z),Nt=et(N.Z),Bt=et(B.default),It=et(I.Z),Tt=et(T.Z),Dt=et(D.Z),Pt=et(P.Z),Ot=et(O.Z),Rt=(et(R.Z),et($.Z),et(Z.default)),Lt=et(z.Z),$t=et(U.Z),Zt=et(F.Z),zt=et(H.Z),Ut=et(G.Z),Ft=et(q.Z),Ht=et(W.Z),Gt=et(K.Z),qt=(et(V.Z),et(tt.Z)),Wt=et(Y.Z),Kt=et(Q.Z),Vt=et(X.default),Yt=et(J.default)},32892:(t,e,n)=>{"use strict";n.d(e,{g:()=>d,Z:()=>u});var i=n(73845),r=n(2376),o=n(55963),a=n(87823),s=n(40187);function l(t){const e=(new DOMParser).parseFromString(t,"text/html");return function(t,e){const n=t.createNodeIterator(t.body,NodeFilter.SHOW_TEXT);let i=n.nextNode();for(;i;)e(i),i=n.nextNode()}(e,(t=>{(function(t){const e=["normal","nowrap"];let n=t.parentElement;for(;n;){const t=getComputedStyle(n),i=null==t?void 0:t.getPropertyValue("white-space");if(i)return e.includes(i);if("PRE"===n.tagName)return!1;n=n.parentElement}return!0})(t)&&(t.textContent=t.textContent.replaceAll("\n"," "))})),e.body.innerHTML}const c=i.hj.create({name:"markdown",extendMarkSchema(t){const e={name:t.name,options:t.options,storage:t.storage};return{toMarkdown:(0,i.Nl)(t,"toMarkdown",e)}},extendNodeSchema(t){const e={name:t.name,options:t.options,storage:t.storage};return{toMarkdown:(0,i.Nl)(t,"toMarkdown",e)}},addProseMirrorPlugins(){let t=!1;return[new r.Sy({key:new r.H$("pasteEventHandler"),props:{handleDOMEvents:{mouseup:(e,n)=>(t=n.shiftKey,!1)},handleKeyDown:(e,n)=>(t=n.shiftKey,!1),clipboardTextParser(e,n,i,r){const o=a.aw.fromSchema(r.state.schema),l=document.cloneNode(!1),c=l.createElement("div");if(t)for(const t of e.split("\n\n")){const e=l.createElement("p");e.innerText=t,c.append(e)}else c.innerHTML=s.Z.render(e);return o.parseSlice(c,{preserveWhitespace:!0,context:n})},transformPastedHTML:l}})]}}),d=t=>{let{nodes:e,marks:n}=t;const i=A(o.Dm.nodes),r=A(o.Dm.marks);return{serializer:new o.nZ({...i,...h(e)},{...r,...h(n)}),serialize(t,e){return this.serializer.serialize(t,{...e,tightLists:!0})}}},h=t=>Object.entries(t).map((t=>{let[e,n]=t;return[e,n.spec.toMarkdown]})).filter((t=>{let[,e]=t;return e})).reduce(((t,e)=>{let[n,i]=e;return{...t,[n]:i}}),{}),A=t=>{const e=t=>t.replace(/_(\w)/g,((t,e)=>e.toUpperCase()));return Object.fromEntries(Object.entries(t).map((t=>{let[n,i]=t;return[e(n),i]})))},u=c},89461:(e,n,i)=>{"use strict";function r(t){setTimeout((()=>{const e=document.getElementById("collaboration-cursor__label__".concat(t));e&&(e.classList.add("collaboration-cursor__label__active"),setTimeout((()=>{null==e||e.classList.remove("collaboration-cursor__label__active")}),50))}),50)}function o(){return Math.floor(Date.now()/1e3)}i.d(n,{lN:()=>a,N8:()=>A,pf:()=>oe,f3:()=>v,Ho:()=>dn});const a=i(14539).l.extend({addOptions:()=>({provider:null,user:{name:null,clientId:null,color:null,lastUpdate:o()},render:t=>{const e=document.createElement("span");e.classList.add("collaboration-cursor__caret"),e.setAttribute("style","border-color: ".concat(t.color));const n=document.createElement("div");return n.classList.add("collaboration-cursor__label"),n.id="collaboration-cursor__label__".concat(t.clientId),n.setAttribute("style","background-color: ".concat(t.color)),n.insertBefore(document.createTextNode(t.name),null),e.insertBefore(n,null),e}}),onCreate(){this.options.provider.awareness.on("change",((t,e)=>{let{added:n,removed:i,updated:o}=t;if("local"!==e)for(const t of[...n,...o])t!==this.options.user.clientId&&r(t)}))},onTransaction(t){var e;let{transaction:n}=t;const{updated:i,meta:r}=n;!i||null!==(e=r.addToHistory)&&void 0!==e&&!e||r.pointer||(this.options.user.lastUpdate=o(),this.options.provider.awareness.setLocalStateField("user",this.options.user))}});var s=i(73845),l=i(2376),c=i(16722);const d=new l.H$("emoji"),h=s.NB.create({name:"emoji",addOptions:()=>({HTMLAttributes:{},suggestion:{char:":",allowedPrefixes:[" "],pluginKey:d}}),content:"text*",addCommands:()=>({emoji:t=>e=>{let{commands:n}=e;return n.insertContent(t.native+" ")}}),addProseMirrorPlugins(){return[(0,c.ZP)({editor:this.editor,...this.options.suggestion})]}}),A=s.hj.create({name:"customkeymap",addKeyboardShortcuts(){return this.options},addProseMirrorPlugins:()=>[new l.Sy({props:{handleKeyDown(t,e){const n=e.key||e.keyCode;return!e.ctrlKey&&!e.metaKey||e.shiftKey||"f"!==n&&70!==n?"Delete"===e.key&&!0===e.ctrlKey?(e.stopPropagation(),window.dispatchEvent(e),!0):void 0:(e.stopPropagation(),window.dispatchEvent(e),!0)}}})]});var u=i(84348);class p{constructor(t,e,n){this.from=t,this.to=e,this.author=n}}function g(t,e,n,i){if(e>=n)return;let r,o=0;for(;o=e)break}else if(r.to>e){if(r.fromn?t.splice(o++,0,i):t[o++]=i}break}for(;r=t[o];)if(r.author===i){if(r.from>n)break;e=Math.min(e,r.from),n=Math.max(n,r.to),t.splice(o,1)}else{if(r.from>=n)break;if(r.to>n){t[o]=new p(n,r.to,r.author);break}t.splice(o,1)}t.splice(o,0,new p(e,n,i))}class m{constructor(t){this.blameMap=t}applyTransform(t){var e;const n=null!==(e=t.getMeta("clientID"))&&void 0!==e?e:t.steps.map((t=>"self")),i=function(t,e,n){const i=[],r=e.mapping;for(let e=0;e{g(i,o.map(a,1),o.map(s,-1),n[t])}))}return i}(this.blameMap,t,n);return new m(i)}}s.hj.create({name:"users",addOptions:()=>({clientID:0,color:t=>"#"+Math.floor(Math.abs(16777215*Math.sin(t))%16777215).toString(16)+"aa",name:t=>"Unknown user "+t}),addProseMirrorPlugins(){let t=null;return[new l.Sy({clientID:this.options.clientID,color:this.options.color,name:this.options.name,view:e=>(t=e,{}),state:{init:(t,e)=>({tracked:new m([new p(0,e.doc.content.size,null)],[],[],[]),deco:u.EH.empty}),apply(e,n,i,r){let{tracked:o,decos:a}=n,s=this.getState(i).tracked;return e.docChanged&&(e.getMeta("clientID")||e.setMeta("clientID",e.steps.map((t=>this.spec.clientID))),t.composing||(o=o.applyTransform(e),s=o)),a=s.blameMap.map((t=>{const e=t.author;return u.p.inline(t.from,t.to,{class:"author-annotation",style:"background-color: "+this.spec.color(e)+"66;",title:this.spec.name(e)})})).filter((t=>null!==t)),{tracked:o,deco:u.EH.create(r.doc,a)}}},props:{decorations(t){return this.getState(t).deco}}})]}});var b=i(32892),f=i(52701);const C=s.NB.create({name:"doc",content:"block",addKeyboardShortcuts(){return{Tab:()=>this.editor.commands.insertContent("\t")}}}),v=s.hj.create({name:"PlainText",addExtensions:()=>[C,f.Z]});var _=i(64233),y=i(99734);const x=i(30561).ZP.extend({parseHTML(){return this.parent().map((t=>Object.assign(t,{preserveWhitespace:!0})))},addAttributes(){var t;return{...null===(t=this.parent)||void 0===t?void 0:t.call(this),bullet:{default:"-",rendered:!1,isRequired:!0,parseHTML:t=>t.getAttribute("data-bullet")}}},addInputRules(){return[(t=/^\s*([-+*])\s([^\s[]+)$/,e=this.type,new s.VK({find:t,handler:i=>{let{state:r,range:o,match:a}=i;(0,s.S0)({find:t,type:e,getAttributes:n}).handler({state:r,range:o,match:a}),a.length>=3&&r.tr.insertText(a[2])}}))];var t,e,n}});var w=i(79835),k=i(30744),E=i(32318);const j={info:E.kI,success:E.Ho,error:E.b0,warn:E.uU},M={name:"Callout",components:{NodeViewWrapper:w.T5,NodeViewContent:w.ms},props:{node:{type:Object,required:!0}},computed:{icon(){return j[this.type]||E.kI},type(){var t;return(null===(t=this.node)||void 0===t||null===(t=t.attrs)||void 0===t?void 0:t.type)||"info"}}};var S=i(93379),N=i.n(S),B=i(7795),I=i.n(B),T=i(90569),D=i.n(T),P=i(3565),O=i.n(P),R=i(19216),L=i.n(R),$=i(44589),Z=i.n($),z=i(16331),U={};U.styleTagTransform=Z(),U.setAttributes=O(),U.insert=D().bind(null,"head"),U.domAPI=I(),U.insertStyleElement=L();N()(z.Z,U);z.Z&&z.Z.locals&&z.Z.locals;var F=i(51900);const H=(0,F.Z)(M,(function(){var t=this,e=t._self._c;return e("NodeViewWrapper",{staticClass:"callout",class:"callout--".concat(t.type),attrs:{"data-text-el":"callout",as:"div"}},[e(t.icon,{tag:"component",staticClass:"callout__icon"}),t._v(" "),e("NodeViewContent",{staticClass:"callout__content"})],1)}),[],!1,null,"2734884a",null).exports,G=s.NB.create({name:"callout",content:"paragraph+",group:"block",defining:!0,addOptions:()=>({types:k.F,HTMLAttributes:{class:"callout"}}),addAttributes:()=>({type:{default:"info",rendered:!1,parseHTML:t=>t.getAttribute("data-callout")||k.F.find((e=>t.classList.contains(e)))||t.classList.contains("warning")&&"warn",renderHTML:t=>({"data-callout":t.type,class:"callout-".concat(t.type)})}}),parseHTML:()=>[{tag:"div.callout"},{tag:"p.callout",priority:1001}],renderHTML(t){let{node:e,HTMLAttributes:n}=t;const{class:i}=this.options.HTMLAttributes,r={...this.options.HTMLAttributes,"data-callout":e.attrs.type,class:"".concat(i," ").concat(i,"-").concat(e.attrs.type)};return["div",(0,s.P1)(r,n),0]},toMarkdown:(t,e)=>{t.write("::: "+(e.attrs.type||"info")+"\n"),t.renderContent(e),t.ensureNewLine(),t.write(":::"),t.closeBlock(e)},addNodeView:()=>(0,w.uf)(H),addCommands(){return{setCallout:t=>e=>{let{commands:n}=e;return n.wrapIn(this.name,t)},toggleCallout:t=>e=>{let{commands:n,state:i}=e;return(0,s.Ig)(i,this.name)?(0,s.Ig)(i,this.name,t)?n.unsetCallout():n.updateAttributes(this.name,t):n.setCallout(t)},unsetCallout:()=>t=>{let{commands:e}=t;return e.lift(this.name)}}}});var q=i(88776),W=i(57355),K=i(22608),V=i(55963);const Y=K.Z.extend({parseHTML:()=>[{tag:"pre",preserveWhitespace:"full",getContent:(t,e)=>{const n=t.textContent.replace(/\n$/,""),i=n?[e.text(n)]:[];return e.nodes.codeBlock.create(null,i)}}],toMarkdown:(t,e,n,i)=>(e.attrs.params=e.attrs.language,V.Dm.nodes.code_block(t,e,n,i))});var Q=i(20336),X=i(79829),J=i(15961),tt=i(28374),et=i(31352);const nt={name:"EmojiList",props:{items:{type:Array,required:!0},command:{type:Function,required:!0}},data:()=>({selectedIndex:0}),computed:{hasResults(){return this.items.length>0},itemHeight(){return this.$el.scrollHeight/this.items.length},itemInsideScrollView(){return this.selectedIndex*this.itemHeight>=this.$el.scrollTop&&(this.selectedIndex+1)*this.itemHeight<=this.$el.scrollTop+this.$el.clientHeight}},watch:{items(){this.selectedIndex=0,this.$el.scrollTop=0}},methods:{t:et.Iu,onKeyDown(t){let{event:e}=t;return!(e.ctrlKey||e.shiftKey||e.altKey||e.metaKey)&&("ArrowUp"===e.key?(this.selectedIndex=(this.selectedIndex+this.items.length-1)%this.items.length,this.itemInsideScrollView||(this.$el.scrollTop=this.selectedIndex*this.itemHeight),!0):"ArrowDown"===e.key?(this.selectedIndex=(this.selectedIndex+1)%this.items.length,this.itemInsideScrollView||(this.$el.scrollTop=(this.selectedIndex+1)*this.itemHeight-this.$el.clientHeight),!0):("Enter"===e.key||"Tab"===e.key)&&(this.selectItem(this.selectedIndex),!0))},selectItem(t){const e=this.items[t];e&&(this.command(e),(0,J.Ry)(e))}}};var it=i(72451),rt={};rt.styleTagTransform=Z(),rt.setAttributes=O(),rt.insert=D().bind(null,"head"),rt.domAPI=I(),rt.insertStyleElement=L();N()(it.Z,rt);it.Z&&it.Z.locals&&it.Z.locals;const ot=(0,F.Z)(nt,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"emoji-list"},[t.hasResults?t._l(t.items,(function(n,i){return e("div",{key:i,staticClass:"emoji-list__item",class:{"is-selected":i===t.selectedIndex},on:{click:function(e){return t.selectItem(i)}}},[e("span",{staticClass:"emoji-list__item__emoji"},[t._v("\n\t\t\t\t"+t._s(n.native)+"\n\t\t\t")]),t._v("\n\t\t\t:"+t._s(n.short_name)+"\n\t\t")])})):e("div",{staticClass:"emoji-list__item is-empty"},[t._v("\n\t\t"+t._s(t.t("text","No emoji found"))+"\n\t")])],2)}),[],!1,null,"75a9e928",null).exports;const at=i(83416).ZP.extend({name:"frontMatter",draggable:!1,renderHTML(e){let{node:n,HTMLAttributes:i}=e;return this.parent({node:n,HTMLAttributes:(0,s.P1)(i,{"data-title":t("text","Front matter"),class:"frontmatter"})})},parseHTML:()=>[{tag:"pre#frontmatter",preserveWhitespace:"full",priority:9001,attrs:{language:"yaml"}}],toMarkdown:(t,e)=>{if(!t.out.match(/^\s*/))throw Error("FrontMatter must be the first node of the document!");const n=e.textContent,i=n.match(/-{3,}/gm),r=i?i.sort().slice(-1)[0]+"-":"---";t.write(""),t.out="",t.write("".concat(r,"\n")),t.text(n,!1),t.ensureNewLine(),t.write(r),t.closeBlock(e)},addInputRules(){return[{find:/^---$/g,handler:t=>{let{state:e,range:n,chain:i}=t;return 1===n.from&&(e.doc.resolve(1).parent.type.name!==this.name&&(i().deleteRange(n).insertContentAt(0,{type:this.name}),!0))}}]},addCommands:()=>({}),addPasteRules:()=>[],addProseMirrorPlugins:()=>[]});var st=i(26022),lt=i(77958),ct=i(86680),dt=i(20296),ht=i.n(dt);const At={name:"ParagraphView",components:{NodeViewWrapper:w.T5,NodeViewContent:w.ms,NcReferenceList:ct.NcReferenceList},props:w.Un,data:()=>({text:null,isLoggedIn:(0,lt.ts)()}),watch:{node:{handler(t){null!=t&&t.textContent?this.debouncedUpdateText(t):this.text=""}}},beforeCreate(){this.debouncedUpdateText=ht()((t=>{this.text=this.getTextReference(this.node)}),500)},created(){this.text=this.getTextReference(this.node)},beforeUnmount(){var t;null===(t=this.debouncedUpdateText)||void 0===t||t.cancel()},methods:{getTextReference(t){var e,n;if(null==t||!t.childCount)return null;let i;for(let e=0;e"link"===t.type.name)),o=null==r||null===(n=r.attrs)||void 0===n?void 0:n.href;return new RegExp(/(^)(https?:\/\/)((?:[-A-Z0-9+_]+\.)+[-A-Z]+(?:\/[-A-Z0-9+&@#%?=~_|!:,.;()]*)*)($)/gi).test(o)?o:null}}};var ut=i(99119),pt={};pt.styleTagTransform=Z(),pt.setAttributes=O(),pt.insert=D().bind(null,"head"),pt.domAPI=I(),pt.insertStyleElement=L();N()(ut.Z,pt);ut.Z&&ut.Z.locals&&ut.Z.locals;const gt=(0,F.Z)(At,(function(){var t=this,e=t._self._c;return e("NodeViewWrapper",{staticClass:"vue-component",attrs:{as:"p"}},[e("NodeViewContent",{staticClass:"paragraph-content"}),t._v(" "),t.isLoggedIn&&t.text?e("NcReferenceList",{attrs:{text:t.text,limit:1,contenteditable:"false"}}):t._e()],1)}),[],!1,null,"b95f24a4",null).exports,mt=st.Z.extend({addNodeView:()=>(0,w.uf)(gt),parseHTML(){return this.parent().map((t=>Object.assign(t,{preserveWhitespace:"full"})))},addKeyboardShortcuts(){return{Backspace:()=>{const t=this.editor.state.selection;if(0!==t.$from.parentOffset)return!1;const e=t.$from.parent,n=t.$from.index(t.$from.depth-1);if(0===n)return!1;const i=t.$from.node(t.$from.depth-1).child(n-1);return e.type.name===this.name&&i.type.name===this.name&&this.editor.chain().joinBackward().setHardBreak().run()}}}});const bt=i(35525).Z.extend({addAttributes:()=>({syntax:{default:" ",rendered:!1,keepOnSplit:!0,parseHTML:t=>t.getAttribute("data-syntax")||" "}}),addCommands(){return{...null==this?void 0:this.parent(),setHardBreak:()=>t=>{for(let e=t.state.selection.$from.depth;e>=0;e--)if("heading"===t.state.selection.$from.node(e).type.name)return!1;return this.parent().setHardBreak()(t)}}},toMarkdown(t,e,n,i){for(let o=i+1;o");return}}});var ft=i(7490),Ct=i(25030),vt=i(63811),_t=i.n(vt),yt=i(28721);const xt=t=>{const e=new Map,n=[],i=t.state.tr;var r;t.state.doc.descendants(((t,r)=>{if("heading"===t.type.name){var o;const a=t.textContent,s=(t=>{const n=_t()(t);if(e.has(n)){const t=e.get(n);return e.set(n,t+1),"h-".concat(n,"--").concat(t)}return e.set(n,1),"h-"+n})(a),l=null!==(o=t.attrs.uuid)&&void 0!==o?o:(0,yt.Z)();if(t.attrs.id!==s||!t.attrs.uuid){const e={...t.attrs,uuid:l,id:s};i.setNodeMarkup(r,void 0,e)}n.push(Object.freeze({level:t.attrs.level,position:r,text:a,id:s,uuid:l}))}})),i.setMeta("addToHistory",!1),i.setMeta("preventUpdate",!0),t.view.dispatch(i),r=n,Ct.Z.dispatch("text/setHeadings",r)};var wt=i(20144),kt=i(31728);const Et=wt.default.extend({name:"HeadingView",components:{NodeViewWrapper:w.T5,NodeViewContent:w.ms},mixins:[kt.Cy],props:{node:{type:Object,required:!0},extension:{type:Object,required:!0}},data:()=>({content:null}),computed:{href(){return"#".concat(this.node.attrs.id)},domElement(){const t=this.extension.options.levels.includes(this.node.attrs.level)?this.node.attrs.level:this.extension.options.levels[0];return"h".concat(t)},linkSymbol(){return this.extension.options.linkSymbol},t:()=>window.t},methods:{click(){this.$refs.container.$el.scrollIntoView(),window.location.hash=this.href}}});var jt=i(86698),Mt={};Mt.styleTagTransform=Z(),Mt.setAttributes=O(),Mt.insert=D().bind(null,"head"),Mt.domAPI=I(),Mt.insertStyleElement=L();N()(jt.Z,Mt);jt.Z&&jt.Z.locals&&jt.Z.locals;const St=(0,F.Z)(Et,(function(){var t=this,e=t._self._c;t._self._setupProxy;return e("NodeViewWrapper",{ref:"container",attrs:{id:t.node.attrs.id,as:t.domElement}},[e("a",{staticClass:"heading-anchor",attrs:{"aria-hidden":"true",href:t.href,title:t.t("text","Link to this section"),contenteditable:!1},on:{click:function(e){return e.stopPropagation(),t.click.apply(null,arguments)}}},[t._v(t._s(t.linkSymbol))]),t._v(" "),e("NodeViewContent",{attrs:{as:"span"}})],1)}),[],!1,null,null,null).exports,Nt=ft.Z.extend({addAttributes(){return{...this.parent(),id:{default:void 0,rendered:!0},uuid:{default:void 0,rendered:!1}}},addOptions(){var t;return{...null===(t=this.parent)||void 0===t?void 0:t.call(this),linkSymbol:"#"}},addKeyboardShortcuts(){return this.options.levels.reduce(((t,e)=>({...t,["Mod-Shift-".concat(e)]:()=>this.editor.commands.toggleHeading({level:e})})),{})},addNodeView(){return(0,w.uf)(St,{update:t=>{let{oldNode:e,newNode:n,updateProps:i}=t;return n.type.name===this.name&&(n.attrs===e.attrs&&(i(),!0))}})},onCreate(){xt(this.editor),this.parent&&this.parent()},onUpdate:ht()((t=>{let{editor:e}=t;e.view&&e.state&&!e.isDestroyed&&xt(e)}),900)});var Bt=i(25748),It=i(26761),Tt=i(88911),Dt=i(2649),Pt=i.n(Dt);const Ot={name:"ShowImageModal",components:{NcModal:J.Jc},props:{images:{type:Array,default:()=>[],validator:t=>0===t.length||t.every((t=>t.basename&&t.source))},startIndex:{type:Number,default:0},show:{type:Boolean,default:!1}},data:()=>({currentImageIndex:0}),computed:{currentImage(){return this.images[this.currentImageIndex]}},watch:{startIndex(t){this.currentImageIndex=t}},methods:{showNextImage(){this.currentImageIndex=(this.currentImageIndex+1)%this.images.length,this.currentImage=this.images[this.currentImageIndex]},showPreviousImage(){this.currentImageIndex=this.currentImageIndex<=0?this.images.length-1:this.currentImageIndex-1,this.currentImage=this.images[this.currentImageIndex]}}};var Rt=i(53180),Lt={};Lt.styleTagTransform=Z(),Lt.setAttributes=O(),Lt.insert=D().bind(null,"head"),Lt.domAPI=I(),Lt.insertStyleElement=L();N()(Rt.Z,Lt);Rt.Z&&Rt.Z.locals&&Rt.Z.locals;const $t=(0,F.Z)(Ot,(function(){var t=this,e=t._self._c;return t.show?e("NcModal",{attrs:{size:"large",title:t.currentImage.basename,"out-transition":!0,"has-next":!0,"has-previous":!0,"close-button-contained":!1,dark:!0},on:{next:t.showNextImage,previous:t.showPreviousImage,close:function(e){return t.$emit("close")}}},[e("div",{staticClass:"modal__content"},[e("img",{attrs:{src:t.currentImage.source}})])]):t._e()}),[],!1,null,"8f1a4cfa",null).exports;var Zt=i(13815),zt=i(74411),Ut=i(69183),Ft=i(79753),Ht=i(52029);class Gt extends Error{constructor(e,n){super((null==e?void 0:e.message)||t("text","Failed to load")),this.reason=e,this.imageUrl=n}}const qt={name:"ImageView",components:{ImageIcon:E.Ee,DeleteIcon:E.HG,NcButton:J.P2,ShowImageModal:$t,NodeViewWrapper:w.T5},directives:{ClickOutside:Pt()},mixins:[Zt.Z,kt.Zf],props:["editor","node","extension","updateAttributes","deleteNode"],data:()=>({imageLoaded:!1,loaded:!1,failed:!1,showIcons:!1,imageUrl:null,errorMessage:null,attachmentType:null,attachmentMetadata:{},showImageModal:!1,embeddedImagesList:[],imageIndex:null}),computed:{isMediaAttachment(){return this.attachmentType===this.$attachmentResolver.ATTACHMENT_TYPE_MEDIA},editable(){return this.editor.isEditable},showDeleteIcon(){return this.editable&&this.showIcons},showImageDeleteIcon(){return this.showDeleteIcon&&!this.isMediaAttachment},canDisplayImage(){return!!this.isSupportedImage&&(!(!this.failed||!this.loaded)||this.loaded&&this.imageLoaded)},imageFileId(){return((t,e)=>{const n=t.split("?")[1];if(void 0===n)return;const i=n.split(/[&#]/);if(void 0!==i)for(let t=0;t(t,e)=>window.t(t,e),token:()=>document.getElementById("sharingToken")&&document.getElementById("sharingToken").value},beforeMount(){if(!this.isSupportedImage)return this.failed=!0,this.imageLoaded=!1,this.loaded=!0,void(this.errorMessage=t("text","Unsupported image type"));this.init().catch(this.onImageLoadFailure)},methods:{async init(){const t=await this.$attachmentResolver.resolve(this.src);return this.load(t)},async load(t){const[e,...n]=t;return this.loadImage(e.url,e.type,e.name,e.metadata).catch((t=>n.length>0?this.load(n):Promise.reject(t)))},async loadImage(t,e){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null;return new Promise(((r,o)=>{const a=new Image;a.onload=async()=>{this.imageUrl=t,this.imageLoaded=!0,this.loaded=!0,this.attachmentType=e,e===this.$attachmentResolver.ATTACHMENT_TYPE_MEDIA&&i?this.attachmentMetadata=i:e===this.$attachmentResolver.ATTACHMENT_TYPE_MEDIA&&await this.loadMediaMetadata(n),r(t)},a.onerror=e=>{o(new Gt(e,t))},a.src=t}))},loadMediaMetadata(t){const e=this.$attachmentResolver.getMediaMetadataUrl(t);return Tt.Z.get(e).then((t=>{this.attachmentMetadata=t.data})).catch((t=>{Ht.k.error("Failed to load media metadata",{error:t})}))},onImageLoadFailure(t){this.failed=!0,this.imageLoaded=!1,this.loaded=!0,this.errorMessage=t.message,t instanceof Gt&&(this.errorMessage="".concat(this.errorMessage," ").concat(this.src)),this.$emit("error",{error:t,src:this.src})},updateAlt(t){this.updateAttributes({alt:t.target.value})},onLoaded(){this.loaded=!0},async handleImageClick(t){const e=Array.from(document.querySelectorAll('figure[data-component="image-view"].image-view'));let n,i;for(const t of e){i=t.getAttribute("data-src"),n=i.split("/").slice(-1).join();const e=await this.$attachmentResolver.resolve(i,!0),{url:r}=e.shift();this.embeddedImagesList.push({source:r,basename:n,relativePath:i})}this.imageIndex=this.embeddedImagesList.findIndex((e=>e.relativePath===t)),this.showImageModal=!0},onDelete(){(0,Ut.j8)("text:image-node:delete",this.imageUrl),this.deleteNode()}}};var Wt=i(70235),Kt={};Kt.styleTagTransform=Z(),Kt.setAttributes=O(),Kt.insert=D().bind(null,"head"),Kt.domAPI=I(),Kt.insertStyleElement=L();N()(Wt.Z,Kt);Wt.Z&&Wt.Z.locals&&Wt.Z.locals;const Vt=(0,F.Z)(qt,(function(){var t=this,e=t._self._c;return e("NodeViewWrapper",[e("figure",{staticClass:"image image-view",class:{"icon-loading":!t.loaded,"image-view--failed":t.failed},attrs:{"data-component":"image-view","data-src":t.src}},[t.canDisplayImage?e("div",{directives:[{name:"click-outside",rawName:"v-click-outside",value:()=>t.showIcons=!1,expression:"() => showIcons = false"}],staticClass:"image__view",on:{mouseover:function(e){t.showIcons=!0},mouseleave:function(e){t.showIcons=!1}}},[e("transition",{attrs:{name:"fade"}},[t.failed?[e("ImageIcon",{staticClass:"image__main image__main--broken-icon",attrs:{size:100}})]:[t.isMediaAttachment?e("div",{staticClass:"media",on:{click:function(e){return t.handleImageClick(t.src)}}},[e("div",{staticClass:"media__wrapper"},[e("img",{directives:[{name:"show",rawName:"v-show",value:t.loaded,expression:"loaded"}],staticClass:"image__main",attrs:{src:t.imageUrl},on:{load:t.onLoaded}}),t._v(" "),e("div",{staticClass:"metadata"},[e("span",{staticClass:"name"},[t._v(t._s(t.alt))]),t._v(" "),e("span",{staticClass:"size"},[t._v(t._s(t.attachmentMetadata.size))])])]),t._v(" "),t.showDeleteIcon?e("div",{staticClass:"buttons"},[e("NcButton",{attrs:{"aria-label":t.t("text","Delete this attachment"),title:t.t("text","Delete this attachment")},on:{click:t.onDelete},scopedSlots:t._u([{key:"icon",fn:function(){return[e("DeleteIcon")]},proxy:!0}],null,!1,3930079857)})],1):t._e()]):e("div",[e("img",{directives:[{name:"show",rawName:"v-show",value:t.loaded,expression:"loaded"}],staticClass:"image__main",attrs:{src:t.imageUrl},on:{click:function(e){return t.handleImageClick(t.src)},load:t.onLoaded}})])]],2),t._v(" "),e("transition",{attrs:{name:"fade"}},[t.isMediaAttachment?t._e():e("div",{directives:[{name:"show",rawName:"v-show",value:t.loaded,expression:"loaded"}],staticClass:"image__caption",attrs:{title:t.alt}},[t.editable?e("div",{staticClass:"image__caption__wrapper"},[e("input",{directives:[{name:"show",rawName:"v-show",value:!t.isMediaAttachment,expression:"!isMediaAttachment"}],ref:"altInput",staticClass:"image__caption__input",attrs:{type:"text"},domProps:{value:t.alt},on:{blur:t.updateAlt,keyup:t.updateAlt}}),t._v(" "),t.showImageDeleteIcon?e("div",{staticClass:"image__caption__delete"},[e("NcButton",{attrs:{"aria-label":t.t("text","Delete this image"),title:t.t("text","Delete this image")},on:{click:t.onDelete},scopedSlots:t._u([{key:"icon",fn:function(){return[e("DeleteIcon")]},proxy:!0}],null,!1,3930079857)})],1):t._e()]):e("figcaption",[t._v("\n\t\t\t\t\t\t"+t._s(t.alt)+"\n\t\t\t\t\t")])])]),t._v(" "),e("div",{staticClass:"image__modal"},[e("ShowImageModal",{attrs:{images:t.embeddedImagesList,"start-index":t.imageIndex,show:t.showImageModal},on:{close:function(e){t.showImageModal=!1}}})],1)],1):e("div",{staticClass:"image-view__cant_display"},[e("transition",{attrs:{name:"fade"}},[e("div",{directives:[{name:"show",rawName:"v-show",value:t.loaded,expression:"loaded"}]},[e("a",{attrs:{href:t.internalLinkOrImage,target:"_blank"}},[t.isSupportedImage?t._e():e("span",[t._v(t._s(t.alt))])])])]),t._v(" "),t.isSupportedImage?e("transition",{attrs:{name:"fade"}},[e("div",{directives:[{name:"show",rawName:"v-show",value:t.loaded,expression:"loaded"}],staticClass:"image__caption"},[e("input",{ref:"altInput",attrs:{type:"text",disabled:!t.editable},domProps:{value:t.alt},on:{blur:t.updateAlt,keyup:function(e){return!e.type.indexOf("key")&&t._k(e.keyCode,"enter",13,e.key,"Enter")?null:t.updateAlt.apply(null,arguments)}}})])]):t._e()],1),t._v(" "),t.errorMessage?e("small",{staticClass:"image__error-message"},[t._v("\n\t\t\t"+t._s(t.errorMessage)+"\n\t\t")]):t._e()])])}),[],!1,null,"4febfd28",null).exports,Yt=It.ZP.extend({selectable:!1,parseHTML(){return[{tag:this.options.allowBase64?"figure img[src]":'figure img[src]:not([src^="data:"])'}]},renderHTML:()=>["img"],addOptions(){var t;return{...null===(t=this.parent)||void 0===t?void 0:t.call(this)}},addNodeView:()=>(0,w.uf)(Vt),addProseMirrorPlugins:()=>[new l.Sy({props:{handleDrop:(t,e,n)=>{if(e.dataTransfer.files&&e.dataTransfer.files.length>0){const n=t.posAtCoords({left:e.clientX,top:e.clientY}),i=new CustomEvent("file-drop",{bubbles:!0,detail:{files:e.dataTransfer.files,position:n.pos}});return e.target.dispatchEvent(i),!0}},handlePaste:(t,e,n)=>{if(e.clipboardData.files&&e.clipboardData.files.length>0){const t=new CustomEvent("image-paste",{bubbles:!0,detail:{files:e.clipboardData.files}});return e.target.dispatchEvent(t),!0}}}})],toMarkdown(t,e,n,i){e.attrs.alt=e.attrs.alt.toString(),V.Dm.nodes.image(t,e,n,i),t.closeBlock(e)}}),Qt=It.ZP.extend({name:"image-inline",priority:99,selectable:!1,parseHTML(){return[{tag:this.options.allowBase64?"img[src]":'img[src]:not([src^="data:"])'}]},addOptions(){var t;return{...null===(t=this.parent)||void 0===t?void 0:t.call(this),inline:!0}},addCommands:()=>({}),addInputRules:()=>[],addNodeView:()=>(0,w.uf)(Vt),toMarkdown:(t,e,n,i)=>V.Dm.nodes.image(t,e,n,i)}),Xt=s.vc.create({name:"keep-syntax",parseHTML:()=>[{tag:"span.keep-md"}],renderHTML:()=>["span",{class:"keep-md"},0],toMarkdown:{open:"",close:"",mixable:!0,escape:!1,expelEnclosingWhitespace:!0},onUpdate(){const t=this.editor.state.tr;this.editor.state.doc.descendants(((e,n,i,r)=>{-1!==e.marks.findIndex((t=>t.type.name===this.name))&&("text"===e.type.name&&1===e.text.length||t.removeMark(n,n+e.nodeSize,this.type))})),t.docChanged&&(t.setMeta("addToHistory",!1),t.setMeta("preventUpdate",!0),this.editor.view.dispatch(t))}});var Jt=i(34565),te=i(14068);const ee={name:"Mention",components:{NcUserBubble:J.uq,NodeViewWrapper:w.T5},props:{updateAttributes:{type:Function,required:!0},node:{type:Object,required:!0}},data(){return{username:this.node.attrs.label}},computed:{isCurrentUser(){var t;return this.node.attrs.id===(null===(t=(0,lt.ts)())||void 0===t?void 0:t.uid)}}};var ne=i(35460),ie={};ie.styleTagTransform=Z(),ie.setAttributes=O(),ie.insert=D().bind(null,"head"),ie.domAPI=I(),ie.insertStyleElement=L();N()(ne.Z,ie);ne.Z&&ne.Z.locals&&ne.Z.locals;const re=(0,F.Z)(ee,(function(){var t=this,e=t._self._c;return e("NodeViewWrapper",{staticClass:"mention",attrs:{as:"span",contenteditable:"false"}},[e("NcUserBubble",{staticClass:"mention-user-bubble",attrs:{user:t.node.attrs.id,"display-name":t.username,primary:t.isCurrentUser}},[t._v("\n\t\t@"+t._s(t.username)+"\n\t")])],1)}),[],!1,null,"297bb5fa",null).exports,oe=te.ZP.extend({parseHTML:()=>[{tag:'span[data-type="user"]',getAttrs:t=>({id:decodeURIComponent(t.getAttribute("data-id")),label:t.innerText||t.textContent||t.getAttribute("data-label")}),priority:100}],renderHTML(t){let{node:e,HTMLAttributes:n}=t;return["span",(0,s.P1)({"data-type":"user",class:"mention"},this.options.HTMLAttributes,n),this.options.renderLabel({options:this.options,node:e})]},addNodeView:()=>(0,w.uf)(re),toMarkdown(t,e){t.write(" "),t.write("@[".concat(e.attrs.label,"](mention://user/").concat(encodeURIComponent(e.attrs.id),")")),t.write(" ")}});const ae={components:{SuggestionListWrapper:i(16877).Z},props:{items:{type:Array,required:!0},command:{type:Function,required:!0}},methods:{onKeyDown(t){var e;let{event:n}=t;return null===(e=this.$refs.suggestionList)||void 0===e?void 0:e.onKeyDown({event:n})}}};var se=i(59724),le={};le.styleTagTransform=Z(),le.setAttributes=O(),le.insert=D().bind(null,"head"),le.domAPI=I(),le.insertStyleElement=L();N()(se.Z,le);se.Z&&se.Z.locals&&se.Z.locals;const ce=(0,F.Z)(ae,(function(){var t=this,e=t._self._c;return e("SuggestionListWrapper",{ref:"suggestionList",attrs:{command:t.command,items:t.items},on:{select:e=>t.$emit("select",e)},scopedSlots:t._u([{key:"default",fn:function(n){let{item:i}=n;return[e("div",{staticClass:"link-picker__item"},[e("img",{attrs:{src:i.icon}}),t._v(" "),e("div",[t._v(t._s(i.label))])])]}},{key:"empty",fn:function(){return[t._v("\n\t\t"+t._s(t.t("text","No command found"))+"\n\t")]},proxy:!0}])})}),[],!1,null,"0ea7b674",null).exports,de=new l.H$("linkPicker"),he=s.hj.create({name:"linkPicker",addOptions:()=>({suggestion:{char:"/",allowedPrefixes:[" "],pluginKey:de,...(0,tt.Z)({listComponent:ce,command:t=>{let{editor:e,range:n,props:i}=t;(0,ct.getLinkWithPicker)(i.providerId,!0).then((t=>{e.chain().focus().insertContentAt(n,t+" ").run()})).catch((t=>{console.error("Smart picker promise rejected",t)}))},items:t=>{let{query:e}=t;return(0,ct.searchProvider)(e).map((t=>({label:t.title,icon:t.icon_url,providerId:t.id})))}})}}),addProseMirrorPlugins(){return[(0,c.q$)({editor:this.editor,...this.options.suggestion})]}});var Ae=i(51575),ue=i(93237),pe=i(22773);const ge=s.NB.create({name:"tableCaption",content:"inline*",addAttributes:()=>({}),renderHTML:()=>["caption"],toMarkdown(t,e){},parseHTML:()=>[{tag:"table caption",priority:90}]});var me=i(658),be=i(87823);const fe=me.p.extend({content:"inline*",toMarkdown(t,e){var n;t.write(" ");const i=null===(n=t.options)||void 0===n?void 0:n.escapeExtraCharacters;t.options.escapeExtraCharacters=/\|/,t.renderInline(e),t.options.escapeExtraCharacters=i,t.write(" |")},parseHTML:()=>[{tag:"td",preserveWhitespace:!0},{tag:"th",preserveWhitespace:!0},{tag:"table thead ~ tbody th",priority:70,preserveWhitespace:!0},{tag:"table thead ~ tbody td",priority:70,preserveWhitespace:!0}],addAttributes(){var t;return{...null===(t=this.parent)||void 0===t?void 0:t.call(this),textAlign:{rendered:!1,parseHTML:t=>t.style.textAlign||null}}},addProseMirrorPlugins(){return[new l.Sy({props:{handlePaste:(t,e,n)=>{if(!this.editor.isActive(this.type.name))return!1;const{state:i}=t,r=[];let o=!1;n.content.descendants(((t,e)=>{t.isText?(r.push(i.schema.text(t.textContent,t.marks)),o=!1):o||(r.push(i.schema.text("\n")),o=!0)}));const a=i.schema.node("paragraph",[],r);n.content=be.HY.empty.addToStart(a)}}})]}});const Ce=i(43626).x.extend({content:"inline*",toMarkdown(t,e){t.write(" "),t.renderInline(e),t.write(" |")},parseHTML:()=>[{tag:"table thead:empty ~ tbody :first-child th",priority:80},{tag:"table thead:empty ~ tbody :first-child td",priority:80},{tag:"table thead :first-child th",priority:60},{tag:"table thead :first-child td",priority:60},{tag:"table tbody :first-child th",priority:60},{tag:"table tbody :first-child td",priority:60},{tag:"table > :first-child > th",priority:60},{tag:"table > :first-child > td",priority:60}],addAttributes(){var t;return{...null===(t=this.parent)||void 0===t?void 0:t.call(this),textAlign:{rendered:!1,parseHTML:t=>t.style.textAlign||null}}}});const ve=i(33991).S.extend({content:"tableCell*",toMarkdown(t,e){t.write("|"),t.renderInline(e),t.ensureNewLine()},parseHTML:()=>[{tag:"tr",priority:70}]}),_e=ve.extend({name:"tableHeadRow",content:"tableHeader*",toMarkdown(t,e){t.write("|"),t.renderInline(e),t.ensureNewLine(),t.write("|"),e.forEach((e=>{var n;let i=t.repeat("-",e.textContent.length+2);const r=null===(n=e.attrs)||void 0===n?void 0:n.textAlign;"center"!==r&&"left"!==r||(i=":"+i.slice(1)),"center"!==r&&"right"!==r||(i=i.slice(0,-1)+":"),t.write(i),t.write("|")})),t.ensureNewLine()},parseHTML:()=>[{tag:"tr:first-of-type",priority:80}]});var ye=i(97245);const xe=pe.iA.extend({content:"tableCaption? tableHeadRow tableRow*",addExtensions:()=>[ge,fe,Ce,_e,ve],addCommands(){return{...this.parent(),addRowAfter:()=>t=>{let{chain:e,dispatch:n}=t;return e().command((t=>{let{state:e}=t;return(0,ye.dl)(e,n)})).command((t=>{let{state:e,tr:i}=t;const{tableStart:r,table:o,bottom:a}=(0,ye.zN)(e);if(n){const t=o.child(a-1),e=o.child(a);let n=r+1;for(let t=0;tt=>{let{chain:e,dispatch:n}=t;return e().command((t=>{let{state:e}=t;return(0,ye.z2)(e,n)})).command((t=>{let{state:e,tr:i}=t;const{tableStart:r,table:o,top:a}=(0,ye.zN)(e);if(n){const t=o.child(a),e=o.child(a-1);let n=r+1;for(let t=0;tt=>{let{tr:e,dispatch:n,editor:i}=t;if((0,ye.Lw)(e))return!1;const r=function(t,e,n,i){const r=[],o=[];for(let e=0;et=>{let{tr:e,dispatch:n,editor:i}=t;if(!(0,ye.Lw)(e))return!1;const{$head:r,empty:o}=e.selection;if(!o)return!1;const a=r.depth<3?1:r.depth-2;if(n){const t=e.doc.resolve(r.after(a)+1),i=l.Bs.near(t);n(e.setSelection(i).scrollIntoView())}return!0},goToNextRow:()=>t=>{let{tr:e,dispatch:n,editor:i}=t;if(!(0,ye.Lw)(e))return!1;const r=function(t){if(t.index(-1)===t.node(-1).childCount-1)return null;let e=t.after();const n=t.node(-1);for(let i=t.indexAfter(-1);i=t.index()){for(let n=0;nthis.editor.commands.goToNextCell()||this.editor.commands.leaveTable(),Enter:t=>{var e;let{editor:n}=t;const{selection:i}=n.state;return!!i.$from.parent.type.name.startsWith("table")&&("hardBreak"===(null===(e=i.$from.nodeBefore)||void 0===e?void 0:e.type.name)?!(!n.can().goToNextRow()&&!n.can().addRowAfter())&&(n.chain().setTextSelection({from:i.from-1,to:i.from}).deleteSelection().run(),!!n.commands.goToNextRow()||n.chain().addRowAfter().goToNextRow().run()):n.chain().insertContent('
').focus().run())}}}}),we=xe;const ke={name:"TableView",components:{NcActionButton:J.Js,NcActions:J.O3,NodeViewWrapper:w.T5,NodeViewContent:w.ms,TableSettings:E._2,Delete:E.HG},props:{editor:{type:Object,required:!0},deleteNode:{type:Function,required:!0}},computed:{t:()=>window.t}};var Ee=i(44314),je={};je.styleTagTransform=Z(),je.setAttributes=O(),je.insert=D().bind(null,"head"),je.domAPI=I(),je.insertStyleElement=L();N()(Ee.Z,je);Ee.Z&&Ee.Z.locals&&Ee.Z.locals;const Me=(0,F.Z)(ke,(function(){var t=this,e=t._self._c;return e("NodeViewWrapper",{staticClass:"table-wrapper",attrs:{"data-text-el":"table-view"}},[t.editor.isEditable?e("NcActions",{staticClass:"table-settings",attrs:{"force-menu":"","data-text-table-actions":"settings"},scopedSlots:t._u([{key:"icon",fn:function(){return[e("TableSettings")]},proxy:!0}],null,!1,1699550424)},[t._v(" "),e("NcActionButton",{attrs:{"data-text-table-action":"delete","close-after-click":""},on:{click:t.deleteNode},scopedSlots:t._u([{key:"icon",fn:function(){return[e("Delete")]},proxy:!0}],null,!1,3429380666)},[t._v("\n\t\t\t"+t._s(t.t("text","Delete this table"))+"\n\t\t")])],1):t._e(),t._v(" "),e("NodeViewContent",{staticClass:"content",attrs:{as:"table"}}),t._v(" "),e("div",{staticClass:"clearfix"})],1)}),[],!1,null,"261cbb42",null).exports;const Se={name:"TableCellView",components:{NcActionButton:J.Js,NcActions:J.O3,NodeViewWrapper:w.T5,NodeViewContent:w.ms,TableAddRowBefore:E.pn,TableAddRowAfter:E.F5,Delete:E.HG},props:{editor:{type:Object,required:!0},getPos:{type:Function,required:!0}},computed:{t:()=>window.t,textAlign(){return{"text-align":this.node.attrs.textAlign}}},methods:{deleteRow(){this.editor.chain().focus().setTextSelection(this.getPos()).deleteRow().run()},addRowBefore(){this.editor.chain().focus().setTextSelection(this.getPos()).addRowBefore().run()},addRowAfter(){this.editor.chain().focus().setTextSelection(this.getPos()).addRowAfter().run()}}};var Ne=i(72546),Be={};Be.styleTagTransform=Z(),Be.setAttributes=O(),Be.insert=D().bind(null,"head"),Be.domAPI=I(),Be.insertStyleElement=L();N()(Ne.Z,Be);Ne.Z&&Ne.Z.locals&&Ne.Z.locals;const Ie=(0,F.Z)(Se,(function(){var t=this,e=t._self._c;return e("NodeViewWrapper",{style:t.textAlign,attrs:{"data-text-el":"table-cell",as:"td"}},[e("div",{staticClass:"container"},[e("NodeViewContent",{staticClass:"content"}),t._v(" "),t.editor.isEditable?e("NcActions",{attrs:{"data-text-table-actions":"row"}},[e("NcActionButton",{attrs:{"data-text-table-action":"add-row-before","close-after-click":""},on:{click:t.addRowBefore},scopedSlots:t._u([{key:"icon",fn:function(){return[e("TableAddRowBefore")]},proxy:!0}],null,!1,1805502767)},[t._v("\n\t\t\t\t"+t._s(t.t("text","Add row before"))+"\n\t\t\t")]),t._v(" "),e("NcActionButton",{attrs:{"data-text-table-action":"add-row-after","close-after-click":""},on:{click:t.addRowAfter},scopedSlots:t._u([{key:"icon",fn:function(){return[e("TableAddRowAfter")]},proxy:!0}],null,!1,3179199218)},[t._v("\n\t\t\t\t"+t._s(t.t("text","Add row after"))+"\n\t\t\t")]),t._v(" "),e("NcActionButton",{attrs:{"data-text-table-action":"remove-row","close-after-click":""},on:{click:t.deleteRow},scopedSlots:t._u([{key:"icon",fn:function(){return[e("Delete")]},proxy:!0}],null,!1,3429380666)},[t._v("\n\t\t\t\t"+t._s(t.t("text","Delete this row"))+"\n\t\t\t")])],1):t._e()],1)])}),[],!1,null,"3543004d",null).exports;const Te=(0,wt.defineComponent)({name:"InlineActionsContainer"});var De=i(38304),Pe={};Pe.styleTagTransform=Z(),Pe.setAttributes=O(),Pe.insert=D().bind(null,"head"),Pe.domAPI=I(),Pe.insertStyleElement=L();N()(De.Z,Pe);De.Z&&De.Z.locals&&De.Z.locals;const Oe=(0,F.Z)(Te,(function(){var t=this,e=t._self._c;t._self._setupProxy;return e("li",{staticClass:"inline-container-base"},[e("ul",{staticClass:"inline-container-content"},[t._t("default")],2)])}),[],!1,null,null,null).exports,Re={name:"TableHeaderView",components:{AlignHorizontalCenter:E.QK,AlignHorizontalLeft:E.L9,AlignHorizontalRight:E.gr,Delete:E.HG,InlineActionsContainer:Oe,NcActionButton:J.Js,NcActions:J.O3,NodeViewWrapper:w.T5,NodeViewContent:w.ms,TableAddColumnBefore:E.IY,TableAddColumnAfter:E.Ah},props:{editor:{type:Object,required:!0},getPos:{type:Function,required:!0},node:{type:Object,required:!0}},computed:{t:()=>window.t,textAlign(){return{"text-align":this.node.attrs.textAlign}}},methods:{alignCenter(){this.align("center")},alignLeft(){this.align("left")},alignRight(){this.align("right")},align(t){for(this.editor.chain().focus().setTextSelection(this.getPos()).setCellAttribute("textAlign",t).run();this.editor.commands.goToNextRow();)this.editor.commands.setCellAttribute("textAlign",t);this.editor.chain().setTextSelection(this.getPos()).focus().run(),this.$refs.menu.closeMenu(!1)},deleteColumn(){this.editor.chain().focus().setTextSelection(this.getPos()).deleteColumn().run()},addColumnBefore(){this.editor.chain().focus().setTextSelection(this.getPos()).addColumnBefore().run()},addColumnAfter(){this.editor.chain().focus().setTextSelection(this.getPos()).addColumnAfter().run()}}};var Le=i(42422),$e={};$e.styleTagTransform=Z(),$e.setAttributes=O(),$e.insert=D().bind(null,"head"),$e.domAPI=I(),$e.insertStyleElement=L();N()(Le.Z,$e);Le.Z&&Le.Z.locals&&Le.Z.locals;const Ze=(0,F.Z)(Re,(function(){var t=this,e=t._self._c;return e("NodeViewWrapper",{style:t.textAlign,attrs:{"data-text-el":"table-header",as:"th"}},[e("div",[e("NodeViewContent",{staticClass:"content"}),t._v(" "),t.editor.isEditable?e("NcActions",{ref:"menu",attrs:{"data-text-table-actions":"header"}},[e("InlineActionsContainer",[e("NcActionButton",{attrs:{"data-text-table-action":"align-column-left","aria-label":t.t("text","Left align column")},on:{click:t.alignLeft},scopedSlots:t._u([{key:"icon",fn:function(){return[e("AlignHorizontalLeft")]},proxy:!0}],null,!1,2968467243)}),t._v(" "),e("NcActionButton",{attrs:{"data-text-table-action":"align-column-center","aria-label":t.t("text","Center align column")},on:{click:t.alignCenter},scopedSlots:t._u([{key:"icon",fn:function(){return[e("AlignHorizontalCenter")]},proxy:!0}],null,!1,536750267)}),t._v(" "),e("NcActionButton",{attrs:{"data-text-table-action":"align-column-right","aria-label":t.t("text","Right align column")},on:{click:t.alignRight},scopedSlots:t._u([{key:"icon",fn:function(){return[e("AlignHorizontalRight")]},proxy:!0}],null,!1,3861151024)})],1),t._v(" "),e("NcActionButton",{attrs:{"data-text-table-action":"add-column-before","close-after-click":""},on:{click:t.addColumnBefore},scopedSlots:t._u([{key:"icon",fn:function(){return[e("TableAddColumnBefore")]},proxy:!0}],null,!1,3782681875)},[t._v("\n\t\t\t\t"+t._s(t.t("text","Add column before"))+"\n\t\t\t")]),t._v(" "),e("NcActionButton",{attrs:{"data-text-table-action":"add-column-after","close-after-click":""},on:{click:t.addColumnAfter},scopedSlots:t._u([{key:"icon",fn:function(){return[e("TableAddColumnAfter")]},proxy:!0}],null,!1,1608287598)},[t._v("\n\t\t\t\t"+t._s(t.t("text","Add column after"))+"\n\t\t\t")]),t._v(" "),e("NcActionButton",{attrs:{"data-text-table-action":"remove-column","close-after-click":""},on:{click:t.deleteColumn},scopedSlots:t._u([{key:"icon",fn:function(){return[e("Delete")]},proxy:!0}],null,!1,3429380666)},[t._v("\n\t\t\t\t"+t._s(t.t("text","Delete this column"))+"\n\t\t\t")])],1):t._e()],1)])}),[],!1,null,"25a85f13",null).exports;function ze(t,e){return t.extend({addNodeView:()=>(0,w.uf)(e)})}const Ue=xe.extend({addNodeView:()=>(0,w.uf)(Me),addExtensions:()=>[ge,ze(fe,Ie),ze(Ce,Ze),_e,ve]});var Fe=i(87605);const He=Fe.ZP.extend({addOptions:()=>({nested:!0,HTMLAttributes:{}}),draggable:!1,content:"paragraph block*",addAttributes(){const t={...this.parent()};return t.checked.parseHTML=t=>{var e;return null===(e=t.querySelector("input[type=checkbox]"))||void 0===e?void 0:e.checked},t},parseHTML:[{priority:101,tag:"li",getAttrs:t=>t.querySelector("input[type=checkbox]"),context:"taskList/"}],renderHTML(t){let{node:e,HTMLAttributes:n}=t;const i={class:"checkbox-item"},r={type:"checkbox",class:"",contenteditable:!1};return e.attrs.checked&&(r.checked=!0,i.class+=" checked"),["li",(0,s.P1)(n,i),["input",r],["label",0]]},addNodeView:!1,toMarkdown:(t,e)=>{t.write("[".concat(e.attrs.checked?"x":" ","] ")),t.renderContent(e)},addInputRules(){return[...this.parent(),(0,s.S0)({find:/^\s*([-+*])\s(\[(x|X|\s)?\])\s$/,type:this.type,getAttributes:t=>({checked:"xX".includes(t[t.length-1])})})]},addProseMirrorPlugins:()=>[new l.Sy({props:{handleClick:(t,e,n)=>{const i=t.state,r=i.schema,o=t.posAtCoords({left:n.clientX,top:n.clientY}),a=((t,e)=>{for(let n=t.depth;n>0;n--){const i=t.node(n);if(e(i))return{pos:n>0?t.before(n):0,start:t.start(n),depth:n,node:i}}})(i.doc.resolve(o.pos),(function(t){return t.type===r.nodes.taskItem||t.type===r.nodes.listItem}));if(!("li"===n.target.tagName.toLowerCase())||!a||a.node.type!==r.nodes.taskItem||!t.editable)return;const s=i.tr;s.setNodeMarkup(a.pos,r.nodes.taskItem,{checked:!a.node.attrs.checked}),t.dispatch(s)}}})]});const Ge=i(63354).Z.extend({parseHTML:[{priority:100,tag:"ul.contains-task-list"}],addAttributes(){var t;return{...null===(t=this.parent)||void 0===t?void 0:t.call(this),bullet:{default:"-",rendered:!1,isRequired:!0,parseHTML:t=>t.getAttribute("data-bullet")}}},toMarkdown:(t,e)=>{t.renderList(e," ",(()=>"".concat(e.attrs.bullet," ")))}});function qe(t){let{types:e,node:n}=t;return Array.isArray(e)&&e.includes(n.type)||n.type===e}const We=s.hj.create({name:"trailingNode",addOptions:()=>({node:"paragraph",notAfter:["paragraph"]}),addProseMirrorPlugins(){const t=new l.H$(this.name),e=Object.entries(this.editor.schema.nodes).map((t=>{let[,e]=t;return e})).filter((t=>this.options.notAfter.includes(t.name)));return[new l.Sy({key:t,appendTransaction:(e,n,i)=>{const{doc:r,tr:o,schema:a}=i,s=t.getState(i),l=r.content.size,c=a.nodes[this.options.node];if(s)return o.insert(l,c.create())},state:{init:(t,n)=>!qe({node:n.tr.doc.lastChild,types:e}),apply:(t,n)=>{if(!t.docChanged)return n;return!qe({node:t.doc.lastChild,types:e})}}})]}});var Ke=i(73816),Ve=i(49924),Ye=i(40187);const Qe=function(t){const e=t.lastIndexOf("/");return e>0?t.slice(0,e):t.slice(0,e+1)},Xe=function(t,e){const n=t.attrs.href;if(!n)return n;if(!OCA.Viewer)return n;if(n.match(/^[a-zA-Z]*:/))return n;if(n.startsWith("#"))return n;const i=n.match(/^([^?]*)\?fileId=(\d+)/);if(i){var r;const[,t,n]=i,o=function(t,e){if(!e)return t;if("/"===e[0])return e;for(t=t.split("/"),e=e.split("/");".."===e[0]||"."===e[0];)".."===e[0]&&t.pop(),e.shift();return t.concat(e).join("/")}(Qe(e||(null===(r=OCA.Viewer)||void 0===r?void 0:r.file)||"/"),Qe(t));return t.length>1&&t.endsWith("/")?(0,Ft.generateUrl)("/apps/files/?dir=".concat(o,"&fileId=").concat(n)):(0,Ft.generateUrl)("/apps/files/?dir=".concat(o,"&openfile=").concat(n,"#relPath=").concat(t))}return n},Je=function(t){const e=t.getAttribute("href");if(!e)return e;const n=e.match(/\?dir=([^&]*)&openfile=([^&]*)#relPath=([^&]*)/);if(n){const[,,t,e]=n;return"".concat(e,"?fileId=").concat(t)}return e},tn=function(t,e){const n=t.target.closest("a").href,i=OC.parseQueryString(n),r=n.split("#").pop(),o=OC.parseQueryString(r);if(null!=i&&i.dir&&null!=o&&o.relPath){const t=o.relPath.split("/").pop(),e="".concat(i.dir,"/").concat(t);return document.title="".concat(t," - ").concat(OC.theme.title),window.location.pathname.match(/apps\/files\/$/),void OCA.Viewer.open({path:e})}if(!n.match(/apps\/files\//)||null==i||!i.fileId){if(!Ye.Z.validateLink(n))return Ht.k.error("Invalid link",{htmlHref:n}),!1;if(r){const t=document.getElementById(r);if(t)return t.scrollIntoView(),void(window.location.hash=r)}return window.open(n),!0}window.open((0,Ft.generateUrl)("/f/".concat(i.fileId)),"_self")},en=t=>{let{editor:e,type:n,onClick:i}=t;return new l.Sy({props:{key:new l.H$("textLink"),handleClick:(t,e,r)=>{const o=t.state.doc.resolve(e).marks().find((t=>t.type.name===n.name));return!!o&&(o.attrs.href?0!==r.button||r.ctrlKey?void 0:(r.stopPropagation(),null==i?void 0:i(r,o.attrs)):(Ht.k.warn("Could not determine href of link."),Ht.k.debug("Link",{link:o}),!1))}}})},nn=Ve.Z.extend({addOptions(){var t;return{...null===(t=this.parent)||void 0===t?void 0:t.call(this),onClick:tn,relativePath:null}},addAttributes:()=>({href:{default:null},title:{default:null}}),inclusive:!1,parseHTML:[{tag:"a[href]",getAttrs:t=>({href:Je(t),title:t.getAttribute("title")})}],renderHTML(t){const{mark:e}=t;return["a",{...e.attrs,href:Xe(e,this.options.relativePath),rel:"noopener noreferrer nofollow"},0]},addProseMirrorPlugins(){const t=this.parent().filter((t=>{let{key:e}=t;return!e.startsWith("handleClickLink")}));return this.options.openOnClick?[...t,en({editor:this.editor,type:this.type,onClick:this.options.onClick}),new l.Sy({props:{key:new l.H$("textAvoidLinkClick"),handleDOMEvents:{click:(t,e)=>{if(!t.editable)return e.preventDefault(),!1}}}})]:t}}),rn=nn;const on=i(4281).ZP.extend({parseHTML:()=>[{tag:"s"},{tag:"del"},{tag:"strike"},{style:"text-decoration",getAttrs:t=>"line-through"===t}],renderHTML:()=>["s",0],toMarkdown:{open:"~~",close:"~~",mixable:!0,expelEnclosingWhitespace:!0}});var an=i(67937);const sn=an.d8.extend({name:"strong",addInputRules(){return[(0,s.Cf)({find:an.bP,type:this.type})]},addPasteRules(){return[(0,s.K9)({find:an.lN,type:this.type})]}});const ln=i(48510).Z.extend({parseHTML:()=>[{tag:"u"},{style:"text-decoration",getAttrs:t=>"underline"===t}],renderHTML:()=>["u",0],toMarkdown:{open:"__",close:"__",mixable:!0,expelEnclosingWhitespace:!0},addInputRules(){return[(0,s.Cf)({find:an.fJ,type:this.type})]},addPasteRules(){return[(0,s.K9)({find:an.lD,type:this.type})]}}),cn=Ke.ZP.extend({name:"em"}),dn=s.hj.create({name:"RichText",addOptions:()=>({editing:!0,link:{},extensions:[],component:null,relativePath:null}),addExtensions(){const t=[this.options.editing?b.Z:null,Q.Z,f.Z,mt,bt,Nt,sn,cn,on,y.ZP,q.Z,W.ZP,Y.configure({lowlight:_.$}),x,Bt.Z,Ae.ZP,Jt.Z,this.options.editing?Ue:we,Ge,He,G,ln,Yt,Qt,X.Z,Xt,at,oe,h.configure({suggestion:(0,tt.Z)({listComponent:ot,items:t=>{let{query:e}=t;return(0,J.Kn)(e)},command:t=>{let{editor:e,range:n,props:i}=t;e.chain().focus().insertContentAt(n,i.native+" ").run()}})}),he,this.options.editing?ue.Z.configure({emptyNodeClass:"is-empty",placeholder:(0,et.Iu)("text","Add notes, lists or links …"),showOnlyWhenEditable:!0}):null,We];!1!==this.options.link&&t.push(rn.configure({...this.options.link,openOnClick:!0,validate:t=>/^https?:\/\//.test(t),relativePath:this.options.relativePath}));const e=this.options.extensions.map((t=>t.name));return[...t.filter((t=>t&&!e.includes(t.name))),...this.options.extensions]}})},27415:(e,n,i)=>{"use strict";i.d(n,{h0:()=>D,Lz:()=>N,YZ:()=>I,tH:()=>B});var r=i(43554),o=i(69183),a=i(74411);if(/^(files|public)$/.test(i.j))var s=i(42397);var l=i(88911),c=i(79753);const d=!!document.getElementById("isPublic"),h=(0,c.generateOcsUrl)("apps/text"+(d?"/public":"")+"/workspace",2),A={name:"RichWorkspace",components:{Editor:()=>Promise.all([i.e("vendors"),i.e("editor")]).then(i.bind(i,73095))},props:{path:{type:String,required:!0},active:{type:Boolean,default:!0}},data:()=>({focus:!1,folder:null,file:null,loaded:!1,ready:!1,autofocus:!1,autohide:!0,darkTheme:OCA.Accessibility&&"dark"===OCA.Accessibility.theme,enabled:OCA.Text.RichWorkspaceEnabled}),computed:{shareToken(){var t;return null===(t=document.getElementById("sharingToken"))||void 0===t?void 0:t.value},canCreate(){return!!(this.folder&&this.folder.permissions&OC.PERMISSION_CREATE)}},watch:{path(){this.getFileInfo()},focus(t){t||document.querySelector("#rich-workspace .text-editor__main").scrollTo(0,0)}},mounted(){this.enabled&&this.getFileInfo(),(0,o.Ld)("Text::showRichWorkspace",this.showRichWorkspace),(0,o.Ld)("Text::hideRichWorkspace",this.hideRichWorkspace),this.listenKeydownEvents()},beforeDestroy(){(0,o.r1)("Text::showRichWorkspace",this.showRichWorkspace),(0,o.r1)("Text::hideRichWorkspace",this.hideRichWorkspace),this.unlistenKeydownEvents()},methods:{onBlur(){this.listenKeydownEvents()},onFocus(){this.focus=!0,this.unlistenKeydownEvents()},reset(){this.file=null,this.focus=!1,this.$nextTick((()=>{this.creating=!1,this.getFileInfo()}))},getFileInfo(t){this.loaded=!1,this.autofocus=!1,this.ready=!1;const e={path:this.path};return d&&(e.shareToken=this.shareToken),l.Z.get(h,{params:e}).then((e=>{const n=e.data.ocs.data;return this.folder=n.folder||null,this.file=n.file,this.editing=!0,this.loaded=!0,this.autofocus=t||!1,!0})).catch((t=>(t.response.data.ocs&&t.response.data.ocs.data.folder?this.folder=t.response.data.ocs.data.folder:this.folder=null,this.file=null,this.loaded=!0,this.ready=!0,this.creating=!1,!1)))},showRichWorkspace(t){this.enabled=!0,this.getFileInfo((null==t?void 0:t.autofocus)||!1)},hideRichWorkspace(){this.enabled=!1},listenKeydownEvents(){window.addEventListener("keydown",this.onKeydown)},unlistenKeydownEvents(){clearInterval(this.$_timeoutAutohide),window.removeEventListener("keydown",this.onKeydown)},onTimeoutAutohide(){this.autohide=!0},onKeydown(t){"Tab"===t.key&&(clearInterval(this.$_timeoutAutohide),this.autohide=!1,this.$_timeoutAutohide=setTimeout(this.onTimeoutAutohide,7e3))}}};var u=i(93379),p=i.n(u),g=i(7795),m=i.n(g),b=i(90569),f=i.n(b),C=i(3565),v=i.n(C),_=i(19216),y=i.n(_),x=i(44589),w=i.n(x),k=i(63180),E={};E.styleTagTransform=w(),E.setAttributes=v(),E.insert=f().bind(null,"head"),E.domAPI=m(),E.insertStyleElement=y();p()(k.Z,E);k.Z&&k.Z.locals&&k.Z.locals;const j=(0,i(51900).Z)(A,(function(){var t=this,e=t._self._c;return t.enabled?e("div",{class:{"icon-loading":!t.loaded||!t.ready,focus:t.focus,dark:t.darkTheme,creatable:t.canCreate},attrs:{id:"rich-workspace"}},[t.file?e("Editor",{directives:[{name:"show",rawName:"v-show",value:t.ready,expression:"ready"}],key:t.file.path,attrs:{"file-id":t.file.id,"relative-path":t.file.path,"share-token":t.shareToken,mime:t.file.mimetype,autofocus:t.autofocus,autohide:t.autohide,active:"","rich-workspace":""},on:{ready:function(e){t.ready=!0},focus:t.onFocus,blur:t.onBlur,error:t.reset}}):t._e()],1):t._e()}),[],!1,null,"4c292a7f",null).exports;var M=i(25030);const S="Edit with text app",N=function(t,e){const n=t.split("/"),i=e.split("/");for(n.pop();n[0]===i[0];)if(n.shift(),i.shift(),0===n.length&&0===i.length)return".";const r=n.fill("..").concat(i),o=e.split("/");return r.length{const e={attach(e){const n=e.fileList;"files"!==n.id&&"files.public"!==n.id||e.addMenuEntry({id:"file",displayName:t("text","New text file"),templateName:t("text","New text file")+"."+(0,r.j)("text","default_file_extension"),iconClass:"icon-filetype-text",fileType:"file",actionHandler(t){n.createFile(t).then((function(t,e){const i=new OCA.Files.FileInfoModel(e);void 0!==OCA.Viewer?OCA.Files.fileActions.triggerAction("view",i,n):void 0===OCA.Viewer&&OCA.Files.fileActions.triggerAction(S,i,n)}))}})}};OC.Plugins.register("OCA.Files.NewFileMenu",e)},I=()=>{const e=(0,s.a)(),n=document.querySelector("#preview table.files-filestable");if(!e||!n){const n=document.createElement("div");n.id="text-viewer-fallback",document.body.appendChild(n);const r=r=>OCA.Files.fileActions.register(r,S,OC.PERMISSION_UPDATE|OC.PERMISSION_READ,(0,c.imagePath)("core","actions/rename"),(t=>{const r=window.FileList.findFile(t);Promise.all([Promise.resolve().then(i.bind(i,20144)),Promise.all([i.e("vendors"),i.e("files-modal")]).then(i.bind(i,59537))]).then((i=>{const o=window.FileList.getCurrentDirectory()+"/"+t,a=i[0].default;a.prototype.t=window.t,a.prototype.n=window.n,a.prototype.OCA=window.OCA;const s=i[1].default;new a({render:function(t){const n=this;return t(s,{props:{fileId:r?r.id:null,active:!0,shareToken:e,relativePath:o,mimeType:r.mimetype},on:{close:function(){n.$destroy()}}})}}).$mount(n)}))}),t("text","Edit"));for(let t=0;twindow.FileList.createFile(i,{scrollTo:!1,animate:!1}).then((()=>(0,o.j8)("Text::showRichWorkspace",{autofocus:!0}))),shouldShow:()=>!n.findFile(i)})}},D={el:null,attach(t){"files"!==t.id&&"files.public"!==t.id||(this.el=document.createElement("div"),t.registerHeader({id:"workspace",el:this.el,render:this.render.bind(this),priority:10}))},render(t){"files"!==t.id&&"files.public"!==t.id||(OC.Plugins.register("OCA.Files.NewFileMenu",T),Promise.resolve().then(i.bind(i,20144)).then((e=>{const n=e.default;this.el.id="files-workspace-wrapper",n.prototype.t=window.t,n.prototype.n=window.n,n.prototype.OCA=window.OCA;const i=new(n.extend(j))({propsData:{path:t.getCurrentDirectory()},store:M.Z}).$mount(this.el);(0,o.Ld)("files:navigation:changed",(()=>{i.active=OCA.Files.App.getCurrentFileList()===t})),t.$el.on("urlChanged",(t=>{i.path=t.dir.toString()})),t.$el.on("changeDirectory",(t=>{i.path=t.dir.toString()}))})))}}},52029:(t,e,n)=>{"use strict";n.d(e,{k:()=>i});const i=(0,n(17499).IY)().setApp("text").detectUser().build()},74411:(t,e,n)=>{"use strict";var i,r;n.d(e,{$Z:()=>o,SP:()=>l,lF:()=>a,w_:()=>s});const o=["image/png","image/jpeg","image/jpg","image/gif","image/x-xbitmap","image/x-ms-bmp","image/bmp","image/svg+xml","image/webp"],a=["text/markdown"],s=["text/plain","application/cmd","application/x-empty","application/x-msdos-program","application/javascript","application/json","application/x-perl","application/x-php","application/x-tex","application/xml","application/yaml","text/asciidoc","text/css","text/html","text/org","text/x-c","text/x-c++src","text/x-h","text/x-java-source","text/x-ldif","text/x-python","text/x-shellscript"];null!==(i=window.oc_appswebroots)&&void 0!==i&&i.richdocuments||null!==(r=window.oc_appswebroots)&&void 0!==r&&r.onlyoffice||s.push("text/csv");const l=[...a,...s]},42397:(t,e,n)=>{"use strict";n.d(e,{a:()=>i});const i=()=>document.getElementById("sharingToken")?document.getElementById("sharingToken").value:null},30744:(t,e,n)=>{"use strict";n.d(e,{F:()=>o,Z:()=>s});var i=n(40591),r=n.n(i);const o=["info","warn","error","success"],a=t=>(e,n,i,r,o)=>{const a=e[n];return 1===a.nesting&&(a.attrSet("data-callout",t),a.attrJoin("class","callout callout-".concat(t))),o.renderToken(e,n,i,r,o)},s=t=>(o.forEach((e=>{t.use(r(),e,{render:a(e)})})),t)},40187:(t,e,n)=>{"use strict";n.d(e,{Z:()=>_});var i=n(9980),r=n.n(i),o=n(28087),a=n(17251),s=n.n(a);function l(t,e){var n;return(null===(n=t.attrGet("class"))||void 0===n?void 0:n.split(" ").includes(e))||!1}function c(t,e,n){const i=new n("bullet_list_close","ul",-1);i.block=!0;const r=new n("bullet_list_open","ul",1);r.attrSet("class","contains-task-list"),r.block=!0,r.markup=t[e].markup,t.splice(e,0,i,r)}function d(t,e,n){const i=t[e].level+1;for(let r=e+1;r{})).use((function(t){t.core.ruler.after("task-lists","split-mixed-task-lists",(t=>{const e=t.tokens;for(let n=0;n1===t.nesting&&l(t,"task-list-item")!==r));o>n&&c(e,o,t.Token)}return!1}))})).use((function(t){t.inline.ruler2.after("emphasis","underline",(t=>{const e=t.tokens;for(let t=e.length-1;t>0;t--){const n=e[t];"__"===n.markup&&("strong_open"===n.type&&(e[t].tag="u",e[t].type="u_open"),"strong_close"===n.type&&(e[t].tag="u",e[t].type="u_close"))}return!1}))})).use((function(t){t.inline.ruler.at("newline",((t,e)=>{const n=u()(t,e);return n&&t.tokens.length&&"hardbreak"===t.tokens[t.tokens.length-1].type&&t.tokens[t.tokens.length-1].attrSet("syntax"," "),n})),t.inline.ruler.at("escape",((t,e)=>{const n=g()(t,e);return n&&t.tokens.length&&"hardbreak"===t.tokens[t.tokens.length-1].type&&t.tokens[t.tokens.length-1].attrSet("syntax","\\"),n})),t.inline.ruler.after("html_inline","html_breaks",(t=>{const e=t.src.slice(t.pos).match(/^\s*/);if(e){return t.push("hardbreak","br",0).attrPush(["syntax","html"]),t.pos+=e[0].length,!0}return!1})),t.renderer.rules.hardbreak=(t,e,n)=>'
")})).use(h.Z).use((function(t){const e=/(\n(?[#\-*+>])|(?[`*\\~[\]]+))/;t.core.ruler.before("text_join","tag-markdown-syntax",(t=>{const n=new t.Token("keep_md_open","span",1);n.attrSet("class","keep-md");const i=new t.Token("keep_md_close","span",-1);for(let o=0;o'
'.concat((0,C.escapeHtml)(t[e].meta),"
"),v.renderer.rules.bullet_list_open=(t,e,n)=>(t[e].attrs=[...t[e].attrs||[],["data-bullet",t[e].markup]],v.renderer.renderToken(t,e,n));const _=v},13815:(t,e,n)=>{"use strict";n.d(e,{Z:()=>r});var i=n(25030);const r={data:()=>({$store:i.Z}),beforeMount(){void 0===this.$store?this.$store=i.Z:this.$store.hasModule("text")||this.$store.registerModule("text",i.D)}}},207:(t,e,n)=>{"use strict";n.d(e,{Z:()=>S});var i=n(79753),r=n(57691),o=n.n(r),a=n(88911),s=n(91770),l=n(52029);function c(t,e){A(t,e),e.add(t)}function d(t,e,n){return(e=function(t){var e=function(t,e){if("object"!=typeof t||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,e||"default");if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==typeof e?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function h(t,e,n){A(t,e),e.set(t,n)}function A(t,e){if(e.has(t))throw new TypeError("Cannot initialize the same private elements twice on an object")}function u(t,e,n){if(!e.has(t))throw new TypeError("attempted to get private field on non-instance");return n}function p(t,e){return function(t,e){if(e.get)return e.get.call(t);return e.value}(t,m(t,e,"get"))}function g(t,e,n){return function(t,e,n){if(e.set)e.set.call(t,n);else{if(!e.writable)throw new TypeError("attempted to set read only private field");e.value=n}}(t,m(t,e,"set"),n),n}function m(t,e,n){if(!e.has(t))throw new TypeError("attempted to "+n+" private field on non-instance");return e.get(t)}var b=new WeakMap,f=new WeakMap,C=new WeakMap,v=new WeakMap,_=new WeakMap,y=new WeakSet,x=new WeakSet,w=new WeakSet,k=new WeakSet,E=new WeakSet,j=new WeakSet,M=new WeakSet;class S{constructor(t){let{session:e,user:n,shareToken:i,currentDirectory:r,fileId:o}=t;c(this,M),c(this,j),c(this,E),c(this,k),c(this,w),c(this,x),c(this,y),h(this,b,{writable:!0,value:void 0}),h(this,f,{writable:!0,value:void 0}),h(this,C,{writable:!0,value:void 0}),h(this,v,{writable:!0,value:void 0}),h(this,_,{writable:!0,value:void 0}),d(this,"ATTACHMENT_TYPE_IMAGE","image"),d(this,"ATTACHMENT_TYPE_MEDIA","media"),g(this,b,e),g(this,f,n),g(this,C,i),g(this,v,r),o||(o=null==e?void 0:e.documentId),g(this,_,".attachments.".concat(o))}async resolve(t){var e;let n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(p(this,b)&&t.startsWith("text://")){const e=R(t,"imageFileName");return[{type:this.ATTACHMENT_TYPE_IMAGE,url:u(this,y,N).call(this,e,n)}]}if(p(this,b)&&t.startsWith(".attachments.".concat(null===(e=p(this,b))||void 0===e?void 0:e.documentId,"/"))){var i;const e=decodeURIComponent(t.replace(".attachments.".concat(null===(i=p(this,b))||void 0===i?void 0:i.documentId,"/"),"").split("?")[0]);return[{type:this.ATTACHMENT_TYPE_IMAGE,url:u(this,y,N).call(this,e,n)},{type:this.ATTACHMENT_TYPE_MEDIA,url:u(this,x,B).call(this,e),name:e}]}if(function(t){return t.startsWith("http://")||t.startsWith("https://")||t.startsWith("data:")||t.match(/^(\/index.php)?\/core\/preview/)||t.match(/^(\/index.php)?\/apps\/files_sharing\/publicpreview\//)}(t))return[{type:this.ATTACHMENT_TYPE_IMAGE,url:t}];if(function(t){return"true"===R(t,"hasPreview")}(t))return[{type:this.ATTACHMENT_TYPE_IMAGE,url:u(this,k,T).call(this,t)}];if(p(this,b)&&t.match(/^\.attachments\.\d+\//)){const e=u(this,j,P).call(this,t).replace(/\.attachments\.\d+\//,"");return[{type:this.ATTACHMENT_TYPE_IMAGE,url:u(this,E,D).call(this,t)},{type:this.ATTACHMENT_TYPE_IMAGE,url:u(this,y,N).call(this,e,n)},{type:this.ATTACHMENT_TYPE_MEDIA,url:u(this,x,B).call(this,e),name:e}]}if(!p(this,b)&&t.match(/^\.attachments\.\d+\//)){const e=u(this,j,P).call(this,t).replace(/\.attachments\.\d+\//,""),{mimeType:n,size:i}=await this.getMetadata(u(this,E,D).call(this,t));return[{type:this.ATTACHMENT_TYPE_IMAGE,url:u(this,E,D).call(this,t)},{type:this.ATTACHMENT_TYPE_MEDIA,url:this.getMimeUrl(n),metadata:{size:i},name:e}]}return[{type:this.ATTACHMENT_TYPE_IMAGE,url:u(this,E,D).call(this,t)}]}getMediaMetadataUrl(t){return p(this,f)||!p(this,C)?(0,i.generateUrl)("/apps/text/mediaMetadata?documentId={documentId}&sessionId={sessionId}&sessionToken={sessionToken}&mediaFileName={mediaFileName}",{...u(this,w,I).call(this),mediaFileName:t}):(0,i.generateUrl)("/apps/text/mediaMetadata?documentId={documentId}&sessionId={sessionId}&sessionToken={sessionToken}&mediaFileName={mediaFileName}&shareToken={shareToken}",{...u(this,w,I).call(this),mediaFileName:t,shareToken:p(this,C)})}async getMetadata(t){const e=await a.Z.head(t);return{mimeType:e.headers["content-type"],size:(0,s.sS)(e.headers["content-length"])}}getMimeUrl(t){return t?OC.MimeType.getIconUrl(t):null}}function N(t){let e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return p(this,b)?p(this,f)||!p(this,C)?(0,i.generateUrl)("/apps/text/image?documentId={documentId}&sessionId={sessionId}&sessionToken={sessionToken}&imageFileName={imageFileName}&preferRawImage={preferRawImage}",{...u(this,w,I).call(this),imageFileName:t,preferRawImage:e?1:0}):(0,i.generateUrl)("/apps/text/image?documentId={documentId}&sessionId={sessionId}&sessionToken={sessionToken}&imageFileName={imageFileName}&shareToken={shareToken}&preferRawImage={preferRawImage}",{...u(this,w,I).call(this),imageFileName:t,shareToken:p(this,C),preferRawImage:e?1:0}):u(this,E,D).call(this,"".concat(p(this,_),"/").concat(t))}function B(t){return p(this,f)||!p(this,C)?(0,i.generateUrl)("/apps/text/mediaPreview?documentId={documentId}&sessionId={sessionId}&sessionToken={sessionToken}&mediaFileName={mediaFileName}",{...u(this,w,I).call(this),mediaFileName:t}):(0,i.generateUrl)("/apps/text/mediaPreview?documentId={documentId}&sessionId={sessionId}&sessionToken={sessionToken}&mediaFileName={mediaFileName}&shareToken={shareToken}",{...u(this,w,I).call(this),mediaFileName:t,shareToken:p(this,C)})}function I(){return p(this,b)?{documentId:p(this,b).documentId,sessionId:p(this,b).id,sessionToken:p(this,b).token}:{}}function T(t){const e=R(t,"fileId"),n=u(this,M,O).call(this,t),r="file=".concat(encodeURIComponent(n))+"&x=1024&y=1024&a=true";return p(this,f)&&e?(0,i.generateUrl)("/core/preview?fileId=".concat(e,"&").concat(r)):p(this,f)?(0,i.generateUrl)("/core/preview.png?".concat(r)):p(this,C)?(0,i.generateUrl)("/apps/files_sharing/publicpreview/".concat(p(this,C),"?").concat(r)):(l.k.error("No way to authenticate image retrival - need to be logged in or provide a token"),t)}function D(t){if(p(this,f)){const e=p(this,f).uid,n=u(this,M,O).call(this,t).split("/").map(encodeURIComponent).join("/");return(0,i.generateRemoteUrl)("dav/files/".concat(e).concat(n))}const e=u(this,M,O).call(this,t).split("/"),n=e.pop(),r=e.join("/");return(0,i.generateUrl)("/s/{token}/download?path={dirname}&files={basename}",{token:p(this,C),basename:n,dirname:r})}function P(t){return t.startsWith("text://")?[p(this,_),R(t,"imageFileName")].join("/"):decodeURI(t.split("?")[0])}function O(t){const e=[p(this,v),u(this,j,P).call(this,t)].join("/");return o()(e)}function R(t,e){const n=t.split("?")[1];if(void 0===n)return;const i=n.split(/[&#]/);if(void 0!==i)for(let t=0;t{"use strict";n.d(e,{r2:()=>et,jA:()=>tt,QS:()=>nt,TY:()=>J,_U:()=>rt});var i=n(59391),r=n(20296),o=n.n(r),a=n(52029),s=n(88911),l=n(79753);function c(t,e){h(t,e),e.add(t)}function d(t,e,n){h(t,e),e.set(t,n)}function h(t,e){if(e.has(t))throw new TypeError("Cannot initialize the same private elements twice on an object")}function A(t,e){return function(t,e){if(e.get)return e.get.call(t);return e.value}(t,g(t,e,"get"))}function u(t,e,n){if(!e.has(t))throw new TypeError("attempted to get private field on non-instance");return n}function p(t,e,n){return function(t,e,n){if(e.set)e.set.call(t,n);else{if(!e.writable)throw new TypeError("attempted to set read only private field");e.value=n}}(t,g(t,e,"set"),n),n}function g(t,e,n){if(!e.has(t))throw new TypeError("attempted to "+n+" private field on non-instance");return e.get(t)}class m extends Error{constructor(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"Close has already been called on the connection";for(var e=arguments.length,n=new Array(e>1?e-1:0),i=1;i{let{data:e}=t;p(this,w,e)}))}uploadAttachment(t){const e=new FormData;e.append("file",t);const n=P("attachment/upload")+"?documentId="+encodeURIComponent(A(this,x).id)+"&sessionId="+encodeURIComponent(A(this,w).id)+"&sessionToken="+encodeURIComponent(A(this,w).token)+"&shareToken="+encodeURIComponent(A(this,j).shareToken||"");return u(this,S,T).call(this,n,e,{headers:{"Content-Type":"multipart/form-data"}})}insertAttachmentFile(t){return u(this,S,T).call(this,P("attachment/filepath"),{documentId:A(this,x).id,sessionId:A(this,w).id,sessionToken:A(this,w).token,filePath:t})}close(){const t=u(this,S,T).call(this,u(this,N,D).call(this,"session/close"),A(this,M));return this.closed=!0,t}}function I(){return{documentId:A(this,x).id,sessionId:A(this,w).id,sessionToken:A(this,w).token,token:A(this,j).shareToken}}function T(){return this.closed?Promise.reject(new m):s.Z.post(...arguments)}function D(t){return P(t,!!A(this,M).token)}function P(t){let e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const n=(0,l.generateUrl)("/apps/text");return e?"".concat(n,"/public/").concat(t):"".concat(n,"/").concat(t)}const O=class{constructor(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};c(this,f),d(this,b,{writable:!0,value:void 0}),p(this,b,t)}open(t){let{fileId:e}=t;return s.Z.put(u(this,f,C).call(this,"session/create"),{fileId:e,filePath:A(this,b).filePath,token:A(this,b).shareToken,guestName:A(this,b).guestName,forceRecreate:A(this,b).forceRecreate}).then((t=>new B(t,A(this,b))))}};function R(t,e,n){!function(t,e){if(e.has(t))throw new TypeError("Cannot initialize the same private elements twice on an object")}(t,e),e.set(t,n)}function L(t,e){return function(t,e){if(e.get)return e.get.call(t);return e.value}(t,Z(t,e,"get"))}function $(t,e,n){return function(t,e,n){if(e.set)e.set.call(t,n);else{if(!e.writable)throw new TypeError("attempted to set read only private field");e.value=n}}(t,Z(t,e,"set"),n),n}function Z(t,e,n){if(!e.has(t))throw new TypeError("attempted to "+n+" private field on non-instance");return e.get(t)}var z=new WeakMap,U=new WeakMap,F=new WeakMap,H=new WeakMap,G=new WeakMap,q=new WeakMap,W=new WeakMap;const K=class{constructor(t,e){R(this,z,{writable:!0,value:void 0}),R(this,U,{writable:!0,value:void 0}),R(this,F,{writable:!0,value:void 0}),R(this,H,{writable:!0,value:void 0}),R(this,G,{writable:!0,value:void 0}),R(this,q,{writable:!0,value:void 0}),R(this,W,{writable:!0,value:void 0}),$(this,z,t),$(this,U,e),$(this,H,300),$(this,G,0),$(this,F,0)}connect(){this.fetcher>0?console.error("Trying to connect, but already connected"):($(this,W,!1),this.fetcher=setInterval(this._fetchSteps.bind(this),50),document.addEventListener("visibilitychange",this.visibilitychange.bind(this)))}async _fetchSteps(){if(L(this,q))return;const t=Date.now();if(!(L(this,F)>t-L(this,H)))if(this.fetcher){$(this,q,!0);try{a.k.debug("[PollingBackend] Fetching steps",L(this,z).version);const t=await L(this,U).sync({version:L(this,z).version,force:!1,manualSave:!1});this._handleResponse(t)}catch(t){this._handleError(t)}finally{$(this,F,Date.now()),$(this,q,!1)}}else console.error("No inverval but triggered")}_handleResponse(t){let{data:e}=t;const{document:n,sessions:i}=e;if($(this,G,0),L(this,z).emit("change",{document:n,sessions:i}),L(this,z)._receiveSteps(e),0===e.steps.length){if(L(this,W)||$(this,W,!0),L(this,z).checkIdle())return;const t=Date.now()-9e4;return i.filter((e=>1e3*e.lastContact>t)).length<2?this.maximumRefetchTimer():this.increaseRefetchTimer(),void L(this,z).emit("stateChange",{initialLoading:!0})}L(this,W)&&this.resetRefetchTimer()}_handleError(t){var e,n;t.response&&"ECONNABORTED"!==t.code?409===t.response.status?(this._handleResponse(t.response),a.k.error("Conflict during file save, please resolve"),L(this,z).emit("error",{type:nt.SAVE_COLLISSION,data:{outsideChange:t.response.data.outsideChange}})):403===t.response.status||404===t.response.status?(L(this,z).emit("error",{type:nt.SOURCE_NOT_FOUND,data:{}}),this.disconnect()):503===t.response.status?(this.increaseRefetchTimer(),L(this,z).emit("error",{type:nt.CONNECTION_FAILED,data:{}}),a.k.error("Failed to fetch steps due to unavailable service",{error:t})):(this.disconnect(),L(this,z).emit("error",{type:nt.CONNECTION_FAILED,data:{}}),a.k.error("Failed to fetch steps due to other reason",{error:t})):($(this,G,(e=L(this,G),n=e++,e)),n>=5?(a.k.error("[PollingBackend:fetchSteps] Network error when fetching steps, emitting CONNECTION_FAILED"),L(this,z).emit("error",{type:nt.CONNECTION_FAILED,data:{}})):a.k.error("[PollingBackend:fetchSteps] Network error when fetching steps, retry ".concat(L(this,G))))}disconnect(){clearInterval(this.fetcher),this.fetcher=0,document.removeEventListener("visibilitychange",this.visibilitychange.bind(this))}resetRefetchTimer(){$(this,H,300)}increaseRefetchTimer(){$(this,H,Math.min(2*L(this,H),5e3))}maximumRefetchTimer(){$(this,H,5e3)}visibilitychange(){"hidden"===document.visibilityState?$(this,H,6e4):this.resetRefetchTimer()}};function V(t,e,n){!function(t,e){if(e.has(t))throw new TypeError("Cannot initialize the same private elements twice on an object")}(t,e),e.set(t,n)}function Y(t,e){return function(t,e){if(e.get)return e.get.call(t);return e.value}(t,X(t,e,"get"))}function Q(t,e,n){return function(t,e,n){if(e.set)e.set.call(t,n);else{if(!e.writable)throw new TypeError("attempted to set read only private field");e.value=n}}(t,X(t,e,"set"),n),n}function X(t,e,n){if(!e.has(t))throw new TypeError("attempted to "+n+" private field on non-instance");return e.get(t)}const J=1440,tt=60,et=90,nt={SAVE_COLLISSION:0,PUSH_FAILURE:1,LOAD_ERROR:2,CONNECTION_FAILED:3,SOURCE_NOT_FOUND:4};var it=new WeakMap;class rt{constructor(t){let{serialize:e,getDocumentState:n,...r}=t;return V(this,it,{writable:!0,value:void 0}),this._bus=(0,i.Z)(),this.serialize=e,this.getDocumentState=n,this._api=new O(r),this.connection=null,this.sessions=[],this.steps=[],this.stepClientIDs=[],this.lastStepPush=Date.now(),this.version=null,this.sending=!1,Q(this,it,null),this.autosave=o()(this._autosave.bind(this),3e4),this}async open(t){let{fileId:e,initialSession:n}=t;const i=t=>{let{sessions:e}=t;this.sessions=e};this.on("change",i);const r=n?Promise.resolve(new B({data:n},{})):this._api.open({fileId:e}).catch((t=>this._emitError(t)));this.connection=await r,this.connection?(this.backend=new K(this,this.connection),this.version=this.connection.docStateVersion,this.emit("opened",{...this.connection.state,version:this.version}),this.emit("loaded",{...this.connection.state,version:this.version})):this.off("change",i)}startSync(){this.backend.connect()}syncUp(){this.backend.resetRefetchTimer()}_emitError(t){t.response&&"ECONNABORTED"!==t.code?this.emit("error",{type:nt.LOAD_ERROR,data:t.response}):this.emit("error",{type:nt.CONNECTION_FAILED,data:{}})}updateSession(t){if(this.connection.isPublic)return this.connection.update(t).catch((t=>(a.k.error("Failed to update the session",{error:t}),Promise.reject(t))))}sendSteps(t){if(!Y(this,it))return new Promise(((e,n)=>{Q(this,it,setInterval((()=>{this.connection&&!this.sending&&this.sendStepsNow(t).then(e).catch(n)}),200))}))}sendStepsNow(t){this.sending=!0,clearInterval(Y(this,it)),Q(this,it,null);const e=t();return e.steps.length>0&&this.emit("stateChange",{dirty:!0}),this.connection.push(e).then((t=>{this.sending=!1})).catch((t=>{const{response:n,code:i}=t;var r;(this.sending=!1,n&&"ECONNABORTED"!==i||this.emit("error",{type:nt.CONNECTION_FAILED,data:{}}),403===(null==n?void 0:n.status))&&(e.document||a.k.error("failed to write to document - not allowed"),(null===(r=n.data.document)||void 0===r?void 0:r.currentVersion)===this.version&&(this.emit("error",{type:nt.PUSH_FAILURE,data:{}}),OC.Notification.showTemporary("Changes could not be sent yet")));throw new Error("Failed to apply steps. Retry!",{cause:t})}))}_receiveSteps(t){let{steps:e,document:n,sessions:i}=t;const r=i.filter((t=>t.lastContact>Math.floor(Date.now()/1e3)-et)).filter((t=>t.lastAwarenessMessage)).map((t=>({step:t.lastAwarenessMessage,clientId:t.clientId}))),o=[...r];this.steps=[...this.steps,...r.map((t=>t.step))];for(let t=0;t{this.steps.push(n),o.push({step:n,clientID:e[t].sessionId})})):a.k.error("Invalid step data, skipping step",{step:e[t]})}this.lastStepPush=Date.now(),this.emit("sync",{steps:o,document:this.connection.document,version:this.version})}checkIdle(){return(Date.now()-this.lastStepPush)/1e3/60>J&&(a.k.debug("[SyncService] Document is idle for ".concat(this.IDLE_TIMEOUT," minutes, suspending connection")),this.emit("idle"),!0)}_getContent(){return this.serialize()}async save(){let{force:t=!1,manualSave:e=!0}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};a.k.debug("[SyncService] saving",arguments[0]);try{const n=await this.connection.sync({version:this.version,autosaveContent:this._getContent(),documentState:this.getDocumentState(),force:t,manualSave:e});this.emit("stateChange",{dirty:!1}),this.connection.document.lastSavedVersionTime=Date.now()/1e3,a.k.debug("[SyncService] saved",n);const{document:i,sessions:r}=n.data;this.emit("save",{document:i,sessions:r}),this.autosave.clear()}catch(t){a.k.error("Failed to save document.",{error:t})}}forceSave(){return this.save({force:!0})}_autosave(){return this.save({manualSave:!1})}async close(){var t;return null===(t=this.backend)||void 0===t||t.disconnect(),this._close()}_close(){return null===this.connection?Promise.resolve():(this.backend.disconnect(),this.connection.close())}uploadAttachment(t){return this.connection.uploadAttachment(t)}insertAttachmentFile(t){return this.connection.insertAttachmentFile(t)}on(t,e){return this._bus.on(t,e),this}off(t,e){return this._bus.off(t,e),this}emit(t,e){this._bus.emit(t,e)}}},25030:(t,e,n)=>{"use strict";n.d(e,{Z:()=>m,D:()=>g});var i=n(20144),r=n(20629),o=n(62556);const a="SET_VIEW_WIDTH",s="SET_SHOW_AUTHOR_ANNOTATIONS",l="SET_CURRENT_SESSION",c="SET_HEADINGS";var d=n(20296),h=n.n(d);const A=()=>document.documentElement.clientWidth,u=t=>{let{commit:e}=t;const n=h()((()=>{e("text/".concat(a),A())}),100);window.addEventListener("resize",n)},p=(0,o.getBuilder)("text").persist().build();i.default.use(r.ZP);const g={state:{showAuthorAnnotations:"true"===p.getItem("showAuthorAnnotations"),currentSession:p.getItem("currentSession"),viewWidth:A(),headings:Object.freeze([])},mutations:{[a](t,e){t.viewWidth=e},[s](t,e){t.showAuthorAnnotations=e,p.setItem("showAuthorAnnotations",""+e)},[l](t,e){t.currentSession=e,p.setItem("currentSession",e)},[c](t,e){if(t.headings.length!==e.length)return void(t.headings=Object.freeze(e));const n=t.headings,i=e.map(((t,e)=>{const i=n[e].level;return Object.freeze({...t,previous:i})}));t.headings=Object.freeze(i)}},actions:{setShowAuthorAnnotations(t,e){let{commit:n}=t;n(s,e)},setCurrentSession(t,e){let{commit:n}=t;n(l,e)},setHeadings(t,e){let{commit:n}=t;n(c,e)}}},m=new r.yh({plugins:[u],modules:{text:{namespaced:!0,...g}}})},97646:(t,e,n)=>{"use strict";n.d(e,{Z:()=>s});var i=n(87537),r=n.n(i),o=n(23645),a=n.n(o)()(r());a.push([t.id,".text-menubar .entry-action.is-active:not(.entry-action-item),.v-popper__inner .entry-action.is-active:not(.entry-action-item),.text-menubar button.entry-action__button.is-active,.v-popper__inner button.entry-action__button.is-active{opacity:1;background-color:var(--color-primary-light);border-radius:50%}.text-menubar .entry-action.is-active:not(.entry-action-item) .material-design-icon>svg,.v-popper__inner .entry-action.is-active:not(.entry-action-item) .material-design-icon>svg,.text-menubar button.entry-action__button.is-active .material-design-icon>svg,.v-popper__inner button.entry-action__button.is-active .material-design-icon>svg{fill:var(--color-primary)}.text-menubar button.entry-action__button,.v-popper__inner button.entry-action__button{height:44px;margin:0;border:0;position:relative;color:var(--color-main-text);background-color:rgba(0,0,0,0);vertical-align:top;box-shadow:none;padding:0}.text-menubar button.entry-action__button p,.v-popper__inner button.entry-action__button p{padding:0}.text-menubar button.entry-action__button:is(li.entry-action-item button),.v-popper__inner button.entry-action__button:is(li.entry-action-item button){padding:0 .5em 0 0}.text-menubar button.entry-action__button:not(li.entry-action-item button),.v-popper__inner button.entry-action__button:not(li.entry-action-item button){width:44px}.text-menubar button.entry-action__button:hover,.text-menubar button.entry-action__button:focus,.text-menubar button.entry-action__button:active,.v-popper__inner button.entry-action__button:hover,.v-popper__inner button.entry-action__button:focus,.v-popper__inner button.entry-action__button:active{background-color:var(--color-background-dark)}.text-menubar button.entry-action__button:hover:not(:disabled),.text-menubar button.entry-action__button:focus:not(:disabled),.text-menubar button.entry-action__button:active:not(:disabled),.v-popper__inner button.entry-action__button:hover:not(:disabled),.v-popper__inner button.entry-action__button:focus:not(:disabled),.v-popper__inner button.entry-action__button:active:not(:disabled){box-shadow:var(--color-primary)}.text-menubar button.entry-action__button:hover,.text-menubar button.entry-action__button:focus,.v-popper__inner button.entry-action__button:hover,.v-popper__inner button.entry-action__button:focus{opacity:1}.text-menubar button.entry-action__button:focus-visible,.v-popper__inner button.entry-action__button:focus-visible{box-shadow:var(--color-primary)}.text-menubar .entry-action.entry-action-item.is-active,.v-popper__inner .entry-action.entry-action-item.is-active{background-color:var(--color-primary-light);border-radius:var(--border-radius-large)}.text-menubar .button-vue svg,.v-popper__inner .button-vue svg{fill:var(--color-main-text)}.text-menubar .action-item__menutoggle.action-item__menutoggle--with-icon-slot,.v-popper__inner .action-item__menutoggle.action-item__menutoggle--with-icon-slot{opacity:1}","",{version:3,sources:["webpack://./src/components/Menu/ActionEntry.scss"],names:[],mappings:"AAAA,0OACC,SAAA,CACA,2CAAA,CACA,iBAAA,CACA,kVACC,yBAAA,CAKD,uFACC,WAAA,CACA,QAAA,CACA,QAAA,CAEA,iBAAA,CACA,4BAAA,CACA,8BAAA,CACA,kBAAA,CACA,eAAA,CACA,SAAA,CAEA,2FACC,SAAA,CAGD,uJACC,kBAAA,CAGD,yJACC,UAAA,CAGD,2SAGC,6CAAA,CACA,qYACC,+BAAA,CAIF,sMAEC,SAAA,CAED,mHACC,+BAAA,CAaD,mHACC,2CAAA,CACA,wCAAA,CAKD,+DACC,2BAAA,CAIF,iKACC,SAAA",sourcesContent:["%text__is-active-item-btn {\n\topacity: 1;\n\tbackground-color: var(--color-primary-light);\n\tborder-radius: 50%;\n\t.material-design-icon > svg {\n\t\tfill: var(--color-primary);\n\t}\n}\n\n.text-menubar, .v-popper__inner {\n\tbutton.entry-action__button {\n\t\theight: 44px;\n\t\tmargin: 0;\n\t\tborder: 0;\n\t\t// opacity: 0.5;\n\t\tposition: relative;\n\t\tcolor: var(--color-main-text);\n\t\tbackground-color: transparent;\n\t\tvertical-align: top;\n\t\tbox-shadow: none;\n\t\tpadding: 0;\n\n\t\tp {\n\t\t\tpadding: 0;\n\t\t}\n\n\t\t&:is(li.entry-action-item button) {\n\t\t\tpadding: 0 0.5em 0 0;\n\t\t}\n\n\t\t&:not(li.entry-action-item button) {\n\t\t\twidth: 44px;\n\t\t}\n\n\t\t&:hover,\n\t\t&:focus,\n\t\t&:active {\n\t\t\tbackground-color: var(--color-background-dark);\n\t\t\t&:not(:disabled) {\n\t\t\t\tbox-shadow: var(--color-primary);\n\t\t\t}\n\t\t}\n\n\t\t&:hover,\n\t\t&:focus {\n\t\t\topacity: 1;\n\t\t}\n\t\t&:focus-visible {\n\t\t\tbox-shadow: var(--color-primary);\n\t\t}\n\n\t\t&.is-active {\n\t\t\t@extend %text__is-active-item-btn;\n\t\t}\n\t}\n\n\t.entry-action.is-active:not(.entry-action-item) {\n\t\t@extend %text__is-active-item-btn;\n\t}\n\n\t.entry-action.entry-action-item {\n\t\t&.is-active {\n\t\t\tbackground-color: var(--color-primary-light);\n\t\t\tborder-radius: var(--border-radius-large);\n\t\t}\n\t}\n\n\t.button-vue {\n\t\tsvg {\n\t\t\tfill: var(--color-main-text);\n\t\t}\n\t}\n\n\t.action-item__menutoggle.action-item__menutoggle--with-icon-slot {\n\t\topacity: 1;\n\t}\n}\n"],sourceRoot:""}]);const s=a},12866:(t,e,n)=>{"use strict";n.d(e,{Z:()=>s});var i=n(87537),r=n.n(i),o=n(23645),a=n.n(o)()(r());a.push([t.id,".editor__content[data-v-a4201d8a]{max-width:var(--text-editor-max-width);margin:auto;position:relative;width:100%}.text-editor__content-wrapper[data-v-a4201d8a]{--side-width: calc((100% - var(--text-editor-max-width)) / 2);display:grid;grid-template-columns:1fr auto}.text-editor__content-wrapper.--show-outline[data-v-a4201d8a]{grid-template-columns:var(--side-width) auto var(--side-width)}.text-editor__content-wrapper .text-editor__content-wrapper__left[data-v-a4201d8a],.text-editor__content-wrapper .text-editor__content-wrapper__right[data-v-a4201d8a]{height:100%;position:relative}","",{version:3,sources:["webpack://./src/components/BaseReader.vue"],names:[],mappings:"AACA,kCACC,sCAAA,CACA,WAAA,CACA,iBAAA,CACA,UAAA,CAGD,+CACC,6DAAA,CACA,YAAA,CACA,8BAAA,CACA,8DACC,8DAAA,CAED,uKAEC,WAAA,CACA,iBAAA",sourcesContent:["\n.editor__content {\n\tmax-width: var(--text-editor-max-width);\n\tmargin: auto;\n\tposition: relative;\n\twidth: 100%;\n}\n\n.text-editor__content-wrapper {\n\t--side-width: calc((100% - var(--text-editor-max-width)) / 2);\n\tdisplay: grid;\n\tgrid-template-columns: 1fr auto;\n\t&.--show-outline {\n\t\tgrid-template-columns: var(--side-width) auto var(--side-width);\n\t}\n\t.text-editor__content-wrapper__left,\n\t.text-editor__content-wrapper__right {\n\t\theight: 100%;\n\t\tposition: relative;\n\t}\n}\n"],sourceRoot:""}]);const s=a},75326:(t,e,n)=>{"use strict";n.d(e,{Z:()=>s});var i=n(87537),r=n.n(i),o=n(23645),a=n.n(o)()(r());a.push([t.id,"#resolve-conflicts[data-v-44412072]{display:flex;width:100%;margin:auto;padding:20px 0}#resolve-conflicts button[data-v-44412072]{margin:auto}","",{version:3,sources:["webpack://./src/components/CollisionResolveDialog.vue"],names:[],mappings:"AACA,oCACC,YAAA,CACA,UAAA,CACA,WAAA,CACA,cAAA,CAEA,2CACC,WAAA",sourcesContent:["\n#resolve-conflicts {\n\tdisplay: flex;\n\twidth: 100%;\n\tmargin: auto;\n\tpadding: 20px 0;\n\n\tbutton {\n\t\tmargin: auto;\n\t}\n}\n"],sourceRoot:""}]);const s=a},920:(t,e,n)=>{"use strict";n.d(e,{Z:()=>s});var i=n(87537),r=n.n(i),o=n(23645),a=n.n(o)()(r());a.push([t.id,".modal-container .text-editor[data-v-23f89298]{top:0;height:calc(100vh - var(--header-height))}.text-editor[data-v-23f89298]{display:block;width:100%;max-width:100%;height:100%;left:0;margin:0 auto;position:relative;background-color:var(--color-main-background)}.text-editor .text-editor__wrapper.has-conflicts[data-v-23f89298]{height:calc(100% - 50px)}#body-public[data-v-23f89298]{height:auto}#files-public-content .text-editor[data-v-23f89298]{top:0;width:100%}#files-public-content .text-editor .text-editor__main[data-v-23f89298]{overflow:auto;z-index:20}#files-public-content .text-editor .has-conflicts .text-editor__main[data-v-23f89298]{padding-top:0}.menubar-placeholder[data-v-23f89298],.text-editor--readonly-bar[data-v-23f89298]{position:fixed;position:-webkit-sticky;position:sticky;top:0;opacity:0;visibility:hidden;height:44px;padding-top:3px;padding-bottom:3px}.text-editor--readonly-bar[data-v-23f89298],.menubar-placeholder--with-slot[data-v-23f89298]{opacity:unset;visibility:unset;z-index:50;max-width:var(--text-editor-max-width);margin:auto;width:100%;background-color:var(--color-main-background)}","",{version:3,sources:["webpack://./src/components/Editor.vue"],names:[],mappings:"AACA,+CACC,KAAA,CACA,yCAAA,CAGD,8BACC,aAAA,CACA,UAAA,CACA,cAAA,CACA,WAAA,CACA,MAAA,CACA,aAAA,CACA,iBAAA,CACA,6CAAA,CAGD,kEACC,wBAAA,CAGD,8BACC,WAAA,CAIA,oDACC,KAAA,CACA,UAAA,CAEA,uEACC,aAAA,CACA,UAAA,CAED,sFACC,aAAA,CAKH,kFAEC,cAAA,CACA,uBAAA,CACA,eAAA,CACA,KAAA,CACA,SAAA,CACA,iBAAA,CACA,WAAA,CACA,eAAA,CACA,kBAAA,CAGD,6FAEC,aAAA,CACA,gBAAA,CAEA,UAAA,CACA,sCAAA,CACA,WAAA,CACA,UAAA,CACA,6CAAA",sourcesContent:["\n.modal-container .text-editor {\n\ttop: 0;\n\theight: calc(100vh - var(--header-height));\n}\n\n.text-editor {\n\tdisplay: block;\n\twidth: 100%;\n\tmax-width: 100%;\n\theight: 100%;\n\tleft: 0;\n\tmargin: 0 auto;\n\tposition: relative;\n\tbackground-color: var(--color-main-background);\n}\n\n.text-editor .text-editor__wrapper.has-conflicts {\n\theight: calc(100% - 50px);\n}\n\n#body-public {\n\theight: auto;\n}\n\n#files-public-content {\n\t.text-editor {\n\t\ttop: 0;\n\t\twidth: 100%;\n\n\t\t.text-editor__main {\n\t\t\toverflow: auto;\n\t\t\tz-index: 20;\n\t\t}\n\t\t.has-conflicts .text-editor__main {\n\t\t\tpadding-top: 0;\n\t\t}\n\t}\n}\n\n.menubar-placeholder,\n.text-editor--readonly-bar {\n\tposition: fixed;\n\tposition: -webkit-sticky;\n\tposition: sticky;\n\ttop: 0;\n\topacity: 0;\n\tvisibility: hidden;\n\theight: 44px; // important for mobile so that the buttons are always inside the container\n\tpadding-top:3px;\n\tpadding-bottom: 3px;\n}\n\n.text-editor--readonly-bar,\n.menubar-placeholder--with-slot {\n\topacity: unset;\n\tvisibility: unset;\n\n\tz-index: 50;\n\tmax-width: var(--text-editor-max-width);\n\tmargin: auto;\n\twidth: 100%;\n\tbackground-color: var(--color-main-background);\n}\n"],sourceRoot:""}]);const s=a},48321:(t,e,n)=>{"use strict";n.d(e,{Z:()=>A});var i=n(87537),r=n.n(i),o=n(23645),a=n.n(o),s=n(61667),l=n.n(s),c=new URL(n(64989),n.b),d=a()(r()),h=l()(c);d.push([t.id,':root{--text-editor-max-width: 670px }.modal-container .text-editor{position:absolute}.ProseMirror-hideselection{caret-color:rgba(0,0,0,0);color:var(--color-main-text)}.ProseMirror-hideselection *::selection{background:rgba(0,0,0,0);color:var(--color-main-text)}.ProseMirror-hideselection *::-moz-selection{background:rgba(0,0,0,0);color:var(--color-main-text)}.ProseMirror-selectednode{outline:2px solid #8cf}li.ProseMirror-selectednode{outline:none}li.ProseMirror-selectednode:after{content:"";position:absolute;left:-32px;right:-2px;top:-2px;bottom:-2px;border:2px solid #8cf;pointer-events:none}.has-conflicts .ProseMirror-menubar,.text-editor__wrapper.icon-loading .ProseMirror-menubar{display:none}.ProseMirror-gapcursor{display:none;pointer-events:none;position:absolute}.ProseMirror-gapcursor:after{content:"";display:block;position:absolute;top:-2px;width:20px;border-top:1px solid var(--color-main-text);animation:ProseMirror-cursor-blink 1.1s steps(2, start) infinite}@keyframes ProseMirror-cursor-blink{to{visibility:hidden}}.animation-rotate{animation:rotate var(--animation-duration, 0.8s) linear infinite}[data-handler=text]{background-color:var(--color-main-background);border-top:3px solid var(--color-primary-element)}[data-handler=text] .modal-title{font-weight:bold}@keyframes fadeInDown{from{opacity:0;transform:translate3d(0, -100%, 0)}to{opacity:1;transform:translate3d(0, 0, 0)}}@keyframes fadeInLeft{from{opacity:0;transform:translate3d(-100%, 0, 0)}to{opacity:1;transform:translate3d(0, 0, 0)}}.fadeInLeft{animation-name:fadeInLeft}@media print{@page{size:A4;margin:2.5cm 2cm 2cm 2.5cm}body{position:absolute;overflow:visible !important}#viewer[data-handler=text]{border:none;width:100% !important;position:absolute !important}#viewer[data-handler=text] .modal-header{display:none !important}#viewer[data-handler=text] .modal-container{top:0px;height:fit-content}.text-editor .text-menubar{display:none !important}.text-editor .action-item{display:none !important}.text-editor .editor__content{max-width:100%}.text-editor .text-editor__wrapper{height:fit-content;position:unset}.text-editor div.ProseMirror h1,.text-editor div.ProseMirror h2,.text-editor div.ProseMirror h3,.text-editor div.ProseMirror h4,.text-editor div.ProseMirror h5{break-after:avoid}.text-editor div.ProseMirror .image,.text-editor div.ProseMirror img,.text-editor div.ProseMirror table{break-inside:avoid-page;max-width:90% !important;margin:5vw auto 5vw 5% !important}.text-editor div.ProseMirror th{color:#000 !important;font-weight:bold !important;border-width:0 1px 2px 0 !important;border-color:gray !important;border-style:none solid solid none !important}.text-editor div.ProseMirror th:last-of-type{border-width:0 0 2px 0 !important}.text-editor div.ProseMirror td{border-style:none solid none none !important;border-width:1px !important;border-color:gray !important}.text-editor div.ProseMirror td:last-of-type{border:none !important}.menubar-placeholder,.text-editor--readonly-bar{display:none}.text-editor__content-wrapper.--show-outline{display:block}.text-editor__content-wrapper .editor--outline{width:auto;height:auto;overflow:unset;position:relative}.text-editor__content-wrapper .editor--outline__btn-close{display:none}}.text-editor__wrapper div.ProseMirror{height:100%;position:relative;word-wrap:break-word;white-space:pre-wrap;-webkit-font-variant-ligatures:none;font-variant-ligatures:none;padding:4px 8px 200px 14px;line-height:150%;font-size:var(--default-font-size);outline:none;--table-color-border: var(--color-border);--table-color-heading: var(--color-text-maxcontrast);--table-color-heading-border: var(--color-border-dark);--table-color-background: var(--color-main-background);--table-color-background-hover: var(--color-primary-light);--table-border-radius: var(--border-radius)}.text-editor__wrapper div.ProseMirror :target{scroll-margin-top:50px}.text-editor__wrapper div.ProseMirror[contenteditable=true],.text-editor__wrapper div.ProseMirror[contenteditable=false],.text-editor__wrapper div.ProseMirror [contenteditable=true],.text-editor__wrapper div.ProseMirror [contenteditable=false]{width:100%;background-color:rgba(0,0,0,0);color:var(--color-main-text);opacity:1;-webkit-user-select:text;user-select:text;font-size:var(--default-font-size)}.text-editor__wrapper div.ProseMirror[contenteditable=true]:not(.collaboration-cursor__caret),.text-editor__wrapper div.ProseMirror[contenteditable=false]:not(.collaboration-cursor__caret),.text-editor__wrapper div.ProseMirror [contenteditable=true]:not(.collaboration-cursor__caret),.text-editor__wrapper div.ProseMirror [contenteditable=false]:not(.collaboration-cursor__caret){border:none !important}.text-editor__wrapper div.ProseMirror[contenteditable=true]:focus,.text-editor__wrapper div.ProseMirror[contenteditable=true]:focus-visible,.text-editor__wrapper div.ProseMirror[contenteditable=false]:focus,.text-editor__wrapper div.ProseMirror[contenteditable=false]:focus-visible,.text-editor__wrapper div.ProseMirror [contenteditable=true]:focus,.text-editor__wrapper div.ProseMirror [contenteditable=true]:focus-visible,.text-editor__wrapper div.ProseMirror [contenteditable=false]:focus,.text-editor__wrapper div.ProseMirror [contenteditable=false]:focus-visible{box-shadow:none !important}.text-editor__wrapper div.ProseMirror ul[data-type=taskList]{margin-left:1px}.text-editor__wrapper div.ProseMirror .checkbox-item{display:flex;align-items:start}.text-editor__wrapper div.ProseMirror .checkbox-item input[type=checkbox]{display:none}.text-editor__wrapper div.ProseMirror .checkbox-item:before{content:"";vertical-align:middle;margin:3px 6px 3px 2px;border:1px solid var(--color-text-maxcontrast);display:block;border-radius:var(--border-radius);height:14px;width:14px;box-shadow:none !important;background-position:center;cursor:pointer;left:9px}.text-editor__wrapper div.ProseMirror .checkbox-item.checked:before{background-image:url('+h+');background-color:var(--color-primary-element);border-color:var(--color-primary-element)}.text-editor__wrapper div.ProseMirror .checkbox-item.checked label{color:var(--color-text-maxcontrast);text-decoration:line-through}.text-editor__wrapper div.ProseMirror .checkbox-item label{display:block;flex-grow:1;max-width:calc(100% - 28px)}.text-editor__wrapper div.ProseMirror>*:first-child{margin-top:10px}.text-editor__wrapper div.ProseMirror>h1:first-child,.text-editor__wrapper div.ProseMirror h2:first-child,.text-editor__wrapper div.ProseMirror h3:first-child,.text-editor__wrapper div.ProseMirror h4:first-child,.text-editor__wrapper div.ProseMirror h5:first-child,.text-editor__wrapper div.ProseMirror h6:first-child{margin-top:0}.text-editor__wrapper div.ProseMirror a{color:var(--color-primary-element);text-decoration:underline;padding:.5em 0}.text-editor__wrapper div.ProseMirror p .paragraph-content{margin-bottom:1em;line-height:150%}.text-editor__wrapper div.ProseMirror em{font-style:italic}.text-editor__wrapper div.ProseMirror h1,.text-editor__wrapper div.ProseMirror h2,.text-editor__wrapper div.ProseMirror h3,.text-editor__wrapper div.ProseMirror h4,.text-editor__wrapper div.ProseMirror h5,.text-editor__wrapper div.ProseMirror h6{font-weight:600;line-height:1.1em;margin-top:24px;margin-bottom:12px;color:var(--color-main-text)}.text-editor__wrapper div.ProseMirror h1{font-size:36px}.text-editor__wrapper div.ProseMirror h2{font-size:30px}.text-editor__wrapper div.ProseMirror h3{font-size:24px}.text-editor__wrapper div.ProseMirror h4{font-size:21px}.text-editor__wrapper div.ProseMirror h5{font-size:17px}.text-editor__wrapper div.ProseMirror h6{font-size:var(--default-font-size)}.text-editor__wrapper div.ProseMirror img{cursor:default;max-width:100%}.text-editor__wrapper div.ProseMirror hr{padding:2px 0;border:none;margin:2em 0;width:100%}.text-editor__wrapper div.ProseMirror hr:after{content:"";display:block;height:1px;background-color:var(--color-border-dark);line-height:2px}.text-editor__wrapper div.ProseMirror pre{white-space:pre-wrap;background-color:var(--color-background-dark);border-radius:var(--border-radius);padding:1em 1.3em;margin-bottom:1em}.text-editor__wrapper div.ProseMirror pre::before{content:attr(data-language);text-transform:uppercase;display:block;text-align:right;font-weight:bold;font-size:.6rem}.text-editor__wrapper div.ProseMirror pre code .hljs-comment,.text-editor__wrapper div.ProseMirror pre code .hljs-quote{color:#999}.text-editor__wrapper div.ProseMirror pre code .hljs-variable,.text-editor__wrapper div.ProseMirror pre code .hljs-template-variable,.text-editor__wrapper div.ProseMirror pre code .hljs-attribute,.text-editor__wrapper div.ProseMirror pre code .hljs-tag,.text-editor__wrapper div.ProseMirror pre code .hljs-name,.text-editor__wrapper div.ProseMirror pre code .hljs-regexp,.text-editor__wrapper div.ProseMirror pre code .hljs-link,.text-editor__wrapper div.ProseMirror pre code .hljs-selector-id,.text-editor__wrapper div.ProseMirror pre code .hljs-selector-class{color:#f2777a}.text-editor__wrapper div.ProseMirror pre code .hljs-number,.text-editor__wrapper div.ProseMirror pre code .hljs-meta,.text-editor__wrapper div.ProseMirror pre code .hljs-built_in,.text-editor__wrapper div.ProseMirror pre code .hljs-builtin-name,.text-editor__wrapper div.ProseMirror pre code .hljs-literal,.text-editor__wrapper div.ProseMirror pre code .hljs-type,.text-editor__wrapper div.ProseMirror pre code .hljs-params{color:#f99157}.text-editor__wrapper div.ProseMirror pre code .hljs-string,.text-editor__wrapper div.ProseMirror pre code .hljs-symbol,.text-editor__wrapper div.ProseMirror pre code .hljs-bullet{color:#9c9}.text-editor__wrapper div.ProseMirror pre code .hljs-title,.text-editor__wrapper div.ProseMirror pre code .hljs-section{color:#fc6}.text-editor__wrapper div.ProseMirror pre code .hljs-keyword,.text-editor__wrapper div.ProseMirror pre code .hljs-selector-tag{color:#69c}.text-editor__wrapper div.ProseMirror pre code .hljs-emphasis{font-style:italic}.text-editor__wrapper div.ProseMirror pre code .hljs-strong{font-weight:700}.text-editor__wrapper div.ProseMirror pre.frontmatter{margin-bottom:2em;border-left:4px solid var(--color-primary-element)}.text-editor__wrapper div.ProseMirror pre.frontmatter::before{display:block;content:attr(data-title);color:var(--color-text-maxcontrast);padding-bottom:.5em}.text-editor__wrapper div.ProseMirror p code{background-color:var(--color-background-dark);border-radius:var(--border-radius);padding:.1em .3em}.text-editor__wrapper div.ProseMirror li{position:relative;padding-left:3px}.text-editor__wrapper div.ProseMirror li p .paragraph-content{margin-bottom:.5em}.text-editor__wrapper div.ProseMirror ul,.text-editor__wrapper div.ProseMirror ol{padding-left:10px;margin-left:10px;margin-bottom:1em}.text-editor__wrapper div.ProseMirror ul>li{list-style-type:disc}.text-editor__wrapper div.ProseMirror li ul>li{list-style-type:circle}.text-editor__wrapper div.ProseMirror li li ul>li{list-style-type:square}.text-editor__wrapper div.ProseMirror blockquote{padding-left:1em;border-left:4px solid var(--color-primary-element);color:var(--color-text-maxcontrast);margin-left:0;margin-right:0}.text-editor__wrapper div.ProseMirror table{border-spacing:0;width:calc(100% - 50px);table-layout:auto;white-space:normal;margin-bottom:1em}.text-editor__wrapper div.ProseMirror table{margin-top:1em}.text-editor__wrapper div.ProseMirror table td,.text-editor__wrapper div.ProseMirror table th{border:1px solid var(--table-color-border);border-left:0;vertical-align:top;max-width:100%}.text-editor__wrapper div.ProseMirror table td:first-child,.text-editor__wrapper div.ProseMirror table th:first-child{border-left:1px solid var(--table-color-border)}.text-editor__wrapper div.ProseMirror table td{padding:.5em .75em;border-top:0;color:var(--color-main-text)}.text-editor__wrapper div.ProseMirror table th{padding:0 0 0 .75em;font-weight:normal;border-bottom-color:var(--table-color-heading-border);color:var(--table-color-heading)}.text-editor__wrapper div.ProseMirror table th>div{display:flex}.text-editor__wrapper div.ProseMirror table tr{background-color:var(--table-color-background)}.text-editor__wrapper div.ProseMirror table tr:hover,.text-editor__wrapper div.ProseMirror table tr:active,.text-editor__wrapper div.ProseMirror table tr:focus{background-color:var(--table-color-background-hover)}.text-editor__wrapper div.ProseMirror table tr:first-child th:first-child{border-top-left-radius:var(--table-border-radius)}.text-editor__wrapper div.ProseMirror table tr:first-child th:last-child{border-top-right-radius:var(--table-border-radius)}.text-editor__wrapper div.ProseMirror table tr:last-child td:first-child{border-bottom-left-radius:var(--table-border-radius)}.text-editor__wrapper div.ProseMirror table tr:last-child td:last-child{border-bottom-right-radius:var(--table-border-radius)}.text-editor__wrapper .ProseMirror-focused .ProseMirror-gapcursor{display:block}.text-editor__wrapper .editor__content p.is-empty:first-child::before{content:attr(data-placeholder);float:left;color:var(--color-text-maxcontrast);pointer-events:none;height:0}.text-editor__wrapper .editor__content{tab-size:4}.text-editor__wrapper .text-editor__main.draggedOver{background-color:var(--color-primary-light)}.text-editor__wrapper .text-editor__main .text-editor__content-wrapper{position:relative}.text-editor__wrapper.has-conflicts>.editor{width:50%}.text-editor__wrapper.has-conflicts>.content-wrapper{width:50%}.text-editor__wrapper.has-conflicts>.content-wrapper #read-only-editor{margin:0px auto;padding-top:50px;overflow:initial}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.collaboration-cursor__caret{position:relative;margin-left:-1px;margin-right:-1px;border-left:1px solid #0d0d0d;border-right:1px solid #0d0d0d;word-break:normal;pointer-events:none}.collaboration-cursor__label{position:absolute;top:-1.4em;left:-1px;font-size:12px;font-style:normal;font-weight:600;line-height:normal;user-select:none;color:#0d0d0d;padding:.1rem .3rem;border-radius:3px 3px 3px 0;white-space:nowrap;opacity:0}.collaboration-cursor__label.collaboration-cursor__label__active{opacity:1}.collaboration-cursor__label:not(.collaboration-cursor__label__active){transition:opacity .2s 5s}',"",{version:3,sources:["webpack://./css/style.scss","webpack://./css/print.scss","webpack://./css/prosemirror.scss","webpack://./src/components/Editor.vue"],names:[],mappings:"AAEA,MACC,+BAAA,CAGD,8BACC,iBAAA,CAGD,2BACC,yBAAA,CACA,4BAAA,CAEA,wCACC,wBAAA,CACA,4BAAA,CAGD,6CACC,wBAAA,CACA,4BAAA,CAIF,0BACC,sBAAA,CAID,4BACC,YAAA,CAEA,kCACC,UAAA,CACA,iBAAA,CACA,UAAA,CACA,UAAA,CAAA,QAAA,CAAA,WAAA,CACA,qBAAA,CACA,mBAAA,CAMD,4FACC,YAAA,CAIF,uBACC,YAAA,CACA,mBAAA,CACA,iBAAA,CAEA,6BACC,UAAA,CACA,aAAA,CACA,iBAAA,CACA,QAAA,CACA,UAAA,CACA,2CAAA,CACA,gEAAA,CAIF,oCACC,GACC,iBAAA,CAAA,CAIF,kBACC,gEAAA,CAGD,oBACC,6CAAA,CACA,iDAAA,CACA,iCACC,gBAAA,CAKF,sBACC,KACC,SAAA,CACA,kCAAA,CAGD,GACC,SAAA,CACA,8BAAA,CAAA,CAMF,sBACC,KACC,SAAA,CACA,kCAAA,CAGD,GACC,SAAA,CACA,8BAAA,CAAA,CAIF,YACC,yBAAA,CChHD,aACC,MACC,OAAA,CACA,0BAAA,CAGD,KAEC,iBAAA,CACA,2BAAA,CAGD,2BAEC,WAAA,CACA,qBAAA,CAEA,4BAAA,CAEA,yCAEC,uBAAA,CAED,4CAEC,OAAA,CACA,kBAAA,CAKD,2BAEC,uBAAA,CAED,0BAEC,uBAAA,CAED,8BAEC,cAAA,CAED,mCACC,kBAAA,CACA,cAAA,CAIA,gKAEC,iBAAA,CAED,wGAEC,uBAAA,CAEA,wBAAA,CACA,iCAAA,CAID,gCACC,qBAAA,CACA,2BAAA,CACA,mCAAA,CACA,4BAAA,CACA,6CAAA,CAED,6CACC,iCAAA,CAGD,gCACC,4CAAA,CACA,2BAAA,CACA,4BAAA,CAED,6CACC,sBAAA,CAKH,gDACC,YAAA,CAIA,6CACC,aAAA,CAGD,+CACC,UAAA,CACA,WAAA,CACA,cAAA,CACA,iBAAA,CAED,0DACC,YAAA,CAAA,CCjGH,sCACC,WAAA,CACA,iBAAA,CACA,oBAAA,CACA,oBAAA,CACA,mCAAA,CACA,2BAAA,CACA,0BAAA,CACA,gBAAA,CACA,kCAAA,CACA,YAAA,CA+QA,yCAAA,CACA,oDAAA,CACA,sDAAA,CACA,sDAAA,CACA,0DAAA,CACA,2CAAA,CAlRA,8CAEC,sBAAA,CAGD,oPAIC,UAAA,CACA,8BAAA,CACA,4BAAA,CACA,SAAA,CACA,wBAAA,CACA,gBAAA,CACA,kCAAA,CAEA,4XACC,sBAAA,CAGD,wjBACC,0BAAA,CAIF,6DACC,eAAA,CAGD,qDACC,YAAA,CACA,iBAAA,CAEA,0EACC,YAAA,CAED,4DACC,UAAA,CACA,qBAAA,CACA,sBAAA,CACA,8CAAA,CACA,aAAA,CACA,kCAAA,CACA,WAAA,CACA,UAAA,CACA,0BAAA,CACA,0BAAA,CACA,cAAA,CACA,QAAA,CAGA,oEACC,wDAAA,CACA,6CAAA,CACA,yCAAA,CAED,mEACC,mCAAA,CACA,4BAAA,CAGF,2DACC,aAAA,CACA,WAAA,CACA,2BAAA,CAIF,oDACC,eAAA,CAIA,8TACC,YAAA,CAIF,wCACC,kCAAA,CACA,yBAAA,CACA,cAAA,CAGD,2DACC,iBAAA,CACA,gBAAA,CAGD,yCACC,iBAAA,CAGD,sPAMC,eAAA,CACA,iBAAA,CACA,eAAA,CACA,kBAAA,CACA,4BAAA,CAGD,yCACC,cAAA,CAGD,yCACC,cAAA,CAGD,yCACC,cAAA,CAGD,yCACC,cAAA,CAGD,yCACC,cAAA,CAGD,yCACC,kCAAA,CAGD,0CACC,cAAA,CACA,cAAA,CAGD,yCACC,aAAA,CACA,WAAA,CACA,YAAA,CACA,UAAA,CAGD,+CACC,UAAA,CACA,aAAA,CACA,UAAA,CACA,yCAAA,CACA,eAAA,CAGD,0CACC,oBAAA,CACA,6CAAA,CACA,kCAAA,CACA,iBAAA,CACA,iBAAA,CAEA,kDACC,2BAAA,CACA,wBAAA,CACA,aAAA,CACA,gBAAA,CACA,gBAAA,CACA,eAAA,CAGA,wHAEC,UAAA,CAED,kjBASC,aAAA,CAED,yaAOC,aAAA,CAED,oLAGC,UAAA,CAED,wHAEC,UAAA,CAED,+HAEC,UAAA,CAED,8DACC,iBAAA,CAED,4DACC,eAAA,CAKH,sDACC,iBAAA,CACA,kDAAA,CAGD,8DACC,aAAA,CACA,wBAAA,CACA,mCAAA,CACA,mBAAA,CAGD,6CACC,6CAAA,CACA,kCAAA,CACA,iBAAA,CAGD,yCACC,iBAAA,CACA,gBAAA,CAEA,8DACC,kBAAA,CAIF,kFACC,iBAAA,CACA,gBAAA,CACA,iBAAA,CAGD,4CACC,oBAAA,CAID,+CACC,sBAAA,CAID,kDACC,sBAAA,CAGD,iDACC,gBAAA,CACA,kDAAA,CACA,mCAAA,CACA,aAAA,CACA,cAAA,CAWD,4CACC,gBAAA,CACA,uBAAA,CACA,iBAAA,CACA,kBAAA,CACA,iBAAA,CACA,4CACC,cAAA,CAID,8FACC,0CAAA,CACA,aAAA,CACA,kBAAA,CACA,cAAA,CACA,sHACC,+CAAA,CAGF,+CACC,kBAAA,CACA,YAAA,CACA,4BAAA,CAED,+CACC,mBAAA,CACA,kBAAA,CACA,qDAAA,CACA,gCAAA,CAEA,mDACC,YAAA,CAGF,+CACC,8CAAA,CACA,gKACC,oDAAA,CAKD,0EAAA,iDAAA,CACA,yEAAA,kDAAA,CAIA,yEAAA,oDAAA,CACA,wEAAA,qDAAA,CAOH,kEACC,aAAA,CAGD,sEACC,8BAAA,CACA,UAAA,CACA,mCAAA,CACA,mBAAA,CACA,QAAA,CAGD,uCACC,UAAA,CC/VC,qDACC,2CAAA,CAED,uEACC,iBAAA,CAKH,4CACC,SAAA,CAGD,qDACC,SAAA,CACA,uEACC,eAAA,CACA,gBAAA,CACA,gBAAA,CAIF,gBACC,GAAA,sBAAA,CACA,KAAA,wBAAA,CAAA,CAID,6BACC,iBAAA,CACA,gBAAA,CACA,iBAAA,CACA,6BAAA,CACA,8BAAA,CACA,iBAAA,CACA,mBAAA,CAID,6BACC,iBAAA,CACA,UAAA,CACA,SAAA,CACA,cAAA,CACA,iBAAA,CACA,eAAA,CACA,kBAAA,CACA,gBAAA,CACA,aAAA,CACA,mBAAA,CACA,2BAAA,CACA,kBAAA,CACA,SAAA,CAEA,iEACC,SAAA,CAGD,uEACC,yBAAA",sourcesContent:["@use 'sass:math';\n\n:root {\n\t--text-editor-max-width: 670px\n}\n\n.modal-container .text-editor {\n\tposition: absolute;\n}\n\n.ProseMirror-hideselection {\n\tcaret-color: transparent;\n\tcolor: var(--color-main-text);\n\n\t*::selection {\n\t\tbackground: transparent;\n\t\tcolor: var(--color-main-text);\n\t}\n\n\t*::-moz-selection {\n\t\tbackground: transparent;\n\t\tcolor: var(--color-main-text);\n\t}\n}\n\n.ProseMirror-selectednode {\n\toutline: 2px solid #8cf;\n}\n\n/* Make sure li selections wrap around markers */\nli.ProseMirror-selectednode {\n\toutline: none;\n\n\t&:after {\n\t\tcontent: '';\n\t\tposition: absolute;\n\t\tleft: -32px;\n\t\tright: -2px; top: -2px; bottom: -2px;\n\t\tborder: 2px solid #8cf;\n\t\tpointer-events: none;\n\t}\n}\n\n.has-conflicts,\n.text-editor__wrapper.icon-loading {\n\t.ProseMirror-menubar {\n\t\tdisplay: none;\n\t}\n}\n\n.ProseMirror-gapcursor {\n\tdisplay: none;\n\tpointer-events: none;\n\tposition: absolute;\n\n\t&:after {\n\t\tcontent: '';\n\t\tdisplay: block;\n\t\tposition: absolute;\n\t\ttop: -2px;\n\t\twidth: 20px;\n\t\tborder-top: 1px solid var(--color-main-text);\n\t\tanimation: ProseMirror-cursor-blink 1.1s steps(2, start) infinite;\n\t}\n}\n\n@keyframes ProseMirror-cursor-blink {\n\tto {\n\t\tvisibility: hidden;\n\t}\n}\n\n.animation-rotate {\n\tanimation: rotate var(--animation-duration, 0.8s) linear infinite;\n}\n\n[data-handler='text'] {\n\tbackground-color: var(--color-main-background);\n\tborder-top: 3px solid var(--color-primary-element);\n\t.modal-title {\n\t\tfont-weight: bold;\n\t}\n}\n\n// from https://github.com/animate-css/animate.css/blob/main/source/fading_entrances/fadeInDown.css\n@keyframes fadeInDown {\n\tfrom {\n\t\topacity: 0;\n\t\ttransform: translate3d(0, -100%, 0);\n\t}\n\n\tto {\n\t\topacity: 1;\n\t\ttransform: translate3d(0, 0, 0);\n\t}\n}\n\n\n// from https://github.com/animate-css/animate.css/blob/main/source/fading_entrances/fadeInLeft.css\n@keyframes fadeInLeft {\n\tfrom {\n\t\topacity: 0;\n\t\ttransform: translate3d(-100%, 0, 0);\n\t}\n\n\tto {\n\t\topacity: 1;\n\t\ttransform: translate3d(0, 0, 0);\n\t}\n}\n\n.fadeInLeft {\n\tanimation-name: fadeInLeft;\n}\n","@media print {\n\t@page {\n\t\tsize: A4;\n\t\tmargin: 2.5cm 2cm 2cm 2.5cm;\n\t}\n\n\tbody {\n\t\t// position: fixed does not support scrolling and as such only prints one page\n\t\tposition: absolute;\n\t\toverflow: visible!important;\n\t}\n\n\t#viewer[data-handler='text'] {\n\t\t// Hide top border\n\t\tborder: none;\n\t\twidth: 100%!important;\n\t\t// NcModal uses fixed, which will be cropped when printed\n\t\tposition: absolute!important;\n\n\t\t.modal-header {\n\t\t\t// Hide modal header (close button)\n\t\t\tdisplay: none!important;\n\t\t}\n\t\t.modal-container {\n\t\t\t// Make sure top aligned as we hided the menubar */\n\t\t\ttop: 0px;\n\t\t\theight: fit-content;\n\t\t}\n\t}\n\n\t.text-editor {\n\t\t.text-menubar {\n\t\t\t// Hide menu bar\n\t\t\tdisplay: none!important;\n\t\t}\n\t\t.action-item {\n\t\t\t// Hide table settings\n\t\t\tdisplay: none!important;\n\t\t}\n\t\t.editor__content {\n\t\t\t// Margins set by page rule\n\t\t\tmax-width: 100%;\n\t\t}\n\t\t.text-editor__wrapper {\n\t\t\theight: fit-content;\n\t\t\tposition: unset;\n\t\t}\n\n\t\tdiv.ProseMirror {\n\t\t\th1, h2, h3, h4, h5 {\n\t\t\t\t// orphaned headlines are ugly\n\t\t\t\tbreak-after: avoid;\n\t\t\t}\n\t\t\t.image, img, table {\n\t\t\t\t// try no page breaks within tables or images\n\t\t\t\tbreak-inside: avoid-page;\n\t\t\t\t// Some more indention\n\t\t\t\tmax-width: 90%!important;\n\t\t\t\tmargin: 5vw auto 5vw 5%!important;\n\t\t\t}\n\n\t\t\t// Add some borders below header and between columns\n\t\t\tth {\n\t\t\t\tcolor: black!important;\n\t\t\t\tfont-weight: bold!important;\n\t\t\t\tborder-width: 0 1px 2px 0!important;\n\t\t\t\tborder-color: gray!important;\n\t\t\t\tborder-style: none solid solid none!important;\n\t\t\t}\n\t\t\tth:last-of-type {\n\t\t\t\tborder-width: 0 0 2px 0!important;\n\t\t\t}\n\n\t\t\ttd {\n\t\t\t\tborder-style: none solid none none!important;\n\t\t\t\tborder-width: 1px!important;\n\t\t\t\tborder-color: gray!important;\n\t\t\t}\n\t\t\ttd:last-of-type {\n\t\t\t\tborder: none!important;\n\t\t\t}\n\t\t}\n\t}\n\n\t.menubar-placeholder, .text-editor--readonly-bar {\n\t\tdisplay: none;\n\t}\n\n\t.text-editor__content-wrapper {\n\t\t&.--show-outline {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\t.editor--outline {\n\t\t\twidth: auto;\n\t\t\theight: auto;\n\t\t\toverflow: unset;\n\t\t\tposition: relative;\n\t\t}\n\t\t.editor--outline__btn-close {\n\t\t\tdisplay: none;\n\t\t}\n\t}\n}\n","@use 'sass:selector';\n\n/* Document rendering styles */\ndiv.ProseMirror {\n\theight: 100%;\n\tposition: relative;\n\tword-wrap: break-word;\n\twhite-space: pre-wrap;\n\t-webkit-font-variant-ligatures: none;\n\tfont-variant-ligatures: none;\n\tpadding: 4px 8px 200px 14px;\n\tline-height: 150%;\n\tfont-size: var(--default-font-size);\n\toutline: none;\n\n\t:target {\n\t\t// Menubar height: 44px + 3px bottom + 3px top padding\n\t\tscroll-margin-top: 50px;\n\t}\n\n\t&[contenteditable=true],\n\t&[contenteditable=false],\n\t[contenteditable=true],\n\t[contenteditable=false] {\n\t\twidth: 100%;\n\t\tbackground-color: transparent;\n\t\tcolor: var(--color-main-text);\n\t\topacity: 1;\n\t\t-webkit-user-select: text;\n\t\tuser-select: text;\n\t\tfont-size: var(--default-font-size);\n\n\t\t&:not(.collaboration-cursor__caret) {\n\t\t\tborder: none !important;\n\t\t}\n\n\t\t&:focus, &:focus-visible {\n\t\t\tbox-shadow: none !important;\n\t\t}\n\t}\n\n\tul[data-type=taskList] {\n\t\tmargin-left: 1px;\n\t}\n\n\t.checkbox-item {\n\t\tdisplay: flex;\n\t\talign-items: start;\n\n\t\tinput[type=checkbox] {\n\t\t\tdisplay: none;\n\t\t}\n\t\t&:before {\n\t\t\tcontent: '';\n\t\t\tvertical-align: middle;\n\t\t\tmargin: 3px 6px 3px 2px;\n\t\t\tborder: 1px solid var(--color-text-maxcontrast);\n\t\t\tdisplay: block;\n\t\t\tborder-radius: var(--border-radius);\n\t\t\theight: 14px;\n\t\t\twidth: 14px;\n\t\t\tbox-shadow: none !important;\n\t\t\tbackground-position: center;\n\t\t\tcursor: pointer;\n\t\t\tleft: 9px;\n\t\t}\n\t\t&.checked{\n\t\t\t&:before {\n\t\t\t\tbackground-image: url('../../img/checkbox-mark.svg');\n\t\t\t\tbackground-color: var(--color-primary-element);\n\t\t\t\tborder-color: var(--color-primary-element);\n\t\t\t}\n\t\t\tlabel {\n\t\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t\t\ttext-decoration: line-through;\n\t\t\t}\n\t\t}\n\t\tlabel {\n\t\t\tdisplay: block;\n\t\t\tflex-grow: 1;\n\t\t\tmax-width: calc(100% - 28px);\n\t\t}\n\t}\n\n\t> *:first-child {\n\t\tmargin-top: 10px;\n\t}\n\n\t> h1,h2,h3,h4,h5,h6 {\n\t\t&:first-child {\n\t\t\tmargin-top: 0;\n\t\t}\n\t}\n\n\ta {\n\t\tcolor: var(--color-primary-element);\n\t\ttext-decoration: underline;\n\t\tpadding: .5em 0;\n\t}\n\n\tp .paragraph-content {\n\t\tmargin-bottom: 1em;\n\t\tline-height: 150%;\n\t}\n\n\tem {\n\t\tfont-style: italic;\n\t}\n\n\th1,\n\th2,\n\th3,\n\th4,\n\th5,\n\th6 {\n\t\tfont-weight: 600;\n\t\tline-height: 1.1em;\n\t\tmargin-top: 24px;\n\t\tmargin-bottom: 12px;\n\t\tcolor: var(--color-main-text);\n\t}\n\n\th1 {\n\t\tfont-size: 36px;\n\t}\n\n\th2 {\n\t\tfont-size: 30px;\n\t}\n\n\th3 {\n\t\tfont-size: 24px;\n\t}\n\n\th4 {\n\t\tfont-size: 21px;\n\t}\n\n\th5 {\n\t\tfont-size: 17px;\n\t}\n\n\th6 {\n\t\tfont-size: var(--default-font-size);\n\t}\n\n\timg {\n\t\tcursor: default;\n\t\tmax-width: 100%;\n\t}\n\n\thr {\n\t\tpadding: 2px 0;\n\t\tborder: none;\n\t\tmargin: 2em 0;\n\t\twidth: 100%;\n\t}\n\n\thr:after {\n\t\tcontent: '';\n\t\tdisplay: block;\n\t\theight: 1px;\n\t\tbackground-color: var(--color-border-dark);\n\t\tline-height: 2px;\n\t}\n\n\tpre {\n\t\twhite-space: pre-wrap;\n\t\tbackground-color: var(--color-background-dark);\n\t\tborder-radius: var(--border-radius);\n\t\tpadding: 1em 1.3em;\n\t\tmargin-bottom: 1em;\n\n\t\t&::before {\n\t\t\tcontent: attr(data-language);\n\t\t\ttext-transform: uppercase;\n\t\t\tdisplay: block;\n\t\t\ttext-align: right;\n\t\t\tfont-weight: bold;\n\t\t\tfont-size: 0.6rem;\n\t\t}\n\t\tcode {\n\t\t\t.hljs-comment,\n\t\t\t.hljs-quote {\n\t\t\t\tcolor: #999999;\n\t\t\t}\n\t\t\t.hljs-variable,\n\t\t\t.hljs-template-variable,\n\t\t\t.hljs-attribute,\n\t\t\t.hljs-tag,\n\t\t\t.hljs-name,\n\t\t\t.hljs-regexp,\n\t\t\t.hljs-link,\n\t\t\t.hljs-selector-id,\n\t\t\t.hljs-selector-class {\n\t\t\t\tcolor: #f2777a;\n\t\t\t}\n\t\t\t.hljs-number,\n\t\t\t.hljs-meta,\n\t\t\t.hljs-built_in,\n\t\t\t.hljs-builtin-name,\n\t\t\t.hljs-literal,\n\t\t\t.hljs-type,\n\t\t\t.hljs-params {\n\t\t\t\tcolor: #f99157;\n\t\t\t}\n\t\t\t.hljs-string,\n\t\t\t.hljs-symbol,\n\t\t\t.hljs-bullet {\n\t\t\t\tcolor: #99cc99;\n\t\t\t}\n\t\t\t.hljs-title,\n\t\t\t.hljs-section {\n\t\t\t\tcolor: #ffcc66;\n\t\t\t}\n\t\t\t.hljs-keyword,\n\t\t\t.hljs-selector-tag {\n\t\t\t\tcolor: #6699cc;\n\t\t\t}\n\t\t\t.hljs-emphasis {\n\t\t\t\tfont-style: italic;\n\t\t\t}\n\t\t\t.hljs-strong {\n\t\t\t\tfont-weight: 700;\n\t\t\t}\n\t\t}\n\t}\n\n\tpre.frontmatter {\n\t\tmargin-bottom: 2em;\n\t\tborder-left: 4px solid var(--color-primary-element);\n\t}\n\n\tpre.frontmatter::before {\n\t\tdisplay: block;\n\t\tcontent: attr(data-title);\n\t\tcolor: var(--color-text-maxcontrast);\n\t\tpadding-bottom: 0.5em;\n\t}\n\n\tp code {\n\t\tbackground-color: var(--color-background-dark);\n\t\tborder-radius: var(--border-radius);\n\t\tpadding: .1em .3em;\n\t}\n\n\tli {\n\t\tposition: relative;\n\t\tpadding-left: 3px;\n\n\t\tp .paragraph-content {\n\t\t\tmargin-bottom: 0.5em;\n\t\t}\n\t}\n\n\tul, ol {\n\t\tpadding-left: 10px;\n\t\tmargin-left: 10px;\n\t\tmargin-bottom: 1em;\n\t}\n\n\tul > li {\n\t\tlist-style-type: disc;\n\t}\n\n\t// Second-level list entries\n\tli ul > li {\n\t\tlist-style-type: circle;\n\t}\n\n\t// Third-level and further down list entries\n\tli li ul > li {\n\t\tlist-style-type: square;\n\t}\n\n\tblockquote {\n\t\tpadding-left: 1em;\n\t\tborder-left: 4px solid var(--color-primary-element);\n\t\tcolor: var(--color-text-maxcontrast);\n\t\tmargin-left: 0;\n\t\tmargin-right: 0;\n\t}\n\n\t// table variables\n\t--table-color-border: var(--color-border);\n\t--table-color-heading: var(--color-text-maxcontrast);\n\t--table-color-heading-border: var(--color-border-dark);\n\t--table-color-background: var(--color-main-background);\n\t--table-color-background-hover: var(--color-primary-light);\n\t--table-border-radius: var(--border-radius);\n\n\ttable {\n\t\tborder-spacing: 0;\n\t\twidth: calc(100% - 50px);\n\t\ttable-layout: auto;\n\t\twhite-space: normal; // force text to wrapping\n\t\tmargin-bottom: 1em;\n\t\t+ & {\n\t\t\tmargin-top: 1em;\n\t\t}\n\n\n\t\ttd, th {\n\t\t\tborder: 1px solid var(--table-color-border);\n\t\t\tborder-left: 0;\n\t\t\tvertical-align: top;\n\t\t\tmax-width: 100%;\n\t\t\t&:first-child {\n\t\t\t\tborder-left: 1px solid var(--table-color-border);\n\t\t\t}\n\t\t}\n\t\ttd {\n\t\t\tpadding: 0.5em 0.75em;\n\t\t\tborder-top: 0;\n\t\t\tcolor: var(--color-main-text);\n\t\t}\n\t\tth {\n\t\t\tpadding: 0 0 0 0.75em;\n\t\t\tfont-weight: normal;\n\t\t\tborder-bottom-color: var(--table-color-heading-border);\n\t\t\tcolor: var(--table-color-heading);\n\n\t\t\t& > div {\n\t\t\t\tdisplay: flex;\n\t\t\t}\n\t\t}\n\t\ttr {\n\t\t\tbackground-color: var(--table-color-background);\n\t\t\t&:hover, &:active, &:focus {\n\t\t\t\tbackground-color: var(--table-color-background-hover);\n\t\t\t}\n\t\t}\n\n\t\ttr:first-child {\n\t\t\tth:first-child { border-top-left-radius: var(--table-border-radius); }\n\t\t\tth:last-child { border-top-right-radius: var(--table-border-radius); }\n\t\t}\n\n\t\ttr:last-child {\n\t\t\ttd:first-child { border-bottom-left-radius: var(--table-border-radius); }\n\t\t\ttd:last-child { border-bottom-right-radius: var(--table-border-radius); }\n\t\t}\n\n\t}\n\n}\n\n.ProseMirror-focused .ProseMirror-gapcursor {\n\tdisplay: block;\n}\n\n.editor__content p.is-empty:first-child::before {\n\tcontent: attr(data-placeholder);\n\tfloat: left;\n\tcolor: var(--color-text-maxcontrast);\n\tpointer-events: none;\n\theight: 0;\n}\n\n.editor__content {\n\ttab-size: 4;\n}\n","\n@import './../../css/style';\n@import './../../css/print';\n\n.text-editor__wrapper {\n\t@import './../../css/prosemirror';\n\n\t// relative position for the alignment of the menububble\n\t.text-editor__main {\n\t\t&.draggedOver {\n\t\t\tbackground-color: var(--color-primary-light);\n\t\t}\n\t\t.text-editor__content-wrapper {\n\t\t\tposition: relative;\n\t\t}\n\t}\n}\n\n.text-editor__wrapper.has-conflicts > .editor {\n\twidth: 50%;\n}\n\n.text-editor__wrapper.has-conflicts > .content-wrapper {\n\twidth: 50%;\n\t#read-only-editor {\n\t\tmargin: 0px auto;\n\t\tpadding-top: 50px;\n\t\toverflow: initial;\n\t}\n}\n\n@keyframes spin {\n\t0% { transform: rotate(0deg); }\n\t100% { transform: rotate(360deg); }\n}\n\n/* Give a remote user a caret */\n.collaboration-cursor__caret {\n\tposition: relative;\n\tmargin-left: -1px;\n\tmargin-right: -1px;\n\tborder-left: 1px solid #0D0D0D;\n\tborder-right: 1px solid #0D0D0D;\n\tword-break: normal;\n\tpointer-events: none;\n}\n\n/* Render the username above the caret */\n.collaboration-cursor__label {\n\tposition: absolute;\n\ttop: -1.4em;\n\tleft: -1px;\n\tfont-size: 12px;\n\tfont-style: normal;\n\tfont-weight: 600;\n\tline-height: normal;\n\tuser-select: none;\n\tcolor: #0D0D0D;\n\tpadding: 0.1rem 0.3rem;\n\tborder-radius: 3px 3px 3px 0;\n\twhite-space: nowrap;\n\topacity: 0;\n\n\t&.collaboration-cursor__label__active {\n\t\topacity: 1;\n\t}\n\n\t&:not(.collaboration-cursor__label__active) {\n\t\ttransition: opacity 0.2s 5s;\n\t}\n}\n"],sourceRoot:""}]);const A=d},50706:(t,e,n)=>{"use strict";n.d(e,{Z:()=>s});var i=n(87537),r=n.n(i),o=n(23645),a=n.n(o)()(r());a.push([t.id,".editor__content[data-v-9114a8c6]{max-width:min(var(--text-editor-max-width),100vw - 16px);margin:auto;position:relative;width:100%}.ie .editor__content[data-v-9114a8c6] .ProseMirror{padding-top:50px}.text-editor__content-wrapper[data-v-9114a8c6]{--side-width: calc((100% - var(--text-editor-max-width)) / 2);display:grid;grid-template-columns:1fr auto}.text-editor__content-wrapper.--show-outline[data-v-9114a8c6]{grid-template-columns:var(--side-width) auto var(--side-width)}.text-editor__content-wrapper .text-editor__content-wrapper__left[data-v-9114a8c6],.text-editor__content-wrapper .text-editor__content-wrapper__right[data-v-9114a8c6]{height:100%;position:relative}.is-rich-workspace .text-editor__content-wrapper[data-v-9114a8c6]{--side-width: var(--text-editor-max-width);grid-template-columns:var(--side-width) auto}.is-rich-workspace .text-editor__content-wrapper .text-editor__content-wrapper__left[data-v-9114a8c6],.is-rich-workspace .text-editor__content-wrapper .text-editor__content-wrapper__right[data-v-9114a8c6]{display:none}","",{version:3,sources:["webpack://./src/components/Editor/ContentContainer.vue"],names:[],mappings:"AACA,kCACC,wDAAA,CACA,WAAA,CACA,iBAAA,CACA,UAAA,CAIA,mDACC,gBAAA,CAIF,+CACC,6DAAA,CACA,YAAA,CACA,8BAAA,CACA,8DACC,8DAAA,CAED,uKAEC,WAAA,CACA,iBAAA,CAKD,kEACC,0CAAA,CACA,4CAAA,CACA,6MAEC,YAAA",sourcesContent:["\n.editor__content {\n\tmax-width: min(var(--text-editor-max-width), calc(100vw - 16px));\n\tmargin: auto;\n\tposition: relative;\n\twidth: 100%;\n}\n\n.ie {\n\t.editor__content:deep(.ProseMirror) {\n\t\tpadding-top: 50px;\n\t}\n}\n\n.text-editor__content-wrapper {\n\t--side-width: calc((100% - var(--text-editor-max-width)) / 2);\n\tdisplay: grid;\n\tgrid-template-columns: 1fr auto;\n\t&.--show-outline {\n\t\tgrid-template-columns: var(--side-width) auto var(--side-width);\n\t}\n\t.text-editor__content-wrapper__left,\n\t.text-editor__content-wrapper__right {\n\t\theight: 100%;\n\t\tposition: relative;\n\t}\n}\n\n.is-rich-workspace {\n\t.text-editor__content-wrapper {\n\t\t--side-width: var(--text-editor-max-width);\n\t\tgrid-template-columns: var(--side-width) auto;\n\t\t.text-editor__content-wrapper__left,\n\t\t.text-editor__content-wrapper__right {\n\t\t\tdisplay: none;\n\t\t}\n\t}\n}\n"],sourceRoot:""}]);const s=a},8857:(t,e,n)=>{"use strict";n.d(e,{Z:()=>s});var i=n(87537),r=n.n(i),o=n(23645),a=n.n(o)()(r());a.push([t.id,".document-status[data-v-4fde7cc0]{position:sticky;top:0;z-index:10000;max-height:50px;background-color:var(--color-main-background)}.document-status .msg[data-v-4fde7cc0]{padding:12px;background-position:8px center;color:var(--color-text-maxcontrast)}.document-status .msg.icon-error[data-v-4fde7cc0]{padding-left:30px}.document-status .msg .button[data-v-4fde7cc0]{margin-left:8px}.document-status .msg.msg-locked .lock-icon[data-v-4fde7cc0]{padding:0 10px;float:left}","",{version:3,sources:["webpack://./src/components/Editor/DocumentStatus.vue"],names:[],mappings:"AACA,kCACC,eAAA,CACA,KAAA,CACA,aAAA,CACA,eAAA,CACA,6CAAA,CAEA,uCACC,YAAA,CACA,8BAAA,CACA,mCAAA,CAEA,kDACC,iBAAA,CAGD,+CACC,eAAA,CAGD,6DACC,cAAA,CACA,UAAA",sourcesContent:["\n.document-status {\n\tposition: sticky;\n\ttop: 0;\n\tz-index: 10000;\n\tmax-height: 50px;\n\tbackground-color: var(--color-main-background);\n\n\t.msg {\n\t\tpadding: 12px;\n\t\tbackground-position: 8px center;\n\t\tcolor: var(--color-text-maxcontrast);\n\n\t\t&.icon-error {\n\t\t\tpadding-left: 30px;\n\t\t}\n\n\t\t.button {\n\t\t\tmargin-left: 8px;\n\t\t}\n\n\t\t&.msg-locked .lock-icon {\n\t\t\tpadding: 0 10px;\n\t\t\tfloat: left;\n\t\t}\n\t}\n}\n"],sourceRoot:""}]);const s=a},30764:(t,e,n)=>{"use strict";n.d(e,{Z:()=>s});var i=n(87537),r=n.n(i),o=n(23645),a=n.n(o)()(r());a.push([t.id,".editor--outline[data-v-4a57d3b2]{width:300px;padding:0 10px 10px 10px;position:fixed;overflow:auto;max-height:calc(100% - 204px)}.editor--outline-mobile[data-v-4a57d3b2]{box-shadow:8px 0 17px -19px var(--color-box-shadow);background-color:var(--color-main-background-translucent);z-index:1}.editor--outline__header[data-v-4a57d3b2]{margin:0;position:sticky;top:0;z-index:1;background-color:var(--color-main-background);padding:.6em .6em .6em 0;display:flex;align-items:center}.editor--outline__header h2[data-v-4a57d3b2]{font-size:1rem;line-height:1.1rem;flex-grow:1;padding:0;margin:0}","",{version:3,sources:["webpack://./src/components/Editor/EditorOutline.vue"],names:[],mappings:"AACA,kCACC,WAAA,CACA,wBAAA,CACA,cAAA,CACA,aAAA,CAEA,6BAAA,CAEA,yCACC,mDAAA,CACA,yDAAA,CACA,SAAA,CAGD,0CACC,QAAA,CACA,eAAA,CACA,KAAA,CACA,SAAA,CACA,6CAAA,CACA,wBAAA,CACA,YAAA,CACA,kBAAA,CAEA,6CACC,cAAA,CACA,kBAAA,CACA,WAAA,CACA,SAAA,CACA,QAAA",sourcesContent:["\n.editor--outline {\n\twidth: 300px;\n\tpadding: 0 10px 10px 10px;\n\tposition: fixed;\n\toverflow: auto;\n\t// 204px = 50px nc header + 60px collectives titlebar + 44px menubar + 50px bottom margin\n\tmax-height: calc(100% - 204px);\n\n\t&-mobile {\n\t\tbox-shadow: 8px 0 17px -19px var(--color-box-shadow);\n\t\tbackground-color: var(--color-main-background-translucent);\n\t\tz-index: 1;\n\t}\n\n\t&__header {\n\t\tmargin: 0;\n\t\tposition: sticky;\n\t\ttop: 0;\n\t\tz-index: 1;\n\t\tbackground-color: var(--color-main-background);\n\t\tpadding: 0.6em 0.6em 0.6em 0;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\n\t\th2 {\n\t\t\tfont-size: 1rem;\n\t\t\tline-height: 1.1rem;\n\t\t\tflex-grow: 1;\n\t\t\tpadding: 0;\n\t\t\tmargin: 0;\n\t\t}\n\t}\n}\n"],sourceRoot:""}]);const s=a},16104:(t,e,n)=>{"use strict";n.d(e,{Z:()=>s});var i=n(87537),r=n.n(i),o=n(23645),a=n.n(o)()(r());a.push([t.id,".text-editor__main[data-v-8ffa875e],.editor[data-v-8ffa875e]{background:var(--color-main-background);color:var(--color-main-text);background-clip:padding-box;border-radius:var(--border-radius);padding:0;position:relative;width:100%}","",{version:3,sources:["webpack://./src/components/Editor/MainContainer.vue"],names:[],mappings:"AACA,6DACC,uCAAA,CACA,4BAAA,CACA,2BAAA,CACA,kCAAA,CACA,SAAA,CACA,iBAAA,CACA,UAAA",sourcesContent:["\n.text-editor__main, .editor {\n\tbackground: var(--color-main-background);\n\tcolor: var(--color-main-text);\n\tbackground-clip: padding-box;\n\tborder-radius: var(--border-radius);\n\tpadding: 0;\n\tposition: relative;\n\twidth: 100%;\n}\n"],sourceRoot:""}]);const s=a},72259:(t,e,n)=>{"use strict";n.d(e,{Z:()=>s});var i=n(87537),r=n.n(i),o=n(23645),a=n.n(o)()(r());a.push([t.id,".text-editor__session-list[data-v-d5139f5a]{display:flex}.text-editor__session-list input[data-v-d5139f5a],.text-editor__session-list div[data-v-d5139f5a]{vertical-align:middle;margin-left:3px}.save-status[data-v-d5139f5a]{border-radius:50%;color:var(--color-text-lighter);display:inline-flex;justify-content:center;padding:0;height:44px;width:44px}.save-status[data-v-d5139f5a]:hover{background-color:var(--color-background-hover)}.last-saved[data-v-d5139f5a]{padding:6px}","",{version:3,sources:["webpack://./src/components/Editor/Status.vue"],names:[],mappings:"AACA,4CACC,YAAA,CAEA,kGACC,qBAAA,CACA,eAAA,CAIF,8BACC,iBAAA,CACA,+BAAA,CACA,mBAAA,CACA,sBAAA,CACA,SAAA,CACA,WAAA,CACA,UAAA,CAEA,oCACC,8CAAA,CAIF,6BACC,WAAA",sourcesContent:["\n.text-editor__session-list {\n\tdisplay: flex;\n\n\tinput, div {\n\t\tvertical-align: middle;\n\t\tmargin-left: 3px;\n\t}\n}\n\n.save-status {\n\tborder-radius: 50%;\n\tcolor: var(--color-text-lighter);\n\tdisplay: inline-flex;\n\tjustify-content: center;\n\tpadding: 0;\n\theight: 44px;\n\twidth: 44px;\n\n\t&:hover {\n\t\tbackground-color: var(--color-background-hover);\n\t}\n}\n\n.last-saved {\n\tpadding: 6px;\n}\n"],sourceRoot:""}]);const s=a},80439:(t,e,n)=>{"use strict";n.d(e,{Z:()=>s});var i=n(87537),r=n.n(i),o=n(23645),a=n.n(o)()(r());a.push([t.id,".--initial-render .editor--toc__item{--initial-padding-left: 0;animation:initialPadding 1.5s}.editor--toc{padding:0 10px;color:var(--color-main-text-maxcontrast);--animation-duration: 0.8s}.editor--toc h3{padding-left:.75rem}.editor--toc__list{width:100%;list-style:none;font-size:.9rem;padding:0;animation-name:fadeInLeft;animation-duration:var(--animation-duration)}.editor--toc__item{transform:translateX(var(--padding-left, 0rem));text-overflow:ellipsis;overflow:hidden;white-space:nowrap;animation:initialPadding calc(var(--animation-duration)*2);width:calc(100% - var(--padding-left))}.editor--toc__item a:hover{color:var(--color-primary-hover)}.editor--toc__item--1{--padding-left: 0rem;font-weight:600}.editor--toc__item--1:not(:nth-child(1)){margin-top:.5rem}.editor--toc__item--2{--padding-left: 1rem}.editor--toc__item--3{--padding-left: 2rem}.editor--toc__item--4{--padding-left: 3rem}.editor--toc__item--5{--padding-left: 4rem}.editor--toc__item--6{--padding-left: 5rem}.editor--toc__item--previous-1{--initial-padding-left: 0rem }.editor--toc__item--previous-2{--initial-padding-left: 1rem }.editor--toc__item--previous-3{--initial-padding-left: 2rem }.editor--toc__item--previous-4{--initial-padding-left: 3rem }.editor--toc__item--previous-5{--initial-padding-left: 4rem }.editor--toc__item--previous-6{--initial-padding-left: 5rem }@keyframes initialPadding{from{transform:translateX(var(--initial-padding-left, initial))}to{transform:translateX(var(--padding-left, 0rem))}}","",{version:3,sources:["webpack://./src/components/Editor/TableOfContents.vue"],names:[],mappings:"AAGE,qCACC,yBAAA,CACA,6BAAA,CAKH,aACC,cAAA,CACA,wCAAA,CACA,0BAAA,CAEA,gBACC,mBAAA,CAGD,mBACC,UAAA,CACA,eAAA,CACA,eAAA,CACA,SAAA,CAEA,yBAAA,CACA,4CAAA,CAGD,mBACC,+CAAA,CACA,sBAAA,CACA,eAAA,CACA,kBAAA,CACA,0DAAA,CACA,sCAAA,CAEA,2BACC,gCAAA,CAGD,sBACC,oBAAA,CACA,eAAA,CACA,yCACC,gBAAA,CAIF,sBACC,oBAAA,CAGD,sBACC,oBAAA,CAGD,sBACC,oBAAA,CAGD,sBACC,oBAAA,CAGD,sBACC,oBAAA,CAGD,+BACC,6BAAA,CAGD,+BACC,6BAAA,CAGD,+BACC,6BAAA,CAGD,+BACC,6BAAA,CAGD,+BACC,6BAAA,CAGD,+BACC,6BAAA,CAKH,0BACE,KACD,0DAAA,CAGC,GACD,+CAAA,CAAA",sourcesContent:["\n.--initial-render {\n\t.editor--toc {\n\t\t&__item {\n\t\t\t--initial-padding-left: 0;\n\t\t\tanimation: initialPadding 1.5s;\n\t\t}\n\t}\n}\n\n.editor--toc {\n\tpadding: 0 10px;\n\tcolor: var(--color-main-text-maxcontrast);\n\t--animation-duration: 0.8s;\n\n\th3 {\n\t\tpadding-left: 0.75rem;\n\t}\n\n\t&__list {\n\t\twidth: 100%;\n\t\tlist-style: none;\n\t\tfont-size: 0.9rem;\n\t\tpadding: 0;\n\n\t\tanimation-name: fadeInLeft;\n\t\tanimation-duration: var(--animation-duration);\n\t}\n\n\t&__item {\n\t\ttransform: translateX(var(--padding-left, 0rem));\n\t\ttext-overflow: ellipsis;\n\t\toverflow: hidden;\n\t\twhite-space: nowrap;\n\t\tanimation: initialPadding calc(var(--animation-duration) * 2);\n\t\twidth: calc(100% - var(--padding-left));\n\n\t\ta:hover {\n\t\t\tcolor: var(--color-primary-hover);\n\t\t}\n\n\t\t&--1 {\n\t\t\t--padding-left: 0rem;\n\t\t\tfont-weight: 600;\n\t\t\t&:not(:nth-child(1)) {\n\t\t\t\tmargin-top: 0.5rem;\n\t\t\t}\n\t\t}\n\n\t\t&--2 {\n\t\t\t--padding-left: 1rem;\n\t\t}\n\n\t\t&--3 {\n\t\t\t--padding-left: 2rem;\n\t\t}\n\n\t\t&--4 {\n\t\t\t--padding-left: 3rem;\n\t\t}\n\n\t\t&--5 {\n\t\t\t--padding-left: 4rem;\n\t\t}\n\n\t\t&--6 {\n\t\t\t--padding-left: 5rem;\n\t\t}\n\n\t\t&--previous-1 {\n\t\t\t--initial-padding-left: 0rem\n\t\t}\n\n\t\t&--previous-2 {\n\t\t\t--initial-padding-left: 1rem\n\t\t}\n\n\t\t&--previous-3 {\n\t\t\t--initial-padding-left: 2rem\n\t\t}\n\n\t\t&--previous-4 {\n\t\t\t--initial-padding-left: 3rem\n\t\t}\n\n\t\t&--previous-5 {\n\t\t\t--initial-padding-left: 4rem\n\t\t}\n\n\t\t&--previous-6 {\n\t\t\t--initial-padding-left: 5rem\n\t\t}\n\t}\n}\n\n@keyframes initialPadding {\n from {\n\ttransform: translateX(var(--initial-padding-left, initial));\n }\n\n to {\n\ttransform: translateX(var(--padding-left, 0rem));\n }\n}\n\n"],sourceRoot:""}]);const s=a},90057:(t,e,n)=>{"use strict";n.d(e,{Z:()=>s});var i=n(87537),r=n.n(i),o=n(23645),a=n.n(o)()(r());a.push([t.id,".text-editor__wrapper[data-v-12bd2945]{display:flex;width:100%;height:100%}.text-editor__wrapper.show-color-annotations[data-v-12bd2945] .author-annotation{padding-top:2px;padding-bottom:2px}.text-editor__wrapper[data-v-12bd2945]:not(.show-color-annotations) .author-annotation,.text-editor__wrapper[data-v-12bd2945]:not(.show-color-annotations) .image{background-color:rgba(0,0,0,0) !important}.text-editor__wrapper .ProseMirror[data-v-12bd2945]{margin-top:0 !important}.text-editor__wrapper.icon-loading .text-editor__main[data-v-12bd2945]{opacity:.3}","",{version:3,sources:["webpack://./src/components/Editor/Wrapper.vue"],names:[],mappings:"AAEA,uCACC,YAAA,CACA,UAAA,CACA,WAAA,CAEA,iFACC,eAAA,CACA,kBAAA,CAGD,kKAEC,yCAAA,CAGD,oDACC,uBAAA,CAGA,uEACC,UAAA",sourcesContent:["\n\n.text-editor__wrapper {\n\tdisplay: flex;\n\twidth: 100%;\n\theight: 100%;\n\n\t&.show-color-annotations:deep(.author-annotation) {\n\t\tpadding-top: 2px;\n\t\tpadding-bottom: 2px;\n\t}\n\n\t&:not(.show-color-annotations):deep(.author-annotation),\n\t&:not(.show-color-annotations):deep(.image) {\n\t\tbackground-color: transparent !important;\n\t}\n\n\t.ProseMirror {\n\t\tmargin-top: 0 !important;\n\t}\n\t&.icon-loading {\n\t\t.text-editor__main {\n\t\t\topacity: 0.3;\n\t\t}\n\t}\n}\n\n"],sourceRoot:""}]);const s=a},28091:(t,e,n)=>{"use strict";n.d(e,{Z:()=>A});var i=n(87537),r=n.n(i),o=n(23645),a=n.n(o),s=n(61667),l=n.n(s),c=new URL(n(64989),n.b),d=a()(r()),h=l()(c);d.push([t.id,'[data-v-a7b1a700] .modal-wrapper .modal-container{width:max-content;padding:30px 40px 20px;user-select:text}@media only screen and (max-width: 512px){[data-v-a7b1a700] .modal-wrapper .modal-container{width:inherit;padding:10px 0}}table[data-v-a7b1a700]{margin-top:24px;border-collapse:collapse}table tbody tr[data-v-a7b1a700]:hover,table tbody tr[data-v-a7b1a700]:focus,table tbody tr[data-v-a7b1a700]:active{background-color:rgba(0,0,0,0) !important}table thead tr[data-v-a7b1a700]{border:none}table th[data-v-a7b1a700]{font-weight:bold;padding:.75rem 1rem .75rem 0;border-bottom:2px solid var(--color-background-darker)}table td[data-v-a7b1a700]{padding:.75rem 1rem .75rem 0;border-top:1px solid var(--color-background-dark);border-bottom:unset}table td.noborder[data-v-a7b1a700]{border-top:unset}table td.ellipsis_top[data-v-a7b1a700]{padding-bottom:0}table td.ellipsis[data-v-a7b1a700]{padding-top:0;padding-bottom:0}table td.ellipsis_bottom[data-v-a7b1a700]{padding-top:0}table kbd[data-v-a7b1a700]{font-size:smaller}table code[data-v-a7b1a700]{padding:.2em .4em;font-size:90%;background-color:var(--color-background-dark);border-radius:6px}div.ProseMirror[data-v-a7b1a700]{height:100%;position:relative;word-wrap:break-word;white-space:pre-wrap;-webkit-font-variant-ligatures:none;font-variant-ligatures:none;padding:4px 8px 200px 14px;line-height:150%;font-size:var(--default-font-size);outline:none;--table-color-border: var(--color-border);--table-color-heading: var(--color-text-maxcontrast);--table-color-heading-border: var(--color-border-dark);--table-color-background: var(--color-main-background);--table-color-background-hover: var(--color-primary-light);--table-border-radius: var(--border-radius)}div.ProseMirror[data-v-a7b1a700] :target{scroll-margin-top:50px}div.ProseMirror[contenteditable=true][data-v-a7b1a700],div.ProseMirror[contenteditable=false][data-v-a7b1a700],div.ProseMirror [contenteditable=true][data-v-a7b1a700],div.ProseMirror [contenteditable=false][data-v-a7b1a700]{width:100%;background-color:rgba(0,0,0,0);color:var(--color-main-text);opacity:1;-webkit-user-select:text;user-select:text;font-size:var(--default-font-size)}div.ProseMirror[contenteditable=true][data-v-a7b1a700]:not(.collaboration-cursor__caret),div.ProseMirror[contenteditable=false][data-v-a7b1a700]:not(.collaboration-cursor__caret),div.ProseMirror [contenteditable=true][data-v-a7b1a700]:not(.collaboration-cursor__caret),div.ProseMirror [contenteditable=false][data-v-a7b1a700]:not(.collaboration-cursor__caret){border:none !important}div.ProseMirror[contenteditable=true][data-v-a7b1a700]:focus,div.ProseMirror[contenteditable=true][data-v-a7b1a700]:focus-visible,div.ProseMirror[contenteditable=false][data-v-a7b1a700]:focus,div.ProseMirror[contenteditable=false][data-v-a7b1a700]:focus-visible,div.ProseMirror [contenteditable=true][data-v-a7b1a700]:focus,div.ProseMirror [contenteditable=true][data-v-a7b1a700]:focus-visible,div.ProseMirror [contenteditable=false][data-v-a7b1a700]:focus,div.ProseMirror [contenteditable=false][data-v-a7b1a700]:focus-visible{box-shadow:none !important}div.ProseMirror ul[data-type=taskList][data-v-a7b1a700]{margin-left:1px}div.ProseMirror .checkbox-item[data-v-a7b1a700]{display:flex;align-items:start}div.ProseMirror .checkbox-item input[type=checkbox][data-v-a7b1a700]{display:none}div.ProseMirror .checkbox-item[data-v-a7b1a700]:before{content:"";vertical-align:middle;margin:3px 6px 3px 2px;border:1px solid var(--color-text-maxcontrast);display:block;border-radius:var(--border-radius);height:14px;width:14px;box-shadow:none !important;background-position:center;cursor:pointer;left:9px}div.ProseMirror .checkbox-item.checked[data-v-a7b1a700]:before{background-image:url('+h+');background-color:var(--color-primary-element);border-color:var(--color-primary-element)}div.ProseMirror .checkbox-item.checked label[data-v-a7b1a700]{color:var(--color-text-maxcontrast);text-decoration:line-through}div.ProseMirror .checkbox-item label[data-v-a7b1a700]{display:block;flex-grow:1;max-width:calc(100% - 28px)}div.ProseMirror>*[data-v-a7b1a700]:first-child{margin-top:10px}div.ProseMirror>h1[data-v-a7b1a700]:first-child,div.ProseMirror h2[data-v-a7b1a700]:first-child,div.ProseMirror h3[data-v-a7b1a700]:first-child,div.ProseMirror h4[data-v-a7b1a700]:first-child,div.ProseMirror h5[data-v-a7b1a700]:first-child,div.ProseMirror h6[data-v-a7b1a700]:first-child{margin-top:0}div.ProseMirror a[data-v-a7b1a700]{color:var(--color-primary-element);text-decoration:underline;padding:.5em 0}div.ProseMirror p .paragraph-content[data-v-a7b1a700]{margin-bottom:1em;line-height:150%}div.ProseMirror em[data-v-a7b1a700]{font-style:italic}div.ProseMirror h1[data-v-a7b1a700],div.ProseMirror h2[data-v-a7b1a700],div.ProseMirror h3[data-v-a7b1a700],div.ProseMirror h4[data-v-a7b1a700],div.ProseMirror h5[data-v-a7b1a700],div.ProseMirror h6[data-v-a7b1a700]{font-weight:600;line-height:1.1em;margin-top:24px;margin-bottom:12px;color:var(--color-main-text)}div.ProseMirror h1[data-v-a7b1a700]{font-size:36px}div.ProseMirror h2[data-v-a7b1a700]{font-size:30px}div.ProseMirror h3[data-v-a7b1a700]{font-size:24px}div.ProseMirror h4[data-v-a7b1a700]{font-size:21px}div.ProseMirror h5[data-v-a7b1a700]{font-size:17px}div.ProseMirror h6[data-v-a7b1a700]{font-size:var(--default-font-size)}div.ProseMirror img[data-v-a7b1a700]{cursor:default;max-width:100%}div.ProseMirror hr[data-v-a7b1a700]{padding:2px 0;border:none;margin:2em 0;width:100%}div.ProseMirror hr[data-v-a7b1a700]:after{content:"";display:block;height:1px;background-color:var(--color-border-dark);line-height:2px}div.ProseMirror pre[data-v-a7b1a700]{white-space:pre-wrap;background-color:var(--color-background-dark);border-radius:var(--border-radius);padding:1em 1.3em;margin-bottom:1em}div.ProseMirror pre[data-v-a7b1a700]::before{content:attr(data-language);text-transform:uppercase;display:block;text-align:right;font-weight:bold;font-size:.6rem}div.ProseMirror pre code .hljs-comment[data-v-a7b1a700],div.ProseMirror pre code .hljs-quote[data-v-a7b1a700]{color:#999}div.ProseMirror pre code .hljs-variable[data-v-a7b1a700],div.ProseMirror pre code .hljs-template-variable[data-v-a7b1a700],div.ProseMirror pre code .hljs-attribute[data-v-a7b1a700],div.ProseMirror pre code .hljs-tag[data-v-a7b1a700],div.ProseMirror pre code .hljs-name[data-v-a7b1a700],div.ProseMirror pre code .hljs-regexp[data-v-a7b1a700],div.ProseMirror pre code .hljs-link[data-v-a7b1a700],div.ProseMirror pre code .hljs-selector-id[data-v-a7b1a700],div.ProseMirror pre code .hljs-selector-class[data-v-a7b1a700]{color:#f2777a}div.ProseMirror pre code .hljs-number[data-v-a7b1a700],div.ProseMirror pre code .hljs-meta[data-v-a7b1a700],div.ProseMirror pre code .hljs-built_in[data-v-a7b1a700],div.ProseMirror pre code .hljs-builtin-name[data-v-a7b1a700],div.ProseMirror pre code .hljs-literal[data-v-a7b1a700],div.ProseMirror pre code .hljs-type[data-v-a7b1a700],div.ProseMirror pre code .hljs-params[data-v-a7b1a700]{color:#f99157}div.ProseMirror pre code .hljs-string[data-v-a7b1a700],div.ProseMirror pre code .hljs-symbol[data-v-a7b1a700],div.ProseMirror pre code .hljs-bullet[data-v-a7b1a700]{color:#9c9}div.ProseMirror pre code .hljs-title[data-v-a7b1a700],div.ProseMirror pre code .hljs-section[data-v-a7b1a700]{color:#fc6}div.ProseMirror pre code .hljs-keyword[data-v-a7b1a700],div.ProseMirror pre code .hljs-selector-tag[data-v-a7b1a700]{color:#69c}div.ProseMirror pre code .hljs-emphasis[data-v-a7b1a700]{font-style:italic}div.ProseMirror pre code .hljs-strong[data-v-a7b1a700]{font-weight:700}div.ProseMirror pre.frontmatter[data-v-a7b1a700]{margin-bottom:2em;border-left:4px solid var(--color-primary-element)}div.ProseMirror pre.frontmatter[data-v-a7b1a700]::before{display:block;content:attr(data-title);color:var(--color-text-maxcontrast);padding-bottom:.5em}div.ProseMirror p code[data-v-a7b1a700]{background-color:var(--color-background-dark);border-radius:var(--border-radius);padding:.1em .3em}div.ProseMirror li[data-v-a7b1a700]{position:relative;padding-left:3px}div.ProseMirror li p .paragraph-content[data-v-a7b1a700]{margin-bottom:.5em}div.ProseMirror ul[data-v-a7b1a700],div.ProseMirror ol[data-v-a7b1a700]{padding-left:10px;margin-left:10px;margin-bottom:1em}div.ProseMirror ul>li[data-v-a7b1a700]{list-style-type:disc}div.ProseMirror li ul>li[data-v-a7b1a700]{list-style-type:circle}div.ProseMirror li li ul>li[data-v-a7b1a700]{list-style-type:square}div.ProseMirror blockquote[data-v-a7b1a700]{padding-left:1em;border-left:4px solid var(--color-primary-element);color:var(--color-text-maxcontrast);margin-left:0;margin-right:0}div.ProseMirror table[data-v-a7b1a700]{border-spacing:0;width:calc(100% - 50px);table-layout:auto;white-space:normal;margin-bottom:1em}div.ProseMirror table[data-v-a7b1a700]{margin-top:1em}div.ProseMirror table td[data-v-a7b1a700],div.ProseMirror table th[data-v-a7b1a700]{border:1px solid var(--table-color-border);border-left:0;vertical-align:top;max-width:100%}div.ProseMirror table td[data-v-a7b1a700]:first-child,div.ProseMirror table th[data-v-a7b1a700]:first-child{border-left:1px solid var(--table-color-border)}div.ProseMirror table td[data-v-a7b1a700]{padding:.5em .75em;border-top:0;color:var(--color-main-text)}div.ProseMirror table th[data-v-a7b1a700]{padding:0 0 0 .75em;font-weight:normal;border-bottom-color:var(--table-color-heading-border);color:var(--table-color-heading)}div.ProseMirror table th>div[data-v-a7b1a700]{display:flex}div.ProseMirror table tr[data-v-a7b1a700]{background-color:var(--table-color-background)}div.ProseMirror table tr[data-v-a7b1a700]:hover,div.ProseMirror table tr[data-v-a7b1a700]:active,div.ProseMirror table tr[data-v-a7b1a700]:focus{background-color:var(--table-color-background-hover)}div.ProseMirror table tr:first-child th[data-v-a7b1a700]:first-child{border-top-left-radius:var(--table-border-radius)}div.ProseMirror table tr:first-child th[data-v-a7b1a700]:last-child{border-top-right-radius:var(--table-border-radius)}div.ProseMirror table tr:last-child td[data-v-a7b1a700]:first-child{border-bottom-left-radius:var(--table-border-radius)}div.ProseMirror table tr:last-child td[data-v-a7b1a700]:last-child{border-bottom-right-radius:var(--table-border-radius)}.ProseMirror-focused .ProseMirror-gapcursor[data-v-a7b1a700]{display:block}.editor__content p.is-empty[data-v-a7b1a700]:first-child::before{content:attr(data-placeholder);float:left;color:var(--color-text-maxcontrast);pointer-events:none;height:0}.editor__content[data-v-a7b1a700]{tab-size:4}div.ProseMirror[data-v-a7b1a700]{display:inline;margin-top:unset;position:unset;padding:unset;line-height:unset}div.ProseMirror h1[data-v-a7b1a700],div.ProseMirror h6[data-v-a7b1a700]{display:inline;padding:0;margin:0}',"",{version:3,sources:["webpack://./src/components/HelpModal.vue","webpack://./css/prosemirror.scss"],names:[],mappings:"AAEC,kDACC,iBAAA,CACA,sBAAA,CACA,gBAAA,CAID,0CACC,kDACC,aAAA,CACA,cAAA,CAAA,CAKH,uBACC,eAAA,CACA,wBAAA,CAGC,mHACC,yCAAA,CAIF,gCACC,WAAA,CAGD,0BACC,gBAAA,CACA,4BAAA,CACA,sDAAA,CAGD,0BACC,4BAAA,CACA,iDAAA,CACA,mBAAA,CAEA,mCACC,gBAAA,CAGD,uCACC,gBAAA,CAGD,mCACC,aAAA,CACA,gBAAA,CAGD,0CACC,aAAA,CAIF,2BACC,iBAAA,CAGD,4BACC,iBAAA,CACA,aAAA,CACA,6CAAA,CACA,iBAAA,CCjEF,iCACC,WAAA,CACA,iBAAA,CACA,oBAAA,CACA,oBAAA,CACA,mCAAA,CACA,2BAAA,CACA,0BAAA,CACA,gBAAA,CACA,kCAAA,CACA,YAAA,CA+QA,yCAAA,CACA,oDAAA,CACA,sDAAA,CACA,sDAAA,CACA,0DAAA,CACA,2CAAA,CAlRA,yCAEC,sBAAA,CAGD,gOAIC,UAAA,CACA,8BAAA,CACA,4BAAA,CACA,SAAA,CACA,wBAAA,CACA,gBAAA,CACA,kCAAA,CAEA,wWACC,sBAAA,CAGD,ghBACC,0BAAA,CAIF,wDACC,eAAA,CAGD,gDACC,YAAA,CACA,iBAAA,CAEA,qEACC,YAAA,CAED,uDACC,UAAA,CACA,qBAAA,CACA,sBAAA,CACA,8CAAA,CACA,aAAA,CACA,kCAAA,CACA,WAAA,CACA,UAAA,CACA,0BAAA,CACA,0BAAA,CACA,cAAA,CACA,QAAA,CAGA,+DACC,wDAAA,CACA,6CAAA,CACA,yCAAA,CAED,8DACC,mCAAA,CACA,4BAAA,CAGF,sDACC,aAAA,CACA,WAAA,CACA,2BAAA,CAIF,+CACC,eAAA,CAIA,gSACC,YAAA,CAIF,mCACC,kCAAA,CACA,yBAAA,CACA,cAAA,CAGD,sDACC,iBAAA,CACA,gBAAA,CAGD,oCACC,iBAAA,CAGD,wNAMC,eAAA,CACA,iBAAA,CACA,eAAA,CACA,kBAAA,CACA,4BAAA,CAGD,oCACC,cAAA,CAGD,oCACC,cAAA,CAGD,oCACC,cAAA,CAGD,oCACC,cAAA,CAGD,oCACC,cAAA,CAGD,oCACC,kCAAA,CAGD,qCACC,cAAA,CACA,cAAA,CAGD,oCACC,aAAA,CACA,WAAA,CACA,YAAA,CACA,UAAA,CAGD,0CACC,UAAA,CACA,aAAA,CACA,UAAA,CACA,yCAAA,CACA,eAAA,CAGD,qCACC,oBAAA,CACA,6CAAA,CACA,kCAAA,CACA,iBAAA,CACA,iBAAA,CAEA,6CACC,2BAAA,CACA,wBAAA,CACA,aAAA,CACA,gBAAA,CACA,gBAAA,CACA,eAAA,CAGA,8GAEC,UAAA,CAED,qgBASC,aAAA,CAED,sYAOC,aAAA,CAED,qKAGC,UAAA,CAED,8GAEC,UAAA,CAED,qHAEC,UAAA,CAED,yDACC,iBAAA,CAED,uDACC,eAAA,CAKH,iDACC,iBAAA,CACA,kDAAA,CAGD,yDACC,aAAA,CACA,wBAAA,CACA,mCAAA,CACA,mBAAA,CAGD,wCACC,6CAAA,CACA,kCAAA,CACA,iBAAA,CAGD,oCACC,iBAAA,CACA,gBAAA,CAEA,yDACC,kBAAA,CAIF,wEACC,iBAAA,CACA,gBAAA,CACA,iBAAA,CAGD,uCACC,oBAAA,CAID,0CACC,sBAAA,CAID,6CACC,sBAAA,CAGD,4CACC,gBAAA,CACA,kDAAA,CACA,mCAAA,CACA,aAAA,CACA,cAAA,CAWD,uCACC,gBAAA,CACA,uBAAA,CACA,iBAAA,CACA,kBAAA,CACA,iBAAA,CACA,uCACC,cAAA,CAID,oFACC,0CAAA,CACA,aAAA,CACA,kBAAA,CACA,cAAA,CACA,4GACC,+CAAA,CAGF,0CACC,kBAAA,CACA,YAAA,CACA,4BAAA,CAED,0CACC,mBAAA,CACA,kBAAA,CACA,qDAAA,CACA,gCAAA,CAEA,8CACC,YAAA,CAGF,0CACC,8CAAA,CACA,iJACC,oDAAA,CAKD,qEAAA,iDAAA,CACA,oEAAA,kDAAA,CAIA,oEAAA,oDAAA,CACA,mEAAA,qDAAA,CAOH,6DACC,aAAA,CAGD,iEACC,8BAAA,CACA,UAAA,CACA,mCAAA,CACA,mBAAA,CACA,QAAA,CAGD,kCACC,UAAA,CD9RD,iCACC,cAAA,CACA,gBAAA,CACA,cAAA,CACA,aAAA,CACA,iBAAA,CAEA,wEACC,cAAA,CACA,SAAA,CACA,QAAA",sourcesContent:["\n:deep(.modal-wrapper) {\n\t.modal-container {\n\t\twidth: max-content;\n\t\tpadding: 30px 40px 20px;\n\t\tuser-select: text;\n\t}\n\n\t// Remove padding-right on mobile, screen might not be wide enough\n\t@media only screen and (max-width: 512px) {\n\t\t.modal-container {\n\t\t\twidth: inherit;\n\t\t\tpadding: 10px 0;\n\t\t}\n\t}\n}\n\ntable {\n\tmargin-top: 24px;\n\tborder-collapse: collapse;\n\n\ttbody tr {\n\t\t&:hover, &:focus, &:active {\n\t\t\tbackground-color: transparent !important;\n\t\t}\n\t}\n\n\tthead tr {\n\t\tborder: none;\n\t}\n\n\tth {\n\t\tfont-weight: bold;\n\t\tpadding: .75rem 1rem .75rem 0;\n\t\tborder-bottom: 2px solid var(--color-background-darker);\n\t}\n\n\ttd {\n\t\tpadding: .75rem 1rem .75rem 0;\n\t\tborder-top: 1px solid var(--color-background-dark);\n\t\tborder-bottom: unset;\n\n\t\t&.noborder {\n\t\t\tborder-top: unset;\n\t\t}\n\n\t\t&.ellipsis_top {\n\t\t\tpadding-bottom: 0;\n\t\t}\n\n\t\t&.ellipsis {\n\t\t\tpadding-top: 0;\n\t\t\tpadding-bottom: 0;\n\t\t}\n\n\t\t&.ellipsis_bottom {\n\t\t\tpadding-top: 0;\n\t\t}\n\t}\n\n\tkbd {\n\t\tfont-size: smaller;\n\t}\n\n\tcode {\n\t\tpadding: .2em .4em;\n\t\tfont-size: 90%;\n\t\tbackground-color: var(--color-background-dark);\n\t\tborder-radius: 6px;\n\t}\n}\n\n@import '../../css/prosemirror';\n\ndiv.ProseMirror {\n\tdisplay: inline;\n\tmargin-top: unset;\n\tposition: unset;\n\tpadding: unset;\n\tline-height: unset;\n\n\th1, h6 {\n\t\tdisplay: inline;\n\t\tpadding: 0;\n\t\tmargin: 0;\n\t}\n}\n","@use 'sass:selector';\n\n/* Document rendering styles */\ndiv.ProseMirror {\n\theight: 100%;\n\tposition: relative;\n\tword-wrap: break-word;\n\twhite-space: pre-wrap;\n\t-webkit-font-variant-ligatures: none;\n\tfont-variant-ligatures: none;\n\tpadding: 4px 8px 200px 14px;\n\tline-height: 150%;\n\tfont-size: var(--default-font-size);\n\toutline: none;\n\n\t:target {\n\t\t// Menubar height: 44px + 3px bottom + 3px top padding\n\t\tscroll-margin-top: 50px;\n\t}\n\n\t&[contenteditable=true],\n\t&[contenteditable=false],\n\t[contenteditable=true],\n\t[contenteditable=false] {\n\t\twidth: 100%;\n\t\tbackground-color: transparent;\n\t\tcolor: var(--color-main-text);\n\t\topacity: 1;\n\t\t-webkit-user-select: text;\n\t\tuser-select: text;\n\t\tfont-size: var(--default-font-size);\n\n\t\t&:not(.collaboration-cursor__caret) {\n\t\t\tborder: none !important;\n\t\t}\n\n\t\t&:focus, &:focus-visible {\n\t\t\tbox-shadow: none !important;\n\t\t}\n\t}\n\n\tul[data-type=taskList] {\n\t\tmargin-left: 1px;\n\t}\n\n\t.checkbox-item {\n\t\tdisplay: flex;\n\t\talign-items: start;\n\n\t\tinput[type=checkbox] {\n\t\t\tdisplay: none;\n\t\t}\n\t\t&:before {\n\t\t\tcontent: '';\n\t\t\tvertical-align: middle;\n\t\t\tmargin: 3px 6px 3px 2px;\n\t\t\tborder: 1px solid var(--color-text-maxcontrast);\n\t\t\tdisplay: block;\n\t\t\tborder-radius: var(--border-radius);\n\t\t\theight: 14px;\n\t\t\twidth: 14px;\n\t\t\tbox-shadow: none !important;\n\t\t\tbackground-position: center;\n\t\t\tcursor: pointer;\n\t\t\tleft: 9px;\n\t\t}\n\t\t&.checked{\n\t\t\t&:before {\n\t\t\t\tbackground-image: url('../../img/checkbox-mark.svg');\n\t\t\t\tbackground-color: var(--color-primary-element);\n\t\t\t\tborder-color: var(--color-primary-element);\n\t\t\t}\n\t\t\tlabel {\n\t\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t\t\ttext-decoration: line-through;\n\t\t\t}\n\t\t}\n\t\tlabel {\n\t\t\tdisplay: block;\n\t\t\tflex-grow: 1;\n\t\t\tmax-width: calc(100% - 28px);\n\t\t}\n\t}\n\n\t> *:first-child {\n\t\tmargin-top: 10px;\n\t}\n\n\t> h1,h2,h3,h4,h5,h6 {\n\t\t&:first-child {\n\t\t\tmargin-top: 0;\n\t\t}\n\t}\n\n\ta {\n\t\tcolor: var(--color-primary-element);\n\t\ttext-decoration: underline;\n\t\tpadding: .5em 0;\n\t}\n\n\tp .paragraph-content {\n\t\tmargin-bottom: 1em;\n\t\tline-height: 150%;\n\t}\n\n\tem {\n\t\tfont-style: italic;\n\t}\n\n\th1,\n\th2,\n\th3,\n\th4,\n\th5,\n\th6 {\n\t\tfont-weight: 600;\n\t\tline-height: 1.1em;\n\t\tmargin-top: 24px;\n\t\tmargin-bottom: 12px;\n\t\tcolor: var(--color-main-text);\n\t}\n\n\th1 {\n\t\tfont-size: 36px;\n\t}\n\n\th2 {\n\t\tfont-size: 30px;\n\t}\n\n\th3 {\n\t\tfont-size: 24px;\n\t}\n\n\th4 {\n\t\tfont-size: 21px;\n\t}\n\n\th5 {\n\t\tfont-size: 17px;\n\t}\n\n\th6 {\n\t\tfont-size: var(--default-font-size);\n\t}\n\n\timg {\n\t\tcursor: default;\n\t\tmax-width: 100%;\n\t}\n\n\thr {\n\t\tpadding: 2px 0;\n\t\tborder: none;\n\t\tmargin: 2em 0;\n\t\twidth: 100%;\n\t}\n\n\thr:after {\n\t\tcontent: '';\n\t\tdisplay: block;\n\t\theight: 1px;\n\t\tbackground-color: var(--color-border-dark);\n\t\tline-height: 2px;\n\t}\n\n\tpre {\n\t\twhite-space: pre-wrap;\n\t\tbackground-color: var(--color-background-dark);\n\t\tborder-radius: var(--border-radius);\n\t\tpadding: 1em 1.3em;\n\t\tmargin-bottom: 1em;\n\n\t\t&::before {\n\t\t\tcontent: attr(data-language);\n\t\t\ttext-transform: uppercase;\n\t\t\tdisplay: block;\n\t\t\ttext-align: right;\n\t\t\tfont-weight: bold;\n\t\t\tfont-size: 0.6rem;\n\t\t}\n\t\tcode {\n\t\t\t.hljs-comment,\n\t\t\t.hljs-quote {\n\t\t\t\tcolor: #999999;\n\t\t\t}\n\t\t\t.hljs-variable,\n\t\t\t.hljs-template-variable,\n\t\t\t.hljs-attribute,\n\t\t\t.hljs-tag,\n\t\t\t.hljs-name,\n\t\t\t.hljs-regexp,\n\t\t\t.hljs-link,\n\t\t\t.hljs-selector-id,\n\t\t\t.hljs-selector-class {\n\t\t\t\tcolor: #f2777a;\n\t\t\t}\n\t\t\t.hljs-number,\n\t\t\t.hljs-meta,\n\t\t\t.hljs-built_in,\n\t\t\t.hljs-builtin-name,\n\t\t\t.hljs-literal,\n\t\t\t.hljs-type,\n\t\t\t.hljs-params {\n\t\t\t\tcolor: #f99157;\n\t\t\t}\n\t\t\t.hljs-string,\n\t\t\t.hljs-symbol,\n\t\t\t.hljs-bullet {\n\t\t\t\tcolor: #99cc99;\n\t\t\t}\n\t\t\t.hljs-title,\n\t\t\t.hljs-section {\n\t\t\t\tcolor: #ffcc66;\n\t\t\t}\n\t\t\t.hljs-keyword,\n\t\t\t.hljs-selector-tag {\n\t\t\t\tcolor: #6699cc;\n\t\t\t}\n\t\t\t.hljs-emphasis {\n\t\t\t\tfont-style: italic;\n\t\t\t}\n\t\t\t.hljs-strong {\n\t\t\t\tfont-weight: 700;\n\t\t\t}\n\t\t}\n\t}\n\n\tpre.frontmatter {\n\t\tmargin-bottom: 2em;\n\t\tborder-left: 4px solid var(--color-primary-element);\n\t}\n\n\tpre.frontmatter::before {\n\t\tdisplay: block;\n\t\tcontent: attr(data-title);\n\t\tcolor: var(--color-text-maxcontrast);\n\t\tpadding-bottom: 0.5em;\n\t}\n\n\tp code {\n\t\tbackground-color: var(--color-background-dark);\n\t\tborder-radius: var(--border-radius);\n\t\tpadding: .1em .3em;\n\t}\n\n\tli {\n\t\tposition: relative;\n\t\tpadding-left: 3px;\n\n\t\tp .paragraph-content {\n\t\t\tmargin-bottom: 0.5em;\n\t\t}\n\t}\n\n\tul, ol {\n\t\tpadding-left: 10px;\n\t\tmargin-left: 10px;\n\t\tmargin-bottom: 1em;\n\t}\n\n\tul > li {\n\t\tlist-style-type: disc;\n\t}\n\n\t// Second-level list entries\n\tli ul > li {\n\t\tlist-style-type: circle;\n\t}\n\n\t// Third-level and further down list entries\n\tli li ul > li {\n\t\tlist-style-type: square;\n\t}\n\n\tblockquote {\n\t\tpadding-left: 1em;\n\t\tborder-left: 4px solid var(--color-primary-element);\n\t\tcolor: var(--color-text-maxcontrast);\n\t\tmargin-left: 0;\n\t\tmargin-right: 0;\n\t}\n\n\t// table variables\n\t--table-color-border: var(--color-border);\n\t--table-color-heading: var(--color-text-maxcontrast);\n\t--table-color-heading-border: var(--color-border-dark);\n\t--table-color-background: var(--color-main-background);\n\t--table-color-background-hover: var(--color-primary-light);\n\t--table-border-radius: var(--border-radius);\n\n\ttable {\n\t\tborder-spacing: 0;\n\t\twidth: calc(100% - 50px);\n\t\ttable-layout: auto;\n\t\twhite-space: normal; // force text to wrapping\n\t\tmargin-bottom: 1em;\n\t\t+ & {\n\t\t\tmargin-top: 1em;\n\t\t}\n\n\n\t\ttd, th {\n\t\t\tborder: 1px solid var(--table-color-border);\n\t\t\tborder-left: 0;\n\t\t\tvertical-align: top;\n\t\t\tmax-width: 100%;\n\t\t\t&:first-child {\n\t\t\t\tborder-left: 1px solid var(--table-color-border);\n\t\t\t}\n\t\t}\n\t\ttd {\n\t\t\tpadding: 0.5em 0.75em;\n\t\t\tborder-top: 0;\n\t\t\tcolor: var(--color-main-text);\n\t\t}\n\t\tth {\n\t\t\tpadding: 0 0 0 0.75em;\n\t\t\tfont-weight: normal;\n\t\t\tborder-bottom-color: var(--table-color-heading-border);\n\t\t\tcolor: var(--table-color-heading);\n\n\t\t\t& > div {\n\t\t\t\tdisplay: flex;\n\t\t\t}\n\t\t}\n\t\ttr {\n\t\t\tbackground-color: var(--table-color-background);\n\t\t\t&:hover, &:active, &:focus {\n\t\t\t\tbackground-color: var(--table-color-background-hover);\n\t\t\t}\n\t\t}\n\n\t\ttr:first-child {\n\t\t\tth:first-child { border-top-left-radius: var(--table-border-radius); }\n\t\t\tth:last-child { border-top-right-radius: var(--table-border-radius); }\n\t\t}\n\n\t\ttr:last-child {\n\t\t\ttd:first-child { border-bottom-left-radius: var(--table-border-radius); }\n\t\t\ttd:last-child { border-bottom-right-radius: var(--table-border-radius); }\n\t\t}\n\n\t}\n\n}\n\n.ProseMirror-focused .ProseMirror-gapcursor {\n\tdisplay: block;\n}\n\n.editor__content p.is-empty:first-child::before {\n\tcontent: attr(data-placeholder);\n\tfloat: left;\n\tcolor: var(--color-text-maxcontrast);\n\tpointer-events: none;\n\theight: 0;\n}\n\n.editor__content {\n\ttab-size: 4;\n}\n"],sourceRoot:""}]);const A=d},53180:(t,e,n)=>{"use strict";n.d(e,{Z:()=>s});var i=n(87537),r=n.n(i),o=n(23645),a=n.n(o)()(r());a.push([t.id,".modal__content[data-v-8f1a4cfa]{height:80vh;padding:0 50px;display:flex;justify-content:center}.modal__content img[data-v-8f1a4cfa]{width:100%;height:100%;object-fit:contain}","",{version:3,sources:["webpack://./src/components/ImageView/ShowImageModal.vue"],names:[],mappings:"AACA,iCACC,WAAA,CACA,cAAA,CACA,YAAA,CACA,sBAAA,CACA,qCACC,UAAA,CACA,WAAA,CACA,kBAAA",sourcesContent:["\n.modal__content {\n\theight: 80vh;\n\tpadding: 0 50px;\n\tdisplay: flex;\n\tjustify-content: center;\n\timg {\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\tobject-fit: contain;\n\t}\n}\n"],sourceRoot:""}]);const s=a},38304:(t,e,n)=>{"use strict";n.d(e,{Z:()=>s});var i=n(87537),r=n.n(i),o=n(23645),a=n.n(o)()(r());a.push([t.id,"ul.inline-container-content{display:flex;justify-content:space-between}ul.inline-container-content li{flex:1 1}ul.inline-container-content .action-button{padding:0 !important;width:100%;display:flex;justify-content:center}","",{version:3,sources:["webpack://./src/components/InlineActionsContainer.vue"],names:[],mappings:"AACA,4BACC,YAAA,CACA,6BAAA,CACA,+BACC,QAAA,CAGD,2CAEC,oBAAA,CACA,UAAA,CACA,YAAA,CACA,sBAAA",sourcesContent:["\nul.inline-container-content {\n\tdisplay: flex;\n\tjustify-content: space-between;\n\tli {\n\t\tflex: 1 1;\n\t}\n\n\t.action-button {\n\t\t// Fix action buttons beeing shifted to the left (right padding)\n\t\tpadding: 0 !important;\n\t\twidth: 100%;\n\t\tdisplay: flex;\n\t\tjustify-content: center;\n\t}\n}\n"],sourceRoot:""}]);const s=a},79020:(t,e,n)=>{"use strict";n.d(e,{Z:()=>s});var i=n(87537),r=n.n(i),o=n(23645),a=n.n(o)()(r());a.push([t.id,".text-menubar[data-v-37af82be]{--background-blur: blur(10px);position:sticky;top:0;z-index:10021;background-color:var(--color-main-background-translucent);backdrop-filter:var(--background-blur);max-height:44px;padding-top:3px;padding-bottom:3px;visibility:hidden;display:flex;justify-content:flex-end;align-items:center}.text-menubar.text-menubar--ready[data-v-37af82be]:not(.text-menubar--autohide){visibility:visible;animation-name:fadeInDown;animation-duration:.3s}.text-menubar.text-menubar--autohide[data-v-37af82be]{opacity:0;transition:visibility .2s .4s,opacity .2s .4s}.text-menubar.text-menubar--autohide.text-menubar--show[data-v-37af82be]{visibility:visible;opacity:1}.text-menubar .text-menubar__entries[data-v-37af82be]{display:flex;flex-grow:1;margin-left:max(0px,(100% - var(--text-editor-max-width))/2)}.text-menubar .text-menubar__slot[data-v-37af82be]{justify-content:flex-end;display:flex;min-width:max(0px,min(100px,(100% - var(--text-editor-max-width))/2))}.text-menubar.text-menubar--is-workspace .text-menubar__entries[data-v-37af82be]{margin-left:0}@media(max-width: 660px){.text-menubar .text-menubar__entries[data-v-37af82be]{margin-left:0}}","",{version:3,sources:["webpack://./src/components/Menu/MenuBar.vue"],names:[],mappings:"AACA,+BACC,6BAAA,CACA,eAAA,CACA,KAAA,CACA,aAAA,CACA,yDAAA,CACA,sCAAA,CACA,eAAA,CACA,eAAA,CACA,kBAAA,CAEA,iBAAA,CAEA,YAAA,CACA,wBAAA,CACA,kBAAA,CAEA,gFACC,kBAAA,CACA,yBAAA,CACA,sBAAA,CAGD,sDACC,SAAA,CACA,6CAAA,CACA,yEACC,kBAAA,CACA,SAAA,CAGF,sDACC,YAAA,CACA,WAAA,CACA,4DAAA,CAGD,mDACC,wBAAA,CACA,YAAA,CACA,qEAAA,CAIA,iFACC,aAAA,CAIF,yBACC,sDACC,aAAA,CAAA",sourcesContent:["\n.text-menubar {\n\t--background-blur: blur(10px);\n\tposition: sticky;\n\ttop: 0;\n\tz-index: 10021; // above modal-header so menubar is always on top\n\tbackground-color: var(--color-main-background-translucent);\n\tbackdrop-filter: var(--background-blur);\n\tmax-height: 44px; // important for mobile so that the buttons are always inside the container\n\tpadding-top:3px;\n\tpadding-bottom: 3px;\n\n\tvisibility: hidden;\n\n\tdisplay: flex;\n\tjustify-content: flex-end;\n\talign-items: center;\n\n\t&.text-menubar--ready:not(.text-menubar--autohide) {\n\t\tvisibility: visible;\n\t\tanimation-name: fadeInDown;\n\t\tanimation-duration: 0.3s;\n\t}\n\n\t&.text-menubar--autohide {\n\t\topacity: 0;\n\t\ttransition: visibility 0.2s 0.4s, opacity 0.2s 0.4s;\n\t\t&.text-menubar--show {\n\t\t\tvisibility: visible;\n\t\t\topacity: 1;\n\t\t}\n\t}\n\t.text-menubar__entries {\n\t\tdisplay: flex;\n\t\tflex-grow: 1;\n\t\tmargin-left: max(0px, calc((100% - var(--text-editor-max-width)) / 2));\n\t}\n\n\t.text-menubar__slot {\n\t\tjustify-content: flex-end;\n\t\tdisplay: flex;\n\t\tmin-width: max(0px, min(100px, (100% - var(--text-editor-max-width)) / 2));\n\t}\n\n\t&.text-menubar--is-workspace {\n\t\t.text-menubar__entries {\n\t\t\tmargin-left: 0;\n\t\t}\n\t}\n\n\t@media (max-width: 660px) {\n\t\t.text-menubar__entries {\n\t\t\tmargin-left: 0;\n\t\t}\n\t}\n}\n"],sourceRoot:""}]);const s=a},95832:(t,e,n)=>{"use strict";n.d(e,{Z:()=>s});var i=n(87537),r=n.n(i),o=n(23645),a=n.n(o)()(r());a.push([t.id,".translate-dialog[data-v-6f82ffba]{margin:24px}textarea[data-v-6f82ffba]{display:block;width:100%;margin-bottom:12px}.language-selector[data-v-6f82ffba]{display:flex;align-items:center;margin-bottom:12px}.language-selector label[data-v-6f82ffba]{flex-grow:1}.translate-actions[data-v-6f82ffba]{display:flex;justify-content:flex-end}.translate-actions button[data-v-6f82ffba]{margin-left:12px}","",{version:3,sources:["webpack://./src/components/Modal/Translate.vue"],names:[],mappings:"AACA,mCACC,WAAA,CAGD,0BACC,aAAA,CACA,UAAA,CACA,kBAAA,CAID,oCACC,YAAA,CACA,kBAAA,CACA,kBAAA,CAEA,0CACC,WAAA,CAIF,oCACC,YAAA,CACA,wBAAA,CAEA,2CACC,gBAAA",sourcesContent:["\n.translate-dialog {\n\tmargin: 24px;\n}\n\ntextarea {\n\tdisplay: block;\n\twidth: 100%;\n\tmargin-bottom: 12px;\n\n}\n\n.language-selector {\n\tdisplay: flex;\n\talign-items: center;\n\tmargin-bottom: 12px;\n\n\tlabel {\n\t\tflex-grow: 1;\n\t}\n}\n\n.translate-actions {\n\tdisplay: flex;\n\tjustify-content: flex-end;\n\n\tbutton {\n\t\tmargin-left: 12px;\n\t}\n}\n"],sourceRoot:""}]);const s=a},655:(t,e,n)=>{"use strict";n.d(e,{Z:()=>s});var i=n(87537),r=n.n(i),o=n(23645),a=n.n(o)()(r());a.push([t.id,"#read-only-editor{overflow:scroll}.thumbnailContainer #read-only-editor{width:100%}.thumbnailContainer #read-only-editor .ProseMirror{height:auto;margin:0 0 0 0;padding:0}","",{version:3,sources:["webpack://./src/components/Reader.vue"],names:[],mappings:"AAEA,kBACC,eAAA,CAGD,sCACC,UAAA,CAEA,mDACC,WAAA,CACA,cAAA,CACA,SAAA",sourcesContent:["\n\n#read-only-editor {\n\toverflow: scroll;\n}\n\n.thumbnailContainer #read-only-editor {\n\twidth: 100%;\n\n\t.ProseMirror {\n\t\theight: auto;\n\t\tmargin: 0 0 0 0;\n\t\tpadding: 0;\n\t}\n}\n\n"],sourceRoot:""}]);const s=a},49356:(t,e,n)=>{"use strict";n.d(e,{Z:()=>A});var i=n(87537),r=n.n(i),o=n(23645),a=n.n(o),s=n(61667),l=n.n(s),c=new URL(n(64989),n.b),d=a()(r()),h=l()(c);d.push([t.id,'div.ProseMirror{height:100%;position:relative;word-wrap:break-word;white-space:pre-wrap;-webkit-font-variant-ligatures:none;font-variant-ligatures:none;padding:4px 8px 200px 14px;line-height:150%;font-size:var(--default-font-size);outline:none;--table-color-border: var(--color-border);--table-color-heading: var(--color-text-maxcontrast);--table-color-heading-border: var(--color-border-dark);--table-color-background: var(--color-main-background);--table-color-background-hover: var(--color-primary-light);--table-border-radius: var(--border-radius)}div.ProseMirror :target{scroll-margin-top:50px}div.ProseMirror[contenteditable=true],div.ProseMirror[contenteditable=false],div.ProseMirror [contenteditable=true],div.ProseMirror [contenteditable=false]{width:100%;background-color:rgba(0,0,0,0);color:var(--color-main-text);opacity:1;-webkit-user-select:text;user-select:text;font-size:var(--default-font-size)}div.ProseMirror[contenteditable=true]:not(.collaboration-cursor__caret),div.ProseMirror[contenteditable=false]:not(.collaboration-cursor__caret),div.ProseMirror [contenteditable=true]:not(.collaboration-cursor__caret),div.ProseMirror [contenteditable=false]:not(.collaboration-cursor__caret){border:none !important}div.ProseMirror[contenteditable=true]:focus,div.ProseMirror[contenteditable=true]:focus-visible,div.ProseMirror[contenteditable=false]:focus,div.ProseMirror[contenteditable=false]:focus-visible,div.ProseMirror [contenteditable=true]:focus,div.ProseMirror [contenteditable=true]:focus-visible,div.ProseMirror [contenteditable=false]:focus,div.ProseMirror [contenteditable=false]:focus-visible{box-shadow:none !important}div.ProseMirror ul[data-type=taskList]{margin-left:1px}div.ProseMirror .checkbox-item{display:flex;align-items:start}div.ProseMirror .checkbox-item input[type=checkbox]{display:none}div.ProseMirror .checkbox-item:before{content:"";vertical-align:middle;margin:3px 6px 3px 2px;border:1px solid var(--color-text-maxcontrast);display:block;border-radius:var(--border-radius);height:14px;width:14px;box-shadow:none !important;background-position:center;cursor:pointer;left:9px}div.ProseMirror .checkbox-item.checked:before{background-image:url('+h+');background-color:var(--color-primary-element);border-color:var(--color-primary-element)}div.ProseMirror .checkbox-item.checked label{color:var(--color-text-maxcontrast);text-decoration:line-through}div.ProseMirror .checkbox-item label{display:block;flex-grow:1;max-width:calc(100% - 28px)}div.ProseMirror>*:first-child{margin-top:10px}div.ProseMirror>h1:first-child,div.ProseMirror h2:first-child,div.ProseMirror h3:first-child,div.ProseMirror h4:first-child,div.ProseMirror h5:first-child,div.ProseMirror h6:first-child{margin-top:0}div.ProseMirror a{color:var(--color-primary-element);text-decoration:underline;padding:.5em 0}div.ProseMirror p .paragraph-content{margin-bottom:1em;line-height:150%}div.ProseMirror em{font-style:italic}div.ProseMirror h1,div.ProseMirror h2,div.ProseMirror h3,div.ProseMirror h4,div.ProseMirror h5,div.ProseMirror h6{font-weight:600;line-height:1.1em;margin-top:24px;margin-bottom:12px;color:var(--color-main-text)}div.ProseMirror h1{font-size:36px}div.ProseMirror h2{font-size:30px}div.ProseMirror h3{font-size:24px}div.ProseMirror h4{font-size:21px}div.ProseMirror h5{font-size:17px}div.ProseMirror h6{font-size:var(--default-font-size)}div.ProseMirror img{cursor:default;max-width:100%}div.ProseMirror hr{padding:2px 0;border:none;margin:2em 0;width:100%}div.ProseMirror hr:after{content:"";display:block;height:1px;background-color:var(--color-border-dark);line-height:2px}div.ProseMirror pre{white-space:pre-wrap;background-color:var(--color-background-dark);border-radius:var(--border-radius);padding:1em 1.3em;margin-bottom:1em}div.ProseMirror pre::before{content:attr(data-language);text-transform:uppercase;display:block;text-align:right;font-weight:bold;font-size:.6rem}div.ProseMirror pre code .hljs-comment,div.ProseMirror pre code .hljs-quote{color:#999}div.ProseMirror pre code .hljs-variable,div.ProseMirror pre code .hljs-template-variable,div.ProseMirror pre code .hljs-attribute,div.ProseMirror pre code .hljs-tag,div.ProseMirror pre code .hljs-name,div.ProseMirror pre code .hljs-regexp,div.ProseMirror pre code .hljs-link,div.ProseMirror pre code .hljs-selector-id,div.ProseMirror pre code .hljs-selector-class{color:#f2777a}div.ProseMirror pre code .hljs-number,div.ProseMirror pre code .hljs-meta,div.ProseMirror pre code .hljs-built_in,div.ProseMirror pre code .hljs-builtin-name,div.ProseMirror pre code .hljs-literal,div.ProseMirror pre code .hljs-type,div.ProseMirror pre code .hljs-params{color:#f99157}div.ProseMirror pre code .hljs-string,div.ProseMirror pre code .hljs-symbol,div.ProseMirror pre code .hljs-bullet{color:#9c9}div.ProseMirror pre code .hljs-title,div.ProseMirror pre code .hljs-section{color:#fc6}div.ProseMirror pre code .hljs-keyword,div.ProseMirror pre code .hljs-selector-tag{color:#69c}div.ProseMirror pre code .hljs-emphasis{font-style:italic}div.ProseMirror pre code .hljs-strong{font-weight:700}div.ProseMirror pre.frontmatter{margin-bottom:2em;border-left:4px solid var(--color-primary-element)}div.ProseMirror pre.frontmatter::before{display:block;content:attr(data-title);color:var(--color-text-maxcontrast);padding-bottom:.5em}div.ProseMirror p code{background-color:var(--color-background-dark);border-radius:var(--border-radius);padding:.1em .3em}div.ProseMirror li{position:relative;padding-left:3px}div.ProseMirror li p .paragraph-content{margin-bottom:.5em}div.ProseMirror ul,div.ProseMirror ol{padding-left:10px;margin-left:10px;margin-bottom:1em}div.ProseMirror ul>li{list-style-type:disc}div.ProseMirror li ul>li{list-style-type:circle}div.ProseMirror li li ul>li{list-style-type:square}div.ProseMirror blockquote{padding-left:1em;border-left:4px solid var(--color-primary-element);color:var(--color-text-maxcontrast);margin-left:0;margin-right:0}div.ProseMirror table{border-spacing:0;width:calc(100% - 50px);table-layout:auto;white-space:normal;margin-bottom:1em}div.ProseMirror table{margin-top:1em}div.ProseMirror table td,div.ProseMirror table th{border:1px solid var(--table-color-border);border-left:0;vertical-align:top;max-width:100%}div.ProseMirror table td:first-child,div.ProseMirror table th:first-child{border-left:1px solid var(--table-color-border)}div.ProseMirror table td{padding:.5em .75em;border-top:0;color:var(--color-main-text)}div.ProseMirror table th{padding:0 0 0 .75em;font-weight:normal;border-bottom-color:var(--table-color-heading-border);color:var(--table-color-heading)}div.ProseMirror table th>div{display:flex}div.ProseMirror table tr{background-color:var(--table-color-background)}div.ProseMirror table tr:hover,div.ProseMirror table tr:active,div.ProseMirror table tr:focus{background-color:var(--table-color-background-hover)}div.ProseMirror table tr:first-child th:first-child{border-top-left-radius:var(--table-border-radius)}div.ProseMirror table tr:first-child th:last-child{border-top-right-radius:var(--table-border-radius)}div.ProseMirror table tr:last-child td:first-child{border-bottom-left-radius:var(--table-border-radius)}div.ProseMirror table tr:last-child td:last-child{border-bottom-right-radius:var(--table-border-radius)}.ProseMirror-focused .ProseMirror-gapcursor{display:block}.editor__content p.is-empty:first-child::before{content:attr(data-placeholder);float:left;color:var(--color-text-maxcontrast);pointer-events:none;height:0}.editor__content{tab-size:4}@media print{@page{size:A4;margin:2.5cm 2cm 2cm 2.5cm}body{position:absolute;overflow:visible !important}#viewer[data-handler=text]{border:none;width:100% !important;position:absolute !important}#viewer[data-handler=text] .modal-header{display:none !important}#viewer[data-handler=text] .modal-container{top:0px;height:fit-content}.text-editor .text-menubar{display:none !important}.text-editor .action-item{display:none !important}.text-editor .editor__content{max-width:100%}.text-editor .text-editor__wrapper{height:fit-content;position:unset}.text-editor div.ProseMirror h1,.text-editor div.ProseMirror h2,.text-editor div.ProseMirror h3,.text-editor div.ProseMirror h4,.text-editor div.ProseMirror h5{break-after:avoid}.text-editor div.ProseMirror .image,.text-editor div.ProseMirror img,.text-editor div.ProseMirror table{break-inside:avoid-page;max-width:90% !important;margin:5vw auto 5vw 5% !important}.text-editor div.ProseMirror th{color:#000 !important;font-weight:bold !important;border-width:0 1px 2px 0 !important;border-color:gray !important;border-style:none solid solid none !important}.text-editor div.ProseMirror th:last-of-type{border-width:0 0 2px 0 !important}.text-editor div.ProseMirror td{border-style:none solid none none !important;border-width:1px !important;border-color:gray !important}.text-editor div.ProseMirror td:last-of-type{border:none !important}.menubar-placeholder,.text-editor--readonly-bar{display:none}.text-editor__content-wrapper.--show-outline{display:block}.text-editor__content-wrapper .editor--outline{width:auto;height:auto;overflow:unset;position:relative}.text-editor__content-wrapper .editor--outline__btn-close{display:none}}@media print{#content{display:none}}',"",{version:3,sources:["webpack://./css/prosemirror.scss","webpack://./css/print.scss","webpack://./src/components/RichTextReader.vue"],names:[],mappings:"AAGA,gBACC,WAAA,CACA,iBAAA,CACA,oBAAA,CACA,oBAAA,CACA,mCAAA,CACA,2BAAA,CACA,0BAAA,CACA,gBAAA,CACA,kCAAA,CACA,YAAA,CA+QA,yCAAA,CACA,oDAAA,CACA,sDAAA,CACA,sDAAA,CACA,0DAAA,CACA,2CAAA,CAlRA,wBAEC,sBAAA,CAGD,4JAIC,UAAA,CACA,8BAAA,CACA,4BAAA,CACA,SAAA,CACA,wBAAA,CACA,gBAAA,CACA,kCAAA,CAEA,oSACC,sBAAA,CAGD,wYACC,0BAAA,CAIF,uCACC,eAAA,CAGD,+BACC,YAAA,CACA,iBAAA,CAEA,oDACC,YAAA,CAED,sCACC,UAAA,CACA,qBAAA,CACA,sBAAA,CACA,8CAAA,CACA,aAAA,CACA,kCAAA,CACA,WAAA,CACA,UAAA,CACA,0BAAA,CACA,0BAAA,CACA,cAAA,CACA,QAAA,CAGA,8CACC,wDAAA,CACA,6CAAA,CACA,yCAAA,CAED,6CACC,mCAAA,CACA,4BAAA,CAGF,qCACC,aAAA,CACA,WAAA,CACA,2BAAA,CAIF,8BACC,eAAA,CAIA,0LACC,YAAA,CAIF,kBACC,kCAAA,CACA,yBAAA,CACA,cAAA,CAGD,qCACC,iBAAA,CACA,gBAAA,CAGD,mBACC,iBAAA,CAGD,kHAMC,eAAA,CACA,iBAAA,CACA,eAAA,CACA,kBAAA,CACA,4BAAA,CAGD,mBACC,cAAA,CAGD,mBACC,cAAA,CAGD,mBACC,cAAA,CAGD,mBACC,cAAA,CAGD,mBACC,cAAA,CAGD,mBACC,kCAAA,CAGD,oBACC,cAAA,CACA,cAAA,CAGD,mBACC,aAAA,CACA,WAAA,CACA,YAAA,CACA,UAAA,CAGD,yBACC,UAAA,CACA,aAAA,CACA,UAAA,CACA,yCAAA,CACA,eAAA,CAGD,oBACC,oBAAA,CACA,6CAAA,CACA,kCAAA,CACA,iBAAA,CACA,iBAAA,CAEA,4BACC,2BAAA,CACA,wBAAA,CACA,aAAA,CACA,gBAAA,CACA,gBAAA,CACA,eAAA,CAGA,4EAEC,UAAA,CAED,4WASC,aAAA,CAED,+QAOC,aAAA,CAED,kHAGC,UAAA,CAED,4EAEC,UAAA,CAED,mFAEC,UAAA,CAED,wCACC,iBAAA,CAED,sCACC,eAAA,CAKH,gCACC,iBAAA,CACA,kDAAA,CAGD,wCACC,aAAA,CACA,wBAAA,CACA,mCAAA,CACA,mBAAA,CAGD,uBACC,6CAAA,CACA,kCAAA,CACA,iBAAA,CAGD,mBACC,iBAAA,CACA,gBAAA,CAEA,wCACC,kBAAA,CAIF,sCACC,iBAAA,CACA,gBAAA,CACA,iBAAA,CAGD,sBACC,oBAAA,CAID,yBACC,sBAAA,CAID,4BACC,sBAAA,CAGD,2BACC,gBAAA,CACA,kDAAA,CACA,mCAAA,CACA,aAAA,CACA,cAAA,CAWD,sBACC,gBAAA,CACA,uBAAA,CACA,iBAAA,CACA,kBAAA,CACA,iBAAA,CACA,sBACC,cAAA,CAID,kDACC,0CAAA,CACA,aAAA,CACA,kBAAA,CACA,cAAA,CACA,0EACC,+CAAA,CAGF,yBACC,kBAAA,CACA,YAAA,CACA,4BAAA,CAED,yBACC,mBAAA,CACA,kBAAA,CACA,qDAAA,CACA,gCAAA,CAEA,6BACC,YAAA,CAGF,yBACC,8CAAA,CACA,8FACC,oDAAA,CAKD,oDAAA,iDAAA,CACA,mDAAA,kDAAA,CAIA,mDAAA,oDAAA,CACA,kDAAA,qDAAA,CAOH,4CACC,aAAA,CAGD,gDACC,8BAAA,CACA,UAAA,CACA,mCAAA,CACA,mBAAA,CACA,QAAA,CAGD,iBACC,UAAA,CCxWD,aACC,MACC,OAAA,CACA,0BAAA,CAGD,KAEC,iBAAA,CACA,2BAAA,CAGD,2BAEC,WAAA,CACA,qBAAA,CAEA,4BAAA,CAEA,yCAEC,uBAAA,CAED,4CAEC,OAAA,CACA,kBAAA,CAKD,2BAEC,uBAAA,CAED,0BAEC,uBAAA,CAED,8BAEC,cAAA,CAED,mCACC,kBAAA,CACA,cAAA,CAIA,gKAEC,iBAAA,CAED,wGAEC,uBAAA,CAEA,wBAAA,CACA,iCAAA,CAID,gCACC,qBAAA,CACA,2BAAA,CACA,mCAAA,CACA,4BAAA,CACA,6CAAA,CAED,6CACC,iCAAA,CAGD,gCACC,4CAAA,CACA,2BAAA,CACA,4BAAA,CAED,6CACC,sBAAA,CAKH,gDACC,YAAA,CAIA,6CACC,aAAA,CAGD,+CACC,UAAA,CACA,WAAA,CACA,cAAA,CACA,iBAAA,CAED,0DACC,YAAA,CAAA,CChGH,aAEC,SACC,YAAA,CAAA",sourcesContent:["@use 'sass:selector';\n\n/* Document rendering styles */\ndiv.ProseMirror {\n\theight: 100%;\n\tposition: relative;\n\tword-wrap: break-word;\n\twhite-space: pre-wrap;\n\t-webkit-font-variant-ligatures: none;\n\tfont-variant-ligatures: none;\n\tpadding: 4px 8px 200px 14px;\n\tline-height: 150%;\n\tfont-size: var(--default-font-size);\n\toutline: none;\n\n\t:target {\n\t\t// Menubar height: 44px + 3px bottom + 3px top padding\n\t\tscroll-margin-top: 50px;\n\t}\n\n\t&[contenteditable=true],\n\t&[contenteditable=false],\n\t[contenteditable=true],\n\t[contenteditable=false] {\n\t\twidth: 100%;\n\t\tbackground-color: transparent;\n\t\tcolor: var(--color-main-text);\n\t\topacity: 1;\n\t\t-webkit-user-select: text;\n\t\tuser-select: text;\n\t\tfont-size: var(--default-font-size);\n\n\t\t&:not(.collaboration-cursor__caret) {\n\t\t\tborder: none !important;\n\t\t}\n\n\t\t&:focus, &:focus-visible {\n\t\t\tbox-shadow: none !important;\n\t\t}\n\t}\n\n\tul[data-type=taskList] {\n\t\tmargin-left: 1px;\n\t}\n\n\t.checkbox-item {\n\t\tdisplay: flex;\n\t\talign-items: start;\n\n\t\tinput[type=checkbox] {\n\t\t\tdisplay: none;\n\t\t}\n\t\t&:before {\n\t\t\tcontent: '';\n\t\t\tvertical-align: middle;\n\t\t\tmargin: 3px 6px 3px 2px;\n\t\t\tborder: 1px solid var(--color-text-maxcontrast);\n\t\t\tdisplay: block;\n\t\t\tborder-radius: var(--border-radius);\n\t\t\theight: 14px;\n\t\t\twidth: 14px;\n\t\t\tbox-shadow: none !important;\n\t\t\tbackground-position: center;\n\t\t\tcursor: pointer;\n\t\t\tleft: 9px;\n\t\t}\n\t\t&.checked{\n\t\t\t&:before {\n\t\t\t\tbackground-image: url('../../img/checkbox-mark.svg');\n\t\t\t\tbackground-color: var(--color-primary-element);\n\t\t\t\tborder-color: var(--color-primary-element);\n\t\t\t}\n\t\t\tlabel {\n\t\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t\t\ttext-decoration: line-through;\n\t\t\t}\n\t\t}\n\t\tlabel {\n\t\t\tdisplay: block;\n\t\t\tflex-grow: 1;\n\t\t\tmax-width: calc(100% - 28px);\n\t\t}\n\t}\n\n\t> *:first-child {\n\t\tmargin-top: 10px;\n\t}\n\n\t> h1,h2,h3,h4,h5,h6 {\n\t\t&:first-child {\n\t\t\tmargin-top: 0;\n\t\t}\n\t}\n\n\ta {\n\t\tcolor: var(--color-primary-element);\n\t\ttext-decoration: underline;\n\t\tpadding: .5em 0;\n\t}\n\n\tp .paragraph-content {\n\t\tmargin-bottom: 1em;\n\t\tline-height: 150%;\n\t}\n\n\tem {\n\t\tfont-style: italic;\n\t}\n\n\th1,\n\th2,\n\th3,\n\th4,\n\th5,\n\th6 {\n\t\tfont-weight: 600;\n\t\tline-height: 1.1em;\n\t\tmargin-top: 24px;\n\t\tmargin-bottom: 12px;\n\t\tcolor: var(--color-main-text);\n\t}\n\n\th1 {\n\t\tfont-size: 36px;\n\t}\n\n\th2 {\n\t\tfont-size: 30px;\n\t}\n\n\th3 {\n\t\tfont-size: 24px;\n\t}\n\n\th4 {\n\t\tfont-size: 21px;\n\t}\n\n\th5 {\n\t\tfont-size: 17px;\n\t}\n\n\th6 {\n\t\tfont-size: var(--default-font-size);\n\t}\n\n\timg {\n\t\tcursor: default;\n\t\tmax-width: 100%;\n\t}\n\n\thr {\n\t\tpadding: 2px 0;\n\t\tborder: none;\n\t\tmargin: 2em 0;\n\t\twidth: 100%;\n\t}\n\n\thr:after {\n\t\tcontent: '';\n\t\tdisplay: block;\n\t\theight: 1px;\n\t\tbackground-color: var(--color-border-dark);\n\t\tline-height: 2px;\n\t}\n\n\tpre {\n\t\twhite-space: pre-wrap;\n\t\tbackground-color: var(--color-background-dark);\n\t\tborder-radius: var(--border-radius);\n\t\tpadding: 1em 1.3em;\n\t\tmargin-bottom: 1em;\n\n\t\t&::before {\n\t\t\tcontent: attr(data-language);\n\t\t\ttext-transform: uppercase;\n\t\t\tdisplay: block;\n\t\t\ttext-align: right;\n\t\t\tfont-weight: bold;\n\t\t\tfont-size: 0.6rem;\n\t\t}\n\t\tcode {\n\t\t\t.hljs-comment,\n\t\t\t.hljs-quote {\n\t\t\t\tcolor: #999999;\n\t\t\t}\n\t\t\t.hljs-variable,\n\t\t\t.hljs-template-variable,\n\t\t\t.hljs-attribute,\n\t\t\t.hljs-tag,\n\t\t\t.hljs-name,\n\t\t\t.hljs-regexp,\n\t\t\t.hljs-link,\n\t\t\t.hljs-selector-id,\n\t\t\t.hljs-selector-class {\n\t\t\t\tcolor: #f2777a;\n\t\t\t}\n\t\t\t.hljs-number,\n\t\t\t.hljs-meta,\n\t\t\t.hljs-built_in,\n\t\t\t.hljs-builtin-name,\n\t\t\t.hljs-literal,\n\t\t\t.hljs-type,\n\t\t\t.hljs-params {\n\t\t\t\tcolor: #f99157;\n\t\t\t}\n\t\t\t.hljs-string,\n\t\t\t.hljs-symbol,\n\t\t\t.hljs-bullet {\n\t\t\t\tcolor: #99cc99;\n\t\t\t}\n\t\t\t.hljs-title,\n\t\t\t.hljs-section {\n\t\t\t\tcolor: #ffcc66;\n\t\t\t}\n\t\t\t.hljs-keyword,\n\t\t\t.hljs-selector-tag {\n\t\t\t\tcolor: #6699cc;\n\t\t\t}\n\t\t\t.hljs-emphasis {\n\t\t\t\tfont-style: italic;\n\t\t\t}\n\t\t\t.hljs-strong {\n\t\t\t\tfont-weight: 700;\n\t\t\t}\n\t\t}\n\t}\n\n\tpre.frontmatter {\n\t\tmargin-bottom: 2em;\n\t\tborder-left: 4px solid var(--color-primary-element);\n\t}\n\n\tpre.frontmatter::before {\n\t\tdisplay: block;\n\t\tcontent: attr(data-title);\n\t\tcolor: var(--color-text-maxcontrast);\n\t\tpadding-bottom: 0.5em;\n\t}\n\n\tp code {\n\t\tbackground-color: var(--color-background-dark);\n\t\tborder-radius: var(--border-radius);\n\t\tpadding: .1em .3em;\n\t}\n\n\tli {\n\t\tposition: relative;\n\t\tpadding-left: 3px;\n\n\t\tp .paragraph-content {\n\t\t\tmargin-bottom: 0.5em;\n\t\t}\n\t}\n\n\tul, ol {\n\t\tpadding-left: 10px;\n\t\tmargin-left: 10px;\n\t\tmargin-bottom: 1em;\n\t}\n\n\tul > li {\n\t\tlist-style-type: disc;\n\t}\n\n\t// Second-level list entries\n\tli ul > li {\n\t\tlist-style-type: circle;\n\t}\n\n\t// Third-level and further down list entries\n\tli li ul > li {\n\t\tlist-style-type: square;\n\t}\n\n\tblockquote {\n\t\tpadding-left: 1em;\n\t\tborder-left: 4px solid var(--color-primary-element);\n\t\tcolor: var(--color-text-maxcontrast);\n\t\tmargin-left: 0;\n\t\tmargin-right: 0;\n\t}\n\n\t// table variables\n\t--table-color-border: var(--color-border);\n\t--table-color-heading: var(--color-text-maxcontrast);\n\t--table-color-heading-border: var(--color-border-dark);\n\t--table-color-background: var(--color-main-background);\n\t--table-color-background-hover: var(--color-primary-light);\n\t--table-border-radius: var(--border-radius);\n\n\ttable {\n\t\tborder-spacing: 0;\n\t\twidth: calc(100% - 50px);\n\t\ttable-layout: auto;\n\t\twhite-space: normal; // force text to wrapping\n\t\tmargin-bottom: 1em;\n\t\t+ & {\n\t\t\tmargin-top: 1em;\n\t\t}\n\n\n\t\ttd, th {\n\t\t\tborder: 1px solid var(--table-color-border);\n\t\t\tborder-left: 0;\n\t\t\tvertical-align: top;\n\t\t\tmax-width: 100%;\n\t\t\t&:first-child {\n\t\t\t\tborder-left: 1px solid var(--table-color-border);\n\t\t\t}\n\t\t}\n\t\ttd {\n\t\t\tpadding: 0.5em 0.75em;\n\t\t\tborder-top: 0;\n\t\t\tcolor: var(--color-main-text);\n\t\t}\n\t\tth {\n\t\t\tpadding: 0 0 0 0.75em;\n\t\t\tfont-weight: normal;\n\t\t\tborder-bottom-color: var(--table-color-heading-border);\n\t\t\tcolor: var(--table-color-heading);\n\n\t\t\t& > div {\n\t\t\t\tdisplay: flex;\n\t\t\t}\n\t\t}\n\t\ttr {\n\t\t\tbackground-color: var(--table-color-background);\n\t\t\t&:hover, &:active, &:focus {\n\t\t\t\tbackground-color: var(--table-color-background-hover);\n\t\t\t}\n\t\t}\n\n\t\ttr:first-child {\n\t\t\tth:first-child { border-top-left-radius: var(--table-border-radius); }\n\t\t\tth:last-child { border-top-right-radius: var(--table-border-radius); }\n\t\t}\n\n\t\ttr:last-child {\n\t\t\ttd:first-child { border-bottom-left-radius: var(--table-border-radius); }\n\t\t\ttd:last-child { border-bottom-right-radius: var(--table-border-radius); }\n\t\t}\n\n\t}\n\n}\n\n.ProseMirror-focused .ProseMirror-gapcursor {\n\tdisplay: block;\n}\n\n.editor__content p.is-empty:first-child::before {\n\tcontent: attr(data-placeholder);\n\tfloat: left;\n\tcolor: var(--color-text-maxcontrast);\n\tpointer-events: none;\n\theight: 0;\n}\n\n.editor__content {\n\ttab-size: 4;\n}\n","@media print {\n\t@page {\n\t\tsize: A4;\n\t\tmargin: 2.5cm 2cm 2cm 2.5cm;\n\t}\n\n\tbody {\n\t\t// position: fixed does not support scrolling and as such only prints one page\n\t\tposition: absolute;\n\t\toverflow: visible!important;\n\t}\n\n\t#viewer[data-handler='text'] {\n\t\t// Hide top border\n\t\tborder: none;\n\t\twidth: 100%!important;\n\t\t// NcModal uses fixed, which will be cropped when printed\n\t\tposition: absolute!important;\n\n\t\t.modal-header {\n\t\t\t// Hide modal header (close button)\n\t\t\tdisplay: none!important;\n\t\t}\n\t\t.modal-container {\n\t\t\t// Make sure top aligned as we hided the menubar */\n\t\t\ttop: 0px;\n\t\t\theight: fit-content;\n\t\t}\n\t}\n\n\t.text-editor {\n\t\t.text-menubar {\n\t\t\t// Hide menu bar\n\t\t\tdisplay: none!important;\n\t\t}\n\t\t.action-item {\n\t\t\t// Hide table settings\n\t\t\tdisplay: none!important;\n\t\t}\n\t\t.editor__content {\n\t\t\t// Margins set by page rule\n\t\t\tmax-width: 100%;\n\t\t}\n\t\t.text-editor__wrapper {\n\t\t\theight: fit-content;\n\t\t\tposition: unset;\n\t\t}\n\n\t\tdiv.ProseMirror {\n\t\t\th1, h2, h3, h4, h5 {\n\t\t\t\t// orphaned headlines are ugly\n\t\t\t\tbreak-after: avoid;\n\t\t\t}\n\t\t\t.image, img, table {\n\t\t\t\t// try no page breaks within tables or images\n\t\t\t\tbreak-inside: avoid-page;\n\t\t\t\t// Some more indention\n\t\t\t\tmax-width: 90%!important;\n\t\t\t\tmargin: 5vw auto 5vw 5%!important;\n\t\t\t}\n\n\t\t\t// Add some borders below header and between columns\n\t\t\tth {\n\t\t\t\tcolor: black!important;\n\t\t\t\tfont-weight: bold!important;\n\t\t\t\tborder-width: 0 1px 2px 0!important;\n\t\t\t\tborder-color: gray!important;\n\t\t\t\tborder-style: none solid solid none!important;\n\t\t\t}\n\t\t\tth:last-of-type {\n\t\t\t\tborder-width: 0 0 2px 0!important;\n\t\t\t}\n\n\t\t\ttd {\n\t\t\t\tborder-style: none solid none none!important;\n\t\t\t\tborder-width: 1px!important;\n\t\t\t\tborder-color: gray!important;\n\t\t\t}\n\t\t\ttd:last-of-type {\n\t\t\t\tborder: none!important;\n\t\t\t}\n\t\t}\n\t}\n\n\t.menubar-placeholder, .text-editor--readonly-bar {\n\t\tdisplay: none;\n\t}\n\n\t.text-editor__content-wrapper {\n\t\t&.--show-outline {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\t.editor--outline {\n\t\t\twidth: auto;\n\t\t\theight: auto;\n\t\t\toverflow: unset;\n\t\t\tposition: relative;\n\t\t}\n\t\t.editor--outline__btn-close {\n\t\t\tdisplay: none;\n\t\t}\n\t}\n}\n","\n@import './../../css/prosemirror';\n@import './../../css/print';\n\n@media print {\n\t// Hide Content behind modal, this also hides the sidebar if open\n\t#content {\n\t\tdisplay: none;\n\t}\n}\n"],sourceRoot:""}]);const A=d},52211:(t,e,n)=>{"use strict";n.d(e,{Z:()=>s});var i=n(87537),r=n.n(i),o=n(23645),a=n.n(o)()(r());a.push([t.id,".saving-indicator-check[data-v-073a0278]{cursor:pointer}.saving-indicator-check[data-v-073a0278] svg{fill:var(--color-text-lighter)}.saving-indicator-container[data-v-073a0278]{display:none;position:absolute}.saving-indicator-container.error[data-v-073a0278],.saving-indicator-container.saving[data-v-073a0278]{display:inline}.saving-indicator-container.error>span[data-v-073a0278],.saving-indicator-container.saving>span[data-v-073a0278]{position:relative;top:6px;left:6px;cursor:pointer}.saving-indicator-container.saving>span[data-v-073a0278]{color:var(--color-primary)}.saving-indicator-container.saving>span[data-v-073a0278] svg{fill:var(--color-primary)}.saving-indicator-container.error>span[data-v-073a0278]{color:var(--color-error)}.saving-indicator-container.error>span[data-v-073a0278] svg{fill:var(--color-primary)}","",{version:3,sources:["webpack://./src/components/SavingIndicator.vue"],names:[],mappings:"AACA,yCACC,cAAA,CAEA,6CACC,8BAAA,CAIF,6CACC,YAAA,CACA,iBAAA,CAEA,uGACC,cAAA,CACA,iHACC,iBAAA,CACA,OAAA,CACA,QAAA,CACA,cAAA,CAIF,yDACC,0BAAA,CACA,6DACC,yBAAA,CAGF,wDACC,wBAAA,CACA,4DACC,yBAAA",sourcesContent:["\n.saving-indicator-check {\n\tcursor: pointer;\n\n\t:deep(svg) {\n\t\tfill: var(--color-text-lighter);\n\t}\n}\n\n.saving-indicator-container {\n\tdisplay: none;\n\tposition: absolute;\n\n\t&.error,&.saving {\n\t\tdisplay: inline;\n\t\t>span {\n\t\t\tposition: relative;\n\t\t\ttop: 6px;\n\t\t\tleft: 6px;\n\t\t\tcursor: pointer;\n\t\t}\n\t}\n\n\t&.saving > span {\n\t\tcolor: var(--color-primary);\n\t\t:deep(svg) {\n\t\t\tfill: var(--color-primary);\n\t\t}\n\t}\n\t&.error > span {\n\t\tcolor: var(--color-error);\n\t\t:deep(svg) {\n\t\t\tfill: var(--color-primary);\n\t\t}\n\t}\n}\n"],sourceRoot:""}]);const s=a},72451:(t,e,n)=>{"use strict";n.d(e,{Z:()=>s});var i=n(87537),r=n.n(i),o=n(23645),a=n.n(o)()(r());a.push([t.id,".emoji-list[data-v-75a9e928]{border-radius:var(--border-radius);background-color:var(--color-main-background);box-shadow:0 1px 5px var(--color-box-shadow);overflow:auto;min-width:200px;max-width:200px;padding:4px;max-height:195.5px;margin:5px 0}.emoji-list__item[data-v-75a9e928]{border-radius:8px;padding:4px 8px;margin-bottom:4px;opacity:.8;cursor:pointer;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.emoji-list__item[data-v-75a9e928]:last-child{margin-bottom:0}.emoji-list__item__emoji[data-v-75a9e928]{padding-right:8px}.emoji-list__item.is-selected[data-v-75a9e928],.emoji-list__item[data-v-75a9e928]:focus,.emoji-list__item[data-v-75a9e928]:hover{opacity:1;background-color:var(--color-primary-light)}","",{version:3,sources:["webpack://./src/components/Suggestion/Emoji/EmojiList.vue"],names:[],mappings:"AACA,6BACC,kCAAA,CACA,6CAAA,CACA,4CAAA,CACA,aAAA,CAEA,eAAA,CACA,eAAA,CACA,WAAA,CAEA,kBAAA,CACA,YAAA,CAEA,mCACC,iBAAA,CACA,eAAA,CACA,iBAAA,CACA,UAAA,CACA,cAAA,CAGA,kBAAA,CACA,eAAA,CACA,sBAAA,CAEA,8CACC,eAAA,CAGD,0CACC,iBAAA,CAGD,iIAGC,SAAA,CACA,2CAAA",sourcesContent:["\n.emoji-list {\n\tborder-radius: var(--border-radius);\n\tbackground-color: var(--color-main-background);\n\tbox-shadow: 0 1px 5px var(--color-box-shadow);\n\toverflow: auto;\n\n\tmin-width: 200px;\n\tmax-width: 200px;\n\tpadding: 4px;\n\t// Show maximum 5 entries and a half to show scroll\n\tmax-height: 35.5px * 5 + 18px;\n\tmargin: 5px 0;\n\n\t&__item {\n\t\tborder-radius: 8px;\n\t\tpadding: 4px 8px;\n\t\tmargin-bottom: 4px;\n\t\topacity: 0.8;\n\t\tcursor: pointer;\n\n\t\t// Take care of long names\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\n\t\t&:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\n\t\t&__emoji {\n\t\t\tpadding-right: 8px;\n\t\t}\n\n\t\t&.is-selected,\n\t\t&:focus,\n\t\t&:hover {\n\t\t\topacity: 1;\n\t\t\tbackground-color: var(--color-primary-light);\n\t\t}\n\t}\n}\n"],sourceRoot:""}]);const s=a},59724:(t,e,n)=>{"use strict";n.d(e,{Z:()=>s});var i=n(87537),r=n.n(i),o=n(23645),a=n.n(o)()(r());a.push([t.id,".link-picker__item[data-v-0ea7b674]{display:flex;align-items:center}.link-picker__item>div[data-v-0ea7b674]{padding:4px;padding-left:8px;overflow:hidden;text-overflow:ellipsis}.link-picker__item img[data-v-0ea7b674]{width:20px;height:20px;filter:var(--background-invert-if-dark)}","",{version:3,sources:["webpack://./src/components/Suggestion/LinkPicker/LinkPickerList.vue"],names:[],mappings:"AACA,oCACC,YAAA,CACA,kBAAA,CAEA,wCACC,WAAA,CACA,gBAAA,CACA,eAAA,CACA,sBAAA,CAGD,wCACC,UAAA,CACA,WAAA,CACA,uCAAA",sourcesContent:["\n.link-picker__item {\n\tdisplay: flex;\n\talign-items: center;\n\n\t& > div {\n\t\tpadding: 4px;\n\t\tpadding-left: 8px;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t}\n\n\timg {\n\t\twidth: 20px;\n\t\theight: 20px;\n\t\tfilter: var(--background-invert-if-dark);\n\t}\n}\n"],sourceRoot:""}]);const s=a},48518:(t,e,n)=>{"use strict";n.d(e,{Z:()=>m});var i=n(87537),r=n.n(i),o=n(23645),a=n.n(o),s=n(61667),l=n.n(s),c=new URL(n(63423),n.b),d=new URL(n(32605),n.b),h=new URL(n(87127),n.b),A=a()(r()),u=l()(c),p=l()(d),g=l()(h);A.push([t.id,".autocomplete-result[data-v-8b670548]{display:flex;height:30px;padding:10px}.highlight .autocomplete-result[data-v-8b670548]{color:var(--color-main-text);background:var(--color-primary-light)}.highlight .autocomplete-result[data-v-8b670548],.highlight .autocomplete-result *[data-v-8b670548]{cursor:pointer}.autocomplete-result__icon[data-v-8b670548]{position:relative;flex:0 0 30px;width:30px;min-width:30px;height:30px;border-radius:30px;background-color:var(--color-background-darker);background-repeat:no-repeat;background-position:center;background-size:10px}.autocomplete-result__icon--with-avatar[data-v-8b670548]{color:inherit;background-size:cover}.autocomplete-result__status[data-v-8b670548]{position:absolute;right:-4px;bottom:-4px;box-sizing:border-box;width:18px;height:18px;border:2px solid var(--color-main-background);border-radius:50%;background-color:var(--color-main-background);font-size:var(--default-font-size);line-height:15px;background-repeat:no-repeat;background-size:16px;background-position:center}.autocomplete-result__status--online[data-v-8b670548]{background-image:url("+u+")}.autocomplete-result__status--dnd[data-v-8b670548]{background-image:url("+p+");background-color:#fff}.autocomplete-result__status--away[data-v-8b670548]{background-image:url("+g+")}.autocomplete-result__status--icon[data-v-8b670548]{border:none;background-color:rgba(0,0,0,0)}.autocomplete-result__content[data-v-8b670548]{display:flex;flex:1 1 100%;flex-direction:column;justify-content:center;min-width:0;padding-left:10px}.autocomplete-result__title[data-v-8b670548],.autocomplete-result__subline[data-v-8b670548]{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.autocomplete-result__subline[data-v-8b670548]{color:var(--color-text-lighter)}","",{version:3,sources:["webpack://./src/components/Suggestion/Mention/AutoCompleteResult.vue"],names:[],mappings:"AAIA,sCACC,YAAA,CACA,WALgB,CAMhB,YALsB,CAOtB,iDACC,4BAAA,CACA,qCAAA,CACA,oGACC,cAAA,CAIF,4CACC,iBAAA,CACA,aAAA,CACA,UAnBe,CAoBf,cApBe,CAqBf,WArBe,CAsBf,kBAtBe,CAuBf,+CAAA,CACA,2BAAA,CACA,0BAAA,CACA,oBAAA,CACA,yDACC,aAAA,CACA,qBAAA,CAIF,8CACC,iBAAA,CACA,UAAA,CACA,WAAA,CACA,qBAAA,CACA,UAAA,CACA,WAAA,CACA,6CAAA,CACA,iBAAA,CACA,6CAAA,CACA,kCAAA,CACA,gBAAA,CACA,2BAAA,CACA,oBAAA,CACA,0BAAA,CAEA,sDACC,wDAAA,CAED,mDACC,wDAAA,CACA,qBAAA,CAED,oDACC,wDAAA,CAED,oDACC,WAAA,CACA,8BAAA,CAIF,+CACC,YAAA,CACA,aAAA,CACA,qBAAA,CACA,sBAAA,CACA,WAAA,CACA,iBAtEqB,CAyEtB,4FAEC,kBAAA,CACA,eAAA,CACA,sBAAA,CAGD,+CACC,+BAAA",sourcesContent:["\n$clickable-area: 30px;\n$autocomplete-padding: 10px;\n\n.autocomplete-result {\n\tdisplay: flex;\n\theight: $clickable-area;\n\tpadding: $autocomplete-padding;\n\n\t.highlight & {\n\t\tcolor: var(--color-main-text);\n\t\tbackground: var(--color-primary-light);\n\t\t&, * {\n\t\t\tcursor: pointer;\n\t\t}\n\t}\n\n\t&__icon {\n\t\tposition: relative;\n\t\tflex: 0 0 $clickable-area;\n\t\twidth: $clickable-area;\n\t\tmin-width: $clickable-area;\n\t\theight: $clickable-area;\n\t\tborder-radius: $clickable-area;\n\t\tbackground-color: var(--color-background-darker);\n\t\tbackground-repeat: no-repeat;\n\t\tbackground-position: center;\n\t\tbackground-size: $clickable-area - 2 * $autocomplete-padding;\n\t\t&--with-avatar {\n\t\t\tcolor: inherit;\n\t\t\tbackground-size: cover;\n\t\t}\n\t}\n\n\t&__status {\n\t\tposition: absolute;\n\t\tright: -4px;\n\t\tbottom: -4px;\n\t\tbox-sizing: border-box;\n\t\twidth: 18px;\n\t\theight: 18px;\n\t\tborder: 2px solid var(--color-main-background);\n\t\tborder-radius: 50%;\n\t\tbackground-color: var(--color-main-background);\n\t\tfont-size: var(--default-font-size);\n\t\tline-height: 15px;\n\t\tbackground-repeat: no-repeat;\n\t\tbackground-size: 16px;\n\t\tbackground-position: center;\n\n\t\t&--online{\n\t\t\tbackground-image: url('../../../assets/status-icons/user-status-online.svg');\n\t\t}\n\t\t&--dnd{\n\t\t\tbackground-image: url('../../../assets/status-icons/user-status-dnd.svg');\n\t\t\tbackground-color: #ffffff;\n\t\t}\n\t\t&--away{\n\t\t\tbackground-image: url('../../../assets/status-icons/user-status-away.svg');\n\t\t}\n\t\t&--icon {\n\t\t\tborder: none;\n\t\t\tbackground-color: transparent;\n\t\t}\n\t}\n\n\t&__content {\n\t\tdisplay: flex;\n\t\tflex: 1 1 100%;\n\t\tflex-direction: column;\n\t\tjustify-content: center;\n\t\tmin-width: 0;\n\t\tpadding-left: $autocomplete-padding;\n\t}\n\n\t&__title,\n\t&__subline {\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t}\n\n\t&__subline {\n\t\tcolor: var(--color-text-lighter);\n\t}\n}\n\n"],sourceRoot:""}]);const m=A},56057:(t,e,n)=>{"use strict";n.d(e,{Z:()=>s});var i=n(87537),r=n.n(i),o=n(23645),a=n.n(o)()(r());a.push([t.id,".items{position:relative;border-radius:var(--border-radius);background:var(--color-main-background);overflow:hidden;font-size:.9rem;box-shadow:0 1px 5px var(--color-box-shadow);min-width:250px}.item-empty{padding:4px 8px;opacity:.8}","",{version:3,sources:["webpack://./src/components/Suggestion/Mention/MentionList.vue"],names:[],mappings:"AACA,OACC,iBAAA,CACA,kCAAA,CACA,uCAAA,CACA,eAAA,CACA,eAAA,CACA,4CAAA,CACA,eAAA,CAGD,YACC,eAAA,CACA,UAAA",sourcesContent:["\n.items {\n\tposition: relative;\n\tborder-radius: var(--border-radius);\n\tbackground: var(--color-main-background);\n\toverflow: hidden;\n\tfont-size: 0.9rem;\n\tbox-shadow: 0 1px 5px var(--color-box-shadow);\n\tmin-width: 250px;\n}\n\n.item-empty {\n\tpadding: 4px 8px;\n\topacity: 0.8;\n}\n"],sourceRoot:""}]);const s=a},42062:(t,e,n)=>{"use strict";n.d(e,{Z:()=>s});var i=n(87537),r=n.n(i),o=n(23645),a=n.n(o)()(r());a.push([t.id,".suggestion-list[data-v-3fbaba71]{border-radius:var(--border-radius);background-color:var(--color-main-background);box-shadow:0 1px 5px var(--color-box-shadow);overflow:auto;min-width:200px;max-width:400px;padding:4px;max-height:195.5px;margin:5px 0}.suggestion-list__item[data-v-3fbaba71]{border-radius:8px;padding:4px 8px;margin-bottom:4px;opacity:.8;cursor:pointer;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.suggestion-list__item[data-v-3fbaba71]:last-child{margin-bottom:0}.suggestion-list__item__emoji[data-v-3fbaba71]{padding-right:8px}.suggestion-list__item.is-selected[data-v-3fbaba71],.suggestion-list__item[data-v-3fbaba71]:focus,.suggestion-list__item[data-v-3fbaba71]:hover{opacity:1;background-color:var(--color-primary-light)}","",{version:3,sources:["webpack://./src/components/Suggestion/SuggestionListWrapper.vue"],names:[],mappings:"AACA,kCACC,kCAAA,CACA,6CAAA,CACA,4CAAA,CACA,aAAA,CAEA,eAAA,CACA,eAAA,CACA,WAAA,CAEA,kBAAA,CACA,YAAA,CAEA,wCACC,iBAAA,CACA,eAAA,CACA,iBAAA,CACA,UAAA,CACA,cAAA,CAGA,kBAAA,CACA,eAAA,CACA,sBAAA,CAEA,mDACC,eAAA,CAGD,+CACC,iBAAA,CAGD,gJAGC,SAAA,CACA,2CAAA",sourcesContent:["\n.suggestion-list {\n\tborder-radius: var(--border-radius);\n\tbackground-color: var(--color-main-background);\n\tbox-shadow: 0 1px 5px var(--color-box-shadow);\n\toverflow: auto;\n\n\tmin-width: 200px;\n\tmax-width: 400px;\n\tpadding: 4px;\n\t// Show maximum 5 entries and a half to show scroll\n\tmax-height: 35.5px * 5 + 18px;\n\tmargin: 5px 0;\n\n\t&__item {\n\t\tborder-radius: 8px;\n\t\tpadding: 4px 8px;\n\t\tmargin-bottom: 4px;\n\t\topacity: 0.8;\n\t\tcursor: pointer;\n\n\t\t// Take care of long names\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\n\t\t&:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\n\t\t&__emoji {\n\t\t\tpadding-right: 8px;\n\t\t}\n\n\t\t&.is-selected,\n\t\t&:focus,\n\t\t&:hover {\n\t\t\topacity: 1;\n\t\t\tbackground-color: var(--color-primary-light);\n\t\t}\n\t}\n}\n"],sourceRoot:""}]);const s=a},16331:(t,e,n)=>{"use strict";n.d(e,{Z:()=>s});var i=n(87537),r=n.n(i),o=n(23645),a=n.n(o)()(r());a.push([t.id,".callout[data-v-2734884a]{background-color:var(--callout-background, var(--color-background-hover));border-left-color:var(--callout-border, var(--color-primary-element));border-radius:var(--border-radius);padding:1em;padding-left:.5em;border-left-width:.3em;border-left-style:solid;position:relative;margin-bottom:.5em;display:flex;align-items:center;justify-content:flex-start}.callout[data-v-2734884a]{margin-top:.5em}.callout .callout__content[data-v-2734884a]{margin-left:1em}.callout .callout__content[data-v-2734884a] p:last-child{margin-bottom:0}.callout .callout__icon[data-v-2734884a],.callout .callout__icon[data-v-2734884a] svg{color:var(--callout-border)}.callout[data-v-2734884a],.callout--info[data-v-2734884a]{--callout-border: var(--color-info, #006aa3)}.callout--warn[data-v-2734884a]{--callout-border: var(--color-warning)}.callout--error[data-v-2734884a]{--callout-border: var(--color-error)}.callout--success[data-v-2734884a]{--callout-border: var(--color-success)}","",{version:3,sources:["webpack://./src/nodes/Callout.vue"],names:[],mappings:"AACA,0BACC,yEAAA,CACA,qEAAA,CACA,kCAAA,CACA,WAAA,CACA,iBAAA,CACA,sBAAA,CACA,uBAAA,CACA,iBAAA,CACA,kBAAA,CAEA,YAAA,CACA,kBAAA,CACA,0BAAA,CAEA,0BACC,eAAA,CAGD,4CACC,eAAA,CAEC,yDACC,eAAA,CAMF,sFACC,2BAAA,CAKF,0DACC,4CAAA,CAID,gCACC,sCAAA,CAID,iCACC,oCAAA,CAID,mCACC,sCAAA",sourcesContent:["\n.callout {\n\tbackground-color: var(--callout-background, var(--color-background-hover));\n\tborder-left-color: var(--callout-border, var(--color-primary-element));\n\tborder-radius: var(--border-radius);\n\tpadding: 1em;\n\tpadding-left: 0.5em;\n\tborder-left-width: 0.3em;\n\tborder-left-style: solid;\n\tposition: relative;\n\tmargin-bottom: 0.5em;\n\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: flex-start;\n\n\t+ & {\n\t\tmargin-top: 0.5em;\n\t}\n\n\t.callout__content {\n\t\tmargin-left: 1em;\n\t\t&:deep(p) {\n\t\t\t&:last-child {\n\t\t\t\tmargin-bottom: 0;\n\t\t\t}\n\t\t}\n\t}\n\n\t.callout__icon {\n\t\t&, :deep(svg) {\n\t\t\tcolor: var(--callout-border);\n\t\t}\n\t}\n\n\t// Info (default) variables\n\t&, &--info {\n\t\t--callout-border: var(--color-info, #006aa3);\n\t}\n\n\t// Warn variables\n\t&--warn {\n\t\t--callout-border: var(--color-warning);\n\t}\n\n\t// Error variables\n\t&--error {\n\t\t--callout-border: var(--color-error);\n\t}\n\n\t// Success variables\n\t&--success {\n\t\t--callout-border: var(--color-success);\n\t}\n}\n"],sourceRoot:""}]);const s=a},86698:(t,e,n)=>{"use strict";n.d(e,{Z:()=>s});var i=n(87537),r=n.n(i),o=n(23645),a=n.n(o)()(r());a.push([t.id,"div.ProseMirror h1,div.ProseMirror h2,div.ProseMirror h3,div.ProseMirror h4,div.ProseMirror h5,div.ProseMirror h6{position:relative}div.ProseMirror h1 .heading-anchor[contenteditable=false],div.ProseMirror h2 .heading-anchor[contenteditable=false],div.ProseMirror h3 .heading-anchor[contenteditable=false],div.ProseMirror h4 .heading-anchor[contenteditable=false],div.ProseMirror h5 .heading-anchor[contenteditable=false],div.ProseMirror h6 .heading-anchor[contenteditable=false]{width:1em;opacity:0;padding:0;left:-1em;bottom:0;font-size:max(1em,16px);position:absolute;text-decoration:none;transition-duration:.15s;transition-property:opacity;transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1)}div.ProseMirror h1:hover .heading-anchor,div.ProseMirror h2:hover .heading-anchor,div.ProseMirror h3:hover .heading-anchor,div.ProseMirror h4:hover .heading-anchor,div.ProseMirror h5:hover .heading-anchor,div.ProseMirror h6:hover .heading-anchor{opacity:.5 !important}div.ProseMirror h1:focus-visible,div.ProseMirror h2:focus-visible,div.ProseMirror h3:focus-visible,div.ProseMirror h4:focus-visible,div.ProseMirror h5:focus-visible,div.ProseMirror h6:focus-visible{outline:none}","",{version:3,sources:["webpack://./src/nodes/Heading/HeadingView.vue"],names:[],mappings:"AAGC,kHACC,iBAAA,CACA,4VAEC,SAAA,CACA,SAAA,CACA,SAAA,CACA,SAAA,CACA,QAAA,CACA,uBAAA,CACA,iBAAA,CACA,oBAAA,CACA,wBAAA,CACA,2BAAA,CACA,uDAAA,CAGD,sPACC,qBAAA,CAGD,sMACC,YAAA",sourcesContent:['\ndiv.ProseMirror {\n\t/* Anchor links */\n\th1,h2,h3,h4,h5,h6 {\n\t\tposition: relative;\n\t\t.heading-anchor[contenteditable="false"] {\n\t\t\t// Shrink clickable area of anchor permalinks to not overlay the heading\n\t\t\twidth: 1em;\n\t\t\topacity: 0;\n\t\t\tpadding: 0;\n\t\t\tleft: -1em;\n\t\t\tbottom: 0;\n\t\t\tfont-size: max(1em, 16px);\n\t\t\tposition: absolute;\n\t\t\ttext-decoration: none;\n\t\t\ttransition-duration: .15s;\n\t\t\ttransition-property: opacity;\n\t\t\ttransition-timing-function: cubic-bezier(.4,0,.2,1);\n\t\t}\n\n\t\t&:hover .heading-anchor {\n\t\t\topacity: 0.5!important;\n\t\t}\n\n\t\t&:focus-visible {\n\t\t\toutline: none;\n\t\t}\n\t}\n}\n'],sourceRoot:""}]);const s=a},70235:(t,e,n)=>{"use strict";n.d(e,{Z:()=>s});var i=n(87537),r=n.n(i),o=n(23645),a=n.n(o)()(r());a.push([t.id,".image[data-v-4febfd28]{margin:0;padding:0}.image[data-v-4febfd28],.image *[data-v-4febfd28]{-webkit-user-modify:read-only !important}.image__caption[data-v-4febfd28]{text-align:center;color:var(--color-text-lighter);display:flex;align-items:center;justify-content:center}.image__caption__wrapper[data-v-4febfd28]{position:relative}.image__caption__delete[data-v-4febfd28]{display:flex;flex-basis:20%;align-items:center;width:20px;height:20px;position:absolute;right:-6px;bottom:10px}.image__caption__delete[data-v-4febfd28],.image__caption__delete svg[data-v-4febfd28]{cursor:pointer}.image__caption .image__caption__wrapper[data-v-4febfd28]{flex-basis:80%}.image__caption input[type=text][data-v-4febfd28]{width:85%;text-align:center;background-color:rgba(0,0,0,0);border:none !important;color:var(--color-text-maxcontrast) !important}.image__caption input[type=text][data-v-4febfd28]:focus{border:2px solid var(--color-border-dark) !important;color:var(--color-main-text) !important}.image__caption figcaption[data-v-4febfd28]{color:var(--color-text-maxcontrast) !important;max-width:80%;text-align:center;width:fit-content}.image__loading[data-v-4febfd28]{height:100px}.image__main[data-v-4febfd28]{max-height:calc(100vh - 50px - 50px)}.image__main--broken-icon[data-v-4febfd28],.image__error-message[data-v-4febfd28]{color:var(--color-text-maxcontrast)}.image__error-message[data-v-4febfd28]{display:block;text-align:center}.image__view[data-v-4febfd28]{text-align:center;position:relative}.image__view img[data-v-4febfd28]{max-width:100%}.image__view:hover input[type=text][data-v-4febfd28]{border:2px solid var(--color-border-dark) !important;color:var(--color-main-text) !important}.media[data-v-4febfd28]{display:flex;align-items:center;justify-content:left}.media .media__wrapper[data-v-4febfd28]{display:flex;border:2px solid var(--color-border);border-radius:var(--border-radius-large);padding:8px}.media .media__wrapper img[data-v-4febfd28]{width:44px;height:44px}.media .media__wrapper .metadata[data-v-4febfd28]{margin-left:8px;display:flex;flex-direction:column;align-items:start}.media .media__wrapper .metadata span[data-v-4febfd28]{line-height:20px;font-weight:normal}.media .media__wrapper .metadata span.size[data-v-4febfd28]{color:var(--color-text-maxcontrast)}.media .buttons[data-v-4febfd28]{margin-left:8px}.fade-enter-active[data-v-4febfd28]{transition:opacity .3s ease-in-out}.fade-enter-to[data-v-4febfd28]{opacity:1}.fade-enter[data-v-4febfd28]{opacity:0}","",{version:3,sources:["webpack://./src/nodes/ImageView.vue"],names:[],mappings:"AACA,wBACC,QAAA,CACA,SAAA,CAEA,kDACC,wCAAA,CAIF,iCACC,iBAAA,CACA,+BAAA,CACA,YAAA,CACA,kBAAA,CACA,sBAAA,CACA,0CACC,iBAAA,CAED,yCACC,YAAA,CACA,cAAA,CACA,kBAAA,CACA,UAAA,CACA,WAAA,CACA,iBAAA,CACA,UAAA,CACA,WAAA,CACA,sFACC,cAAA,CAGF,0DACC,cAAA,CAED,kDACC,SAAA,CACA,iBAAA,CACA,8BAAA,CACA,sBAAA,CACA,8CAAA,CAEA,wDACC,oDAAA,CACA,uCAAA,CAGF,4CACC,8CAAA,CACA,aAAA,CACA,iBAAA,CACA,iBAAA,CAIF,iCACC,YAAA,CAGD,8BACC,oCAAA,CAGD,kFACC,mCAAA,CAGD,uCACC,aAAA,CACA,iBAAA,CAGD,8BACC,iBAAA,CACA,iBAAA,CAEA,kCACC,cAAA,CAIA,qDACC,oDAAA,CACA,uCAAA,CAKH,wBACC,YAAA,CACA,kBAAA,CACA,oBAAA,CACA,wCACC,YAAA,CACA,oCAAA,CACA,wCAAA,CACA,WAAA,CAEA,4CACC,UAAA,CACA,WAAA,CAGD,kDACC,eAAA,CACA,YAAA,CACA,qBAAA,CACA,iBAAA,CAEA,uDACC,gBAAA,CACA,kBAAA,CAEA,4DACC,mCAAA,CAKJ,iCACC,eAAA,CAIF,oCACC,kCAAA,CAGD,gCACC,SAAA,CAGD,6BACC,SAAA",sourcesContent:["\n.image {\n\tmargin: 0;\n\tpadding: 0;\n\n\t&, * {\n\t\t-webkit-user-modify: read-only !important;\n\t}\n}\n\n.image__caption {\n\ttext-align: center;\n\tcolor: var(--color-text-lighter);\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\t&__wrapper {\n\t\tposition: relative;\n\t}\n\t&__delete {\n\t\tdisplay: flex;\n\t\tflex-basis: 20%;\n\t\talign-items: center;\n\t\twidth: 20px;\n\t\theight: 20px;\n\t\tposition: absolute;\n\t\tright: -6px;\n\t\tbottom: 10px;\n\t\t&, svg {\n\t\t\tcursor: pointer;\n\t\t}\n\t}\n\t.image__caption__wrapper {\n\t\tflex-basis: 80%;\n\t}\n\tinput[type='text'] {\n\t\twidth: 85%;\n\t\ttext-align: center;\n\t\tbackground-color: transparent;\n\t\tborder: none !important;\n\t\tcolor: var(--color-text-maxcontrast) !important;\n\n\t\t&:focus {\n\t\t\tborder: 2px solid var(--color-border-dark) !important;\n\t\t\tcolor: var(--color-main-text) !important;\n\t\t}\n\t}\n\tfigcaption {\n\t\tcolor: var(--color-text-maxcontrast) !important;\n\t\tmax-width: 80%;\n\t\ttext-align: center;\n\t\twidth: fit-content;\n\t}\n}\n\n.image__loading {\n\theight: 100px;\n}\n\n.image__main {\n\tmax-height: calc(100vh - 50px - 50px);\n}\n\n.image__main--broken-icon, .image__error-message {\n\tcolor: var(--color-text-maxcontrast);\n}\n\n.image__error-message {\n\tdisplay: block;\n\ttext-align: center;\n}\n\n.image__view {\n\ttext-align: center;\n\tposition: relative;\n\n\timg {\n\t\tmax-width: 100%;\n\t}\n\n\t&:hover {\n\t\tinput[type='text'] {\n\t\t\tborder: 2px solid var(--color-border-dark) !important;\n\t\t\tcolor: var(--color-main-text) !important;\n\t\t}\n\t}\n}\n\n.media {\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: left;\n\t.media__wrapper {\n\t\tdisplay: flex;\n\t\tborder: 2px solid var(--color-border);\n\t\tborder-radius: var(--border-radius-large);\n\t\tpadding: 8px;\n\n\t\timg {\n\t\t\twidth: 44px;\n\t\t\theight: 44px;\n\t\t}\n\n\t\t.metadata {\n\t\t\tmargin-left: 8px;\n\t\t\tdisplay: flex;\n\t\t\tflex-direction: column;\n\t\t\talign-items: start;\n\n\t\t\tspan {\n\t\t\t\tline-height: 20px;\n\t\t\t\tfont-weight: normal;\n\n\t\t\t\t&.size {\n\t\t\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t.buttons {\n\t\tmargin-left: 8px;\n\t}\n}\n\n.fade-enter-active {\n\ttransition: opacity .3s ease-in-out;\n}\n\n.fade-enter-to {\n\topacity: 1;\n}\n\n.fade-enter {\n\topacity: 0;\n}\n"],sourceRoot:""}]);const s=a},99119:(t,e,n)=>{"use strict";n.d(e,{Z:()=>s});var i=n(87537),r=n.n(i),o=n(23645),a=n.n(o)()(r());a.push([t.id,"[data-v-b95f24a4] div.widgets--list a.widget-default{color:var(--color-main-text);padding:0;text-decoration:none;max-width:calc(100vw - 56px)}[data-v-b95f24a4] .widget-default--details{overflow:hidden}[data-v-b95f24a4] .widget-default--details p{margin-bottom:4px !important}","",{version:3,sources:["webpack://./src/nodes/ParagraphView.vue"],names:[],mappings:"AACA,qDACC,4BAAA,CACA,SAAA,CACA,oBAAA,CACA,4BAAA,CAGD,2CACC,eAAA,CACA,6CACC,4BAAA",sourcesContent:["\n:deep(div.widgets--list a.widget-default) {\n\tcolor: var(--color-main-text);\n\tpadding: 0;\n\ttext-decoration: none;\n\tmax-width: calc(100vw - 56px);\n}\n\n:deep(.widget-default--details) {\n\toverflow:hidden;\n\tp {\n\t\tmargin-bottom: 4px !important;\n\t}\n}\n"],sourceRoot:""}]);const s=a},72546:(t,e,n)=>{"use strict";n.d(e,{Z:()=>s});var i=n(87537),r=n.n(i),o=n(23645),a=n.n(o)()(r());a.push([t.id,"td[data-v-3543004d]{position:relative}td .container[data-v-3543004d]{display:flex;flex-wrap:wrap;min-height:36px}td .content[data-v-3543004d]{flex:1 1 0;margin:0;padding-top:.6em}td .action-item[data-v-3543004d]{position:absolute;right:-48px;flex:0 1 auto;display:none;top:2px}td:last-child .action-item[data-v-3543004d]{display:block;opacity:50%}td:last-child:hover .action-item[data-v-3543004d],td:last-child:active .action-item[data-v-3543004d],td:last-child:focus .action-item[data-v-3543004d],td:last-child:focus-within .action-item[data-v-3543004d]{opacity:100%}","",{version:3,sources:["webpack://./src/nodes/Table/TableCellView.vue"],names:[],mappings:"AACA,oBACC,iBAAA,CAEA,+BACC,YAAA,CACA,cAAA,CACA,eAAA,CAGD,6BACC,UAAA,CACA,QAAA,CACA,gBAAA,CAGD,iCACC,iBAAA,CACA,WAAA,CACA,aAAA,CACA,YAAA,CACA,OAAA,CAIA,4CACC,aAAA,CACA,WAAA,CAIA,gNACC,YAAA",sourcesContent:["\ntd {\n\tposition: relative;\n\n\t.container {\n\t\tdisplay: flex;\n\t\tflex-wrap: wrap;\n\t\tmin-height: 36px;\n\t}\n\n\t.content {\n\t\tflex: 1 1 0;\n\t\tmargin: 0;\n\t\tpadding-top: 0.6em;\n\t}\n\n\t.action-item {\n\t\tposition: absolute;\n\t\tright: -48px;\n\t\tflex: 0 1 auto;\n\t\tdisplay: none;\n\t\ttop: 2px;\n\t}\n\n\t&:last-child {\n\t\t.action-item {\n\t\t\tdisplay: block;\n\t\t\topacity: 50%;\n\t\t}\n\n\t\t&:hover, &:active, &:focus, &:focus-within {\n\t\t\t.action-item {\n\t\t\t\topacity: 100%;\n\t\t\t}\n\t\t}\n\t}\n\n}\n\n"],sourceRoot:""}]);const s=a},42422:(t,e,n)=>{"use strict";n.d(e,{Z:()=>s});var i=n(87537),r=n.n(i),o=n(23645),a=n.n(o)()(r());a.push([t.id,"th .content[data-v-25a85f13]{margin:0;padding-top:.75em;flex-grow:1}th .action-item[data-v-25a85f13]{opacity:50%}th:hover .action-item[data-v-25a85f13],th:active .action-item[data-v-25a85f13],th:focus .action-item[data-v-25a85f13],th:focus-within .action-item[data-v-25a85f13]{opacity:100%}","",{version:3,sources:["webpack://./src/nodes/Table/TableHeaderView.vue"],names:[],mappings:"AAGC,6BACC,QAAA,CACA,iBAAA,CACA,WAAA,CAED,iCACC,WAAA,CAIA,oKACC,YAAA",sourcesContent:["\nth {\n\n\t.content {\n\t\tmargin: 0;\n\t\tpadding-top: 0.75em;\n\t\tflex-grow: 1;\n\t}\n\t.action-item {\n\t\topacity: 50%;\n\t}\n\n\t&:hover, &:active, &:focus, &:focus-within {\n\t\t.action-item {\n\t\t\topacity: 100%;\n\t\t}\n\t}\n}\n"],sourceRoot:""}]);const s=a},44314:(t,e,n)=>{"use strict";n.d(e,{Z:()=>s});var i=n(87537),r=n.n(i),o=n(23645),a=n.n(o)()(r());a.push([t.id,".table-wrapper[data-v-261cbb42]{position:relative;overflow-x:auto}.clearfix[data-v-261cbb42]{clear:both}table[data-v-261cbb42]{float:left}.table-settings[data-v-261cbb42]{padding-left:3px;opacity:.5;position:absolute;top:0;right:3px}.table-settings[data-v-261cbb42]:hover{opacity:1}","",{version:3,sources:["webpack://./src/nodes/Table/TableView.vue"],names:[],mappings:"AACA,gCACC,iBAAA,CACA,eAAA,CAGD,2BACC,UAAA,CAGD,uBACC,UAAA,CAGD,iCACC,gBAAA,CACA,UAAA,CACA,iBAAA,CACA,KAAA,CACA,SAAA,CAEA,uCACC,SAAA",sourcesContent:["\n.table-wrapper {\n\tposition: relative;\n\toverflow-x: auto;\n}\n\n.clearfix {\n\tclear: both;\n}\n\ntable {\n\tfloat: left;\n}\n\n.table-settings {\n\tpadding-left: 3px;\n\topacity: .5;\n\tposition: absolute;\n\ttop: 0;\n\tright: 3px;\n\n\t&:hover {\n\t\topacity: 1;\n\t}\n}\n"],sourceRoot:""}]);const s=a},8380:(t,e,n)=>{"use strict";n.d(e,{Z:()=>s});var i=n(87537),r=n.n(i),o=n(23645),a=n.n(o)()(r());a.push([t.id,"body{position:fixed;background-color:var(--color-main-background)}#content[class=app-public]{margin:0;margin-top:0}","",{version:3,sources:["webpack://./src/views/DirectEditing.vue"],names:[],mappings:"AACA,KACC,cAAA,CACA,6CAAA,CAGD,2BACC,QAAA,CACA,YAAA",sourcesContent:["\nbody {\n\tposition: fixed;\n\tbackground-color: var(--color-main-background);\n}\n\n#content[class=app-public] {\n\tmargin: 0;\n\tmargin-top: 0;\n}\n"],sourceRoot:""}]);const s="text"==n.j?a:null},87027:(t,e,n)=>{"use strict";n.d(e,{Z:()=>s});var i=n(87537),r=n.n(i),o=n(23645),a=n.n(o)()(r());a.push([t.id,"#direct-editor[data-v-3dc363b7]{width:100%;height:100%;position:fixed;overflow:auto}#direct-editor[data-v-3dc363b7] .text-editor{height:100%;top:0}#direct-editor[data-v-3dc363b7] .text-editor__wrapper div.ProseMirror{margin-top:0}pre[data-v-3dc363b7]{width:100%;max-width:700px;margin:auto;background-color:var(--color-background-dark)}button[data-v-3dc363b7]{width:44px;height:44px;margin:0;background-size:16px;border:0;background-color:rgba(0,0,0,0);opacity:.5;color:var(--color-main-text);background-position:center center;vertical-align:top}button[data-v-3dc363b7]:hover,button[data-v-3dc363b7]:focus,button[data-v-3dc363b7]:active{background-color:var(--color-background-dark)}button.is-active[data-v-3dc363b7],button[data-v-3dc363b7]:hover,button[data-v-3dc363b7]:focus{opacity:1}","",{version:3,sources:["webpack://./src/views/DirectEditing.vue"],names:[],mappings:"AACA,gCACC,UAAA,CACA,WAAA,CACA,cAAA,CACA,aAAA,CAEA,6CACC,WAAA,CACA,KAAA,CAED,sEACC,YAAA,CAIF,qBACC,UAAA,CACA,eAAA,CACA,WAAA,CACA,6CAAA,CAGD,wBACC,UAAA,CACA,WAAA,CACA,QAAA,CACA,oBAAA,CACA,QAAA,CACA,8BAAA,CACA,UAAA,CACA,4BAAA,CACA,iCAAA,CACA,kBAAA,CACA,2FACC,6CAAA,CAED,8FAGC,SAAA",sourcesContent:["\n#direct-editor {\n\twidth: 100%;\n\theight: 100%;\n\tposition: fixed;\n\toverflow: auto;\n\n\t&:deep(.text-editor) {\n\t\theight: 100%;\n\t\ttop: 0;\n\t}\n\t&:deep(.text-editor__wrapper div.ProseMirror) {\n\t\tmargin-top: 0;\n\t}\n}\n\npre {\n\twidth: 100%;\n\tmax-width: 700px;\n\tmargin: auto;\n\tbackground-color: var(--color-background-dark);\n}\n\nbutton {\n\twidth: 44px;\n\theight: 44px;\n\tmargin: 0;\n\tbackground-size: 16px;\n\tborder: 0;\n\tbackground-color: transparent;\n\topacity: .5;\n\tcolor: var(--color-main-text);\n\tbackground-position: center center;\n\tvertical-align: top;\n\t&:hover, &:focus, &:active {\n\t\tbackground-color: var(--color-background-dark);\n\t}\n\t&.is-active,\n\t&:hover,\n\t&:focus {\n\t\topacity: 1;\n\t}\n}\n"],sourceRoot:""}]);const s="text"==n.j?a:null},63180:(t,e,n)=>{"use strict";n.d(e,{Z:()=>s});var i=n(87537),r=n.n(i),o=n(23645),a=n.n(o)()(r());a.push([t.id,'#rich-workspace[data-v-4c292a7f]{padding:0 50px;margin-bottom:-24px;text-align:left;max-height:0;transition:max-height .5s cubic-bezier(0, 1, 0, 1);z-index:61;position:relative}#rich-workspace.creatable[data-v-4c292a7f]{min-height:100px}#rich-workspace[data-v-4c292a7f]:only-child{margin-bottom:0}.empty-workspace[data-v-4c292a7f]{cursor:pointer;display:block;padding-top:43px;color:var(--color-text-maxcontrast)}#rich-workspace[data-v-4c292a7f] div[contenteditable=false]{width:100%;padding:0px;background-color:var(--color-main-background);opacity:1;border:none}#rich-workspace[data-v-4c292a7f] .text-editor{height:100%;position:unset !important;top:auto !important}#rich-workspace[data-v-4c292a7f] .text-editor__wrapper{position:unset !important;overflow:visible}#rich-workspace[data-v-4c292a7f] .text-editor__main{overflow:visible !important}#rich-workspace[data-v-4c292a7f] .content-wrapper{overflow:scroll !important;max-height:calc(40vh - 50px);padding-left:10px;padding-bottom:10px}#rich-workspace[data-v-4c292a7f] .text-editor__wrapper .ProseMirror{padding:0px;margin:0}#rich-workspace[data-v-4c292a7f] .editor__content{margin:0}#rich-workspace.focus[data-v-4c292a7f]{max-height:50vh}#rich-workspace[data-v-4c292a7f]:not(.focus){max-height:30vh;position:relative;overflow:hidden}#rich-workspace[data-v-4c292a7f]:not(.focus):not(.icon-loading):not(.empty):after{content:"";position:absolute;z-index:1;bottom:0;left:0;pointer-events:none;background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0), var(--color-main-background));width:100%;height:4em}#rich-workspace.dark[data-v-4c292a7f]:not(.focus):not(.icon-loading):after{background-image:linear-gradient(to bottom, rgba(0, 0, 0, 0), var(--color-main-background))}@media only screen and (max-width: 1024px){#rich-workspace[data-v-4c292a7f]:not(.focus){max-height:30vh}}html.ie #rich-workspace[data-v-4c292a7f] .text-editor{position:initial}html.ie #rich-workspace[data-v-4c292a7f] .text-editor__wrapper{position:relative !important;top:auto !important}html.ie #rich-workspace[data-v-4c292a7f] .text-editor__main{display:flex;flex-direction:column;overflow:hidden !important}html.ie #rich-workspace[data-v-4c292a7f] .menubar{position:relative;overflow:hidden;flex-shrink:0;height:44px;top:auto}html.ie #rich-workspace[data-v-4c292a7f] .text-editor__main>div:nth-child(2){min-height:44px;overflow-x:hidden;overflow-y:auto;flex-shrink:1}',"",{version:3,sources:["webpack://./src/views/RichWorkspace.vue"],names:[],mappings:"AACA,iCACC,cAAA,CAEA,mBAAA,CACA,eAAA,CACA,YAAA,CACA,kDAAA,CACA,UAAA,CACA,iBAAA,CACA,2CACC,gBAAA,CAKF,4CACC,eAAA,CAGD,kCACC,cAAA,CACA,aAAA,CACA,gBAAA,CACA,mCAAA,CAGD,4DACC,UAAA,CACA,WAAA,CACA,6CAAA,CACA,SAAA,CACA,WAAA,CAGD,8CACC,WAAA,CACA,yBAAA,CACA,mBAAA,CAGD,uDACC,yBAAA,CACA,gBAAA,CAGD,oDACC,2BAAA,CAGD,kDACC,0BAAA,CACA,4BAAA,CACA,iBAAA,CACA,mBAAA,CAGD,oEACC,WAAA,CACA,QAAA,CAGD,kDACC,QAAA,CAGD,uCACC,eAAA,CAGD,6CACC,eAAA,CACA,iBAAA,CACA,eAAA,CAGD,kFACC,UAAA,CACA,iBAAA,CACA,SAAA,CACA,QAAA,CACA,MAAA,CACA,mBAAA,CACA,iGAAA,CACA,UAAA,CACA,UAAA,CAGD,2EACC,2FAAA,CAGD,2CACC,6CACC,eAAA,CAAA,CAMA,uDACC,gBAAA,CAGD,gEACC,4BAAA,CACA,mBAAA,CAGD,6DACC,YAAA,CACA,qBAAA,CACA,0BAAA,CAGD,mDACC,iBAAA,CACA,eAAA,CACA,aAAA,CACA,WAAA,CACA,QAAA,CAGD,8EACC,eAAA,CACA,iBAAA,CACA,eAAA,CACA,aAAA",sourcesContent:["\n#rich-workspace {\n\tpadding: 0 50px;\n\t/* Slightly reduce vertical space */\n\tmargin-bottom: -24px;\n\ttext-align: left;\n\tmax-height: 0;\n\ttransition: max-height 0.5s cubic-bezier(0, 1, 0, 1);\n\tz-index: 61;\n\tposition: relative;\n\t&.creatable {\n\t\tmin-height: 100px;\n\t}\n}\n\n/* For subfolders, where there are no Recommendations */\n#rich-workspace:only-child {\n\tmargin-bottom: 0;\n}\n\n.empty-workspace {\n\tcursor: pointer;\n\tdisplay: block;\n\tpadding-top: 43px;\n\tcolor: var(--color-text-maxcontrast);\n}\n\n#rich-workspace:deep(div[contenteditable=false]) {\n\twidth: 100%;\n\tpadding: 0px;\n\tbackground-color: var(--color-main-background);\n\topacity: 1;\n\tborder: none;\n}\n\n#rich-workspace:deep(.text-editor) {\n\theight: 100%;\n\tposition: unset !important;\n\ttop: auto !important;\n}\n\n#rich-workspace:deep(.text-editor__wrapper) {\n\tposition: unset !important;\n\toverflow: visible;\n}\n\n#rich-workspace:deep(.text-editor__main) {\n\toverflow: visible !important;\n}\n\n#rich-workspace:deep(.content-wrapper) {\n\toverflow: scroll !important;\n\tmax-height: calc(40vh - 50px);\n\tpadding-left: 10px;\n\tpadding-bottom: 10px;\n}\n\n#rich-workspace:deep(.text-editor__wrapper .ProseMirror) {\n\tpadding: 0px;\n\tmargin: 0;\n}\n\n#rich-workspace:deep(.editor__content) {\n\tmargin: 0;\n}\n\n#rich-workspace.focus {\n\tmax-height: 50vh;\n}\n\n#rich-workspace:not(.focus) {\n\tmax-height: 30vh;\n\tposition: relative;\n\toverflow: hidden;\n}\n\n#rich-workspace:not(.focus):not(.icon-loading):not(.empty):after {\n\tcontent: '';\n\tposition: absolute;\n\tz-index: 1;\n\tbottom: 0;\n\tleft: 0;\n\tpointer-events: none;\n\tbackground-image: linear-gradient(to bottom, rgba(255, 255, 255, 0), var(--color-main-background));\n\twidth: 100%;\n\theight: 4em;\n}\n\n#rich-workspace.dark:not(.focus):not(.icon-loading):after {\n\tbackground-image: linear-gradient(to bottom, rgba(0, 0, 0, 0), var(--color-main-background));\n}\n\n@media only screen and (max-width: 1024px) {\n\t#rich-workspace:not(.focus) {\n\t\tmax-height: 30vh;\n\t}\n}\n\nhtml.ie {\n\t#rich-workspace:deep() {\n\t\t.text-editor {\n\t\t\tposition: initial;\n\t\t}\n\n\t\t.text-editor__wrapper {\n\t\t\tposition: relative !important;\n\t\t\ttop: auto !important;\n\t\t}\n\n\t\t.text-editor__main {\n\t\t\tdisplay: flex;\n\t\t\tflex-direction: column;\n\t\t\toverflow: hidden !important;\n\t\t}\n\n\t\t.menubar {\n\t\t\tposition: relative;\n\t\t\toverflow: hidden;\n\t\t\tflex-shrink: 0;\n\t\t\theight: 44px;\n\t\t\ttop: auto;\n\t\t}\n\n\t\t.text-editor__main > div:nth-child(2) {\n\t\t\tmin-height: 44px;\n\t\t\toverflow-x: hidden;\n\t\t\toverflow-y: auto;\n\t\t\tflex-shrink: 1;\n\t\t}\n\t}\n}\n\n"],sourceRoot:""}]);const s=a},43731:(t,e,n)=>{"use strict";n.d(e,{Z:()=>s});var i=n(87537),r=n.n(i),o=n(23645),a=n.n(o)()(r());a.push([t.id,"\n.action[data-v-05e4c2f2] {\n\t/* to unify width of ActionInput and ActionButton */\n\tmin-width: 218px;\n}\n","",{version:3,sources:["webpack://./src/components/Menu/ActionInsertLink.vue"],names:[],mappings:";AA4PA;CACA,mDAAA;CACA,gBAAA;AACA",sourcesContent:["\x3c!--\n - @copyright Copyright (c) 2022\n -\n - @license AGPL-3.0-or-later\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see .\n -\n --\x3e\n\n\n\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EmojiPickerAction.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EmojiPickerAction.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./EmojiPickerAction.vue?vue&type=template&id=7e6ff5ef&\"\nimport script from \"./EmojiPickerAction.vue?vue&type=script&lang=js&\"\nexport * from \"./EmojiPickerAction.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('NcEmojiPicker',{staticClass:\"entry-action entry-action__emoji\",attrs:{\"data-text-action-entry\":_vm.actionEntry.key,\"container\":_vm.menuIDSelector},on:{\"select-data\":_vm.addEmoji}},[_c('NcButton',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.actionEntry.label),expression:\"actionEntry.label\"}],staticClass:\"entry-action__button\",attrs:{\"role\":\"menu\",\"title\":_vm.actionEntry.label,\"aria-label\":_vm.actionEntry.label,\"aria-haspopup\":true},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c(_vm.icon,{tag:\"component\"})]},proxy:true}])})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('NcActions',{staticClass:\"entry-action entry-action__image-upload\",attrs:{\"data-text-action-entry\":_vm.actionEntry.key,\"title\":_vm.actionEntry.label,\"aria-label\":_vm.actionEntry.label,\"container\":_vm.menuIDSelector,\"role\":\"menu\",\"aria-haspopup\":\"\"},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c(_vm.icon,{tag:\"component\",attrs:{\"title\":_vm.actionEntry.label,\"aria-label\":_vm.actionEntry.label,\"aria-haspopup\":\"\"}})]},proxy:true}])},[_vm._v(\" \"),(_vm.$editorUpload)?_c('NcActionButton',{attrs:{\"close-after-click\":\"\",\"disabled\":_vm.isUploadingAttachments,\"data-text-action-entry\":`${_vm.actionEntry.key}-upload`},on:{\"click\":_vm.$callChooseLocalAttachment},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('Upload')]},proxy:true}],null,false,933298848)},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('text', 'Upload from computer'))+\"\\n\\t\")]):_vm._e(),_vm._v(\" \"),(!_vm.$isPublic)?_c('NcActionButton',{attrs:{\"close-after-click\":\"\",\"disabled\":_vm.isUploadingAttachments,\"data-text-action-entry\":`${_vm.actionEntry.key}-insert`},on:{\"click\":_vm.$callAttachmentPrompt},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('Folder')]},proxy:true}],null,false,2750733237)},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('text', 'Insert from Files'))+\"\\n\\t\")]):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ActionAttachmentUpload.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ActionAttachmentUpload.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ActionAttachmentUpload.vue?vue&type=template&id=d02376ec&\"\nimport script from \"./ActionAttachmentUpload.vue?vue&type=script&lang=js&\"\nexport * from \"./ActionAttachmentUpload.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('NcActions',{ref:\"menu\",staticClass:\"entry-action entry-action__insert-link\",class:_vm.activeClass,attrs:{\"aria-haspopup\":\"\",\"aria-label\":_vm.actionEntry.label,\"container\":_vm.menuIDSelector,\"data-text-action-entry\":_vm.actionEntry.key,\"title\":_vm.actionEntry.label},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c(_vm.icon,{tag:\"component\",attrs:{\"title\":_vm.actionEntry.label,\"aria-label\":_vm.actionEntry.label,\"aria-haspopup\":\"\"}})]},proxy:true}])},[_vm._v(\" \"),(_vm.state.active)?_c('NcActionButton',{attrs:{\"close-after-click\":\"\",\"data-text-action-entry\":`${_vm.actionEntry.key}-remove`},on:{\"click\":_vm.removeLink},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('LinkOff')]},proxy:true}],null,false,3589828876)},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('text', 'Remove link'))+\"\\n\\t\")]):_vm._e(),_vm._v(\" \"),_c('NcActionButton',{attrs:{\"close-after-click\":\"\",\"data-text-action-entry\":`${_vm.actionEntry.key}-file`},on:{\"click\":_vm.linkFile},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('Document')]},proxy:true}])},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('text', 'Link to file or folder'))+\"\\n\\t\")]),_vm._v(\" \"),(_vm.isInputMode)?_c('NcActionInput',{attrs:{\"type\":\"text\",\"value\":_vm.href,\"data-text-action-entry\":`${_vm.actionEntry.key}-input`},on:{\"submit\":_vm.linkWebsite},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('Web')]},proxy:true}],null,false,1844845715)},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('text', 'Link to website'))+\"\\n\\t\")]):_c('NcActionButton',{attrs:{\"data-text-action-entry\":`${_vm.actionEntry.key}-website`},on:{\"click\":_vm.linkWebsite},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('Web')]},proxy:true}])},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.state.active ? _vm.t('text', 'Update link') : _vm.t('text', 'Link to website'))+\"\\n\\t\")]),_vm._v(\" \"),_c('NcActionButton',{attrs:{\"data-text-action-entry\":`${_vm.actionEntry.key}-picker`},on:{\"click\":_vm.linkPicker},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('Shape')]},proxy:true}])},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('text', 'Open the Smart Picker'))+\"\\n\\t\")])],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ActionInsertLink.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ActionInsertLink.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ActionInsertLink.vue?vue&type=style&index=0&id=05e4c2f2&prod&scoped=true&lang=css&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ActionInsertLink.vue?vue&type=style&index=0&id=05e4c2f2&prod&scoped=true&lang=css&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./ActionInsertLink.vue?vue&type=template&id=05e4c2f2&scoped=true&\"\nimport script from \"./ActionInsertLink.vue?vue&type=script&lang=js&\"\nexport * from \"./ActionInsertLink.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ActionInsertLink.vue?vue&type=style&index=0&id=05e4c2f2&prod&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"05e4c2f2\",\n null\n \n)\n\nexport default component.exports","/*\n * @copyright Copyright (c) 2019 Julius Härtl \n *\n * @author Julius Härtl \n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n */\n\nimport {\n\tUndo,\n\tRedo,\n\tCodeTags,\n\tDanger,\n\tEmoticon,\n\tFormatBold,\n\tFormatItalic,\n\tFormatUnderline,\n\tFormatStrikethrough,\n\tFormatHeader1,\n\tFormatHeader2,\n\tFormatHeader3,\n\tFormatHeader4,\n\tFormatHeader5,\n\tFormatHeader6,\n\tFormatListNumbered,\n\tFormatListBulleted,\n\tFormatListCheckbox,\n\tFormatQuote,\n\tImages,\n\tInfo,\n\tLinkIcon,\n\tPositive,\n\tTable,\n\tWarn,\n} from '../icons.js'\nimport EmojiPickerAction from './EmojiPickerAction.vue'\nimport ActionAttachmentUpload from './ActionAttachmentUpload.vue'\nimport ActionInsertLink from './ActionInsertLink.vue'\n\nimport { MODIFIERS } from './keys.js'\n\nexport const ReadonlyEntries = [{\n\tkey: 'outline',\n\tforceLabel: true,\n\ticon: FormatListBulleted,\n\tclick: ({ $outlineActions }) => $outlineActions.toggle(),\n\tlabel: ({ $outlineState }) => {\n\t\treturn $outlineState.visible\n\t\t\t? t('text', 'Hide outline')\n\t\t\t: t('text', 'Show outline')\n\t},\n}]\n\nexport default [\n\t{\n\t\tkey: 'undo',\n\t\tlabel: t('text', 'Undo'),\n\t\tkeyChar: 'z',\n\t\tkeyModifiers: [MODIFIERS.Mod],\n\t\ticon: Undo,\n\t\taction: (command) => command.undo(),\n\t\tpriority: 6,\n\t},\n\t{\n\t\tkey: 'redo',\n\t\tlabel: t('text', 'Redo'),\n\t\tkeyChar: 'y',\n\t\tkeyModifiers: [MODIFIERS.Mod],\n\t\ticon: Redo,\n\t\taction: (command) => command.redo(),\n\t\tpriority: 12,\n\t},\n\t{\n\t\tkey: 'bold',\n\t\tlabel: t('text', 'Bold'),\n\t\tkeyChar: 'b',\n\t\tkeyModifiers: [MODIFIERS.Mod],\n\t\ticon: FormatBold,\n\t\tisActive: 'strong',\n\t\taction: (command) => {\n\t\t\treturn command.toggleBold()\n\t\t},\n\t\tpriority: 7,\n\t},\n\t{\n\t\tkey: 'italic',\n\t\tlabel: t('text', 'Italic'),\n\t\tkeyChar: 'i',\n\t\tkeyModifiers: [MODIFIERS.Mod],\n\t\ticon: FormatItalic,\n\t\tisActive: 'em',\n\t\taction: (command) => {\n\t\t\treturn command.toggleItalic()\n\t\t},\n\t\tpriority: 8,\n\t},\n\t{\n\t\tkey: 'underline',\n\t\tlabel: t('text', 'Underline'),\n\t\tkeyChar: 'u',\n\t\tkeyModifiers: [MODIFIERS.Mod],\n\t\ticon: FormatUnderline,\n\t\tisActive: 'underline',\n\t\taction: (command) => {\n\t\t\treturn command.toggleUnderline()\n\t\t},\n\t\tpriority: 15,\n\t},\n\t{\n\t\tkey: 'strikethrough',\n\t\tlabel: t('text', 'Strikethrough'),\n\t\tkeyChar: 's',\n\t\tkeyModifiers: [MODIFIERS.Mod, MODIFIERS.Shift],\n\t\ticon: FormatStrikethrough,\n\t\tisActive: 'strike',\n\t\taction: (command) => {\n\t\t\treturn command.toggleStrike()\n\t\t},\n\t\tpriority: 16,\n\t},\n\t{\n\t\tkey: 'headings',\n\t\tlabel: t('text', 'Headings'),\n\t\tkeyChar: '1…6',\n\t\tkeyModifiers: [MODIFIERS.Mod, MODIFIERS.Shift],\n\t\ticon: FormatHeader1,\n\t\tisActive: 'heading',\n\t\tchildren: [\n\t\t\t{\n\t\t\t\tkey: 'headings-h1',\n\t\t\t\tlabel: t('text', 'Heading 1'),\n\t\t\t\ticon: FormatHeader1,\n\t\t\t\tisActive: ['heading', { level: 1 }],\n\t\t\t\taction: (command) => {\n\t\t\t\t\treturn command.toggleHeading({ level: 1 })\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tkey: 'headings-h2',\n\t\t\t\tlabel: t('text', 'Heading 2'),\n\t\t\t\ticon: FormatHeader2,\n\t\t\t\tisActive: ['heading', { level: 2 }],\n\t\t\t\taction: (command) => {\n\t\t\t\t\treturn command.toggleHeading({ level: 2 })\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tkey: 'headings-h3',\n\t\t\t\tlabel: t('text', 'Heading 3'),\n\t\t\t\ticon: FormatHeader3,\n\t\t\t\tisActive: ['heading', { level: 3 }],\n\t\t\t\taction: (command) => {\n\t\t\t\t\treturn command.toggleHeading({ level: 3 })\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tkey: 'headings-h4',\n\t\t\t\tlabel: t('text', 'Heading 4'),\n\t\t\t\tisActive: ['heading', { level: 4 }],\n\t\t\t\ticon: FormatHeader4,\n\t\t\t\taction: (command) => {\n\t\t\t\t\treturn command.toggleHeading({ level: 4 })\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tkey: 'headings-h5',\n\t\t\t\tlabel: t('text', 'Heading 5'),\n\t\t\t\tisActive: ['heading', { level: 5 }],\n\t\t\t\ticon: FormatHeader5,\n\t\t\t\taction: (command) => {\n\t\t\t\t\treturn command.toggleHeading({ level: 5 })\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tkey: 'headings-h6',\n\t\t\t\tlabel: t('text', 'Heading 6'),\n\t\t\t\tisActive: ['heading', { level: 6 }],\n\t\t\t\ticon: FormatHeader6,\n\t\t\t\taction: (command) => {\n\t\t\t\t\treturn command.toggleHeading({ level: 6 })\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tkey: 'outline',\n\t\t\t\ticon: FormatListBulleted,\n\t\t\t\tclick: ({ $outlineActions }) => $outlineActions.toggle(),\n\t\t\t\tvisible: ({ $outlineState }) => {\n\t\t\t\t\treturn $outlineState.enable\n\t\t\t\t},\n\t\t\t\tlabel: ({ $outlineState }) => {\n\t\t\t\t\treturn $outlineState.visible\n\t\t\t\t\t\t? t('text', 'Hide outline')\n\t\t\t\t\t\t: t('text', 'Show outline')\n\t\t\t\t},\n\t\t\t},\n\t\t],\n\t\tpriority: 1,\n\t},\n\t{\n\t\tkey: 'unordered-list',\n\t\tlabel: t('text', 'Unordered list'),\n\t\tkeyChar: '8',\n\t\tkeyModifiers: [MODIFIERS.Mod, MODIFIERS.Shift],\n\t\tisActive: 'bulletList',\n\t\ticon: FormatListBulleted,\n\t\taction: (command) => {\n\t\t\treturn command.toggleBulletList()\n\t\t},\n\t\tpriority: 9,\n\t},\n\t{\n\t\tkey: 'ordered-list',\n\t\tlabel: t('text', 'Ordered list'),\n\t\tkeyChar: '7',\n\t\tkeyModifiers: [MODIFIERS.Mod, MODIFIERS.Shift],\n\t\tisActive: 'orderedList',\n\t\ticon: FormatListNumbered,\n\t\taction: (command) => {\n\t\t\treturn command.toggleOrderedList()\n\t\t},\n\t\tpriority: 10,\n\t},\n\t{\n\t\tkey: 'task-list',\n\t\tlabel: t('text', 'To-Do list'),\n\t\tkeyChar: '9',\n\t\tkeyModifiers: [MODIFIERS.Mod, MODIFIERS.Shift],\n\t\tisActive: 'taskList',\n\t\ticon: FormatListCheckbox,\n\t\taction: (command) => command.toggleTaskList(),\n\t\tpriority: 11,\n\t},\n\t{\n\t\tkey: 'insert-link',\n\t\tlabel: t('text', 'Insert link'),\n\t\tisActive: 'link',\n\t\ticon: LinkIcon,\n\t\tcomponent: ActionInsertLink,\n\t\tpriority: 2,\n\t},\n\t{\n\t\tkey: 'blockquote',\n\t\tlabel: t('text', 'Blockquote'),\n\t\tkeyChar: 'b',\n\t\tkeyModifiers: [MODIFIERS.Mod, MODIFIERS.Shift],\n\t\tisActive: 'blockquote',\n\t\ticon: FormatQuote,\n\t\taction: (command) => {\n\t\t\treturn command.toggleBlockquote()\n\t\t},\n\t\tpriority: 13,\n\t},\n\t{\n\t\tkey: 'callouts',\n\t\tlabel: t('text', 'Callouts'),\n\t\tvisible: false,\n\t\ticon: Info,\n\t\tisActive: 'callout',\n\t\tchildren: [\n\t\t\t{\n\t\t\t\tkey: 'callout-info',\n\t\t\t\tlabel: t('text', 'Info'),\n\t\t\t\tisActive: ['callout', { type: 'info' }],\n\t\t\t\ticon: Info,\n\t\t\t\taction: (command) => {\n\t\t\t\t\treturn command.toggleCallout({ type: 'info' })\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tkey: 'callout-success',\n\t\t\t\tlabel: t('text', 'Success'),\n\t\t\t\tisActive: ['callout', { type: 'success' }],\n\t\t\t\ticon: Positive,\n\t\t\t\taction: (command) => {\n\t\t\t\t\treturn command.toggleCallout({ type: 'success' })\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tkey: 'callout-warn',\n\t\t\t\tlabel: t('text', 'Warning'),\n\t\t\t\tisActive: ['callout', { type: 'warn' }],\n\t\t\t\ticon: Warn,\n\t\t\t\taction: (command) => {\n\t\t\t\t\treturn command.toggleCallout({ type: 'warn' })\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tkey: 'callout-error',\n\t\t\t\tlabel: t('text', 'Danger'),\n\t\t\t\tisActive: ['callout', { type: 'error' }],\n\t\t\t\ticon: Danger,\n\t\t\t\taction: (command) => {\n\t\t\t\t\treturn command.toggleCallout({ type: 'error' })\n\t\t\t\t},\n\t\t\t},\n\t\t],\n\t\tpriority: 3,\n\t},\n\t{\n\t\tkey: 'code-block',\n\t\tlabel: t('text', 'Code block'),\n\t\tkeyChar: 'c',\n\t\tkeyModifiers: [MODIFIERS.Mod, MODIFIERS.Alt],\n\t\tisActive: 'codeBlock',\n\t\ticon: CodeTags,\n\t\taction: (command) => {\n\t\t\treturn command.toggleCodeBlock()\n\t\t},\n\t\tpriority: 14,\n\t},\n\t{\n\t\tkey: 'table',\n\t\tlabel: t('text', 'Table'),\n\t\tisActive: 'table',\n\t\ticon: Table,\n\t\taction: (command) => {\n\t\t\treturn command.insertTable()\n\t\t},\n\t\tpriority: 17,\n\t},\n\t{\n\t\tkey: 'emoji-picker',\n\t\tlabel: t('text', 'Insert emoji'),\n\t\ticon: Emoticon,\n\t\tcomponent: EmojiPickerAction,\n\t\taction: (command, emojiObject = {}) => {\n\t\t\treturn command.emoji(emojiObject)\n\t\t},\n\t\tpriority: 5,\n\t},\n\t{\n\t\tkey: 'insert-attachment',\n\t\tlabel: t('text', 'Insert attachment'),\n\t\ticon: Images,\n\t\tcomponent: ActionAttachmentUpload,\n\t\tpriority: 4,\n\t},\n]\n","const isMac = (navigator.userAgent.includes('Mac'))\n\nconst MODIFIERS = {\n\tMod: isMac ? 'Meta' : 'Control',\n\tAlt: 'Alt', // Option key, on Apple computers.\n\tControl: 'Control',\n\tShift: 'Shift',\n\n\t// unused\n\t// AltGraph: 'AltGraph',\n\t// Meta: 'Meta', // Command key on Apple computers\n}\n\nconst TRANSLATIONS = {\n\t[MODIFIERS.Mod]: isMac ? t('text', 'Command') : t('text', 'Control'),\n\t[MODIFIERS.Control]: t('text', 'Ctrl'),\n\t[MODIFIERS.Alt]: t('text', isMac ? 'Option' : 'Alt'),\n\t[MODIFIERS.Shift]: t('text', 'Shift'),\n}\n\nexport {\n\tMODIFIERS,\n\tTRANSLATIONS,\n}\n","/*\n * @copyright Copyright (c) 2022 Vinicius Reis \n *\n * @author Vinicius Reis \n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n */\n\nimport {\n\tTRANSLATIONS,\n\tMODIFIERS,\n} from './keys.js'\n\nconst getEntryClasses = (actionEntry, isActive) => {\n\treturn {\n\t\t'is-active': isActive,\n\t\t[`action-menu-${actionEntry.key}`]: true,\n\t}\n}\n\nconst keysString = (keyChar, modifiers = []) => {\n\treturn modifiers\n\t\t.map(mod => TRANSLATIONS[mod])\n\t\t.concat(keyChar.toUpperCase())\n\t\t.join('+')\n}\n\nconst getKeyshortcuts = ({ keyChar, keyModifiers = [] }) => {\n\treturn keyModifiers\n\t\t.map(mod => MODIFIERS[mod])\n\t\t.concat(keyChar)\n\t\t.join('+')\n}\n\nconst getKeys = (isMobile, { keyChar, keyModifiers }) => {\n\treturn (!isMobile && keyChar)\n\t\t? `(${keysString(keyChar, keyModifiers)})`\n\t\t: ''\n}\n\nconst isDisabled = (actionEntry, $editor) => {\n\treturn actionEntry.action && !actionEntry.action($editor.can())\n}\n\nconst getIsActive = ({ isActive }, $editor) => {\n\tif (!isActive) {\n\t\treturn false\n\t}\n\n\tconst args = Array.isArray(isActive)\n\t\t? isActive\n\t\t: [isActive]\n\n\treturn $editor.isActive(...args)\n}\n\nconst getActionState = (actionEntry, $editor) => {\n\tconst active = getIsActive(actionEntry, $editor)\n\n\treturn {\n\t\tdisabled: isDisabled(actionEntry, $editor),\n\t\tclass: getEntryClasses(actionEntry, active),\n\t\tactive,\n\t}\n}\n\nexport {\n\tisDisabled,\n\tgetIsActive,\n\tgetKeys,\n\tgetKeyshortcuts,\n\tgetEntryClasses,\n\tgetActionState,\n}\n","/*\n* @copyright Copyright (c) 2022 Julius Härtl \n*\n* @author Julius Härtl \n*\n* @license GNU AGPL version 3 or any later version\n*\n* This program is free software: you can redistribute it and/or modify\n* it under the terms of the GNU Affero General Public License as\n* published by the Free Software Foundation, either version 3 of the\n* License, or (at your option) any later version.\n*\n* This program is distributed in the hope that it will be useful,\n* but WITHOUT ANY WARRANTY; without even the implied warranty of\n* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n* GNU Affero General Public License for more details.\n*\n* You should have received a copy of the GNU Affero General Public License\n* along with this program. If not, see .\n*/\n\nimport tippy from 'tippy.js'\nimport { VueRenderer } from '@tiptap/vue-2'\n\nexport default ({\n\tlistComponent,\n\titems = () => {},\n\tcommand = ({ editor, range, props }) => {},\n}) => ({\n\titems,\n\tcommand,\n\trender: () => {\n\t\tlet component\n\t\tlet popup\n\n\t\treturn {\n\t\t\tonStart: props => {\n\t\t\t\tcomponent = new VueRenderer(listComponent, {\n\t\t\t\t\tparent: this,\n\t\t\t\t\tpropsData: props,\n\t\t\t\t})\n\n\t\t\t\tif (!props.clientRect) {\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\tpopup = tippy('body', {\n\t\t\t\t\tgetReferenceClientRect: props.clientRect,\n\t\t\t\t\tappendTo: () => document.body,\n\t\t\t\t\tcontent: component.element,\n\t\t\t\t\tshowOnCreate: true,\n\t\t\t\t\tinteractive: true,\n\t\t\t\t\ttrigger: 'manual',\n\t\t\t\t\tplacement: 'bottom-start',\n\t\t\t\t})\n\n\t\t\t\tcomponent.ref.$on('select', () => {\n\t\t\t\t\tpopup.length > 0 && popup[0].hide()\n\t\t\t\t})\n\t\t\t},\n\n\t\t\tonUpdate(props) {\n\t\t\t\tcomponent.updateProps(props)\n\n\t\t\t\tif (!props.clientRect || !popup) {\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\tpopup[0].setProps({\n\t\t\t\t\tgetReferenceClientRect: props.clientRect,\n\t\t\t\t})\n\t\t\t},\n\n\t\t\tonKeyDown(props) {\n\t\t\t\tif (!popup) {\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\tif (props.event.key === 'Escape') {\n\t\t\t\t\tpopup[0].hide()\n\t\t\t\t\tpopup[0].destroy()\n\t\t\t\t\tcomponent.destroy()\n\t\t\t\t\tpopup = null\n\n\t\t\t\t\treturn true\n\t\t\t\t}\n\n\t\t\t\treturn component.ref?.onKeyDown?.(props)\n\t\t\t},\n\n\t\t\tonExit() {\n\t\t\t\tif (!popup) {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tpopup[0].destroy()\n\t\t\t\tcomponent.destroy()\n\t\t\t},\n\t\t}\n\t},\n})\n","/* eslint-disable camelcase */\n/*\n * @copyright Copyright (c) 2022 Vinicius Reis \n *\n * @author Vinicius Reis \n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n */\n\nimport MDI_AlphabeticalVariant from 'vue-material-design-icons/AlphabeticalVariant.vue'\nimport MDI_Close from 'vue-material-design-icons/Close.vue'\nimport MDI_Check from 'vue-material-design-icons/Check.vue'\nimport MDI_CircleMedium from 'vue-material-design-icons/CircleMedium.vue'\nimport MDI_CodeTags from 'vue-material-design-icons/CodeTags.vue'\nimport MDI_Danger from 'vue-material-design-icons/AlertDecagram.vue'\nimport MDI_Delete from 'vue-material-design-icons/Delete.vue'\nimport MDI_Document from 'vue-material-design-icons/FileDocument.vue'\nimport MDI_DotsHorizontal from 'vue-material-design-icons/DotsHorizontal.vue'\nimport MDI_Emoticon from 'vue-material-design-icons/EmoticonOutline.vue'\nimport MDI_Folder from 'vue-material-design-icons/Folder.vue'\nimport MDI_FormatBold from 'vue-material-design-icons/FormatBold.vue'\nimport MDI_AlignHorizontalCenter from 'vue-material-design-icons/AlignHorizontalCenter.vue'\nimport MDI_AlignHorizontalLeft from 'vue-material-design-icons/AlignHorizontalLeft.vue'\nimport MDI_AlignHorizontalRight from 'vue-material-design-icons/AlignHorizontalRight.vue'\nimport MDI_FormatHeader1 from 'vue-material-design-icons/FormatHeader1.vue'\nimport MDI_FormatHeader2 from 'vue-material-design-icons/FormatHeader2.vue'\nimport MDI_FormatHeader3 from 'vue-material-design-icons/FormatHeader3.vue'\nimport MDI_FormatHeader4 from 'vue-material-design-icons/FormatHeader4.vue'\nimport MDI_FormatHeader5 from 'vue-material-design-icons/FormatHeader5.vue'\nimport MDI_FormatHeader6 from 'vue-material-design-icons/FormatHeader6.vue'\nimport MDI_FormatItalic from 'vue-material-design-icons/FormatItalic.vue'\nimport MDI_FormatListBulleted from 'vue-material-design-icons/FormatListBulleted.vue'\nimport MDI_FormatListCheckbox from 'vue-material-design-icons/FormatListCheckbox.vue'\nimport MDI_FormatListNumbered from 'vue-material-design-icons/FormatListNumbered.vue'\nimport MDI_FormatQuote from 'vue-material-design-icons/FormatQuoteClose.vue'\nimport MDI_FormatStrikethrough from 'vue-material-design-icons/FormatStrikethrough.vue'\nimport MDI_FormatUnderline from 'vue-material-design-icons/FormatUnderline.vue'\nimport MDI_Help from 'vue-material-design-icons/HelpCircle.vue'\nimport MDI_Image from 'vue-material-design-icons/ImageOutline.vue'\nimport MDI_Images from 'vue-material-design-icons/ImageMultipleOutline.vue'\nimport MDI_Info from 'vue-material-design-icons/Information.vue'\nimport MDI_Link from 'vue-material-design-icons/Link.vue'\nimport MDI_LinkOff from 'vue-material-design-icons/LinkOff.vue'\nimport MDI_LinkVariantPlus from 'vue-material-design-icons/LinkVariantPlus.vue'\nimport MDI_Loading from 'vue-material-design-icons/Loading.vue'\nimport MDI_Lock from 'vue-material-design-icons/Lock.vue'\nimport MDI_Positive from 'vue-material-design-icons/CheckboxMarkedCircle.vue'\nimport MDI_Redo from 'vue-material-design-icons/ArrowURightTop.vue'\nimport MDI_Shape from 'vue-material-design-icons/Shape.vue'\nimport MDI_Table from 'vue-material-design-icons/Table.vue'\nimport MDI_TableAddColumnAfter from 'vue-material-design-icons/TableColumnPlusAfter.vue'\nimport MDI_TableAddColumnBefore from 'vue-material-design-icons/TableColumnPlusBefore.vue'\nimport MDI_TableAddRowAfter from 'vue-material-design-icons/TableRowPlusAfter.vue'\nimport MDI_TableAddRowBefore from 'vue-material-design-icons/TableRowPlusBefore.vue'\nimport MDI_TableSettings from 'vue-material-design-icons/TableCog.vue'\nimport MDI_TrashCan from 'vue-material-design-icons/TrashCan.vue'\nimport MDI_Undo from 'vue-material-design-icons/ArrowULeftTop.vue'\nimport MDI_Upload from 'vue-material-design-icons/Upload.vue'\nimport MDI_Warn from 'vue-material-design-icons/Alert.vue'\nimport MDI_Web from 'vue-material-design-icons/Web.vue'\nimport MDI_TranslateVariant from 'vue-material-design-icons/TranslateVariant.vue'\n\nconst DEFAULT_ICON_SIZE = 20\n\nconst makeIcon = (original) => ({\n\tfunctional: true,\n\trender(h, { data, props }) {\n\t\treturn h(original, {\n\t\t\tdata,\n\t\t\tkey: data.key,\n\t\t\tstaticClass: data.staticClass,\n\t\t\tprops: { size: DEFAULT_ICON_SIZE, ...props },\n\t\t})\n\t},\n})\n\nexport const Loading = {\n\tfunctional: true,\n\trender(h, { data, props }) {\n\t\treturn h(MDI_Loading, {\n\t\t\tdata,\n\t\t\tstaticClass: 'animation-rotate',\n\t\t\tprops: { size: DEFAULT_ICON_SIZE, ...props },\n\t\t})\n\t},\n}\n\nexport const AlphabeticalVariant = makeIcon(MDI_AlphabeticalVariant)\nexport const AlignHorizontalCenter = makeIcon(MDI_AlignHorizontalCenter)\nexport const AlignHorizontalLeft = makeIcon(MDI_AlignHorizontalLeft)\nexport const AlignHorizontalRight = makeIcon(MDI_AlignHorizontalRight)\nexport const Close = makeIcon(MDI_Close)\nexport const Check = makeIcon(MDI_Check)\nexport const CodeTags = makeIcon(MDI_CodeTags)\nexport const CircleMedium = makeIcon(MDI_CircleMedium)\nexport const Danger = makeIcon(MDI_Danger)\nexport const Delete = makeIcon(MDI_Delete)\nexport const Document = makeIcon(MDI_Document)\nexport const DotsHorizontal = makeIcon(MDI_DotsHorizontal)\nexport const Emoticon = makeIcon(MDI_Emoticon)\nexport const Folder = makeIcon(MDI_Folder)\nexport const FormatBold = makeIcon(MDI_FormatBold)\nexport const FormatHeader1 = makeIcon(MDI_FormatHeader1)\nexport const FormatHeader2 = makeIcon(MDI_FormatHeader2)\nexport const FormatHeader3 = makeIcon(MDI_FormatHeader3)\nexport const FormatHeader4 = makeIcon(MDI_FormatHeader4)\nexport const FormatHeader5 = makeIcon(MDI_FormatHeader5)\nexport const FormatHeader6 = makeIcon(MDI_FormatHeader6)\nexport const FormatItalic = makeIcon(MDI_FormatItalic)\nexport const FormatListBulleted = makeIcon(MDI_FormatListBulleted)\nexport const FormatListCheckbox = makeIcon(MDI_FormatListCheckbox)\nexport const FormatListNumbered = makeIcon(MDI_FormatListNumbered)\nexport const FormatQuote = makeIcon(MDI_FormatQuote)\nexport const FormatStrikethrough = makeIcon(MDI_FormatStrikethrough)\nexport const FormatUnderline = makeIcon(MDI_FormatUnderline)\nexport const Help = makeIcon(MDI_Help)\nexport const Image = makeIcon(MDI_Image)\nexport const Images = makeIcon(MDI_Images)\nexport const Info = makeIcon(MDI_Info)\nexport const LinkIcon = makeIcon(MDI_Link)\nexport const LinkOff = makeIcon(MDI_LinkOff)\nexport const LinkVariantPlus = makeIcon(MDI_LinkVariantPlus)\nexport const Lock = makeIcon(MDI_Lock)\nexport const Positive = makeIcon(MDI_Positive)\nexport const Redo = makeIcon(MDI_Redo)\nexport const Shape = makeIcon(MDI_Shape)\nexport const Table = makeIcon(MDI_Table)\nexport const TableAddColumnAfter = makeIcon(MDI_TableAddColumnAfter)\nexport const TableAddColumnBefore = makeIcon(MDI_TableAddColumnBefore)\nexport const TableAddRowAfter = makeIcon(MDI_TableAddRowAfter)\nexport const TableAddRowBefore = makeIcon(MDI_TableAddRowBefore)\nexport const TableSettings = makeIcon(MDI_TableSettings)\nexport const TrashCan = makeIcon(MDI_TrashCan)\nexport const TranslateVariant = makeIcon(MDI_TranslateVariant)\nexport const Undo = makeIcon(MDI_Undo)\nexport const Upload = makeIcon(MDI_Upload)\nexport const Warn = makeIcon(MDI_Warn)\nexport const Web = makeIcon(MDI_Web)\n","/**\n * @copyright Copyright (c) 2023 Max \n *\n * @author Max \n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n */\n\n/**\n *\n * Prepare pasted html for insertion into tiptap\n *\n * We render paragraphs with `white-space: pre-wrap`\n * so newlines are visible and preserved.\n *\n * Pasted html may contain newlines inside tags with a different `white-space` style.\n * They are not visible in the source.\n * Strip them so the pasted result wraps nicely.\n *\n * At the same time we need to preserve whitespace inside `
` tags\n * and the like.\n *\n * @param {string} html Pasted html content\n */\nexport default function(html) {\n\tconst parser = new DOMParser()\n\tconst doc = parser.parseFromString(html, 'text/html')\n\tforAllTextNodes(doc, textNode => {\n\t\tif (collapseWhiteSpace(textNode)) {\n\t\t\ttextNode.textContent = textNode.textContent.replaceAll('\\n', ' ')\n\t\t}\n\t})\n\treturn doc.body.innerHTML\n}\n\n/**\n *\n * Run function for all text nodes in the document.\n *\n * @param {Document} doc Html document to process\n * @param {Function} fn Function to run\n *\n */\nfunction forAllTextNodes(doc, fn) {\n\tconst nodeIterator = doc.createNodeIterator(\n\t\tdoc.body,\n\t\tNodeFilter.SHOW_TEXT,\n\t)\n\tlet currentNode = nodeIterator.nextNode()\n\twhile (currentNode) {\n\t\tfn(currentNode)\n\t\tcurrentNode = nodeIterator.nextNode()\n\t}\n}\n\n/**\n *\n * Check if newlines need to be collapsed based on the applied style\n *\n * @param {Text} textNode Text to check the style for\n *\n */\nfunction collapseWhiteSpace(textNode) {\n\t// Values of `white-space` css that will collapse newline whitespace\n\t// See https://developer.mozilla.org/en-US/docs/Web/CSS/white-space#values\n\tconst COLLAPSING_WHITE_SPACE_VALUES = ['normal', 'nowrap']\n\tlet ancestor = textNode.parentElement\n\twhile (ancestor) {\n\t\t// Chrome does not support getComputedStyle on detached dom\n\t\t// https://lists.w3.org/Archives/Public/www-style/2018May/0031.html\n\t\t// Therefore the following logic only works on Firefox\n\t\tconst style = getComputedStyle(ancestor)\n\t\tconst whiteSpace = style?.getPropertyValue('white-space')\n\t\tif (whiteSpace) {\n\t\t\t// Returns false if white-space has a value not listed in COLLAPSING_WHITE_SPACE_VALUES\n\t\t\treturn COLLAPSING_WHITE_SPACE_VALUES.includes(whiteSpace)\n\t\t}\n\n\t\t// Check for `tagName` as fallback on Chrome\n\t\tif (ancestor.tagName === 'PRE') {\n\t\t\treturn false\n\t\t}\n\t\tancestor = ancestor.parentElement\n\t}\n\treturn true\n}\n","/**\n * @copyright Copyright (c) 2022 Max \n *\n * @author Max \n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n */\n\n/*\n * Tiptap extension to ease customize the serialization to markdown\n *\n * Most markdown serialization can be handled by `prosemirror-markdown`.\n * In order to make it easier to add custom markdown rendering\n * this extension will extend the prosemirror schema for nodes and marks\n * with a `toMarkdown` specification if that is defined in a tiptap extension.\n *\n * For nodes `toMarkown` should be function\n * that take a serializer state and such a node, and serializes the node.\n *\n * For marks `toMarkdown` is an object with open and close properties,\n * which hold the strings that should appear before and after.\n *\n * For more details see\n * https://github.com/ProseMirror/prosemirror-markdown#class-markdownserializer\n */\n\nimport { Extension, getExtensionField } from '@tiptap/core'\nimport { Plugin, PluginKey } from '@tiptap/pm/state'\nimport { MarkdownSerializer, defaultMarkdownSerializer } from '@tiptap/pm/markdown'\nimport { DOMParser } from '@tiptap/pm/model'\nimport markdownit from '../markdownit/index.js'\nimport transformPastedHTML from './transformPastedHTML.js'\n\nconst Markdown = Extension.create({\n\n\tname: 'markdown',\n\n\textendMarkSchema(extension) {\n\t\tconst context = {\n\t\t\tname: extension.name,\n\t\t\toptions: extension.options,\n\t\t\tstorage: extension.storage,\n\t\t}\n\t\treturn {\n\t\t\ttoMarkdown: getExtensionField(extension, 'toMarkdown', context),\n\t\t}\n\t},\n\n\textendNodeSchema(extension) {\n\t\tconst context = {\n\t\t\tname: extension.name,\n\t\t\toptions: extension.options,\n\t\t\tstorage: extension.storage,\n\t\t}\n\t\treturn {\n\t\t\ttoMarkdown: getExtensionField(extension, 'toMarkdown', context),\n\t\t}\n\t},\n\n\taddProseMirrorPlugins() {\n\t\tlet shiftKey = false\n\n\t\treturn [\n\t\t\t// Parse markdown unless Mod+Shift+V is pressed for text clipboard content\n\t\t\tnew Plugin({\n\t\t\t\tkey: new PluginKey('pasteEventHandler'),\n\t\t\t\tprops: {\n\t\t\t\t\thandleDOMEvents: {\n\t\t\t\t\t\tmouseup(_, event) {\n\t\t\t\t\t\t\tshiftKey = event.shiftKey\n\t\t\t\t\t\t\treturn false\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\thandleKeyDown(_, event) {\n\t\t\t\t\t\tshiftKey = event.shiftKey\n\t\t\t\t\t\treturn false\n\t\t\t\t\t},\n\t\t\t\t\tclipboardTextParser(str, $context, _, view) {\n\t\t\t\t\t\tconst parser = DOMParser.fromSchema(view.state.schema)\n\t\t\t\t\t\tconst doc = document.cloneNode(false)\n\t\t\t\t\t\tconst dom = doc.createElement('div')\n\t\t\t\t\t\tif (shiftKey) {\n\t\t\t\t\t\t\t// Treat double newlines as paragraph breaks when pasting as plaintext\n\t\t\t\t\t\t\tfor (const part of str.split('\\n\\n')) {\n\t\t\t\t\t\t\t\tconst para = doc.createElement('p')\n\t\t\t\t\t\t\t\t// Treat single newlines as linebreaks\n\t\t\t\t\t\t\t\tpara.innerText = part\n\t\t\t\t\t\t\t\tdom.append(para)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tdom.innerHTML = markdownit.render(str)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn parser.parseSlice(dom, { preserveWhitespace: true, context: $context })\n\t\t\t\t\t},\n\t\t\t\t\ttransformPastedHTML,\n\t\t\t\t},\n\t\t\t}),\n\t\t]\n\t},\n})\n\nconst createMarkdownSerializer = ({ nodes, marks }) => {\n\tconst defaultNodes = convertNames(defaultMarkdownSerializer.nodes)\n\tconst defaultMarks = convertNames(defaultMarkdownSerializer.marks)\n\treturn {\n\t\tserializer: new MarkdownSerializer(\n\t\t\t{ ...defaultNodes, ...extractToMarkdown(nodes) },\n\t\t\t{ ...defaultMarks, ...extractToMarkdown(marks) },\n\t\t),\n\t\tserialize(content, options) {\n\t\t\treturn this.serializer.serialize(content, { ...options, tightLists: true })\n\t\t},\n\t}\n}\n\nconst extractToMarkdown = (nodesOrMarks) => {\n\treturn Object\n\t\t.entries(nodesOrMarks)\n\t\t.map(([name, nodeOrMark]) => [name, nodeOrMark.spec.toMarkdown])\n\t\t.filter(([, toMarkdown]) => toMarkdown)\n\t\t.reduce((items, [name, toMarkdown]) => ({\n\t\t\t...items,\n\t\t\t[name]: toMarkdown,\n\t\t}), {})\n}\n\nconst convertNames = (object) => {\n\tconst convert = (name) => {\n\t\treturn name.replace(/_(\\w)/g, (_m, letter) => letter.toUpperCase())\n\t}\n\treturn Object.fromEntries(\n\t\tObject.entries(object)\n\t\t\t.map(([name, value]) => [convert(name), value]),\n\t)\n}\n\nexport { createMarkdownSerializer }\nexport default Markdown\n","import { CollaborationCursor as TiptapCollaborationCursor } from '@tiptap/extension-collaboration-cursor'\n\n/**\n * Show cursor for client ID\n * Wait 50ms for cases where the cursor gets re-rendered\n *\n * @param {number} clientId The Yjs client ID\n */\nfunction showCursorLabel(clientId) {\n\tsetTimeout(() => {\n\t\tconst el = document.getElementById(`collaboration-cursor__label__${clientId}`)\n\t\tif (!el) {\n\t\t\treturn\n\t\t}\n\n\t\tel.classList.add('collaboration-cursor__label__active')\n\t\tsetTimeout(() => {\n\t\t\tel?.classList.remove('collaboration-cursor__label__active')\n\t\t}, 50)\n\t}, 50)\n}\n\n/**\n * Unix timestamp in seconds.\n */\nfunction getTimestamp() {\n\treturn Math.floor(Date.now() / 1000)\n}\n\nconst CollaborationCursor = TiptapCollaborationCursor.extend({\n\taddOptions() {\n\t\treturn {\n\t\t\tprovider: null,\n\t\t\tuser: {\n\t\t\t\tname: null,\n\t\t\t\tclientId: null,\n\t\t\t\tcolor: null,\n\t\t\t\tlastUpdate: getTimestamp(),\n\t\t\t},\n\t\t\trender: user => {\n\t\t\t\tconst cursor = document.createElement('span')\n\n\t\t\t\tcursor.classList.add('collaboration-cursor__caret')\n\t\t\t\tcursor.setAttribute('style', `border-color: ${user.color}`)\n\n\t\t\t\tconst label = document.createElement('div')\n\n\t\t\t\tlabel.classList.add('collaboration-cursor__label')\n\t\t\t\tlabel.id = `collaboration-cursor__label__${user.clientId}`\n\t\t\t\tlabel.setAttribute('style', `background-color: ${user.color}`)\n\t\t\t\tlabel.insertBefore(document.createTextNode(user.name), null)\n\t\t\t\tcursor.insertBefore(label, null)\n\n\t\t\t\treturn cursor\n\t\t\t},\n\t\t}\n\t},\n\n\tonCreate() {\n\t\tthis.options.provider.awareness.on('change', ({ added, removed, updated }, origin) => {\n\t\t\tif (origin !== 'local') {\n\t\t\t\tfor (const clientId of [...added, ...updated]) {\n\t\t\t\t\tif (clientId !== this.options.user.clientId) {\n\t\t\t\t\t\tshowCursorLabel(clientId)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t},\n\n\t// Flag own cursor as active on undoable changes to the document state\n\tonTransaction({ transaction }) {\n\t\tconst { updated, meta } = transaction\n\t\tif (updated && (meta.addToHistory ?? true) && !meta.pointer) {\n\t\t\tthis.options.user.lastUpdate = getTimestamp()\n\t\t\tthis.options.provider.awareness.setLocalStateField('user', this.options.user)\n\t\t}\n\t},\n})\n\nexport default CollaborationCursor\n","/*\n * @copyright Copyright (c) 2021 Jonas \n *\n * @author Jonas \n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n */\n\nimport { Node } from '@tiptap/core'\nimport { PluginKey } from '@tiptap/pm/state'\n// eslint-disable-next-line import/no-named-as-default\nimport Suggestion from '@tiptap/suggestion'\n\nexport const EmojiPluginKey = new PluginKey('emoji')\n\nconst Emoji = Node.create({\n\tname: 'emoji',\n\n\taddOptions() {\n\t\treturn {\n\t\t\tHTMLAttributes: {},\n\t\t\tsuggestion: {\n\t\t\t\tchar: ':',\n\t\t\t\tallowedPrefixes: [' '],\n\t\t\t\tpluginKey: EmojiPluginKey,\n\t\t\t},\n\t\t}\n\t},\n\n\tcontent: 'text*',\n\n\taddCommands() {\n\t\treturn {\n\t\t\temoji: (emojiObject) => ({ commands }) => {\n\t\t\t\treturn commands.insertContent(emojiObject.native + ' ')\n\t\t\t},\n\t\t}\n\t},\n\n\taddProseMirrorPlugins() {\n\t\treturn [\n\t\t\tSuggestion({\n\t\t\t\teditor: this.editor,\n\t\t\t\t...this.options.suggestion,\n\t\t\t}),\n\t\t]\n\t},\n})\n\nexport default Emoji\n","/*\n * @copyright Copyright (c) 2019 Julius Härtl \n *\n * @author Julius Härtl \n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n */\n\nimport { Extension } from '@tiptap/core'\nimport { Plugin } from '@tiptap/pm/state'\n\nconst Keymap = Extension.create({\n\n\tname: 'customkeymap',\n\n\taddKeyboardShortcuts() {\n\t\treturn this.options\n\t},\n\n\taddProseMirrorPlugins() {\n\t\treturn [\n\t\t\tnew Plugin({\n\t\t\t\tprops: {\n\t\t\t\t\thandleKeyDown(view, event) {\n\t\t\t\t\t\tconst key = event.key || event.keyCode\n\t\t\t\t\t\tif ((event.ctrlKey || event.metaKey) && !event.shiftKey && (key === 'f' || key === 70)) {\n\t\t\t\t\t\t\t// We need to stop propagation and dispatch the event on the window\n\t\t\t\t\t\t\t// in order to force triggering the browser native search in the text editor\n\t\t\t\t\t\t\tevent.stopPropagation()\n\t\t\t\t\t\t\twindow.dispatchEvent(event)\n\t\t\t\t\t\t\treturn true\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (event.key === 'Delete' && event.ctrlKey === true) {\n\t\t\t\t\t\t\t// Prevent deleting the file, by core Viewer.vue\n\t\t\t\t\t\t\tevent.stopPropagation()\n\t\t\t\t\t\t\twindow.dispatchEvent(event)\n\t\t\t\t\t\t\treturn true\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}),\n\t\t]\n\t},\n\n})\n\nexport default Keymap\n","/*\n * @copyright Copyright (c) 2020 Julius Härtl \n *\n * @author Julius Härtl \n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n */\n\nexport class Span {\n\n\tconstructor(from, to, author) {\n\t\tthis.from = from\n\t\tthis.to = to\n\t\tthis.author = author\n\t}\n\n}\n","/*\n * @copyright Copyright (c) 2021 Julius Härtl \n *\n * @author Julius Härtl \n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n */\n\nimport { Span } from './models.js'\n\n/*\n * This code is heavily inspired by the change tracking example of prosemirror\n * https://github.com/ProseMirror/website/blob/master/example/track/index.js\n */\n\n/**\n * @param {Array} map List of document ranges and corresponding authors\n * @param {object} transform ProseMirror transform object\n * @param {Array} clientIDs List of client IDs\n */\nfunction updateBlameMap(map, transform, clientIDs) {\n\tconst result = []\n\tconst mapping = transform.mapping\n\tfor (let i = 0; i < map.length; i++) {\n\t\tconst span = map[i]\n\t\tconst from = mapping.map(span.from, 1)\n\t\tconst to = mapping.map(span.to, -1)\n\t\tif (from < to) result.push(new Span(from, to, span.author))\n\t}\n\n\tfor (let i = 0; i < mapping.maps.length; i++) {\n\t\tconst map = mapping.maps[i]; const after = mapping.slice(i + 1)\n\t\tmap.forEach((_s, _e, start, end) => {\n\t\t\tinsertIntoBlameMap(result, after.map(start, 1), after.map(end, -1), clientIDs[i])\n\t\t})\n\t}\n\n\treturn result\n}\n\n/**\n * @param {Array} map List of document ranges and corresponding authors\n * @param {number} from The lower bound of the selection's main range\n * @param {number} to The upper bound of the selection's main range\n * @param {number} author ClientID of the author\n */\nfunction insertIntoBlameMap(map, from, to, author) {\n\tif (from >= to) {\n\t\treturn\n\t}\n\tlet pos = 0\n\tlet next\n\tfor (; pos < map.length; pos++) {\n\t\tnext = map[pos]\n\t\tif (next.author === author) {\n\t\t\tif (next.to >= from) break\n\t\t} else if (next.to > from) { // Different author, not before\n\t\t\tif (next.from < from) { // Sticks out to the left (loop below will handle right side)\n\t\t\t\tconst left = new Span(next.from, from, next.author)\n\t\t\t\tif (next.to > to) map.splice(pos++, 0, left)\n\t\t\t\telse map[pos++] = left\n\t\t\t}\n\t\t\tbreak\n\t\t}\n\t}\n\n\t// eslint-ignore\n\twhile ((next = map[pos])) {\n\t\tif (next.author === author) {\n\t\t\tif (next.from > to) break\n\t\t\tfrom = Math.min(from, next.from)\n\t\t\tto = Math.max(to, next.to)\n\t\t\tmap.splice(pos, 1)\n\t\t} else {\n\t\t\tif (next.from >= to) break\n\t\t\tif (next.to > to) {\n\t\t\t\tmap[pos] = new Span(to, next.to, next.author)\n\t\t\t\tbreak\n\t\t\t} else {\n\t\t\t\tmap.splice(pos, 1)\n\t\t\t}\n\t\t}\n\t}\n\n\tmap.splice(pos, 0, new Span(from, to, author))\n}\n\nexport default class TrackState {\n\n\tconstructor(blameMap) {\n\t\t// The blame map is a data structure that lists a sequence of\n\t\t// document ranges, along with the author that inserted them. This\n\t\t// can be used to, for example, highlight the part of the document\n\t\t// that was inserted by a author.\n\t\tthis.blameMap = blameMap\n\t}\n\n\t// Apply a transform to this state\n\tapplyTransform(transform) {\n\t\tconst clientID = transform.getMeta('clientID') ?? transform.steps.map(item => 'self')\n\t\tconst newBlame = updateBlameMap(this.blameMap, transform, clientID)\n\t\t// Create a new state—since these are part of the editor state, a\n\t\t// persistent data structure, they must not be mutated.\n\t\treturn new TrackState(newBlame)\n\t}\n\n}\n","/*\n * @copyright Copyright (c) 2020 Julius Härtl \n *\n * @author Julius Härtl \n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n */\n\nimport { Extension } from '@tiptap/core'\nimport { Plugin } from '@tiptap/pm/state'\nimport { Decoration, DecorationSet } from '@tiptap/pm/view'\nimport TrackState from './tracking/TrackState.js'\nimport { Span } from './tracking/models.js'\n\nconst UserColor = Extension.create({\n\n\tname: 'users',\n\n\taddOptions() {\n\t\treturn {\n\t\t\tclientID: 0,\n\t\t\tcolor: (clientID) => {\n\t\t\t\treturn '#' + Math.floor((Math.abs(Math.sin(clientID) * 16777215)) % 16777215).toString(16) + 'aa'\n\t\t\t},\n\t\t\tname: (clientID) => {\n\t\t\t\treturn 'Unknown user ' + clientID\n\t\t\t},\n\t\t}\n\t},\n\n\taddProseMirrorPlugins() {\n\t\tlet viewReference = null\n\t\treturn [\n\t\t\tnew Plugin({\n\t\t\t\tclientID: this.options.clientID,\n\t\t\t\tcolor: this.options.color,\n\t\t\t\tname: this.options.name,\n\t\t\t\tview: (editorView) => {\n\t\t\t\t\tviewReference = editorView\n\t\t\t\t\treturn {}\n\t\t\t\t},\n\t\t\t\tstate: {\n\t\t\t\t\tinit(_, instance) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\ttracked: new TrackState([new Span(0, instance.doc.content.size, null)], [], [], []),\n\t\t\t\t\t\t\tdeco: DecorationSet.empty,\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tapply(tr, instance, oldState, state) {\n\t\t\t\t\t\tlet { tracked, decos } = instance\n\t\t\t\t\t\tlet tState = this.getState(oldState).tracked\n\t\t\t\t\t\tif (tr.docChanged) {\n\t\t\t\t\t\t\tif (!tr.getMeta('clientID')) {\n\t\t\t\t\t\t\t\t// we have an undefined client id for own transactions\n\t\t\t\t\t\t\t\ttr.setMeta('clientID', tr.steps.map(i => this.spec.clientID))\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Don't apply transaction when in composition (Github issue #2871)\n\t\t\t\t\t\t\tif (!viewReference.composing) {\n\t\t\t\t\t\t\t\ttracked = tracked.applyTransform(tr)\n\t\t\t\t\t\t\t\ttState = tracked\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdecos = tState.blameMap\n\t\t\t\t\t\t\t.map(span => {\n\t\t\t\t\t\t\t\tconst clientID = span.author\n\t\t\t\t\t\t\t\treturn Decoration.inline(span.from, span.to, {\n\t\t\t\t\t\t\t\t\tclass: 'author-annotation',\n\t\t\t\t\t\t\t\t\tstyle: 'background-color: ' + this.spec.color(clientID) + '66;',\n\t\t\t\t\t\t\t\t\ttitle: this.spec.name(clientID),\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}).filter(dec => dec !== null)\n\t\t\t\t\t\treturn { tracked, deco: DecorationSet.create(state.doc, decos) }\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tprops: {\n\t\t\t\t\tdecorations(state) {\n\t\t\t\t\t\treturn this.getState(state).deco\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}),\n\t\t]\n\t},\n\n})\n\nexport default UserColor\n","/*\n * @copyright Copyright (c) 2019 Julius Härtl \n *\n * @author Julius Härtl \n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n */\n\nimport { Node } from '@tiptap/core'\n\nexport default Node.create({\n\tname: 'doc',\n\tcontent: 'block',\n\taddKeyboardShortcuts() {\n\t\treturn {\n\t\t\tTab: () => this.editor.commands.insertContent('\\t'),\n\t\t}\n\t},\n\n})\n","/*\n * @copyright Copyright (c) 2022 Max \n *\n * @author Max \n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n*/\n\nimport { Extension } from '@tiptap/core'\n\n/* eslint-disable import/no-named-as-default */\nimport Text from '@tiptap/extension-text'\nimport PlainTextDocument from './../nodes/PlainTextDocument.js'\n\nexport default Extension.create({\n\tname: 'PlainText',\n\n\taddExtensions() {\n\t\treturn [\n\t\t\tPlainTextDocument,\n\t\t\tText,\n\t\t]\n\t},\n\n})\n","/*\n * @copyright Copyright (c) 2020 Julius Härtl \n *\n * @author Julius Härtl \n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n */\n\nimport TiptapBulletList from '@tiptap/extension-bullet-list'\nimport { listInputRule } from '../commands/index.js'\n\n/* We want to allow for `* [ ]` as an input rule for bullet lists.\n * Therefore the list input rules need to check the input\n * until the first char after the space.\n * Only there we know the user is not trying to create a task list.\n */\nconst BulletList = TiptapBulletList.extend({\n\tparseHTML() {\n\t\treturn this.parent().map(rule => Object.assign(rule, { preserveWhitespace: true }))\n\t},\n\n\taddAttributes() {\n\t\treturn {\n\t\t\t...this.parent?.(),\n\t\t\tbullet: {\n\t\t\t\tdefault: '-',\n\t\t\t\trendered: false,\n\t\t\t\tisRequired: true,\n\t\t\t\tparseHTML: (el) => el.getAttribute('data-bullet'),\n\t\t\t},\n\t\t}\n\t},\n\n\taddInputRules() {\n\t\treturn [\n\t\t\tlistInputRule(\n\t\t\t\t/^\\s*([-+*])\\s([^\\s[]+)$/,\n\t\t\t\tthis.type,\n\t\t\t),\n\t\t]\n\t},\n\n})\n\nexport default BulletList\n","/*\n * @copyright Copyright (c) 2021 Jonas Meurer \n *\n * @author Jonas Meurer \n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n */\n\nimport { InputRule, wrappingInputRule } from '@tiptap/core'\n\n/**\n * Wrapping input handler that will append the content of the last match\n *\n * @param {RegExp} find find param for the wrapping input rule\n * @param {object} type Node Type object\n * @param {*} getAttributes handler to get the attributes\n */\nexport default function(find, type, getAttributes) {\n\tconst handler = ({ state, range, match }) => {\n\t\tconst wrap = wrappingInputRule({ find, type, getAttributes })\n\t\twrap.handler({ state, range, match })\n\t\t// Insert the first character after bullet if there is one\n\t\tif (match.length >= 3) {\n\t\t\tstate.tr.insertText(match[2])\n\t\t}\n\t}\n\treturn new InputRule({ find, handler })\n}\n","\n\n\n\n\n\n","import mod from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Callout.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Callout.vue?vue&type=script&lang=js&\"","\n      import API from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/sass-loader/dist/cjs.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Callout.vue?vue&type=style&index=0&id=2734884a&prod&lang=scss&scoped=true&\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/sass-loader/dist/cjs.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Callout.vue?vue&type=style&index=0&id=2734884a&prod&lang=scss&scoped=true&\";\n       export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Callout.vue?vue&type=template&id=2734884a&scoped=true&\"\nimport script from \"./Callout.vue?vue&type=script&lang=js&\"\nexport * from \"./Callout.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Callout.vue?vue&type=style&index=0&id=2734884a&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"2734884a\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('NodeViewWrapper',{staticClass:\"callout\",class:`callout--${_vm.type}`,attrs:{\"data-text-el\":\"callout\",\"as\":\"div\"}},[_c(_vm.icon,{tag:\"component\",staticClass:\"callout__icon\"}),_vm._v(\" \"),_c('NodeViewContent',{staticClass:\"callout__content\"})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/*\n * @copyright Copyright (c) 2022 Vinicius Reis \n *\n * @author Vinicius Reis \n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n */\n\nimport { Node, isNodeActive, mergeAttributes } from '@tiptap/core'\nimport { VueNodeViewRenderer } from '@tiptap/vue-2'\nimport { typesAvailable } from './../markdownit/callouts.js'\n\nimport Callout from './Callout.vue'\n\nexport default Node.create({\n\n\tname: 'callout',\n\n\tcontent: 'paragraph+',\n\n\tgroup: 'block',\n\n\tdefining: true,\n\n\taddOptions() {\n\t\treturn {\n\t\t\ttypes: typesAvailable,\n\t\t\tHTMLAttributes: {\n\t\t\t\tclass: 'callout',\n\t\t\t},\n\t\t}\n\t},\n\n\taddAttributes() {\n\t\treturn {\n\t\t\ttype: {\n\t\t\t\tdefault: 'info',\n\t\t\t\trendered: false,\n\t\t\t\tparseHTML: element => {\n\t\t\t\t\treturn element.getAttribute('data-callout')\n\t\t\t\t\t\t|| typesAvailable.find((type) => element.classList.contains(type))\n\t\t\t\t\t\t|| (element.classList.contains('warning') && 'warn')\n\t\t\t\t},\n\t\t\t\trenderHTML: attributes => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\t'data-callout': attributes.type,\n\t\t\t\t\t\tclass: `callout-${attributes.type}`,\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t},\n\t\t}\n\t},\n\n\tparseHTML() {\n\t\treturn [\n\t\t\t{\n\t\t\t\ttag: 'div.callout',\n\t\t\t},\n\t\t\t{\n\t\t\t\ttag: 'p.callout',\n\t\t\t\tpriority: 1001,\n\t\t\t},\n\t\t]\n\t},\n\n\trenderHTML({ node, HTMLAttributes }) {\n\t\tconst { class: classy } = this.options.HTMLAttributes\n\n\t\tconst attributes = {\n\t\t\t...this.options.HTMLAttributes,\n\t\t\t'data-callout': node.attrs.type,\n\t\t\tclass: `${classy} ${classy}-${node.attrs.type}`,\n\t\t}\n\n\t\treturn ['div', mergeAttributes(attributes, HTMLAttributes), 0]\n\t},\n\n\ttoMarkdown: (state, node) => {\n\t\tstate.write('::: ' + (node.attrs.type || 'info') + '\\n')\n\t\tstate.renderContent(node)\n\t\tstate.ensureNewLine()\n\t\tstate.write(':::')\n\t\tstate.closeBlock(node)\n\t},\n\n\taddNodeView() {\n\t\treturn VueNodeViewRenderer(Callout)\n\t},\n\n\taddCommands() {\n\t\treturn {\n\t\t\tsetCallout: attributes => ({ commands }) => {\n\t\t\t\treturn commands.wrapIn(this.name, attributes)\n\t\t\t},\n\t\t\ttoggleCallout: attributes => ({ commands, state }) => {\n\t\t\t\tif (!isNodeActive(state, this.name)) {\n\t\t\t\t\treturn commands.setCallout(attributes)\n\t\t\t\t}\n\n\t\t\t\tif (!isNodeActive(state, this.name, attributes)) {\n\t\t\t\t\treturn commands.updateAttributes(this.name, attributes)\n\t\t\t\t}\n\n\t\t\t\treturn commands.unsetCallout()\n\t\t\t},\n\t\t\tunsetCallout: () => ({ commands }) => {\n\t\t\t\treturn commands.lift(this.name)\n\t\t\t},\n\t\t}\n\t},\n})\n","import TiptapCodeBlockLowlight from '@tiptap/extension-code-block-lowlight'\nimport { defaultMarkdownSerializer } from '@tiptap/pm/markdown'\n\nconst CodeBlock = TiptapCodeBlockLowlight.extend({\n\n\tparseHTML() {\n\t\treturn [\n\t\t\t{\n\t\t\t\ttag: 'pre',\n\t\t\t\tpreserveWhitespace: 'full',\n\t\t\t\t// Remove trailing newline from code blocks (#2344)\n\t\t\t\tgetContent: (node, schema) => {\n\t\t\t\t\tconst textContent = node.textContent.replace(/\\n$/, '')\n\t\t\t\t\tconst inner = textContent\n\t\t\t\t\t\t? [schema.text(textContent)]\n\t\t\t\t\t\t: []\n\t\t\t\t\treturn schema.nodes.codeBlock.create(null, inner)\n\t\t\t\t},\n\t\t\t},\n\t\t]\n\t},\n\n\ttoMarkdown(state, node, parent, index) {\n\t\t// @tiptap/pm/markdown uses `params` instead of `language` attribute\n\t\tnode.attrs.params = node.attrs.language\n\t\treturn defaultMarkdownSerializer.nodes.code_block(state, node, parent, index)\n\t},\n\n})\n\nexport default CodeBlock\n","\n\n\n\n\n\n\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EmojiList.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EmojiList.vue?vue&type=script&lang=js&\"","\n      import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EmojiList.vue?vue&type=style&index=0&id=75a9e928&prod&scoped=true&lang=scss&\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EmojiList.vue?vue&type=style&index=0&id=75a9e928&prod&scoped=true&lang=scss&\";\n       export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./EmojiList.vue?vue&type=template&id=75a9e928&scoped=true&\"\nimport script from \"./EmojiList.vue?vue&type=script&lang=js&\"\nexport * from \"./EmojiList.vue?vue&type=script&lang=js&\"\nimport style0 from \"./EmojiList.vue?vue&type=style&index=0&id=75a9e928&prod&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"75a9e928\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"emoji-list\"},[(_vm.hasResults)?_vm._l((_vm.items),function(emojiObject,index){return _c('div',{key:index,staticClass:\"emoji-list__item\",class:{ 'is-selected': index === _vm.selectedIndex },on:{\"click\":function($event){return _vm.selectItem(index)}}},[_c('span',{staticClass:\"emoji-list__item__emoji\"},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(emojiObject.native)+\"\\n\\t\\t\\t\")]),_vm._v(\"\\n\\t\\t\\t:\"+_vm._s(emojiObject.short_name)+\"\\n\\t\\t\")])}):_c('div',{staticClass:\"emoji-list__item is-empty\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('text', 'No emoji found'))+\"\\n\\t\")])],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { mergeAttributes } from '@tiptap/core'\nimport TiptapCodeBlock from '@tiptap/extension-code-block'\n\nconst FrontMatter = TiptapCodeBlock.extend({\n\tname: 'frontMatter',\n\t// FrontMatter are only valid at the begin of a document\n\tdraggable: false,\n\n\trenderHTML({ node, HTMLAttributes }) {\n\t\treturn this.parent({\n\t\t\tnode,\n\t\t\tHTMLAttributes:\n\t\t\tmergeAttributes(HTMLAttributes, { 'data-title': t('text', 'Front matter'), class: 'frontmatter' }),\n\t\t})\n\t},\n\tparseHTML() {\n\t\treturn [{\n\t\t\ttag: 'pre#frontmatter',\n\t\t\tpreserveWhitespace: 'full',\n\t\t\tpriority: 9001,\n\t\t\tattrs: {\n\t\t\t\tlanguage: 'yaml',\n\t\t\t},\n\t\t}]\n\t},\n\ttoMarkdown: (state, node) => {\n\t\tif (!state.out.match(/^\\s*/)) throw Error('FrontMatter must be the first node of the document!')\n\t\tconst text = node.textContent\n\t\t// Make sure the front matter fences are longer than any dash sequence within it\n\t\tconst dashes = text.match(/-{3,}/gm)\n\t\tconst separator = dashes ? (dashes.sort().slice(-1)[0] + '-') : '---'\n\n\t\tstate.write('')\n\t\tstate.out = ''\n\t\tstate.write(`${separator}\\n`)\n\t\tstate.text(text, false)\n\t\tstate.ensureNewLine()\n\t\tstate.write(separator)\n\t\tstate.closeBlock(node)\n\t},\n\n\t// Allow users to add a FrontMatter, but only at the beginning of the document\n\taddInputRules() {\n\t\treturn [\n\t\t\t{\n\t\t\t\tfind: /^---$/g,\n\t\t\t\thandler: ({ state, range, chain }) => {\n\t\t\t\t\tif (range.from === 1) {\n\t\t\t\t\t\tif (state.doc.resolve(1).parent.type.name === this.name) return false\n\t\t\t\t\t\tchain()\n\t\t\t\t\t\t\t.deleteRange(range)\n\t\t\t\t\t\t\t.insertContentAt(0, {\n\t\t\t\t\t\t\t\ttype: this.name,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\treturn true\n\t\t\t\t\t}\n\t\t\t\t\treturn false\n\t\t\t\t},\n\t\t\t},\n\t\t]\n\t},\n\n\t// Override rules from Codeblock\n\taddCommands() {\n\t\treturn {}\n\t},\n\taddPasteRules: () => [],\n\taddProseMirrorPlugins: () => [],\n})\n\nexport default FrontMatter\n","\n\n\n\n\n\n","import mod from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ParagraphView.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ParagraphView.vue?vue&type=script&lang=js&\"","\n      import API from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/sass-loader/dist/cjs.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ParagraphView.vue?vue&type=style&index=0&id=b95f24a4&prod&lang=scss&scoped=true&\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/sass-loader/dist/cjs.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ParagraphView.vue?vue&type=style&index=0&id=b95f24a4&prod&lang=scss&scoped=true&\";\n       export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./ParagraphView.vue?vue&type=template&id=b95f24a4&scoped=true&\"\nimport script from \"./ParagraphView.vue?vue&type=script&lang=js&\"\nexport * from \"./ParagraphView.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ParagraphView.vue?vue&type=style&index=0&id=b95f24a4&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"b95f24a4\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('NodeViewWrapper',{staticClass:\"vue-component\",attrs:{\"as\":\"p\"}},[_c('NodeViewContent',{staticClass:\"paragraph-content\"}),_vm._v(\" \"),(_vm.isLoggedIn && _vm.text)?_c('NcReferenceList',{attrs:{\"text\":_vm.text,\"limit\":1,\"contenteditable\":\"false\"}}):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import TiptapParagraph from '@tiptap/extension-paragraph'\nimport { VueNodeViewRenderer } from '@tiptap/vue-2'\nimport ParagraphView from './ParagraphView.vue'\n\nconst Paragraph = TiptapParagraph.extend({\n\n\taddNodeView() {\n\t\treturn VueNodeViewRenderer(ParagraphView)\n\t},\n\n\tparseHTML() {\n\t\treturn this.parent().map(rule => Object.assign(rule, { preserveWhitespace: 'full' }))\n\t},\n\n\taddKeyboardShortcuts() {\n\t\treturn {\n\t\t\tBackspace: () => {\n\t\t\t\t// Check that cursor is at beginning of text\n\t\t\t\tconst selection = this.editor.state.selection\n\t\t\t\tif (selection.$from.parentOffset !== 0) return false\n\n\t\t\t\tconst node = selection.$from.parent\n\t\t\t\tconst index = selection.$from.index(selection.$from.depth - 1)\n\t\t\t\t// Check there is a leading sibling\n\t\t\t\tif (index === 0) return false\n\n\t\t\t\tconst parent = selection.$from.node(selection.$from.depth - 1)\n\t\t\t\tconst previousNode = parent.child(index - 1)\n\t\t\t\t// Check this and the previous sibling are paragraphs\n\t\t\t\tif (node.type.name === this.name\n\t\t\t\t\t&& previousNode.type.name === this.name) {\n\t\t\t\t\treturn this.editor.chain().joinBackward().setHardBreak().run()\n\t\t\t\t}\n\t\t\t\treturn false\n\t\t\t},\n\t\t}\n\t},\n})\n\nexport default Paragraph\n","/*\n * @copyright Copyright (c) 2022 Julius Härtl \n *\n * @author Julius Härtl \n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n*/\n\nimport TipTapHardBreak from '@tiptap/extension-hard-break'\n\nconst HardBreak = TipTapHardBreak.extend({\n\taddAttributes() {\n\t\treturn {\n\t\t\tsyntax: {\n\t\t\t\tdefault: '  ',\n\t\t\t\trendered: false,\n\t\t\t\tkeepOnSplit: true,\n\t\t\t\tparseHTML: (el) => el.getAttribute('data-syntax') || '  ',\n\t\t\t},\n\t\t}\n\t},\n\n\taddCommands() {\n\t\treturn {\n\t\t\t...this?.parent(),\n\t\t\tsetHardBreak: () => (ctx) => {\n\t\t\t\t// Prevent hard breaks within headings\n\t\t\t\tfor (let d = ctx.state.selection.$from.depth; d >= 0; d--) {\n\t\t\t\t\tif (ctx.state.selection.$from.node(d).type.name === 'heading') return false\n\t\t\t\t}\n\t\t\t\treturn this.parent().setHardBreak()(ctx)\n\t\t\t},\n\t\t}\n\t},\n\n\ttoMarkdown(state, node, parent, index) {\n\t\tfor (let i = index + 1; i < parent.childCount; i++) {\n\t\t\tif (parent.child(i).type !== node.type) {\n\t\t\t\tif (node.attrs.syntax !== 'html') {\n\t\t\t\t\tstate.write(node.attrs.syntax)\n\t\t\t\t\tif (!parent.child(i).text?.startsWith('\\n')) state.write('\\n')\n\t\t\t\t} else {\n\t\t\t\t\tstate.write('
')\n\t\t\t\t}\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t},\n})\n\nexport default HardBreak\n","import store from '../../store/index.js'\nimport { slugify } from './slug.js'\nimport { v4 as uuidv4 } from 'uuid'\n\nconst setHeadings = (val) => store.dispatch('text/setHeadings', val)\n\nconst extractHeadings = (editor) => {\n\tconst counter = new Map()\n\tconst headings = []\n\tconst tr = editor.state.tr\n\n\tconst getId = text => {\n\t\tconst id = slugify(text)\n\n\t\tif (counter.has(id)) {\n\t\t\tconst next = counter.get(id)\n\n\t\t\t// increment counter\n\t\t\tcounter.set(id, next + 1)\n\n\t\t\treturn `h-${id}--${next}`\n\t\t}\n\n\t\t// define counter\n\t\tcounter.set(id, 1)\n\n\t\treturn 'h-' + id\n\t}\n\n\teditor.state.doc.descendants((node, position) => {\n\t\tif (node.type.name === 'heading') {\n\t\t\tconst text = node.textContent\n\t\t\tconst id = getId(text)\n\t\t\tconst uuid = node.attrs.uuid ?? uuidv4()\n\n\t\t\tif (node.attrs.id !== id || !node.attrs.uuid) {\n\t\t\t\tconst attrs = {\n\t\t\t\t\t...node.attrs,\n\t\t\t\t\tuuid,\n\t\t\t\t\tid,\n\t\t\t\t}\n\n\t\t\t\ttr.setNodeMarkup(position, undefined, attrs)\n\t\t\t}\n\n\t\t\theadings.push(Object.freeze({\n\t\t\t\tlevel: node.attrs.level,\n\t\t\t\tposition,\n\t\t\t\ttext,\n\t\t\t\tid,\n\t\t\t\tuuid,\n\t\t\t}))\n\t\t}\n\t})\n\n\ttr.setMeta('addToHistory', false)\n\ttr.setMeta('preventUpdate', true)\n\n\teditor.view.dispatch(tr)\n\n\tsetHeadings(headings)\n}\n\nexport {\n\textractHeadings,\n\tsetHeadings,\n}\n","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('NodeViewWrapper',{ref:\"container\",attrs:{\"id\":_vm.node.attrs.id,\"as\":_vm.domElement}},[_c('a',{staticClass:\"heading-anchor\",attrs:{\"aria-hidden\":\"true\",\"href\":_vm.href,\"title\":_vm.t('text', 'Link to this section'),\"contenteditable\":false},on:{\"click\":function($event){$event.stopPropagation();return _vm.click.apply(null, arguments)}}},[_vm._v(_vm._s(_vm.linkSymbol))]),_vm._v(\" \"),_c('NodeViewContent',{attrs:{\"as\":\"span\"}})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./HeadingView.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./HeadingView.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/sass-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./HeadingView.vue?vue&type=style&index=0&id=de8491a2&prod&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/sass-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./HeadingView.vue?vue&type=style&index=0&id=de8491a2&prod&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./HeadingView.vue?vue&type=template&id=de8491a2&\"\nimport script from \"./HeadingView.vue?vue&type=script&lang=js&\"\nexport * from \"./HeadingView.vue?vue&type=script&lang=js&\"\nimport style0 from \"./HeadingView.vue?vue&type=style&index=0&id=de8491a2&prod&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import TipTapHeading from '@tiptap/extension-heading'\nimport { VueNodeViewRenderer } from '@tiptap/vue-2'\nimport debounce from 'debounce'\nimport { extractHeadings } from './extractor.js'\nimport HeaderViewVue from './HeadingView.vue'\n\nconst Heading = TipTapHeading.extend({\n\taddAttributes() {\n\t\treturn {\n\t\t\t...this.parent(),\n\t\t\tid: {\n\t\t\t\tdefault: undefined,\n\t\t\t\trendered: true,\n\t\t\t},\n\t\t\tuuid: {\n\t\t\t\tdefault: undefined,\n\t\t\t\trendered: false,\n\t\t\t},\n\t\t}\n\t},\n\n\taddOptions() {\n\t\treturn {\n\t\t\t...this.parent?.(),\n\t\t\tlinkSymbol: '#',\n\t\t}\n\t},\n\n\taddKeyboardShortcuts() {\n\t\treturn this.options.levels.reduce((items, level) => ({\n\t\t\t...items,\n\t\t\t[`Mod-Shift-${level}`]: () => this.editor.commands.toggleHeading({ level }),\n\t\t}), {})\n\t},\n\n\taddNodeView() {\n\t\treturn VueNodeViewRenderer(HeaderViewVue, {\n\t\t\tupdate: ({ oldNode, newNode, updateProps }) => {\n\t\t\t\tif (newNode.type.name !== this.name) return false\n\t\t\t\t// Make sure to redraw node as the vue renderer will not show the updated children\n\t\t\t\tif (newNode.attrs !== oldNode.attrs) return false\n\t\t\t\tupdateProps()\n\t\t\t\treturn true\n\t\t\t},\n\t\t})\n\t},\n\n\tonCreate() {\n\t\textractHeadings(this.editor)\n\n\t\tif (this.parent) {\n\t\t\tthis.parent()\n\t\t}\n\t},\n\n\tonUpdate: debounce(({ editor }) => {\n\t\tif (editor.view && editor.state && !editor.isDestroyed) {\n\t\t\t// Only run if editor still exists (prevent dangling debounced extractHeadings function)\n\t\t\textractHeadings(editor)\n\t\t}\n\t}, 900),\n\n})\n\nexport default Heading\n","\n\n\n\n\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ShowImageModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ShowImageModal.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/sass-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ShowImageModal.vue?vue&type=style&index=0&id=8f1a4cfa&prod&scoped=true&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/sass-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ShowImageModal.vue?vue&type=style&index=0&id=8f1a4cfa&prod&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./ShowImageModal.vue?vue&type=template&id=8f1a4cfa&scoped=true&\"\nimport script from \"./ShowImageModal.vue?vue&type=script&lang=js&\"\nexport * from \"./ShowImageModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ShowImageModal.vue?vue&type=style&index=0&id=8f1a4cfa&prod&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"8f1a4cfa\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return (_vm.show)?_c('NcModal',{attrs:{\"size\":\"large\",\"title\":_vm.currentImage.basename,\"out-transition\":true,\"has-next\":true,\"has-previous\":true,\"close-button-contained\":false,\"dark\":true},on:{\"next\":_vm.showNextImage,\"previous\":_vm.showPreviousImage,\"close\":function($event){return _vm.$emit('close')}}},[_c('div',{staticClass:\"modal__content\"},[_c('img',{attrs:{\"src\":_vm.currentImage.source}})])]):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n","import mod from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ImageView.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ImageView.vue?vue&type=script&lang=js&\"","\n import API from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/sass-loader/dist/cjs.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ImageView.vue?vue&type=style&index=0&id=4febfd28&prod&scoped=true&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/sass-loader/dist/cjs.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ImageView.vue?vue&type=style&index=0&id=4febfd28&prod&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./ImageView.vue?vue&type=template&id=4febfd28&scoped=true&\"\nimport script from \"./ImageView.vue?vue&type=script&lang=js&\"\nexport * from \"./ImageView.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ImageView.vue?vue&type=style&index=0&id=4febfd28&prod&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4febfd28\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('NodeViewWrapper',[_c('figure',{staticClass:\"image image-view\",class:{'icon-loading': !_vm.loaded, 'image-view--failed': _vm.failed},attrs:{\"data-component\":\"image-view\",\"data-src\":_vm.src}},[(_vm.canDisplayImage)?_c('div',{directives:[{name:\"click-outside\",rawName:\"v-click-outside\",value:(() => _vm.showIcons = false),expression:\"() => showIcons = false\"}],staticClass:\"image__view\",on:{\"mouseover\":function($event){_vm.showIcons = true},\"mouseleave\":function($event){_vm.showIcons = false}}},[_c('transition',{attrs:{\"name\":\"fade\"}},[(!_vm.failed)?[(_vm.isMediaAttachment)?_c('div',{staticClass:\"media\",on:{\"click\":function($event){return _vm.handleImageClick(_vm.src)}}},[_c('div',{staticClass:\"media__wrapper\"},[_c('img',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.loaded),expression:\"loaded\"}],staticClass:\"image__main\",attrs:{\"src\":_vm.imageUrl},on:{\"load\":_vm.onLoaded}}),_vm._v(\" \"),_c('div',{staticClass:\"metadata\"},[_c('span',{staticClass:\"name\"},[_vm._v(_vm._s(_vm.alt))]),_vm._v(\" \"),_c('span',{staticClass:\"size\"},[_vm._v(_vm._s(_vm.attachmentMetadata.size))])])]),_vm._v(\" \"),(_vm.showDeleteIcon)?_c('div',{staticClass:\"buttons\"},[_c('NcButton',{attrs:{\"aria-label\":_vm.t('text', 'Delete this attachment'),\"title\":_vm.t('text', 'Delete this attachment')},on:{\"click\":_vm.onDelete},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('DeleteIcon')]},proxy:true}],null,false,3930079857)})],1):_vm._e()]):_c('div',[_c('img',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.loaded),expression:\"loaded\"}],staticClass:\"image__main\",attrs:{\"src\":_vm.imageUrl},on:{\"click\":function($event){return _vm.handleImageClick(_vm.src)},\"load\":_vm.onLoaded}})])]:[_c('ImageIcon',{staticClass:\"image__main image__main--broken-icon\",attrs:{\"size\":100}})]],2),_vm._v(\" \"),_c('transition',{attrs:{\"name\":\"fade\"}},[(!_vm.isMediaAttachment)?_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.loaded),expression:\"loaded\"}],staticClass:\"image__caption\",attrs:{\"title\":_vm.alt}},[(!_vm.editable)?_c('figcaption',[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\"+_vm._s(_vm.alt)+\"\\n\\t\\t\\t\\t\\t\")]):_c('div',{staticClass:\"image__caption__wrapper\"},[_c('input',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.isMediaAttachment),expression:\"!isMediaAttachment\"}],ref:\"altInput\",staticClass:\"image__caption__input\",attrs:{\"type\":\"text\"},domProps:{\"value\":_vm.alt},on:{\"blur\":_vm.updateAlt,\"keyup\":_vm.updateAlt}}),_vm._v(\" \"),(_vm.showImageDeleteIcon)?_c('div',{staticClass:\"image__caption__delete\"},[_c('NcButton',{attrs:{\"aria-label\":_vm.t('text', 'Delete this image'),\"title\":_vm.t('text', 'Delete this image')},on:{\"click\":_vm.onDelete},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('DeleteIcon')]},proxy:true}],null,false,3930079857)})],1):_vm._e()])]):_vm._e()]),_vm._v(\" \"),_c('div',{staticClass:\"image__modal\"},[_c('ShowImageModal',{attrs:{\"images\":_vm.embeddedImagesList,\"start-index\":_vm.imageIndex,\"show\":_vm.showImageModal},on:{\"close\":function($event){_vm.showImageModal=false}}})],1)],1):_c('div',{staticClass:\"image-view__cant_display\"},[_c('transition',{attrs:{\"name\":\"fade\"}},[_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.loaded),expression:\"loaded\"}]},[_c('a',{attrs:{\"href\":_vm.internalLinkOrImage,\"target\":\"_blank\"}},[(!_vm.isSupportedImage)?_c('span',[_vm._v(_vm._s(_vm.alt))]):_vm._e()])])]),_vm._v(\" \"),(_vm.isSupportedImage)?_c('transition',{attrs:{\"name\":\"fade\"}},[_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.loaded),expression:\"loaded\"}],staticClass:\"image__caption\"},[_c('input',{ref:\"altInput\",attrs:{\"type\":\"text\",\"disabled\":!_vm.editable},domProps:{\"value\":_vm.alt},on:{\"blur\":_vm.updateAlt,\"keyup\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\"))return null;return _vm.updateAlt.apply(null, arguments)}}})])]):_vm._e()],1),_vm._v(\" \"),(_vm.errorMessage)?_c('small',{staticClass:\"image__error-message\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.errorMessage)+\"\\n\\t\\t\")]):_vm._e()])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/*\n * @copyright Copyright (c) 2019 Julius Härtl \n *\n * @author Julius Härtl \n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n */\n\nimport TiptapImage from '@tiptap/extension-image'\nimport { Plugin } from '@tiptap/pm/state'\nimport ImageView from './ImageView.vue'\nimport { VueNodeViewRenderer } from '@tiptap/vue-2'\nimport { defaultMarkdownSerializer } from '@tiptap/pm/markdown'\n\nconst Image = TiptapImage.extend({\n\n\tselectable: false,\n\n\tparseHTML() {\n\t\treturn [\n\t\t\t{\n\t\t\t\ttag: this.options.allowBase64\n\t\t\t\t\t? 'figure img[src]'\n\t\t\t\t\t: 'figure img[src]:not([src^=\"data:\"])',\n\t\t\t},\n\t\t]\n\t},\n\n\trenderHTML() {\n\t\t// Avoid the prosemirror node creation to trigger image loading as we use a custom node view anyways\n\t\t// Otherwise it would attempt to load the image from the current location before the node view is even initialized\n\t\treturn ['img']\n\t},\n\n\taddOptions() {\n\t\treturn {\n\t\t\t...this.parent?.(),\n\t\t}\n\t},\n\n\taddNodeView() {\n\t\treturn VueNodeViewRenderer(ImageView)\n\t},\n\n\taddProseMirrorPlugins() {\n\t\treturn [\n\t\t\tnew Plugin({\n\t\t\t\tprops: {\n\t\t\t\t\thandleDrop: (view, event, slice) => {\n\t\t\t\t\t\t// only catch the drop if it contains files\n\t\t\t\t\t\tif (event.dataTransfer.files && event.dataTransfer.files.length > 0) {\n\t\t\t\t\t\t\tconst coordinates = view.posAtCoords({ left: event.clientX, top: event.clientY })\n\t\t\t\t\t\t\tconst customEvent = new CustomEvent('file-drop', {\n\t\t\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\t\t\tdetail: {\n\t\t\t\t\t\t\t\t\tfiles: event.dataTransfer.files,\n\t\t\t\t\t\t\t\t\tposition: coordinates.pos,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\tevent.target.dispatchEvent(customEvent)\n\t\t\t\t\t\t\treturn true\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\thandlePaste: (view, event, slice) => {\n\t\t\t\t\t\t// only catch the paste if it contains files\n\t\t\t\t\t\tif (event.clipboardData.files && event.clipboardData.files.length > 0) {\n\t\t\t\t\t\t\t// let the editor wrapper catch this custom event\n\t\t\t\t\t\t\tconst customEvent = new CustomEvent('image-paste', {\n\t\t\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\t\t\tdetail: {\n\t\t\t\t\t\t\t\t\tfiles: event.clipboardData.files,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\tevent.target.dispatchEvent(customEvent)\n\t\t\t\t\t\t\treturn true\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}),\n\t\t]\n\t},\n\n\t/* Serializes an image node as a block image, so it ensures an image is always a block by itself */\n\ttoMarkdown(state, node, parent, index) {\n\t\tnode.attrs.alt = node.attrs.alt.toString()\n\t\tdefaultMarkdownSerializer.nodes.image(state, node, parent, index)\n\t\tstate.closeBlock(node)\n\t},\n})\n\nexport default Image\n","/*\n * @copyright Copyright (c) 2022 Jonas \n *\n * @author Jonas \n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n */\n\nimport TiptapImage from '@tiptap/extension-image'\nimport ImageView from './ImageView.vue'\nimport { VueNodeViewRenderer } from '@tiptap/vue-2'\nimport { defaultMarkdownSerializer } from '@tiptap/pm/markdown'\n\n// Inline image extension. Needed if markdown contains inline images.\n// Not supported to be created from our UI (we default to block images).\nconst ImageInline = TiptapImage.extend({\n\tname: 'image-inline',\n\n\t// Lower priority than (block) Image extension\n\tpriority: 99,\n\n\tselectable: false,\n\n\tparseHTML() {\n\t\treturn [\n\t\t\t{\n\t\t\t\ttag: this.options.allowBase64\n\t\t\t\t\t? 'img[src]'\n\t\t\t\t\t: 'img[src]:not([src^=\"data:\"])',\n\t\t\t},\n\t\t]\n\t},\n\n\taddOptions() {\n\t\treturn {\n\t\t\t...this.parent?.(),\n\t\t\tinline: true,\n\t\t}\n\t},\n\n\t// Empty commands, we want only those from (block) Image extension\n\taddCommands() {\n\t\treturn {}\n\t},\n\n\t// Empty input rules, we want only those from (block) Image extension\n\taddInputRules() {\n\t\treturn []\n\t},\n\n\taddNodeView() {\n\t\treturn VueNodeViewRenderer(ImageView)\n\t},\n\n\ttoMarkdown(state, node, parent, index) {\n\t\treturn defaultMarkdownSerializer.nodes.image(state, node, parent, index)\n\t},\n})\n\nexport default ImageInline\n","import { Mark } from '@tiptap/core'\n\n/**\n * Keep markdown untouched\n */\nconst KeepSyntax = Mark.create({\n\tname: 'keep-syntax',\n\tparseHTML() {\n\t\treturn [\n\t\t\t{\n\t\t\t\ttag: 'span.keep-md',\n\t\t\t},\n\t\t]\n\t},\n\trenderHTML() {\n\t\treturn ['span', { class: 'keep-md' }, 0]\n\t},\n\ttoMarkdown: {\n\t\topen: '',\n\t\tclose: '',\n\t\tmixable: true,\n\t\tescape: false,\n\t\texpelEnclosingWhitespace: true,\n\t},\n\n\t/**\n\t * Remove mark if there were manual changes\n\t */\n\tonUpdate() {\n\t\tconst tr = this.editor.state.tr\n\n\t\tthis.editor.state.doc.descendants((node, pos, parent, index) => {\n\t\t\tif (node.marks.findIndex(mark => mark.type.name === this.name) !== -1) {\n\t\t\t\tif (node.type.name !== 'text' || node.text.length !== 1) {\n\t\t\t\t\ttr.removeMark(pos, pos + node.nodeSize, this.type)\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t\tif (tr.docChanged) {\n\t\t\ttr.setMeta('addToHistory', false)\n\t\t\ttr.setMeta('preventUpdate', true)\n\t\t\tthis.editor.view.dispatch(tr)\n\t\t}\n\t},\n})\n\nexport default KeepSyntax\n","\n\n\n\n","import mod from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Mention.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Mention.vue?vue&type=script&lang=js&\"","\n import API from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Mention.vue?vue&type=style&index=0&id=297bb5fa&prod&scoped=true&lang=css&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Mention.vue?vue&type=style&index=0&id=297bb5fa&prod&scoped=true&lang=css&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Mention.vue?vue&type=template&id=297bb5fa&scoped=true&\"\nimport script from \"./Mention.vue?vue&type=script&lang=js&\"\nexport * from \"./Mention.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Mention.vue?vue&type=style&index=0&id=297bb5fa&prod&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"297bb5fa\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('NodeViewWrapper',{staticClass:\"mention\",attrs:{\"as\":\"span\",\"contenteditable\":\"false\"}},[_c('NcUserBubble',{staticClass:\"mention-user-bubble\",attrs:{\"user\":_vm.node.attrs.id,\"display-name\":_vm.username,\"primary\":_vm.isCurrentUser}},[_vm._v(\"\\n\\t\\t@\"+_vm._s(_vm.username)+\"\\n\\t\")])],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import TipTapMention from '@tiptap/extension-mention'\nimport Mention from './Mention.vue'\nimport { VueNodeViewRenderer } from '@tiptap/vue-2'\nimport { mergeAttributes } from '@tiptap/core'\n\nexport default TipTapMention.extend({\n\tparseHTML() {\n\t\treturn [\n\t\t\t{\n\t\t\t\ttag: 'span[data-type=\"user\"]',\n\t\t\t\tgetAttrs: element => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid: decodeURIComponent(element.getAttribute('data-id')),\n\t\t\t\t\t\tlabel: element.innerText || element.textContent || element.getAttribute('data-label'),\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpriority: 100,\n\t\t\t},\n\t\t]\n\t},\n\n\trenderHTML({ node, HTMLAttributes }) {\n\t\treturn [\n\t\t\t'span',\n\t\t\tmergeAttributes({ 'data-type': 'user', class: 'mention' }, this.options.HTMLAttributes, HTMLAttributes),\n\t\t\tthis.options.renderLabel({\n\t\t\t\toptions: this.options,\n\t\t\t\tnode,\n\t\t\t}),\n\t\t]\n\t},\n\n\taddNodeView() {\n\t\treturn VueNodeViewRenderer(Mention)\n\t},\n\n\ttoMarkdown(state, node) {\n\t\tstate.write(' ')\n\t\tstate.write(`@[${node.attrs.label}](mention://user/${encodeURIComponent(node.attrs.id)})`)\n\t\tstate.write(' ')\n\t},\n})\n","\n\n\n\n\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LinkPickerList.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LinkPickerList.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LinkPickerList.vue?vue&type=style&index=0&id=0ea7b674&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LinkPickerList.vue?vue&type=style&index=0&id=0ea7b674&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./LinkPickerList.vue?vue&type=template&id=0ea7b674&scoped=true&\"\nimport script from \"./LinkPickerList.vue?vue&type=script&lang=js&\"\nexport * from \"./LinkPickerList.vue?vue&type=script&lang=js&\"\nimport style0 from \"./LinkPickerList.vue?vue&type=style&index=0&id=0ea7b674&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0ea7b674\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('SuggestionListWrapper',{ref:\"suggestionList\",attrs:{\"command\":_vm.command,\"items\":_vm.items},on:{\"select\":(item) => _vm.$emit('select', item)},scopedSlots:_vm._u([{key:\"default\",fn:function({ item }){return [_c('div',{staticClass:\"link-picker__item\"},[_c('img',{attrs:{\"src\":item.icon}}),_vm._v(\" \"),_c('div',[_vm._v(_vm._s(item.label))])])]}},{key:\"empty\",fn:function(){return [_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('text', 'No command found'))+\"\\n\\t\")]},proxy:true}])})\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { Extension } from '@tiptap/core'\nimport { Suggestion } from '@tiptap/suggestion'\nimport { PluginKey } from '@tiptap/pm/state'\nimport suggestions from '../components/Suggestion/LinkPicker/suggestions.js'\n\nexport const LinkPickerPluginKey = new PluginKey('linkPicker')\nexport default Extension.create({\n\n\tname: 'linkPicker',\n\n\taddOptions() {\n\t\treturn {\n\t\t\tsuggestion: {\n\t\t\t\tchar: '/',\n\t\t\t\tallowedPrefixes: [' '],\n\t\t\t\tpluginKey: LinkPickerPluginKey,\n\t\t\t\t...suggestions(),\n\t\t\t},\n\t\t}\n\t},\n\n\taddProseMirrorPlugins() {\n\t\treturn [\n\t\t\tSuggestion({\n\t\t\t\teditor: this.editor,\n\t\t\t\t...this.options.suggestion,\n\t\t\t}),\n\t\t]\n\t},\n})\n","/*\n * @copyright Copyright (c) 2022 Julius Härtl \n *\n * @author Julius Härtl \n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n */\n\nimport createSuggestions from '../suggestions.js'\nimport LinkPickerList from './LinkPickerList.vue'\n\nimport { searchProvider, getLinkWithPicker } from '@nextcloud/vue/dist/Components/NcRichText.js'\n\nexport default () => createSuggestions({\n\tlistComponent: LinkPickerList,\n\tcommand: ({ editor, range, props }) => {\n\t\tgetLinkWithPicker(props.providerId, true)\n\t\t\t.then(link => {\n\t\t\t\teditor\n\t\t\t\t\t.chain()\n\t\t\t\t\t.focus()\n\t\t\t\t\t.insertContentAt(range, link + ' ')\n\t\t\t\t\t.run()\n\t\t\t})\n\t\t\t.catch(error => {\n\t\t\t\tconsole.error('Smart picker promise rejected', error)\n\t\t\t})\n\t},\n\titems: ({ query }) => {\n\t\treturn searchProvider(query)\n\t\t\t.map(p => {\n\t\t\t\treturn {\n\t\t\t\t\tlabel: p.title,\n\t\t\t\t\ticon: p.icon_url,\n\t\t\t\t\tproviderId: p.id,\n\t\t\t\t}\n\t\t\t})\n\t},\n})\n","import { Node } from '@tiptap/core'\n\n/*\n * Markdown tables do not include captions.\n * We still need to parse them though\n * because otherwise tiptap will try to insert their text content\n * and put it in the top row of the table.\n */\nexport default Node.create({\n\tname: 'tableCaption',\n\tcontent: 'inline*',\n\taddAttributes() {\n\t\treturn {}\n\t},\n\n\trenderHTML() {\n\t\treturn ['caption']\n\t},\n\n\ttoMarkdown(state, node) {\n\t},\n\n\tparseHTML() {\n\t\treturn [\n\t\t\t{ tag: 'table caption', priority: 90 },\n\t\t]\n\t},\n\n})\n","import { TableCell } from '@tiptap/extension-table-cell'\nimport { Plugin } from '@tiptap/pm/state'\nimport { Fragment } from '@tiptap/pm/model'\n\nexport default TableCell.extend({\n\tcontent: 'inline*',\n\n\ttoMarkdown(state, node) {\n\t\tstate.write(' ')\n\t\tconst backup = state.options?.escapeExtraCharacters\n\t\tstate.options.escapeExtraCharacters = /\\|/\n\t\tstate.renderInline(node)\n\t\tstate.options.escapeExtraCharacters = backup\n\t\tstate.write(' |')\n\t},\n\n\tparseHTML() {\n\t\treturn [\n\t\t\t{ tag: 'td', preserveWhitespace: true },\n\t\t\t{ tag: 'th', preserveWhitespace: true },\n\t\t\t{ tag: 'table thead ~ tbody th', priority: 70, preserveWhitespace: true },\n\t\t\t{ tag: 'table thead ~ tbody td', priority: 70, preserveWhitespace: true },\n\t\t]\n\t},\n\n\taddAttributes() {\n\t\treturn {\n\t\t\t...this.parent?.(),\n\t\t\ttextAlign: {\n\t\t\t\trendered: false,\n\t\t\t\tparseHTML: (element) => element.style.textAlign || null,\n\t\t\t},\n\t\t}\n\t},\n\n\taddProseMirrorPlugins() {\n\t\treturn [\n\t\t\tnew Plugin({\n\t\t\t\tprops: {\n\t\t\t\t\t// Only paste (marked) text into table cells to prevent jumping out of cell\n\t\t\t\t\thandlePaste: (view, event, slice) => {\n\t\t\t\t\t\tif (!this.editor.isActive(this.type.name)) {\n\t\t\t\t\t\t\treturn false\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst { state } = view\n\t\t\t\t\t\tconst childNodes = []\n\t\t\t\t\t\tlet newLineAdded = false\n\t\t\t\t\t\tslice.content.descendants((node, pos) => {\n\t\t\t\t\t\t\tif (node.isText) {\n\t\t\t\t\t\t\t\tchildNodes.push(state.schema.text(node.textContent, node.marks))\n\t\t\t\t\t\t\t\tnewLineAdded = false\n\t\t\t\t\t\t\t} else if (!newLineAdded) {\n\t\t\t\t\t\t\t\tchildNodes.push(state.schema.text('\\n'))\n\t\t\t\t\t\t\t\tnewLineAdded = true\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\n\t\t\t\t\t\tconst newNode = state.schema.node('paragraph', [], childNodes)\n\t\t\t\t\t\tslice.content = Fragment.empty.addToStart(newNode)\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}),\n\t\t]\n\t},\n})\n","import { TableHeader } from '@tiptap/extension-table-header'\n\nexport default TableHeader.extend({\n\tcontent: 'inline*',\n\n\ttoMarkdown(state, node) {\n\t\tstate.write(' ')\n\t\tstate.renderInline(node)\n\t\tstate.write(' |')\n\t},\n\n\tparseHTML() {\n\t\treturn [\n\t\t\t{ tag: 'table thead:empty ~ tbody :first-child th', priority: 80 },\n\t\t\t{ tag: 'table thead:empty ~ tbody :first-child td', priority: 80 },\n\t\t\t{ tag: 'table thead :first-child th', priority: 60 },\n\t\t\t{ tag: 'table thead :first-child td', priority: 60 },\n\t\t\t{ tag: 'table tbody :first-child th', priority: 60 },\n\t\t\t{ tag: 'table tbody :first-child td', priority: 60 },\n\t\t\t{ tag: 'table > :first-child > th', priority: 60 },\n\t\t\t{ tag: 'table > :first-child > td', priority: 60 },\n\t\t]\n\t},\n\n\taddAttributes() {\n\t\treturn {\n\t\t\t...this.parent?.(),\n\t\t\ttextAlign: {\n\t\t\t\trendered: false,\n\t\t\t\tparseHTML: (element) => element.style.textAlign || null,\n\t\t\t},\n\t\t}\n\t},\n})\n","import { TableRow } from '@tiptap/extension-table-row'\n\nexport default TableRow.extend({\n\tcontent: 'tableCell*',\n\n\ttoMarkdown(state, node) {\n\t\tstate.write('|')\n\t\tstate.renderInline(node)\n\t\tstate.ensureNewLine()\n\t},\n\n\tparseHTML() {\n\t\treturn [\n\t\t\t{ tag: 'tr', priority: 70 },\n\t\t]\n\t},\n})\n","import TableRow from './TableRow.js'\n\nexport default TableRow.extend({\n\tname: 'tableHeadRow',\n\tcontent: 'tableHeader*',\n\n\ttoMarkdown(state, node) {\n\t\tstate.write('|')\n\t\tstate.renderInline(node)\n\t\tstate.ensureNewLine()\n\t\tstate.write('|')\n\t\tnode.forEach(cell => {\n\t\t\tlet row = state.repeat('-', cell.textContent.length + 2)\n\t\t\tconst align = cell.attrs?.textAlign\n\t\t\tif (align === 'center' || align === 'left') row = ':' + row.slice(1)\n\t\t\tif (align === 'center' || align === 'right') row = row.slice(0, -1) + ':'\n\t\t\tstate.write(row)\n\t\t\tstate.write('|')\n\t\t})\n\t\tstate.ensureNewLine()\n\t},\n\n\tparseHTML() {\n\t\treturn [\n\t\t\t{ tag: 'tr:first-of-type', priority: 80 },\n\t\t]\n\t},\n})\n","import { mergeAttributes } from '@tiptap/core'\nimport { Table } from '@tiptap/extension-table'\nimport TableCaption from './TableCaption.js'\nimport TableCell from './TableCell.js'\nimport TableHeader from './TableHeader.js'\nimport TableHeadRow from './TableHeadRow.js'\nimport TableRow from './TableRow.js'\nimport { TextSelection } from '@tiptap/pm/state'\nimport {\n\taddRowAfter,\n\taddRowBefore,\n\tisInTable,\n\tmoveCellForward,\n\tselectedRect,\n\tselectionCell,\n} from '@tiptap/pm/tables'\n\n/**\n *\n * @param {object} schema - schema of the editor\n * @param {number} rowsCount - number of rows in the table\n * @param {number} colsCount - number of cols in the table\n * @param {object} cellContent - currently unused\n */\nfunction createTable(schema, rowsCount, colsCount, cellContent) {\n\tconst headerCells = []\n\tconst cells = []\n\tfor (let index = 0; index < colsCount; index += 1) {\n\t\tconst cell = schema.nodes.tableCell.createAndFill()\n\t\tif (cell) {\n\t\t\tcells.push(cell)\n\t\t}\n\t\tconst headerCell = schema.nodes.tableHeader.createAndFill()\n\t\tif (headerCell) {\n\t\t\theaderCells.push(headerCell)\n\t\t}\n\t}\n\tconst headRow = schema.nodes.tableHeadRow.createChecked(null, headerCells)\n\tconst rows = []\n\tfor (let index = 1; index < rowsCount; index += 1) {\n\t\trows.push(schema.nodes.tableRow.createChecked(null, cells))\n\t}\n\treturn schema.nodes.table.createChecked(null, [headRow, ...rows])\n}\n\n/**\n *\n * @param {object} $cell - resolved position of the current cell\n */\nfunction findSameCellInNextRow($cell) {\n\tif ($cell.index(-1) === $cell.node(-1).childCount - 1) {\n\t\treturn null\n\t}\n\tlet cellStart = $cell.after()\n\tconst table = $cell.node(-1)\n\tfor (let row = $cell.indexAfter(-1); row < table.childCount; row++) {\n\t\tconst rowNode = table.child(row)\n\t\tif (rowNode.childCount >= $cell.index()) {\n\t\t\tfor (let cell = 0; cell < $cell.index(); cell++) {\n\t\t\t\tconst cellNode = rowNode.child(cell)\n\t\t\t\tcellStart += cellNode.nodeSize\n\t\t\t}\n\t\t\treturn cellStart + 1\n\t\t}\n\t\tcellStart += rowNode.nodeSize\n\t}\n}\n\nexport default Table.extend({\n\tcontent: 'tableCaption? tableHeadRow tableRow*',\n\n\taddExtensions() {\n\t\treturn [\n\t\t\tTableCaption,\n\t\t\tTableCell,\n\t\t\tTableHeader,\n\t\t\tTableHeadRow,\n\t\t\tTableRow,\n\t\t]\n\t},\n\n\taddCommands() {\n\t\treturn {\n\t\t\t...this.parent(),\n\t\t\taddRowAfter: () => ({ chain, dispatch }) => {\n\t\t\t\treturn chain()\n\t\t\t\t\t.command(({ state }) => addRowAfter(state, dispatch))\n\t\t\t\t\t.command(({ state, tr }) => {\n\t\t\t\t\t\tconst { tableStart, table, bottom } = selectedRect(state)\n\n\t\t\t\t\t\tif (dispatch) {\n\t\t\t\t\t\t\tconst lastRow = table.child(bottom - 1)\n\t\t\t\t\t\t\tconst newRow = table.child(bottom)\n\t\t\t\t\t\t\tlet pos = tableStart + 1\n\t\t\t\t\t\t\tfor (let i = 0; i < bottom; i++) { pos += table.child(i).nodeSize }\n\n\t\t\t\t\t\t\tfor (let i = 0; i < lastRow.childCount; i++) {\n\t\t\t\t\t\t\t\ttr.setNodeAttribute(\n\t\t\t\t\t\t\t\t\tpos,\n\t\t\t\t\t\t\t\t\t'textAlign',\n\t\t\t\t\t\t\t\t\tlastRow.child(i).attrs.textAlign,\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\tpos += newRow.child(i).nodeSize\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn true\n\t\t\t\t\t})\n\t\t\t\t\t.run()\n\t\t\t},\n\t\t\taddRowBefore: () => ({ chain, dispatch }) =>\n\t\t\t\tchain()\n\t\t\t\t\t.command(({ state }) => addRowBefore(state, dispatch))\n\t\t\t\t\t.command(({ state, tr }) => {\n\t\t\t\t\t\tconst { tableStart, table, top } = selectedRect(state)\n\t\t\t\t\t\tif (dispatch) {\n\t\t\t\t\t\t\tconst lastRow = table.child(top)\n\t\t\t\t\t\t\tconst newRow = table.child(top - 1)\n\t\t\t\t\t\t\tlet pos = tableStart + 1\n\t\t\t\t\t\t\tfor (let i = 0; i < (top - 1); i++) { pos += table.child(i).nodeSize }\n\n\t\t\t\t\t\t\tfor (let i = 0; i < lastRow.childCount; i++) {\n\t\t\t\t\t\t\t\ttr.setNodeAttribute(\n\t\t\t\t\t\t\t\t\tpos,\n\t\t\t\t\t\t\t\t\t'textAlign',\n\t\t\t\t\t\t\t\t\tlastRow.child(i).attrs.textAlign,\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\tpos += newRow.child(i).nodeSize\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn true\n\t\t\t\t\t})\n\t\t\t\t\t.run(),\n\t\t\tinsertTable: () => ({ tr, dispatch, editor }) => {\n\t\t\t\tif (isInTable(tr)) return false\n\t\t\t\tconst node = createTable(editor.schema, 3, 3, true)\n\t\t\t\tif (dispatch) {\n\t\t\t\t\tconst offset = tr.selection.anchor + 1\n\t\t\t\t\ttr.replaceSelectionWith(node)\n\t\t\t\t\t\t.scrollIntoView()\n\t\t\t\t\t\t.setSelection(TextSelection.near(tr.doc.resolve(offset)))\n\t\t\t\t}\n\t\t\t\treturn true\n\t\t\t},\n\t\t\t// move to the next node after the table from the last cell\n\t\t\tleaveTable: () => ({ tr, dispatch, editor }) => {\n\t\t\t\tif (!isInTable(tr)) return false\n\t\t\t\tconst { $head, empty } = tr.selection\n\t\t\t\tif (!empty) return false\n\t\t\t\t// the selection can temporarily be inside the table but outside of cells.\n\t\t\t\tconst tableDepth = $head.depth < 3 ? 1 : $head.depth - 2\n\t\t\t\tif (dispatch) {\n\t\t\t\t\tconst $next = tr.doc.resolve($head.after(tableDepth) + 1)\n\t\t\t\t\tconst selection = TextSelection.near($next)\n\t\t\t\t\tdispatch(tr.setSelection(selection).scrollIntoView())\n\t\t\t\t}\n\t\t\t\treturn true\n\t\t\t},\n\t\t\tgoToNextRow: () => ({ tr, dispatch, editor }) => {\n\t\t\t\tif (!isInTable(tr)) return false\n\t\t\t\tconst cell = findSameCellInNextRow(selectionCell(tr))\n\t\t\t\tif (cell == null) return\n\t\t\t\tif (dispatch) {\n\t\t\t\t\tconst $cell = tr.doc.resolve(cell)\n\t\t\t\t\tconst selection = TextSelection.between($cell, moveCellForward($cell))\n\t\t\t\t\tdispatch(tr.setSelection(selection).scrollIntoView())\n\t\t\t\t}\n\t\t\t\treturn true\n\t\t\t},\n\t\t}\n\t},\n\n\trenderHTML({ HTMLAttributes }) {\n\t\treturn [\n\t\t\t'div',\n\t\t\t{ class: 'table-wrapper', style: 'overflow-x: auto;' },\n\t\t\t['table', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0],\n\t\t]\n\t},\n\n\ttoMarkdown(state, node) {\n\t\tstate.renderContent(node)\n\t\tstate.closeBlock(node)\n\t},\n\n\taddKeyboardShortcuts() {\n\t\treturn {\n\t\t\t...this.parent(),\n\t\t\tTab: () => this.editor.commands.goToNextCell() || this.editor.commands.leaveTable(),\n\t\t\tEnter: ({ editor }) => {\n\t\t\t\tconst { selection } = editor.state\n\t\t\t\tif (!selection.$from.parent.type.name.startsWith('table')) return false\n\n\t\t\t\tif (selection.$from.nodeBefore?.type.name === 'hardBreak') {\n\t\t\t\t\tif (editor.can().goToNextRow() || editor.can().addRowAfter()) {\n\t\t\t\t\t\t// Remove previous hard break and move to next row instead\n\t\t\t\t\t\teditor.chain()\n\t\t\t\t\t\t\t.setTextSelection({ from: selection.from - 1, to: selection.from })\n\t\t\t\t\t\t\t.deleteSelection()\n\t\t\t\t\t\t\t.run()\n\t\t\t\t\t\tif (editor.commands.goToNextRow()) return true\n\t\t\t\t\t\treturn editor.chain().addRowAfter().goToNextRow().run()\n\t\t\t\t\t}\n\t\t\t\t\treturn false\n\t\t\t\t} else {\n\t\t\t\t\treturn editor.chain()\n\t\t\t\t\t\t.insertContent('
')\n\t\t\t\t\t\t.focus()\n\t\t\t\t\t\t.run()\n\t\t\t\t}\n\t\t\t},\n\t\t}\n\t},\n\n})\n","import Table from './Table/Table.js'\n\nexport default Table\n","\n\n\n\n\n\n\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TableView.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TableView.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/sass-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TableView.vue?vue&type=style&index=0&id=261cbb42&prod&scoped=true&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/sass-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TableView.vue?vue&type=style&index=0&id=261cbb42&prod&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./TableView.vue?vue&type=template&id=261cbb42&scoped=true&\"\nimport script from \"./TableView.vue?vue&type=script&lang=js&\"\nexport * from \"./TableView.vue?vue&type=script&lang=js&\"\nimport style0 from \"./TableView.vue?vue&type=style&index=0&id=261cbb42&prod&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"261cbb42\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('NodeViewWrapper',{staticClass:\"table-wrapper\",attrs:{\"data-text-el\":\"table-view\"}},[(_vm.editor.isEditable)?_c('NcActions',{staticClass:\"table-settings\",attrs:{\"force-menu\":\"\",\"data-text-table-actions\":\"settings\"},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('TableSettings')]},proxy:true}],null,false,1699550424)},[_vm._v(\" \"),_c('NcActionButton',{attrs:{\"data-text-table-action\":\"delete\",\"close-after-click\":\"\"},on:{\"click\":_vm.deleteNode},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('Delete')]},proxy:true}],null,false,3429380666)},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('text', 'Delete this table'))+\"\\n\\t\\t\")])],1):_vm._e(),_vm._v(\" \"),_c('NodeViewContent',{staticClass:\"content\",attrs:{\"as\":\"table\"}}),_vm._v(\" \"),_c('div',{staticClass:\"clearfix\"})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TableCellView.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TableCellView.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/sass-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TableCellView.vue?vue&type=style&index=0&id=3543004d&prod&scoped=true&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/sass-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TableCellView.vue?vue&type=style&index=0&id=3543004d&prod&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./TableCellView.vue?vue&type=template&id=3543004d&scoped=true&\"\nimport script from \"./TableCellView.vue?vue&type=script&lang=js&\"\nexport * from \"./TableCellView.vue?vue&type=script&lang=js&\"\nimport style0 from \"./TableCellView.vue?vue&type=style&index=0&id=3543004d&prod&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3543004d\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('NodeViewWrapper',{style:(_vm.textAlign),attrs:{\"data-text-el\":\"table-cell\",\"as\":\"td\"}},[_c('div',{staticClass:\"container\"},[_c('NodeViewContent',{staticClass:\"content\"}),_vm._v(\" \"),(_vm.editor.isEditable)?_c('NcActions',{attrs:{\"data-text-table-actions\":\"row\"}},[_c('NcActionButton',{attrs:{\"data-text-table-action\":\"add-row-before\",\"close-after-click\":\"\"},on:{\"click\":_vm.addRowBefore},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('TableAddRowBefore')]},proxy:true}],null,false,1805502767)},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('text', 'Add row before'))+\"\\n\\t\\t\\t\")]),_vm._v(\" \"),_c('NcActionButton',{attrs:{\"data-text-table-action\":\"add-row-after\",\"close-after-click\":\"\"},on:{\"click\":_vm.addRowAfter},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('TableAddRowAfter')]},proxy:true}],null,false,3179199218)},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('text', 'Add row after'))+\"\\n\\t\\t\\t\")]),_vm._v(\" \"),_c('NcActionButton',{attrs:{\"data-text-table-action\":\"remove-row\",\"close-after-click\":\"\"},on:{\"click\":_vm.deleteRow},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('Delete')]},proxy:true}],null,false,3429380666)},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('text', 'Delete this row'))+\"\\n\\t\\t\\t\")])],1):_vm._e()],1)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n","import mod from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./InlineActionsContainer.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./InlineActionsContainer.vue?vue&type=script&lang=js&\"","\n import API from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/sass-loader/dist/cjs.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./InlineActionsContainer.vue?vue&type=style&index=0&id=40a23119&prod&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/sass-loader/dist/cjs.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./InlineActionsContainer.vue?vue&type=style&index=0&id=40a23119&prod&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./InlineActionsContainer.vue?vue&type=template&id=40a23119&\"\nimport script from \"./InlineActionsContainer.vue?vue&type=script&lang=js&\"\nexport * from \"./InlineActionsContainer.vue?vue&type=script&lang=js&\"\nimport style0 from \"./InlineActionsContainer.vue?vue&type=style&index=0&id=40a23119&prod&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('li',{staticClass:\"inline-container-base\"},[_c('ul',{staticClass:\"inline-container-content\"},[_vm._t(\"default\")],2)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TableHeaderView.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TableHeaderView.vue?vue&type=script&lang=js&\"","\n\n\n\n\n\n\n","\n import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/sass-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TableHeaderView.vue?vue&type=style&index=0&id=25a85f13&prod&scoped=true&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/sass-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TableHeaderView.vue?vue&type=style&index=0&id=25a85f13&prod&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./TableHeaderView.vue?vue&type=template&id=25a85f13&scoped=true&\"\nimport script from \"./TableHeaderView.vue?vue&type=script&lang=js&\"\nexport * from \"./TableHeaderView.vue?vue&type=script&lang=js&\"\nimport style0 from \"./TableHeaderView.vue?vue&type=style&index=0&id=25a85f13&prod&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"25a85f13\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('NodeViewWrapper',{style:(_vm.textAlign),attrs:{\"data-text-el\":\"table-header\",\"as\":\"th\"}},[_c('div',[_c('NodeViewContent',{staticClass:\"content\"}),_vm._v(\" \"),(_vm.editor.isEditable)?_c('NcActions',{ref:\"menu\",attrs:{\"data-text-table-actions\":\"header\"}},[_c('InlineActionsContainer',[_c('NcActionButton',{attrs:{\"data-text-table-action\":\"align-column-left\",\"aria-label\":_vm.t('text', 'Left align column')},on:{\"click\":_vm.alignLeft},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('AlignHorizontalLeft')]},proxy:true}],null,false,2968467243)}),_vm._v(\" \"),_c('NcActionButton',{attrs:{\"data-text-table-action\":\"align-column-center\",\"aria-label\":_vm.t('text', 'Center align column')},on:{\"click\":_vm.alignCenter},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('AlignHorizontalCenter')]},proxy:true}],null,false,536750267)}),_vm._v(\" \"),_c('NcActionButton',{attrs:{\"data-text-table-action\":\"align-column-right\",\"aria-label\":_vm.t('text', 'Right align column')},on:{\"click\":_vm.alignRight},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('AlignHorizontalRight')]},proxy:true}],null,false,3861151024)})],1),_vm._v(\" \"),_c('NcActionButton',{attrs:{\"data-text-table-action\":\"add-column-before\",\"close-after-click\":\"\"},on:{\"click\":_vm.addColumnBefore},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('TableAddColumnBefore')]},proxy:true}],null,false,3782681875)},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('text', 'Add column before'))+\"\\n\\t\\t\\t\")]),_vm._v(\" \"),_c('NcActionButton',{attrs:{\"data-text-table-action\":\"add-column-after\",\"close-after-click\":\"\"},on:{\"click\":_vm.addColumnAfter},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('TableAddColumnAfter')]},proxy:true}],null,false,1608287598)},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('text', 'Add column after'))+\"\\n\\t\\t\\t\")]),_vm._v(\" \"),_c('NcActionButton',{attrs:{\"data-text-table-action\":\"remove-column\",\"close-after-click\":\"\"},on:{\"click\":_vm.deleteColumn},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('Delete')]},proxy:true}],null,false,3429380666)},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('text', 'Delete this column'))+\"\\n\\t\\t\\t\")])],1):_vm._e()],1)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import Table from './Table/Table.js'\nimport TableCaption from './Table/TableCaption.js'\nimport TableCell from './Table/TableCell.js'\nimport TableHeader from './Table/TableHeader.js'\nimport TableHeadRow from './Table/TableHeadRow.js'\nimport TableRow from './Table/TableRow.js'\nimport { VueNodeViewRenderer } from '@tiptap/vue-2'\nimport TableView from './Table/TableView.vue'\nimport TableCellView from './Table/TableCellView.vue'\nimport TableHeaderView from './Table/TableHeaderView.vue'\n\n/**\n * Add the node view to the node.\n * The node views include buttons to enable editing the table.\n *\n * @param {object} node - the node to add the view to.\n * @param {object} view - the node view to add to the node.\n */\nfunction extendNodeWithView(node, view) {\n\treturn node.extend({\n\t\taddNodeView() {\n\t\t\treturn VueNodeViewRenderer(view)\n\t\t},\n\t})\n}\n\nexport default Table.extend({\n\n\taddNodeView() {\n\t\treturn VueNodeViewRenderer(TableView)\n\t},\n\n\taddExtensions() {\n\t\treturn [\n\t\t\tTableCaption,\n\t\t\textendNodeWithView(TableCell, TableCellView),\n\t\t\textendNodeWithView(TableHeader, TableHeaderView),\n\t\t\tTableHeadRow,\n\t\t\tTableRow,\n\t\t]\n\t},\n})\n","// Copied from https://github.com/atlassian/prosemirror-utils/tree/1b97ff08f1bbaea781f205744588a3dfd228b0d1/src\n\n// Iterates over parent nodes starting from the given `$pos`, returning the closest node and its start position `predicate` returns truthy for. `start` points to the start position of the node, `pos` points directly before the node.\n//\n// ```javascript\n// const predicate = node => node.type === schema.nodes.blockquote;\n// const parent = findParentNodeClosestToPos(state.doc.resolve(5), predicate);\n// ```\nexport const findParentNodeClosestToPos = ($pos, predicate) => {\n\tfor (let i = $pos.depth; i > 0; i--) {\n\t\tconst node = $pos.node(i)\n\t\tif (predicate(node)) {\n\t\t\treturn {\n\t\t\t\tpos: i > 0 ? $pos.before(i) : 0,\n\t\t\t\tstart: $pos.start(i),\n\t\t\t\tdepth: i,\n\t\t\t\tnode,\n\t\t\t}\n\t\t}\n\t}\n}\n\n// Flattens descendants of a given `node`. It doesn't descend into a node when descend argument is `false` (defaults to `true`).\n//\n// ```javascript\n// const children = flatten(node);\n// ```\nexport const flatten = (node, descend = true) => {\n\tif (!node) {\n\t\tthrow new Error('Invalid \"node\" parameter')\n\t}\n\tconst result = []\n\tnode.descendants((child, pos) => {\n\t\tresult.push({ node: child, pos })\n\t\tif (!descend) {\n\t\t\treturn false\n\t\t}\n\t})\n\treturn result\n}\n\n// Iterates over descendants of a given `node`, returning child nodes predicate returns truthy for. It doesn't descend into a node when descend argument is `false` (defaults to `true`).\n//\n// ```javascript\n// const textNodes = findChildren(node, child => child.isText, false);\n// ```\nexport const findChildren = (node, predicate, descend) => {\n\tif (!node) {\n\t\tthrow new Error('Invalid \"node\" parameter')\n\t} else if (!predicate) {\n\t\tthrow new Error('Invalid \"predicate\" parameter')\n\t}\n\treturn flatten(node, descend).filter(child => predicate(child.node))\n}\n","/*\n * @copyright Copyright (c) 2019 Julius Härtl \n *\n * @author Julius Härtl \n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n */\n\nimport TipTapTaskItem from '@tiptap/extension-task-item'\nimport { wrappingInputRule, mergeAttributes } from '@tiptap/core'\nimport { Plugin } from '@tiptap/pm/state'\nimport { findParentNodeClosestToPos } from './../helpers/prosemirrorUtils.js'\n\nconst TaskItem = TipTapTaskItem.extend({\n\n\taddOptions() {\n\t\treturn {\n\t\t\tnested: true,\n\t\t\tHTMLAttributes: {},\n\t\t}\n\t},\n\n\tdraggable: false,\n\n\tcontent: 'paragraph block*',\n\n\taddAttributes() {\n\t\tconst adjust = { ...this.parent() }\n\t\tadjust.checked.parseHTML = el => {\n\t\t\treturn el.querySelector('input[type=checkbox]')?.checked\n\t\t}\n\t\treturn adjust\n\t},\n\n\tparseHTML: [\n\t\t{\n\t\t\tpriority: 101,\n\t\t\ttag: 'li',\n\t\t\tgetAttrs: el => {\n\t\t\t\tconst checkbox = el.querySelector('input[type=checkbox]')\n\t\t\t\treturn checkbox\n\t\t\t},\n\t\t\tcontext: 'taskList/',\n\t\t},\n\t],\n\n\trenderHTML({ node, HTMLAttributes }) {\n\t\tconst listAttributes = { class: 'checkbox-item' }\n\t\tconst checkboxAttributes = { type: 'checkbox', class: '', contenteditable: false }\n\t\tif (node.attrs.checked) {\n\t\t\tcheckboxAttributes.checked = true\n\t\t\tlistAttributes.class += ' checked'\n\t\t}\n\t\treturn [\n\t\t\t'li',\n\t\t\tmergeAttributes(HTMLAttributes, listAttributes),\n\t\t\t[\n\t\t\t\t'input',\n\t\t\t\tcheckboxAttributes,\n\t\t\t],\n\t\t\t[\n\t\t\t\t'label',\n\t\t\t\t0,\n\t\t\t],\n\t\t]\n\t},\n\n\t// overwrite the parent node view so renderHTML gets used\n\taddNodeView: false,\n\n\ttoMarkdown: (state, node) => {\n\t\tstate.write(`[${node.attrs.checked ? 'x' : ' '}] `)\n\t\tstate.renderContent(node)\n\t},\n\n\t addInputRules() {\n\t\treturn [\n\t\t\t...this.parent(),\n\t\t\twrappingInputRule({\n\t\t\t\tfind: /^\\s*([-+*])\\s(\\[(x|X|\\s)?\\])\\s$/,\n\t\t\t\ttype: this.type,\n\t\t\t\tgetAttributes: match => ({\n\t\t\t\t\tchecked: 'xX'.includes(match[match.length - 1]),\n\t\t\t\t}),\n\t\t\t}),\n\t\t]\n\t},\n\n\taddProseMirrorPlugins() {\n\t\treturn [\n\t\t\tnew Plugin({\n\t\t\t\tprops: {\n\t\t\t\t\thandleClick: (view, pos, event) => {\n\t\t\t\t\t\tconst state = view.state\n\t\t\t\t\t\tconst schema = state.schema\n\n\t\t\t\t\t\tconst coordinates = view.posAtCoords({ left: event.clientX, top: event.clientY })\n\t\t\t\t\t\tconst position = state.doc.resolve(coordinates.pos)\n\t\t\t\t\t\tconst parentList = findParentNodeClosestToPos(position, function(node) {\n\t\t\t\t\t\t\treturn node.type === schema.nodes.taskItem\n\t\t\t\t\t\t\t\t|| node.type === schema.nodes.listItem\n\t\t\t\t\t\t})\n\t\t\t\t\t\tconst isListClicked = event.target.tagName.toLowerCase() === 'li'\n\t\t\t\t\t\tif (!isListClicked\n\t\t\t\t\t\t\t|| !parentList\n\t\t\t\t\t\t\t|| parentList.node.type !== schema.nodes.taskItem\n\t\t\t\t\t\t || !view.editable) {\n\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst tr = state.tr\n\t\t\t\t\t\ttr.setNodeMarkup(parentList.pos, schema.nodes.taskItem, { checked: !parentList.node.attrs.checked })\n\t\t\t\t\t\tview.dispatch(tr)\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}),\n\t\t]\n\t},\n\n})\n\nexport default TaskItem\n","/*\n * @copyright Copyright (c) 2020 Julius Härtl \n *\n * @author Julius Härtl \n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n */\n\nimport TiptapTaskList from '@tiptap/extension-task-list'\n\nconst TaskList = TiptapTaskList.extend({\n\n\tparseHTML: [\n\t\t{\n\t\t\tpriority: 100,\n\t\t\ttag: 'ul.contains-task-list',\n\t\t},\n\t],\n\n\taddAttributes() {\n\t\treturn {\n\t\t\t...this.parent?.(),\n\t\t\tbullet: {\n\t\t\t\tdefault: '-',\n\t\t\t\trendered: false,\n\t\t\t\tisRequired: true,\n\t\t\t\tparseHTML: (el) => el.getAttribute('data-bullet'),\n\t\t\t},\n\t\t}\n\t},\n\n\ttoMarkdown: (state, node) => {\n\t\tstate.renderList(node, ' ', () => `${node.attrs.bullet} `)\n\t},\n\n})\n\nexport default TaskList\n","/*\n * @copyright Copyright (c) 2021, überdosis GbR\n *\n * @license MIT\n *\n */\n\nimport { Extension } from '@tiptap/core'\nimport { PluginKey, Plugin } from '@tiptap/pm/state'\n\n/**\n * @param {object} args Arguments as deconstructable object\n * @param {Array | object} args.types possible types\n * @param {object} args.node node to check\n */\nfunction nodeEqualsType({ types, node }) {\n\treturn (Array.isArray(types) && types.includes(node.type)) || node.type === types\n}\n\n/**\n * Extension based on:\n * - https://github.com/ueberdosis/tiptap/tree/main/demos/src/Experiments/TrailingNode\n * - https://github.com/ueberdosis/tiptap/blob/v1/packages/tiptap-extensions/src/extensions/TrailingNode.js\n * - https://github.com/remirror/remirror/blob/e0f1bec4a1e8073ce8f5500d62193e52321155b9/packages/prosemirror-trailing-node/src/trailing-node-plugin.ts\n */\n\nconst TrailingNode = Extension.create({\n\tname: 'trailingNode',\n\n\taddOptions() {\n\t\treturn {\n\t\t\tnode: 'paragraph',\n\t\t\tnotAfter: ['paragraph'],\n\t\t}\n\t},\n\n\taddProseMirrorPlugins() {\n\t\tconst plugin = new PluginKey(this.name)\n\t\tconst disabledNodes = Object.entries(this.editor.schema.nodes)\n\t\t\t.map(([, value]) => value)\n\t\t\t.filter(node => this.options.notAfter.includes(node.name))\n\n\t\treturn [\n\t\t\tnew Plugin({\n\t\t\t\tkey: plugin,\n\t\t\t\tappendTransaction: (_, __, state) => {\n\t\t\t\t\tconst { doc, tr, schema } = state\n\t\t\t\t\tconst shouldInsertNodeAtEnd = plugin.getState(state)\n\t\t\t\t\tconst endPosition = doc.content.size\n\t\t\t\t\tconst type = schema.nodes[this.options.node]\n\n\t\t\t\t\tif (!shouldInsertNodeAtEnd) {\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\n\t\t\t\t\treturn tr.insert(endPosition, type.create())\n\t\t\t\t},\n\t\t\t\tstate: {\n\t\t\t\t\tinit: (_, state) => {\n\t\t\t\t\t\tconst lastNode = state.tr.doc.lastChild\n\t\t\t\t\t\treturn !nodeEqualsType({ node: lastNode, types: disabledNodes })\n\t\t\t\t\t},\n\t\t\t\t\tapply: (tr, value) => {\n\t\t\t\t\t\tif (!tr.docChanged) {\n\t\t\t\t\t\t\treturn value\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst lastNode = tr.doc.lastChild\n\t\t\t\t\t\treturn !nodeEqualsType({ node: lastNode, types: disabledNodes })\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}),\n\t\t]\n\t},\n})\n\nexport default TrailingNode\n","/**\n * @copyright Copyright (c) 2020 Azul \n *\n * @author Azul \n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n */\n\nimport { generateUrl } from '@nextcloud/router'\n\nimport { logger } from '../helpers/logger.js'\nimport markdownit from './../markdownit/index.js'\n\nconst absolutePath = function(base, rel) {\n\tif (!rel) {\n\t\treturn base\n\t}\n\tif (rel[0] === '/') {\n\t\treturn rel\n\t}\n\tbase = base.split('/')\n\trel = rel.split('/')\n\twhile (rel[0] === '..' || rel[0] === '.') {\n\t\tif (rel[0] === '..') {\n\t\t\tbase.pop()\n\t\t}\n\t\trel.shift()\n\t}\n\treturn base.concat(rel).join('/')\n}\n\nconst basedir = function(file) {\n\tconst end = file.lastIndexOf('/')\n\treturn (end > 0)\n\t\t? file.slice(0, end)\n\t\t: file.slice(0, end + 1) // basedir('/toplevel') should return '/'\n}\n\nconst domHref = function(node, relativePath) {\n\tconst ref = node.attrs.href\n\tif (!ref) {\n\t\treturn ref\n\t}\n\tif (!OCA.Viewer) {\n\t\treturn ref\n\t}\n\tif (ref.match(/^[a-zA-Z]*:/)) {\n\t\treturn ref\n\t}\n\tif (ref.startsWith('#')) {\n\t\treturn ref\n\t}\n\n\tconst match = ref.match(/^([^?]*)\\?fileId=(\\d+)/)\n\tif (match) {\n\t\tconst [, relPath, id] = match\n\t\tconst currentDir = basedir(relativePath || OCA.Viewer?.file || '/')\n\t\tconst dir = absolutePath(currentDir, basedir(relPath))\n\t\tif (relPath.length > 1 && relPath.endsWith('/')) {\n\t\t\t// is directory\n\t\t\treturn generateUrl(`/apps/files/?dir=${dir}&fileId=${id}`)\n\t\t} else {\n\t\t\treturn generateUrl(`/apps/files/?dir=${dir}&openfile=${id}#relPath=${relPath}`)\n\t\t}\n\t}\n\treturn ref\n}\n\nconst parseHref = function(dom) {\n\tconst ref = dom.getAttribute('href')\n\tif (!ref) {\n\t\treturn ref\n\t}\n\tconst match = ref.match(/\\?dir=([^&]*)&openfile=([^&]*)#relPath=([^&]*)/)\n\tif (match) {\n\t\tconst [, , id, path] = match\n\t\treturn `${path}?fileId=${id}`\n\t}\n\treturn ref\n}\n\nconst openLink = function(event, _attrs) {\n\tconst linkElement = event.target.closest('a')\n\tconst htmlHref = linkElement.href\n\tconst query = OC.parseQueryString(htmlHref)\n\tconst fragment = htmlHref.split('#').pop()\n\tconst fragmentQuery = OC.parseQueryString(fragment)\n\tif (query?.dir && fragmentQuery?.relPath) {\n\t\tconst filename = fragmentQuery.relPath.split('/').pop()\n\t\tconst path = `${query.dir}/${filename}`\n\t\tdocument.title = `${filename} - ${OC.theme.title}`\n\t\tif (window.location.pathname.match(/apps\\/files\\/$/)) {\n\t\t\t// The files app still lacks a popState handler\n\t\t\t// to allow for using the back button\n\t\t\t// OC.Util.History.pushState('', htmlHref)\n\t\t}\n\t\tOCA.Viewer.open({ path })\n\t\treturn\n\t}\n\tif (htmlHref.match(/apps\\/files\\//) && query?.fileId) {\n\t\t// open the direct file link\n\t\twindow.open(generateUrl(`/f/${query.fileId}`), '_self')\n\t\treturn\n\t}\n\tif (!markdownit.validateLink(htmlHref)) {\n\t\tlogger.error('Invalid link', { htmlHref })\n\t\treturn false\n\t}\n\tif (fragment) {\n\t\tconst el = document.getElementById(fragment)\n\t\tif (el) {\n\t\t\tel.scrollIntoView()\n\t\t\twindow.location.hash = fragment\n\t\t\treturn\n\t\t}\n\t}\n\twindow.open(htmlHref)\n\treturn true\n}\n\nexport {\n\tdomHref,\n\tparseHref,\n\topenLink,\n}\n","import { Plugin, PluginKey } from '@tiptap/pm/state'\n\nimport { logger } from '../helpers/logger.js'\n\nconst clickHandler = ({ editor, type, onClick }) => {\n\treturn new Plugin({\n\t\tprops: {\n\t\t\tkey: new PluginKey('textLink'),\n\t\t\thandleClick: (view, pos, event) => {\n\t\t\t\tconst $clicked = view.state.doc.resolve(pos)\n\t\t\t\tconst link = $clicked.marks().find(m => m.type.name === type.name)\n\t\t\t\tif (!link) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\tif (!link.attrs.href) {\n\t\t\t\t\tlogger.warn('Could not determine href of link.')\n\t\t\t\t\tlogger.debug('Link', { link })\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\t// We use custom onClick handler only for left clicks\n\t\t\t\tif (event.button === 0 && !event.ctrlKey) {\n\t\t\t\t\tevent.stopPropagation()\n\t\t\t\t\treturn onClick?.(event, link.attrs)\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t})\n}\n\nconst clickPreventer = () => {\n\treturn new Plugin({\n\t\tprops: {\n\t\t\tkey: new PluginKey('textAvoidLinkClick'),\n\t\t\thandleDOMEvents: {\n\t\t\t\tclick: (view, event) => {\n\t\t\t\t\tif (!view.editable) {\n\t\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\t\treturn false\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t})\n}\n\nexport { clickHandler, clickPreventer }\n","/*\n * @copyright Copyright (c) 2019 Azul \n *\n * @author Azul \n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n */\n\nimport TipTapLink from '@tiptap/extension-link'\nimport { domHref, parseHref, openLink } from './../helpers/links.js'\nimport { clickHandler, clickPreventer } from '../plugins/link.js'\n\nconst Link = TipTapLink.extend({\n\n\taddOptions() {\n\t\treturn {\n\t\t\t...this.parent?.(),\n\t\t\tonClick: openLink,\n\t\t\trelativePath: null,\n\t\t}\n\t},\n\n\taddAttributes() {\n\t\treturn {\n\t\t\thref: {\n\t\t\t\tdefault: null,\n\t\t\t},\n\t\t\ttitle: {\n\t\t\t\tdefault: null,\n\t\t\t},\n\t\t}\n\t},\n\n\tinclusive: false,\n\n\tparseHTML: [\n\t\t{\n\t\t\ttag: 'a[href]',\n\t\t\tgetAttrs: dom => ({\n\t\t\t\thref: parseHref(dom),\n\t\t\t\ttitle: dom.getAttribute('title'),\n\t\t\t}),\n\t\t},\n\t],\n\n\trenderHTML(options) {\n\t\tconst { mark } = options\n\n\t\treturn ['a', {\n\t\t\t...mark.attrs,\n\t\t\thref: domHref(mark, this.options.relativePath),\n\t\t\trel: 'noopener noreferrer nofollow',\n\t\t}, 0]\n\t},\n\n\taddProseMirrorPlugins() {\n\t\tconst plugins = this.parent()\n\t\t\t// remove original handle click\n\t\t\t.filter(({ key }) => {\n\t\t\t\treturn !key.startsWith('handleClickLink')\n\t\t\t})\n\n\t\tif (!this.options.openOnClick) {\n\t\t\treturn plugins\n\t\t}\n\n\t\t// add custom click handler\n\t\treturn [\n\t\t\t...plugins,\n\t\t\tclickHandler({\n\t\t\t\teditor: this.editor,\n\t\t\t\ttype: this.type,\n\t\t\t\tonClick: this.options.onClick,\n\t\t\t}),\n\t\t\tclickPreventer(),\n\t\t]\n\t},\n})\n\nexport default Link\n","/*\n * @copyright Copyright (c) 2019 Julius Härtl \n *\n * @author Julius Härtl \n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n */\n\nimport TipTapStrike from '@tiptap/extension-strike'\n\nexport default TipTapStrike.extend({\n\n\tparseHTML() {\n\t\treturn [\n\t\t\t{\n\t\t\t\ttag: 's',\n\t\t\t},\n\t\t\t{\n\t\t\t\ttag: 'del',\n\t\t\t},\n\t\t\t{\n\t\t\t\ttag: 'strike',\n\t\t\t},\n\t\t\t{\n\t\t\t\tstyle: 'text-decoration',\n\t\t\t\tgetAttrs: value => value === 'line-through',\n\t\t\t},\n\t\t]\n\t},\n\n\trenderHTML() {\n\t\treturn ['s', 0]\n\t},\n\n\t/** Strike is currently unsupported by prosemirror-markdown */\n\ttoMarkdown: {\n\t\topen: '~~',\n\t\tclose: '~~',\n\t\tmixable: true,\n\t\texpelEnclosingWhitespace: true,\n\t},\n})\n","/*\n * @copyright Copyright (c) 2019 Julius Härtl \n *\n * @author Julius Härtl \n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n */\n\nimport { markInputRule, markPasteRule } from '@tiptap/core'\nimport { Bold, starInputRegex, starPasteRegex } from '@tiptap/extension-bold'\n\nconst Strong = Bold.extend({\n\tname: 'strong',\n\n\taddInputRules() {\n\t\treturn [\n\t\t\tmarkInputRule({\n\t\t\t\tfind: starInputRegex,\n\t\t\t\ttype: this.type,\n\t\t\t}),\n\t\t]\n\t},\n\n\taddPasteRules() {\n\t\treturn [\n\t\t\tmarkPasteRule({\n\t\t\t\tfind: starPasteRegex,\n\t\t\t\ttype: this.type,\n\t\t\t}),\n\t\t]\n\t},\n})\n\nexport default Strong\n","/*\n * @copyright Copyright (c) 2022 Max \n *\n * @author Max \n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n */\n\nimport TipTapUnderline from '@tiptap/extension-underline'\nimport { markInputRule, markPasteRule } from '@tiptap/core'\nimport { underscoreInputRegex, underscorePasteRegex } from '@tiptap/extension-bold'\n\nconst Underline = TipTapUnderline.extend({\n\n\tparseHTML() {\n\t\treturn [\n\t\t\t{\n\t\t\t\ttag: 'u',\n\t\t\t},\n\t\t\t{\n\t\t\t\tstyle: 'text-decoration',\n\t\t\t\tgetAttrs: value => value === 'underline',\n\t\t\t},\n\t\t]\n\t},\n\n\trenderHTML() {\n\t\treturn ['u', 0]\n\t},\n\n\ttoMarkdown: {\n\t\topen: '__',\n\t\tclose: '__',\n\t\tmixable: true,\n\t\texpelEnclosingWhitespace: true,\n\t},\n\n\taddInputRules() {\n\t\treturn [\n\t\t\tmarkInputRule({\n\t\t\t\tfind: underscoreInputRegex,\n\t\t\t\ttype: this.type,\n\t\t\t}),\n\t\t]\n\t},\n\n\taddPasteRules() {\n\t\treturn [\n\t\t\tmarkPasteRule({\n\t\t\t\tfind: underscorePasteRegex,\n\t\t\t\ttype: this.type,\n\t\t\t}),\n\t\t]\n\t},\n\n})\n\nexport default Underline\n","/*\n * @copyright Copyright (c) 2019 Julius Härtl \n *\n * @author Julius Härtl \n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n */\n\nimport TipTapItalic from '@tiptap/extension-italic'\nimport Link from './Link.js'\nimport Strike from './Strike.js'\nimport Strong from './Strong.js'\nimport Underline from './Underline.js'\n\nconst Italic = TipTapItalic.extend({\n\tname: 'em',\n})\n\nexport {\n\tStrong,\n\tItalic,\n\tStrike,\n\tLink,\n\tUnderline,\n}\n","/**\n * @copyright Copyright (c) 2022 Max \n *\n * @author Max \n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n */\n\nimport { Extension } from '@tiptap/core'\nimport { lowlight } from 'lowlight'\n\n/* eslint-disable import/no-named-as-default */\nimport Blockquote from '@tiptap/extension-blockquote'\nimport BulletList from './../nodes/BulletList.js'\nimport Callout from './../nodes/Callouts.js'\nimport CharacterCount from '@tiptap/extension-character-count'\nimport Code from '@tiptap/extension-code'\nimport CodeBlock from './../nodes/CodeBlock.js'\nimport Document from '@tiptap/extension-document'\nimport Dropcursor from '@tiptap/extension-dropcursor'\nimport Emoji from './Emoji.js'\nimport EmojiSuggestion from './../components/Suggestion/Emoji/suggestions.js'\nimport FrontMatter from './../nodes/FrontMatter.js'\nimport Paragraph from './../nodes/Paragraph.js'\nimport HardBreak from './../nodes/HardBreak.js'\nimport Heading from '../nodes/Heading/index.js'\nimport HorizontalRule from '@tiptap/extension-horizontal-rule'\nimport Image from './../nodes/Image.js'\nimport ImageInline from './../nodes/ImageInline.js'\nimport KeepSyntax from './KeepSyntax.js'\nimport ListItem from '@tiptap/extension-list-item'\nimport Markdown from './../extensions/Markdown.js'\nimport Mention from './../extensions/Mention.js'\nimport LinkPicker from './../extensions/LinkPicker.js'\nimport OrderedList from '@tiptap/extension-ordered-list'\nimport Placeholder from '@tiptap/extension-placeholder'\nimport Table from './../nodes/Table.js'\nimport EditableTable from './../nodes/EditableTable.js'\nimport TaskItem from './../nodes/TaskItem.js'\nimport TaskList from './../nodes/TaskList.js'\nimport Text from '@tiptap/extension-text'\nimport TrailingNode from './../nodes/TrailingNode.js'\n/* eslint-enable import/no-named-as-default */\n\nimport { Strong, Italic, Strike, Link, Underline } from './../marks/index.js'\nimport { translate as t } from '@nextcloud/l10n'\n\nexport default Extension.create({\n\tname: 'RichText',\n\n\taddOptions() {\n\t\treturn {\n\t\t\tediting: true,\n\t\t\tlink: {},\n\t\t\textensions: [],\n\t\t\tcomponent: null,\n\t\t\trelativePath: null,\n\t\t}\n\t},\n\n\taddExtensions() {\n\t\tconst defaultExtensions = [\n\t\t\tthis.options.editing ? Markdown : null,\n\t\t\tDocument,\n\t\t\tText,\n\t\t\tParagraph,\n\t\t\tHardBreak,\n\t\t\tHeading,\n\t\t\tStrong,\n\t\t\tItalic,\n\t\t\tStrike,\n\t\t\tBlockquote,\n\t\t\tCharacterCount,\n\t\t\tCode,\n\t\t\tCodeBlock.configure({\n\t\t\t\tlowlight,\n\t\t\t}),\n\t\t\tBulletList,\n\t\t\tHorizontalRule,\n\t\t\tOrderedList,\n\t\t\tListItem,\n\t\t\tthis.options.editing ? EditableTable : Table,\n\t\t\tTaskList,\n\t\t\tTaskItem,\n\t\t\tCallout,\n\t\t\tUnderline,\n\t\t\tImage,\n\t\t\tImageInline,\n\t\t\tDropcursor,\n\t\t\tKeepSyntax,\n\t\t\tFrontMatter,\n\t\t\tMention,\n\t\t\tEmoji.configure({\n\t\t\t\tsuggestion: EmojiSuggestion(),\n\t\t\t}),\n\t\t\tLinkPicker,\n\t\t\tthis.options.editing\n\t\t\t\t? Placeholder.configure({\n\t\t\t\t\temptyNodeClass: 'is-empty',\n\t\t\t\t\tplaceholder: t('text', 'Add notes, lists or links …'),\n\t\t\t\t\tshowOnlyWhenEditable: true,\n\t\t\t\t})\n\t\t\t\t: null,\n\t\t\tTrailingNode,\n\t\t]\n\t\tif (this.options.link !== false) {\n\t\t\tdefaultExtensions.push(Link.configure({\n\t\t\t\t...this.options.link,\n\t\t\t\topenOnClick: true,\n\t\t\t\tvalidate: href => /^https?:\\/\\//.test(href),\n\t\t\t\trelativePath: this.options.relativePath,\n\t\t\t}))\n\t\t}\n\t\tconst additionalExtensionNames = this.options.extensions.map(e => e.name)\n\t\treturn [\n\t\t\t...defaultExtensions.filter(e => e && !additionalExtensionNames.includes(e.name)),\n\t\t\t...this.options.extensions,\n\t\t]\n\t},\n\n})\n","/*\n * @copyright Copyright (c) 2022 Julius Härtl \n *\n * @author Julius Härtl \n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n */\n\nimport { emojiSearch } from '@nextcloud/vue'\nimport createSuggestions from '../suggestions.js'\nimport EmojiList from './EmojiList.vue'\n\nexport default () => createSuggestions({\n\tlistComponent: EmojiList,\n\titems: ({ query }) => {\n\t\treturn emojiSearch(query)\n\t},\n\tcommand: ({ editor, range, props }) => {\n\t\teditor\n\t\t\t.chain()\n\t\t\t.focus()\n\t\t\t.insertContentAt(range, props.native + ' ')\n\t\t\t.run()\n\t},\n})\n","var render = function render(){var _vm=this,_c=_vm._self._c;return (_vm.enabled)?_c('div',{class:{'icon-loading': !_vm.loaded || !_vm.ready, 'focus': _vm.focus, 'dark': _vm.darkTheme, 'creatable': _vm.canCreate },attrs:{\"id\":\"rich-workspace\"}},[(_vm.file)?_c('Editor',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.ready),expression:\"ready\"}],key:_vm.file.path,attrs:{\"file-id\":_vm.file.id,\"relative-path\":_vm.file.path,\"share-token\":_vm.shareToken,\"mime\":_vm.file.mimetype,\"autofocus\":_vm.autofocus,\"autohide\":_vm.autohide,\"active\":\"\",\"rich-workspace\":\"\"},on:{\"ready\":function($event){_vm.ready=true},\"focus\":_vm.onFocus,\"blur\":_vm.onBlur,\"error\":_vm.reset}}):_vm._e()],1):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n","import mod from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RichWorkspace.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RichWorkspace.vue?vue&type=script&lang=js&\"","\n import API from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/sass-loader/dist/cjs.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RichWorkspace.vue?vue&type=style&index=0&id=4c292a7f&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/sass-loader/dist/cjs.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RichWorkspace.vue?vue&type=style&index=0&id=4c292a7f&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./RichWorkspace.vue?vue&type=template&id=4c292a7f&scoped=true&\"\nimport script from \"./RichWorkspace.vue?vue&type=script&lang=js&\"\nexport * from \"./RichWorkspace.vue?vue&type=script&lang=js&\"\nimport style0 from \"./RichWorkspace.vue?vue&type=style&index=0&id=4c292a7f&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4c292a7f\",\n null\n \n)\n\nexport default component.exports","/*\n * @copyright Copyright (c) 2019 Julius Härtl \n *\n * @author Julius Härtl \n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n */\n\nimport { loadState } from '@nextcloud/initial-state'\nimport { emit, subscribe } from '@nextcloud/event-bus'\nimport { openMimetypes } from './mime.js'\nimport { getSharingToken } from './token.js'\nimport RichWorkspace from '../views/RichWorkspace.vue'\nimport { imagePath } from '@nextcloud/router'\nimport store from '../store/index.js'\n\nconst FILE_ACTION_IDENTIFIER = 'Edit with text app'\n\nconst optimalPath = function(from, to) {\n\tconst current = from.split('/')\n\tconst target = to.split('/')\n\tcurrent.pop() // ignore filename\n\twhile (current[0] === target[0]) {\n\t\tcurrent.shift()\n\t\ttarget.shift()\n\t\t// Handle case where target is the current directory\n\t\tif (current.length === 0 && target.length === 0) {\n\t\t\treturn '.'\n\t\t}\n\t}\n\tconst relativePath = current.fill('..').concat(target)\n\tconst absolutePath = to.split('/')\n\treturn relativePath.length < absolutePath.length\n\t\t? relativePath.join('/')\n\t\t: to\n}\n\nconst registerFileCreate = () => {\n\tconst newFileMenuPlugin = {\n\t\tattach(menu) {\n\t\t\tconst fileList = menu.fileList\n\n\t\t\t// only attach to main file list, public view is not supported yet\n\t\t\tif (fileList.id !== 'files' && fileList.id !== 'files.public') {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// register the new menu entry\n\t\t\tmenu.addMenuEntry({\n\t\t\t\tid: 'file',\n\t\t\t\tdisplayName: t('text', 'New text file'),\n\t\t\t\ttemplateName: t('text', 'New text file') + '.' + loadState('text', 'default_file_extension'),\n\t\t\t\ticonClass: 'icon-filetype-text',\n\t\t\t\tfileType: 'file',\n\t\t\t\tactionHandler(name) {\n\t\t\t\t\tfileList.createFile(name).then(function(status, data) {\n\t\t\t\t\t\tconst fileInfoModel = new OCA.Files.FileInfoModel(data)\n\t\t\t\t\t\tif (typeof OCA.Viewer !== 'undefined') {\n\t\t\t\t\t\t\tOCA.Files.fileActions.triggerAction('view', fileInfoModel, fileList)\n\t\t\t\t\t\t} else if (typeof OCA.Viewer === 'undefined') {\n\t\t\t\t\t\t\tOCA.Files.fileActions.triggerAction(FILE_ACTION_IDENTIFIER, fileInfoModel, fileList)\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t})\n\t\t},\n\t}\n\tOC.Plugins.register('OCA.Files.NewFileMenu', newFileMenuPlugin)\n}\n\nconst registerFileActionFallback = () => {\n\tconst sharingToken = getSharingToken()\n\tconst filesTable = document.querySelector('#preview table.files-filestable')\n\tif (!sharingToken || !filesTable) {\n\t\tconst ViewerRoot = document.createElement('div')\n\t\tViewerRoot.id = 'text-viewer-fallback'\n\t\tdocument.body.appendChild(ViewerRoot)\n\t\tconst registerAction = (mime) => OCA.Files.fileActions.register(\n\t\t\tmime,\n\t\t\tFILE_ACTION_IDENTIFIER,\n\t\t\tOC.PERMISSION_UPDATE | OC.PERMISSION_READ,\n\t\t\timagePath('core', 'actions/rename'),\n\t\t\t(filename) => {\n\t\t\t\tconst file = window.FileList.findFile(filename)\n\t\t\t\tPromise.all([\n\t\t\t\t\timport('vue'),\n\t\t\t\t\timport(/* webpackChunkName: \"files-modal\" */'./../components/PublicFilesEditor.vue'),\n\t\t\t\t]).then((imports) => {\n\t\t\t\t\tconst path = window.FileList.getCurrentDirectory() + '/' + filename\n\t\t\t\t\tconst Vue = imports[0].default\n\t\t\t\t\tVue.prototype.t = window.t\n\t\t\t\t\tVue.prototype.n = window.n\n\t\t\t\t\tVue.prototype.OCA = window.OCA\n\t\t\t\t\tconst Editor = imports[1].default\n\t\t\t\t\tconst vm = new Vue({\n\t\t\t\t\t\trender: function(h) { // eslint-disable-line\n\t\t\t\t\t\t\tconst self = this\n\t\t\t\t\t\t\treturn h(Editor, {\n\t\t\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\t\t\tfileId: file ? file.id : null,\n\t\t\t\t\t\t\t\t\tactive: true,\n\t\t\t\t\t\t\t\t\tshareToken: sharingToken,\n\t\t\t\t\t\t\t\t\trelativePath: path,\n\t\t\t\t\t\t\t\t\tmimeType: file.mimetype,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\ton: {\n\t\t\t\t\t\t\t\t\tclose: function() { // eslint-disable-line\n\t\t\t\t\t\t\t\t\t\tself.$destroy()\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t},\n\t\t\t\t\t})\n\t\t\t\t\tvm.$mount(ViewerRoot)\n\t\t\t\t})\n\t\t\t},\n\t\t\tt('text', 'Edit'),\n\t\t)\n\n\t\tfor (let i = 0; i < openMimetypes.length; i++) {\n\t\t\tregisterAction(openMimetypes[i])\n\t\t\tOCA.Files.fileActions.setDefault(openMimetypes[i], FILE_ACTION_IDENTIFIER)\n\t\t}\n\t}\n\n}\n\nconst newRichWorkspaceFileMenuPlugin = {\n\tattach(menu) {\n\t\tconst fileList = menu.fileList\n\t\tconst descriptionFile = t('text', 'Readme') + '.' + loadState('text', 'default_file_extension')\n\t\t// only attach to main file list, public view is not supported yet\n\t\tif (fileList.id !== 'files' && fileList.id !== 'files.public') {\n\t\t\treturn\n\t\t}\n\n\t\t// register the new menu entry\n\t\tmenu.addMenuEntry({\n\t\t\tid: 'rich-workspace-init',\n\t\t\tdisplayName: t('text', 'Add description'),\n\t\t\ttemplateName: descriptionFile,\n\t\t\ticonClass: 'icon-rename',\n\t\t\tfileType: 'file',\n\t\t\tuseInput: false,\n\t\t\tactionHandler() {\n\t\t\t\treturn window.FileList\n\t\t\t\t\t.createFile(descriptionFile, { scrollTo: false, animate: false })\n\t\t\t\t\t.then(() => emit('Text::showRichWorkspace', { autofocus: true }))\n\t\t\t},\n\t\t\tshouldShow() {\n\t\t\t\treturn !fileList.findFile(descriptionFile)\n\t\t\t},\n\t\t})\n\t},\n}\n\nconst addMenuRichWorkspace = () => {\n\tOC.Plugins.register('OCA.Files.NewFileMenu', newRichWorkspaceFileMenuPlugin)\n}\n\nconst FilesWorkspacePlugin = {\n\tel: null,\n\n\tattach(fileList) {\n\t\tif (fileList.id !== 'files' && fileList.id !== 'files.public') {\n\t\t\treturn\n\t\t}\n\t\tthis.el = document.createElement('div')\n\t\tfileList.registerHeader({\n\t\t\tid: 'workspace',\n\t\t\tel: this.el,\n\t\t\trender: this.render.bind(this),\n\t\t\tpriority: 10,\n\t\t})\n\t},\n\n\trender(fileList) {\n\t\tif (fileList.id !== 'files' && fileList.id !== 'files.public') {\n\t\t\treturn\n\t\t}\n\t\taddMenuRichWorkspace()\n\t\timport('vue').then((module) => {\n\t\t\tconst Vue = module.default\n\t\t\tthis.el.id = 'files-workspace-wrapper'\n\t\t\tVue.prototype.t = window.t\n\t\t\tVue.prototype.n = window.n\n\t\t\tVue.prototype.OCA = window.OCA\n\t\t\tconst View = Vue.extend(RichWorkspace)\n\t\t\tconst vm = new View({\n\t\t\t\tpropsData: {\n\t\t\t\t\tpath: fileList.getCurrentDirectory(),\n\t\t\t\t},\n\t\t\t\tstore,\n\t\t\t}).$mount(this.el)\n\t\t\tsubscribe('files:navigation:changed', () => {\n\t\t\t\t// Expose if the default file list is active to the component\n\t\t\t\t// to only render the workspace if the file list is actually visible\n\t\t\t\tvm.active = OCA.Files.App.getCurrentFileList() === fileList\n\t\t\t})\n\t\t\tfileList.$el.on('urlChanged', data => {\n\t\t\t\tvm.path = data.dir.toString()\n\t\t\t})\n\t\t\tfileList.$el.on('changeDirectory', data => {\n\t\t\t\tvm.path = data.dir.toString()\n\t\t\t})\n\t\t})\n\t},\n}\n\nexport {\n\toptimalPath,\n\tregisterFileActionFallback,\n\tregisterFileCreate,\n\tFilesWorkspacePlugin,\n\tFILE_ACTION_IDENTIFIER,\n}\n","import { getLoggerBuilder } from '@nextcloud/logger'\n\nconst logger = getLoggerBuilder()\n\t.setApp('text')\n\t.detectUser()\n\t.build()\n\nexport {\n\tlogger,\n}\n","/*\n * @copyright Copyright (c) 2019 Julius Härtl \n *\n * @author Julius Härtl \n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n */\n\nconst mimetypesImages = [\n\t'image/png',\n\t'image/jpeg',\n\t'image/jpg',\n\t'image/gif',\n\t'image/x-xbitmap',\n\t'image/x-ms-bmp',\n\t'image/bmp',\n\t'image/svg+xml',\n\t'image/webp',\n]\n\nconst openMimetypesMarkdown = [\n\t'text/markdown',\n]\n\nconst openMimetypesPlainText = [\n\t'text/plain',\n\t'application/cmd',\n\t'application/x-empty',\n\t'application/x-msdos-program',\n\t'application/javascript',\n\t'application/json',\n\t'application/x-perl',\n\t'application/x-php',\n\t'application/x-tex',\n\t'application/xml',\n\t'application/yaml',\n\t'text/asciidoc',\n\t'text/css',\n\t'text/html',\n\t'text/org',\n\t'text/x-c',\n\t'text/x-c++src',\n\t'text/x-h',\n\t'text/x-java-source',\n\t'text/x-ldif',\n\t'text/x-python',\n\t'text/x-shellscript',\n]\n\nif (!window.oc_appswebroots?.richdocuments && !window.oc_appswebroots?.onlyoffice) {\n\topenMimetypesPlainText.push('text/csv')\n}\n\nconst openMimetypes = [...openMimetypesMarkdown, ...openMimetypesPlainText]\n\nexport {\n\tmimetypesImages,\n\topenMimetypes,\n\topenMimetypesMarkdown,\n\topenMimetypesPlainText,\n}\n","const getSharingToken = () => document.getElementById('sharingToken')\n\t? document.getElementById('sharingToken').value\n\t: null\n\nexport { getSharingToken }\n","/*\n * @copyright Copyright (c) 2022 Vinicius Reis \n *\n * @author Vinicius Reis \n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n */\n\nimport container from 'markdown-it-container'\n\nexport const typesAvailable = ['info', 'warn', 'error', 'success']\n\nconst buildRender = type => (tokens, idx, options, env, slf) => {\n\tconst tag = tokens[idx]\n\n\t// add attributes to the opening tag\n\tif (tag.nesting === 1) {\n\t\ttag.attrSet('data-callout', type)\n\t\ttag.attrJoin('class', `callout callout-${type}`)\n\t}\n\n\treturn slf.renderToken(tokens, idx, options, env, slf)\n}\n\n/**\n * @param {object} md Markdown object\n */\nexport default (md) => {\n\t// create a custom container to each callout type\n\ttypesAvailable.forEach(type => {\n\t\tmd.use(container, type, {\n\t\t\trender: buildRender(type),\n\t\t})\n\t})\n\n\treturn md\n}\n","/*\n * @copyright Copyright (c) 2022 Max \n *\n * @author Max \n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n */\n\n/**\n * @param {import('markdown-it')} md Markdown object\n */\nexport default function splitMixedLists(md) {\n\tmd.core.ruler.after('task-lists', 'split-mixed-task-lists', state => {\n\t\tconst tokens = state.tokens\n\n\t\tfor (let i = 0; i < tokens.length; i++) {\n\t\t\tconst token = tokens[i]\n\t\t\tif (!includesClass(token, 'contains-task-list')) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tconst firstChild = tokens[i + 1]\n\t\t\tconst startsWithTask = includesClass(firstChild, 'task-list-item')\n\t\t\tif (!startsWithTask) {\n\t\t\t\ttoken.attrs.splice(token.attrIndex('class'))\n\t\t\t\tif (token.attrs.length === 0) {\n\t\t\t\t\ttoken.attrs = null\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst splitBefore = findChildOf(tokens, i, child => {\n\t\t\t\treturn child.nesting === 1\n\t\t\t\t\t&& includesClass(child, 'task-list-item') !== startsWithTask\n\t\t\t})\n\t\t\tif (splitBefore > i) {\n\t\t\t\tsplitListAt(tokens, splitBefore, state.Token)\n\t\t\t}\n\t\t}\n\n\t\treturn false\n\t})\n}\n\n/**\n * @param {object} token MarkdownIT token\n * @param {string} cls Class name to query\n */\nfunction includesClass(token, cls) {\n\treturn token.attrGet('class')?.split(' ').includes(cls) || false\n}\n\n/**\n * @param {Array} tokens - all the tokens in the doc\n * @param {number} index - index into the tokens array where to split\n * @param {object} TokenConstructor - constructor provided by Markdown-it\n */\nfunction splitListAt(tokens, index, TokenConstructor) {\n\tconst closeList = new TokenConstructor('bullet_list_close', 'ul', -1)\n\tcloseList.block = true\n\tconst openList = new TokenConstructor('bullet_list_open', 'ul', 1)\n\topenList.attrSet('class', 'contains-task-list')\n\topenList.block = true\n\topenList.markup = tokens[index].markup\n\ttokens.splice(index, 0, closeList, openList)\n}\n\n/**\n * @param {Array} tokens - all the tokens in the doc\n * @param {number} parentIndex - index of the parent in the tokens array\n * @param {Function} predicate - test function returned child needs to pass\n */\nfunction findChildOf(tokens, parentIndex, predicate) {\n\tconst searchLevel = tokens[parentIndex].level + 1\n\tfor (let i = parentIndex + 1; i < tokens.length; i++) {\n\t\tconst token = tokens[i]\n\t\tif (token.level < searchLevel) {\n\t\t\treturn -1\n\t\t}\n\t\tif ((token.level === searchLevel) && predicate(tokens[i])) {\n\t\t\treturn i\n\t\t}\n\t}\n\treturn -1\n}\n","import MarkdownIt from 'markdown-it'\nimport taskLists from '@hedgedoc/markdown-it-task-lists'\nimport markdownitMentions from '@quartzy/markdown-it-mentions'\nimport underline from './underline.js'\nimport splitMixedLists from './splitMixedLists.js'\nimport callouts from './callouts.js'\nimport hardbreak from './hardbreak.js'\nimport keepSyntax from './keepSyntax.js'\nimport frontMatter from 'markdown-it-front-matter'\nimport implicitFigures from 'markdown-it-image-figures'\nimport { escapeHtml } from 'markdown-it/lib/common/utils.js'\n\nconst markdownit = MarkdownIt('commonmark', { html: false, breaks: false })\n\t.enable('strikethrough')\n\t.enable('table')\n\t.use(taskLists, { enable: true, labelAfter: true })\n\t.use(frontMatter, (fm) => {})\n\t.use(splitMixedLists)\n\t.use(underline)\n\t.use(hardbreak)\n\t.use(callouts)\n\t.use(keepSyntax)\n\t.use(markdownitMentions)\n\t.use(implicitFigures)\n\n// Render front matter tokens\nmarkdownit.renderer.rules.front_matter = (tokens, idx, options) => `
${escapeHtml(tokens[idx].meta)}
`\n\n// Render lists with bullet attribute\nmarkdownit.renderer.rules.bullet_list_open = (tokens, idx, options) => {\n\ttokens[idx].attrs = [\n\t\t...(tokens[idx].attrs || []),\n\t\t['data-bullet', tokens[idx].markup],\n\t]\n\treturn markdownit.renderer.renderToken(tokens, idx, options)\n}\n\nexport default markdownit\n","/*\n * @copyright Copyright (c) 2022 Max \n *\n * @author Max \n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n */\n\n/**\n * @param {object} md Markdown object\n */\nexport default function markdownUnderlines(md) {\n\tmd.inline.ruler2.after('emphasis', 'underline', state => {\n\t\tconst tokens = state.tokens\n\n\t\tfor (let i = tokens.length - 1; i > 0; i--) {\n\t\t\tconst token = tokens[i]\n\n\t\t\tif (token.markup === '__') {\n\t\t\t\tif (token.type === 'strong_open') {\n\t\t\t\t\ttokens[i].tag = 'u'\n\t\t\t\t\ttokens[i].type = 'u_open'\n\t\t\t\t}\n\t\t\t\tif (token.type === 'strong_close') {\n\t\t\t\t\ttokens[i].tag = 'u'\n\t\t\t\t\ttokens[i].type = 'u_close'\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn false\n\t})\n}\n","/**\n * @copyright Copyright (c) 2022\n *\n * @author Ferdinand Thiessen \n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n */\n\nimport markdownitNewline from 'markdown-it/lib/rules_inline/newline.js'\nimport markdownitEscape from 'markdown-it/lib/rules_inline/escape.js'\n\n/**\n * Add information about used markdown syntax to HTML hard breaks\n *\n * @param {import('markdown-it')} md Markdown object\n */\nexport default function keepHardbreakSyntax(md) {\n\t// Add syntax information to hard line breaks using double spaces\n\tmd.inline.ruler.at('newline', (state, silent) => {\n\t\tconst rval = markdownitNewline(state, silent)\n\t\tif (rval && state.tokens.length && state.tokens[state.tokens.length - 1].type === 'hardbreak') state.tokens[state.tokens.length - 1].attrSet('syntax', ' ')\n\t\treturn rval\n\t})\n\n\t// Add syntax information to hard line breaks using a backslash\n\tmd.inline.ruler.at('escape', (state, silent) => {\n\t\tconst rval = markdownitEscape(state, silent)\n\t\tif (rval && state.tokens.length && state.tokens[state.tokens.length - 1].type === 'hardbreak') state.tokens[state.tokens.length - 1].attrSet('syntax', '\\\\')\n\t\treturn rval\n\t})\n\n\t// Add rule for parsing `
` tags (as we have HTML disabled)\n\tmd.inline.ruler.after('html_inline', 'html_breaks', (state) => {\n\t\tconst res = state.src.slice(state.pos).match(/^\\s*/)\n\n\t\tif (res) {\n\t\t\tconst token = state.push('hardbreak', 'br', 0)\n\t\t\ttoken.attrPush(['syntax', 'html'])\n\t\t\tstate.pos += res[0].length\n\t\t\treturn true\n\t\t}\n\t\treturn false\n\t})\n\n\t// Adds syntax attribute to `
` and fixes issue #3370 (no additional newline after `
`)\n\tmd.renderer.rules.hardbreak = (tokens, idx, options) => `
`\n}\n","/**\n * @copyright Copyright (c) 2022\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n */\n\n/**\n * Add a mark for keeping special markdown syntax unescaped\n *\n * @param {object} md Markdown object\n */\nexport default function keepSyntax(md) {\n\t// Extracting named groups as positive lookbehind patterns are not supported by Safari\n\tconst escaped = /(\\n(?[#\\-*+>])|(?[`*\\\\~[\\]]+))/\n\n\tmd.core.ruler.before('text_join', 'tag-markdown-syntax', state => {\n\t\tconst open = new state.Token('keep_md_open', 'span', 1)\n\t\topen.attrSet('class', 'keep-md')\n\t\tconst close = new state.Token('keep_md_close', 'span', -1)\n\n\t\tfor (let i = 0; i < state.tokens.length; i++) {\n\t\t\tconst block = state.tokens[i]\n\t\t\tif (block.type !== 'inline') continue\n\n\t\t\tfor (let j = 0; j < block.children.length; j++) {\n\t\t\t\tconst token = block.children[j]\n\t\t\t\tif (token.type === 'text') {\n\t\t\t\t\tconst match = escaped.exec(token.content)\n\t\t\t\t\tif (match) {\n\t\t\t\t\t\tconst index = match.groups.linestart ? match.index + 1 : match.index\n\t\t\t\t\t\tconst matchChars = match.groups.linestart ?? match.groups.special\n\t\t\t\t\t\tconst contentNext = index + matchChars.length\n\t\t\t\t\t\tblock.children.splice(j, 1,\n\t\t\t\t\t\t\tObject.assign({}, token, { content: token.content.slice(0, index) }),\n\t\t\t\t\t\t\tObject.assign({}, open),\n\t\t\t\t\t\t\tObject.assign({}, token, { content: token.content.slice(index, contentNext) }),\n\t\t\t\t\t\t\tObject.assign({}, close),\n\t\t\t\t\t\t\tObject.assign({}, token, { content: token.content.slice(contentNext) }),\n\t\t\t\t\t\t)\n\t\t\t\t\t\tj += 3\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn false\n\t})\n}\n","/*\n * @copyright Copyright (c) 2021 Julius Härtl \n *\n * @author Julius Härtl \n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n */\n\nimport store, { textModule } from '../store/index.js'\n\n/**\n * This mixin is required since we cannot be sure that the root Vue instance has\n * registered the global store. This might be the case if the text app components\n * are mounted in other apps e.g. viewer\n */\nexport default {\n\tdata() {\n\t\treturn {\n\t\t\t$store: store,\n\t\t}\n\t},\n\tbeforeMount() {\n\t\tif (typeof this.$store === 'undefined') {\n\t\t\t// Store is undefined, e.g. when used through `viewer.js`\n\t\t\tthis.$store = store\n\t\t} else if (!this.$store.hasModule('text')) {\n\t\t\t// Store lacks text modul (another store exists), e.g. when used as component via NPM package\n\t\t\tthis.$store.registerModule('text', textModule)\n\t\t}\n\t},\n}\n","/**\n * @copyright Copyright (c) 2022 Max \n *\n * @author Max \n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n */\n\nimport { generateUrl, generateRemoteUrl } from '@nextcloud/router'\nimport pathNormalize from 'path-normalize'\nimport axios from '@nextcloud/axios'\nimport { formatFileSize } from '@nextcloud/files'\n\nimport { logger } from '../helpers/logger.js'\n\nexport default class AttachmentResolver {\n\n\t#session\n\t#user\n\t#shareToken\n\t#currentDirectory\n\t#attachmentDirectory\n\n\tATTACHMENT_TYPE_IMAGE = 'image'\n\tATTACHMENT_TYPE_MEDIA = 'media'\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\tfileId ||= session?.documentId\n\t\tthis.#attachmentDirectory = `.attachments.${fileId}`\n\t}\n\n\t/*\n\t * Resolve a given src.\n\t * @param { string } the original src in the node.\n\t * @param { bool } choose to fetch the raw image or a preview | default = false\n\t * @returns { Array } - resolved candidates to try.\n\t *\n\t * Currently returns either one or two urls.\n\t */\n\tasync resolve(src, preferRawImage = false) {\n\t\tif (this.#session && src.startsWith('text://')) {\n\t\t\tconst imageFileName = getQueryVariable(src, 'imageFileName')\n\t\t\treturn [{\n\t\t\t\ttype: this.ATTACHMENT_TYPE_IMAGE,\n\t\t\t\turl: this.#getImageAttachmentUrl(imageFileName, preferRawImage),\n\t\t\t}]\n\t\t}\n\n\t\t// Has session and URL points to attachment from current document\n\t\tif (this.#session && src.startsWith(`.attachments.${this.#session?.documentId}/`)) {\n\t\t\tconst imageFileName = decodeURIComponent(src.replace(`.attachments.${this.#session?.documentId}/`, '').split('?')[0])\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\ttype: this.ATTACHMENT_TYPE_IMAGE,\n\t\t\t\t\turl: this.#getImageAttachmentUrl(imageFileName, preferRawImage),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttype: this.ATTACHMENT_TYPE_MEDIA,\n\t\t\t\t\turl: this.#getMediaPreviewUrl(imageFileName),\n\t\t\t\t\tname: imageFileName,\n\t\t\t\t},\n\t\t\t]\n\t\t}\n\n\t\tif (isDirectUrl(src)) {\n\t\t\treturn [{\n\t\t\t\ttype: this.ATTACHMENT_TYPE_IMAGE,\n\t\t\t\turl: src,\n\t\t\t}]\n\t\t}\n\n\t\tif (hasPreview(src)) { // && this.#mime !== 'image/gif') {\n\t\t\treturn [{\n\t\t\t\ttype: this.ATTACHMENT_TYPE_IMAGE,\n\t\t\t\turl: this.#previewUrl(src),\n\t\t\t}]\n\t\t}\n\n\t\t// Has session and URL points to attachment from a (different) text document\n\t\tif (this.#session && src.match(/^\\.attachments\\.\\d+\\//)) {\n\t\t\tconst imageFileName = this.#relativePath(src)\n\t\t\t\t.replace(/\\.attachments\\.\\d+\\//, '')\n\t\t\t// Try webdav URL, use attachment API as fallback\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\ttype: this.ATTACHMENT_TYPE_IMAGE,\n\t\t\t\t\turl: this.#davUrl(src),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttype: this.ATTACHMENT_TYPE_IMAGE,\n\t\t\t\t\turl: this.#getImageAttachmentUrl(imageFileName, preferRawImage),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttype: this.ATTACHMENT_TYPE_MEDIA,\n\t\t\t\t\turl: this.#getMediaPreviewUrl(imageFileName),\n\t\t\t\t\tname: imageFileName,\n\t\t\t\t},\n\t\t\t]\n\t\t}\n\n\t\t// Doesn't have session and URL points to attachment from (current or different) text document\n\t\tif (!this.#session && src.match(/^\\.attachments\\.\\d+\\//)) {\n\t\t\tconst imageFileName = this.#relativePath(src)\n\t\t\t\t.replace(/\\.attachments\\.\\d+\\//, '')\n\t\t\tconst { mimeType, size } = await this.getMetadata(this.#davUrl(src))\n\t\t\t// Without session, use webdav URL for images and mimetype icon for media attachments\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\ttype: this.ATTACHMENT_TYPE_IMAGE,\n\t\t\t\t\turl: this.#davUrl(src),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttype: this.ATTACHMENT_TYPE_MEDIA,\n\t\t\t\t\turl: this.getMimeUrl(mimeType),\n\t\t\t\t\tmetadata: { size },\n\t\t\t\t\tname: imageFileName,\n\t\t\t\t},\n\t\t\t]\n\t\t}\n\n\t\treturn [{\n\t\t\ttype: this.ATTACHMENT_TYPE_IMAGE,\n\t\t\turl: this.#davUrl(src),\n\t\t}]\n\t}\n\n\t#getImageAttachmentUrl(imageFileName, preferRawImage = false) {\n\t\tif (!this.#session) {\n\t\t\treturn this.#davUrl(\n\t\t\t\t`${this.#attachmentDirectory}/${imageFileName}`,\n\t\t\t)\n\t\t}\n\n\t\tif (this.#user || !this.#shareToken) {\n\t\t\treturn generateUrl('/apps/text/image?documentId={documentId}&sessionId={sessionId}&sessionToken={sessionToken}&imageFileName={imageFileName}&preferRawImage={preferRawImage}', {\n\t\t\t\t...this.#textApiParams(),\n\t\t\t\timageFileName,\n\t\t\t\tpreferRawImage: preferRawImage ? 1 : 0,\n\t\t\t})\n\t\t}\n\n\t\treturn generateUrl('/apps/text/image?documentId={documentId}&sessionId={sessionId}&sessionToken={sessionToken}&imageFileName={imageFileName}&shareToken={shareToken}&preferRawImage={preferRawImage}', {\n\t\t\t...this.#textApiParams(),\n\t\t\timageFileName,\n\t\t\tshareToken: this.#shareToken,\n\t\t\tpreferRawImage: preferRawImage ? 1 : 0,\n\t\t})\n\t}\n\n\t#getMediaPreviewUrl(mediaFileName) {\n\t\tif (this.#user || !this.#shareToken) {\n\t\t\treturn generateUrl('/apps/text/mediaPreview?documentId={documentId}&sessionId={sessionId}&sessionToken={sessionToken}&mediaFileName={mediaFileName}', {\n\t\t\t\t...this.#textApiParams(),\n\t\t\t\tmediaFileName,\n\t\t\t})\n\t\t}\n\n\t\treturn generateUrl('/apps/text/mediaPreview?documentId={documentId}&sessionId={sessionId}&sessionToken={sessionToken}&mediaFileName={mediaFileName}&shareToken={shareToken}', {\n\t\t\t...this.#textApiParams(),\n\t\t\tmediaFileName,\n\t\t\tshareToken: this.#shareToken,\n\t\t})\n\t}\n\n\tgetMediaMetadataUrl(mediaFileName) {\n\t\tif (this.#user || !this.#shareToken) {\n\t\t\treturn generateUrl('/apps/text/mediaMetadata?documentId={documentId}&sessionId={sessionId}&sessionToken={sessionToken}&mediaFileName={mediaFileName}', {\n\t\t\t\t...this.#textApiParams(),\n\t\t\t\tmediaFileName,\n\t\t\t})\n\t\t}\n\n\t\treturn generateUrl('/apps/text/mediaMetadata?documentId={documentId}&sessionId={sessionId}&sessionToken={sessionToken}&mediaFileName={mediaFileName}&shareToken={shareToken}', {\n\t\t\t...this.#textApiParams(),\n\t\t\tmediaFileName,\n\t\t\tshareToken: this.#shareToken,\n\t\t})\n\t}\n\n\t#textApiParams() {\n\t\tif (this.#session) {\n\t\t\treturn {\n\t\t\t\tdocumentId: this.#session.documentId,\n\t\t\t\tsessionId: this.#session.id,\n\t\t\t\tsessionToken: this.#session.token,\n\t\t\t}\n\t\t}\n\n\t\treturn {}\n\t}\n\n\t#previewUrl(src) {\n\t\tconst imageFileId = getQueryVariable(src, 'fileId')\n\t\tconst path = this.#filePath(src)\n\t\tconst fileQuery = `file=${encodeURIComponent(path)}`\n\t\tconst query = fileQuery + '&x=1024&y=1024&a=true'\n\n\t\tif (this.#user && imageFileId) {\n\t\t\treturn generateUrl(`/core/preview?fileId=${imageFileId}&${query}`)\n\t\t}\n\n\t\tif (this.#user) {\n\t\t\treturn generateUrl(`/core/preview.png?${query}`)\n\t\t}\n\n\t\tif (this.#shareToken) {\n\t\t\treturn generateUrl(`/apps/files_sharing/publicpreview/${this.#shareToken}?${query}`)\n\t\t}\n\n\t\tlogger.error('No way to authenticate image retrival - need to be logged in or provide a token')\n\t\treturn src\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\tif (src.startsWith('text://')) {\n\t\t\treturn [\n\t\t\t\tthis.#attachmentDirectory,\n\t\t\t\tgetQueryVariable(src, 'imageFileName'),\n\t\t\t].join('/')\n\t\t}\n\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\tasync getMetadata(src) {\n\t\tconst headResponse = await axios.head(src)\n\t\tconst mimeType = headResponse.headers['content-type']\n\t\tconst size = formatFileSize(headResponse.headers['content-length'])\n\t\treturn { mimeType, size }\n\t}\n\n\tgetMimeUrl(mimeType) {\n\t\treturn mimeType ? OC.MimeType.getIconUrl(mimeType) : null\n\t}\n\n}\n\n/**\n * Check if a url can be loaded directly - i.e. is one of\n * - remote url\n * - data url\n * - preview url\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\t\t|| src.match(/^(\\/index.php)?\\/core\\/preview/)\n\t\t|| src.match(/^(\\/index.php)?\\/apps\\/files_sharing\\/publicpreview\\//)\n}\n\n/**\n * Check if the given url has a preview\n *\n * @param {string} src - the url to check\n */\nfunction hasPreview(src) {\n\treturn getQueryVariable(src, 'hasPreview') === 'true'\n}\n\n/**\n * Extract the value of a query variable from the given url\n *\n * @param {string} src - the url to extract query variable from\n * @param {string} variable - name of the variable to read out\n */\nfunction getQueryVariable(src, variable) {\n\tconst query = src.split('?')[1]\n\n\tif (typeof query === 'undefined') {\n\t\treturn\n\t}\n\n\tconst vars = query.split(/[&#]/)\n\n\tif (typeof vars === 'undefined') {\n\t\treturn\n\t}\n\n\tfor (let i = 0; i < vars.length; i++) {\n\t\tconst pair = vars[i].split('=')\n\t\tif (decodeURIComponent(pair[0]) === variable) {\n\t\t\treturn decodeURIComponent(pair[1])\n\t\t}\n\t}\n}\n","/**\n * @copyright Copyright (c) 2022 Max \n *\n * @author Max \n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\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 }) {\n\t\treturn axios.put(this.#url('session/create'), {\n\t\t\tfileId,\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.closed = false\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 #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, autosaveContent, documentState, force, manualSave }) {\n\t\treturn this.#post(this.#url('session/sync'), {\n\t\t\t...this.#defaultParams,\n\t\t\tfilePath: this.#options.filePath,\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/push'), {\n\t\t\t...this.#defaultParams,\n\t\t\tfilePath: this.#options.filePath,\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'), {\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\tconst promise = this.#post(this.#url('session/close'), this.#defaultParams)\n\t\tthis.closed = true\n\t\treturn promise\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 * @copyright Copyright (c) 2019 Julius Härtl \n *\n * @author Julius Härtl \n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\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 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\ttry {\n\t\t\tlogger.debug('[PollingBackend] Fetching steps', this.#syncService.version)\n\t\t\tconst response = await this.#connection.sync({\n\t\t\t\tversion: this.#syncService.version,\n\t\t\t\tforce: false,\n\t\t\t\tmanualSave: false,\n\t\t\t})\n\t\t\tthis._handleResponse(response)\n\t\t} catch (e) {\n\t\t\tthis._handleError(e)\n\t\t} finally {\n\t\t\tthis.#lastPoll = Date.now()\n\t\t\tthis.#pollActive = false\n\t\t}\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 (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 === 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\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","/* eslint-disable jsdoc/valid-types */\n/**\n * @copyright Copyright (c) 2019 Julius Härtl \n *\n * @author Julius Härtl \n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n */\nimport mitt from 'mitt'\nimport debounce from 'debounce'\n\nimport PollingBackend from './PollingBackend.js'\nimport SessionApi, { Connection } from './SessionApi.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\nclass SyncService {\n\n\t#sendIntervalId\n\n\tconstructor({ 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.sessions = []\n\n\t\tthis.steps = []\n\t\tthis.stepClientIDs = []\n\n\t\tthis.lastStepPush = Date.now()\n\n\t\tthis.version = null\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\tasync open({ fileId, initialSession }) {\n\t\tconst onChange = ({ sessions }) => {\n\t\t\tthis.sessions = sessions\n\t\t}\n\t\tthis.on('change', onChange)\n\n\t\tconst connect = initialSession\n\t\t\t? Promise.resolve(new Connection({ data: initialSession }, {}))\n\t\t\t: this._api.open({ fileId })\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\tthis.off('change', onChange)\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.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\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}).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 === 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}\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\tthis.steps = [...this.steps, ...awareness.map(s => s.step)]\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\tthis.steps.push(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.sync({\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}\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 })\n\t}\n\n\tasync close() {\n\t\tthis.backend?.disconnect()\n\t\treturn this._close()\n\t}\n\n\t_close() {\n\t\tif (this.connection === null) {\n\t\t\treturn Promise.resolve()\n\t\t}\n\t\tthis.backend.disconnect()\n\t\treturn this.connection.close()\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","export const SET_VIEW_WIDTH = 'SET_VIEW_WIDTH'\nexport const SET_SHOW_AUTHOR_ANNOTATIONS = 'SET_SHOW_AUTHOR_ANNOTATIONS'\nexport const SET_CURRENT_SESSION = 'SET_CURRENT_SESSION'\nexport const SET_HEADINGS = 'SET_HEADINGS'\n","/**\n * @copyright Copyright (c) 2022 Vinicius Reis \n *\n * @author Vinicius Reis \n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n */\nimport debounce from 'debounce'\nimport { SET_VIEW_WIDTH } from './mutation-types.js'\n\nconst getClientWidth = () => document.documentElement.clientWidth\n\nconst plugin = ({ commit }) => {\n\tconst onResize = debounce(() => {\n\t\tcommit(`text/${SET_VIEW_WIDTH}`, getClientWidth())\n\t}, 100)\n\n\twindow.addEventListener('resize', onResize)\n}\n\nexport { getClientWidth }\n\nexport default plugin\n","/*\n * @copyright Copyright (c) 2020 Julius Härtl \n *\n * @author Julius Härtl \n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n */\n\nimport Vue from 'vue'\nimport Vuex, { Store } from 'vuex'\nimport { getBuilder } from '@nextcloud/browser-storage'\n\nimport {\n\tSET_SHOW_AUTHOR_ANNOTATIONS,\n\tSET_CURRENT_SESSION,\n\tSET_VIEW_WIDTH,\n\tSET_HEADINGS,\n} from './mutation-types.js'\nimport plugin, { getClientWidth } from './plugin.js'\n\nconst persistentStorage = getBuilder('text').persist().build()\n\nVue.use(Vuex)\n\nexport const textModule = {\n\tstate: {\n\t\tshowAuthorAnnotations: persistentStorage.getItem('showAuthorAnnotations') === 'true',\n\t\tcurrentSession: persistentStorage.getItem('currentSession'),\n\t\tviewWidth: getClientWidth(),\n\t\theadings: Object.freeze([]),\n\t},\n\tmutations: {\n\t\t[SET_VIEW_WIDTH](state, value) {\n\t\t\tstate.viewWidth = value\n\t\t},\n\t\t[SET_SHOW_AUTHOR_ANNOTATIONS](state, value) {\n\t\t\tstate.showAuthorAnnotations = value\n\t\t\tpersistentStorage.setItem('showAuthorAnnotations', '' + value)\n\t\t},\n\t\t[SET_CURRENT_SESSION](state, value) {\n\t\t\tstate.currentSession = value\n\t\t\tpersistentStorage.setItem('currentSession', value)\n\t\t},\n\t\t[SET_HEADINGS](state, value) {\n\t\t\tif (state.headings.length !== value.length) {\n\t\t\t\tstate.headings = Object.freeze(value)\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// merge with previous position\n\t\t\tconst old = state.headings\n\t\t\tconst headings = value.map((row, index) => {\n\t\t\t\tconst previous = old[index].level\n\n\t\t\t\treturn Object.freeze({\n\t\t\t\t\t...row,\n\t\t\t\t\tprevious,\n\t\t\t\t})\n\t\t\t})\n\n\t\t\tstate.headings = Object.freeze(headings)\n\t\t},\n\t},\n\tactions: {\n\t\tsetShowAuthorAnnotations({ commit }, value) {\n\t\t\tcommit(SET_SHOW_AUTHOR_ANNOTATIONS, value)\n\t\t},\n\t\tsetCurrentSession({ commit }, value) {\n\t\t\tcommit(SET_CURRENT_SESSION, value)\n\t\t},\n\t\tsetHeadings({ commit }, value) {\n\t\t\tcommit(SET_HEADINGS, value)\n\t\t},\n\t},\n}\n\nconst store = new Store({\n\tplugins: [plugin],\n\tmodules: {\n\t\ttext: {\n\t\t\tnamespaced: true,\n\t\t\t...textModule,\n\t\t},\n\t},\n})\n\nexport default store\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".text-menubar .entry-action.is-active:not(.entry-action-item),.v-popper__inner .entry-action.is-active:not(.entry-action-item),.text-menubar button.entry-action__button.is-active,.v-popper__inner button.entry-action__button.is-active{opacity:1;background-color:var(--color-primary-light);border-radius:50%}.text-menubar .entry-action.is-active:not(.entry-action-item) .material-design-icon>svg,.v-popper__inner .entry-action.is-active:not(.entry-action-item) .material-design-icon>svg,.text-menubar button.entry-action__button.is-active .material-design-icon>svg,.v-popper__inner button.entry-action__button.is-active .material-design-icon>svg{fill:var(--color-primary)}.text-menubar button.entry-action__button,.v-popper__inner button.entry-action__button{height:44px;margin:0;border:0;position:relative;color:var(--color-main-text);background-color:rgba(0,0,0,0);vertical-align:top;box-shadow:none;padding:0}.text-menubar button.entry-action__button p,.v-popper__inner button.entry-action__button p{padding:0}.text-menubar button.entry-action__button:is(li.entry-action-item button),.v-popper__inner button.entry-action__button:is(li.entry-action-item button){padding:0 .5em 0 0}.text-menubar button.entry-action__button:not(li.entry-action-item button),.v-popper__inner button.entry-action__button:not(li.entry-action-item button){width:44px}.text-menubar button.entry-action__button:hover,.text-menubar button.entry-action__button:focus,.text-menubar button.entry-action__button:active,.v-popper__inner button.entry-action__button:hover,.v-popper__inner button.entry-action__button:focus,.v-popper__inner button.entry-action__button:active{background-color:var(--color-background-dark)}.text-menubar button.entry-action__button:hover:not(:disabled),.text-menubar button.entry-action__button:focus:not(:disabled),.text-menubar button.entry-action__button:active:not(:disabled),.v-popper__inner button.entry-action__button:hover:not(:disabled),.v-popper__inner button.entry-action__button:focus:not(:disabled),.v-popper__inner button.entry-action__button:active:not(:disabled){box-shadow:var(--color-primary)}.text-menubar button.entry-action__button:hover,.text-menubar button.entry-action__button:focus,.v-popper__inner button.entry-action__button:hover,.v-popper__inner button.entry-action__button:focus{opacity:1}.text-menubar button.entry-action__button:focus-visible,.v-popper__inner button.entry-action__button:focus-visible{box-shadow:var(--color-primary)}.text-menubar .entry-action.entry-action-item.is-active,.v-popper__inner .entry-action.entry-action-item.is-active{background-color:var(--color-primary-light);border-radius:var(--border-radius-large)}.text-menubar .button-vue svg,.v-popper__inner .button-vue svg{fill:var(--color-main-text)}.text-menubar .action-item__menutoggle.action-item__menutoggle--with-icon-slot,.v-popper__inner .action-item__menutoggle.action-item__menutoggle--with-icon-slot{opacity:1}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/Menu/ActionEntry.scss\"],\"names\":[],\"mappings\":\"AAAA,0OACC,SAAA,CACA,2CAAA,CACA,iBAAA,CACA,kVACC,yBAAA,CAKD,uFACC,WAAA,CACA,QAAA,CACA,QAAA,CAEA,iBAAA,CACA,4BAAA,CACA,8BAAA,CACA,kBAAA,CACA,eAAA,CACA,SAAA,CAEA,2FACC,SAAA,CAGD,uJACC,kBAAA,CAGD,yJACC,UAAA,CAGD,2SAGC,6CAAA,CACA,qYACC,+BAAA,CAIF,sMAEC,SAAA,CAED,mHACC,+BAAA,CAaD,mHACC,2CAAA,CACA,wCAAA,CAKD,+DACC,2BAAA,CAIF,iKACC,SAAA\",\"sourcesContent\":[\"%text__is-active-item-btn {\\n\\topacity: 1;\\n\\tbackground-color: var(--color-primary-light);\\n\\tborder-radius: 50%;\\n\\t.material-design-icon > svg {\\n\\t\\tfill: var(--color-primary);\\n\\t}\\n}\\n\\n.text-menubar, .v-popper__inner {\\n\\tbutton.entry-action__button {\\n\\t\\theight: 44px;\\n\\t\\tmargin: 0;\\n\\t\\tborder: 0;\\n\\t\\t// opacity: 0.5;\\n\\t\\tposition: relative;\\n\\t\\tcolor: var(--color-main-text);\\n\\t\\tbackground-color: transparent;\\n\\t\\tvertical-align: top;\\n\\t\\tbox-shadow: none;\\n\\t\\tpadding: 0;\\n\\n\\t\\tp {\\n\\t\\t\\tpadding: 0;\\n\\t\\t}\\n\\n\\t\\t&:is(li.entry-action-item button) {\\n\\t\\t\\tpadding: 0 0.5em 0 0;\\n\\t\\t}\\n\\n\\t\\t&:not(li.entry-action-item button) {\\n\\t\\t\\twidth: 44px;\\n\\t\\t}\\n\\n\\t\\t&:hover,\\n\\t\\t&:focus,\\n\\t\\t&:active {\\n\\t\\t\\tbackground-color: var(--color-background-dark);\\n\\t\\t\\t&:not(:disabled) {\\n\\t\\t\\t\\tbox-shadow: var(--color-primary);\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t&:hover,\\n\\t\\t&:focus {\\n\\t\\t\\topacity: 1;\\n\\t\\t}\\n\\t\\t&:focus-visible {\\n\\t\\t\\tbox-shadow: var(--color-primary);\\n\\t\\t}\\n\\n\\t\\t&.is-active {\\n\\t\\t\\t@extend %text__is-active-item-btn;\\n\\t\\t}\\n\\t}\\n\\n\\t.entry-action.is-active:not(.entry-action-item) {\\n\\t\\t@extend %text__is-active-item-btn;\\n\\t}\\n\\n\\t.entry-action.entry-action-item {\\n\\t\\t&.is-active {\\n\\t\\t\\tbackground-color: var(--color-primary-light);\\n\\t\\t\\tborder-radius: var(--border-radius-large);\\n\\t\\t}\\n\\t}\\n\\n\\t.button-vue {\\n\\t\\tsvg {\\n\\t\\t\\tfill: var(--color-main-text);\\n\\t\\t}\\n\\t}\\n\\n\\t.action-item__menutoggle.action-item__menutoggle--with-icon-slot {\\n\\t\\topacity: 1;\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".editor__content[data-v-a4201d8a]{max-width:var(--text-editor-max-width);margin:auto;position:relative;width:100%}.text-editor__content-wrapper[data-v-a4201d8a]{--side-width: calc((100% - var(--text-editor-max-width)) / 2);display:grid;grid-template-columns:1fr auto}.text-editor__content-wrapper.--show-outline[data-v-a4201d8a]{grid-template-columns:var(--side-width) auto var(--side-width)}.text-editor__content-wrapper .text-editor__content-wrapper__left[data-v-a4201d8a],.text-editor__content-wrapper .text-editor__content-wrapper__right[data-v-a4201d8a]{height:100%;position:relative}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/BaseReader.vue\"],\"names\":[],\"mappings\":\"AACA,kCACC,sCAAA,CACA,WAAA,CACA,iBAAA,CACA,UAAA,CAGD,+CACC,6DAAA,CACA,YAAA,CACA,8BAAA,CACA,8DACC,8DAAA,CAED,uKAEC,WAAA,CACA,iBAAA\",\"sourcesContent\":[\"\\n.editor__content {\\n\\tmax-width: var(--text-editor-max-width);\\n\\tmargin: auto;\\n\\tposition: relative;\\n\\twidth: 100%;\\n}\\n\\n.text-editor__content-wrapper {\\n\\t--side-width: calc((100% - var(--text-editor-max-width)) / 2);\\n\\tdisplay: grid;\\n\\tgrid-template-columns: 1fr auto;\\n\\t&.--show-outline {\\n\\t\\tgrid-template-columns: var(--side-width) auto var(--side-width);\\n\\t}\\n\\t.text-editor__content-wrapper__left,\\n\\t.text-editor__content-wrapper__right {\\n\\t\\theight: 100%;\\n\\t\\tposition: relative;\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"#resolve-conflicts[data-v-44412072]{display:flex;width:100%;margin:auto;padding:20px 0}#resolve-conflicts button[data-v-44412072]{margin:auto}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/CollisionResolveDialog.vue\"],\"names\":[],\"mappings\":\"AACA,oCACC,YAAA,CACA,UAAA,CACA,WAAA,CACA,cAAA,CAEA,2CACC,WAAA\",\"sourcesContent\":[\"\\n#resolve-conflicts {\\n\\tdisplay: flex;\\n\\twidth: 100%;\\n\\tmargin: auto;\\n\\tpadding: 20px 0;\\n\\n\\tbutton {\\n\\t\\tmargin: auto;\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".modal-container .text-editor[data-v-23f89298]{top:0;height:calc(100vh - var(--header-height))}.text-editor[data-v-23f89298]{display:block;width:100%;max-width:100%;height:100%;left:0;margin:0 auto;position:relative;background-color:var(--color-main-background)}.text-editor .text-editor__wrapper.has-conflicts[data-v-23f89298]{height:calc(100% - 50px)}#body-public[data-v-23f89298]{height:auto}#files-public-content .text-editor[data-v-23f89298]{top:0;width:100%}#files-public-content .text-editor .text-editor__main[data-v-23f89298]{overflow:auto;z-index:20}#files-public-content .text-editor .has-conflicts .text-editor__main[data-v-23f89298]{padding-top:0}.menubar-placeholder[data-v-23f89298],.text-editor--readonly-bar[data-v-23f89298]{position:fixed;position:-webkit-sticky;position:sticky;top:0;opacity:0;visibility:hidden;height:44px;padding-top:3px;padding-bottom:3px}.text-editor--readonly-bar[data-v-23f89298],.menubar-placeholder--with-slot[data-v-23f89298]{opacity:unset;visibility:unset;z-index:50;max-width:var(--text-editor-max-width);margin:auto;width:100%;background-color:var(--color-main-background)}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/Editor.vue\"],\"names\":[],\"mappings\":\"AACA,+CACC,KAAA,CACA,yCAAA,CAGD,8BACC,aAAA,CACA,UAAA,CACA,cAAA,CACA,WAAA,CACA,MAAA,CACA,aAAA,CACA,iBAAA,CACA,6CAAA,CAGD,kEACC,wBAAA,CAGD,8BACC,WAAA,CAIA,oDACC,KAAA,CACA,UAAA,CAEA,uEACC,aAAA,CACA,UAAA,CAED,sFACC,aAAA,CAKH,kFAEC,cAAA,CACA,uBAAA,CACA,eAAA,CACA,KAAA,CACA,SAAA,CACA,iBAAA,CACA,WAAA,CACA,eAAA,CACA,kBAAA,CAGD,6FAEC,aAAA,CACA,gBAAA,CAEA,UAAA,CACA,sCAAA,CACA,WAAA,CACA,UAAA,CACA,6CAAA\",\"sourcesContent\":[\"\\n.modal-container .text-editor {\\n\\ttop: 0;\\n\\theight: calc(100vh - var(--header-height));\\n}\\n\\n.text-editor {\\n\\tdisplay: block;\\n\\twidth: 100%;\\n\\tmax-width: 100%;\\n\\theight: 100%;\\n\\tleft: 0;\\n\\tmargin: 0 auto;\\n\\tposition: relative;\\n\\tbackground-color: var(--color-main-background);\\n}\\n\\n.text-editor .text-editor__wrapper.has-conflicts {\\n\\theight: calc(100% - 50px);\\n}\\n\\n#body-public {\\n\\theight: auto;\\n}\\n\\n#files-public-content {\\n\\t.text-editor {\\n\\t\\ttop: 0;\\n\\t\\twidth: 100%;\\n\\n\\t\\t.text-editor__main {\\n\\t\\t\\toverflow: auto;\\n\\t\\t\\tz-index: 20;\\n\\t\\t}\\n\\t\\t.has-conflicts .text-editor__main {\\n\\t\\t\\tpadding-top: 0;\\n\\t\\t}\\n\\t}\\n}\\n\\n.menubar-placeholder,\\n.text-editor--readonly-bar {\\n\\tposition: fixed;\\n\\tposition: -webkit-sticky;\\n\\tposition: sticky;\\n\\ttop: 0;\\n\\topacity: 0;\\n\\tvisibility: hidden;\\n\\theight: 44px; // important for mobile so that the buttons are always inside the container\\n\\tpadding-top:3px;\\n\\tpadding-bottom: 3px;\\n}\\n\\n.text-editor--readonly-bar,\\n.menubar-placeholder--with-slot {\\n\\topacity: unset;\\n\\tvisibility: unset;\\n\\n\\tz-index: 50;\\n\\tmax-width: var(--text-editor-max-width);\\n\\tmargin: auto;\\n\\twidth: 100%;\\n\\tbackground-color: var(--color-main-background);\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_GET_URL_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/getUrl.js\";\nvar ___CSS_LOADER_URL_IMPORT_0___ = new URL(\"../../img/checkbox-mark.svg\", import.meta.url);\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\nvar ___CSS_LOADER_URL_REPLACEMENT_0___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_0___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \":root{--text-editor-max-width: 670px }.modal-container .text-editor{position:absolute}.ProseMirror-hideselection{caret-color:rgba(0,0,0,0);color:var(--color-main-text)}.ProseMirror-hideselection *::selection{background:rgba(0,0,0,0);color:var(--color-main-text)}.ProseMirror-hideselection *::-moz-selection{background:rgba(0,0,0,0);color:var(--color-main-text)}.ProseMirror-selectednode{outline:2px solid #8cf}li.ProseMirror-selectednode{outline:none}li.ProseMirror-selectednode:after{content:\\\"\\\";position:absolute;left:-32px;right:-2px;top:-2px;bottom:-2px;border:2px solid #8cf;pointer-events:none}.has-conflicts .ProseMirror-menubar,.text-editor__wrapper.icon-loading .ProseMirror-menubar{display:none}.ProseMirror-gapcursor{display:none;pointer-events:none;position:absolute}.ProseMirror-gapcursor:after{content:\\\"\\\";display:block;position:absolute;top:-2px;width:20px;border-top:1px solid var(--color-main-text);animation:ProseMirror-cursor-blink 1.1s steps(2, start) infinite}@keyframes ProseMirror-cursor-blink{to{visibility:hidden}}.animation-rotate{animation:rotate var(--animation-duration, 0.8s) linear infinite}[data-handler=text]{background-color:var(--color-main-background);border-top:3px solid var(--color-primary-element)}[data-handler=text] .modal-title{font-weight:bold}@keyframes fadeInDown{from{opacity:0;transform:translate3d(0, -100%, 0)}to{opacity:1;transform:translate3d(0, 0, 0)}}@keyframes fadeInLeft{from{opacity:0;transform:translate3d(-100%, 0, 0)}to{opacity:1;transform:translate3d(0, 0, 0)}}.fadeInLeft{animation-name:fadeInLeft}@media print{@page{size:A4;margin:2.5cm 2cm 2cm 2.5cm}body{position:absolute;overflow:visible !important}#viewer[data-handler=text]{border:none;width:100% !important;position:absolute !important}#viewer[data-handler=text] .modal-header{display:none !important}#viewer[data-handler=text] .modal-container{top:0px;height:fit-content}.text-editor .text-menubar{display:none !important}.text-editor .action-item{display:none !important}.text-editor .editor__content{max-width:100%}.text-editor .text-editor__wrapper{height:fit-content;position:unset}.text-editor div.ProseMirror h1,.text-editor div.ProseMirror h2,.text-editor div.ProseMirror h3,.text-editor div.ProseMirror h4,.text-editor div.ProseMirror h5{break-after:avoid}.text-editor div.ProseMirror .image,.text-editor div.ProseMirror img,.text-editor div.ProseMirror table{break-inside:avoid-page;max-width:90% !important;margin:5vw auto 5vw 5% !important}.text-editor div.ProseMirror th{color:#000 !important;font-weight:bold !important;border-width:0 1px 2px 0 !important;border-color:gray !important;border-style:none solid solid none !important}.text-editor div.ProseMirror th:last-of-type{border-width:0 0 2px 0 !important}.text-editor div.ProseMirror td{border-style:none solid none none !important;border-width:1px !important;border-color:gray !important}.text-editor div.ProseMirror td:last-of-type{border:none !important}.menubar-placeholder,.text-editor--readonly-bar{display:none}.text-editor__content-wrapper.--show-outline{display:block}.text-editor__content-wrapper .editor--outline{width:auto;height:auto;overflow:unset;position:relative}.text-editor__content-wrapper .editor--outline__btn-close{display:none}}.text-editor__wrapper div.ProseMirror{height:100%;position:relative;word-wrap:break-word;white-space:pre-wrap;-webkit-font-variant-ligatures:none;font-variant-ligatures:none;padding:4px 8px 200px 14px;line-height:150%;font-size:var(--default-font-size);outline:none;--table-color-border: var(--color-border);--table-color-heading: var(--color-text-maxcontrast);--table-color-heading-border: var(--color-border-dark);--table-color-background: var(--color-main-background);--table-color-background-hover: var(--color-primary-light);--table-border-radius: var(--border-radius)}.text-editor__wrapper div.ProseMirror :target{scroll-margin-top:50px}.text-editor__wrapper div.ProseMirror[contenteditable=true],.text-editor__wrapper div.ProseMirror[contenteditable=false],.text-editor__wrapper div.ProseMirror [contenteditable=true],.text-editor__wrapper div.ProseMirror [contenteditable=false]{width:100%;background-color:rgba(0,0,0,0);color:var(--color-main-text);opacity:1;-webkit-user-select:text;user-select:text;font-size:var(--default-font-size)}.text-editor__wrapper div.ProseMirror[contenteditable=true]:not(.collaboration-cursor__caret),.text-editor__wrapper div.ProseMirror[contenteditable=false]:not(.collaboration-cursor__caret),.text-editor__wrapper div.ProseMirror [contenteditable=true]:not(.collaboration-cursor__caret),.text-editor__wrapper div.ProseMirror [contenteditable=false]:not(.collaboration-cursor__caret){border:none !important}.text-editor__wrapper div.ProseMirror[contenteditable=true]:focus,.text-editor__wrapper div.ProseMirror[contenteditable=true]:focus-visible,.text-editor__wrapper div.ProseMirror[contenteditable=false]:focus,.text-editor__wrapper div.ProseMirror[contenteditable=false]:focus-visible,.text-editor__wrapper div.ProseMirror [contenteditable=true]:focus,.text-editor__wrapper div.ProseMirror [contenteditable=true]:focus-visible,.text-editor__wrapper div.ProseMirror [contenteditable=false]:focus,.text-editor__wrapper div.ProseMirror [contenteditable=false]:focus-visible{box-shadow:none !important}.text-editor__wrapper div.ProseMirror ul[data-type=taskList]{margin-left:1px}.text-editor__wrapper div.ProseMirror .checkbox-item{display:flex;align-items:start}.text-editor__wrapper div.ProseMirror .checkbox-item input[type=checkbox]{display:none}.text-editor__wrapper div.ProseMirror .checkbox-item:before{content:\\\"\\\";vertical-align:middle;margin:3px 6px 3px 2px;border:1px solid var(--color-text-maxcontrast);display:block;border-radius:var(--border-radius);height:14px;width:14px;box-shadow:none !important;background-position:center;cursor:pointer;left:9px}.text-editor__wrapper div.ProseMirror .checkbox-item.checked:before{background-image:url(\" + ___CSS_LOADER_URL_REPLACEMENT_0___ + \");background-color:var(--color-primary-element);border-color:var(--color-primary-element)}.text-editor__wrapper div.ProseMirror .checkbox-item.checked label{color:var(--color-text-maxcontrast);text-decoration:line-through}.text-editor__wrapper div.ProseMirror .checkbox-item label{display:block;flex-grow:1;max-width:calc(100% - 28px)}.text-editor__wrapper div.ProseMirror>*:first-child{margin-top:10px}.text-editor__wrapper div.ProseMirror>h1:first-child,.text-editor__wrapper div.ProseMirror h2:first-child,.text-editor__wrapper div.ProseMirror h3:first-child,.text-editor__wrapper div.ProseMirror h4:first-child,.text-editor__wrapper div.ProseMirror h5:first-child,.text-editor__wrapper div.ProseMirror h6:first-child{margin-top:0}.text-editor__wrapper div.ProseMirror a{color:var(--color-primary-element);text-decoration:underline;padding:.5em 0}.text-editor__wrapper div.ProseMirror p .paragraph-content{margin-bottom:1em;line-height:150%}.text-editor__wrapper div.ProseMirror em{font-style:italic}.text-editor__wrapper div.ProseMirror h1,.text-editor__wrapper div.ProseMirror h2,.text-editor__wrapper div.ProseMirror h3,.text-editor__wrapper div.ProseMirror h4,.text-editor__wrapper div.ProseMirror h5,.text-editor__wrapper div.ProseMirror h6{font-weight:600;line-height:1.1em;margin-top:24px;margin-bottom:12px;color:var(--color-main-text)}.text-editor__wrapper div.ProseMirror h1{font-size:36px}.text-editor__wrapper div.ProseMirror h2{font-size:30px}.text-editor__wrapper div.ProseMirror h3{font-size:24px}.text-editor__wrapper div.ProseMirror h4{font-size:21px}.text-editor__wrapper div.ProseMirror h5{font-size:17px}.text-editor__wrapper div.ProseMirror h6{font-size:var(--default-font-size)}.text-editor__wrapper div.ProseMirror img{cursor:default;max-width:100%}.text-editor__wrapper div.ProseMirror hr{padding:2px 0;border:none;margin:2em 0;width:100%}.text-editor__wrapper div.ProseMirror hr:after{content:\\\"\\\";display:block;height:1px;background-color:var(--color-border-dark);line-height:2px}.text-editor__wrapper div.ProseMirror pre{white-space:pre-wrap;background-color:var(--color-background-dark);border-radius:var(--border-radius);padding:1em 1.3em;margin-bottom:1em}.text-editor__wrapper div.ProseMirror pre::before{content:attr(data-language);text-transform:uppercase;display:block;text-align:right;font-weight:bold;font-size:.6rem}.text-editor__wrapper div.ProseMirror pre code .hljs-comment,.text-editor__wrapper div.ProseMirror pre code .hljs-quote{color:#999}.text-editor__wrapper div.ProseMirror pre code .hljs-variable,.text-editor__wrapper div.ProseMirror pre code .hljs-template-variable,.text-editor__wrapper div.ProseMirror pre code .hljs-attribute,.text-editor__wrapper div.ProseMirror pre code .hljs-tag,.text-editor__wrapper div.ProseMirror pre code .hljs-name,.text-editor__wrapper div.ProseMirror pre code .hljs-regexp,.text-editor__wrapper div.ProseMirror pre code .hljs-link,.text-editor__wrapper div.ProseMirror pre code .hljs-selector-id,.text-editor__wrapper div.ProseMirror pre code .hljs-selector-class{color:#f2777a}.text-editor__wrapper div.ProseMirror pre code .hljs-number,.text-editor__wrapper div.ProseMirror pre code .hljs-meta,.text-editor__wrapper div.ProseMirror pre code .hljs-built_in,.text-editor__wrapper div.ProseMirror pre code .hljs-builtin-name,.text-editor__wrapper div.ProseMirror pre code .hljs-literal,.text-editor__wrapper div.ProseMirror pre code .hljs-type,.text-editor__wrapper div.ProseMirror pre code .hljs-params{color:#f99157}.text-editor__wrapper div.ProseMirror pre code .hljs-string,.text-editor__wrapper div.ProseMirror pre code .hljs-symbol,.text-editor__wrapper div.ProseMirror pre code .hljs-bullet{color:#9c9}.text-editor__wrapper div.ProseMirror pre code .hljs-title,.text-editor__wrapper div.ProseMirror pre code .hljs-section{color:#fc6}.text-editor__wrapper div.ProseMirror pre code .hljs-keyword,.text-editor__wrapper div.ProseMirror pre code .hljs-selector-tag{color:#69c}.text-editor__wrapper div.ProseMirror pre code .hljs-emphasis{font-style:italic}.text-editor__wrapper div.ProseMirror pre code .hljs-strong{font-weight:700}.text-editor__wrapper div.ProseMirror pre.frontmatter{margin-bottom:2em;border-left:4px solid var(--color-primary-element)}.text-editor__wrapper div.ProseMirror pre.frontmatter::before{display:block;content:attr(data-title);color:var(--color-text-maxcontrast);padding-bottom:.5em}.text-editor__wrapper div.ProseMirror p code{background-color:var(--color-background-dark);border-radius:var(--border-radius);padding:.1em .3em}.text-editor__wrapper div.ProseMirror li{position:relative;padding-left:3px}.text-editor__wrapper div.ProseMirror li p .paragraph-content{margin-bottom:.5em}.text-editor__wrapper div.ProseMirror ul,.text-editor__wrapper div.ProseMirror ol{padding-left:10px;margin-left:10px;margin-bottom:1em}.text-editor__wrapper div.ProseMirror ul>li{list-style-type:disc}.text-editor__wrapper div.ProseMirror li ul>li{list-style-type:circle}.text-editor__wrapper div.ProseMirror li li ul>li{list-style-type:square}.text-editor__wrapper div.ProseMirror blockquote{padding-left:1em;border-left:4px solid var(--color-primary-element);color:var(--color-text-maxcontrast);margin-left:0;margin-right:0}.text-editor__wrapper div.ProseMirror table{border-spacing:0;width:calc(100% - 50px);table-layout:auto;white-space:normal;margin-bottom:1em}.text-editor__wrapper div.ProseMirror table{margin-top:1em}.text-editor__wrapper div.ProseMirror table td,.text-editor__wrapper div.ProseMirror table th{border:1px solid var(--table-color-border);border-left:0;vertical-align:top;max-width:100%}.text-editor__wrapper div.ProseMirror table td:first-child,.text-editor__wrapper div.ProseMirror table th:first-child{border-left:1px solid var(--table-color-border)}.text-editor__wrapper div.ProseMirror table td{padding:.5em .75em;border-top:0;color:var(--color-main-text)}.text-editor__wrapper div.ProseMirror table th{padding:0 0 0 .75em;font-weight:normal;border-bottom-color:var(--table-color-heading-border);color:var(--table-color-heading)}.text-editor__wrapper div.ProseMirror table th>div{display:flex}.text-editor__wrapper div.ProseMirror table tr{background-color:var(--table-color-background)}.text-editor__wrapper div.ProseMirror table tr:hover,.text-editor__wrapper div.ProseMirror table tr:active,.text-editor__wrapper div.ProseMirror table tr:focus{background-color:var(--table-color-background-hover)}.text-editor__wrapper div.ProseMirror table tr:first-child th:first-child{border-top-left-radius:var(--table-border-radius)}.text-editor__wrapper div.ProseMirror table tr:first-child th:last-child{border-top-right-radius:var(--table-border-radius)}.text-editor__wrapper div.ProseMirror table tr:last-child td:first-child{border-bottom-left-radius:var(--table-border-radius)}.text-editor__wrapper div.ProseMirror table tr:last-child td:last-child{border-bottom-right-radius:var(--table-border-radius)}.text-editor__wrapper .ProseMirror-focused .ProseMirror-gapcursor{display:block}.text-editor__wrapper .editor__content p.is-empty:first-child::before{content:attr(data-placeholder);float:left;color:var(--color-text-maxcontrast);pointer-events:none;height:0}.text-editor__wrapper .editor__content{tab-size:4}.text-editor__wrapper .text-editor__main.draggedOver{background-color:var(--color-primary-light)}.text-editor__wrapper .text-editor__main .text-editor__content-wrapper{position:relative}.text-editor__wrapper.has-conflicts>.editor{width:50%}.text-editor__wrapper.has-conflicts>.content-wrapper{width:50%}.text-editor__wrapper.has-conflicts>.content-wrapper #read-only-editor{margin:0px auto;padding-top:50px;overflow:initial}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.collaboration-cursor__caret{position:relative;margin-left:-1px;margin-right:-1px;border-left:1px solid #0d0d0d;border-right:1px solid #0d0d0d;word-break:normal;pointer-events:none}.collaboration-cursor__label{position:absolute;top:-1.4em;left:-1px;font-size:12px;font-style:normal;font-weight:600;line-height:normal;user-select:none;color:#0d0d0d;padding:.1rem .3rem;border-radius:3px 3px 3px 0;white-space:nowrap;opacity:0}.collaboration-cursor__label.collaboration-cursor__label__active{opacity:1}.collaboration-cursor__label:not(.collaboration-cursor__label__active){transition:opacity .2s 5s}\", \"\",{\"version\":3,\"sources\":[\"webpack://./css/style.scss\",\"webpack://./css/print.scss\",\"webpack://./css/prosemirror.scss\",\"webpack://./src/components/Editor.vue\"],\"names\":[],\"mappings\":\"AAEA,MACC,+BAAA,CAGD,8BACC,iBAAA,CAGD,2BACC,yBAAA,CACA,4BAAA,CAEA,wCACC,wBAAA,CACA,4BAAA,CAGD,6CACC,wBAAA,CACA,4BAAA,CAIF,0BACC,sBAAA,CAID,4BACC,YAAA,CAEA,kCACC,UAAA,CACA,iBAAA,CACA,UAAA,CACA,UAAA,CAAA,QAAA,CAAA,WAAA,CACA,qBAAA,CACA,mBAAA,CAMD,4FACC,YAAA,CAIF,uBACC,YAAA,CACA,mBAAA,CACA,iBAAA,CAEA,6BACC,UAAA,CACA,aAAA,CACA,iBAAA,CACA,QAAA,CACA,UAAA,CACA,2CAAA,CACA,gEAAA,CAIF,oCACC,GACC,iBAAA,CAAA,CAIF,kBACC,gEAAA,CAGD,oBACC,6CAAA,CACA,iDAAA,CACA,iCACC,gBAAA,CAKF,sBACC,KACC,SAAA,CACA,kCAAA,CAGD,GACC,SAAA,CACA,8BAAA,CAAA,CAMF,sBACC,KACC,SAAA,CACA,kCAAA,CAGD,GACC,SAAA,CACA,8BAAA,CAAA,CAIF,YACC,yBAAA,CChHD,aACC,MACC,OAAA,CACA,0BAAA,CAGD,KAEC,iBAAA,CACA,2BAAA,CAGD,2BAEC,WAAA,CACA,qBAAA,CAEA,4BAAA,CAEA,yCAEC,uBAAA,CAED,4CAEC,OAAA,CACA,kBAAA,CAKD,2BAEC,uBAAA,CAED,0BAEC,uBAAA,CAED,8BAEC,cAAA,CAED,mCACC,kBAAA,CACA,cAAA,CAIA,gKAEC,iBAAA,CAED,wGAEC,uBAAA,CAEA,wBAAA,CACA,iCAAA,CAID,gCACC,qBAAA,CACA,2BAAA,CACA,mCAAA,CACA,4BAAA,CACA,6CAAA,CAED,6CACC,iCAAA,CAGD,gCACC,4CAAA,CACA,2BAAA,CACA,4BAAA,CAED,6CACC,sBAAA,CAKH,gDACC,YAAA,CAIA,6CACC,aAAA,CAGD,+CACC,UAAA,CACA,WAAA,CACA,cAAA,CACA,iBAAA,CAED,0DACC,YAAA,CAAA,CCjGH,sCACC,WAAA,CACA,iBAAA,CACA,oBAAA,CACA,oBAAA,CACA,mCAAA,CACA,2BAAA,CACA,0BAAA,CACA,gBAAA,CACA,kCAAA,CACA,YAAA,CA+QA,yCAAA,CACA,oDAAA,CACA,sDAAA,CACA,sDAAA,CACA,0DAAA,CACA,2CAAA,CAlRA,8CAEC,sBAAA,CAGD,oPAIC,UAAA,CACA,8BAAA,CACA,4BAAA,CACA,SAAA,CACA,wBAAA,CACA,gBAAA,CACA,kCAAA,CAEA,4XACC,sBAAA,CAGD,wjBACC,0BAAA,CAIF,6DACC,eAAA,CAGD,qDACC,YAAA,CACA,iBAAA,CAEA,0EACC,YAAA,CAED,4DACC,UAAA,CACA,qBAAA,CACA,sBAAA,CACA,8CAAA,CACA,aAAA,CACA,kCAAA,CACA,WAAA,CACA,UAAA,CACA,0BAAA,CACA,0BAAA,CACA,cAAA,CACA,QAAA,CAGA,oEACC,wDAAA,CACA,6CAAA,CACA,yCAAA,CAED,mEACC,mCAAA,CACA,4BAAA,CAGF,2DACC,aAAA,CACA,WAAA,CACA,2BAAA,CAIF,oDACC,eAAA,CAIA,8TACC,YAAA,CAIF,wCACC,kCAAA,CACA,yBAAA,CACA,cAAA,CAGD,2DACC,iBAAA,CACA,gBAAA,CAGD,yCACC,iBAAA,CAGD,sPAMC,eAAA,CACA,iBAAA,CACA,eAAA,CACA,kBAAA,CACA,4BAAA,CAGD,yCACC,cAAA,CAGD,yCACC,cAAA,CAGD,yCACC,cAAA,CAGD,yCACC,cAAA,CAGD,yCACC,cAAA,CAGD,yCACC,kCAAA,CAGD,0CACC,cAAA,CACA,cAAA,CAGD,yCACC,aAAA,CACA,WAAA,CACA,YAAA,CACA,UAAA,CAGD,+CACC,UAAA,CACA,aAAA,CACA,UAAA,CACA,yCAAA,CACA,eAAA,CAGD,0CACC,oBAAA,CACA,6CAAA,CACA,kCAAA,CACA,iBAAA,CACA,iBAAA,CAEA,kDACC,2BAAA,CACA,wBAAA,CACA,aAAA,CACA,gBAAA,CACA,gBAAA,CACA,eAAA,CAGA,wHAEC,UAAA,CAED,kjBASC,aAAA,CAED,yaAOC,aAAA,CAED,oLAGC,UAAA,CAED,wHAEC,UAAA,CAED,+HAEC,UAAA,CAED,8DACC,iBAAA,CAED,4DACC,eAAA,CAKH,sDACC,iBAAA,CACA,kDAAA,CAGD,8DACC,aAAA,CACA,wBAAA,CACA,mCAAA,CACA,mBAAA,CAGD,6CACC,6CAAA,CACA,kCAAA,CACA,iBAAA,CAGD,yCACC,iBAAA,CACA,gBAAA,CAEA,8DACC,kBAAA,CAIF,kFACC,iBAAA,CACA,gBAAA,CACA,iBAAA,CAGD,4CACC,oBAAA,CAID,+CACC,sBAAA,CAID,kDACC,sBAAA,CAGD,iDACC,gBAAA,CACA,kDAAA,CACA,mCAAA,CACA,aAAA,CACA,cAAA,CAWD,4CACC,gBAAA,CACA,uBAAA,CACA,iBAAA,CACA,kBAAA,CACA,iBAAA,CACA,4CACC,cAAA,CAID,8FACC,0CAAA,CACA,aAAA,CACA,kBAAA,CACA,cAAA,CACA,sHACC,+CAAA,CAGF,+CACC,kBAAA,CACA,YAAA,CACA,4BAAA,CAED,+CACC,mBAAA,CACA,kBAAA,CACA,qDAAA,CACA,gCAAA,CAEA,mDACC,YAAA,CAGF,+CACC,8CAAA,CACA,gKACC,oDAAA,CAKD,0EAAA,iDAAA,CACA,yEAAA,kDAAA,CAIA,yEAAA,oDAAA,CACA,wEAAA,qDAAA,CAOH,kEACC,aAAA,CAGD,sEACC,8BAAA,CACA,UAAA,CACA,mCAAA,CACA,mBAAA,CACA,QAAA,CAGD,uCACC,UAAA,CC/VC,qDACC,2CAAA,CAED,uEACC,iBAAA,CAKH,4CACC,SAAA,CAGD,qDACC,SAAA,CACA,uEACC,eAAA,CACA,gBAAA,CACA,gBAAA,CAIF,gBACC,GAAA,sBAAA,CACA,KAAA,wBAAA,CAAA,CAID,6BACC,iBAAA,CACA,gBAAA,CACA,iBAAA,CACA,6BAAA,CACA,8BAAA,CACA,iBAAA,CACA,mBAAA,CAID,6BACC,iBAAA,CACA,UAAA,CACA,SAAA,CACA,cAAA,CACA,iBAAA,CACA,eAAA,CACA,kBAAA,CACA,gBAAA,CACA,aAAA,CACA,mBAAA,CACA,2BAAA,CACA,kBAAA,CACA,SAAA,CAEA,iEACC,SAAA,CAGD,uEACC,yBAAA\",\"sourcesContent\":[\"@use 'sass:math';\\n\\n:root {\\n\\t--text-editor-max-width: 670px\\n}\\n\\n.modal-container .text-editor {\\n\\tposition: absolute;\\n}\\n\\n.ProseMirror-hideselection {\\n\\tcaret-color: transparent;\\n\\tcolor: var(--color-main-text);\\n\\n\\t*::selection {\\n\\t\\tbackground: transparent;\\n\\t\\tcolor: var(--color-main-text);\\n\\t}\\n\\n\\t*::-moz-selection {\\n\\t\\tbackground: transparent;\\n\\t\\tcolor: var(--color-main-text);\\n\\t}\\n}\\n\\n.ProseMirror-selectednode {\\n\\toutline: 2px solid #8cf;\\n}\\n\\n/* Make sure li selections wrap around markers */\\nli.ProseMirror-selectednode {\\n\\toutline: none;\\n\\n\\t&:after {\\n\\t\\tcontent: '';\\n\\t\\tposition: absolute;\\n\\t\\tleft: -32px;\\n\\t\\tright: -2px; top: -2px; bottom: -2px;\\n\\t\\tborder: 2px solid #8cf;\\n\\t\\tpointer-events: none;\\n\\t}\\n}\\n\\n.has-conflicts,\\n.text-editor__wrapper.icon-loading {\\n\\t.ProseMirror-menubar {\\n\\t\\tdisplay: none;\\n\\t}\\n}\\n\\n.ProseMirror-gapcursor {\\n\\tdisplay: none;\\n\\tpointer-events: none;\\n\\tposition: absolute;\\n\\n\\t&:after {\\n\\t\\tcontent: '';\\n\\t\\tdisplay: block;\\n\\t\\tposition: absolute;\\n\\t\\ttop: -2px;\\n\\t\\twidth: 20px;\\n\\t\\tborder-top: 1px solid var(--color-main-text);\\n\\t\\tanimation: ProseMirror-cursor-blink 1.1s steps(2, start) infinite;\\n\\t}\\n}\\n\\n@keyframes ProseMirror-cursor-blink {\\n\\tto {\\n\\t\\tvisibility: hidden;\\n\\t}\\n}\\n\\n.animation-rotate {\\n\\tanimation: rotate var(--animation-duration, 0.8s) linear infinite;\\n}\\n\\n[data-handler='text'] {\\n\\tbackground-color: var(--color-main-background);\\n\\tborder-top: 3px solid var(--color-primary-element);\\n\\t.modal-title {\\n\\t\\tfont-weight: bold;\\n\\t}\\n}\\n\\n// from https://github.com/animate-css/animate.css/blob/main/source/fading_entrances/fadeInDown.css\\n@keyframes fadeInDown {\\n\\tfrom {\\n\\t\\topacity: 0;\\n\\t\\ttransform: translate3d(0, -100%, 0);\\n\\t}\\n\\n\\tto {\\n\\t\\topacity: 1;\\n\\t\\ttransform: translate3d(0, 0, 0);\\n\\t}\\n}\\n\\n\\n// from https://github.com/animate-css/animate.css/blob/main/source/fading_entrances/fadeInLeft.css\\n@keyframes fadeInLeft {\\n\\tfrom {\\n\\t\\topacity: 0;\\n\\t\\ttransform: translate3d(-100%, 0, 0);\\n\\t}\\n\\n\\tto {\\n\\t\\topacity: 1;\\n\\t\\ttransform: translate3d(0, 0, 0);\\n\\t}\\n}\\n\\n.fadeInLeft {\\n\\tanimation-name: fadeInLeft;\\n}\\n\",\"@media print {\\n\\t@page {\\n\\t\\tsize: A4;\\n\\t\\tmargin: 2.5cm 2cm 2cm 2.5cm;\\n\\t}\\n\\n\\tbody {\\n\\t\\t// position: fixed does not support scrolling and as such only prints one page\\n\\t\\tposition: absolute;\\n\\t\\toverflow: visible!important;\\n\\t}\\n\\n\\t#viewer[data-handler='text'] {\\n\\t\\t// Hide top border\\n\\t\\tborder: none;\\n\\t\\twidth: 100%!important;\\n\\t\\t// NcModal uses fixed, which will be cropped when printed\\n\\t\\tposition: absolute!important;\\n\\n\\t\\t.modal-header {\\n\\t\\t\\t// Hide modal header (close button)\\n\\t\\t\\tdisplay: none!important;\\n\\t\\t}\\n\\t\\t.modal-container {\\n\\t\\t\\t// Make sure top aligned as we hided the menubar */\\n\\t\\t\\ttop: 0px;\\n\\t\\t\\theight: fit-content;\\n\\t\\t}\\n\\t}\\n\\n\\t.text-editor {\\n\\t\\t.text-menubar {\\n\\t\\t\\t// Hide menu bar\\n\\t\\t\\tdisplay: none!important;\\n\\t\\t}\\n\\t\\t.action-item {\\n\\t\\t\\t// Hide table settings\\n\\t\\t\\tdisplay: none!important;\\n\\t\\t}\\n\\t\\t.editor__content {\\n\\t\\t\\t// Margins set by page rule\\n\\t\\t\\tmax-width: 100%;\\n\\t\\t}\\n\\t\\t.text-editor__wrapper {\\n\\t\\t\\theight: fit-content;\\n\\t\\t\\tposition: unset;\\n\\t\\t}\\n\\n\\t\\tdiv.ProseMirror {\\n\\t\\t\\th1, h2, h3, h4, h5 {\\n\\t\\t\\t\\t// orphaned headlines are ugly\\n\\t\\t\\t\\tbreak-after: avoid;\\n\\t\\t\\t}\\n\\t\\t\\t.image, img, table {\\n\\t\\t\\t\\t// try no page breaks within tables or images\\n\\t\\t\\t\\tbreak-inside: avoid-page;\\n\\t\\t\\t\\t// Some more indention\\n\\t\\t\\t\\tmax-width: 90%!important;\\n\\t\\t\\t\\tmargin: 5vw auto 5vw 5%!important;\\n\\t\\t\\t}\\n\\n\\t\\t\\t// Add some borders below header and between columns\\n\\t\\t\\tth {\\n\\t\\t\\t\\tcolor: black!important;\\n\\t\\t\\t\\tfont-weight: bold!important;\\n\\t\\t\\t\\tborder-width: 0 1px 2px 0!important;\\n\\t\\t\\t\\tborder-color: gray!important;\\n\\t\\t\\t\\tborder-style: none solid solid none!important;\\n\\t\\t\\t}\\n\\t\\t\\tth:last-of-type {\\n\\t\\t\\t\\tborder-width: 0 0 2px 0!important;\\n\\t\\t\\t}\\n\\n\\t\\t\\ttd {\\n\\t\\t\\t\\tborder-style: none solid none none!important;\\n\\t\\t\\t\\tborder-width: 1px!important;\\n\\t\\t\\t\\tborder-color: gray!important;\\n\\t\\t\\t}\\n\\t\\t\\ttd:last-of-type {\\n\\t\\t\\t\\tborder: none!important;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\\t.menubar-placeholder, .text-editor--readonly-bar {\\n\\t\\tdisplay: none;\\n\\t}\\n\\n\\t.text-editor__content-wrapper {\\n\\t\\t&.--show-outline {\\n\\t\\t\\tdisplay: block;\\n\\t\\t}\\n\\n\\t\\t.editor--outline {\\n\\t\\t\\twidth: auto;\\n\\t\\t\\theight: auto;\\n\\t\\t\\toverflow: unset;\\n\\t\\t\\tposition: relative;\\n\\t\\t}\\n\\t\\t.editor--outline__btn-close {\\n\\t\\t\\tdisplay: none;\\n\\t\\t}\\n\\t}\\n}\\n\",\"@use 'sass:selector';\\n\\n/* Document rendering styles */\\ndiv.ProseMirror {\\n\\theight: 100%;\\n\\tposition: relative;\\n\\tword-wrap: break-word;\\n\\twhite-space: pre-wrap;\\n\\t-webkit-font-variant-ligatures: none;\\n\\tfont-variant-ligatures: none;\\n\\tpadding: 4px 8px 200px 14px;\\n\\tline-height: 150%;\\n\\tfont-size: var(--default-font-size);\\n\\toutline: none;\\n\\n\\t:target {\\n\\t\\t// Menubar height: 44px + 3px bottom + 3px top padding\\n\\t\\tscroll-margin-top: 50px;\\n\\t}\\n\\n\\t&[contenteditable=true],\\n\\t&[contenteditable=false],\\n\\t[contenteditable=true],\\n\\t[contenteditable=false] {\\n\\t\\twidth: 100%;\\n\\t\\tbackground-color: transparent;\\n\\t\\tcolor: var(--color-main-text);\\n\\t\\topacity: 1;\\n\\t\\t-webkit-user-select: text;\\n\\t\\tuser-select: text;\\n\\t\\tfont-size: var(--default-font-size);\\n\\n\\t\\t&:not(.collaboration-cursor__caret) {\\n\\t\\t\\tborder: none !important;\\n\\t\\t}\\n\\n\\t\\t&:focus, &:focus-visible {\\n\\t\\t\\tbox-shadow: none !important;\\n\\t\\t}\\n\\t}\\n\\n\\tul[data-type=taskList] {\\n\\t\\tmargin-left: 1px;\\n\\t}\\n\\n\\t.checkbox-item {\\n\\t\\tdisplay: flex;\\n\\t\\talign-items: start;\\n\\n\\t\\tinput[type=checkbox] {\\n\\t\\t\\tdisplay: none;\\n\\t\\t}\\n\\t\\t&:before {\\n\\t\\t\\tcontent: '';\\n\\t\\t\\tvertical-align: middle;\\n\\t\\t\\tmargin: 3px 6px 3px 2px;\\n\\t\\t\\tborder: 1px solid var(--color-text-maxcontrast);\\n\\t\\t\\tdisplay: block;\\n\\t\\t\\tborder-radius: var(--border-radius);\\n\\t\\t\\theight: 14px;\\n\\t\\t\\twidth: 14px;\\n\\t\\t\\tbox-shadow: none !important;\\n\\t\\t\\tbackground-position: center;\\n\\t\\t\\tcursor: pointer;\\n\\t\\t\\tleft: 9px;\\n\\t\\t}\\n\\t\\t&.checked{\\n\\t\\t\\t&:before {\\n\\t\\t\\t\\tbackground-image: url('../../img/checkbox-mark.svg');\\n\\t\\t\\t\\tbackground-color: var(--color-primary-element);\\n\\t\\t\\t\\tborder-color: var(--color-primary-element);\\n\\t\\t\\t}\\n\\t\\t\\tlabel {\\n\\t\\t\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t\\t\\t\\ttext-decoration: line-through;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tlabel {\\n\\t\\t\\tdisplay: block;\\n\\t\\t\\tflex-grow: 1;\\n\\t\\t\\tmax-width: calc(100% - 28px);\\n\\t\\t}\\n\\t}\\n\\n\\t> *:first-child {\\n\\t\\tmargin-top: 10px;\\n\\t}\\n\\n\\t> h1,h2,h3,h4,h5,h6 {\\n\\t\\t&:first-child {\\n\\t\\t\\tmargin-top: 0;\\n\\t\\t}\\n\\t}\\n\\n\\ta {\\n\\t\\tcolor: var(--color-primary-element);\\n\\t\\ttext-decoration: underline;\\n\\t\\tpadding: .5em 0;\\n\\t}\\n\\n\\tp .paragraph-content {\\n\\t\\tmargin-bottom: 1em;\\n\\t\\tline-height: 150%;\\n\\t}\\n\\n\\tem {\\n\\t\\tfont-style: italic;\\n\\t}\\n\\n\\th1,\\n\\th2,\\n\\th3,\\n\\th4,\\n\\th5,\\n\\th6 {\\n\\t\\tfont-weight: 600;\\n\\t\\tline-height: 1.1em;\\n\\t\\tmargin-top: 24px;\\n\\t\\tmargin-bottom: 12px;\\n\\t\\tcolor: var(--color-main-text);\\n\\t}\\n\\n\\th1 {\\n\\t\\tfont-size: 36px;\\n\\t}\\n\\n\\th2 {\\n\\t\\tfont-size: 30px;\\n\\t}\\n\\n\\th3 {\\n\\t\\tfont-size: 24px;\\n\\t}\\n\\n\\th4 {\\n\\t\\tfont-size: 21px;\\n\\t}\\n\\n\\th5 {\\n\\t\\tfont-size: 17px;\\n\\t}\\n\\n\\th6 {\\n\\t\\tfont-size: var(--default-font-size);\\n\\t}\\n\\n\\timg {\\n\\t\\tcursor: default;\\n\\t\\tmax-width: 100%;\\n\\t}\\n\\n\\thr {\\n\\t\\tpadding: 2px 0;\\n\\t\\tborder: none;\\n\\t\\tmargin: 2em 0;\\n\\t\\twidth: 100%;\\n\\t}\\n\\n\\thr:after {\\n\\t\\tcontent: '';\\n\\t\\tdisplay: block;\\n\\t\\theight: 1px;\\n\\t\\tbackground-color: var(--color-border-dark);\\n\\t\\tline-height: 2px;\\n\\t}\\n\\n\\tpre {\\n\\t\\twhite-space: pre-wrap;\\n\\t\\tbackground-color: var(--color-background-dark);\\n\\t\\tborder-radius: var(--border-radius);\\n\\t\\tpadding: 1em 1.3em;\\n\\t\\tmargin-bottom: 1em;\\n\\n\\t\\t&::before {\\n\\t\\t\\tcontent: attr(data-language);\\n\\t\\t\\ttext-transform: uppercase;\\n\\t\\t\\tdisplay: block;\\n\\t\\t\\ttext-align: right;\\n\\t\\t\\tfont-weight: bold;\\n\\t\\t\\tfont-size: 0.6rem;\\n\\t\\t}\\n\\t\\tcode {\\n\\t\\t\\t.hljs-comment,\\n\\t\\t\\t.hljs-quote {\\n\\t\\t\\t\\tcolor: #999999;\\n\\t\\t\\t}\\n\\t\\t\\t.hljs-variable,\\n\\t\\t\\t.hljs-template-variable,\\n\\t\\t\\t.hljs-attribute,\\n\\t\\t\\t.hljs-tag,\\n\\t\\t\\t.hljs-name,\\n\\t\\t\\t.hljs-regexp,\\n\\t\\t\\t.hljs-link,\\n\\t\\t\\t.hljs-selector-id,\\n\\t\\t\\t.hljs-selector-class {\\n\\t\\t\\t\\tcolor: #f2777a;\\n\\t\\t\\t}\\n\\t\\t\\t.hljs-number,\\n\\t\\t\\t.hljs-meta,\\n\\t\\t\\t.hljs-built_in,\\n\\t\\t\\t.hljs-builtin-name,\\n\\t\\t\\t.hljs-literal,\\n\\t\\t\\t.hljs-type,\\n\\t\\t\\t.hljs-params {\\n\\t\\t\\t\\tcolor: #f99157;\\n\\t\\t\\t}\\n\\t\\t\\t.hljs-string,\\n\\t\\t\\t.hljs-symbol,\\n\\t\\t\\t.hljs-bullet {\\n\\t\\t\\t\\tcolor: #99cc99;\\n\\t\\t\\t}\\n\\t\\t\\t.hljs-title,\\n\\t\\t\\t.hljs-section {\\n\\t\\t\\t\\tcolor: #ffcc66;\\n\\t\\t\\t}\\n\\t\\t\\t.hljs-keyword,\\n\\t\\t\\t.hljs-selector-tag {\\n\\t\\t\\t\\tcolor: #6699cc;\\n\\t\\t\\t}\\n\\t\\t\\t.hljs-emphasis {\\n\\t\\t\\t\\tfont-style: italic;\\n\\t\\t\\t}\\n\\t\\t\\t.hljs-strong {\\n\\t\\t\\t\\tfont-weight: 700;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\\tpre.frontmatter {\\n\\t\\tmargin-bottom: 2em;\\n\\t\\tborder-left: 4px solid var(--color-primary-element);\\n\\t}\\n\\n\\tpre.frontmatter::before {\\n\\t\\tdisplay: block;\\n\\t\\tcontent: attr(data-title);\\n\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t\\tpadding-bottom: 0.5em;\\n\\t}\\n\\n\\tp code {\\n\\t\\tbackground-color: var(--color-background-dark);\\n\\t\\tborder-radius: var(--border-radius);\\n\\t\\tpadding: .1em .3em;\\n\\t}\\n\\n\\tli {\\n\\t\\tposition: relative;\\n\\t\\tpadding-left: 3px;\\n\\n\\t\\tp .paragraph-content {\\n\\t\\t\\tmargin-bottom: 0.5em;\\n\\t\\t}\\n\\t}\\n\\n\\tul, ol {\\n\\t\\tpadding-left: 10px;\\n\\t\\tmargin-left: 10px;\\n\\t\\tmargin-bottom: 1em;\\n\\t}\\n\\n\\tul > li {\\n\\t\\tlist-style-type: disc;\\n\\t}\\n\\n\\t// Second-level list entries\\n\\tli ul > li {\\n\\t\\tlist-style-type: circle;\\n\\t}\\n\\n\\t// Third-level and further down list entries\\n\\tli li ul > li {\\n\\t\\tlist-style-type: square;\\n\\t}\\n\\n\\tblockquote {\\n\\t\\tpadding-left: 1em;\\n\\t\\tborder-left: 4px solid var(--color-primary-element);\\n\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t\\tmargin-left: 0;\\n\\t\\tmargin-right: 0;\\n\\t}\\n\\n\\t// table variables\\n\\t--table-color-border: var(--color-border);\\n\\t--table-color-heading: var(--color-text-maxcontrast);\\n\\t--table-color-heading-border: var(--color-border-dark);\\n\\t--table-color-background: var(--color-main-background);\\n\\t--table-color-background-hover: var(--color-primary-light);\\n\\t--table-border-radius: var(--border-radius);\\n\\n\\ttable {\\n\\t\\tborder-spacing: 0;\\n\\t\\twidth: calc(100% - 50px);\\n\\t\\ttable-layout: auto;\\n\\t\\twhite-space: normal; // force text to wrapping\\n\\t\\tmargin-bottom: 1em;\\n\\t\\t+ & {\\n\\t\\t\\tmargin-top: 1em;\\n\\t\\t}\\n\\n\\n\\t\\ttd, th {\\n\\t\\t\\tborder: 1px solid var(--table-color-border);\\n\\t\\t\\tborder-left: 0;\\n\\t\\t\\tvertical-align: top;\\n\\t\\t\\tmax-width: 100%;\\n\\t\\t\\t&:first-child {\\n\\t\\t\\t\\tborder-left: 1px solid var(--table-color-border);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\ttd {\\n\\t\\t\\tpadding: 0.5em 0.75em;\\n\\t\\t\\tborder-top: 0;\\n\\t\\t\\tcolor: var(--color-main-text);\\n\\t\\t}\\n\\t\\tth {\\n\\t\\t\\tpadding: 0 0 0 0.75em;\\n\\t\\t\\tfont-weight: normal;\\n\\t\\t\\tborder-bottom-color: var(--table-color-heading-border);\\n\\t\\t\\tcolor: var(--table-color-heading);\\n\\n\\t\\t\\t& > div {\\n\\t\\t\\t\\tdisplay: flex;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\ttr {\\n\\t\\t\\tbackground-color: var(--table-color-background);\\n\\t\\t\\t&:hover, &:active, &:focus {\\n\\t\\t\\t\\tbackground-color: var(--table-color-background-hover);\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\ttr:first-child {\\n\\t\\t\\tth:first-child { border-top-left-radius: var(--table-border-radius); }\\n\\t\\t\\tth:last-child { border-top-right-radius: var(--table-border-radius); }\\n\\t\\t}\\n\\n\\t\\ttr:last-child {\\n\\t\\t\\ttd:first-child { border-bottom-left-radius: var(--table-border-radius); }\\n\\t\\t\\ttd:last-child { border-bottom-right-radius: var(--table-border-radius); }\\n\\t\\t}\\n\\n\\t}\\n\\n}\\n\\n.ProseMirror-focused .ProseMirror-gapcursor {\\n\\tdisplay: block;\\n}\\n\\n.editor__content p.is-empty:first-child::before {\\n\\tcontent: attr(data-placeholder);\\n\\tfloat: left;\\n\\tcolor: var(--color-text-maxcontrast);\\n\\tpointer-events: none;\\n\\theight: 0;\\n}\\n\\n.editor__content {\\n\\ttab-size: 4;\\n}\\n\",\"\\n@import './../../css/style';\\n@import './../../css/print';\\n\\n.text-editor__wrapper {\\n\\t@import './../../css/prosemirror';\\n\\n\\t// relative position for the alignment of the menububble\\n\\t.text-editor__main {\\n\\t\\t&.draggedOver {\\n\\t\\t\\tbackground-color: var(--color-primary-light);\\n\\t\\t}\\n\\t\\t.text-editor__content-wrapper {\\n\\t\\t\\tposition: relative;\\n\\t\\t}\\n\\t}\\n}\\n\\n.text-editor__wrapper.has-conflicts > .editor {\\n\\twidth: 50%;\\n}\\n\\n.text-editor__wrapper.has-conflicts > .content-wrapper {\\n\\twidth: 50%;\\n\\t#read-only-editor {\\n\\t\\tmargin: 0px auto;\\n\\t\\tpadding-top: 50px;\\n\\t\\toverflow: initial;\\n\\t}\\n}\\n\\n@keyframes spin {\\n\\t0% { transform: rotate(0deg); }\\n\\t100% { transform: rotate(360deg); }\\n}\\n\\n/* Give a remote user a caret */\\n.collaboration-cursor__caret {\\n\\tposition: relative;\\n\\tmargin-left: -1px;\\n\\tmargin-right: -1px;\\n\\tborder-left: 1px solid #0D0D0D;\\n\\tborder-right: 1px solid #0D0D0D;\\n\\tword-break: normal;\\n\\tpointer-events: none;\\n}\\n\\n/* Render the username above the caret */\\n.collaboration-cursor__label {\\n\\tposition: absolute;\\n\\ttop: -1.4em;\\n\\tleft: -1px;\\n\\tfont-size: 12px;\\n\\tfont-style: normal;\\n\\tfont-weight: 600;\\n\\tline-height: normal;\\n\\tuser-select: none;\\n\\tcolor: #0D0D0D;\\n\\tpadding: 0.1rem 0.3rem;\\n\\tborder-radius: 3px 3px 3px 0;\\n\\twhite-space: nowrap;\\n\\topacity: 0;\\n\\n\\t&.collaboration-cursor__label__active {\\n\\t\\topacity: 1;\\n\\t}\\n\\n\\t&:not(.collaboration-cursor__label__active) {\\n\\t\\ttransition: opacity 0.2s 5s;\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".editor__content[data-v-9114a8c6]{max-width:min(var(--text-editor-max-width),100vw - 16px);margin:auto;position:relative;width:100%}.ie .editor__content[data-v-9114a8c6] .ProseMirror{padding-top:50px}.text-editor__content-wrapper[data-v-9114a8c6]{--side-width: calc((100% - var(--text-editor-max-width)) / 2);display:grid;grid-template-columns:1fr auto}.text-editor__content-wrapper.--show-outline[data-v-9114a8c6]{grid-template-columns:var(--side-width) auto var(--side-width)}.text-editor__content-wrapper .text-editor__content-wrapper__left[data-v-9114a8c6],.text-editor__content-wrapper .text-editor__content-wrapper__right[data-v-9114a8c6]{height:100%;position:relative}.is-rich-workspace .text-editor__content-wrapper[data-v-9114a8c6]{--side-width: var(--text-editor-max-width);grid-template-columns:var(--side-width) auto}.is-rich-workspace .text-editor__content-wrapper .text-editor__content-wrapper__left[data-v-9114a8c6],.is-rich-workspace .text-editor__content-wrapper .text-editor__content-wrapper__right[data-v-9114a8c6]{display:none}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/Editor/ContentContainer.vue\"],\"names\":[],\"mappings\":\"AACA,kCACC,wDAAA,CACA,WAAA,CACA,iBAAA,CACA,UAAA,CAIA,mDACC,gBAAA,CAIF,+CACC,6DAAA,CACA,YAAA,CACA,8BAAA,CACA,8DACC,8DAAA,CAED,uKAEC,WAAA,CACA,iBAAA,CAKD,kEACC,0CAAA,CACA,4CAAA,CACA,6MAEC,YAAA\",\"sourcesContent\":[\"\\n.editor__content {\\n\\tmax-width: min(var(--text-editor-max-width), calc(100vw - 16px));\\n\\tmargin: auto;\\n\\tposition: relative;\\n\\twidth: 100%;\\n}\\n\\n.ie {\\n\\t.editor__content:deep(.ProseMirror) {\\n\\t\\tpadding-top: 50px;\\n\\t}\\n}\\n\\n.text-editor__content-wrapper {\\n\\t--side-width: calc((100% - var(--text-editor-max-width)) / 2);\\n\\tdisplay: grid;\\n\\tgrid-template-columns: 1fr auto;\\n\\t&.--show-outline {\\n\\t\\tgrid-template-columns: var(--side-width) auto var(--side-width);\\n\\t}\\n\\t.text-editor__content-wrapper__left,\\n\\t.text-editor__content-wrapper__right {\\n\\t\\theight: 100%;\\n\\t\\tposition: relative;\\n\\t}\\n}\\n\\n.is-rich-workspace {\\n\\t.text-editor__content-wrapper {\\n\\t\\t--side-width: var(--text-editor-max-width);\\n\\t\\tgrid-template-columns: var(--side-width) auto;\\n\\t\\t.text-editor__content-wrapper__left,\\n\\t\\t.text-editor__content-wrapper__right {\\n\\t\\t\\tdisplay: none;\\n\\t\\t}\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".document-status[data-v-4fde7cc0]{position:sticky;top:0;z-index:10000;max-height:50px;background-color:var(--color-main-background)}.document-status .msg[data-v-4fde7cc0]{padding:12px;background-position:8px center;color:var(--color-text-maxcontrast)}.document-status .msg.icon-error[data-v-4fde7cc0]{padding-left:30px}.document-status .msg .button[data-v-4fde7cc0]{margin-left:8px}.document-status .msg.msg-locked .lock-icon[data-v-4fde7cc0]{padding:0 10px;float:left}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/Editor/DocumentStatus.vue\"],\"names\":[],\"mappings\":\"AACA,kCACC,eAAA,CACA,KAAA,CACA,aAAA,CACA,eAAA,CACA,6CAAA,CAEA,uCACC,YAAA,CACA,8BAAA,CACA,mCAAA,CAEA,kDACC,iBAAA,CAGD,+CACC,eAAA,CAGD,6DACC,cAAA,CACA,UAAA\",\"sourcesContent\":[\"\\n.document-status {\\n\\tposition: sticky;\\n\\ttop: 0;\\n\\tz-index: 10000;\\n\\tmax-height: 50px;\\n\\tbackground-color: var(--color-main-background);\\n\\n\\t.msg {\\n\\t\\tpadding: 12px;\\n\\t\\tbackground-position: 8px center;\\n\\t\\tcolor: var(--color-text-maxcontrast);\\n\\n\\t\\t&.icon-error {\\n\\t\\t\\tpadding-left: 30px;\\n\\t\\t}\\n\\n\\t\\t.button {\\n\\t\\t\\tmargin-left: 8px;\\n\\t\\t}\\n\\n\\t\\t&.msg-locked .lock-icon {\\n\\t\\t\\tpadding: 0 10px;\\n\\t\\t\\tfloat: left;\\n\\t\\t}\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".editor--outline[data-v-4a57d3b2]{width:300px;padding:0 10px 10px 10px;position:fixed;overflow:auto;max-height:calc(100% - 204px)}.editor--outline-mobile[data-v-4a57d3b2]{box-shadow:8px 0 17px -19px var(--color-box-shadow);background-color:var(--color-main-background-translucent);z-index:1}.editor--outline__header[data-v-4a57d3b2]{margin:0;position:sticky;top:0;z-index:1;background-color:var(--color-main-background);padding:.6em .6em .6em 0;display:flex;align-items:center}.editor--outline__header h2[data-v-4a57d3b2]{font-size:1rem;line-height:1.1rem;flex-grow:1;padding:0;margin:0}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/Editor/EditorOutline.vue\"],\"names\":[],\"mappings\":\"AACA,kCACC,WAAA,CACA,wBAAA,CACA,cAAA,CACA,aAAA,CAEA,6BAAA,CAEA,yCACC,mDAAA,CACA,yDAAA,CACA,SAAA,CAGD,0CACC,QAAA,CACA,eAAA,CACA,KAAA,CACA,SAAA,CACA,6CAAA,CACA,wBAAA,CACA,YAAA,CACA,kBAAA,CAEA,6CACC,cAAA,CACA,kBAAA,CACA,WAAA,CACA,SAAA,CACA,QAAA\",\"sourcesContent\":[\"\\n.editor--outline {\\n\\twidth: 300px;\\n\\tpadding: 0 10px 10px 10px;\\n\\tposition: fixed;\\n\\toverflow: auto;\\n\\t// 204px = 50px nc header + 60px collectives titlebar + 44px menubar + 50px bottom margin\\n\\tmax-height: calc(100% - 204px);\\n\\n\\t&-mobile {\\n\\t\\tbox-shadow: 8px 0 17px -19px var(--color-box-shadow);\\n\\t\\tbackground-color: var(--color-main-background-translucent);\\n\\t\\tz-index: 1;\\n\\t}\\n\\n\\t&__header {\\n\\t\\tmargin: 0;\\n\\t\\tposition: sticky;\\n\\t\\ttop: 0;\\n\\t\\tz-index: 1;\\n\\t\\tbackground-color: var(--color-main-background);\\n\\t\\tpadding: 0.6em 0.6em 0.6em 0;\\n\\t\\tdisplay: flex;\\n\\t\\talign-items: center;\\n\\n\\t\\th2 {\\n\\t\\t\\tfont-size: 1rem;\\n\\t\\t\\tline-height: 1.1rem;\\n\\t\\t\\tflex-grow: 1;\\n\\t\\t\\tpadding: 0;\\n\\t\\t\\tmargin: 0;\\n\\t\\t}\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".text-editor__main[data-v-8ffa875e],.editor[data-v-8ffa875e]{background:var(--color-main-background);color:var(--color-main-text);background-clip:padding-box;border-radius:var(--border-radius);padding:0;position:relative;width:100%}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/Editor/MainContainer.vue\"],\"names\":[],\"mappings\":\"AACA,6DACC,uCAAA,CACA,4BAAA,CACA,2BAAA,CACA,kCAAA,CACA,SAAA,CACA,iBAAA,CACA,UAAA\",\"sourcesContent\":[\"\\n.text-editor__main, .editor {\\n\\tbackground: var(--color-main-background);\\n\\tcolor: var(--color-main-text);\\n\\tbackground-clip: padding-box;\\n\\tborder-radius: var(--border-radius);\\n\\tpadding: 0;\\n\\tposition: relative;\\n\\twidth: 100%;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".text-editor__session-list[data-v-d5139f5a]{display:flex}.text-editor__session-list input[data-v-d5139f5a],.text-editor__session-list div[data-v-d5139f5a]{vertical-align:middle;margin-left:3px}.save-status[data-v-d5139f5a]{border-radius:50%;color:var(--color-text-lighter);display:inline-flex;justify-content:center;padding:0;height:44px;width:44px}.save-status[data-v-d5139f5a]:hover{background-color:var(--color-background-hover)}.last-saved[data-v-d5139f5a]{padding:6px}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/Editor/Status.vue\"],\"names\":[],\"mappings\":\"AACA,4CACC,YAAA,CAEA,kGACC,qBAAA,CACA,eAAA,CAIF,8BACC,iBAAA,CACA,+BAAA,CACA,mBAAA,CACA,sBAAA,CACA,SAAA,CACA,WAAA,CACA,UAAA,CAEA,oCACC,8CAAA,CAIF,6BACC,WAAA\",\"sourcesContent\":[\"\\n.text-editor__session-list {\\n\\tdisplay: flex;\\n\\n\\tinput, div {\\n\\t\\tvertical-align: middle;\\n\\t\\tmargin-left: 3px;\\n\\t}\\n}\\n\\n.save-status {\\n\\tborder-radius: 50%;\\n\\tcolor: var(--color-text-lighter);\\n\\tdisplay: inline-flex;\\n\\tjustify-content: center;\\n\\tpadding: 0;\\n\\theight: 44px;\\n\\twidth: 44px;\\n\\n\\t&:hover {\\n\\t\\tbackground-color: var(--color-background-hover);\\n\\t}\\n}\\n\\n.last-saved {\\n\\tpadding: 6px;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".--initial-render .editor--toc__item{--initial-padding-left: 0;animation:initialPadding 1.5s}.editor--toc{padding:0 10px;color:var(--color-main-text-maxcontrast);--animation-duration: 0.8s}.editor--toc h3{padding-left:.75rem}.editor--toc__list{width:100%;list-style:none;font-size:.9rem;padding:0;animation-name:fadeInLeft;animation-duration:var(--animation-duration)}.editor--toc__item{transform:translateX(var(--padding-left, 0rem));text-overflow:ellipsis;overflow:hidden;white-space:nowrap;animation:initialPadding calc(var(--animation-duration)*2);width:calc(100% - var(--padding-left))}.editor--toc__item a:hover{color:var(--color-primary-hover)}.editor--toc__item--1{--padding-left: 0rem;font-weight:600}.editor--toc__item--1:not(:nth-child(1)){margin-top:.5rem}.editor--toc__item--2{--padding-left: 1rem}.editor--toc__item--3{--padding-left: 2rem}.editor--toc__item--4{--padding-left: 3rem}.editor--toc__item--5{--padding-left: 4rem}.editor--toc__item--6{--padding-left: 5rem}.editor--toc__item--previous-1{--initial-padding-left: 0rem }.editor--toc__item--previous-2{--initial-padding-left: 1rem }.editor--toc__item--previous-3{--initial-padding-left: 2rem }.editor--toc__item--previous-4{--initial-padding-left: 3rem }.editor--toc__item--previous-5{--initial-padding-left: 4rem }.editor--toc__item--previous-6{--initial-padding-left: 5rem }@keyframes initialPadding{from{transform:translateX(var(--initial-padding-left, initial))}to{transform:translateX(var(--padding-left, 0rem))}}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/Editor/TableOfContents.vue\"],\"names\":[],\"mappings\":\"AAGE,qCACC,yBAAA,CACA,6BAAA,CAKH,aACC,cAAA,CACA,wCAAA,CACA,0BAAA,CAEA,gBACC,mBAAA,CAGD,mBACC,UAAA,CACA,eAAA,CACA,eAAA,CACA,SAAA,CAEA,yBAAA,CACA,4CAAA,CAGD,mBACC,+CAAA,CACA,sBAAA,CACA,eAAA,CACA,kBAAA,CACA,0DAAA,CACA,sCAAA,CAEA,2BACC,gCAAA,CAGD,sBACC,oBAAA,CACA,eAAA,CACA,yCACC,gBAAA,CAIF,sBACC,oBAAA,CAGD,sBACC,oBAAA,CAGD,sBACC,oBAAA,CAGD,sBACC,oBAAA,CAGD,sBACC,oBAAA,CAGD,+BACC,6BAAA,CAGD,+BACC,6BAAA,CAGD,+BACC,6BAAA,CAGD,+BACC,6BAAA,CAGD,+BACC,6BAAA,CAGD,+BACC,6BAAA,CAKH,0BACE,KACD,0DAAA,CAGC,GACD,+CAAA,CAAA\",\"sourcesContent\":[\"\\n.--initial-render {\\n\\t.editor--toc {\\n\\t\\t&__item {\\n\\t\\t\\t--initial-padding-left: 0;\\n\\t\\t\\tanimation: initialPadding 1.5s;\\n\\t\\t}\\n\\t}\\n}\\n\\n.editor--toc {\\n\\tpadding: 0 10px;\\n\\tcolor: var(--color-main-text-maxcontrast);\\n\\t--animation-duration: 0.8s;\\n\\n\\th3 {\\n\\t\\tpadding-left: 0.75rem;\\n\\t}\\n\\n\\t&__list {\\n\\t\\twidth: 100%;\\n\\t\\tlist-style: none;\\n\\t\\tfont-size: 0.9rem;\\n\\t\\tpadding: 0;\\n\\n\\t\\tanimation-name: fadeInLeft;\\n\\t\\tanimation-duration: var(--animation-duration);\\n\\t}\\n\\n\\t&__item {\\n\\t\\ttransform: translateX(var(--padding-left, 0rem));\\n\\t\\ttext-overflow: ellipsis;\\n\\t\\toverflow: hidden;\\n\\t\\twhite-space: nowrap;\\n\\t\\tanimation: initialPadding calc(var(--animation-duration) * 2);\\n\\t\\twidth: calc(100% - var(--padding-left));\\n\\n\\t\\ta:hover {\\n\\t\\t\\tcolor: var(--color-primary-hover);\\n\\t\\t}\\n\\n\\t\\t&--1 {\\n\\t\\t\\t--padding-left: 0rem;\\n\\t\\t\\tfont-weight: 600;\\n\\t\\t\\t&:not(:nth-child(1)) {\\n\\t\\t\\t\\tmargin-top: 0.5rem;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t&--2 {\\n\\t\\t\\t--padding-left: 1rem;\\n\\t\\t}\\n\\n\\t\\t&--3 {\\n\\t\\t\\t--padding-left: 2rem;\\n\\t\\t}\\n\\n\\t\\t&--4 {\\n\\t\\t\\t--padding-left: 3rem;\\n\\t\\t}\\n\\n\\t\\t&--5 {\\n\\t\\t\\t--padding-left: 4rem;\\n\\t\\t}\\n\\n\\t\\t&--6 {\\n\\t\\t\\t--padding-left: 5rem;\\n\\t\\t}\\n\\n\\t\\t&--previous-1 {\\n\\t\\t\\t--initial-padding-left: 0rem\\n\\t\\t}\\n\\n\\t\\t&--previous-2 {\\n\\t\\t\\t--initial-padding-left: 1rem\\n\\t\\t}\\n\\n\\t\\t&--previous-3 {\\n\\t\\t\\t--initial-padding-left: 2rem\\n\\t\\t}\\n\\n\\t\\t&--previous-4 {\\n\\t\\t\\t--initial-padding-left: 3rem\\n\\t\\t}\\n\\n\\t\\t&--previous-5 {\\n\\t\\t\\t--initial-padding-left: 4rem\\n\\t\\t}\\n\\n\\t\\t&--previous-6 {\\n\\t\\t\\t--initial-padding-left: 5rem\\n\\t\\t}\\n\\t}\\n}\\n\\n@keyframes initialPadding {\\n from {\\n\\ttransform: translateX(var(--initial-padding-left, initial));\\n }\\n\\n to {\\n\\ttransform: translateX(var(--padding-left, 0rem));\\n }\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".text-editor__wrapper[data-v-12bd2945]{display:flex;width:100%;height:100%}.text-editor__wrapper.show-color-annotations[data-v-12bd2945] .author-annotation{padding-top:2px;padding-bottom:2px}.text-editor__wrapper[data-v-12bd2945]:not(.show-color-annotations) .author-annotation,.text-editor__wrapper[data-v-12bd2945]:not(.show-color-annotations) .image{background-color:rgba(0,0,0,0) !important}.text-editor__wrapper .ProseMirror[data-v-12bd2945]{margin-top:0 !important}.text-editor__wrapper.icon-loading .text-editor__main[data-v-12bd2945]{opacity:.3}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/Editor/Wrapper.vue\"],\"names\":[],\"mappings\":\"AAEA,uCACC,YAAA,CACA,UAAA,CACA,WAAA,CAEA,iFACC,eAAA,CACA,kBAAA,CAGD,kKAEC,yCAAA,CAGD,oDACC,uBAAA,CAGA,uEACC,UAAA\",\"sourcesContent\":[\"\\n\\n.text-editor__wrapper {\\n\\tdisplay: flex;\\n\\twidth: 100%;\\n\\theight: 100%;\\n\\n\\t&.show-color-annotations:deep(.author-annotation) {\\n\\t\\tpadding-top: 2px;\\n\\t\\tpadding-bottom: 2px;\\n\\t}\\n\\n\\t&:not(.show-color-annotations):deep(.author-annotation),\\n\\t&:not(.show-color-annotations):deep(.image) {\\n\\t\\tbackground-color: transparent !important;\\n\\t}\\n\\n\\t.ProseMirror {\\n\\t\\tmargin-top: 0 !important;\\n\\t}\\n\\t&.icon-loading {\\n\\t\\t.text-editor__main {\\n\\t\\t\\topacity: 0.3;\\n\\t\\t}\\n\\t}\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_GET_URL_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/getUrl.js\";\nvar ___CSS_LOADER_URL_IMPORT_0___ = new URL(\"../../img/checkbox-mark.svg\", import.meta.url);\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\nvar ___CSS_LOADER_URL_REPLACEMENT_0___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_0___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"[data-v-a7b1a700] .modal-wrapper .modal-container{width:max-content;padding:30px 40px 20px;user-select:text}@media only screen and (max-width: 512px){[data-v-a7b1a700] .modal-wrapper .modal-container{width:inherit;padding:10px 0}}table[data-v-a7b1a700]{margin-top:24px;border-collapse:collapse}table tbody tr[data-v-a7b1a700]:hover,table tbody tr[data-v-a7b1a700]:focus,table tbody tr[data-v-a7b1a700]:active{background-color:rgba(0,0,0,0) !important}table thead tr[data-v-a7b1a700]{border:none}table th[data-v-a7b1a700]{font-weight:bold;padding:.75rem 1rem .75rem 0;border-bottom:2px solid var(--color-background-darker)}table td[data-v-a7b1a700]{padding:.75rem 1rem .75rem 0;border-top:1px solid var(--color-background-dark);border-bottom:unset}table td.noborder[data-v-a7b1a700]{border-top:unset}table td.ellipsis_top[data-v-a7b1a700]{padding-bottom:0}table td.ellipsis[data-v-a7b1a700]{padding-top:0;padding-bottom:0}table td.ellipsis_bottom[data-v-a7b1a700]{padding-top:0}table kbd[data-v-a7b1a700]{font-size:smaller}table code[data-v-a7b1a700]{padding:.2em .4em;font-size:90%;background-color:var(--color-background-dark);border-radius:6px}div.ProseMirror[data-v-a7b1a700]{height:100%;position:relative;word-wrap:break-word;white-space:pre-wrap;-webkit-font-variant-ligatures:none;font-variant-ligatures:none;padding:4px 8px 200px 14px;line-height:150%;font-size:var(--default-font-size);outline:none;--table-color-border: var(--color-border);--table-color-heading: var(--color-text-maxcontrast);--table-color-heading-border: var(--color-border-dark);--table-color-background: var(--color-main-background);--table-color-background-hover: var(--color-primary-light);--table-border-radius: var(--border-radius)}div.ProseMirror[data-v-a7b1a700] :target{scroll-margin-top:50px}div.ProseMirror[contenteditable=true][data-v-a7b1a700],div.ProseMirror[contenteditable=false][data-v-a7b1a700],div.ProseMirror [contenteditable=true][data-v-a7b1a700],div.ProseMirror [contenteditable=false][data-v-a7b1a700]{width:100%;background-color:rgba(0,0,0,0);color:var(--color-main-text);opacity:1;-webkit-user-select:text;user-select:text;font-size:var(--default-font-size)}div.ProseMirror[contenteditable=true][data-v-a7b1a700]:not(.collaboration-cursor__caret),div.ProseMirror[contenteditable=false][data-v-a7b1a700]:not(.collaboration-cursor__caret),div.ProseMirror [contenteditable=true][data-v-a7b1a700]:not(.collaboration-cursor__caret),div.ProseMirror [contenteditable=false][data-v-a7b1a700]:not(.collaboration-cursor__caret){border:none !important}div.ProseMirror[contenteditable=true][data-v-a7b1a700]:focus,div.ProseMirror[contenteditable=true][data-v-a7b1a700]:focus-visible,div.ProseMirror[contenteditable=false][data-v-a7b1a700]:focus,div.ProseMirror[contenteditable=false][data-v-a7b1a700]:focus-visible,div.ProseMirror [contenteditable=true][data-v-a7b1a700]:focus,div.ProseMirror [contenteditable=true][data-v-a7b1a700]:focus-visible,div.ProseMirror [contenteditable=false][data-v-a7b1a700]:focus,div.ProseMirror [contenteditable=false][data-v-a7b1a700]:focus-visible{box-shadow:none !important}div.ProseMirror ul[data-type=taskList][data-v-a7b1a700]{margin-left:1px}div.ProseMirror .checkbox-item[data-v-a7b1a700]{display:flex;align-items:start}div.ProseMirror .checkbox-item input[type=checkbox][data-v-a7b1a700]{display:none}div.ProseMirror .checkbox-item[data-v-a7b1a700]:before{content:\\\"\\\";vertical-align:middle;margin:3px 6px 3px 2px;border:1px solid var(--color-text-maxcontrast);display:block;border-radius:var(--border-radius);height:14px;width:14px;box-shadow:none !important;background-position:center;cursor:pointer;left:9px}div.ProseMirror .checkbox-item.checked[data-v-a7b1a700]:before{background-image:url(\" + ___CSS_LOADER_URL_REPLACEMENT_0___ + \");background-color:var(--color-primary-element);border-color:var(--color-primary-element)}div.ProseMirror .checkbox-item.checked label[data-v-a7b1a700]{color:var(--color-text-maxcontrast);text-decoration:line-through}div.ProseMirror .checkbox-item label[data-v-a7b1a700]{display:block;flex-grow:1;max-width:calc(100% - 28px)}div.ProseMirror>*[data-v-a7b1a700]:first-child{margin-top:10px}div.ProseMirror>h1[data-v-a7b1a700]:first-child,div.ProseMirror h2[data-v-a7b1a700]:first-child,div.ProseMirror h3[data-v-a7b1a700]:first-child,div.ProseMirror h4[data-v-a7b1a700]:first-child,div.ProseMirror h5[data-v-a7b1a700]:first-child,div.ProseMirror h6[data-v-a7b1a700]:first-child{margin-top:0}div.ProseMirror a[data-v-a7b1a700]{color:var(--color-primary-element);text-decoration:underline;padding:.5em 0}div.ProseMirror p .paragraph-content[data-v-a7b1a700]{margin-bottom:1em;line-height:150%}div.ProseMirror em[data-v-a7b1a700]{font-style:italic}div.ProseMirror h1[data-v-a7b1a700],div.ProseMirror h2[data-v-a7b1a700],div.ProseMirror h3[data-v-a7b1a700],div.ProseMirror h4[data-v-a7b1a700],div.ProseMirror h5[data-v-a7b1a700],div.ProseMirror h6[data-v-a7b1a700]{font-weight:600;line-height:1.1em;margin-top:24px;margin-bottom:12px;color:var(--color-main-text)}div.ProseMirror h1[data-v-a7b1a700]{font-size:36px}div.ProseMirror h2[data-v-a7b1a700]{font-size:30px}div.ProseMirror h3[data-v-a7b1a700]{font-size:24px}div.ProseMirror h4[data-v-a7b1a700]{font-size:21px}div.ProseMirror h5[data-v-a7b1a700]{font-size:17px}div.ProseMirror h6[data-v-a7b1a700]{font-size:var(--default-font-size)}div.ProseMirror img[data-v-a7b1a700]{cursor:default;max-width:100%}div.ProseMirror hr[data-v-a7b1a700]{padding:2px 0;border:none;margin:2em 0;width:100%}div.ProseMirror hr[data-v-a7b1a700]:after{content:\\\"\\\";display:block;height:1px;background-color:var(--color-border-dark);line-height:2px}div.ProseMirror pre[data-v-a7b1a700]{white-space:pre-wrap;background-color:var(--color-background-dark);border-radius:var(--border-radius);padding:1em 1.3em;margin-bottom:1em}div.ProseMirror pre[data-v-a7b1a700]::before{content:attr(data-language);text-transform:uppercase;display:block;text-align:right;font-weight:bold;font-size:.6rem}div.ProseMirror pre code .hljs-comment[data-v-a7b1a700],div.ProseMirror pre code .hljs-quote[data-v-a7b1a700]{color:#999}div.ProseMirror pre code .hljs-variable[data-v-a7b1a700],div.ProseMirror pre code .hljs-template-variable[data-v-a7b1a700],div.ProseMirror pre code .hljs-attribute[data-v-a7b1a700],div.ProseMirror pre code .hljs-tag[data-v-a7b1a700],div.ProseMirror pre code .hljs-name[data-v-a7b1a700],div.ProseMirror pre code .hljs-regexp[data-v-a7b1a700],div.ProseMirror pre code .hljs-link[data-v-a7b1a700],div.ProseMirror pre code .hljs-selector-id[data-v-a7b1a700],div.ProseMirror pre code .hljs-selector-class[data-v-a7b1a700]{color:#f2777a}div.ProseMirror pre code .hljs-number[data-v-a7b1a700],div.ProseMirror pre code .hljs-meta[data-v-a7b1a700],div.ProseMirror pre code .hljs-built_in[data-v-a7b1a700],div.ProseMirror pre code .hljs-builtin-name[data-v-a7b1a700],div.ProseMirror pre code .hljs-literal[data-v-a7b1a700],div.ProseMirror pre code .hljs-type[data-v-a7b1a700],div.ProseMirror pre code .hljs-params[data-v-a7b1a700]{color:#f99157}div.ProseMirror pre code .hljs-string[data-v-a7b1a700],div.ProseMirror pre code .hljs-symbol[data-v-a7b1a700],div.ProseMirror pre code .hljs-bullet[data-v-a7b1a700]{color:#9c9}div.ProseMirror pre code .hljs-title[data-v-a7b1a700],div.ProseMirror pre code .hljs-section[data-v-a7b1a700]{color:#fc6}div.ProseMirror pre code .hljs-keyword[data-v-a7b1a700],div.ProseMirror pre code .hljs-selector-tag[data-v-a7b1a700]{color:#69c}div.ProseMirror pre code .hljs-emphasis[data-v-a7b1a700]{font-style:italic}div.ProseMirror pre code .hljs-strong[data-v-a7b1a700]{font-weight:700}div.ProseMirror pre.frontmatter[data-v-a7b1a700]{margin-bottom:2em;border-left:4px solid var(--color-primary-element)}div.ProseMirror pre.frontmatter[data-v-a7b1a700]::before{display:block;content:attr(data-title);color:var(--color-text-maxcontrast);padding-bottom:.5em}div.ProseMirror p code[data-v-a7b1a700]{background-color:var(--color-background-dark);border-radius:var(--border-radius);padding:.1em .3em}div.ProseMirror li[data-v-a7b1a700]{position:relative;padding-left:3px}div.ProseMirror li p .paragraph-content[data-v-a7b1a700]{margin-bottom:.5em}div.ProseMirror ul[data-v-a7b1a700],div.ProseMirror ol[data-v-a7b1a700]{padding-left:10px;margin-left:10px;margin-bottom:1em}div.ProseMirror ul>li[data-v-a7b1a700]{list-style-type:disc}div.ProseMirror li ul>li[data-v-a7b1a700]{list-style-type:circle}div.ProseMirror li li ul>li[data-v-a7b1a700]{list-style-type:square}div.ProseMirror blockquote[data-v-a7b1a700]{padding-left:1em;border-left:4px solid var(--color-primary-element);color:var(--color-text-maxcontrast);margin-left:0;margin-right:0}div.ProseMirror table[data-v-a7b1a700]{border-spacing:0;width:calc(100% - 50px);table-layout:auto;white-space:normal;margin-bottom:1em}div.ProseMirror table[data-v-a7b1a700]{margin-top:1em}div.ProseMirror table td[data-v-a7b1a700],div.ProseMirror table th[data-v-a7b1a700]{border:1px solid var(--table-color-border);border-left:0;vertical-align:top;max-width:100%}div.ProseMirror table td[data-v-a7b1a700]:first-child,div.ProseMirror table th[data-v-a7b1a700]:first-child{border-left:1px solid var(--table-color-border)}div.ProseMirror table td[data-v-a7b1a700]{padding:.5em .75em;border-top:0;color:var(--color-main-text)}div.ProseMirror table th[data-v-a7b1a700]{padding:0 0 0 .75em;font-weight:normal;border-bottom-color:var(--table-color-heading-border);color:var(--table-color-heading)}div.ProseMirror table th>div[data-v-a7b1a700]{display:flex}div.ProseMirror table tr[data-v-a7b1a700]{background-color:var(--table-color-background)}div.ProseMirror table tr[data-v-a7b1a700]:hover,div.ProseMirror table tr[data-v-a7b1a700]:active,div.ProseMirror table tr[data-v-a7b1a700]:focus{background-color:var(--table-color-background-hover)}div.ProseMirror table tr:first-child th[data-v-a7b1a700]:first-child{border-top-left-radius:var(--table-border-radius)}div.ProseMirror table tr:first-child th[data-v-a7b1a700]:last-child{border-top-right-radius:var(--table-border-radius)}div.ProseMirror table tr:last-child td[data-v-a7b1a700]:first-child{border-bottom-left-radius:var(--table-border-radius)}div.ProseMirror table tr:last-child td[data-v-a7b1a700]:last-child{border-bottom-right-radius:var(--table-border-radius)}.ProseMirror-focused .ProseMirror-gapcursor[data-v-a7b1a700]{display:block}.editor__content p.is-empty[data-v-a7b1a700]:first-child::before{content:attr(data-placeholder);float:left;color:var(--color-text-maxcontrast);pointer-events:none;height:0}.editor__content[data-v-a7b1a700]{tab-size:4}div.ProseMirror[data-v-a7b1a700]{display:inline;margin-top:unset;position:unset;padding:unset;line-height:unset}div.ProseMirror h1[data-v-a7b1a700],div.ProseMirror h6[data-v-a7b1a700]{display:inline;padding:0;margin:0}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/HelpModal.vue\",\"webpack://./css/prosemirror.scss\"],\"names\":[],\"mappings\":\"AAEC,kDACC,iBAAA,CACA,sBAAA,CACA,gBAAA,CAID,0CACC,kDACC,aAAA,CACA,cAAA,CAAA,CAKH,uBACC,eAAA,CACA,wBAAA,CAGC,mHACC,yCAAA,CAIF,gCACC,WAAA,CAGD,0BACC,gBAAA,CACA,4BAAA,CACA,sDAAA,CAGD,0BACC,4BAAA,CACA,iDAAA,CACA,mBAAA,CAEA,mCACC,gBAAA,CAGD,uCACC,gBAAA,CAGD,mCACC,aAAA,CACA,gBAAA,CAGD,0CACC,aAAA,CAIF,2BACC,iBAAA,CAGD,4BACC,iBAAA,CACA,aAAA,CACA,6CAAA,CACA,iBAAA,CCjEF,iCACC,WAAA,CACA,iBAAA,CACA,oBAAA,CACA,oBAAA,CACA,mCAAA,CACA,2BAAA,CACA,0BAAA,CACA,gBAAA,CACA,kCAAA,CACA,YAAA,CA+QA,yCAAA,CACA,oDAAA,CACA,sDAAA,CACA,sDAAA,CACA,0DAAA,CACA,2CAAA,CAlRA,yCAEC,sBAAA,CAGD,gOAIC,UAAA,CACA,8BAAA,CACA,4BAAA,CACA,SAAA,CACA,wBAAA,CACA,gBAAA,CACA,kCAAA,CAEA,wWACC,sBAAA,CAGD,ghBACC,0BAAA,CAIF,wDACC,eAAA,CAGD,gDACC,YAAA,CACA,iBAAA,CAEA,qEACC,YAAA,CAED,uDACC,UAAA,CACA,qBAAA,CACA,sBAAA,CACA,8CAAA,CACA,aAAA,CACA,kCAAA,CACA,WAAA,CACA,UAAA,CACA,0BAAA,CACA,0BAAA,CACA,cAAA,CACA,QAAA,CAGA,+DACC,wDAAA,CACA,6CAAA,CACA,yCAAA,CAED,8DACC,mCAAA,CACA,4BAAA,CAGF,sDACC,aAAA,CACA,WAAA,CACA,2BAAA,CAIF,+CACC,eAAA,CAIA,gSACC,YAAA,CAIF,mCACC,kCAAA,CACA,yBAAA,CACA,cAAA,CAGD,sDACC,iBAAA,CACA,gBAAA,CAGD,oCACC,iBAAA,CAGD,wNAMC,eAAA,CACA,iBAAA,CACA,eAAA,CACA,kBAAA,CACA,4BAAA,CAGD,oCACC,cAAA,CAGD,oCACC,cAAA,CAGD,oCACC,cAAA,CAGD,oCACC,cAAA,CAGD,oCACC,cAAA,CAGD,oCACC,kCAAA,CAGD,qCACC,cAAA,CACA,cAAA,CAGD,oCACC,aAAA,CACA,WAAA,CACA,YAAA,CACA,UAAA,CAGD,0CACC,UAAA,CACA,aAAA,CACA,UAAA,CACA,yCAAA,CACA,eAAA,CAGD,qCACC,oBAAA,CACA,6CAAA,CACA,kCAAA,CACA,iBAAA,CACA,iBAAA,CAEA,6CACC,2BAAA,CACA,wBAAA,CACA,aAAA,CACA,gBAAA,CACA,gBAAA,CACA,eAAA,CAGA,8GAEC,UAAA,CAED,qgBASC,aAAA,CAED,sYAOC,aAAA,CAED,qKAGC,UAAA,CAED,8GAEC,UAAA,CAED,qHAEC,UAAA,CAED,yDACC,iBAAA,CAED,uDACC,eAAA,CAKH,iDACC,iBAAA,CACA,kDAAA,CAGD,yDACC,aAAA,CACA,wBAAA,CACA,mCAAA,CACA,mBAAA,CAGD,wCACC,6CAAA,CACA,kCAAA,CACA,iBAAA,CAGD,oCACC,iBAAA,CACA,gBAAA,CAEA,yDACC,kBAAA,CAIF,wEACC,iBAAA,CACA,gBAAA,CACA,iBAAA,CAGD,uCACC,oBAAA,CAID,0CACC,sBAAA,CAID,6CACC,sBAAA,CAGD,4CACC,gBAAA,CACA,kDAAA,CACA,mCAAA,CACA,aAAA,CACA,cAAA,CAWD,uCACC,gBAAA,CACA,uBAAA,CACA,iBAAA,CACA,kBAAA,CACA,iBAAA,CACA,uCACC,cAAA,CAID,oFACC,0CAAA,CACA,aAAA,CACA,kBAAA,CACA,cAAA,CACA,4GACC,+CAAA,CAGF,0CACC,kBAAA,CACA,YAAA,CACA,4BAAA,CAED,0CACC,mBAAA,CACA,kBAAA,CACA,qDAAA,CACA,gCAAA,CAEA,8CACC,YAAA,CAGF,0CACC,8CAAA,CACA,iJACC,oDAAA,CAKD,qEAAA,iDAAA,CACA,oEAAA,kDAAA,CAIA,oEAAA,oDAAA,CACA,mEAAA,qDAAA,CAOH,6DACC,aAAA,CAGD,iEACC,8BAAA,CACA,UAAA,CACA,mCAAA,CACA,mBAAA,CACA,QAAA,CAGD,kCACC,UAAA,CD9RD,iCACC,cAAA,CACA,gBAAA,CACA,cAAA,CACA,aAAA,CACA,iBAAA,CAEA,wEACC,cAAA,CACA,SAAA,CACA,QAAA\",\"sourcesContent\":[\"\\n:deep(.modal-wrapper) {\\n\\t.modal-container {\\n\\t\\twidth: max-content;\\n\\t\\tpadding: 30px 40px 20px;\\n\\t\\tuser-select: text;\\n\\t}\\n\\n\\t// Remove padding-right on mobile, screen might not be wide enough\\n\\t@media only screen and (max-width: 512px) {\\n\\t\\t.modal-container {\\n\\t\\t\\twidth: inherit;\\n\\t\\t\\tpadding: 10px 0;\\n\\t\\t}\\n\\t}\\n}\\n\\ntable {\\n\\tmargin-top: 24px;\\n\\tborder-collapse: collapse;\\n\\n\\ttbody tr {\\n\\t\\t&:hover, &:focus, &:active {\\n\\t\\t\\tbackground-color: transparent !important;\\n\\t\\t}\\n\\t}\\n\\n\\tthead tr {\\n\\t\\tborder: none;\\n\\t}\\n\\n\\tth {\\n\\t\\tfont-weight: bold;\\n\\t\\tpadding: .75rem 1rem .75rem 0;\\n\\t\\tborder-bottom: 2px solid var(--color-background-darker);\\n\\t}\\n\\n\\ttd {\\n\\t\\tpadding: .75rem 1rem .75rem 0;\\n\\t\\tborder-top: 1px solid var(--color-background-dark);\\n\\t\\tborder-bottom: unset;\\n\\n\\t\\t&.noborder {\\n\\t\\t\\tborder-top: unset;\\n\\t\\t}\\n\\n\\t\\t&.ellipsis_top {\\n\\t\\t\\tpadding-bottom: 0;\\n\\t\\t}\\n\\n\\t\\t&.ellipsis {\\n\\t\\t\\tpadding-top: 0;\\n\\t\\t\\tpadding-bottom: 0;\\n\\t\\t}\\n\\n\\t\\t&.ellipsis_bottom {\\n\\t\\t\\tpadding-top: 0;\\n\\t\\t}\\n\\t}\\n\\n\\tkbd {\\n\\t\\tfont-size: smaller;\\n\\t}\\n\\n\\tcode {\\n\\t\\tpadding: .2em .4em;\\n\\t\\tfont-size: 90%;\\n\\t\\tbackground-color: var(--color-background-dark);\\n\\t\\tborder-radius: 6px;\\n\\t}\\n}\\n\\n@import '../../css/prosemirror';\\n\\ndiv.ProseMirror {\\n\\tdisplay: inline;\\n\\tmargin-top: unset;\\n\\tposition: unset;\\n\\tpadding: unset;\\n\\tline-height: unset;\\n\\n\\th1, h6 {\\n\\t\\tdisplay: inline;\\n\\t\\tpadding: 0;\\n\\t\\tmargin: 0;\\n\\t}\\n}\\n\",\"@use 'sass:selector';\\n\\n/* Document rendering styles */\\ndiv.ProseMirror {\\n\\theight: 100%;\\n\\tposition: relative;\\n\\tword-wrap: break-word;\\n\\twhite-space: pre-wrap;\\n\\t-webkit-font-variant-ligatures: none;\\n\\tfont-variant-ligatures: none;\\n\\tpadding: 4px 8px 200px 14px;\\n\\tline-height: 150%;\\n\\tfont-size: var(--default-font-size);\\n\\toutline: none;\\n\\n\\t:target {\\n\\t\\t// Menubar height: 44px + 3px bottom + 3px top padding\\n\\t\\tscroll-margin-top: 50px;\\n\\t}\\n\\n\\t&[contenteditable=true],\\n\\t&[contenteditable=false],\\n\\t[contenteditable=true],\\n\\t[contenteditable=false] {\\n\\t\\twidth: 100%;\\n\\t\\tbackground-color: transparent;\\n\\t\\tcolor: var(--color-main-text);\\n\\t\\topacity: 1;\\n\\t\\t-webkit-user-select: text;\\n\\t\\tuser-select: text;\\n\\t\\tfont-size: var(--default-font-size);\\n\\n\\t\\t&:not(.collaboration-cursor__caret) {\\n\\t\\t\\tborder: none !important;\\n\\t\\t}\\n\\n\\t\\t&:focus, &:focus-visible {\\n\\t\\t\\tbox-shadow: none !important;\\n\\t\\t}\\n\\t}\\n\\n\\tul[data-type=taskList] {\\n\\t\\tmargin-left: 1px;\\n\\t}\\n\\n\\t.checkbox-item {\\n\\t\\tdisplay: flex;\\n\\t\\talign-items: start;\\n\\n\\t\\tinput[type=checkbox] {\\n\\t\\t\\tdisplay: none;\\n\\t\\t}\\n\\t\\t&:before {\\n\\t\\t\\tcontent: '';\\n\\t\\t\\tvertical-align: middle;\\n\\t\\t\\tmargin: 3px 6px 3px 2px;\\n\\t\\t\\tborder: 1px solid var(--color-text-maxcontrast);\\n\\t\\t\\tdisplay: block;\\n\\t\\t\\tborder-radius: var(--border-radius);\\n\\t\\t\\theight: 14px;\\n\\t\\t\\twidth: 14px;\\n\\t\\t\\tbox-shadow: none !important;\\n\\t\\t\\tbackground-position: center;\\n\\t\\t\\tcursor: pointer;\\n\\t\\t\\tleft: 9px;\\n\\t\\t}\\n\\t\\t&.checked{\\n\\t\\t\\t&:before {\\n\\t\\t\\t\\tbackground-image: url('../../img/checkbox-mark.svg');\\n\\t\\t\\t\\tbackground-color: var(--color-primary-element);\\n\\t\\t\\t\\tborder-color: var(--color-primary-element);\\n\\t\\t\\t}\\n\\t\\t\\tlabel {\\n\\t\\t\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t\\t\\t\\ttext-decoration: line-through;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tlabel {\\n\\t\\t\\tdisplay: block;\\n\\t\\t\\tflex-grow: 1;\\n\\t\\t\\tmax-width: calc(100% - 28px);\\n\\t\\t}\\n\\t}\\n\\n\\t> *:first-child {\\n\\t\\tmargin-top: 10px;\\n\\t}\\n\\n\\t> h1,h2,h3,h4,h5,h6 {\\n\\t\\t&:first-child {\\n\\t\\t\\tmargin-top: 0;\\n\\t\\t}\\n\\t}\\n\\n\\ta {\\n\\t\\tcolor: var(--color-primary-element);\\n\\t\\ttext-decoration: underline;\\n\\t\\tpadding: .5em 0;\\n\\t}\\n\\n\\tp .paragraph-content {\\n\\t\\tmargin-bottom: 1em;\\n\\t\\tline-height: 150%;\\n\\t}\\n\\n\\tem {\\n\\t\\tfont-style: italic;\\n\\t}\\n\\n\\th1,\\n\\th2,\\n\\th3,\\n\\th4,\\n\\th5,\\n\\th6 {\\n\\t\\tfont-weight: 600;\\n\\t\\tline-height: 1.1em;\\n\\t\\tmargin-top: 24px;\\n\\t\\tmargin-bottom: 12px;\\n\\t\\tcolor: var(--color-main-text);\\n\\t}\\n\\n\\th1 {\\n\\t\\tfont-size: 36px;\\n\\t}\\n\\n\\th2 {\\n\\t\\tfont-size: 30px;\\n\\t}\\n\\n\\th3 {\\n\\t\\tfont-size: 24px;\\n\\t}\\n\\n\\th4 {\\n\\t\\tfont-size: 21px;\\n\\t}\\n\\n\\th5 {\\n\\t\\tfont-size: 17px;\\n\\t}\\n\\n\\th6 {\\n\\t\\tfont-size: var(--default-font-size);\\n\\t}\\n\\n\\timg {\\n\\t\\tcursor: default;\\n\\t\\tmax-width: 100%;\\n\\t}\\n\\n\\thr {\\n\\t\\tpadding: 2px 0;\\n\\t\\tborder: none;\\n\\t\\tmargin: 2em 0;\\n\\t\\twidth: 100%;\\n\\t}\\n\\n\\thr:after {\\n\\t\\tcontent: '';\\n\\t\\tdisplay: block;\\n\\t\\theight: 1px;\\n\\t\\tbackground-color: var(--color-border-dark);\\n\\t\\tline-height: 2px;\\n\\t}\\n\\n\\tpre {\\n\\t\\twhite-space: pre-wrap;\\n\\t\\tbackground-color: var(--color-background-dark);\\n\\t\\tborder-radius: var(--border-radius);\\n\\t\\tpadding: 1em 1.3em;\\n\\t\\tmargin-bottom: 1em;\\n\\n\\t\\t&::before {\\n\\t\\t\\tcontent: attr(data-language);\\n\\t\\t\\ttext-transform: uppercase;\\n\\t\\t\\tdisplay: block;\\n\\t\\t\\ttext-align: right;\\n\\t\\t\\tfont-weight: bold;\\n\\t\\t\\tfont-size: 0.6rem;\\n\\t\\t}\\n\\t\\tcode {\\n\\t\\t\\t.hljs-comment,\\n\\t\\t\\t.hljs-quote {\\n\\t\\t\\t\\tcolor: #999999;\\n\\t\\t\\t}\\n\\t\\t\\t.hljs-variable,\\n\\t\\t\\t.hljs-template-variable,\\n\\t\\t\\t.hljs-attribute,\\n\\t\\t\\t.hljs-tag,\\n\\t\\t\\t.hljs-name,\\n\\t\\t\\t.hljs-regexp,\\n\\t\\t\\t.hljs-link,\\n\\t\\t\\t.hljs-selector-id,\\n\\t\\t\\t.hljs-selector-class {\\n\\t\\t\\t\\tcolor: #f2777a;\\n\\t\\t\\t}\\n\\t\\t\\t.hljs-number,\\n\\t\\t\\t.hljs-meta,\\n\\t\\t\\t.hljs-built_in,\\n\\t\\t\\t.hljs-builtin-name,\\n\\t\\t\\t.hljs-literal,\\n\\t\\t\\t.hljs-type,\\n\\t\\t\\t.hljs-params {\\n\\t\\t\\t\\tcolor: #f99157;\\n\\t\\t\\t}\\n\\t\\t\\t.hljs-string,\\n\\t\\t\\t.hljs-symbol,\\n\\t\\t\\t.hljs-bullet {\\n\\t\\t\\t\\tcolor: #99cc99;\\n\\t\\t\\t}\\n\\t\\t\\t.hljs-title,\\n\\t\\t\\t.hljs-section {\\n\\t\\t\\t\\tcolor: #ffcc66;\\n\\t\\t\\t}\\n\\t\\t\\t.hljs-keyword,\\n\\t\\t\\t.hljs-selector-tag {\\n\\t\\t\\t\\tcolor: #6699cc;\\n\\t\\t\\t}\\n\\t\\t\\t.hljs-emphasis {\\n\\t\\t\\t\\tfont-style: italic;\\n\\t\\t\\t}\\n\\t\\t\\t.hljs-strong {\\n\\t\\t\\t\\tfont-weight: 700;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\\tpre.frontmatter {\\n\\t\\tmargin-bottom: 2em;\\n\\t\\tborder-left: 4px solid var(--color-primary-element);\\n\\t}\\n\\n\\tpre.frontmatter::before {\\n\\t\\tdisplay: block;\\n\\t\\tcontent: attr(data-title);\\n\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t\\tpadding-bottom: 0.5em;\\n\\t}\\n\\n\\tp code {\\n\\t\\tbackground-color: var(--color-background-dark);\\n\\t\\tborder-radius: var(--border-radius);\\n\\t\\tpadding: .1em .3em;\\n\\t}\\n\\n\\tli {\\n\\t\\tposition: relative;\\n\\t\\tpadding-left: 3px;\\n\\n\\t\\tp .paragraph-content {\\n\\t\\t\\tmargin-bottom: 0.5em;\\n\\t\\t}\\n\\t}\\n\\n\\tul, ol {\\n\\t\\tpadding-left: 10px;\\n\\t\\tmargin-left: 10px;\\n\\t\\tmargin-bottom: 1em;\\n\\t}\\n\\n\\tul > li {\\n\\t\\tlist-style-type: disc;\\n\\t}\\n\\n\\t// Second-level list entries\\n\\tli ul > li {\\n\\t\\tlist-style-type: circle;\\n\\t}\\n\\n\\t// Third-level and further down list entries\\n\\tli li ul > li {\\n\\t\\tlist-style-type: square;\\n\\t}\\n\\n\\tblockquote {\\n\\t\\tpadding-left: 1em;\\n\\t\\tborder-left: 4px solid var(--color-primary-element);\\n\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t\\tmargin-left: 0;\\n\\t\\tmargin-right: 0;\\n\\t}\\n\\n\\t// table variables\\n\\t--table-color-border: var(--color-border);\\n\\t--table-color-heading: var(--color-text-maxcontrast);\\n\\t--table-color-heading-border: var(--color-border-dark);\\n\\t--table-color-background: var(--color-main-background);\\n\\t--table-color-background-hover: var(--color-primary-light);\\n\\t--table-border-radius: var(--border-radius);\\n\\n\\ttable {\\n\\t\\tborder-spacing: 0;\\n\\t\\twidth: calc(100% - 50px);\\n\\t\\ttable-layout: auto;\\n\\t\\twhite-space: normal; // force text to wrapping\\n\\t\\tmargin-bottom: 1em;\\n\\t\\t+ & {\\n\\t\\t\\tmargin-top: 1em;\\n\\t\\t}\\n\\n\\n\\t\\ttd, th {\\n\\t\\t\\tborder: 1px solid var(--table-color-border);\\n\\t\\t\\tborder-left: 0;\\n\\t\\t\\tvertical-align: top;\\n\\t\\t\\tmax-width: 100%;\\n\\t\\t\\t&:first-child {\\n\\t\\t\\t\\tborder-left: 1px solid var(--table-color-border);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\ttd {\\n\\t\\t\\tpadding: 0.5em 0.75em;\\n\\t\\t\\tborder-top: 0;\\n\\t\\t\\tcolor: var(--color-main-text);\\n\\t\\t}\\n\\t\\tth {\\n\\t\\t\\tpadding: 0 0 0 0.75em;\\n\\t\\t\\tfont-weight: normal;\\n\\t\\t\\tborder-bottom-color: var(--table-color-heading-border);\\n\\t\\t\\tcolor: var(--table-color-heading);\\n\\n\\t\\t\\t& > div {\\n\\t\\t\\t\\tdisplay: flex;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\ttr {\\n\\t\\t\\tbackground-color: var(--table-color-background);\\n\\t\\t\\t&:hover, &:active, &:focus {\\n\\t\\t\\t\\tbackground-color: var(--table-color-background-hover);\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\ttr:first-child {\\n\\t\\t\\tth:first-child { border-top-left-radius: var(--table-border-radius); }\\n\\t\\t\\tth:last-child { border-top-right-radius: var(--table-border-radius); }\\n\\t\\t}\\n\\n\\t\\ttr:last-child {\\n\\t\\t\\ttd:first-child { border-bottom-left-radius: var(--table-border-radius); }\\n\\t\\t\\ttd:last-child { border-bottom-right-radius: var(--table-border-radius); }\\n\\t\\t}\\n\\n\\t}\\n\\n}\\n\\n.ProseMirror-focused .ProseMirror-gapcursor {\\n\\tdisplay: block;\\n}\\n\\n.editor__content p.is-empty:first-child::before {\\n\\tcontent: attr(data-placeholder);\\n\\tfloat: left;\\n\\tcolor: var(--color-text-maxcontrast);\\n\\tpointer-events: none;\\n\\theight: 0;\\n}\\n\\n.editor__content {\\n\\ttab-size: 4;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".modal__content[data-v-8f1a4cfa]{height:80vh;padding:0 50px;display:flex;justify-content:center}.modal__content img[data-v-8f1a4cfa]{width:100%;height:100%;object-fit:contain}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/ImageView/ShowImageModal.vue\"],\"names\":[],\"mappings\":\"AACA,iCACC,WAAA,CACA,cAAA,CACA,YAAA,CACA,sBAAA,CACA,qCACC,UAAA,CACA,WAAA,CACA,kBAAA\",\"sourcesContent\":[\"\\n.modal__content {\\n\\theight: 80vh;\\n\\tpadding: 0 50px;\\n\\tdisplay: flex;\\n\\tjustify-content: center;\\n\\timg {\\n\\t\\twidth: 100%;\\n\\t\\theight: 100%;\\n\\t\\tobject-fit: contain;\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"ul.inline-container-content{display:flex;justify-content:space-between}ul.inline-container-content li{flex:1 1}ul.inline-container-content .action-button{padding:0 !important;width:100%;display:flex;justify-content:center}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/InlineActionsContainer.vue\"],\"names\":[],\"mappings\":\"AACA,4BACC,YAAA,CACA,6BAAA,CACA,+BACC,QAAA,CAGD,2CAEC,oBAAA,CACA,UAAA,CACA,YAAA,CACA,sBAAA\",\"sourcesContent\":[\"\\nul.inline-container-content {\\n\\tdisplay: flex;\\n\\tjustify-content: space-between;\\n\\tli {\\n\\t\\tflex: 1 1;\\n\\t}\\n\\n\\t.action-button {\\n\\t\\t// Fix action buttons beeing shifted to the left (right padding)\\n\\t\\tpadding: 0 !important;\\n\\t\\twidth: 100%;\\n\\t\\tdisplay: flex;\\n\\t\\tjustify-content: center;\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".text-menubar[data-v-37af82be]{--background-blur: blur(10px);position:sticky;top:0;z-index:10021;background-color:var(--color-main-background-translucent);backdrop-filter:var(--background-blur);max-height:44px;padding-top:3px;padding-bottom:3px;visibility:hidden;display:flex;justify-content:flex-end;align-items:center}.text-menubar.text-menubar--ready[data-v-37af82be]:not(.text-menubar--autohide){visibility:visible;animation-name:fadeInDown;animation-duration:.3s}.text-menubar.text-menubar--autohide[data-v-37af82be]{opacity:0;transition:visibility .2s .4s,opacity .2s .4s}.text-menubar.text-menubar--autohide.text-menubar--show[data-v-37af82be]{visibility:visible;opacity:1}.text-menubar .text-menubar__entries[data-v-37af82be]{display:flex;flex-grow:1;margin-left:max(0px,(100% - var(--text-editor-max-width))/2)}.text-menubar .text-menubar__slot[data-v-37af82be]{justify-content:flex-end;display:flex;min-width:max(0px,min(100px,(100% - var(--text-editor-max-width))/2))}.text-menubar.text-menubar--is-workspace .text-menubar__entries[data-v-37af82be]{margin-left:0}@media(max-width: 660px){.text-menubar .text-menubar__entries[data-v-37af82be]{margin-left:0}}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/Menu/MenuBar.vue\"],\"names\":[],\"mappings\":\"AACA,+BACC,6BAAA,CACA,eAAA,CACA,KAAA,CACA,aAAA,CACA,yDAAA,CACA,sCAAA,CACA,eAAA,CACA,eAAA,CACA,kBAAA,CAEA,iBAAA,CAEA,YAAA,CACA,wBAAA,CACA,kBAAA,CAEA,gFACC,kBAAA,CACA,yBAAA,CACA,sBAAA,CAGD,sDACC,SAAA,CACA,6CAAA,CACA,yEACC,kBAAA,CACA,SAAA,CAGF,sDACC,YAAA,CACA,WAAA,CACA,4DAAA,CAGD,mDACC,wBAAA,CACA,YAAA,CACA,qEAAA,CAIA,iFACC,aAAA,CAIF,yBACC,sDACC,aAAA,CAAA\",\"sourcesContent\":[\"\\n.text-menubar {\\n\\t--background-blur: blur(10px);\\n\\tposition: sticky;\\n\\ttop: 0;\\n\\tz-index: 10021; // above modal-header so menubar is always on top\\n\\tbackground-color: var(--color-main-background-translucent);\\n\\tbackdrop-filter: var(--background-blur);\\n\\tmax-height: 44px; // important for mobile so that the buttons are always inside the container\\n\\tpadding-top:3px;\\n\\tpadding-bottom: 3px;\\n\\n\\tvisibility: hidden;\\n\\n\\tdisplay: flex;\\n\\tjustify-content: flex-end;\\n\\talign-items: center;\\n\\n\\t&.text-menubar--ready:not(.text-menubar--autohide) {\\n\\t\\tvisibility: visible;\\n\\t\\tanimation-name: fadeInDown;\\n\\t\\tanimation-duration: 0.3s;\\n\\t}\\n\\n\\t&.text-menubar--autohide {\\n\\t\\topacity: 0;\\n\\t\\ttransition: visibility 0.2s 0.4s, opacity 0.2s 0.4s;\\n\\t\\t&.text-menubar--show {\\n\\t\\t\\tvisibility: visible;\\n\\t\\t\\topacity: 1;\\n\\t\\t}\\n\\t}\\n\\t.text-menubar__entries {\\n\\t\\tdisplay: flex;\\n\\t\\tflex-grow: 1;\\n\\t\\tmargin-left: max(0px, calc((100% - var(--text-editor-max-width)) / 2));\\n\\t}\\n\\n\\t.text-menubar__slot {\\n\\t\\tjustify-content: flex-end;\\n\\t\\tdisplay: flex;\\n\\t\\tmin-width: max(0px, min(100px, (100% - var(--text-editor-max-width)) / 2));\\n\\t}\\n\\n\\t&.text-menubar--is-workspace {\\n\\t\\t.text-menubar__entries {\\n\\t\\t\\tmargin-left: 0;\\n\\t\\t}\\n\\t}\\n\\n\\t@media (max-width: 660px) {\\n\\t\\t.text-menubar__entries {\\n\\t\\t\\tmargin-left: 0;\\n\\t\\t}\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".translate-dialog[data-v-6f82ffba]{margin:24px}textarea[data-v-6f82ffba]{display:block;width:100%;margin-bottom:12px}.language-selector[data-v-6f82ffba]{display:flex;align-items:center;margin-bottom:12px}.language-selector label[data-v-6f82ffba]{flex-grow:1}.translate-actions[data-v-6f82ffba]{display:flex;justify-content:flex-end}.translate-actions button[data-v-6f82ffba]{margin-left:12px}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/Modal/Translate.vue\"],\"names\":[],\"mappings\":\"AACA,mCACC,WAAA,CAGD,0BACC,aAAA,CACA,UAAA,CACA,kBAAA,CAID,oCACC,YAAA,CACA,kBAAA,CACA,kBAAA,CAEA,0CACC,WAAA,CAIF,oCACC,YAAA,CACA,wBAAA,CAEA,2CACC,gBAAA\",\"sourcesContent\":[\"\\n.translate-dialog {\\n\\tmargin: 24px;\\n}\\n\\ntextarea {\\n\\tdisplay: block;\\n\\twidth: 100%;\\n\\tmargin-bottom: 12px;\\n\\n}\\n\\n.language-selector {\\n\\tdisplay: flex;\\n\\talign-items: center;\\n\\tmargin-bottom: 12px;\\n\\n\\tlabel {\\n\\t\\tflex-grow: 1;\\n\\t}\\n}\\n\\n.translate-actions {\\n\\tdisplay: flex;\\n\\tjustify-content: flex-end;\\n\\n\\tbutton {\\n\\t\\tmargin-left: 12px;\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"#read-only-editor{overflow:scroll}.thumbnailContainer #read-only-editor{width:100%}.thumbnailContainer #read-only-editor .ProseMirror{height:auto;margin:0 0 0 0;padding:0}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/Reader.vue\"],\"names\":[],\"mappings\":\"AAEA,kBACC,eAAA,CAGD,sCACC,UAAA,CAEA,mDACC,WAAA,CACA,cAAA,CACA,SAAA\",\"sourcesContent\":[\"\\n\\n#read-only-editor {\\n\\toverflow: scroll;\\n}\\n\\n.thumbnailContainer #read-only-editor {\\n\\twidth: 100%;\\n\\n\\t.ProseMirror {\\n\\t\\theight: auto;\\n\\t\\tmargin: 0 0 0 0;\\n\\t\\tpadding: 0;\\n\\t}\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_GET_URL_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/getUrl.js\";\nvar ___CSS_LOADER_URL_IMPORT_0___ = new URL(\"../../img/checkbox-mark.svg\", import.meta.url);\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\nvar ___CSS_LOADER_URL_REPLACEMENT_0___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_0___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"div.ProseMirror{height:100%;position:relative;word-wrap:break-word;white-space:pre-wrap;-webkit-font-variant-ligatures:none;font-variant-ligatures:none;padding:4px 8px 200px 14px;line-height:150%;font-size:var(--default-font-size);outline:none;--table-color-border: var(--color-border);--table-color-heading: var(--color-text-maxcontrast);--table-color-heading-border: var(--color-border-dark);--table-color-background: var(--color-main-background);--table-color-background-hover: var(--color-primary-light);--table-border-radius: var(--border-radius)}div.ProseMirror :target{scroll-margin-top:50px}div.ProseMirror[contenteditable=true],div.ProseMirror[contenteditable=false],div.ProseMirror [contenteditable=true],div.ProseMirror [contenteditable=false]{width:100%;background-color:rgba(0,0,0,0);color:var(--color-main-text);opacity:1;-webkit-user-select:text;user-select:text;font-size:var(--default-font-size)}div.ProseMirror[contenteditable=true]:not(.collaboration-cursor__caret),div.ProseMirror[contenteditable=false]:not(.collaboration-cursor__caret),div.ProseMirror [contenteditable=true]:not(.collaboration-cursor__caret),div.ProseMirror [contenteditable=false]:not(.collaboration-cursor__caret){border:none !important}div.ProseMirror[contenteditable=true]:focus,div.ProseMirror[contenteditable=true]:focus-visible,div.ProseMirror[contenteditable=false]:focus,div.ProseMirror[contenteditable=false]:focus-visible,div.ProseMirror [contenteditable=true]:focus,div.ProseMirror [contenteditable=true]:focus-visible,div.ProseMirror [contenteditable=false]:focus,div.ProseMirror [contenteditable=false]:focus-visible{box-shadow:none !important}div.ProseMirror ul[data-type=taskList]{margin-left:1px}div.ProseMirror .checkbox-item{display:flex;align-items:start}div.ProseMirror .checkbox-item input[type=checkbox]{display:none}div.ProseMirror .checkbox-item:before{content:\\\"\\\";vertical-align:middle;margin:3px 6px 3px 2px;border:1px solid var(--color-text-maxcontrast);display:block;border-radius:var(--border-radius);height:14px;width:14px;box-shadow:none !important;background-position:center;cursor:pointer;left:9px}div.ProseMirror .checkbox-item.checked:before{background-image:url(\" + ___CSS_LOADER_URL_REPLACEMENT_0___ + \");background-color:var(--color-primary-element);border-color:var(--color-primary-element)}div.ProseMirror .checkbox-item.checked label{color:var(--color-text-maxcontrast);text-decoration:line-through}div.ProseMirror .checkbox-item label{display:block;flex-grow:1;max-width:calc(100% - 28px)}div.ProseMirror>*:first-child{margin-top:10px}div.ProseMirror>h1:first-child,div.ProseMirror h2:first-child,div.ProseMirror h3:first-child,div.ProseMirror h4:first-child,div.ProseMirror h5:first-child,div.ProseMirror h6:first-child{margin-top:0}div.ProseMirror a{color:var(--color-primary-element);text-decoration:underline;padding:.5em 0}div.ProseMirror p .paragraph-content{margin-bottom:1em;line-height:150%}div.ProseMirror em{font-style:italic}div.ProseMirror h1,div.ProseMirror h2,div.ProseMirror h3,div.ProseMirror h4,div.ProseMirror h5,div.ProseMirror h6{font-weight:600;line-height:1.1em;margin-top:24px;margin-bottom:12px;color:var(--color-main-text)}div.ProseMirror h1{font-size:36px}div.ProseMirror h2{font-size:30px}div.ProseMirror h3{font-size:24px}div.ProseMirror h4{font-size:21px}div.ProseMirror h5{font-size:17px}div.ProseMirror h6{font-size:var(--default-font-size)}div.ProseMirror img{cursor:default;max-width:100%}div.ProseMirror hr{padding:2px 0;border:none;margin:2em 0;width:100%}div.ProseMirror hr:after{content:\\\"\\\";display:block;height:1px;background-color:var(--color-border-dark);line-height:2px}div.ProseMirror pre{white-space:pre-wrap;background-color:var(--color-background-dark);border-radius:var(--border-radius);padding:1em 1.3em;margin-bottom:1em}div.ProseMirror pre::before{content:attr(data-language);text-transform:uppercase;display:block;text-align:right;font-weight:bold;font-size:.6rem}div.ProseMirror pre code .hljs-comment,div.ProseMirror pre code .hljs-quote{color:#999}div.ProseMirror pre code .hljs-variable,div.ProseMirror pre code .hljs-template-variable,div.ProseMirror pre code .hljs-attribute,div.ProseMirror pre code .hljs-tag,div.ProseMirror pre code .hljs-name,div.ProseMirror pre code .hljs-regexp,div.ProseMirror pre code .hljs-link,div.ProseMirror pre code .hljs-selector-id,div.ProseMirror pre code .hljs-selector-class{color:#f2777a}div.ProseMirror pre code .hljs-number,div.ProseMirror pre code .hljs-meta,div.ProseMirror pre code .hljs-built_in,div.ProseMirror pre code .hljs-builtin-name,div.ProseMirror pre code .hljs-literal,div.ProseMirror pre code .hljs-type,div.ProseMirror pre code .hljs-params{color:#f99157}div.ProseMirror pre code .hljs-string,div.ProseMirror pre code .hljs-symbol,div.ProseMirror pre code .hljs-bullet{color:#9c9}div.ProseMirror pre code .hljs-title,div.ProseMirror pre code .hljs-section{color:#fc6}div.ProseMirror pre code .hljs-keyword,div.ProseMirror pre code .hljs-selector-tag{color:#69c}div.ProseMirror pre code .hljs-emphasis{font-style:italic}div.ProseMirror pre code .hljs-strong{font-weight:700}div.ProseMirror pre.frontmatter{margin-bottom:2em;border-left:4px solid var(--color-primary-element)}div.ProseMirror pre.frontmatter::before{display:block;content:attr(data-title);color:var(--color-text-maxcontrast);padding-bottom:.5em}div.ProseMirror p code{background-color:var(--color-background-dark);border-radius:var(--border-radius);padding:.1em .3em}div.ProseMirror li{position:relative;padding-left:3px}div.ProseMirror li p .paragraph-content{margin-bottom:.5em}div.ProseMirror ul,div.ProseMirror ol{padding-left:10px;margin-left:10px;margin-bottom:1em}div.ProseMirror ul>li{list-style-type:disc}div.ProseMirror li ul>li{list-style-type:circle}div.ProseMirror li li ul>li{list-style-type:square}div.ProseMirror blockquote{padding-left:1em;border-left:4px solid var(--color-primary-element);color:var(--color-text-maxcontrast);margin-left:0;margin-right:0}div.ProseMirror table{border-spacing:0;width:calc(100% - 50px);table-layout:auto;white-space:normal;margin-bottom:1em}div.ProseMirror table{margin-top:1em}div.ProseMirror table td,div.ProseMirror table th{border:1px solid var(--table-color-border);border-left:0;vertical-align:top;max-width:100%}div.ProseMirror table td:first-child,div.ProseMirror table th:first-child{border-left:1px solid var(--table-color-border)}div.ProseMirror table td{padding:.5em .75em;border-top:0;color:var(--color-main-text)}div.ProseMirror table th{padding:0 0 0 .75em;font-weight:normal;border-bottom-color:var(--table-color-heading-border);color:var(--table-color-heading)}div.ProseMirror table th>div{display:flex}div.ProseMirror table tr{background-color:var(--table-color-background)}div.ProseMirror table tr:hover,div.ProseMirror table tr:active,div.ProseMirror table tr:focus{background-color:var(--table-color-background-hover)}div.ProseMirror table tr:first-child th:first-child{border-top-left-radius:var(--table-border-radius)}div.ProseMirror table tr:first-child th:last-child{border-top-right-radius:var(--table-border-radius)}div.ProseMirror table tr:last-child td:first-child{border-bottom-left-radius:var(--table-border-radius)}div.ProseMirror table tr:last-child td:last-child{border-bottom-right-radius:var(--table-border-radius)}.ProseMirror-focused .ProseMirror-gapcursor{display:block}.editor__content p.is-empty:first-child::before{content:attr(data-placeholder);float:left;color:var(--color-text-maxcontrast);pointer-events:none;height:0}.editor__content{tab-size:4}@media print{@page{size:A4;margin:2.5cm 2cm 2cm 2.5cm}body{position:absolute;overflow:visible !important}#viewer[data-handler=text]{border:none;width:100% !important;position:absolute !important}#viewer[data-handler=text] .modal-header{display:none !important}#viewer[data-handler=text] .modal-container{top:0px;height:fit-content}.text-editor .text-menubar{display:none !important}.text-editor .action-item{display:none !important}.text-editor .editor__content{max-width:100%}.text-editor .text-editor__wrapper{height:fit-content;position:unset}.text-editor div.ProseMirror h1,.text-editor div.ProseMirror h2,.text-editor div.ProseMirror h3,.text-editor div.ProseMirror h4,.text-editor div.ProseMirror h5{break-after:avoid}.text-editor div.ProseMirror .image,.text-editor div.ProseMirror img,.text-editor div.ProseMirror table{break-inside:avoid-page;max-width:90% !important;margin:5vw auto 5vw 5% !important}.text-editor div.ProseMirror th{color:#000 !important;font-weight:bold !important;border-width:0 1px 2px 0 !important;border-color:gray !important;border-style:none solid solid none !important}.text-editor div.ProseMirror th:last-of-type{border-width:0 0 2px 0 !important}.text-editor div.ProseMirror td{border-style:none solid none none !important;border-width:1px !important;border-color:gray !important}.text-editor div.ProseMirror td:last-of-type{border:none !important}.menubar-placeholder,.text-editor--readonly-bar{display:none}.text-editor__content-wrapper.--show-outline{display:block}.text-editor__content-wrapper .editor--outline{width:auto;height:auto;overflow:unset;position:relative}.text-editor__content-wrapper .editor--outline__btn-close{display:none}}@media print{#content{display:none}}\", \"\",{\"version\":3,\"sources\":[\"webpack://./css/prosemirror.scss\",\"webpack://./css/print.scss\",\"webpack://./src/components/RichTextReader.vue\"],\"names\":[],\"mappings\":\"AAGA,gBACC,WAAA,CACA,iBAAA,CACA,oBAAA,CACA,oBAAA,CACA,mCAAA,CACA,2BAAA,CACA,0BAAA,CACA,gBAAA,CACA,kCAAA,CACA,YAAA,CA+QA,yCAAA,CACA,oDAAA,CACA,sDAAA,CACA,sDAAA,CACA,0DAAA,CACA,2CAAA,CAlRA,wBAEC,sBAAA,CAGD,4JAIC,UAAA,CACA,8BAAA,CACA,4BAAA,CACA,SAAA,CACA,wBAAA,CACA,gBAAA,CACA,kCAAA,CAEA,oSACC,sBAAA,CAGD,wYACC,0BAAA,CAIF,uCACC,eAAA,CAGD,+BACC,YAAA,CACA,iBAAA,CAEA,oDACC,YAAA,CAED,sCACC,UAAA,CACA,qBAAA,CACA,sBAAA,CACA,8CAAA,CACA,aAAA,CACA,kCAAA,CACA,WAAA,CACA,UAAA,CACA,0BAAA,CACA,0BAAA,CACA,cAAA,CACA,QAAA,CAGA,8CACC,wDAAA,CACA,6CAAA,CACA,yCAAA,CAED,6CACC,mCAAA,CACA,4BAAA,CAGF,qCACC,aAAA,CACA,WAAA,CACA,2BAAA,CAIF,8BACC,eAAA,CAIA,0LACC,YAAA,CAIF,kBACC,kCAAA,CACA,yBAAA,CACA,cAAA,CAGD,qCACC,iBAAA,CACA,gBAAA,CAGD,mBACC,iBAAA,CAGD,kHAMC,eAAA,CACA,iBAAA,CACA,eAAA,CACA,kBAAA,CACA,4BAAA,CAGD,mBACC,cAAA,CAGD,mBACC,cAAA,CAGD,mBACC,cAAA,CAGD,mBACC,cAAA,CAGD,mBACC,cAAA,CAGD,mBACC,kCAAA,CAGD,oBACC,cAAA,CACA,cAAA,CAGD,mBACC,aAAA,CACA,WAAA,CACA,YAAA,CACA,UAAA,CAGD,yBACC,UAAA,CACA,aAAA,CACA,UAAA,CACA,yCAAA,CACA,eAAA,CAGD,oBACC,oBAAA,CACA,6CAAA,CACA,kCAAA,CACA,iBAAA,CACA,iBAAA,CAEA,4BACC,2BAAA,CACA,wBAAA,CACA,aAAA,CACA,gBAAA,CACA,gBAAA,CACA,eAAA,CAGA,4EAEC,UAAA,CAED,4WASC,aAAA,CAED,+QAOC,aAAA,CAED,kHAGC,UAAA,CAED,4EAEC,UAAA,CAED,mFAEC,UAAA,CAED,wCACC,iBAAA,CAED,sCACC,eAAA,CAKH,gCACC,iBAAA,CACA,kDAAA,CAGD,wCACC,aAAA,CACA,wBAAA,CACA,mCAAA,CACA,mBAAA,CAGD,uBACC,6CAAA,CACA,kCAAA,CACA,iBAAA,CAGD,mBACC,iBAAA,CACA,gBAAA,CAEA,wCACC,kBAAA,CAIF,sCACC,iBAAA,CACA,gBAAA,CACA,iBAAA,CAGD,sBACC,oBAAA,CAID,yBACC,sBAAA,CAID,4BACC,sBAAA,CAGD,2BACC,gBAAA,CACA,kDAAA,CACA,mCAAA,CACA,aAAA,CACA,cAAA,CAWD,sBACC,gBAAA,CACA,uBAAA,CACA,iBAAA,CACA,kBAAA,CACA,iBAAA,CACA,sBACC,cAAA,CAID,kDACC,0CAAA,CACA,aAAA,CACA,kBAAA,CACA,cAAA,CACA,0EACC,+CAAA,CAGF,yBACC,kBAAA,CACA,YAAA,CACA,4BAAA,CAED,yBACC,mBAAA,CACA,kBAAA,CACA,qDAAA,CACA,gCAAA,CAEA,6BACC,YAAA,CAGF,yBACC,8CAAA,CACA,8FACC,oDAAA,CAKD,oDAAA,iDAAA,CACA,mDAAA,kDAAA,CAIA,mDAAA,oDAAA,CACA,kDAAA,qDAAA,CAOH,4CACC,aAAA,CAGD,gDACC,8BAAA,CACA,UAAA,CACA,mCAAA,CACA,mBAAA,CACA,QAAA,CAGD,iBACC,UAAA,CCxWD,aACC,MACC,OAAA,CACA,0BAAA,CAGD,KAEC,iBAAA,CACA,2BAAA,CAGD,2BAEC,WAAA,CACA,qBAAA,CAEA,4BAAA,CAEA,yCAEC,uBAAA,CAED,4CAEC,OAAA,CACA,kBAAA,CAKD,2BAEC,uBAAA,CAED,0BAEC,uBAAA,CAED,8BAEC,cAAA,CAED,mCACC,kBAAA,CACA,cAAA,CAIA,gKAEC,iBAAA,CAED,wGAEC,uBAAA,CAEA,wBAAA,CACA,iCAAA,CAID,gCACC,qBAAA,CACA,2BAAA,CACA,mCAAA,CACA,4BAAA,CACA,6CAAA,CAED,6CACC,iCAAA,CAGD,gCACC,4CAAA,CACA,2BAAA,CACA,4BAAA,CAED,6CACC,sBAAA,CAKH,gDACC,YAAA,CAIA,6CACC,aAAA,CAGD,+CACC,UAAA,CACA,WAAA,CACA,cAAA,CACA,iBAAA,CAED,0DACC,YAAA,CAAA,CChGH,aAEC,SACC,YAAA,CAAA\",\"sourcesContent\":[\"@use 'sass:selector';\\n\\n/* Document rendering styles */\\ndiv.ProseMirror {\\n\\theight: 100%;\\n\\tposition: relative;\\n\\tword-wrap: break-word;\\n\\twhite-space: pre-wrap;\\n\\t-webkit-font-variant-ligatures: none;\\n\\tfont-variant-ligatures: none;\\n\\tpadding: 4px 8px 200px 14px;\\n\\tline-height: 150%;\\n\\tfont-size: var(--default-font-size);\\n\\toutline: none;\\n\\n\\t:target {\\n\\t\\t// Menubar height: 44px + 3px bottom + 3px top padding\\n\\t\\tscroll-margin-top: 50px;\\n\\t}\\n\\n\\t&[contenteditable=true],\\n\\t&[contenteditable=false],\\n\\t[contenteditable=true],\\n\\t[contenteditable=false] {\\n\\t\\twidth: 100%;\\n\\t\\tbackground-color: transparent;\\n\\t\\tcolor: var(--color-main-text);\\n\\t\\topacity: 1;\\n\\t\\t-webkit-user-select: text;\\n\\t\\tuser-select: text;\\n\\t\\tfont-size: var(--default-font-size);\\n\\n\\t\\t&:not(.collaboration-cursor__caret) {\\n\\t\\t\\tborder: none !important;\\n\\t\\t}\\n\\n\\t\\t&:focus, &:focus-visible {\\n\\t\\t\\tbox-shadow: none !important;\\n\\t\\t}\\n\\t}\\n\\n\\tul[data-type=taskList] {\\n\\t\\tmargin-left: 1px;\\n\\t}\\n\\n\\t.checkbox-item {\\n\\t\\tdisplay: flex;\\n\\t\\talign-items: start;\\n\\n\\t\\tinput[type=checkbox] {\\n\\t\\t\\tdisplay: none;\\n\\t\\t}\\n\\t\\t&:before {\\n\\t\\t\\tcontent: '';\\n\\t\\t\\tvertical-align: middle;\\n\\t\\t\\tmargin: 3px 6px 3px 2px;\\n\\t\\t\\tborder: 1px solid var(--color-text-maxcontrast);\\n\\t\\t\\tdisplay: block;\\n\\t\\t\\tborder-radius: var(--border-radius);\\n\\t\\t\\theight: 14px;\\n\\t\\t\\twidth: 14px;\\n\\t\\t\\tbox-shadow: none !important;\\n\\t\\t\\tbackground-position: center;\\n\\t\\t\\tcursor: pointer;\\n\\t\\t\\tleft: 9px;\\n\\t\\t}\\n\\t\\t&.checked{\\n\\t\\t\\t&:before {\\n\\t\\t\\t\\tbackground-image: url('../../img/checkbox-mark.svg');\\n\\t\\t\\t\\tbackground-color: var(--color-primary-element);\\n\\t\\t\\t\\tborder-color: var(--color-primary-element);\\n\\t\\t\\t}\\n\\t\\t\\tlabel {\\n\\t\\t\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t\\t\\t\\ttext-decoration: line-through;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tlabel {\\n\\t\\t\\tdisplay: block;\\n\\t\\t\\tflex-grow: 1;\\n\\t\\t\\tmax-width: calc(100% - 28px);\\n\\t\\t}\\n\\t}\\n\\n\\t> *:first-child {\\n\\t\\tmargin-top: 10px;\\n\\t}\\n\\n\\t> h1,h2,h3,h4,h5,h6 {\\n\\t\\t&:first-child {\\n\\t\\t\\tmargin-top: 0;\\n\\t\\t}\\n\\t}\\n\\n\\ta {\\n\\t\\tcolor: var(--color-primary-element);\\n\\t\\ttext-decoration: underline;\\n\\t\\tpadding: .5em 0;\\n\\t}\\n\\n\\tp .paragraph-content {\\n\\t\\tmargin-bottom: 1em;\\n\\t\\tline-height: 150%;\\n\\t}\\n\\n\\tem {\\n\\t\\tfont-style: italic;\\n\\t}\\n\\n\\th1,\\n\\th2,\\n\\th3,\\n\\th4,\\n\\th5,\\n\\th6 {\\n\\t\\tfont-weight: 600;\\n\\t\\tline-height: 1.1em;\\n\\t\\tmargin-top: 24px;\\n\\t\\tmargin-bottom: 12px;\\n\\t\\tcolor: var(--color-main-text);\\n\\t}\\n\\n\\th1 {\\n\\t\\tfont-size: 36px;\\n\\t}\\n\\n\\th2 {\\n\\t\\tfont-size: 30px;\\n\\t}\\n\\n\\th3 {\\n\\t\\tfont-size: 24px;\\n\\t}\\n\\n\\th4 {\\n\\t\\tfont-size: 21px;\\n\\t}\\n\\n\\th5 {\\n\\t\\tfont-size: 17px;\\n\\t}\\n\\n\\th6 {\\n\\t\\tfont-size: var(--default-font-size);\\n\\t}\\n\\n\\timg {\\n\\t\\tcursor: default;\\n\\t\\tmax-width: 100%;\\n\\t}\\n\\n\\thr {\\n\\t\\tpadding: 2px 0;\\n\\t\\tborder: none;\\n\\t\\tmargin: 2em 0;\\n\\t\\twidth: 100%;\\n\\t}\\n\\n\\thr:after {\\n\\t\\tcontent: '';\\n\\t\\tdisplay: block;\\n\\t\\theight: 1px;\\n\\t\\tbackground-color: var(--color-border-dark);\\n\\t\\tline-height: 2px;\\n\\t}\\n\\n\\tpre {\\n\\t\\twhite-space: pre-wrap;\\n\\t\\tbackground-color: var(--color-background-dark);\\n\\t\\tborder-radius: var(--border-radius);\\n\\t\\tpadding: 1em 1.3em;\\n\\t\\tmargin-bottom: 1em;\\n\\n\\t\\t&::before {\\n\\t\\t\\tcontent: attr(data-language);\\n\\t\\t\\ttext-transform: uppercase;\\n\\t\\t\\tdisplay: block;\\n\\t\\t\\ttext-align: right;\\n\\t\\t\\tfont-weight: bold;\\n\\t\\t\\tfont-size: 0.6rem;\\n\\t\\t}\\n\\t\\tcode {\\n\\t\\t\\t.hljs-comment,\\n\\t\\t\\t.hljs-quote {\\n\\t\\t\\t\\tcolor: #999999;\\n\\t\\t\\t}\\n\\t\\t\\t.hljs-variable,\\n\\t\\t\\t.hljs-template-variable,\\n\\t\\t\\t.hljs-attribute,\\n\\t\\t\\t.hljs-tag,\\n\\t\\t\\t.hljs-name,\\n\\t\\t\\t.hljs-regexp,\\n\\t\\t\\t.hljs-link,\\n\\t\\t\\t.hljs-selector-id,\\n\\t\\t\\t.hljs-selector-class {\\n\\t\\t\\t\\tcolor: #f2777a;\\n\\t\\t\\t}\\n\\t\\t\\t.hljs-number,\\n\\t\\t\\t.hljs-meta,\\n\\t\\t\\t.hljs-built_in,\\n\\t\\t\\t.hljs-builtin-name,\\n\\t\\t\\t.hljs-literal,\\n\\t\\t\\t.hljs-type,\\n\\t\\t\\t.hljs-params {\\n\\t\\t\\t\\tcolor: #f99157;\\n\\t\\t\\t}\\n\\t\\t\\t.hljs-string,\\n\\t\\t\\t.hljs-symbol,\\n\\t\\t\\t.hljs-bullet {\\n\\t\\t\\t\\tcolor: #99cc99;\\n\\t\\t\\t}\\n\\t\\t\\t.hljs-title,\\n\\t\\t\\t.hljs-section {\\n\\t\\t\\t\\tcolor: #ffcc66;\\n\\t\\t\\t}\\n\\t\\t\\t.hljs-keyword,\\n\\t\\t\\t.hljs-selector-tag {\\n\\t\\t\\t\\tcolor: #6699cc;\\n\\t\\t\\t}\\n\\t\\t\\t.hljs-emphasis {\\n\\t\\t\\t\\tfont-style: italic;\\n\\t\\t\\t}\\n\\t\\t\\t.hljs-strong {\\n\\t\\t\\t\\tfont-weight: 700;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\\tpre.frontmatter {\\n\\t\\tmargin-bottom: 2em;\\n\\t\\tborder-left: 4px solid var(--color-primary-element);\\n\\t}\\n\\n\\tpre.frontmatter::before {\\n\\t\\tdisplay: block;\\n\\t\\tcontent: attr(data-title);\\n\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t\\tpadding-bottom: 0.5em;\\n\\t}\\n\\n\\tp code {\\n\\t\\tbackground-color: var(--color-background-dark);\\n\\t\\tborder-radius: var(--border-radius);\\n\\t\\tpadding: .1em .3em;\\n\\t}\\n\\n\\tli {\\n\\t\\tposition: relative;\\n\\t\\tpadding-left: 3px;\\n\\n\\t\\tp .paragraph-content {\\n\\t\\t\\tmargin-bottom: 0.5em;\\n\\t\\t}\\n\\t}\\n\\n\\tul, ol {\\n\\t\\tpadding-left: 10px;\\n\\t\\tmargin-left: 10px;\\n\\t\\tmargin-bottom: 1em;\\n\\t}\\n\\n\\tul > li {\\n\\t\\tlist-style-type: disc;\\n\\t}\\n\\n\\t// Second-level list entries\\n\\tli ul > li {\\n\\t\\tlist-style-type: circle;\\n\\t}\\n\\n\\t// Third-level and further down list entries\\n\\tli li ul > li {\\n\\t\\tlist-style-type: square;\\n\\t}\\n\\n\\tblockquote {\\n\\t\\tpadding-left: 1em;\\n\\t\\tborder-left: 4px solid var(--color-primary-element);\\n\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t\\tmargin-left: 0;\\n\\t\\tmargin-right: 0;\\n\\t}\\n\\n\\t// table variables\\n\\t--table-color-border: var(--color-border);\\n\\t--table-color-heading: var(--color-text-maxcontrast);\\n\\t--table-color-heading-border: var(--color-border-dark);\\n\\t--table-color-background: var(--color-main-background);\\n\\t--table-color-background-hover: var(--color-primary-light);\\n\\t--table-border-radius: var(--border-radius);\\n\\n\\ttable {\\n\\t\\tborder-spacing: 0;\\n\\t\\twidth: calc(100% - 50px);\\n\\t\\ttable-layout: auto;\\n\\t\\twhite-space: normal; // force text to wrapping\\n\\t\\tmargin-bottom: 1em;\\n\\t\\t+ & {\\n\\t\\t\\tmargin-top: 1em;\\n\\t\\t}\\n\\n\\n\\t\\ttd, th {\\n\\t\\t\\tborder: 1px solid var(--table-color-border);\\n\\t\\t\\tborder-left: 0;\\n\\t\\t\\tvertical-align: top;\\n\\t\\t\\tmax-width: 100%;\\n\\t\\t\\t&:first-child {\\n\\t\\t\\t\\tborder-left: 1px solid var(--table-color-border);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\ttd {\\n\\t\\t\\tpadding: 0.5em 0.75em;\\n\\t\\t\\tborder-top: 0;\\n\\t\\t\\tcolor: var(--color-main-text);\\n\\t\\t}\\n\\t\\tth {\\n\\t\\t\\tpadding: 0 0 0 0.75em;\\n\\t\\t\\tfont-weight: normal;\\n\\t\\t\\tborder-bottom-color: var(--table-color-heading-border);\\n\\t\\t\\tcolor: var(--table-color-heading);\\n\\n\\t\\t\\t& > div {\\n\\t\\t\\t\\tdisplay: flex;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\ttr {\\n\\t\\t\\tbackground-color: var(--table-color-background);\\n\\t\\t\\t&:hover, &:active, &:focus {\\n\\t\\t\\t\\tbackground-color: var(--table-color-background-hover);\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\ttr:first-child {\\n\\t\\t\\tth:first-child { border-top-left-radius: var(--table-border-radius); }\\n\\t\\t\\tth:last-child { border-top-right-radius: var(--table-border-radius); }\\n\\t\\t}\\n\\n\\t\\ttr:last-child {\\n\\t\\t\\ttd:first-child { border-bottom-left-radius: var(--table-border-radius); }\\n\\t\\t\\ttd:last-child { border-bottom-right-radius: var(--table-border-radius); }\\n\\t\\t}\\n\\n\\t}\\n\\n}\\n\\n.ProseMirror-focused .ProseMirror-gapcursor {\\n\\tdisplay: block;\\n}\\n\\n.editor__content p.is-empty:first-child::before {\\n\\tcontent: attr(data-placeholder);\\n\\tfloat: left;\\n\\tcolor: var(--color-text-maxcontrast);\\n\\tpointer-events: none;\\n\\theight: 0;\\n}\\n\\n.editor__content {\\n\\ttab-size: 4;\\n}\\n\",\"@media print {\\n\\t@page {\\n\\t\\tsize: A4;\\n\\t\\tmargin: 2.5cm 2cm 2cm 2.5cm;\\n\\t}\\n\\n\\tbody {\\n\\t\\t// position: fixed does not support scrolling and as such only prints one page\\n\\t\\tposition: absolute;\\n\\t\\toverflow: visible!important;\\n\\t}\\n\\n\\t#viewer[data-handler='text'] {\\n\\t\\t// Hide top border\\n\\t\\tborder: none;\\n\\t\\twidth: 100%!important;\\n\\t\\t// NcModal uses fixed, which will be cropped when printed\\n\\t\\tposition: absolute!important;\\n\\n\\t\\t.modal-header {\\n\\t\\t\\t// Hide modal header (close button)\\n\\t\\t\\tdisplay: none!important;\\n\\t\\t}\\n\\t\\t.modal-container {\\n\\t\\t\\t// Make sure top aligned as we hided the menubar */\\n\\t\\t\\ttop: 0px;\\n\\t\\t\\theight: fit-content;\\n\\t\\t}\\n\\t}\\n\\n\\t.text-editor {\\n\\t\\t.text-menubar {\\n\\t\\t\\t// Hide menu bar\\n\\t\\t\\tdisplay: none!important;\\n\\t\\t}\\n\\t\\t.action-item {\\n\\t\\t\\t// Hide table settings\\n\\t\\t\\tdisplay: none!important;\\n\\t\\t}\\n\\t\\t.editor__content {\\n\\t\\t\\t// Margins set by page rule\\n\\t\\t\\tmax-width: 100%;\\n\\t\\t}\\n\\t\\t.text-editor__wrapper {\\n\\t\\t\\theight: fit-content;\\n\\t\\t\\tposition: unset;\\n\\t\\t}\\n\\n\\t\\tdiv.ProseMirror {\\n\\t\\t\\th1, h2, h3, h4, h5 {\\n\\t\\t\\t\\t// orphaned headlines are ugly\\n\\t\\t\\t\\tbreak-after: avoid;\\n\\t\\t\\t}\\n\\t\\t\\t.image, img, table {\\n\\t\\t\\t\\t// try no page breaks within tables or images\\n\\t\\t\\t\\tbreak-inside: avoid-page;\\n\\t\\t\\t\\t// Some more indention\\n\\t\\t\\t\\tmax-width: 90%!important;\\n\\t\\t\\t\\tmargin: 5vw auto 5vw 5%!important;\\n\\t\\t\\t}\\n\\n\\t\\t\\t// Add some borders below header and between columns\\n\\t\\t\\tth {\\n\\t\\t\\t\\tcolor: black!important;\\n\\t\\t\\t\\tfont-weight: bold!important;\\n\\t\\t\\t\\tborder-width: 0 1px 2px 0!important;\\n\\t\\t\\t\\tborder-color: gray!important;\\n\\t\\t\\t\\tborder-style: none solid solid none!important;\\n\\t\\t\\t}\\n\\t\\t\\tth:last-of-type {\\n\\t\\t\\t\\tborder-width: 0 0 2px 0!important;\\n\\t\\t\\t}\\n\\n\\t\\t\\ttd {\\n\\t\\t\\t\\tborder-style: none solid none none!important;\\n\\t\\t\\t\\tborder-width: 1px!important;\\n\\t\\t\\t\\tborder-color: gray!important;\\n\\t\\t\\t}\\n\\t\\t\\ttd:last-of-type {\\n\\t\\t\\t\\tborder: none!important;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\\t.menubar-placeholder, .text-editor--readonly-bar {\\n\\t\\tdisplay: none;\\n\\t}\\n\\n\\t.text-editor__content-wrapper {\\n\\t\\t&.--show-outline {\\n\\t\\t\\tdisplay: block;\\n\\t\\t}\\n\\n\\t\\t.editor--outline {\\n\\t\\t\\twidth: auto;\\n\\t\\t\\theight: auto;\\n\\t\\t\\toverflow: unset;\\n\\t\\t\\tposition: relative;\\n\\t\\t}\\n\\t\\t.editor--outline__btn-close {\\n\\t\\t\\tdisplay: none;\\n\\t\\t}\\n\\t}\\n}\\n\",\"\\n@import './../../css/prosemirror';\\n@import './../../css/print';\\n\\n@media print {\\n\\t// Hide Content behind modal, this also hides the sidebar if open\\n\\t#content {\\n\\t\\tdisplay: none;\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".saving-indicator-check[data-v-073a0278]{cursor:pointer}.saving-indicator-check[data-v-073a0278] svg{fill:var(--color-text-lighter)}.saving-indicator-container[data-v-073a0278]{display:none;position:absolute}.saving-indicator-container.error[data-v-073a0278],.saving-indicator-container.saving[data-v-073a0278]{display:inline}.saving-indicator-container.error>span[data-v-073a0278],.saving-indicator-container.saving>span[data-v-073a0278]{position:relative;top:6px;left:6px;cursor:pointer}.saving-indicator-container.saving>span[data-v-073a0278]{color:var(--color-primary)}.saving-indicator-container.saving>span[data-v-073a0278] svg{fill:var(--color-primary)}.saving-indicator-container.error>span[data-v-073a0278]{color:var(--color-error)}.saving-indicator-container.error>span[data-v-073a0278] svg{fill:var(--color-primary)}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/SavingIndicator.vue\"],\"names\":[],\"mappings\":\"AACA,yCACC,cAAA,CAEA,6CACC,8BAAA,CAIF,6CACC,YAAA,CACA,iBAAA,CAEA,uGACC,cAAA,CACA,iHACC,iBAAA,CACA,OAAA,CACA,QAAA,CACA,cAAA,CAIF,yDACC,0BAAA,CACA,6DACC,yBAAA,CAGF,wDACC,wBAAA,CACA,4DACC,yBAAA\",\"sourcesContent\":[\"\\n.saving-indicator-check {\\n\\tcursor: pointer;\\n\\n\\t:deep(svg) {\\n\\t\\tfill: var(--color-text-lighter);\\n\\t}\\n}\\n\\n.saving-indicator-container {\\n\\tdisplay: none;\\n\\tposition: absolute;\\n\\n\\t&.error,&.saving {\\n\\t\\tdisplay: inline;\\n\\t\\t>span {\\n\\t\\t\\tposition: relative;\\n\\t\\t\\ttop: 6px;\\n\\t\\t\\tleft: 6px;\\n\\t\\t\\tcursor: pointer;\\n\\t\\t}\\n\\t}\\n\\n\\t&.saving > span {\\n\\t\\tcolor: var(--color-primary);\\n\\t\\t:deep(svg) {\\n\\t\\t\\tfill: var(--color-primary);\\n\\t\\t}\\n\\t}\\n\\t&.error > span {\\n\\t\\tcolor: var(--color-error);\\n\\t\\t:deep(svg) {\\n\\t\\t\\tfill: var(--color-primary);\\n\\t\\t}\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".emoji-list[data-v-75a9e928]{border-radius:var(--border-radius);background-color:var(--color-main-background);box-shadow:0 1px 5px var(--color-box-shadow);overflow:auto;min-width:200px;max-width:200px;padding:4px;max-height:195.5px;margin:5px 0}.emoji-list__item[data-v-75a9e928]{border-radius:8px;padding:4px 8px;margin-bottom:4px;opacity:.8;cursor:pointer;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.emoji-list__item[data-v-75a9e928]:last-child{margin-bottom:0}.emoji-list__item__emoji[data-v-75a9e928]{padding-right:8px}.emoji-list__item.is-selected[data-v-75a9e928],.emoji-list__item[data-v-75a9e928]:focus,.emoji-list__item[data-v-75a9e928]:hover{opacity:1;background-color:var(--color-primary-light)}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/Suggestion/Emoji/EmojiList.vue\"],\"names\":[],\"mappings\":\"AACA,6BACC,kCAAA,CACA,6CAAA,CACA,4CAAA,CACA,aAAA,CAEA,eAAA,CACA,eAAA,CACA,WAAA,CAEA,kBAAA,CACA,YAAA,CAEA,mCACC,iBAAA,CACA,eAAA,CACA,iBAAA,CACA,UAAA,CACA,cAAA,CAGA,kBAAA,CACA,eAAA,CACA,sBAAA,CAEA,8CACC,eAAA,CAGD,0CACC,iBAAA,CAGD,iIAGC,SAAA,CACA,2CAAA\",\"sourcesContent\":[\"\\n.emoji-list {\\n\\tborder-radius: var(--border-radius);\\n\\tbackground-color: var(--color-main-background);\\n\\tbox-shadow: 0 1px 5px var(--color-box-shadow);\\n\\toverflow: auto;\\n\\n\\tmin-width: 200px;\\n\\tmax-width: 200px;\\n\\tpadding: 4px;\\n\\t// Show maximum 5 entries and a half to show scroll\\n\\tmax-height: 35.5px * 5 + 18px;\\n\\tmargin: 5px 0;\\n\\n\\t&__item {\\n\\t\\tborder-radius: 8px;\\n\\t\\tpadding: 4px 8px;\\n\\t\\tmargin-bottom: 4px;\\n\\t\\topacity: 0.8;\\n\\t\\tcursor: pointer;\\n\\n\\t\\t// Take care of long names\\n\\t\\twhite-space: nowrap;\\n\\t\\toverflow: hidden;\\n\\t\\ttext-overflow: ellipsis;\\n\\n\\t\\t&:last-child {\\n\\t\\t\\tmargin-bottom: 0;\\n\\t\\t}\\n\\n\\t\\t&__emoji {\\n\\t\\t\\tpadding-right: 8px;\\n\\t\\t}\\n\\n\\t\\t&.is-selected,\\n\\t\\t&:focus,\\n\\t\\t&:hover {\\n\\t\\t\\topacity: 1;\\n\\t\\t\\tbackground-color: var(--color-primary-light);\\n\\t\\t}\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".link-picker__item[data-v-0ea7b674]{display:flex;align-items:center}.link-picker__item>div[data-v-0ea7b674]{padding:4px;padding-left:8px;overflow:hidden;text-overflow:ellipsis}.link-picker__item img[data-v-0ea7b674]{width:20px;height:20px;filter:var(--background-invert-if-dark)}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/Suggestion/LinkPicker/LinkPickerList.vue\"],\"names\":[],\"mappings\":\"AACA,oCACC,YAAA,CACA,kBAAA,CAEA,wCACC,WAAA,CACA,gBAAA,CACA,eAAA,CACA,sBAAA,CAGD,wCACC,UAAA,CACA,WAAA,CACA,uCAAA\",\"sourcesContent\":[\"\\n.link-picker__item {\\n\\tdisplay: flex;\\n\\talign-items: center;\\n\\n\\t& > div {\\n\\t\\tpadding: 4px;\\n\\t\\tpadding-left: 8px;\\n\\t\\toverflow: hidden;\\n\\t\\ttext-overflow: ellipsis;\\n\\t}\\n\\n\\timg {\\n\\t\\twidth: 20px;\\n\\t\\theight: 20px;\\n\\t\\tfilter: var(--background-invert-if-dark);\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_GET_URL_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/getUrl.js\";\nvar ___CSS_LOADER_URL_IMPORT_0___ = new URL(\"../../../assets/status-icons/user-status-online.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_1___ = new URL(\"../../../assets/status-icons/user-status-dnd.svg\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_2___ = new URL(\"../../../assets/status-icons/user-status-away.svg\", import.meta.url);\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\nvar ___CSS_LOADER_URL_REPLACEMENT_0___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_0___);\nvar ___CSS_LOADER_URL_REPLACEMENT_1___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_1___);\nvar ___CSS_LOADER_URL_REPLACEMENT_2___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_2___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".autocomplete-result[data-v-8b670548]{display:flex;height:30px;padding:10px}.highlight .autocomplete-result[data-v-8b670548]{color:var(--color-main-text);background:var(--color-primary-light)}.highlight .autocomplete-result[data-v-8b670548],.highlight .autocomplete-result *[data-v-8b670548]{cursor:pointer}.autocomplete-result__icon[data-v-8b670548]{position:relative;flex:0 0 30px;width:30px;min-width:30px;height:30px;border-radius:30px;background-color:var(--color-background-darker);background-repeat:no-repeat;background-position:center;background-size:10px}.autocomplete-result__icon--with-avatar[data-v-8b670548]{color:inherit;background-size:cover}.autocomplete-result__status[data-v-8b670548]{position:absolute;right:-4px;bottom:-4px;box-sizing:border-box;width:18px;height:18px;border:2px solid var(--color-main-background);border-radius:50%;background-color:var(--color-main-background);font-size:var(--default-font-size);line-height:15px;background-repeat:no-repeat;background-size:16px;background-position:center}.autocomplete-result__status--online[data-v-8b670548]{background-image:url(\" + ___CSS_LOADER_URL_REPLACEMENT_0___ + \")}.autocomplete-result__status--dnd[data-v-8b670548]{background-image:url(\" + ___CSS_LOADER_URL_REPLACEMENT_1___ + \");background-color:#fff}.autocomplete-result__status--away[data-v-8b670548]{background-image:url(\" + ___CSS_LOADER_URL_REPLACEMENT_2___ + \")}.autocomplete-result__status--icon[data-v-8b670548]{border:none;background-color:rgba(0,0,0,0)}.autocomplete-result__content[data-v-8b670548]{display:flex;flex:1 1 100%;flex-direction:column;justify-content:center;min-width:0;padding-left:10px}.autocomplete-result__title[data-v-8b670548],.autocomplete-result__subline[data-v-8b670548]{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.autocomplete-result__subline[data-v-8b670548]{color:var(--color-text-lighter)}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/Suggestion/Mention/AutoCompleteResult.vue\"],\"names\":[],\"mappings\":\"AAIA,sCACC,YAAA,CACA,WALgB,CAMhB,YALsB,CAOtB,iDACC,4BAAA,CACA,qCAAA,CACA,oGACC,cAAA,CAIF,4CACC,iBAAA,CACA,aAAA,CACA,UAnBe,CAoBf,cApBe,CAqBf,WArBe,CAsBf,kBAtBe,CAuBf,+CAAA,CACA,2BAAA,CACA,0BAAA,CACA,oBAAA,CACA,yDACC,aAAA,CACA,qBAAA,CAIF,8CACC,iBAAA,CACA,UAAA,CACA,WAAA,CACA,qBAAA,CACA,UAAA,CACA,WAAA,CACA,6CAAA,CACA,iBAAA,CACA,6CAAA,CACA,kCAAA,CACA,gBAAA,CACA,2BAAA,CACA,oBAAA,CACA,0BAAA,CAEA,sDACC,wDAAA,CAED,mDACC,wDAAA,CACA,qBAAA,CAED,oDACC,wDAAA,CAED,oDACC,WAAA,CACA,8BAAA,CAIF,+CACC,YAAA,CACA,aAAA,CACA,qBAAA,CACA,sBAAA,CACA,WAAA,CACA,iBAtEqB,CAyEtB,4FAEC,kBAAA,CACA,eAAA,CACA,sBAAA,CAGD,+CACC,+BAAA\",\"sourcesContent\":[\"\\n$clickable-area: 30px;\\n$autocomplete-padding: 10px;\\n\\n.autocomplete-result {\\n\\tdisplay: flex;\\n\\theight: $clickable-area;\\n\\tpadding: $autocomplete-padding;\\n\\n\\t.highlight & {\\n\\t\\tcolor: var(--color-main-text);\\n\\t\\tbackground: var(--color-primary-light);\\n\\t\\t&, * {\\n\\t\\t\\tcursor: pointer;\\n\\t\\t}\\n\\t}\\n\\n\\t&__icon {\\n\\t\\tposition: relative;\\n\\t\\tflex: 0 0 $clickable-area;\\n\\t\\twidth: $clickable-area;\\n\\t\\tmin-width: $clickable-area;\\n\\t\\theight: $clickable-area;\\n\\t\\tborder-radius: $clickable-area;\\n\\t\\tbackground-color: var(--color-background-darker);\\n\\t\\tbackground-repeat: no-repeat;\\n\\t\\tbackground-position: center;\\n\\t\\tbackground-size: $clickable-area - 2 * $autocomplete-padding;\\n\\t\\t&--with-avatar {\\n\\t\\t\\tcolor: inherit;\\n\\t\\t\\tbackground-size: cover;\\n\\t\\t}\\n\\t}\\n\\n\\t&__status {\\n\\t\\tposition: absolute;\\n\\t\\tright: -4px;\\n\\t\\tbottom: -4px;\\n\\t\\tbox-sizing: border-box;\\n\\t\\twidth: 18px;\\n\\t\\theight: 18px;\\n\\t\\tborder: 2px solid var(--color-main-background);\\n\\t\\tborder-radius: 50%;\\n\\t\\tbackground-color: var(--color-main-background);\\n\\t\\tfont-size: var(--default-font-size);\\n\\t\\tline-height: 15px;\\n\\t\\tbackground-repeat: no-repeat;\\n\\t\\tbackground-size: 16px;\\n\\t\\tbackground-position: center;\\n\\n\\t\\t&--online{\\n\\t\\t\\tbackground-image: url('../../../assets/status-icons/user-status-online.svg');\\n\\t\\t}\\n\\t\\t&--dnd{\\n\\t\\t\\tbackground-image: url('../../../assets/status-icons/user-status-dnd.svg');\\n\\t\\t\\tbackground-color: #ffffff;\\n\\t\\t}\\n\\t\\t&--away{\\n\\t\\t\\tbackground-image: url('../../../assets/status-icons/user-status-away.svg');\\n\\t\\t}\\n\\t\\t&--icon {\\n\\t\\t\\tborder: none;\\n\\t\\t\\tbackground-color: transparent;\\n\\t\\t}\\n\\t}\\n\\n\\t&__content {\\n\\t\\tdisplay: flex;\\n\\t\\tflex: 1 1 100%;\\n\\t\\tflex-direction: column;\\n\\t\\tjustify-content: center;\\n\\t\\tmin-width: 0;\\n\\t\\tpadding-left: $autocomplete-padding;\\n\\t}\\n\\n\\t&__title,\\n\\t&__subline {\\n\\t\\twhite-space: nowrap;\\n\\t\\toverflow: hidden;\\n\\t\\ttext-overflow: ellipsis;\\n\\t}\\n\\n\\t&__subline {\\n\\t\\tcolor: var(--color-text-lighter);\\n\\t}\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".items{position:relative;border-radius:var(--border-radius);background:var(--color-main-background);overflow:hidden;font-size:.9rem;box-shadow:0 1px 5px var(--color-box-shadow);min-width:250px}.item-empty{padding:4px 8px;opacity:.8}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/Suggestion/Mention/MentionList.vue\"],\"names\":[],\"mappings\":\"AACA,OACC,iBAAA,CACA,kCAAA,CACA,uCAAA,CACA,eAAA,CACA,eAAA,CACA,4CAAA,CACA,eAAA,CAGD,YACC,eAAA,CACA,UAAA\",\"sourcesContent\":[\"\\n.items {\\n\\tposition: relative;\\n\\tborder-radius: var(--border-radius);\\n\\tbackground: var(--color-main-background);\\n\\toverflow: hidden;\\n\\tfont-size: 0.9rem;\\n\\tbox-shadow: 0 1px 5px var(--color-box-shadow);\\n\\tmin-width: 250px;\\n}\\n\\n.item-empty {\\n\\tpadding: 4px 8px;\\n\\topacity: 0.8;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".suggestion-list[data-v-3fbaba71]{border-radius:var(--border-radius);background-color:var(--color-main-background);box-shadow:0 1px 5px var(--color-box-shadow);overflow:auto;min-width:200px;max-width:400px;padding:4px;max-height:195.5px;margin:5px 0}.suggestion-list__item[data-v-3fbaba71]{border-radius:8px;padding:4px 8px;margin-bottom:4px;opacity:.8;cursor:pointer;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.suggestion-list__item[data-v-3fbaba71]:last-child{margin-bottom:0}.suggestion-list__item__emoji[data-v-3fbaba71]{padding-right:8px}.suggestion-list__item.is-selected[data-v-3fbaba71],.suggestion-list__item[data-v-3fbaba71]:focus,.suggestion-list__item[data-v-3fbaba71]:hover{opacity:1;background-color:var(--color-primary-light)}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/Suggestion/SuggestionListWrapper.vue\"],\"names\":[],\"mappings\":\"AACA,kCACC,kCAAA,CACA,6CAAA,CACA,4CAAA,CACA,aAAA,CAEA,eAAA,CACA,eAAA,CACA,WAAA,CAEA,kBAAA,CACA,YAAA,CAEA,wCACC,iBAAA,CACA,eAAA,CACA,iBAAA,CACA,UAAA,CACA,cAAA,CAGA,kBAAA,CACA,eAAA,CACA,sBAAA,CAEA,mDACC,eAAA,CAGD,+CACC,iBAAA,CAGD,gJAGC,SAAA,CACA,2CAAA\",\"sourcesContent\":[\"\\n.suggestion-list {\\n\\tborder-radius: var(--border-radius);\\n\\tbackground-color: var(--color-main-background);\\n\\tbox-shadow: 0 1px 5px var(--color-box-shadow);\\n\\toverflow: auto;\\n\\n\\tmin-width: 200px;\\n\\tmax-width: 400px;\\n\\tpadding: 4px;\\n\\t// Show maximum 5 entries and a half to show scroll\\n\\tmax-height: 35.5px * 5 + 18px;\\n\\tmargin: 5px 0;\\n\\n\\t&__item {\\n\\t\\tborder-radius: 8px;\\n\\t\\tpadding: 4px 8px;\\n\\t\\tmargin-bottom: 4px;\\n\\t\\topacity: 0.8;\\n\\t\\tcursor: pointer;\\n\\n\\t\\t// Take care of long names\\n\\t\\twhite-space: nowrap;\\n\\t\\toverflow: hidden;\\n\\t\\ttext-overflow: ellipsis;\\n\\n\\t\\t&:last-child {\\n\\t\\t\\tmargin-bottom: 0;\\n\\t\\t}\\n\\n\\t\\t&__emoji {\\n\\t\\t\\tpadding-right: 8px;\\n\\t\\t}\\n\\n\\t\\t&.is-selected,\\n\\t\\t&:focus,\\n\\t\\t&:hover {\\n\\t\\t\\topacity: 1;\\n\\t\\t\\tbackground-color: var(--color-primary-light);\\n\\t\\t}\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".callout[data-v-2734884a]{background-color:var(--callout-background, var(--color-background-hover));border-left-color:var(--callout-border, var(--color-primary-element));border-radius:var(--border-radius);padding:1em;padding-left:.5em;border-left-width:.3em;border-left-style:solid;position:relative;margin-bottom:.5em;display:flex;align-items:center;justify-content:flex-start}.callout[data-v-2734884a]{margin-top:.5em}.callout .callout__content[data-v-2734884a]{margin-left:1em}.callout .callout__content[data-v-2734884a] p:last-child{margin-bottom:0}.callout .callout__icon[data-v-2734884a],.callout .callout__icon[data-v-2734884a] svg{color:var(--callout-border)}.callout[data-v-2734884a],.callout--info[data-v-2734884a]{--callout-border: var(--color-info, #006aa3)}.callout--warn[data-v-2734884a]{--callout-border: var(--color-warning)}.callout--error[data-v-2734884a]{--callout-border: var(--color-error)}.callout--success[data-v-2734884a]{--callout-border: var(--color-success)}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/nodes/Callout.vue\"],\"names\":[],\"mappings\":\"AACA,0BACC,yEAAA,CACA,qEAAA,CACA,kCAAA,CACA,WAAA,CACA,iBAAA,CACA,sBAAA,CACA,uBAAA,CACA,iBAAA,CACA,kBAAA,CAEA,YAAA,CACA,kBAAA,CACA,0BAAA,CAEA,0BACC,eAAA,CAGD,4CACC,eAAA,CAEC,yDACC,eAAA,CAMF,sFACC,2BAAA,CAKF,0DACC,4CAAA,CAID,gCACC,sCAAA,CAID,iCACC,oCAAA,CAID,mCACC,sCAAA\",\"sourcesContent\":[\"\\n.callout {\\n\\tbackground-color: var(--callout-background, var(--color-background-hover));\\n\\tborder-left-color: var(--callout-border, var(--color-primary-element));\\n\\tborder-radius: var(--border-radius);\\n\\tpadding: 1em;\\n\\tpadding-left: 0.5em;\\n\\tborder-left-width: 0.3em;\\n\\tborder-left-style: solid;\\n\\tposition: relative;\\n\\tmargin-bottom: 0.5em;\\n\\n\\tdisplay: flex;\\n\\talign-items: center;\\n\\tjustify-content: flex-start;\\n\\n\\t+ & {\\n\\t\\tmargin-top: 0.5em;\\n\\t}\\n\\n\\t.callout__content {\\n\\t\\tmargin-left: 1em;\\n\\t\\t&:deep(p) {\\n\\t\\t\\t&:last-child {\\n\\t\\t\\t\\tmargin-bottom: 0;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\\t.callout__icon {\\n\\t\\t&, :deep(svg) {\\n\\t\\t\\tcolor: var(--callout-border);\\n\\t\\t}\\n\\t}\\n\\n\\t// Info (default) variables\\n\\t&, &--info {\\n\\t\\t--callout-border: var(--color-info, #006aa3);\\n\\t}\\n\\n\\t// Warn variables\\n\\t&--warn {\\n\\t\\t--callout-border: var(--color-warning);\\n\\t}\\n\\n\\t// Error variables\\n\\t&--error {\\n\\t\\t--callout-border: var(--color-error);\\n\\t}\\n\\n\\t// Success variables\\n\\t&--success {\\n\\t\\t--callout-border: var(--color-success);\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"div.ProseMirror h1,div.ProseMirror h2,div.ProseMirror h3,div.ProseMirror h4,div.ProseMirror h5,div.ProseMirror h6{position:relative}div.ProseMirror h1 .heading-anchor[contenteditable=false],div.ProseMirror h2 .heading-anchor[contenteditable=false],div.ProseMirror h3 .heading-anchor[contenteditable=false],div.ProseMirror h4 .heading-anchor[contenteditable=false],div.ProseMirror h5 .heading-anchor[contenteditable=false],div.ProseMirror h6 .heading-anchor[contenteditable=false]{width:1em;opacity:0;padding:0;left:-1em;bottom:0;font-size:max(1em,16px);position:absolute;text-decoration:none;transition-duration:.15s;transition-property:opacity;transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1)}div.ProseMirror h1:hover .heading-anchor,div.ProseMirror h2:hover .heading-anchor,div.ProseMirror h3:hover .heading-anchor,div.ProseMirror h4:hover .heading-anchor,div.ProseMirror h5:hover .heading-anchor,div.ProseMirror h6:hover .heading-anchor{opacity:.5 !important}div.ProseMirror h1:focus-visible,div.ProseMirror h2:focus-visible,div.ProseMirror h3:focus-visible,div.ProseMirror h4:focus-visible,div.ProseMirror h5:focus-visible,div.ProseMirror h6:focus-visible{outline:none}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/nodes/Heading/HeadingView.vue\"],\"names\":[],\"mappings\":\"AAGC,kHACC,iBAAA,CACA,4VAEC,SAAA,CACA,SAAA,CACA,SAAA,CACA,SAAA,CACA,QAAA,CACA,uBAAA,CACA,iBAAA,CACA,oBAAA,CACA,wBAAA,CACA,2BAAA,CACA,uDAAA,CAGD,sPACC,qBAAA,CAGD,sMACC,YAAA\",\"sourcesContent\":[\"\\ndiv.ProseMirror {\\n\\t/* Anchor links */\\n\\th1,h2,h3,h4,h5,h6 {\\n\\t\\tposition: relative;\\n\\t\\t.heading-anchor[contenteditable=\\\"false\\\"] {\\n\\t\\t\\t// Shrink clickable area of anchor permalinks to not overlay the heading\\n\\t\\t\\twidth: 1em;\\n\\t\\t\\topacity: 0;\\n\\t\\t\\tpadding: 0;\\n\\t\\t\\tleft: -1em;\\n\\t\\t\\tbottom: 0;\\n\\t\\t\\tfont-size: max(1em, 16px);\\n\\t\\t\\tposition: absolute;\\n\\t\\t\\ttext-decoration: none;\\n\\t\\t\\ttransition-duration: .15s;\\n\\t\\t\\ttransition-property: opacity;\\n\\t\\t\\ttransition-timing-function: cubic-bezier(.4,0,.2,1);\\n\\t\\t}\\n\\n\\t\\t&:hover .heading-anchor {\\n\\t\\t\\topacity: 0.5!important;\\n\\t\\t}\\n\\n\\t\\t&:focus-visible {\\n\\t\\t\\toutline: none;\\n\\t\\t}\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".image[data-v-4febfd28]{margin:0;padding:0}.image[data-v-4febfd28],.image *[data-v-4febfd28]{-webkit-user-modify:read-only !important}.image__caption[data-v-4febfd28]{text-align:center;color:var(--color-text-lighter);display:flex;align-items:center;justify-content:center}.image__caption__wrapper[data-v-4febfd28]{position:relative}.image__caption__delete[data-v-4febfd28]{display:flex;flex-basis:20%;align-items:center;width:20px;height:20px;position:absolute;right:-6px;bottom:10px}.image__caption__delete[data-v-4febfd28],.image__caption__delete svg[data-v-4febfd28]{cursor:pointer}.image__caption .image__caption__wrapper[data-v-4febfd28]{flex-basis:80%}.image__caption input[type=text][data-v-4febfd28]{width:85%;text-align:center;background-color:rgba(0,0,0,0);border:none !important;color:var(--color-text-maxcontrast) !important}.image__caption input[type=text][data-v-4febfd28]:focus{border:2px solid var(--color-border-dark) !important;color:var(--color-main-text) !important}.image__caption figcaption[data-v-4febfd28]{color:var(--color-text-maxcontrast) !important;max-width:80%;text-align:center;width:fit-content}.image__loading[data-v-4febfd28]{height:100px}.image__main[data-v-4febfd28]{max-height:calc(100vh - 50px - 50px)}.image__main--broken-icon[data-v-4febfd28],.image__error-message[data-v-4febfd28]{color:var(--color-text-maxcontrast)}.image__error-message[data-v-4febfd28]{display:block;text-align:center}.image__view[data-v-4febfd28]{text-align:center;position:relative}.image__view img[data-v-4febfd28]{max-width:100%}.image__view:hover input[type=text][data-v-4febfd28]{border:2px solid var(--color-border-dark) !important;color:var(--color-main-text) !important}.media[data-v-4febfd28]{display:flex;align-items:center;justify-content:left}.media .media__wrapper[data-v-4febfd28]{display:flex;border:2px solid var(--color-border);border-radius:var(--border-radius-large);padding:8px}.media .media__wrapper img[data-v-4febfd28]{width:44px;height:44px}.media .media__wrapper .metadata[data-v-4febfd28]{margin-left:8px;display:flex;flex-direction:column;align-items:start}.media .media__wrapper .metadata span[data-v-4febfd28]{line-height:20px;font-weight:normal}.media .media__wrapper .metadata span.size[data-v-4febfd28]{color:var(--color-text-maxcontrast)}.media .buttons[data-v-4febfd28]{margin-left:8px}.fade-enter-active[data-v-4febfd28]{transition:opacity .3s ease-in-out}.fade-enter-to[data-v-4febfd28]{opacity:1}.fade-enter[data-v-4febfd28]{opacity:0}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/nodes/ImageView.vue\"],\"names\":[],\"mappings\":\"AACA,wBACC,QAAA,CACA,SAAA,CAEA,kDACC,wCAAA,CAIF,iCACC,iBAAA,CACA,+BAAA,CACA,YAAA,CACA,kBAAA,CACA,sBAAA,CACA,0CACC,iBAAA,CAED,yCACC,YAAA,CACA,cAAA,CACA,kBAAA,CACA,UAAA,CACA,WAAA,CACA,iBAAA,CACA,UAAA,CACA,WAAA,CACA,sFACC,cAAA,CAGF,0DACC,cAAA,CAED,kDACC,SAAA,CACA,iBAAA,CACA,8BAAA,CACA,sBAAA,CACA,8CAAA,CAEA,wDACC,oDAAA,CACA,uCAAA,CAGF,4CACC,8CAAA,CACA,aAAA,CACA,iBAAA,CACA,iBAAA,CAIF,iCACC,YAAA,CAGD,8BACC,oCAAA,CAGD,kFACC,mCAAA,CAGD,uCACC,aAAA,CACA,iBAAA,CAGD,8BACC,iBAAA,CACA,iBAAA,CAEA,kCACC,cAAA,CAIA,qDACC,oDAAA,CACA,uCAAA,CAKH,wBACC,YAAA,CACA,kBAAA,CACA,oBAAA,CACA,wCACC,YAAA,CACA,oCAAA,CACA,wCAAA,CACA,WAAA,CAEA,4CACC,UAAA,CACA,WAAA,CAGD,kDACC,eAAA,CACA,YAAA,CACA,qBAAA,CACA,iBAAA,CAEA,uDACC,gBAAA,CACA,kBAAA,CAEA,4DACC,mCAAA,CAKJ,iCACC,eAAA,CAIF,oCACC,kCAAA,CAGD,gCACC,SAAA,CAGD,6BACC,SAAA\",\"sourcesContent\":[\"\\n.image {\\n\\tmargin: 0;\\n\\tpadding: 0;\\n\\n\\t&, * {\\n\\t\\t-webkit-user-modify: read-only !important;\\n\\t}\\n}\\n\\n.image__caption {\\n\\ttext-align: center;\\n\\tcolor: var(--color-text-lighter);\\n\\tdisplay: flex;\\n\\talign-items: center;\\n\\tjustify-content: center;\\n\\t&__wrapper {\\n\\t\\tposition: relative;\\n\\t}\\n\\t&__delete {\\n\\t\\tdisplay: flex;\\n\\t\\tflex-basis: 20%;\\n\\t\\talign-items: center;\\n\\t\\twidth: 20px;\\n\\t\\theight: 20px;\\n\\t\\tposition: absolute;\\n\\t\\tright: -6px;\\n\\t\\tbottom: 10px;\\n\\t\\t&, svg {\\n\\t\\t\\tcursor: pointer;\\n\\t\\t}\\n\\t}\\n\\t.image__caption__wrapper {\\n\\t\\tflex-basis: 80%;\\n\\t}\\n\\tinput[type='text'] {\\n\\t\\twidth: 85%;\\n\\t\\ttext-align: center;\\n\\t\\tbackground-color: transparent;\\n\\t\\tborder: none !important;\\n\\t\\tcolor: var(--color-text-maxcontrast) !important;\\n\\n\\t\\t&:focus {\\n\\t\\t\\tborder: 2px solid var(--color-border-dark) !important;\\n\\t\\t\\tcolor: var(--color-main-text) !important;\\n\\t\\t}\\n\\t}\\n\\tfigcaption {\\n\\t\\tcolor: var(--color-text-maxcontrast) !important;\\n\\t\\tmax-width: 80%;\\n\\t\\ttext-align: center;\\n\\t\\twidth: fit-content;\\n\\t}\\n}\\n\\n.image__loading {\\n\\theight: 100px;\\n}\\n\\n.image__main {\\n\\tmax-height: calc(100vh - 50px - 50px);\\n}\\n\\n.image__main--broken-icon, .image__error-message {\\n\\tcolor: var(--color-text-maxcontrast);\\n}\\n\\n.image__error-message {\\n\\tdisplay: block;\\n\\ttext-align: center;\\n}\\n\\n.image__view {\\n\\ttext-align: center;\\n\\tposition: relative;\\n\\n\\timg {\\n\\t\\tmax-width: 100%;\\n\\t}\\n\\n\\t&:hover {\\n\\t\\tinput[type='text'] {\\n\\t\\t\\tborder: 2px solid var(--color-border-dark) !important;\\n\\t\\t\\tcolor: var(--color-main-text) !important;\\n\\t\\t}\\n\\t}\\n}\\n\\n.media {\\n\\tdisplay: flex;\\n\\talign-items: center;\\n\\tjustify-content: left;\\n\\t.media__wrapper {\\n\\t\\tdisplay: flex;\\n\\t\\tborder: 2px solid var(--color-border);\\n\\t\\tborder-radius: var(--border-radius-large);\\n\\t\\tpadding: 8px;\\n\\n\\t\\timg {\\n\\t\\t\\twidth: 44px;\\n\\t\\t\\theight: 44px;\\n\\t\\t}\\n\\n\\t\\t.metadata {\\n\\t\\t\\tmargin-left: 8px;\\n\\t\\t\\tdisplay: flex;\\n\\t\\t\\tflex-direction: column;\\n\\t\\t\\talign-items: start;\\n\\n\\t\\t\\tspan {\\n\\t\\t\\t\\tline-height: 20px;\\n\\t\\t\\t\\tfont-weight: normal;\\n\\n\\t\\t\\t\\t&.size {\\n\\t\\t\\t\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\t.buttons {\\n\\t\\tmargin-left: 8px;\\n\\t}\\n}\\n\\n.fade-enter-active {\\n\\ttransition: opacity .3s ease-in-out;\\n}\\n\\n.fade-enter-to {\\n\\topacity: 1;\\n}\\n\\n.fade-enter {\\n\\topacity: 0;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"[data-v-b95f24a4] div.widgets--list a.widget-default{color:var(--color-main-text);padding:0;text-decoration:none;max-width:calc(100vw - 56px)}[data-v-b95f24a4] .widget-default--details{overflow:hidden}[data-v-b95f24a4] .widget-default--details p{margin-bottom:4px !important}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/nodes/ParagraphView.vue\"],\"names\":[],\"mappings\":\"AACA,qDACC,4BAAA,CACA,SAAA,CACA,oBAAA,CACA,4BAAA,CAGD,2CACC,eAAA,CACA,6CACC,4BAAA\",\"sourcesContent\":[\"\\n:deep(div.widgets--list a.widget-default) {\\n\\tcolor: var(--color-main-text);\\n\\tpadding: 0;\\n\\ttext-decoration: none;\\n\\tmax-width: calc(100vw - 56px);\\n}\\n\\n:deep(.widget-default--details) {\\n\\toverflow:hidden;\\n\\tp {\\n\\t\\tmargin-bottom: 4px !important;\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"td[data-v-3543004d]{position:relative}td .container[data-v-3543004d]{display:flex;flex-wrap:wrap;min-height:36px}td .content[data-v-3543004d]{flex:1 1 0;margin:0;padding-top:.6em}td .action-item[data-v-3543004d]{position:absolute;right:-48px;flex:0 1 auto;display:none;top:2px}td:last-child .action-item[data-v-3543004d]{display:block;opacity:50%}td:last-child:hover .action-item[data-v-3543004d],td:last-child:active .action-item[data-v-3543004d],td:last-child:focus .action-item[data-v-3543004d],td:last-child:focus-within .action-item[data-v-3543004d]{opacity:100%}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/nodes/Table/TableCellView.vue\"],\"names\":[],\"mappings\":\"AACA,oBACC,iBAAA,CAEA,+BACC,YAAA,CACA,cAAA,CACA,eAAA,CAGD,6BACC,UAAA,CACA,QAAA,CACA,gBAAA,CAGD,iCACC,iBAAA,CACA,WAAA,CACA,aAAA,CACA,YAAA,CACA,OAAA,CAIA,4CACC,aAAA,CACA,WAAA,CAIA,gNACC,YAAA\",\"sourcesContent\":[\"\\ntd {\\n\\tposition: relative;\\n\\n\\t.container {\\n\\t\\tdisplay: flex;\\n\\t\\tflex-wrap: wrap;\\n\\t\\tmin-height: 36px;\\n\\t}\\n\\n\\t.content {\\n\\t\\tflex: 1 1 0;\\n\\t\\tmargin: 0;\\n\\t\\tpadding-top: 0.6em;\\n\\t}\\n\\n\\t.action-item {\\n\\t\\tposition: absolute;\\n\\t\\tright: -48px;\\n\\t\\tflex: 0 1 auto;\\n\\t\\tdisplay: none;\\n\\t\\ttop: 2px;\\n\\t}\\n\\n\\t&:last-child {\\n\\t\\t.action-item {\\n\\t\\t\\tdisplay: block;\\n\\t\\t\\topacity: 50%;\\n\\t\\t}\\n\\n\\t\\t&:hover, &:active, &:focus, &:focus-within {\\n\\t\\t\\t.action-item {\\n\\t\\t\\t\\topacity: 100%;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"th .content[data-v-25a85f13]{margin:0;padding-top:.75em;flex-grow:1}th .action-item[data-v-25a85f13]{opacity:50%}th:hover .action-item[data-v-25a85f13],th:active .action-item[data-v-25a85f13],th:focus .action-item[data-v-25a85f13],th:focus-within .action-item[data-v-25a85f13]{opacity:100%}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/nodes/Table/TableHeaderView.vue\"],\"names\":[],\"mappings\":\"AAGC,6BACC,QAAA,CACA,iBAAA,CACA,WAAA,CAED,iCACC,WAAA,CAIA,oKACC,YAAA\",\"sourcesContent\":[\"\\nth {\\n\\n\\t.content {\\n\\t\\tmargin: 0;\\n\\t\\tpadding-top: 0.75em;\\n\\t\\tflex-grow: 1;\\n\\t}\\n\\t.action-item {\\n\\t\\topacity: 50%;\\n\\t}\\n\\n\\t&:hover, &:active, &:focus, &:focus-within {\\n\\t\\t.action-item {\\n\\t\\t\\topacity: 100%;\\n\\t\\t}\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".table-wrapper[data-v-261cbb42]{position:relative;overflow-x:auto}.clearfix[data-v-261cbb42]{clear:both}table[data-v-261cbb42]{float:left}.table-settings[data-v-261cbb42]{padding-left:3px;opacity:.5;position:absolute;top:0;right:3px}.table-settings[data-v-261cbb42]:hover{opacity:1}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/nodes/Table/TableView.vue\"],\"names\":[],\"mappings\":\"AACA,gCACC,iBAAA,CACA,eAAA,CAGD,2BACC,UAAA,CAGD,uBACC,UAAA,CAGD,iCACC,gBAAA,CACA,UAAA,CACA,iBAAA,CACA,KAAA,CACA,SAAA,CAEA,uCACC,SAAA\",\"sourcesContent\":[\"\\n.table-wrapper {\\n\\tposition: relative;\\n\\toverflow-x: auto;\\n}\\n\\n.clearfix {\\n\\tclear: both;\\n}\\n\\ntable {\\n\\tfloat: left;\\n}\\n\\n.table-settings {\\n\\tpadding-left: 3px;\\n\\topacity: .5;\\n\\tposition: absolute;\\n\\ttop: 0;\\n\\tright: 3px;\\n\\n\\t&:hover {\\n\\t\\topacity: 1;\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"body{position:fixed;background-color:var(--color-main-background)}#content[class=app-public]{margin:0;margin-top:0}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/views/DirectEditing.vue\"],\"names\":[],\"mappings\":\"AACA,KACC,cAAA,CACA,6CAAA,CAGD,2BACC,QAAA,CACA,YAAA\",\"sourcesContent\":[\"\\nbody {\\n\\tposition: fixed;\\n\\tbackground-color: var(--color-main-background);\\n}\\n\\n#content[class=app-public] {\\n\\tmargin: 0;\\n\\tmargin-top: 0;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"#direct-editor[data-v-3dc363b7]{width:100%;height:100%;position:fixed;overflow:auto}#direct-editor[data-v-3dc363b7] .text-editor{height:100%;top:0}#direct-editor[data-v-3dc363b7] .text-editor__wrapper div.ProseMirror{margin-top:0}pre[data-v-3dc363b7]{width:100%;max-width:700px;margin:auto;background-color:var(--color-background-dark)}button[data-v-3dc363b7]{width:44px;height:44px;margin:0;background-size:16px;border:0;background-color:rgba(0,0,0,0);opacity:.5;color:var(--color-main-text);background-position:center center;vertical-align:top}button[data-v-3dc363b7]:hover,button[data-v-3dc363b7]:focus,button[data-v-3dc363b7]:active{background-color:var(--color-background-dark)}button.is-active[data-v-3dc363b7],button[data-v-3dc363b7]:hover,button[data-v-3dc363b7]:focus{opacity:1}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/views/DirectEditing.vue\"],\"names\":[],\"mappings\":\"AACA,gCACC,UAAA,CACA,WAAA,CACA,cAAA,CACA,aAAA,CAEA,6CACC,WAAA,CACA,KAAA,CAED,sEACC,YAAA,CAIF,qBACC,UAAA,CACA,eAAA,CACA,WAAA,CACA,6CAAA,CAGD,wBACC,UAAA,CACA,WAAA,CACA,QAAA,CACA,oBAAA,CACA,QAAA,CACA,8BAAA,CACA,UAAA,CACA,4BAAA,CACA,iCAAA,CACA,kBAAA,CACA,2FACC,6CAAA,CAED,8FAGC,SAAA\",\"sourcesContent\":[\"\\n#direct-editor {\\n\\twidth: 100%;\\n\\theight: 100%;\\n\\tposition: fixed;\\n\\toverflow: auto;\\n\\n\\t&:deep(.text-editor) {\\n\\t\\theight: 100%;\\n\\t\\ttop: 0;\\n\\t}\\n\\t&:deep(.text-editor__wrapper div.ProseMirror) {\\n\\t\\tmargin-top: 0;\\n\\t}\\n}\\n\\npre {\\n\\twidth: 100%;\\n\\tmax-width: 700px;\\n\\tmargin: auto;\\n\\tbackground-color: var(--color-background-dark);\\n}\\n\\nbutton {\\n\\twidth: 44px;\\n\\theight: 44px;\\n\\tmargin: 0;\\n\\tbackground-size: 16px;\\n\\tborder: 0;\\n\\tbackground-color: transparent;\\n\\topacity: .5;\\n\\tcolor: var(--color-main-text);\\n\\tbackground-position: center center;\\n\\tvertical-align: top;\\n\\t&:hover, &:focus, &:active {\\n\\t\\tbackground-color: var(--color-background-dark);\\n\\t}\\n\\t&.is-active,\\n\\t&:hover,\\n\\t&:focus {\\n\\t\\topacity: 1;\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"#rich-workspace[data-v-4c292a7f]{padding:0 50px;margin-bottom:-24px;text-align:left;max-height:0;transition:max-height .5s cubic-bezier(0, 1, 0, 1);z-index:61;position:relative}#rich-workspace.creatable[data-v-4c292a7f]{min-height:100px}#rich-workspace[data-v-4c292a7f]:only-child{margin-bottom:0}.empty-workspace[data-v-4c292a7f]{cursor:pointer;display:block;padding-top:43px;color:var(--color-text-maxcontrast)}#rich-workspace[data-v-4c292a7f] div[contenteditable=false]{width:100%;padding:0px;background-color:var(--color-main-background);opacity:1;border:none}#rich-workspace[data-v-4c292a7f] .text-editor{height:100%;position:unset !important;top:auto !important}#rich-workspace[data-v-4c292a7f] .text-editor__wrapper{position:unset !important;overflow:visible}#rich-workspace[data-v-4c292a7f] .text-editor__main{overflow:visible !important}#rich-workspace[data-v-4c292a7f] .content-wrapper{overflow:scroll !important;max-height:calc(40vh - 50px);padding-left:10px;padding-bottom:10px}#rich-workspace[data-v-4c292a7f] .text-editor__wrapper .ProseMirror{padding:0px;margin:0}#rich-workspace[data-v-4c292a7f] .editor__content{margin:0}#rich-workspace.focus[data-v-4c292a7f]{max-height:50vh}#rich-workspace[data-v-4c292a7f]:not(.focus){max-height:30vh;position:relative;overflow:hidden}#rich-workspace[data-v-4c292a7f]:not(.focus):not(.icon-loading):not(.empty):after{content:\\\"\\\";position:absolute;z-index:1;bottom:0;left:0;pointer-events:none;background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0), var(--color-main-background));width:100%;height:4em}#rich-workspace.dark[data-v-4c292a7f]:not(.focus):not(.icon-loading):after{background-image:linear-gradient(to bottom, rgba(0, 0, 0, 0), var(--color-main-background))}@media only screen and (max-width: 1024px){#rich-workspace[data-v-4c292a7f]:not(.focus){max-height:30vh}}html.ie #rich-workspace[data-v-4c292a7f] .text-editor{position:initial}html.ie #rich-workspace[data-v-4c292a7f] .text-editor__wrapper{position:relative !important;top:auto !important}html.ie #rich-workspace[data-v-4c292a7f] .text-editor__main{display:flex;flex-direction:column;overflow:hidden !important}html.ie #rich-workspace[data-v-4c292a7f] .menubar{position:relative;overflow:hidden;flex-shrink:0;height:44px;top:auto}html.ie #rich-workspace[data-v-4c292a7f] .text-editor__main>div:nth-child(2){min-height:44px;overflow-x:hidden;overflow-y:auto;flex-shrink:1}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/views/RichWorkspace.vue\"],\"names\":[],\"mappings\":\"AACA,iCACC,cAAA,CAEA,mBAAA,CACA,eAAA,CACA,YAAA,CACA,kDAAA,CACA,UAAA,CACA,iBAAA,CACA,2CACC,gBAAA,CAKF,4CACC,eAAA,CAGD,kCACC,cAAA,CACA,aAAA,CACA,gBAAA,CACA,mCAAA,CAGD,4DACC,UAAA,CACA,WAAA,CACA,6CAAA,CACA,SAAA,CACA,WAAA,CAGD,8CACC,WAAA,CACA,yBAAA,CACA,mBAAA,CAGD,uDACC,yBAAA,CACA,gBAAA,CAGD,oDACC,2BAAA,CAGD,kDACC,0BAAA,CACA,4BAAA,CACA,iBAAA,CACA,mBAAA,CAGD,oEACC,WAAA,CACA,QAAA,CAGD,kDACC,QAAA,CAGD,uCACC,eAAA,CAGD,6CACC,eAAA,CACA,iBAAA,CACA,eAAA,CAGD,kFACC,UAAA,CACA,iBAAA,CACA,SAAA,CACA,QAAA,CACA,MAAA,CACA,mBAAA,CACA,iGAAA,CACA,UAAA,CACA,UAAA,CAGD,2EACC,2FAAA,CAGD,2CACC,6CACC,eAAA,CAAA,CAMA,uDACC,gBAAA,CAGD,gEACC,4BAAA,CACA,mBAAA,CAGD,6DACC,YAAA,CACA,qBAAA,CACA,0BAAA,CAGD,mDACC,iBAAA,CACA,eAAA,CACA,aAAA,CACA,WAAA,CACA,QAAA,CAGD,8EACC,eAAA,CACA,iBAAA,CACA,eAAA,CACA,aAAA\",\"sourcesContent\":[\"\\n#rich-workspace {\\n\\tpadding: 0 50px;\\n\\t/* Slightly reduce vertical space */\\n\\tmargin-bottom: -24px;\\n\\ttext-align: left;\\n\\tmax-height: 0;\\n\\ttransition: max-height 0.5s cubic-bezier(0, 1, 0, 1);\\n\\tz-index: 61;\\n\\tposition: relative;\\n\\t&.creatable {\\n\\t\\tmin-height: 100px;\\n\\t}\\n}\\n\\n/* For subfolders, where there are no Recommendations */\\n#rich-workspace:only-child {\\n\\tmargin-bottom: 0;\\n}\\n\\n.empty-workspace {\\n\\tcursor: pointer;\\n\\tdisplay: block;\\n\\tpadding-top: 43px;\\n\\tcolor: var(--color-text-maxcontrast);\\n}\\n\\n#rich-workspace:deep(div[contenteditable=false]) {\\n\\twidth: 100%;\\n\\tpadding: 0px;\\n\\tbackground-color: var(--color-main-background);\\n\\topacity: 1;\\n\\tborder: none;\\n}\\n\\n#rich-workspace:deep(.text-editor) {\\n\\theight: 100%;\\n\\tposition: unset !important;\\n\\ttop: auto !important;\\n}\\n\\n#rich-workspace:deep(.text-editor__wrapper) {\\n\\tposition: unset !important;\\n\\toverflow: visible;\\n}\\n\\n#rich-workspace:deep(.text-editor__main) {\\n\\toverflow: visible !important;\\n}\\n\\n#rich-workspace:deep(.content-wrapper) {\\n\\toverflow: scroll !important;\\n\\tmax-height: calc(40vh - 50px);\\n\\tpadding-left: 10px;\\n\\tpadding-bottom: 10px;\\n}\\n\\n#rich-workspace:deep(.text-editor__wrapper .ProseMirror) {\\n\\tpadding: 0px;\\n\\tmargin: 0;\\n}\\n\\n#rich-workspace:deep(.editor__content) {\\n\\tmargin: 0;\\n}\\n\\n#rich-workspace.focus {\\n\\tmax-height: 50vh;\\n}\\n\\n#rich-workspace:not(.focus) {\\n\\tmax-height: 30vh;\\n\\tposition: relative;\\n\\toverflow: hidden;\\n}\\n\\n#rich-workspace:not(.focus):not(.icon-loading):not(.empty):after {\\n\\tcontent: '';\\n\\tposition: absolute;\\n\\tz-index: 1;\\n\\tbottom: 0;\\n\\tleft: 0;\\n\\tpointer-events: none;\\n\\tbackground-image: linear-gradient(to bottom, rgba(255, 255, 255, 0), var(--color-main-background));\\n\\twidth: 100%;\\n\\theight: 4em;\\n}\\n\\n#rich-workspace.dark:not(.focus):not(.icon-loading):after {\\n\\tbackground-image: linear-gradient(to bottom, rgba(0, 0, 0, 0), var(--color-main-background));\\n}\\n\\n@media only screen and (max-width: 1024px) {\\n\\t#rich-workspace:not(.focus) {\\n\\t\\tmax-height: 30vh;\\n\\t}\\n}\\n\\nhtml.ie {\\n\\t#rich-workspace:deep() {\\n\\t\\t.text-editor {\\n\\t\\t\\tposition: initial;\\n\\t\\t}\\n\\n\\t\\t.text-editor__wrapper {\\n\\t\\t\\tposition: relative !important;\\n\\t\\t\\ttop: auto !important;\\n\\t\\t}\\n\\n\\t\\t.text-editor__main {\\n\\t\\t\\tdisplay: flex;\\n\\t\\t\\tflex-direction: column;\\n\\t\\t\\toverflow: hidden !important;\\n\\t\\t}\\n\\n\\t\\t.menubar {\\n\\t\\t\\tposition: relative;\\n\\t\\t\\toverflow: hidden;\\n\\t\\t\\tflex-shrink: 0;\\n\\t\\t\\theight: 44px;\\n\\t\\t\\ttop: auto;\\n\\t\\t}\\n\\n\\t\\t.text-editor__main > div:nth-child(2) {\\n\\t\\t\\tmin-height: 44px;\\n\\t\\t\\toverflow-x: hidden;\\n\\t\\t\\toverflow-y: auto;\\n\\t\\t\\tflex-shrink: 1;\\n\\t\\t}\\n\\t}\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"\\n.action[data-v-05e4c2f2] {\\n\\t/* to unify width of ActionInput and ActionButton */\\n\\tmin-width: 218px;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/Menu/ActionInsertLink.vue\"],\"names\":[],\"mappings\":\";AA4PA;CACA,mDAAA;CACA,gBAAA;AACA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"\\n.text-readonly-bar[data-v-6402d32d] {\\n\\tdisplay: flex;\\n}\\n.text-readonly-bar__entries[data-v-6402d32d] {\\n\\tdisplay: flex;\\n\\tflex-grow: 1;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/Menu/ReadonlyBar.vue\"],\"names\":[],\"mappings\":\";AAiCA;CACA,aAAA;AACA;AACA;CACA,aAAA;CACA,YAAA;AACA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"\\n/* This is required to properly render the bubble text (which seems linke a browser bug) */\\n.text-editor__wrapper div.ProseMirror .mention[contenteditable=false][data-v-297bb5fa] * {\\n\\t-webkit-user-modify: read-only !important;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/extensions/Mention.vue\"],\"names\":[],\"mappings\":\";AA8CA,0FAAA;AACA;CACA,yCAAA;AACA\",\"sourcesContent\":[\"\\n\\n\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","var map = {\n\t\"./1c\": [\n\t\t30908,\n\t\t\"highlight/1c\"\n\t],\n\t\"./1c.js\": [\n\t\t30908,\n\t\t\"highlight/1c\"\n\t],\n\t\"./1c.js.js\": [\n\t\t9856,\n\t\t\"highlight/1c\",\n\t\t\"highlight/1c-js-js\"\n\t],\n\t\"./abnf\": [\n\t\t62853,\n\t\t\"highlight/abnf\"\n\t],\n\t\"./abnf.js\": [\n\t\t62853,\n\t\t\"highlight/abnf\"\n\t],\n\t\"./abnf.js.js\": [\n\t\t5116,\n\t\t\"highlight/abnf-js-js\"\n\t],\n\t\"./accesslog\": [\n\t\t35976,\n\t\t\"highlight/accesslog\"\n\t],\n\t\"./accesslog.js\": [\n\t\t35976,\n\t\t\"highlight/accesslog\"\n\t],\n\t\"./accesslog.js.js\": [\n\t\t36461,\n\t\t\"highlight/accesslog-js-js\"\n\t],\n\t\"./actionscript\": [\n\t\t55505,\n\t\t\"highlight/actionscript\"\n\t],\n\t\"./actionscript.js\": [\n\t\t55505,\n\t\t\"highlight/actionscript\"\n\t],\n\t\"./actionscript.js.js\": [\n\t\t78197,\n\t\t\"highlight/actionscript-js-js\"\n\t],\n\t\"./ada\": [\n\t\t40059,\n\t\t\"highlight/ada\"\n\t],\n\t\"./ada.js\": [\n\t\t40059,\n\t\t\"highlight/ada\"\n\t],\n\t\"./ada.js.js\": [\n\t\t16880,\n\t\t\"highlight/ada-js-js\"\n\t],\n\t\"./angelscript\": [\n\t\t72921,\n\t\t\"highlight/angelscript\"\n\t],\n\t\"./angelscript.js\": [\n\t\t72921,\n\t\t\"highlight/angelscript\"\n\t],\n\t\"./angelscript.js.js\": [\n\t\t62053,\n\t\t\"highlight/angelscript-js-js\"\n\t],\n\t\"./apache\": [\n\t\t4998,\n\t\t\"highlight/apache\"\n\t],\n\t\"./apache.js\": [\n\t\t4998,\n\t\t\"highlight/apache\"\n\t],\n\t\"./apache.js.js\": [\n\t\t69773,\n\t\t\"highlight/apache-js-js\"\n\t],\n\t\"./applescript\": [\n\t\t99733,\n\t\t\"highlight/applescript\"\n\t],\n\t\"./applescript.js\": [\n\t\t99733,\n\t\t\"highlight/applescript\"\n\t],\n\t\"./applescript.js.js\": [\n\t\t56323,\n\t\t\"highlight/applescript-js-js\"\n\t],\n\t\"./arcade\": [\n\t\t70149,\n\t\t\"highlight/arcade\"\n\t],\n\t\"./arcade.js\": [\n\t\t70149,\n\t\t\"highlight/arcade\"\n\t],\n\t\"./arcade.js.js\": [\n\t\t99434,\n\t\t\"highlight/arcade-js-js\"\n\t],\n\t\"./arduino\": [\n\t\t89860,\n\t\t\"highlight/arduino\"\n\t],\n\t\"./arduino.js\": [\n\t\t89860,\n\t\t\"highlight/arduino\"\n\t],\n\t\"./arduino.js.js\": [\n\t\t1345,\n\t\t\"highlight/arduino-js-js\"\n\t],\n\t\"./armasm\": [\n\t\t93138,\n\t\t\"highlight/armasm\"\n\t],\n\t\"./armasm.js\": [\n\t\t93138,\n\t\t\"highlight/armasm\"\n\t],\n\t\"./armasm.js.js\": [\n\t\t96358,\n\t\t\"highlight/armasm-js-js\"\n\t],\n\t\"./asciidoc\": [\n\t\t88699,\n\t\t\"highlight/asciidoc\"\n\t],\n\t\"./asciidoc.js\": [\n\t\t88699,\n\t\t\"highlight/asciidoc\"\n\t],\n\t\"./asciidoc.js.js\": [\n\t\t5301,\n\t\t\"highlight/asciidoc-js-js\"\n\t],\n\t\"./aspectj\": [\n\t\t59950,\n\t\t\"highlight/aspectj\"\n\t],\n\t\"./aspectj.js\": [\n\t\t59950,\n\t\t\"highlight/aspectj\"\n\t],\n\t\"./aspectj.js.js\": [\n\t\t79219,\n\t\t\"highlight/aspectj-js-js\"\n\t],\n\t\"./autohotkey\": [\n\t\t31599,\n\t\t\"highlight/autohotkey\"\n\t],\n\t\"./autohotkey.js\": [\n\t\t31599,\n\t\t\"highlight/autohotkey\"\n\t],\n\t\"./autohotkey.js.js\": [\n\t\t54598,\n\t\t\"highlight/autohotkey-js-js\"\n\t],\n\t\"./autoit\": [\n\t\t1892,\n\t\t\"highlight/autoit\"\n\t],\n\t\"./autoit.js\": [\n\t\t1892,\n\t\t\"highlight/autoit\"\n\t],\n\t\"./autoit.js.js\": [\n\t\t81923,\n\t\t\"highlight/autoit-js-js\"\n\t],\n\t\"./avrasm\": [\n\t\t53105,\n\t\t\"highlight/avrasm\"\n\t],\n\t\"./avrasm.js\": [\n\t\t53105,\n\t\t\"highlight/avrasm\"\n\t],\n\t\"./avrasm.js.js\": [\n\t\t66522,\n\t\t\"highlight/avrasm-js-js\"\n\t],\n\t\"./awk\": [\n\t\t44868,\n\t\t\"highlight/awk\"\n\t],\n\t\"./awk.js\": [\n\t\t44868,\n\t\t\"highlight/awk\"\n\t],\n\t\"./awk.js.js\": [\n\t\t36775,\n\t\t\"highlight/awk-js-js\"\n\t],\n\t\"./axapta\": [\n\t\t52059,\n\t\t\"highlight/axapta\"\n\t],\n\t\"./axapta.js\": [\n\t\t52059,\n\t\t\"highlight/axapta\"\n\t],\n\t\"./axapta.js.js\": [\n\t\t5432,\n\t\t\"highlight/axapta-js-js\"\n\t],\n\t\"./bash\": [\n\t\t98780,\n\t\t\"highlight/bash\"\n\t],\n\t\"./bash.js\": [\n\t\t98780,\n\t\t\"highlight/bash\"\n\t],\n\t\"./bash.js.js\": [\n\t\t13574,\n\t\t\"highlight/bash-js-js\"\n\t],\n\t\"./basic\": [\n\t\t80995,\n\t\t\"highlight/basic\"\n\t],\n\t\"./basic.js\": [\n\t\t80995,\n\t\t\"highlight/basic\"\n\t],\n\t\"./basic.js.js\": [\n\t\t18080,\n\t\t\"highlight/basic-js-js\"\n\t],\n\t\"./bnf\": [\n\t\t87061,\n\t\t\"highlight/bnf\"\n\t],\n\t\"./bnf.js\": [\n\t\t87061,\n\t\t\"highlight/bnf\"\n\t],\n\t\"./bnf.js.js\": [\n\t\t14060,\n\t\t\"highlight/bnf-js-js\"\n\t],\n\t\"./brainfuck\": [\n\t\t16380,\n\t\t\"highlight/brainfuck\"\n\t],\n\t\"./brainfuck.js\": [\n\t\t16380,\n\t\t\"highlight/brainfuck\"\n\t],\n\t\"./brainfuck.js.js\": [\n\t\t37195,\n\t\t\"highlight/brainfuck-js-js\"\n\t],\n\t\"./c\": [\n\t\t68528,\n\t\t\"highlight/c\"\n\t],\n\t\"./c.js\": [\n\t\t68528,\n\t\t\"highlight/c\"\n\t],\n\t\"./c.js.js\": [\n\t\t96991,\n\t\t\"highlight/c-js-js\"\n\t],\n\t\"./cal\": [\n\t\t15762,\n\t\t\"highlight/cal\"\n\t],\n\t\"./cal.js\": [\n\t\t15762,\n\t\t\"highlight/cal\"\n\t],\n\t\"./cal.js.js\": [\n\t\t65197,\n\t\t\"highlight/cal-js-js\"\n\t],\n\t\"./capnproto\": [\n\t\t90614,\n\t\t\"highlight/capnproto\"\n\t],\n\t\"./capnproto.js\": [\n\t\t90614,\n\t\t\"highlight/capnproto\"\n\t],\n\t\"./capnproto.js.js\": [\n\t\t79955,\n\t\t\"highlight/capnproto-js-js\"\n\t],\n\t\"./ceylon\": [\n\t\t33796,\n\t\t\"highlight/ceylon\"\n\t],\n\t\"./ceylon.js\": [\n\t\t33796,\n\t\t\"highlight/ceylon\"\n\t],\n\t\"./ceylon.js.js\": [\n\t\t1263,\n\t\t\"highlight/ceylon-js-js\"\n\t],\n\t\"./clean\": [\n\t\t52222,\n\t\t\"highlight/clean\"\n\t],\n\t\"./clean.js\": [\n\t\t52222,\n\t\t\"highlight/clean\"\n\t],\n\t\"./clean.js.js\": [\n\t\t45443,\n\t\t\"highlight/clean-js-js\"\n\t],\n\t\"./clojure\": [\n\t\t92177,\n\t\t\"highlight/clojure\"\n\t],\n\t\"./clojure-repl\": [\n\t\t42012,\n\t\t\"highlight/clojure-repl\"\n\t],\n\t\"./clojure-repl.js\": [\n\t\t42012,\n\t\t\"highlight/clojure-repl\"\n\t],\n\t\"./clojure-repl.js.js\": [\n\t\t21487,\n\t\t\"highlight/clojure-repl-js-js\"\n\t],\n\t\"./clojure.js\": [\n\t\t92177,\n\t\t\"highlight/clojure\"\n\t],\n\t\"./clojure.js.js\": [\n\t\t73864,\n\t\t\"highlight/clojure-js-js\"\n\t],\n\t\"./cmake\": [\n\t\t35849,\n\t\t\"highlight/cmake\"\n\t],\n\t\"./cmake.js\": [\n\t\t35849,\n\t\t\"highlight/cmake\"\n\t],\n\t\"./cmake.js.js\": [\n\t\t30520,\n\t\t\"highlight/cmake-js-js\"\n\t],\n\t\"./coffeescript\": [\n\t\t1857,\n\t\t\"highlight/coffeescript\"\n\t],\n\t\"./coffeescript.js\": [\n\t\t1857,\n\t\t\"highlight/coffeescript\"\n\t],\n\t\"./coffeescript.js.js\": [\n\t\t1493,\n\t\t\"highlight/coffeescript-js-js\"\n\t],\n\t\"./coq\": [\n\t\t99087,\n\t\t\"highlight/coq\"\n\t],\n\t\"./coq.js\": [\n\t\t99087,\n\t\t\"highlight/coq\"\n\t],\n\t\"./coq.js.js\": [\n\t\t36768,\n\t\t\"highlight/coq-js-js\"\n\t],\n\t\"./cos\": [\n\t\t72569,\n\t\t\"highlight/cos\"\n\t],\n\t\"./cos.js\": [\n\t\t72569,\n\t\t\"highlight/cos\"\n\t],\n\t\"./cos.js.js\": [\n\t\t2210,\n\t\t\"highlight/cos-js-js\"\n\t],\n\t\"./cpp\": [\n\t\t6248,\n\t\t\"highlight/cpp\"\n\t],\n\t\"./cpp.js\": [\n\t\t6248,\n\t\t\"highlight/cpp\"\n\t],\n\t\"./cpp.js.js\": [\n\t\t16365,\n\t\t\"highlight/cpp-js-js\"\n\t],\n\t\"./crmsh\": [\n\t\t77740,\n\t\t\"highlight/crmsh\"\n\t],\n\t\"./crmsh.js\": [\n\t\t77740,\n\t\t\"highlight/crmsh\"\n\t],\n\t\"./crmsh.js.js\": [\n\t\t31965,\n\t\t\"highlight/crmsh-js-js\"\n\t],\n\t\"./crystal\": [\n\t\t83147,\n\t\t\"highlight/crystal\"\n\t],\n\t\"./crystal.js\": [\n\t\t83147,\n\t\t\"highlight/crystal\"\n\t],\n\t\"./crystal.js.js\": [\n\t\t63882,\n\t\t\"highlight/crystal-js-js\"\n\t],\n\t\"./csharp\": [\n\t\t63707,\n\t\t\"highlight/csharp\"\n\t],\n\t\"./csharp.js\": [\n\t\t63707,\n\t\t\"highlight/csharp\"\n\t],\n\t\"./csharp.js.js\": [\n\t\t29676,\n\t\t\"highlight/csharp-js-js\"\n\t],\n\t\"./csp\": [\n\t\t89534,\n\t\t\"highlight/csp\"\n\t],\n\t\"./csp.js\": [\n\t\t89534,\n\t\t\"highlight/csp\"\n\t],\n\t\"./csp.js.js\": [\n\t\t82162,\n\t\t\"highlight/csp-js-js\"\n\t],\n\t\"./css\": [\n\t\t15064,\n\t\t\"highlight/css\"\n\t],\n\t\"./css.js\": [\n\t\t15064,\n\t\t\"highlight/css\"\n\t],\n\t\"./css.js.js\": [\n\t\t45429,\n\t\t\"highlight/css-js-js\"\n\t],\n\t\"./d\": [\n\t\t118,\n\t\t\"highlight/d\"\n\t],\n\t\"./d.js\": [\n\t\t118,\n\t\t\"highlight/d\"\n\t],\n\t\"./d.js.js\": [\n\t\t51484,\n\t\t\"highlight/d-js-js\"\n\t],\n\t\"./dart\": [\n\t\t26642,\n\t\t\"highlight/dart\"\n\t],\n\t\"./dart.js\": [\n\t\t26642,\n\t\t\"highlight/dart\"\n\t],\n\t\"./dart.js.js\": [\n\t\t86573,\n\t\t\"highlight/dart-js-js\"\n\t],\n\t\"./delphi\": [\n\t\t7762,\n\t\t\"highlight/delphi\"\n\t],\n\t\"./delphi.js\": [\n\t\t7762,\n\t\t\"highlight/delphi\"\n\t],\n\t\"./delphi.js.js\": [\n\t\t71839,\n\t\t\"highlight/delphi-js-js\"\n\t],\n\t\"./diff\": [\n\t\t87731,\n\t\t\"highlight/diff\"\n\t],\n\t\"./diff.js\": [\n\t\t87731,\n\t\t\"highlight/diff\"\n\t],\n\t\"./diff.js.js\": [\n\t\t11612,\n\t\t\"highlight/diff-js-js\"\n\t],\n\t\"./django\": [\n\t\t33189,\n\t\t\"highlight/django\"\n\t],\n\t\"./django.js\": [\n\t\t33189,\n\t\t\"highlight/django\"\n\t],\n\t\"./django.js.js\": [\n\t\t94723,\n\t\t\"highlight/django-js-js\"\n\t],\n\t\"./dns\": [\n\t\t31344,\n\t\t\"highlight/dns\"\n\t],\n\t\"./dns.js\": [\n\t\t31344,\n\t\t\"highlight/dns\"\n\t],\n\t\"./dns.js.js\": [\n\t\t37854,\n\t\t\"highlight/dns-js-js\"\n\t],\n\t\"./dockerfile\": [\n\t\t57360,\n\t\t\"highlight/dockerfile\"\n\t],\n\t\"./dockerfile.js\": [\n\t\t57360,\n\t\t\"highlight/dockerfile\"\n\t],\n\t\"./dockerfile.js.js\": [\n\t\t33866,\n\t\t\"highlight/dockerfile-js-js\"\n\t],\n\t\"./dos\": [\n\t\t20605,\n\t\t\"highlight/dos\"\n\t],\n\t\"./dos.js\": [\n\t\t20605,\n\t\t\"highlight/dos\"\n\t],\n\t\"./dos.js.js\": [\n\t\t5378,\n\t\t\"highlight/dos-js-js\"\n\t],\n\t\"./dsconfig\": [\n\t\t7522,\n\t\t\"highlight/dsconfig\"\n\t],\n\t\"./dsconfig.js\": [\n\t\t7522,\n\t\t\"highlight/dsconfig\"\n\t],\n\t\"./dsconfig.js.js\": [\n\t\t63264,\n\t\t\"highlight/dsconfig-js-js\"\n\t],\n\t\"./dts\": [\n\t\t11729,\n\t\t\"highlight/dts\"\n\t],\n\t\"./dts.js\": [\n\t\t11729,\n\t\t\"highlight/dts\"\n\t],\n\t\"./dts.js.js\": [\n\t\t24232,\n\t\t\"highlight/dts-js-js\"\n\t],\n\t\"./dust\": [\n\t\t1450,\n\t\t\"highlight/dust\"\n\t],\n\t\"./dust.js\": [\n\t\t1450,\n\t\t\"highlight/dust\"\n\t],\n\t\"./dust.js.js\": [\n\t\t26229,\n\t\t\"highlight/dust-js-js\"\n\t],\n\t\"./ebnf\": [\n\t\t13039,\n\t\t\"highlight/ebnf\"\n\t],\n\t\"./ebnf.js\": [\n\t\t13039,\n\t\t\"highlight/ebnf\"\n\t],\n\t\"./ebnf.js.js\": [\n\t\t82808,\n\t\t\"highlight/ebnf-js-js\"\n\t],\n\t\"./elixir\": [\n\t\t62543,\n\t\t\"highlight/elixir\"\n\t],\n\t\"./elixir.js\": [\n\t\t62543,\n\t\t\"highlight/elixir\"\n\t],\n\t\"./elixir.js.js\": [\n\t\t40785,\n\t\t\"highlight/elixir-js-js\"\n\t],\n\t\"./elm\": [\n\t\t25658,\n\t\t\"highlight/elm\"\n\t],\n\t\"./elm.js\": [\n\t\t25658,\n\t\t\"highlight/elm\"\n\t],\n\t\"./elm.js.js\": [\n\t\t7977,\n\t\t\"highlight/elm-js-js\"\n\t],\n\t\"./erb\": [\n\t\t32151,\n\t\t\"highlight/erb\"\n\t],\n\t\"./erb.js\": [\n\t\t32151,\n\t\t\"highlight/erb\"\n\t],\n\t\"./erb.js.js\": [\n\t\t9214,\n\t\t\"highlight/erb-js-js\"\n\t],\n\t\"./erlang\": [\n\t\t57569,\n\t\t\"highlight/erlang\"\n\t],\n\t\"./erlang-repl\": [\n\t\t12282,\n\t\t\"highlight/erlang-repl\"\n\t],\n\t\"./erlang-repl.js\": [\n\t\t12282,\n\t\t\"highlight/erlang-repl\"\n\t],\n\t\"./erlang-repl.js.js\": [\n\t\t78191,\n\t\t\"highlight/erlang-repl-js-js\"\n\t],\n\t\"./erlang.js\": [\n\t\t57569,\n\t\t\"highlight/erlang\"\n\t],\n\t\"./erlang.js.js\": [\n\t\t84485,\n\t\t\"highlight/erlang-js-js\"\n\t],\n\t\"./excel\": [\n\t\t5817,\n\t\t\"highlight/excel\"\n\t],\n\t\"./excel.js\": [\n\t\t5817,\n\t\t\"highlight/excel\"\n\t],\n\t\"./excel.js.js\": [\n\t\t72276,\n\t\t\"highlight/excel-js-js\"\n\t],\n\t\"./fix\": [\n\t\t13146,\n\t\t\"highlight/fix\"\n\t],\n\t\"./fix.js\": [\n\t\t13146,\n\t\t\"highlight/fix\"\n\t],\n\t\"./fix.js.js\": [\n\t\t29274,\n\t\t\"highlight/fix-js-js\"\n\t],\n\t\"./flix\": [\n\t\t93090,\n\t\t\"highlight/flix\"\n\t],\n\t\"./flix.js\": [\n\t\t93090,\n\t\t\"highlight/flix\"\n\t],\n\t\"./flix.js.js\": [\n\t\t2556,\n\t\t\"highlight/flix-js-js\"\n\t],\n\t\"./fortran\": [\n\t\t13532,\n\t\t\"highlight/fortran\"\n\t],\n\t\"./fortran.js\": [\n\t\t13532,\n\t\t\"highlight/fortran\"\n\t],\n\t\"./fortran.js.js\": [\n\t\t33800,\n\t\t\"highlight/fortran-js-js\"\n\t],\n\t\"./fsharp\": [\n\t\t36652,\n\t\t\"highlight/fsharp\"\n\t],\n\t\"./fsharp.js\": [\n\t\t36652,\n\t\t\"highlight/fsharp\"\n\t],\n\t\"./fsharp.js.js\": [\n\t\t11770,\n\t\t\"highlight/fsharp-js-js\"\n\t],\n\t\"./gams\": [\n\t\t47903,\n\t\t\"highlight/gams\"\n\t],\n\t\"./gams.js\": [\n\t\t47903,\n\t\t\"highlight/gams\"\n\t],\n\t\"./gams.js.js\": [\n\t\t3060,\n\t\t\"highlight/gams-js-js\"\n\t],\n\t\"./gauss\": [\n\t\t45004,\n\t\t\"highlight/gauss\"\n\t],\n\t\"./gauss.js\": [\n\t\t45004,\n\t\t\"highlight/gauss\"\n\t],\n\t\"./gauss.js.js\": [\n\t\t51715,\n\t\t\"highlight/gauss-js-js\"\n\t],\n\t\"./gcode\": [\n\t\t11871,\n\t\t\"highlight/gcode\"\n\t],\n\t\"./gcode.js\": [\n\t\t11871,\n\t\t\"highlight/gcode\"\n\t],\n\t\"./gcode.js.js\": [\n\t\t84025,\n\t\t\"highlight/gcode-js-js\"\n\t],\n\t\"./gherkin\": [\n\t\t16499,\n\t\t\"highlight/gherkin\"\n\t],\n\t\"./gherkin.js\": [\n\t\t16499,\n\t\t\"highlight/gherkin\"\n\t],\n\t\"./gherkin.js.js\": [\n\t\t21442,\n\t\t\"highlight/gherkin-js-js\"\n\t],\n\t\"./glsl\": [\n\t\t21942,\n\t\t\"highlight/glsl\"\n\t],\n\t\"./glsl.js\": [\n\t\t21942,\n\t\t\"highlight/glsl\"\n\t],\n\t\"./glsl.js.js\": [\n\t\t79958,\n\t\t\"highlight/glsl-js-js\"\n\t],\n\t\"./gml\": [\n\t\t81921,\n\t\t\"highlight/gml\"\n\t],\n\t\"./gml.js\": [\n\t\t81921,\n\t\t\"highlight/gml\"\n\t],\n\t\"./gml.js.js\": [\n\t\t98186,\n\t\t\"highlight/gml\",\n\t\t\"highlight/gml-js-js\"\n\t],\n\t\"./go\": [\n\t\t92399,\n\t\t\"highlight/go\"\n\t],\n\t\"./go.js\": [\n\t\t92399,\n\t\t\"highlight/go\"\n\t],\n\t\"./go.js.js\": [\n\t\t64368,\n\t\t\"highlight/go-js-js\"\n\t],\n\t\"./golo\": [\n\t\t9574,\n\t\t\"highlight/golo\"\n\t],\n\t\"./golo.js\": [\n\t\t9574,\n\t\t\"highlight/golo\"\n\t],\n\t\"./golo.js.js\": [\n\t\t361,\n\t\t\"highlight/golo-js-js\"\n\t],\n\t\"./gradle\": [\n\t\t89878,\n\t\t\"highlight/gradle\"\n\t],\n\t\"./gradle.js\": [\n\t\t89878,\n\t\t\"highlight/gradle\"\n\t],\n\t\"./gradle.js.js\": [\n\t\t57741,\n\t\t\"highlight/gradle-js-js\"\n\t],\n\t\"./graphql\": [\n\t\t21738,\n\t\t\"highlight/graphql\"\n\t],\n\t\"./graphql.js\": [\n\t\t21738,\n\t\t\"highlight/graphql\"\n\t],\n\t\"./graphql.js.js\": [\n\t\t94840,\n\t\t\"highlight/graphql-js-js\"\n\t],\n\t\"./groovy\": [\n\t\t54658,\n\t\t\"highlight/groovy\"\n\t],\n\t\"./groovy.js\": [\n\t\t54658,\n\t\t\"highlight/groovy\"\n\t],\n\t\"./groovy.js.js\": [\n\t\t56464,\n\t\t\"highlight/groovy-js-js\"\n\t],\n\t\"./haml\": [\n\t\t21950,\n\t\t\"highlight/haml\"\n\t],\n\t\"./haml.js\": [\n\t\t21950,\n\t\t\"highlight/haml\"\n\t],\n\t\"./haml.js.js\": [\n\t\t31061,\n\t\t\"highlight/haml-js-js\"\n\t],\n\t\"./handlebars\": [\n\t\t71407,\n\t\t\"highlight/handlebars\"\n\t],\n\t\"./handlebars.js\": [\n\t\t71407,\n\t\t\"highlight/handlebars\"\n\t],\n\t\"./handlebars.js.js\": [\n\t\t74313,\n\t\t\"highlight/handlebars-js-js\"\n\t],\n\t\"./haskell\": [\n\t\t67077,\n\t\t\"highlight/haskell\"\n\t],\n\t\"./haskell.js\": [\n\t\t67077,\n\t\t\"highlight/haskell\"\n\t],\n\t\"./haskell.js.js\": [\n\t\t98107,\n\t\t\"highlight/haskell-js-js\"\n\t],\n\t\"./haxe\": [\n\t\t42720,\n\t\t\"highlight/haxe\"\n\t],\n\t\"./haxe.js\": [\n\t\t42720,\n\t\t\"highlight/haxe\"\n\t],\n\t\"./haxe.js.js\": [\n\t\t43127,\n\t\t\"highlight/haxe-js-js\"\n\t],\n\t\"./hsp\": [\n\t\t69662,\n\t\t\"highlight/hsp\"\n\t],\n\t\"./hsp.js\": [\n\t\t69662,\n\t\t\"highlight/hsp\"\n\t],\n\t\"./hsp.js.js\": [\n\t\t67423,\n\t\t\"highlight/hsp-js-js\"\n\t],\n\t\"./http\": [\n\t\t78937,\n\t\t\"highlight/http\"\n\t],\n\t\"./http.js\": [\n\t\t78937,\n\t\t\"highlight/http\"\n\t],\n\t\"./http.js.js\": [\n\t\t49706,\n\t\t\"highlight/http-js-js\"\n\t],\n\t\"./hy\": [\n\t\t99358,\n\t\t\"highlight/hy\"\n\t],\n\t\"./hy.js\": [\n\t\t99358,\n\t\t\"highlight/hy\"\n\t],\n\t\"./hy.js.js\": [\n\t\t85952,\n\t\t\"highlight/hy-js-js\"\n\t],\n\t\"./inform7\": [\n\t\t84458,\n\t\t\"highlight/inform7\"\n\t],\n\t\"./inform7.js\": [\n\t\t84458,\n\t\t\"highlight/inform7\"\n\t],\n\t\"./inform7.js.js\": [\n\t\t96955,\n\t\t\"highlight/inform7-js-js\"\n\t],\n\t\"./ini\": [\n\t\t94762,\n\t\t\"highlight/ini\"\n\t],\n\t\"./ini.js\": [\n\t\t94762,\n\t\t\"highlight/ini\"\n\t],\n\t\"./ini.js.js\": [\n\t\t38305,\n\t\t\"highlight/ini-js-js\"\n\t],\n\t\"./irpf90\": [\n\t\t60320,\n\t\t\"highlight/irpf90\"\n\t],\n\t\"./irpf90.js\": [\n\t\t60320,\n\t\t\"highlight/irpf90\"\n\t],\n\t\"./irpf90.js.js\": [\n\t\t78463,\n\t\t\"highlight/irpf90-js-js\"\n\t],\n\t\"./isbl\": [\n\t\t14664,\n\t\t\"highlight/isbl\"\n\t],\n\t\"./isbl.js\": [\n\t\t14664,\n\t\t\"highlight/isbl\"\n\t],\n\t\"./isbl.js.js\": [\n\t\t77648,\n\t\t\"highlight/isbl\",\n\t\t\"highlight/isbl-js-js\"\n\t],\n\t\"./java\": [\n\t\t28257,\n\t\t\"highlight/java\"\n\t],\n\t\"./java.js\": [\n\t\t28257,\n\t\t\"highlight/java\"\n\t],\n\t\"./java.js.js\": [\n\t\t53664,\n\t\t\"highlight/java-js-js\"\n\t],\n\t\"./javascript\": [\n\t\t40978,\n\t\t\"highlight/javascript\"\n\t],\n\t\"./javascript.js\": [\n\t\t40978,\n\t\t\"highlight/javascript\"\n\t],\n\t\"./javascript.js.js\": [\n\t\t14204,\n\t\t\"highlight/javascript-js-js\"\n\t],\n\t\"./jboss-cli\": [\n\t\t84111,\n\t\t\"highlight/jboss-cli\"\n\t],\n\t\"./jboss-cli.js\": [\n\t\t84111,\n\t\t\"highlight/jboss-cli\"\n\t],\n\t\"./jboss-cli.js.js\": [\n\t\t28948,\n\t\t\"highlight/jboss-cli-js-js\"\n\t],\n\t\"./json\": [\n\t\t40014,\n\t\t\"highlight/json\"\n\t],\n\t\"./json.js\": [\n\t\t40014,\n\t\t\"highlight/json\"\n\t],\n\t\"./json.js.js\": [\n\t\t14547,\n\t\t\"highlight/json-js-js\"\n\t],\n\t\"./julia\": [\n\t\t24629,\n\t\t\"highlight/julia\"\n\t],\n\t\"./julia-repl\": [\n\t\t25850,\n\t\t\"highlight/julia-repl\"\n\t],\n\t\"./julia-repl.js\": [\n\t\t25850,\n\t\t\"highlight/julia-repl\"\n\t],\n\t\"./julia-repl.js.js\": [\n\t\t40996,\n\t\t\"highlight/julia-repl-js-js\"\n\t],\n\t\"./julia.js\": [\n\t\t24629,\n\t\t\"highlight/julia\"\n\t],\n\t\"./julia.js.js\": [\n\t\t34380,\n\t\t\"highlight/julia-js-js\"\n\t],\n\t\"./kotlin\": [\n\t\t65812,\n\t\t\"highlight/kotlin\"\n\t],\n\t\"./kotlin.js\": [\n\t\t65812,\n\t\t\"highlight/kotlin\"\n\t],\n\t\"./kotlin.js.js\": [\n\t\t15847,\n\t\t\"highlight/kotlin-js-js\"\n\t],\n\t\"./lasso\": [\n\t\t73530,\n\t\t\"highlight/lasso\"\n\t],\n\t\"./lasso.js\": [\n\t\t73530,\n\t\t\"highlight/lasso\"\n\t],\n\t\"./lasso.js.js\": [\n\t\t88178,\n\t\t\"highlight/lasso-js-js\"\n\t],\n\t\"./latex\": [\n\t\t47408,\n\t\t\"highlight/latex\"\n\t],\n\t\"./latex.js\": [\n\t\t47408,\n\t\t\"highlight/latex\"\n\t],\n\t\"./latex.js.js\": [\n\t\t32429,\n\t\t\"highlight/latex-js-js\"\n\t],\n\t\"./ldif\": [\n\t\t57604,\n\t\t\"highlight/ldif\"\n\t],\n\t\"./ldif.js\": [\n\t\t57604,\n\t\t\"highlight/ldif\"\n\t],\n\t\"./ldif.js.js\": [\n\t\t57137,\n\t\t\"highlight/ldif-js-js\"\n\t],\n\t\"./leaf\": [\n\t\t23961,\n\t\t\"highlight/leaf\"\n\t],\n\t\"./leaf.js\": [\n\t\t23961,\n\t\t\"highlight/leaf\"\n\t],\n\t\"./leaf.js.js\": [\n\t\t10822,\n\t\t\"highlight/leaf-js-js\"\n\t],\n\t\"./less\": [\n\t\t44210,\n\t\t\"highlight/less\"\n\t],\n\t\"./less.js\": [\n\t\t44210,\n\t\t\"highlight/less\"\n\t],\n\t\"./less.js.js\": [\n\t\t63224,\n\t\t\"highlight/less-js-js\"\n\t],\n\t\"./lisp\": [\n\t\t91943,\n\t\t\"highlight/lisp\"\n\t],\n\t\"./lisp.js\": [\n\t\t91943,\n\t\t\"highlight/lisp\"\n\t],\n\t\"./lisp.js.js\": [\n\t\t94091,\n\t\t\"highlight/lisp-js-js\"\n\t],\n\t\"./livecodeserver\": [\n\t\t82299,\n\t\t\"highlight/livecodeserver\"\n\t],\n\t\"./livecodeserver.js\": [\n\t\t82299,\n\t\t\"highlight/livecodeserver\"\n\t],\n\t\"./livecodeserver.js.js\": [\n\t\t99261,\n\t\t\"highlight/livecodeserver-js-js\"\n\t],\n\t\"./livescript\": [\n\t\t69735,\n\t\t\"highlight/livescript\"\n\t],\n\t\"./livescript.js\": [\n\t\t69735,\n\t\t\"highlight/livescript\"\n\t],\n\t\"./livescript.js.js\": [\n\t\t72714,\n\t\t\"highlight/livescript-js-js\"\n\t],\n\t\"./llvm\": [\n\t\t14972,\n\t\t\"highlight/llvm\"\n\t],\n\t\"./llvm.js\": [\n\t\t14972,\n\t\t\"highlight/llvm\"\n\t],\n\t\"./llvm.js.js\": [\n\t\t43195,\n\t\t\"highlight/llvm-js-js\"\n\t],\n\t\"./lsl\": [\n\t\t37034,\n\t\t\"highlight/lsl\"\n\t],\n\t\"./lsl.js\": [\n\t\t37034,\n\t\t\"highlight/lsl\"\n\t],\n\t\"./lsl.js.js\": [\n\t\t64675,\n\t\t\"highlight/lsl-js-js\"\n\t],\n\t\"./lua\": [\n\t\t4981,\n\t\t\"highlight/lua\"\n\t],\n\t\"./lua.js\": [\n\t\t4981,\n\t\t\"highlight/lua\"\n\t],\n\t\"./lua.js.js\": [\n\t\t58353,\n\t\t\"highlight/lua-js-js\"\n\t],\n\t\"./makefile\": [\n\t\t97903,\n\t\t\"highlight/makefile\"\n\t],\n\t\"./makefile.js\": [\n\t\t97903,\n\t\t\"highlight/makefile\"\n\t],\n\t\"./makefile.js.js\": [\n\t\t49591,\n\t\t\"highlight/makefile-js-js\"\n\t],\n\t\"./markdown\": [\n\t\t52003,\n\t\t\"highlight/markdown\"\n\t],\n\t\"./markdown.js\": [\n\t\t52003,\n\t\t\"highlight/markdown\"\n\t],\n\t\"./markdown.js.js\": [\n\t\t11855,\n\t\t\"highlight/markdown-js-js\"\n\t],\n\t\"./mathematica\": [\n\t\t8601,\n\t\t\"highlight/mathematica\"\n\t],\n\t\"./mathematica.js\": [\n\t\t8601,\n\t\t\"highlight/mathematica\"\n\t],\n\t\"./mathematica.js.js\": [\n\t\t68752,\n\t\t\"highlight/mathematica\",\n\t\t\"highlight/mathematica-js-js\"\n\t],\n\t\"./matlab\": [\n\t\t48009,\n\t\t\"highlight/matlab\"\n\t],\n\t\"./matlab.js\": [\n\t\t48009,\n\t\t\"highlight/matlab\"\n\t],\n\t\"./matlab.js.js\": [\n\t\t53959,\n\t\t\"highlight/matlab-js-js\"\n\t],\n\t\"./maxima\": [\n\t\t27020,\n\t\t\"highlight/maxima\"\n\t],\n\t\"./maxima.js\": [\n\t\t27020,\n\t\t\"highlight/maxima\"\n\t],\n\t\"./maxima.js.js\": [\n\t\t11307,\n\t\t\"highlight/maxima-js-js\"\n\t],\n\t\"./mel\": [\n\t\t67739,\n\t\t\"highlight/mel\"\n\t],\n\t\"./mel.js\": [\n\t\t67739,\n\t\t\"highlight/mel\"\n\t],\n\t\"./mel.js.js\": [\n\t\t85316,\n\t\t\"highlight/mel-js-js\"\n\t],\n\t\"./mercury\": [\n\t\t44261,\n\t\t\"highlight/mercury\"\n\t],\n\t\"./mercury.js\": [\n\t\t44261,\n\t\t\"highlight/mercury\"\n\t],\n\t\"./mercury.js.js\": [\n\t\t64896,\n\t\t\"highlight/mercury-js-js\"\n\t],\n\t\"./mipsasm\": [\n\t\t74807,\n\t\t\"highlight/mipsasm\"\n\t],\n\t\"./mipsasm.js\": [\n\t\t74807,\n\t\t\"highlight/mipsasm\"\n\t],\n\t\"./mipsasm.js.js\": [\n\t\t61511,\n\t\t\"highlight/mipsasm-js-js\"\n\t],\n\t\"./mizar\": [\n\t\t49291,\n\t\t\"highlight/mizar\"\n\t],\n\t\"./mizar.js\": [\n\t\t49291,\n\t\t\"highlight/mizar\"\n\t],\n\t\"./mizar.js.js\": [\n\t\t59718,\n\t\t\"highlight/mizar-js-js\"\n\t],\n\t\"./mojolicious\": [\n\t\t8895,\n\t\t\"highlight/mojolicious\"\n\t],\n\t\"./mojolicious.js\": [\n\t\t8895,\n\t\t\"highlight/mojolicious\"\n\t],\n\t\"./mojolicious.js.js\": [\n\t\t54368,\n\t\t\"highlight/mojolicious-js-js\"\n\t],\n\t\"./monkey\": [\n\t\t9676,\n\t\t\"highlight/monkey\"\n\t],\n\t\"./monkey.js\": [\n\t\t9676,\n\t\t\"highlight/monkey\"\n\t],\n\t\"./monkey.js.js\": [\n\t\t9724,\n\t\t\"highlight/monkey-js-js\"\n\t],\n\t\"./moonscript\": [\n\t\t56486,\n\t\t\"highlight/moonscript\"\n\t],\n\t\"./moonscript.js\": [\n\t\t56486,\n\t\t\"highlight/moonscript\"\n\t],\n\t\"./moonscript.js.js\": [\n\t\t94766,\n\t\t\"highlight/moonscript-js-js\"\n\t],\n\t\"./n1ql\": [\n\t\t71414,\n\t\t\"highlight/n1ql\"\n\t],\n\t\"./n1ql.js\": [\n\t\t71414,\n\t\t\"highlight/n1ql\"\n\t],\n\t\"./n1ql.js.js\": [\n\t\t85334,\n\t\t\"highlight/n1ql-js-js\"\n\t],\n\t\"./nestedtext\": [\n\t\t5384,\n\t\t\"highlight/nestedtext\"\n\t],\n\t\"./nestedtext.js\": [\n\t\t5384,\n\t\t\"highlight/nestedtext\"\n\t],\n\t\"./nestedtext.js.js\": [\n\t\t82574,\n\t\t\"highlight/nestedtext-js-js\"\n\t],\n\t\"./nginx\": [\n\t\t94028,\n\t\t\"highlight/nginx\"\n\t],\n\t\"./nginx.js\": [\n\t\t94028,\n\t\t\"highlight/nginx\"\n\t],\n\t\"./nginx.js.js\": [\n\t\t68815,\n\t\t\"highlight/nginx-js-js\"\n\t],\n\t\"./nim\": [\n\t\t45968,\n\t\t\"highlight/nim\"\n\t],\n\t\"./nim.js\": [\n\t\t45968,\n\t\t\"highlight/nim\"\n\t],\n\t\"./nim.js.js\": [\n\t\t51698,\n\t\t\"highlight/nim-js-js\"\n\t],\n\t\"./nix\": [\n\t\t84802,\n\t\t\"highlight/nix\"\n\t],\n\t\"./nix.js\": [\n\t\t84802,\n\t\t\"highlight/nix\"\n\t],\n\t\"./nix.js.js\": [\n\t\t54831,\n\t\t\"highlight/nix-js-js\"\n\t],\n\t\"./node-repl\": [\n\t\t69609,\n\t\t\"highlight/node-repl\"\n\t],\n\t\"./node-repl.js\": [\n\t\t69609,\n\t\t\"highlight/node-repl\"\n\t],\n\t\"./node-repl.js.js\": [\n\t\t75233,\n\t\t\"highlight/node-repl-js-js\"\n\t],\n\t\"./nsis\": [\n\t\t9968,\n\t\t\"highlight/nsis\"\n\t],\n\t\"./nsis.js\": [\n\t\t9968,\n\t\t\"highlight/nsis\"\n\t],\n\t\"./nsis.js.js\": [\n\t\t49113,\n\t\t\"highlight/nsis-js-js\"\n\t],\n\t\"./objectivec\": [\n\t\t2446,\n\t\t\"highlight/objectivec\"\n\t],\n\t\"./objectivec.js\": [\n\t\t2446,\n\t\t\"highlight/objectivec\"\n\t],\n\t\"./objectivec.js.js\": [\n\t\t3707,\n\t\t\"highlight/objectivec-js-js\"\n\t],\n\t\"./ocaml\": [\n\t\t57552,\n\t\t\"highlight/ocaml\"\n\t],\n\t\"./ocaml.js\": [\n\t\t57552,\n\t\t\"highlight/ocaml\"\n\t],\n\t\"./ocaml.js.js\": [\n\t\t63808,\n\t\t\"highlight/ocaml-js-js\"\n\t],\n\t\"./openscad\": [\n\t\t6277,\n\t\t\"highlight/openscad\"\n\t],\n\t\"./openscad.js\": [\n\t\t6277,\n\t\t\"highlight/openscad\"\n\t],\n\t\"./openscad.js.js\": [\n\t\t11393,\n\t\t\"highlight/openscad-js-js\"\n\t],\n\t\"./oxygene\": [\n\t\t80136,\n\t\t\"highlight/oxygene\"\n\t],\n\t\"./oxygene.js\": [\n\t\t80136,\n\t\t\"highlight/oxygene\"\n\t],\n\t\"./oxygene.js.js\": [\n\t\t93871,\n\t\t\"highlight/oxygene-js-js\"\n\t],\n\t\"./parser3\": [\n\t\t43412,\n\t\t\"highlight/parser3\"\n\t],\n\t\"./parser3.js\": [\n\t\t43412,\n\t\t\"highlight/parser3\"\n\t],\n\t\"./parser3.js.js\": [\n\t\t93773,\n\t\t\"highlight/parser3-js-js\"\n\t],\n\t\"./perl\": [\n\t\t12482,\n\t\t\"highlight/perl\"\n\t],\n\t\"./perl.js\": [\n\t\t12482,\n\t\t\"highlight/perl\"\n\t],\n\t\"./perl.js.js\": [\n\t\t35740,\n\t\t\"highlight/perl-js-js\"\n\t],\n\t\"./pf\": [\n\t\t4485,\n\t\t\"highlight/pf\"\n\t],\n\t\"./pf.js\": [\n\t\t4485,\n\t\t\"highlight/pf\"\n\t],\n\t\"./pf.js.js\": [\n\t\t85243,\n\t\t\"highlight/pf-js-js\"\n\t],\n\t\"./pgsql\": [\n\t\t89814,\n\t\t\"highlight/pgsql\"\n\t],\n\t\"./pgsql.js\": [\n\t\t89814,\n\t\t\"highlight/pgsql\"\n\t],\n\t\"./pgsql.js.js\": [\n\t\t64460,\n\t\t\"highlight/pgsql-js-js\"\n\t],\n\t\"./php\": [\n\t\t92656,\n\t\t\"highlight/php\"\n\t],\n\t\"./php-template\": [\n\t\t35112,\n\t\t\"highlight/php-template\"\n\t],\n\t\"./php-template.js\": [\n\t\t35112,\n\t\t\"highlight/php-template\"\n\t],\n\t\"./php-template.js.js\": [\n\t\t6511,\n\t\t\"highlight/php-template-js-js\"\n\t],\n\t\"./php.js\": [\n\t\t92656,\n\t\t\"highlight/php\"\n\t],\n\t\"./php.js.js\": [\n\t\t70693,\n\t\t\"highlight/php-js-js\"\n\t],\n\t\"./plaintext\": [\n\t\t62437,\n\t\t\"highlight/plaintext\"\n\t],\n\t\"./plaintext.js\": [\n\t\t62437,\n\t\t\"highlight/plaintext\"\n\t],\n\t\"./plaintext.js.js\": [\n\t\t13651,\n\t\t\"highlight/plaintext-js-js\"\n\t],\n\t\"./pony\": [\n\t\t46874,\n\t\t\"highlight/pony\"\n\t],\n\t\"./pony.js\": [\n\t\t46874,\n\t\t\"highlight/pony\"\n\t],\n\t\"./pony.js.js\": [\n\t\t50864,\n\t\t\"highlight/pony-js-js\"\n\t],\n\t\"./powershell\": [\n\t\t85040,\n\t\t\"highlight/powershell\"\n\t],\n\t\"./powershell.js\": [\n\t\t85040,\n\t\t\"highlight/powershell\"\n\t],\n\t\"./powershell.js.js\": [\n\t\t23003,\n\t\t\"highlight/powershell-js-js\"\n\t],\n\t\"./processing\": [\n\t\t25371,\n\t\t\"highlight/processing\"\n\t],\n\t\"./processing.js\": [\n\t\t25371,\n\t\t\"highlight/processing\"\n\t],\n\t\"./processing.js.js\": [\n\t\t81414,\n\t\t\"highlight/processing-js-js\"\n\t],\n\t\"./profile\": [\n\t\t73476,\n\t\t\"highlight/profile\"\n\t],\n\t\"./profile.js\": [\n\t\t73476,\n\t\t\"highlight/profile\"\n\t],\n\t\"./profile.js.js\": [\n\t\t13445,\n\t\t\"highlight/profile-js-js\"\n\t],\n\t\"./prolog\": [\n\t\t63944,\n\t\t\"highlight/prolog\"\n\t],\n\t\"./prolog.js\": [\n\t\t63944,\n\t\t\"highlight/prolog\"\n\t],\n\t\"./prolog.js.js\": [\n\t\t45640,\n\t\t\"highlight/prolog-js-js\"\n\t],\n\t\"./properties\": [\n\t\t17546,\n\t\t\"highlight/properties\"\n\t],\n\t\"./properties.js\": [\n\t\t17546,\n\t\t\"highlight/properties\"\n\t],\n\t\"./properties.js.js\": [\n\t\t19862,\n\t\t\"highlight/properties-js-js\"\n\t],\n\t\"./protobuf\": [\n\t\t15559,\n\t\t\"highlight/protobuf\"\n\t],\n\t\"./protobuf.js\": [\n\t\t15559,\n\t\t\"highlight/protobuf\"\n\t],\n\t\"./protobuf.js.js\": [\n\t\t88241,\n\t\t\"highlight/protobuf-js-js\"\n\t],\n\t\"./puppet\": [\n\t\t93867,\n\t\t\"highlight/puppet\"\n\t],\n\t\"./puppet.js\": [\n\t\t93867,\n\t\t\"highlight/puppet\"\n\t],\n\t\"./puppet.js.js\": [\n\t\t973,\n\t\t\"highlight/puppet-js-js\"\n\t],\n\t\"./purebasic\": [\n\t\t92938,\n\t\t\"highlight/purebasic\"\n\t],\n\t\"./purebasic.js\": [\n\t\t92938,\n\t\t\"highlight/purebasic\"\n\t],\n\t\"./purebasic.js.js\": [\n\t\t53893,\n\t\t\"highlight/purebasic-js-js\"\n\t],\n\t\"./python\": [\n\t\t38245,\n\t\t\"highlight/python\"\n\t],\n\t\"./python-repl\": [\n\t\t3722,\n\t\t\"highlight/python-repl\"\n\t],\n\t\"./python-repl.js\": [\n\t\t3722,\n\t\t\"highlight/python-repl\"\n\t],\n\t\"./python-repl.js.js\": [\n\t\t53693,\n\t\t\"highlight/python-repl-js-js\"\n\t],\n\t\"./python.js\": [\n\t\t38245,\n\t\t\"highlight/python\"\n\t],\n\t\"./python.js.js\": [\n\t\t43720,\n\t\t\"highlight/python-js-js\"\n\t],\n\t\"./q\": [\n\t\t82623,\n\t\t\"highlight/q\"\n\t],\n\t\"./q.js\": [\n\t\t82623,\n\t\t\"highlight/q\"\n\t],\n\t\"./q.js.js\": [\n\t\t90999,\n\t\t\"highlight/q-js-js\"\n\t],\n\t\"./qml\": [\n\t\t23797,\n\t\t\"highlight/qml\"\n\t],\n\t\"./qml.js\": [\n\t\t23797,\n\t\t\"highlight/qml\"\n\t],\n\t\"./qml.js.js\": [\n\t\t96012,\n\t\t\"highlight/qml-js-js\"\n\t],\n\t\"./r\": [\n\t\t54730,\n\t\t\"highlight/r\"\n\t],\n\t\"./r.js\": [\n\t\t54730,\n\t\t\"highlight/r\"\n\t],\n\t\"./r.js.js\": [\n\t\t26930,\n\t\t\"highlight/r-js-js\"\n\t],\n\t\"./reasonml\": [\n\t\t2318,\n\t\t\"highlight/reasonml\"\n\t],\n\t\"./reasonml.js\": [\n\t\t2318,\n\t\t\"highlight/reasonml\"\n\t],\n\t\"./reasonml.js.js\": [\n\t\t39057,\n\t\t\"highlight/reasonml-js-js\"\n\t],\n\t\"./rib\": [\n\t\t94820,\n\t\t\"highlight/rib\"\n\t],\n\t\"./rib.js\": [\n\t\t94820,\n\t\t\"highlight/rib\"\n\t],\n\t\"./rib.js.js\": [\n\t\t50363,\n\t\t\"highlight/rib-js-js\"\n\t],\n\t\"./roboconf\": [\n\t\t41874,\n\t\t\"highlight/roboconf\"\n\t],\n\t\"./roboconf.js\": [\n\t\t41874,\n\t\t\"highlight/roboconf\"\n\t],\n\t\"./roboconf.js.js\": [\n\t\t25875,\n\t\t\"highlight/roboconf-js-js\"\n\t],\n\t\"./routeros\": [\n\t\t74005,\n\t\t\"highlight/routeros\"\n\t],\n\t\"./routeros.js\": [\n\t\t74005,\n\t\t\"highlight/routeros\"\n\t],\n\t\"./routeros.js.js\": [\n\t\t95873,\n\t\t\"highlight/routeros-js-js\"\n\t],\n\t\"./rsl\": [\n\t\t92852,\n\t\t\"highlight/rsl\"\n\t],\n\t\"./rsl.js\": [\n\t\t92852,\n\t\t\"highlight/rsl\"\n\t],\n\t\"./rsl.js.js\": [\n\t\t25978,\n\t\t\"highlight/rsl-js-js\"\n\t],\n\t\"./ruby\": [\n\t\t67905,\n\t\t\"highlight/ruby\"\n\t],\n\t\"./ruby.js\": [\n\t\t67905,\n\t\t\"highlight/ruby\"\n\t],\n\t\"./ruby.js.js\": [\n\t\t7453,\n\t\t\"highlight/ruby-js-js\"\n\t],\n\t\"./ruleslanguage\": [\n\t\t32192,\n\t\t\"highlight/ruleslanguage\"\n\t],\n\t\"./ruleslanguage.js\": [\n\t\t32192,\n\t\t\"highlight/ruleslanguage\"\n\t],\n\t\"./ruleslanguage.js.js\": [\n\t\t51506,\n\t\t\"highlight/ruleslanguage-js-js\"\n\t],\n\t\"./rust\": [\n\t\t9880,\n\t\t\"highlight/rust\"\n\t],\n\t\"./rust.js\": [\n\t\t9880,\n\t\t\"highlight/rust\"\n\t],\n\t\"./rust.js.js\": [\n\t\t75391,\n\t\t\"highlight/rust-js-js\"\n\t],\n\t\"./sas\": [\n\t\t93129,\n\t\t\"highlight/sas\"\n\t],\n\t\"./sas.js\": [\n\t\t93129,\n\t\t\"highlight/sas\"\n\t],\n\t\"./sas.js.js\": [\n\t\t56262,\n\t\t\"highlight/sas-js-js\"\n\t],\n\t\"./scala\": [\n\t\t30729,\n\t\t\"highlight/scala\"\n\t],\n\t\"./scala.js\": [\n\t\t30729,\n\t\t\"highlight/scala\"\n\t],\n\t\"./scala.js.js\": [\n\t\t76940,\n\t\t\"highlight/scala-js-js\"\n\t],\n\t\"./scheme\": [\n\t\t82254,\n\t\t\"highlight/scheme\"\n\t],\n\t\"./scheme.js\": [\n\t\t82254,\n\t\t\"highlight/scheme\"\n\t],\n\t\"./scheme.js.js\": [\n\t\t76613,\n\t\t\"highlight/scheme-js-js\"\n\t],\n\t\"./scilab\": [\n\t\t85149,\n\t\t\"highlight/scilab\"\n\t],\n\t\"./scilab.js\": [\n\t\t85149,\n\t\t\"highlight/scilab\"\n\t],\n\t\"./scilab.js.js\": [\n\t\t47731,\n\t\t\"highlight/scilab-js-js\"\n\t],\n\t\"./scss\": [\n\t\t71062,\n\t\t\"highlight/scss\"\n\t],\n\t\"./scss.js\": [\n\t\t71062,\n\t\t\"highlight/scss\"\n\t],\n\t\"./scss.js.js\": [\n\t\t61258,\n\t\t\"highlight/scss-js-js\"\n\t],\n\t\"./shell\": [\n\t\t7874,\n\t\t\"highlight/shell\"\n\t],\n\t\"./shell.js\": [\n\t\t7874,\n\t\t\"highlight/shell\"\n\t],\n\t\"./shell.js.js\": [\n\t\t16605,\n\t\t\"highlight/shell-js-js\"\n\t],\n\t\"./smali\": [\n\t\t10943,\n\t\t\"highlight/smali\"\n\t],\n\t\"./smali.js\": [\n\t\t10943,\n\t\t\"highlight/smali\"\n\t],\n\t\"./smali.js.js\": [\n\t\t21216,\n\t\t\"highlight/smali-js-js\"\n\t],\n\t\"./smalltalk\": [\n\t\t17659,\n\t\t\"highlight/smalltalk\"\n\t],\n\t\"./smalltalk.js\": [\n\t\t17659,\n\t\t\"highlight/smalltalk\"\n\t],\n\t\"./smalltalk.js.js\": [\n\t\t5229,\n\t\t\"highlight/smalltalk-js-js\"\n\t],\n\t\"./sml\": [\n\t\t45935,\n\t\t\"highlight/sml\"\n\t],\n\t\"./sml.js\": [\n\t\t45935,\n\t\t\"highlight/sml\"\n\t],\n\t\"./sml.js.js\": [\n\t\t26301,\n\t\t\"highlight/sml-js-js\"\n\t],\n\t\"./sqf\": [\n\t\t3677,\n\t\t\"highlight/sqf\"\n\t],\n\t\"./sqf.js\": [\n\t\t3677,\n\t\t\"highlight/sqf\"\n\t],\n\t\"./sqf.js.js\": [\n\t\t27351,\n\t\t\"highlight/sqf\",\n\t\t\"highlight/sqf-js-js\"\n\t],\n\t\"./sql\": [\n\t\t98935,\n\t\t\"highlight/sql\"\n\t],\n\t\"./sql.js\": [\n\t\t98935,\n\t\t\"highlight/sql\"\n\t],\n\t\"./sql.js.js\": [\n\t\t43066,\n\t\t\"highlight/sql-js-js\"\n\t],\n\t\"./stan\": [\n\t\t50052,\n\t\t\"highlight/stan\"\n\t],\n\t\"./stan.js\": [\n\t\t50052,\n\t\t\"highlight/stan\"\n\t],\n\t\"./stan.js.js\": [\n\t\t41047,\n\t\t\"highlight/stan-js-js\"\n\t],\n\t\"./stata\": [\n\t\t60454,\n\t\t\"highlight/stata\"\n\t],\n\t\"./stata.js\": [\n\t\t60454,\n\t\t\"highlight/stata\"\n\t],\n\t\"./stata.js.js\": [\n\t\t78525,\n\t\t\"highlight/stata-js-js\"\n\t],\n\t\"./step21\": [\n\t\t37022,\n\t\t\"highlight/step21\"\n\t],\n\t\"./step21.js\": [\n\t\t37022,\n\t\t\"highlight/step21\"\n\t],\n\t\"./step21.js.js\": [\n\t\t85098,\n\t\t\"highlight/step21-js-js\"\n\t],\n\t\"./stylus\": [\n\t\t88688,\n\t\t\"highlight/stylus\"\n\t],\n\t\"./stylus.js\": [\n\t\t88688,\n\t\t\"highlight/stylus\"\n\t],\n\t\"./stylus.js.js\": [\n\t\t91613,\n\t\t\"highlight/stylus-js-js\"\n\t],\n\t\"./subunit\": [\n\t\t40726,\n\t\t\"highlight/subunit\"\n\t],\n\t\"./subunit.js\": [\n\t\t40726,\n\t\t\"highlight/subunit\"\n\t],\n\t\"./subunit.js.js\": [\n\t\t93299,\n\t\t\"highlight/subunit-js-js\"\n\t],\n\t\"./swift\": [\n\t\t77690,\n\t\t\"highlight/swift\"\n\t],\n\t\"./swift.js\": [\n\t\t77690,\n\t\t\"highlight/swift\"\n\t],\n\t\"./swift.js.js\": [\n\t\t82974,\n\t\t\"highlight/swift-js-js\"\n\t],\n\t\"./taggerscript\": [\n\t\t15460,\n\t\t\"highlight/taggerscript\"\n\t],\n\t\"./taggerscript.js\": [\n\t\t15460,\n\t\t\"highlight/taggerscript\"\n\t],\n\t\"./taggerscript.js.js\": [\n\t\t43700,\n\t\t\"highlight/taggerscript-js-js\"\n\t],\n\t\"./tap\": [\n\t\t30422,\n\t\t\"highlight/tap\"\n\t],\n\t\"./tap.js\": [\n\t\t30422,\n\t\t\"highlight/tap\"\n\t],\n\t\"./tap.js.js\": [\n\t\t17532,\n\t\t\"highlight/tap-js-js\"\n\t],\n\t\"./tcl\": [\n\t\t78158,\n\t\t\"highlight/tcl\"\n\t],\n\t\"./tcl.js\": [\n\t\t78158,\n\t\t\"highlight/tcl\"\n\t],\n\t\"./tcl.js.js\": [\n\t\t16925,\n\t\t\"highlight/tcl-js-js\"\n\t],\n\t\"./thrift\": [\n\t\t30906,\n\t\t\"highlight/thrift\"\n\t],\n\t\"./thrift.js\": [\n\t\t30906,\n\t\t\"highlight/thrift\"\n\t],\n\t\"./thrift.js.js\": [\n\t\t9377,\n\t\t\"highlight/thrift-js-js\"\n\t],\n\t\"./tp\": [\n\t\t6123,\n\t\t\"highlight/tp\"\n\t],\n\t\"./tp.js\": [\n\t\t6123,\n\t\t\"highlight/tp\"\n\t],\n\t\"./tp.js.js\": [\n\t\t12686,\n\t\t\"highlight/tp-js-js\"\n\t],\n\t\"./twig\": [\n\t\t71973,\n\t\t\"highlight/twig\"\n\t],\n\t\"./twig.js\": [\n\t\t71973,\n\t\t\"highlight/twig\"\n\t],\n\t\"./twig.js.js\": [\n\t\t73660,\n\t\t\"highlight/twig-js-js\"\n\t],\n\t\"./typescript\": [\n\t\t28987,\n\t\t\"highlight/typescript\"\n\t],\n\t\"./typescript.js\": [\n\t\t28987,\n\t\t\"highlight/typescript\"\n\t],\n\t\"./typescript.js.js\": [\n\t\t92373,\n\t\t\"highlight/typescript-js-js\"\n\t],\n\t\"./vala\": [\n\t\t41462,\n\t\t\"highlight/vala\"\n\t],\n\t\"./vala.js\": [\n\t\t41462,\n\t\t\"highlight/vala\"\n\t],\n\t\"./vala.js.js\": [\n\t\t2239,\n\t\t\"highlight/vala-js-js\"\n\t],\n\t\"./vbnet\": [\n\t\t27531,\n\t\t\"highlight/vbnet\"\n\t],\n\t\"./vbnet.js\": [\n\t\t27531,\n\t\t\"highlight/vbnet\"\n\t],\n\t\"./vbnet.js.js\": [\n\t\t48701,\n\t\t\"highlight/vbnet-js-js\"\n\t],\n\t\"./vbscript\": [\n\t\t4703,\n\t\t\"highlight/vbscript\"\n\t],\n\t\"./vbscript-html\": [\n\t\t48704,\n\t\t\"highlight/vbscript-html\"\n\t],\n\t\"./vbscript-html.js\": [\n\t\t48704,\n\t\t\"highlight/vbscript-html\"\n\t],\n\t\"./vbscript-html.js.js\": [\n\t\t43992,\n\t\t\"highlight/vbscript-html-js-js\"\n\t],\n\t\"./vbscript.js\": [\n\t\t4703,\n\t\t\"highlight/vbscript\"\n\t],\n\t\"./vbscript.js.js\": [\n\t\t55872,\n\t\t\"highlight/vbscript-js-js\"\n\t],\n\t\"./verilog\": [\n\t\t54494,\n\t\t\"highlight/verilog\"\n\t],\n\t\"./verilog.js\": [\n\t\t54494,\n\t\t\"highlight/verilog\"\n\t],\n\t\"./verilog.js.js\": [\n\t\t44118,\n\t\t\"highlight/verilog-js-js\"\n\t],\n\t\"./vhdl\": [\n\t\t48110,\n\t\t\"highlight/vhdl\"\n\t],\n\t\"./vhdl.js\": [\n\t\t48110,\n\t\t\"highlight/vhdl\"\n\t],\n\t\"./vhdl.js.js\": [\n\t\t63461,\n\t\t\"highlight/vhdl-js-js\"\n\t],\n\t\"./vim\": [\n\t\t53638,\n\t\t\"highlight/vim\"\n\t],\n\t\"./vim.js\": [\n\t\t53638,\n\t\t\"highlight/vim\"\n\t],\n\t\"./vim.js.js\": [\n\t\t54971,\n\t\t\"highlight/vim-js-js\"\n\t],\n\t\"./wasm\": [\n\t\t81533,\n\t\t\"highlight/wasm\"\n\t],\n\t\"./wasm.js\": [\n\t\t81533,\n\t\t\"highlight/wasm\"\n\t],\n\t\"./wasm.js.js\": [\n\t\t7809,\n\t\t\"highlight/wasm-js-js\"\n\t],\n\t\"./wren\": [\n\t\t68563,\n\t\t\"highlight/wren\"\n\t],\n\t\"./wren.js\": [\n\t\t68563,\n\t\t\"highlight/wren\"\n\t],\n\t\"./wren.js.js\": [\n\t\t87106,\n\t\t\"highlight/wren-js-js\"\n\t],\n\t\"./x86asm\": [\n\t\t19947,\n\t\t\"highlight/x86asm\"\n\t],\n\t\"./x86asm.js\": [\n\t\t19947,\n\t\t\"highlight/x86asm\"\n\t],\n\t\"./x86asm.js.js\": [\n\t\t50923,\n\t\t\"highlight/x86asm-js-js\"\n\t],\n\t\"./xl\": [\n\t\t49338,\n\t\t\"highlight/xl\"\n\t],\n\t\"./xl.js\": [\n\t\t49338,\n\t\t\"highlight/xl\"\n\t],\n\t\"./xl.js.js\": [\n\t\t66778,\n\t\t\"highlight/xl-js-js\"\n\t],\n\t\"./xml\": [\n\t\t4610,\n\t\t\"highlight/xml\"\n\t],\n\t\"./xml.js\": [\n\t\t4610,\n\t\t\"highlight/xml\"\n\t],\n\t\"./xml.js.js\": [\n\t\t20722,\n\t\t\"highlight/xml-js-js\"\n\t],\n\t\"./xquery\": [\n\t\t5595,\n\t\t\"highlight/xquery\"\n\t],\n\t\"./xquery.js\": [\n\t\t5595,\n\t\t\"highlight/xquery\"\n\t],\n\t\"./xquery.js.js\": [\n\t\t8001,\n\t\t\"highlight/xquery-js-js\"\n\t],\n\t\"./yaml\": [\n\t\t71392,\n\t\t\"highlight/yaml\"\n\t],\n\t\"./yaml.js\": [\n\t\t71392,\n\t\t\"highlight/yaml\"\n\t],\n\t\"./yaml.js.js\": [\n\t\t8564,\n\t\t\"highlight/yaml-js-js\"\n\t],\n\t\"./zephir\": [\n\t\t42222,\n\t\t\"highlight/zephir\"\n\t],\n\t\"./zephir.js\": [\n\t\t42222,\n\t\t\"highlight/zephir\"\n\t],\n\t\"./zephir.js.js\": [\n\t\t64181,\n\t\t\"highlight/zephir-js-js\"\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(() => {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn Promise.all(ids.slice(1).map(__webpack_require__.e)).then(() => {\n\t\treturn __webpack_require__.t(id, 7 | 16);\n\t});\n}\nwebpackAsyncContext.keys = () => (Object.keys(map));\nwebpackAsyncContext.id = 63497;\nmodule.exports = webpackAsyncContext;","var map = {\n\t\"./af\": 42786,\n\t\"./af.js\": 42786,\n\t\"./ar\": 30867,\n\t\"./ar-dz\": 14130,\n\t\"./ar-dz.js\": 14130,\n\t\"./ar-kw\": 96135,\n\t\"./ar-kw.js\": 96135,\n\t\"./ar-ly\": 56440,\n\t\"./ar-ly.js\": 56440,\n\t\"./ar-ma\": 47702,\n\t\"./ar-ma.js\": 47702,\n\t\"./ar-sa\": 16040,\n\t\"./ar-sa.js\": 16040,\n\t\"./ar-tn\": 37100,\n\t\"./ar-tn.js\": 37100,\n\t\"./ar.js\": 30867,\n\t\"./az\": 31083,\n\t\"./az.js\": 31083,\n\t\"./be\": 9808,\n\t\"./be.js\": 9808,\n\t\"./bg\": 68338,\n\t\"./bg.js\": 68338,\n\t\"./bm\": 67438,\n\t\"./bm.js\": 67438,\n\t\"./bn\": 8905,\n\t\"./bn-bd\": 76225,\n\t\"./bn-bd.js\": 76225,\n\t\"./bn.js\": 8905,\n\t\"./bo\": 11560,\n\t\"./bo.js\": 11560,\n\t\"./br\": 1278,\n\t\"./br.js\": 1278,\n\t\"./bs\": 80622,\n\t\"./bs.js\": 80622,\n\t\"./ca\": 2468,\n\t\"./ca.js\": 2468,\n\t\"./cs\": 5822,\n\t\"./cs.js\": 5822,\n\t\"./cv\": 50877,\n\t\"./cv.js\": 50877,\n\t\"./cy\": 47373,\n\t\"./cy.js\": 47373,\n\t\"./da\": 24780,\n\t\"./da.js\": 24780,\n\t\"./de\": 59740,\n\t\"./de-at\": 60217,\n\t\"./de-at.js\": 60217,\n\t\"./de-ch\": 60894,\n\t\"./de-ch.js\": 60894,\n\t\"./de.js\": 59740,\n\t\"./dv\": 5300,\n\t\"./dv.js\": 5300,\n\t\"./el\": 50837,\n\t\"./el.js\": 50837,\n\t\"./en-au\": 78348,\n\t\"./en-au.js\": 78348,\n\t\"./en-ca\": 77925,\n\t\"./en-ca.js\": 77925,\n\t\"./en-gb\": 22243,\n\t\"./en-gb.js\": 22243,\n\t\"./en-ie\": 46436,\n\t\"./en-ie.js\": 46436,\n\t\"./en-il\": 47207,\n\t\"./en-il.js\": 47207,\n\t\"./en-in\": 44175,\n\t\"./en-in.js\": 44175,\n\t\"./en-nz\": 76319,\n\t\"./en-nz.js\": 76319,\n\t\"./en-sg\": 31662,\n\t\"./en-sg.js\": 31662,\n\t\"./eo\": 92915,\n\t\"./eo.js\": 92915,\n\t\"./es\": 55655,\n\t\"./es-do\": 55251,\n\t\"./es-do.js\": 55251,\n\t\"./es-mx\": 96112,\n\t\"./es-mx.js\": 96112,\n\t\"./es-us\": 71146,\n\t\"./es-us.js\": 71146,\n\t\"./es.js\": 55655,\n\t\"./et\": 5603,\n\t\"./et.js\": 5603,\n\t\"./eu\": 77763,\n\t\"./eu.js\": 77763,\n\t\"./fa\": 76959,\n\t\"./fa.js\": 76959,\n\t\"./fi\": 11897,\n\t\"./fi.js\": 11897,\n\t\"./fil\": 42549,\n\t\"./fil.js\": 42549,\n\t\"./fo\": 94694,\n\t\"./fo.js\": 94694,\n\t\"./fr\": 15596,\n\t\"./fr-ca\": 37524,\n\t\"./fr-ca.js\": 37524,\n\t\"./fr-ch\": 52330,\n\t\"./fr-ch.js\": 52330,\n\t\"./fr.js\": 15596,\n\t\"./fy\": 5044,\n\t\"./fy.js\": 5044,\n\t\"./ga\": 29295,\n\t\"./ga.js\": 29295,\n\t\"./gd\": 2101,\n\t\"./gd.js\": 2101,\n\t\"./gl\": 38794,\n\t\"./gl.js\": 38794,\n\t\"./gom-deva\": 27884,\n\t\"./gom-deva.js\": 27884,\n\t\"./gom-latn\": 23168,\n\t\"./gom-latn.js\": 23168,\n\t\"./gu\": 95349,\n\t\"./gu.js\": 95349,\n\t\"./he\": 24206,\n\t\"./he.js\": 24206,\n\t\"./hi\": 30094,\n\t\"./hi.js\": 30094,\n\t\"./hr\": 30316,\n\t\"./hr.js\": 30316,\n\t\"./hu\": 22138,\n\t\"./hu.js\": 22138,\n\t\"./hy-am\": 11423,\n\t\"./hy-am.js\": 11423,\n\t\"./id\": 29218,\n\t\"./id.js\": 29218,\n\t\"./is\": 90135,\n\t\"./is.js\": 90135,\n\t\"./it\": 90626,\n\t\"./it-ch\": 10150,\n\t\"./it-ch.js\": 10150,\n\t\"./it.js\": 90626,\n\t\"./ja\": 39183,\n\t\"./ja.js\": 39183,\n\t\"./jv\": 24286,\n\t\"./jv.js\": 24286,\n\t\"./ka\": 12105,\n\t\"./ka.js\": 12105,\n\t\"./kk\": 47772,\n\t\"./kk.js\": 47772,\n\t\"./km\": 18758,\n\t\"./km.js\": 18758,\n\t\"./kn\": 79282,\n\t\"./kn.js\": 79282,\n\t\"./ko\": 33730,\n\t\"./ko.js\": 33730,\n\t\"./ku\": 1408,\n\t\"./ku.js\": 1408,\n\t\"./ky\": 33291,\n\t\"./ky.js\": 33291,\n\t\"./lb\": 36841,\n\t\"./lb.js\": 36841,\n\t\"./lo\": 55466,\n\t\"./lo.js\": 55466,\n\t\"./lt\": 57010,\n\t\"./lt.js\": 57010,\n\t\"./lv\": 37595,\n\t\"./lv.js\": 37595,\n\t\"./me\": 39861,\n\t\"./me.js\": 39861,\n\t\"./mi\": 35493,\n\t\"./mi.js\": 35493,\n\t\"./mk\": 95966,\n\t\"./mk.js\": 95966,\n\t\"./ml\": 87341,\n\t\"./ml.js\": 87341,\n\t\"./mn\": 5115,\n\t\"./mn.js\": 5115,\n\t\"./mr\": 10370,\n\t\"./mr.js\": 10370,\n\t\"./ms\": 9847,\n\t\"./ms-my\": 41237,\n\t\"./ms-my.js\": 41237,\n\t\"./ms.js\": 9847,\n\t\"./mt\": 72126,\n\t\"./mt.js\": 72126,\n\t\"./my\": 56165,\n\t\"./my.js\": 56165,\n\t\"./nb\": 64924,\n\t\"./nb.js\": 64924,\n\t\"./ne\": 16744,\n\t\"./ne.js\": 16744,\n\t\"./nl\": 93901,\n\t\"./nl-be\": 59814,\n\t\"./nl-be.js\": 59814,\n\t\"./nl.js\": 93901,\n\t\"./nn\": 83877,\n\t\"./nn.js\": 83877,\n\t\"./oc-lnc\": 92135,\n\t\"./oc-lnc.js\": 92135,\n\t\"./pa-in\": 15858,\n\t\"./pa-in.js\": 15858,\n\t\"./pl\": 64495,\n\t\"./pl.js\": 64495,\n\t\"./pt\": 89520,\n\t\"./pt-br\": 57971,\n\t\"./pt-br.js\": 57971,\n\t\"./pt.js\": 89520,\n\t\"./ro\": 96459,\n\t\"./ro.js\": 96459,\n\t\"./ru\": 21793,\n\t\"./ru.js\": 21793,\n\t\"./sd\": 40950,\n\t\"./sd.js\": 40950,\n\t\"./se\": 10490,\n\t\"./se.js\": 10490,\n\t\"./si\": 90124,\n\t\"./si.js\": 90124,\n\t\"./sk\": 64249,\n\t\"./sk.js\": 64249,\n\t\"./sl\": 14985,\n\t\"./sl.js\": 14985,\n\t\"./sq\": 51104,\n\t\"./sq.js\": 51104,\n\t\"./sr\": 49131,\n\t\"./sr-cyrl\": 79915,\n\t\"./sr-cyrl.js\": 79915,\n\t\"./sr.js\": 49131,\n\t\"./ss\": 85893,\n\t\"./ss.js\": 85893,\n\t\"./sv\": 98760,\n\t\"./sv.js\": 98760,\n\t\"./sw\": 91172,\n\t\"./sw.js\": 91172,\n\t\"./ta\": 27333,\n\t\"./ta.js\": 27333,\n\t\"./te\": 23110,\n\t\"./te.js\": 23110,\n\t\"./tet\": 52095,\n\t\"./tet.js\": 52095,\n\t\"./tg\": 27321,\n\t\"./tg.js\": 27321,\n\t\"./th\": 9041,\n\t\"./th.js\": 9041,\n\t\"./tk\": 19005,\n\t\"./tk.js\": 19005,\n\t\"./tl-ph\": 75768,\n\t\"./tl-ph.js\": 75768,\n\t\"./tlh\": 89444,\n\t\"./tlh.js\": 89444,\n\t\"./tr\": 72397,\n\t\"./tr.js\": 72397,\n\t\"./tzl\": 28254,\n\t\"./tzl.js\": 28254,\n\t\"./tzm\": 51106,\n\t\"./tzm-latn\": 30699,\n\t\"./tzm-latn.js\": 30699,\n\t\"./tzm.js\": 51106,\n\t\"./ug-cn\": 9288,\n\t\"./ug-cn.js\": 9288,\n\t\"./uk\": 67691,\n\t\"./uk.js\": 67691,\n\t\"./ur\": 13795,\n\t\"./ur.js\": 13795,\n\t\"./uz\": 6791,\n\t\"./uz-latn\": 60588,\n\t\"./uz-latn.js\": 60588,\n\t\"./uz.js\": 6791,\n\t\"./vi\": 65666,\n\t\"./vi.js\": 65666,\n\t\"./x-pseudo\": 14378,\n\t\"./x-pseudo.js\": 14378,\n\t\"./yo\": 75805,\n\t\"./yo.js\": 75805,\n\t\"./zh-cn\": 83839,\n\t\"./zh-cn.js\": 83839,\n\t\"./zh-hk\": 55726,\n\t\"./zh-hk.js\": 55726,\n\t\"./zh-mo\": 99807,\n\t\"./zh-mo.js\": 99807,\n\t\"./zh-tw\": 74152,\n\t\"./zh-tw.js\": 74152\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 46700;","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"text-editor\",attrs:{\"id\":\"editor-container\",\"data-text-el\":\"editor-container\"},on:{\"keydown\":function($event){$event.stopPropagation();return _vm.onKeyDown.apply(null, arguments)}}},[(_vm.displayedStatus)?_c('DocumentStatus',{attrs:{\"idle\":_vm.idle,\"lock\":_vm.lock,\"sync-error\":_vm.syncError,\"has-connection-issue\":_vm.hasConnectionIssue},on:{\"reconnect\":_vm.reconnect}}):_vm._e(),_vm._v(\" \"),(_vm.displayed)?_c('Wrapper',{attrs:{\"sync-error\":_vm.syncError,\"has-connection-issue\":_vm.hasConnectionIssue,\"content-loaded\":_vm.contentLoaded,\"show-author-annotations\":_vm.showAuthorAnnotations,\"show-outline-outside\":_vm.showOutlineOutside},on:{\"outline-toggled\":_vm.outlineToggled}},[(_vm.hasEditor)?_c('MainContainer',[(_vm.readOnly)?_c('div',{staticClass:\"text-editor--readonly-bar\"},[_vm._t(\"readonlyBar\",function(){return [_c('ReadonlyBar',[_c('Status',{attrs:{\"document\":_vm.document,\"dirty\":_vm.dirty,\"sessions\":_vm.filteredSessions,\"sync-error\":_vm.syncError,\"has-connection-issue\":_vm.hasConnectionIssue}})],1)]})],2):[(_vm.renderMenus)?_c('MenuBar',{ref:\"menubar\",attrs:{\"autohide\":_vm.autohide,\"loaded\":_vm.menubarLoaded},on:{\"update:loaded\":function($event){_vm.menubarLoaded=$event}}},[_c('Status',{attrs:{\"document\":_vm.document,\"dirty\":_vm.dirty,\"sessions\":_vm.filteredSessions,\"sync-error\":_vm.syncError,\"has-connection-issue\":_vm.hasConnectionIssue}}),_vm._v(\" \"),_vm._t(\"header\")],2):_c('div',{staticClass:\"menubar-placeholder\"})],_vm._v(\" \"),_c('ContentContainer',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.contentLoaded),expression:\"contentLoaded\"}],ref:\"contentWrapper\"})],2):_vm._e(),_vm._v(\" \"),(_vm.hasSyncCollission)?_c('Reader',{attrs:{\"content\":_vm.syncError.data.outsideChange,\"is-rich-editor\":_vm.isRichEditor}}):_vm._e()],1):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/*\n * @copyright Copyright (c) 2023 Julius Härtl \n *\n * @author Julius Härtl \n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n */\n\nimport { Extension } from '@tiptap/core'\n\nexport default Extension.create({\n\taddOptions() {\n\t\treturn {\n\t\t\tfileId: null,\n\t\t}\n\t},\n\taddStorage() {\n\t\treturn {\n\t\t\tstarted: false,\n\t\t}\n\t},\n\tonCreate() {\n\t\tif (this.options.fileId === null) {\n\t\t\tthrow new Error('fileId needs to be provided')\n\t\t}\n\t\tthis.storage.started = true\n\t},\n\tonSelectionUpdate({ editor }) {\n\t\tif (!this.storage.started) {\n\t\t\treturn\n\t\t}\n\n\t\tconst pos = editor.state.selection.$anchor.pos\n\t\tsessionStorage.setItem('text-lastPos-' + this.options.fileId, pos)\n\t},\n\taddCommands() {\n\t\treturn {\n\t\t\tautofocus: () => ({ commands, editor }) => {\n\t\t\t\tconst pos = sessionStorage.getItem('text-lastPos-' + this.options.fileId)\n\t\t\t\tif (pos) {\n\t\t\t\t\treturn commands.focus(pos)\n\t\t\t\t}\n\n\t\t\t\treturn commands.focus('start')\n\t\t\t},\n\t\t}\n\t},\n})\n","/*\n * @copyright Copyright (c) 2022 Max \n *\n * @author Max \n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\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) {\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) {\n\treturn fromBase64(encoded)\n}\n","/*\n * @copyright Copyright (c) 2022 Max \n *\n * @author Max \n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n */\n\nimport { WebsocketProvider } from 'y-websocket'\nimport initWebSocketPolyfill from './WebSocketPolyfill.js'\nimport { logger } from '../helpers/logger.js'\n\n/**\n *\n * @param {object} options - options for the sync provider\n * @param {object} options.ydoc - the Ydoc\n * @param {object} options.syncService - sync service to build upon\n * @param {number} options.fileId - file id of the file to open\n * @param {object} options.initialSession - initialSession to start from\n * @param {boolean} options.disableBc - disable broadcast channel synchronization (default: disabled in debug mode, enabled otherwise)\n */\nexport default function createSyncServiceProvider({ ydoc, syncService, fileId, initialSession, disableBc }) {\n\tif (!fileId) {\n\t\t// We need a file id as a unique identifier for y.js as otherwise state might leak between different files\n\t\tthrow new Error('fileId is required')\n\t}\n\tconst WebSocketPolyfill = initWebSocketPolyfill(syncService, fileId, initialSession)\n\tdisableBc = disableBc ?? !!window?._oc_debug\n\tconst websocketProvider = new WebsocketProvider(\n\t\t'ws://localhost:1234',\n\t\t'file:' + fileId,\n\t\tydoc,\n\t\t{ WebSocketPolyfill, disableBc },\n\t)\n\twebsocketProvider.on('status', event => logger.debug('status', event))\n\treturn websocketProvider\n}\n","/*\n * @copyright Copyright (c) 2022 Max \n *\n * @author Max \n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n */\n\nimport { logger } from '../helpers/logger.js'\nimport { encodeArrayBuffer, decodeArrayBuffer } from '../helpers/base64.js'\n\n/**\n *\n * @param {object} syncService - the sync service to build upon\n * @param {number} fileId - id of the file to open\n * @param {object} initialSession - initial session to open\n */\nexport default function initWebSocketPolyfill(syncService, fileId, initialSession) {\n\treturn class WebSocketPolyfill {\n\n\t\t#url\n\t\t#session\n\t\t#version\n\t\tbinaryType\n\t\tonmessage\n\t\tonerror\n\t\tonclose\n\t\tonopen\n\t\t#handlers\n\t\t#queue\n\n\t\tconstructor(url) {\n\t\t\tthis.url = url\n\t\t\tthis.#queue = []\n\t\t\tlogger.debug('WebSocketPolyfill#constructor', { url, fileId, initialSession })\n\t\t\tthis.#registerHandlers({\n\t\t\t\topened: ({ version, session }) => {\n\t\t\t\t\tthis.#version = version\n\t\t\t\t\tlogger.debug('opened ', { version, session })\n\t\t\t\t\tthis.#session = session\n\t\t\t\t\tthis.onopen?.()\n\t\t\t\t},\n\t\t\t\tloaded: ({ version, session, content }) => {\n\t\t\t\t\tlogger.debug('loaded ', { version, session })\n\t\t\t\t\tthis.#version = version\n\t\t\t\t\tthis.#session = session\n\t\t\t\t},\n\t\t\t\tsync: ({ steps, version }) => {\n\t\t\t\t\tlogger.debug('synced ', { version, steps })\n\t\t\t\t\tthis.#version = version\n\t\t\t\t\tif (steps) {\n\t\t\t\t\t\tsteps.forEach(s => {\n\t\t\t\t\t\t\tconst data = decodeArrayBuffer(s.step)\n\t\t\t\t\t\t\tthis.onmessage({ data })\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t})\n\t\t\tsyncService.open({ fileId, initialSession })\n\t\t}\n\n\t\t#registerHandlers(handlers) {\n\t\t\tthis.#handlers = handlers\n\t\t\tObject.entries(this.#handlers)\n\t\t\t\t.forEach(([key, value]) => syncService.on(key, value))\n\t\t}\n\n\t\tsend(...data) {\n\t\t\tthis.#queue.push(...data)\n\t\t\tlet outbox = []\n\t\t\treturn syncService.sendSteps(() => {\n\t\t\t\toutbox = [...this.#queue]\n\t\t\t\tconst data = {\n\t\t\t\t\tsteps: this.#steps,\n\t\t\t\t\tawareness: this.#awareness,\n\t\t\t\t\tversion: this.#version,\n\t\t\t\t}\n\t\t\t\tthis.#queue = []\n\t\t\t\tlogger.debug('sending steps ', data)\n\t\t\t\treturn data\n\t\t\t})?.catch(err => {\n\t\t\t\tlogger.error(err)\n\t\t\t\t// try to send the steps again\n\t\t\t\tthis.#queue = [...outbox, ...this.#queue]\n\t\t\t})\n\t\t}\n\n\t\tget #steps() {\n\t\t\treturn this.#queue.map(s => encodeArrayBuffer(s))\n\t\t\t\t.filter(s => s < 'AQ')\n\t\t}\n\n\t\tget #awareness() {\n\t\t\treturn this.#queue.map(s => encodeArrayBuffer(s))\n\t\t\t\t.findLast(s => s > 'AQ') || ''\n\t\t}\n\n\t\tasync close() {\n\t\t\tawait this.#sendRemainingSteps()\n\t\t\tObject.entries(this.#handlers)\n\t\t\t\t.forEach(([key, value]) => syncService.off(key, value))\n\t\t\tthis.#handlers = []\n\t\t\tsyncService.close().then(() => {\n\t\t\t\tthis.onclose()\n\t\t\t})\n\t\t\tlogger.debug('Websocket closed')\n\t\t}\n\n\t\t#sendRemainingSteps() {\n\t\t\tif (this.#queue.length) {\n\t\t\t\treturn syncService.sendStepsNow(() => {\n\t\t\t\t\tconst data = {\n\t\t\t\t\t\tsteps: this.#steps,\n\t\t\t\t\t\tawareness: this.#awareness,\n\t\t\t\t\t\tversion: this.#version,\n\t\t\t\t\t}\n\t\t\t\t\tthis.#queue = []\n\t\t\t\t\tlogger.debug('sending final steps ', data)\n\t\t\t\t\treturn data\n\t\t\t\t})?.catch(err => {\n\t\t\t\t\tlogger.error(err)\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t}\n}\n","/*\n * @copyright Copyright (c) 2019 Julius Härtl \n *\n * @author Julius Härtl \n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n */\n\nconst extensionHighlight = {\n\tpy: 'python',\n\tgyp: 'python',\n\twsgi: 'python',\n\thtm: 'html',\n\txhtml: 'html',\n\terl: 'erlang',\n\tjsp: 'java',\n\tpl: 'perl',\n\trss: 'xml',\n\tatom: 'xml',\n\txsl: 'xml',\n\tplist: 'xml',\n\trb: 'ruby',\n\tbuilder: 'ruby',\n\tgemspec: 'ruby',\n\tpodspec: 'ruby',\n\tthor: 'ruby',\n\tdiff: 'patch',\n\ths: 'haskell',\n\ticl: 'haskell',\n\tphp3: 'php',\n\tphp4: 'php',\n\tphp5: 'php',\n\tphp6: 'php',\n\tsh: 'bash',\n\tzsh: 'bash',\n\tst: 'smalltalk',\n\tas: 'actionscript',\n\tapacheconf: 'apache',\n\tosacript: 'applescript',\n\tb: 'brainfuck',\n\tbf: 'brainfuck',\n\tclj: 'clojure',\n\t'cmake.in': 'cmake',\n\tcoffee: 'coffeescript',\n\tcson: 'coffescript',\n\ticed: 'coffescript',\n\tc: 'cpp',\n\th: 'cpp',\n\t'c++': 'cpp',\n\t'h++': 'cpp',\n\thh: 'cpp',\n\tjinja: 'django',\n\tbat: 'dos',\n\tcmd: 'dos',\n\tfs: 'fsharp',\n\thbs: 'handlebars',\n\t'html.hbs': 'handlebars',\n\t'html.handlebars': 'handlebars',\n\tsublime_metrics: 'json',\n\tsublime_session: 'json',\n\t'sublime-keymap': 'json',\n\t'sublime-mousemap': 'json',\n\t'sublime-project': 'json',\n\t'sublime-settings': 'json',\n\t'sublime-workspace': 'json',\n\tjs: 'javascript',\n\tmk: 'makefile',\n\tmak: 'makefile',\n\tmd: 'markdown',\n\tmkdown: 'markdown',\n\tmkd: 'markdown',\n\tnginxconf: 'nginx',\n\tm: 'objectivec',\n\tmm: 'objectivec',\n\tml: 'ocaml',\n\trs: 'rust',\n\tsci: 'scilab',\n\ttxt: 'plaintext',\n\tvb: 'vbnet',\n\tvbs: 'vbscript',\n}\n\nexport default extensionHighlight\nexport {\n\textensionHighlight,\n}\n","\n\n\n\n\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AutoCompleteResult.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AutoCompleteResult.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AutoCompleteResult.vue?vue&type=style&index=0&id=8b670548&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AutoCompleteResult.vue?vue&type=style&index=0&id=8b670548&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","\n\n\n\n\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MentionList.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MentionList.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AutoCompleteResult.vue?vue&type=template&id=8b670548&scoped=true&\"\nimport script from \"./AutoCompleteResult.vue?vue&type=script&lang=js&\"\nexport * from \"./AutoCompleteResult.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AutoCompleteResult.vue?vue&type=style&index=0&id=8b670548&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"8b670548\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"autocomplete-result\"},[_c('div',{staticClass:\"autocomplete-result__icon\",class:[_vm.icon, `autocomplete-result__icon--${_vm.avatarUrl ? 'with-avatar' : ''}`],style:(_vm.avatarUrl ? { backgroundImage: `url(${_vm.avatarUrl})` } : null)},[(_vm.haveStatus)?_c('div',{staticClass:\"autocomplete-result__status\",class:[`autocomplete-result__status--${_vm.status && _vm.status.icon ? 'icon' : _vm.status.status}`]},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.status && _vm.status.icon || '')+\"\\n\\t\\t\")]):_vm._e()]),_vm._v(\" \"),_c('span',{staticClass:\"autocomplete-result__content\"},[_c('span',{staticClass:\"autocomplete-result__title\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.label)+\"\\n\\t\\t\")]),_vm._v(\" \"),(_vm.subline)?_c('span',{staticClass:\"autocomplete-result__subline\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.subline)+\"\\n\\t\\t\")]):_vm._e()])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MentionList.vue?vue&type=style&index=0&id=a58c38da&prod&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MentionList.vue?vue&type=style&index=0&id=a58c38da&prod&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./MentionList.vue?vue&type=template&id=a58c38da&\"\nimport script from \"./MentionList.vue?vue&type=script&lang=js&\"\nexport * from \"./MentionList.vue?vue&type=script&lang=js&\"\nimport style0 from \"./MentionList.vue?vue&type=style&index=0&id=a58c38da&prod&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('SuggestionListWrapper',{ref:\"suggestionList\",attrs:{\"command\":_vm.command,\"items\":_vm.items},scopedSlots:_vm._u([{key:\"default\",fn:function({ item, active}){return [_c('AutoCompleteResult',{class:active ? 'highlight' : null,attrs:{\"id\":item.id,\"label\":item.label,\"icon\":\"icon-user\",\"source\":\"users\"}})]}},{key:\"empty\",fn:function(){return [_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('text', 'No user found'))+\"\\n\\t\")]},proxy:true}])})\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import axios from '@nextcloud/axios'\nimport { generateUrl } from '@nextcloud/router'\nimport MentionList from './MentionList.vue'\nimport createSuggestions from '../suggestions.js'\n\nconst USERS_LIST_ENDPOINT_URL = generateUrl('apps/text/api/v1/users')\n\nconst emitMention = ({ session, props }) => {\n\taxios.put(generateUrl('apps/text/session/mention'), {\n\t\tdocumentId: session.documentId,\n\t\tsessionId: session.id,\n\t\tsessionToken: session.token,\n\t\tmention: props.id,\n\t})\n}\n\nexport default ({ session, params }) => createSuggestions({\n\tlistComponent: MentionList,\n\titems: async ({ query }) => {\n\t\tconst params = {\n\t\t\tdocumentId: session.documentId,\n\t\t\tsessionId: session.id,\n\t\t\tsessionToken: session.token,\n\t\t\tfilter: query,\n\t\t}\n\t\tconst response = await axios.post(USERS_LIST_ENDPOINT_URL, params)\n\t\tconst users = JSON.parse(JSON.stringify(response.data))\n\t\tconst result = []\n\n\t\tObject.keys(users).map(key => result.push({\n\t\t\tid: key,\n\t\t\tlabel: users[key],\n\t\t}))\n\n\t\treturn result\n\t},\n\n\tcommand: ({ editor, range, props }) => {\n\t\tif (params?.emitMention) {\n\t\t\tparams.emitMention({ props })\n\t\t} else {\n\t\t\temitMention({\n\t\t\t\tsession,\n\t\t\t\tprops,\n\t\t\t})\n\t\t}\n\n\t\t// Insert mention\n\t\t// from https://github.com/ueberdosis/tiptap/blob/9a254bf9daf6d839bd02c968e14837098b903b38/packages/extension-mention/src/mention.ts\n\n\t\t// increase range.to by one when the next node is of type \"text\"\n\t\t// and starts with a space character\n\t\tconst nodeAfter = editor.view.state.selection.$to.nodeAfter\n\t\tconst overrideSpace = nodeAfter?.text?.startsWith(' ')\n\n\t\tif (overrideSpace) {\n\t\t\trange.to += 1\n\t\t}\n\n\t\teditor\n\t\t\t.chain()\n\t\t\t.focus()\n\t\t\t.insertContentAt(range, [\n\t\t\t\t{\n\t\t\t\t\ttype: 'mention',\n\t\t\t\t\tattrs: props,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttype: 'text',\n\t\t\t\t\ttext: ' ',\n\t\t\t\t},\n\t\t\t])\n\t\t\t.run()\n\n\t\twindow.getSelection()?.collapseToEnd()\n\t},\n\t...params,\n})\n","/**\n * @copyright Copyright (c) 2019 Julius Härtl \n *\n * @author Julius Härtl \n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n */\n\nimport MentionSuggestion from './components/Suggestion/Mention/suggestions.js'\n\nimport 'proxy-polyfill'\n\nimport { Editor } from '@tiptap/core'\nimport { lowlight } from 'lowlight/lib/core.js'\nimport hljs from 'highlight.js/lib/core'\n\nimport { logger } from './helpers/logger.js'\nimport { Mention, PlainText, RichText } from './extensions/index.js'\n// eslint-disable-next-line import/no-named-as-default\nimport CodeBlockLowlight from '@tiptap/extension-code-block-lowlight'\n\nconst loadSyntaxHighlight = async (language) => {\n\tconst list = hljs.listLanguages()\n\tlogger.debug('Supported languages', { list })\n\tif (!lowlight.listLanguages().includes(language)) {\n\t\ttry {\n\t\t\tlogger.debug('Loading language', language)\n\t\t\t// eslint-disable-next-line n/no-missing-import\n\t\t\tconst syntax = await import(/* webpackChunkName: \"highlight/[request]\" */`../node_modules/highlight.js/lib/languages/${language}`)\n\t\t\tlowlight.registerLanguage(language, syntax.default)\n\t\t} catch (error) {\n\t\t\t// fallback to none\n\t\t\tlogger.debug('No matching highlighing found', { error })\n\t\t}\n\t}\n}\n\nconst createEditor = ({ language, onCreate, onUpdate = () => {}, extensions, enableRichEditing, session, relativePath }) => {\n\tlet defaultExtensions\n\tif (enableRichEditing) {\n\t\tdefaultExtensions = [\n\t\t\tRichText.configure({\n\t\t\t\trelativePath,\n\t\t\t\tcomponent: this,\n\t\t\t\textensions: [\n\t\t\t\t\tMention.configure({\n\t\t\t\t\t\tsuggestion: MentionSuggestion({\n\t\t\t\t\t\t\tsession,\n\t\t\t\t\t\t}),\n\t\t\t\t\t}),\n\t\t\t\t],\n\t\t\t}),\n\t\t]\n\t} else {\n\t\tdefaultExtensions = [PlainText, CodeBlockLowlight.configure({ lowlight, defaultLanguage: language })]\n\t}\n\n\treturn new Editor({\n\t\tonCreate,\n\t\tonUpdate,\n\t\teditorProps: {\n\t\t\tscrollMargin: 50,\n\t\t\tscrollThreshold: 50,\n\t\t},\n\t\textensions: defaultExtensions.concat(extensions || []),\n\t})\n}\n\nconst SerializeException = function(message) {\n\tthis.message = message\n}\n\nconst serializePlainText = (tiptap) => {\n\tconst doc = tiptap.getJSON()\n\n\tif (doc.content.length !== 1 || typeof doc.content[0].content === 'undefined' || doc.content[0].content.length !== 1) {\n\t\tif (doc.content[0].type === 'codeBlock' && typeof doc.content[0].content === 'undefined') {\n\t\t\treturn ''\n\t\t}\n\t\tthrow new SerializeException('Failed to serialize document to plain text')\n\t}\n\tconst codeBlock = doc.content[0].content[0]\n\tif (codeBlock.type !== 'text') {\n\t\tthrow new SerializeException('Failed to serialize document to plain text')\n\t}\n\treturn codeBlock.text\n}\n\nexport default createEditor\nexport { createEditor, serializePlainText, loadSyntaxHighlight }\n","/*\n * @copyright Copyright (c) 2023 Max \n *\n * @author Max \n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n */\n\nimport escapeHtml from 'escape-html'\nimport markdownit from './../markdownit/index.js'\n\nexport default {\n\tmethods: {\n\t\tsetContent(content, { isRich, addToHistory = true } = {}) {\n\t\t\tconst html = isRich\n\t\t\t\t? markdownit.render(content) + '

'\n\t\t\t\t: `

${escapeHtml(content)}
`\n\t\t\tthis.$editor.chain()\n\t\t\t\t.setContent(html, addToHistory)\n\t\t\t\t.command(({ tr }) => {\n\t\t\t\t\ttr.setMeta('addToHistory', addToHistory)\n\t\t\t\t\treturn true\n\t\t\t\t})\n\t\t\t\t.run()\n\t\t},\n\n\t},\n}\n","import mod from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CollisionResolveDialog.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CollisionResolveDialog.vue?vue&type=script&lang=js&\"","\n\n\n\n\n\n\n","\n import API from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/sass-loader/dist/cjs.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CollisionResolveDialog.vue?vue&type=style&index=0&id=44412072&prod&scoped=true&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/sass-loader/dist/cjs.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CollisionResolveDialog.vue?vue&type=style&index=0&id=44412072&prod&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./CollisionResolveDialog.vue?vue&type=template&id=44412072&scoped=true&\"\nimport script from \"./CollisionResolveDialog.vue?vue&type=script&lang=js&\"\nexport * from \"./CollisionResolveDialog.vue?vue&type=script&lang=js&\"\nimport style0 from \"./CollisionResolveDialog.vue?vue&type=style&index=0&id=44412072&prod&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"44412072\",\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DocumentStatus.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DocumentStatus.vue?vue&type=script&lang=js&\"","\n\n\n\n\n\n\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"collision-resolve-dialog\",class:{'icon-loading': _vm.clicked },attrs:{\"id\":\"resolve-conflicts\"}},[_c('NcButton',{attrs:{\"disabled\":_vm.clicked,\"data-cy\":\"resolveThisVersion\"},on:{\"click\":_vm.resolveThisVersion}},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('text', 'Use current version'))+\"\\n\\t\")]),_vm._v(\" \"),_c('NcButton',{attrs:{\"disabled\":_vm.clicked,\"data-cy\":\"resolveServerVersion\"},on:{\"click\":_vm.resolveServerVersion}},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('text', 'Use the saved version'))+\"\\n\\t\")])],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/sass-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DocumentStatus.vue?vue&type=style&index=0&id=4fde7cc0&prod&scoped=true&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/sass-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DocumentStatus.vue?vue&type=style&index=0&id=4fde7cc0&prod&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./DocumentStatus.vue?vue&type=template&id=4fde7cc0&scoped=true&\"\nimport script from \"./DocumentStatus.vue?vue&type=script&lang=js&\"\nexport * from \"./DocumentStatus.vue?vue&type=script&lang=js&\"\nimport style0 from \"./DocumentStatus.vue?vue&type=style&index=0&id=4fde7cc0&prod&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4fde7cc0\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"document-status\"},[(_vm.isLoadingError)?_c('NcEmptyContent',{attrs:{\"title\":_vm.t('text', 'Failed to load file'),\"description\":_vm.syncError.data.data},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('AlertOctagonOutline')]},proxy:true}],null,false,235676370)}):(_vm.idle)?_c('p',{staticClass:\"msg\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('text', 'Document idle for {timeout} minutes, click to continue editing', { timeout: _vm.IDLE_TIMEOUT }))+\" \"),_c('a',{staticClass:\"button primary\",on:{\"click\":_vm.reconnect}},[_vm._v(_vm._s(_vm.t('text', 'Reconnect')))])]):(_vm.hasSyncCollission)?_c('p',{staticClass:\"msg icon-error\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('text', 'The document has been changed outside of the editor. The changes cannot be applied.'))+\"\\n\\t\")]):(_vm.hasConnectionIssue)?_c('p',{staticClass:\"msg\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('text', 'File could not be loaded. Please check your internet connection.'))+\" \"),_c('a',{staticClass:\"button primary\",on:{\"click\":_vm.reconnect}},[_vm._v(_vm._s(_vm.t('text', 'Reconnect')))])]):_vm._e(),_vm._v(\" \"),(_vm.lock)?_c('p',{staticClass:\"msg msg-locked\"},[_c('Lock'),_vm._v(\" \"+_vm._s(_vm.t('text', 'This file is opened read-only as it is currently locked by {user}.', { user: _vm.lock.displayName }))+\"\\n\\t\")],1):_vm._e(),_vm._v(\" \"),(_vm.hasSyncCollission)?_c('CollisionResolveDialog',{attrs:{\"sync-error\":_vm.syncError}}):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/*\n * @copyright Copyright (c) 2019 Julius Härtl \n *\n * @author Julius Härtl \n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n */\n\nimport debounce from 'debounce'\n\nconst getClientWidth = () => document.documentElement.clientWidth\nconst isMobile = () => getClientWidth() < 768\n\nexport default {\n\tdata() {\n\t\treturn {\n\t\t\tisMobile: isMobile(),\n\t\t}\n\t},\n\tbeforeMount() {\n\t\tthis.$onResize = debounce(() => {\n\t\t\tthis.isMobile = isMobile()\n\t\t}, 100)\n\n\t\twindow.addEventListener('resize', this.$onResize)\n\t},\n\tbeforeDestroy() {\n\t\twindow.removeEventListener('resize', this.$onResize)\n\t},\n}\n","\n\n\n\n\n\n\n","import mod from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SavingIndicator.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SavingIndicator.vue?vue&type=script&lang=js&\"","\n import API from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/sass-loader/dist/cjs.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SavingIndicator.vue?vue&type=style&index=0&id=073a0278&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/sass-loader/dist/cjs.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SavingIndicator.vue?vue&type=style&index=0&id=073a0278&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./SavingIndicator.vue?vue&type=template&id=073a0278&scoped=true&\"\nimport script from \"./SavingIndicator.vue?vue&type=script&lang=js&\"\nexport * from \"./SavingIndicator.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SavingIndicator.vue?vue&type=style&index=0&id=073a0278&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"073a0278\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('span',{staticClass:\"material-design-icon\"},[_c('CheckIcon',{staticClass:\"saving-indicator-check\"}),_vm._v(\" \"),_c('span',{staticClass:\"saving-indicator-container\",class:{error: _vm.error, saving: _vm.saving}},[_c('CircleMedium',{staticClass:\"saving-indicator\"})],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/*\n * @copyright Copyright (c) 2023 Max \n *\n * @author Max \n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n */\n\n/* moment.js displays intervals as \"Some seconds ago\" and the like.\n * Use `this.refreshMoment` in a computed to live update these.\n *\n * Updates happen every 20 seconds as that is enough\n * given the granularity of moment.js\n */\nexport default {\n\n\tdata() {\n\t\treturn {\n\t\t\trefreshMoment: 0,\n\t\t}\n\t},\n\n\tmounted() {\n\t\tthis.$refreshInterval = setInterval(() => {\n\t\t\tthis.refreshMoment++\n\t\t}, 20000)\n\t},\n\n\tbeforeDestroy() {\n\t\tclearInterval(this.$refreshInterval)\n\t},\n\n}\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Status.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Status.vue?vue&type=script&lang=js&\"","\n\n\n\n\n\n\n","\n import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/sass-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Status.vue?vue&type=style&index=0&id=d5139f5a&prod&scoped=true&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/sass-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Status.vue?vue&type=style&index=0&id=d5139f5a&prod&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Status.vue?vue&type=template&id=d5139f5a&scoped=true&\"\nimport script from \"./Status.vue?vue&type=script&lang=js&\"\nexport * from \"./Status.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Status.vue?vue&type=style&index=0&id=d5139f5a&prod&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"d5139f5a\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"text-editor__session-list\"},[_c('div',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.lastSavedStatusTooltip),expression:\"lastSavedStatusTooltip\"}],staticClass:\"save-status\",class:_vm.saveStatusClass},[_c('NcButton',{attrs:{\"type\":\"tertiary\"},on:{\"click\":_vm.onClickSave},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('SavingIndicator',{attrs:{\"saving\":_vm.saveStatusClass === 'saving',\"error\":_vm.saveStatusClass === 'error'}})]},proxy:true}])})],1),_vm._v(\" \"),_c('SessionList',{attrs:{\"sessions\":_vm.sessions}},[_c('p',{staticClass:\"last-saved\",attrs:{\"slot\":\"lastSaved\"},slot:\"lastSaved\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('text', 'Last saved'))+\": \"+_vm._s(_vm.lastSavedString)+\"\\n\\t\\t\")]),_vm._v(\" \"),(_vm.$isPublic && !_vm.currentSession.userId)?_c('GuestNameDialog',{attrs:{\"session\":_vm.currentSession}}):_vm._e()],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n","/*\n * @copyright Copyright (c) 2023 Max \n *\n * @author Max \n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n */\n\nimport { encodeArrayBuffer, decodeArrayBuffer } from '../helpers/base64.js'\nimport { Doc, encodeStateAsUpdate, applyUpdate } from 'yjs'\n\n/**\n *\n * @param {Doc} ydoc - encode state of this doc\n */\nexport function getDocumentState(ydoc) {\n\tconst update = encodeStateAsUpdate(ydoc)\n\treturn encodeArrayBuffer(update)\n}\n\n/**\n *\n * @param {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\tapplyUpdate(ydoc, update, origin)\n}\n","import mod from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Editor.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Editor.vue?vue&type=script&lang=js&\"","\n import API from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/sass-loader/dist/cjs.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Editor.vue?vue&type=style&index=0&id=23f89298&prod&scoped=true&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/sass-loader/dist/cjs.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Editor.vue?vue&type=style&index=0&id=23f89298&prod&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/sass-loader/dist/cjs.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Editor.vue?vue&type=style&index=1&id=23f89298&prod&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/sass-loader/dist/cjs.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Editor.vue?vue&type=style&index=1&id=23f89298&prod&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Editor.vue?vue&type=template&id=23f89298&scoped=true&\"\nimport script from \"./Editor.vue?vue&type=script&lang=js&\"\nexport * from \"./Editor.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Editor.vue?vue&type=style&index=0&id=23f89298&prod&scoped=true&lang=scss&\"\nimport style1 from \"./Editor.vue?vue&type=style&index=1&id=23f89298&prod&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"23f89298\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"content-wrapper text-editor__content-wrapper\",class:{\n\t\t'--show-outline': _vm.showOutline\n\t},attrs:{\"data-text-el\":\"editor-content-wrapper\"}},[(_vm.showOutline)?_c('div',{staticClass:\"text-editor__content-wrapper__left\"},[_c('EditorOutline')],1):_vm._e(),_vm._v(\" \"),_vm._t(\"default\"),_vm._v(\" \"),_c('EditorContent',{staticClass:\"editor__content text-editor__content\",attrs:{\"tabindex\":\"0\",\"role\":\"document\",\"editor\":_vm.$editor}}),_vm._v(\" \"),_c('div',{staticClass:\"text-editor__content-wrapper__right\"})],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ContentContainer.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ContentContainer.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/sass-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ContentContainer.vue?vue&type=style&index=0&id=9114a8c6&prod&scoped=true&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/sass-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ContentContainer.vue?vue&type=style&index=0&id=9114a8c6&prod&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./ContentContainer.vue?vue&type=template&id=9114a8c6&scoped=true&\"\nimport script from \"./ContentContainer.vue?vue&type=script&lang=js&\"\nexport * from \"./ContentContainer.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ContentContainer.vue?vue&type=style&index=0&id=9114a8c6&prod&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"9114a8c6\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"editor--outline\",class:{ 'editor--outline-mobile': _vm.mobile },attrs:{\"data-text-el\":\"editor-outline\"}},[_c('header',{staticClass:\"editor--outline__header\"},[_c('NcButton',{staticClass:\"editor--outline__btn-close\",attrs:{\"type\":\"tertiary\",\"aria-label\":_vm.t('text', 'Close outline view')},on:{\"click\":_vm.$outlineActions.toggle},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('Close')]},proxy:true}])}),_vm._v(\" \"),_c('h2',[_vm._v(_vm._s(_vm.t('text', 'Outline')))])],1),_vm._v(\" \"),_c('TableOfContents')],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TableOfContents.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TableOfContents.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/sass-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TableOfContents.vue?vue&type=style&index=0&id=3f705580&prod&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/sass-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TableOfContents.vue?vue&type=style&index=0&id=3f705580&prod&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./TableOfContents.vue?vue&type=template&id=3f705580&\"\nimport script from \"./TableOfContents.vue?vue&type=script&lang=js&\"\nexport * from \"./TableOfContents.vue?vue&type=script&lang=js&\"\nimport style0 from \"./TableOfContents.vue?vue&type=style&index=0&id=3f705580&prod&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"editor--toc\",class:{ '--initial-render': _vm.initialRender },attrs:{\"data-text-el\":\"editor-table-of-contents\"}},[_c('ul',{staticClass:\"editor--toc__list\"},_vm._l((_vm.headings),function(heading){return _c('li',{key:heading.uuid,staticClass:\"editor--toc__item\",class:{\n\t\t\t\t[`editor--toc__item--${heading.level}`]: true,\n\t\t\t\t[`editor--toc__item--previous-${heading.previous}`]: heading.previous > 0,\n\t\t\t},attrs:{\"data-toc-level\":heading.level}},[_c('a',{attrs:{\"href\":`#${heading.id}`},on:{\"click\":function($event){$event.preventDefault();return _vm.goto(heading)}}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(heading.text)+\"\\n\\t\\t\\t\")])])}),0)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EditorOutline.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EditorOutline.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/sass-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EditorOutline.vue?vue&type=style&index=0&id=4a57d3b2&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/sass-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EditorOutline.vue?vue&type=style&index=0&id=4a57d3b2&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./EditorOutline.vue?vue&type=template&id=4a57d3b2&scoped=true&\"\nimport script from \"./EditorOutline.vue?vue&type=script&lang=js&\"\nexport * from \"./EditorOutline.vue?vue&type=script&lang=js&\"\nimport style0 from \"./EditorOutline.vue?vue&type=style&index=0&id=4a57d3b2&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4a57d3b2\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"editor\"},[(_vm.$editorUpload)?_c('MediaHandler',{staticClass:\"text-editor__main\"},[_vm._t(\"default\")],2):_vm._t(\"default\")],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MediaHandler.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MediaHandler.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./MediaHandler.vue?vue&type=template&id=08fe4240&\"\nimport script from \"./MediaHandler.vue?vue&type=script&lang=js&\"\nexport * from \"./MediaHandler.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MainContainer.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MainContainer.vue?vue&type=script&lang=js&\"","\n\n\n\n\n\n\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"editor editor-media-handler\",class:{ draggedOver: _vm.draggedOver },attrs:{\"data-text-el\":\"editor-media-handler\"},on:{\"image-paste\":_vm.onPaste,\"dragover\":function($event){$event.preventDefault();$event.stopPropagation();return _vm.setDraggedOver(true)},\"dragleave\":function($event){$event.preventDefault();$event.stopPropagation();return _vm.setDraggedOver(false)},\"file-drop\":_vm.onEditorDrop}},[_c('input',{ref:\"attachmentFileInput\",staticClass:\"hidden-visually\",attrs:{\"data-text-el\":\"attachment-file-input\",\"type\":\"file\",\"accept\":\"*/*\",\"aria-hidden\":\"true\",\"multiple\":\"\"},on:{\"change\":_vm.onAttachmentUploadFilePicked}}),_vm._v(\" \"),_vm._t(\"default\")],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/sass-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MainContainer.vue?vue&type=style&index=0&id=8ffa875e&prod&scoped=true&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/sass-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MainContainer.vue?vue&type=style&index=0&id=8ffa875e&prod&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./MainContainer.vue?vue&type=template&id=8ffa875e&scoped=true&\"\nimport script from \"./MainContainer.vue?vue&type=script&lang=js&\"\nexport * from \"./MainContainer.vue?vue&type=script&lang=js&\"\nimport style0 from \"./MainContainer.vue?vue&type=style&index=0&id=8ffa875e&prod&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"8ffa875e\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('Wrapper',{attrs:{\"content-loaded\":true,\"show-outline-outside\":_vm.showOutlineOutside},on:{\"outline-toggled\":_vm.outlineToggled}},[_c('MainContainer',[(!_vm.readOnly)?_c('MenuBar',{attrs:{\"autohide\":false}}):_vm._t(\"readonlyBar\",function(){return [_c('ReadonlyBar')]}),_vm._v(\" \"),_c('ContentContainer')],2)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MarkdownContentEditor.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MarkdownContentEditor.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./MarkdownContentEditor.vue?vue&type=template&id=2d07869f&scoped=true&\"\nimport script from \"./MarkdownContentEditor.vue?vue&type=script&lang=js&\"\nexport * from \"./MarkdownContentEditor.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2d07869f\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"text-editor__wrapper\",class:{\n\t\t'has-conflicts': _vm.hasSyncCollission,\n\t\t'icon-loading': !_vm.contentLoaded && !_vm.hasConnectionIssue,\n\t\t'is-rich-workspace': _vm.$isRichWorkspace,\n\t\t'is-rich-editor': _vm.$isRichEditor,\n\t\t'show-color-annotations': _vm.showAuthorAnnotations\n\t}},[_vm._t(\"default\")],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Wrapper.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Wrapper.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/sass-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Wrapper.vue?vue&type=style&index=0&id=12bd2945&prod&scoped=true&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/sass-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Wrapper.vue?vue&type=style&index=0&id=12bd2945&prod&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Wrapper.vue?vue&type=template&id=12bd2945&scoped=true&\"\nimport script from \"./Wrapper.vue?vue&type=script&lang=js&\"\nexport * from \"./Wrapper.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Wrapper.vue?vue&type=style&index=0&id=12bd2945&prod&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"12bd2945\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('NcActions',_vm._b({directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.tooltip),expression:\"tooltip\"}],staticClass:\"entry-list-action entry-action\",attrs:{\"role\":\"menu\",\"container\":_vm.menuIDSelector,\"aria-label\":_vm.actionEntry.label,\"force-menu\":true,\"title\":_vm.actionEntry.label,\"data-text-action-entry\":_vm.actionEntry.key,\"data-text-action-active\":_vm.activeKey},on:{\"update:open\":_vm.onOpenChange},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c(_vm.icon,{key:_vm.iconKey,tag:\"component\"})]},proxy:true}])},'NcActions',_vm.state,false),[_vm._v(\" \"),_vm._l((_vm.children),function(child){return _c('ActionSingle',_vm._g({key:`child-${child.key}`,attrs:{\"is-item\":\"\",\"action-entry\":child},on:{\"trigged\":_vm.onTrigger}},_vm.$listeners))}),_vm._v(\" \"),_vm._t(\"lastAction\",null,null,{ visible: _vm.visible })],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ActionList.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ActionList.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ActionList.vue?vue&type=template&id=5a9c3619&\"\nimport script from \"./ActionList.vue?vue&type=script&lang=js&\"\nexport * from \"./ActionList.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\n\n\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ActionSingle.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ActionSingle.vue?vue&type=script&lang=js&\"","var render, staticRenderFns\nimport script from \"./ActionSingle.vue?vue&type=script&lang=js&\"\nexport * from \"./ActionSingle.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"text-menubar\",class:{\n\t\t'text-menubar--ready': _vm.isReady,\n\t\t'text-menubar--show': _vm.isVisible,\n\t\t'text-menubar--autohide': _vm.autohide,\n\t\t'text-menubar--is-workspace': _vm.$isRichWorkspace\n\t},attrs:{\"id\":_vm.randomID,\"data-text-el\":\"menubar\",\"role\":\"menubar\",\"aria-label\":_vm.t('text', 'Formatting menu bar')}},[(_vm.displayHelp)?_c('HelpModal',{on:{\"close\":_vm.hideHelp}}):_vm._e(),_vm._v(\" \"),(_vm.displayTranslate !== false)?_c('Translate',{attrs:{\"content\":_vm.displayTranslate},on:{\"insert-content\":_vm.translateInsert,\"replace-content\":_vm.translateReplace,\"close\":_vm.hideTranslate}}):_vm._e(),_vm._v(\" \"),(_vm.$isRichEditor)?_c('div',{ref:\"menubar\",staticClass:\"text-menubar__entries\",attrs:{\"role\":\"group\",\"aria-label\":_vm.t('text', 'Editor actions')}},[_vm._l((_vm.visibleEntries),function(actionEntry){return _c('ActionEntry',_vm._b({key:`text-action--${actionEntry.key}`},'ActionEntry',{ actionEntry },false))}),_vm._v(\" \"),_c('ActionList',{key:\"text-action--remain\",attrs:{\"action-entry\":_vm.hiddenEntries},scopedSlots:_vm._u([{key:\"lastAction\",fn:function({ visible }){return [_c('NcActionButton',{on:{\"click\":_vm.showTranslate},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('TranslateVariant')]},proxy:true}],null,true)},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('text', 'Translate'))+\"\\n\\t\\t\\t\\t\")]),_vm._v(\" \"),_c('ActionFormattingHelp',{on:{\"click\":_vm.showHelp}}),_vm._v(\" \"),_c('NcActionSeparator'),_vm._v(\" \"),_c('CharacterCount',_vm._b({},'CharacterCount',{ visible },false))]}}],null,false,1235075227)})],2):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"text-menubar__slot\"},[_vm._t(\"default\")],2)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./HelpModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./HelpModal.vue?vue&type=script&lang=js&\"","/**\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 import API from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/sass-loader/dist/cjs.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./HelpModal.vue?vue&type=style&index=0&id=a7b1a700&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/sass-loader/dist/cjs.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./HelpModal.vue?vue&type=style&index=0&id=a7b1a700&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./HelpModal.vue?vue&type=template&id=a7b1a700&scoped=true&\"\nimport script from \"./HelpModal.vue?vue&type=script&lang=js&\"\nexport * from \"./HelpModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./HelpModal.vue?vue&type=style&index=0&id=a7b1a700&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"a7b1a700\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('NcModal',{attrs:{\"size\":\"normal\",\"data-text-el\":\"formatting-help\",\"title\":_vm.t('text', 'Formatting help')},on:{\"close\":function($event){return _vm.$emit('close')}}},[_c('h2',[_vm._v(_vm._s(_vm.t('text', 'Formatting help')))]),_vm._v(\" \"),_c('p',[_vm._v(_vm._s(_vm.t('text', 'Speed up your writing with simple shortcuts.')))]),_vm._v(\" \"),(!_vm.isMobileCached)?_c('p',[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('text', 'Just type the Markdown syntax or use keyboard shortcuts from below.'))+\"\\n\\t\")]):_c('p',[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('text', 'Just type the Markdown syntax from below.'))+\"\\n\\t\")]),_vm._v(\" \"),_c('table',[_c('thead',[_c('tr',[_c('th',[_vm._v(_vm._s(_vm.t('text', 'Style')))]),_vm._v(\" \"),_c('th',[_vm._v(_vm._s(_vm.t('text', 'Syntax')))]),_vm._v(\" \"),(!_vm.isMobileCached)?_c('th',[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('text', 'Keyboard shortcuts'))+\"\\n\\t\\t\\t\\t\")]):_vm._e()])]),_vm._v(\" \"),_c('tbody',[_c('tr',[_c('td',[_vm._v(_vm._s(_vm.t('text', 'New paragraph')))]),_vm._v(\" \"),_c('td',[_c('kbd',[_vm._v(_vm._s(_vm.t('text', 'Enter')))])]),_vm._v(\" \"),(!_vm.isMobileCached)?_c('td'):_vm._e()]),_vm._v(\" \"),_c('tr',[_c('td',[_vm._v(_vm._s(_vm.t('text', 'Hard line break')))]),_vm._v(\" \"),_c('td',[_c('kbd',[_vm._v(_vm._s(_vm.t('text', 'Enter')))]),_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('text', 'followed by'))+\"\\n\\t\\t\\t\\t\\t\"),_c('kbd',[_vm._v(_vm._s(_vm.t('text', 'Backspace')))])]),_vm._v(\" \"),(!_vm.isMobileCached)?_c('td',[_c('kbd',[_vm._v(_vm._s(_vm.t('text', 'Shift')))]),_vm._v(\"\\n\\t\\t\\t\\t\\t+\\n\\t\\t\\t\\t\\t\"),_c('kbd',[_vm._v(_vm._s(_vm.t('text', 'Enter')))])]):_vm._e()]),_vm._v(\" \"),_c('tr',[_c('td',[_vm._v(_vm._s(_vm.t('text', 'Bold')))]),_vm._v(\" \"),_c('td',[_c('code',[_vm._v(\"**\"+_vm._s(_vm.t('text', 'Bold text'))+\"**\")])]),_vm._v(\" \"),(!_vm.isMobileCached)?_c('td',[_c('kbd',[_vm._v(_vm._s(_vm.t('text', 'Ctrl')))]),_vm._v(\"\\n\\t\\t\\t\\t\\t+\\n\\t\\t\\t\\t\\t\"),_c('kbd',[_vm._v(\"B\")])]):_vm._e()]),_vm._v(\" \"),_c('tr',[_c('td',[_vm._v(_vm._s(_vm.t('text', 'Italic')))]),_vm._v(\" \"),_c('td',[_c('code',[_vm._v(\"*\"+_vm._s(_vm.t('text', 'Italicized text'))+\"*\")])]),_vm._v(\" \"),(!_vm.isMobileCached)?_c('td',[_c('kbd',[_vm._v(_vm._s(_vm.t('text', 'Ctrl')))]),_vm._v(\"\\n\\t\\t\\t\\t\\t+\\n\\t\\t\\t\\t\\t\"),_c('kbd',[_vm._v(\"I\")])]):_vm._e()]),_vm._v(\" \"),_c('tr',[_c('td',[_vm._v(_vm._s(_vm.t('text', 'Strikethrough')))]),_vm._v(\" \"),_c('td',[_c('code',[_vm._v(\"~~\"+_vm._s(_vm.t('text', 'Mistaken text'))+\"~~\")])]),_vm._v(\" \"),(!_vm.isMobileCached)?_c('td',[_c('kbd',[_vm._v(_vm._s(_vm.t('text', 'Ctrl')))]),_vm._v(\"\\n\\t\\t\\t\\t\\t+\\n\\t\\t\\t\\t\\t\"),_c('kbd',[_vm._v(_vm._s(_vm.t('text', 'Shift')))]),_vm._v(\"\\n\\t\\t\\t\\t\\t+\\n\\t\\t\\t\\t\\t\"),_c('kbd',[_vm._v(\"X\")])]):_vm._e()]),_vm._v(\" \"),_c('tr',[_c('td',[_vm._v(_vm._s(_vm.t('text', 'Underline')))]),_vm._v(\" \"),_c('td',[_c('code',[_vm._v(\"__\"+_vm._s(_vm.t('text', 'Underlined text'))+\"__\")])]),_vm._v(\" \"),(!_vm.isMobileCached)?_c('td',[_c('kbd',[_vm._v(_vm._s(_vm.t('text', 'Ctrl')))]),_vm._v(\"\\n\\t\\t\\t\\t\\t+\\n\\t\\t\\t\\t\\t\"),_c('kbd',[_vm._v(\"U\")])]):_vm._e()]),_vm._v(\" \"),_c('tr',[_c('td',{staticClass:\"ellipsis_top\"},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('text', 'Heading 1'))+\"\\n\\t\\t\\t\\t\")]),_vm._v(\" \"),_c('td',{staticClass:\"ellipsis_top\"},[_c('code',[_vm._v(\"# \"+_vm._s(_vm.t('text', 'Heading level 1')))])]),_vm._v(\" \"),(!_vm.isMobileCached)?_c('td',{staticClass:\"ellipsis_top\"},[_c('kbd',[_vm._v(_vm._s(_vm.t('text', 'Ctrl')))]),_vm._v(\"\\n\\t\\t\\t\\t\\t+\\n\\t\\t\\t\\t\\t\"),_c('kbd',[_vm._v(_vm._s(_vm.t('text', 'Shift')))]),_vm._v(\"\\n\\t\\t\\t\\t\\t+\\n\\t\\t\\t\\t\\t\"),_c('kbd',[_vm._v(\"1\")])]):_vm._e()]),_vm._v(\" \"),_c('tr',[_c('td',{staticClass:\"noborder ellipsis\"},[_vm._v(\"\\n\\t\\t\\t\\t\\t…\\n\\t\\t\\t\\t\")]),_vm._v(\" \"),_c('td',{staticClass:\"noborder ellipsis\"},[_vm._v(\"\\n\\t\\t\\t\\t\\t…\\n\\t\\t\\t\\t\")]),_vm._v(\" \"),(!_vm.isMobileCached)?_c('td',{staticClass:\"ellipsis noborder\"},[_vm._v(\"\\n\\t\\t\\t\\t\\t…\\n\\t\\t\\t\\t\")]):_vm._e()]),_vm._v(\" \"),_c('tr',[_c('td',{staticClass:\"noborder ellipsis_bottom\"},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('text', 'Heading 6'))+\"\\n\\t\\t\\t\\t\")]),_vm._v(\" \"),_c('td',{staticClass:\"noborder ellipsis_bottom\"},[_c('code',[_vm._v(\"###### \"+_vm._s(_vm.t('text', 'Heading level 6')))])]),_vm._v(\" \"),(!_vm.isMobileCached)?_c('td',{staticClass:\"noborder ellipsis_bottom\"},[_c('kbd',[_vm._v(_vm._s(_vm.t('text', 'Ctrl')))]),_vm._v(\"\\n\\t\\t\\t\\t\\t+\\n\\t\\t\\t\\t\\t\"),_c('kbd',[_vm._v(_vm._s(_vm.t('text', 'Shift')))]),_vm._v(\"\\n\\t\\t\\t\\t\\t+\\n\\t\\t\\t\\t\\t\"),_c('kbd',[_vm._v(\"6\")])]):_vm._e()]),_vm._v(\" \"),_c('tr',[_c('td',[_vm._v(_vm._s(_vm.t('text', 'Unordered list')))]),_vm._v(\" \"),_c('td',[_c('code',[_vm._v(\"* \"+_vm._s(_vm.t('text', 'An item')))])]),_vm._v(\" \"),(!_vm.isMobileCached)?_c('td',[_c('kbd',[_vm._v(_vm._s(_vm.t('text', 'Ctrl')))]),_vm._v(\"\\n\\t\\t\\t\\t\\t+\\n\\t\\t\\t\\t\\t\"),_c('kbd',[_vm._v(_vm._s(_vm.t('text', 'Shift')))]),_vm._v(\"\\n\\t\\t\\t\\t\\t+\\n\\t\\t\\t\\t\\t\"),_c('kbd',[_vm._v(\"8\")])]):_vm._e()]),_vm._v(\" \"),_c('tr',[_c('td',[_vm._v(_vm._s(_vm.t('text', 'Ordered list')))]),_vm._v(\" \"),_c('td',[_c('code',[_vm._v(\"1. \"+_vm._s(_vm.t('text', 'First item')))])]),_vm._v(\" \"),(!_vm.isMobileCached)?_c('td',[_c('kbd',[_vm._v(_vm._s(_vm.t('text', 'Ctrl')))]),_vm._v(\"\\n\\t\\t\\t\\t\\t+\\n\\t\\t\\t\\t\\t\"),_c('kbd',[_vm._v(_vm._s(_vm.t('text', 'Shift')))]),_vm._v(\"\\n\\t\\t\\t\\t\\t+\\n\\t\\t\\t\\t\\t\"),_c('kbd',[_vm._v(\"7\")])]):_vm._e()]),_vm._v(\" \"),_c('tr',[_c('td',[_vm._v(_vm._s(_vm.t('text', 'Checklist')))]),_vm._v(\" \"),_c('td',[_c('code',[_vm._v(\"* [] \"+_vm._s(_vm.t('text', 'To-Do item')))])]),_vm._v(\" \"),(!_vm.isMobileCached)?_c('td'):_vm._e()]),_vm._v(\" \"),_c('tr',[_c('td',[_vm._v(_vm._s(_vm.t('text', 'Blockquote')))]),_vm._v(\" \"),_c('td',[_c('code',[_vm._v(\"> \"+_vm._s(_vm.t('text', 'Quoted text')))])]),_vm._v(\" \"),(!_vm.isMobileCached)?_c('td',[_c('kbd',[_vm._v(_vm._s(_vm.t('text', 'Ctrl')))]),_vm._v(\"\\n\\t\\t\\t\\t\\t+\\n\\t\\t\\t\\t\\t\"),_c('kbd',[_vm._v(\">\")])]):_vm._e()]),_vm._v(\" \"),_c('tr',[_c('td',[_vm._v(_vm._s(_vm.t('text', 'Code block')))]),_vm._v(\" \"),_c('td',[_c('code',[_vm._v(\"``` \"+_vm._s(_vm.t('text', 'Some code')))])]),_vm._v(\" \"),(!_vm.isMobileCached)?_c('td'):_vm._e()])])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ActionFormattingHelp.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ActionFormattingHelp.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ActionFormattingHelp.vue?vue&type=template&id=d7e3074a&\"\nimport script from \"./ActionFormattingHelp.vue?vue&type=script&lang=js&\"\nexport * from \"./ActionFormattingHelp.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('NcActionButton',_vm._g({attrs:{\"close-after-click\":\"\",\"data-text-action-entry\":\"formatting-help\"},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('Help')]},proxy:true}])},_vm.$listeners),[_vm._v(\"\\n\\t\"+_vm._s(_vm.t('text', 'Formatting help'))+\"\\n\")])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('NcActionText',{attrs:{\"data-text-action-entry\":\"character-count\"},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('AlphabeticalVariant')]},proxy:true},{key:\"default\",fn:function(){return [_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.countString)+\"\\n\\t\")]},proxy:true}])})\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CharacterCount.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CharacterCount.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CharacterCount.vue?vue&type=template&id=1009fc0d&\"\nimport script from \"./CharacterCount.vue?vue&type=script&lang=js&\"\nexport * from \"./CharacterCount.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('NcModal',{on:{\"close\":function($event){return _vm.$emit('close')}}},[_c('div',{staticClass:\"translate-dialog\"},[_c('h2',[_vm._v(_vm._s(_vm.t('text', 'Translate')))]),_vm._v(\" \"),_c('textarea',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.input),expression:\"input\"}],domProps:{\"value\":(_vm.input)},on:{\"input\":function($event){if($event.target.composing)return;_vm.input=$event.target.value}}}),_vm._v(\" \"),_c('div',{staticClass:\"language-selector\"},[_c('label',{attrs:{\"for\":\"fromLanguage\"}},[_vm._v(_vm._s(_vm.t('text', 'Source language')))]),_vm._v(\" \"),_c('NcSelect',{attrs:{\"input-id\":\"fromLanguage\",\"options\":_vm.fromLanguages,\"append-to-body\":false},model:{value:(_vm.fromLanguage),callback:function ($$v) {_vm.fromLanguage=$$v},expression:\"fromLanguage\"}})],1),_vm._v(\" \"),_c('div',{staticClass:\"language-selector\"},[_c('label',{attrs:{\"for\":\"toLanguage\"}},[_vm._v(_vm._s(_vm.t('text', 'Target language')))]),_vm._v(\" \"),_c('NcSelect',{attrs:{\"input-id\":\"toLanguage\",\"options\":_vm.toLanguages,\"disabled\":!_vm.fromLanguage,\"append-to-body\":false},model:{value:(_vm.toLanguage),callback:function ($$v) {_vm.toLanguage=$$v},expression:\"toLanguage\"}})],1),_vm._v(\" \"),_c('textarea',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.result),expression:\"result\"}],class:{'icon-loading': _vm.loading },attrs:{\"readonly\":\"\"},domProps:{\"value\":(_vm.result)},on:{\"input\":function($event){if($event.target.composing)return;_vm.result=$event.target.value}}}),_vm._v(\" \"),_c('div',{staticClass:\"translate-actions\"},[(_vm.loading)?_c('NcLoadingIcon'):_vm._e(),_vm._v(\" \"),(!_vm.result)?_c('NcButton',{attrs:{\"type\":\"primary\",\"disabled\":_vm.loading},on:{\"click\":_vm.translate}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('text', 'Translate'))+\"\\n\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.result && _vm.content)?_c('NcButton',{attrs:{\"type\":\"secondary\"},on:{\"click\":_vm.contentReplace}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('text', 'Replace'))+\"\\n\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.result)?_c('NcButton',{attrs:{\"type\":\"primary\"},on:{\"click\":_vm.contentInsert}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('text', 'Insert'))+\"\\n\\t\\t\\t\")]):_vm._e()],1)])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n