UNPKG

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
{"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]}