@pyscript/core 0.5.3 → 0.5.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{codemirror-DP2LKuBT.js → codemirror-BBnQ0LtX.js} +2 -2
- package/dist/{codemirror-DP2LKuBT.js.map → codemirror-BBnQ0LtX.js.map} +1 -1
- package/dist/{codemirror_commands-Dtn37S2-.js → codemirror_commands-CaIwHoAf.js} +2 -2
- package/dist/{codemirror_commands-Dtn37S2-.js.map → codemirror_commands-CaIwHoAf.js.map} +1 -1
- package/dist/codemirror_lang-python-2HrDgj8s.js +2 -0
- package/dist/codemirror_lang-python-2HrDgj8s.js.map +1 -0
- package/dist/{codemirror_language-D6ce_yTr.js → codemirror_language-DVNAhaKA.js} +2 -2
- package/dist/{codemirror_language-D6ce_yTr.js.map → codemirror_language-DVNAhaKA.js.map} +1 -1
- package/dist/{codemirror_view-byykwGDe.js → codemirror_view-CT67V3cG.js} +2 -2
- package/dist/{codemirror_view-byykwGDe.js.map → codemirror_view-CT67V3cG.js.map} +1 -1
- package/dist/core-DJjKq1SP.js +2 -0
- package/dist/{core-CAHVPjK9.js.map → core-DJjKq1SP.js.map} +1 -1
- package/dist/core.js +1 -1
- package/dist/{deprecations-manager-CeicOp-C.js → deprecations-manager-DzkOV61g.js} +2 -2
- package/dist/{deprecations-manager-CeicOp-C.js.map → deprecations-manager-DzkOV61g.js.map} +1 -1
- package/dist/{error-bhRxUJ0H.js → error-gDwuTIUb.js} +2 -2
- package/dist/{error-bhRxUJ0H.js.map → error-gDwuTIUb.js.map} +1 -1
- package/dist/index-BZvYCKeH.js +2 -0
- package/dist/index-BZvYCKeH.js.map +1 -0
- package/dist/{mpy-Cgg31iaC.js → mpy-BgMihDWI.js} +2 -2
- package/dist/{mpy-Cgg31iaC.js.map → mpy-BgMihDWI.js.map} +1 -1
- package/dist/{py-D5PpdbCy.js → py-DqV3p_W0.js} +2 -2
- package/dist/{py-D5PpdbCy.js.map → py-DqV3p_W0.js.map} +1 -1
- package/dist/py-editor-DyAw2VYR.js +2 -0
- package/dist/py-editor-DyAw2VYR.js.map +1 -0
- package/dist/{py-terminal-BBpf7LFW.js → py-terminal-BKEuOEc5.js} +2 -2
- package/dist/{py-terminal-BBpf7LFW.js.map → py-terminal-BKEuOEc5.js.map} +1 -1
- package/dist/xterm-readline-CeXSaXaZ.js +2 -0
- package/dist/{xterm-readline-DjufFwfn.js.map → xterm-readline-CeXSaXaZ.js.map} +1 -1
- package/dist/zip-C10rja2G.js +2 -0
- package/dist/{zip-BUaoNci7.js.map → zip-C10rja2G.js.map} +1 -1
- package/package.json +2 -2
- package/src/plugins/py-editor.js +5 -0
- package/src/stdlib/pyscript.js +12 -12
- package/dist/codemirror_lang-python-CD-6L-Uh.js +0 -2
- package/dist/codemirror_lang-python-CD-6L-Uh.js.map +0 -1
- package/dist/core-CAHVPjK9.js +0 -2
- package/dist/index-CdWlITxy.js +0 -2
- package/dist/index-CdWlITxy.js.map +0 -1
- package/dist/py-editor-BDuee0vY.js +0 -2
- package/dist/py-editor-BDuee0vY.js.map +0 -1
- package/dist/xterm-readline-DjufFwfn.js +0 -2
- package/dist/zip-BUaoNci7.js +0 -2
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"index-CdWlITxy.js","sources":["../node_modules/@codemirror/autocomplete/dist/index.js"],"sourcesContent":["import { Annotation, StateEffect, EditorSelection, codePointAt, codePointSize, fromCodePoint, Facet, combineConfig, StateField, Prec, Text, Transaction, MapMode, RangeValue, RangeSet, CharCategory } from '@codemirror/state';\nimport { Direction, logException, showTooltip, EditorView, ViewPlugin, getTooltip, Decoration, WidgetType, keymap } from '@codemirror/view';\nimport { syntaxTree, indentUnit } from '@codemirror/language';\n\n/**\nAn instance of this is passed to completion source functions.\n*/\nclass CompletionContext {\n /**\n Create a new completion context. (Mostly useful for testing\n completion sources—in the editor, the extension will create\n these for you.)\n */\n constructor(\n /**\n The editor state that the completion happens in.\n */\n state, \n /**\n The position at which the completion is happening.\n */\n pos, \n /**\n Indicates whether completion was activated explicitly, or\n implicitly by typing. The usual way to respond to this is to\n only return completions when either there is part of a\n completable entity before the cursor, or `explicit` is true.\n */\n explicit) {\n this.state = state;\n this.pos = pos;\n this.explicit = explicit;\n /**\n @internal\n */\n this.abortListeners = [];\n }\n /**\n Get the extent, content, and (if there is a token) type of the\n token before `this.pos`.\n */\n tokenBefore(types) {\n let token = syntaxTree(this.state).resolveInner(this.pos, -1);\n while (token && types.indexOf(token.name) < 0)\n token = token.parent;\n return token ? { from: token.from, to: this.pos,\n text: this.state.sliceDoc(token.from, this.pos),\n type: token.type } : null;\n }\n /**\n Get the match of the given expression directly before the\n cursor.\n */\n matchBefore(expr) {\n let line = this.state.doc.lineAt(this.pos);\n let start = Math.max(line.from, this.pos - 250);\n let str = line.text.slice(start - line.from, this.pos - line.from);\n let found = str.search(ensureAnchor(expr, false));\n return found < 0 ? null : { from: start + found, to: this.pos, text: str.slice(found) };\n }\n /**\n Yields true when the query has been aborted. Can be useful in\n asynchronous queries to avoid doing work that will be ignored.\n */\n get aborted() { return this.abortListeners == null; }\n /**\n Allows you to register abort handlers, which will be called when\n the query is\n [aborted](https://codemirror.net/6/docs/ref/#autocomplete.CompletionContext.aborted).\n */\n addEventListener(type, listener) {\n if (type == \"abort\" && this.abortListeners)\n this.abortListeners.push(listener);\n }\n}\nfunction toSet(chars) {\n let flat = Object.keys(chars).join(\"\");\n let words = /\\w/.test(flat);\n if (words)\n flat = flat.replace(/\\w/g, \"\");\n return `[${words ? \"\\\\w\" : \"\"}${flat.replace(/[^\\w\\s]/g, \"\\\\$&\")}]`;\n}\nfunction prefixMatch(options) {\n let first = Object.create(null), rest = Object.create(null);\n for (let { label } of options) {\n first[label[0]] = true;\n for (let i = 1; i < label.length; i++)\n rest[label[i]] = true;\n }\n let source = toSet(first) + toSet(rest) + \"*$\";\n return [new RegExp(\"^\" + source), new RegExp(source)];\n}\n/**\nGiven a a fixed array of options, return an autocompleter that\ncompletes them.\n*/\nfunction completeFromList(list) {\n let options = list.map(o => typeof o == \"string\" ? { label: o } : o);\n let [validFor, match] = options.every(o => /^\\w+$/.test(o.label)) ? [/\\w*$/, /\\w+$/] : prefixMatch(options);\n return (context) => {\n let token = context.matchBefore(match);\n return token || context.explicit ? { from: token ? token.from : context.pos, options, validFor } : null;\n };\n}\n/**\nWrap the given completion source so that it will only fire when the\ncursor is in a syntax node with one of the given names.\n*/\nfunction ifIn(nodes, source) {\n return (context) => {\n for (let pos = syntaxTree(context.state).resolveInner(context.pos, -1); pos; pos = pos.parent) {\n if (nodes.indexOf(pos.name) > -1)\n return source(context);\n if (pos.type.isTop)\n break;\n }\n return null;\n };\n}\n/**\nWrap the given completion source so that it will not fire when the\ncursor is in a syntax node with one of the given names.\n*/\nfunction ifNotIn(nodes, source) {\n return (context) => {\n for (let pos = syntaxTree(context.state).resolveInner(context.pos, -1); pos; pos = pos.parent) {\n if (nodes.indexOf(pos.name) > -1)\n return null;\n if (pos.type.isTop)\n break;\n }\n return source(context);\n };\n}\nclass Option {\n constructor(completion, source, match, score) {\n this.completion = completion;\n this.source = source;\n this.match = match;\n this.score = score;\n }\n}\nfunction cur(state) { return state.selection.main.from; }\n// Make sure the given regexp has a $ at its end and, if `start` is\n// true, a ^ at its start.\nfunction ensureAnchor(expr, start) {\n var _a;\n let { source } = expr;\n let addStart = start && source[0] != \"^\", addEnd = source[source.length - 1] != \"$\";\n if (!addStart && !addEnd)\n return expr;\n return new RegExp(`${addStart ? \"^\" : \"\"}(?:${source})${addEnd ? \"$\" : \"\"}`, (_a = expr.flags) !== null && _a !== void 0 ? _a : (expr.ignoreCase ? \"i\" : \"\"));\n}\n/**\nThis annotation is added to transactions that are produced by\npicking a completion.\n*/\nconst pickedCompletion = /*@__PURE__*/Annotation.define();\n/**\nHelper function that returns a transaction spec which inserts a\ncompletion's text in the main selection range, and any other\nselection range that has the same text in front of it.\n*/\nfunction insertCompletionText(state, text, from, to) {\n let { main } = state.selection, fromOff = from - main.from, toOff = to - main.from;\n return Object.assign(Object.assign({}, state.changeByRange(range => {\n if (range != main && from != to &&\n state.sliceDoc(range.from + fromOff, range.from + toOff) != state.sliceDoc(from, to))\n return { range };\n return {\n changes: { from: range.from + fromOff, to: to == main.from ? range.to : range.from + toOff, insert: text },\n range: EditorSelection.cursor(range.from + fromOff + text.length)\n };\n })), { scrollIntoView: true, userEvent: \"input.complete\" });\n}\nconst SourceCache = /*@__PURE__*/new WeakMap();\nfunction asSource(source) {\n if (!Array.isArray(source))\n return source;\n let known = SourceCache.get(source);\n if (!known)\n SourceCache.set(source, known = completeFromList(source));\n return known;\n}\nconst startCompletionEffect = /*@__PURE__*/StateEffect.define();\nconst closeCompletionEffect = /*@__PURE__*/StateEffect.define();\n\n// A pattern matcher for fuzzy completion matching. Create an instance\n// once for a pattern, and then use that to match any number of\n// completions.\nclass FuzzyMatcher {\n constructor(pattern) {\n this.pattern = pattern;\n this.chars = [];\n this.folded = [];\n // Buffers reused by calls to `match` to track matched character\n // positions.\n this.any = [];\n this.precise = [];\n this.byWord = [];\n this.score = 0;\n this.matched = [];\n for (let p = 0; p < pattern.length;) {\n let char = codePointAt(pattern, p), size = codePointSize(char);\n this.chars.push(char);\n let part = pattern.slice(p, p + size), upper = part.toUpperCase();\n this.folded.push(codePointAt(upper == part ? part.toLowerCase() : upper, 0));\n p += size;\n }\n this.astral = pattern.length != this.chars.length;\n }\n ret(score, matched) {\n this.score = score;\n this.matched = matched;\n return this;\n }\n // Matches a given word (completion) against the pattern (input).\n // Will return a boolean indicating whether there was a match and,\n // on success, set `this.score` to the score, `this.matched` to an\n // array of `from, to` pairs indicating the matched parts of `word`.\n //\n // The score is a number that is more negative the worse the match\n // is. See `Penalty` above.\n match(word) {\n if (this.pattern.length == 0)\n return this.ret(-100 /* Penalty.NotFull */, []);\n if (word.length < this.pattern.length)\n return null;\n let { chars, folded, any, precise, byWord } = this;\n // For single-character queries, only match when they occur right\n // at the start\n if (chars.length == 1) {\n let first = codePointAt(word, 0), firstSize = codePointSize(first);\n let score = firstSize == word.length ? 0 : -100 /* Penalty.NotFull */;\n if (first == chars[0]) ;\n else if (first == folded[0])\n score += -200 /* Penalty.CaseFold */;\n else\n return null;\n return this.ret(score, [0, firstSize]);\n }\n let direct = word.indexOf(this.pattern);\n if (direct == 0)\n return this.ret(word.length == this.pattern.length ? 0 : -100 /* Penalty.NotFull */, [0, this.pattern.length]);\n let len = chars.length, anyTo = 0;\n if (direct < 0) {\n for (let i = 0, e = Math.min(word.length, 200); i < e && anyTo < len;) {\n let next = codePointAt(word, i);\n if (next == chars[anyTo] || next == folded[anyTo])\n any[anyTo++] = i;\n i += codePointSize(next);\n }\n // No match, exit immediately\n if (anyTo < len)\n return null;\n }\n // This tracks the extent of the precise (non-folded, not\n // necessarily adjacent) match\n let preciseTo = 0;\n // Tracks whether there is a match that hits only characters that\n // appear to be starting words. `byWordFolded` is set to true when\n // a case folded character is encountered in such a match\n let byWordTo = 0, byWordFolded = false;\n // If we've found a partial adjacent match, these track its state\n let adjacentTo = 0, adjacentStart = -1, adjacentEnd = -1;\n let hasLower = /[a-z]/.test(word), wordAdjacent = true;\n // Go over the option's text, scanning for the various kinds of matches\n for (let i = 0, e = Math.min(word.length, 200), prevType = 0 /* Tp.NonWord */; i < e && byWordTo < len;) {\n let next = codePointAt(word, i);\n if (direct < 0) {\n if (preciseTo < len && next == chars[preciseTo])\n precise[preciseTo++] = i;\n if (adjacentTo < len) {\n if (next == chars[adjacentTo] || next == folded[adjacentTo]) {\n if (adjacentTo == 0)\n adjacentStart = i;\n adjacentEnd = i + 1;\n adjacentTo++;\n }\n else {\n adjacentTo = 0;\n }\n }\n }\n let ch, type = next < 0xff\n ? (next >= 48 && next <= 57 || next >= 97 && next <= 122 ? 2 /* Tp.Lower */ : next >= 65 && next <= 90 ? 1 /* Tp.Upper */ : 0 /* Tp.NonWord */)\n : ((ch = fromCodePoint(next)) != ch.toLowerCase() ? 1 /* Tp.Upper */ : ch != ch.toUpperCase() ? 2 /* Tp.Lower */ : 0 /* Tp.NonWord */);\n if (!i || type == 1 /* Tp.Upper */ && hasLower || prevType == 0 /* Tp.NonWord */ && type != 0 /* Tp.NonWord */) {\n if (chars[byWordTo] == next || (folded[byWordTo] == next && (byWordFolded = true)))\n byWord[byWordTo++] = i;\n else if (byWord.length)\n wordAdjacent = false;\n }\n prevType = type;\n i += codePointSize(next);\n }\n if (byWordTo == len && byWord[0] == 0 && wordAdjacent)\n return this.result(-100 /* Penalty.ByWord */ + (byWordFolded ? -200 /* Penalty.CaseFold */ : 0), byWord, word);\n if (adjacentTo == len && adjacentStart == 0)\n return this.ret(-200 /* Penalty.CaseFold */ - word.length + (adjacentEnd == word.length ? 0 : -100 /* Penalty.NotFull */), [0, adjacentEnd]);\n if (direct > -1)\n return this.ret(-700 /* Penalty.NotStart */ - word.length, [direct, direct + this.pattern.length]);\n if (adjacentTo == len)\n return this.ret(-200 /* Penalty.CaseFold */ + -700 /* Penalty.NotStart */ - word.length, [adjacentStart, adjacentEnd]);\n if (byWordTo == len)\n return this.result(-100 /* Penalty.ByWord */ + (byWordFolded ? -200 /* Penalty.CaseFold */ : 0) + -700 /* Penalty.NotStart */ +\n (wordAdjacent ? 0 : -1100 /* Penalty.Gap */), byWord, word);\n return chars.length == 2 ? null\n : this.result((any[0] ? -700 /* Penalty.NotStart */ : 0) + -200 /* Penalty.CaseFold */ + -1100 /* Penalty.Gap */, any, word);\n }\n result(score, positions, word) {\n let result = [], i = 0;\n for (let pos of positions) {\n let to = pos + (this.astral ? codePointSize(codePointAt(word, pos)) : 1);\n if (i && result[i - 1] == pos)\n result[i - 1] = to;\n else {\n result[i++] = pos;\n result[i++] = to;\n }\n }\n return this.ret(score - word.length, result);\n }\n}\nclass StrictMatcher {\n constructor(pattern) {\n this.pattern = pattern;\n this.matched = [];\n this.score = 0;\n this.folded = pattern.toLowerCase();\n }\n match(word) {\n if (word.length < this.pattern.length)\n return null;\n let start = word.slice(0, this.pattern.length);\n let match = start == this.pattern ? 0 : start.toLowerCase() == this.folded ? -200 /* Penalty.CaseFold */ : null;\n if (match == null)\n return null;\n this.matched = [0, start.length];\n this.score = match + (word.length == this.pattern.length ? 0 : -100 /* Penalty.NotFull */);\n return this;\n }\n}\n\nconst completionConfig = /*@__PURE__*/Facet.define({\n combine(configs) {\n return combineConfig(configs, {\n activateOnTyping: true,\n activateOnCompletion: () => false,\n activateOnTypingDelay: 100,\n selectOnOpen: true,\n override: null,\n closeOnBlur: true,\n maxRenderedOptions: 100,\n defaultKeymap: true,\n tooltipClass: () => \"\",\n optionClass: () => \"\",\n aboveCursor: false,\n icons: true,\n addToOptions: [],\n positionInfo: defaultPositionInfo,\n filterStrict: false,\n compareCompletions: (a, b) => a.label.localeCompare(b.label),\n interactionDelay: 75,\n updateSyncTime: 100\n }, {\n defaultKeymap: (a, b) => a && b,\n closeOnBlur: (a, b) => a && b,\n icons: (a, b) => a && b,\n tooltipClass: (a, b) => c => joinClass(a(c), b(c)),\n optionClass: (a, b) => c => joinClass(a(c), b(c)),\n addToOptions: (a, b) => a.concat(b),\n filterStrict: (a, b) => a || b,\n });\n }\n});\nfunction joinClass(a, b) {\n return a ? b ? a + \" \" + b : a : b;\n}\nfunction defaultPositionInfo(view, list, option, info, space, tooltip) {\n let rtl = view.textDirection == Direction.RTL, left = rtl, narrow = false;\n let side = \"top\", offset, maxWidth;\n let spaceLeft = list.left - space.left, spaceRight = space.right - list.right;\n let infoWidth = info.right - info.left, infoHeight = info.bottom - info.top;\n if (left && spaceLeft < Math.min(infoWidth, spaceRight))\n left = false;\n else if (!left && spaceRight < Math.min(infoWidth, spaceLeft))\n left = true;\n if (infoWidth <= (left ? spaceLeft : spaceRight)) {\n offset = Math.max(space.top, Math.min(option.top, space.bottom - infoHeight)) - list.top;\n maxWidth = Math.min(400 /* Info.Width */, left ? spaceLeft : spaceRight);\n }\n else {\n narrow = true;\n maxWidth = Math.min(400 /* Info.Width */, (rtl ? list.right : space.right - list.left) - 30 /* Info.Margin */);\n let spaceBelow = space.bottom - list.bottom;\n if (spaceBelow >= infoHeight || spaceBelow > list.top) { // Below the completion\n offset = option.bottom - list.top;\n }\n else { // Above it\n side = \"bottom\";\n offset = list.bottom - option.top;\n }\n }\n let scaleY = (list.bottom - list.top) / tooltip.offsetHeight;\n let scaleX = (list.right - list.left) / tooltip.offsetWidth;\n return {\n style: `${side}: ${offset / scaleY}px; max-width: ${maxWidth / scaleX}px`,\n class: \"cm-completionInfo-\" + (narrow ? (rtl ? \"left-narrow\" : \"right-narrow\") : left ? \"left\" : \"right\")\n };\n}\n\nfunction optionContent(config) {\n let content = config.addToOptions.slice();\n if (config.icons)\n content.push({\n render(completion) {\n let icon = document.createElement(\"div\");\n icon.classList.add(\"cm-completionIcon\");\n if (completion.type)\n icon.classList.add(...completion.type.split(/\\s+/g).map(cls => \"cm-completionIcon-\" + cls));\n icon.setAttribute(\"aria-hidden\", \"true\");\n return icon;\n },\n position: 20\n });\n content.push({\n render(completion, _s, _v, match) {\n let labelElt = document.createElement(\"span\");\n labelElt.className = \"cm-completionLabel\";\n let label = completion.displayLabel || completion.label, off = 0;\n for (let j = 0; j < match.length;) {\n let from = match[j++], to = match[j++];\n if (from > off)\n labelElt.appendChild(document.createTextNode(label.slice(off, from)));\n let span = labelElt.appendChild(document.createElement(\"span\"));\n span.appendChild(document.createTextNode(label.slice(from, to)));\n span.className = \"cm-completionMatchedText\";\n off = to;\n }\n if (off < label.length)\n labelElt.appendChild(document.createTextNode(label.slice(off)));\n return labelElt;\n },\n position: 50\n }, {\n render(completion) {\n if (!completion.detail)\n return null;\n let detailElt = document.createElement(\"span\");\n detailElt.className = \"cm-completionDetail\";\n detailElt.textContent = completion.detail;\n return detailElt;\n },\n position: 80\n });\n return content.sort((a, b) => a.position - b.position).map(a => a.render);\n}\nfunction rangeAroundSelected(total, selected, max) {\n if (total <= max)\n return { from: 0, to: total };\n if (selected < 0)\n selected = 0;\n if (selected <= (total >> 1)) {\n let off = Math.floor(selected / max);\n return { from: off * max, to: (off + 1) * max };\n }\n let off = Math.floor((total - selected) / max);\n return { from: total - (off + 1) * max, to: total - off * max };\n}\nclass CompletionTooltip {\n constructor(view, stateField, applyCompletion) {\n this.view = view;\n this.stateField = stateField;\n this.applyCompletion = applyCompletion;\n this.info = null;\n this.infoDestroy = null;\n this.placeInfoReq = {\n read: () => this.measureInfo(),\n write: (pos) => this.placeInfo(pos),\n key: this\n };\n this.space = null;\n this.currentClass = \"\";\n let cState = view.state.field(stateField);\n let { options, selected } = cState.open;\n let config = view.state.facet(completionConfig);\n this.optionContent = optionContent(config);\n this.optionClass = config.optionClass;\n this.tooltipClass = config.tooltipClass;\n this.range = rangeAroundSelected(options.length, selected, config.maxRenderedOptions);\n this.dom = document.createElement(\"div\");\n this.dom.className = \"cm-tooltip-autocomplete\";\n this.updateTooltipClass(view.state);\n this.dom.addEventListener(\"mousedown\", (e) => {\n let { options } = view.state.field(stateField).open;\n for (let dom = e.target, match; dom && dom != this.dom; dom = dom.parentNode) {\n if (dom.nodeName == \"LI\" && (match = /-(\\d+)$/.exec(dom.id)) && +match[1] < options.length) {\n this.applyCompletion(view, options[+match[1]]);\n e.preventDefault();\n return;\n }\n }\n });\n this.dom.addEventListener(\"focusout\", (e) => {\n let state = view.state.field(this.stateField, false);\n if (state && state.tooltip && view.state.facet(completionConfig).closeOnBlur &&\n e.relatedTarget != view.contentDOM)\n view.dispatch({ effects: closeCompletionEffect.of(null) });\n });\n this.showOptions(options, cState.id);\n }\n mount() { this.updateSel(); }\n showOptions(options, id) {\n if (this.list)\n this.list.remove();\n this.list = this.dom.appendChild(this.createListBox(options, id, this.range));\n this.list.addEventListener(\"scroll\", () => {\n if (this.info)\n this.view.requestMeasure(this.placeInfoReq);\n });\n }\n update(update) {\n var _a;\n let cState = update.state.field(this.stateField);\n let prevState = update.startState.field(this.stateField);\n this.updateTooltipClass(update.state);\n if (cState != prevState) {\n let { options, selected, disabled } = cState.open;\n if (!prevState.open || prevState.open.options != options) {\n this.range = rangeAroundSelected(options.length, selected, update.state.facet(completionConfig).maxRenderedOptions);\n this.showOptions(options, cState.id);\n }\n this.updateSel();\n if (disabled != ((_a = prevState.open) === null || _a === void 0 ? void 0 : _a.disabled))\n this.dom.classList.toggle(\"cm-tooltip-autocomplete-disabled\", !!disabled);\n }\n }\n updateTooltipClass(state) {\n let cls = this.tooltipClass(state);\n if (cls != this.currentClass) {\n for (let c of this.currentClass.split(\" \"))\n if (c)\n this.dom.classList.remove(c);\n for (let c of cls.split(\" \"))\n if (c)\n this.dom.classList.add(c);\n this.currentClass = cls;\n }\n }\n positioned(space) {\n this.space = space;\n if (this.info)\n this.view.requestMeasure(this.placeInfoReq);\n }\n updateSel() {\n let cState = this.view.state.field(this.stateField), open = cState.open;\n if (open.selected > -1 && open.selected < this.range.from || open.selected >= this.range.to) {\n this.range = rangeAroundSelected(open.options.length, open.selected, this.view.state.facet(completionConfig).maxRenderedOptions);\n this.showOptions(open.options, cState.id);\n }\n if (this.updateSelectedOption(open.selected)) {\n this.destroyInfo();\n let { completion } = open.options[open.selected];\n let { info } = completion;\n if (!info)\n return;\n let infoResult = typeof info === \"string\" ? document.createTextNode(info) : info(completion);\n if (!infoResult)\n return;\n if (\"then\" in infoResult) {\n infoResult.then(obj => {\n if (obj && this.view.state.field(this.stateField, false) == cState)\n this.addInfoPane(obj, completion);\n }).catch(e => logException(this.view.state, e, \"completion info\"));\n }\n else {\n this.addInfoPane(infoResult, completion);\n }\n }\n }\n addInfoPane(content, completion) {\n this.destroyInfo();\n let wrap = this.info = document.createElement(\"div\");\n wrap.className = \"cm-tooltip cm-completionInfo\";\n if (content.nodeType != null) {\n wrap.appendChild(content);\n this.infoDestroy = null;\n }\n else {\n let { dom, destroy } = content;\n wrap.appendChild(dom);\n this.infoDestroy = destroy || null;\n }\n this.dom.appendChild(wrap);\n this.view.requestMeasure(this.placeInfoReq);\n }\n updateSelectedOption(selected) {\n let set = null;\n for (let opt = this.list.firstChild, i = this.range.from; opt; opt = opt.nextSibling, i++) {\n if (opt.nodeName != \"LI\" || !opt.id) {\n i--; // A section header\n }\n else if (i == selected) {\n if (!opt.hasAttribute(\"aria-selected\")) {\n opt.setAttribute(\"aria-selected\", \"true\");\n set = opt;\n }\n }\n else {\n if (opt.hasAttribute(\"aria-selected\"))\n opt.removeAttribute(\"aria-selected\");\n }\n }\n if (set)\n scrollIntoView(this.list, set);\n return set;\n }\n measureInfo() {\n let sel = this.dom.querySelector(\"[aria-selected]\");\n if (!sel || !this.info)\n return null;\n let listRect = this.dom.getBoundingClientRect();\n let infoRect = this.info.getBoundingClientRect();\n let selRect = sel.getBoundingClientRect();\n let space = this.space;\n if (!space) {\n let win = this.dom.ownerDocument.defaultView || window;\n space = { left: 0, top: 0, right: win.innerWidth, bottom: win.innerHeight };\n }\n if (selRect.top > Math.min(space.bottom, listRect.bottom) - 10 ||\n selRect.bottom < Math.max(space.top, listRect.top) + 10)\n return null;\n return this.view.state.facet(completionConfig).positionInfo(this.view, listRect, selRect, infoRect, space, this.dom);\n }\n placeInfo(pos) {\n if (this.info) {\n if (pos) {\n if (pos.style)\n this.info.style.cssText = pos.style;\n this.info.className = \"cm-tooltip cm-completionInfo \" + (pos.class || \"\");\n }\n else {\n this.info.style.cssText = \"top: -1e6px\";\n }\n }\n }\n createListBox(options, id, range) {\n const ul = document.createElement(\"ul\");\n ul.id = id;\n ul.setAttribute(\"role\", \"listbox\");\n ul.setAttribute(\"aria-expanded\", \"true\");\n ul.setAttribute(\"aria-label\", this.view.state.phrase(\"Completions\"));\n let curSection = null;\n for (let i = range.from; i < range.to; i++) {\n let { completion, match } = options[i], { section } = completion;\n if (section) {\n let name = typeof section == \"string\" ? section : section.name;\n if (name != curSection && (i > range.from || range.from == 0)) {\n curSection = name;\n if (typeof section != \"string\" && section.header) {\n ul.appendChild(section.header(section));\n }\n else {\n let header = ul.appendChild(document.createElement(\"completion-section\"));\n header.textContent = name;\n }\n }\n }\n const li = ul.appendChild(document.createElement(\"li\"));\n li.id = id + \"-\" + i;\n li.setAttribute(\"role\", \"option\");\n let cls = this.optionClass(completion);\n if (cls)\n li.className = cls;\n for (let source of this.optionContent) {\n let node = source(completion, this.view.state, this.view, match);\n if (node)\n li.appendChild(node);\n }\n }\n if (range.from)\n ul.classList.add(\"cm-completionListIncompleteTop\");\n if (range.to < options.length)\n ul.classList.add(\"cm-completionListIncompleteBottom\");\n return ul;\n }\n destroyInfo() {\n if (this.info) {\n if (this.infoDestroy)\n this.infoDestroy();\n this.info.remove();\n this.info = null;\n }\n }\n destroy() {\n this.destroyInfo();\n }\n}\nfunction completionTooltip(stateField, applyCompletion) {\n return (view) => new CompletionTooltip(view, stateField, applyCompletion);\n}\nfunction scrollIntoView(container, element) {\n let parent = container.getBoundingClientRect();\n let self = element.getBoundingClientRect();\n let scaleY = parent.height / container.offsetHeight;\n if (self.top < parent.top)\n container.scrollTop -= (parent.top - self.top) / scaleY;\n else if (self.bottom > parent.bottom)\n container.scrollTop += (self.bottom - parent.bottom) / scaleY;\n}\n\n// Used to pick a preferred option when two options with the same\n// label occur in the result.\nfunction score(option) {\n return (option.boost || 0) * 100 + (option.apply ? 10 : 0) + (option.info ? 5 : 0) +\n (option.type ? 1 : 0);\n}\nfunction sortOptions(active, state) {\n let options = [];\n let sections = null;\n let addOption = (option) => {\n options.push(option);\n let { section } = option.completion;\n if (section) {\n if (!sections)\n sections = [];\n let name = typeof section == \"string\" ? section : section.name;\n if (!sections.some(s => s.name == name))\n sections.push(typeof section == \"string\" ? { name } : section);\n }\n };\n let conf = state.facet(completionConfig);\n for (let a of active)\n if (a.hasResult()) {\n let getMatch = a.result.getMatch;\n if (a.result.filter === false) {\n for (let option of a.result.options) {\n addOption(new Option(option, a.source, getMatch ? getMatch(option) : [], 1e9 - options.length));\n }\n }\n else {\n let pattern = state.sliceDoc(a.from, a.to), match;\n let matcher = conf.filterStrict ? new StrictMatcher(pattern) : new FuzzyMatcher(pattern);\n for (let option of a.result.options)\n if (match = matcher.match(option.label)) {\n let matched = !option.displayLabel ? match.matched : getMatch ? getMatch(option, match.matched) : [];\n addOption(new Option(option, a.source, matched, match.score + (option.boost || 0)));\n }\n }\n }\n if (sections) {\n let sectionOrder = Object.create(null), pos = 0;\n let cmp = (a, b) => { var _a, _b; return ((_a = a.rank) !== null && _a !== void 0 ? _a : 1e9) - ((_b = b.rank) !== null && _b !== void 0 ? _b : 1e9) || (a.name < b.name ? -1 : 1); };\n for (let s of sections.sort(cmp)) {\n pos -= 1e5;\n sectionOrder[s.name] = pos;\n }\n for (let option of options) {\n let { section } = option.completion;\n if (section)\n option.score += sectionOrder[typeof section == \"string\" ? section : section.name];\n }\n }\n let result = [], prev = null;\n let compare = conf.compareCompletions;\n for (let opt of options.sort((a, b) => (b.score - a.score) || compare(a.completion, b.completion))) {\n let cur = opt.completion;\n if (!prev || prev.label != cur.label || prev.detail != cur.detail ||\n (prev.type != null && cur.type != null && prev.type != cur.type) ||\n prev.apply != cur.apply || prev.boost != cur.boost)\n result.push(opt);\n else if (score(opt.completion) > score(prev))\n result[result.length - 1] = opt;\n prev = opt.completion;\n }\n return result;\n}\nclass CompletionDialog {\n constructor(options, attrs, tooltip, timestamp, selected, disabled) {\n this.options = options;\n this.attrs = attrs;\n this.tooltip = tooltip;\n this.timestamp = timestamp;\n this.selected = selected;\n this.disabled = disabled;\n }\n setSelected(selected, id) {\n return selected == this.selected || selected >= this.options.length ? this\n : new CompletionDialog(this.options, makeAttrs(id, selected), this.tooltip, this.timestamp, selected, this.disabled);\n }\n static build(active, state, id, prev, conf) {\n let options = sortOptions(active, state);\n if (!options.length) {\n return prev && active.some(a => a.state == 1 /* State.Pending */) ?\n new CompletionDialog(prev.options, prev.attrs, prev.tooltip, prev.timestamp, prev.selected, true) : null;\n }\n let selected = state.facet(completionConfig).selectOnOpen ? 0 : -1;\n if (prev && prev.selected != selected && prev.selected != -1) {\n let selectedValue = prev.options[prev.selected].completion;\n for (let i = 0; i < options.length; i++)\n if (options[i].completion == selectedValue) {\n selected = i;\n break;\n }\n }\n return new CompletionDialog(options, makeAttrs(id, selected), {\n pos: active.reduce((a, b) => b.hasResult() ? Math.min(a, b.from) : a, 1e8),\n create: createTooltip,\n above: conf.aboveCursor,\n }, prev ? prev.timestamp : Date.now(), selected, false);\n }\n map(changes) {\n return new CompletionDialog(this.options, this.attrs, Object.assign(Object.assign({}, this.tooltip), { pos: changes.mapPos(this.tooltip.pos) }), this.timestamp, this.selected, this.disabled);\n }\n}\nclass CompletionState {\n constructor(active, id, open) {\n this.active = active;\n this.id = id;\n this.open = open;\n }\n static start() {\n return new CompletionState(none, \"cm-ac-\" + Math.floor(Math.random() * 2e6).toString(36), null);\n }\n update(tr) {\n let { state } = tr, conf = state.facet(completionConfig);\n let sources = conf.override ||\n state.languageDataAt(\"autocomplete\", cur(state)).map(asSource);\n let active = sources.map(source => {\n let value = this.active.find(s => s.source == source) ||\n new ActiveSource(source, this.active.some(a => a.state != 0 /* State.Inactive */) ? 1 /* State.Pending */ : 0 /* State.Inactive */);\n return value.update(tr, conf);\n });\n if (active.length == this.active.length && active.every((a, i) => a == this.active[i]))\n active = this.active;\n let open = this.open;\n if (open && tr.docChanged)\n open = open.map(tr.changes);\n if (tr.selection || active.some(a => a.hasResult() && tr.changes.touchesRange(a.from, a.to)) ||\n !sameResults(active, this.active))\n open = CompletionDialog.build(active, state, this.id, open, conf);\n else if (open && open.disabled && !active.some(a => a.state == 1 /* State.Pending */))\n open = null;\n if (!open && active.every(a => a.state != 1 /* State.Pending */) && active.some(a => a.hasResult()))\n active = active.map(a => a.hasResult() ? new ActiveSource(a.source, 0 /* State.Inactive */) : a);\n for (let effect of tr.effects)\n if (effect.is(setSelectedEffect))\n open = open && open.setSelected(effect.value, this.id);\n return active == this.active && open == this.open ? this : new CompletionState(active, this.id, open);\n }\n get tooltip() { return this.open ? this.open.tooltip : null; }\n get attrs() { return this.open ? this.open.attrs : this.active.length ? baseAttrs : noAttrs; }\n}\nfunction sameResults(a, b) {\n if (a == b)\n return true;\n for (let iA = 0, iB = 0;;) {\n while (iA < a.length && !a[iA].hasResult)\n iA++;\n while (iB < b.length && !b[iB].hasResult)\n iB++;\n let endA = iA == a.length, endB = iB == b.length;\n if (endA || endB)\n return endA == endB;\n if (a[iA++].result != b[iB++].result)\n return false;\n }\n}\nconst baseAttrs = {\n \"aria-autocomplete\": \"list\"\n};\nconst noAttrs = {};\nfunction makeAttrs(id, selected) {\n let result = {\n \"aria-autocomplete\": \"list\",\n \"aria-haspopup\": \"listbox\",\n \"aria-controls\": id\n };\n if (selected > -1)\n result[\"aria-activedescendant\"] = id + \"-\" + selected;\n return result;\n}\nconst none = [];\nfunction getUserEvent(tr, conf) {\n if (tr.isUserEvent(\"input.complete\")) {\n let completion = tr.annotation(pickedCompletion);\n if (completion && conf.activateOnCompletion(completion))\n return \"input\";\n }\n return tr.isUserEvent(\"input.type\") ? \"input\" : tr.isUserEvent(\"delete.backward\") ? \"delete\" : null;\n}\nclass ActiveSource {\n constructor(source, state, explicitPos = -1) {\n this.source = source;\n this.state = state;\n this.explicitPos = explicitPos;\n }\n hasResult() { return false; }\n update(tr, conf) {\n let event = getUserEvent(tr, conf), value = this;\n if (event)\n value = value.handleUserEvent(tr, event, conf);\n else if (tr.docChanged)\n value = value.handleChange(tr);\n else if (tr.selection && value.state != 0 /* State.Inactive */)\n value = new ActiveSource(value.source, 0 /* State.Inactive */);\n for (let effect of tr.effects) {\n if (effect.is(startCompletionEffect))\n value = new ActiveSource(value.source, 1 /* State.Pending */, effect.value ? cur(tr.state) : -1);\n else if (effect.is(closeCompletionEffect))\n value = new ActiveSource(value.source, 0 /* State.Inactive */);\n else if (effect.is(setActiveEffect))\n for (let active of effect.value)\n if (active.source == value.source)\n value = active;\n }\n return value;\n }\n handleUserEvent(tr, type, conf) {\n return type == \"delete\" || !conf.activateOnTyping ? this.map(tr.changes) : new ActiveSource(this.source, 1 /* State.Pending */);\n }\n handleChange(tr) {\n return tr.changes.touchesRange(cur(tr.startState)) ? new ActiveSource(this.source, 0 /* State.Inactive */) : this.map(tr.changes);\n }\n map(changes) {\n return changes.empty || this.explicitPos < 0 ? this : new ActiveSource(this.source, this.state, changes.mapPos(this.explicitPos));\n }\n}\nclass ActiveResult extends ActiveSource {\n constructor(source, explicitPos, result, from, to) {\n super(source, 2 /* State.Result */, explicitPos);\n this.result = result;\n this.from = from;\n this.to = to;\n }\n hasResult() { return true; }\n handleUserEvent(tr, type, conf) {\n var _a;\n let result = this.result;\n if (result.map && !tr.changes.empty)\n result = result.map(result, tr.changes);\n let from = tr.changes.mapPos(this.from), to = tr.changes.mapPos(this.to, 1);\n let pos = cur(tr.state);\n if ((this.explicitPos < 0 ? pos <= from : pos < this.from) ||\n pos > to || !result ||\n type == \"delete\" && cur(tr.startState) == this.from)\n return new ActiveSource(this.source, type == \"input\" && conf.activateOnTyping ? 1 /* State.Pending */ : 0 /* State.Inactive */);\n let explicitPos = this.explicitPos < 0 ? -1 : tr.changes.mapPos(this.explicitPos);\n if (checkValid(result.validFor, tr.state, from, to))\n return new ActiveResult(this.source, explicitPos, result, from, to);\n if (result.update &&\n (result = result.update(result, from, to, new CompletionContext(tr.state, pos, explicitPos >= 0))))\n return new ActiveResult(this.source, explicitPos, result, result.from, (_a = result.to) !== null && _a !== void 0 ? _a : cur(tr.state));\n return new ActiveSource(this.source, 1 /* State.Pending */, explicitPos);\n }\n handleChange(tr) {\n return tr.changes.touchesRange(this.from, this.to) ? new ActiveSource(this.source, 0 /* State.Inactive */) : this.map(tr.changes);\n }\n map(mapping) {\n if (mapping.empty)\n return this;\n let result = this.result.map ? this.result.map(this.result, mapping) : this.result;\n if (!result)\n return new ActiveSource(this.source, 0 /* State.Inactive */);\n return new ActiveResult(this.source, this.explicitPos < 0 ? -1 : mapping.mapPos(this.explicitPos), this.result, mapping.mapPos(this.from), mapping.mapPos(this.to, 1));\n }\n}\nfunction checkValid(validFor, state, from, to) {\n if (!validFor)\n return false;\n let text = state.sliceDoc(from, to);\n return typeof validFor == \"function\" ? validFor(text, from, to, state) : ensureAnchor(validFor, true).test(text);\n}\nconst setActiveEffect = /*@__PURE__*/StateEffect.define({\n map(sources, mapping) { return sources.map(s => s.map(mapping)); }\n});\nconst setSelectedEffect = /*@__PURE__*/StateEffect.define();\nconst completionState = /*@__PURE__*/StateField.define({\n create() { return CompletionState.start(); },\n update(value, tr) { return value.update(tr); },\n provide: f => [\n showTooltip.from(f, val => val.tooltip),\n EditorView.contentAttributes.from(f, state => state.attrs)\n ]\n});\nfunction applyCompletion(view, option) {\n const apply = option.completion.apply || option.completion.label;\n let result = view.state.field(completionState).active.find(a => a.source == option.source);\n if (!(result instanceof ActiveResult))\n return false;\n if (typeof apply == \"string\")\n view.dispatch(Object.assign(Object.assign({}, insertCompletionText(view.state, apply, result.from, result.to)), { annotations: pickedCompletion.of(option.completion) }));\n else\n apply(view, option.completion, result.from, result.to);\n return true;\n}\nconst createTooltip = /*@__PURE__*/completionTooltip(completionState, applyCompletion);\n\n/**\nReturns a command that moves the completion selection forward or\nbackward by the given amount.\n*/\nfunction moveCompletionSelection(forward, by = \"option\") {\n return (view) => {\n let cState = view.state.field(completionState, false);\n if (!cState || !cState.open || cState.open.disabled ||\n Date.now() - cState.open.timestamp < view.state.facet(completionConfig).interactionDelay)\n return false;\n let step = 1, tooltip;\n if (by == \"page\" && (tooltip = getTooltip(view, cState.open.tooltip)))\n step = Math.max(2, Math.floor(tooltip.dom.offsetHeight /\n tooltip.dom.querySelector(\"li\").offsetHeight) - 1);\n let { length } = cState.open.options;\n let selected = cState.open.selected > -1 ? cState.open.selected + step * (forward ? 1 : -1) : forward ? 0 : length - 1;\n if (selected < 0)\n selected = by == \"page\" ? 0 : length - 1;\n else if (selected >= length)\n selected = by == \"page\" ? length - 1 : 0;\n view.dispatch({ effects: setSelectedEffect.of(selected) });\n return true;\n };\n}\n/**\nAccept the current completion.\n*/\nconst acceptCompletion = (view) => {\n let cState = view.state.field(completionState, false);\n if (view.state.readOnly || !cState || !cState.open || cState.open.selected < 0 || cState.open.disabled ||\n Date.now() - cState.open.timestamp < view.state.facet(completionConfig).interactionDelay)\n return false;\n return applyCompletion(view, cState.open.options[cState.open.selected]);\n};\n/**\nExplicitly start autocompletion.\n*/\nconst startCompletion = (view) => {\n let cState = view.state.field(completionState, false);\n if (!cState)\n return false;\n view.dispatch({ effects: startCompletionEffect.of(true) });\n return true;\n};\n/**\nClose the currently active completion.\n*/\nconst closeCompletion = (view) => {\n let cState = view.state.field(completionState, false);\n if (!cState || !cState.active.some(a => a.state != 0 /* State.Inactive */))\n return false;\n view.dispatch({ effects: closeCompletionEffect.of(null) });\n return true;\n};\nclass RunningQuery {\n constructor(active, context) {\n this.active = active;\n this.context = context;\n this.time = Date.now();\n this.updates = [];\n // Note that 'undefined' means 'not done yet', whereas 'null' means\n // 'query returned null'.\n this.done = undefined;\n }\n}\nconst MaxUpdateCount = 50, MinAbortTime = 1000;\nconst completionPlugin = /*@__PURE__*/ViewPlugin.fromClass(class {\n constructor(view) {\n this.view = view;\n this.debounceUpdate = -1;\n this.running = [];\n this.debounceAccept = -1;\n this.pendingStart = false;\n this.composing = 0 /* CompositionState.None */;\n for (let active of view.state.field(completionState).active)\n if (active.state == 1 /* State.Pending */)\n this.startQuery(active);\n }\n update(update) {\n let cState = update.state.field(completionState);\n let conf = update.state.facet(completionConfig);\n if (!update.selectionSet && !update.docChanged && update.startState.field(completionState) == cState)\n return;\n let doesReset = update.transactions.some(tr => {\n return (tr.selection || tr.docChanged) && !getUserEvent(tr, conf);\n });\n for (let i = 0; i < this.running.length; i++) {\n let query = this.running[i];\n if (doesReset ||\n query.updates.length + update.transactions.length > MaxUpdateCount && Date.now() - query.time > MinAbortTime) {\n for (let handler of query.context.abortListeners) {\n try {\n handler();\n }\n catch (e) {\n logException(this.view.state, e);\n }\n }\n query.context.abortListeners = null;\n this.running.splice(i--, 1);\n }\n else {\n query.updates.push(...update.transactions);\n }\n }\n if (this.debounceUpdate > -1)\n clearTimeout(this.debounceUpdate);\n if (update.transactions.some(tr => tr.effects.some(e => e.is(startCompletionEffect))))\n this.pendingStart = true;\n let delay = this.pendingStart ? 50 : conf.activateOnTypingDelay;\n this.debounceUpdate = cState.active.some(a => a.state == 1 /* State.Pending */ && !this.running.some(q => q.active.source == a.source))\n ? setTimeout(() => this.startUpdate(), delay) : -1;\n if (this.composing != 0 /* CompositionState.None */)\n for (let tr of update.transactions) {\n if (getUserEvent(tr, conf) == \"input\")\n this.composing = 2 /* CompositionState.Changed */;\n else if (this.composing == 2 /* CompositionState.Changed */ && tr.selection)\n this.composing = 3 /* CompositionState.ChangedAndMoved */;\n }\n }\n startUpdate() {\n this.debounceUpdate = -1;\n this.pendingStart = false;\n let { state } = this.view, cState = state.field(completionState);\n for (let active of cState.active) {\n if (active.state == 1 /* State.Pending */ && !this.running.some(r => r.active.source == active.source))\n this.startQuery(active);\n }\n }\n startQuery(active) {\n let { state } = this.view, pos = cur(state);\n let context = new CompletionContext(state, pos, active.explicitPos == pos);\n let pending = new RunningQuery(active, context);\n this.running.push(pending);\n Promise.resolve(active.source(context)).then(result => {\n if (!pending.context.aborted) {\n pending.done = result || null;\n this.scheduleAccept();\n }\n }, err => {\n this.view.dispatch({ effects: closeCompletionEffect.of(null) });\n logException(this.view.state, err);\n });\n }\n scheduleAccept() {\n if (this.running.every(q => q.done !== undefined))\n this.accept();\n else if (this.debounceAccept < 0)\n this.debounceAccept = setTimeout(() => this.accept(), this.view.state.facet(completionConfig).updateSyncTime);\n }\n // For each finished query in this.running, try to create a result\n // or, if appropriate, restart the query.\n accept() {\n var _a;\n if (this.debounceAccept > -1)\n clearTimeout(this.debounceAccept);\n this.debounceAccept = -1;\n let updated = [];\n let conf = this.view.state.facet(completionConfig);\n for (let i = 0; i < this.running.length; i++) {\n let query = this.running[i];\n if (query.done === undefined)\n continue;\n this.running.splice(i--, 1);\n if (query.done) {\n let active = new ActiveResult(query.active.source, query.active.explicitPos, query.done, query.done.from, (_a = query.done.to) !== null && _a !== void 0 ? _a : cur(query.updates.length ? query.updates[0].startState : this.view.state));\n // Replay the transactions that happened since the start of\n // the request and see if that preserves the result\n for (let tr of query.updates)\n active = active.update(tr, conf);\n if (active.hasResult()) {\n updated.push(active);\n continue;\n }\n }\n let current = this.view.state.field(completionState).active.find(a => a.source == query.active.source);\n if (current && current.state == 1 /* State.Pending */) {\n if (query.done == null) {\n // Explicitly failed. Should clear the pending status if it\n // hasn't been re-set in the meantime.\n let active = new ActiveSource(query.active.source, 0 /* State.Inactive */);\n for (let tr of query.updates)\n active = active.update(tr, conf);\n if (active.state != 1 /* State.Pending */)\n updated.push(active);\n }\n else {\n // Cleared by subsequent transactions. Restart.\n this.startQuery(current);\n }\n }\n }\n if (updated.length)\n this.view.dispatch({ effects: setActiveEffect.of(updated) });\n }\n}, {\n eventHandlers: {\n blur(event) {\n let state = this.view.state.field(completionState, false);\n if (state && state.tooltip && this.view.state.facet(completionConfig).closeOnBlur) {\n let dialog = state.open && getTooltip(this.view, state.open.tooltip);\n if (!dialog || !dialog.dom.contains(event.relatedTarget))\n setTimeout(() => this.view.dispatch({ effects: closeCompletionEffect.of(null) }), 10);\n }\n },\n compositionstart() {\n this.composing = 1 /* CompositionState.Started */;\n },\n compositionend() {\n if (this.composing == 3 /* CompositionState.ChangedAndMoved */) {\n // Safari fires compositionend events synchronously, possibly\n // from inside an update, so dispatch asynchronously to avoid reentrancy\n setTimeout(() => this.view.dispatch({ effects: startCompletionEffect.of(false) }), 20);\n }\n this.composing = 0 /* CompositionState.None */;\n }\n }\n});\nconst windows = typeof navigator == \"object\" && /*@__PURE__*//Win/.test(navigator.platform);\nconst commitCharacters = /*@__PURE__*/Prec.highest(/*@__PURE__*/EditorView.domEventHandlers({\n keydown(event, view) {\n let field = view.state.field(completionState, false);\n if (!field || !field.open || field.open.disabled || field.open.selected < 0 ||\n event.key.length > 1 || event.ctrlKey && !(windows && event.altKey) || event.metaKey)\n return false;\n let option = field.open.options[field.open.selected];\n let result = field.active.find(a => a.source == option.source);\n let commitChars = option.completion.commitCharacters || result.result.commitCharacters;\n if (commitChars && commitChars.indexOf(event.key) > -1)\n applyCompletion(view, option);\n return false;\n }\n}));\n\nconst baseTheme = /*@__PURE__*/EditorView.baseTheme({\n \".cm-tooltip.cm-tooltip-autocomplete\": {\n \"& > ul\": {\n fontFamily: \"monospace\",\n whiteSpace: \"nowrap\",\n overflow: \"hidden auto\",\n maxWidth_fallback: \"700px\",\n maxWidth: \"min(700px, 95vw)\",\n minWidth: \"250px\",\n maxHeight: \"10em\",\n height: \"100%\",\n listStyle: \"none\",\n margin: 0,\n padding: 0,\n \"& > li, & > completion-section\": {\n padding: \"1px 3px\",\n lineHeight: 1.2\n },\n \"& > li\": {\n overflowX: \"hidden\",\n textOverflow: \"ellipsis\",\n cursor: \"pointer\"\n },\n \"& > completion-section\": {\n display: \"list-item\",\n borderBottom: \"1px solid silver\",\n paddingLeft: \"0.5em\",\n opacity: 0.7\n }\n }\n },\n \"&light .cm-tooltip-autocomplete ul li[aria-selected]\": {\n background: \"#17c\",\n color: \"white\",\n },\n \"&light .cm-tooltip-autocomplete-disabled ul li[aria-selected]\": {\n background: \"#777\",\n },\n \"&dark .cm-tooltip-autocomplete ul li[aria-selected]\": {\n background: \"#347\",\n color: \"white\",\n },\n \"&dark .cm-tooltip-autocomplete-disabled ul li[aria-selected]\": {\n background: \"#444\",\n },\n \".cm-completionListIncompleteTop:before, .cm-completionListIncompleteBottom:after\": {\n content: '\"···\"',\n opacity: 0.5,\n display: \"block\",\n textAlign: \"center\"\n },\n \".cm-tooltip.cm-completionInfo\": {\n position: \"absolute\",\n padding: \"3px 9px\",\n width: \"max-content\",\n maxWidth: `${400 /* Info.Width */}px`,\n boxSizing: \"border-box\"\n },\n \".cm-completionInfo.cm-completionInfo-left\": { right: \"100%\" },\n \".cm-completionInfo.cm-completionInfo-right\": { left: \"100%\" },\n \".cm-completionInfo.cm-completionInfo-left-narrow\": { right: `${30 /* Info.Margin */}px` },\n \".cm-completionInfo.cm-completionInfo-right-narrow\": { left: `${30 /* Info.Margin */}px` },\n \"&light .cm-snippetField\": { backgroundColor: \"#00000022\" },\n \"&dark .cm-snippetField\": { backgroundColor: \"#ffffff22\" },\n \".cm-snippetFieldPosition\": {\n verticalAlign: \"text-top\",\n width: 0,\n height: \"1.15em\",\n display: \"inline-block\",\n margin: \"0 -0.7px -.7em\",\n borderLeft: \"1.4px dotted #888\"\n },\n \".cm-completionMatchedText\": {\n textDecoration: \"underline\"\n },\n \".cm-completionDetail\": {\n marginLeft: \"0.5em\",\n fontStyle: \"italic\"\n },\n \".cm-completionIcon\": {\n fontSize: \"90%\",\n width: \".8em\",\n display: \"inline-block\",\n textAlign: \"center\",\n paddingRight: \".6em\",\n opacity: \"0.6\",\n boxSizing: \"content-box\"\n },\n \".cm-completionIcon-function, .cm-completionIcon-method\": {\n \"&:after\": { content: \"'ƒ'\" }\n },\n \".cm-completionIcon-class\": {\n \"&:after\": { content: \"'○'\" }\n },\n \".cm-completionIcon-interface\": {\n \"&:after\": { content: \"'◌'\" }\n },\n \".cm-completionIcon-variable\": {\n \"&:after\": { content: \"'𝑥'\" }\n },\n \".cm-completionIcon-constant\": {\n \"&:after\": { content: \"'𝐶'\" }\n },\n \".cm-completionIcon-type\": {\n \"&:after\": { content: \"'𝑡'\" }\n },\n \".cm-completionIcon-enum\": {\n \"&:after\": { content: \"'∪'\" }\n },\n \".cm-completionIcon-property\": {\n \"&:after\": { content: \"'□'\" }\n },\n \".cm-completionIcon-keyword\": {\n \"&:after\": { content: \"'🔑\\uFE0E'\" } // Disable emoji rendering\n },\n \".cm-completionIcon-namespace\": {\n \"&:after\": { content: \"'▢'\" }\n },\n \".cm-completionIcon-text\": {\n \"&:after\": { content: \"'abc'\", fontSize: \"50%\", verticalAlign: \"middle\" }\n }\n});\n\nclass FieldPos {\n constructor(field, line, from, to) {\n this.field = field;\n this.line = line;\n this.from = from;\n this.to = to;\n }\n}\nclass FieldRange {\n constructor(field, from, to) {\n this.field = field;\n this.from = from;\n this.to = to;\n }\n map(changes) {\n let from = changes.mapPos(this.from, -1, MapMode.TrackDel);\n let to = changes.mapPos(this.to, 1, MapMode.TrackDel);\n return from == null || to == null ? null : new FieldRange(this.field, from, to);\n }\n}\nclass Snippet {\n constructor(lines, fieldPositions) {\n this.lines = lines;\n this.fieldPositions = fieldPositions;\n }\n instantiate(state, pos) {\n let text = [], lineStart = [pos];\n let lineObj = state.doc.lineAt(pos), baseIndent = /^\\s*/.exec(lineObj.text)[0];\n for (let line of this.lines) {\n if (text.length) {\n let indent = baseIndent, tabs = /^\\t*/.exec(line)[0].length;\n for (let i = 0; i < tabs; i++)\n indent += state.facet(indentUnit);\n lineStart.push(pos + indent.length - tabs);\n line = indent + line.slice(tabs);\n }\n text.push(line);\n pos += line.length + 1;\n }\n let ranges = this.fieldPositions.map(pos => new FieldRange(pos.field, lineStart[pos.line] + pos.from, lineStart[pos.line] + pos.to));\n return { text, ranges };\n }\n static parse(template) {\n let fields = [];\n let lines = [], positions = [], m;\n for (let line of template.split(/\\r\\n?|\\n/)) {\n while (m = /[#$]\\{(?:(\\d+)(?::([^}]*))?|((?:\\\\[{}]|[^}])*))\\}/.exec(line)) {\n let seq = m[1] ? +m[1] : null, rawName = m[2] || m[3] || \"\", found = -1;\n let name = rawName.replace(/\\\\[{}]/g, m => m[1]);\n for (let i = 0; i < fields.length; i++) {\n if (seq != null ? fields[i].seq == seq : name ? fields[i].name == name : false)\n found = i;\n }\n if (found < 0) {\n let i = 0;\n while (i < fields.length && (seq == null || (fields[i].seq != null && fields[i].seq < seq)))\n i++;\n fields.splice(i, 0, { seq, name });\n found = i;\n for (let pos of positions)\n if (pos.field >= found)\n pos.field++;\n }\n positions.push(new FieldPos(found, lines.length, m.index, m.index + name.length));\n line = line.slice(0, m.index) + rawName + line.slice(m.index + m[0].length);\n }\n line = line.replace(/\\\\([{}])/g, (_, brace, index) => {\n for (let pos of positions)\n if (pos.line == lines.length && pos.from > index) {\n pos.from--;\n pos.to--;\n }\n return brace;\n });\n lines.push(line);\n }\n return new Snippet(lines, positions);\n }\n}\nlet fieldMarker = /*@__PURE__*/Decoration.widget({ widget: /*@__PURE__*/new class extends WidgetType {\n toDOM() {\n let span = document.createElement(\"span\");\n span.className = \"cm-snippetFieldPosition\";\n return span;\n }\n ignoreEvent() { return false; }\n } });\nlet fieldRange = /*@__PURE__*/Decoration.mark({ class: \"cm-snippetField\" });\nclass ActiveSnippet {\n constructor(ranges, active) {\n this.ranges = ranges;\n this.active = active;\n this.deco = Decoration.set(ranges.map(r => (r.from == r.to ? fieldMarker : fieldRange).range(r.from, r.to)));\n }\n map(changes) {\n let ranges = [];\n for (let r of this.ranges) {\n let mapped = r.map(changes);\n if (!mapped)\n return null;\n ranges.push(mapped);\n }\n return new ActiveSnippet(ranges, this.active);\n }\n selectionInsideField(sel) {\n return sel.ranges.every(range => this.ranges.some(r => r.field == this.active && r.from <= range.from && r.to >= range.to));\n }\n}\nconst setActive = /*@__PURE__*/StateEffect.define({\n map(value, changes) { return value && value.map(changes); }\n});\nconst moveToField = /*@__PURE__*/StateEffect.define();\nconst snippetState = /*@__PURE__*/StateField.define({\n create() { return null; },\n update(value, tr) {\n for (let effect of tr.effects) {\n if (effect.is(setActive))\n return effect.value;\n if (effect.is(moveToField) && value)\n return new ActiveSnippet(value.ranges, effect.value);\n }\n if (value && tr.docChanged)\n value = value.map(tr.changes);\n if (value && tr.selection && !value.selectionInsideField(tr.selection))\n value = null;\n return value;\n },\n provide: f => EditorView.decorations.from(f, val => val ? val.deco : Decoration.none)\n});\nfunction fieldSelection(ranges, field) {\n return EditorSelection.create(ranges.filter(r => r.field == field).map(r => EditorSelection.range(r.from, r.to)));\n}\n/**\nConvert a snippet template to a function that can\n[apply](https://codemirror.net/6/docs/ref/#autocomplete.Completion.apply) it. Snippets are written\nusing syntax like this:\n\n \"for (let ${index} = 0; ${index} < ${end}; ${index}++) {\\n\\t${}\\n}\"\n\nEach `${}` placeholder (you may also use `#{}`) indicates a field\nthat the user can fill in. Its name, if any, will be the default\ncontent for the field.\n\nWhen the snippet is activated by calling the returned function,\nthe code is inserted at the given position. Newlines in the\ntemplate are indented by the indentation of the start line, plus\none [indent unit](https://codemirror.net/6/docs/ref/#language.indentUnit) per tab character after\nthe newline.\n\nOn activation, (all instances of) the first field are selected.\nThe user can move between fields with Tab and Shift-Tab as long as\nthe fields are active. Moving to the last field or moving the\ncursor out of the current field deactivates the fields.\n\nThe order of fields defaults to textual order, but you can add\nnumbers to placeholders (`${1}` or `${1:defaultText}`) to provide\na custom order.\n\nTo include a literal `{` or `}` in your template, put a backslash\nin front of it. This will be removed and the brace will not be\ninterpreted as indicating a placeholder.\n*/\nfunction snippet(template) {\n let snippet = Snippet.parse(template);\n return (editor, completion, from, to) => {\n let { text, ranges } = snippet.instantiate(editor.state, from);\n let spec = {\n changes: { from, to, insert: Text.of(text) },\n scrollIntoView: true,\n annotations: completion ? [pickedCompletion.of(completion), Transaction.userEvent.of(\"input.complete\")] : undefined\n };\n if (ranges.length)\n spec.selection = fieldSelection(ranges, 0);\n if (ranges.some(r => r.field > 0)) {\n let active = new ActiveSnippet(ranges, 0);\n let effects = spec.effects = [setActive.of(active)];\n if (editor.state.field(snippetState, false) === undefined)\n effects.push(StateEffect.appendConfig.of([snippetState, addSnippetKeymap, snippetPointerHandler, baseTheme]));\n }\n editor.dispatch(editor.state.update(spec));\n };\n}\nfunction moveField(dir) {\n return ({ state, dispatch }) => {\n let active = state.field(snippetState, false);\n if (!active || dir < 0 && active.active == 0)\n return false;\n let next = active.active + dir, last = dir > 0 && !active.ranges.some(r => r.field == next + dir);\n dispatch(state.update({\n selection: fieldSelection(active.ranges, next),\n effects: setActive.of(last ? null : new ActiveSnippet(active.ranges, next)),\n scrollIntoView: true\n }));\n return true;\n };\n}\n/**\nA command that clears the active snippet, if any.\n*/\nconst clearSnippet = ({ state, dispatch }) => {\n let active = state.field(snippetState, false);\n if (!active)\n return false;\n dispatch(state.update({ effects: setActive.of(null) }));\n return true;\n};\n/**\nMove to the next snippet field, if available.\n*/\nconst nextSnippetField = /*@__PURE__*/moveField(1);\n/**\nMove to the previous snippet field, if available.\n*/\nconst prevSnippetField = /*@__PURE__*/moveField(-1);\n/**\nCheck if there is an active snippet with a next field for\n`nextSnippetField` to move to.\n*/\nfunction hasNextSnippetField(state) {\n let active = state.field(snippetState, false);\n return !!(active && active.ranges.some(r => r.field == active.active + 1));\n}\n/**\nReturns true if there is an active snippet and a previous field\nfor `prevSnippetField` to move to.\n*/\nfunction hasPrevSnippetField(state) {\n let active = state.field(snippetState, false);\n return !!(active && active.active > 0);\n}\nconst defaultSnippetKeymap = [\n { key: \"Tab\", run: nextSnippetField, shift: prevSnippetField },\n { key: \"Escape\", run: clearSnippet }\n];\n/**\nA facet that can be used to configure the key bindings used by\nsnippets. The default binds Tab to\n[`nextSnippetField`](https://codemirror.net/6/docs/ref/#autocomplete.nextSnippetField), Shift-Tab to\n[`prevSnippetField`](https://codemirror.net/6/docs/ref/#autocomplete.prevSnippetField), and Escape\nto [`clearSnippet`](https://codemirror.net/6/docs/ref/#autocomplete.clearSnippet).\n*/\nconst snippetKeymap = /*@__PURE__*/Facet.define({\n combine(maps) { return maps.length ? maps[0] : defaultSnippetKeymap; }\n});\nconst addSnippetKeymap = /*@__PURE__*/Prec.highest(/*@__PURE__*/keymap.compute([snippetKeymap], state => state.facet(snippetKeymap)));\n/**\nCreate a completion from a snippet. Returns an object with the\nproperties from `completion`, plus an `apply` function that\napplies the snippet.\n*/\nfunction snippetCompletion(template, completion) {\n return Object.assign(Object.assign({}, completion), { apply: snippet(template) });\n}\nconst snippetPointerHandler = /*@__PURE__*/EditorView.domEventHandlers({\n mousedown(event, view) {\n let active = view.state.field(snippetState, false), pos;\n if (!active || (pos = view.posAtCoords({ x: event.clientX, y: event.clientY })) == null)\n return false;\n let match = active.ranges.find(r => r.from <= pos && r.to >= pos);\n if (!match || match.field == active.active)\n return false;\n view.dispatch({\n selection: fieldSelection(active.ranges, match.field),\n effects: setActive.of(active.ranges.some(r => r.field > match.field)\n ? new ActiveSnippet(active.ranges, match.field) : null),\n scrollIntoView: true\n });\n return true;\n }\n});\n\nfunction wordRE(wordChars) {\n let escaped = wordChars.replace(/[\\]\\-\\\\]/g, \"\\\\$&\");\n try {\n return new RegExp(`[\\\\p{Alphabetic}\\\\p{Number}_${escaped}]+`, \"ug\");\n }\n catch (_a) {\n return new RegExp(`[\\w${escaped}]`, \"g\");\n }\n}\nfunction mapRE(re, f) {\n return new RegExp(f(re.source), re.unicode ? \"u\" : \"\");\n}\nconst wordCaches = /*@__PURE__*/Object.create(null);\nfunction wordCache(wordChars) {\n return wordCaches[wordChars] || (wordCaches[wordChars] = new WeakMap);\n}\nfunction storeWords(doc, wordRE, result, seen, ignoreAt) {\n for (let lines = doc.iterLines(), pos = 0; !lines.next().done;) {\n let { value } = lines, m;\n wordRE.lastIndex = 0;\n while (m = wordRE.exec(value)) {\n if (!seen[m[0]] && pos + m.index != ignoreAt) {\n result.push({ type: \"text\", label: m[0] });\n seen[m[0]] = true;\n if (result.length >= 2000 /* C.MaxList */)\n return;\n }\n }\n pos += value.length + 1;\n }\n}\nfunction collectWords(doc, cache, wordRE, to, ignoreAt) {\n let big = doc.length >= 1000 /* C.MinCacheLen */;\n let cached = big && cache.get(doc);\n if (cached)\n return cached;\n let result = [], seen = Object.create(null);\n if (doc.children) {\n let pos = 0;\n for (let ch of doc.children) {\n if (ch.length >= 1000 /* C.MinCacheLen */) {\n for (let c of collectWords(ch, cache, wordRE, to - pos, ignoreAt - pos)) {\n if (!seen[c.label]) {\n seen[c.label] = true;\n result.push(c);\n }\n }\n }\n else {\n storeWords(ch, wordRE, result, seen, ignoreAt - pos);\n }\n pos += ch.length + 1;\n }\n }\n else {\n storeWords(doc, wordRE, result, seen, ignoreAt);\n }\n if (big && result.length < 2000 /* C.MaxList */)\n cache.set(doc, result);\n return result;\n}\n/**\nA completion source that will scan the document for words (using a\n[character categorizer](https://codemirror.net/6/docs/ref/#state.EditorState.charCategorizer)), and\nreturn those as completions.\n*/\nconst completeAnyWord = context => {\n let wordChars = context.state.languageDataAt(\"wordChars\", context.pos).join(\"\");\n let re = wordRE(wordChars);\n let token = context.matchBefore(mapRE(re, s => s + \"$\"));\n if (!token && !context.explicit)\n return null;\n let from = token ? token.from : context.pos;\n let options = collectWords(context.state.doc, wordCache(wordChars), re, 50000 /* C.Range */, from);\n return { from, options, validFor: mapRE(re, s => \"^\" + s) };\n};\n\nconst defaults = {\n brackets: [\"(\", \"[\", \"{\", \"'\", '\"'],\n before: \")]}:;>\",\n stringPrefixes: []\n};\nconst closeBracketEffect = /*@__PURE__*/StateEffect.define({\n map(value, mapping) {\n let mapped = mapping.mapPos(value, -1, MapMode.TrackAfter);\n return mapped == null ? undefined : mapped;\n }\n});\nconst closedBracket = /*@__PURE__*/new class extends RangeValue {\n};\nclosedBracket.startSide = 1;\nclosedBracket.endSide = -1;\nconst bracketState = /*@__PURE__*/StateField.define({\n create() { return RangeSet.empty; },\n update(value, tr) {\n value = value.map(tr.changes);\n if (tr.selection) {\n let line = tr.state.doc.lineAt(tr.selection.main.head);\n value = value.update({ filter: from => from >= line.from && from <= line.to });\n }\n for (let effect of tr.effects)\n if (effect.is(closeBracketEffect))\n value = value.update({ add: [closedBracket.range(effect.value, effect.value + 1)] });\n return value;\n }\n});\n/**\nExtension to enable bracket-closing behavior. When a closeable\nbracket is typed, its closing bracket is immediately inserted\nafter the cursor. When closing a bracket directly in front of a\nclosing bracket inserted by the extension, the cursor moves over\nthat bracket.\n*/\nfunction closeBrackets() {\n return [inputHandler, bracketState];\n}\nconst definedClosing = \"()[]{}<>\";\nfunction closing(ch) {\n for (let i = 0; i < definedClosing.length; i += 2)\n if (definedClosing.charCodeAt(i) == ch)\n return definedClosing.charAt(i + 1);\n return fromCodePoint(ch < 128 ? ch : ch + 1);\n}\nfunction config(state, pos) {\n return state.languageDataAt(\"closeBrackets\", pos)[0] || defaults;\n}\nconst android = typeof navigator == \"object\" && /*@__PURE__*//Android\\b/.test(navigator.userAgent);\nconst inputHandler = /*@__PURE__*/EditorView.inputHandler.of((view, from, to, insert) => {\n if ((android ? view.composing : view.compositionStarted) || view.state.readOnly)\n return false;\n let sel = view.state.selection.main;\n if (insert.length > 2 || insert.length == 2 && codePointSize(codePointAt(insert, 0)) == 1 ||\n from != sel.from || to != sel.to)\n return false;\n let tr = insertBracket(view.state, insert);\n if (!tr)\n return false;\n view.dispatch(tr);\n return true;\n});\n/**\nCommand that implements deleting a pair of matching brackets when\nthe cursor is between them.\n*/\nconst deleteBracketPair = ({ state, dispatch }) => {\n if (state.readOnly)\n return false;\n let conf = config(state, state.selection.main.head);\n let tokens = conf.brackets || defaults.brackets;\n let dont = null, changes = state.changeByRange(range => {\n if (range.empty) {\n let before = prevChar(state.doc, range.head);\n for (let token of tokens) {\n if (token == before && nextChar(state.doc, range.head) == closing(codePointAt(token, 0)))\n return { changes: { from: range.head - token.length, to: range.head + token.length },\n range: EditorSelection.cursor(range.head - token.length) };\n }\n }\n return { range: dont = range };\n });\n if (!dont)\n dispatch(state.update(changes, { scrollIntoView: true, userEvent: \"delete.backward\" }));\n return !dont;\n};\n/**\nClose-brackets related key bindings. Binds Backspace to\n[`deleteBracketPair`](https://codemirror.net/6/docs/ref/#autocomplete.deleteBracketPair).\n*/\nconst closeBracketsKeymap = [\n { key: \"Backspace\", run: deleteBracketPair }\n];\n/**\nImplements the extension's behavior on text insertion. If the\ngiven string counts as a bracket in the language around the\nselection, and replacing the selection with it requires custom\nbehavior (inserting a closing version or skipping past a\npreviously-closed bracket), this function returns a transaction\nrepresenting that custom behavior. (You only need this if you want\nto programmatically insert brackets—the\n[`closeBrackets`](https://codemirror.net/6/docs/ref/#autocomplete.closeBrackets) extension will\ntake care of running this for user input.)\n*/\nfunction insertBracket(state, bracket) {\n let conf = config(state, state.selection.main.head);\n let tokens = conf.brackets || defaults.brackets;\n for (let tok of tokens) {\n let closed = closing(codePointAt(tok, 0));\n if (bracket == tok)\n return closed == tok ? handleSame(state, tok, tokens.indexOf(tok + tok + tok) > -1, conf)\n : handleOpen(state, tok, closed, conf.before || defaults.before);\n if (bracket == closed && closedBracketAt(state, state.selection.main.from))\n return handleClose(state, tok, closed);\n }\n return null;\n}\nfunction closedBracketAt(state, pos) {\n let found = false;\n state.field(bracketState).between(0, state.doc.length, from => {\n if (from == pos)\n found = true;\n });\n return found;\n}\nfunction nextChar(doc, pos) {\n let next = doc.sliceString(pos, pos + 2);\n return next.slice(0, codePointSize(codePointAt(next, 0)));\n}\nfunction prevChar(doc, pos) {\n let prev = doc.sliceString(pos - 2, pos);\n return codePointSize(codePointAt(prev, 0)) == prev.length ? prev : prev.slice(1);\n}\nfunction handleOpen(state, open, close, closeBefore) {\n let dont = null, changes = state.changeByRange(range => {\n if (!range.empty)\n return { changes: [{ insert: open, from: range.from }, { insert: close, from: range.to }],\n effects: closeBracketEffect.of(range.to + open.length),\n range: EditorSelection.range(range.anchor + open.length, range.head + open.length) };\n let next = nextChar(state.doc, range.head);\n if (!next || /\\s/.test(next) || closeBefore.indexOf(next) > -1)\n return { changes: { insert: open + close, from: range.head },\n effects: closeBracketEffect.of(range.head + open.length),\n range: EditorSelection.cursor(range.head + open.length) };\n return { range: dont = range };\n });\n return dont ? null : state.update(changes, {\n scrollIntoView: true,\n userEvent: \"input.type\"\n });\n}\nfunction handleClose(state, _open, close) {\n let dont = null, changes = state.changeByRange(range => {\n if (range.empty && nextChar(state.doc, range.head) == close)\n return { changes: { from: range.head, to: range.head + close.length, insert: close },\n range: EditorSelection.cursor(range.head + close.length) };\n return dont = { range };\n });\n return dont ? null : state.update(changes, {\n scrollIntoView: true,\n userEvent: \"input.type\"\n });\n}\n// Handles cases where the open and close token are the same, and\n// possibly triple quotes (as in `\"\"\"abc\"\"\"`-style quoting).\nfunction handleSame(state, token, allowTriple, config) {\n let stringPrefixes = config.stringPrefixes || defaults.stringPrefixes;\n let dont = null, changes = state.changeByRange(range => {\n if (!range.empty)\n return { changes: [{ insert: token, from: range.from }, { insert: token, from: range.to }],\n effects: closeBracketEffect.of(range.to + token.length),\n range: EditorSelection.range(range.anchor + token.length, range.head + token.length) };\n let pos = range.head, next = nextChar(state.doc, pos), start;\n if (next == token) {\n if (nodeStart(state, pos)) {\n return { changes: { insert: token + token, from: pos },\n effects: closeBracketEffect.of(pos + token.length),\n range: EditorSelection.cursor(pos + token.length) };\n }\n else if (closedBracketAt(state, pos)) {\n let isTriple = allowTriple && state.sliceDoc(pos, pos + token.length * 3) == token + token + token;\n let content = isTriple ? token + token + token : token;\n return { changes: { from: pos, to: pos + content.length, insert: content },\n range: EditorSelection.cursor(pos + content.length) };\n }\n }\n else if (allowTriple && state.sliceDoc(pos - 2 * token.length, pos) == token + token &&\n (start = canStartStringAt(state, pos - 2 * token.length, stringPrefixes)) > -1 &&\n nodeStart(state, start)) {\n return { changes: { insert: token + token + token + token, from: pos },\n effects: closeBracketEffect.of(pos + token.length),\n range: EditorSelection.cursor(pos + token.length) };\n }\n else if (state.charCategorizer(pos)(next) != CharCategory.Word) {\n if (canStartStringAt(state, pos, stringPrefixes) > -1 && !probablyInString(state, pos, token, stringPrefixes))\n return { changes: { insert: token + token, from: pos },\n effects: closeBracketEffect.of(pos + token.length),\n range: EditorSelection.cursor(pos + token.length) };\n }\n return { range: dont = range };\n });\n return dont ? null : state.update(changes, {\n scrollIntoView: true,\n userEvent: \"input.type\"\n });\n}\nfunction nodeStart(state, pos) {\n let tree = syntaxTree(state).resolveInner(pos + 1);\n return tree.parent && tree.from == pos;\n}\nfunction probablyInString(state, pos, quoteToken, prefixes) {\n let node = syntaxTree(state).resolveInner(pos, -1);\n let maxPrefix = prefixes.reduce((m, p) => Math.max(m, p.length), 0);\n for (let i = 0; i < 5; i++) {\n let start = state.sliceDoc(node.from, Math.min(node.to, node.from + quoteToken.length + maxPrefix));\n let quotePos = start.indexOf(quoteToken);\n if (!quotePos || quotePos > -1 && prefixes.indexOf(start.slice(0, quotePos)) > -1) {\n let first = node.firstChild;\n while (first && first.from == node.from && first.to - first.from > quoteToken.length + quotePos) {\n if (state.sliceDoc(first.to - quoteToken.length, first.to) == quoteToken)\n return false;\n first = first.firstChild;\n }\n return true;\n }\n let parent = node.to == pos && node.parent;\n if (!parent)\n break;\n node = parent;\n }\n return false;\n}\nfunction canStartStringAt(state, pos, prefixes) {\n let charCat = state.charCategorizer(pos);\n if (charCat(state.sliceDoc(pos - 1, pos)) != CharCategory.Word)\n return pos;\n for (let prefix of prefixes) {\n let start = pos - prefix.length;\n if (state.sliceDoc(start, pos) == prefix && charCat(state.sliceDoc(start - 1, start)) != CharCategory.Word)\n return start;\n }\n return -1;\n}\n\n/**\nReturns an extension that enables autocompletion.\n*/\nfunction autocompletion(config = {}) {\n return [\n commitCharacters,\n completionState,\n completionConfig.of(config),\n completionPlugin,\n completionKeymapExt,\n baseTheme\n ];\n}\n/**\nBasic keybindings for autocompletion.\n\n - Ctrl-Space: [`startCompletion`](https://codemirror.net/6/docs/ref/#autocomplete.startCompletion)\n - Escape: [`closeCompletion`](https://codemirror.net/6/docs/ref/#autocomplete.closeCompletion)\n - ArrowDown: [`moveCompletionSelection`](https://codemirror.net/6/docs/ref/#autocomplete.moveCompletionSelection)`(true)`\n - ArrowUp: [`moveCompletionSelection`](https://codemirror.net/6/docs/ref/#autocomplete.moveCompletionSelection)`(false)`\n - PageDown: [`moveCompletionSelection`](https://codemirror.net/6/docs/ref/#autocomplete.moveCompletionSelection)`(true, \"page\")`\n - PageDown: [`moveCompletionSelection`](https://codemirror.net/6/docs/ref/#autocomplete.moveCompletionSelection)`(true, \"page\")`\n - Enter: [`acceptCompletion`](https://codemirror.net/6/docs/ref/#autocomplete.acceptCompletion)\n*/\nconst completionKeymap = [\n { key: \"Ctrl-Space\", run: startCompletion },\n { key: \"Escape\", run: closeCompletion },\n { key: \"ArrowDown\", run: /*@__PURE__*/moveCompletionSelection(true) },\n { key: \"ArrowUp\", run: /*@__PURE__*/moveCompletionSelection(false) },\n { key: \"PageDown\", run: /*@__PURE__*/moveCompletionSelection(true, \"page\") },\n { key: \"PageUp\", run: /*@__PURE__*/moveCompletionSelection(false, \"page\") },\n { key: \"Enter\", run: acceptCompletion }\n];\nconst completionKeymapExt = /*@__PURE__*/Prec.highest(/*@__PURE__*/keymap.computeN([completionConfig], state => state.facet(completionConfig).defaultKeymap ? [completionKeymap] : []));\n/**\nGet the current completion status. When completions are available,\nthis will return `\"active\"`. When completions are pending (in the\nprocess of being queried), this returns `\"pending\"`. Otherwise, it\nreturns `null`.\n*/\nfunction completionStatus(state) {\n let cState = state.field(completionState, false);\n return cState && cState.active.some(a => a.state == 1 /* State.Pending */) ? \"pending\"\n : cState && cState.active.some(a => a.state != 0 /* State.Inactive */) ? \"active\" : null;\n}\nconst completionArrayCache = /*@__PURE__*/new WeakMap;\n/**\nReturns the available completions as an array.\n*/\nfunction currentCompletions(state) {\n var _a;\n let open = (_a = state.field(completionState, false)) === null || _a === void 0 ? void 0 : _a.open;\n if (!open || open.disabled)\n return [];\n let completions = completionArrayCache.get(open.options);\n if (!completions)\n completionArrayCache.set(open.options, completions = open.options.map(o => o.completion));\n return completions;\n}\n/**\nReturn the currently selected completion, if any.\n*/\nfunction selectedCompletion(state) {\n var _a;\n let open = (_a = state.field(completionState, false)) === null || _a === void 0 ? void 0 : _a.open;\n return open && !open.disabled && open.selected >= 0 ? open.options[open.selected].completion : null;\n}\n/**\nReturns the currently selected position in the active completion\nlist, or null if no completions are active.\n*/\nfunction selectedCompletionIndex(state) {\n var _a;\n let open = (_a = state.field(completionState, false)) === null || _a === void 0 ? void 0 : _a.open;\n return open && !open.disabled && open.selected >= 0 ? open.selected : null;\n}\n/**\nCreate an effect that can be attached to a transaction to change\nthe currently selected completion.\n*/\nfunction setSelectedCompletion(index) {\n return setSelectedEffect.of(index);\n}\n\nexport { CompletionContext, acceptCompletion, autocompletion, clearSnippet, closeBrackets, closeBracketsKeymap, closeCompletion, completeAnyWord, completeFromList, completionKeymap, completionStatus, currentCompletions, deleteBracketPair, hasNextSnippetField, hasPrevSnippetField, ifIn, ifNotIn, insertBracket, insertCompletionText, moveCompletionSelection, nextSnippetField, pickedCompletion, prevSnippetField, selectedCompletion, selectedCompletionIndex, setSelectedCompletion, snippet, snippetCompletion, snippetKeymap, startCompletion };\n"],"names":["CompletionContext","constructor","state","pos","explicit","this","abortListeners","tokenBefore","types","token","syntaxTree","resolveInner","indexOf","name","parent","from","to","text","sliceDoc","type","matchBefore","expr","line","doc","lineAt","start","Math","max","str","slice","found","search","ensureAnchor","aborted","addEventListener","listener","push","toSet","chars","flat","Object","keys","join","words","test","replace","completeFromList","list","options","map","o","label","validFor","match","every","first","create","rest","i","length","source","RegExp","prefixMatch","context","ifNotIn","nodes","isTop","Option","completion","score","cur","selection","main","_a","addStart","addEnd","flags","ignoreCase","pickedCompletion","Annotation","define","SourceCache","WeakMap","asSource","Array","isArray","known","get","set","startCompletionEffect","StateEffect","closeCompletionEffect","FuzzyMatcher","pattern","folded","any","precise","byWord","matched","p","char","codePointAt","size","codePointSize","part","upper","toUpperCase","toLowerCase","astral","ret","word","firstSize","direct","len","anyTo","e","min","next","preciseTo","byWordTo","byWordFolded","adjacentTo","adjacentStart","adjacentEnd","hasLower","wordAdjacent","prevType","ch","fromCodePoint","result","positions","StrictMatcher","completionConfig","Facet","combine","configs","combineConfig","activateOnTyping","activateOnCompletion","activateOnTypingDelay","selectOnOpen","override","closeOnBlur","maxRenderedOptions","defaultKeymap","tooltipClass","optionClass","aboveCursor","icons","addToOptions","positionInfo","defaultPositionInfo","filterStrict","compareCompletions","a","b","localeCompare","interactionDelay","updateSyncTime","c","joinClass","concat","view","option","info","space","tooltip","offset","maxWidth","rtl","textDirection","Direction","RTL","left","narrow","side","spaceLeft","spaceRight","right","infoWidth","infoHeight","bottom","top","spaceBelow","style","offsetHeight","offsetWidth","class","rangeAroundSelected","total","selected","off","floor","CompletionTooltip","stateField","applyCompletion","infoDestroy","placeInfoReq","read","measureInfo","write","placeInfo","key","currentClass","cState","field","open","config","facet","optionContent","content","render","icon","document","createElement","classList","add","split","cls","setAttribute","position","_s","_v","labelElt","className","displayLabel","j","appendChild","createTextNode","span","detail","detailElt","textContent","sort","range","dom","updateTooltipClass","target","parentNode","nodeName","exec","id","preventDefault","relatedTarget","contentDOM","dispatch","effects","of","showOptions","mount","updateSel","remove","createListBox","requestMeasure","update","prevState","startState","disabled","toggle","positioned","updateSelectedOption","destroyInfo","infoResult","then","obj","addInfoPane","catch","logException","wrap","nodeType","destroy","opt","firstChild","nextSibling","hasAttribute","removeAttribute","container","element","getBoundingClientRect","self","scaleY","height","scrollTop","scrollIntoView","sel","querySelector","listRect","infoRect","selRect","win","ownerDocument","defaultView","window","innerWidth","innerHeight","cssText","ul","phrase","curSection","section","header","li","node","completionTooltip","boost","apply","CompletionDialog","attrs","timestamp","setSelected","makeAttrs","build","active","prev","conf","sections","addOption","some","s","hasResult","getMatch","filter","matcher","sectionOrder","cmp","_b","rank","compare","sortOptions","selectedValue","reduce","createTooltip","above","Date","now","changes","assign","mapPos","CompletionState","none","random","toString","tr","languageDataAt","find","ActiveSource","docChanged","touchesRange","iA","iB","endA","endB","sameResults","effect","is","setSelectedEffect","value","baseAttrs","noAttrs","getUserEvent","isUserEvent","annotation","explicitPos","event","handleUserEvent","handleChange","setActiveEffect","empty","ActiveResult","super","checkValid","mapping","sources","completionState","StateField","provide","f","showTooltip","val","EditorView","contentAttributes","fromOff","toOff","changeByRange","insert","EditorSelection","cursor","userEvent","insertCompletionText","annotations","moveCompletionSelection","forward","by","step","getTooltip","RunningQuery","time","updates","done","undefined","completionPlugin","ViewPlugin","fromClass","debounceUpdate","running","debounceAccept","pendingStart","composing","startQuery","selectionSet","doesReset","transactions","query","handler","splice","clearTimeout","delay","q","setTimeout","startUpdate","r","pending","Promise","resolve","scheduleAccept","err","accept","updated","current","eventHandlers","blur","dialog","contains","compositionstart","compositionend","windows","navigator","platform","commitCharacters","Prec","highest","domEventHandlers","keydown","ctrlKey","altKey","metaKey","commitChars","baseTheme","fontFamily","whiteSpace","overflow","maxWidth_fallback","minWidth","maxHeight","listStyle","margin","padding","lineHeight","overflowX","textOverflow","display","borderBottom","paddingLeft","opacity","background","color","textAlign","width","boxSizing","backgroundColor","verticalAlign","borderLeft","textDecoration","marginLeft","fontStyle","fontSize","paddingRight","FieldPos","FieldRange","MapMode","TrackDel","Snippet","lines","fieldPositions","instantiate","lineStart","lineObj","baseIndent","indent","tabs","indentUnit","ranges","parse","template","m","fields","seq","rawName","index","_","brace","fieldMarker","Decoration","widget","WidgetType","toDOM","ignoreEvent","fieldRange","mark","ActiveSnippet","deco","mapped","selectionInsideField","setActive","moveToField","snippetState","decorations","fieldSelection","snippet","editor","spec","Text","Transaction","appendConfig","addSnippetKeymap","snippetPointerHandler","moveField","dir","last","defaultSnippetKeymap","run","shift","snippetKeymap","maps","keymap","compute","snippetCompletion","mousedown","posAtCoords","x","clientX","y","clientY","defaults","brackets","before","stringPrefixes","closeBracketEffect","TrackAfter","closedBracket","RangeValue","startSide","endSide","bracketState","RangeSet","head","closeBrackets","inputHandler","definedClosing","closing","charCodeAt","charAt","android","userAgent","compositionStarted","readOnly","bracket","tokens","tok","closed","handleSame","handleOpen","closedBracketAt","handleClose","insertBracket","closeBracketsKeymap","dont","sliceString","prevChar","nextChar","between","close","closeBefore","anchor","_open","allowTriple","nodeStart","canStartStringAt","charCategorizer","CharCategory","Word","quoteToken","prefixes","maxPrefix","quotePos","probablyInString","tree","charCat","prefix","autocompletion","completionKeymapExt","completionKeymap","computeN"],"mappings":"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","x_google_ignoreList":[0]}
|
@@ -1,2 +0,0 @@
|
|
1
|
-
import{T as e,X as t,d as r,a as n,r as o,o as s,H as i,s as a}from"./core-CAHVPjK9.js";let c=0;const l=e=>`${e}-editor-${c++}`,d=new Map,u=new Map,p={worker:{codeBeforeRun:()=>a,onReady:({runAsync:e,io:t},{sync:r})=>{t.stdout=t.buffered(r.write),t.stderr=t.buffered(r.writeErr),r.revoke(),r.runAsync=e}}};async function m({currentTarget:e}){const{env:r,pySrc:n,outDiv:a}=this,c=!!e;if(c&&(e.disabled=!0,a.innerHTML=""),!d.has(r)){const e=URL.createObjectURL(new Blob([""])),n={type:this.interpreter,serviceWorker:this.serviceWorker},{config:a}=this;if(a){if(n.configURL=o(a),a.endsWith(".toml")){const[{parse:e},t]=await Promise.all([import("./toml-CvAfdf9_.js"),fetch(a).then((e=>e.text()))]);n.config=e(t)}else a.endsWith(".json")?n.config=await fetch(a).then((e=>e.json())):(n.configURL=o("./config.txt"),n.config=JSON.parse(a));n.version=s(n.config)}else n.config={};const c=t.call(new i(null,p),e,n),{sync:l}=c,{promise:u,resolve:m}=Promise.withResolvers();d.set(r,u),l.revoke=()=>{URL.revokeObjectURL(e),m(c)}}return d.get(r).then((t=>{t.onerror=({error:e})=>{c&&(a.innerHTML+=`<span style='color:red'>${e.message||e}</span>\n`),console.error(e)};const r=()=>{c&&(e.disabled=!1)},{sync:o}=t;o.write=e=>{c&&(a.innerText+=`${e}\n`)},o.writeErr=e=>{c&&(a.innerHTML+=`<span style='color:red'>${e}</span>\n`)},o.runAsync(n).then(r,r)}))}const g=(e,t)=>{const r=document.createElement("div");r.className=`${t}-editor-input`,r.setAttribute("aria-label","Python Script Area");const n=((e,t)=>{const r=document.createElement("button");return r.className=`absolute ${t}-editor-run-button`,r.innerHTML='<svg style="height:20px;width:20px;vertical-align:-.125em;transform-origin:center;overflow:visible;color:green" viewBox="0 0 384 512" aria-hidden="true" role="img" xmlns="http://www.w3.org/2000/svg"><g transform="translate(192 256)" transform-origin="96 0"><g transform="translate(0,0) scale(1,1)"><path d="M361 215C375.3 223.8 384 239.3 384 256C384 272.7 375.3 288.2 361 296.1L73.03 472.1C58.21 482 39.66 482.4 24.52 473.9C9.377 465.4 0 449.4 0 432V80C0 62.64 9.377 46.63 24.52 38.13C39.66 29.64 58.21 29.99 73.03 39.04L361 215z" fill="currentColor" transform="translate(-192 -256)"></path></g></g></svg>',r.setAttribute("aria-label","Python Script Run Button"),r.addEventListener("click",(async t=>{r.blur(),await e.handleEvent(t)})),r})(e,t),o=document.createElement("div");return o.addEventListener("keydown",(e=>{e.stopPropagation()})),r.append(n,o),r},f=(e,t)=>{const r=document.createElement("div");r.className=`${t}-editor-box`;const n=g(e,t),o=(e=>{const t=document.createElement("div");return t.className=`${e}-editor-output`,t.id=`${l(e)}-output`,t})(t);return r.append(n,o),[r,o,n.querySelector("button")]},h=async(e,o,s)=>{const[{basicSetup:i,EditorView:a},{Compartment:c},{python:d},{indentUnit:p},{keymap:g},{defaultKeymap:h,indentWithTab:v}]=await Promise.all([import("./codemirror-DP2LKuBT.js"),import("./codemirror_state-D1qTXrff.js"),import("./codemirror_lang-python-CD-6L-Uh.js"),import("./codemirror_language-D6ce_yTr.js").then((function(e){return e.x})),import("./codemirror_view-byykwGDe.js").then((function(e){return e.q})),import("./codemirror_commands-Dtn37S2-.js")]);let y=e.hasAttribute("setup");const b=e.hasAttribute("config"),w=e.getAttribute("service-worker"),E=`${s}-${e.getAttribute("env")||l(o)}`;if(w&&(new t("data:application/javascript,postMessage(0)",{type:"dummy",serviceWorker:w}).onmessage=({target:e})=>e.terminate()),b&&u.has(E))throw new SyntaxError(u.get(E)?`duplicated config for env: ${E}`:`unable to add a config to the env: ${E}`);u.set(E,b);let $=e.src?await fetch(e.src).then((e=>e.text())):e.textContent;const k={handleEvent:m,serviceWorker:w,interpreter:s,env:E,config:b&&e.getAttribute("config"),get pySrc(){return y?$:P.state.doc.toString()},get outDiv(){return y?null:C}};let x;r(e,{target:{get:()=>x},handleEvent:{get:()=>k.handleEvent,set:e=>{k.handleEvent=e===m?m:async t=>{const{currentTarget:n}=t;r(t,{code:{value:k.pySrc}}),!1!==await e(t)&&await m.call(k,{currentTarget:n})}}},code:{get:()=>k.pySrc,set:e=>{y||P.update([P.state.update({changes:{from:0,to:P.state.doc.length,insert:e}})])}},process:{value(e){const t=y,r=$;y=!0,$=e;const n=()=>{y=t,$=r};return k.handleEvent({currentTarget:null}).then(n,n)}}});const A=()=>{const t=new Event(`${o}-editor`,{bubbles:!0});e.dispatchEvent(t)};if(y)return await k.handleEvent({currentTarget:null}),void A();const L=e.getAttribute("target");if(L){if(x=document.getElementById(L)||document.querySelector(L),!x)throw new Error(`Unknown target ${L}`)}else x=document.createElement(`${o}-editor`),x.style.display="block",e.after(x);x.id||(x.id=l(o)),x.hasAttribute("exec-id")||x.setAttribute("exec-id",0),x.hasAttribute("root")||x.setAttribute("root",x.id);const[S,C,T]=f(k,o);S.dataset.env=e.hasAttribute("env")?E:s;const j=S.querySelector(`.${o}-editor-input > div`).attachShadow({mode:"open"});j.innerHTML="<style> :host { all: initial; }</style>",x.appendChild(S);const M=n(e.textContent).trim(),R=/^([ \t]+)/m.test(M)?RegExp.$1:" ",U=()=>T.click(),P=new a({extensions:[p.of(R),(new c).of(d()),g.of([...h,{key:"Ctrl-Enter",run:U,preventDefault:!0},{key:"Cmd-Enter",run:U,preventDefault:!0},{key:"Shift-Enter",run:U,preventDefault:!0},v]),i],foldGutter:!0,gutters:["CodeMirror-linenumbers","CodeMirror-foldgutter"],parent:j,doc:M});P.focus(),A()};let v=0,y=Promise.resolve();const b=()=>{v=0,w()},w=()=>{if(!v){v=setTimeout(b,250);for(const[t,r]of e){const e=`script[type="${t}-editor"]`;for(const n of document.querySelectorAll(e))n.type+="-active",y=y.then((()=>h(n,t,r)))}return y}};new MutationObserver(w).observe(document,{childList:!0,subtree:!0});var E=w();export{E as default};
|
2
|
-
//# sourceMappingURL=py-editor-BDuee0vY.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"py-editor-BDuee0vY.js","sources":["../src/plugins/py-editor.js"],"sourcesContent":["// PyScript py-editor plugin\nimport { Hook, XWorker, dedent, defineProperties } from \"polyscript/exports\";\nimport { TYPES, offline_interpreter, relative_url, stdlib } from \"../core.js\";\n\nconst RUN_BUTTON = `<svg style=\"height:20px;width:20px;vertical-align:-.125em;transform-origin:center;overflow:visible;color:green\" viewBox=\"0 0 384 512\" aria-hidden=\"true\" role=\"img\" xmlns=\"http://www.w3.org/2000/svg\"><g transform=\"translate(192 256)\" transform-origin=\"96 0\"><g transform=\"translate(0,0) scale(1,1)\"><path d=\"M361 215C375.3 223.8 384 239.3 384 256C384 272.7 375.3 288.2 361 296.1L73.03 472.1C58.21 482 39.66 482.4 24.52 473.9C9.377 465.4 0 449.4 0 432V80C0 62.64 9.377 46.63 24.52 38.13C39.66 29.64 58.21 29.99 73.03 39.04L361 215z\" fill=\"currentColor\" transform=\"translate(-192 -256)\"></path></g></g></svg>`;\n\nlet id = 0;\nconst getID = (type) => `${type}-editor-${id++}`;\n\nconst envs = new Map();\nconst configs = new Map();\n\nconst hooks = {\n worker: {\n codeBeforeRun: () => stdlib,\n // works on both Pyodide and MicroPython\n onReady: ({ runAsync, io }, { sync }) => {\n io.stdout = io.buffered(sync.write);\n io.stderr = io.buffered(sync.writeErr);\n sync.revoke();\n sync.runAsync = runAsync;\n },\n },\n};\n\nasync function execute({ currentTarget }) {\n const { env, pySrc, outDiv } = this;\n const hasRunButton = !!currentTarget;\n\n if (hasRunButton) {\n currentTarget.disabled = true;\n outDiv.innerHTML = \"\";\n }\n\n if (!envs.has(env)) {\n const srcLink = URL.createObjectURL(new Blob([\"\"]));\n const details = {\n type: this.interpreter,\n serviceWorker: this.serviceWorker,\n };\n const { config } = this;\n if (config) {\n details.configURL = relative_url(config);\n if (config.endsWith(\".toml\")) {\n const [{ parse }, toml] = await Promise.all([\n import(/* webpackIgnore: true */ \"../3rd-party/toml.js\"),\n fetch(config).then((r) => r.text()),\n ]);\n details.config = parse(toml);\n } else if (config.endsWith(\".json\")) {\n details.config = await fetch(config).then((r) => r.json());\n } else {\n details.configURL = relative_url(\"./config.txt\");\n details.config = JSON.parse(config);\n }\n details.version = offline_interpreter(details.config);\n } else {\n details.config = {};\n }\n\n const xworker = XWorker.call(new Hook(null, hooks), srcLink, details);\n\n const { sync } = xworker;\n const { promise, resolve } = Promise.withResolvers();\n envs.set(env, promise);\n sync.revoke = () => {\n URL.revokeObjectURL(srcLink);\n resolve(xworker);\n };\n }\n\n // wait for the env then set the target div\n // before executing the current code\n return envs.get(env).then((xworker) => {\n xworker.onerror = ({ error }) => {\n if (hasRunButton) {\n outDiv.innerHTML += `<span style='color:red'>${\n error.message || error\n }</span>\\n`;\n }\n console.error(error);\n };\n\n const enable = () => {\n if (hasRunButton) currentTarget.disabled = false;\n };\n const { sync } = xworker;\n sync.write = (str) => {\n if (hasRunButton) outDiv.innerText += `${str}\\n`;\n };\n sync.writeErr = (str) => {\n if (hasRunButton) {\n outDiv.innerHTML += `<span style='color:red'>${str}</span>\\n`;\n }\n };\n sync.runAsync(pySrc).then(enable, enable);\n });\n}\n\nconst makeRunButton = (handler, type) => {\n const runButton = document.createElement(\"button\");\n runButton.className = `absolute ${type}-editor-run-button`;\n runButton.innerHTML = RUN_BUTTON;\n runButton.setAttribute(\"aria-label\", \"Python Script Run Button\");\n runButton.addEventListener(\"click\", async (event) => {\n runButton.blur();\n await handler.handleEvent(event);\n });\n return runButton;\n};\n\nconst makeEditorDiv = (handler, type) => {\n const editorDiv = document.createElement(\"div\");\n editorDiv.className = `${type}-editor-input`;\n editorDiv.setAttribute(\"aria-label\", \"Python Script Area\");\n\n const runButton = makeRunButton(handler, type);\n const editorShadowContainer = document.createElement(\"div\");\n\n // avoid outer elements intercepting key events (reveal as example)\n editorShadowContainer.addEventListener(\"keydown\", (event) => {\n event.stopPropagation();\n });\n\n editorDiv.append(runButton, editorShadowContainer);\n\n return editorDiv;\n};\n\nconst makeOutDiv = (type) => {\n const outDiv = document.createElement(\"div\");\n outDiv.className = `${type}-editor-output`;\n outDiv.id = `${getID(type)}-output`;\n return outDiv;\n};\n\nconst makeBoxDiv = (handler, type) => {\n const boxDiv = document.createElement(\"div\");\n boxDiv.className = `${type}-editor-box`;\n\n const editorDiv = makeEditorDiv(handler, type);\n const outDiv = makeOutDiv(type);\n boxDiv.append(editorDiv, outDiv);\n\n return [boxDiv, outDiv, editorDiv.querySelector(\"button\")];\n};\n\nconst init = async (script, type, interpreter) => {\n const [\n { basicSetup, EditorView },\n { Compartment },\n { python },\n { indentUnit },\n { keymap },\n { defaultKeymap, indentWithTab },\n ] = await Promise.all([\n import(/* webpackIgnore: true */ \"../3rd-party/codemirror.js\"),\n import(/* webpackIgnore: true */ \"../3rd-party/codemirror_state.js\"),\n import(\n /* webpackIgnore: true */ \"../3rd-party/codemirror_lang-python.js\"\n ),\n import(/* webpackIgnore: true */ \"../3rd-party/codemirror_language.js\"),\n import(/* webpackIgnore: true */ \"../3rd-party/codemirror_view.js\"),\n import(/* webpackIgnore: true */ \"../3rd-party/codemirror_commands.js\"),\n ]);\n\n let isSetup = script.hasAttribute(\"setup\");\n const hasConfig = script.hasAttribute(\"config\");\n const serviceWorker = script.getAttribute(\"service-worker\");\n const env = `${interpreter}-${script.getAttribute(\"env\") || getID(type)}`;\n\n // helps preventing too lazy ServiceWorker initialization on button run\n if (serviceWorker) {\n new XWorker(\"data:application/javascript,postMessage(0)\", {\n type: \"dummy\",\n serviceWorker,\n }).onmessage = ({ target }) => target.terminate();\n }\n\n if (hasConfig && configs.has(env)) {\n throw new SyntaxError(\n configs.get(env)\n ? `duplicated config for env: ${env}`\n : `unable to add a config to the env: ${env}`,\n );\n }\n\n configs.set(env, hasConfig);\n\n let source = script.src\n ? await fetch(script.src).then((b) => b.text())\n : script.textContent;\n const context = {\n // allow the listener to be overridden at distance\n handleEvent: execute,\n serviceWorker,\n interpreter,\n env,\n config: hasConfig && script.getAttribute(\"config\"),\n get pySrc() {\n return isSetup ? source : editor.state.doc.toString();\n },\n get outDiv() {\n return isSetup ? null : outDiv;\n },\n };\n\n let target;\n defineProperties(script, {\n target: { get: () => target },\n handleEvent: {\n get: () => context.handleEvent,\n set: (callback) => {\n // do not bother with logic if it was set back as its original handler\n if (callback === execute) context.handleEvent = execute;\n // in every other case be sure that if the listener override returned\n // `false` nothing happens, otherwise keep doing what it always did\n else {\n context.handleEvent = async (event) => {\n // trap the currentTarget ASAP (if any)\n // otherwise it gets lost asynchronously\n const { currentTarget } = event;\n // augment a code snapshot before invoking the override\n defineProperties(event, {\n code: { value: context.pySrc },\n });\n // avoid executing the default handler if the override returned `false`\n if ((await callback(event)) !== false)\n await execute.call(context, { currentTarget });\n };\n }\n },\n },\n code: {\n get: () => context.pySrc,\n set: (insert) => {\n if (isSetup) return;\n editor.update([\n editor.state.update({\n changes: {\n from: 0,\n to: editor.state.doc.length,\n insert,\n },\n }),\n ]);\n },\n },\n process: {\n /**\n * Simulate a setup node overriding the source to evaluate.\n * @param {string} code the Python code to evaluate.\n * @returns {Promise<...>} fulfill once code has been evaluated.\n */\n value(code) {\n const wasSetup = isSetup;\n const wasSource = source;\n isSetup = true;\n source = code;\n const restore = () => {\n isSetup = wasSetup;\n source = wasSource;\n };\n return context\n .handleEvent({ currentTarget: null })\n .then(restore, restore);\n },\n },\n });\n\n const notify = () => {\n const event = new Event(`${type}-editor`, { bubbles: true });\n script.dispatchEvent(event);\n };\n\n if (isSetup) {\n await context.handleEvent({ currentTarget: null });\n notify();\n return;\n }\n\n const selector = script.getAttribute(\"target\");\n\n if (selector) {\n target =\n document.getElementById(selector) ||\n document.querySelector(selector);\n if (!target) throw new Error(`Unknown target ${selector}`);\n } else {\n target = document.createElement(`${type}-editor`);\n target.style.display = \"block\";\n script.after(target);\n }\n\n if (!target.id) target.id = getID(type);\n if (!target.hasAttribute(\"exec-id\")) target.setAttribute(\"exec-id\", 0);\n if (!target.hasAttribute(\"root\")) target.setAttribute(\"root\", target.id);\n\n // @see https://github.com/JeffersGlass/mkdocs-pyscript/blob/main/mkdocs_pyscript/js/makeblocks.js\n const [boxDiv, outDiv, runButton] = makeBoxDiv(context, type);\n boxDiv.dataset.env = script.hasAttribute(\"env\") ? env : interpreter;\n\n const inputChild = boxDiv.querySelector(`.${type}-editor-input > div`);\n const parent = inputChild.attachShadow({ mode: \"open\" });\n // avoid inheriting styles from the outer component\n parent.innerHTML = `<style> :host { all: initial; }</style>`;\n\n target.appendChild(boxDiv);\n\n const doc = dedent(script.textContent).trim();\n\n // preserve user indentation, if any\n const indentation = /^([ \\t]+)/m.test(doc) ? RegExp.$1 : \" \";\n\n const listener = () => runButton.click();\n const editor = new EditorView({\n extensions: [\n indentUnit.of(indentation),\n new Compartment().of(python()),\n keymap.of([\n ...defaultKeymap,\n { key: \"Ctrl-Enter\", run: listener, preventDefault: true },\n { key: \"Cmd-Enter\", run: listener, preventDefault: true },\n { key: \"Shift-Enter\", run: listener, preventDefault: true },\n // @see https://codemirror.net/examples/tab/\n indentWithTab,\n ]),\n basicSetup,\n ],\n foldGutter: true,\n gutters: [\"CodeMirror-linenumbers\", \"CodeMirror-foldgutter\"],\n parent,\n doc,\n });\n\n editor.focus();\n notify();\n};\n\n// avoid too greedy MutationObserver operations at distance\nlet timeout = 0;\n\n// avoid delayed initialization\nlet queue = Promise.resolve();\n\n// reset interval value then check for new scripts\nconst resetTimeout = () => {\n timeout = 0;\n pyEditor();\n};\n\n// triggered both ASAP on the living DOM and via MutationObserver later\nconst pyEditor = () => {\n if (timeout) return;\n timeout = setTimeout(resetTimeout, 250);\n for (const [type, interpreter] of TYPES) {\n const selector = `script[type=\"${type}-editor\"]`;\n for (const script of document.querySelectorAll(selector)) {\n // avoid any further bootstrap by changing the type as active\n script.type += \"-active\";\n // don't await in here or multiple calls might happen\n // while the first script is being initialized\n queue = queue.then(() => init(script, type, interpreter));\n }\n }\n return queue;\n};\n\nnew MutationObserver(pyEditor).observe(document, {\n childList: true,\n subtree: true,\n});\n\n// try to check the current document ASAP\nexport default pyEditor();\n"],"names":["id","getID","type","envs","Map","configs","hooks","worker","codeBeforeRun","stdlib","onReady","runAsync","io","sync","stdout","buffered","write","stderr","writeErr","revoke","async","execute","currentTarget","env","pySrc","outDiv","this","hasRunButton","disabled","innerHTML","has","srcLink","URL","createObjectURL","Blob","details","interpreter","serviceWorker","config","configURL","relative_url","endsWith","parse","toml","Promise","all","import","fetch","then","r","text","json","JSON","version","offline_interpreter","xworker","XWorker","call","Hook","promise","resolve","withResolvers","set","revokeObjectURL","get","onerror","error","message","console","enable","str","innerText","makeEditorDiv","handler","editorDiv","document","createElement","className","setAttribute","runButton","addEventListener","event","blur","handleEvent","makeRunButton","editorShadowContainer","stopPropagation","append","makeBoxDiv","boxDiv","makeOutDiv","querySelector","init","script","basicSetup","EditorView","Compartment","python","indentUnit","keymap","defaultKeymap","indentWithTab","n","x","q","isSetup","hasAttribute","hasConfig","getAttribute","onmessage","target","terminate","SyntaxError","source","src","b","textContent","context","editor","state","doc","toString","defineProperties","callback","code","value","insert","update","changes","from","to","length","process","wasSetup","wasSource","restore","notify","Event","bubbles","dispatchEvent","selector","getElementById","Error","style","display","after","dataset","parent","attachShadow","mode","appendChild","dedent","trim","indentation","test","RegExp","$1","listener","click","extensions","of","key","run","preventDefault","foldGutter","gutters","focus","timeout","queue","resetTimeout","pyEditor","setTimeout","TYPES","querySelectorAll","MutationObserver","observe","childList","subtree","pyEditor$1"],"mappings":"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"}
|
@@ -1,2 +0,0 @@
|
|
1
|
-
const D=function({onlyFirst:D=!1}={}){const u=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))"].join("|");return new RegExp(u,D?void 0:"g")}();function u(D){return D&&D.__esModule&&Object.prototype.hasOwnProperty.call(D,"default")?D.default:D}var t={exports:{}};!function(D){var u={};function e(D){return D.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]|[^\uD800-\uDFFF]/g)||[]}t.exports=u,u.eastAsianWidth=function(D){var u=D.charCodeAt(0),t=2==D.length?D.charCodeAt(1):0,e=u;return 55296<=u&&u<=56319&&56320<=t&&t<=57343&&(e=(u&=1023)<<10|(t&=1023),e+=65536),12288==e||65281<=e&&e<=65376||65504<=e&&e<=65510?"F":8361==e||65377<=e&&e<=65470||65474<=e&&e<=65479||65482<=e&&e<=65487||65490<=e&&e<=65495||65498<=e&&e<=65500||65512<=e&&e<=65518?"H":4352<=e&&e<=4447||4515<=e&&e<=4519||4602<=e&&e<=4607||9001<=e&&e<=9002||11904<=e&&e<=11929||11931<=e&&e<=12019||12032<=e&&e<=12245||12272<=e&&e<=12283||12289<=e&&e<=12350||12353<=e&&e<=12438||12441<=e&&e<=12543||12549<=e&&e<=12589||12593<=e&&e<=12686||12688<=e&&e<=12730||12736<=e&&e<=12771||12784<=e&&e<=12830||12832<=e&&e<=12871||12880<=e&&e<=13054||13056<=e&&e<=19903||19968<=e&&e<=42124||42128<=e&&e<=42182||43360<=e&&e<=43388||44032<=e&&e<=55203||55216<=e&&e<=55238||55243<=e&&e<=55291||63744<=e&&e<=64255||65040<=e&&e<=65049||65072<=e&&e<=65106||65108<=e&&e<=65126||65128<=e&&e<=65131||110592<=e&&e<=110593||127488<=e&&e<=127490||127504<=e&&e<=127546||127552<=e&&e<=127560||127568<=e&&e<=127569||131072<=e&&e<=194367||177984<=e&&e<=196605||196608<=e&&e<=262141?"W":32<=e&&e<=126||162<=e&&e<=163||165<=e&&e<=166||172==e||175==e||10214<=e&&e<=10221||10629<=e&&e<=10630?"Na":161==e||164==e||167<=e&&e<=168||170==e||173<=e&&e<=174||176<=e&&e<=180||182<=e&&e<=186||188<=e&&e<=191||198==e||208==e||215<=e&&e<=216||222<=e&&e<=225||230==e||232<=e&&e<=234||236<=e&&e<=237||240==e||242<=e&&e<=243||247<=e&&e<=250||252==e||254==e||257==e||273==e||275==e||283==e||294<=e&&e<=295||299==e||305<=e&&e<=307||312==e||319<=e&&e<=322||324==e||328<=e&&e<=331||333==e||338<=e&&e<=339||358<=e&&e<=359||363==e||462==e||464==e||466==e||468==e||470==e||472==e||474==e||476==e||593==e||609==e||708==e||711==e||713<=e&&e<=715||717==e||720==e||728<=e&&e<=731||733==e||735==e||768<=e&&e<=879||913<=e&&e<=929||931<=e&&e<=937||945<=e&&e<=961||963<=e&&e<=969||1025==e||1040<=e&&e<=1103||1105==e||8208==e||8211<=e&&e<=8214||8216<=e&&e<=8217||8220<=e&&e<=8221||8224<=e&&e<=8226||8228<=e&&e<=8231||8240==e||8242<=e&&e<=8243||8245==e||8251==e||8254==e||8308==e||8319==e||8321<=e&&e<=8324||8364==e||8451==e||8453==e||8457==e||8467==e||8470==e||8481<=e&&e<=8482||8486==e||8491==e||8531<=e&&e<=8532||8539<=e&&e<=8542||8544<=e&&e<=8555||8560<=e&&e<=8569||8585==e||8592<=e&&e<=8601||8632<=e&&e<=8633||8658==e||8660==e||8679==e||8704==e||8706<=e&&e<=8707||8711<=e&&e<=8712||8715==e||8719==e||8721==e||8725==e||8730==e||8733<=e&&e<=8736||8739==e||8741==e||8743<=e&&e<=8748||8750==e||8756<=e&&e<=8759||8764<=e&&e<=8765||8776==e||8780==e||8786==e||8800<=e&&e<=8801||8804<=e&&e<=8807||8810<=e&&e<=8811||8814<=e&&e<=8815||8834<=e&&e<=8835||8838<=e&&e<=8839||8853==e||8857==e||8869==e||8895==e||8978==e||9312<=e&&e<=9449||9451<=e&&e<=9547||9552<=e&&e<=9587||9600<=e&&e<=9615||9618<=e&&e<=9621||9632<=e&&e<=9633||9635<=e&&e<=9641||9650<=e&&e<=9651||9654<=e&&e<=9655||9660<=e&&e<=9661||9664<=e&&e<=9665||9670<=e&&e<=9672||9675==e||9678<=e&&e<=9681||9698<=e&&e<=9701||9711==e||9733<=e&&e<=9734||9737==e||9742<=e&&e<=9743||9748<=e&&e<=9749||9756==e||9758==e||9792==e||9794==e||9824<=e&&e<=9825||9827<=e&&e<=9829||9831<=e&&e<=9834||9836<=e&&e<=9837||9839==e||9886<=e&&e<=9887||9918<=e&&e<=9919||9924<=e&&e<=9933||9935<=e&&e<=9953||9955==e||9960<=e&&e<=9983||10045==e||10071==e||10102<=e&&e<=10111||11093<=e&&e<=11097||12872<=e&&e<=12879||57344<=e&&e<=63743||65024<=e&&e<=65039||65533==e||127232<=e&&e<=127242||127248<=e&&e<=127277||127280<=e&&e<=127337||127344<=e&&e<=127386||917760<=e&&e<=917999||983040<=e&&e<=1048573||1048576<=e&&e<=1114109?"A":"N"},u.characterLength=function(D){var u=this.eastAsianWidth(D);return"F"==u||"W"==u||"A"==u?2:1},u.length=function(D){for(var u=e(D),t=0,F=0;F<u.length;F++)t+=this.characterLength(u[F]);return t},u.slice=function(D,t,F){textLen=u.length(D),F=F||1,(t=t||0)<0&&(t=textLen+t),F<0&&(F=textLen+F);for(var s="",C=0,i=e(D),r=0;r<i.length;r++){var E=i[r],o=u.length(E);if(C>=t-(2==o?1:0)){if(!(C+o<=F))break;s+=E}C+=o}return s}}();var e=u(t.exports),F=u((function(){return/\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67)\uDB40\uDC7F|(?:\uD83E\uDDD1\uD83C\uDFFF\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFC-\uDFFF])|\uD83D\uDC68(?:\uD83C\uDFFB(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|[\u2695\u2696\u2708]\uFE0F|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))?|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D[\uDC66\uDC67])|\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC)?|(?:\uD83D\uDC69(?:\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69]))|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC69(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83E\uDDD1(?:\u200D(?:\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDE36\u200D\uD83C\uDF2B|\uD83C\uDFF3\uFE0F\u200D\u26A7|\uD83D\uDC3B\u200D\u2744|(?:(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\uD83C\uDFF4\u200D\u2620|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])\u200D[\u2640\u2642]|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600-\u2604\u260E\u2611\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0\u26F1\u26F4\u26F7\u26F8\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u3030\u303D\u3297\u3299]|\uD83C[\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]|\uD83D[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3])\uFE0F|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDE35\u200D\uD83D\uDCAB|\uD83D\uDE2E\u200D\uD83D\uDCA8|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83E\uDDD1(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83D\uDC69(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDF4\uD83C\uDDF2|\uD83D\uDC08\u200D\u2B1B|\u2764\uFE0F\u200D(?:\uD83D\uDD25|\uD83E\uDE79)|\uD83D\uDC41\uFE0F|\uD83C\uDFF3\uFE0F|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|[#\*0-9]\uFE0F\u20E3|\u2764\uFE0F|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|\uD83C\uDFF4|(?:[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270C\u270D]|\uD83D[\uDD74\uDD90])(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC08\uDC15\uDC3B\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE2E\uDE35\uDE36\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5]|\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD]|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0D\uDD0E\uDD10-\uDD17\uDD1D\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78\uDD7A-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCB\uDDD0\uDDE0-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6]|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26A7\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5-\uDED7\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDD77\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g}));function s(u,t={}){if("string"!=typeof u||0===u.length)return 0;if(t={ambiguousIsNarrow:!0,...t},0===(u=function(u){if("string"!=typeof u)throw new TypeError(`Expected a \`string\`, got \`${typeof u}\``);return u.replace(D,"")}(u)).length)return 0;u=u.replace(F()," ");const s=t.ambiguousIsNarrow?1:2;let C=0;for(const D of u){const u=D.codePointAt(0);if(u<=31||u>=127&&u<=159)continue;if(u>=768&&u<=879)continue;switch(e.eastAsianWidth(D)){case"F":case"W":C+=2;break;case"A":C+=s;break;default:C+=1}}return C}var C,i,r,E="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},o={},n={};C=n,Object.defineProperty(C,"__esModule",{value:!0}),C.parseInput=C.InputType=void 0,(r=i=C.InputType||(C.InputType={}))[r.Text=0]="Text",r[r.AltEnter=1]="AltEnter",r[r.ArrowUp=2]="ArrowUp",r[r.ArrowDown=3]="ArrowDown",r[r.ArrowLeft=4]="ArrowLeft",r[r.ArrowRight=5]="ArrowRight",r[r.Delete=6]="Delete",r[r.Backspace=7]="Backspace",r[r.CtrlA=8]="CtrlA",r[r.CtrlC=9]="CtrlC",r[r.CtrlD=10]="CtrlD",r[r.CtrlE=11]="CtrlE",r[r.CtrlK=12]="CtrlK",r[r.CtrlL=13]="CtrlL",r[r.CtrlQ=14]="CtrlQ",r[r.CtrlS=15]="CtrlS",r[r.CtrlU=16]="CtrlU",r[r.End=17]="End",r[r.Enter=18]="Enter",r[r.Home=19]="Home",r[r.ShiftEnter=20]="ShiftEnter",r[r.UnsupportedControlChar=21]="UnsupportedControlChar",r[r.UnsupportedEscape=22]="UnsupportedEscape",C.parseInput=function(D){return Array.from(function*(D){let u=[];const t=D[Symbol.iterator]();for(let D=t.next();!D.done;D=t.next()){const e=D.value;if(e.length>1){u.push(e);continue}const F=e.charCodeAt(0);if(u.length>0&&(F<32||127===F)&&(yield{inputType:i.Text,data:u},u=[]),27!==F)if(F<32||127===F){let D=i.UnsupportedControlChar;switch(F){case 1:D=i.CtrlA;break;case 3:D=i.CtrlC;break;case 4:D=i.CtrlD;break;case 5:D=i.CtrlE;break;case 11:D=i.CtrlK;break;case 17:D=i.CtrlQ;break;case 19:D=i.CtrlS;break;case 21:D=i.CtrlU;break;case 13:D=i.Enter;break;case 127:D=i.Backspace;break;case 12:D=i.CtrlL}yield{inputType:D,data:[e]}}else u.push(e);else{const D=t.next();if(D.done){u.push("");continue}let e=i.UnsupportedEscape;if("["!==D.value){"\r"===D.value&&(e=i.AltEnter),yield{inputType:e,data:["",D.value]};continue}const F=t.next();if(F.done)continue;if(F.value>="0"&&F.value<="9"){let D=F.value;const u=t.next();if(u.done)return;if(u.value>="0"&&u.value<="9")D+=u.value;else if("~"!==u.value)continue;"3"===D&&(e=i.Delete),yield{inputType:e,data:["","[",D,"~"]};continue}switch(F.value){case"A":e=i.ArrowUp;break;case"B":e=i.ArrowDown;break;case"C":e=i.ArrowRight;break;case"D":e=i.ArrowLeft;break;case"F":e=i.End;break;case"H":e=i.Home;break;case"\r":e=i.AltEnter}yield{inputType:e,data:["","[",F.value]}}}u.length>0&&(yield{inputType:i.Text,data:u})}(D))};var h={},a={};Object.defineProperty(a,"__esModule",{value:!0}),a.LineBuffer=void 0,a.LineBuffer=class{constructor(){this.buf="",this.pos=0}buffer(){return this.buf}pos_buffer(){return this.buf.slice(0,this.pos)}length(){return this.buf.length}char_length(){return[...this.buf].length}update(D,u){this.buf=D,this.pos=u}insert(D){const u=D.length,t=this.pos===this.buf.length;return this.buf=t?this.buf+D:this.buf.slice(0,this.pos)+D+this.buf.slice(this.pos),this.pos+=u,t}moveBack(D){const u=this.prevPos(D);return void 0!==u&&(this.pos=u,!0)}moveForward(D){const u=this.nextPos(D);return void 0!==u&&(this.pos=u,!0)}moveHome(){const D=this.startOfLine();return this.pos>D&&(this.pos=D,!0)}moveEnd(){const D=this.endOfLine();return this.pos!==D&&(this.pos=D,!0)}startOfLine(){const D=this.buf.slice(0,this.pos).lastIndexOf("\n");return-1!==D?D+1:0}endOfLine(){const D=this.buf.slice(this.pos).indexOf("\n");return-1!==D?this.pos+D:this.buf.length}moveLineUp(D){const u=this.buf.slice(0,this.pos).lastIndexOf("\n");if(-1===u)return!1;const t=[...this.buf.slice(u+1,this.pos)].length;let e=this.buf.slice(0,u).lastIndexOf("\n");-1===e?e=0:e+=1;let F=u;for(let u=1;u<D&&0!==e;u++)F=e-1,e=this.buf.slice(0,F).lastIndexOf("\n"),-1===e?e=0:e+=1;const s=[...this.buf.slice(e,F)].slice(0,t);let C=u;return s.length>0&&(C=s.map((D=>D.length)).reduce(((D,u)=>D+u),0),C=e+C),this.pos=C,!0}moveLineDown(D){const u=this.buf.slice(this.pos).indexOf("\n");if(-1===u)return!1;let t=this.buf.slice(0,this.pos).lastIndexOf("\n");-1===t?t=0:t+=1;const e=[...this.buf.slice(t,this.pos)].length;let F=this.pos+u+1,s=this.buf.slice(F).indexOf("\n");s=-1===s?this.buf.length:F+s;for(let u=1;u<D&&s!==this.buf.length;u++)F=s+1,s=this.buf.slice(F).indexOf("\n"),s=-1===s?this.buf.length:F+s;const C=[...this.buf.slice(F,s)];return e<C.length?this.pos=C.slice(0,e).map((D=>D.length)).reduce(((D,u)=>D+u),0)+F:this.pos=s,!0}set_pos(D){this.pos=D}prevPos(D){if(0===this.pos)return;const u=this.buf.slice(0,this.pos);return this.pos-[...u].slice(-D).map((D=>D.length)).reduce(((D,u)=>D+u),0)}nextPos(D){if(this.pos===this.buf.length)return;const u=this.buf.slice(this.pos);return this.pos+[...u].slice(0,D).map((D=>D.length)).reduce(((D,u)=>D+u),0)}backspace(D){const u=this.prevPos(D);return void 0!==u&&(this.buf=this.buf.slice(0,u)+this.buf.slice(this.pos),this.pos=u,!0)}delete(D){const u=this.nextPos(D);return void 0!==u&&(this.buf=this.buf.slice(0,this.pos)+this.buf.slice(u),!0)}deleteEndOfLine(){if(0==this.buf.length||this.pos==this.buf.length)return!1;const D=this.pos,u=this.endOfLine();return D==u?this.delete(1):this.buf=this.buf.slice(0,D)+this.buf.slice(u),!0}};var l=E&&E.__importDefault||function(D){return D&&D.__esModule?D:{default:D}};Object.defineProperty(h,"__esModule",{value:!0}),h.State=h.Layout=h.Position=void 0;const B=a,c=l(s);class p{constructor(D,u){this.row=void 0!==D?D:0,this.col=void 0!==u?u:0}}h.Position=p;class d{constructor(D){this.promptSize=D,this.cursor=new p,this.end=new p}}h.Layout=d,h.State=class{constructor(D,u,t,e){this.line=new B.LineBuffer,this.highlighting=!1,this.prompt=D,this.tty=u,this.highlighter=t,this.history=e,this.promptSize=u.calculatePosition(D,new p),this.layout=new d(this.promptSize)}buffer(){return this.line.buffer()}shouldHighlight(){return this.highlighter.highlightChar(this.line.buf,this.line.pos)?(this.highlighting=!0,!0):!!this.highlighting&&(this.highlighting=!1,!0)}clearScreen(){this.tty.clearScreen(),this.layout.cursor=new p,this.layout.end=new p,this.refresh()}editInsert(D){const u=this.line.insert(D),t=D.includes("\n");if(u&&!t){const u=(0,c.default)(D);u>0&&this.layout.cursor.col+u<this.tty.col&&!this.shouldHighlight()?(this.layout.cursor.col+=u,this.layout.end.col+=u,this.tty.write(D)):this.refresh()}else this.refresh()}update(D){this.line.update(D,D.length),this.refresh()}editBackspace(D){this.line.backspace(D)&&this.refresh()}editDelete(D){this.line.delete(D)&&this.refresh()}editDeleteEndOfLine(){this.line.deleteEndOfLine()&&this.refresh()}refresh(){const D=this.tty.computeLayout(this.promptSize,this.line);this.tty.refreshLine(this.prompt,this.line,this.layout,D,this.highlighter),this.layout=D}moveCursorBack(D){this.line.moveBack(D)&&this.moveCursor()}moveCursorForward(D){this.line.moveForward(D)&&this.moveCursor()}moveCursorUp(D){this.line.moveLineUp(D)?this.moveCursor():this.previousHistory()}moveCursorDown(D){this.line.moveLineDown(D)?this.moveCursor():this.nextHistory()}moveCursorHome(){this.line.moveHome()&&this.moveCursor()}moveCursorEnd(){this.line.moveEnd()&&this.moveCursor()}moveCursorToEnd(){this.layout.cursor!==this.layout.end&&(this.tty.moveCursor(this.layout.cursor,this.layout.end),this.layout.cursor=Object.assign({},this.layout.end))}previousHistory(){if(-1===this.history.cursor&&this.line.length()>0)return;const D=this.history.prev();void 0!==D&&this.update(D)}nextHistory(){if(-1===this.history.cursor)return;const D=this.history.next();void 0!==D?this.update(D):this.update("")}moveCursor(){const D=this.tty.calculatePosition(this.line.pos_buffer(),this.promptSize);D!==this.layout.cursor&&(this.shouldHighlight()?this.refresh():(this.tty.moveCursor(this.layout.cursor,D),this.layout.promptSize=Object.assign({},this.promptSize),this.layout.cursor=Object.assign({},D)))}};var A={};Object.defineProperty(A,"__esModule",{value:!0}),A.History=void 0,A.History=class{constructor(D){this.entries=[],this.cursor=-1,this.maxEntries=D}saveToLocalStorage(){const D=null===window||void 0===window?void 0:window.localStorage;void 0!==D&&D.setItem("history",JSON.stringify(this.entries))}restoreFromLocalStorage(){const D=null===window||void 0===window?void 0:window.localStorage;if(void 0!==D){const u=D.getItem("history");if(null==u)return;try{const t=JSON.parse(u);Array.isArray(t)&&void 0===t.find((D=>"string"!=typeof D))?this.entries=t:(this.entries=[],D.setItem("history","[]"))}catch(u){this.entries=[],D.setItem("history","[]")}}}append(D){this.resetCursor(),this.entries.includes(D)?(this.entries.splice(this.entries.indexOf(D),1),this.entries.unshift(D)):this.entries.unshift(D),this.entries.length>this.maxEntries&&this.entries.pop(),this.saveToLocalStorage()}resetCursor(){this.cursor=-1}next(){if(-1!==this.cursor)return this.cursor-=1,this.entries[this.cursor]}prev(){if(!(this.cursor+1>=this.entries.length))return this.cursor+=1,this.entries[this.cursor]}};var f={},y=E&&E.__importDefault||function(D){return D&&D.__esModule?D:{default:D}};Object.defineProperty(f,"__esModule",{value:!0}),f.Tty=void 0;const g=y(s);f.Tty=class{constructor(D,u,t,e){this.tabWidth=t,this.col=D,this.row=u,this.out=e}write(D){return this.out.write(D)}print(D){return this.out.print(D)}println(D){return this.out.println(D)}clearScreen(){this.out.write("[H[2J")}calculatePosition(D,u){const t=Object.assign({},u);let e=0;return[...D].forEach((D=>{if("\n"===D)return t.row+=1,void(t.col=0);let u=0;if("\t"===D)u=this.tabWidth-t.col%this.tabWidth;else{let t;[t,e]=function(D,u){return 1===u?"["===D?[0,2]:[0,0]:2===u?";"===D||D[0]>="0"&&D[0]<="9"?[0,u]:[0,0]:""===D?[0,1]:"\n"===D?[0,u]:[(0,g.default)(D),u]}(D,e),u=t}t.col+=u,t.col>this.col&&(t.row+=1,t.col=u)})),t.col===this.col&&(t.col=0,t.row+=1),t}computeLayout(D,u){const t=Object.assign({},D),e=u.pos,F=this.calculatePosition(u.buf.slice(0,u.pos),D);return{promptSize:t,cursor:F,end:e===u.buf.length?Object.assign({},F):this.calculatePosition(u.buf.slice(e),F)}}refreshLine(D,u,t,e,F){const s=e.cursor,C=e.end;this.clearOldRows(t),this.write(F.highlightPrompt(D)),this.write(F.highlight(u.buf,u.pos)),0===C.col&&C.row>0&&"\n"!==u.buf[u.buf.length-1]&&this.write("\n");const i=C.row-s.row;i>0&&this.write(`[${i}A`),s.col>0?this.write(`\r[${s.col}C`):this.write("\r")}clearOldRows(D){const u=D.cursor.row,t=D.end.row,e=Math.max(t-u,0);e>0&&this.write(`[${e}B`);for(let D=0;D<t;D++)this.write("\r[0K[A");this.write("\r[0K")}moveCursor(D,u){if(u.row>D.row){const t=u.row-D.row;1===t?this.write("[B"):this.write(`[${t}B`)}else if(u.row<D.row){const t=D.row-u.row;1===t?this.write("[A"):this.write(`[${t}A`)}if(u.col>D.col){const t=u.col-D.col;1===t?this.write("[C"):this.write(`[${t}C`)}else if(u.col<D.col){const t=D.col-u.col;1===t?this.write("[D"):this.write(`[${t}D`)}}};var v={};Object.defineProperty(v,"__esModule",{value:!0}),v.IdentityHighlighter=void 0,v.IdentityHighlighter=class{highlight(D,u){return D}highlightPrompt(D){return D}highlightChar(D,u){return!1}},Object.defineProperty(o,"__esModule",{value:!0});var w=o.Readline=void 0;const b=n,m=h,T=A,k=f,I=v;w=o.Readline=class{constructor(){this.highlighter=new I.IdentityHighlighter,this.history=new T.History(50),this.disposables=[],this.watermark=0,this.highWatermark=1e4,this.lowWatermark=1e3,this.highWater=!1,this.state=new m.State(">",this.tty(),this.highlighter,this.history),this.checkHandler=()=>!0,this.ctrlCHandler=()=>{},this.pauseHandler=D=>{},this.history.restoreFromLocalStorage()}activate(D){this.term=D,this.term.onData(this.readData.bind(this)),this.term.attachCustomKeyEventHandler(this.handleKeyEvent.bind(this))}dispose(){this.disposables.forEach((D=>D.dispose()))}appendHistory(D){this.history.append(D)}setHighlighter(D){this.highlighter=D}setCheckHandler(D){this.checkHandler=D}setCtrlCHandler(D){this.ctrlCHandler=D}setPauseHandler(D){this.pauseHandler=D}writeReady(){return!this.highWater}write(D){const u=(D="\n"===D?"\r\n":(D=D.replace(/^\n/,"\r\n")).replace(/([^\r])\n/g,"$1\r\n")).length;this.watermark+=u,this.watermark>this.highWatermark&&(this.highWater=!0),this.term&&this.term.write(D,(()=>{this.watermark=Math.max(this.watermark-u,0),this.highWater&&this.watermark<this.lowWatermark&&(this.highWater=!1)}))}print(D){return this.write(D)}println(D){return this.write(D+"\r\n")}output(){return this}tty(){var D,u;return void 0!==(null===(u=null===(D=this.term)||void 0===D?void 0:D.options)||void 0===u?void 0:u.tabStopWidth)?new k.Tty(this.term.cols,this.term.rows,this.term.options.tabStopWidth,this.output()):new k.Tty(0,0,8,this.output())}read(D){return new Promise(((u,t)=>{void 0!==this.term?(this.state=new m.State(D,this.tty(),this.highlighter,this.history),this.state.refresh(),this.activeRead={prompt:D,resolve:u,reject:t}):t("addon is not active")}))}handleKeyEvent(D){return"Enter"!==D.key||!D.shiftKey||("keydown"===D.type&&this.readKey({inputType:b.InputType.ShiftEnter,data:["\r"]}),!1)}readData(D){const u=(0,b.parseInput)(D);u.length>1||u[0].inputType===b.InputType.Text&&u[0].data.length>1?this.readPaste(u):this.readKey(u[0])}readPaste(D){const u=D.map((D=>D.inputType===b.InputType.Enter?{inputType:b.InputType.Text,data:["\n"]}:D));for(const D of u)D.inputType===b.InputType.Text?this.state.editInsert(D.data.join("")):this.readKey(D)}readKey(D){var u,t,e;if(void 0!==this.activeRead)switch(D.inputType){case b.InputType.Text:this.state.editInsert(D.data.join(""));break;case b.InputType.AltEnter:case b.InputType.ShiftEnter:this.state.editInsert("\n");break;case b.InputType.Enter:this.checkHandler(this.state.buffer())?(this.state.moveCursorToEnd(),null===(u=this.term)||void 0===u||u.write("\r\n"),this.history.append(this.state.buffer()),null===(t=this.activeRead)||void 0===t||t.resolve(this.state.buffer()),this.activeRead=void 0):this.state.editInsert("\n");break;case b.InputType.CtrlC:this.state.moveCursorToEnd(),null===(e=this.term)||void 0===e||e.write("^C\r\n"),this.state=new m.State(this.activeRead.prompt,this.tty(),this.highlighter,this.history),this.state.refresh();break;case b.InputType.CtrlS:this.pauseHandler(!1);break;case b.InputType.CtrlU:this.state.update("");break;case b.InputType.CtrlK:this.state.editDeleteEndOfLine();break;case b.InputType.CtrlQ:this.pauseHandler(!0);break;case b.InputType.CtrlL:this.state.clearScreen();break;case b.InputType.Home:case b.InputType.CtrlA:this.state.moveCursorHome();break;case b.InputType.End:case b.InputType.CtrlE:this.state.moveCursorEnd();break;case b.InputType.Backspace:this.state.editBackspace(1);break;case b.InputType.Delete:case b.InputType.CtrlD:this.state.editDelete(1);break;case b.InputType.ArrowLeft:this.state.moveCursorBack(1);break;case b.InputType.ArrowRight:this.state.moveCursorForward(1);break;case b.InputType.ArrowUp:this.state.moveCursorUp(1);break;case b.InputType.ArrowDown:this.state.moveCursorDown(1);case b.InputType.UnsupportedControlChar:case b.InputType.UnsupportedEscape:}else switch(D.inputType){case b.InputType.CtrlC:this.ctrlCHandler();break;case b.InputType.CtrlL:this.write("[H[2J")}}};var x=o.__esModule;export{w as Readline,x as __esModule,o as default};
|
2
|
-
//# sourceMappingURL=xterm-readline-DjufFwfn.js.map
|