{"mappings":"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","names":["globalKey","prismGlobal","plainTextGrammar","rest","tokenize","resolve","id","languages","tokenizeText","text","grammar","withoutTokenizer","startNode","restGrammar","array","i","matchGrammar","escapeHtml","string","pattern","replacement","closingTag","openingTags","closingTags","highlightTokens","tokens","str","token","stringify","Token","type","alias","content","prevOpening","prevClosing","opening","contentStr","matchGrammar","text","grammar","startNode","startPos","rematch","token","j","p","patternObj","patterns","pattern","inside","resolve","lookbehind","greedy","alias","currentNode","pos","str","removeCount","match","Token","lookbehindLength","from","matchStr","to","k","after","reach","newToken","tokenizeText","next","i","nestedRematch","type","content","matchedStr","createEditor","container","options","extensions","language","prevLines","activeLine","value","activeLineNumber","focused","handleSelectionChange","tokens","readOnly","lineCount","scrollContainer","editorTemplate","wrapper","lines","overlays","textarea","currentOptions","currentExtensions","listeners","setOptions","isNewVal","isNewLang","updateClassName","updateExtensions","update","tokenizeText","languages","dispatchEvent","newLines","highlightTokens","start","end2","end1","insertStart","i","newHTML","dispatchSelection","newExtensions","extension","self","end","getInputSelection","keyCommandMap","inputCommandMap","name","args","handler","force","selection","newLine","numLines","addListener","e","preventDefault","selectionChange","getElement","doc","templateEl","createTemplate","html","node","addListener","target","type","listener","options","getElement","el","numLines","str","start","end","count","languageMap","editorTemplate","preventDefault","selectionChange","doc","addListener","addStyles","shadow","styles","id","style","doc","minimalEditor","container","options","onLoad","el","getElement","editor","createEditor","_","theme","loadTheme","remove","removed","basicEditor","mod","readonlyEditor"],"sources":["../esm/npm/@cyfung1031/prism-code-editor@5.2.0-cdn-esm.2/node_modules/@cyfung1031/prism-code-editor/src/prism/core.js","../esm/npm/@cyfung1031/prism-code-editor@5.2.0-cdn-esm.2/node_modules/@cyfung1031/prism-code-editor/src/core.ts","../esm/npm/@cyfung1031/prism-code-editor@5.2.0-cdn-esm.2/node_modules/@cyfung1031/prism-code-editor/src/setups/index.ts"],"sourcesContent":["// Slimmed down Prism core with most high level functions removed\n\nvar globalKey = Symbol.for(\"prism-code-editor.prism\");\nvar prismGlobal = globalThis[globalKey] || (globalThis[globalKey] = {});\n\nvar plainTextGrammar = prismGlobal.plainTextGrammar || (prismGlobal.plainTextGrammar = {});\nvar rest = prismGlobal.rest || (prismGlobal.rest = Symbol.for(\"prism-code-editor.prism.rest\"));\nvar tokenize =\n\tprismGlobal.tokenize || (prismGlobal.tokenize = Symbol.for(\"prism-code-editor.prism.tokenize\"));\n\n/** @param {*} id */\nvar resolve = id =\u003e typeof id == 'string' ? languages[id] : id;\n\n/** @type {Record\u003cstring, any\u003e} */\nvar languages =\n\tprismGlobal.languages ||\n\t(prismGlobal.languages = {\n\t\tplain: plainTextGrammar,\n\t\tplaintext: plainTextGrammar,\n\t\ttext: plainTextGrammar,\n\t\ttxt: plainTextGrammar,\n\t});\n\n/**\n * @param {string} text\n * @param {any} grammar\n */\nvar tokenizeText = (text, grammar) =\u003e (grammar[tokenize] || withoutTokenizer)(text, grammar);\n\n/**\n * @param {string} text\n * @param {any} grammar\n */\nvar withoutTokenizer = (text, grammar) =\u003e {\n\t/** @type {LinkedListNode} */\n\tvar startNode = [text];\n\tvar restGrammar;\n\t/** @type {(string | Token)[]} */\n\tvar array = [], i = 0;\n\twhile (restGrammar = resolve(grammar[rest])) {\n\t\tdelete grammar[rest];\n\t\tObject.assign(grammar, restGrammar);\n\t}\n\n\tmatchGrammar(text, grammar, startNode, 0);\n\n\twhile (array[i++] = startNode[0], startNode = startNode[1]);\n\treturn array;\n};\n\n/**\n * @param {string} string\n * @param {RegExp} pattern\n * @param {string} replacement\n */\nvar escapeHtml = (string, pattern, replacement) =\u003e {\n\treturn string.replace(/\u0026/g, '\u0026amp;').replace(pattern, replacement);\n};\n\nvar closingTag = '\u003c/span\u003e';\nvar openingTags = '';\nvar closingTags = '';\n\n/** @param {(string | Token)[]} tokens */\nvar highlightTokens = tokens =\u003e {\n\tvar str = '', token, i = 0;\n\twhile (token = tokens[i++]) str += stringify(token);\n\treturn str;\n};\n\n/**\n * @param {string | Token | (string | Token)[]} token\n * @returns {string}\n */\nvar stringify = token =\u003e {\n\tif (token instanceof Token) {\n\t\tvar { type, alias, content } = token;\n\t\tvar prevOpening = openingTags;\n\t\tvar prevClosing = closingTags;\n\t\tvar opening = `\u003cspan class=\"token ${\n\t\t\ttype + (alias ? ' ' + alias : '') +\n\t\t\t(type == 'keyword' \u0026\u0026 typeof content == 'string' ? ' keyword-' + content : '')\n\t\t}\"\u003e`;\n\n\t\tclosingTags += closingTag;\n\t\topeningTags += opening;\n\t\tvar contentStr = stringify(content);\n\t\topeningTags = prevOpening;\n\t\tclosingTags = prevClosing;\n\t\treturn opening + contentStr + closingTag;\n\t}\n\n\tif (typeof token != 'string') return highlightTokens(token);\n\n\ttoken = escapeHtml(token, /\u003c/g, '\u0026lt;');\n\tif (closingTags \u0026\u0026 token.includes('\\n')) {\n\t\treturn token.replace(/\\n/g, closingTags + '\\n' + openingTags);\n\t}\n\treturn token;\n};\n\n/**\n * @param {string} text\n * @param {*} ref\n */\nvar highlightText = (text, ref) =\u003e highlightTokens(tokenizeText(text, resolve(ref)));\n\n/**\n * @param {string} text\n * @param {any} grammar\n * @param {LinkedListNode} startNode\n * @param {number} startPos\n * @param {[string, number, number]} [rematch]\n *\n * @typedef {[string | Token, LinkedListNode?]} LinkedListNode\n */\nvar matchGrammar = (text, grammar, startNode, startPos, rematch) =\u003e {\n\tfor (var token in grammar) {\n\t\tif (grammar[token]) for (var j = 0, p = grammar[token], patternObj, patterns = Array.isArray(p) ? p : [p]; patternObj = patterns[j]; j++) {\n\t\t\tif (rematch \u0026\u0026 rematch[0] == token \u0026\u0026 rematch[1] == j) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/** @type {RegExp} */\n\t\t\tvar pattern = patternObj.pattern || patternObj;\n\t\t\tvar inside = resolve(patternObj.inside);\n\t\t\tvar lookbehind = patternObj.lookbehind;\n\t\t\tvar greedy = pattern.global;\n\t\t\tvar alias = patternObj.alias;\n\n\t\t\tfor ( // iterate the token list and keep track of the current token/string position\n\t\t\t\tvar currentNode = startNode, pos = startPos;\n\t\t\t\tcurrentNode \u0026\u0026 (!rematch || pos \u003c rematch[2]);\n\t\t\t\tpos += currentNode[0].length, currentNode = currentNode[1]\n\t\t\t) {\n\t\t\t\tvar str = currentNode[0];\n\t\t\t\tvar removeCount = 0;\n\t\t\t\tvar match;\n\n\t\t\t\tif (str instanceof Token) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tpattern.lastIndex = greedy ? pos : 0;\n\t\t\t\tmatch = pattern.exec(greedy ? text : str);\n\n\t\t\t\tif (!match \u0026\u0026 greedy) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tif (!(match \u0026\u0026 match[0])) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// change the match to remove the text matched by the Prism lookbehind group\n\t\t\t\tvar lookbehindLength = lookbehind \u0026\u0026 match[1] ? match[1].length : 0;\n\t\t\t\tvar from = match.index + lookbehindLength;\n\t\t\t\tvar matchStr = match[0].slice(lookbehindLength);\n\t\t\t\tvar to = from + matchStr.length;\n\t\t\t\tvar k, p;\n\n\t\t\t\tif (greedy) {\n\t\t\t\t\t// find the node that contains the match\n\t\t\t\t\tfor (\n\t\t\t\t\t\t;\n\t\t\t\t\t\tp = pos + currentNode[0].length, from \u003e= p;\n\t\t\t\t\t\tcurrentNode = currentNode[1], pos = p\n\t\t\t\t\t);\n\n\t\t\t\t\t// the current node is a Token, then the match starts inside another Token, which is invalid\n\t\t\t\t\tif (currentNode[0] instanceof Token) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\t// find the last node which is affected by this match\n\t\t\t\t\tfor (\n\t\t\t\t\t\tk = currentNode, p = pos;\n\t\t\t\t\t\t(p += k[0].length) \u003c to;\n\t\t\t\t\t\tk = k[1], removeCount++\n\t\t\t\t\t);\n\n\t\t\t\t\t// replace with the new match\n\t\t\t\t\tstr = text.slice(pos, p);\n\t\t\t\t\tfrom -= pos;\n\t\t\t\t\tto -= pos;\n\t\t\t\t}\n\n\t\t\t\tvar after = str.slice(to);\n\t\t\t\tvar reach = pos + str.length;\n\t\t\t\tvar newToken = new Token(token, inside ? tokenizeText(matchStr, inside) : matchStr, matchStr, alias);\n\t\t\t\tvar next = currentNode, i = 0;\n\t\t\t\tvar nestedRematch;\n\n\t\t\t\twhile (next = next[1], i++ \u003c removeCount);\n\n\t\t\t\tif (after) {\n\t\t\t\t\tif (!next || next[0] instanceof Token) next = [after, next];\n\t\t\t\t\telse next[0] = after + next[0];\n\t\t\t\t};\n\n\t\t\t\tpos += from;\n\t\t\t\tcurrentNode[0] = from ? str.slice(0, from) : newToken;\n\n\t\t\t\tif (from) currentNode = currentNode[1] = [newToken, next];\n\t\t\t\telse currentNode[1] = next;\n\n\t\t\t\tif (removeCount) {\n\t\t\t\t\t// at least one Token object was removed, so we have to do some rematching\n\t\t\t\t\t// this can only happen if the current pattern is greedy\n\n\t\t\t\t\tmatchGrammar(text, grammar, currentNode, pos, nestedRematch = [token, j, reach]);\n\t\t\t\t\treach = nestedRematch[2];\n\t\t\t\t}\n\n\t\t\t\tif (rematch \u0026\u0026 reach \u003e rematch[2]) rematch[2] = reach;\n\t\t\t}\n\t\t}\n\t}\n};\n\n/**\n * Creates a new token.\n *\n * @param {string} type\n * @param {string | any[]} content\n * @param {string} matchedStr\n * @param {string} alias\n * @class\n */\nfunction Token(type, content, matchedStr, alias) {\n\tthis.type = type;\n\tthis.content = content;\n\tthis.alias = alias;\n\tthis.length = matchedStr.length;\n}\n\nexport {\n\trest,\n\ttokenize,\n\tToken,\n\tlanguages,\n\ttokenizeText,\n\twithoutTokenizer,\n\tresolve,\n\tescapeHtml,\n\thighlightTokens,\n\thighlightText\n};\n","import type {\r\n\tEditorOptions,\r\n\tPrismEditor,\r\n\tKeyCommandCallback,\r\n\tLanguage,\r\n\tInputCommandCallback,\r\n\tEditorEventMap,\r\n\tInputSelection,\r\n\tEditorExtension,\r\n} from \"./types.js\"\r\nimport { highlightTokens, languages, tokenizeText, TokenStream } from \"./prism/index.js\"\r\n\r\n/**\r\n * Creates a code editor using the specified container and options.\r\n * @param container Element to append the editor to or a selector.\r\n * This can also be a `ShadowRoot` or `DocumentFragment` for example.\r\n * If omitted, you must manually append `editor.container` to the DOM.\r\n * @param options Options the editor is initialized with.\r\n * If omitted, the editor won't function until you call `editor.setOptions`.\r\n * @param extensions Extensions added before the first render. You can still add extensions later.\r\n * @returns Object to interact with the created editor.\r\n */\r\nconst createEditor = \u003cT extends {} = {}\u003e(\r\n\tcontainer?: ParentNode | string | null,\r\n\toptions?: (Partial\u003cEditorOptions\u003cT\u003e\u003e \u0026 Omit\u003cT, keyof EditorOptions\u003e) | null,\r\n\t...extensions: EditorExtension\u003cT\u003e[]\r\n): PrismEditor\u003cT\u003e =\u003e {\r\n\tlet language: string\r\n\tlet prevLines: string[] = []\r\n\tlet activeLine: HTMLDivElement\r\n\tlet value = \"\"\r\n\tlet activeLineNumber: number\r\n\tlet focused = false\r\n\tlet handleSelectionChange = true\r\n\tlet tokens: TokenStream = []\r\n\tlet readOnly: boolean\r\n\tlet lineCount = 0\r\n\r\n\tconst scrollContainer = editorTemplate()\r\n\tconst wrapper = \u003cHTMLDivElement\u003escrollContainer.firstChild\r\n\tconst lines = \u003cHTMLCollectionOf\u003cHTMLDivElement\u003e\u003ewrapper.children\r\n\tconst overlays = lines[0]\r\n\tconst textarea = \u003cHTMLTextAreaElement\u003eoverlays.firstChild\r\n\tconst currentOptions = { language: \"text\", value } as EditorOptions \u0026 T\r\n\tconst currentExtensions = new Set(extensions)\r\n\tconst listeners: {\r\n\t\t[P in keyof EditorEventMap]?: Set\u003cEditorEventMap\u003cT\u003e[P]\u003e\r\n\t} = {}\r\n\r\n\tconst setOptions = (options: Partial\u003cEditorOptions\u003e \u0026 Partial\u003cOmit\u003cT, keyof EditorOptions\u003e\u003e) =\u003e {\r\n\t\tObject.assign(currentOptions, options)\r\n\t\tlet isNewVal = value != (value = options.value ?? value)\r\n\t\tlet isNewLang = language != (language = currentOptions.language)\r\n\r\n\t\treadOnly = !!currentOptions.readOnly\r\n\t\tscrollContainer.style.tabSize = \u003cany\u003ecurrentOptions.tabSize || 2\r\n\t\ttextarea.inputMode = readOnly ? \"none\" : \"\"\r\n\t\ttextarea.setAttribute(\"aria-readonly\", \u003cany\u003ereadOnly)\r\n\t\tupdateClassName()\r\n\t\tupdateExtensions()\r\n\r\n\t\tif (isNewVal) {\r\n\t\t\tif (!focused) textarea.remove()\r\n\t\t\ttextarea.value = value\r\n\t\t\ttextarea.selectionEnd = 0\r\n\t\t\tif (!focused) overlays.prepend(textarea)\r\n\t\t}\r\n\r\n\t\tif (isNewVal || isNewLang) {\r\n\t\t\tupdate()\r\n\t\t}\r\n\t}\r\n\r\n\tconst update = () =\u003e {\r\n\t\ttokens = tokenizeText((value = textarea.value), languages[language] || {})\r\n\t\tdispatchEvent(\"tokenize\", tokens, language, value)\r\n\r\n\t\tlet newLines = highlightTokens(tokens).split(\"\\n\")\r\n\t\tlet start = 0\r\n\t\tlet end2 = lineCount\r\n\t\tlet end1 = (lineCount = newLines.length)\r\n\r\n\t\twhile (newLines[start] == prevLines[start] \u0026\u0026 start \u003c end1) ++start\r\n\t\twhile (end1 \u0026\u0026 newLines[--end1] == prevLines[--end2]);\r\n\r\n\t\tif (start == end1 \u0026\u0026 start == end2) lines[start + 1].innerHTML = newLines[start] + \"\\n\"\r\n\t\telse {\r\n\t\t\tlet insertStart = end2 \u003c start ? end2 : start - 1\r\n\t\t\tlet i = insertStart\r\n\t\t\tlet newHTML = \"\"\r\n\r\n\t\t\twhile (i \u003c end1) newHTML += `\u003cdiv class=pce-line aria-hidden=true\u003e${newLines[++i]}\\n\u003c/div\u003e`\r\n\t\t\tfor (i = end1 \u003c start ? end1 : start - 1; i \u003c end2; i++) lines[start + 1].remove()\r\n\t\t\tif (newHTML) lines[insertStart + 1].insertAdjacentHTML(\"afterend\", newHTML)\r\n\t\t\tscrollContainer.style.setProperty(\r\n\t\t\t\t\"--number-width\",\r\n\t\t\t\t(0 | Math.log10(lineCount)) + 1 + \".001ch\",\r\n\t\t\t)\r\n\t\t}\r\n\r\n\t\tdispatchEvent(\"update\", value)\r\n\t\tdispatchSelection(true)\r\n\t\tif (handleSelectionChange) setTimeout(setTimeout, 0, () =\u003e (handleSelectionChange = true))\r\n\r\n\t\tprevLines = newLines\r\n\t\thandleSelectionChange = false\r\n\t}\r\n\r\n\tconst updateExtensions = (newExtensions?: EditorExtension\u003cT\u003e[]) =\u003e {\r\n\t\t;(newExtensions || currentExtensions).forEach(extension =\u003e {\r\n\t\t\tif (typeof extension == \"object\") {\r\n\t\t\t\textension.update(self, currentOptions)\r\n\t\t\t\tif (newExtensions) currentExtensions.add(extension)\r\n\t\t\t} else {\r\n\t\t\t\textension(self, currentOptions)\r\n\t\t\t\tif (!newExtensions) currentExtensions.delete(extension)\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\r\n\tconst updateClassName = ([start, end] = getInputSelection()) =\u003e {\r\n\t\tscrollContainer.className = `prism-code-editor language-${language}${\r\n\t\t\tcurrentOptions.lineNumbers == false ? \"\" : \" show-line-numbers\"\r\n\t\t} pce-${currentOptions.wordWrap ? \"\" : \"no\"}wrap${currentOptions.rtl ? \" pce-rtl\" : \"\"} pce-${\r\n\t\t\tstart \u003c end ? \"has\" : \"no\"\r\n\t\t}-selection${focused ? \" pce-focus\" : \"\"}${readOnly ? \" pce-readonly\" : \"\"}${\r\n\t\t\tcurrentOptions.class ? \" \" + currentOptions.class : \"\"\r\n\t\t}`\r\n\t}\r\n\r\n\tconst getInputSelection = (): InputSelection =\u003e [\r\n\t\ttextarea.selectionStart,\r\n\t\ttextarea.selectionEnd,\r\n\t\ttextarea.selectionDirection,\r\n\t]\r\n\r\n\tconst keyCommandMap: Record\u003cstring, KeyCommandCallback | null\u003e = {\r\n\t\tEscape() {\r\n\t\t\ttextarea.blur()\r\n\t\t},\r\n\t}\r\n\r\n\tconst inputCommandMap: Record\u003cstring, InputCommandCallback | null\u003e = {}\r\n\r\n\tconst dispatchEvent = \u003cT extends keyof EditorEventMap\u003e(\r\n\t\tname: T,\r\n\t\t...args: Parameters\u003cEditorEventMap[T]\u003e\r\n\t) =\u003e {\r\n\t\t// @ts-expect-error\r\n\t\tlisteners[name]?.forEach(handler =\u003e handler.apply(self, args))\r\n\t\t// @ts-expect-error\r\n\t\tcurrentOptions[\"on\" + name[0].toUpperCase() + name.slice(1)]?.(...args, self)\r\n\t}\r\n\r\n\tconst dispatchSelection = (force?: boolean) =\u003e {\r\n\t\tif (force || handleSelectionChange) {\r\n\t\t\tconst selection = getInputSelection()\r\n\t\t\tconst newLine =\r\n\t\t\t\tlines[(activeLineNumber = numLines(value, 0, selection[selection[2] \u003c \"f\" ? 0 : 1]))]\r\n\r\n\t\t\tif (newLine != activeLine) {\r\n\t\t\t\tactiveLine?.classList.remove(\"active-line\")\r\n\t\t\t\tnewLine.classList.add(\"active-line\")\r\n\t\t\t\tactiveLine = newLine\r\n\t\t\t}\r\n\t\t\tupdateClassName(selection)\r\n\t\t\tdispatchEvent(\"selectionChange\", selection, value)\r\n\t\t}\r\n\t}\r\n\r\n\tconst self: PrismEditor\u003cT\u003e = {\r\n\t\tcontainer: scrollContainer,\r\n\t\twrapper,\r\n\t\tlines,\r\n\t\ttextarea,\r\n\t\tget activeLine() {\r\n\t\t\treturn activeLineNumber\r\n\t\t},\r\n\t\tget value() {\r\n\t\t\treturn value\r\n\t\t},\r\n\t\toptions: currentOptions,\r\n\t\tget focused() {\r\n\t\t\treturn focused\r\n\t\t},\r\n\t\tget tokens() {\r\n\t\t\treturn tokens\r\n\t\t},\r\n\t\tinputCommandMap,\r\n\t\tkeyCommandMap,\r\n\t\textensions: {},\r\n\t\tsetOptions,\r\n\t\tupdate,\r\n\t\tgetSelection: getInputSelection,\r\n\t\taddExtensions(...extensions) {\r\n\t\t\tupdateExtensions(extensions)\r\n\t\t},\r\n\t\ton: (name, handler) =\u003e {\r\n\t\t\t;(listeners[name] ||= new Set\u003cany\u003e()).add(handler)\r\n\t\t\treturn () =\u003e listeners[name]!.delete(handler)\r\n\t\t},\r\n\t\tremove() {\r\n\t\t\tscrollContainer.remove()\r\n\t\t},\r\n\t}\r\n\r\n\taddListener(textarea, \"keydown\", e =\u003e {\r\n\t\tkeyCommandMap[e.key]?.(e, getInputSelection(), value) \u0026\u0026 preventDefault(e)\r\n\t})\r\n\r\n\taddListener(textarea, \"beforeinput\", e =\u003e {\r\n\t\tif (\r\n\t\t\treadOnly ||\r\n\t\t\t(e.inputType == \"insertText\" \u0026\u0026 inputCommandMap[e.data!]?.(e, getInputSelection(), value))\r\n\t\t)\r\n\t\t\tpreventDefault(e)\r\n\t})\r\n\taddListener(textarea, \"input\", update)\r\n\taddListener(textarea, \"blur\", () =\u003e {\r\n\t\tselectionChange = null\r\n\t\tfocused = false\r\n\t\tupdateClassName()\r\n\t})\r\n\taddListener(textarea, \"focus\", () =\u003e {\r\n\t\tselectionChange = dispatchSelection\r\n\t\tfocused = true\r\n\t\tupdateClassName()\r\n\t})\r\n\t// For browsers that support selectionchange on textareas\r\n\taddListener(textarea, \"selectionchange\", e =\u003e {\r\n\t\tdispatchSelection(!e.isTrusted)\r\n\t\tpreventDefault(e)\r\n\t})\r\n\r\n\tgetElement(container)?.append(scrollContainer)\r\n\toptions \u0026\u0026 setOptions(options)\r\n\treturn self\r\n}\r\n\r\n/**\r\n * Almost identical to {@link createEditor}, but instead of appending the editor to your\r\n * element, the editor replaces it.\r\n *\r\n * The `textContent` of the placeholder will be the code in the editor unless `options.value` is defined.\r\n * @param placeholder Node or selector which will be replaced by the editor.\r\n * @param options Options the editor is initialized with.\r\n * @param extensions Extensions added before the first render. You can still add extensions later.\r\n * @returns Object to interact with the created editor.\r\n */\r\nconst editorFromPlaceholder = \u003cT extends {} = {}\u003e(\r\n\tplaceholder: string | ChildNode,\r\n\toptions: Partial\u003cEditorOptions\u003cT\u003e\u003e \u0026 Omit\u003cT, keyof EditorOptions\u003e,\r\n\t...extensions: EditorExtension\u003cT\u003e[]\r\n) =\u003e {\r\n\tconst el = getElement(placeholder)!\r\n\tconst editor = createEditor\u003cT\u003e(\r\n\t\tnull,\r\n\t\tObject.assign({ value: el.textContent }, options),\r\n\t\t...extensions,\r\n\t)\r\n\tel.replaceWith(editor.container)\r\n\treturn editor\r\n}\r\n\r\n/** Equivalent to `document` in a browser setting, `null` otherwise. */\r\nconst doc = \"u\" \u003e typeof window ? document : null\r\n\r\nconst templateEl = /* @__PURE__ */ doc?.createElement(\"div\")\r\n\r\nconst createTemplate = \u003cT extends Element = HTMLDivElement\u003e(html: string, node?: Node) =\u003e {\r\n\tif (templateEl) {\r\n\t\ttemplateEl.innerHTML = html\r\n\t\tnode = templateEl.firstChild!\r\n\t}\r\n\treturn () =\u003e \u003cT\u003enode!.cloneNode(true)\r\n}\r\n\r\nconst addListener = \u003cT extends keyof HTMLElementEventMap\u003e(\r\n\ttarget: HTMLElement,\r\n\ttype: T,\r\n\tlistener: (this: HTMLElement, ev: HTMLElementEventMap[T]) =\u003e any,\r\n\toptions?: boolean | AddEventListenerOptions,\r\n) =\u003e target.addEventListener(type, listener, options)\r\n\r\nconst getElement = \u003cT extends Node\u003e(el?: T | string | null) =\u003e\r\n\ttypeof el == \"string\" ? doc!.querySelector\u003cHTMLElement\u003e(el) : el\r\n\r\n/**\r\n * Counts number of lines in the string between `start` and `end`.\r\n * If start and end are omitted, the whole string is searched.\r\n */\r\nconst numLines = (str: string, start = 0, end = Infinity) =\u003e {\r\n\tlet count = 1\r\n\tfor (; (start = str.indexOf(\"\\n\", start) + 1) \u0026\u0026 start \u003c= end; count++);\r\n\treturn count\r\n}\r\n\r\n/** Object storing all language specific behavior. */\r\nconst languageMap: Record\u003cstring, Language\u003e =\r\n\t((globalThis as any)[Symbol.for(\"prism-code-editor.languageMap\")] ||= {})\r\n\r\nconst editorTemplate = /* @__PURE__ */ createTemplate(\r\n\t\"\u003cdiv\u003e\u003cdiv class=pce-wrapper\u003e\u003cdiv class=pce-overlays\u003e\u003ctextarea class=pce-textarea spellcheck=false autocapitalize=off autocomplete=off\u003e\",\r\n)\r\n\r\nconst preventDefault = (e: Event) =\u003e {\r\n\te.preventDefault()\r\n\te.stopImmediatePropagation()\r\n}\r\n\r\nconst setSelectionChange = (f?: (force?: boolean) =\u003e void) =\u003e (selectionChange = f)\r\n\r\nlet selectionChange: null | undefined | ((force?: boolean) =\u003e void)\r\n\r\n// @ts-expect-error Allow adding listener to document\r\nif (doc) addListener(doc, \"selectionchange\", () =\u003e selectionChange?.())\r\n\r\nexport {\r\n\tcreateEditor,\r\n\tlanguageMap,\r\n\tnumLines,\r\n\tcreateTemplate,\r\n\tgetElement,\r\n\tpreventDefault,\r\n\teditorFromPlaceholder,\r\n\taddListener,\r\n\tsetSelectionChange,\r\n\tdoc,\r\n}\r\n","import { EditorOptions, createEditor } from \"../index.js\"\r\nimport { doc, getElement } from \"../core.js\"\r\nimport { defaultCommands, editHistory } from \"../extensions/commands/index.js\"\r\nimport { copyButton } from \"../extensions/copyButton/index.js\"\r\nimport { readOnlyCodeFolding } from \"../extensions/folding/index.js\"\r\nimport { indentGuides } from \"../extensions/guides.js\"\r\nimport { highlightBracketPairs } from \"../extensions/matchBrackets/highlight.js\"\r\nimport { matchBrackets } from \"../extensions/matchBrackets/index.js\"\r\nimport { matchTags } from \"../extensions/matchTags.js\"\r\nimport { highlightSelectionMatches } from \"../extensions/search/selection.js\"\r\nimport { searchWidget } from \"../extensions/search/widget.js\"\r\nimport { EditorTheme, loadTheme } from \"../themes/index.js\"\r\nimport { showInvisibles } from \"../extensions/search/invisibles.js\"\r\n\r\nexport type SetupOptions = Partial\u003cEditorOptions\u003e \u0026 { theme: EditorTheme }\r\n\r\nconst addStyles = (shadow: ShadowRoot, styles: string, id: string) =\u003e {\r\n\tlet style = shadow.getElementById(id)\r\n\tif (!style) {\r\n\t\tstyle = doc!.createElement(\"style\")\r\n\t\tstyle.id = id\r\n\t\tshadow.append(style)\r\n\t}\r\n\tstyle.textContent = styles\r\n}\r\n\r\n/**\r\n * Adds an editor inside a shadow root to the given element and asynchronously loads the styles.\r\n * @param container Must be an element you can attach a shadow root to.\r\n * @param options Options to create the editor as well as the theme to use.\r\n * @param onLoad Function called when the styles are loaded and the editor is\r\n * appended to the DOM.\r\n * @returns Object to interact with the editor.\r\n */\r\nconst minimalEditor = (\r\n\tcontainer: HTMLElement | string,\r\n\toptions: SetupOptions,\r\n\tonLoad?: () =\u003e any,\r\n) =\u003e {\r\n\tconst el = getElement(container)!\r\n\tconst shadow = el.shadowRoot || el.attachShadow({ mode: \"open\" })\r\n\tconst editor = createEditor\u003c{ theme: EditorTheme }\u003e(null, null, {\r\n\t\tupdate(_, options) {\r\n\t\t\tif (theme != (theme = options.theme))\r\n\t\t\t\tloadTheme(theme).then(style =\u003e {\r\n\t\t\t\t\tif (style \u0026\u0026 theme == options.theme) addStyles(shadow, style, \"theme\")\r\n\t\t\t\t})\r\n\t\t},\r\n\t})\r\n\tconst remove = editor.remove\r\n\tlet removed: boolean\r\n\tlet theme = options.theme\r\n\r\n\teditor.remove = () =\u003e {\r\n\t\tremove()\r\n\t\tremoved = true\r\n\t}\r\n\r\n\tPromise.all([import(\"./styles\"), loadTheme(options.theme)]).then(([style, theme]) =\u003e {\r\n\t\tif (!removed) {\r\n\t\t\taddStyles(shadow, style.default, \"layout-style\")\r\n\t\t\taddStyles(shadow, theme || \"\", \"theme\")\r\n\t\t\tshadow.append(editor.container)\r\n\t\t\teditor.setOptions(options)\r\n\t\t\tonLoad \u0026\u0026 onLoad()\r\n\t\t}\r\n\t})\r\n\r\n\treturn editor\r\n}\r\n\r\n/**\r\n * Same as {@link minimalEditor}, but also adds the {@link indentGuides},\r\n * {@link highlightSelectionMatches}, {@link matchBrackets}, {@link highlightBracketPairs},\r\n * {@link defaultCommands}, {@link editHistory}, {@link searchWidget},\r\n * {@link showInvisibles}, and {@link matchTags} extensions and language specific\r\n * behavior.\r\n */\r\nconst basicEditor = (\r\n\tcontainer: HTMLElement | string,\r\n\toptions: SetupOptions,\r\n\tonLoad?: () =\u003e any,\r\n) =\u003e {\r\n\timport(\"./basic\").then(mod =\u003e {\r\n\t\taddStyles(el.shadowRoot!, mod.style, \"search-style\")\r\n\t\teditor.addExtensions(...mod.basic())\r\n\t})\r\n\r\n\tconst el = getElement(container)!\r\n\tconst editor = minimalEditor(el, options, onLoad)\r\n\r\n\treturn editor\r\n}\r\n\r\n/**\r\n * Same as {@link minimalEditor}, but also adds the {@link copyButton}, {@link matchBrackets},\r\n * {@link highlightBracketPairs}, {@link matchTags}, {@link indentGuides}, {@link highlightSelectionMatches},\r\n * and {@link readOnlyCodeFolding} extensions. No commands are added which makes this setup\r\n * best used with the `readOnly` option set to true.\r\n */\r\nconst readonlyEditor = (\r\n\tcontainer: HTMLElement | string,\r\n\toptions: SetupOptions,\r\n\tonLoad?: () =\u003e any,\r\n) =\u003e {\r\n\timport(\"./readonly\").then(mod =\u003e {\r\n\t\tmod.addExtensions(editor)\r\n\t\taddStyles(el.shadowRoot!, mod.style, \"readonly-style\")\r\n\t})\r\n\r\n\tconst el = getElement(container)!\r\n\tconst editor = minimalEditor(el, options, onLoad)\r\n\r\n\treturn editor\r\n}\r\n\r\nexport { basicEditor, minimalEditor, readonlyEditor }\r\n"],"version":3}
