{"version":3,"sources":["webpack:///./node_modules/@tiptap/extension-task-list/dist/tiptap-extension-task-list.esm.js","webpack:///./node_modules/codemirror/addon/edit/closebrackets.js","webpack:///./node_modules/@chenfengyuan/vue-countdown/dist/vue-countdown.esm.js","webpack:///./node_modules/codemirror/addon/mode/simple.js","webpack:///./node_modules/@tiptap/extension-placeholder/dist/tiptap-extension-placeholder.esm.js","webpack:///./node_modules/@tiptap/extension-task-item/dist/tiptap-extension-task-item.esm.js","webpack:///./node_modules/@tiptap/extension-code-block/dist/tiptap-extension-code-block.esm.js","webpack:///./node_modules/@tiptap/extension-code-block-lowlight/dist/tiptap-extension-code-block-lowlight.esm.js","webpack:///./node_modules/@tiptap/extension-collaboration/node_modules/y-prosemirror/src/plugins/keys.js","webpack:///./node_modules/@tiptap/extension-collaboration/node_modules/y-prosemirror/src/lib.js","webpack:///./node_modules/@tiptap/extension-collaboration/node_modules/y-prosemirror/src/plugins/sync-plugin.js","webpack:///./node_modules/@tiptap/extension-collaboration/node_modules/y-prosemirror/src/plugins/undo-plugin.js","webpack:///./node_modules/@tiptap/extension-collaboration/dist/tiptap-extension-collaboration.esm.js","webpack:///./node_modules/codemirror-editor-vue3/dist/codemirror-editor-vue3.es.js","webpack:///./node_modules/codemirror/addon/merge/merge.js","webpack:///./node_modules/@tiptap/extension-heading/dist/tiptap-extension-heading.esm.js"],"names":["TaskList","create","name","itemTypeName","HTMLAttributes","group","this","options","tag","priority","toggleTaskList","commands","toggleList","editor","mod","CodeMirror","defaults","pairs","closeBefore","triples","explode","Pos","getOption","conf","defineOption","cm","val","old","Init","removeKeyMap","keyMap","state","closeBrackets","ensureBound","addKeyMap","Backspace","handleBackspace","Enter","handleEnter","chars","i","length","ch","charAt","key","handler","handleChar","getConfig","deflt","override","mode","getModeAt","getCursor","Pass","ranges","listSelections","empty","around","charsAround","head","indexOf","cur","replaceRange","line","operation","linesep","lineSeparator","replaceSelection","moveSel","indentLine","dir","newRanges","primary","range","pos","push","anchor","setSelections","contractSelection","sel","inverted","cmpPos","type","identical","opening","curType","next","getRange","test","getTokenTypeAt","prev","isWordChar","stringStartsAfter","left","right","sels","getSelections","replaceSelections","slice","triggerElectric","str","token","getTokenAt","start","MILLISECONDS_SECOND","MILLISECONDS_MINUTE","MILLISECONDS_HOUR","MILLISECONDS_DAY","EVENT_ABORT","EVENT_END","EVENT_PROGRESS","EVENT_START","EVENT_VISIBILITY_CHANGE","index","props","autoStart","Boolean","default","emitEvents","interval","Number","validator","value","now","Function","Date","String","time","transform","emits","counting","endTime","totalMilliseconds","requestId","computed","Math","floor","days","watch","$props","deep","immediate","document","addEventListener","handleVisibilityChange","removeEventListener","pause","methods","$emit","visibilityState","continue","delay","min","init","step","progress","requestAnimationFrame","end","cancelAnimationFrame","hours","minutes","seconds","milliseconds","totalDays","totalHours","totalMinutes","totalSeconds","max","update","$slots","undefined","ensureState","states","hasOwnProperty","Error","toRegex","caret","flags","RegExp","ignoreCase","unicode","source","asToken","apply","replace","result","Rule","data","regex","tokenFunction","config","stream","pending","pend","shift","text","local","match","tok","endToken","localState","m","endScan","exec","current","curState","rule","matches","sol","stack","pop","enterLocalMode","indent","indentation","indentUnit","dedent","j","backUp","join","cmp","a","b","prop","spec","pers","persistent","p","persistentStates","getMode","lState","startState","forceEnd","arr","indentFunction","meta","textAfter","dontIndentStates","rules","scan","dedentIfLineStart","defineSimpleMode","defineMode","simpleMode","states_","hasIndentation","list","orig","copyState","s","innerMode","Placeholder","emptyEditorClass","emptyNodeClass","placeholder","showOnlyWhenEditable","showOnlyCurrent","includeChildren","decorations","doc","selection","active","isEditable","descendants","node","hasAnchor","nodeSize","isEmpty","isLeaf","childCount","classes","decoration","class","inputRegex","TaskItem","nested","defining","checked","keepOnSplit","parseHTML","element","getAttribute","renderHTML","attributes","attrs","shortcuts","splitListItem","liftListItem","Tab","sinkListItem","getPos","listItem","createElement","checkboxWrapper","checkboxStyler","checkbox","content","contentEditable","event","onReadOnlyChecked","target","chain","focus","scrollIntoView","command","tr","position","currentNode","nodeAt","setNodeMarkup","run","Object","entries","forEach","setAttribute","dataset","append","dom","contentDOM","updatedNode","removeAttribute","find","getAttributes","backtickInputRegex","tildeInputRegex","CodeBlock","languageClassPrefix","exitOnTripleEnter","exitOnArrowDown","marks","code","language","_a","classNames","firstElementChild","classList","languages","filter","className","startsWith","map","rendered","preserveWhitespace","setCodeBlock","setNode","toggleCodeBlock","toggleNode","$anchor","isAtStart","parent","textContent","clearNodes","$from","isAtEnd","parentOffset","endsWithDoubleNewline","endsWith","delete","exitCode","ArrowDown","after","nodeAfter","handlePaste","view","clipboardData","isActive","getData","vscode","vscodeData","JSON","parse","replaceSelectionWith","setSelection","near","resolve","from","insertText","setMeta","dispatch","parseNodes","nodes","properties","children","flat","getHighlightNodes","getDecorations","lowlight","defaultLanguage","block","listLanguages","includes","highlight","highlightAuto","to","inline","isFunction","param","LowlightPlugin","every","api","lowlightPlugin","_","transaction","decorationSet","oldState","newState","oldNodeName","$head","newNodeName","oldNodes","newNodes","docChanged","steps","some","mapping","getState","CodeBlockLowlight","extend","call","ySyncPluginKey","yUndoPluginKey","absolutePositionToRelativePosition","n","_first","_length","_item","pNodeSize","get","id","error","constructor","createRelativePosition","item","typeid","tname","client","clock","relativePositionToAbsolutePosition","y","documentType","relPos","decodedPos","deleted","t","contentType","isVisible","snapshot","sv","has","ds","defaultColors","light","dark","getUserColor","colorMapping","colors","user","size","usedColors","set","color","add","random","ySyncPlugin","yXmlFragment","Map","permanentUserData","onFirstRender","rerenderTimeoutId","changedInitialContent","plugin","editable","syncState","prevSnapshot","initargs","binding","isChangeOrigin","pluginState","change","getMeta","assign","eventloop","isDestroyed","restore","_renderSnapshot","_prosemirrorChanged","prosemirrorView","clearTimeout","_forceRerender","findDiffStart","createAndFill","destroy","restoreRelativeSelection","relSel","getRelativeSelection","pmbinding","mux","_observeFunction","_typeChanged","bind","beforeTransactionSelection","beforeAllTransactions","afterAllTransactions","on","observeDeep","_domSelectionInView","hasFocus","environment","_isDomSelectionInView","_root","getSelection","createRange","setStart","anchorNode","anchorOffset","setEnd","focusNode","focusOffset","rects","getClientRects","startContainer","collapsed","selectNodeContents","bounding","getBoundingClientRect","documentElement","bottom","window","innerWidth","clientWidth","top","innerHeight","clientHeight","_tr","fragmentContent","toArray","createNodeFromYElement","schema","transact","pud","dss","computeYChange","getUserByClientId","getUserByDeletedId","events","delType","deleteSet","struct","changed","changedParentTypes","createNodeIfNotExists","_isLocalCursorInView","renderSnapshot","updateYFragment","unobserveDeep","off","el","createChildren","ns","createTextNodesFromYText","textchild","ychange","nodeName","e","deltas","toDelta","delta","markName","mark","insert","createTypeFromTextNodes","marksToAttributes","applyDelta","createTypeFromElementNode","normalizePNodeContent","createTypeFromTextOrElementNode","Array","isObject","equalAttrs","pattrs","yattrs","keys","eq","l","r","pnode","c","res","isText","textNodes","tnode","equalYTextPText","ytext","ptexts","d","object","equalYTypePNode","ytype","matchNodeName","normalizedContent","ychild","mappedIdentity","mapped","pcontent","computeChildEqualityFactor","yChildren","pChildren","pChildCnt","yChildCnt","minCnt","math","foundMappedChild","leftY","leftP","rightY","rightP","equalityFactor","ytextTrans","_start","nAttrs","countable","updateYText","remove","retain","yDomFragment","pNode","yDomAttrs","pAttrs","updateLeft","updateRight","equalityLeft","equalityRight","yDelLen","ins","yElement","undo","undoManager","redo","defaultProtectedNodes","Set","defaultDeleteFilter","protectedNodes","yUndoPlugin","trackedOrigins","ystate","_undoManager","concat","deleteFilter","prevSel","hasUndoOps","undoStack","hasRedoOps","redoStack","stackItem","Collaboration","field","fragment","extensionManager","extensions","extension","console","warn","getXmlFragment","__defProp","defineProperty","__defProps","defineProperties","__getOwnPropDescs","getOwnPropertyDescriptors","__getOwnPropSymbols","getOwnPropertySymbols","__hasOwnProp","prototype","__propIsEnum","propertyIsEnumerable","__defNormalProp","obj","enumerable","configurable","writable","__spreadValues","__spreadProps","CodeMirror$1","_export_sfc","sfc","__vccOpts","_sfc_main$3","cminstance","ready","instance","emit","textarea","_cminstance","initialize","fromTextArea","unwatch","setValue","_hoisted_1$2","_sfc_render$2","_ctx","_cache","$setup","$data","$options","ref","Default","diff_match_patch","DIFF_DELETE","DIFF_INSERT","DIFF_EQUAL","_sfc_main$2","mergeView","MergeView","_hoisted_1$1","_sfc_render$1","logErrorType","Merge","getLinkMarks","linkRegexp","indexObj","keyAndValues","_key","_value","innerHTML","getLogMark","logRegexp","textArr","split","contentArr","offset","textItem","contentItem","cloneNode","innerText","logErrorType2","startRegex","info","warning","_sfc_main$1","renderTextMark","getAllMarks","clear","getValue","linkMarks","_i","markText","posFromIndex","replacedWith","_hoisted_1","_sfc_render","FcLog","componentEventMap","input","cmEvts","getCmEvts","args","emitOptions","DEFAULT_OPTIONS","theme","lineNumbers","smartIndent","scrollToEnd","Promise","then","nowScrollInfo","getScrollInfo","scrollTo","height","useEvents","internalInstance","realCm","merge","getBindEvents","evts","vnode","v","toLowerCase","listenerEvents","currentVal","keepCursorInEnd","tmpEvents","bindEvts","useViewControl","presetRef","containerWidth","containerHeight","refresh","resize","width","cmHeight","setSize","getWrapperElement","reload","_b","_c","history","getDoc","getHistory","setHistory","isStyleChaotic","gutterEl","querySelector","gutterElLeft","style","reviseStyle","timer","setInterval","clearInterval","clearTimer","setTimeout","_sfc_main","globalOptions","border","originalStyle","marker","unseenLines","__props","expose","varArgs","TypeError","index2","arguments","nextSource","nextKey","presetModeName","cmOptions","instanceName","realCminstance","_a2","unseenLineMarkers","_b2","lineInfo","setGutterMarker","gutterMarkers","onCodeChange","newVal","CM_VALUE","handlePresetModeName","setOption","bordered","ref_key","$event","$attrs","onReady","styleInject","css","insertAt","getElementsByTagName","firstChild","insertBefore","appendChild","styleSheet","cssText","createTextNode","svgNS","DiffView","mv","chunk","del","connect","ensureDiff","dv","diffOutOfDate","diff","getDiff","edit","ignoreWhitespace","chunks","getChunks","signal","pane","diffViews","copyObj","readOnly","allowEditingOriginals","trackAlignable","TrackAlignable","lockButton","title","phrase","classLocation","chunkClassLocation","toString","asString","dealigned","needsScrollSync","showDifferences","registerEvents","otherDv","forceUpdate","registerUpdate","setScrollLock","registerScroll","setShowDifferences","updating","debounceChange","marked","updatingFast","svg","copyButtons","clearMarks","updateMarks","alignChunks","makeConnections","syncScroll","setDealign","fast","_cm","swapDoc","toOrig","lockScroll","other","scrollSetBy","scrollSetAt","sInfo","targetPos","botDist","mix","halfScreen","midY","mid","lineAtHeight","chunkBoundariesAround","getOffsets","offOther","ratio","bot","otherInfo","botDistOther","lastLine","heightAtLine","before","action","addClass","rmClass","removeClass","locs","removeLineClass","TextMarker","vp","getViewport","markChanges","lineNr","main","getLineHandle","addLineClass","clipPos","cls","markChunk","bfrom","bto","chunkStart","part","tp","cleanFrom","startOfLineClean","moveOver","cleanTo","endOfLineClean","posMax","posMin","posEq","w","gap","offsetWidth","offsetHeight","vpEdit","vpOrig","outerTop","wrap","sTopEdit","getScrollerElement","sTopOrig","editFrom","editTo","origFrom","origTo","drawConnectorsForChunk","getMatchingOrigLine","editLine","editStart","origStart","alignableFor","isOrig","tracker","firstLine","trackI","alignable","mergeAlignable","origAlignable","setIndex","rI","origI","chunkI","outer","nextR","nextO","rLine","oLine","record","splice","findAlignedLines","force","curOp","linesToAlign","aligners","scroll","alignLines","ln","cmOffset","lines","maxOffset","padAbove","above","elt","minWidth","addLineWidget","mergeSpacer","handleMouseEvents","flip","topLpx","topRpx","tmp","botLpx","botRpx","curveTop","curveBot","createElementNS","copy","editOriginals","topReverse","copyReverse","copyChunk","origEnd","editEnd","revertChunk","dmp","origLeft","origRight","hasLeft","hasRight","panes","self","leftPane","buildGap","editPane","rightPane","wrapElt","collapseIdentical","collapseIdenticalStretches","onResize","resizeInterval","parentNode","body","lock","lockWrap","gapElts","revertButtons","srcElement","unshift","createSVGRect","diff_main","startEdit","startOrig","startOff","cleanFromEdit","cleanFromOrig","endOff","cleanToEdit","cleanToOrig","charCodeAt","last","nInEdit","beforeE","afterE","beforeO","afterO","fromLocal","toLocal","collapseSingle","widget","inclusiveLeft","inclusiveRight","clearOnEnter","explicitlyCleared","collapseStretch","editors","unclearNearChunks","margin","onCollapse","count","childNodes","removeChild","out","at","nl","rightOriginal","leftOriginal","rightChunks","leftChunks","F_WIDGET","F_WIDGET_BELOW","F_MARKER","found","_min","check","hasMarker","lineNo","hasWidgetBelow","hasWidget","nBefore","nAfter","findPrevDiff","findNextDiff","goNearbyDiff","views","setCursor","flag","pred","handle","markedSpans","widgets","widgetFrom","widgetTo","goNextDiff","goPrevDiff","Heading","levels","level","hasLevel","setHeading","toggleHeading","reduce","items"],"mappings":"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","file":"js/group-homework~748942c6.4ac07d1b.js","sourcesContent":["import { Node, mergeAttributes } from '@tiptap/core';\n\nconst TaskList = Node.create({\r\n name: 'taskList',\r\n addOptions() {\r\n return {\r\n itemTypeName: 'taskItem',\r\n HTMLAttributes: {},\r\n };\r\n },\r\n group: 'block list',\r\n content() {\r\n return `${this.options.itemTypeName}+`;\r\n },\r\n parseHTML() {\r\n return [\r\n {\r\n tag: `ul[data-type=\"${this.name}\"]`,\r\n priority: 51,\r\n },\r\n ];\r\n },\r\n renderHTML({ HTMLAttributes }) {\r\n return ['ul', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes, { 'data-type': this.name }), 0];\r\n },\r\n addCommands() {\r\n return {\r\n toggleTaskList: () => ({ commands }) => {\r\n return commands.toggleList(this.name, this.options.itemTypeName);\r\n },\r\n };\r\n },\r\n addKeyboardShortcuts() {\r\n return {\r\n 'Mod-Shift-9': () => this.editor.commands.toggleTaskList(),\r\n };\r\n },\r\n});\n\nexport { TaskList, TaskList as default };\n//# sourceMappingURL=tiptap-extension-task-list.esm.js.map\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/5/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n var defaults = {\n pairs: \"()[]{}''\\\"\\\"\",\n closeBefore: \")]}'\\\":;>\",\n triples: \"\",\n explode: \"[]{}\"\n };\n\n var Pos = CodeMirror.Pos;\n\n CodeMirror.defineOption(\"autoCloseBrackets\", false, function(cm, val, old) {\n if (old && old != CodeMirror.Init) {\n cm.removeKeyMap(keyMap);\n cm.state.closeBrackets = null;\n }\n if (val) {\n ensureBound(getOption(val, \"pairs\"))\n cm.state.closeBrackets = val;\n cm.addKeyMap(keyMap);\n }\n });\n\n function getOption(conf, name) {\n if (name == \"pairs\" && typeof conf == \"string\") return conf;\n if (typeof conf == \"object\" && conf[name] != null) return conf[name];\n return defaults[name];\n }\n\n var keyMap = {Backspace: handleBackspace, Enter: handleEnter};\n function ensureBound(chars) {\n for (var i = 0; i < chars.length; i++) {\n var ch = chars.charAt(i), key = \"'\" + ch + \"'\"\n if (!keyMap[key]) keyMap[key] = handler(ch)\n }\n }\n ensureBound(defaults.pairs + \"`\")\n\n function handler(ch) {\n return function(cm) { return handleChar(cm, ch); };\n }\n\n function getConfig(cm) {\n var deflt = cm.state.closeBrackets;\n if (!deflt || deflt.override) return deflt;\n var mode = cm.getModeAt(cm.getCursor());\n return mode.closeBrackets || deflt;\n }\n\n function handleBackspace(cm) {\n var conf = getConfig(cm);\n if (!conf || cm.getOption(\"disableInput\")) return CodeMirror.Pass;\n\n var pairs = getOption(conf, \"pairs\");\n var ranges = cm.listSelections();\n for (var i = 0; i < ranges.length; i++) {\n if (!ranges[i].empty()) return CodeMirror.Pass;\n var around = charsAround(cm, ranges[i].head);\n if (!around || pairs.indexOf(around) % 2 != 0) return CodeMirror.Pass;\n }\n for (var i = ranges.length - 1; i >= 0; i--) {\n var cur = ranges[i].head;\n cm.replaceRange(\"\", Pos(cur.line, cur.ch - 1), Pos(cur.line, cur.ch + 1), \"+delete\");\n }\n }\n\n function handleEnter(cm) {\n var conf = getConfig(cm);\n var explode = conf && getOption(conf, \"explode\");\n if (!explode || cm.getOption(\"disableInput\")) return CodeMirror.Pass;\n\n var ranges = cm.listSelections();\n for (var i = 0; i < ranges.length; i++) {\n if (!ranges[i].empty()) return CodeMirror.Pass;\n var around = charsAround(cm, ranges[i].head);\n if (!around || explode.indexOf(around) % 2 != 0) return CodeMirror.Pass;\n }\n cm.operation(function() {\n var linesep = cm.lineSeparator() || \"\\n\";\n cm.replaceSelection(linesep + linesep, null);\n moveSel(cm, -1)\n ranges = cm.listSelections();\n for (var i = 0; i < ranges.length; i++) {\n var line = ranges[i].head.line;\n cm.indentLine(line, null, true);\n cm.indentLine(line + 1, null, true);\n }\n });\n }\n\n function moveSel(cm, dir) {\n var newRanges = [], ranges = cm.listSelections(), primary = 0\n for (var i = 0; i < ranges.length; i++) {\n var range = ranges[i]\n if (range.head == cm.getCursor()) primary = i\n var pos = range.head.ch || dir > 0 ? {line: range.head.line, ch: range.head.ch + dir} : {line: range.head.line - 1}\n newRanges.push({anchor: pos, head: pos})\n }\n cm.setSelections(newRanges, primary)\n }\n\n function contractSelection(sel) {\n var inverted = CodeMirror.cmpPos(sel.anchor, sel.head) > 0;\n return {anchor: new Pos(sel.anchor.line, sel.anchor.ch + (inverted ? -1 : 1)),\n head: new Pos(sel.head.line, sel.head.ch + (inverted ? 1 : -1))};\n }\n\n function handleChar(cm, ch) {\n var conf = getConfig(cm);\n if (!conf || cm.getOption(\"disableInput\")) return CodeMirror.Pass;\n\n var pairs = getOption(conf, \"pairs\");\n var pos = pairs.indexOf(ch);\n if (pos == -1) return CodeMirror.Pass;\n\n var closeBefore = getOption(conf,\"closeBefore\");\n\n var triples = getOption(conf, \"triples\");\n\n var identical = pairs.charAt(pos + 1) == ch;\n var ranges = cm.listSelections();\n var opening = pos % 2 == 0;\n\n var type;\n for (var i = 0; i < ranges.length; i++) {\n var range = ranges[i], cur = range.head, curType;\n var next = cm.getRange(cur, Pos(cur.line, cur.ch + 1));\n if (opening && !range.empty()) {\n curType = \"surround\";\n } else if ((identical || !opening) && next == ch) {\n if (identical && stringStartsAfter(cm, cur))\n curType = \"both\";\n else if (triples.indexOf(ch) >= 0 && cm.getRange(cur, Pos(cur.line, cur.ch + 3)) == ch + ch + ch)\n curType = \"skipThree\";\n else\n curType = \"skip\";\n } else if (identical && cur.ch > 1 && triples.indexOf(ch) >= 0 &&\n cm.getRange(Pos(cur.line, cur.ch - 2), cur) == ch + ch) {\n if (cur.ch > 2 && /\\bstring/.test(cm.getTokenTypeAt(Pos(cur.line, cur.ch - 2)))) return CodeMirror.Pass;\n curType = \"addFour\";\n } else if (identical) {\n var prev = cur.ch == 0 ? \" \" : cm.getRange(Pos(cur.line, cur.ch - 1), cur)\n if (!CodeMirror.isWordChar(next) && prev != ch && !CodeMirror.isWordChar(prev)) curType = \"both\";\n else return CodeMirror.Pass;\n } else if (opening && (next.length === 0 || /\\s/.test(next) || closeBefore.indexOf(next) > -1)) {\n curType = \"both\";\n } else {\n return CodeMirror.Pass;\n }\n if (!type) type = curType;\n else if (type != curType) return CodeMirror.Pass;\n }\n\n var left = pos % 2 ? pairs.charAt(pos - 1) : ch;\n var right = pos % 2 ? ch : pairs.charAt(pos + 1);\n cm.operation(function() {\n if (type == \"skip\") {\n moveSel(cm, 1)\n } else if (type == \"skipThree\") {\n moveSel(cm, 3)\n } else if (type == \"surround\") {\n var sels = cm.getSelections();\n for (var i = 0; i < sels.length; i++)\n sels[i] = left + sels[i] + right;\n cm.replaceSelections(sels, \"around\");\n sels = cm.listSelections().slice();\n for (var i = 0; i < sels.length; i++)\n sels[i] = contractSelection(sels[i]);\n cm.setSelections(sels);\n } else if (type == \"both\") {\n cm.replaceSelection(left + right, null);\n cm.triggerElectric(left + right);\n moveSel(cm, -1)\n } else if (type == \"addFour\") {\n cm.replaceSelection(left + left + left + left, \"before\");\n moveSel(cm, 1)\n }\n });\n }\n\n function charsAround(cm, pos) {\n var str = cm.getRange(Pos(pos.line, pos.ch - 1),\n Pos(pos.line, pos.ch + 1));\n return str.length == 2 ? str : null;\n }\n\n function stringStartsAfter(cm, pos) {\n var token = cm.getTokenAt(Pos(pos.line, pos.ch + 1))\n return /\\bstring/.test(token.type) && token.start == pos.ch &&\n (pos.ch == 0 || !/\\bstring/.test(cm.getTokenTypeAt(pos)))\n }\n});\n","/*! vue-countdown v2.0.0 | (c) 2018-present Chen Fengyuan | MIT */\nimport { defineComponent, h } from 'vue';\n\nconst MILLISECONDS_SECOND = 1000;\r\nconst MILLISECONDS_MINUTE = 60 * MILLISECONDS_SECOND;\r\nconst MILLISECONDS_HOUR = 60 * MILLISECONDS_MINUTE;\r\nconst MILLISECONDS_DAY = 24 * MILLISECONDS_HOUR;\r\nconst EVENT_ABORT = 'abort';\r\nconst EVENT_END = 'end';\r\nconst EVENT_PROGRESS = 'progress';\r\nconst EVENT_START = 'start';\r\nconst EVENT_VISIBILITY_CHANGE = 'visibilitychange';\r\nvar index = defineComponent({\r\n name: 'VueCountdown',\r\n props: {\r\n /**\r\n * Starts the countdown automatically when initialized.\r\n */\r\n autoStart: {\r\n type: Boolean,\r\n default: true,\r\n },\r\n /**\r\n * Emits the countdown events.\r\n */\r\n emitEvents: {\r\n type: Boolean,\r\n default: true,\r\n },\r\n /**\r\n * The interval time (in milliseconds) of the countdown progress.\r\n */\r\n interval: {\r\n type: Number,\r\n default: 1000,\r\n validator: (value) => value >= 0,\r\n },\r\n /**\r\n * Generate the current time of a specific time zone.\r\n */\r\n now: {\r\n type: Function,\r\n default: () => Date.now(),\r\n },\r\n /**\r\n * The tag name of the component's root element.\r\n */\r\n tag: {\r\n type: String,\r\n default: 'span',\r\n },\r\n /**\r\n * The time (in milliseconds) to count down from.\r\n */\r\n time: {\r\n type: Number,\r\n default: 0,\r\n validator: (value) => value >= 0,\r\n },\r\n /**\r\n * Transforms the output props before render.\r\n */\r\n transform: {\r\n type: Function,\r\n default: (props) => props,\r\n },\r\n },\r\n emits: [\r\n EVENT_ABORT,\r\n EVENT_END,\r\n EVENT_PROGRESS,\r\n EVENT_START,\r\n ],\r\n data() {\r\n return {\r\n /**\r\n * It is counting down.\r\n * @type {boolean}\r\n */\r\n counting: false,\r\n /**\r\n * The absolute end time.\r\n * @type {number}\r\n */\r\n endTime: 0,\r\n /**\r\n * The remaining milliseconds.\r\n * @type {number}\r\n */\r\n totalMilliseconds: 0,\r\n /**\r\n * The request ID of the requestAnimationFrame.\r\n * @type {number}\r\n */\r\n requestId: 0,\r\n };\r\n },\r\n computed: {\r\n /**\r\n * Remaining days.\r\n * @returns {number} The computed value.\r\n */\r\n days() {\r\n return Math.floor(this.totalMilliseconds / MILLISECONDS_DAY);\r\n },\r\n /**\r\n * Remaining hours.\r\n * @returns {number} The computed value.\r\n */\r\n hours() {\r\n return Math.floor((this.totalMilliseconds % MILLISECONDS_DAY) / MILLISECONDS_HOUR);\r\n },\r\n /**\r\n * Remaining minutes.\r\n * @returns {number} The computed value.\r\n */\r\n minutes() {\r\n return Math.floor((this.totalMilliseconds % MILLISECONDS_HOUR) / MILLISECONDS_MINUTE);\r\n },\r\n /**\r\n * Remaining seconds.\r\n * @returns {number} The computed value.\r\n */\r\n seconds() {\r\n return Math.floor((this.totalMilliseconds % MILLISECONDS_MINUTE) / MILLISECONDS_SECOND);\r\n },\r\n /**\r\n * Remaining milliseconds.\r\n * @returns {number} The computed value.\r\n */\r\n milliseconds() {\r\n return Math.floor(this.totalMilliseconds % MILLISECONDS_SECOND);\r\n },\r\n /**\r\n * Total remaining days.\r\n * @returns {number} The computed value.\r\n */\r\n totalDays() {\r\n return this.days;\r\n },\r\n /**\r\n * Total remaining hours.\r\n * @returns {number} The computed value.\r\n */\r\n totalHours() {\r\n return Math.floor(this.totalMilliseconds / MILLISECONDS_HOUR);\r\n },\r\n /**\r\n * Total remaining minutes.\r\n * @returns {number} The computed value.\r\n */\r\n totalMinutes() {\r\n return Math.floor(this.totalMilliseconds / MILLISECONDS_MINUTE);\r\n },\r\n /**\r\n * Total remaining seconds.\r\n * @returns {number} The computed value.\r\n */\r\n totalSeconds() {\r\n return Math.floor(this.totalMilliseconds / MILLISECONDS_SECOND);\r\n },\r\n },\r\n watch: {\r\n $props: {\r\n deep: true,\r\n immediate: true,\r\n /**\r\n * Update the countdown when props changed.\r\n */\r\n handler() {\r\n this.totalMilliseconds = this.time;\r\n this.endTime = this.now() + this.time;\r\n if (this.autoStart) {\r\n this.start();\r\n }\r\n },\r\n },\r\n },\r\n mounted() {\r\n document.addEventListener(EVENT_VISIBILITY_CHANGE, this.handleVisibilityChange);\r\n },\r\n beforeUnmount() {\r\n document.removeEventListener(EVENT_VISIBILITY_CHANGE, this.handleVisibilityChange);\r\n this.pause();\r\n },\r\n methods: {\r\n /**\r\n * Starts to countdown.\r\n * @public\r\n * @emits Countdown#start\r\n */\r\n start() {\r\n if (this.counting) {\r\n return;\r\n }\r\n this.counting = true;\r\n if (this.emitEvents) {\r\n /**\r\n * Countdown start event.\r\n * @event Countdown#start\r\n */\r\n this.$emit(EVENT_START);\r\n }\r\n if (document.visibilityState === 'visible') {\r\n this.continue();\r\n }\r\n },\r\n /**\r\n * Continues the countdown.\r\n * @private\r\n */\r\n continue() {\r\n if (!this.counting) {\r\n return;\r\n }\r\n const delay = Math.min(this.totalMilliseconds, this.interval);\r\n if (delay > 0) {\r\n let init;\r\n let prev;\r\n const step = (now) => {\r\n if (!init) {\r\n init = now;\r\n }\r\n if (!prev) {\r\n prev = now;\r\n }\r\n const range = now - init;\r\n if (range >= delay\r\n // Avoid losing time about one second per minute (now - prev ≈ 16ms) (#43)\r\n || range + ((now - prev) / 2) >= delay) {\r\n this.progress();\r\n }\r\n else {\r\n this.requestId = requestAnimationFrame(step);\r\n }\r\n prev = now;\r\n };\r\n this.requestId = requestAnimationFrame(step);\r\n }\r\n else {\r\n this.end();\r\n }\r\n },\r\n /**\r\n * Pauses the countdown.\r\n * @private\r\n */\r\n pause() {\r\n cancelAnimationFrame(this.requestId);\r\n },\r\n /**\r\n * Progresses to countdown.\r\n * @private\r\n * @emits Countdown#progress\r\n */\r\n progress() {\r\n if (!this.counting) {\r\n return;\r\n }\r\n this.totalMilliseconds -= this.interval;\r\n if (this.emitEvents && this.totalMilliseconds > 0) {\r\n /**\r\n * Countdown progress event.\r\n * @event Countdown#progress\r\n */\r\n this.$emit(EVENT_PROGRESS, {\r\n days: this.days,\r\n hours: this.hours,\r\n minutes: this.minutes,\r\n seconds: this.seconds,\r\n milliseconds: this.milliseconds,\r\n totalDays: this.totalDays,\r\n totalHours: this.totalHours,\r\n totalMinutes: this.totalMinutes,\r\n totalSeconds: this.totalSeconds,\r\n totalMilliseconds: this.totalMilliseconds,\r\n });\r\n }\r\n this.continue();\r\n },\r\n /**\r\n * Aborts the countdown.\r\n * @public\r\n * @emits Countdown#abort\r\n */\r\n abort() {\r\n if (!this.counting) {\r\n return;\r\n }\r\n this.pause();\r\n this.counting = false;\r\n if (this.emitEvents) {\r\n /**\r\n * Countdown abort event.\r\n * @event Countdown#abort\r\n */\r\n this.$emit(EVENT_ABORT);\r\n }\r\n },\r\n /**\r\n * Ends the countdown.\r\n * @public\r\n * @emits Countdown#end\r\n */\r\n end() {\r\n if (!this.counting) {\r\n return;\r\n }\r\n this.pause();\r\n this.totalMilliseconds = 0;\r\n this.counting = false;\r\n if (this.emitEvents) {\r\n /**\r\n * Countdown end event.\r\n * @event Countdown#end\r\n */\r\n this.$emit(EVENT_END);\r\n }\r\n },\r\n /**\r\n * Updates the count.\r\n * @private\r\n */\r\n update() {\r\n if (this.counting) {\r\n this.totalMilliseconds = Math.max(0, this.endTime - this.now());\r\n }\r\n },\r\n /**\r\n * visibility change event handler.\r\n * @private\r\n */\r\n handleVisibilityChange() {\r\n switch (document.visibilityState) {\r\n case 'visible':\r\n this.update();\r\n this.continue();\r\n break;\r\n case 'hidden':\r\n this.pause();\r\n break;\r\n }\r\n },\r\n },\r\n render() {\r\n return h(this.tag, this.$slots.default ? [\r\n this.$slots.default(this.transform({\r\n days: this.days,\r\n hours: this.hours,\r\n minutes: this.minutes,\r\n seconds: this.seconds,\r\n milliseconds: this.milliseconds,\r\n totalDays: this.totalDays,\r\n totalHours: this.totalHours,\r\n totalMinutes: this.totalMinutes,\r\n totalSeconds: this.totalSeconds,\r\n totalMilliseconds: this.totalMilliseconds,\r\n })),\r\n ] : undefined);\r\n },\r\n});\n\nexport { index as default };\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/5/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n \"use strict\";\n\n CodeMirror.defineSimpleMode = function(name, states) {\n CodeMirror.defineMode(name, function(config) {\n return CodeMirror.simpleMode(config, states);\n });\n };\n\n CodeMirror.simpleMode = function(config, states) {\n ensureState(states, \"start\");\n var states_ = {}, meta = states.meta || {}, hasIndentation = false;\n for (var state in states) if (state != meta && states.hasOwnProperty(state)) {\n var list = states_[state] = [], orig = states[state];\n for (var i = 0; i < orig.length; i++) {\n var data = orig[i];\n list.push(new Rule(data, states));\n if (data.indent || data.dedent) hasIndentation = true;\n }\n }\n var mode = {\n startState: function() {\n return {state: \"start\", pending: null,\n local: null, localState: null,\n indent: hasIndentation ? [] : null};\n },\n copyState: function(state) {\n var s = {state: state.state, pending: state.pending,\n local: state.local, localState: null,\n indent: state.indent && state.indent.slice(0)};\n if (state.localState)\n s.localState = CodeMirror.copyState(state.local.mode, state.localState);\n if (state.stack)\n s.stack = state.stack.slice(0);\n for (var pers = state.persistentStates; pers; pers = pers.next)\n s.persistentStates = {mode: pers.mode,\n spec: pers.spec,\n state: pers.state == state.localState ? s.localState : CodeMirror.copyState(pers.mode, pers.state),\n next: s.persistentStates};\n return s;\n },\n token: tokenFunction(states_, config),\n innerMode: function(state) { return state.local && {mode: state.local.mode, state: state.localState}; },\n indent: indentFunction(states_, meta)\n };\n if (meta) for (var prop in meta) if (meta.hasOwnProperty(prop))\n mode[prop] = meta[prop];\n return mode;\n };\n\n function ensureState(states, name) {\n if (!states.hasOwnProperty(name))\n throw new Error(\"Undefined state \" + name + \" in simple mode\");\n }\n\n function toRegex(val, caret) {\n if (!val) return /(?:)/;\n var flags = \"\";\n if (val instanceof RegExp) {\n if (val.ignoreCase) flags = \"i\";\n if (val.unicode) flags += \"u\"\n val = val.source;\n } else {\n val = String(val);\n }\n return new RegExp((caret === false ? \"\" : \"^\") + \"(?:\" + val + \")\", flags);\n }\n\n function asToken(val) {\n if (!val) return null;\n if (val.apply) return val\n if (typeof val == \"string\") return val.replace(/\\./g, \" \");\n var result = [];\n for (var i = 0; i < val.length; i++)\n result.push(val[i] && val[i].replace(/\\./g, \" \"));\n return result;\n }\n\n function Rule(data, states) {\n if (data.next || data.push) ensureState(states, data.next || data.push);\n this.regex = toRegex(data.regex);\n this.token = asToken(data.token);\n this.data = data;\n }\n\n function tokenFunction(states, config) {\n return function(stream, state) {\n if (state.pending) {\n var pend = state.pending.shift();\n if (state.pending.length == 0) state.pending = null;\n stream.pos += pend.text.length;\n return pend.token;\n }\n\n if (state.local) {\n if (state.local.end && stream.match(state.local.end)) {\n var tok = state.local.endToken || null;\n state.local = state.localState = null;\n return tok;\n } else {\n var tok = state.local.mode.token(stream, state.localState), m;\n if (state.local.endScan && (m = state.local.endScan.exec(stream.current())))\n stream.pos = stream.start + m.index;\n return tok;\n }\n }\n\n var curState = states[state.state];\n for (var i = 0; i < curState.length; i++) {\n var rule = curState[i];\n var matches = (!rule.data.sol || stream.sol()) && stream.match(rule.regex);\n if (matches) {\n if (rule.data.next) {\n state.state = rule.data.next;\n } else if (rule.data.push) {\n (state.stack || (state.stack = [])).push(state.state);\n state.state = rule.data.push;\n } else if (rule.data.pop && state.stack && state.stack.length) {\n state.state = state.stack.pop();\n }\n\n if (rule.data.mode)\n enterLocalMode(config, state, rule.data.mode, rule.token);\n if (rule.data.indent)\n state.indent.push(stream.indentation() + config.indentUnit);\n if (rule.data.dedent)\n state.indent.pop();\n var token = rule.token\n if (token && token.apply) token = token(matches)\n if (matches.length > 2 && rule.token && typeof rule.token != \"string\") {\n for (var j = 2; j < matches.length; j++)\n if (matches[j])\n (state.pending || (state.pending = [])).push({text: matches[j], token: rule.token[j - 1]});\n stream.backUp(matches[0].length - (matches[1] ? matches[1].length : 0));\n return token[0];\n } else if (token && token.join) {\n return token[0];\n } else {\n return token;\n }\n }\n }\n stream.next();\n return null;\n };\n }\n\n function cmp(a, b) {\n if (a === b) return true;\n if (!a || typeof a != \"object\" || !b || typeof b != \"object\") return false;\n var props = 0;\n for (var prop in a) if (a.hasOwnProperty(prop)) {\n if (!b.hasOwnProperty(prop) || !cmp(a[prop], b[prop])) return false;\n props++;\n }\n for (var prop in b) if (b.hasOwnProperty(prop)) props--;\n return props == 0;\n }\n\n function enterLocalMode(config, state, spec, token) {\n var pers;\n if (spec.persistent) for (var p = state.persistentStates; p && !pers; p = p.next)\n if (spec.spec ? cmp(spec.spec, p.spec) : spec.mode == p.mode) pers = p;\n var mode = pers ? pers.mode : spec.mode || CodeMirror.getMode(config, spec.spec);\n var lState = pers ? pers.state : CodeMirror.startState(mode);\n if (spec.persistent && !pers)\n state.persistentStates = {mode: mode, spec: spec.spec, state: lState, next: state.persistentStates};\n\n state.localState = lState;\n state.local = {mode: mode,\n end: spec.end && toRegex(spec.end),\n endScan: spec.end && spec.forceEnd !== false && toRegex(spec.end, false),\n endToken: token && token.join ? token[token.length - 1] : token};\n }\n\n function indexOf(val, arr) {\n for (var i = 0; i < arr.length; i++) if (arr[i] === val) return true;\n }\n\n function indentFunction(states, meta) {\n return function(state, textAfter, line) {\n if (state.local && state.local.mode.indent)\n return state.local.mode.indent(state.localState, textAfter, line);\n if (state.indent == null || state.local || meta.dontIndentStates && indexOf(state.state, meta.dontIndentStates) > -1)\n return CodeMirror.Pass;\n\n var pos = state.indent.length - 1, rules = states[state.state];\n scan: for (;;) {\n for (var i = 0; i < rules.length; i++) {\n var rule = rules[i];\n if (rule.data.dedent && rule.data.dedentIfLineStart !== false) {\n var m = rule.regex.exec(textAfter);\n if (m && m[0]) {\n pos--;\n if (rule.next || rule.push) rules = states[rule.next || rule.push];\n textAfter = textAfter.slice(m[0].length);\n continue scan;\n }\n }\n }\n break;\n }\n return pos < 0 ? 0 : state.indent[pos];\n };\n }\n});\n","import { Extension } from '@tiptap/core';\nimport { Plugin } from 'prosemirror-state';\nimport { Decoration, DecorationSet } from 'prosemirror-view';\n\nconst Placeholder = Extension.create({\r\n name: 'placeholder',\r\n addOptions() {\r\n return {\r\n emptyEditorClass: 'is-editor-empty',\r\n emptyNodeClass: 'is-empty',\r\n placeholder: 'Write something …',\r\n showOnlyWhenEditable: true,\r\n showOnlyCurrent: true,\r\n includeChildren: false,\r\n };\r\n },\r\n addProseMirrorPlugins() {\r\n return [\r\n new Plugin({\r\n props: {\r\n decorations: ({ doc, selection }) => {\r\n const active = this.editor.isEditable || !this.options.showOnlyWhenEditable;\r\n const { anchor } = selection;\r\n const decorations = [];\r\n if (!active) {\r\n return null;\r\n }\r\n doc.descendants((node, pos) => {\r\n const hasAnchor = anchor >= pos && anchor <= (pos + node.nodeSize);\r\n const isEmpty = !node.isLeaf && !node.childCount;\r\n if ((hasAnchor || !this.options.showOnlyCurrent) && isEmpty) {\r\n const classes = [this.options.emptyNodeClass];\r\n if (this.editor.isEmpty) {\r\n classes.push(this.options.emptyEditorClass);\r\n }\r\n const decoration = Decoration.node(pos, pos + node.nodeSize, {\r\n class: classes.join(' '),\r\n 'data-placeholder': typeof this.options.placeholder === 'function'\r\n ? this.options.placeholder({\r\n editor: this.editor,\r\n node,\r\n pos,\r\n hasAnchor,\r\n })\r\n : this.options.placeholder,\r\n });\r\n decorations.push(decoration);\r\n }\r\n return this.options.includeChildren;\r\n });\r\n return DecorationSet.create(doc, decorations);\r\n },\r\n },\r\n }),\r\n ];\r\n },\r\n});\n\nexport { Placeholder, Placeholder as default };\n//# sourceMappingURL=tiptap-extension-placeholder.esm.js.map\n","import { Node, mergeAttributes, wrappingInputRule } from '@tiptap/core';\n\nconst inputRegex = /^\\s*(\\[([( |x])?\\])\\s$/;\r\nconst TaskItem = Node.create({\r\n name: 'taskItem',\r\n addOptions() {\r\n return {\r\n nested: false,\r\n HTMLAttributes: {},\r\n };\r\n },\r\n content() {\r\n return this.options.nested ? 'paragraph block*' : 'paragraph+';\r\n },\r\n defining: true,\r\n addAttributes() {\r\n return {\r\n checked: {\r\n default: false,\r\n keepOnSplit: false,\r\n parseHTML: element => element.getAttribute('data-checked') === 'true',\r\n renderHTML: attributes => ({\r\n 'data-checked': attributes.checked,\r\n }),\r\n },\r\n };\r\n },\r\n parseHTML() {\r\n return [\r\n {\r\n tag: `li[data-type=\"${this.name}\"]`,\r\n priority: 51,\r\n },\r\n ];\r\n },\r\n renderHTML({ node, HTMLAttributes }) {\r\n return [\r\n 'li',\r\n mergeAttributes(this.options.HTMLAttributes, HTMLAttributes, {\r\n 'data-type': this.name,\r\n }),\r\n [\r\n 'label',\r\n [\r\n 'input',\r\n {\r\n type: 'checkbox',\r\n checked: node.attrs.checked ? 'checked' : null,\r\n },\r\n ],\r\n ['span'],\r\n ],\r\n ['div', 0],\r\n ];\r\n },\r\n addKeyboardShortcuts() {\r\n const shortcuts = {\r\n Enter: () => this.editor.commands.splitListItem(this.name),\r\n 'Shift-Tab': () => this.editor.commands.liftListItem(this.name),\r\n };\r\n if (!this.options.nested) {\r\n return shortcuts;\r\n }\r\n return {\r\n ...shortcuts,\r\n Tab: () => this.editor.commands.sinkListItem(this.name),\r\n };\r\n },\r\n addNodeView() {\r\n return ({ node, HTMLAttributes, getPos, editor, }) => {\r\n const listItem = document.createElement('li');\r\n const checkboxWrapper = document.createElement('label');\r\n const checkboxStyler = document.createElement('span');\r\n const checkbox = document.createElement('input');\r\n const content = document.createElement('div');\r\n checkboxWrapper.contentEditable = 'false';\r\n checkbox.type = 'checkbox';\r\n checkbox.addEventListener('change', event => {\r\n // if the editor isn’t editable and we don't have a handler for\r\n // readonly checks we have to undo the latest change\r\n if (!editor.isEditable && !this.options.onReadOnlyChecked) {\r\n checkbox.checked = !checkbox.checked;\r\n return;\r\n }\r\n const { checked } = event.target;\r\n if (editor.isEditable && typeof getPos === 'function') {\r\n editor\r\n .chain()\r\n .focus(undefined, { scrollIntoView: false })\r\n .command(({ tr }) => {\r\n const position = getPos();\r\n const currentNode = tr.doc.nodeAt(position);\r\n tr.setNodeMarkup(position, undefined, {\r\n ...currentNode === null || currentNode === void 0 ? void 0 : currentNode.attrs,\r\n checked,\r\n });\r\n return true;\r\n })\r\n .run();\r\n }\r\n if (!editor.isEditable && this.options.onReadOnlyChecked) {\r\n // Reset state if onReadOnlyChecked returns false\r\n if (!this.options.onReadOnlyChecked(node, checked)) {\r\n checkbox.checked = !checkbox.checked;\r\n }\r\n }\r\n });\r\n Object.entries(this.options.HTMLAttributes).forEach(([key, value]) => {\r\n listItem.setAttribute(key, value);\r\n });\r\n listItem.dataset.checked = node.attrs.checked;\r\n if (node.attrs.checked) {\r\n checkbox.setAttribute('checked', 'checked');\r\n }\r\n checkboxWrapper.append(checkbox, checkboxStyler);\r\n listItem.append(checkboxWrapper, content);\r\n Object.entries(HTMLAttributes).forEach(([key, value]) => {\r\n listItem.setAttribute(key, value);\r\n });\r\n return {\r\n dom: listItem,\r\n contentDOM: content,\r\n update: updatedNode => {\r\n if (updatedNode.type !== this.type) {\r\n return false;\r\n }\r\n listItem.dataset.checked = updatedNode.attrs.checked;\r\n if (updatedNode.attrs.checked) {\r\n checkbox.setAttribute('checked', 'checked');\r\n }\r\n else {\r\n checkbox.removeAttribute('checked');\r\n }\r\n return true;\r\n },\r\n };\r\n };\r\n },\r\n addInputRules() {\r\n return [\r\n wrappingInputRule({\r\n find: inputRegex,\r\n type: this.type,\r\n getAttributes: match => ({\r\n checked: match[match.length - 1] === 'x',\r\n }),\r\n }),\r\n ];\r\n },\r\n});\n\nexport { TaskItem, TaskItem as default, inputRegex };\n//# sourceMappingURL=tiptap-extension-task-item.esm.js.map\n","import { Node, mergeAttributes, textblockTypeInputRule } from '@tiptap/core';\nimport { Plugin, PluginKey, TextSelection } from 'prosemirror-state';\n\nconst backtickInputRegex = /^```([a-z]+)?[\\s\\n]$/;\r\nconst tildeInputRegex = /^~~~([a-z]+)?[\\s\\n]$/;\r\nconst CodeBlock = Node.create({\r\n name: 'codeBlock',\r\n addOptions() {\r\n return {\r\n languageClassPrefix: 'language-',\r\n exitOnTripleEnter: true,\r\n exitOnArrowDown: true,\r\n HTMLAttributes: {},\r\n };\r\n },\r\n content: 'text*',\r\n marks: '',\r\n group: 'block',\r\n code: true,\r\n defining: true,\r\n addAttributes() {\r\n return {\r\n language: {\r\n default: null,\r\n parseHTML: element => {\r\n var _a;\r\n const { languageClassPrefix } = this.options;\r\n const classNames = [...((_a = element.firstElementChild) === null || _a === void 0 ? void 0 : _a.classList) || []];\r\n const languages = classNames\r\n .filter(className => className.startsWith(languageClassPrefix))\r\n .map(className => className.replace(languageClassPrefix, ''));\r\n const language = languages[0];\r\n if (!language) {\r\n return null;\r\n }\r\n return language;\r\n },\r\n rendered: false,\r\n },\r\n };\r\n },\r\n parseHTML() {\r\n return [\r\n {\r\n tag: 'pre',\r\n preserveWhitespace: 'full',\r\n },\r\n ];\r\n },\r\n renderHTML({ node, HTMLAttributes }) {\r\n return [\r\n 'pre',\r\n mergeAttributes(this.options.HTMLAttributes, HTMLAttributes),\r\n [\r\n 'code',\r\n {\r\n class: node.attrs.language\r\n ? this.options.languageClassPrefix + node.attrs.language\r\n : null,\r\n },\r\n 0,\r\n ],\r\n ];\r\n },\r\n addCommands() {\r\n return {\r\n setCodeBlock: attributes => ({ commands }) => {\r\n return commands.setNode(this.name, attributes);\r\n },\r\n toggleCodeBlock: attributes => ({ commands }) => {\r\n return commands.toggleNode(this.name, 'paragraph', attributes);\r\n },\r\n };\r\n },\r\n addKeyboardShortcuts() {\r\n return {\r\n 'Mod-Alt-c': () => this.editor.commands.toggleCodeBlock(),\r\n // remove code block when at start of document or code block is empty\r\n Backspace: () => {\r\n const { empty, $anchor } = this.editor.state.selection;\r\n const isAtStart = $anchor.pos === 1;\r\n if (!empty || $anchor.parent.type.name !== this.name) {\r\n return false;\r\n }\r\n if (isAtStart || !$anchor.parent.textContent.length) {\r\n return this.editor.commands.clearNodes();\r\n }\r\n return false;\r\n },\r\n // exit node on triple enter\r\n Enter: ({ editor }) => {\r\n if (!this.options.exitOnTripleEnter) {\r\n return false;\r\n }\r\n const { state } = editor;\r\n const { selection } = state;\r\n const { $from, empty } = selection;\r\n if (!empty || $from.parent.type !== this.type) {\r\n return false;\r\n }\r\n const isAtEnd = $from.parentOffset === $from.parent.nodeSize - 2;\r\n const endsWithDoubleNewline = $from.parent.textContent.endsWith('\\n\\n');\r\n if (!isAtEnd || !endsWithDoubleNewline) {\r\n return false;\r\n }\r\n return editor\r\n .chain()\r\n .command(({ tr }) => {\r\n tr.delete($from.pos - 2, $from.pos);\r\n return true;\r\n })\r\n .exitCode()\r\n .run();\r\n },\r\n // exit node on arrow down\r\n ArrowDown: ({ editor }) => {\r\n if (!this.options.exitOnArrowDown) {\r\n return false;\r\n }\r\n const { state } = editor;\r\n const { selection, doc } = state;\r\n const { $from, empty } = selection;\r\n if (!empty || $from.parent.type !== this.type) {\r\n return false;\r\n }\r\n const isAtEnd = $from.parentOffset === $from.parent.nodeSize - 2;\r\n if (!isAtEnd) {\r\n return false;\r\n }\r\n const after = $from.after();\r\n if (after === undefined) {\r\n return false;\r\n }\r\n const nodeAfter = doc.nodeAt(after);\r\n if (nodeAfter) {\r\n return false;\r\n }\r\n return editor.commands.exitCode();\r\n },\r\n };\r\n },\r\n addInputRules() {\r\n return [\r\n textblockTypeInputRule({\r\n find: backtickInputRegex,\r\n type: this.type,\r\n getAttributes: match => ({\r\n language: match[1],\r\n }),\r\n }),\r\n textblockTypeInputRule({\r\n find: tildeInputRegex,\r\n type: this.type,\r\n getAttributes: match => ({\r\n language: match[1],\r\n }),\r\n }),\r\n ];\r\n },\r\n addProseMirrorPlugins() {\r\n return [\r\n // this plugin creates a code block for pasted content from VS Code\r\n // we can also detect the copied code language\r\n new Plugin({\r\n key: new PluginKey('codeBlockVSCodeHandler'),\r\n props: {\r\n handlePaste: (view, event) => {\r\n if (!event.clipboardData) {\r\n return false;\r\n }\r\n // don’t create a new code block within code blocks\r\n if (this.editor.isActive(this.type.name)) {\r\n return false;\r\n }\r\n const text = event.clipboardData.getData('text/plain');\r\n const vscode = event.clipboardData.getData('vscode-editor-data');\r\n const vscodeData = vscode\r\n ? JSON.parse(vscode)\r\n : undefined;\r\n const language = vscodeData === null || vscodeData === void 0 ? void 0 : vscodeData.mode;\r\n if (!text || !language) {\r\n return false;\r\n }\r\n const { tr } = view.state;\r\n // create an empty code block\r\n tr.replaceSelectionWith(this.type.create({ language }));\r\n // put cursor inside the newly created code block\r\n tr.setSelection(TextSelection.near(tr.doc.resolve(Math.max(0, tr.selection.from - 2))));\r\n // add text to code block\r\n // strip carriage return chars from text pasted as code\r\n // see: https://github.com/ProseMirror/prosemirror-view/commit/a50a6bcceb4ce52ac8fcc6162488d8875613aacd\r\n tr.insertText(text.replace(/\\r\\n?/g, '\\n'));\r\n // store meta information\r\n // this is useful for other plugins that depends on the paste event\r\n // like the paste rule plugin\r\n tr.setMeta('paste', true);\r\n view.dispatch(tr);\r\n return true;\r\n },\r\n },\r\n }),\r\n ];\r\n },\r\n});\n\nexport { CodeBlock, backtickInputRegex, CodeBlock as default, tildeInputRegex };\n//# sourceMappingURL=tiptap-extension-code-block.esm.js.map\n","import CodeBlock from '@tiptap/extension-code-block';\nimport { findChildren } from '@tiptap/core';\nimport { Plugin, PluginKey } from 'prosemirror-state';\nimport { DecorationSet, Decoration } from 'prosemirror-view';\n\nfunction parseNodes(nodes, className = []) {\r\n return nodes\r\n .map(node => {\r\n const classes = [\r\n ...className,\r\n ...node.properties\r\n ? node.properties.className\r\n : [],\r\n ];\r\n if (node.children) {\r\n return parseNodes(node.children, classes);\r\n }\r\n return {\r\n text: node.value,\r\n classes,\r\n };\r\n })\r\n .flat();\r\n}\r\nfunction getHighlightNodes(result) {\r\n // `.value` for lowlight v1, `.children` for lowlight v2\r\n return result.value || result.children || [];\r\n}\r\nfunction getDecorations({ doc, name, lowlight, defaultLanguage, }) {\r\n const decorations = [];\r\n findChildren(doc, node => node.type.name === name)\r\n .forEach(block => {\r\n let from = block.pos + 1;\r\n const language = block.node.attrs.language || defaultLanguage;\r\n const languages = lowlight.listLanguages();\r\n const nodes = language && languages.includes(language)\r\n ? getHighlightNodes(lowlight.highlight(language, block.node.textContent))\r\n : getHighlightNodes(lowlight.highlightAuto(block.node.textContent));\r\n parseNodes(nodes).forEach(node => {\r\n const to = from + node.text.length;\r\n if (node.classes.length) {\r\n const decoration = Decoration.inline(from, to, {\r\n class: node.classes.join(' '),\r\n });\r\n decorations.push(decoration);\r\n }\r\n from = to;\r\n });\r\n });\r\n return DecorationSet.create(doc, decorations);\r\n}\r\nfunction isFunction(param) {\r\n return typeof param === 'function';\r\n}\r\nfunction LowlightPlugin({ name, lowlight, defaultLanguage }) {\r\n if (!['highlight', 'highlightAuto', 'listLanguages'].every(api => isFunction(lowlight[api]))) {\r\n throw Error('You should provide an instance of lowlight to use the code-block-lowlight extension');\r\n }\r\n const lowlightPlugin = new Plugin({\r\n key: new PluginKey('lowlight'),\r\n state: {\r\n init: (_, { doc }) => getDecorations({\r\n doc,\r\n name,\r\n lowlight,\r\n defaultLanguage,\r\n }),\r\n apply: (transaction, decorationSet, oldState, newState) => {\r\n const oldNodeName = oldState.selection.$head.parent.type.name;\r\n const newNodeName = newState.selection.$head.parent.type.name;\r\n const oldNodes = findChildren(oldState.doc, node => node.type.name === name);\r\n const newNodes = findChildren(newState.doc, node => node.type.name === name);\r\n if (transaction.docChanged\r\n // Apply decorations if:\r\n && (\r\n // selection includes named node,\r\n [oldNodeName, newNodeName].includes(name)\r\n // OR transaction adds/removes named node,\r\n || newNodes.length !== oldNodes.length\r\n // OR transaction has changes that completely encapsulte a node\r\n // (for example, a transaction that affects the entire document).\r\n // Such transactions can happen during collab syncing via y-prosemirror, for example.\r\n || transaction.steps.some(step => {\r\n // @ts-ignore\r\n return step.from !== undefined\r\n // @ts-ignore\r\n && step.to !== undefined\r\n && oldNodes.some(node => {\r\n // @ts-ignore\r\n return node.pos >= step.from\r\n // @ts-ignore\r\n && node.pos + node.node.nodeSize <= step.to;\r\n });\r\n }))) {\r\n return getDecorations({\r\n doc: transaction.doc,\r\n name,\r\n lowlight,\r\n defaultLanguage,\r\n });\r\n }\r\n return decorationSet.map(transaction.mapping, transaction.doc);\r\n },\r\n },\r\n props: {\r\n decorations(state) {\r\n return lowlightPlugin.getState(state);\r\n },\r\n },\r\n });\r\n return lowlightPlugin;\r\n}\n\nconst CodeBlockLowlight = CodeBlock.extend({\r\n addOptions() {\r\n var _a;\r\n return {\r\n ...(_a = this.parent) === null || _a === void 0 ? void 0 : _a.call(this),\r\n lowlight: {},\r\n defaultLanguage: null,\r\n };\r\n },\r\n addProseMirrorPlugins() {\r\n var _a;\r\n return [\r\n ...((_a = this.parent) === null || _a === void 0 ? void 0 : _a.call(this)) || [],\r\n LowlightPlugin({\r\n name: this.name,\r\n lowlight: this.options.lowlight,\r\n defaultLanguage: this.options.defaultLanguage,\r\n }),\r\n ];\r\n },\r\n});\n\nexport { CodeBlockLowlight, CodeBlockLowlight as default };\n//# sourceMappingURL=tiptap-extension-code-block-lowlight.esm.js.map\n","\nimport { PluginKey } from 'prosemirror-state' // eslint-disable-line\n\n/**\n * The unique prosemirror plugin key for syncPlugin\n *\n * @public\n */\nexport const ySyncPluginKey = new PluginKey('y-sync')\n\n/**\n * The unique prosemirror plugin key for undoPlugin\n *\n * @public\n */\nexport const yUndoPluginKey = new PluginKey('y-undo')\n\n/**\n * The unique prosemirror plugin key for cursorPlugin\n *\n * @public\n */\nexport const yCursorPluginKey = new PluginKey('yjs-cursor')\n","import { updateYFragment } from './plugins/sync-plugin.js' // eslint-disable-line\nimport { ySyncPluginKey } from './plugins/keys.js'\nimport * as Y from 'yjs'\nimport { EditorView } from 'prosemirror-view' // eslint-disable-line\nimport { Node, Schema } from 'prosemirror-model' // eslint-disable-line\nimport * as error from 'lib0/error'\nimport * as map from 'lib0/map'\nimport * as eventloop from 'lib0/eventloop'\n\n/**\n * Either a node if type is YXmlElement or an Array of text nodes if YXmlText\n * @typedef {Map>} ProsemirrorMapping\n */\n\n/**\n * Is null if no timeout is in progress.\n * Is defined if a timeout is in progress.\n * Maps from view\n * @type {Map>|null}\n */\nlet viewsToUpdate = null\n\nconst updateMetas = () => {\n const ups = /** @type {Map>} */ (viewsToUpdate)\n viewsToUpdate = null\n ups.forEach((metas, view) => {\n const tr = view.state.tr\n const syncState = ySyncPluginKey.getState(view.state)\n if (syncState && syncState.binding && !syncState.binding.isDestroyed) {\n metas.forEach((val, key) => {\n tr.setMeta(key, val)\n })\n view.dispatch(tr)\n }\n })\n}\n\nexport const setMeta = (view, key, value) => {\n if (!viewsToUpdate) {\n viewsToUpdate = new Map()\n eventloop.timeout(0, updateMetas)\n }\n map.setIfUndefined(viewsToUpdate, view, map.create).set(key, value)\n}\n\n/**\n * Transforms a Prosemirror based absolute position to a Yjs Cursor (relative position in the Yjs model).\n *\n * @param {number} pos\n * @param {Y.XmlFragment} type\n * @param {ProsemirrorMapping} mapping\n * @return {any} relative position\n */\nexport const absolutePositionToRelativePosition = (pos, type, mapping) => {\n if (pos === 0) {\n return Y.createRelativePositionFromTypeIndex(type, 0)\n }\n /**\n * @type {any}\n */\n let n = type._first === null ? null : /** @type {Y.ContentType} */ (type._first.content).type\n while (n !== null && type !== n) {\n if (n instanceof Y.XmlText) {\n if (n._length >= pos) {\n return Y.createRelativePositionFromTypeIndex(n, pos)\n } else {\n pos -= n._length\n }\n if (n._item !== null && n._item.next !== null) {\n n = /** @type {Y.ContentType} */ (n._item.next.content).type\n } else {\n do {\n n = n._item === null ? null : n._item.parent\n pos--\n } while (n !== type && n !== null && n._item !== null && n._item.next === null)\n if (n !== null && n !== type) {\n // @ts-gnore we know that n.next !== null because of above loop conditition\n n = n._item === null ? null : /** @type {Y.ContentType} */ (/** @type Y.Item */ (n._item.next).content).type\n }\n }\n } else {\n const pNodeSize = /** @type {any} */ (mapping.get(n) || { nodeSize: 0 }).nodeSize\n if (n._first !== null && pos < pNodeSize) {\n n = /** @type {Y.ContentType} */ (n._first.content).type\n pos--\n } else {\n if (pos === 1 && n._length === 0 && pNodeSize > 1) {\n // edge case, should end in this paragraph\n return new Y.RelativePosition(n._item === null ? null : n._item.id, n._item === null ? Y.findRootTypeKey(n) : null, null)\n }\n pos -= pNodeSize\n if (n._item !== null && n._item.next !== null) {\n n = /** @type {Y.ContentType} */ (n._item.next.content).type\n } else {\n if (pos === 0) {\n // set to end of n.parent\n n = n._item === null ? n : n._item.parent\n return new Y.RelativePosition(n._item === null ? null : n._item.id, n._item === null ? Y.findRootTypeKey(n) : null, null)\n }\n do {\n n = /** @type {Y.Item} */ (n._item).parent\n pos--\n } while (n !== type && /** @type {Y.Item} */ (n._item).next === null)\n // if n is null at this point, we have an unexpected case\n if (n !== type) {\n // We know that n._item.next is defined because of above loop condition\n n = /** @type {Y.ContentType} */ (/** @type {Y.Item} */ (/** @type {Y.Item} */ (n._item).next).content).type\n }\n }\n }\n }\n if (n === null) {\n throw error.unexpectedCase()\n }\n if (pos === 0 && n.constructor !== Y.XmlText && n !== type) { // TODO: set to <= 0\n return createRelativePosition(n._item.parent, n._item)\n }\n }\n return Y.createRelativePositionFromTypeIndex(type, type._length)\n}\n\nconst createRelativePosition = (type, item) => {\n let typeid = null\n let tname = null\n if (type._item === null) {\n tname = Y.findRootTypeKey(type)\n } else {\n typeid = Y.createID(type._item.id.client, type._item.id.clock)\n }\n return new Y.RelativePosition(typeid, tname, item.id)\n}\n\n/**\n * @param {Y.Doc} y\n * @param {Y.XmlFragment} documentType Top level type that is bound to pView\n * @param {any} relPos Encoded Yjs based relative position\n * @param {ProsemirrorMapping} mapping\n * @return {null|number}\n */\nexport const relativePositionToAbsolutePosition = (y, documentType, relPos, mapping) => {\n const decodedPos = Y.createAbsolutePositionFromRelativePosition(relPos, y)\n if (decodedPos === null || (decodedPos.type !== documentType && !Y.isParentOf(documentType, decodedPos.type._item))) {\n return null\n }\n let type = decodedPos.type\n let pos = 0\n if (type.constructor === Y.XmlText) {\n pos = decodedPos.index\n } else if (type._item === null || !type._item.deleted) {\n let n = type._first\n let i = 0\n while (i < type._length && i < decodedPos.index && n !== null) {\n if (!n.deleted) {\n const t = /** @type {Y.ContentType} */ (n.content).type\n i++\n if (t instanceof Y.XmlText) {\n pos += t._length\n } else {\n pos += /** @type {any} */ (mapping.get(t)).nodeSize\n }\n }\n n = /** @type {Y.Item} */ (n.right)\n }\n pos += 1 // increase because we go out of n\n }\n while (type !== documentType && type._item !== null) {\n // @ts-ignore\n const parent = type._item.parent\n // @ts-ignore\n if (parent._item === null || !parent._item.deleted) {\n pos += 1 // the start tag\n let n = /** @type {Y.AbstractType} */ (parent)._first\n // now iterate until we found type\n while (n !== null) {\n const contentType = /** @type {Y.ContentType} */ (n.content).type\n if (contentType === type) {\n break\n }\n if (!n.deleted) {\n if (contentType instanceof Y.XmlText) {\n pos += contentType._length\n } else {\n pos += /** @type {any} */ (mapping.get(contentType)).nodeSize\n }\n }\n n = n.right\n }\n }\n type = /** @type {Y.AbstractType} */ (parent)\n }\n return pos - 1 // we don't count the most outer tag, because it is a fragment\n}\n\n/**\n * Utility method to convert a Prosemirror Doc Node into a Y.Doc.\n *\n * This can be used when importing existing content to Y.Doc for the first time,\n * note that this should not be used to rehydrate a Y.Doc from a database once\n * collaboration has begun as all history will be lost\n *\n * @param {Node} doc\n * @param {string} xmlFragment\n * @return {Y.Doc}\n */\nexport function prosemirrorToYDoc (doc, xmlFragment = 'prosemirror') {\n const ydoc = new Y.Doc()\n const type = /** @type {Y.XmlFragment} */ (ydoc.get(xmlFragment, Y.XmlFragment))\n if (!type.doc) {\n return ydoc\n }\n\n prosemirrorToYXmlFragment(doc, type)\n return type.doc\n}\n\n/**\n * Utility method to update an empty Y.XmlFragment with content from a Prosemirror Doc Node.\n *\n * This can be used when importing existing content to Y.Doc for the first time,\n * note that this should not be used to rehydrate a Y.Doc from a database once\n * collaboration has begun as all history will be lost\n *\n * Note: The Y.XmlFragment does not need to be part of a Y.Doc document at the time that this\n * method is called, but it must be added before any other operations are performed on it.\n *\n * @param {Node} doc prosemirror document.\n * @param {Y.XmlFragment} [xmlFragment] If supplied, an xml fragment to be\n * populated from the prosemirror state; otherwise a new XmlFragment will be created.\n * @return {Y.XmlFragment}\n */\nexport function prosemirrorToYXmlFragment (doc, xmlFragment) {\n const type = xmlFragment || new Y.XmlFragment()\n const ydoc = type.doc ? type.doc : { transact: (transaction) => transaction(undefined) }\n updateYFragment(ydoc, type, doc, new Map())\n return type\n}\n\n/**\n * Utility method to convert Prosemirror compatible JSON into a Y.Doc.\n *\n * This can be used when importing existing content to Y.Doc for the first time,\n * note that this should not be used to rehydrate a Y.Doc from a database once\n * collaboration has begun as all history will be lost\n *\n * @param {Schema} schema\n * @param {any} state\n * @param {string} xmlFragment\n * @return {Y.Doc}\n */\nexport function prosemirrorJSONToYDoc (schema, state, xmlFragment = 'prosemirror') {\n const doc = Node.fromJSON(schema, state)\n return prosemirrorToYDoc(doc, xmlFragment)\n}\n\n/**\n * Utility method to convert Prosemirror compatible JSON to a Y.XmlFragment\n *\n * This can be used when importing existing content to Y.Doc for the first time,\n * note that this should not be used to rehydrate a Y.Doc from a database once\n * collaboration has begun as all history will be lost\n *\n * @param {Schema} schema\n * @param {any} state\n * @param {Y.XmlFragment} [xmlFragment] If supplied, an xml fragment to be\n * populated from the prosemirror state; otherwise a new XmlFragment will be created.\n * @return {Y.XmlFragment}\n */\nexport function prosemirrorJSONToYXmlFragment (schema, state, xmlFragment) {\n const doc = Node.fromJSON(schema, state)\n return prosemirrorToYXmlFragment(doc, xmlFragment)\n}\n\n/**\n * Utility method to convert a Y.Doc to a Prosemirror Doc node.\n *\n * @param {Schema} schema\n * @param {Y.Doc} ydoc\n * @return {Node}\n */\nexport function yDocToProsemirror (schema, ydoc) {\n const state = yDocToProsemirrorJSON(ydoc)\n return Node.fromJSON(schema, state)\n}\n\n/**\n * Utility method to convert a Y.XmlFragment to a Prosemirror Doc node.\n *\n * @param {Schema} schema\n * @param {Y.XmlFragment} xmlFragment\n * @return {Node}\n */\nexport function yXmlFragmentToProsemirror (schema, xmlFragment) {\n const state = yXmlFragmentToProsemirrorJSON(xmlFragment)\n return Node.fromJSON(schema, state)\n}\n\n/**\n * Utility method to convert a Y.Doc to Prosemirror compatible JSON.\n *\n * @param {Y.Doc} ydoc\n * @param {string} xmlFragment\n * @return {Record}\n */\nexport function yDocToProsemirrorJSON (\n ydoc,\n xmlFragment = 'prosemirror'\n) {\n return yXmlFragmentToProsemirrorJSON(ydoc.getXmlFragment(xmlFragment))\n}\n\n/**\n * Utility method to convert a Y.Doc to Prosemirror compatible JSON.\n *\n * @param {Y.XmlFragment} xmlFragment The fragment, which must be part of a Y.Doc.\n * @return {Record}\n */\nexport function yXmlFragmentToProsemirrorJSON (xmlFragment) {\n const items = xmlFragment.toArray()\n\n function serialize (item) {\n /**\n * @type {Object} NodeObject\n * @property {string} NodeObject.type\n * @property {Record=} NodeObject.attrs\n * @property {Array=} NodeObject.content\n */\n let response\n\n // TODO: Must be a better way to detect text nodes than this\n if (!item.nodeName) {\n const delta = item.toDelta()\n response = delta.map((d) => {\n const text = {\n type: 'text',\n text: d.insert\n }\n\n if (d.attributes) {\n text.marks = Object.keys(d.attributes).map((type) => {\n const attrs = d.attributes[type]\n const mark = {\n type\n }\n\n if (Object.keys(attrs)) {\n mark.attrs = attrs\n }\n\n return mark\n })\n }\n return text\n })\n } else {\n response = {\n type: item.nodeName\n }\n\n const attrs = item.getAttributes()\n if (Object.keys(attrs).length) {\n response.attrs = attrs\n }\n\n const children = item.toArray()\n if (children.length) {\n response.content = children.map(serialize).flat()\n }\n }\n\n return response\n }\n\n return {\n type: 'doc',\n content: items.map(serialize)\n }\n}\n","/**\n * @module bindings/prosemirror\n */\n\nimport { createMutex } from 'lib0/mutex'\nimport * as PModel from 'prosemirror-model'\nimport { Plugin, TextSelection } from 'prosemirror-state' // eslint-disable-line\nimport * as math from 'lib0/math'\nimport * as object from 'lib0/object'\nimport * as set from 'lib0/set'\nimport { simpleDiff } from 'lib0/diff'\nimport * as error from 'lib0/error'\nimport { ySyncPluginKey } from './keys.js'\nimport * as Y from 'yjs'\nimport { absolutePositionToRelativePosition, relativePositionToAbsolutePosition } from '../lib.js'\nimport * as random from 'lib0/random'\nimport * as environment from 'lib0/environment'\nimport * as dom from 'lib0/dom'\nimport * as eventloop from 'lib0/eventloop'\n\n/**\n * @param {Y.Item} item\n * @param {Y.Snapshot} [snapshot]\n */\nexport const isVisible = (item, snapshot) => snapshot === undefined ? !item.deleted : (snapshot.sv.has(item.id.client) && /** @type {number} */ (snapshot.sv.get(item.id.client)) > item.id.clock && !Y.isDeleted(snapshot.ds, item.id))\n\n/**\n * Either a node if type is YXmlElement or an Array of text nodes if YXmlText\n * @typedef {Map, PModel.Node | Array>} ProsemirrorMapping\n */\n\n/**\n * @typedef {Object} ColorDef\n * @property {string} ColorDef.light\n * @property {string} ColorDef.dark\n */\n\n/**\n * @typedef {Object} YSyncOpts\n * @property {Array} [YSyncOpts.colors]\n * @property {Map} [YSyncOpts.colorMapping]\n * @property {Y.PermanentUserData|null} [YSyncOpts.permanentUserData]\n * @property {function} [YSyncOpts.onFirstRender] Fired when the content from Yjs is initially rendered to ProseMirror\n */\n\n/**\n * @type {Array}\n */\nconst defaultColors = [{ light: '#ecd44433', dark: '#ecd444' }]\n\n/**\n * @param {Map} colorMapping\n * @param {Array} colors\n * @param {string} user\n * @return {ColorDef}\n */\nconst getUserColor = (colorMapping, colors, user) => {\n // @todo do not hit the same color twice if possible\n if (!colorMapping.has(user)) {\n if (colorMapping.size < colors.length) {\n const usedColors = set.create()\n colorMapping.forEach(color => usedColors.add(color))\n colors = colors.filter(color => !usedColors.has(color))\n }\n colorMapping.set(user, random.oneOf(colors))\n }\n return /** @type {ColorDef} */ (colorMapping.get(user))\n}\n\n/**\n * This plugin listens to changes in prosemirror view and keeps yXmlState and view in sync.\n *\n * This plugin also keeps references to the type and the shared document so other plugins can access it.\n * @param {Y.XmlFragment} yXmlFragment\n * @param {YSyncOpts} opts\n * @return {any} Returns a prosemirror plugin that binds to this type\n */\nexport const ySyncPlugin = (yXmlFragment, {\n colors = defaultColors,\n colorMapping = new Map(),\n permanentUserData = null,\n onFirstRender = () => {}\n} = {}) => {\n let changedInitialContent = false\n let rerenderTimeoutId\n const plugin = new Plugin({\n props: {\n editable: (state) => {\n const syncState = ySyncPluginKey.getState(state)\n return syncState.snapshot == null && syncState.prevSnapshot == null\n }\n },\n key: ySyncPluginKey,\n state: {\n init: (initargs, state) => {\n return {\n type: yXmlFragment,\n doc: yXmlFragment.doc,\n binding: null,\n snapshot: null,\n prevSnapshot: null,\n isChangeOrigin: false,\n colors,\n colorMapping,\n permanentUserData\n }\n },\n apply: (tr, pluginState) => {\n const change = tr.getMeta(ySyncPluginKey)\n if (change !== undefined) {\n pluginState = Object.assign({}, pluginState)\n for (const key in change) {\n pluginState[key] = change[key]\n }\n }\n // always set isChangeOrigin. If undefined, this is not change origin.\n pluginState.isChangeOrigin = change !== undefined && !!change.isChangeOrigin\n if (pluginState.binding !== null) {\n if (change !== undefined && (change.snapshot != null || change.prevSnapshot != null)) {\n // snapshot changed, rerender next\n eventloop.timeout(0, () => {\n if (pluginState.binding == null || pluginState.binding.isDestroyed) {\n return\n }\n if (change.restore == null) {\n pluginState.binding._renderSnapshot(change.snapshot, change.prevSnapshot, pluginState)\n } else {\n pluginState.binding._renderSnapshot(change.snapshot, change.snapshot, pluginState)\n // reset to current prosemirror state\n delete pluginState.restore\n delete pluginState.snapshot\n delete pluginState.prevSnapshot\n pluginState.binding._prosemirrorChanged(pluginState.binding.prosemirrorView.state.doc)\n }\n })\n }\n }\n return pluginState\n }\n },\n view: view => {\n const binding = new ProsemirrorBinding(yXmlFragment, view)\n if (rerenderTimeoutId != null) {\n clearTimeout(rerenderTimeoutId)\n }\n // Make sure this is called in a separate context\n rerenderTimeoutId = eventloop.timeout(0, () => {\n binding._forceRerender()\n view.dispatch(view.state.tr.setMeta(ySyncPluginKey, { binding }))\n onFirstRender()\n })\n return {\n update: () => {\n const pluginState = plugin.getState(view.state)\n if (pluginState.snapshot == null && pluginState.prevSnapshot == null) {\n if (changedInitialContent || view.state.doc.content.findDiffStart(view.state.doc.type.createAndFill().content) !== null) {\n changedInitialContent = true\n binding._prosemirrorChanged(view.state.doc)\n }\n }\n },\n destroy: () => {\n clearTimeout(rerenderTimeoutId)\n binding.destroy()\n }\n }\n }\n })\n return plugin\n}\n\n/**\n * @param {any} tr\n * @param {any} relSel\n * @param {ProsemirrorBinding} binding\n */\nconst restoreRelativeSelection = (tr, relSel, binding) => {\n if (relSel !== null && relSel.anchor !== null && relSel.head !== null) {\n const anchor = relativePositionToAbsolutePosition(binding.doc, binding.type, relSel.anchor, binding.mapping)\n const head = relativePositionToAbsolutePosition(binding.doc, binding.type, relSel.head, binding.mapping)\n if (anchor !== null && head !== null) {\n tr = tr.setSelection(TextSelection.create(tr.doc, anchor, head))\n }\n }\n}\n\nexport const getRelativeSelection = (pmbinding, state) => ({\n anchor: absolutePositionToRelativePosition(state.selection.anchor, pmbinding.type, pmbinding.mapping),\n head: absolutePositionToRelativePosition(state.selection.head, pmbinding.type, pmbinding.mapping)\n})\n\n/**\n * Binding for prosemirror.\n *\n * @protected\n */\nexport class ProsemirrorBinding {\n /**\n * @param {Y.XmlFragment} yXmlFragment The bind source\n * @param {any} prosemirrorView The target binding\n */\n constructor (yXmlFragment, prosemirrorView) {\n this.type = yXmlFragment\n this.prosemirrorView = prosemirrorView\n this.mux = createMutex()\n this.isDestroyed = false\n /**\n * @type {ProsemirrorMapping}\n */\n this.mapping = new Map()\n this._observeFunction = this._typeChanged.bind(this)\n /**\n * @type {Y.Doc}\n */\n // @ts-ignore\n this.doc = yXmlFragment.doc\n /**\n * current selection as relative positions in the Yjs model\n */\n this.beforeTransactionSelection = null\n this.beforeAllTransactions = () => {\n if (this.beforeTransactionSelection === null) {\n this.beforeTransactionSelection = getRelativeSelection(this, prosemirrorView.state)\n }\n }\n this.afterAllTransactions = () => {\n this.beforeTransactionSelection = null\n }\n\n this.doc.on('beforeAllTransactions', this.beforeAllTransactions)\n this.doc.on('afterAllTransactions', this.afterAllTransactions)\n yXmlFragment.observeDeep(this._observeFunction)\n\n this._domSelectionInView = null\n }\n\n /**\n * Create a transaction for changing the prosemirror state.\n *\n * @returns\n */\n get _tr () {\n return this.prosemirrorView.state.tr.setMeta('addToHistory', false)\n }\n\n _isLocalCursorInView () {\n if (!this.prosemirrorView.hasFocus()) return false\n if (environment.isBrowser && this._domSelectionInView === null) {\n // Calculate the domSelectionInView and clear by next tick after all events are finished\n eventloop.timeout(0, () => {\n this._domSelectionInView = null\n })\n this._domSelectionInView = this._isDomSelectionInView()\n }\n return this._domSelectionInView\n }\n\n _isDomSelectionInView () {\n const selection = this.prosemirrorView._root.getSelection()\n\n const range = this.prosemirrorView._root.createRange()\n range.setStart(selection.anchorNode, selection.anchorOffset)\n range.setEnd(selection.focusNode, selection.focusOffset)\n\n // This is a workaround for an edgecase where getBoundingClientRect will\n // return zero values if the selection is collapsed at the start of a newline\n // see reference here: https://stackoverflow.com/a/59780954\n const rects = range.getClientRects()\n if (rects.length === 0) {\n // probably buggy newline behavior, explicitly select the node contents\n if (range.startContainer && range.collapsed) {\n range.selectNodeContents(range.startContainer)\n }\n }\n\n const bounding = range.getBoundingClientRect()\n const documentElement = dom.doc.documentElement\n\n return bounding.bottom >= 0 && bounding.right >= 0 &&\n bounding.left <= (window.innerWidth || documentElement.clientWidth || 0) &&\n bounding.top <= (window.innerHeight || documentElement.clientHeight || 0)\n }\n\n renderSnapshot (snapshot, prevSnapshot) {\n if (!prevSnapshot) {\n prevSnapshot = Y.createSnapshot(Y.createDeleteSet(), new Map())\n }\n this.prosemirrorView.dispatch(this._tr.setMeta(ySyncPluginKey, { snapshot, prevSnapshot }))\n }\n\n unrenderSnapshot () {\n this.mapping = new Map()\n this.mux(() => {\n const fragmentContent = this.type.toArray().map(t => createNodeFromYElement(/** @type {Y.XmlElement} */ (t), this.prosemirrorView.state.schema, this.mapping)).filter(n => n !== null)\n // @ts-ignore\n const tr = this._tr.replace(0, this.prosemirrorView.state.doc.content.size, new PModel.Slice(new PModel.Fragment(fragmentContent), 0, 0))\n tr.setMeta(ySyncPluginKey, { snapshot: null, prevSnapshot: null })\n this.prosemirrorView.dispatch(tr)\n })\n }\n\n _forceRerender () {\n this.mapping = new Map()\n this.mux(() => {\n const fragmentContent = this.type.toArray().map(t => createNodeFromYElement(/** @type {Y.XmlElement} */ (t), this.prosemirrorView.state.schema, this.mapping)).filter(n => n !== null)\n // @ts-ignore\n const tr = this._tr.replace(0, this.prosemirrorView.state.doc.content.size, new PModel.Slice(new PModel.Fragment(fragmentContent), 0, 0))\n this.prosemirrorView.dispatch(tr.setMeta(ySyncPluginKey, { isChangeOrigin: true }))\n })\n }\n\n /**\n * @param {Y.Snapshot} snapshot\n * @param {Y.Snapshot} prevSnapshot\n * @param {Object} pluginState\n */\n _renderSnapshot (snapshot, prevSnapshot, pluginState) {\n if (!snapshot) {\n snapshot = Y.snapshot(this.doc)\n }\n // clear mapping because we are going to rerender\n this.mapping = new Map()\n this.mux(() => {\n this.doc.transact(transaction => {\n // before rendering, we are going to sanitize ops and split deleted ops\n // if they were deleted by seperate users.\n const pud = pluginState.permanentUserData\n if (pud) {\n pud.dss.forEach(ds => {\n Y.iterateDeletedStructs(transaction, ds, item => {})\n })\n }\n const computeYChange = (type, id) => {\n const user = type === 'added' ? pud.getUserByClientId(id.client) : pud.getUserByDeletedId(id)\n return {\n user,\n type,\n color: getUserColor(pluginState.colorMapping, pluginState.colors, user)\n }\n }\n // Create document fragment and render\n const fragmentContent = Y.typeListToArraySnapshot(this.type, new Y.Snapshot(prevSnapshot.ds, snapshot.sv)).map(t => {\n if (!t._item.deleted || isVisible(t._item, snapshot) || isVisible(t._item, prevSnapshot)) {\n return createNodeFromYElement(t, this.prosemirrorView.state.schema, new Map(), snapshot, prevSnapshot, computeYChange)\n } else {\n // No need to render elements that are not visible by either snapshot.\n // If a client adds and deletes content in the same snapshot the element is not visible by either snapshot.\n return null\n }\n }).filter(n => n !== null)\n // @ts-ignore\n const tr = this._tr.replace(0, this.prosemirrorView.state.doc.content.size, new PModel.Slice(new PModel.Fragment(fragmentContent), 0, 0))\n this.prosemirrorView.dispatch(tr.setMeta(ySyncPluginKey, { isChangeOrigin: true }))\n }, ySyncPluginKey)\n })\n }\n\n /**\n * @param {Array>} events\n * @param {Y.Transaction} transaction\n */\n _typeChanged (events, transaction) {\n const syncState = ySyncPluginKey.getState(this.prosemirrorView.state)\n if (events.length === 0 || syncState.snapshot != null || syncState.prevSnapshot != null) {\n // drop out if snapshot is active\n this.renderSnapshot(syncState.snapshot, syncState.prevSnapshot)\n return\n }\n this.mux(() => {\n /**\n * @param {any} _\n * @param {Y.AbstractType} type\n */\n const delType = (_, type) => this.mapping.delete(type)\n Y.iterateDeletedStructs(transaction, transaction.deleteSet, struct => struct.constructor === Y.Item && this.mapping.delete(/** @type {Y.ContentType} */ (/** @type {Y.Item} */ (struct).content).type))\n transaction.changed.forEach(delType)\n transaction.changedParentTypes.forEach(delType)\n const fragmentContent = this.type.toArray().map(t => createNodeIfNotExists(/** @type {Y.XmlElement | Y.XmlHook} */ (t), this.prosemirrorView.state.schema, this.mapping)).filter(n => n !== null)\n // @ts-ignore\n let tr = this._tr.replace(0, this.prosemirrorView.state.doc.content.size, new PModel.Slice(new PModel.Fragment(fragmentContent), 0, 0))\n restoreRelativeSelection(tr, this.beforeTransactionSelection, this)\n tr = tr.setMeta(ySyncPluginKey, { isChangeOrigin: true })\n if (this.beforeTransactionSelection !== null && this._isLocalCursorInView()) {\n tr.scrollIntoView()\n }\n this.prosemirrorView.dispatch(tr)\n })\n }\n\n _prosemirrorChanged (doc) {\n this.mux(() => {\n this.doc.transact(() => {\n updateYFragment(this.doc, this.type, doc, this.mapping)\n this.beforeTransactionSelection = getRelativeSelection(this, this.prosemirrorView.state)\n }, ySyncPluginKey)\n })\n }\n\n destroy () {\n this.isDestroyed = true\n this.type.unobserveDeep(this._observeFunction)\n this.doc.off('beforeAllTransactions', this.beforeAllTransactions)\n this.doc.off('afterAllTransactions', this.afterAllTransactions)\n }\n}\n\n/**\n * @private\n * @param {Y.XmlElement | Y.XmlHook} el\n * @param {PModel.Schema} schema\n * @param {ProsemirrorMapping} mapping\n * @param {Y.Snapshot} [snapshot]\n * @param {Y.Snapshot} [prevSnapshot]\n * @param {function('removed' | 'added', Y.ID):any} [computeYChange]\n * @return {PModel.Node | null}\n */\nconst createNodeIfNotExists = (el, schema, mapping, snapshot, prevSnapshot, computeYChange) => {\n const node = /** @type {PModel.Node} */ (mapping.get(el))\n if (node === undefined) {\n if (el instanceof Y.XmlElement) {\n return createNodeFromYElement(el, schema, mapping, snapshot, prevSnapshot, computeYChange)\n } else {\n throw error.methodUnimplemented() // we are currently not handling hooks\n }\n }\n return node\n}\n\n/**\n * @private\n * @param {Y.XmlElement} el\n * @param {any} schema\n * @param {ProsemirrorMapping} mapping\n * @param {Y.Snapshot} [snapshot]\n * @param {Y.Snapshot} [prevSnapshot]\n * @param {function('removed' | 'added', Y.ID):any} [computeYChange]\n * @return {PModel.Node | null} Returns node if node could be created. Otherwise it deletes the yjs type and returns null\n */\nconst createNodeFromYElement = (el, schema, mapping, snapshot, prevSnapshot, computeYChange) => {\n const children = []\n const createChildren = type => {\n if (type.constructor === Y.XmlElement) {\n const n = createNodeIfNotExists(type, schema, mapping, snapshot, prevSnapshot, computeYChange)\n if (n !== null) {\n children.push(n)\n }\n } else {\n const ns = createTextNodesFromYText(type, schema, mapping, snapshot, prevSnapshot, computeYChange)\n if (ns !== null) {\n ns.forEach(textchild => {\n if (textchild !== null) {\n children.push(textchild)\n }\n })\n }\n }\n }\n if (snapshot === undefined || prevSnapshot === undefined) {\n el.toArray().forEach(createChildren)\n } else {\n Y.typeListToArraySnapshot(el, new Y.Snapshot(prevSnapshot.ds, snapshot.sv)).forEach(createChildren)\n }\n try {\n const attrs = el.getAttributes(snapshot)\n if (snapshot !== undefined) {\n if (!isVisible(/** @type {Y.Item} */ (el._item), snapshot)) {\n attrs.ychange = computeYChange ? computeYChange('removed', /** @type {Y.Item} */ (el._item).id) : { type: 'removed' }\n } else if (!isVisible(/** @type {Y.Item} */ (el._item), prevSnapshot)) {\n attrs.ychange = computeYChange ? computeYChange('added', /** @type {Y.Item} */ (el._item).id) : { type: 'added' }\n }\n }\n const node = schema.node(el.nodeName, attrs, children)\n mapping.set(el, node)\n return node\n } catch (e) {\n // an error occured while creating the node. This is probably a result of a concurrent action.\n /** @type {Y.Doc} */ (el.doc).transact(transaction => {\n /** @type {Y.Item} */ (el._item).delete(transaction)\n }, ySyncPluginKey)\n mapping.delete(el)\n return null\n }\n}\n\n/**\n * @private\n * @param {Y.XmlText} text\n * @param {any} schema\n * @param {ProsemirrorMapping} mapping\n * @param {Y.Snapshot} [snapshot]\n * @param {Y.Snapshot} [prevSnapshot]\n * @param {function('removed' | 'added', Y.ID):any} [computeYChange]\n * @return {Array|null}\n */\nconst createTextNodesFromYText = (text, schema, mapping, snapshot, prevSnapshot, computeYChange) => {\n const nodes = []\n const deltas = text.toDelta(snapshot, prevSnapshot, computeYChange)\n try {\n for (let i = 0; i < deltas.length; i++) {\n const delta = deltas[i]\n const marks = []\n for (const markName in delta.attributes) {\n marks.push(schema.mark(markName, delta.attributes[markName]))\n }\n nodes.push(schema.text(delta.insert, marks))\n }\n } catch (e) {\n // an error occured while creating the node. This is probably a result of a concurrent action.\n /** @type {Y.Doc} */ (text.doc).transact(transaction => {\n /** @type {Y.Item} */ (text._item).delete(transaction)\n }, ySyncPluginKey)\n return null\n }\n // @ts-ignore\n return nodes\n}\n\n/**\n * @private\n * @param {Array} nodes prosemirror node\n * @param {ProsemirrorMapping} mapping\n * @return {Y.XmlText}\n */\nconst createTypeFromTextNodes = (nodes, mapping) => {\n const type = new Y.XmlText()\n const delta = nodes.map(node => ({\n // @ts-ignore\n insert: node.text,\n attributes: marksToAttributes(node.marks)\n }))\n type.applyDelta(delta)\n mapping.set(type, nodes)\n return type\n}\n\n/**\n * @private\n * @param {any} node prosemirror node\n * @param {ProsemirrorMapping} mapping\n * @return {Y.XmlElement}\n */\nconst createTypeFromElementNode = (node, mapping) => {\n const type = new Y.XmlElement(node.type.name)\n for (const key in node.attrs) {\n const val = node.attrs[key]\n if (val !== null && key !== 'ychange') {\n type.setAttribute(key, val)\n }\n }\n type.insert(0, normalizePNodeContent(node).map(n => createTypeFromTextOrElementNode(n, mapping)))\n mapping.set(type, node)\n return type\n}\n\n/**\n * @private\n * @param {PModel.Node|Array} node prosemirror text node\n * @param {ProsemirrorMapping} mapping\n * @return {Y.XmlElement|Y.XmlText}\n */\nconst createTypeFromTextOrElementNode = (node, mapping) => node instanceof Array ? createTypeFromTextNodes(node, mapping) : createTypeFromElementNode(node, mapping)\n\nconst isObject = (val) => typeof val === 'object' && val !== null\n\nconst equalAttrs = (pattrs, yattrs) => {\n const keys = Object.keys(pattrs).filter(key => pattrs[key] !== null)\n let eq = keys.length === Object.keys(yattrs).filter(key => yattrs[key] !== null).length\n for (let i = 0; i < keys.length && eq; i++) {\n const key = keys[i]\n const l = pattrs[key]\n const r = yattrs[key]\n eq = key === 'ychange' || l === r || (isObject(l) && isObject(r) && equalAttrs(l, r))\n }\n return eq\n}\n\n/**\n * @typedef {Array|PModel.Node>} NormalizedPNodeContent\n */\n\n/**\n * @param {any} pnode\n * @return {NormalizedPNodeContent}\n */\nconst normalizePNodeContent = pnode => {\n const c = pnode.content.content\n const res = []\n for (let i = 0; i < c.length; i++) {\n const n = c[i]\n if (n.isText) {\n const textNodes = []\n for (let tnode = c[i]; i < c.length && tnode.isText; tnode = c[++i]) {\n textNodes.push(tnode)\n }\n i--\n res.push(textNodes)\n } else {\n res.push(n)\n }\n }\n return res\n}\n\n/**\n * @param {Y.XmlText} ytext\n * @param {Array} ptexts\n */\nconst equalYTextPText = (ytext, ptexts) => {\n const delta = ytext.toDelta()\n return delta.length === ptexts.length && delta.every((d, i) => d.insert === /** @type {any} */ (ptexts[i]).text && object.keys(d.attributes || {}).length === ptexts[i].marks.length && ptexts[i].marks.every(mark => equalAttrs(d.attributes[mark.type.name] || {}, mark.attrs)))\n}\n\n/**\n * @param {Y.XmlElement|Y.XmlText|Y.XmlHook} ytype\n * @param {any|Array} pnode\n */\nconst equalYTypePNode = (ytype, pnode) => {\n if (ytype instanceof Y.XmlElement && !(pnode instanceof Array) && matchNodeName(ytype, pnode)) {\n const normalizedContent = normalizePNodeContent(pnode)\n return ytype._length === normalizedContent.length && equalAttrs(ytype.getAttributes(), pnode.attrs) && ytype.toArray().every((ychild, i) => equalYTypePNode(ychild, normalizedContent[i]))\n }\n return ytype instanceof Y.XmlText && pnode instanceof Array && equalYTextPText(ytype, pnode)\n}\n\n/**\n * @param {PModel.Node | Array | undefined} mapped\n * @param {PModel.Node | Array} pcontent\n */\nconst mappedIdentity = (mapped, pcontent) => mapped === pcontent || (mapped instanceof Array && pcontent instanceof Array && mapped.length === pcontent.length && mapped.every((a, i) => pcontent[i] === a))\n\n/**\n * @param {Y.XmlElement} ytype\n * @param {PModel.Node} pnode\n * @param {ProsemirrorMapping} mapping\n * @return {{ foundMappedChild: boolean, equalityFactor: number }}\n */\nconst computeChildEqualityFactor = (ytype, pnode, mapping) => {\n const yChildren = ytype.toArray()\n const pChildren = normalizePNodeContent(pnode)\n const pChildCnt = pChildren.length\n const yChildCnt = yChildren.length\n const minCnt = math.min(yChildCnt, pChildCnt)\n let left = 0\n let right = 0\n let foundMappedChild = false\n for (; left < minCnt; left++) {\n const leftY = yChildren[left]\n const leftP = pChildren[left]\n if (mappedIdentity(mapping.get(leftY), leftP)) {\n foundMappedChild = true// definite (good) match!\n } else if (!equalYTypePNode(leftY, leftP)) {\n break\n }\n }\n for (; left + right < minCnt; right++) {\n const rightY = yChildren[yChildCnt - right - 1]\n const rightP = pChildren[pChildCnt - right - 1]\n if (mappedIdentity(mapping.get(rightY), rightP)) {\n foundMappedChild = true\n } else if (!equalYTypePNode(rightY, rightP)) {\n break\n }\n }\n return {\n equalityFactor: left + right,\n foundMappedChild\n }\n}\n\nconst ytextTrans = ytext => {\n let str = ''\n /**\n * @type {Y.Item|null}\n */\n let n = ytext._start\n const nAttrs = {}\n while (n !== null) {\n if (!n.deleted) {\n if (n.countable && n.content instanceof Y.ContentString) {\n str += n.content.str\n } else if (n.content instanceof Y.ContentFormat) {\n nAttrs[n.content.key] = null\n }\n }\n n = n.right\n }\n return {\n str,\n nAttrs\n }\n}\n\n/**\n * @todo test this more\n *\n * @param {Y.Text} ytext\n * @param {Array} ptexts\n * @param {ProsemirrorMapping} mapping\n */\nconst updateYText = (ytext, ptexts, mapping) => {\n mapping.set(ytext, ptexts)\n const { nAttrs, str } = ytextTrans(ytext)\n const content = ptexts.map(p => ({ insert: /** @type {any} */ (p).text, attributes: Object.assign({}, nAttrs, marksToAttributes(p.marks)) }))\n const { insert, remove, index } = simpleDiff(str, content.map(c => c.insert).join(''))\n ytext.delete(index, remove)\n ytext.insert(index, insert)\n ytext.applyDelta(content.map(c => ({ retain: c.insert.length, attributes: c.attributes })))\n}\n\nconst marksToAttributes = marks => {\n const pattrs = {}\n marks.forEach(mark => {\n if (mark.type.name !== 'ychange') {\n pattrs[mark.type.name] = mark.attrs\n }\n })\n return pattrs\n}\n\n/**\n * @private\n * @param {{transact: Function}} y\n * @param {Y.XmlFragment} yDomFragment\n * @param {any} pNode\n * @param {ProsemirrorMapping} mapping\n */\nexport const updateYFragment = (y, yDomFragment, pNode, mapping) => {\n if (yDomFragment instanceof Y.XmlElement && yDomFragment.nodeName !== pNode.type.name) {\n throw new Error('node name mismatch!')\n }\n mapping.set(yDomFragment, pNode)\n // update attributes\n if (yDomFragment instanceof Y.XmlElement) {\n const yDomAttrs = yDomFragment.getAttributes()\n const pAttrs = pNode.attrs\n for (const key in pAttrs) {\n if (pAttrs[key] !== null) {\n if (yDomAttrs[key] !== pAttrs[key] && key !== 'ychange') {\n yDomFragment.setAttribute(key, pAttrs[key])\n }\n } else {\n yDomFragment.removeAttribute(key)\n }\n }\n // remove all keys that are no longer in pAttrs\n for (const key in yDomAttrs) {\n if (pAttrs[key] === undefined) {\n yDomFragment.removeAttribute(key)\n }\n }\n }\n // update children\n const pChildren = normalizePNodeContent(pNode)\n const pChildCnt = pChildren.length\n const yChildren = yDomFragment.toArray()\n const yChildCnt = yChildren.length\n const minCnt = math.min(pChildCnt, yChildCnt)\n let left = 0\n let right = 0\n // find number of matching elements from left\n for (;left < minCnt; left++) {\n const leftY = yChildren[left]\n const leftP = pChildren[left]\n if (!mappedIdentity(mapping.get(leftY), leftP)) {\n if (equalYTypePNode(leftY, leftP)) {\n // update mapping\n mapping.set(leftY, leftP)\n } else {\n break\n }\n }\n }\n // find number of matching elements from right\n for (;right + left + 1 < minCnt; right++) {\n const rightY = yChildren[yChildCnt - right - 1]\n const rightP = pChildren[pChildCnt - right - 1]\n if (!mappedIdentity(mapping.get(rightY), rightP)) {\n if (equalYTypePNode(rightY, rightP)) {\n // update mapping\n mapping.set(rightY, rightP)\n } else {\n break\n }\n }\n }\n y.transact(() => {\n // try to compare and update\n while (yChildCnt - left - right > 0 && pChildCnt - left - right > 0) {\n const leftY = yChildren[left]\n const leftP = pChildren[left]\n const rightY = yChildren[yChildCnt - right - 1]\n const rightP = pChildren[pChildCnt - right - 1]\n if (leftY instanceof Y.XmlText && leftP instanceof Array) {\n if (!equalYTextPText(leftY, leftP)) {\n updateYText(leftY, leftP, mapping)\n }\n left += 1\n } else {\n let updateLeft = leftY instanceof Y.XmlElement && matchNodeName(leftY, leftP)\n let updateRight = rightY instanceof Y.XmlElement && matchNodeName(rightY, rightP)\n if (updateLeft && updateRight) {\n // decide which which element to update\n const equalityLeft = computeChildEqualityFactor(/** @type {Y.XmlElement} */ (leftY), /** @type {PModel.Node} */ (leftP), mapping)\n const equalityRight = computeChildEqualityFactor(/** @type {Y.XmlElement} */ (rightY), /** @type {PModel.Node} */ (rightP), mapping)\n if (equalityLeft.foundMappedChild && !equalityRight.foundMappedChild) {\n updateRight = false\n } else if (!equalityLeft.foundMappedChild && equalityRight.foundMappedChild) {\n updateLeft = false\n } else if (equalityLeft.equalityFactor < equalityRight.equalityFactor) {\n updateLeft = false\n } else {\n updateRight = false\n }\n }\n if (updateLeft) {\n updateYFragment(y, /** @type {Y.XmlFragment} */ (leftY), /** @type {PModel.Node} */ (leftP), mapping)\n left += 1\n } else if (updateRight) {\n updateYFragment(y, /** @type {Y.XmlFragment} */ (rightY), /** @type {PModel.Node} */ (rightP), mapping)\n right += 1\n } else {\n yDomFragment.delete(left, 1)\n yDomFragment.insert(left, [createTypeFromTextOrElementNode(leftP, mapping)])\n left += 1\n }\n }\n }\n const yDelLen = yChildCnt - left - right\n if (yChildCnt === 1 && pChildCnt === 0 && yChildren[0] instanceof Y.XmlText) {\n // Edge case handling https://github.com/yjs/y-prosemirror/issues/108\n // Only delete the content of the Y.Text to retain remote changes on the same Y.Text object\n yChildren[0].delete(0, yChildren[0].length)\n } else if (yDelLen > 0) {\n yDomFragment.delete(left, yDelLen)\n }\n if (left + right < pChildCnt) {\n const ins = []\n for (let i = left; i < pChildCnt - right; i++) {\n ins.push(createTypeFromTextOrElementNode(pChildren[i], mapping))\n }\n yDomFragment.insert(left, ins)\n }\n }, ySyncPluginKey)\n}\n\n/**\n * @function\n * @param {Y.XmlElement} yElement\n * @param {any} pNode Prosemirror Node\n */\nconst matchNodeName = (yElement, pNode) => !(pNode instanceof Array) && yElement.nodeName === pNode.type.name\n","\nimport { Plugin } from 'prosemirror-state' // eslint-disable-line\n\nimport { getRelativeSelection } from './sync-plugin.js'\nimport { UndoManager, Item, ContentType, XmlElement, Text } from 'yjs'\nimport { yUndoPluginKey, ySyncPluginKey } from './keys.js'\n\nexport const undo = state => {\n const undoManager = yUndoPluginKey.getState(state).undoManager\n if (undoManager != null) {\n undoManager.undo()\n return true\n }\n}\n\nexport const redo = state => {\n const undoManager = yUndoPluginKey.getState(state).undoManager\n if (undoManager != null) {\n undoManager.redo()\n return true\n }\n}\n\nexport const defaultProtectedNodes = new Set(['paragraph'])\n\nexport const defaultDeleteFilter = (item, protectedNodes) => !(item instanceof Item) ||\n!(item.content instanceof ContentType) ||\n!(item.content.type instanceof Text ||\n (item.content.type instanceof XmlElement && protectedNodes.has(item.content.type.nodeName))) ||\nitem.content.type._length === 0\n\nexport const yUndoPlugin = ({ protectedNodes = defaultProtectedNodes, trackedOrigins = [], undoManager = null } = {}) => new Plugin({\n key: yUndoPluginKey,\n state: {\n init: (initargs, state) => {\n // TODO: check if plugin order matches and fix\n const ystate = ySyncPluginKey.getState(state)\n const _undoManager = undoManager || new UndoManager(ystate.type, {\n trackedOrigins: new Set([ySyncPluginKey].concat(trackedOrigins)),\n deleteFilter: (item) => defaultDeleteFilter(item, protectedNodes)\n })\n return {\n undoManager: _undoManager,\n prevSel: null,\n hasUndoOps: _undoManager.undoStack.length > 0,\n hasRedoOps: _undoManager.redoStack.length > 0\n }\n },\n apply: (tr, val, oldState, state) => {\n const binding = ySyncPluginKey.getState(state).binding\n const undoManager = val.undoManager\n const hasUndoOps = undoManager.undoStack.length > 0\n const hasRedoOps = undoManager.redoStack.length > 0\n if (binding) {\n return {\n undoManager,\n prevSel: getRelativeSelection(binding, oldState),\n hasUndoOps,\n hasRedoOps\n }\n } else {\n if (hasUndoOps !== val.hasUndoOps || hasRedoOps !== val.hasRedoOps) {\n return Object.assign({}, val, {\n hasUndoOps: undoManager.undoStack.length > 0,\n hasRedoOps: undoManager.redoStack.length > 0\n })\n } else { // nothing changed\n return val\n }\n }\n }\n },\n view: view => {\n const ystate = ySyncPluginKey.getState(view.state)\n const undoManager = yUndoPluginKey.getState(view.state).undoManager\n undoManager.on('stack-item-added', ({ stackItem }) => {\n const binding = ystate.binding\n if (binding) {\n stackItem.meta.set(binding, yUndoPluginKey.getState(view.state).prevSel)\n }\n })\n undoManager.on('stack-item-popped', ({ stackItem }) => {\n const binding = ystate.binding\n if (binding) {\n binding.beforeTransactionSelection = stackItem.meta.get(binding) || binding.beforeTransactionSelection\n }\n })\n return {\n destroy: () => {\n undoManager.destroy()\n }\n }\n }\n})\n","import { Extension } from '@tiptap/core';\nimport { yUndoPluginKey, undo, redo, ySyncPlugin, yUndoPlugin, ySyncPluginKey } from 'y-prosemirror';\n\nconst Collaboration = Extension.create({\r\n name: 'collaboration',\r\n priority: 1000,\r\n addOptions() {\r\n return {\r\n document: null,\r\n field: 'default',\r\n fragment: null,\r\n };\r\n },\r\n onCreate() {\r\n if (this.editor.extensionManager.extensions.find(extension => extension.name === 'history')) {\r\n console.warn('[tiptap warn]: \"@tiptap/extension-collaboration\" comes with its own history support and is not compatible with \"@tiptap/extension-history\".');\r\n }\r\n },\r\n addCommands() {\r\n return {\r\n undo: () => ({ tr, state, dispatch }) => {\r\n tr.setMeta('preventDispatch', true);\r\n const undoManager = yUndoPluginKey.getState(state).undoManager;\r\n if (undoManager.undoStack.length === 0) {\r\n return false;\r\n }\r\n if (!dispatch) {\r\n return true;\r\n }\r\n return undo(state);\r\n },\r\n redo: () => ({ tr, state, dispatch }) => {\r\n tr.setMeta('preventDispatch', true);\r\n const undoManager = yUndoPluginKey.getState(state).undoManager;\r\n if (undoManager.redoStack.length === 0) {\r\n return false;\r\n }\r\n if (!dispatch) {\r\n return true;\r\n }\r\n return redo(state);\r\n },\r\n };\r\n },\r\n addKeyboardShortcuts() {\r\n return {\r\n 'Mod-z': () => this.editor.commands.undo(),\r\n 'Mod-y': () => this.editor.commands.redo(),\r\n 'Shift-Mod-z': () => this.editor.commands.redo(),\r\n };\r\n },\r\n addProseMirrorPlugins() {\r\n const fragment = this.options.fragment\r\n ? this.options.fragment\r\n : this.options.document.getXmlFragment(this.options.field);\r\n return [\r\n ySyncPlugin(fragment),\r\n yUndoPlugin(),\r\n ];\r\n },\r\n});\n\nfunction isChangeOrigin(transaction) {\r\n return !!transaction.getMeta(ySyncPluginKey);\r\n}\n\nexport { Collaboration, Collaboration as default, isChangeOrigin };\n//# sourceMappingURL=tiptap-extension-collaboration.esm.js.map\n","var __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\nimport { defineComponent, ref, onMounted, markRaw, watch, unref, openBlock, createElementBlock, computed, nextTick, shallowRef, getCurrentInstance, onBeforeUnmount, normalizeClass, normalizeStyle, createBlock, resolveDynamicComponent, mergeProps } from \"vue\";\nimport \"codemirror/lib/codemirror.css\";\nimport _CodeMirror from \"codemirror\";\nimport \"codemirror/addon/merge/merge.css\";\nimport \"codemirror/addon/merge/merge.js\";\nimport DiffMatchPatch from \"diff-match-patch\";\nimport \"codemirror/addon/mode/simple.js\";\n!window.CodeMirror && (window.CodeMirror = _CodeMirror);\nconst CodeMirror$1 = window.CodeMirror || _CodeMirror;\nvar _export_sfc = (sfc, props) => {\n const target = sfc.__vccOpts || sfc;\n for (const [key, val] of props) {\n target[key] = val;\n }\n return target;\n};\nconst _sfc_main$3 = defineComponent({\n name: \"DefaultMode\",\n props: {\n name: {\n type: String,\n default: `cm-textarea-${+new Date()}`\n },\n value: {\n type: String,\n default: \"\"\n },\n content: {\n type: String,\n default: \"\"\n },\n options: {\n type: Object,\n default: () => ({})\n },\n cminstance: {\n type: Object,\n default: () => null\n },\n placeholder: {\n type: String,\n default: \"\"\n }\n },\n emits: {\n ready: (instance) => instance,\n \"update:cminstance\": (instance) => instance\n },\n setup(props, { emit }) {\n const textarea = ref();\n const _cminstance = ref(null);\n const initialize = () => {\n _cminstance.value = markRaw(CodeMirror$1.fromTextArea(textarea.value, props.options));\n emit(\"update:cminstance\", _cminstance.value);\n const unwatch = watch(() => props.cminstance, (val) => {\n var _a;\n val && ((_a = props.cminstance) == null ? void 0 : _a.setValue(props.value || props.content));\n emit(\"ready\", unref(_cminstance));\n unwatch == null ? void 0 : unwatch();\n }, { deep: true });\n };\n onMounted(() => {\n initialize();\n });\n return {\n textarea,\n initialize\n };\n }\n});\nconst _hoisted_1$2 = [\"name\", \"placeholder\"];\nfunction _sfc_render$2(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"textarea\", {\n ref: \"textarea\",\n name: _ctx.$props.name,\n placeholder: _ctx.$props.placeholder\n }, null, 8, _hoisted_1$2);\n}\nvar Default = /* @__PURE__ */ _export_sfc(_sfc_main$3, [[\"render\", _sfc_render$2]]);\nwindow.diff_match_patch = DiffMatchPatch;\nwindow.DIFF_DELETE = -1;\nwindow.DIFF_INSERT = 1;\nwindow.DIFF_EQUAL = 0;\nconst _sfc_main$2 = defineComponent({\n name: \"MergeMode\",\n props: {\n options: {\n type: Object,\n default: () => ({})\n },\n cminstance: {\n type: Object,\n default: () => ({})\n }\n },\n emits: [\"update:cminstance\", \"ready\"],\n setup(props, { emit }) {\n const _cminstance = ref();\n const mergeView = ref();\n const initialize = () => {\n _cminstance.value = markRaw(CodeMirror$1.MergeView(mergeView.value, props.options));\n emit(\"update:cminstance\", _cminstance.value);\n emit(\"ready\", _cminstance);\n };\n onMounted(() => {\n initialize();\n });\n return {\n mergeView,\n initialize\n };\n }\n});\nconst _hoisted_1$1 = { ref: \"mergeView\" };\nfunction _sfc_render$1(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"div\", _hoisted_1$1, null, 512);\n}\nvar Merge = /* @__PURE__ */ _export_sfc(_sfc_main$2, [[\"render\", _sfc_render$1]]);\nvar logErrorType;\n(function(logErrorType2) {\n logErrorType2[\"info\"] = \"info\";\n logErrorType2[\"warning\"] = \"warning\";\n logErrorType2[\"error\"] = \"error\";\n})(logErrorType || (logErrorType = {}));\nfunction getLocalTime() {\n const date = new Date();\n const h = date.getHours() < 10 ? `0${date.getHours()}` : date.getHours();\n const m = date.getMinutes() < 10 ? `0${date.getMinutes()}` : date.getMinutes();\n const s = date.getSeconds() < 10 ? `0${date.getSeconds()}` : date.getSeconds();\n return `${h}:${m}:${s}`;\n}\nfunction createLinkMark(attrs) {\n return `#link#${JSON.stringify(attrs)}#link#`;\n}\nfunction getLinkMarks(value) {\n const linkRegexp = /#link#(.+)#link#/g;\n const result = [];\n let indexObj;\n indexObj = linkRegexp.exec(value);\n while (indexObj) {\n const node = document.createElement(\"a\");\n const attrs = JSON.parse(indexObj[1]);\n const keyAndValues = Object.entries(attrs);\n for (const [_key, _value] of keyAndValues) {\n node.setAttribute(_key, _value);\n }\n node.className = \"editor_custom_link\";\n node.innerHTML = \"logDownload\";\n result.push({\n start: indexObj.index,\n end: indexObj.index + indexObj[0].length,\n node\n });\n indexObj = linkRegexp.exec(value);\n }\n return result;\n}\nfunction createLogMark(text = \"\", type = \"info\") {\n return `#log<${type}>log#${text}#log<${type}>log#`;\n}\nfunction getLogMark(value) {\n const result = [];\n function match() {\n const logRegexp = /#log<(\\w*)>log#((.|\\r\\n|\\n)*?)#log<(\\w*)>log#/g;\n let indexObj;\n indexObj = logRegexp.exec(value);\n while (indexObj) {\n const text = indexObj[0].replace(/\\r\\n/g, \"\\n\");\n const textArr = text.split(\"\\n\");\n const content = indexObj[2].replace(/\\r\\n/g, \"\\n\");\n const contentArr = content.split(\"\\n\");\n const node = document.createElement(\"span\");\n const type = indexObj[1];\n node.className = `c-editor--log__${type}`;\n let offset = 0;\n for (let i = 0; i < textArr.length; i++) {\n const textItem = textArr[i];\n const contentItem = contentArr[i];\n const cloneNode = node.cloneNode(false);\n cloneNode.innerText = contentItem;\n result.push({\n start: indexObj.index + offset,\n end: indexObj.index + offset + textItem.length,\n node: cloneNode\n });\n offset = offset + textItem.length + 1;\n }\n indexObj = logRegexp.exec(value);\n }\n }\n match();\n return result;\n}\nfunction createLog(log, type) {\n const now = getLocalTime();\n return `[${now}] <${type}> ${log}`;\n}\nfunction createTitle(title, symbolLength, symbol) {\n const arr = new Array(Math.max(symbolLength || 15, 5));\n const wrapText = arr.join(symbol || \"=\");\n return `${wrapText}${title}${wrapText}`;\n}\nconst startRegex = [\n {\n regex: /(\\[.*?\\])([ \\t]*)([ \\t])(.+)/,\n token: [\"tag\", \"\", \"error.strong\", \"error.strong\"],\n sol: true\n },\n {\n regex: /(\\[.*?\\])([ \\t]*)()(.+)(.?)/,\n token: [\"tag\", \"\", \"bracket\", \"bracket\", \"hr\"],\n sol: true\n },\n {\n regex: /(\\[.*?\\])([ \\t]*)()(.+)(.?)/,\n token: [\"tag\", \"\", \"comment\", \"comment\", \"hr\"],\n sol: true\n }\n];\nCodeMirror$1.defineSimpleMode(\"fclog\", {\n start: [\n ...startRegex,\n {\n regex: /.*/,\n token: \"hr\"\n }\n ],\n error: [\n ...startRegex,\n {\n regex: /.*/,\n token: \"error.strong\"\n }\n ],\n info: [\n ...startRegex,\n {\n regex: /.*/,\n token: \"bracket\"\n }\n ],\n warning: [\n ...startRegex,\n {\n regex: /.*\\[/,\n token: \"comment\"\n }\n ]\n});\nCodeMirror$1.defineSimpleMode(\"log\", {\n start: [\n {\n regex: /^[=]+[^=]*[=]+/,\n token: \"strong\"\n },\n {\n regex: /([^\\w])([A-Z][\\w]*)/,\n token: [\"\", \"string\"]\n },\n {\n regex: /(^[A-Z][\\w]*)/,\n token: \"string\"\n }\n ]\n});\nconst _sfc_main$1 = defineComponent({\n name: \"CodemirrorFclog\",\n props: {\n value: {\n type: String,\n default: \"\"\n },\n name: {\n type: String,\n default: `cm-textarea-${+new Date()}`\n },\n options: {\n type: Object,\n default: () => ({})\n },\n cminstance: {\n type: Object,\n default: () => ({})\n },\n placeholder: {\n type: String,\n default: \"\"\n }\n },\n emits: [\"update:cminstance\", \"ready\"],\n setup(props, { emit }) {\n const textarea = ref();\n const _cminstance = ref(null);\n const renderTextMark = (cminstance = props.cminstance) => {\n const marks = cminstance.getAllMarks();\n marks.forEach((mark) => mark.clear());\n const value = cminstance.getValue();\n const linkMarks = [].concat(getLinkMarks(value)).concat(getLogMark(value));\n for (let _i = 0; _i < linkMarks.length; _i++) {\n const mark = linkMarks[_i];\n cminstance.markText(cminstance.posFromIndex(mark.start), cminstance.posFromIndex(mark.end), { replacedWith: mark.node });\n }\n };\n const initialize = () => {\n var _a;\n _cminstance.value = markRaw(CodeMirror$1.fromTextArea(textarea.value, props.options));\n emit(\"update:cminstance\", unref(_cminstance));\n (_a = _cminstance.value) == null ? void 0 : _a.on(\"change\", renderTextMark);\n };\n watch(() => props.cminstance, (val) => {\n var _a;\n if (val) {\n renderTextMark(props.cminstance);\n (_a = props.cminstance) == null ? void 0 : _a.setValue(props.value);\n emit(\"ready\", _cminstance);\n }\n }, { deep: true, immediate: true });\n onMounted(() => {\n initialize();\n });\n return {\n initialize,\n textarea\n };\n }\n});\nconst _hoisted_1 = [\"name\", \"placeholder\"];\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"textarea\", {\n ref: \"textarea\",\n name: _ctx.$props.name,\n placeholder: _ctx.$props.placeholder\n }, null, 8, _hoisted_1);\n}\nvar FcLog = /* @__PURE__ */ _export_sfc(_sfc_main$1, [[\"render\", _sfc_render]]);\nconst componentEventMap = {\n \"update:value\": (value) => value,\n change: (value, cm) => ({ value, cm }),\n input: (value) => value,\n ready: (cm) => cm\n};\nconst cmEvts = [\n \"changes\",\n \"scroll\",\n \"beforeChange\",\n \"cursorActivity\",\n \"keyHandled\",\n \"inputRead\",\n \"electricInput\",\n \"beforeSelectionChange\",\n \"viewportChange\",\n \"swapDoc\",\n \"gutterClick\",\n \"gutterContextMenu\",\n \"focus\",\n \"blur\",\n \"refresh\",\n \"optionChange\",\n \"scrollCursorIntoView\",\n \"update\"\n];\nconst getCmEvts = () => {\n const result = {};\n cmEvts.forEach((name) => {\n result[name] = (...args) => args;\n });\n return result;\n};\nconst emitOptions = __spreadValues(__spreadValues({}, componentEventMap), getCmEvts());\nconst DEFAULT_OPTIONS = {\n mode: \"text\",\n theme: \"default\",\n lineNumbers: true,\n smartIndent: true,\n indentUnit: 2\n};\nfunction scrollToEnd(cm) {\n Promise.resolve().then(() => {\n const nowScrollInfo = cm.getScrollInfo();\n cm.scrollTo(nowScrollInfo.left, nowScrollInfo.height);\n });\n}\nconst useEvents = ({\n props,\n cminstance,\n emit,\n internalInstance,\n content\n}) => {\n const realCm = computed(() => {\n var _a;\n return props.merge ? (_a = unref(cminstance)) == null ? void 0 : _a.editor() : unref(cminstance);\n });\n const getBindEvents = () => {\n const evts = [];\n Object.keys(internalInstance == null ? void 0 : internalInstance.vnode.props).forEach((v) => {\n if (v.startsWith(\"on\")) {\n const e = v.replace(v[2], v[2].toLowerCase()).slice(2);\n !componentEventMap[e] && evts.push(e);\n }\n });\n return evts;\n };\n const listenerEvents = () => {\n realCm.value.on(\"change\", (cm) => {\n const currentVal = cm.getValue();\n if (currentVal === content.value)\n return;\n content.value = currentVal;\n content.value && emit(\"update:value\", content.value || \"\");\n content.value && emit(\"input\", content.value || \"\");\n Promise.resolve().then(() => {\n emit(\"change\", content.value, cm);\n });\n props.keepCursorInEnd && scrollToEnd(cm);\n });\n const tmpEvents = {};\n const bindEvts = getBindEvents();\n bindEvts.filter((e) => !tmpEvents[e] && (tmpEvents[e] = true)).forEach((event) => {\n realCm.value.on(event, (...args) => {\n emit(event, ...args);\n });\n });\n };\n return {\n listenerEvents\n };\n};\nfunction useViewControl({\n props,\n cminstance,\n presetRef\n}) {\n const containerWidth = ref(null);\n const containerHeight = ref(null);\n const realCm = computed(() => {\n var _a;\n return props.merge ? (_a = unref(cminstance)) == null ? void 0 : _a.editor() : unref(cminstance);\n });\n const refresh = () => {\n nextTick(() => {\n var _a;\n (_a = realCm.value) == null ? void 0 : _a.refresh();\n });\n };\n const resize = (width = props.width, height = props.height) => {\n var _a;\n containerWidth.value = String(width).replace(\"px\", \"\");\n containerHeight.value = String(height).replace(\"px\", \"\");\n const cmHeight = containerHeight.value;\n (_a = realCm.value) == null ? void 0 : _a.setSize(containerWidth.value, cmHeight);\n };\n const destroy = () => {\n var _a;\n const element = (_a = realCm.value) == null ? void 0 : _a.getWrapperElement();\n element == null ? void 0 : element.remove();\n };\n const reload = () => {\n var _a, _b, _c;\n const history = (_a = realCm.value) == null ? void 0 : _a.getDoc().getHistory();\n (_b = presetRef.value) == null ? void 0 : _b.initialize();\n destroy();\n (_c = realCm.value) == null ? void 0 : _c.getDoc().setHistory(history);\n };\n const isStyleChaotic = () => {\n const gutterEl = document.querySelector(\".CodeMirror-gutters\");\n const gutterElLeft = gutterEl == null ? void 0 : gutterEl.style.left.replace(\"px\", \"\");\n return gutterElLeft !== \"0\";\n };\n const reviseStyle = () => {\n refresh();\n if (!isStyleChaotic())\n return;\n const timer = setInterval(() => {\n isStyleChaotic() ? refresh() : clearInterval(timer);\n }, 60);\n const clearTimer = setTimeout(() => {\n clearInterval(timer);\n clearTimeout(clearTimer);\n }, 400);\n };\n return {\n reload,\n refresh,\n resize,\n destroy,\n containerHeight,\n reviseStyle\n };\n}\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n props: {\n value: {\n type: String,\n default: \"\"\n },\n options: {\n type: Object,\n default: () => DEFAULT_OPTIONS\n },\n globalOptions: {\n type: Object,\n default: () => DEFAULT_OPTIONS\n },\n placeholder: {\n type: String,\n default: \"\"\n },\n border: {\n type: Boolean,\n default: false\n },\n width: {\n type: [String, Number],\n default: null\n },\n height: {\n type: [String, Number],\n default: null\n },\n originalStyle: {\n type: Boolean,\n default: false\n },\n keepCursorInEnd: {\n type: Boolean,\n default: false\n },\n merge: {\n type: Boolean,\n default: false\n },\n name: {\n type: String,\n default: \"\"\n },\n marker: {\n type: Function,\n default: () => null\n },\n unseenLines: {\n type: Array,\n default: () => []\n }\n },\n emits: emitOptions,\n setup(__props, { expose, emit }) {\n var _a, _b;\n const props = __props;\n if (typeof Object.assign !== \"function\") {\n Object.defineProperty(Object, \"assign\", {\n value(target, varArgs) {\n if (target == null) {\n throw new TypeError(\"Cannot convert undefined or null to object\");\n }\n const to = Object(target);\n for (let index2 = 1; index2 < arguments.length; index2++) {\n const nextSource = arguments[index2];\n if (nextSource != null) {\n for (const nextKey in nextSource) {\n if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n return to;\n },\n writable: true,\n configurable: true\n });\n }\n const cminstance = ref(null);\n const content = ref(\"\");\n const presetModeName = shallowRef(Default);\n const cmOptions = ref(__spreadValues(__spreadValues(__spreadValues({}, DEFAULT_OPTIONS), props.globalOptions), props.options));\n const internalInstance = getCurrentInstance();\n const instanceName = props.name || ((_b = (_a = internalInstance == null ? void 0 : internalInstance.parent) == null ? void 0 : _a.type) == null ? void 0 : _b.name) || void 0;\n const presetRef = ref(null);\n const realCminstance = computed(() => {\n var _a2;\n return props.merge ? (_a2 = unref(cminstance)) == null ? void 0 : _a2.editor() : unref(cminstance);\n });\n const { refresh, resize, destroy, containerHeight, reviseStyle } = useViewControl({\n props,\n cminstance,\n presetRef\n });\n const { listenerEvents } = useEvents({\n props,\n cminstance,\n emit,\n internalInstance,\n content\n });\n const unseenLineMarkers = () => {\n if (props.unseenLines !== void 0 && props.marker !== void 0) {\n props.unseenLines.forEach((line) => {\n var _a2, _b2;\n const info = (_a2 = cminstance.value) == null ? void 0 : _a2.lineInfo(line);\n (_b2 = cminstance.value) == null ? void 0 : _b2.setGutterMarker(line, \"breakpoints\", (info == null ? void 0 : info.gutterMarkers) ? null : props.marker());\n });\n }\n };\n const onCodeChange = (newVal) => {\n var _a2, _b2;\n const CM_VALUE = (_a2 = cminstance.value) == null ? void 0 : _a2.getValue();\n if (newVal !== CM_VALUE) {\n (_b2 = cminstance.value) == null ? void 0 : _b2.setValue(newVal);\n content.value = newVal;\n reviseStyle();\n }\n unseenLineMarkers();\n };\n const ready = () => {\n listenerEvents();\n unseenLineMarkers();\n resize(props.width, props.height);\n emit(\"ready\", cminstance.value);\n watch([() => props.width, () => props.height], ([width, height]) => {\n resize(width, height);\n }, { deep: true });\n };\n const handlePresetModeName = () => {\n if (props.options.mode === \"fclog\" || props.options.mode === \"log\") {\n presetModeName.value = FcLog;\n return;\n }\n if (props.merge) {\n presetModeName.value = Merge;\n return;\n }\n presetModeName.value = Default;\n };\n watch(() => props.options, (val) => {\n var _a2;\n for (const key in props.options) {\n (_a2 = realCminstance.value) == null ? void 0 : _a2.setOption(key, unref(val[key]));\n }\n }, { deep: true });\n watch(() => props.value, (val) => {\n onCodeChange(val);\n });\n watch(() => props.placeholder, (val) => {\n var _a2;\n (_a2 = realCminstance.value) == null ? void 0 : _a2.setOption(\"placeholder\", val);\n });\n watch(() => props.merge, (val) => {\n handlePresetModeName();\n }, { immediate: true });\n onBeforeUnmount(() => {\n destroy();\n });\n expose({\n cminstance,\n resize,\n refresh,\n destroy\n });\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(\"div\", {\n class: normalizeClass([\"codemirror-container\", {\n merge: _ctx.$props.merge,\n bordered: _ctx.$props.border || _ctx.$props.merge && !props.originalStyle,\n \"width-auto\": !_ctx.$props.width || _ctx.$props.width == \"100%\",\n \"height-auto\": !_ctx.$props.height || _ctx.$props.height == \"100%\",\n \"original-style\": props.originalStyle\n }]),\n style: normalizeStyle({\n height: unref(containerHeight) + \"px\"\n })\n }, [\n (openBlock(), createBlock(resolveDynamicComponent(unref(presetModeName)), mergeProps({\n ref_key: \"presetRef\",\n ref: presetRef,\n cminstance: cminstance.value,\n \"onUpdate:cminstance\": _cache[0] || (_cache[0] = ($event) => cminstance.value = $event),\n style: { \"height\": \"100%\" }\n }, __spreadProps(__spreadValues(__spreadValues({}, _ctx.$props), _ctx.$attrs), {\n options: cmOptions.value,\n name: unref(instanceName),\n content: content.value\n }), { onReady: ready }), null, 16, [\"cminstance\"]))\n ], 6);\n };\n }\n});\nvar index = \"\";\nconst install = (app, config) => {\n if (config) {\n if (config.options) {\n _sfc_main.props.globalOptions.default = () => config.options;\n }\n }\n app.component((config == null ? void 0 : config.componentName) || \"Codemirror\", _sfc_main);\n return app;\n};\nconst CodeMirror = window.CodeMirror || CodeMirror$1;\nconst GlobalCmComponent = install;\nfunction styleInject(css,ref){if(ref===void 0){ref={}}var insertAt=ref.insertAt;if(!css||typeof document===\"undefined\"){return}var head=document.head||document.getElementsByTagName(\"head\")[0];var style=document.createElement(\"style\");style.type=\"text/css\";if(insertAt===\"top\"){if(head.firstChild){head.insertBefore(style,head.firstChild)}else{head.appendChild(style)}}else{head.appendChild(style)}if(style.styleSheet){style.styleSheet.cssText=css}else{style.appendChild(document.createTextNode(css))}};styleInject(`.codemirror-container {\n position: relative;\n display: inline-block;\n height: 100%;\n width: fit-content;\n font-size: 12px;\n overflow: hidden;\n}\n.codemirror-container.bordered {\n border-radius: 4px;\n border: 1px solid #dddddd;\n}\n.codemirror-container.width-auto {\n width: 100%;\n}\n.codemirror-container.height-auto {\n height: 100%;\n}\n.codemirror-container.height-auto .CodeMirror,\n.codemirror-container.height-auto .cm-s-default {\n height: 100% !important;\n}\n.codemirror-container .editor_custom_link {\n cursor: pointer;\n color: #1474f1;\n text-decoration: underline;\n}\n.codemirror-container .editor_custom_link:hover {\n color: #04b4fa;\n}\n.codemirror-container:not(.original-style) .CodeMirror-lines .CodeMirror-placeholder.CodeMirror-line-like {\n color: #666;\n}\n.codemirror-container:not(.original-style) .CodeMirror,\n.codemirror-container:not(.original-style) .CodeMirror-merge-pane {\n height: 100%;\n font-family: consolas !important;\n}\n.codemirror-container:not(.original-style) .CodeMirror-merge,\n.codemirror-container:not(.original-style) .CodeMirror-merge-right .CodeMirror {\n height: 100%;\n border: none !important;\n}\n.codemirror-container:not(.original-style) .c-editor--log__error {\n color: #bb0606;\n font-weight: bold;\n}\n.codemirror-container:not(.original-style) .c-editor--log__info {\n color: #333333;\n font-weight: bold;\n}\n.codemirror-container:not(.original-style) .c-editor--log__warning {\n color: #ee9900;\n}\n.codemirror-container:not(.original-style) .c-editor--log__success {\n color: #669600;\n}\n.codemirror-container:not(.original-style) .cm-header,\n.codemirror-container:not(.original-style) .cm-strong {\n font-weight: bold;\n}\n`);\nexport { CodeMirror, GlobalCmComponent, _sfc_main as VueCodemirror, createLinkMark, createLog, createLogMark, createTitle, _sfc_main as default, getLinkMarks, getLocalTime, getLogMark, logErrorType };\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/5/LICENSE\n\n// declare global: diff_match_patch, DIFF_INSERT, DIFF_DELETE, DIFF_EQUAL\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\")); // Note non-packaged dependency diff_match_patch\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\", \"diff_match_patch\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n \"use strict\";\n var Pos = CodeMirror.Pos;\n var svgNS = \"http://www.w3.org/2000/svg\";\n\n function DiffView(mv, type) {\n this.mv = mv;\n this.type = type;\n this.classes = type == \"left\"\n ? {chunk: \"CodeMirror-merge-l-chunk\",\n start: \"CodeMirror-merge-l-chunk-start\",\n end: \"CodeMirror-merge-l-chunk-end\",\n insert: \"CodeMirror-merge-l-inserted\",\n del: \"CodeMirror-merge-l-deleted\",\n connect: \"CodeMirror-merge-l-connect\"}\n : {chunk: \"CodeMirror-merge-r-chunk\",\n start: \"CodeMirror-merge-r-chunk-start\",\n end: \"CodeMirror-merge-r-chunk-end\",\n insert: \"CodeMirror-merge-r-inserted\",\n del: \"CodeMirror-merge-r-deleted\",\n connect: \"CodeMirror-merge-r-connect\"};\n }\n\n DiffView.prototype = {\n constructor: DiffView,\n init: function(pane, orig, options) {\n this.edit = this.mv.edit;\n ;(this.edit.state.diffViews || (this.edit.state.diffViews = [])).push(this);\n this.orig = CodeMirror(pane, copyObj({value: orig, readOnly: !this.mv.options.allowEditingOriginals}, copyObj(options)));\n if (this.mv.options.connect == \"align\") {\n if (!this.edit.state.trackAlignable) this.edit.state.trackAlignable = new TrackAlignable(this.edit)\n this.orig.state.trackAlignable = new TrackAlignable(this.orig)\n }\n this.lockButton.title = this.edit.phrase(\"Toggle locked scrolling\");\n this.lockButton.setAttribute(\"aria-label\", this.lockButton.title);\n\n this.orig.state.diffViews = [this];\n var classLocation = options.chunkClassLocation || \"background\";\n if (Object.prototype.toString.call(classLocation) != \"[object Array]\") classLocation = [classLocation]\n this.classes.classLocation = classLocation\n\n this.diff = getDiff(asString(orig), asString(options.value), this.mv.options.ignoreWhitespace);\n this.chunks = getChunks(this.diff);\n this.diffOutOfDate = this.dealigned = false;\n this.needsScrollSync = null\n\n this.showDifferences = options.showDifferences !== false;\n },\n registerEvents: function(otherDv) {\n this.forceUpdate = registerUpdate(this);\n setScrollLock(this, true, false);\n registerScroll(this, otherDv);\n },\n setShowDifferences: function(val) {\n val = val !== false;\n if (val != this.showDifferences) {\n this.showDifferences = val;\n this.forceUpdate(\"full\");\n }\n }\n };\n\n function ensureDiff(dv) {\n if (dv.diffOutOfDate) {\n dv.diff = getDiff(dv.orig.getValue(), dv.edit.getValue(), dv.mv.options.ignoreWhitespace);\n dv.chunks = getChunks(dv.diff);\n dv.diffOutOfDate = false;\n CodeMirror.signal(dv.edit, \"updateDiff\", dv.diff);\n }\n }\n\n var updating = false;\n function registerUpdate(dv) {\n var edit = {from: 0, to: 0, marked: []};\n var orig = {from: 0, to: 0, marked: []};\n var debounceChange, updatingFast = false;\n function update(mode) {\n updating = true;\n updatingFast = false;\n if (mode == \"full\") {\n if (dv.svg) clear(dv.svg);\n if (dv.copyButtons) clear(dv.copyButtons);\n clearMarks(dv.edit, edit.marked, dv.classes);\n clearMarks(dv.orig, orig.marked, dv.classes);\n edit.from = edit.to = orig.from = orig.to = 0;\n }\n ensureDiff(dv);\n if (dv.showDifferences) {\n updateMarks(dv.edit, dv.diff, edit, DIFF_INSERT, dv.classes);\n updateMarks(dv.orig, dv.diff, orig, DIFF_DELETE, dv.classes);\n }\n\n if (dv.mv.options.connect == \"align\")\n alignChunks(dv);\n makeConnections(dv);\n if (dv.needsScrollSync != null) syncScroll(dv, dv.needsScrollSync)\n\n updating = false;\n }\n function setDealign(fast) {\n if (updating) return;\n dv.dealigned = true;\n set(fast);\n }\n function set(fast) {\n if (updating || updatingFast) return;\n clearTimeout(debounceChange);\n if (fast === true) updatingFast = true;\n debounceChange = setTimeout(update, fast === true ? 20 : 250);\n }\n function change(_cm, change) {\n if (!dv.diffOutOfDate) {\n dv.diffOutOfDate = true;\n edit.from = edit.to = orig.from = orig.to = 0;\n }\n // Update faster when a line was added/removed\n setDealign(change.text.length - 1 != change.to.line - change.from.line);\n }\n function swapDoc() {\n dv.diffOutOfDate = true;\n dv.dealigned = true;\n update(\"full\");\n }\n dv.edit.on(\"change\", change);\n dv.orig.on(\"change\", change);\n dv.edit.on(\"swapDoc\", swapDoc);\n dv.orig.on(\"swapDoc\", swapDoc);\n if (dv.mv.options.connect == \"align\") {\n CodeMirror.on(dv.edit.state.trackAlignable, \"realign\", setDealign)\n CodeMirror.on(dv.orig.state.trackAlignable, \"realign\", setDealign)\n }\n dv.edit.on(\"viewportChange\", function() { set(false); });\n dv.orig.on(\"viewportChange\", function() { set(false); });\n update();\n return update;\n }\n\n function registerScroll(dv, otherDv) {\n dv.edit.on(\"scroll\", function() {\n syncScroll(dv, true) && makeConnections(dv);\n });\n dv.orig.on(\"scroll\", function() {\n syncScroll(dv, false) && makeConnections(dv);\n if (otherDv) syncScroll(otherDv, true) && makeConnections(otherDv);\n });\n }\n\n function syncScroll(dv, toOrig) {\n // Change handler will do a refresh after a timeout when diff is out of date\n if (dv.diffOutOfDate) {\n if (dv.lockScroll && dv.needsScrollSync == null) dv.needsScrollSync = toOrig\n return false\n }\n dv.needsScrollSync = null\n if (!dv.lockScroll) return true;\n var editor, other, now = +new Date;\n if (toOrig) { editor = dv.edit; other = dv.orig; }\n else { editor = dv.orig; other = dv.edit; }\n // Don't take action if the position of this editor was recently set\n // (to prevent feedback loops)\n if (editor.state.scrollSetBy == dv && (editor.state.scrollSetAt || 0) + 250 > now) return false;\n\n var sInfo = editor.getScrollInfo();\n if (dv.mv.options.connect == \"align\") {\n targetPos = sInfo.top;\n } else {\n var halfScreen = .5 * sInfo.clientHeight, midY = sInfo.top + halfScreen;\n var mid = editor.lineAtHeight(midY, \"local\");\n var around = chunkBoundariesAround(dv.chunks, mid, toOrig);\n var off = getOffsets(editor, toOrig ? around.edit : around.orig);\n var offOther = getOffsets(other, toOrig ? around.orig : around.edit);\n var ratio = (midY - off.top) / (off.bot - off.top);\n var targetPos = (offOther.top - halfScreen) + ratio * (offOther.bot - offOther.top);\n\n var botDist, mix;\n // Some careful tweaking to make sure no space is left out of view\n // when scrolling to top or bottom.\n if (targetPos > sInfo.top && (mix = sInfo.top / halfScreen) < 1) {\n targetPos = targetPos * mix + sInfo.top * (1 - mix);\n } else if ((botDist = sInfo.height - sInfo.clientHeight - sInfo.top) < halfScreen) {\n var otherInfo = other.getScrollInfo();\n var botDistOther = otherInfo.height - otherInfo.clientHeight - targetPos;\n if (botDistOther > botDist && (mix = botDist / halfScreen) < 1)\n targetPos = targetPos * mix + (otherInfo.height - otherInfo.clientHeight - botDist) * (1 - mix);\n }\n }\n\n other.scrollTo(sInfo.left, targetPos);\n other.state.scrollSetAt = now;\n other.state.scrollSetBy = dv;\n return true;\n }\n\n function getOffsets(editor, around) {\n var bot = around.after;\n if (bot == null) bot = editor.lastLine() + 1;\n return {top: editor.heightAtLine(around.before || 0, \"local\"),\n bot: editor.heightAtLine(bot, \"local\")};\n }\n\n function setScrollLock(dv, val, action) {\n dv.lockScroll = val;\n if (val && action != false) syncScroll(dv, DIFF_INSERT) && makeConnections(dv);\n (val ? CodeMirror.addClass : CodeMirror.rmClass)(dv.lockButton, \"CodeMirror-merge-scrolllock-enabled\");\n }\n\n // Updating the marks for editor content\n\n function removeClass(editor, line, classes) {\n var locs = classes.classLocation\n for (var i = 0; i < locs.length; i++) {\n editor.removeLineClass(line, locs[i], classes.chunk);\n editor.removeLineClass(line, locs[i], classes.start);\n editor.removeLineClass(line, locs[i], classes.end);\n }\n }\n\n function clearMarks(editor, arr, classes) {\n for (var i = 0; i < arr.length; ++i) {\n var mark = arr[i];\n if (mark instanceof CodeMirror.TextMarker)\n mark.clear();\n else if (mark.parent)\n removeClass(editor, mark, classes);\n }\n arr.length = 0;\n }\n\n // FIXME maybe add a margin around viewport to prevent too many updates\n function updateMarks(editor, diff, state, type, classes) {\n var vp = editor.getViewport();\n editor.operation(function() {\n if (state.from == state.to || vp.from - state.to > 20 || state.from - vp.to > 20) {\n clearMarks(editor, state.marked, classes);\n markChanges(editor, diff, type, state.marked, vp.from, vp.to, classes);\n state.from = vp.from; state.to = vp.to;\n } else {\n if (vp.from < state.from) {\n markChanges(editor, diff, type, state.marked, vp.from, state.from, classes);\n state.from = vp.from;\n }\n if (vp.to > state.to) {\n markChanges(editor, diff, type, state.marked, state.to, vp.to, classes);\n state.to = vp.to;\n }\n }\n });\n }\n\n function addClass(editor, lineNr, classes, main, start, end) {\n var locs = classes.classLocation, line = editor.getLineHandle(lineNr);\n for (var i = 0; i < locs.length; i++) {\n if (main) editor.addLineClass(line, locs[i], classes.chunk);\n if (start) editor.addLineClass(line, locs[i], classes.start);\n if (end) editor.addLineClass(line, locs[i], classes.end);\n }\n return line;\n }\n\n function markChanges(editor, diff, type, marks, from, to, classes) {\n var pos = Pos(0, 0);\n var top = Pos(from, 0), bot = editor.clipPos(Pos(to - 1));\n var cls = type == DIFF_DELETE ? classes.del : classes.insert;\n function markChunk(start, end) {\n var bfrom = Math.max(from, start), bto = Math.min(to, end);\n for (var i = bfrom; i < bto; ++i)\n marks.push(addClass(editor, i, classes, true, i == start, i == end - 1));\n // When the chunk is empty, make sure a horizontal line shows up\n if (start == end && bfrom == end && bto == end) {\n if (bfrom)\n marks.push(addClass(editor, bfrom - 1, classes, false, false, true));\n else\n marks.push(addClass(editor, bfrom, classes, false, true, false));\n }\n }\n\n var chunkStart = 0, pending = false;\n for (var i = 0; i < diff.length; ++i) {\n var part = diff[i], tp = part[0], str = part[1];\n if (tp == DIFF_EQUAL) {\n var cleanFrom = pos.line + (startOfLineClean(diff, i) ? 0 : 1);\n moveOver(pos, str);\n var cleanTo = pos.line + (endOfLineClean(diff, i) ? 1 : 0);\n if (cleanTo > cleanFrom) {\n if (pending) { markChunk(chunkStart, cleanFrom); pending = false }\n chunkStart = cleanTo;\n }\n } else {\n pending = true\n if (tp == type) {\n var end = moveOver(pos, str, true);\n var a = posMax(top, pos), b = posMin(bot, end);\n if (!posEq(a, b))\n marks.push(editor.markText(a, b, {className: cls}));\n pos = end;\n }\n }\n }\n if (pending) markChunk(chunkStart, pos.line + 1);\n }\n\n // Updating the gap between editor and original\n\n function makeConnections(dv) {\n if (!dv.showDifferences) return;\n\n if (dv.svg) {\n clear(dv.svg);\n var w = dv.gap.offsetWidth;\n attrs(dv.svg, \"width\", w, \"height\", dv.gap.offsetHeight);\n }\n if (dv.copyButtons) clear(dv.copyButtons);\n\n var vpEdit = dv.edit.getViewport(), vpOrig = dv.orig.getViewport();\n var outerTop = dv.mv.wrap.getBoundingClientRect().top\n var sTopEdit = outerTop - dv.edit.getScrollerElement().getBoundingClientRect().top + dv.edit.getScrollInfo().top\n var sTopOrig = outerTop - dv.orig.getScrollerElement().getBoundingClientRect().top + dv.orig.getScrollInfo().top;\n for (var i = 0; i < dv.chunks.length; i++) {\n var ch = dv.chunks[i];\n if (ch.editFrom <= vpEdit.to && ch.editTo >= vpEdit.from &&\n ch.origFrom <= vpOrig.to && ch.origTo >= vpOrig.from)\n drawConnectorsForChunk(dv, ch, sTopOrig, sTopEdit, w);\n }\n }\n\n function getMatchingOrigLine(editLine, chunks) {\n var editStart = 0, origStart = 0;\n for (var i = 0; i < chunks.length; i++) {\n var chunk = chunks[i];\n if (chunk.editTo > editLine && chunk.editFrom <= editLine) return null;\n if (chunk.editFrom > editLine) break;\n editStart = chunk.editTo;\n origStart = chunk.origTo;\n }\n return origStart + (editLine - editStart);\n }\n\n // Combines information about chunks and widgets/markers to return\n // an array of lines, in a single editor, that probably need to be\n // aligned with their counterparts in the editor next to it.\n function alignableFor(cm, chunks, isOrig) {\n var tracker = cm.state.trackAlignable\n var start = cm.firstLine(), trackI = 0\n var result = []\n for (var i = 0;; i++) {\n var chunk = chunks[i]\n var chunkStart = !chunk ? 1e9 : isOrig ? chunk.origFrom : chunk.editFrom\n for (; trackI < tracker.alignable.length; trackI += 2) {\n var n = tracker.alignable[trackI] + 1\n if (n <= start) continue\n if (n <= chunkStart) result.push(n)\n else break\n }\n if (!chunk) break\n result.push(start = isOrig ? chunk.origTo : chunk.editTo)\n }\n return result\n }\n\n // Given information about alignable lines in two editors, fill in\n // the result (an array of three-element arrays) to reflect the\n // lines that need to be aligned with each other.\n function mergeAlignable(result, origAlignable, chunks, setIndex) {\n var rI = 0, origI = 0, chunkI = 0, diff = 0\n outer: for (;; rI++) {\n var nextR = result[rI], nextO = origAlignable[origI]\n if (!nextR && nextO == null) break\n\n var rLine = nextR ? nextR[0] : 1e9, oLine = nextO == null ? 1e9 : nextO\n while (chunkI < chunks.length) {\n var chunk = chunks[chunkI]\n if (chunk.origFrom <= oLine && chunk.origTo > oLine) {\n origI++\n rI--\n continue outer;\n }\n if (chunk.editTo > rLine) {\n if (chunk.editFrom <= rLine) continue outer;\n break\n }\n diff += (chunk.origTo - chunk.origFrom) - (chunk.editTo - chunk.editFrom)\n chunkI++\n }\n if (rLine == oLine - diff) {\n nextR[setIndex] = oLine\n origI++\n } else if (rLine < oLine - diff) {\n nextR[setIndex] = rLine + diff\n } else {\n var record = [oLine - diff, null, null]\n record[setIndex] = oLine\n result.splice(rI, 0, record)\n origI++\n }\n }\n }\n\n function findAlignedLines(dv, other) {\n var alignable = alignableFor(dv.edit, dv.chunks, false), result = []\n if (other) for (var i = 0, j = 0; i < other.chunks.length; i++) {\n var n = other.chunks[i].editTo\n while (j < alignable.length && alignable[j] < n) j++\n if (j == alignable.length || alignable[j] != n) alignable.splice(j++, 0, n)\n }\n for (var i = 0; i < alignable.length; i++)\n result.push([alignable[i], null, null])\n\n mergeAlignable(result, alignableFor(dv.orig, dv.chunks, true), dv.chunks, 1)\n if (other)\n mergeAlignable(result, alignableFor(other.orig, other.chunks, true), other.chunks, 2)\n\n return result\n }\n\n function alignChunks(dv, force) {\n if (!dv.dealigned && !force) return;\n if (!dv.orig.curOp) return dv.orig.operation(function() {\n alignChunks(dv, force);\n });\n\n dv.dealigned = false;\n var other = dv.mv.left == dv ? dv.mv.right : dv.mv.left;\n if (other) {\n ensureDiff(other);\n other.dealigned = false;\n }\n var linesToAlign = findAlignedLines(dv, other);\n\n // Clear old aligners\n var aligners = dv.mv.aligners;\n for (var i = 0; i < aligners.length; i++)\n aligners[i].clear();\n aligners.length = 0;\n\n var cm = [dv.edit, dv.orig], scroll = [], offset = []\n if (other) cm.push(other.orig);\n for (var i = 0; i < cm.length; i++) {\n scroll.push(cm[i].getScrollInfo().top);\n offset.push(-cm[i].getScrollerElement().getBoundingClientRect().top)\n }\n\n if (offset[0] != offset[1] || cm.length == 3 && offset[1] != offset[2])\n alignLines(cm, offset, [0, 0, 0], aligners)\n for (var ln = 0; ln < linesToAlign.length; ln++)\n alignLines(cm, offset, linesToAlign[ln], aligners);\n\n for (var i = 0; i < cm.length; i++)\n cm[i].scrollTo(null, scroll[i]);\n }\n\n function alignLines(cm, cmOffset, lines, aligners) {\n var maxOffset = -1e8, offset = [];\n for (var i = 0; i < cm.length; i++) if (lines[i] != null) {\n var off = cm[i].heightAtLine(lines[i], \"local\") - cmOffset[i];\n offset[i] = off;\n maxOffset = Math.max(maxOffset, off);\n }\n for (var i = 0; i < cm.length; i++) if (lines[i] != null) {\n var diff = maxOffset - offset[i];\n if (diff > 1)\n aligners.push(padAbove(cm[i], lines[i], diff));\n }\n }\n\n function padAbove(cm, line, size) {\n var above = true;\n if (line > cm.lastLine()) {\n line--;\n above = false;\n }\n var elt = document.createElement(\"div\");\n elt.className = \"CodeMirror-merge-spacer\";\n elt.style.height = size + \"px\"; elt.style.minWidth = \"1px\";\n return cm.addLineWidget(line, elt, {height: size, above: above, mergeSpacer: true, handleMouseEvents: true});\n }\n\n function drawConnectorsForChunk(dv, chunk, sTopOrig, sTopEdit, w) {\n var flip = dv.type == \"left\";\n var top = dv.orig.heightAtLine(chunk.origFrom, \"local\", true) - sTopOrig;\n if (dv.svg) {\n var topLpx = top;\n var topRpx = dv.edit.heightAtLine(chunk.editFrom, \"local\", true) - sTopEdit;\n if (flip) { var tmp = topLpx; topLpx = topRpx; topRpx = tmp; }\n var botLpx = dv.orig.heightAtLine(chunk.origTo, \"local\", true) - sTopOrig;\n var botRpx = dv.edit.heightAtLine(chunk.editTo, \"local\", true) - sTopEdit;\n if (flip) { var tmp = botLpx; botLpx = botRpx; botRpx = tmp; }\n var curveTop = \" C \" + w/2 + \" \" + topRpx + \" \" + w/2 + \" \" + topLpx + \" \" + (w + 2) + \" \" + topLpx;\n var curveBot = \" C \" + w/2 + \" \" + botLpx + \" \" + w/2 + \" \" + botRpx + \" -1 \" + botRpx;\n attrs(dv.svg.appendChild(document.createElementNS(svgNS, \"path\")),\n \"d\", \"M -1 \" + topRpx + curveTop + \" L \" + (w + 2) + \" \" + botLpx + curveBot + \" z\",\n \"class\", dv.classes.connect);\n }\n if (dv.copyButtons) {\n var copy = dv.copyButtons.appendChild(elt(\"div\", dv.type == \"left\" ? \"\\u21dd\" : \"\\u21dc\",\n \"CodeMirror-merge-copy\"));\n var editOriginals = dv.mv.options.allowEditingOriginals;\n copy.title = dv.edit.phrase(editOriginals ? \"Push to left\" : \"Revert chunk\");\n copy.chunk = chunk;\n copy.style.top = (chunk.origTo > chunk.origFrom ? top : dv.edit.heightAtLine(chunk.editFrom, \"local\") - sTopEdit) + \"px\";\n copy.setAttribute(\"role\", \"button\");\n copy.setAttribute(\"tabindex\", \"0\");\n copy.setAttribute(\"aria-label\", copy.title);\n\n if (editOriginals) {\n var topReverse = dv.edit.heightAtLine(chunk.editFrom, \"local\") - sTopEdit;\n var copyReverse = dv.copyButtons.appendChild(elt(\"div\", dv.type == \"right\" ? \"\\u21dd\" : \"\\u21dc\",\n \"CodeMirror-merge-copy-reverse\"));\n copyReverse.title = \"Push to right\";\n copyReverse.chunk = {editFrom: chunk.origFrom, editTo: chunk.origTo,\n origFrom: chunk.editFrom, origTo: chunk.editTo};\n copyReverse.style.top = topReverse + \"px\";\n dv.type == \"right\" ? copyReverse.style.left = \"2px\" : copyReverse.style.right = \"2px\";\n copyReverse.setAttribute(\"role\", \"button\");\n copyReverse.setAttribute(\"tabindex\", \"0\");\n copyReverse.setAttribute(\"aria-label\", copyReverse.title);\n }\n }\n }\n\n function copyChunk(dv, to, from, chunk) {\n if (dv.diffOutOfDate) return;\n var origStart = chunk.origTo > from.lastLine() ? Pos(chunk.origFrom - 1) : Pos(chunk.origFrom, 0)\n var origEnd = Pos(chunk.origTo, 0)\n var editStart = chunk.editTo > to.lastLine() ? Pos(chunk.editFrom - 1) : Pos(chunk.editFrom, 0)\n var editEnd = Pos(chunk.editTo, 0)\n var handler = dv.mv.options.revertChunk\n if (handler)\n handler(dv.mv, from, origStart, origEnd, to, editStart, editEnd)\n else\n to.replaceRange(from.getRange(origStart, origEnd), editStart, editEnd)\n }\n\n // Merge view, containing 0, 1, or 2 diff views.\n\n var MergeView = CodeMirror.MergeView = function(node, options) {\n if (!(this instanceof MergeView)) return new MergeView(node, options);\n\n this.options = options;\n var origLeft = options.origLeft, origRight = options.origRight == null ? options.orig : options.origRight;\n\n var hasLeft = origLeft != null, hasRight = origRight != null;\n var panes = 1 + (hasLeft ? 1 : 0) + (hasRight ? 1 : 0);\n var wrap = [], left = this.left = null, right = this.right = null;\n var self = this;\n\n if (hasLeft) {\n left = this.left = new DiffView(this, \"left\");\n var leftPane = elt(\"div\", null, \"CodeMirror-merge-pane CodeMirror-merge-left\");\n wrap.push(leftPane);\n wrap.push(buildGap(left));\n }\n\n var editPane = elt(\"div\", null, \"CodeMirror-merge-pane CodeMirror-merge-editor\");\n wrap.push(editPane);\n\n if (hasRight) {\n right = this.right = new DiffView(this, \"right\");\n wrap.push(buildGap(right));\n var rightPane = elt(\"div\", null, \"CodeMirror-merge-pane CodeMirror-merge-right\");\n wrap.push(rightPane);\n }\n\n (hasRight ? rightPane : editPane).className += \" CodeMirror-merge-pane-rightmost\";\n\n wrap.push(elt(\"div\", null, null, \"height: 0; clear: both;\"));\n\n var wrapElt = this.wrap = node.appendChild(elt(\"div\", wrap, \"CodeMirror-merge CodeMirror-merge-\" + panes + \"pane\"));\n this.edit = CodeMirror(editPane, copyObj(options));\n\n if (left) left.init(leftPane, origLeft, options);\n if (right) right.init(rightPane, origRight, options);\n if (options.collapseIdentical)\n this.editor().operation(function() {\n collapseIdenticalStretches(self, options.collapseIdentical);\n });\n if (options.connect == \"align\") {\n this.aligners = [];\n alignChunks(this.left || this.right, true);\n }\n if (left) left.registerEvents(right)\n if (right) right.registerEvents(left)\n\n\n var onResize = function() {\n if (left) makeConnections(left);\n if (right) makeConnections(right);\n };\n CodeMirror.on(window, \"resize\", onResize);\n var resizeInterval = setInterval(function() {\n for (var p = wrapElt.parentNode; p && p != document.body; p = p.parentNode) {}\n if (!p) { clearInterval(resizeInterval); CodeMirror.off(window, \"resize\", onResize); }\n }, 5000);\n };\n\n function buildGap(dv) {\n var lock = dv.lockButton = elt(\"div\", null, \"CodeMirror-merge-scrolllock\");\n lock.setAttribute(\"role\", \"button\");\n lock.setAttribute(\"tabindex\", \"0\");\n var lockWrap = elt(\"div\", [lock], \"CodeMirror-merge-scrolllock-wrap\");\n CodeMirror.on(lock, \"click\", function() { setScrollLock(dv, !dv.lockScroll); });\n CodeMirror.on(lock, \"keyup\", function(e) { e.key === \"Enter\" && setScrollLock(dv, !dv.lockScroll); });\n var gapElts = [lockWrap];\n if (dv.mv.options.revertButtons !== false) {\n dv.copyButtons = elt(\"div\", null, \"CodeMirror-merge-copybuttons-\" + dv.type);\n function copyButtons(e) {\n var node = e.target || e.srcElement;\n if (!node.chunk) return;\n if (node.className == \"CodeMirror-merge-copy-reverse\") {\n copyChunk(dv, dv.orig, dv.edit, node.chunk);\n return;\n }\n copyChunk(dv, dv.edit, dv.orig, node.chunk);\n }\n CodeMirror.on(dv.copyButtons, \"click\", copyButtons);\n CodeMirror.on(dv.copyButtons, \"keyup\", function(e) { e.key === \"Enter\" && copyButtons(e); });\n gapElts.unshift(dv.copyButtons);\n }\n if (dv.mv.options.connect != \"align\") {\n var svg = document.createElementNS && document.createElementNS(svgNS, \"svg\");\n if (svg && !svg.createSVGRect) svg = null;\n dv.svg = svg;\n if (svg) gapElts.push(svg);\n }\n\n return dv.gap = elt(\"div\", gapElts, \"CodeMirror-merge-gap\");\n }\n\n MergeView.prototype = {\n constructor: MergeView,\n editor: function() { return this.edit; },\n rightOriginal: function() { return this.right && this.right.orig; },\n leftOriginal: function() { return this.left && this.left.orig; },\n setShowDifferences: function(val) {\n if (this.right) this.right.setShowDifferences(val);\n if (this.left) this.left.setShowDifferences(val);\n },\n rightChunks: function() {\n if (this.right) { ensureDiff(this.right); return this.right.chunks; }\n },\n leftChunks: function() {\n if (this.left) { ensureDiff(this.left); return this.left.chunks; }\n }\n };\n\n function asString(obj) {\n if (typeof obj == \"string\") return obj;\n else return obj.getValue();\n }\n\n // Operations on diffs\n var dmp;\n function getDiff(a, b, ignoreWhitespace) {\n if (!dmp) dmp = new diff_match_patch();\n\n var diff = dmp.diff_main(a, b);\n // The library sometimes leaves in empty parts, which confuse the algorithm\n for (var i = 0; i < diff.length; ++i) {\n var part = diff[i];\n if (ignoreWhitespace ? !/[^ \\t]/.test(part[1]) : !part[1]) {\n diff.splice(i--, 1);\n } else if (i && diff[i - 1][0] == part[0]) {\n diff.splice(i--, 1);\n diff[i][1] += part[1];\n }\n }\n return diff;\n }\n\n function getChunks(diff) {\n var chunks = [];\n if (!diff.length) return chunks;\n var startEdit = 0, startOrig = 0;\n var edit = Pos(0, 0), orig = Pos(0, 0);\n for (var i = 0; i < diff.length; ++i) {\n var part = diff[i], tp = part[0];\n if (tp == DIFF_EQUAL) {\n var startOff = !startOfLineClean(diff, i) || edit.line < startEdit || orig.line < startOrig ? 1 : 0;\n var cleanFromEdit = edit.line + startOff, cleanFromOrig = orig.line + startOff;\n moveOver(edit, part[1], null, orig);\n var endOff = endOfLineClean(diff, i) ? 1 : 0;\n var cleanToEdit = edit.line + endOff, cleanToOrig = orig.line + endOff;\n if (cleanToEdit > cleanFromEdit) {\n if (i) chunks.push({origFrom: startOrig, origTo: cleanFromOrig,\n editFrom: startEdit, editTo: cleanFromEdit});\n startEdit = cleanToEdit; startOrig = cleanToOrig;\n }\n } else {\n moveOver(tp == DIFF_INSERT ? edit : orig, part[1]);\n }\n }\n if (startEdit <= edit.line || startOrig <= orig.line)\n chunks.push({origFrom: startOrig, origTo: orig.line + 1,\n editFrom: startEdit, editTo: edit.line + 1});\n return chunks;\n }\n\n function endOfLineClean(diff, i) {\n if (i == diff.length - 1) return true;\n var next = diff[i + 1][1];\n if ((next.length == 1 && i < diff.length - 2) || next.charCodeAt(0) != 10) return false;\n if (i == diff.length - 2) return true;\n next = diff[i + 2][1];\n return (next.length > 1 || i == diff.length - 3) && next.charCodeAt(0) == 10;\n }\n\n function startOfLineClean(diff, i) {\n if (i == 0) return true;\n var last = diff[i - 1][1];\n if (last.charCodeAt(last.length - 1) != 10) return false;\n if (i == 1) return true;\n last = diff[i - 2][1];\n return last.charCodeAt(last.length - 1) == 10;\n }\n\n function chunkBoundariesAround(chunks, n, nInEdit) {\n var beforeE, afterE, beforeO, afterO;\n for (var i = 0; i < chunks.length; i++) {\n var chunk = chunks[i];\n var fromLocal = nInEdit ? chunk.editFrom : chunk.origFrom;\n var toLocal = nInEdit ? chunk.editTo : chunk.origTo;\n if (afterE == null) {\n if (fromLocal > n) { afterE = chunk.editFrom; afterO = chunk.origFrom; }\n else if (toLocal > n) { afterE = chunk.editTo; afterO = chunk.origTo; }\n }\n if (toLocal <= n) { beforeE = chunk.editTo; beforeO = chunk.origTo; }\n else if (fromLocal <= n) { beforeE = chunk.editFrom; beforeO = chunk.origFrom; }\n }\n return {edit: {before: beforeE, after: afterE}, orig: {before: beforeO, after: afterO}};\n }\n\n function collapseSingle(cm, from, to) {\n cm.addLineClass(from, \"wrap\", \"CodeMirror-merge-collapsed-line\");\n var widget = document.createElement(\"span\");\n widget.className = \"CodeMirror-merge-collapsed-widget\";\n widget.title = cm.phrase(\"Identical text collapsed. Click to expand.\");\n var mark = cm.markText(Pos(from, 0), Pos(to - 1), {\n inclusiveLeft: true,\n inclusiveRight: true,\n replacedWith: widget,\n clearOnEnter: true\n });\n function clear() {\n mark.clear();\n cm.removeLineClass(from, \"wrap\", \"CodeMirror-merge-collapsed-line\");\n }\n if (mark.explicitlyCleared) clear();\n CodeMirror.on(widget, \"click\", clear);\n mark.on(\"clear\", clear);\n CodeMirror.on(widget, \"click\", clear);\n return {mark: mark, clear: clear};\n }\n\n function collapseStretch(size, editors) {\n var marks = [];\n function clear() {\n for (var i = 0; i < marks.length; i++) marks[i].clear();\n }\n for (var i = 0; i < editors.length; i++) {\n var editor = editors[i];\n var mark = collapseSingle(editor.cm, editor.line, editor.line + size);\n marks.push(mark);\n mark.mark.on(\"clear\", clear);\n }\n return marks[0].mark;\n }\n\n function unclearNearChunks(dv, margin, off, clear) {\n for (var i = 0; i < dv.chunks.length; i++) {\n var chunk = dv.chunks[i];\n for (var l = chunk.editFrom - margin; l < chunk.editTo + margin; l++) {\n var pos = l + off;\n if (pos >= 0 && pos < clear.length) clear[pos] = false;\n }\n }\n }\n\n function collapseIdenticalStretches(mv, margin) {\n if (typeof margin != \"number\") margin = 2;\n var clear = [], edit = mv.editor(), off = edit.firstLine();\n for (var l = off, e = edit.lastLine(); l <= e; l++) clear.push(true);\n if (mv.left) unclearNearChunks(mv.left, margin, off, clear);\n if (mv.right) unclearNearChunks(mv.right, margin, off, clear);\n\n for (var i = 0; i < clear.length; i++) {\n if (clear[i]) {\n var line = i + off;\n for (var size = 1; i < clear.length - 1 && clear[i + 1]; i++, size++) {}\n if (size > margin) {\n var editors = [{line: line, cm: edit}];\n if (mv.left) editors.push({line: getMatchingOrigLine(line, mv.left.chunks), cm: mv.left.orig});\n if (mv.right) editors.push({line: getMatchingOrigLine(line, mv.right.chunks), cm: mv.right.orig});\n var mark = collapseStretch(size, editors);\n if (mv.options.onCollapse) mv.options.onCollapse(mv, line, size, mark);\n }\n }\n }\n }\n\n // General utilities\n\n function elt(tag, content, className, style) {\n var e = document.createElement(tag);\n if (className) e.className = className;\n if (style) e.style.cssText = style;\n if (typeof content == \"string\") e.appendChild(document.createTextNode(content));\n else if (content) for (var i = 0; i < content.length; ++i) e.appendChild(content[i]);\n return e;\n }\n\n function clear(node) {\n for (var count = node.childNodes.length; count > 0; --count)\n node.removeChild(node.firstChild);\n }\n\n function attrs(elt) {\n for (var i = 1; i < arguments.length; i += 2)\n elt.setAttribute(arguments[i], arguments[i+1]);\n }\n\n function copyObj(obj, target) {\n if (!target) target = {};\n for (var prop in obj) if (obj.hasOwnProperty(prop)) target[prop] = obj[prop];\n return target;\n }\n\n function moveOver(pos, str, copy, other) {\n var out = copy ? Pos(pos.line, pos.ch) : pos, at = 0;\n for (;;) {\n var nl = str.indexOf(\"\\n\", at);\n if (nl == -1) break;\n ++out.line;\n if (other) ++other.line;\n at = nl + 1;\n }\n out.ch = (at ? 0 : out.ch) + (str.length - at);\n if (other) other.ch = (at ? 0 : other.ch) + (str.length - at);\n return out;\n }\n\n // Tracks collapsed markers and line widgets, in order to be able to\n // accurately align the content of two editors.\n\n var F_WIDGET = 1, F_WIDGET_BELOW = 2, F_MARKER = 4\n\n function TrackAlignable(cm) {\n this.cm = cm\n this.alignable = []\n this.height = cm.doc.height\n var self = this\n cm.on(\"markerAdded\", function(_, marker) {\n if (!marker.collapsed) return\n var found = marker.find(1)\n if (found != null) self.set(found.line, F_MARKER)\n })\n cm.on(\"markerCleared\", function(_, marker, _min, max) {\n if (max != null && marker.collapsed)\n self.check(max, F_MARKER, self.hasMarker)\n })\n cm.on(\"markerChanged\", this.signal.bind(this))\n cm.on(\"lineWidgetAdded\", function(_, widget, lineNo) {\n if (widget.mergeSpacer) return\n if (widget.above) self.set(lineNo - 1, F_WIDGET_BELOW)\n else self.set(lineNo, F_WIDGET)\n })\n cm.on(\"lineWidgetCleared\", function(_, widget, lineNo) {\n if (widget.mergeSpacer) return\n if (widget.above) self.check(lineNo - 1, F_WIDGET_BELOW, self.hasWidgetBelow)\n else self.check(lineNo, F_WIDGET, self.hasWidget)\n })\n cm.on(\"lineWidgetChanged\", this.signal.bind(this))\n cm.on(\"change\", function(_, change) {\n var start = change.from.line, nBefore = change.to.line - change.from.line\n var nAfter = change.text.length - 1, end = start + nAfter\n if (nBefore || nAfter) self.map(start, nBefore, nAfter)\n self.check(end, F_MARKER, self.hasMarker)\n if (nBefore || nAfter) self.check(change.from.line, F_MARKER, self.hasMarker)\n })\n cm.on(\"viewportChange\", function() {\n if (self.cm.doc.height != self.height) self.signal()\n })\n }\n\n TrackAlignable.prototype = {\n signal: function() {\n CodeMirror.signal(this, \"realign\")\n this.height = this.cm.doc.height\n },\n\n set: function(n, flags) {\n var pos = -1\n for (; pos < this.alignable.length; pos += 2) {\n var diff = this.alignable[pos] - n\n if (diff == 0) {\n if ((this.alignable[pos + 1] & flags) == flags) return\n this.alignable[pos + 1] |= flags\n this.signal()\n return\n }\n if (diff > 0) break\n }\n this.signal()\n this.alignable.splice(pos, 0, n, flags)\n },\n\n find: function(n) {\n for (var i = 0; i < this.alignable.length; i += 2)\n if (this.alignable[i] == n) return i\n return -1\n },\n\n check: function(n, flag, pred) {\n var found = this.find(n)\n if (found == -1 || !(this.alignable[found + 1] & flag)) return\n if (!pred.call(this, n)) {\n this.signal()\n var flags = this.alignable[found + 1] & ~flag\n if (flags) this.alignable[found + 1] = flags\n else this.alignable.splice(found, 2)\n }\n },\n\n hasMarker: function(n) {\n var handle = this.cm.getLineHandle(n)\n if (handle.markedSpans) for (var i = 0; i < handle.markedSpans.length; i++)\n if (handle.markedSpans[i].marker.collapsed && handle.markedSpans[i].to != null)\n return true\n return false\n },\n\n hasWidget: function(n) {\n var handle = this.cm.getLineHandle(n)\n if (handle.widgets) for (var i = 0; i < handle.widgets.length; i++)\n if (!handle.widgets[i].above && !handle.widgets[i].mergeSpacer) return true\n return false\n },\n\n hasWidgetBelow: function(n) {\n if (n == this.cm.lastLine()) return false\n var handle = this.cm.getLineHandle(n + 1)\n if (handle.widgets) for (var i = 0; i < handle.widgets.length; i++)\n if (handle.widgets[i].above && !handle.widgets[i].mergeSpacer) return true\n return false\n },\n\n map: function(from, nBefore, nAfter) {\n var diff = nAfter - nBefore, to = from + nBefore, widgetFrom = -1, widgetTo = -1\n for (var i = 0; i < this.alignable.length; i += 2) {\n var n = this.alignable[i]\n if (n == from && (this.alignable[i + 1] & F_WIDGET_BELOW)) widgetFrom = i\n if (n == to && (this.alignable[i + 1] & F_WIDGET_BELOW)) widgetTo = i\n if (n <= from) continue\n else if (n < to) this.alignable.splice(i--, 2)\n else this.alignable[i] += diff\n }\n if (widgetFrom > -1) {\n var flags = this.alignable[widgetFrom + 1]\n if (flags == F_WIDGET_BELOW) this.alignable.splice(widgetFrom, 2)\n else this.alignable[widgetFrom + 1] = flags & ~F_WIDGET_BELOW\n }\n if (widgetTo > -1 && nAfter)\n this.set(from + nAfter, F_WIDGET_BELOW)\n }\n }\n\n function posMin(a, b) { return (a.line - b.line || a.ch - b.ch) < 0 ? a : b; }\n function posMax(a, b) { return (a.line - b.line || a.ch - b.ch) > 0 ? a : b; }\n function posEq(a, b) { return a.line == b.line && a.ch == b.ch; }\n\n function findPrevDiff(chunks, start, isOrig) {\n for (var i = chunks.length - 1; i >= 0; i--) {\n var chunk = chunks[i];\n var to = (isOrig ? chunk.origTo : chunk.editTo) - 1;\n if (to < start) return to;\n }\n }\n\n function findNextDiff(chunks, start, isOrig) {\n for (var i = 0; i < chunks.length; i++) {\n var chunk = chunks[i];\n var from = (isOrig ? chunk.origFrom : chunk.editFrom);\n if (from > start) return from;\n }\n }\n\n function goNearbyDiff(cm, dir) {\n var found = null, views = cm.state.diffViews, line = cm.getCursor().line;\n if (views) for (var i = 0; i < views.length; i++) {\n var dv = views[i], isOrig = cm == dv.orig;\n ensureDiff(dv);\n var pos = dir < 0 ? findPrevDiff(dv.chunks, line, isOrig) : findNextDiff(dv.chunks, line, isOrig);\n if (pos != null && (found == null || (dir < 0 ? pos > found : pos < found)))\n found = pos;\n }\n if (found != null)\n cm.setCursor(found, 0);\n else\n return CodeMirror.Pass;\n }\n\n CodeMirror.commands.goNextDiff = function(cm) {\n return goNearbyDiff(cm, 1);\n };\n CodeMirror.commands.goPrevDiff = function(cm) {\n return goNearbyDiff(cm, -1);\n };\n});\n","import { Node, mergeAttributes, textblockTypeInputRule } from '@tiptap/core';\n\nconst Heading = Node.create({\r\n name: 'heading',\r\n addOptions() {\r\n return {\r\n levels: [1, 2, 3, 4, 5, 6],\r\n HTMLAttributes: {},\r\n };\r\n },\r\n content: 'inline*',\r\n group: 'block',\r\n defining: true,\r\n addAttributes() {\r\n return {\r\n level: {\r\n default: 1,\r\n rendered: false,\r\n },\r\n };\r\n },\r\n parseHTML() {\r\n return this.options.levels\r\n .map((level) => ({\r\n tag: `h${level}`,\r\n attrs: { level },\r\n }));\r\n },\r\n renderHTML({ node, HTMLAttributes }) {\r\n const hasLevel = this.options.levels.includes(node.attrs.level);\r\n const level = hasLevel\r\n ? node.attrs.level\r\n : this.options.levels[0];\r\n return [`h${level}`, mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];\r\n },\r\n addCommands() {\r\n return {\r\n setHeading: attributes => ({ commands }) => {\r\n if (!this.options.levels.includes(attributes.level)) {\r\n return false;\r\n }\r\n return commands.setNode(this.name, attributes);\r\n },\r\n toggleHeading: attributes => ({ commands }) => {\r\n if (!this.options.levels.includes(attributes.level)) {\r\n return false;\r\n }\r\n return commands.toggleNode(this.name, 'paragraph', attributes);\r\n },\r\n };\r\n },\r\n addKeyboardShortcuts() {\r\n return this.options.levels.reduce((items, level) => ({\r\n ...items,\r\n ...{\r\n [`Mod-Alt-${level}`]: () => this.editor.commands.toggleHeading({ level }),\r\n },\r\n }), {});\r\n },\r\n addInputRules() {\r\n return this.options.levels.map(level => {\r\n return textblockTypeInputRule({\r\n find: new RegExp(`^(#{1,${level}})\\\\s$`),\r\n type: this.type,\r\n getAttributes: {\r\n level,\r\n },\r\n });\r\n });\r\n },\r\n});\n\nexport { Heading, Heading as default };\n//# sourceMappingURL=tiptap-extension-heading.esm.js.map\n"],"sourceRoot":""}