vue-files-preview-inno
Version:
A tool for previewing files such as doc, excel, pdf, image, markdown, txt, audio, and video and so on.
1 lines • 51.7 kB
Source Map (JSON)
{"version":3,"file":"index.mjs","sources":["../../../../../../node_modules/@codemirror/lint/dist/index.js"],"sourcesContent":["import { Decoration, showPanel, EditorView, ViewPlugin, gutter, showTooltip, hoverTooltip, getPanel, logException, WidgetType, GutterMarker } from '@codemirror/view';\nimport { StateEffect, StateField, Facet, combineConfig, RangeSet, RangeSetBuilder } from '@codemirror/state';\nimport elt from 'crelt';\n\nclass SelectedDiagnostic {\n constructor(from, to, diagnostic) {\n this.from = from;\n this.to = to;\n this.diagnostic = diagnostic;\n }\n}\nclass LintState {\n constructor(diagnostics, panel, selected) {\n this.diagnostics = diagnostics;\n this.panel = panel;\n this.selected = selected;\n }\n static init(diagnostics, panel, state) {\n // Filter the list of diagnostics for which to create markers\n let diagnosticFilter = state.facet(lintConfig).markerFilter;\n if (diagnosticFilter)\n diagnostics = diagnosticFilter(diagnostics, state);\n let sorted = diagnostics.slice().sort((a, b) => a.from - b.from || a.to - b.to);\n let deco = new RangeSetBuilder(), active = [], pos = 0;\n for (let i = 0;;) {\n let next = i == sorted.length ? null : sorted[i];\n if (!next && !active.length)\n break;\n let from, to;\n if (active.length) {\n from = pos;\n to = active.reduce((p, d) => Math.min(p, d.to), next && next.from > from ? next.from : 1e8);\n }\n else {\n from = next.from;\n to = next.to;\n active.push(next);\n i++;\n }\n while (i < sorted.length) {\n let next = sorted[i];\n if (next.from == from && (next.to > next.from || next.to == from)) {\n active.push(next);\n i++;\n to = Math.min(next.to, to);\n }\n else {\n to = Math.min(next.from, to);\n break;\n }\n }\n let sev = maxSeverity(active);\n if (active.some(d => d.from == d.to || (d.from == d.to - 1 && state.doc.lineAt(d.from).to == d.from))) {\n deco.add(from, from, Decoration.widget({\n widget: new DiagnosticWidget(sev),\n diagnostics: active.slice()\n }));\n }\n else {\n let markClass = active.reduce((c, d) => d.markClass ? c + \" \" + d.markClass : c, \"\");\n deco.add(from, to, Decoration.mark({\n class: \"cm-lintRange cm-lintRange-\" + sev + markClass,\n diagnostics: active.slice(),\n inclusiveEnd: active.some(a => a.to > to)\n }));\n }\n pos = to;\n for (let i = 0; i < active.length; i++)\n if (active[i].to <= pos)\n active.splice(i--, 1);\n }\n let set = deco.finish();\n return new LintState(set, panel, findDiagnostic(set));\n }\n}\nfunction findDiagnostic(diagnostics, diagnostic = null, after = 0) {\n let found = null;\n diagnostics.between(after, 1e9, (from, to, { spec }) => {\n if (diagnostic && spec.diagnostics.indexOf(diagnostic) < 0)\n return;\n if (!found)\n found = new SelectedDiagnostic(from, to, diagnostic || spec.diagnostics[0]);\n else if (spec.diagnostics.indexOf(found.diagnostic) < 0)\n return false;\n else\n found = new SelectedDiagnostic(found.from, to, found.diagnostic);\n });\n return found;\n}\nfunction hideTooltip(tr, tooltip) {\n let from = tooltip.pos, to = tooltip.end || from;\n let result = tr.state.facet(lintConfig).hideOn(tr, from, to);\n if (result != null)\n return result;\n let line = tr.startState.doc.lineAt(tooltip.pos);\n return !!(tr.effects.some(e => e.is(setDiagnosticsEffect)) || tr.changes.touchesRange(line.from, Math.max(line.to, to)));\n}\nfunction maybeEnableLint(state, effects) {\n return state.field(lintState, false) ? effects : effects.concat(StateEffect.appendConfig.of(lintExtensions));\n}\n/**\nReturns a transaction spec which updates the current set of\ndiagnostics, and enables the lint extension if if wasn't already\nactive.\n*/\nfunction setDiagnostics(state, diagnostics) {\n return {\n effects: maybeEnableLint(state, [setDiagnosticsEffect.of(diagnostics)])\n };\n}\n/**\nThe state effect that updates the set of active diagnostics. Can\nbe useful when writing an extension that needs to track these.\n*/\nconst setDiagnosticsEffect = /*@__PURE__*/StateEffect.define();\nconst togglePanel = /*@__PURE__*/StateEffect.define();\nconst movePanelSelection = /*@__PURE__*/StateEffect.define();\nconst lintState = /*@__PURE__*/StateField.define({\n create() {\n return new LintState(Decoration.none, null, null);\n },\n update(value, tr) {\n if (tr.docChanged && value.diagnostics.size) {\n let mapped = value.diagnostics.map(tr.changes), selected = null, panel = value.panel;\n if (value.selected) {\n let selPos = tr.changes.mapPos(value.selected.from, 1);\n selected = findDiagnostic(mapped, value.selected.diagnostic, selPos) || findDiagnostic(mapped, null, selPos);\n }\n if (!mapped.size && panel && tr.state.facet(lintConfig).autoPanel)\n panel = null;\n value = new LintState(mapped, panel, selected);\n }\n for (let effect of tr.effects) {\n if (effect.is(setDiagnosticsEffect)) {\n let panel = !tr.state.facet(lintConfig).autoPanel ? value.panel : effect.value.length ? LintPanel.open : null;\n value = LintState.init(effect.value, panel, tr.state);\n }\n else if (effect.is(togglePanel)) {\n value = new LintState(value.diagnostics, effect.value ? LintPanel.open : null, value.selected);\n }\n else if (effect.is(movePanelSelection)) {\n value = new LintState(value.diagnostics, value.panel, effect.value);\n }\n }\n return value;\n },\n provide: f => [showPanel.from(f, val => val.panel),\n EditorView.decorations.from(f, s => s.diagnostics)]\n});\n/**\nReturns the number of active lint diagnostics in the given state.\n*/\nfunction diagnosticCount(state) {\n let lint = state.field(lintState, false);\n return lint ? lint.diagnostics.size : 0;\n}\nconst activeMark = /*@__PURE__*/Decoration.mark({ class: \"cm-lintRange cm-lintRange-active\" });\nfunction lintTooltip(view, pos, side) {\n let { diagnostics } = view.state.field(lintState);\n let found, start = -1, end = -1;\n diagnostics.between(pos - (side < 0 ? 1 : 0), pos + (side > 0 ? 1 : 0), (from, to, { spec }) => {\n if (pos >= from && pos <= to &&\n (from == to || ((pos > from || side > 0) && (pos < to || side < 0)))) {\n found = spec.diagnostics;\n start = from;\n end = to;\n return false;\n }\n });\n let diagnosticFilter = view.state.facet(lintConfig).tooltipFilter;\n if (found && diagnosticFilter)\n found = diagnosticFilter(found, view.state);\n if (!found)\n return null;\n return {\n pos: start,\n end: end,\n above: view.state.doc.lineAt(start).to < end,\n create() {\n return { dom: diagnosticsTooltip(view, found) };\n }\n };\n}\nfunction diagnosticsTooltip(view, diagnostics) {\n return elt(\"ul\", { class: \"cm-tooltip-lint\" }, diagnostics.map(d => renderDiagnostic(view, d, false)));\n}\n/**\nCommand to open and focus the lint panel.\n*/\nconst openLintPanel = (view) => {\n let field = view.state.field(lintState, false);\n if (!field || !field.panel)\n view.dispatch({ effects: maybeEnableLint(view.state, [togglePanel.of(true)]) });\n let panel = getPanel(view, LintPanel.open);\n if (panel)\n panel.dom.querySelector(\".cm-panel-lint ul\").focus();\n return true;\n};\n/**\nCommand to close the lint panel, when open.\n*/\nconst closeLintPanel = (view) => {\n let field = view.state.field(lintState, false);\n if (!field || !field.panel)\n return false;\n view.dispatch({ effects: togglePanel.of(false) });\n return true;\n};\n/**\nMove the selection to the next diagnostic.\n*/\nconst nextDiagnostic = (view) => {\n let field = view.state.field(lintState, false);\n if (!field)\n return false;\n let sel = view.state.selection.main, next = field.diagnostics.iter(sel.to + 1);\n if (!next.value) {\n next = field.diagnostics.iter(0);\n if (!next.value || next.from == sel.from && next.to == sel.to)\n return false;\n }\n view.dispatch({ selection: { anchor: next.from, head: next.to }, scrollIntoView: true });\n return true;\n};\n/**\nMove the selection to the previous diagnostic.\n*/\nconst previousDiagnostic = (view) => {\n let { state } = view, field = state.field(lintState, false);\n if (!field)\n return false;\n let sel = state.selection.main;\n let prevFrom, prevTo, lastFrom, lastTo;\n field.diagnostics.between(0, state.doc.length, (from, to) => {\n if (to < sel.to && (prevFrom == null || prevFrom < from)) {\n prevFrom = from;\n prevTo = to;\n }\n if (lastFrom == null || from > lastFrom) {\n lastFrom = from;\n lastTo = to;\n }\n });\n if (lastFrom == null || prevFrom == null && lastFrom == sel.from)\n return false;\n view.dispatch({ selection: { anchor: prevFrom !== null && prevFrom !== void 0 ? prevFrom : lastFrom, head: prevTo !== null && prevTo !== void 0 ? prevTo : lastTo }, scrollIntoView: true });\n return true;\n};\n/**\nA set of default key bindings for the lint functionality.\n\n- Ctrl-Shift-m (Cmd-Shift-m on macOS): [`openLintPanel`](https://codemirror.net/6/docs/ref/#lint.openLintPanel)\n- F8: [`nextDiagnostic`](https://codemirror.net/6/docs/ref/#lint.nextDiagnostic)\n*/\nconst lintKeymap = [\n { key: \"Mod-Shift-m\", run: openLintPanel, preventDefault: true },\n { key: \"F8\", run: nextDiagnostic }\n];\nconst lintPlugin = /*@__PURE__*/ViewPlugin.fromClass(class {\n constructor(view) {\n this.view = view;\n this.timeout = -1;\n this.set = true;\n let { delay } = view.state.facet(lintConfig);\n this.lintTime = Date.now() + delay;\n this.run = this.run.bind(this);\n this.timeout = setTimeout(this.run, delay);\n }\n run() {\n clearTimeout(this.timeout);\n let now = Date.now();\n if (now < this.lintTime - 10) {\n this.timeout = setTimeout(this.run, this.lintTime - now);\n }\n else {\n this.set = false;\n let { state } = this.view, { sources } = state.facet(lintConfig);\n if (sources.length)\n batchResults(sources.map(s => Promise.resolve(s(this.view))), annotations => {\n if (this.view.state.doc == state.doc)\n this.view.dispatch(setDiagnostics(this.view.state, annotations.reduce((a, b) => a.concat(b))));\n }, error => { logException(this.view.state, error); });\n }\n }\n update(update) {\n let config = update.state.facet(lintConfig);\n if (update.docChanged || config != update.startState.facet(lintConfig) ||\n config.needsRefresh && config.needsRefresh(update)) {\n this.lintTime = Date.now() + config.delay;\n if (!this.set) {\n this.set = true;\n this.timeout = setTimeout(this.run, config.delay);\n }\n }\n }\n force() {\n if (this.set) {\n this.lintTime = Date.now();\n this.run();\n }\n }\n destroy() {\n clearTimeout(this.timeout);\n }\n});\nfunction batchResults(promises, sink, error) {\n let collected = [], timeout = -1;\n for (let p of promises)\n p.then(value => {\n collected.push(value);\n clearTimeout(timeout);\n if (collected.length == promises.length)\n sink(collected);\n else\n timeout = setTimeout(() => sink(collected), 200);\n }, error);\n}\nconst lintConfig = /*@__PURE__*/Facet.define({\n combine(input) {\n return Object.assign({ sources: input.map(i => i.source).filter(x => x != null) }, combineConfig(input.map(i => i.config), {\n delay: 750,\n markerFilter: null,\n tooltipFilter: null,\n needsRefresh: null,\n hideOn: () => null,\n }, {\n needsRefresh: (a, b) => !a ? b : !b ? a : u => a(u) || b(u)\n }));\n }\n});\n/**\nGiven a diagnostic source, this function returns an extension that\nenables linting with that source. It will be called whenever the\neditor is idle (after its content changed). If `null` is given as\nsource, this only configures the lint extension.\n*/\nfunction linter(source, config = {}) {\n return [\n lintConfig.of({ source, config }),\n lintPlugin,\n lintExtensions\n ];\n}\n/**\nForces any linters [configured](https://codemirror.net/6/docs/ref/#lint.linter) to run when the\neditor is idle to run right away.\n*/\nfunction forceLinting(view) {\n let plugin = view.plugin(lintPlugin);\n if (plugin)\n plugin.force();\n}\nfunction assignKeys(actions) {\n let assigned = [];\n if (actions)\n actions: for (let { name } of actions) {\n for (let i = 0; i < name.length; i++) {\n let ch = name[i];\n if (/[a-zA-Z]/.test(ch) && !assigned.some(c => c.toLowerCase() == ch.toLowerCase())) {\n assigned.push(ch);\n continue actions;\n }\n }\n assigned.push(\"\");\n }\n return assigned;\n}\nfunction renderDiagnostic(view, diagnostic, inPanel) {\n var _a;\n let keys = inPanel ? assignKeys(diagnostic.actions) : [];\n return elt(\"li\", { class: \"cm-diagnostic cm-diagnostic-\" + diagnostic.severity }, elt(\"span\", { class: \"cm-diagnosticText\" }, diagnostic.renderMessage ? diagnostic.renderMessage(view) : diagnostic.message), (_a = diagnostic.actions) === null || _a === void 0 ? void 0 : _a.map((action, i) => {\n let fired = false, click = (e) => {\n e.preventDefault();\n if (fired)\n return;\n fired = true;\n let found = findDiagnostic(view.state.field(lintState).diagnostics, diagnostic);\n if (found)\n action.apply(view, found.from, found.to);\n };\n let { name } = action, keyIndex = keys[i] ? name.indexOf(keys[i]) : -1;\n let nameElt = keyIndex < 0 ? name : [name.slice(0, keyIndex),\n elt(\"u\", name.slice(keyIndex, keyIndex + 1)),\n name.slice(keyIndex + 1)];\n return elt(\"button\", {\n type: \"button\",\n class: \"cm-diagnosticAction\",\n onclick: click,\n onmousedown: click,\n \"aria-label\": ` Action: ${name}${keyIndex < 0 ? \"\" : ` (access key \"${keys[i]})\"`}.`\n }, nameElt);\n }), diagnostic.source && elt(\"div\", { class: \"cm-diagnosticSource\" }, diagnostic.source));\n}\nclass DiagnosticWidget extends WidgetType {\n constructor(sev) {\n super();\n this.sev = sev;\n }\n eq(other) { return other.sev == this.sev; }\n toDOM() {\n return elt(\"span\", { class: \"cm-lintPoint cm-lintPoint-\" + this.sev });\n }\n}\nclass PanelItem {\n constructor(view, diagnostic) {\n this.diagnostic = diagnostic;\n this.id = \"item_\" + Math.floor(Math.random() * 0xffffffff).toString(16);\n this.dom = renderDiagnostic(view, diagnostic, true);\n this.dom.id = this.id;\n this.dom.setAttribute(\"role\", \"option\");\n }\n}\nclass LintPanel {\n constructor(view) {\n this.view = view;\n this.items = [];\n let onkeydown = (event) => {\n if (event.keyCode == 27) { // Escape\n closeLintPanel(this.view);\n this.view.focus();\n }\n else if (event.keyCode == 38 || event.keyCode == 33) { // ArrowUp, PageUp\n this.moveSelection((this.selectedIndex - 1 + this.items.length) % this.items.length);\n }\n else if (event.keyCode == 40 || event.keyCode == 34) { // ArrowDown, PageDown\n this.moveSelection((this.selectedIndex + 1) % this.items.length);\n }\n else if (event.keyCode == 36) { // Home\n this.moveSelection(0);\n }\n else if (event.keyCode == 35) { // End\n this.moveSelection(this.items.length - 1);\n }\n else if (event.keyCode == 13) { // Enter\n this.view.focus();\n }\n else if (event.keyCode >= 65 && event.keyCode <= 90 && this.selectedIndex >= 0) { // A-Z\n let { diagnostic } = this.items[this.selectedIndex], keys = assignKeys(diagnostic.actions);\n for (let i = 0; i < keys.length; i++)\n if (keys[i].toUpperCase().charCodeAt(0) == event.keyCode) {\n let found = findDiagnostic(this.view.state.field(lintState).diagnostics, diagnostic);\n if (found)\n diagnostic.actions[i].apply(view, found.from, found.to);\n }\n }\n else {\n return;\n }\n event.preventDefault();\n };\n let onclick = (event) => {\n for (let i = 0; i < this.items.length; i++) {\n if (this.items[i].dom.contains(event.target))\n this.moveSelection(i);\n }\n };\n this.list = elt(\"ul\", {\n tabIndex: 0,\n role: \"listbox\",\n \"aria-label\": this.view.state.phrase(\"Diagnostics\"),\n onkeydown,\n onclick\n });\n this.dom = elt(\"div\", { class: \"cm-panel-lint\" }, this.list, elt(\"button\", {\n type: \"button\",\n name: \"close\",\n \"aria-label\": this.view.state.phrase(\"close\"),\n onclick: () => closeLintPanel(this.view)\n }, \"×\"));\n this.update();\n }\n get selectedIndex() {\n let selected = this.view.state.field(lintState).selected;\n if (!selected)\n return -1;\n for (let i = 0; i < this.items.length; i++)\n if (this.items[i].diagnostic == selected.diagnostic)\n return i;\n return -1;\n }\n update() {\n let { diagnostics, selected } = this.view.state.field(lintState);\n let i = 0, needsSync = false, newSelectedItem = null;\n let seen = new Set();\n diagnostics.between(0, this.view.state.doc.length, (_start, _end, { spec }) => {\n for (let diagnostic of spec.diagnostics) {\n if (seen.has(diagnostic))\n continue;\n seen.add(diagnostic);\n let found = -1, item;\n for (let j = i; j < this.items.length; j++)\n if (this.items[j].diagnostic == diagnostic) {\n found = j;\n break;\n }\n if (found < 0) {\n item = new PanelItem(this.view, diagnostic);\n this.items.splice(i, 0, item);\n needsSync = true;\n }\n else {\n item = this.items[found];\n if (found > i) {\n this.items.splice(i, found - i);\n needsSync = true;\n }\n }\n if (selected && item.diagnostic == selected.diagnostic) {\n if (!item.dom.hasAttribute(\"aria-selected\")) {\n item.dom.setAttribute(\"aria-selected\", \"true\");\n newSelectedItem = item;\n }\n }\n else if (item.dom.hasAttribute(\"aria-selected\")) {\n item.dom.removeAttribute(\"aria-selected\");\n }\n i++;\n }\n });\n while (i < this.items.length && !(this.items.length == 1 && this.items[0].diagnostic.from < 0)) {\n needsSync = true;\n this.items.pop();\n }\n if (this.items.length == 0) {\n this.items.push(new PanelItem(this.view, {\n from: -1, to: -1,\n severity: \"info\",\n message: this.view.state.phrase(\"No diagnostics\")\n }));\n needsSync = true;\n }\n if (newSelectedItem) {\n this.list.setAttribute(\"aria-activedescendant\", newSelectedItem.id);\n this.view.requestMeasure({\n key: this,\n read: () => ({ sel: newSelectedItem.dom.getBoundingClientRect(), panel: this.list.getBoundingClientRect() }),\n write: ({ sel, panel }) => {\n let scaleY = panel.height / this.list.offsetHeight;\n if (sel.top < panel.top)\n this.list.scrollTop -= (panel.top - sel.top) / scaleY;\n else if (sel.bottom > panel.bottom)\n this.list.scrollTop += (sel.bottom - panel.bottom) / scaleY;\n }\n });\n }\n else if (this.selectedIndex < 0) {\n this.list.removeAttribute(\"aria-activedescendant\");\n }\n if (needsSync)\n this.sync();\n }\n sync() {\n let domPos = this.list.firstChild;\n function rm() {\n let prev = domPos;\n domPos = prev.nextSibling;\n prev.remove();\n }\n for (let item of this.items) {\n if (item.dom.parentNode == this.list) {\n while (domPos != item.dom)\n rm();\n domPos = item.dom.nextSibling;\n }\n else {\n this.list.insertBefore(item.dom, domPos);\n }\n }\n while (domPos)\n rm();\n }\n moveSelection(selectedIndex) {\n if (this.selectedIndex < 0)\n return;\n let field = this.view.state.field(lintState);\n let selection = findDiagnostic(field.diagnostics, this.items[selectedIndex].diagnostic);\n if (!selection)\n return;\n this.view.dispatch({\n selection: { anchor: selection.from, head: selection.to },\n scrollIntoView: true,\n effects: movePanelSelection.of(selection)\n });\n }\n static open(view) { return new LintPanel(view); }\n}\nfunction svg(content, attrs = `viewBox=\"0 0 40 40\"`) {\n return `url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" ${attrs}>${encodeURIComponent(content)}</svg>')`;\n}\nfunction underline(color) {\n return svg(`<path d=\"m0 2.5 l2 -1.5 l1 0 l2 1.5 l1 0\" stroke=\"${color}\" fill=\"none\" stroke-width=\".7\"/>`, `width=\"6\" height=\"3\"`);\n}\nconst baseTheme = /*@__PURE__*/EditorView.baseTheme({\n \".cm-diagnostic\": {\n padding: \"3px 6px 3px 8px\",\n marginLeft: \"-1px\",\n display: \"block\",\n whiteSpace: \"pre-wrap\"\n },\n \".cm-diagnostic-error\": { borderLeft: \"5px solid #d11\" },\n \".cm-diagnostic-warning\": { borderLeft: \"5px solid orange\" },\n \".cm-diagnostic-info\": { borderLeft: \"5px solid #999\" },\n \".cm-diagnostic-hint\": { borderLeft: \"5px solid #66d\" },\n \".cm-diagnosticAction\": {\n font: \"inherit\",\n border: \"none\",\n padding: \"2px 4px\",\n backgroundColor: \"#444\",\n color: \"white\",\n borderRadius: \"3px\",\n marginLeft: \"8px\",\n cursor: \"pointer\"\n },\n \".cm-diagnosticSource\": {\n fontSize: \"70%\",\n opacity: .7\n },\n \".cm-lintRange\": {\n backgroundPosition: \"left bottom\",\n backgroundRepeat: \"repeat-x\",\n paddingBottom: \"0.7px\",\n },\n \".cm-lintRange-error\": { backgroundImage: /*@__PURE__*/underline(\"#d11\") },\n \".cm-lintRange-warning\": { backgroundImage: /*@__PURE__*/underline(\"orange\") },\n \".cm-lintRange-info\": { backgroundImage: /*@__PURE__*/underline(\"#999\") },\n \".cm-lintRange-hint\": { backgroundImage: /*@__PURE__*/underline(\"#66d\") },\n \".cm-lintRange-active\": { backgroundColor: \"#ffdd9980\" },\n \".cm-tooltip-lint\": {\n padding: 0,\n margin: 0\n },\n \".cm-lintPoint\": {\n position: \"relative\",\n \"&:after\": {\n content: '\"\"',\n position: \"absolute\",\n bottom: 0,\n left: \"-2px\",\n borderLeft: \"3px solid transparent\",\n borderRight: \"3px solid transparent\",\n borderBottom: \"4px solid #d11\"\n }\n },\n \".cm-lintPoint-warning\": {\n \"&:after\": { borderBottomColor: \"orange\" }\n },\n \".cm-lintPoint-info\": {\n \"&:after\": { borderBottomColor: \"#999\" }\n },\n \".cm-lintPoint-hint\": {\n \"&:after\": { borderBottomColor: \"#66d\" }\n },\n \".cm-panel.cm-panel-lint\": {\n position: \"relative\",\n \"& ul\": {\n maxHeight: \"100px\",\n overflowY: \"auto\",\n \"& [aria-selected]\": {\n backgroundColor: \"#ddd\",\n \"& u\": { textDecoration: \"underline\" }\n },\n \"&:focus [aria-selected]\": {\n background_fallback: \"#bdf\",\n backgroundColor: \"Highlight\",\n color_fallback: \"white\",\n color: \"HighlightText\"\n },\n \"& u\": { textDecoration: \"none\" },\n padding: 0,\n margin: 0\n },\n \"& [name=close]\": {\n position: \"absolute\",\n top: \"0\",\n right: \"2px\",\n background: \"inherit\",\n border: \"none\",\n font: \"inherit\",\n padding: 0,\n margin: 0\n }\n }\n});\nfunction severityWeight(sev) {\n return sev == \"error\" ? 4 : sev == \"warning\" ? 3 : sev == \"info\" ? 2 : 1;\n}\nfunction maxSeverity(diagnostics) {\n let sev = \"hint\", weight = 1;\n for (let d of diagnostics) {\n let w = severityWeight(d.severity);\n if (w > weight) {\n weight = w;\n sev = d.severity;\n }\n }\n return sev;\n}\nclass LintGutterMarker extends GutterMarker {\n constructor(diagnostics) {\n super();\n this.diagnostics = diagnostics;\n this.severity = maxSeverity(diagnostics);\n }\n toDOM(view) {\n let elt = document.createElement(\"div\");\n elt.className = \"cm-lint-marker cm-lint-marker-\" + this.severity;\n let diagnostics = this.diagnostics;\n let diagnosticsFilter = view.state.facet(lintGutterConfig).tooltipFilter;\n if (diagnosticsFilter)\n diagnostics = diagnosticsFilter(diagnostics, view.state);\n if (diagnostics.length)\n elt.onmouseover = () => gutterMarkerMouseOver(view, elt, diagnostics);\n return elt;\n }\n}\nfunction trackHoverOn(view, marker) {\n let mousemove = (event) => {\n let rect = marker.getBoundingClientRect();\n if (event.clientX > rect.left - 10 /* Hover.Margin */ && event.clientX < rect.right + 10 /* Hover.Margin */ &&\n event.clientY > rect.top - 10 /* Hover.Margin */ && event.clientY < rect.bottom + 10 /* Hover.Margin */)\n return;\n for (let target = event.target; target; target = target.parentNode) {\n if (target.nodeType == 1 && target.classList.contains(\"cm-tooltip-lint\"))\n return;\n }\n window.removeEventListener(\"mousemove\", mousemove);\n if (view.state.field(lintGutterTooltip))\n view.dispatch({ effects: setLintGutterTooltip.of(null) });\n };\n window.addEventListener(\"mousemove\", mousemove);\n}\nfunction gutterMarkerMouseOver(view, marker, diagnostics) {\n function hovered() {\n let line = view.elementAtHeight(marker.getBoundingClientRect().top + 5 - view.documentTop);\n const linePos = view.coordsAtPos(line.from);\n if (linePos) {\n view.dispatch({ effects: setLintGutterTooltip.of({\n pos: line.from,\n above: false,\n clip: false,\n create() {\n return {\n dom: diagnosticsTooltip(view, diagnostics),\n getCoords: () => marker.getBoundingClientRect()\n };\n }\n }) });\n }\n marker.onmouseout = marker.onmousemove = null;\n trackHoverOn(view, marker);\n }\n let { hoverTime } = view.state.facet(lintGutterConfig);\n let hoverTimeout = setTimeout(hovered, hoverTime);\n marker.onmouseout = () => {\n clearTimeout(hoverTimeout);\n marker.onmouseout = marker.onmousemove = null;\n };\n marker.onmousemove = () => {\n clearTimeout(hoverTimeout);\n hoverTimeout = setTimeout(hovered, hoverTime);\n };\n}\nfunction markersForDiagnostics(doc, diagnostics) {\n let byLine = Object.create(null);\n for (let diagnostic of diagnostics) {\n let line = doc.lineAt(diagnostic.from);\n (byLine[line.from] || (byLine[line.from] = [])).push(diagnostic);\n }\n let markers = [];\n for (let line in byLine) {\n markers.push(new LintGutterMarker(byLine[line]).range(+line));\n }\n return RangeSet.of(markers, true);\n}\nconst lintGutterExtension = /*@__PURE__*/gutter({\n class: \"cm-gutter-lint\",\n markers: view => view.state.field(lintGutterMarkers),\n widgetMarker: (view, widget, block) => {\n let diagnostics = [];\n view.state.field(lintGutterMarkers).between(block.from, block.to, (from, to, value) => {\n if (from > block.from && from < block.to)\n diagnostics.push(...value.diagnostics);\n });\n return diagnostics.length ? new LintGutterMarker(diagnostics) : null;\n }\n});\nconst lintGutterMarkers = /*@__PURE__*/StateField.define({\n create() {\n return RangeSet.empty;\n },\n update(markers, tr) {\n markers = markers.map(tr.changes);\n let diagnosticFilter = tr.state.facet(lintGutterConfig).markerFilter;\n for (let effect of tr.effects) {\n if (effect.is(setDiagnosticsEffect)) {\n let diagnostics = effect.value;\n if (diagnosticFilter)\n diagnostics = diagnosticFilter(diagnostics || [], tr.state);\n markers = markersForDiagnostics(tr.state.doc, diagnostics.slice(0));\n }\n }\n return markers;\n }\n});\nconst setLintGutterTooltip = /*@__PURE__*/StateEffect.define();\nconst lintGutterTooltip = /*@__PURE__*/StateField.define({\n create() { return null; },\n update(tooltip, tr) {\n if (tooltip && tr.docChanged)\n tooltip = hideTooltip(tr, tooltip) ? null : Object.assign(Object.assign({}, tooltip), { pos: tr.changes.mapPos(tooltip.pos) });\n return tr.effects.reduce((t, e) => e.is(setLintGutterTooltip) ? e.value : t, tooltip);\n },\n provide: field => showTooltip.from(field)\n});\nconst lintGutterTheme = /*@__PURE__*/EditorView.baseTheme({\n \".cm-gutter-lint\": {\n width: \"1.4em\",\n \"& .cm-gutterElement\": {\n padding: \".2em\"\n }\n },\n \".cm-lint-marker\": {\n width: \"1em\",\n height: \"1em\"\n },\n \".cm-lint-marker-info\": {\n content: /*@__PURE__*/svg(`<path fill=\"#aaf\" stroke=\"#77e\" stroke-width=\"6\" stroke-linejoin=\"round\" d=\"M5 5L35 5L35 35L5 35Z\"/>`)\n },\n \".cm-lint-marker-warning\": {\n content: /*@__PURE__*/svg(`<path fill=\"#fe8\" stroke=\"#fd7\" stroke-width=\"6\" stroke-linejoin=\"round\" d=\"M20 6L37 35L3 35Z\"/>`),\n },\n \".cm-lint-marker-error\": {\n content: /*@__PURE__*/svg(`<circle cx=\"20\" cy=\"20\" r=\"15\" fill=\"#f87\" stroke=\"#f43\" stroke-width=\"6\"/>`)\n },\n});\nconst lintExtensions = [\n lintState,\n /*@__PURE__*/EditorView.decorations.compute([lintState], state => {\n let { selected, panel } = state.field(lintState);\n return !selected || !panel || selected.from == selected.to ? Decoration.none : Decoration.set([\n activeMark.range(selected.from, selected.to)\n ]);\n }),\n /*@__PURE__*/hoverTooltip(lintTooltip, { hideOn: hideTooltip }),\n baseTheme\n];\nconst lintGutterConfig = /*@__PURE__*/Facet.define({\n combine(configs) {\n return combineConfig(configs, {\n hoverTime: 300 /* Hover.Time */,\n markerFilter: null,\n tooltipFilter: null\n });\n }\n});\n/**\nReturns an extension that installs a gutter showing markers for\neach line that has diagnostics, which can be hovered over to see\nthe diagnostics.\n*/\nfunction lintGutter(config = {}) {\n return [lintGutterConfig.of(config), lintGutterMarkers, lintGutterExtension, lintGutterTheme, lintGutterTooltip];\n}\n/**\nIterate over the marked diagnostics for the given editor state,\ncalling `f` for each of them. Note that, if the document changed\nsince the diagnostics were created, the `Diagnostic` object will\nhold the original outdated position, whereas the `to` and `from`\narguments hold the diagnostic's current position.\n*/\nfunction forEachDiagnostic(state, f) {\n let lState = state.field(lintState, false);\n if (lState && lState.diagnostics.size) {\n let pending = [], pendingStart = [], lastEnd = -1;\n for (let iter = RangeSet.iter([lState.diagnostics]);; iter.next()) {\n for (let i = 0; i < pending.length; i++)\n if (!iter.value || iter.value.spec.diagnostics.indexOf(pending[i]) < 0) {\n f(pending[i], pendingStart[i], lastEnd);\n pending.splice(i, 1);\n pendingStart.splice(i--, 1);\n }\n if (!iter.value)\n break;\n for (let d of iter.value.spec.diagnostics)\n if (pending.indexOf(d) < 0) {\n pending.push(d);\n pendingStart.push(iter.from);\n }\n lastEnd = iter.to;\n }\n }\n}\n\nexport { closeLintPanel, diagnosticCount, forEachDiagnostic, forceLinting, lintGutter, lintKeymap, linter, nextDiagnostic, openLintPanel, previousDiagnostic, setDiagnostics, setDiagnosticsEffect };\n"],"names":["SelectedDiagnostic","from","to","diagnostic","LintState","diagnostics","panel","selected","state","diagnosticFilter","lintConfig","sorted","b","deco","RangeSetBuilder","active","pos","i","next","p","d","sev","maxSeverity","Decoration","DiagnosticWidget","markClass","c","a","set","findDiagnostic","after","found","spec","hideTooltip","tr","tooltip","result","line","e","setDiagnosticsEffect","maybeEnableLint","effects","lintState","StateEffect","lintExtensions","togglePanel","movePanelSelection","StateField","value","mapped","selPos","effect","LintPanel","f","showPanel","val","EditorView","s","activeMark","lintTooltip","view","side","start","end","diagnosticsTooltip","elt","renderDiagnostic","openLintPanel","field","getPanel","closeLintPanel","nextDiagnostic","sel","lintKeymap","Facet","input","x","combineConfig","u","assignKeys","actions","assigned","name","ch","inPanel","_a","keys","action","fired","click","keyIndex","nameElt","WidgetType","other","PanelItem","onkeydown","event","onclick","needsSync","newSelectedItem","seen","_start","_end","item","j","scaleY","domPos","rm","prev","selectedIndex","selection","svg","content","attrs","underline","color","baseTheme","severityWeight","weight","w","hoverTooltip"],"mappings":"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","x_google_ignoreList":[0]}