{"version":3,"file":"vendors-b0681e1a.4e202c72d209411713eb.bundle.js","mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnaA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","sources":["webpack://frontend/./node_modules/@codemirror/gutter/dist/index.js","webpack://frontend/./node_modules/@codemirror/highlight/dist/index.js"],"sourcesContent":["import { EditorView, ViewPlugin, BlockType, PluginField, Direction } from '@codemirror/view';\nimport { RangeValue, RangeSet } from '@codemirror/rangeset';\nimport { MapMode, Facet, combineConfig } from '@codemirror/state';\n\n/**\nA gutter marker represents a bit of information attached to a line\nin a specific gutter. Your own custom markers have to extend this\nclass.\n*/\nclass GutterMarker extends RangeValue {\n /**\n @internal\n */\n compare(other) {\n return this == other || this.constructor == other.constructor && this.eq(other);\n }\n /**\n Compare this marker to another marker of the same type.\n */\n eq(other) { return false; }\n /**\n @internal FIXME remove on next major version\n */\n at(pos) { return this.range(pos); }\n}\nGutterMarker.prototype.elementClass = \"\";\nGutterMarker.prototype.toDOM = undefined;\nGutterMarker.prototype.mapMode = MapMode.TrackBefore;\nGutterMarker.prototype.point = true;\n/**\nFacet used to add a class to all gutter elements for a given line.\nMarkers given to this facet should _only_ define an\n[`elementclass`](https://codemirror.net/6/docs/ref/#gutter.GutterMarker.elementClass), not a\n[`toDOM`](https://codemirror.net/6/docs/ref/#gutter.GutterMarker.toDOM) (or the marker will appear\nin all gutters for the line).\n*/\nconst gutterLineClass = /*@__PURE__*/Facet.define();\nconst defaults = {\n class: \"\",\n renderEmptyElements: false,\n elementStyle: \"\",\n markers: () => RangeSet.empty,\n lineMarker: () => null,\n initialSpacer: null,\n updateSpacer: null,\n domEventHandlers: {}\n};\nconst activeGutters = /*@__PURE__*/Facet.define();\n/**\nDefine an editor gutter. The order in which the gutters appear is\ndetermined by their extension priority.\n*/\nfunction gutter(config) {\n return [gutters(), activeGutters.of(Object.assign(Object.assign({}, defaults), config))];\n}\nconst baseTheme = /*@__PURE__*/EditorView.baseTheme({\n \".cm-gutters\": {\n display: \"flex\",\n height: \"100%\",\n boxSizing: \"border-box\",\n left: 0,\n zIndex: 200\n },\n \"&light .cm-gutters\": {\n backgroundColor: \"#f5f5f5\",\n color: \"#999\",\n borderRight: \"1px solid #ddd\"\n },\n \"&dark .cm-gutters\": {\n backgroundColor: \"#333338\",\n color: \"#ccc\"\n },\n \".cm-gutter\": {\n display: \"flex !important\",\n flexDirection: \"column\",\n flexShrink: 0,\n boxSizing: \"border-box\",\n height: \"100%\",\n overflow: \"hidden\"\n },\n \".cm-gutterElement\": {\n boxSizing: \"border-box\"\n },\n \".cm-lineNumbers .cm-gutterElement\": {\n padding: \"0 3px 0 5px\",\n minWidth: \"20px\",\n textAlign: \"right\",\n whiteSpace: \"nowrap\"\n },\n \"&light .cm-activeLineGutter\": {\n backgroundColor: \"#e2f2ff\"\n },\n \"&dark .cm-activeLineGutter\": {\n backgroundColor: \"#222227\"\n }\n});\nconst unfixGutters = /*@__PURE__*/Facet.define({\n combine: values => values.some(x => x)\n});\n/**\nThe gutter-drawing plugin is automatically enabled when you add a\ngutter, but you can use this function to explicitly configure it.\n\nUnless `fixed` is explicitly set to `false`, the gutters are\nfixed, meaning they don't scroll along with the content\nhorizontally (except on Internet Explorer, which doesn't support\nCSS [`position:\nsticky`](https://developer.mozilla.org/en-US/docs/Web/CSS/position#sticky)).\n*/\nfunction gutters(config) {\n let result = [\n gutterView,\n baseTheme\n ];\n if (config && config.fixed === false)\n result.push(unfixGutters.of(true));\n return result;\n}\nconst gutterView = /*@__PURE__*/ViewPlugin.fromClass(class {\n constructor(view) {\n this.view = view;\n this.dom = document.createElement(\"div\");\n this.dom.className = \"cm-gutters\";\n this.dom.setAttribute(\"aria-hidden\", \"true\");\n this.gutters = view.state.facet(activeGutters).map(conf => new SingleGutterView(view, conf));\n for (let gutter of this.gutters)\n this.dom.appendChild(gutter.dom);\n this.fixed = !view.state.facet(unfixGutters);\n if (this.fixed) {\n // FIXME IE11 fallback, which doesn't support position: sticky,\n // by using position: relative + event handlers that realign the\n // gutter (or just force fixed=false on IE11?)\n this.dom.style.position = \"sticky\";\n }\n view.scrollDOM.insertBefore(this.dom, view.contentDOM);\n this.syncGutters();\n }\n update(update) {\n if (this.updateGutters(update))\n this.syncGutters();\n }\n syncGutters() {\n let lineClasses = RangeSet.iter(this.view.state.facet(gutterLineClass), this.view.viewport.from);\n let classSet = [];\n let contexts = this.gutters.map(gutter => new UpdateContext(gutter, this.view.viewport));\n this.view.viewportLines(line => {\n let text;\n if (Array.isArray(line.type)) {\n for (let b of line.type)\n if (b.type == BlockType.Text) {\n text = b;\n break;\n }\n }\n else {\n text = line.type == BlockType.Text ? line : undefined;\n }\n if (!text)\n return;\n if (classSet.length)\n classSet = [];\n advanceCursor(lineClasses, classSet, line.from);\n for (let cx of contexts)\n cx.line(this.view, text, classSet);\n }, 0);\n for (let cx of contexts)\n cx.finish();\n this.dom.style.minHeight = this.view.contentHeight + \"px\";\n if (this.view.state.facet(unfixGutters) != !this.fixed) {\n this.fixed = !this.fixed;\n this.dom.style.position = this.fixed ? \"sticky\" : \"\";\n }\n }\n updateGutters(update) {\n let prev = update.startState.facet(activeGutters), cur = update.state.facet(activeGutters);\n let change = update.docChanged || update.heightChanged || update.viewportChanged ||\n !RangeSet.eq(update.startState.facet(gutterLineClass), update.state.facet(gutterLineClass), update.view.viewport.from, update.view.viewport.to);\n if (prev == cur) {\n for (let gutter of this.gutters)\n if (gutter.update(update))\n change = true;\n }\n else {\n change = true;\n let gutters = [];\n for (let conf of cur) {\n let known = prev.indexOf(conf);\n if (known < 0) {\n gutters.push(new SingleGutterView(this.view, conf));\n }\n else {\n this.gutters[known].update(update);\n gutters.push(this.gutters[known]);\n }\n }\n for (let g of this.gutters)\n g.dom.remove();\n for (let g of gutters)\n this.dom.appendChild(g.dom);\n this.gutters = gutters;\n }\n return change;\n }\n destroy() {\n this.dom.remove();\n }\n}, {\n provide: /*@__PURE__*/PluginField.scrollMargins.from(value => {\n if (value.gutters.length == 0 || !value.fixed)\n return null;\n return value.view.textDirection == Direction.LTR ? { left: value.dom.offsetWidth } : { right: value.dom.offsetWidth };\n })\n});\nfunction asArray(val) { return (Array.isArray(val) ? val : [val]); }\nfunction advanceCursor(cursor, collect, pos) {\n while (cursor.value && cursor.from <= pos) {\n if (cursor.from == pos)\n collect.push(cursor.value);\n cursor.next();\n }\n}\nclass UpdateContext {\n constructor(gutter, viewport) {\n this.gutter = gutter;\n this.localMarkers = [];\n this.i = 0;\n this.height = 0;\n this.cursor = RangeSet.iter(gutter.markers, viewport.from);\n }\n line(view, line, extraMarkers) {\n if (this.localMarkers.length)\n this.localMarkers = [];\n advanceCursor(this.cursor, this.localMarkers, line.from);\n let localMarkers = extraMarkers.length ? this.localMarkers.concat(extraMarkers) : this.localMarkers;\n let forLine = this.gutter.config.lineMarker(view, line, localMarkers);\n if (forLine)\n localMarkers.unshift(forLine);\n let gutter = this.gutter;\n if (localMarkers.length == 0 && !gutter.config.renderEmptyElements)\n return;\n let above = line.top - this.height;\n if (this.i == gutter.elements.length) {\n let newElt = new GutterElement(view, line.height, above, localMarkers);\n gutter.elements.push(newElt);\n gutter.dom.appendChild(newElt.dom);\n }\n else {\n let elt = gutter.elements[this.i];\n if (sameMarkers(localMarkers, elt.markers))\n localMarkers = elt.markers;\n elt.update(view, line.height, above, localMarkers);\n }\n this.height = line.bottom;\n this.i++;\n }\n finish() {\n let gutter = this.gutter;\n while (gutter.elements.length > this.i)\n gutter.dom.removeChild(gutter.elements.pop().dom);\n }\n}\nclass SingleGutterView {\n constructor(view, config) {\n this.view = view;\n this.config = config;\n this.elements = [];\n this.spacer = null;\n this.dom = document.createElement(\"div\");\n this.dom.className = \"cm-gutter\" + (this.config.class ? \" \" + this.config.class : \"\");\n for (let prop in config.domEventHandlers) {\n this.dom.addEventListener(prop, (event) => {\n let line = view.visualLineAtHeight(event.clientY, view.contentDOM.getBoundingClientRect().top);\n if (config.domEventHandlers[prop](view, line, event))\n event.preventDefault();\n });\n }\n this.markers = asArray(config.markers(view));\n if (config.initialSpacer) {\n this.spacer = new GutterElement(view, 0, 0, [config.initialSpacer(view)]);\n this.dom.appendChild(this.spacer.dom);\n this.spacer.dom.style.cssText += \"visibility: hidden; pointer-events: none\";\n }\n }\n update(update) {\n let prevMarkers = this.markers;\n this.markers = asArray(this.config.markers(update.view));\n if (this.spacer && this.config.updateSpacer) {\n let updated = this.config.updateSpacer(this.spacer.markers[0], update);\n if (updated != this.spacer.markers[0])\n this.spacer.update(update.view, 0, 0, [updated]);\n }\n let vp = update.view.viewport;\n return !RangeSet.eq(this.markers, prevMarkers, vp.from, vp.to);\n }\n}\nclass GutterElement {\n constructor(view, height, above, markers) {\n this.height = -1;\n this.above = 0;\n this.dom = document.createElement(\"div\");\n this.update(view, height, above, markers);\n }\n update(view, height, above, markers) {\n if (this.height != height)\n this.dom.style.height = (this.height = height) + \"px\";\n if (this.above != above)\n this.dom.style.marginTop = (this.above = above) ? above + \"px\" : \"\";\n if (this.markers != markers) {\n this.markers = markers;\n for (let ch; ch = this.dom.lastChild;)\n ch.remove();\n let cls = \"cm-gutterElement\";\n for (let m of markers) {\n if (m.toDOM)\n this.dom.appendChild(m.toDOM(view));\n let c = m.elementClass;\n if (c)\n cls += \" \" + c;\n }\n this.dom.className = cls;\n }\n }\n}\nfunction sameMarkers(a, b) {\n if (a.length != b.length)\n return false;\n for (let i = 0; i < a.length; i++)\n if (!a[i].compare(b[i]))\n return false;\n return true;\n}\n/**\nFacet used to provide markers to the line number gutter.\n*/\nconst lineNumberMarkers = /*@__PURE__*/Facet.define();\nconst lineNumberConfig = /*@__PURE__*/Facet.define({\n combine(values) {\n return combineConfig(values, { formatNumber: String, domEventHandlers: {} }, {\n domEventHandlers(a, b) {\n let result = Object.assign({}, a);\n for (let event in b) {\n let exists = result[event], add = b[event];\n result[event] = exists ? (view, line, event) => exists(view, line, event) || add(view, line, event) : add;\n }\n return result;\n }\n });\n }\n});\nclass NumberMarker extends GutterMarker {\n constructor(number) {\n super();\n this.number = number;\n }\n eq(other) { return this.number == other.number; }\n toDOM(_view) { return document.createTextNode(this.number); }\n}\nfunction formatNumber(view, number) {\n return view.state.facet(lineNumberConfig).formatNumber(number, view.state);\n}\nconst lineNumberGutter = /*@__PURE__*/gutter({\n class: \"cm-lineNumbers\",\n markers(view) { return view.state.facet(lineNumberMarkers); },\n lineMarker(view, line, others) {\n if (others.some(m => m.toDOM))\n return null;\n return new NumberMarker(formatNumber(view, view.state.doc.lineAt(line.from).number));\n },\n initialSpacer(view) {\n return new NumberMarker(formatNumber(view, maxLineNumber(view.state.doc.lines)));\n },\n updateSpacer(spacer, update) {\n let max = formatNumber(update.view, maxLineNumber(update.view.state.doc.lines));\n return max == spacer.number ? spacer : new NumberMarker(max);\n }\n});\n/**\nCreate a line number gutter extension.\n*/\nfunction lineNumbers(config = {}) {\n return [\n lineNumberConfig.of(config),\n lineNumberGutter\n ];\n}\nfunction maxLineNumber(lines) {\n let last = 9;\n while (last < lines)\n last = last * 10 + 9;\n return last;\n}\nconst activeLineGutterMarker = /*@__PURE__*/new class extends GutterMarker {\n constructor() {\n super(...arguments);\n this.elementClass = \"cm-activeLineGutter\";\n }\n eq() { return true; }\n};\nconst activeLineGutterHighlighter = /*@__PURE__*/gutterLineClass.compute([\"selection\"], state => {\n let marks = [], last = -1;\n for (let range of state.selection.ranges)\n if (range.empty) {\n let linePos = state.doc.lineAt(range.head).from;\n if (linePos > last) {\n last = linePos;\n marks.push(activeLineGutterMarker.range(linePos));\n }\n }\n return RangeSet.of(marks);\n});\n/**\nReturns an extension that adds a `cm-activeLineGutter` class to\nall gutter elements on the [active\nline](https://codemirror.net/6/docs/ref/#view.highlightActiveLine).\n*/\nfunction highlightActiveLineGutter() {\n return activeLineGutterHighlighter;\n}\n\nexport { GutterMarker, gutter, gutterLineClass, gutters, highlightActiveLineGutter, lineNumberMarkers, lineNumbers };\n","import { NodeProp, NodeType } from 'lezer-tree';\nimport { StyleModule } from 'style-mod';\nimport { EditorView, ViewPlugin, Decoration } from '@codemirror/view';\nimport { Facet, Prec } from '@codemirror/state';\nimport { syntaxTree } from '@codemirror/language';\nimport { RangeSetBuilder } from '@codemirror/rangeset';\n\nlet nextTagID = 0;\n/**\nHighlighting tags are markers that denote a highlighting category.\nThey are [associated](https://codemirror.net/6/docs/ref/#highlight.styleTags) with parts of a syntax\ntree by a language mode, and then mapped to an actual CSS style by\na [highlight style](https://codemirror.net/6/docs/ref/#highlight.HighlightStyle).\n\nBecause syntax tree node types and highlight styles have to be\nable to talk the same language, CodeMirror uses a mostly _closed_\n[vocabulary](https://codemirror.net/6/docs/ref/#highlight.tags) of syntax tags (as opposed to\ntraditional open string-based systems, which make it hard for\nhighlighting themes to cover all the tokens produced by the\nvarious languages).\n\nIt _is_ possible to [define](https://codemirror.net/6/docs/ref/#highlight.Tag^define) your own\nhighlighting tags for system-internal use (where you control both\nthe language package and the highlighter), but such tags will not\nbe picked up by regular highlighters (though you can derive them\nfrom standard tags to allow highlighters to fall back to those).\n*/\nclass Tag {\n /**\n @internal\n */\n constructor(\n /**\n The set of tags that match this tag, starting with this one\n itself, sorted in order of decreasing specificity. @internal\n */\n set, \n /**\n The base unmodified tag that this one is based on, if it's\n modified @internal\n */\n base, \n /**\n The modifiers applied to this.base @internal\n */\n modified) {\n this.set = set;\n this.base = base;\n this.modified = modified;\n /**\n @internal\n */\n this.id = nextTagID++;\n }\n /**\n Define a new tag. If `parent` is given, the tag is treated as a\n sub-tag of that parent, and [highlight\n styles](https://codemirror.net/6/docs/ref/#highlight.HighlightStyle) that don't mention this tag\n will try to fall back to the parent tag (or grandparent tag,\n etc).\n */\n static define(parent) {\n if (parent === null || parent === void 0 ? void 0 : parent.base)\n throw new Error(\"Can not derive from a modified tag\");\n let tag = new Tag([], null, []);\n tag.set.push(tag);\n if (parent)\n for (let t of parent.set)\n tag.set.push(t);\n return tag;\n }\n /**\n Define a tag _modifier_, which is a function that, given a tag,\n will return a tag that is a subtag of the original. Applying the\n same modifier to a twice tag will return the same value (`m1(t1)\n == m1(t1)`) and applying multiple modifiers will, regardless or\n order, produce the same tag (`m1(m2(t1)) == m2(m1(t1))`).\n \n When multiple modifiers are applied to a given base tag, each\n smaller set of modifiers is registered as a parent, so that for\n example `m1(m2(m3(t1)))` is a subtype of `m1(m2(t1))`,\n `m1(m3(t1)`, and so on.\n */\n static defineModifier() {\n let mod = new Modifier;\n return (tag) => {\n if (tag.modified.indexOf(mod) > -1)\n return tag;\n return Modifier.get(tag.base || tag, tag.modified.concat(mod).sort((a, b) => a.id - b.id));\n };\n }\n}\nlet nextModifierID = 0;\nclass Modifier {\n constructor() {\n this.instances = [];\n this.id = nextModifierID++;\n }\n static get(base, mods) {\n if (!mods.length)\n return base;\n let exists = mods[0].instances.find(t => t.base == base && sameArray(mods, t.modified));\n if (exists)\n return exists;\n let set = [], tag = new Tag(set, base, mods);\n for (let m of mods)\n m.instances.push(tag);\n let configs = permute(mods);\n for (let parent of base.set)\n for (let config of configs)\n set.push(Modifier.get(parent, config));\n return tag;\n }\n}\nfunction sameArray(a, b) {\n return a.length == b.length && a.every((x, i) => x == b[i]);\n}\nfunction permute(array) {\n let result = [array];\n for (let i = 0; i < array.length; i++) {\n for (let a of permute(array.slice(0, i).concat(array.slice(i + 1))))\n result.push(a);\n }\n return result;\n}\n/**\nThis function is used to add a set of tags to a language syntax\nvia\n[`Parser.configure`](https://lezer.codemirror.net/docs/ref#lezer.Parser.configure).\n\nThe argument object maps node selectors to [highlighting\ntags](https://codemirror.net/6/docs/ref/#highlight.Tag) or arrays of tags.\n\nNode selectors may hold one or more (space-separated) node paths.\nSuch a path can be a [node\nname](https://lezer.codemirror.net/docs/ref#tree.NodeType.name),\nor multiple node names (or `*` wildcards) separated by slash\ncharacters, as in `\"Block/Declaration/VariableName\"`. Such a path\nmatches the final node but only if its direct parent nodes are the\nother nodes mentioned. A `*` in such a path matches any parent,\nbut only a single level—wildcards that match multiple parents\naren't supported, both for efficiency reasons and because Lezer\ntrees make it rather hard to reason about what they would match.)\n\nA path can be ended with `/...` to indicate that the tag assigned\nto the node should also apply to all child nodes, even if they\nmatch their own style (by default, only the innermost style is\nused).\n\nWhen a path ends in `!`, as in `Attribute!`, no further matching\nhappens for the node's child nodes, and the entire node gets the\ngiven style.\n\nIn this notation, node names that contain `/`, `!`, `*`, or `...`\nmust be quoted as JSON strings.\n\nFor example:\n\n```javascript\nparser.withProps(\n styleTags({\n // Style Number and BigNumber nodes\n \"Number BigNumber\": tags.number,\n // Style Escape nodes whose parent is String\n \"String/Escape\": tags.escape,\n // Style anything inside Attributes nodes\n \"Attributes!\": tags.meta,\n // Add a style to all content inside Italic nodes\n \"Italic/...\": tags.emphasis,\n // Style InvalidString nodes as both `string` and `invalid`\n \"InvalidString\": [tags.string, tags.invalid],\n // Style the node named \"/\" as punctuation\n '\"/\"': tags.punctuation\n })\n)\n```\n*/\nfunction styleTags(spec) {\n let byName = Object.create(null);\n for (let prop in spec) {\n let tags = spec[prop];\n if (!Array.isArray(tags))\n tags = [tags];\n for (let part of prop.split(\" \"))\n if (part) {\n let pieces = [], mode = 2 /* Normal */, rest = part;\n for (let pos = 0;;) {\n if (rest == \"...\" && pos > 0 && pos + 3 == part.length) {\n mode = 1 /* Inherit */;\n break;\n }\n let m = /^\"(?:[^\"\\\\]|\\\\.)*?\"|[^\\/!]+/.exec(rest);\n if (!m)\n throw new RangeError(\"Invalid path: \" + part);\n pieces.push(m[0] == \"*\" ? null : m[0][0] == '\"' ? JSON.parse(m[0]) : m[0]);\n pos += m[0].length;\n if (pos == part.length)\n break;\n let next = part[pos++];\n if (pos == part.length && next == \"!\") {\n mode = 0 /* Opaque */;\n break;\n }\n if (next != \"/\")\n throw new RangeError(\"Invalid path: \" + part);\n rest = part.slice(pos);\n }\n let last = pieces.length - 1, inner = pieces[last];\n if (!inner)\n throw new RangeError(\"Invalid path: \" + part);\n let rule = new Rule(tags, mode, last > 0 ? pieces.slice(0, last) : null);\n byName[inner] = rule.sort(byName[inner]);\n }\n }\n return ruleNodeProp.add(byName);\n}\nconst ruleNodeProp = /*@__PURE__*/new NodeProp();\nconst highlightStyle = /*@__PURE__*/Facet.define({\n combine(stylings) { return stylings.length ? HighlightStyle.combinedMatch(stylings) : null; }\n});\nconst fallbackHighlightStyle = /*@__PURE__*/Facet.define({\n combine(values) { return values.length ? values[0].match : null; }\n});\nfunction getHighlightStyle(state) {\n return state.facet(highlightStyle) || state.facet(fallbackHighlightStyle);\n}\nclass Rule {\n constructor(tags, mode, context, next) {\n this.tags = tags;\n this.mode = mode;\n this.context = context;\n this.next = next;\n }\n sort(other) {\n if (!other || other.depth < this.depth) {\n this.next = other;\n return this;\n }\n other.next = this.sort(other.next);\n return other;\n }\n get depth() { return this.context ? this.context.length : 0; }\n}\n/**\nA highlight style associates CSS styles with higlighting\n[tags](https://codemirror.net/6/docs/ref/#highlight.Tag).\n*/\nclass HighlightStyle {\n constructor(spec, options) {\n this.map = Object.create(null);\n let modSpec;\n function def(spec) {\n let cls = StyleModule.newName();\n (modSpec || (modSpec = Object.create(null)))[\".\" + cls] = spec;\n return cls;\n }\n this.all = typeof options.all == \"string\" ? options.all : options.all ? def(options.all) : null;\n for (let style of spec) {\n let cls = (style.class || def(Object.assign({}, style, { tag: null }))) +\n (this.all ? \" \" + this.all : \"\");\n let tags = style.tag;\n if (!Array.isArray(tags))\n this.map[tags.id] = cls;\n else\n for (let tag of tags)\n this.map[tag.id] = cls;\n }\n this.module = modSpec ? new StyleModule(modSpec) : null;\n this.scope = options.scope || null;\n this.match = this.match.bind(this);\n let ext = [treeHighlighter];\n if (this.module)\n ext.push(EditorView.styleModule.of(this.module));\n this.extension = ext.concat(highlightStyle.of(this));\n this.fallback = ext.concat(fallbackHighlightStyle.of(this));\n }\n /**\n Returns the CSS class associated with the given tag, if any.\n This method is bound to the instance by the constructor.\n */\n match(tag, scope) {\n if (this.scope && scope != this.scope)\n return null;\n for (let t of tag.set) {\n let match = this.map[t.id];\n if (match !== undefined) {\n if (t != tag)\n this.map[tag.id] = match;\n return match;\n }\n }\n return this.map[tag.id] = this.all;\n }\n /**\n Combines an array of highlight styles into a single match\n function that returns all of the classes assigned by the styles\n for a given tag.\n */\n static combinedMatch(styles) {\n if (styles.length == 1)\n return styles[0].match;\n let cache = styles.some(s => s.scope) ? undefined : Object.create(null);\n return (tag, scope) => {\n let cached = cache && cache[tag.id];\n if (cached !== undefined)\n return cached;\n let result = null;\n for (let style of styles) {\n let value = style.match(tag, scope);\n if (value)\n result = result ? result + \" \" + value : value;\n }\n if (cache)\n cache[tag.id] = result;\n return result;\n };\n }\n /**\n Create a highlighter style that associates the given styles to\n the given tags. The spec must be objects that hold a style tag\n or array of tags in their `tag` property, and either a single\n `class` property providing a static CSS class (for highlighters\n like [`classHighlightStyle`](https://codemirror.net/6/docs/ref/#highlight.classHighlightStyle)\n that rely on external styling), or a\n [`style-mod`](https://github.com/marijnh/style-mod#documentation)-style\n set of CSS properties (which define the styling for those tags).\n \n The CSS rules created for a highlighter will be emitted in the\n order of the spec's properties. That means that for elements that\n have multiple tags associated with them, styles defined further\n down in the list will have a higher CSS precedence than styles\n defined earlier.\n */\n static define(specs, options) {\n return new HighlightStyle(specs, options || {});\n }\n /**\n Returns the CSS classes (if any) that the highlight styles\n active in the given state would assign to the given a style\n [tag](https://codemirror.net/6/docs/ref/#highlight.Tag) and (optional) language\n [scope](https://codemirror.net/6/docs/ref/#highlight.HighlightStyle^define^options.scope).\n */\n static get(state, tag, scope) {\n let style = getHighlightStyle(state);\n return style && style(tag, scope || NodeType.none);\n }\n}\n/**\nGiven a string of code and a language, parse the code in that\nlanguage and run the tree highlighter over the resulting syntax\ntree.\n*/\nfunction highlightTree(tree, \n/**\nGet the CSS classes used to style a given [tag](https://codemirror.net/6/docs/ref/#highlight.Tag),\nor `null` if it isn't styled. (You'll often want to pass a\nhighlight style's [`match`](https://codemirror.net/6/docs/ref/#highlight.HighlightStyle.match)\nmethod here.)\n*/\ngetStyle, \n/**\nAssign styling to a region of the text. Will be called, in order\nof position, for any ranges where more than zero classes apply.\n`classes` is a space separated string of CSS classes.\n*/\nputStyle) {\n highlightTreeRange(tree, 0, tree.length, getStyle, putStyle);\n}\nclass TreeHighlighter {\n constructor(view) {\n this.markCache = Object.create(null);\n this.tree = syntaxTree(view.state);\n this.decorations = this.buildDeco(view, getHighlightStyle(view.state));\n }\n update(update) {\n let tree = syntaxTree(update.state), style = getHighlightStyle(update.state);\n let styleChange = style != update.startState.facet(highlightStyle);\n if (tree.length < update.view.viewport.to && !styleChange) {\n this.decorations = this.decorations.map(update.changes);\n }\n else if (tree != this.tree || update.viewportChanged || styleChange) {\n this.tree = tree;\n this.decorations = this.buildDeco(update.view, style);\n }\n }\n buildDeco(view, match) {\n if (!match || !this.tree.length)\n return Decoration.none;\n let builder = new RangeSetBuilder();\n for (let { from, to } of view.visibleRanges) {\n highlightTreeRange(this.tree, from, to, match, (from, to, style) => {\n builder.add(from, to, this.markCache[style] || (this.markCache[style] = Decoration.mark({ class: style })));\n });\n }\n return builder.finish();\n }\n}\n// This extension installs a highlighter that highlights based on the\n// syntax tree and highlight style.\nconst treeHighlighter = /*@__PURE__*/Prec.fallback(/*@__PURE__*/ViewPlugin.fromClass(TreeHighlighter, {\n decorations: v => v.decorations\n}));\nconst nodeStack = [\"\"];\nfunction highlightTreeRange(tree, from, to, style, span) {\n let spanStart = from, spanClass = \"\";\n let cursor = tree.topNode.cursor;\n function flush(at, newClass) {\n if (spanClass)\n span(spanStart, at, spanClass);\n spanStart = at;\n spanClass = newClass;\n }\n function node(inheritedClass, depth, scope) {\n let { type, from: start, to: end } = cursor;\n if (start >= to || end <= from)\n return;\n nodeStack[depth] = type.name;\n if (type.isTop)\n scope = type;\n let cls = inheritedClass;\n let rule = type.prop(ruleNodeProp), opaque = false;\n while (rule) {\n if (!rule.context || matchContext(rule.context, nodeStack, depth)) {\n for (let tag of rule.tags) {\n let st = style(tag, scope);\n if (st) {\n if (cls)\n cls += \" \";\n cls += st;\n if (rule.mode == 1 /* Inherit */)\n inheritedClass += (inheritedClass ? \" \" : \"\") + st;\n else if (rule.mode == 0 /* Opaque */)\n opaque = true;\n }\n }\n break;\n }\n rule = rule.next;\n }\n let upto = start;\n if (!opaque && cursor.firstChild()) {\n do {\n if (cursor.from > upto && spanClass != cls)\n flush(upto, cls);\n upto = cursor.to;\n node(inheritedClass, depth + 1, scope);\n } while (cursor.nextSibling());\n cursor.parent();\n }\n if (end > upto && spanClass != cls)\n flush(upto, cls);\n }\n node(\"\", 0, tree.type);\n flush(to, \"\");\n}\nfunction matchContext(context, stack, depth) {\n if (context.length > depth - 1)\n return false;\n for (let d = depth - 1, i = context.length - 1; i >= 0; i--, d--) {\n let check = context[i];\n if (check && check != stack[d])\n return false;\n }\n return true;\n}\nconst t = Tag.define;\nconst comment = /*@__PURE__*/t(), name = /*@__PURE__*/t(), typeName = /*@__PURE__*/t(name), literal = /*@__PURE__*/t(), string = /*@__PURE__*/t(literal), number = /*@__PURE__*/t(literal), content = /*@__PURE__*/t(), heading = /*@__PURE__*/t(content), keyword = /*@__PURE__*/t(), operator = /*@__PURE__*/t(), punctuation = /*@__PURE__*/t(), bracket = /*@__PURE__*/t(punctuation), meta = /*@__PURE__*/t();\n/**\nThe default set of highlighting [tags](https://codemirror.net/6/docs/ref/#highlight.Tag^define) used\nby regular language packages and themes.\n\nThis collection is heavily biased towards programming languages,\nand necessarily incomplete. A full ontology of syntactic\nconstructs would fill a stack of books, and be impractical to\nwrite themes for. So try to make do with this set. If all else\nfails, [open an\nissue](https://github.com/codemirror/codemirror.next) to propose a\nnew tag, or [define](https://codemirror.net/6/docs/ref/#highlight.Tag^define) a local custom tag for\nyour use case.\n\nNote that it is not obligatory to always attach the most specific\ntag possible to an element—if your grammar can't easily\ndistinguish a certain type of element (such as a local variable),\nit is okay to style it as its more general variant (a variable).\n\nFor tags that extend some parent tag, the documentation links to\nthe parent.\n*/\nconst tags = {\n /**\n A comment.\n */\n comment,\n /**\n A line [comment](https://codemirror.net/6/docs/ref/#highlight.tags.comment).\n */\n lineComment: /*@__PURE__*/t(comment),\n /**\n A block [comment](https://codemirror.net/6/docs/ref/#highlight.tags.comment).\n */\n blockComment: /*@__PURE__*/t(comment),\n /**\n A documentation [comment](https://codemirror.net/6/docs/ref/#highlight.tags.comment).\n */\n docComment: /*@__PURE__*/t(comment),\n /**\n Any kind of identifier.\n */\n name,\n /**\n The [name](https://codemirror.net/6/docs/ref/#highlight.tags.name) of a variable.\n */\n variableName: /*@__PURE__*/t(name),\n /**\n A type [name](https://codemirror.net/6/docs/ref/#highlight.tags.name).\n */\n typeName: typeName,\n /**\n A tag name (subtag of [`typeName`](https://codemirror.net/6/docs/ref/#highlight.tags.typeName)).\n */\n tagName: /*@__PURE__*/t(typeName),\n /**\n A property, field, or attribute [name](https://codemirror.net/6/docs/ref/#highlight.tags.name).\n */\n propertyName: /*@__PURE__*/t(name),\n /**\n The [name](https://codemirror.net/6/docs/ref/#highlight.tags.name) of a class.\n */\n className: /*@__PURE__*/t(name),\n /**\n A label [name](https://codemirror.net/6/docs/ref/#highlight.tags.name).\n */\n labelName: /*@__PURE__*/t(name),\n /**\n A namespace [name](https://codemirror.net/6/docs/ref/#highlight.tags.name).\n */\n namespace: /*@__PURE__*/t(name),\n /**\n The [name](https://codemirror.net/6/docs/ref/#highlight.tags.name) of a macro.\n */\n macroName: /*@__PURE__*/t(name),\n /**\n A literal value.\n */\n literal,\n /**\n A string [literal](https://codemirror.net/6/docs/ref/#highlight.tags.literal).\n */\n string,\n /**\n A documentation [string](https://codemirror.net/6/docs/ref/#highlight.tags.string).\n */\n docString: /*@__PURE__*/t(string),\n /**\n A character literal (subtag of [string](https://codemirror.net/6/docs/ref/#highlight.tags.string)).\n */\n character: /*@__PURE__*/t(string),\n /**\n A number [literal](https://codemirror.net/6/docs/ref/#highlight.tags.literal).\n */\n number,\n /**\n An integer [number](https://codemirror.net/6/docs/ref/#highlight.tags.number) literal.\n */\n integer: /*@__PURE__*/t(number),\n /**\n A floating-point [number](https://codemirror.net/6/docs/ref/#highlight.tags.number) literal.\n */\n float: /*@__PURE__*/t(number),\n /**\n A boolean [literal](https://codemirror.net/6/docs/ref/#highlight.tags.literal).\n */\n bool: /*@__PURE__*/t(literal),\n /**\n Regular expression [literal](https://codemirror.net/6/docs/ref/#highlight.tags.literal).\n */\n regexp: /*@__PURE__*/t(literal),\n /**\n An escape [literal](https://codemirror.net/6/docs/ref/#highlight.tags.literal), for example a\n backslash escape in a string.\n */\n escape: /*@__PURE__*/t(literal),\n /**\n A color [literal](https://codemirror.net/6/docs/ref/#highlight.tags.literal).\n */\n color: /*@__PURE__*/t(literal),\n /**\n A URL [literal](https://codemirror.net/6/docs/ref/#highlight.tags.literal).\n */\n url: /*@__PURE__*/t(literal),\n /**\n A language keyword.\n */\n keyword,\n /**\n The [keyword](https://codemirror.net/6/docs/ref/#highlight.tags.keyword) for the self or this\n object.\n */\n self: /*@__PURE__*/t(keyword),\n /**\n The [keyword](https://codemirror.net/6/docs/ref/#highlight.tags.keyword) for null.\n */\n null: /*@__PURE__*/t(keyword),\n /**\n A [keyword](https://codemirror.net/6/docs/ref/#highlight.tags.keyword) denoting some atomic value.\n */\n atom: /*@__PURE__*/t(keyword),\n /**\n A [keyword](https://codemirror.net/6/docs/ref/#highlight.tags.keyword) that represents a unit.\n */\n unit: /*@__PURE__*/t(keyword),\n /**\n A modifier [keyword](https://codemirror.net/6/docs/ref/#highlight.tags.keyword).\n */\n modifier: /*@__PURE__*/t(keyword),\n /**\n A [keyword](https://codemirror.net/6/docs/ref/#highlight.tags.keyword) that acts as an operator.\n */\n operatorKeyword: /*@__PURE__*/t(keyword),\n /**\n A control-flow related [keyword](https://codemirror.net/6/docs/ref/#highlight.tags.keyword).\n */\n controlKeyword: /*@__PURE__*/t(keyword),\n /**\n A [keyword](https://codemirror.net/6/docs/ref/#highlight.tags.keyword) that defines something.\n */\n definitionKeyword: /*@__PURE__*/t(keyword),\n /**\n An operator.\n */\n operator,\n /**\n An [operator](https://codemirror.net/6/docs/ref/#highlight.tags.operator) that defines something.\n */\n derefOperator: /*@__PURE__*/t(operator),\n /**\n Arithmetic-related [operator](https://codemirror.net/6/docs/ref/#highlight.tags.operator).\n */\n arithmeticOperator: /*@__PURE__*/t(operator),\n /**\n Logical [operator](https://codemirror.net/6/docs/ref/#highlight.tags.operator).\n */\n logicOperator: /*@__PURE__*/t(operator),\n /**\n Bit [operator](https://codemirror.net/6/docs/ref/#highlight.tags.operator).\n */\n bitwiseOperator: /*@__PURE__*/t(operator),\n /**\n Comparison [operator](https://codemirror.net/6/docs/ref/#highlight.tags.operator).\n */\n compareOperator: /*@__PURE__*/t(operator),\n /**\n [Operator](https://codemirror.net/6/docs/ref/#highlight.tags.operator) that updates its operand.\n */\n updateOperator: /*@__PURE__*/t(operator),\n /**\n [Operator](https://codemirror.net/6/docs/ref/#highlight.tags.operator) that defines something.\n */\n definitionOperator: /*@__PURE__*/t(operator),\n /**\n Type-related [operator](https://codemirror.net/6/docs/ref/#highlight.tags.operator).\n */\n typeOperator: /*@__PURE__*/t(operator),\n /**\n Control-flow [operator](https://codemirror.net/6/docs/ref/#highlight.tags.operator).\n */\n controlOperator: /*@__PURE__*/t(operator),\n /**\n Program or markup punctuation.\n */\n punctuation,\n /**\n [Punctuation](https://codemirror.net/6/docs/ref/#highlight.tags.punctuation) that separates\n things.\n */\n separator: /*@__PURE__*/t(punctuation),\n /**\n Bracket-style [punctuation](https://codemirror.net/6/docs/ref/#highlight.tags.punctuation).\n */\n bracket,\n /**\n Angle [brackets](https://codemirror.net/6/docs/ref/#highlight.tags.bracket) (usually `<` and `>`\n tokens).\n */\n angleBracket: /*@__PURE__*/t(bracket),\n /**\n Square [brackets](https://codemirror.net/6/docs/ref/#highlight.tags.bracket) (usually `[` and `]`\n tokens).\n */\n squareBracket: /*@__PURE__*/t(bracket),\n /**\n Parentheses (usually `(` and `)` tokens). Subtag of\n [bracket](https://codemirror.net/6/docs/ref/#highlight.tags.bracket).\n */\n paren: /*@__PURE__*/t(bracket),\n /**\n Braces (usually `{` and `}` tokens). Subtag of\n [bracket](https://codemirror.net/6/docs/ref/#highlight.tags.bracket).\n */\n brace: /*@__PURE__*/t(bracket),\n /**\n Content, for example plain text in XML or markup documents.\n */\n content,\n /**\n [Content](https://codemirror.net/6/docs/ref/#highlight.tags.content) that represents a heading.\n */\n heading,\n /**\n A level 1 [heading](https://codemirror.net/6/docs/ref/#highlight.tags.heading).\n */\n heading1: /*@__PURE__*/t(heading),\n /**\n A level 2 [heading](https://codemirror.net/6/docs/ref/#highlight.tags.heading).\n */\n heading2: /*@__PURE__*/t(heading),\n /**\n A level 3 [heading](https://codemirror.net/6/docs/ref/#highlight.tags.heading).\n */\n heading3: /*@__PURE__*/t(heading),\n /**\n A level 4 [heading](https://codemirror.net/6/docs/ref/#highlight.tags.heading).\n */\n heading4: /*@__PURE__*/t(heading),\n /**\n A level 5 [heading](https://codemirror.net/6/docs/ref/#highlight.tags.heading).\n */\n heading5: /*@__PURE__*/t(heading),\n /**\n A level 6 [heading](https://codemirror.net/6/docs/ref/#highlight.tags.heading).\n */\n heading6: /*@__PURE__*/t(heading),\n /**\n A prose separator (such as a horizontal rule).\n */\n contentSeparator: /*@__PURE__*/t(content),\n /**\n [Content](https://codemirror.net/6/docs/ref/#highlight.tags.content) that represents a list.\n */\n list: /*@__PURE__*/t(content),\n /**\n [Content](https://codemirror.net/6/docs/ref/#highlight.tags.content) that represents a quote.\n */\n quote: /*@__PURE__*/t(content),\n /**\n [Content](https://codemirror.net/6/docs/ref/#highlight.tags.content) that is emphasized.\n */\n emphasis: /*@__PURE__*/t(content),\n /**\n [Content](https://codemirror.net/6/docs/ref/#highlight.tags.content) that is styled strong.\n */\n strong: /*@__PURE__*/t(content),\n /**\n [Content](https://codemirror.net/6/docs/ref/#highlight.tags.content) that is part of a link.\n */\n link: /*@__PURE__*/t(content),\n /**\n [Content](https://codemirror.net/6/docs/ref/#highlight.tags.content) that is styled as code or\n monospace.\n */\n monospace: /*@__PURE__*/t(content),\n /**\n [Content](https://codemirror.net/6/docs/ref/#highlight.tags.content) that has a strike-through\n style.\n */\n strikethrough: /*@__PURE__*/t(content),\n /**\n Inserted text in a change-tracking format.\n */\n inserted: /*@__PURE__*/t(),\n /**\n Deleted text.\n */\n deleted: /*@__PURE__*/t(),\n /**\n Changed text.\n */\n changed: /*@__PURE__*/t(),\n /**\n An invalid or unsyntactic element.\n */\n invalid: /*@__PURE__*/t(),\n /**\n Metadata or meta-instruction.\n */\n meta,\n /**\n [Metadata](https://codemirror.net/6/docs/ref/#highlight.tags.meta) that applies to the entire\n document.\n */\n documentMeta: /*@__PURE__*/t(meta),\n /**\n [Metadata](https://codemirror.net/6/docs/ref/#highlight.tags.meta) that annotates or adds\n attributes to a given syntactic element.\n */\n annotation: /*@__PURE__*/t(meta),\n /**\n Processing instruction or preprocessor directive. Subtag of\n [meta](https://codemirror.net/6/docs/ref/#highlight.tags.meta).\n */\n processingInstruction: /*@__PURE__*/t(meta),\n /**\n [Modifier](https://codemirror.net/6/docs/ref/#highlight.Tag^defineModifier) that indicates that a\n given element is being defined. Expected to be used with the\n various [name](https://codemirror.net/6/docs/ref/#highlight.tags.name) tags.\n */\n definition: /*@__PURE__*/Tag.defineModifier(),\n /**\n [Modifier](https://codemirror.net/6/docs/ref/#highlight.Tag^defineModifier) that indicates that\n something is constant. Mostly expected to be used with\n [variable names](https://codemirror.net/6/docs/ref/#highlight.tags.variableName).\n */\n constant: /*@__PURE__*/Tag.defineModifier(),\n /**\n [Modifier](https://codemirror.net/6/docs/ref/#highlight.Tag^defineModifier) used to indicate that\n a [variable](https://codemirror.net/6/docs/ref/#highlight.tags.variableName) or [property\n name](https://codemirror.net/6/docs/ref/#highlight.tags.propertyName) is being called or defined\n as a function.\n */\n function: /*@__PURE__*/Tag.defineModifier(),\n /**\n [Modifier](https://codemirror.net/6/docs/ref/#highlight.Tag^defineModifier) that can be applied to\n [names](https://codemirror.net/6/docs/ref/#highlight.tags.name) to indicate that they belong to\n the language's standard environment.\n */\n standard: /*@__PURE__*/Tag.defineModifier(),\n /**\n [Modifier](https://codemirror.net/6/docs/ref/#highlight.Tag^defineModifier) that indicates a given\n [names](https://codemirror.net/6/docs/ref/#highlight.tags.name) is local to some scope.\n */\n local: /*@__PURE__*/Tag.defineModifier(),\n /**\n A generic variant [modifier](https://codemirror.net/6/docs/ref/#highlight.Tag^defineModifier) that\n can be used to tag language-specific alternative variants of\n some common tag. It is recommended for themes to define special\n forms of at least the [string](https://codemirror.net/6/docs/ref/#highlight.tags.string) and\n [variable name](https://codemirror.net/6/docs/ref/#highlight.tags.variableName) tags, since those\n come up a lot.\n */\n special: /*@__PURE__*/Tag.defineModifier()\n};\n/**\nA default highlight style (works well with light themes).\n*/\nconst defaultHighlightStyle = /*@__PURE__*/HighlightStyle.define([\n { tag: tags.link,\n textDecoration: \"underline\" },\n { tag: tags.heading,\n textDecoration: \"underline\",\n fontWeight: \"bold\" },\n { tag: tags.emphasis,\n fontStyle: \"italic\" },\n { tag: tags.strong,\n fontWeight: \"bold\" },\n { tag: tags.strikethrough,\n textDecoration: \"line-through\" },\n { tag: tags.keyword,\n color: \"#708\" },\n { tag: [tags.atom, tags.bool, tags.url, tags.contentSeparator, tags.labelName],\n color: \"#219\" },\n { tag: [tags.literal, tags.inserted],\n color: \"#164\" },\n { tag: [tags.string, tags.deleted],\n color: \"#a11\" },\n { tag: [tags.regexp, tags.escape, /*@__PURE__*/tags.special(tags.string)],\n color: \"#e40\" },\n { tag: /*@__PURE__*/tags.definition(tags.variableName),\n color: \"#00f\" },\n { tag: /*@__PURE__*/tags.local(tags.variableName),\n color: \"#30a\" },\n { tag: [tags.typeName, tags.namespace],\n color: \"#085\" },\n { tag: tags.className,\n color: \"#167\" },\n { tag: [/*@__PURE__*/tags.special(tags.variableName), tags.macroName],\n color: \"#256\" },\n { tag: /*@__PURE__*/tags.definition(tags.propertyName),\n color: \"#00c\" },\n { tag: tags.comment,\n color: \"#940\" },\n { tag: tags.meta,\n color: \"#7a757a\" },\n { tag: tags.invalid,\n color: \"#f00\" }\n]);\n/**\nThis is a highlight style that adds stable, predictable classes to\ntokens, for styling with external CSS.\n\nThese tags are mapped to their name prefixed with `\"cmt-\"` (for\nexample `\"cmt-comment\"`):\n\n* [`link`](https://codemirror.net/6/docs/ref/#highlight.tags.link)\n* [`heading`](https://codemirror.net/6/docs/ref/#highlight.tags.heading)\n* [`emphasis`](https://codemirror.net/6/docs/ref/#highlight.tags.emphasis)\n* [`strong`](https://codemirror.net/6/docs/ref/#highlight.tags.strong)\n* [`keyword`](https://codemirror.net/6/docs/ref/#highlight.tags.keyword)\n* [`atom`](https://codemirror.net/6/docs/ref/#highlight.tags.atom) [`bool`](https://codemirror.net/6/docs/ref/#highlight.tags.bool)\n* [`url`](https://codemirror.net/6/docs/ref/#highlight.tags.url)\n* [`labelName`](https://codemirror.net/6/docs/ref/#highlight.tags.labelName)\n* [`inserted`](https://codemirror.net/6/docs/ref/#highlight.tags.inserted)\n* [`deleted`](https://codemirror.net/6/docs/ref/#highlight.tags.deleted)\n* [`literal`](https://codemirror.net/6/docs/ref/#highlight.tags.literal)\n* [`string`](https://codemirror.net/6/docs/ref/#highlight.tags.string)\n* [`number`](https://codemirror.net/6/docs/ref/#highlight.tags.number)\n* [`variableName`](https://codemirror.net/6/docs/ref/#highlight.tags.variableName)\n* [`typeName`](https://codemirror.net/6/docs/ref/#highlight.tags.typeName)\n* [`namespace`](https://codemirror.net/6/docs/ref/#highlight.tags.namespace)\n* [`macroName`](https://codemirror.net/6/docs/ref/#highlight.tags.macroName)\n* [`propertyName`](https://codemirror.net/6/docs/ref/#highlight.tags.propertyName)\n* [`operator`](https://codemirror.net/6/docs/ref/#highlight.tags.operator)\n* [`comment`](https://codemirror.net/6/docs/ref/#highlight.tags.comment)\n* [`meta`](https://codemirror.net/6/docs/ref/#highlight.tags.meta)\n* [`punctuation`](https://codemirror.net/6/docs/ref/#highlight.tags.puncutation)\n* [`invalid`](https://codemirror.net/6/docs/ref/#highlight.tags.invalid)\n\nIn addition, these mappings are provided:\n\n* [`regexp`](https://codemirror.net/6/docs/ref/#highlight.tags.regexp),\n [`escape`](https://codemirror.net/6/docs/ref/#highlight.tags.escape), and\n [`special`](https://codemirror.net/6/docs/ref/#highlight.tags.special)[`(string)`](https://codemirror.net/6/docs/ref/#highlight.tags.string)\n are mapped to `\"cmt-string2\"`\n* [`special`](https://codemirror.net/6/docs/ref/#highlight.tags.special)[`(variableName)`](https://codemirror.net/6/docs/ref/#highlight.tags.variableName)\n to `\"cmt-variableName2\"`\n* [`local`](https://codemirror.net/6/docs/ref/#highlight.tags.local)[`(variableName)`](https://codemirror.net/6/docs/ref/#highlight.tags.variableName)\n to `\"cmt-variableName cmt-local\"`\n* [`definition`](https://codemirror.net/6/docs/ref/#highlight.tags.definition)[`(variableName)`](https://codemirror.net/6/docs/ref/#highlight.tags.variableName)\n to `\"cmt-variableName cmt-definition\"`\n*/\nconst classHighlightStyle = /*@__PURE__*/HighlightStyle.define([\n { tag: tags.link, class: \"cmt-link\" },\n { tag: tags.heading, class: \"cmt-heading\" },\n { tag: tags.emphasis, class: \"cmt-emphasis\" },\n { tag: tags.strong, class: \"cmt-strong\" },\n { tag: tags.keyword, class: \"cmt-keyword\" },\n { tag: tags.atom, class: \"cmt-atom\" },\n { tag: tags.bool, class: \"cmt-bool\" },\n { tag: tags.url, class: \"cmt-url\" },\n { tag: tags.labelName, class: \"cmt-labelName\" },\n { tag: tags.inserted, class: \"cmt-inserted\" },\n { tag: tags.deleted, class: \"cmt-deleted\" },\n { tag: tags.literal, class: \"cmt-literal\" },\n { tag: tags.string, class: \"cmt-string\" },\n { tag: tags.number, class: \"cmt-number\" },\n { tag: [tags.regexp, tags.escape, /*@__PURE__*/tags.special(tags.string)], class: \"cmt-string2\" },\n { tag: tags.variableName, class: \"cmt-variableName\" },\n { tag: /*@__PURE__*/tags.local(tags.variableName), class: \"cmt-variableName cmt-local\" },\n { tag: /*@__PURE__*/tags.definition(tags.variableName), class: \"cmt-variableName cmt-definition\" },\n { tag: /*@__PURE__*/tags.special(tags.variableName), class: \"cmt-variableName2\" },\n { tag: tags.typeName, class: \"cmt-typeName\" },\n { tag: tags.namespace, class: \"cmt-namespace\" },\n { tag: tags.macroName, class: \"cmt-macroName\" },\n { tag: tags.propertyName, class: \"cmt-propertyName\" },\n { tag: tags.operator, class: \"cmt-operator\" },\n { tag: tags.comment, class: \"cmt-comment\" },\n { tag: tags.meta, class: \"cmt-meta\" },\n { tag: tags.invalid, class: \"cmt-invalid\" },\n { tag: tags.punctuation, class: \"cmt-punctuation\" }\n]);\n\nexport { HighlightStyle, Tag, classHighlightStyle, defaultHighlightStyle, highlightTree, styleTags, tags };\n"],"names":[],"sourceRoot":""}