@mdn/fred 2.1.0 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +21 -0
- package/README.md +18 -0
- package/build/server-worker.js +6 -4
- package/components/doc/server.js +9 -1
- package/components/outer-layout/server.js +8 -7
- package/components/reference-layout/server.js +14 -0
- package/components/server/async-local-storage.js +12 -1
- package/components/server/index.js +16 -1
- package/components/server/types.d.ts +9 -5
- package/entry.ssr.js +33 -1
- package/out/service-worker.js +1 -1
- package/out/service-worker.js.map +1 -1
- package/out/static/client/{3730.1a4ba03239ff0f16.js → 3730.dcf04b12bbd00d6f.js} +2 -2
- package/out/static/client/{3730.1a4ba03239ff0f16.js.map → 3730.dcf04b12bbd00d6f.js.map} +1 -1
- package/out/static/client/6216.1bfd3cf0b0a6c7df.js +2 -0
- package/out/static/client/6216.1bfd3cf0b0a6c7df.js.map +1 -0
- package/out/static/client/8233.ae0b9ab7bd3e969b.js +2 -0
- package/out/static/client/8233.ae0b9ab7bd3e969b.js.map +1 -0
- package/out/static/client/{index.0e1f202766cdb426.js → index.a66b5a087a738e61.js} +3 -3
- package/out/static/client/{index.0e1f202766cdb426.js.map → index.a66b5a087a738e61.js.map} +1 -1
- package/out/static/client/{runtime.076e84c93222dfd0.js → runtime.149f3caaca6b394a.js} +2 -2
- package/out/static/client/{runtime.076e84c93222dfd0.js.map → runtime.149f3caaca6b394a.js.map} +1 -1
- package/out/static/client/stats.json +436 -436
- package/out/static/client/styles-a11y-menu.b09c6038ee60691b.js +1 -0
- package/out/static/client/styles-advertising.8a72634ac33967b3.js +1 -0
- package/out/static/client/styles-article-footer.2008e05e900132bf.js +1 -0
- package/out/static/client/styles-banner.1588da63ad451f94.js +1 -0
- package/out/static/client/styles-baseline-indicator.045ce266c0388ff2.js +1 -0
- package/out/static/client/styles-blog-index.af7e5efac0463be9.js +1 -0
- package/out/static/client/styles-blog-post.21543a25c5d0c820.js +1 -0
- package/out/static/client/styles-breadcrumbs-bar.4e50455c81d9f236.js +1 -0
- package/out/static/client/styles-breadcrumbs.3272f39f147fdb26.js +1 -0
- package/out/static/client/styles-button.93e42cbce83fe9f8.js +1 -0
- package/out/static/client/styles-content-section.b38423c0dca8e3e4.js +1 -0
- package/out/static/client/styles-contributor-spotlight.efe854e18205bd6c.js +1 -0
- package/out/static/client/styles-curriculum-about.eb719efa09eab2e3.js +1 -0
- package/out/static/client/styles-curriculum-default.648a02845551d4a6.js +1 -0
- package/out/static/client/styles-curriculum-landing.f3af2ff9b3815ed8.js +1 -0
- package/out/static/client/styles-curriculum-module.284687a631bdb6c0.js +1 -0
- package/out/static/client/styles-curriculum-overview.81d25abdbb43b369.js +1 -0
- package/out/static/client/styles-featured-articles.1390540e6554e233.js +1 -0
- package/out/static/client/styles-footer.15153a4030e38f8f.js +1 -0
- package/out/static/client/styles-generic-about.f0afaa2db7066430.js +1 -0
- package/out/static/client/styles-generic-community.ff945b87102835f8.js +1 -0
- package/out/static/client/styles-generic-content.d0e560a0506475b1.js +1 -0
- package/out/static/client/styles-generic-layout.ca2cef837e24e7df.js +1 -0
- package/out/static/client/styles-generic-sidebar.b2b48d0d08f8bae7.js +1 -0
- package/out/static/client/styles-generic-toc.e8887bbe84a31d72.js +1 -0
- package/out/static/client/{styles-global.63980d9c69df1f6a.css → styles-global.2db431c11b66274e.css} +2 -2
- package/out/static/client/{styles-global.63980d9c69df1f6a.css.map → styles-global.2db431c11b66274e.css.map} +1 -1
- package/out/static/client/styles-global.efc5040b727dfca4.js +1 -0
- package/out/static/client/styles-heading-anchor.d7e14184517a1d3e.js +1 -0
- package/out/static/client/styles-homepage-body.1196a061fab22906.js +1 -0
- package/out/static/client/styles-homepage-contributor-spotlight.09a6993f73166d63.js +1 -0
- package/out/static/client/styles-homepage-footer.472132358e452a8b.js +1 -0
- package/out/static/client/styles-homepage-header.e6423ccb0a814f99.js +1 -0
- package/out/static/client/styles-homepage-hero.1c106d7a3adb970a.js +1 -0
- package/out/static/client/styles-homepage.843ab43d3f720fb6.js +1 -0
- package/out/static/client/styles-latest-news.986caae0711fbfe3.js +1 -0
- package/out/static/client/styles-left-sidebar.5a4d56fc21aab182.js +1 -0
- package/out/static/client/styles-logo.9cf3aa133bae8020.js +1 -0
- package/out/static/client/styles-mandala.b9822fc945abee39.js +1 -0
- package/out/static/client/styles-menu.97e048a6ffc666ce.js +1 -0
- package/out/static/client/styles-navigation.58a2a0a1f8d4487b.js +1 -0
- package/out/static/client/styles-not-found.a5c00a725a178969.js +1 -0
- package/out/static/client/styles-observatory-landing.c729a3523c37df23.js +1 -0
- package/out/static/client/styles-observatory-results.d4d142541bf683e1.js +1 -0
- package/out/static/client/styles-page-layout.baa1dac2402744c9.js +1 -0
- package/out/static/client/styles-pagination.04e3a505f4e789a6.js +1 -0
- package/out/static/client/styles-playground.7de5e497e2ebfa83.js +1 -0
- package/out/static/client/styles-recent-contributions.f1ab270b54c7e8de.js +1 -0
- package/out/static/client/styles-reference-layout.5c4b832bc9420f51.js +1 -0
- package/out/static/client/styles-reference-toc.afd507fb6d5ef895.js +1 -0
- package/out/static/client/styles-sandbox.3de7bd2afac30c66.js +1 -0
- package/out/static/client/styles-site-search.05f228cb7ac309b2.js +1 -0
- package/out/static/client/styles-social-image.dbdccf6b8d9258f2.js +1 -0
- package/out/static/client/styles-translation-banner.7698ddb14a70d0e5.js +1 -0
- package/out/static/client/styles-writer-toolbar.f161f8bd86e23a2a.js +1 -0
- package/out/static/client/{styles.cbf2ca4b84823096.js → styles.a182af71488aad03.js} +2 -2
- package/out/static/client/{styles.cbf2ca4b84823096.js.map → styles.a182af71488aad03.js.map} +1 -1
- package/out/static/client/watify_bg.4b1c94ba3861176a.wasm +0 -0
- package/out/static/legacy/{2569.41b52dfae9ff5dbd.js → 2569.9f096bac448374bd.js} +2 -2
- package/out/static/legacy/{2569.41b52dfae9ff5dbd.js.map → 2569.9f096bac448374bd.js.map} +1 -1
- package/out/static/legacy/6753.c44647828e8b4816.js +27 -0
- package/out/static/legacy/6753.c44647828e8b4816.js.map +1 -0
- package/out/static/legacy/7555.7cda2207795611e9.js +2 -0
- package/out/static/legacy/7555.7cda2207795611e9.js.map +1 -0
- package/out/static/legacy/8233.ae0b9ab7bd3e969b.js +2 -0
- package/out/static/legacy/8233.ae0b9ab7bd3e969b.js.map +1 -0
- package/out/static/legacy/asset-manifest.json +11 -11
- package/out/static/legacy/{index.5e65b9f52e86ad40.js → index.6c7371784b8345e6.js} +3 -3
- package/out/static/legacy/{index.5e65b9f52e86ad40.js.map → index.6c7371784b8345e6.js.map} +1 -1
- package/out/static/legacy/{index.6838304b64f32836.html → index.7ddac90f21db9f4e.html} +1 -1
- package/out/static/legacy/stats.json +13 -13
- package/out/static/legacy/watify_bg.4b1c94ba3861176a.wasm +0 -0
- package/out/static/legacy/{yari.c8f274d3a31b194e.js → yari.74e397a2236facc5.js} +4 -4
- package/out/static/legacy/yari.74e397a2236facc5.js.map +1 -0
- package/out/static/ssr/8233.js +1 -1
- package/out/static/ssr/8233.js.map +1 -1
- package/out/static/ssr/index.js +136 -133
- package/out/static/ssr/index.js.map +1 -1
- package/out/static/ssr/stats.json +4 -4
- package/out/static/ssr/watify_bg.4b1c94ba3861176a.wasm +0 -0
- package/package.json +20 -20
- package/out/static/client/6216.e1ccb610706d375f.js +0 -2
- package/out/static/client/6216.e1ccb610706d375f.js.map +0 -1
- package/out/static/client/8233.81b8c2d171f5ea9f.js +0 -2
- package/out/static/client/8233.81b8c2d171f5ea9f.js.map +0 -1
- package/out/static/client/styles-a11y-menu.bf24a870a8a4969f.js +0 -1
- package/out/static/client/styles-advertising.9f2b7bddc08575fc.js +0 -1
- package/out/static/client/styles-article-footer.aa9f8d240980b0f4.js +0 -1
- package/out/static/client/styles-banner.e738836bac789a8b.js +0 -1
- package/out/static/client/styles-baseline-indicator.c062716f3d033dd8.js +0 -1
- package/out/static/client/styles-blog-index.818261c8123bc042.js +0 -1
- package/out/static/client/styles-blog-post.96ce1680245bbc86.js +0 -1
- package/out/static/client/styles-breadcrumbs-bar.ed7d1440bdccf98f.js +0 -1
- package/out/static/client/styles-breadcrumbs.7599a269dc584d75.js +0 -1
- package/out/static/client/styles-button.de6a7b9b7548d84b.js +0 -1
- package/out/static/client/styles-content-section.a8bd7fde04898354.js +0 -1
- package/out/static/client/styles-contributor-spotlight.adad2e813e1667fe.js +0 -1
- package/out/static/client/styles-curriculum-about.eefa128bb415258c.js +0 -1
- package/out/static/client/styles-curriculum-default.a2692218d2b1a1f9.js +0 -1
- package/out/static/client/styles-curriculum-landing.2d51b8fce8f12b8d.js +0 -1
- package/out/static/client/styles-curriculum-module.f4ae8920ee1c92ff.js +0 -1
- package/out/static/client/styles-curriculum-overview.2d7c17b0f0b9bd92.js +0 -1
- package/out/static/client/styles-featured-articles.c54e8f6b90567441.js +0 -1
- package/out/static/client/styles-footer.cff8d2b7669e06a9.js +0 -1
- package/out/static/client/styles-generic-about.b31b672a5d394108.js +0 -1
- package/out/static/client/styles-generic-community.f7e5df670c7aeaf3.js +0 -1
- package/out/static/client/styles-generic-content.1a9e4b87d8a12a85.js +0 -1
- package/out/static/client/styles-generic-layout.76e37948146a2f39.js +0 -1
- package/out/static/client/styles-generic-sidebar.c07d266d1382c357.js +0 -1
- package/out/static/client/styles-generic-toc.342bb77a42e3cc84.js +0 -1
- package/out/static/client/styles-global.c2e6118d3b833b4a.js +0 -1
- package/out/static/client/styles-heading-anchor.79390408a0c88875.js +0 -1
- package/out/static/client/styles-homepage-body.20c015a218d0bc96.js +0 -1
- package/out/static/client/styles-homepage-contributor-spotlight.21f37f11b3bd4bda.js +0 -1
- package/out/static/client/styles-homepage-footer.24e66b627b59d99f.js +0 -1
- package/out/static/client/styles-homepage-header.1a75fa94f8bab5a0.js +0 -1
- package/out/static/client/styles-homepage-hero.f1bf55f1be2d516d.js +0 -1
- package/out/static/client/styles-homepage.cd5bf6213bc06b4e.js +0 -1
- package/out/static/client/styles-latest-news.0f32a584ef1ed171.js +0 -1
- package/out/static/client/styles-left-sidebar.d7d52289da7ba969.js +0 -1
- package/out/static/client/styles-logo.1ff82941fc133017.js +0 -1
- package/out/static/client/styles-mandala.2a99de27a8c19d02.js +0 -1
- package/out/static/client/styles-menu.13c3394ada0512ef.js +0 -1
- package/out/static/client/styles-navigation.f857f577084aa7ef.js +0 -1
- package/out/static/client/styles-not-found.0bdc6a72643ebe34.js +0 -1
- package/out/static/client/styles-observatory-landing.e709efc8103ee08c.js +0 -1
- package/out/static/client/styles-observatory-results.e098740504c0c0f0.js +0 -1
- package/out/static/client/styles-page-layout.2ab75fc5b95edf1b.js +0 -1
- package/out/static/client/styles-pagination.667a2af3eaebe782.js +0 -1
- package/out/static/client/styles-playground.c1339745dabdf1f6.js +0 -1
- package/out/static/client/styles-recent-contributions.706333df420f227c.js +0 -1
- package/out/static/client/styles-reference-layout.6eaaea648e7e4dce.js +0 -1
- package/out/static/client/styles-reference-toc.dcb67aadb5032e3f.js +0 -1
- package/out/static/client/styles-sandbox.c14203f7b76d9e70.js +0 -1
- package/out/static/client/styles-site-search.ba674569591c3348.js +0 -1
- package/out/static/client/styles-social-image.f457942a12584899.js +0 -1
- package/out/static/client/styles-translation-banner.c0bf41a60bc2fe87.js +0 -1
- package/out/static/client/styles-writer-toolbar.e7438b6d8e7c99f4.js +0 -1
- package/out/static/client/watify_bg.dc8862fe10114050.wasm +0 -0
- package/out/static/legacy/6753.553d1b0c7912acfe.js +0 -27
- package/out/static/legacy/6753.553d1b0c7912acfe.js.map +0 -1
- package/out/static/legacy/7555.499540c46b2d1bd3.js +0 -2
- package/out/static/legacy/7555.499540c46b2d1bd3.js.map +0 -1
- package/out/static/legacy/8233.81b8c2d171f5ea9f.js +0 -2
- package/out/static/legacy/8233.81b8c2d171f5ea9f.js.map +0 -1
- package/out/static/legacy/watify_bg.dc8862fe10114050.wasm +0 -0
- package/out/static/legacy/yari.c8f274d3a31b194e.js.map +0 -1
- package/out/static/ssr/watify_bg.dc8862fe10114050.wasm +0 -0
- /package/out/{twitter-card-summary.46ac2375.png → mdn-social-image.46ac2375.png} +0 -0
- /package/out/static/client/{index.0e1f202766cdb426.js.LICENSE.txt → index.a66b5a087a738e61.js.LICENSE.txt} +0 -0
- /package/out/static/legacy/{6753.553d1b0c7912acfe.js.LICENSE.txt → 6753.c44647828e8b4816.js.LICENSE.txt} +0 -0
- /package/out/static/legacy/{index.5e65b9f52e86ad40.js.LICENSE.txt → index.6c7371784b8345e6.js.LICENSE.txt} +0 -0
- /package/out/static/legacy/{yari.c8f274d3a31b194e.js.LICENSE.txt → yari.74e397a2236facc5.js.LICENSE.txt} +0 -0
- /package/public/{twitter-card-summary.46ac2375.png → mdn-social-image.46ac2375.png} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"3730.1a4ba03239ff0f16.js","sources":["webpack://@mdn/fred/./node_modules/@codemirror/lang-css/dist/index.js","webpack://@mdn/fred/./node_modules/@codemirror/lang-html/dist/index.js","webpack://@mdn/fred/./node_modules/@codemirror/lang-javascript/dist/index.js","webpack://@mdn/fred/./node_modules/@codemirror/lang-wast/dist/index.js","webpack://@mdn/fred/./node_modules/@codemirror/language/dist/index.js","webpack://@mdn/fred/./node_modules/@codemirror/lint/dist/index.js"],"sourcesContent":["import { parser } from '@lezer/css';\nimport { syntaxTree, LRLanguage, indentNodeProp, continuedIndent, foldNodeProp, foldInside, LanguageSupport } from '@codemirror/language';\nimport { NodeWeakMap, IterMode } from '@lezer/common';\n\nlet _properties = null;\nfunction properties() {\n if (!_properties && typeof document == \"object\" && document.body) {\n let { style } = document.body, names = [], seen = new Set;\n for (let prop in style)\n if (prop != \"cssText\" && prop != \"cssFloat\") {\n if (typeof style[prop] == \"string\") {\n if (/[A-Z]/.test(prop))\n prop = prop.replace(/[A-Z]/g, ch => \"-\" + ch.toLowerCase());\n if (!seen.has(prop)) {\n names.push(prop);\n seen.add(prop);\n }\n }\n }\n _properties = names.sort().map(name => ({ type: \"property\", label: name, apply: name + \": \" }));\n }\n return _properties || [];\n}\nconst pseudoClasses = /*@__PURE__*/[\n \"active\", \"after\", \"any-link\", \"autofill\", \"backdrop\", \"before\",\n \"checked\", \"cue\", \"default\", \"defined\", \"disabled\", \"empty\",\n \"enabled\", \"file-selector-button\", \"first\", \"first-child\",\n \"first-letter\", \"first-line\", \"first-of-type\", \"focus\",\n \"focus-visible\", \"focus-within\", \"fullscreen\", \"has\", \"host\",\n \"host-context\", \"hover\", \"in-range\", \"indeterminate\", \"invalid\",\n \"is\", \"lang\", \"last-child\", \"last-of-type\", \"left\", \"link\", \"marker\",\n \"modal\", \"not\", \"nth-child\", \"nth-last-child\", \"nth-last-of-type\",\n \"nth-of-type\", \"only-child\", \"only-of-type\", \"optional\", \"out-of-range\",\n \"part\", \"placeholder\", \"placeholder-shown\", \"read-only\", \"read-write\",\n \"required\", \"right\", \"root\", \"scope\", \"selection\", \"slotted\", \"target\",\n \"target-text\", \"valid\", \"visited\", \"where\"\n].map(name => ({ type: \"class\", label: name }));\nconst values = /*@__PURE__*/[\n \"above\", \"absolute\", \"activeborder\", \"additive\", \"activecaption\", \"after-white-space\",\n \"ahead\", \"alias\", \"all\", \"all-scroll\", \"alphabetic\", \"alternate\", \"always\",\n \"antialiased\", \"appworkspace\", \"asterisks\", \"attr\", \"auto\", \"auto-flow\", \"avoid\", \"avoid-column\",\n \"avoid-page\", \"avoid-region\", \"axis-pan\", \"background\", \"backwards\", \"baseline\", \"below\",\n \"bidi-override\", \"blink\", \"block\", \"block-axis\", \"bold\", \"bolder\", \"border\", \"border-box\",\n \"both\", \"bottom\", \"break\", \"break-all\", \"break-word\", \"bullets\", \"button\", \"button-bevel\",\n \"buttonface\", \"buttonhighlight\", \"buttonshadow\", \"buttontext\", \"calc\", \"capitalize\",\n \"caps-lock-indicator\", \"caption\", \"captiontext\", \"caret\", \"cell\", \"center\", \"checkbox\", \"circle\",\n \"cjk-decimal\", \"clear\", \"clip\", \"close-quote\", \"col-resize\", \"collapse\", \"color\", \"color-burn\",\n \"color-dodge\", \"column\", \"column-reverse\", \"compact\", \"condensed\", \"contain\", \"content\",\n \"contents\", \"content-box\", \"context-menu\", \"continuous\", \"copy\", \"counter\", \"counters\", \"cover\",\n \"crop\", \"cross\", \"crosshair\", \"currentcolor\", \"cursive\", \"cyclic\", \"darken\", \"dashed\", \"decimal\",\n \"decimal-leading-zero\", \"default\", \"default-button\", \"dense\", \"destination-atop\", \"destination-in\",\n \"destination-out\", \"destination-over\", \"difference\", \"disc\", \"discard\", \"disclosure-closed\",\n \"disclosure-open\", \"document\", \"dot-dash\", \"dot-dot-dash\", \"dotted\", \"double\", \"down\", \"e-resize\",\n \"ease\", \"ease-in\", \"ease-in-out\", \"ease-out\", \"element\", \"ellipse\", \"ellipsis\", \"embed\", \"end\",\n \"ethiopic-abegede-gez\", \"ethiopic-halehame-aa-er\", \"ethiopic-halehame-gez\", \"ew-resize\", \"exclusion\",\n \"expanded\", \"extends\", \"extra-condensed\", \"extra-expanded\", \"fantasy\", \"fast\", \"fill\", \"fill-box\",\n \"fixed\", \"flat\", \"flex\", \"flex-end\", \"flex-start\", \"footnotes\", \"forwards\", \"from\",\n \"geometricPrecision\", \"graytext\", \"grid\", \"groove\", \"hand\", \"hard-light\", \"help\", \"hidden\", \"hide\",\n \"higher\", \"highlight\", \"highlighttext\", \"horizontal\", \"hsl\", \"hsla\", \"hue\", \"icon\", \"ignore\",\n \"inactiveborder\", \"inactivecaption\", \"inactivecaptiontext\", \"infinite\", \"infobackground\", \"infotext\",\n \"inherit\", \"initial\", \"inline\", \"inline-axis\", \"inline-block\", \"inline-flex\", \"inline-grid\",\n \"inline-table\", \"inset\", \"inside\", \"intrinsic\", \"invert\", \"italic\", \"justify\", \"keep-all\",\n \"landscape\", \"large\", \"larger\", \"left\", \"level\", \"lighter\", \"lighten\", \"line-through\", \"linear\",\n \"linear-gradient\", \"lines\", \"list-item\", \"listbox\", \"listitem\", \"local\", \"logical\", \"loud\", \"lower\",\n \"lower-hexadecimal\", \"lower-latin\", \"lower-norwegian\", \"lowercase\", \"ltr\", \"luminosity\", \"manipulation\",\n \"match\", \"matrix\", \"matrix3d\", \"medium\", \"menu\", \"menutext\", \"message-box\", \"middle\", \"min-intrinsic\",\n \"mix\", \"monospace\", \"move\", \"multiple\", \"multiple_mask_images\", \"multiply\", \"n-resize\", \"narrower\",\n \"ne-resize\", \"nesw-resize\", \"no-close-quote\", \"no-drop\", \"no-open-quote\", \"no-repeat\", \"none\",\n \"normal\", \"not-allowed\", \"nowrap\", \"ns-resize\", \"numbers\", \"numeric\", \"nw-resize\", \"nwse-resize\",\n \"oblique\", \"opacity\", \"open-quote\", \"optimizeLegibility\", \"optimizeSpeed\", \"outset\", \"outside\",\n \"outside-shape\", \"overlay\", \"overline\", \"padding\", \"padding-box\", \"painted\", \"page\", \"paused\",\n \"perspective\", \"pinch-zoom\", \"plus-darker\", \"plus-lighter\", \"pointer\", \"polygon\", \"portrait\",\n \"pre\", \"pre-line\", \"pre-wrap\", \"preserve-3d\", \"progress\", \"push-button\", \"radial-gradient\", \"radio\",\n \"read-only\", \"read-write\", \"read-write-plaintext-only\", \"rectangle\", \"region\", \"relative\", \"repeat\",\n \"repeating-linear-gradient\", \"repeating-radial-gradient\", \"repeat-x\", \"repeat-y\", \"reset\", \"reverse\",\n \"rgb\", \"rgba\", \"ridge\", \"right\", \"rotate\", \"rotate3d\", \"rotateX\", \"rotateY\", \"rotateZ\", \"round\",\n \"row\", \"row-resize\", \"row-reverse\", \"rtl\", \"run-in\", \"running\", \"s-resize\", \"sans-serif\", \"saturation\",\n \"scale\", \"scale3d\", \"scaleX\", \"scaleY\", \"scaleZ\", \"screen\", \"scroll\", \"scrollbar\", \"scroll-position\",\n \"se-resize\", \"self-start\", \"self-end\", \"semi-condensed\", \"semi-expanded\", \"separate\", \"serif\", \"show\",\n \"single\", \"skew\", \"skewX\", \"skewY\", \"skip-white-space\", \"slide\", \"slider-horizontal\",\n \"slider-vertical\", \"sliderthumb-horizontal\", \"sliderthumb-vertical\", \"slow\", \"small\", \"small-caps\",\n \"small-caption\", \"smaller\", \"soft-light\", \"solid\", \"source-atop\", \"source-in\", \"source-out\",\n \"source-over\", \"space\", \"space-around\", \"space-between\", \"space-evenly\", \"spell-out\", \"square\", \"start\",\n \"static\", \"status-bar\", \"stretch\", \"stroke\", \"stroke-box\", \"sub\", \"subpixel-antialiased\", \"svg_masks\",\n \"super\", \"sw-resize\", \"symbolic\", \"symbols\", \"system-ui\", \"table\", \"table-caption\", \"table-cell\",\n \"table-column\", \"table-column-group\", \"table-footer-group\", \"table-header-group\", \"table-row\",\n \"table-row-group\", \"text\", \"text-bottom\", \"text-top\", \"textarea\", \"textfield\", \"thick\", \"thin\",\n \"threeddarkshadow\", \"threedface\", \"threedhighlight\", \"threedlightshadow\", \"threedshadow\", \"to\", \"top\",\n \"transform\", \"translate\", \"translate3d\", \"translateX\", \"translateY\", \"translateZ\", \"transparent\",\n \"ultra-condensed\", \"ultra-expanded\", \"underline\", \"unidirectional-pan\", \"unset\", \"up\", \"upper-latin\",\n \"uppercase\", \"url\", \"var\", \"vertical\", \"vertical-text\", \"view-box\", \"visible\", \"visibleFill\",\n \"visiblePainted\", \"visibleStroke\", \"visual\", \"w-resize\", \"wait\", \"wave\", \"wider\", \"window\", \"windowframe\",\n \"windowtext\", \"words\", \"wrap\", \"wrap-reverse\", \"x-large\", \"x-small\", \"xor\", \"xx-large\", \"xx-small\"\n].map(name => ({ type: \"keyword\", label: name })).concat(/*@__PURE__*/[\n \"aliceblue\", \"antiquewhite\", \"aqua\", \"aquamarine\", \"azure\", \"beige\",\n \"bisque\", \"black\", \"blanchedalmond\", \"blue\", \"blueviolet\", \"brown\",\n \"burlywood\", \"cadetblue\", \"chartreuse\", \"chocolate\", \"coral\", \"cornflowerblue\",\n \"cornsilk\", \"crimson\", \"cyan\", \"darkblue\", \"darkcyan\", \"darkgoldenrod\",\n \"darkgray\", \"darkgreen\", \"darkkhaki\", \"darkmagenta\", \"darkolivegreen\",\n \"darkorange\", \"darkorchid\", \"darkred\", \"darksalmon\", \"darkseagreen\",\n \"darkslateblue\", \"darkslategray\", \"darkturquoise\", \"darkviolet\",\n \"deeppink\", \"deepskyblue\", \"dimgray\", \"dodgerblue\", \"firebrick\",\n \"floralwhite\", \"forestgreen\", \"fuchsia\", \"gainsboro\", \"ghostwhite\",\n \"gold\", \"goldenrod\", \"gray\", \"grey\", \"green\", \"greenyellow\", \"honeydew\",\n \"hotpink\", \"indianred\", \"indigo\", \"ivory\", \"khaki\", \"lavender\",\n \"lavenderblush\", \"lawngreen\", \"lemonchiffon\", \"lightblue\", \"lightcoral\",\n \"lightcyan\", \"lightgoldenrodyellow\", \"lightgray\", \"lightgreen\", \"lightpink\",\n \"lightsalmon\", \"lightseagreen\", \"lightskyblue\", \"lightslategray\",\n \"lightsteelblue\", \"lightyellow\", \"lime\", \"limegreen\", \"linen\", \"magenta\",\n \"maroon\", \"mediumaquamarine\", \"mediumblue\", \"mediumorchid\", \"mediumpurple\",\n \"mediumseagreen\", \"mediumslateblue\", \"mediumspringgreen\", \"mediumturquoise\",\n \"mediumvioletred\", \"midnightblue\", \"mintcream\", \"mistyrose\", \"moccasin\",\n \"navajowhite\", \"navy\", \"oldlace\", \"olive\", \"olivedrab\", \"orange\", \"orangered\",\n \"orchid\", \"palegoldenrod\", \"palegreen\", \"paleturquoise\", \"palevioletred\",\n \"papayawhip\", \"peachpuff\", \"peru\", \"pink\", \"plum\", \"powderblue\",\n \"purple\", \"rebeccapurple\", \"red\", \"rosybrown\", \"royalblue\", \"saddlebrown\",\n \"salmon\", \"sandybrown\", \"seagreen\", \"seashell\", \"sienna\", \"silver\", \"skyblue\",\n \"slateblue\", \"slategray\", \"snow\", \"springgreen\", \"steelblue\", \"tan\",\n \"teal\", \"thistle\", \"tomato\", \"turquoise\", \"violet\", \"wheat\", \"white\",\n \"whitesmoke\", \"yellow\", \"yellowgreen\"\n].map(name => ({ type: \"constant\", label: name })));\nconst tags = /*@__PURE__*/[\n \"a\", \"abbr\", \"address\", \"article\", \"aside\", \"b\", \"bdi\", \"bdo\", \"blockquote\", \"body\",\n \"br\", \"button\", \"canvas\", \"caption\", \"cite\", \"code\", \"col\", \"colgroup\", \"dd\", \"del\",\n \"details\", \"dfn\", \"dialog\", \"div\", \"dl\", \"dt\", \"em\", \"figcaption\", \"figure\", \"footer\",\n \"form\", \"header\", \"hgroup\", \"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\", \"hr\", \"html\", \"i\", \"iframe\",\n \"img\", \"input\", \"ins\", \"kbd\", \"label\", \"legend\", \"li\", \"main\", \"meter\", \"nav\", \"ol\", \"output\",\n \"p\", \"pre\", \"ruby\", \"section\", \"select\", \"small\", \"source\", \"span\", \"strong\", \"sub\", \"summary\",\n \"sup\", \"table\", \"tbody\", \"td\", \"template\", \"textarea\", \"tfoot\", \"th\", \"thead\", \"tr\", \"u\", \"ul\"\n].map(name => ({ type: \"type\", label: name }));\nconst atRules = /*@__PURE__*/[\n \"@charset\", \"@color-profile\", \"@container\", \"@counter-style\", \"@font-face\", \"@font-feature-values\",\n \"@font-palette-values\", \"@import\", \"@keyframes\", \"@layer\", \"@media\", \"@namespace\", \"@page\",\n \"@position-try\", \"@property\", \"@scope\", \"@starting-style\", \"@supports\", \"@view-transition\"\n].map(label => ({ type: \"keyword\", label }));\nconst identifier = /^(\\w[\\w-]*|-\\w[\\w-]*|)$/, variable = /^-(-[\\w-]*)?$/;\nfunction isVarArg(node, doc) {\n var _a;\n if (node.name == \"(\" || node.type.isError)\n node = node.parent || node;\n if (node.name != \"ArgList\")\n return false;\n let callee = (_a = node.parent) === null || _a === void 0 ? void 0 : _a.firstChild;\n if ((callee === null || callee === void 0 ? void 0 : callee.name) != \"Callee\")\n return false;\n return doc.sliceString(callee.from, callee.to) == \"var\";\n}\nconst VariablesByNode = /*@__PURE__*/new NodeWeakMap();\nconst declSelector = [\"Declaration\"];\nfunction astTop(node) {\n for (let cur = node;;) {\n if (cur.type.isTop)\n return cur;\n if (!(cur = cur.parent))\n return node;\n }\n}\nfunction variableNames(doc, node, isVariable) {\n if (node.to - node.from > 4096) {\n let known = VariablesByNode.get(node);\n if (known)\n return known;\n let result = [], seen = new Set, cursor = node.cursor(IterMode.IncludeAnonymous);\n if (cursor.firstChild())\n do {\n for (let option of variableNames(doc, cursor.node, isVariable))\n if (!seen.has(option.label)) {\n seen.add(option.label);\n result.push(option);\n }\n } while (cursor.nextSibling());\n VariablesByNode.set(node, result);\n return result;\n }\n else {\n let result = [], seen = new Set;\n node.cursor().iterate(node => {\n var _a;\n if (isVariable(node) && node.matchContext(declSelector) && ((_a = node.node.nextSibling) === null || _a === void 0 ? void 0 : _a.name) == \":\") {\n let name = doc.sliceString(node.from, node.to);\n if (!seen.has(name)) {\n seen.add(name);\n result.push({ label: name, type: \"variable\" });\n }\n }\n });\n return result;\n }\n}\n/**\nCreate a completion source for a CSS dialect, providing a\npredicate for determining what kind of syntax node can act as a\ncompletable variable. This is used by language modes like Sass and\nLess to reuse this package's completion logic.\n*/\nconst defineCSSCompletionSource = (isVariable) => context => {\n let { state, pos } = context, node = syntaxTree(state).resolveInner(pos, -1);\n let isDash = node.type.isError && node.from == node.to - 1 && state.doc.sliceString(node.from, node.to) == \"-\";\n if (node.name == \"PropertyName\" ||\n (isDash || node.name == \"TagName\") && /^(Block|Styles)$/.test(node.resolve(node.to).name))\n return { from: node.from, options: properties(), validFor: identifier };\n if (node.name == \"ValueName\")\n return { from: node.from, options: values, validFor: identifier };\n if (node.name == \"PseudoClassName\")\n return { from: node.from, options: pseudoClasses, validFor: identifier };\n if (isVariable(node) || (context.explicit || isDash) && isVarArg(node, state.doc))\n return { from: isVariable(node) || isDash ? node.from : pos,\n options: variableNames(state.doc, astTop(node), isVariable),\n validFor: variable };\n if (node.name == \"TagName\") {\n for (let { parent } = node; parent; parent = parent.parent)\n if (parent.name == \"Block\")\n return { from: node.from, options: properties(), validFor: identifier };\n return { from: node.from, options: tags, validFor: identifier };\n }\n if (node.name == \"AtKeyword\")\n return { from: node.from, options: atRules, validFor: identifier };\n if (!context.explicit)\n return null;\n let above = node.resolve(pos), before = above.childBefore(pos);\n if (before && before.name == \":\" && above.name == \"PseudoClassSelector\")\n return { from: pos, options: pseudoClasses, validFor: identifier };\n if (before && before.name == \":\" && above.name == \"Declaration\" || above.name == \"ArgList\")\n return { from: pos, options: values, validFor: identifier };\n if (above.name == \"Block\" || above.name == \"Styles\")\n return { from: pos, options: properties(), validFor: identifier };\n return null;\n};\n/**\nCSS property, variable, and value keyword completion source.\n*/\nconst cssCompletionSource = /*@__PURE__*/defineCSSCompletionSource(n => n.name == \"VariableName\");\n\n/**\nA language provider based on the [Lezer CSS\nparser](https://github.com/lezer-parser/css), extended with\nhighlighting and indentation information.\n*/\nconst cssLanguage = /*@__PURE__*/LRLanguage.define({\n name: \"css\",\n parser: /*@__PURE__*/parser.configure({\n props: [\n /*@__PURE__*/indentNodeProp.add({\n Declaration: /*@__PURE__*/continuedIndent()\n }),\n /*@__PURE__*/foldNodeProp.add({\n \"Block KeyframeList\": foldInside\n })\n ]\n }),\n languageData: {\n commentTokens: { block: { open: \"/*\", close: \"*/\" } },\n indentOnInput: /^\\s*\\}$/,\n wordChars: \"-\"\n }\n});\n/**\nLanguage support for CSS.\n*/\nfunction css() {\n return new LanguageSupport(cssLanguage, cssLanguage.data.of({ autocomplete: cssCompletionSource }));\n}\n\nexport { css, cssCompletionSource, cssLanguage, defineCSSCompletionSource };\n","import { parser, configureNesting } from '@lezer/html';\nimport { cssLanguage, css } from '@codemirror/lang-css';\nimport { javascriptLanguage, typescriptLanguage, jsxLanguage, tsxLanguage, javascript } from '@codemirror/lang-javascript';\nimport { EditorView } from '@codemirror/view';\nimport { EditorSelection } from '@codemirror/state';\nimport { syntaxTree, LRLanguage, indentNodeProp, foldNodeProp, bracketMatchingHandle, LanguageSupport } from '@codemirror/language';\n\nconst Targets = [\"_blank\", \"_self\", \"_top\", \"_parent\"];\nconst Charsets = [\"ascii\", \"utf-8\", \"utf-16\", \"latin1\", \"latin1\"];\nconst Methods = [\"get\", \"post\", \"put\", \"delete\"];\nconst Encs = [\"application/x-www-form-urlencoded\", \"multipart/form-data\", \"text/plain\"];\nconst Bool = [\"true\", \"false\"];\nconst S = {}; // Empty tag spec\nconst Tags = {\n a: {\n attrs: {\n href: null, ping: null, type: null,\n media: null,\n target: Targets,\n hreflang: null\n }\n },\n abbr: S,\n address: S,\n area: {\n attrs: {\n alt: null, coords: null, href: null, target: null, ping: null,\n media: null, hreflang: null, type: null,\n shape: [\"default\", \"rect\", \"circle\", \"poly\"]\n }\n },\n article: S,\n aside: S,\n audio: {\n attrs: {\n src: null, mediagroup: null,\n crossorigin: [\"anonymous\", \"use-credentials\"],\n preload: [\"none\", \"metadata\", \"auto\"],\n autoplay: [\"autoplay\"],\n loop: [\"loop\"],\n controls: [\"controls\"]\n }\n },\n b: S,\n base: { attrs: { href: null, target: Targets } },\n bdi: S,\n bdo: S,\n blockquote: { attrs: { cite: null } },\n body: S,\n br: S,\n button: {\n attrs: {\n form: null, formaction: null, name: null, value: null,\n autofocus: [\"autofocus\"],\n disabled: [\"autofocus\"],\n formenctype: Encs,\n formmethod: Methods,\n formnovalidate: [\"novalidate\"],\n formtarget: Targets,\n type: [\"submit\", \"reset\", \"button\"]\n }\n },\n canvas: { attrs: { width: null, height: null } },\n caption: S,\n center: S,\n cite: S,\n code: S,\n col: { attrs: { span: null } },\n colgroup: { attrs: { span: null } },\n command: {\n attrs: {\n type: [\"command\", \"checkbox\", \"radio\"],\n label: null, icon: null, radiogroup: null, command: null, title: null,\n disabled: [\"disabled\"],\n checked: [\"checked\"]\n }\n },\n data: { attrs: { value: null } },\n datagrid: { attrs: { disabled: [\"disabled\"], multiple: [\"multiple\"] } },\n datalist: { attrs: { data: null } },\n dd: S,\n del: { attrs: { cite: null, datetime: null } },\n details: { attrs: { open: [\"open\"] } },\n dfn: S,\n div: S,\n dl: S,\n dt: S,\n em: S,\n embed: { attrs: { src: null, type: null, width: null, height: null } },\n eventsource: { attrs: { src: null } },\n fieldset: { attrs: { disabled: [\"disabled\"], form: null, name: null } },\n figcaption: S,\n figure: S,\n footer: S,\n form: {\n attrs: {\n action: null, name: null,\n \"accept-charset\": Charsets,\n autocomplete: [\"on\", \"off\"],\n enctype: Encs,\n method: Methods,\n novalidate: [\"novalidate\"],\n target: Targets\n }\n },\n h1: S, h2: S, h3: S, h4: S, h5: S, h6: S,\n head: {\n children: [\"title\", \"base\", \"link\", \"style\", \"meta\", \"script\", \"noscript\", \"command\"]\n },\n header: S,\n hgroup: S,\n hr: S,\n html: {\n attrs: { manifest: null }\n },\n i: S,\n iframe: {\n attrs: {\n src: null, srcdoc: null, name: null, width: null, height: null,\n sandbox: [\"allow-top-navigation\", \"allow-same-origin\", \"allow-forms\", \"allow-scripts\"],\n seamless: [\"seamless\"]\n }\n },\n img: {\n attrs: {\n alt: null, src: null, ismap: null, usemap: null, width: null, height: null,\n crossorigin: [\"anonymous\", \"use-credentials\"]\n }\n },\n input: {\n attrs: {\n alt: null, dirname: null, form: null, formaction: null,\n height: null, list: null, max: null, maxlength: null, min: null,\n name: null, pattern: null, placeholder: null, size: null, src: null,\n step: null, value: null, width: null,\n accept: [\"audio/*\", \"video/*\", \"image/*\"],\n autocomplete: [\"on\", \"off\"],\n autofocus: [\"autofocus\"],\n checked: [\"checked\"],\n disabled: [\"disabled\"],\n formenctype: Encs,\n formmethod: Methods,\n formnovalidate: [\"novalidate\"],\n formtarget: Targets,\n multiple: [\"multiple\"],\n readonly: [\"readonly\"],\n required: [\"required\"],\n type: [\"hidden\", \"text\", \"search\", \"tel\", \"url\", \"email\", \"password\", \"datetime\", \"date\", \"month\",\n \"week\", \"time\", \"datetime-local\", \"number\", \"range\", \"color\", \"checkbox\", \"radio\",\n \"file\", \"submit\", \"image\", \"reset\", \"button\"]\n }\n },\n ins: { attrs: { cite: null, datetime: null } },\n kbd: S,\n keygen: {\n attrs: {\n challenge: null, form: null, name: null,\n autofocus: [\"autofocus\"],\n disabled: [\"disabled\"],\n keytype: [\"RSA\"]\n }\n },\n label: { attrs: { for: null, form: null } },\n legend: S,\n li: { attrs: { value: null } },\n link: {\n attrs: {\n href: null, type: null,\n hreflang: null,\n media: null,\n sizes: [\"all\", \"16x16\", \"16x16 32x32\", \"16x16 32x32 64x64\"]\n }\n },\n map: { attrs: { name: null } },\n mark: S,\n menu: { attrs: { label: null, type: [\"list\", \"context\", \"toolbar\"] } },\n meta: {\n attrs: {\n content: null,\n charset: Charsets,\n name: [\"viewport\", \"application-name\", \"author\", \"description\", \"generator\", \"keywords\"],\n \"http-equiv\": [\"content-language\", \"content-type\", \"default-style\", \"refresh\"]\n }\n },\n meter: { attrs: { value: null, min: null, low: null, high: null, max: null, optimum: null } },\n nav: S,\n noscript: S,\n object: {\n attrs: {\n data: null, type: null, name: null, usemap: null, form: null, width: null, height: null,\n typemustmatch: [\"typemustmatch\"]\n }\n },\n ol: { attrs: { reversed: [\"reversed\"], start: null, type: [\"1\", \"a\", \"A\", \"i\", \"I\"] },\n children: [\"li\", \"script\", \"template\", \"ul\", \"ol\"] },\n optgroup: { attrs: { disabled: [\"disabled\"], label: null } },\n option: { attrs: { disabled: [\"disabled\"], label: null, selected: [\"selected\"], value: null } },\n output: { attrs: { for: null, form: null, name: null } },\n p: S,\n param: { attrs: { name: null, value: null } },\n pre: S,\n progress: { attrs: { value: null, max: null } },\n q: { attrs: { cite: null } },\n rp: S,\n rt: S,\n ruby: S,\n samp: S,\n script: {\n attrs: {\n type: [\"text/javascript\"],\n src: null,\n async: [\"async\"],\n defer: [\"defer\"],\n charset: Charsets\n }\n },\n section: S,\n select: {\n attrs: {\n form: null, name: null, size: null,\n autofocus: [\"autofocus\"],\n disabled: [\"disabled\"],\n multiple: [\"multiple\"]\n }\n },\n slot: { attrs: { name: null } },\n small: S,\n source: { attrs: { src: null, type: null, media: null } },\n span: S,\n strong: S,\n style: {\n attrs: {\n type: [\"text/css\"],\n media: null,\n scoped: null\n }\n },\n sub: S,\n summary: S,\n sup: S,\n table: S,\n tbody: S,\n td: { attrs: { colspan: null, rowspan: null, headers: null } },\n template: S,\n textarea: {\n attrs: {\n dirname: null, form: null, maxlength: null, name: null, placeholder: null,\n rows: null, cols: null,\n autofocus: [\"autofocus\"],\n disabled: [\"disabled\"],\n readonly: [\"readonly\"],\n required: [\"required\"],\n wrap: [\"soft\", \"hard\"]\n }\n },\n tfoot: S,\n th: { attrs: { colspan: null, rowspan: null, headers: null, scope: [\"row\", \"col\", \"rowgroup\", \"colgroup\"] } },\n thead: S,\n time: { attrs: { datetime: null } },\n title: S,\n tr: S,\n track: {\n attrs: {\n src: null, label: null, default: null,\n kind: [\"subtitles\", \"captions\", \"descriptions\", \"chapters\", \"metadata\"],\n srclang: null\n }\n },\n ul: { children: [\"li\", \"script\", \"template\", \"ul\", \"ol\"] },\n var: S,\n video: {\n attrs: {\n src: null, poster: null, width: null, height: null,\n crossorigin: [\"anonymous\", \"use-credentials\"],\n preload: [\"auto\", \"metadata\", \"none\"],\n autoplay: [\"autoplay\"],\n mediagroup: [\"movie\"],\n muted: [\"muted\"],\n controls: [\"controls\"]\n }\n },\n wbr: S\n};\nconst GlobalAttrs = {\n accesskey: null,\n class: null,\n contenteditable: Bool,\n contextmenu: null,\n dir: [\"ltr\", \"rtl\", \"auto\"],\n draggable: [\"true\", \"false\", \"auto\"],\n dropzone: [\"copy\", \"move\", \"link\", \"string:\", \"file:\"],\n hidden: [\"hidden\"],\n id: null,\n inert: [\"inert\"],\n itemid: null,\n itemprop: null,\n itemref: null,\n itemscope: [\"itemscope\"],\n itemtype: null,\n lang: [\"ar\", \"bn\", \"de\", \"en-GB\", \"en-US\", \"es\", \"fr\", \"hi\", \"id\", \"ja\", \"pa\", \"pt\", \"ru\", \"tr\", \"zh\"],\n spellcheck: Bool,\n autocorrect: Bool,\n autocapitalize: Bool,\n style: null,\n tabindex: null,\n title: null,\n translate: [\"yes\", \"no\"],\n rel: [\"stylesheet\", \"alternate\", \"author\", \"bookmark\", \"help\", \"license\", \"next\", \"nofollow\", \"noreferrer\", \"prefetch\", \"prev\", \"search\", \"tag\"],\n role: /*@__PURE__*/\"alert application article banner button cell checkbox complementary contentinfo dialog document feed figure form grid gridcell heading img list listbox listitem main navigation region row rowgroup search switch tab table tabpanel textbox timer\".split(\" \"),\n \"aria-activedescendant\": null,\n \"aria-atomic\": Bool,\n \"aria-autocomplete\": [\"inline\", \"list\", \"both\", \"none\"],\n \"aria-busy\": Bool,\n \"aria-checked\": [\"true\", \"false\", \"mixed\", \"undefined\"],\n \"aria-controls\": null,\n \"aria-describedby\": null,\n \"aria-disabled\": Bool,\n \"aria-dropeffect\": null,\n \"aria-expanded\": [\"true\", \"false\", \"undefined\"],\n \"aria-flowto\": null,\n \"aria-grabbed\": [\"true\", \"false\", \"undefined\"],\n \"aria-haspopup\": Bool,\n \"aria-hidden\": Bool,\n \"aria-invalid\": [\"true\", \"false\", \"grammar\", \"spelling\"],\n \"aria-label\": null,\n \"aria-labelledby\": null,\n \"aria-level\": null,\n \"aria-live\": [\"off\", \"polite\", \"assertive\"],\n \"aria-multiline\": Bool,\n \"aria-multiselectable\": Bool,\n \"aria-owns\": null,\n \"aria-posinset\": null,\n \"aria-pressed\": [\"true\", \"false\", \"mixed\", \"undefined\"],\n \"aria-readonly\": Bool,\n \"aria-relevant\": null,\n \"aria-required\": Bool,\n \"aria-selected\": [\"true\", \"false\", \"undefined\"],\n \"aria-setsize\": null,\n \"aria-sort\": [\"ascending\", \"descending\", \"none\", \"other\"],\n \"aria-valuemax\": null,\n \"aria-valuemin\": null,\n \"aria-valuenow\": null,\n \"aria-valuetext\": null\n};\nconst eventAttributes = /*@__PURE__*/(\"beforeunload copy cut dragstart dragover dragleave dragenter dragend \" +\n \"drag paste focus blur change click load mousedown mouseenter mouseleave \" +\n \"mouseup keydown keyup resize scroll unload\").split(\" \").map(n => \"on\" + n);\nfor (let a of eventAttributes)\n GlobalAttrs[a] = null;\nclass Schema {\n constructor(extraTags, extraAttrs) {\n this.tags = { ...Tags, ...extraTags };\n this.globalAttrs = { ...GlobalAttrs, ...extraAttrs };\n this.allTags = Object.keys(this.tags);\n this.globalAttrNames = Object.keys(this.globalAttrs);\n }\n}\nSchema.default = /*@__PURE__*/new Schema;\nfunction elementName(doc, tree, max = doc.length) {\n if (!tree)\n return \"\";\n let tag = tree.firstChild;\n let name = tag && tag.getChild(\"TagName\");\n return name ? doc.sliceString(name.from, Math.min(name.to, max)) : \"\";\n}\nfunction findParentElement(tree, skip = false) {\n for (; tree; tree = tree.parent)\n if (tree.name == \"Element\") {\n if (skip)\n skip = false;\n else\n return tree;\n }\n return null;\n}\nfunction allowedChildren(doc, tree, schema) {\n let parentInfo = schema.tags[elementName(doc, findParentElement(tree))];\n return (parentInfo === null || parentInfo === void 0 ? void 0 : parentInfo.children) || schema.allTags;\n}\nfunction openTags(doc, tree) {\n let open = [];\n for (let parent = findParentElement(tree); parent && !parent.type.isTop; parent = findParentElement(parent.parent)) {\n let tagName = elementName(doc, parent);\n if (tagName && parent.lastChild.name == \"CloseTag\")\n break;\n if (tagName && open.indexOf(tagName) < 0 && (tree.name == \"EndTag\" || tree.from >= parent.firstChild.to))\n open.push(tagName);\n }\n return open;\n}\nconst identifier = /^[:\\-\\.\\w\\u00b7-\\uffff]*$/;\nfunction completeTag(state, schema, tree, from, to) {\n let end = /\\s*>/.test(state.sliceDoc(to, to + 5)) ? \"\" : \">\";\n let parent = findParentElement(tree, tree.name == \"StartTag\" || tree.name == \"TagName\");\n return { from, to,\n options: allowedChildren(state.doc, parent, schema).map(tagName => ({ label: tagName, type: \"type\" })).concat(openTags(state.doc, tree).map((tag, i) => ({ label: \"/\" + tag, apply: \"/\" + tag + end,\n type: \"type\", boost: 99 - i }))),\n validFor: /^\\/?[:\\-\\.\\w\\u00b7-\\uffff]*$/ };\n}\nfunction completeCloseTag(state, tree, from, to) {\n let end = /\\s*>/.test(state.sliceDoc(to, to + 5)) ? \"\" : \">\";\n return { from, to,\n options: openTags(state.doc, tree).map((tag, i) => ({ label: tag, apply: tag + end, type: \"type\", boost: 99 - i })),\n validFor: identifier };\n}\nfunction completeStartTag(state, schema, tree, pos) {\n let options = [], level = 0;\n for (let tagName of allowedChildren(state.doc, tree, schema))\n options.push({ label: \"<\" + tagName, type: \"type\" });\n for (let open of openTags(state.doc, tree))\n options.push({ label: \"</\" + open + \">\", type: \"type\", boost: 99 - level++ });\n return { from: pos, to: pos, options, validFor: /^<\\/?[:\\-\\.\\w\\u00b7-\\uffff]*$/ };\n}\nfunction completeAttrName(state, schema, tree, from, to) {\n let elt = findParentElement(tree), info = elt ? schema.tags[elementName(state.doc, elt)] : null;\n let localAttrs = info && info.attrs ? Object.keys(info.attrs) : [];\n let names = info && info.globalAttrs === false ? localAttrs\n : localAttrs.length ? localAttrs.concat(schema.globalAttrNames) : schema.globalAttrNames;\n return { from, to,\n options: names.map(attrName => ({ label: attrName, type: \"property\" })),\n validFor: identifier };\n}\nfunction completeAttrValue(state, schema, tree, from, to) {\n var _a;\n let nameNode = (_a = tree.parent) === null || _a === void 0 ? void 0 : _a.getChild(\"AttributeName\");\n let options = [], token = undefined;\n if (nameNode) {\n let attrName = state.sliceDoc(nameNode.from, nameNode.to);\n let attrs = schema.globalAttrs[attrName];\n if (!attrs) {\n let elt = findParentElement(tree), info = elt ? schema.tags[elementName(state.doc, elt)] : null;\n attrs = (info === null || info === void 0 ? void 0 : info.attrs) && info.attrs[attrName];\n }\n if (attrs) {\n let base = state.sliceDoc(from, to).toLowerCase(), quoteStart = '\"', quoteEnd = '\"';\n if (/^['\"]/.test(base)) {\n token = base[0] == '\"' ? /^[^\"]*$/ : /^[^']*$/;\n quoteStart = \"\";\n quoteEnd = state.sliceDoc(to, to + 1) == base[0] ? \"\" : base[0];\n base = base.slice(1);\n from++;\n }\n else {\n token = /^[^\\s<>='\"]*$/;\n }\n for (let value of attrs)\n options.push({ label: value, apply: quoteStart + value + quoteEnd, type: \"constant\" });\n }\n }\n return { from, to, options, validFor: token };\n}\nfunction htmlCompletionFor(schema, context) {\n let { state, pos } = context, tree = syntaxTree(state).resolveInner(pos, -1), around = tree.resolve(pos);\n for (let scan = pos, before; around == tree && (before = tree.childBefore(scan));) {\n let last = before.lastChild;\n if (!last || !last.type.isError || last.from < last.to)\n break;\n around = tree = before;\n scan = last.from;\n }\n if (tree.name == \"TagName\") {\n return tree.parent && /CloseTag$/.test(tree.parent.name) ? completeCloseTag(state, tree, tree.from, pos)\n : completeTag(state, schema, tree, tree.from, pos);\n }\n else if (tree.name == \"StartTag\" || tree.name == \"IncompleteTag\") {\n return completeTag(state, schema, tree, pos, pos);\n }\n else if (tree.name == \"StartCloseTag\" || tree.name == \"IncompleteCloseTag\") {\n return completeCloseTag(state, tree, pos, pos);\n }\n else if (tree.name == \"OpenTag\" || tree.name == \"SelfClosingTag\" || tree.name == \"AttributeName\") {\n return completeAttrName(state, schema, tree, tree.name == \"AttributeName\" ? tree.from : pos, pos);\n }\n else if (tree.name == \"Is\" || tree.name == \"AttributeValue\" || tree.name == \"UnquotedAttributeValue\") {\n return completeAttrValue(state, schema, tree, tree.name == \"Is\" ? pos : tree.from, pos);\n }\n else if (context.explicit && (around.name == \"Element\" || around.name == \"Text\" || around.name == \"Document\")) {\n return completeStartTag(state, schema, tree, pos);\n }\n else {\n return null;\n }\n}\n/**\nHTML tag completion. Opens and closes tags and attributes in a\ncontext-aware way.\n*/\nfunction htmlCompletionSource(context) {\n return htmlCompletionFor(Schema.default, context);\n}\n/**\nCreate a completion source for HTML extended with additional tags\nor attributes.\n*/\nfunction htmlCompletionSourceWith(config) {\n let { extraTags, extraGlobalAttributes: extraAttrs } = config;\n let schema = extraAttrs || extraTags ? new Schema(extraTags, extraAttrs) : Schema.default;\n return (context) => htmlCompletionFor(schema, context);\n}\n\nconst jsonParser = /*@__PURE__*/javascriptLanguage.parser.configure({ top: \"SingleExpression\" });\nconst defaultNesting = [\n { tag: \"script\",\n attrs: attrs => attrs.type == \"text/typescript\" || attrs.lang == \"ts\",\n parser: typescriptLanguage.parser },\n { tag: \"script\",\n attrs: attrs => attrs.type == \"text/babel\" || attrs.type == \"text/jsx\",\n parser: jsxLanguage.parser },\n { tag: \"script\",\n attrs: attrs => attrs.type == \"text/typescript-jsx\",\n parser: tsxLanguage.parser },\n { tag: \"script\",\n attrs(attrs) {\n return /^(importmap|speculationrules|application\\/(.+\\+)?json)$/i.test(attrs.type);\n },\n parser: jsonParser },\n { tag: \"script\",\n attrs(attrs) {\n return !attrs.type || /^(?:text|application)\\/(?:x-)?(?:java|ecma)script$|^module$|^$/i.test(attrs.type);\n },\n parser: javascriptLanguage.parser },\n { tag: \"style\",\n attrs(attrs) {\n return (!attrs.lang || attrs.lang == \"css\") && (!attrs.type || /^(text\\/)?(x-)?(stylesheet|css)$/i.test(attrs.type));\n },\n parser: cssLanguage.parser }\n];\nconst defaultAttrs = /*@__PURE__*/[\n { name: \"style\",\n parser: /*@__PURE__*/cssLanguage.parser.configure({ top: \"Styles\" }) }\n].concat(/*@__PURE__*/eventAttributes.map(name => ({ name, parser: javascriptLanguage.parser })));\nconst htmlPlain = /*@__PURE__*/LRLanguage.define({\n name: \"html\",\n parser: /*@__PURE__*/parser.configure({\n props: [\n /*@__PURE__*/indentNodeProp.add({\n Element(context) {\n let after = /^(\\s*)(<\\/)?/.exec(context.textAfter);\n if (context.node.to <= context.pos + after[0].length)\n return context.continue();\n return context.lineIndent(context.node.from) + (after[2] ? 0 : context.unit);\n },\n \"OpenTag CloseTag SelfClosingTag\"(context) {\n return context.column(context.node.from) + context.unit;\n },\n Document(context) {\n if (context.pos + /\\s*/.exec(context.textAfter)[0].length < context.node.to)\n return context.continue();\n let endElt = null, close;\n for (let cur = context.node;;) {\n let last = cur.lastChild;\n if (!last || last.name != \"Element\" || last.to != cur.to)\n break;\n endElt = cur = last;\n }\n if (endElt && !((close = endElt.lastChild) && (close.name == \"CloseTag\" || close.name == \"SelfClosingTag\")))\n return context.lineIndent(endElt.from) + context.unit;\n return null;\n }\n }),\n /*@__PURE__*/foldNodeProp.add({\n Element(node) {\n let first = node.firstChild, last = node.lastChild;\n if (!first || first.name != \"OpenTag\")\n return null;\n return { from: first.to, to: last.name == \"CloseTag\" ? last.from : node.to };\n }\n }),\n /*@__PURE__*/bracketMatchingHandle.add({\n \"OpenTag CloseTag\": node => node.getChild(\"TagName\")\n })\n ]\n }),\n languageData: {\n commentTokens: { block: { open: \"<!--\", close: \"-->\" } },\n indentOnInput: /^\\s*<\\/\\w+\\W$/,\n wordChars: \"-_\"\n }\n});\n/**\nA language provider based on the [Lezer HTML\nparser](https://github.com/lezer-parser/html), extended with the\nJavaScript and CSS parsers to parse the content of `<script>` and\n`<style>` tags.\n*/\nconst htmlLanguage = /*@__PURE__*/htmlPlain.configure({\n wrap: /*@__PURE__*/configureNesting(defaultNesting, defaultAttrs)\n});\n/**\nLanguage support for HTML, including\n[`htmlCompletion`](https://codemirror.net/6/docs/ref/#lang-html.htmlCompletion) and JavaScript and\nCSS support extensions.\n*/\nfunction html(config = {}) {\n let dialect = \"\", wrap;\n if (config.matchClosingTags === false)\n dialect = \"noMatch\";\n if (config.selfClosingTags === true)\n dialect = (dialect ? dialect + \" \" : \"\") + \"selfClosing\";\n if (config.nestedLanguages && config.nestedLanguages.length ||\n config.nestedAttributes && config.nestedAttributes.length)\n wrap = configureNesting((config.nestedLanguages || []).concat(defaultNesting), (config.nestedAttributes || []).concat(defaultAttrs));\n let lang = wrap ? htmlPlain.configure({ wrap, dialect }) : dialect ? htmlLanguage.configure({ dialect }) : htmlLanguage;\n return new LanguageSupport(lang, [\n htmlLanguage.data.of({ autocomplete: htmlCompletionSourceWith(config) }),\n config.autoCloseTags !== false ? autoCloseTags : [],\n javascript().support,\n css().support\n ]);\n}\nconst selfClosers = /*@__PURE__*/new Set(/*@__PURE__*/\"area base br col command embed frame hr img input keygen link meta param source track wbr menuitem\".split(\" \"));\n/**\nExtension that will automatically insert close tags when a `>` or\n`/` is typed.\n*/\nconst autoCloseTags = /*@__PURE__*/EditorView.inputHandler.of((view, from, to, text, insertTransaction) => {\n if (view.composing || view.state.readOnly || from != to || (text != \">\" && text != \"/\") ||\n !htmlLanguage.isActiveAt(view.state, from, -1))\n return false;\n let base = insertTransaction(), { state } = base;\n let closeTags = state.changeByRange(range => {\n var _a, _b, _c;\n let didType = state.doc.sliceString(range.from - 1, range.to) == text;\n let { head } = range, after = syntaxTree(state).resolveInner(head, -1), name;\n if (didType && text == \">\" && after.name == \"EndTag\") {\n let tag = after.parent;\n if (((_b = (_a = tag.parent) === null || _a === void 0 ? void 0 : _a.lastChild) === null || _b === void 0 ? void 0 : _b.name) != \"CloseTag\" &&\n (name = elementName(state.doc, tag.parent, head)) &&\n !selfClosers.has(name)) {\n let to = head + (state.doc.sliceString(head, head + 1) === \">\" ? 1 : 0);\n let insert = `</${name}>`;\n return { range, changes: { from: head, to, insert } };\n }\n }\n else if (didType && text == \"/\" && after.name == \"IncompleteCloseTag\") {\n let tag = after.parent;\n if (after.from == head - 2 && ((_c = tag.lastChild) === null || _c === void 0 ? void 0 : _c.name) != \"CloseTag\" &&\n (name = elementName(state.doc, tag, head)) && !selfClosers.has(name)) {\n let to = head + (state.doc.sliceString(head, head + 1) === \">\" ? 1 : 0);\n let insert = `${name}>`;\n return {\n range: EditorSelection.cursor(head + insert.length, -1),\n changes: { from: head, to, insert }\n };\n }\n }\n return { range };\n });\n if (closeTags.changes.empty)\n return false;\n view.dispatch([\n base,\n state.update(closeTags, {\n userEvent: \"input.complete\",\n scrollIntoView: true\n })\n ]);\n return true;\n});\n\nexport { autoCloseTags, html, htmlCompletionSource, htmlCompletionSourceWith, htmlLanguage };\n","import { parser } from '@lezer/javascript';\nimport { syntaxTree, LRLanguage, indentNodeProp, continuedIndent, flatIndent, delimitedIndent, foldNodeProp, foldInside, defineLanguageFacet, sublanguageProp, LanguageSupport } from '@codemirror/language';\nimport { EditorSelection } from '@codemirror/state';\nimport { EditorView } from '@codemirror/view';\nimport { snippetCompletion, ifNotIn, completeFromList } from '@codemirror/autocomplete';\nimport { NodeWeakMap, IterMode } from '@lezer/common';\n\n/**\nA collection of JavaScript-related\n[snippets](https://codemirror.net/6/docs/ref/#autocomplete.snippet).\n*/\nconst snippets = [\n /*@__PURE__*/snippetCompletion(\"function ${name}(${params}) {\\n\\t${}\\n}\", {\n label: \"function\",\n detail: \"definition\",\n type: \"keyword\"\n }),\n /*@__PURE__*/snippetCompletion(\"for (let ${index} = 0; ${index} < ${bound}; ${index}++) {\\n\\t${}\\n}\", {\n label: \"for\",\n detail: \"loop\",\n type: \"keyword\"\n }),\n /*@__PURE__*/snippetCompletion(\"for (let ${name} of ${collection}) {\\n\\t${}\\n}\", {\n label: \"for\",\n detail: \"of loop\",\n type: \"keyword\"\n }),\n /*@__PURE__*/snippetCompletion(\"do {\\n\\t${}\\n} while (${})\", {\n label: \"do\",\n detail: \"loop\",\n type: \"keyword\"\n }),\n /*@__PURE__*/snippetCompletion(\"while (${}) {\\n\\t${}\\n}\", {\n label: \"while\",\n detail: \"loop\",\n type: \"keyword\"\n }),\n /*@__PURE__*/snippetCompletion(\"try {\\n\\t${}\\n} catch (${error}) {\\n\\t${}\\n}\", {\n label: \"try\",\n detail: \"/ catch block\",\n type: \"keyword\"\n }),\n /*@__PURE__*/snippetCompletion(\"if (${}) {\\n\\t${}\\n}\", {\n label: \"if\",\n detail: \"block\",\n type: \"keyword\"\n }),\n /*@__PURE__*/snippetCompletion(\"if (${}) {\\n\\t${}\\n} else {\\n\\t${}\\n}\", {\n label: \"if\",\n detail: \"/ else block\",\n type: \"keyword\"\n }),\n /*@__PURE__*/snippetCompletion(\"class ${name} {\\n\\tconstructor(${params}) {\\n\\t\\t${}\\n\\t}\\n}\", {\n label: \"class\",\n detail: \"definition\",\n type: \"keyword\"\n }),\n /*@__PURE__*/snippetCompletion(\"import {${names}} from \\\"${module}\\\"\\n${}\", {\n label: \"import\",\n detail: \"named\",\n type: \"keyword\"\n }),\n /*@__PURE__*/snippetCompletion(\"import ${name} from \\\"${module}\\\"\\n${}\", {\n label: \"import\",\n detail: \"default\",\n type: \"keyword\"\n })\n];\n/**\nA collection of snippet completions for TypeScript. Includes the\nJavaScript [snippets](https://codemirror.net/6/docs/ref/#lang-javascript.snippets).\n*/\nconst typescriptSnippets = /*@__PURE__*/snippets.concat([\n /*@__PURE__*/snippetCompletion(\"interface ${name} {\\n\\t${}\\n}\", {\n label: \"interface\",\n detail: \"definition\",\n type: \"keyword\"\n }),\n /*@__PURE__*/snippetCompletion(\"type ${name} = ${type}\", {\n label: \"type\",\n detail: \"definition\",\n type: \"keyword\"\n }),\n /*@__PURE__*/snippetCompletion(\"enum ${name} {\\n\\t${}\\n}\", {\n label: \"enum\",\n detail: \"definition\",\n type: \"keyword\"\n })\n]);\n\nconst cache = /*@__PURE__*/new NodeWeakMap();\nconst ScopeNodes = /*@__PURE__*/new Set([\n \"Script\", \"Block\",\n \"FunctionExpression\", \"FunctionDeclaration\", \"ArrowFunction\", \"MethodDeclaration\",\n \"ForStatement\"\n]);\nfunction defID(type) {\n return (node, def) => {\n let id = node.node.getChild(\"VariableDefinition\");\n if (id)\n def(id, type);\n return true;\n };\n}\nconst functionContext = [\"FunctionDeclaration\"];\nconst gatherCompletions = {\n FunctionDeclaration: /*@__PURE__*/defID(\"function\"),\n ClassDeclaration: /*@__PURE__*/defID(\"class\"),\n ClassExpression: () => true,\n EnumDeclaration: /*@__PURE__*/defID(\"constant\"),\n TypeAliasDeclaration: /*@__PURE__*/defID(\"type\"),\n NamespaceDeclaration: /*@__PURE__*/defID(\"namespace\"),\n VariableDefinition(node, def) { if (!node.matchContext(functionContext))\n def(node, \"variable\"); },\n TypeDefinition(node, def) { def(node, \"type\"); },\n __proto__: null\n};\nfunction getScope(doc, node) {\n let cached = cache.get(node);\n if (cached)\n return cached;\n let completions = [], top = true;\n function def(node, type) {\n let name = doc.sliceString(node.from, node.to);\n completions.push({ label: name, type });\n }\n node.cursor(IterMode.IncludeAnonymous).iterate(node => {\n if (top) {\n top = false;\n }\n else if (node.name) {\n let gather = gatherCompletions[node.name];\n if (gather && gather(node, def) || ScopeNodes.has(node.name))\n return false;\n }\n else if (node.to - node.from > 8192) {\n // Allow caching for bigger internal nodes\n for (let c of getScope(doc, node.node))\n completions.push(c);\n return false;\n }\n });\n cache.set(node, completions);\n return completions;\n}\nconst Identifier = /^[\\w$\\xa1-\\uffff][\\w$\\d\\xa1-\\uffff]*$/;\nconst dontComplete = [\n \"TemplateString\", \"String\", \"RegExp\",\n \"LineComment\", \"BlockComment\",\n \"VariableDefinition\", \"TypeDefinition\", \"Label\",\n \"PropertyDefinition\", \"PropertyName\",\n \"PrivatePropertyDefinition\", \"PrivatePropertyName\",\n \"JSXText\", \"JSXAttributeValue\", \"JSXOpenTag\", \"JSXCloseTag\", \"JSXSelfClosingTag\",\n \".\", \"?.\"\n];\n/**\nCompletion source that looks up locally defined names in\nJavaScript code.\n*/\nfunction localCompletionSource(context) {\n let inner = syntaxTree(context.state).resolveInner(context.pos, -1);\n if (dontComplete.indexOf(inner.name) > -1)\n return null;\n let isWord = inner.name == \"VariableName\" ||\n inner.to - inner.from < 20 && Identifier.test(context.state.sliceDoc(inner.from, inner.to));\n if (!isWord && !context.explicit)\n return null;\n let options = [];\n for (let pos = inner; pos; pos = pos.parent) {\n if (ScopeNodes.has(pos.name))\n options = options.concat(getScope(context.state.doc, pos));\n }\n return {\n options,\n from: isWord ? inner.from : context.pos,\n validFor: Identifier\n };\n}\nfunction pathFor(read, member, name) {\n var _a;\n let path = [];\n for (;;) {\n let obj = member.firstChild, prop;\n if ((obj === null || obj === void 0 ? void 0 : obj.name) == \"VariableName\") {\n path.push(read(obj));\n return { path: path.reverse(), name };\n }\n else if ((obj === null || obj === void 0 ? void 0 : obj.name) == \"MemberExpression\" && ((_a = (prop = obj.lastChild)) === null || _a === void 0 ? void 0 : _a.name) == \"PropertyName\") {\n path.push(read(prop));\n member = obj;\n }\n else {\n return null;\n }\n }\n}\n/**\nHelper function for defining JavaScript completion sources. It\nreturns the completable name and object path for a completion\ncontext, or null if no name/property completion should happen at\nthat position. For example, when completing after `a.b.c` it will\nreturn `{path: [\"a\", \"b\"], name: \"c\"}`. When completing after `x`\nit will return `{path: [], name: \"x\"}`. When not in a property or\nname, it will return null if `context.explicit` is false, and\n`{path: [], name: \"\"}` otherwise.\n*/\nfunction completionPath(context) {\n let read = (node) => context.state.doc.sliceString(node.from, node.to);\n let inner = syntaxTree(context.state).resolveInner(context.pos, -1);\n if (inner.name == \"PropertyName\") {\n return pathFor(read, inner.parent, read(inner));\n }\n else if ((inner.name == \".\" || inner.name == \"?.\") && inner.parent.name == \"MemberExpression\") {\n return pathFor(read, inner.parent, \"\");\n }\n else if (dontComplete.indexOf(inner.name) > -1) {\n return null;\n }\n else if (inner.name == \"VariableName\" || inner.to - inner.from < 20 && Identifier.test(read(inner))) {\n return { path: [], name: read(inner) };\n }\n else if (inner.name == \"MemberExpression\") {\n return pathFor(read, inner, \"\");\n }\n else {\n return context.explicit ? { path: [], name: \"\" } : null;\n }\n}\nfunction enumeratePropertyCompletions(obj, top) {\n let options = [], seen = new Set;\n for (let depth = 0;; depth++) {\n for (let name of (Object.getOwnPropertyNames || Object.keys)(obj)) {\n if (!/^[a-zA-Z_$\\xaa-\\uffdc][\\w$\\xaa-\\uffdc]*$/.test(name) || seen.has(name))\n continue;\n seen.add(name);\n let value;\n try {\n value = obj[name];\n }\n catch (_) {\n continue;\n }\n options.push({\n label: name,\n type: typeof value == \"function\" ? (/^[A-Z]/.test(name) ? \"class\" : top ? \"function\" : \"method\")\n : top ? \"variable\" : \"property\",\n boost: -depth\n });\n }\n let next = Object.getPrototypeOf(obj);\n if (!next)\n return options;\n obj = next;\n }\n}\n/**\nDefines a [completion source](https://codemirror.net/6/docs/ref/#autocomplete.CompletionSource) that\ncompletes from the given scope object (for example `globalThis`).\nWill enter properties of the object when completing properties on\na directly-named path.\n*/\nfunction scopeCompletionSource(scope) {\n let cache = new Map;\n return (context) => {\n let path = completionPath(context);\n if (!path)\n return null;\n let target = scope;\n for (let step of path.path) {\n target = target[step];\n if (!target)\n return null;\n }\n let options = cache.get(target);\n if (!options)\n cache.set(target, options = enumeratePropertyCompletions(target, !path.path.length));\n return {\n from: context.pos - path.name.length,\n options,\n validFor: Identifier\n };\n };\n}\n\n/**\nA language provider based on the [Lezer JavaScript\nparser](https://github.com/lezer-parser/javascript), extended with\nhighlighting and indentation information.\n*/\nconst javascriptLanguage = /*@__PURE__*/LRLanguage.define({\n name: \"javascript\",\n parser: /*@__PURE__*/parser.configure({\n props: [\n /*@__PURE__*/indentNodeProp.add({\n IfStatement: /*@__PURE__*/continuedIndent({ except: /^\\s*({|else\\b)/ }),\n TryStatement: /*@__PURE__*/continuedIndent({ except: /^\\s*({|catch\\b|finally\\b)/ }),\n LabeledStatement: flatIndent,\n SwitchBody: context => {\n let after = context.textAfter, closed = /^\\s*\\}/.test(after), isCase = /^\\s*(case|default)\\b/.test(after);\n return context.baseIndent + (closed ? 0 : isCase ? 1 : 2) * context.unit;\n },\n Block: /*@__PURE__*/delimitedIndent({ closing: \"}\" }),\n ArrowFunction: cx => cx.baseIndent + cx.unit,\n \"TemplateString BlockComment\": () => null,\n \"Statement Property\": /*@__PURE__*/continuedIndent({ except: /^\\s*{/ }),\n JSXElement(context) {\n let closed = /^\\s*<\\//.test(context.textAfter);\n return context.lineIndent(context.node.from) + (closed ? 0 : context.unit);\n },\n JSXEscape(context) {\n let closed = /\\s*\\}/.test(context.textAfter);\n return context.lineIndent(context.node.from) + (closed ? 0 : context.unit);\n },\n \"JSXOpenTag JSXSelfClosingTag\"(context) {\n return context.column(context.node.from) + context.unit;\n }\n }),\n /*@__PURE__*/foldNodeProp.add({\n \"Block ClassBody SwitchBody EnumBody ObjectExpression ArrayExpression ObjectType\": foldInside,\n BlockComment(tree) { return { from: tree.from + 2, to: tree.to - 2 }; }\n })\n ]\n }),\n languageData: {\n closeBrackets: { brackets: [\"(\", \"[\", \"{\", \"'\", '\"', \"`\"] },\n commentTokens: { line: \"//\", block: { open: \"/*\", close: \"*/\" } },\n indentOnInput: /^\\s*(?:case |default:|\\{|\\}|<\\/)$/,\n wordChars: \"$\"\n }\n});\nconst jsxSublanguage = {\n test: node => /^JSX/.test(node.name),\n facet: /*@__PURE__*/defineLanguageFacet({ commentTokens: { block: { open: \"{/*\", close: \"*/}\" } } })\n};\n/**\nA language provider for TypeScript.\n*/\nconst typescriptLanguage = /*@__PURE__*/javascriptLanguage.configure({ dialect: \"ts\" }, \"typescript\");\n/**\nLanguage provider for JSX.\n*/\nconst jsxLanguage = /*@__PURE__*/javascriptLanguage.configure({\n dialect: \"jsx\",\n props: [/*@__PURE__*/sublanguageProp.add(n => n.isTop ? [jsxSublanguage] : undefined)]\n});\n/**\nLanguage provider for JSX + TypeScript.\n*/\nconst tsxLanguage = /*@__PURE__*/javascriptLanguage.configure({\n dialect: \"jsx ts\",\n props: [/*@__PURE__*/sublanguageProp.add(n => n.isTop ? [jsxSublanguage] : undefined)]\n}, \"typescript\");\nlet kwCompletion = (name) => ({ label: name, type: \"keyword\" });\nconst keywords = /*@__PURE__*/\"break case const continue default delete export extends false finally in instanceof let new return static super switch this throw true typeof var yield\".split(\" \").map(kwCompletion);\nconst typescriptKeywords = /*@__PURE__*/keywords.concat(/*@__PURE__*/[\"declare\", \"implements\", \"private\", \"protected\", \"public\"].map(kwCompletion));\n/**\nJavaScript support. Includes [snippet](https://codemirror.net/6/docs/ref/#lang-javascript.snippets)\nand local variable completion.\n*/\nfunction javascript(config = {}) {\n let lang = config.jsx ? (config.typescript ? tsxLanguage : jsxLanguage)\n : config.typescript ? typescriptLanguage : javascriptLanguage;\n let completions = config.typescript ? typescriptSnippets.concat(typescriptKeywords) : snippets.concat(keywords);\n return new LanguageSupport(lang, [\n javascriptLanguage.data.of({\n autocomplete: ifNotIn(dontComplete, completeFromList(completions))\n }),\n javascriptLanguage.data.of({\n autocomplete: localCompletionSource\n }),\n config.jsx ? autoCloseTags : [],\n ]);\n}\nfunction findOpenTag(node) {\n for (;;) {\n if (node.name == \"JSXOpenTag\" || node.name == \"JSXSelfClosingTag\" || node.name == \"JSXFragmentTag\")\n return node;\n if (node.name == \"JSXEscape\" || !node.parent)\n return null;\n node = node.parent;\n }\n}\nfunction elementName(doc, tree, max = doc.length) {\n for (let ch = tree === null || tree === void 0 ? void 0 : tree.firstChild; ch; ch = ch.nextSibling) {\n if (ch.name == \"JSXIdentifier\" || ch.name == \"JSXBuiltin\" || ch.name == \"JSXNamespacedName\" ||\n ch.name == \"JSXMemberExpression\")\n return doc.sliceString(ch.from, Math.min(ch.to, max));\n }\n return \"\";\n}\nconst android = typeof navigator == \"object\" && /*@__PURE__*//Android\\b/.test(navigator.userAgent);\n/**\nExtension that will automatically insert JSX close tags when a `>` or\n`/` is typed.\n*/\nconst autoCloseTags = /*@__PURE__*/EditorView.inputHandler.of((view, from, to, text, defaultInsert) => {\n if ((android ? view.composing : view.compositionStarted) || view.state.readOnly ||\n from != to || (text != \">\" && text != \"/\") ||\n !javascriptLanguage.isActiveAt(view.state, from, -1))\n return false;\n let base = defaultInsert(), { state } = base;\n let closeTags = state.changeByRange(range => {\n var _a;\n let { head } = range, around = syntaxTree(state).resolveInner(head - 1, -1), name;\n if (around.name == \"JSXStartTag\")\n around = around.parent;\n if (state.doc.sliceString(head - 1, head) != text || around.name == \"JSXAttributeValue\" && around.to > head) ;\n else if (text == \">\" && around.name == \"JSXFragmentTag\") {\n return { range, changes: { from: head, insert: `</>` } };\n }\n else if (text == \"/\" && around.name == \"JSXStartCloseTag\") {\n let empty = around.parent, base = empty.parent;\n if (base && empty.from == head - 2 &&\n ((name = elementName(state.doc, base.firstChild, head)) || ((_a = base.firstChild) === null || _a === void 0 ? void 0 : _a.name) == \"JSXFragmentTag\")) {\n let insert = `${name}>`;\n return { range: EditorSelection.cursor(head + insert.length, -1), changes: { from: head, insert } };\n }\n }\n else if (text == \">\") {\n let openTag = findOpenTag(around);\n if (openTag && openTag.name == \"JSXOpenTag\" &&\n !/^\\/?>|^<\\//.test(state.doc.sliceString(head, head + 2)) &&\n (name = elementName(state.doc, openTag, head)))\n return { range, changes: { from: head, insert: `</${name}>` } };\n }\n return { range };\n });\n if (closeTags.changes.empty)\n return false;\n view.dispatch([\n base,\n state.update(closeTags, { userEvent: \"input.complete\", scrollIntoView: true })\n ]);\n return true;\n});\n\n/**\nConnects an [ESLint](https://eslint.org/) linter to CodeMirror's\n[lint](https://codemirror.net/6/docs/ref/#lint) integration. `eslint` should be an instance of the\n[`Linter`](https://eslint.org/docs/developer-guide/nodejs-api#linter)\nclass, and `config` an optional ESLint configuration. The return\nvalue of this function can be passed to [`linter`](https://codemirror.net/6/docs/ref/#lint.linter)\nto create a JavaScript linting extension.\n\nNote that ESLint targets node, and is tricky to run in the\nbrowser. The\n[eslint-linter-browserify](https://github.com/UziTech/eslint-linter-browserify)\npackage may help with that (see\n[example](https://github.com/UziTech/eslint-linter-browserify/blob/master/example/script.js)).\n*/\nfunction esLint(eslint, config) {\n if (!config) {\n config = {\n parserOptions: { ecmaVersion: 2019, sourceType: \"module\" },\n env: { browser: true, node: true, es6: true, es2015: true, es2017: true, es2020: true },\n rules: {}\n };\n eslint.getRules().forEach((desc, name) => {\n var _a;\n if ((_a = desc.meta.docs) === null || _a === void 0 ? void 0 : _a.recommended)\n config.rules[name] = 2;\n });\n }\n return (view) => {\n let { state } = view, found = [];\n for (let { from, to } of javascriptLanguage.findRegions(state)) {\n let fromLine = state.doc.lineAt(from), offset = { line: fromLine.number - 1, col: from - fromLine.from, pos: from };\n for (let d of eslint.verify(state.sliceDoc(from, to), config))\n found.push(translateDiagnostic(d, state.doc, offset));\n }\n return found;\n };\n}\nfunction mapPos(line, col, doc, offset) {\n return doc.line(line + offset.line).from + col + (line == 1 ? offset.col - 1 : -1);\n}\nfunction translateDiagnostic(input, doc, offset) {\n let start = mapPos(input.line, input.column, doc, offset);\n let result = {\n from: start,\n to: input.endLine != null && input.endColumn != 1 ? mapPos(input.endLine, input.endColumn, doc, offset) : start,\n message: input.message,\n source: input.ruleId ? \"eslint:\" + input.ruleId : \"eslint\",\n severity: input.severity == 1 ? \"warning\" : \"error\",\n };\n if (input.fix) {\n let { range, text } = input.fix, from = range[0] + offset.pos - start, to = range[1] + offset.pos - start;\n result.actions = [{\n name: \"fix\",\n apply(view, start) {\n view.dispatch({ changes: { from: start + from, to: start + to, insert: text }, scrollIntoView: true });\n }\n }];\n }\n return result;\n}\n\nexport { autoCloseTags, completionPath, esLint, javascript, javascriptLanguage, jsxLanguage, localCompletionSource, scopeCompletionSource, snippets, tsxLanguage, typescriptLanguage, typescriptSnippets };\n","import { LRLanguage, indentNodeProp, delimitedIndent, foldNodeProp, foldInside, LanguageSupport } from '@codemirror/language';\nimport { styleTags, tags } from '@lezer/highlight';\nimport { LRParser } from '@lezer/lr';\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst spec_Keyword = {__proto__:null,anyref:34, dataref:34, eqref:34, externref:34, i31ref:34, funcref:34, i8:34, i16:34, i32:34, i64:34, f32:34, f64:34};\nconst parser = /*@__PURE__*/LRParser.deserialize({\n version: 14,\n states: \"!^Q]QPOOOqQPO'#CbOOQO'#Cd'#CdOOQO'#Cl'#ClOOQO'#Ch'#ChQ]QPOOOOQO,58|,58|OxQPO,58|OOQO-E6f-E6fOOQO1G.h1G.h\",\n stateData: \"!P~O_OSPOSQOS~OTPOVROXROYROZROaQO~OSUO~P]OSXO~P]O\",\n goto: \"xaPPPPPPbPbPPPhPPPrXROPTVQTOQVPTWTVXSOPTV\",\n nodeNames: \"⚠ LineComment BlockComment Module ) ( App Identifier Type Keyword Number String\",\n maxTerm: 17,\n nodeProps: [\n [\"isolate\", -3,1,2,11,\"\"],\n [\"openedBy\", 4,\"(\"],\n [\"closedBy\", 5,\")\"],\n [\"group\", -6,6,7,8,9,10,11,\"Expression\"]\n ],\n skippedNodes: [0,1,2],\n repeatNodeCount: 1,\n tokenData: \"0o~R^XY}YZ}]^}pq}rs!Stu#pxy'Uyz(e{|(j}!O(j!Q!R(s!R![*p!]!^.^#T#o.{~!SO_~~!VVOr!Srs!ls#O!S#O#P!q#P;'S!S;'S;=`#j<%lO!S~!qOZ~~!tRO;'S!S;'S;=`!};=`O!S~#QWOr!Srs!ls#O!S#O#P!q#P;'S!S;'S;=`#j;=`<%l!S<%lO!S~#mP;=`<%l!S~#siqr%bst%btu%buv%bvw%bwx%bz{%b{|%b}!O%b!O!P%b!P!Q%b!Q![%b![!]%b!^!_%b!_!`%b!`!a%b!a!b%b!b!c%b!c!}%b#Q#R%b#R#S%b#S#T%b#T#o%b#p#q%b#r#s%b~%giV~qr%bst%btu%buv%bvw%bwx%bz{%b{|%b}!O%b!O!P%b!P!Q%b!Q![%b![!]%b!^!_%b!_!`%b!`!a%b!a!b%b!b!c%b!c!}%b#Q#R%b#R#S%b#S#T%b#T#o%b#p#q%b#r#s%b~'ZPT~!]!^'^~'aTO!]'^!]!^'p!^;'S'^;'S;=`(_<%lO'^~'sVOy'^yz(Yz!]'^!]!^'p!^;'S'^;'S;=`(_<%lO'^~(_OQ~~(bP;=`<%l'^~(jOS~~(mQ!Q!R(s!R![*p~(xUY~!O!P)[!Q![*p!g!h){#R#S+U#X#Y){#l#m+[~)aRY~!Q![)j!g!h){#X#Y){~)oSY~!Q![)j!g!h){#R#S*j#X#Y){~*OR{|*X}!O*X!Q![*_~*[P!Q![*_~*dQY~!Q![*_#R#S*X~*mP!Q![)j~*uTY~!O!P)[!Q![*p!g!h){#R#S+U#X#Y){~+XP!Q![*p~+_R!Q![+h!c!i+h#T#Z+h~+mVY~!O!P,S!Q![+h!c!i+h!r!s-P#R#S+[#T#Z+h#d#e-P~,XTY~!Q![,h!c!i,h!r!s-P#T#Z,h#d#e-P~,mUY~!Q![,h!c!i,h!r!s-P#R#S.Q#T#Z,h#d#e-P~-ST{|-c}!O-c!Q![-o!c!i-o#T#Z-o~-fR!Q![-o!c!i-o#T#Z-o~-tSY~!Q![-o!c!i-o#R#S-c#T#Z-o~.TR!Q![,h!c!i,h#T#Z,h~.aP!]!^.d~.iSP~OY.dZ;'S.d;'S;=`.u<%lO.d~.xP;=`<%l.d~/QiX~qr.{st.{tu.{uv.{vw.{wx.{z{.{{|.{}!O.{!O!P.{!P!Q.{!Q![.{![!].{!^!_.{!_!`.{!`!a.{!a!b.{!b!c.{!c!}.{#Q#R.{#R#S.{#S#T.{#T#o.{#p#q.{#r#s.{\",\n tokenizers: [0],\n topRules: {\"Module\":[0,3]},\n specialized: [{term: 9, get: (value) => spec_Keyword[value] || -1}],\n tokenPrec: 0\n});\n\nconst wastLanguage = /*@__PURE__*/LRLanguage.define({\n name: \"wast\",\n parser: /*@__PURE__*/parser.configure({\n props: [\n /*@__PURE__*/indentNodeProp.add({\n App: /*@__PURE__*/delimitedIndent({ closing: \")\", align: false })\n }),\n /*@__PURE__*/foldNodeProp.add({\n App: foldInside,\n BlockComment(tree) { return { from: tree.from + 2, to: tree.to - 2 }; }\n }),\n /*@__PURE__*/styleTags({\n Keyword: tags.keyword,\n Type: tags.typeName,\n Number: tags.number,\n String: tags.string,\n Identifier: tags.variableName,\n LineComment: tags.lineComment,\n BlockComment: tags.blockComment,\n \"( )\": tags.paren\n })\n ]\n }),\n languageData: {\n commentTokens: { line: \";;\", block: { open: \"(;\", close: \";)\" } },\n closeBrackets: { brackets: [\"(\", '\"'] }\n }\n});\nfunction wast() {\n return new LanguageSupport(wastLanguage);\n}\n\nexport { wast, wastLanguage };\n","import { NodeProp, IterMode, Tree, TreeFragment, Parser, NodeType, NodeSet } from '@lezer/common';\nimport { StateEffect, StateField, Facet, EditorState, countColumn, combineConfig, RangeSet, RangeSetBuilder, Prec } from '@codemirror/state';\nimport { ViewPlugin, logException, EditorView, Decoration, WidgetType, gutter, GutterMarker, Direction } from '@codemirror/view';\nimport { tags, tagHighlighter, highlightTree, styleTags } from '@lezer/highlight';\nimport { StyleModule } from 'style-mod';\n\nvar _a;\n/**\nNode prop stored in a parser's top syntax node to provide the\nfacet that stores language-specific data for that language.\n*/\nconst languageDataProp = /*@__PURE__*/new NodeProp();\n/**\nHelper function to define a facet (to be added to the top syntax\nnode(s) for a language via\n[`languageDataProp`](https://codemirror.net/6/docs/ref/#language.languageDataProp)), that will be\nused to associate language data with the language. You\nprobably only need this when subclassing\n[`Language`](https://codemirror.net/6/docs/ref/#language.Language).\n*/\nfunction defineLanguageFacet(baseData) {\n return Facet.define({\n combine: baseData ? values => values.concat(baseData) : undefined\n });\n}\n/**\nSyntax node prop used to register sublanguages. Should be added to\nthe top level node type for the language.\n*/\nconst sublanguageProp = /*@__PURE__*/new NodeProp();\n/**\nA language object manages parsing and per-language\n[metadata](https://codemirror.net/6/docs/ref/#state.EditorState.languageDataAt). Parse data is\nmanaged as a [Lezer](https://lezer.codemirror.net) tree. The class\ncan be used directly, via the [`LRLanguage`](https://codemirror.net/6/docs/ref/#language.LRLanguage)\nsubclass for [Lezer](https://lezer.codemirror.net/) LR parsers, or\nvia the [`StreamLanguage`](https://codemirror.net/6/docs/ref/#language.StreamLanguage) subclass\nfor stream parsers.\n*/\nclass Language {\n /**\n Construct a language object. If you need to invoke this\n directly, first define a data facet with\n [`defineLanguageFacet`](https://codemirror.net/6/docs/ref/#language.defineLanguageFacet), and then\n configure your parser to [attach](https://codemirror.net/6/docs/ref/#language.languageDataProp) it\n to the language's outer syntax node.\n */\n constructor(\n /**\n The [language data](https://codemirror.net/6/docs/ref/#state.EditorState.languageDataAt) facet\n used for this language.\n */\n data, parser, extraExtensions = [], \n /**\n A language name.\n */\n name = \"\") {\n this.data = data;\n this.name = name;\n // Kludge to define EditorState.tree as a debugging helper,\n // without the EditorState package actually knowing about\n // languages and lezer trees.\n if (!EditorState.prototype.hasOwnProperty(\"tree\"))\n Object.defineProperty(EditorState.prototype, \"tree\", { get() { return syntaxTree(this); } });\n this.parser = parser;\n this.extension = [\n language.of(this),\n EditorState.languageData.of((state, pos, side) => {\n let top = topNodeAt(state, pos, side), data = top.type.prop(languageDataProp);\n if (!data)\n return [];\n let base = state.facet(data), sub = top.type.prop(sublanguageProp);\n if (sub) {\n let innerNode = top.resolve(pos - top.from, side);\n for (let sublang of sub)\n if (sublang.test(innerNode, state)) {\n let data = state.facet(sublang.facet);\n return sublang.type == \"replace\" ? data : data.concat(base);\n }\n }\n return base;\n })\n ].concat(extraExtensions);\n }\n /**\n Query whether this language is active at the given position.\n */\n isActiveAt(state, pos, side = -1) {\n return topNodeAt(state, pos, side).type.prop(languageDataProp) == this.data;\n }\n /**\n Find the document regions that were parsed using this language.\n The returned regions will _include_ any nested languages rooted\n in this language, when those exist.\n */\n findRegions(state) {\n let lang = state.facet(language);\n if ((lang === null || lang === void 0 ? void 0 : lang.data) == this.data)\n return [{ from: 0, to: state.doc.length }];\n if (!lang || !lang.allowsNesting)\n return [];\n let result = [];\n let explore = (tree, from) => {\n if (tree.prop(languageDataProp) == this.data) {\n result.push({ from, to: from + tree.length });\n return;\n }\n let mount = tree.prop(NodeProp.mounted);\n if (mount) {\n if (mount.tree.prop(languageDataProp) == this.data) {\n if (mount.overlay)\n for (let r of mount.overlay)\n result.push({ from: r.from + from, to: r.to + from });\n else\n result.push({ from: from, to: from + tree.length });\n return;\n }\n else if (mount.overlay) {\n let size = result.length;\n explore(mount.tree, mount.overlay[0].from + from);\n if (result.length > size)\n return;\n }\n }\n for (let i = 0; i < tree.children.length; i++) {\n let ch = tree.children[i];\n if (ch instanceof Tree)\n explore(ch, tree.positions[i] + from);\n }\n };\n explore(syntaxTree(state), 0);\n return result;\n }\n /**\n Indicates whether this language allows nested languages. The\n default implementation returns true.\n */\n get allowsNesting() { return true; }\n}\n/**\n@internal\n*/\nLanguage.setState = /*@__PURE__*/StateEffect.define();\nfunction topNodeAt(state, pos, side) {\n let topLang = state.facet(language), tree = syntaxTree(state).topNode;\n if (!topLang || topLang.allowsNesting) {\n for (let node = tree; node; node = node.enter(pos, side, IterMode.ExcludeBuffers | IterMode.EnterBracketed))\n if (node.type.isTop)\n tree = node;\n }\n return tree;\n}\n/**\nA subclass of [`Language`](https://codemirror.net/6/docs/ref/#language.Language) for use with Lezer\n[LR parsers](https://lezer.codemirror.net/docs/ref#lr.LRParser)\nparsers.\n*/\nclass LRLanguage extends Language {\n constructor(data, parser, name) {\n super(data, parser, [], name);\n this.parser = parser;\n }\n /**\n Define a language from a parser.\n */\n static define(spec) {\n let data = defineLanguageFacet(spec.languageData);\n return new LRLanguage(data, spec.parser.configure({\n props: [languageDataProp.add(type => type.isTop ? data : undefined)]\n }), spec.name);\n }\n /**\n Create a new instance of this language with a reconfigured\n version of its parser and optionally a new name.\n */\n configure(options, name) {\n return new LRLanguage(this.data, this.parser.configure(options), name || this.name);\n }\n get allowsNesting() { return this.parser.hasWrappers(); }\n}\n/**\nGet the syntax tree for a state, which is the current (possibly\nincomplete) parse tree of the active\n[language](https://codemirror.net/6/docs/ref/#language.Language), or the empty tree if there is no\nlanguage available.\n*/\nfunction syntaxTree(state) {\n let field = state.field(Language.state, false);\n return field ? field.tree : Tree.empty;\n}\n/**\nTry to get a parse tree that spans at least up to `upto`. The\nmethod will do at most `timeout` milliseconds of work to parse\nup to that point if the tree isn't already available.\n*/\nfunction ensureSyntaxTree(state, upto, timeout = 50) {\n var _a;\n let parse = (_a = state.field(Language.state, false)) === null || _a === void 0 ? void 0 : _a.context;\n if (!parse)\n return null;\n let oldVieport = parse.viewport;\n parse.updateViewport({ from: 0, to: upto });\n let result = parse.isDone(upto) || parse.work(timeout, upto) ? parse.tree : null;\n parse.updateViewport(oldVieport);\n return result;\n}\n/**\nQueries whether there is a full syntax tree available up to the\ngiven document position. If there isn't, the background parse\nprocess _might_ still be working and update the tree further, but\nthere is no guarantee of that—the parser will [stop\nworking](https://codemirror.net/6/docs/ref/#language.syntaxParserRunning) when it has spent a\ncertain amount of time or has moved beyond the visible viewport.\nAlways returns false if no language has been enabled.\n*/\nfunction syntaxTreeAvailable(state, upto = state.doc.length) {\n var _a;\n return ((_a = state.field(Language.state, false)) === null || _a === void 0 ? void 0 : _a.context.isDone(upto)) || false;\n}\n/**\nMove parsing forward, and update the editor state afterwards to\nreflect the new tree. Will work for at most `timeout`\nmilliseconds. Returns true if the parser managed get to the given\nposition in that time.\n*/\nfunction forceParsing(view, upto = view.viewport.to, timeout = 100) {\n let success = ensureSyntaxTree(view.state, upto, timeout);\n if (success != syntaxTree(view.state))\n view.dispatch({});\n return !!success;\n}\n/**\nTells you whether the language parser is planning to do more\nparsing work (in a `requestIdleCallback` pseudo-thread) or has\nstopped running, either because it parsed the entire document,\nbecause it spent too much time and was cut off, or because there\nis no language parser enabled.\n*/\nfunction syntaxParserRunning(view) {\n var _a;\n return ((_a = view.plugin(parseWorker)) === null || _a === void 0 ? void 0 : _a.isWorking()) || false;\n}\n/**\nLezer-style\n[`Input`](https://lezer.codemirror.net/docs/ref#common.Input)\nobject for a [`Text`](https://codemirror.net/6/docs/ref/#state.Text) object.\n*/\nclass DocInput {\n /**\n Create an input object for the given document.\n */\n constructor(doc) {\n this.doc = doc;\n this.cursorPos = 0;\n this.string = \"\";\n this.cursor = doc.iter();\n }\n get length() { return this.doc.length; }\n syncTo(pos) {\n this.string = this.cursor.next(pos - this.cursorPos).value;\n this.cursorPos = pos + this.string.length;\n return this.cursorPos - this.string.length;\n }\n chunk(pos) {\n this.syncTo(pos);\n return this.string;\n }\n get lineChunks() { return true; }\n read(from, to) {\n let stringStart = this.cursorPos - this.string.length;\n if (from < stringStart || to >= this.cursorPos)\n return this.doc.sliceString(from, to);\n else\n return this.string.slice(from - stringStart, to - stringStart);\n }\n}\nlet currentContext = null;\n/**\nA parse context provided to parsers working on the editor content.\n*/\nclass ParseContext {\n constructor(parser, \n /**\n The current editor state.\n */\n state, \n /**\n Tree fragments that can be reused by incremental re-parses.\n */\n fragments = [], \n /**\n @internal\n */\n tree, \n /**\n @internal\n */\n treeLen, \n /**\n The current editor viewport (or some overapproximation\n thereof). Intended to be used for opportunistically avoiding\n work (in which case\n [`skipUntilInView`](https://codemirror.net/6/docs/ref/#language.ParseContext.skipUntilInView)\n should be called to make sure the parser is restarted when the\n skipped region becomes visible).\n */\n viewport, \n /**\n @internal\n */\n skipped, \n /**\n This is where skipping parsers can register a promise that,\n when resolved, will schedule a new parse. It is cleared when\n the parse worker picks up the promise. @internal\n */\n scheduleOn) {\n this.parser = parser;\n this.state = state;\n this.fragments = fragments;\n this.tree = tree;\n this.treeLen = treeLen;\n this.viewport = viewport;\n this.skipped = skipped;\n this.scheduleOn = scheduleOn;\n this.parse = null;\n /**\n @internal\n */\n this.tempSkipped = [];\n }\n /**\n @internal\n */\n static create(parser, state, viewport) {\n return new ParseContext(parser, state, [], Tree.empty, 0, viewport, [], null);\n }\n startParse() {\n return this.parser.startParse(new DocInput(this.state.doc), this.fragments);\n }\n /**\n @internal\n */\n work(until, upto) {\n if (upto != null && upto >= this.state.doc.length)\n upto = undefined;\n if (this.tree != Tree.empty && this.isDone(upto !== null && upto !== void 0 ? upto : this.state.doc.length)) {\n this.takeTree();\n return true;\n }\n return this.withContext(() => {\n var _a;\n if (typeof until == \"number\") {\n let endTime = Date.now() + until;\n until = () => Date.now() > endTime;\n }\n if (!this.parse)\n this.parse = this.startParse();\n if (upto != null && (this.parse.stoppedAt == null || this.parse.stoppedAt > upto) &&\n upto < this.state.doc.length)\n this.parse.stopAt(upto);\n for (;;) {\n let done = this.parse.advance();\n if (done) {\n this.fragments = this.withoutTempSkipped(TreeFragment.addTree(done, this.fragments, this.parse.stoppedAt != null));\n this.treeLen = (_a = this.parse.stoppedAt) !== null && _a !== void 0 ? _a : this.state.doc.length;\n this.tree = done;\n this.parse = null;\n if (this.treeLen < (upto !== null && upto !== void 0 ? upto : this.state.doc.length))\n this.parse = this.startParse();\n else\n return true;\n }\n if (until())\n return false;\n }\n });\n }\n /**\n @internal\n */\n takeTree() {\n let pos, tree;\n if (this.parse && (pos = this.parse.parsedPos) >= this.treeLen) {\n if (this.parse.stoppedAt == null || this.parse.stoppedAt > pos)\n this.parse.stopAt(pos);\n this.withContext(() => { while (!(tree = this.parse.advance())) { } });\n this.treeLen = pos;\n this.tree = tree;\n this.fragments = this.withoutTempSkipped(TreeFragment.addTree(this.tree, this.fragments, true));\n this.parse = null;\n }\n }\n withContext(f) {\n let prev = currentContext;\n currentContext = this;\n try {\n return f();\n }\n finally {\n currentContext = prev;\n }\n }\n withoutTempSkipped(fragments) {\n for (let r; r = this.tempSkipped.pop();)\n fragments = cutFragments(fragments, r.from, r.to);\n return fragments;\n }\n /**\n @internal\n */\n changes(changes, newState) {\n let { fragments, tree, treeLen, viewport, skipped } = this;\n this.takeTree();\n if (!changes.empty) {\n let ranges = [];\n changes.iterChangedRanges((fromA, toA, fromB, toB) => ranges.push({ fromA, toA, fromB, toB }));\n fragments = TreeFragment.applyChanges(fragments, ranges);\n tree = Tree.empty;\n treeLen = 0;\n viewport = { from: changes.mapPos(viewport.from, -1), to: changes.mapPos(viewport.to, 1) };\n if (this.skipped.length) {\n skipped = [];\n for (let r of this.skipped) {\n let from = changes.mapPos(r.from, 1), to = changes.mapPos(r.to, -1);\n if (from < to)\n skipped.push({ from, to });\n }\n }\n }\n return new ParseContext(this.parser, newState, fragments, tree, treeLen, viewport, skipped, this.scheduleOn);\n }\n /**\n @internal\n */\n updateViewport(viewport) {\n if (this.viewport.from == viewport.from && this.viewport.to == viewport.to)\n return false;\n this.viewport = viewport;\n let startLen = this.skipped.length;\n for (let i = 0; i < this.skipped.length; i++) {\n let { from, to } = this.skipped[i];\n if (from < viewport.to && to > viewport.from) {\n this.fragments = cutFragments(this.fragments, from, to);\n this.skipped.splice(i--, 1);\n }\n }\n if (this.skipped.length >= startLen)\n return false;\n this.reset();\n return true;\n }\n /**\n @internal\n */\n reset() {\n if (this.parse) {\n this.takeTree();\n this.parse = null;\n }\n }\n /**\n Notify the parse scheduler that the given region was skipped\n because it wasn't in view, and the parse should be restarted\n when it comes into view.\n */\n skipUntilInView(from, to) {\n this.skipped.push({ from, to });\n }\n /**\n Returns a parser intended to be used as placeholder when\n asynchronously loading a nested parser. It'll skip its input and\n mark it as not-really-parsed, so that the next update will parse\n it again.\n \n When `until` is given, a reparse will be scheduled when that\n promise resolves.\n */\n static getSkippingParser(until) {\n return new class extends Parser {\n createParse(input, fragments, ranges) {\n let from = ranges[0].from, to = ranges[ranges.length - 1].to;\n let parser = {\n parsedPos: from,\n advance() {\n let cx = currentContext;\n if (cx) {\n for (let r of ranges)\n cx.tempSkipped.push(r);\n if (until)\n cx.scheduleOn = cx.scheduleOn ? Promise.all([cx.scheduleOn, until]) : until;\n }\n this.parsedPos = to;\n return new Tree(NodeType.none, [], [], to - from);\n },\n stoppedAt: null,\n stopAt() { }\n };\n return parser;\n }\n };\n }\n /**\n @internal\n */\n isDone(upto) {\n upto = Math.min(upto, this.state.doc.length);\n let frags = this.fragments;\n return this.treeLen >= upto && frags.length && frags[0].from == 0 && frags[0].to >= upto;\n }\n /**\n Get the context for the current parse, or `null` if no editor\n parse is in progress.\n */\n static get() { return currentContext; }\n}\nfunction cutFragments(fragments, from, to) {\n return TreeFragment.applyChanges(fragments, [{ fromA: from, toA: to, fromB: from, toB: to }]);\n}\nclass LanguageState {\n constructor(\n // A mutable parse state that is used to preserve work done during\n // the lifetime of a state when moving to the next state.\n context) {\n this.context = context;\n this.tree = context.tree;\n }\n apply(tr) {\n if (!tr.docChanged && this.tree == this.context.tree)\n return this;\n let newCx = this.context.changes(tr.changes, tr.state);\n // If the previous parse wasn't done, go forward only up to its\n // end position or the end of the viewport, to avoid slowing down\n // state updates with parse work beyond the viewport.\n let upto = this.context.treeLen == tr.startState.doc.length ? undefined\n : Math.max(tr.changes.mapPos(this.context.treeLen), newCx.viewport.to);\n if (!newCx.work(20 /* Work.Apply */, upto))\n newCx.takeTree();\n return new LanguageState(newCx);\n }\n static init(state) {\n let vpTo = Math.min(3000 /* Work.InitViewport */, state.doc.length);\n let parseState = ParseContext.create(state.facet(language).parser, state, { from: 0, to: vpTo });\n if (!parseState.work(20 /* Work.Apply */, vpTo))\n parseState.takeTree();\n return new LanguageState(parseState);\n }\n}\nLanguage.state = /*@__PURE__*/StateField.define({\n create: LanguageState.init,\n update(value, tr) {\n for (let e of tr.effects)\n if (e.is(Language.setState))\n return e.value;\n if (tr.startState.facet(language) != tr.state.facet(language))\n return LanguageState.init(tr.state);\n return value.apply(tr);\n }\n});\nlet requestIdle = (callback) => {\n let timeout = setTimeout(() => callback(), 500 /* Work.MaxPause */);\n return () => clearTimeout(timeout);\n};\nif (typeof requestIdleCallback != \"undefined\")\n requestIdle = (callback) => {\n let idle = -1, timeout = setTimeout(() => {\n idle = requestIdleCallback(callback, { timeout: 500 /* Work.MaxPause */ - 100 /* Work.MinPause */ });\n }, 100 /* Work.MinPause */);\n return () => idle < 0 ? clearTimeout(timeout) : cancelIdleCallback(idle);\n };\nconst isInputPending = typeof navigator != \"undefined\" && ((_a = navigator.scheduling) === null || _a === void 0 ? void 0 : _a.isInputPending)\n ? () => navigator.scheduling.isInputPending() : null;\nconst parseWorker = /*@__PURE__*/ViewPlugin.fromClass(class ParseWorker {\n constructor(view) {\n this.view = view;\n this.working = null;\n this.workScheduled = 0;\n // End of the current time chunk\n this.chunkEnd = -1;\n // Milliseconds of budget left for this chunk\n this.chunkBudget = -1;\n this.work = this.work.bind(this);\n this.scheduleWork();\n }\n update(update) {\n let cx = this.view.state.field(Language.state).context;\n if (cx.updateViewport(update.view.viewport) || this.view.viewport.to > cx.treeLen)\n this.scheduleWork();\n if (update.docChanged || update.selectionSet) {\n if (this.view.hasFocus)\n this.chunkBudget += 50 /* Work.ChangeBonus */;\n this.scheduleWork();\n }\n this.checkAsyncSchedule(cx);\n }\n scheduleWork() {\n if (this.working)\n return;\n let { state } = this.view, field = state.field(Language.state);\n if (field.tree != field.context.tree || !field.context.isDone(state.doc.length))\n this.working = requestIdle(this.work);\n }\n work(deadline) {\n this.working = null;\n let now = Date.now();\n if (this.chunkEnd < now && (this.chunkEnd < 0 || this.view.hasFocus)) { // Start a new chunk\n this.chunkEnd = now + 30000 /* Work.ChunkTime */;\n this.chunkBudget = 3000 /* Work.ChunkBudget */;\n }\n if (this.chunkBudget <= 0)\n return; // No more budget\n let { state, viewport: { to: vpTo } } = this.view, field = state.field(Language.state);\n if (field.tree == field.context.tree && field.context.isDone(vpTo + 100000 /* Work.MaxParseAhead */))\n return;\n let endTime = Date.now() + Math.min(this.chunkBudget, 100 /* Work.Slice */, deadline && !isInputPending ? Math.max(25 /* Work.MinSlice */, deadline.timeRemaining() - 5) : 1e9);\n let viewportFirst = field.context.treeLen < vpTo && state.doc.length > vpTo + 1000;\n let done = field.context.work(() => {\n return isInputPending && isInputPending() || Date.now() > endTime;\n }, vpTo + (viewportFirst ? 0 : 100000 /* Work.MaxParseAhead */));\n this.chunkBudget -= Date.now() - now;\n if (done || this.chunkBudget <= 0) {\n field.context.takeTree();\n this.view.dispatch({ effects: Language.setState.of(new LanguageState(field.context)) });\n }\n if (this.chunkBudget > 0 && !(done && !viewportFirst))\n this.scheduleWork();\n this.checkAsyncSchedule(field.context);\n }\n checkAsyncSchedule(cx) {\n if (cx.scheduleOn) {\n this.workScheduled++;\n cx.scheduleOn\n .then(() => this.scheduleWork())\n .catch(err => logException(this.view.state, err))\n .then(() => this.workScheduled--);\n cx.scheduleOn = null;\n }\n }\n destroy() {\n if (this.working)\n this.working();\n }\n isWorking() {\n return !!(this.working || this.workScheduled > 0);\n }\n}, {\n eventHandlers: { focus() { this.scheduleWork(); } }\n});\n/**\nThe facet used to associate a language with an editor state. Used\nby `Language` object's `extension` property (so you don't need to\nmanually wrap your languages in this). Can be used to access the\ncurrent language on a state.\n*/\nconst language = /*@__PURE__*/Facet.define({\n combine(languages) { return languages.length ? languages[0] : null; },\n enables: language => [\n Language.state,\n parseWorker,\n EditorView.contentAttributes.compute([language], state => {\n let lang = state.facet(language);\n return lang && lang.name ? { \"data-language\": lang.name } : {};\n })\n ]\n});\n/**\nThis class bundles a [language](https://codemirror.net/6/docs/ref/#language.Language) with an\noptional set of supporting extensions. Language packages are\nencouraged to export a function that optionally takes a\nconfiguration object and returns a `LanguageSupport` instance, as\nthe main way for client code to use the package.\n*/\nclass LanguageSupport {\n /**\n Create a language support object.\n */\n constructor(\n /**\n The language object.\n */\n language, \n /**\n An optional set of supporting extensions. When nesting a\n language in another language, the outer language is encouraged\n to include the supporting extensions for its inner languages\n in its own set of support extensions.\n */\n support = []) {\n this.language = language;\n this.support = support;\n this.extension = [language, support];\n }\n}\n/**\nLanguage descriptions are used to store metadata about languages\nand to dynamically load them. Their main role is finding the\nappropriate language for a filename or dynamically loading nested\nparsers.\n*/\nclass LanguageDescription {\n constructor(\n /**\n The name of this language.\n */\n name, \n /**\n Alternative names for the mode (lowercased, includes `this.name`).\n */\n alias, \n /**\n File extensions associated with this language.\n */\n extensions, \n /**\n Optional filename pattern that should be associated with this\n language.\n */\n filename, loadFunc, \n /**\n If the language has been loaded, this will hold its value.\n */\n support = undefined) {\n this.name = name;\n this.alias = alias;\n this.extensions = extensions;\n this.filename = filename;\n this.loadFunc = loadFunc;\n this.support = support;\n this.loading = null;\n }\n /**\n Start loading the the language. Will return a promise that\n resolves to a [`LanguageSupport`](https://codemirror.net/6/docs/ref/#language.LanguageSupport)\n object when the language successfully loads.\n */\n load() {\n return this.loading || (this.loading = this.loadFunc().then(support => this.support = support, err => { this.loading = null; throw err; }));\n }\n /**\n Create a language description.\n */\n static of(spec) {\n let { load, support } = spec;\n if (!load) {\n if (!support)\n throw new RangeError(\"Must pass either 'load' or 'support' to LanguageDescription.of\");\n load = () => Promise.resolve(support);\n }\n return new LanguageDescription(spec.name, (spec.alias || []).concat(spec.name).map(s => s.toLowerCase()), spec.extensions || [], spec.filename, load, support);\n }\n /**\n Look for a language in the given array of descriptions that\n matches the filename. Will first match\n [`filename`](https://codemirror.net/6/docs/ref/#language.LanguageDescription.filename) patterns,\n and then [extensions](https://codemirror.net/6/docs/ref/#language.LanguageDescription.extensions),\n and return the first language that matches.\n */\n static matchFilename(descs, filename) {\n for (let d of descs)\n if (d.filename && d.filename.test(filename))\n return d;\n let ext = /\\.([^.]+)$/.exec(filename);\n if (ext)\n for (let d of descs)\n if (d.extensions.indexOf(ext[1]) > -1)\n return d;\n return null;\n }\n /**\n Look for a language whose name or alias matches the the given\n name (case-insensitively). If `fuzzy` is true, and no direct\n matchs is found, this'll also search for a language whose name\n or alias occurs in the string (for names shorter than three\n characters, only when surrounded by non-word characters).\n */\n static matchLanguageName(descs, name, fuzzy = true) {\n name = name.toLowerCase();\n for (let d of descs)\n if (d.alias.some(a => a == name))\n return d;\n if (fuzzy)\n for (let d of descs)\n for (let a of d.alias) {\n let found = name.indexOf(a);\n if (found > -1 && (a.length > 2 || !/\\w/.test(name[found - 1]) && !/\\w/.test(name[found + a.length])))\n return d;\n }\n return null;\n }\n}\n\n/**\nFacet that defines a way to provide a function that computes the\nappropriate indentation depth, as a column number (see\n[`indentString`](https://codemirror.net/6/docs/ref/#language.indentString)), at the start of a given\nline. A return value of `null` indicates no indentation can be\ndetermined, and the line should inherit the indentation of the one\nabove it. A return value of `undefined` defers to the next indent\nservice.\n*/\nconst indentService = /*@__PURE__*/Facet.define();\n/**\nFacet for overriding the unit by which indentation happens. Should\nbe a string consisting entirely of the same whitespace character.\nWhen not set, this defaults to 2 spaces.\n*/\nconst indentUnit = /*@__PURE__*/Facet.define({\n combine: values => {\n if (!values.length)\n return \" \";\n let unit = values[0];\n if (!unit || /\\S/.test(unit) || Array.from(unit).some(e => e != unit[0]))\n throw new Error(\"Invalid indent unit: \" + JSON.stringify(values[0]));\n return unit;\n }\n});\n/**\nReturn the _column width_ of an indent unit in the state.\nDetermined by the [`indentUnit`](https://codemirror.net/6/docs/ref/#language.indentUnit)\nfacet, and [`tabSize`](https://codemirror.net/6/docs/ref/#state.EditorState^tabSize) when that\ncontains tabs.\n*/\nfunction getIndentUnit(state) {\n let unit = state.facet(indentUnit);\n return unit.charCodeAt(0) == 9 ? state.tabSize * unit.length : unit.length;\n}\n/**\nCreate an indentation string that covers columns 0 to `cols`.\nWill use tabs for as much of the columns as possible when the\n[`indentUnit`](https://codemirror.net/6/docs/ref/#language.indentUnit) facet contains\ntabs.\n*/\nfunction indentString(state, cols) {\n let result = \"\", ts = state.tabSize, ch = state.facet(indentUnit)[0];\n if (ch == \"\\t\") {\n while (cols >= ts) {\n result += \"\\t\";\n cols -= ts;\n }\n ch = \" \";\n }\n for (let i = 0; i < cols; i++)\n result += ch;\n return result;\n}\n/**\nGet the indentation, as a column number, at the given position.\nWill first consult any [indent services](https://codemirror.net/6/docs/ref/#language.indentService)\nthat are registered, and if none of those return an indentation,\nthis will check the syntax tree for the [indent node\nprop](https://codemirror.net/6/docs/ref/#language.indentNodeProp) and use that if found. Returns a\nnumber when an indentation could be determined, and null\notherwise.\n*/\nfunction getIndentation(context, pos) {\n if (context instanceof EditorState)\n context = new IndentContext(context);\n for (let service of context.state.facet(indentService)) {\n let result = service(context, pos);\n if (result !== undefined)\n return result;\n }\n let tree = syntaxTree(context.state);\n return tree.length >= pos ? syntaxIndentation(context, tree, pos) : null;\n}\n/**\nCreate a change set that auto-indents all lines touched by the\ngiven document range.\n*/\nfunction indentRange(state, from, to) {\n let updated = Object.create(null);\n let context = new IndentContext(state, { overrideIndentation: start => { var _a; return (_a = updated[start]) !== null && _a !== void 0 ? _a : -1; } });\n let changes = [];\n for (let pos = from; pos <= to;) {\n let line = state.doc.lineAt(pos);\n pos = line.to + 1;\n let indent = getIndentation(context, line.from);\n if (indent == null)\n continue;\n if (!/\\S/.test(line.text))\n indent = 0;\n let cur = /^\\s*/.exec(line.text)[0];\n let norm = indentString(state, indent);\n if (cur != norm) {\n updated[line.from] = indent;\n changes.push({ from: line.from, to: line.from + cur.length, insert: norm });\n }\n }\n return state.changes(changes);\n}\n/**\nIndentation contexts are used when calling [indentation\nservices](https://codemirror.net/6/docs/ref/#language.indentService). They provide helper utilities\nuseful in indentation logic, and can selectively override the\nindentation reported for some lines.\n*/\nclass IndentContext {\n /**\n Create an indent context.\n */\n constructor(\n /**\n The editor state.\n */\n state, \n /**\n @internal\n */\n options = {}) {\n this.state = state;\n this.options = options;\n this.unit = getIndentUnit(state);\n }\n /**\n Get a description of the line at the given position, taking\n [simulated line\n breaks](https://codemirror.net/6/docs/ref/#language.IndentContext.constructor^options.simulateBreak)\n into account. If there is such a break at `pos`, the `bias`\n argument determines whether the part of the line line before or\n after the break is used.\n */\n lineAt(pos, bias = 1) {\n let line = this.state.doc.lineAt(pos);\n let { simulateBreak, simulateDoubleBreak } = this.options;\n if (simulateBreak != null && simulateBreak >= line.from && simulateBreak <= line.to) {\n if (simulateDoubleBreak && simulateBreak == pos)\n return { text: \"\", from: pos };\n else if (bias < 0 ? simulateBreak < pos : simulateBreak <= pos)\n return { text: line.text.slice(simulateBreak - line.from), from: simulateBreak };\n else\n return { text: line.text.slice(0, simulateBreak - line.from), from: line.from };\n }\n return line;\n }\n /**\n Get the text directly after `pos`, either the entire line\n or the next 100 characters, whichever is shorter.\n */\n textAfterPos(pos, bias = 1) {\n if (this.options.simulateDoubleBreak && pos == this.options.simulateBreak)\n return \"\";\n let { text, from } = this.lineAt(pos, bias);\n return text.slice(pos - from, Math.min(text.length, pos + 100 - from));\n }\n /**\n Find the column for the given position.\n */\n column(pos, bias = 1) {\n let { text, from } = this.lineAt(pos, bias);\n let result = this.countColumn(text, pos - from);\n let override = this.options.overrideIndentation ? this.options.overrideIndentation(from) : -1;\n if (override > -1)\n result += override - this.countColumn(text, text.search(/\\S|$/));\n return result;\n }\n /**\n Find the column position (taking tabs into account) of the given\n position in the given string.\n */\n countColumn(line, pos = line.length) {\n return countColumn(line, this.state.tabSize, pos);\n }\n /**\n Find the indentation column of the line at the given point.\n */\n lineIndent(pos, bias = 1) {\n let { text, from } = this.lineAt(pos, bias);\n let override = this.options.overrideIndentation;\n if (override) {\n let overriden = override(from);\n if (overriden > -1)\n return overriden;\n }\n return this.countColumn(text, text.search(/\\S|$/));\n }\n /**\n Returns the [simulated line\n break](https://codemirror.net/6/docs/ref/#language.IndentContext.constructor^options.simulateBreak)\n for this context, if any.\n */\n get simulatedBreak() {\n return this.options.simulateBreak || null;\n }\n}\n/**\nA syntax tree node prop used to associate indentation strategies\nwith node types. Such a strategy is a function from an indentation\ncontext to a column number (see also\n[`indentString`](https://codemirror.net/6/docs/ref/#language.indentString)) or null, where null\nindicates that no definitive indentation can be determined.\n*/\nconst indentNodeProp = /*@__PURE__*/new NodeProp();\n// Compute the indentation for a given position from the syntax tree.\nfunction syntaxIndentation(cx, ast, pos) {\n let stack = ast.resolveStack(pos);\n let inner = ast.resolveInner(pos, -1).resolve(pos, 0).enterUnfinishedNodesBefore(pos);\n if (inner != stack.node) {\n let add = [];\n for (let cur = inner; cur && !(cur.from < stack.node.from || cur.to > stack.node.to ||\n cur.from == stack.node.from && cur.type == stack.node.type); cur = cur.parent)\n add.push(cur);\n for (let i = add.length - 1; i >= 0; i--)\n stack = { node: add[i], next: stack };\n }\n return indentFor(stack, cx, pos);\n}\nfunction indentFor(stack, cx, pos) {\n for (let cur = stack; cur; cur = cur.next) {\n let strategy = indentStrategy(cur.node);\n if (strategy)\n return strategy(TreeIndentContext.create(cx, pos, cur));\n }\n return 0;\n}\nfunction ignoreClosed(cx) {\n return cx.pos == cx.options.simulateBreak && cx.options.simulateDoubleBreak;\n}\nfunction indentStrategy(tree) {\n let strategy = tree.type.prop(indentNodeProp);\n if (strategy)\n return strategy;\n let first = tree.firstChild, close;\n if (first && (close = first.type.prop(NodeProp.closedBy))) {\n let last = tree.lastChild, closed = last && close.indexOf(last.name) > -1;\n return cx => delimitedStrategy(cx, true, 1, undefined, closed && !ignoreClosed(cx) ? last.from : undefined);\n }\n return tree.parent == null ? topIndent : null;\n}\nfunction topIndent() { return 0; }\n/**\nObjects of this type provide context information and helper\nmethods to indentation functions registered on syntax nodes.\n*/\nclass TreeIndentContext extends IndentContext {\n constructor(base, \n /**\n The position at which indentation is being computed.\n */\n pos, \n /**\n @internal\n */\n context) {\n super(base.state, base.options);\n this.base = base;\n this.pos = pos;\n this.context = context;\n }\n /**\n The syntax tree node to which the indentation strategy\n applies.\n */\n get node() { return this.context.node; }\n /**\n @internal\n */\n static create(base, pos, context) {\n return new TreeIndentContext(base, pos, context);\n }\n /**\n Get the text directly after `this.pos`, either the entire line\n or the next 100 characters, whichever is shorter.\n */\n get textAfter() {\n return this.textAfterPos(this.pos);\n }\n /**\n Get the indentation at the reference line for `this.node`, which\n is the line on which it starts, unless there is a node that is\n _not_ a parent of this node covering the start of that line. If\n so, the line at the start of that node is tried, again skipping\n on if it is covered by another such node.\n */\n get baseIndent() {\n return this.baseIndentFor(this.node);\n }\n /**\n Get the indentation for the reference line of the given node\n (see [`baseIndent`](https://codemirror.net/6/docs/ref/#language.TreeIndentContext.baseIndent)).\n */\n baseIndentFor(node) {\n let line = this.state.doc.lineAt(node.from);\n // Skip line starts that are covered by a sibling (or cousin, etc)\n for (;;) {\n let atBreak = node.resolve(line.from);\n while (atBreak.parent && atBreak.parent.from == atBreak.from)\n atBreak = atBreak.parent;\n if (isParent(atBreak, node))\n break;\n line = this.state.doc.lineAt(atBreak.from);\n }\n return this.lineIndent(line.from);\n }\n /**\n Continue looking for indentations in the node's parent nodes,\n and return the result of that.\n */\n continue() {\n return indentFor(this.context.next, this.base, this.pos);\n }\n}\nfunction isParent(parent, of) {\n for (let cur = of; cur; cur = cur.parent)\n if (parent == cur)\n return true;\n return false;\n}\n// Check whether a delimited node is aligned (meaning there are\n// non-skipped nodes on the same line as the opening delimiter). And\n// if so, return the opening token.\nfunction bracketedAligned(context) {\n let tree = context.node;\n let openToken = tree.childAfter(tree.from), last = tree.lastChild;\n if (!openToken)\n return null;\n let sim = context.options.simulateBreak;\n let openLine = context.state.doc.lineAt(openToken.from);\n let lineEnd = sim == null || sim <= openLine.from ? openLine.to : Math.min(openLine.to, sim);\n for (let pos = openToken.to;;) {\n let next = tree.childAfter(pos);\n if (!next || next == last)\n return null;\n if (!next.type.isSkipped) {\n if (next.from >= lineEnd)\n return null;\n let space = /^ */.exec(openLine.text.slice(openToken.to - openLine.from))[0].length;\n return { from: openToken.from, to: openToken.to + space };\n }\n pos = next.to;\n }\n}\n/**\nAn indentation strategy for delimited (usually bracketed) nodes.\nWill, by default, indent one unit more than the parent's base\nindent unless the line starts with a closing token. When `align`\nis true and there are non-skipped nodes on the node's opening\nline, the content of the node will be aligned with the end of the\nopening node, like this:\n\n foo(bar,\n baz)\n*/\nfunction delimitedIndent({ closing, align = true, units = 1 }) {\n return (context) => delimitedStrategy(context, align, units, closing);\n}\nfunction delimitedStrategy(context, align, units, closing, closedAt) {\n let after = context.textAfter, space = after.match(/^\\s*/)[0].length;\n let closed = closing && after.slice(space, space + closing.length) == closing || closedAt == context.pos + space;\n let aligned = align ? bracketedAligned(context) : null;\n if (aligned)\n return closed ? context.column(aligned.from) : context.column(aligned.to);\n return context.baseIndent + (closed ? 0 : context.unit * units);\n}\n/**\nAn indentation strategy that aligns a node's content to its base\nindentation.\n*/\nconst flatIndent = (context) => context.baseIndent;\n/**\nCreates an indentation strategy that, by default, indents\ncontinued lines one unit more than the node's base indentation.\nYou can provide `except` to prevent indentation of lines that\nmatch a pattern (for example `/^else\\b/` in `if`/`else`\nconstructs), and you can change the amount of units used with the\n`units` option.\n*/\nfunction continuedIndent({ except, units = 1 } = {}) {\n return (context) => {\n let matchExcept = except && except.test(context.textAfter);\n return context.baseIndent + (matchExcept ? 0 : units * context.unit);\n };\n}\nconst DontIndentBeyond = 200;\n/**\nEnables reindentation on input. When a language defines an\n`indentOnInput` field in its [language\ndata](https://codemirror.net/6/docs/ref/#state.EditorState.languageDataAt), which must hold a regular\nexpression, the line at the cursor will be reindented whenever new\ntext is typed and the input from the start of the line up to the\ncursor matches that regexp.\n\nTo avoid unneccesary reindents, it is recommended to start the\nregexp with `^` (usually followed by `\\s*`), and end it with `$`.\nFor example, `/^\\s*\\}$/` will reindent when a closing brace is\nadded at the start of a line.\n*/\nfunction indentOnInput() {\n return EditorState.transactionFilter.of(tr => {\n if (!tr.docChanged || !tr.isUserEvent(\"input.type\") && !tr.isUserEvent(\"input.complete\"))\n return tr;\n let rules = tr.startState.languageDataAt(\"indentOnInput\", tr.startState.selection.main.head);\n if (!rules.length)\n return tr;\n let doc = tr.newDoc, { head } = tr.newSelection.main, line = doc.lineAt(head);\n if (head > line.from + DontIndentBeyond)\n return tr;\n let lineStart = doc.sliceString(line.from, head);\n if (!rules.some(r => r.test(lineStart)))\n return tr;\n let { state } = tr, last = -1, changes = [];\n for (let { head } of state.selection.ranges) {\n let line = state.doc.lineAt(head);\n if (line.from == last)\n continue;\n last = line.from;\n let indent = getIndentation(state, line.from);\n if (indent == null)\n continue;\n let cur = /^\\s*/.exec(line.text)[0];\n let norm = indentString(state, indent);\n if (cur != norm)\n changes.push({ from: line.from, to: line.from + cur.length, insert: norm });\n }\n return changes.length ? [tr, { changes, sequential: true }] : tr;\n });\n}\n\n/**\nA facet that registers a code folding service. When called with\nthe extent of a line, such a function should return a foldable\nrange that starts on that line (but continues beyond it), if one\ncan be found.\n*/\nconst foldService = /*@__PURE__*/Facet.define();\n/**\nThis node prop is used to associate folding information with\nsyntax node types. Given a syntax node, it should check whether\nthat tree is foldable and return the range that can be collapsed\nwhen it is.\n*/\nconst foldNodeProp = /*@__PURE__*/new NodeProp();\n/**\n[Fold](https://codemirror.net/6/docs/ref/#language.foldNodeProp) function that folds everything but\nthe first and the last child of a syntax node. Useful for nodes\nthat start and end with delimiters.\n*/\nfunction foldInside(node) {\n let first = node.firstChild, last = node.lastChild;\n return first && first.to < last.from ? { from: first.to, to: last.type.isError ? node.to : last.from } : null;\n}\nfunction syntaxFolding(state, start, end) {\n let tree = syntaxTree(state);\n if (tree.length < end)\n return null;\n let stack = tree.resolveStack(end, 1);\n let found = null;\n for (let iter = stack; iter; iter = iter.next) {\n let cur = iter.node;\n if (cur.to <= end || cur.from > end)\n continue;\n if (found && cur.from < start)\n break;\n let prop = cur.type.prop(foldNodeProp);\n if (prop && (cur.to < tree.length - 50 || tree.length == state.doc.length || !isUnfinished(cur))) {\n let value = prop(cur, state);\n if (value && value.from <= end && value.from >= start && value.to > end)\n found = value;\n }\n }\n return found;\n}\nfunction isUnfinished(node) {\n let ch = node.lastChild;\n return ch && ch.to == node.to && ch.type.isError;\n}\n/**\nCheck whether the given line is foldable. First asks any fold\nservices registered through\n[`foldService`](https://codemirror.net/6/docs/ref/#language.foldService), and if none of them return\na result, tries to query the [fold node\nprop](https://codemirror.net/6/docs/ref/#language.foldNodeProp) of syntax nodes that cover the end\nof the line.\n*/\nfunction foldable(state, lineStart, lineEnd) {\n for (let service of state.facet(foldService)) {\n let result = service(state, lineStart, lineEnd);\n if (result)\n return result;\n }\n return syntaxFolding(state, lineStart, lineEnd);\n}\nfunction mapRange(range, mapping) {\n let from = mapping.mapPos(range.from, 1), to = mapping.mapPos(range.to, -1);\n return from >= to ? undefined : { from, to };\n}\n/**\nState effect that can be attached to a transaction to fold the\ngiven range. (You probably only need this in exceptional\ncircumstances—usually you'll just want to let\n[`foldCode`](https://codemirror.net/6/docs/ref/#language.foldCode) and the [fold\ngutter](https://codemirror.net/6/docs/ref/#language.foldGutter) create the transactions.)\n*/\nconst foldEffect = /*@__PURE__*/StateEffect.define({ map: mapRange });\n/**\nState effect that unfolds the given range (if it was folded).\n*/\nconst unfoldEffect = /*@__PURE__*/StateEffect.define({ map: mapRange });\nfunction selectedLines(view) {\n let lines = [];\n for (let { head } of view.state.selection.ranges) {\n if (lines.some(l => l.from <= head && l.to >= head))\n continue;\n lines.push(view.lineBlockAt(head));\n }\n return lines;\n}\n/**\nThe state field that stores the folded ranges (as a [decoration\nset](https://codemirror.net/6/docs/ref/#view.DecorationSet)). Can be passed to\n[`EditorState.toJSON`](https://codemirror.net/6/docs/ref/#state.EditorState.toJSON) and\n[`fromJSON`](https://codemirror.net/6/docs/ref/#state.EditorState^fromJSON) to serialize the fold\nstate.\n*/\nconst foldState = /*@__PURE__*/StateField.define({\n create() {\n return Decoration.none;\n },\n update(folded, tr) {\n if (tr.isUserEvent(\"delete\"))\n tr.changes.iterChangedRanges((fromA, toA) => folded = clearTouchedFolds(folded, fromA, toA));\n folded = folded.map(tr.changes);\n for (let e of tr.effects) {\n if (e.is(foldEffect) && !foldExists(folded, e.value.from, e.value.to)) {\n let { preparePlaceholder } = tr.state.facet(foldConfig);\n let widget = !preparePlaceholder ? foldWidget :\n Decoration.replace({ widget: new PreparedFoldWidget(preparePlaceholder(tr.state, e.value)) });\n folded = folded.update({ add: [widget.range(e.value.from, e.value.to)] });\n }\n else if (e.is(unfoldEffect)) {\n folded = folded.update({ filter: (from, to) => e.value.from != from || e.value.to != to,\n filterFrom: e.value.from, filterTo: e.value.to });\n }\n }\n // Clear folded ranges that cover the selection head\n if (tr.selection)\n folded = clearTouchedFolds(folded, tr.selection.main.head);\n return folded;\n },\n provide: f => EditorView.decorations.from(f),\n toJSON(folded, state) {\n let ranges = [];\n folded.between(0, state.doc.length, (from, to) => { ranges.push(from, to); });\n return ranges;\n },\n fromJSON(value) {\n if (!Array.isArray(value) || value.length % 2)\n throw new RangeError(\"Invalid JSON for fold state\");\n let ranges = [];\n for (let i = 0; i < value.length;) {\n let from = value[i++], to = value[i++];\n if (typeof from != \"number\" || typeof to != \"number\")\n throw new RangeError(\"Invalid JSON for fold state\");\n ranges.push(foldWidget.range(from, to));\n }\n return Decoration.set(ranges, true);\n }\n});\nfunction clearTouchedFolds(folded, from, to = from) {\n let touched = false;\n folded.between(from, to, (a, b) => { if (a < to && b > from)\n touched = true; });\n return !touched ? folded : folded.update({\n filterFrom: from,\n filterTo: to,\n filter: (a, b) => a >= to || b <= from\n });\n}\n/**\nGet a [range set](https://codemirror.net/6/docs/ref/#state.RangeSet) containing the folded ranges\nin the given state.\n*/\nfunction foldedRanges(state) {\n return state.field(foldState, false) || RangeSet.empty;\n}\nfunction findFold(state, from, to) {\n var _a;\n let found = null;\n (_a = state.field(foldState, false)) === null || _a === void 0 ? void 0 : _a.between(from, to, (from, to) => {\n if (!found || found.from > from)\n found = { from, to };\n });\n return found;\n}\nfunction foldExists(folded, from, to) {\n let found = false;\n folded.between(from, from, (a, b) => { if (a == from && b == to)\n found = true; });\n return found;\n}\nfunction maybeEnable(state, other) {\n return state.field(foldState, false) ? other : other.concat(StateEffect.appendConfig.of(codeFolding()));\n}\n/**\nFold the lines that are selected, if possible.\n*/\nconst foldCode = view => {\n for (let line of selectedLines(view)) {\n let range = foldable(view.state, line.from, line.to);\n if (range) {\n view.dispatch({ effects: maybeEnable(view.state, [foldEffect.of(range), announceFold(view, range)]) });\n return true;\n }\n }\n return false;\n};\n/**\nUnfold folded ranges on selected lines.\n*/\nconst unfoldCode = view => {\n if (!view.state.field(foldState, false))\n return false;\n let effects = [];\n for (let line of selectedLines(view)) {\n let folded = findFold(view.state, line.from, line.to);\n if (folded)\n effects.push(unfoldEffect.of(folded), announceFold(view, folded, false));\n }\n if (effects.length)\n view.dispatch({ effects });\n return effects.length > 0;\n};\nfunction announceFold(view, range, fold = true) {\n let lineFrom = view.state.doc.lineAt(range.from).number, lineTo = view.state.doc.lineAt(range.to).number;\n return EditorView.announce.of(`${view.state.phrase(fold ? \"Folded lines\" : \"Unfolded lines\")} ${lineFrom} ${view.state.phrase(\"to\")} ${lineTo}.`);\n}\n/**\nFold all top-level foldable ranges. Note that, in most cases,\nfolding information will depend on the [syntax\ntree](https://codemirror.net/6/docs/ref/#language.syntaxTree), and folding everything may not work\nreliably when the document hasn't been fully parsed (either\nbecause the editor state was only just initialized, or because the\ndocument is so big that the parser decided not to parse it\nentirely).\n*/\nconst foldAll = view => {\n let { state } = view, effects = [];\n for (let pos = 0; pos < state.doc.length;) {\n let line = view.lineBlockAt(pos), range = foldable(state, line.from, line.to);\n if (range)\n effects.push(foldEffect.of(range));\n pos = (range ? view.lineBlockAt(range.to) : line).to + 1;\n }\n if (effects.length)\n view.dispatch({ effects: maybeEnable(view.state, effects) });\n return !!effects.length;\n};\n/**\nUnfold all folded code.\n*/\nconst unfoldAll = view => {\n let field = view.state.field(foldState, false);\n if (!field || !field.size)\n return false;\n let effects = [];\n field.between(0, view.state.doc.length, (from, to) => { effects.push(unfoldEffect.of({ from, to })); });\n view.dispatch({ effects });\n return true;\n};\n// Find the foldable region containing the given line, if one exists\nfunction foldableContainer(view, lineBlock) {\n // Look backwards through line blocks until we find a foldable region that\n // intersects with the line\n for (let line = lineBlock;;) {\n let foldableRegion = foldable(view.state, line.from, line.to);\n if (foldableRegion && foldableRegion.to > lineBlock.from)\n return foldableRegion;\n if (!line.from)\n return null;\n line = view.lineBlockAt(line.from - 1);\n }\n}\n/**\nToggle folding at cursors. Unfolds if there is an existing fold\nstarting in that line, tries to find a foldable range around it\notherwise.\n*/\nconst toggleFold = (view) => {\n let effects = [];\n for (let line of selectedLines(view)) {\n let folded = findFold(view.state, line.from, line.to);\n if (folded) {\n effects.push(unfoldEffect.of(folded), announceFold(view, folded, false));\n }\n else {\n let foldRange = foldableContainer(view, line);\n if (foldRange)\n effects.push(foldEffect.of(foldRange), announceFold(view, foldRange));\n }\n }\n if (effects.length > 0)\n view.dispatch({ effects: maybeEnable(view.state, effects) });\n return !!effects.length;\n};\n/**\nDefault fold-related key bindings.\n\n - Ctrl-Shift-[ (Cmd-Alt-[ on macOS): [`foldCode`](https://codemirror.net/6/docs/ref/#language.foldCode).\n - Ctrl-Shift-] (Cmd-Alt-] on macOS): [`unfoldCode`](https://codemirror.net/6/docs/ref/#language.unfoldCode).\n - Ctrl-Alt-[: [`foldAll`](https://codemirror.net/6/docs/ref/#language.foldAll).\n - Ctrl-Alt-]: [`unfoldAll`](https://codemirror.net/6/docs/ref/#language.unfoldAll).\n*/\nconst foldKeymap = [\n { key: \"Ctrl-Shift-[\", mac: \"Cmd-Alt-[\", run: foldCode },\n { key: \"Ctrl-Shift-]\", mac: \"Cmd-Alt-]\", run: unfoldCode },\n { key: \"Ctrl-Alt-[\", run: foldAll },\n { key: \"Ctrl-Alt-]\", run: unfoldAll }\n];\nconst defaultConfig = {\n placeholderDOM: null,\n preparePlaceholder: null,\n placeholderText: \"…\"\n};\nconst foldConfig = /*@__PURE__*/Facet.define({\n combine(values) { return combineConfig(values, defaultConfig); }\n});\n/**\nCreate an extension that configures code folding.\n*/\nfunction codeFolding(config) {\n let result = [foldState, baseTheme$1];\n if (config)\n result.push(foldConfig.of(config));\n return result;\n}\nfunction widgetToDOM(view, prepared) {\n let { state } = view, conf = state.facet(foldConfig);\n let onclick = (event) => {\n let line = view.lineBlockAt(view.posAtDOM(event.target));\n let folded = findFold(view.state, line.from, line.to);\n if (folded)\n view.dispatch({ effects: unfoldEffect.of(folded) });\n event.preventDefault();\n };\n if (conf.placeholderDOM)\n return conf.placeholderDOM(view, onclick, prepared);\n let element = document.createElement(\"span\");\n element.textContent = conf.placeholderText;\n element.setAttribute(\"aria-label\", state.phrase(\"folded code\"));\n element.title = state.phrase(\"unfold\");\n element.className = \"cm-foldPlaceholder\";\n element.onclick = onclick;\n return element;\n}\nconst foldWidget = /*@__PURE__*/Decoration.replace({ widget: /*@__PURE__*/new class extends WidgetType {\n toDOM(view) { return widgetToDOM(view, null); }\n } });\nclass PreparedFoldWidget extends WidgetType {\n constructor(value) {\n super();\n this.value = value;\n }\n eq(other) { return this.value == other.value; }\n toDOM(view) { return widgetToDOM(view, this.value); }\n}\nconst foldGutterDefaults = {\n openText: \"⌄\",\n closedText: \"›\",\n markerDOM: null,\n domEventHandlers: {},\n foldingChanged: () => false\n};\nclass FoldMarker extends GutterMarker {\n constructor(config, open) {\n super();\n this.config = config;\n this.open = open;\n }\n eq(other) { return this.config == other.config && this.open == other.open; }\n toDOM(view) {\n if (this.config.markerDOM)\n return this.config.markerDOM(this.open);\n let span = document.createElement(\"span\");\n span.textContent = this.open ? this.config.openText : this.config.closedText;\n span.title = view.state.phrase(this.open ? \"Fold line\" : \"Unfold line\");\n return span;\n }\n}\n/**\nCreate an extension that registers a fold gutter, which shows a\nfold status indicator before foldable lines (which can be clicked\nto fold or unfold the line).\n*/\nfunction foldGutter(config = {}) {\n let fullConfig = { ...foldGutterDefaults, ...config };\n let canFold = new FoldMarker(fullConfig, true), canUnfold = new FoldMarker(fullConfig, false);\n let markers = ViewPlugin.fromClass(class {\n constructor(view) {\n this.from = view.viewport.from;\n this.markers = this.buildMarkers(view);\n }\n update(update) {\n if (update.docChanged || update.viewportChanged ||\n update.startState.facet(language) != update.state.facet(language) ||\n update.startState.field(foldState, false) != update.state.field(foldState, false) ||\n syntaxTree(update.startState) != syntaxTree(update.state) ||\n fullConfig.foldingChanged(update))\n this.markers = this.buildMarkers(update.view);\n }\n buildMarkers(view) {\n let builder = new RangeSetBuilder();\n for (let line of view.viewportLineBlocks) {\n let mark = findFold(view.state, line.from, line.to) ? canUnfold\n : foldable(view.state, line.from, line.to) ? canFold : null;\n if (mark)\n builder.add(line.from, line.from, mark);\n }\n return builder.finish();\n }\n });\n let { domEventHandlers } = fullConfig;\n return [\n markers,\n gutter({\n class: \"cm-foldGutter\",\n markers(view) { var _a; return ((_a = view.plugin(markers)) === null || _a === void 0 ? void 0 : _a.markers) || RangeSet.empty; },\n initialSpacer() {\n return new FoldMarker(fullConfig, false);\n },\n domEventHandlers: {\n ...domEventHandlers,\n click: (view, line, event) => {\n if (domEventHandlers.click && domEventHandlers.click(view, line, event))\n return true;\n let folded = findFold(view.state, line.from, line.to);\n if (folded) {\n view.dispatch({ effects: unfoldEffect.of(folded) });\n return true;\n }\n let range = foldable(view.state, line.from, line.to);\n if (range) {\n view.dispatch({ effects: foldEffect.of(range) });\n return true;\n }\n return false;\n }\n }\n }),\n codeFolding()\n ];\n}\nconst baseTheme$1 = /*@__PURE__*/EditorView.baseTheme({\n \".cm-foldPlaceholder\": {\n backgroundColor: \"#eee\",\n border: \"1px solid #ddd\",\n color: \"#888\",\n borderRadius: \".2em\",\n margin: \"0 1px\",\n padding: \"0 1px\",\n cursor: \"pointer\"\n },\n \".cm-foldGutter span\": {\n padding: \"0 1px\",\n cursor: \"pointer\"\n }\n});\n\n/**\nA highlight style associates CSS styles with highlighting\n[tags](https://lezer.codemirror.net/docs/ref#highlight.Tag).\n*/\nclass HighlightStyle {\n constructor(\n /**\n The tag styles used to create this highlight style.\n */\n specs, options) {\n this.specs = specs;\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 const all = typeof options.all == \"string\" ? options.all : options.all ? def(options.all) : undefined;\n const scopeOpt = options.scope;\n this.scope = scopeOpt instanceof Language ? (type) => type.prop(languageDataProp) == scopeOpt.data\n : scopeOpt ? (type) => type == scopeOpt : undefined;\n this.style = tagHighlighter(specs.map(style => ({\n tag: style.tag,\n class: style.class || def(Object.assign({}, style, { tag: null }))\n })), {\n all,\n }).style;\n this.module = modSpec ? new StyleModule(modSpec) : null;\n this.themeType = options.themeType;\n }\n /**\n Create a highlighter style that associates the given styles to\n the given tags. The specs 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 highlighter\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}\nconst highlighterFacet = /*@__PURE__*/Facet.define();\nconst fallbackHighlighter = /*@__PURE__*/Facet.define({\n combine(values) { return values.length ? [values[0]] : null; }\n});\nfunction getHighlighters(state) {\n let main = state.facet(highlighterFacet);\n return main.length ? main : state.facet(fallbackHighlighter);\n}\n/**\nWrap a highlighter in an editor extension that uses it to apply\nsyntax highlighting to the editor content.\n\nWhen multiple (non-fallback) styles are provided, the styling\napplied is the union of the classes they emit.\n*/\nfunction syntaxHighlighting(highlighter, options) {\n let ext = [treeHighlighter], themeType;\n if (highlighter instanceof HighlightStyle) {\n if (highlighter.module)\n ext.push(EditorView.styleModule.of(highlighter.module));\n themeType = highlighter.themeType;\n }\n if (options === null || options === void 0 ? void 0 : options.fallback)\n ext.push(fallbackHighlighter.of(highlighter));\n else if (themeType)\n ext.push(highlighterFacet.computeN([EditorView.darkTheme], state => {\n return state.facet(EditorView.darkTheme) == (themeType == \"dark\") ? [highlighter] : [];\n }));\n else\n ext.push(highlighterFacet.of(highlighter));\n return ext;\n}\n/**\nReturns the CSS classes (if any) that the highlighters active in\nthe state would assign to the given style\n[tags](https://lezer.codemirror.net/docs/ref#highlight.Tag) and\n(optional) language\n[scope](https://codemirror.net/6/docs/ref/#language.HighlightStyle^define^options.scope).\n*/\nfunction highlightingFor(state, tags, scope) {\n let highlighters = getHighlighters(state);\n let result = null;\n if (highlighters)\n for (let highlighter of highlighters) {\n if (!highlighter.scope || scope && highlighter.scope(scope)) {\n let cls = highlighter.style(tags);\n if (cls)\n result = result ? result + \" \" + cls : cls;\n }\n }\n return result;\n}\nclass TreeHighlighter {\n constructor(view) {\n this.markCache = Object.create(null);\n this.tree = syntaxTree(view.state);\n this.decorations = this.buildDeco(view, getHighlighters(view.state));\n this.decoratedTo = view.viewport.to;\n }\n update(update) {\n let tree = syntaxTree(update.state), highlighters = getHighlighters(update.state);\n let styleChange = highlighters != getHighlighters(update.startState);\n let { viewport } = update.view, decoratedToMapped = update.changes.mapPos(this.decoratedTo, 1);\n if (tree.length < viewport.to && !styleChange && tree.type == this.tree.type && decoratedToMapped >= viewport.to) {\n this.decorations = this.decorations.map(update.changes);\n this.decoratedTo = decoratedToMapped;\n }\n else if (tree != this.tree || update.viewportChanged || styleChange) {\n this.tree = tree;\n this.decorations = this.buildDeco(update.view, highlighters);\n this.decoratedTo = viewport.to;\n }\n }\n buildDeco(view, highlighters) {\n if (!highlighters || !this.tree.length)\n return Decoration.none;\n let builder = new RangeSetBuilder();\n for (let { from, to } of view.visibleRanges) {\n highlightTree(this.tree, highlighters, (from, to, style) => {\n builder.add(from, to, this.markCache[style] || (this.markCache[style] = Decoration.mark({ class: style })));\n }, from, to);\n }\n return builder.finish();\n }\n}\nconst treeHighlighter = /*@__PURE__*/Prec.high(/*@__PURE__*/ViewPlugin.fromClass(TreeHighlighter, {\n decorations: v => v.decorations\n}));\n/**\nA default highlight style (works well with light themes).\n*/\nconst defaultHighlightStyle = /*@__PURE__*/HighlightStyle.define([\n { tag: tags.meta,\n color: \"#404740\" },\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.invalid,\n color: \"#f00\" }\n]);\n\nconst baseTheme = /*@__PURE__*/EditorView.baseTheme({\n \"&.cm-focused .cm-matchingBracket\": { backgroundColor: \"#328c8252\" },\n \"&.cm-focused .cm-nonmatchingBracket\": { backgroundColor: \"#bb555544\" }\n});\nconst DefaultScanDist = 10000, DefaultBrackets = \"()[]{}\";\nconst bracketMatchingConfig = /*@__PURE__*/Facet.define({\n combine(configs) {\n return combineConfig(configs, {\n afterCursor: true,\n brackets: DefaultBrackets,\n maxScanDistance: DefaultScanDist,\n renderMatch: defaultRenderMatch\n });\n }\n});\nconst matchingMark = /*@__PURE__*/Decoration.mark({ class: \"cm-matchingBracket\" }), nonmatchingMark = /*@__PURE__*/Decoration.mark({ class: \"cm-nonmatchingBracket\" });\nfunction defaultRenderMatch(match) {\n let decorations = [];\n let mark = match.matched ? matchingMark : nonmatchingMark;\n decorations.push(mark.range(match.start.from, match.start.to));\n if (match.end)\n decorations.push(mark.range(match.end.from, match.end.to));\n return decorations;\n}\nconst bracketMatchingState = /*@__PURE__*/StateField.define({\n create() { return Decoration.none; },\n update(deco, tr) {\n if (!tr.docChanged && !tr.selection)\n return deco;\n let decorations = [];\n let config = tr.state.facet(bracketMatchingConfig);\n for (let range of tr.state.selection.ranges) {\n if (!range.empty)\n continue;\n let match = matchBrackets(tr.state, range.head, -1, config)\n || (range.head > 0 && matchBrackets(tr.state, range.head - 1, 1, config))\n || (config.afterCursor &&\n (matchBrackets(tr.state, range.head, 1, config) ||\n (range.head < tr.state.doc.length && matchBrackets(tr.state, range.head + 1, -1, config))));\n if (match)\n decorations = decorations.concat(config.renderMatch(match, tr.state));\n }\n return Decoration.set(decorations, true);\n },\n provide: f => EditorView.decorations.from(f)\n});\nconst bracketMatchingUnique = [\n bracketMatchingState,\n baseTheme\n];\n/**\nCreate an extension that enables bracket matching. Whenever the\ncursor is next to a bracket, that bracket and the one it matches\nare highlighted. Or, when no matching bracket is found, another\nhighlighting style is used to indicate this.\n*/\nfunction bracketMatching(config = {}) {\n return [bracketMatchingConfig.of(config), bracketMatchingUnique];\n}\n/**\nWhen larger syntax nodes, such as HTML tags, are marked as\nopening/closing, it can be a bit messy to treat the whole node as\na matchable bracket. This node prop allows you to define, for such\na node, a ‘handle’—the part of the node that is highlighted, and\nthat the cursor must be on to activate highlighting in the first\nplace.\n*/\nconst bracketMatchingHandle = /*@__PURE__*/new NodeProp();\nfunction matchingNodes(node, dir, brackets) {\n let byProp = node.prop(dir < 0 ? NodeProp.openedBy : NodeProp.closedBy);\n if (byProp)\n return byProp;\n if (node.name.length == 1) {\n let index = brackets.indexOf(node.name);\n if (index > -1 && index % 2 == (dir < 0 ? 1 : 0))\n return [brackets[index + dir]];\n }\n return null;\n}\nfunction findHandle(node) {\n let hasHandle = node.type.prop(bracketMatchingHandle);\n return hasHandle ? hasHandle(node.node) : node;\n}\n/**\nFind the matching bracket for the token at `pos`, scanning\ndirection `dir`. Only the `brackets` and `maxScanDistance`\nproperties are used from `config`, if given. Returns null if no\nbracket was found at `pos`, or a match result otherwise.\n*/\nfunction matchBrackets(state, pos, dir, config = {}) {\n let maxScanDistance = config.maxScanDistance || DefaultScanDist, brackets = config.brackets || DefaultBrackets;\n let tree = syntaxTree(state), node = tree.resolveInner(pos, dir);\n for (let cur = node; cur; cur = cur.parent) {\n let matches = matchingNodes(cur.type, dir, brackets);\n if (matches && cur.from < cur.to) {\n let handle = findHandle(cur);\n if (handle && (dir > 0 ? pos >= handle.from && pos < handle.to : pos > handle.from && pos <= handle.to))\n return matchMarkedBrackets(state, pos, dir, cur, handle, matches, brackets);\n }\n }\n return matchPlainBrackets(state, pos, dir, tree, node.type, maxScanDistance, brackets);\n}\nfunction matchMarkedBrackets(_state, _pos, dir, token, handle, matching, brackets) {\n let parent = token.parent, firstToken = { from: handle.from, to: handle.to };\n let depth = 0, cursor = parent === null || parent === void 0 ? void 0 : parent.cursor();\n if (cursor && (dir < 0 ? cursor.childBefore(token.from) : cursor.childAfter(token.to)))\n do {\n if (dir < 0 ? cursor.to <= token.from : cursor.from >= token.to) {\n if (depth == 0 && matching.indexOf(cursor.type.name) > -1 && cursor.from < cursor.to) {\n let endHandle = findHandle(cursor);\n return { start: firstToken, end: endHandle ? { from: endHandle.from, to: endHandle.to } : undefined, matched: true };\n }\n else if (matchingNodes(cursor.type, dir, brackets)) {\n depth++;\n }\n else if (matchingNodes(cursor.type, -dir, brackets)) {\n if (depth == 0) {\n let endHandle = findHandle(cursor);\n return {\n start: firstToken,\n end: endHandle && endHandle.from < endHandle.to ? { from: endHandle.from, to: endHandle.to } : undefined,\n matched: false\n };\n }\n depth--;\n }\n }\n } while (dir < 0 ? cursor.prevSibling() : cursor.nextSibling());\n return { start: firstToken, matched: false };\n}\nfunction matchPlainBrackets(state, pos, dir, tree, tokenType, maxScanDistance, brackets) {\n let startCh = dir < 0 ? state.sliceDoc(pos - 1, pos) : state.sliceDoc(pos, pos + 1);\n let bracket = brackets.indexOf(startCh);\n if (bracket < 0 || (bracket % 2 == 0) != (dir > 0))\n return null;\n let startToken = { from: dir < 0 ? pos - 1 : pos, to: dir > 0 ? pos + 1 : pos };\n let iter = state.doc.iterRange(pos, dir > 0 ? state.doc.length : 0), depth = 0;\n for (let distance = 0; !(iter.next()).done && distance <= maxScanDistance;) {\n let text = iter.value;\n if (dir < 0)\n distance += text.length;\n let basePos = pos + distance * dir;\n for (let pos = dir > 0 ? 0 : text.length - 1, end = dir > 0 ? text.length : -1; pos != end; pos += dir) {\n let found = brackets.indexOf(text[pos]);\n if (found < 0 || tree.resolveInner(basePos + pos, 1).type != tokenType)\n continue;\n if ((found % 2 == 0) == (dir > 0)) {\n depth++;\n }\n else if (depth == 1) { // Closing\n return { start: startToken, end: { from: basePos + pos, to: basePos + pos + 1 }, matched: (found >> 1) == (bracket >> 1) };\n }\n else {\n depth--;\n }\n }\n if (dir > 0)\n distance += text.length;\n }\n return iter.done ? { start: startToken, matched: false } : null;\n}\n\n// Counts the column offset in a string, taking tabs into account.\n// Used mostly to find indentation.\nfunction countCol(string, end, tabSize, startIndex = 0, startValue = 0) {\n if (end == null) {\n end = string.search(/[^\\s\\u00a0]/);\n if (end == -1)\n end = string.length;\n }\n let n = startValue;\n for (let i = startIndex; i < end; i++) {\n if (string.charCodeAt(i) == 9)\n n += tabSize - (n % tabSize);\n else\n n++;\n }\n return n;\n}\n/**\nEncapsulates a single line of input. Given to stream syntax code,\nwhich uses it to tokenize the content.\n*/\nclass StringStream {\n /**\n Create a stream.\n */\n constructor(\n /**\n The line.\n */\n string, tabSize, \n /**\n The current indent unit size.\n */\n indentUnit, overrideIndent) {\n this.string = string;\n this.tabSize = tabSize;\n this.indentUnit = indentUnit;\n this.overrideIndent = overrideIndent;\n /**\n The current position on the line.\n */\n this.pos = 0;\n /**\n The start position of the current token.\n */\n this.start = 0;\n this.lastColumnPos = 0;\n this.lastColumnValue = 0;\n }\n /**\n True if we are at the end of the line.\n */\n eol() { return this.pos >= this.string.length; }\n /**\n True if we are at the start of the line.\n */\n sol() { return this.pos == 0; }\n /**\n Get the next code unit after the current position, or undefined\n if we're at the end of the line.\n */\n peek() { return this.string.charAt(this.pos) || undefined; }\n /**\n Read the next code unit and advance `this.pos`.\n */\n next() {\n if (this.pos < this.string.length)\n return this.string.charAt(this.pos++);\n }\n /**\n Match the next character against the given string, regular\n expression, or predicate. Consume and return it if it matches.\n */\n eat(match) {\n let ch = this.string.charAt(this.pos);\n let ok;\n if (typeof match == \"string\")\n ok = ch == match;\n else\n ok = ch && (match instanceof RegExp ? match.test(ch) : match(ch));\n if (ok) {\n ++this.pos;\n return ch;\n }\n }\n /**\n Continue matching characters that match the given string,\n regular expression, or predicate function. Return true if any\n characters were consumed.\n */\n eatWhile(match) {\n let start = this.pos;\n while (this.eat(match)) { }\n return this.pos > start;\n }\n /**\n Consume whitespace ahead of `this.pos`. Return true if any was\n found.\n */\n eatSpace() {\n let start = this.pos;\n while (/[\\s\\u00a0]/.test(this.string.charAt(this.pos)))\n ++this.pos;\n return this.pos > start;\n }\n /**\n Move to the end of the line.\n */\n skipToEnd() { this.pos = this.string.length; }\n /**\n Move to directly before the given character, if found on the\n current line.\n */\n skipTo(ch) {\n let found = this.string.indexOf(ch, this.pos);\n if (found > -1) {\n this.pos = found;\n return true;\n }\n }\n /**\n Move back `n` characters.\n */\n backUp(n) { this.pos -= n; }\n /**\n Get the column position at `this.pos`.\n */\n column() {\n if (this.lastColumnPos < this.start) {\n this.lastColumnValue = countCol(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue);\n this.lastColumnPos = this.start;\n }\n return this.lastColumnValue;\n }\n /**\n Get the indentation column of the current line.\n */\n indentation() {\n var _a;\n return (_a = this.overrideIndent) !== null && _a !== void 0 ? _a : countCol(this.string, null, this.tabSize);\n }\n /**\n Match the input against the given string or regular expression\n (which should start with a `^`). Return true or the regexp match\n if it matches.\n \n Unless `consume` is set to `false`, this will move `this.pos`\n past the matched text.\n \n When matching a string `caseInsensitive` can be set to true to\n make the match case-insensitive.\n */\n match(pattern, consume, caseInsensitive) {\n if (typeof pattern == \"string\") {\n let cased = (str) => caseInsensitive ? str.toLowerCase() : str;\n let substr = this.string.substr(this.pos, pattern.length);\n if (cased(substr) == cased(pattern)) {\n if (consume !== false)\n this.pos += pattern.length;\n return true;\n }\n else\n return null;\n }\n else {\n let match = this.string.slice(this.pos).match(pattern);\n if (match && match.index > 0)\n return null;\n if (match && consume !== false)\n this.pos += match[0].length;\n return match;\n }\n }\n /**\n Get the current token.\n */\n current() { return this.string.slice(this.start, this.pos); }\n}\n\nfunction fullParser(spec) {\n return {\n name: spec.name || \"\",\n token: spec.token,\n blankLine: spec.blankLine || (() => { }),\n startState: spec.startState || (() => true),\n copyState: spec.copyState || defaultCopyState,\n indent: spec.indent || (() => null),\n languageData: spec.languageData || {},\n tokenTable: spec.tokenTable || noTokens,\n mergeTokens: spec.mergeTokens !== false\n };\n}\nfunction defaultCopyState(state) {\n if (typeof state != \"object\")\n return state;\n let newState = {};\n for (let prop in state) {\n let val = state[prop];\n newState[prop] = (val instanceof Array ? val.slice() : val);\n }\n return newState;\n}\nconst IndentedFrom = /*@__PURE__*/new WeakMap();\n/**\nA [language](https://codemirror.net/6/docs/ref/#language.Language) class based on a CodeMirror\n5-style [streaming parser](https://codemirror.net/6/docs/ref/#language.StreamParser).\n*/\nclass StreamLanguage extends Language {\n constructor(parser) {\n let data = defineLanguageFacet(parser.languageData);\n let p = fullParser(parser), self;\n let impl = new class extends Parser {\n createParse(input, fragments, ranges) {\n return new Parse(self, input, fragments, ranges);\n }\n };\n super(data, impl, [], parser.name);\n this.topNode = docID(data, this);\n self = this;\n this.streamParser = p;\n this.stateAfter = new NodeProp({ perNode: true });\n this.tokenTable = parser.tokenTable ? new TokenTable(p.tokenTable) : defaultTokenTable;\n }\n /**\n Define a stream language.\n */\n static define(spec) { return new StreamLanguage(spec); }\n /**\n @internal\n */\n getIndent(cx) {\n let from = undefined;\n let { overrideIndentation } = cx.options;\n if (overrideIndentation) {\n from = IndentedFrom.get(cx.state);\n if (from != null && from < cx.pos - 1e4)\n from = undefined;\n }\n let start = findState(this, cx.node.tree, cx.node.from, cx.node.from, from !== null && from !== void 0 ? from : cx.pos), statePos, state;\n if (start) {\n state = start.state;\n statePos = start.pos + 1;\n }\n else {\n state = this.streamParser.startState(cx.unit);\n statePos = cx.node.from;\n }\n if (cx.pos - statePos > 10000 /* C.MaxIndentScanDist */)\n return null;\n while (statePos < cx.pos) {\n let line = cx.state.doc.lineAt(statePos), end = Math.min(cx.pos, line.to);\n if (line.length) {\n let indentation = overrideIndentation ? overrideIndentation(line.from) : -1;\n let stream = new StringStream(line.text, cx.state.tabSize, cx.unit, indentation < 0 ? undefined : indentation);\n while (stream.pos < end - line.from)\n readToken(this.streamParser.token, stream, state);\n }\n else {\n this.streamParser.blankLine(state, cx.unit);\n }\n if (end == cx.pos)\n break;\n statePos = line.to + 1;\n }\n let line = cx.lineAt(cx.pos);\n if (overrideIndentation && from == null)\n IndentedFrom.set(cx.state, line.from);\n return this.streamParser.indent(state, /^\\s*(.*)/.exec(line.text)[1], cx);\n }\n get allowsNesting() { return false; }\n}\nfunction findState(lang, tree, off, startPos, before) {\n let state = off >= startPos && off + tree.length <= before && tree.prop(lang.stateAfter);\n if (state)\n return { state: lang.streamParser.copyState(state), pos: off + tree.length };\n for (let i = tree.children.length - 1; i >= 0; i--) {\n let child = tree.children[i], pos = off + tree.positions[i];\n let found = child instanceof Tree && pos < before && findState(lang, child, pos, startPos, before);\n if (found)\n return found;\n }\n return null;\n}\nfunction cutTree(lang, tree, from, to, inside) {\n if (inside && from <= 0 && to >= tree.length)\n return tree;\n if (!inside && from == 0 && tree.type == lang.topNode)\n inside = true;\n for (let i = tree.children.length - 1; i >= 0; i--) {\n let pos = tree.positions[i], child = tree.children[i], inner;\n if (pos < to && child instanceof Tree) {\n if (!(inner = cutTree(lang, child, from - pos, to - pos, inside)))\n break;\n return !inside ? inner\n : new Tree(tree.type, tree.children.slice(0, i).concat(inner), tree.positions.slice(0, i + 1), pos + inner.length);\n }\n }\n return null;\n}\nfunction findStartInFragments(lang, fragments, startPos, endPos, editorState) {\n for (let f of fragments) {\n let from = f.from + (f.openStart ? 25 : 0), to = f.to - (f.openEnd ? 25 : 0);\n let found = from <= startPos && to > startPos && findState(lang, f.tree, 0 - f.offset, startPos, to), tree;\n if (found && found.pos <= endPos && (tree = cutTree(lang, f.tree, startPos + f.offset, found.pos + f.offset, false)))\n return { state: found.state, tree };\n }\n return { state: lang.streamParser.startState(editorState ? getIndentUnit(editorState) : 4), tree: Tree.empty };\n}\nclass Parse {\n constructor(lang, input, fragments, ranges) {\n this.lang = lang;\n this.input = input;\n this.fragments = fragments;\n this.ranges = ranges;\n this.stoppedAt = null;\n this.chunks = [];\n this.chunkPos = [];\n this.chunk = [];\n this.chunkReused = undefined;\n this.rangeIndex = 0;\n this.to = ranges[ranges.length - 1].to;\n let context = ParseContext.get(), from = ranges[0].from;\n let { state, tree } = findStartInFragments(lang, fragments, from, this.to, context === null || context === void 0 ? void 0 : context.state);\n this.state = state;\n this.parsedPos = this.chunkStart = from + tree.length;\n for (let i = 0; i < tree.children.length; i++) {\n this.chunks.push(tree.children[i]);\n this.chunkPos.push(tree.positions[i]);\n }\n if (context && this.parsedPos < context.viewport.from - 100000 /* C.MaxDistanceBeforeViewport */ &&\n ranges.some(r => r.from <= context.viewport.from && r.to >= context.viewport.from)) {\n this.state = this.lang.streamParser.startState(getIndentUnit(context.state));\n context.skipUntilInView(this.parsedPos, context.viewport.from);\n this.parsedPos = context.viewport.from;\n }\n this.moveRangeIndex();\n }\n advance() {\n let context = ParseContext.get();\n let parseEnd = this.stoppedAt == null ? this.to : Math.min(this.to, this.stoppedAt);\n let end = Math.min(parseEnd, this.chunkStart + 512 /* C.ChunkSize */);\n if (context)\n end = Math.min(end, context.viewport.to);\n while (this.parsedPos < end)\n this.parseLine(context);\n if (this.chunkStart < this.parsedPos)\n this.finishChunk();\n if (this.parsedPos >= parseEnd)\n return this.finish();\n if (context && this.parsedPos >= context.viewport.to) {\n context.skipUntilInView(this.parsedPos, parseEnd);\n return this.finish();\n }\n return null;\n }\n stopAt(pos) {\n this.stoppedAt = pos;\n }\n lineAfter(pos) {\n let chunk = this.input.chunk(pos);\n if (!this.input.lineChunks) {\n let eol = chunk.indexOf(\"\\n\");\n if (eol > -1)\n chunk = chunk.slice(0, eol);\n }\n else if (chunk == \"\\n\") {\n chunk = \"\";\n }\n return pos + chunk.length <= this.to ? chunk : chunk.slice(0, this.to - pos);\n }\n nextLine() {\n let from = this.parsedPos, line = this.lineAfter(from), end = from + line.length;\n for (let index = this.rangeIndex;;) {\n let rangeEnd = this.ranges[index].to;\n if (rangeEnd >= end)\n break;\n line = line.slice(0, rangeEnd - (end - line.length));\n index++;\n if (index == this.ranges.length)\n break;\n let rangeStart = this.ranges[index].from;\n let after = this.lineAfter(rangeStart);\n line += after;\n end = rangeStart + after.length;\n }\n return { line, end };\n }\n skipGapsTo(pos, offset, side) {\n for (;;) {\n let end = this.ranges[this.rangeIndex].to, offPos = pos + offset;\n if (side > 0 ? end > offPos : end >= offPos)\n break;\n let start = this.ranges[++this.rangeIndex].from;\n offset += start - end;\n }\n return offset;\n }\n moveRangeIndex() {\n while (this.ranges[this.rangeIndex].to < this.parsedPos)\n this.rangeIndex++;\n }\n emitToken(id, from, to, offset) {\n let size = 4;\n if (this.ranges.length > 1) {\n offset = this.skipGapsTo(from, offset, 1);\n from += offset;\n let len0 = this.chunk.length;\n offset = this.skipGapsTo(to, offset, -1);\n to += offset;\n size += this.chunk.length - len0;\n }\n let last = this.chunk.length - 4;\n if (this.lang.streamParser.mergeTokens && size == 4 && last >= 0 &&\n this.chunk[last] == id && this.chunk[last + 2] == from)\n this.chunk[last + 2] = to;\n else\n this.chunk.push(id, from, to, size);\n return offset;\n }\n parseLine(context) {\n let { line, end } = this.nextLine(), offset = 0, { streamParser } = this.lang;\n let stream = new StringStream(line, context ? context.state.tabSize : 4, context ? getIndentUnit(context.state) : 2);\n if (stream.eol()) {\n streamParser.blankLine(this.state, stream.indentUnit);\n }\n else {\n while (!stream.eol()) {\n let token = readToken(streamParser.token, stream, this.state);\n if (token)\n offset = this.emitToken(this.lang.tokenTable.resolve(token), this.parsedPos + stream.start, this.parsedPos + stream.pos, offset);\n if (stream.start > 10000 /* C.MaxLineLength */)\n break;\n }\n }\n this.parsedPos = end;\n this.moveRangeIndex();\n if (this.parsedPos < this.to)\n this.parsedPos++;\n }\n finishChunk() {\n let tree = Tree.build({\n buffer: this.chunk,\n start: this.chunkStart,\n length: this.parsedPos - this.chunkStart,\n nodeSet,\n topID: 0,\n maxBufferLength: 512 /* C.ChunkSize */,\n reused: this.chunkReused\n });\n tree = new Tree(tree.type, tree.children, tree.positions, tree.length, [[this.lang.stateAfter, this.lang.streamParser.copyState(this.state)]]);\n this.chunks.push(tree);\n this.chunkPos.push(this.chunkStart - this.ranges[0].from);\n this.chunk = [];\n this.chunkReused = undefined;\n this.chunkStart = this.parsedPos;\n }\n finish() {\n return new Tree(this.lang.topNode, this.chunks, this.chunkPos, this.parsedPos - this.ranges[0].from).balance();\n }\n}\nfunction readToken(token, stream, state) {\n stream.start = stream.pos;\n for (let i = 0; i < 10; i++) {\n let result = token(stream, state);\n if (stream.pos > stream.start)\n return result;\n }\n throw new Error(\"Stream parser failed to advance stream.\");\n}\nconst noTokens = /*@__PURE__*/Object.create(null);\nconst typeArray = [NodeType.none];\nconst nodeSet = /*@__PURE__*/new NodeSet(typeArray);\nconst warned = [];\n// Cache of node types by name and tags\nconst byTag = /*@__PURE__*/Object.create(null);\nconst defaultTable = /*@__PURE__*/Object.create(null);\nfor (let [legacyName, name] of [\n [\"variable\", \"variableName\"],\n [\"variable-2\", \"variableName.special\"],\n [\"string-2\", \"string.special\"],\n [\"def\", \"variableName.definition\"],\n [\"tag\", \"tagName\"],\n [\"attribute\", \"attributeName\"],\n [\"type\", \"typeName\"],\n [\"builtin\", \"variableName.standard\"],\n [\"qualifier\", \"modifier\"],\n [\"error\", \"invalid\"],\n [\"header\", \"heading\"],\n [\"property\", \"propertyName\"]\n])\n defaultTable[legacyName] = /*@__PURE__*/createTokenType(noTokens, name);\nclass TokenTable {\n constructor(extra) {\n this.extra = extra;\n this.table = Object.assign(Object.create(null), defaultTable);\n }\n resolve(tag) {\n return !tag ? 0 : this.table[tag] || (this.table[tag] = createTokenType(this.extra, tag));\n }\n}\nconst defaultTokenTable = /*@__PURE__*/new TokenTable(noTokens);\nfunction warnForPart(part, msg) {\n if (warned.indexOf(part) > -1)\n return;\n warned.push(part);\n console.warn(msg);\n}\nfunction createTokenType(extra, tagStr) {\n let tags$1 = [];\n for (let name of tagStr.split(\" \")) {\n let found = [];\n for (let part of name.split(\".\")) {\n let value = (extra[part] || tags[part]);\n if (!value) {\n warnForPart(part, `Unknown highlighting tag ${part}`);\n }\n else if (typeof value == \"function\") {\n if (!found.length)\n warnForPart(part, `Modifier ${part} used at start of tag`);\n else\n found = found.map(value);\n }\n else {\n if (found.length)\n warnForPart(part, `Tag ${part} used as modifier`);\n else\n found = Array.isArray(value) ? value : [value];\n }\n }\n for (let tag of found)\n tags$1.push(tag);\n }\n if (!tags$1.length)\n return 0;\n let name = tagStr.replace(/ /g, \"_\"), key = name + \" \" + tags$1.map(t => t.id);\n let known = byTag[key];\n if (known)\n return known.id;\n let type = byTag[key] = NodeType.define({\n id: typeArray.length,\n name,\n props: [styleTags({ [name]: tags$1 })]\n });\n typeArray.push(type);\n return type.id;\n}\nfunction docID(data, lang) {\n let type = NodeType.define({ id: typeArray.length, name: \"Document\", props: [\n languageDataProp.add(() => data),\n indentNodeProp.add(() => cx => lang.getIndent(cx))\n ], top: true });\n typeArray.push(type);\n return type;\n}\n\nfunction buildForLine(line) {\n return line.length <= 4096 && /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac\\ufb50-\\ufdff]/.test(line);\n}\nfunction textHasRTL(text) {\n for (let i = text.iter(); !i.next().done;)\n if (buildForLine(i.value))\n return true;\n return false;\n}\nfunction changeAddsRTL(change) {\n let added = false;\n change.iterChanges((fA, tA, fB, tB, ins) => {\n if (!added && textHasRTL(ins))\n added = true;\n });\n return added;\n}\nconst alwaysIsolate = /*@__PURE__*/Facet.define({ combine: values => values.some(x => x) });\n/**\nMake sure nodes\n[marked](https://lezer.codemirror.net/docs/ref/#common.NodeProp^isolate)\nas isolating for bidirectional text are rendered in a way that\nisolates them from the surrounding text.\n*/\nfunction bidiIsolates(options = {}) {\n let extensions = [isolateMarks];\n if (options.alwaysIsolate)\n extensions.push(alwaysIsolate.of(true));\n return extensions;\n}\nconst isolateMarks = /*@__PURE__*/ViewPlugin.fromClass(class {\n constructor(view) {\n this.always = view.state.facet(alwaysIsolate) ||\n view.textDirection != Direction.LTR ||\n view.state.facet(EditorView.perLineTextDirection);\n this.hasRTL = !this.always && textHasRTL(view.state.doc);\n this.tree = syntaxTree(view.state);\n this.decorations = this.always || this.hasRTL ? buildDeco(view, this.tree, this.always) : Decoration.none;\n }\n update(update) {\n let always = update.state.facet(alwaysIsolate) ||\n update.view.textDirection != Direction.LTR ||\n update.state.facet(EditorView.perLineTextDirection);\n if (!always && !this.hasRTL && changeAddsRTL(update.changes))\n this.hasRTL = true;\n if (!always && !this.hasRTL)\n return;\n let tree = syntaxTree(update.state);\n if (always != this.always || tree != this.tree || update.docChanged || update.viewportChanged) {\n this.tree = tree;\n this.always = always;\n this.decorations = buildDeco(update.view, tree, always);\n }\n }\n}, {\n provide: plugin => {\n function access(view) {\n var _a, _b;\n return (_b = (_a = view.plugin(plugin)) === null || _a === void 0 ? void 0 : _a.decorations) !== null && _b !== void 0 ? _b : Decoration.none;\n }\n return [EditorView.outerDecorations.of(access),\n Prec.lowest(EditorView.bidiIsolatedRanges.of(access))];\n }\n});\nfunction buildDeco(view, tree, always) {\n let deco = new RangeSetBuilder();\n let ranges = view.visibleRanges;\n if (!always)\n ranges = clipRTLLines(ranges, view.state.doc);\n for (let { from, to } of ranges) {\n tree.iterate({\n enter: node => {\n let iso = node.type.prop(NodeProp.isolate);\n if (iso)\n deco.add(node.from, node.to, marks[iso]);\n },\n from, to\n });\n }\n return deco.finish();\n}\nfunction clipRTLLines(ranges, doc) {\n let cur = doc.iter(), pos = 0, result = [], last = null;\n for (let { from, to } of ranges) {\n if (last && last.to > from) {\n from = last.to;\n if (from >= to)\n continue;\n }\n if (pos + cur.value.length < from) {\n cur.next(from - (pos + cur.value.length));\n pos = from;\n }\n for (;;) {\n let start = pos, end = pos + cur.value.length;\n if (!cur.lineBreak && buildForLine(cur.value)) {\n if (last && last.to > start - 10)\n last.to = Math.min(to, end);\n else\n result.push(last = { from: start, to: Math.min(to, end) });\n }\n if (end >= to)\n break;\n pos = end;\n cur.next();\n }\n }\n return result;\n}\nconst marks = {\n rtl: /*@__PURE__*/Decoration.mark({ class: \"cm-iso\", inclusive: true, attributes: { dir: \"rtl\" }, bidiIsolate: Direction.RTL }),\n ltr: /*@__PURE__*/Decoration.mark({ class: \"cm-iso\", inclusive: true, attributes: { dir: \"ltr\" }, bidiIsolate: Direction.LTR }),\n auto: /*@__PURE__*/Decoration.mark({ class: \"cm-iso\", inclusive: true, attributes: { dir: \"auto\" }, bidiIsolate: null })\n};\n\nexport { DocInput, HighlightStyle, IndentContext, LRLanguage, Language, LanguageDescription, LanguageSupport, ParseContext, StreamLanguage, StringStream, TreeIndentContext, bidiIsolates, bracketMatching, bracketMatchingHandle, codeFolding, continuedIndent, defaultHighlightStyle, defineLanguageFacet, delimitedIndent, ensureSyntaxTree, flatIndent, foldAll, foldCode, foldEffect, foldGutter, foldInside, foldKeymap, foldNodeProp, foldService, foldState, foldable, foldedRanges, forceParsing, getIndentUnit, getIndentation, highlightingFor, indentNodeProp, indentOnInput, indentRange, indentService, indentString, indentUnit, language, languageDataProp, matchBrackets, sublanguageProp, syntaxHighlighting, syntaxParserRunning, syntaxTree, syntaxTreeAvailable, toggleFold, unfoldAll, unfoldCode, unfoldEffect };\n","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 let scan = state.doc.iter(), scanPos = 0, docLen = state.doc.length;\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 if (from > docLen)\n break;\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 to = Math.min(to, docLen);\n let widget = false;\n if (active.some(d => d.from == from && (d.to == to || to == docLen))) {\n widget = from == to;\n if (!widget && to - from < 10) {\n let behind = from - (scanPos + scan.value.length);\n if (behind > 0) {\n scan.next(behind);\n scanPos = from;\n }\n for (let check = from;;) {\n if (check >= to) {\n widget = true;\n break;\n }\n if (!scan.lineBreak && scanPos + scan.value.length > check)\n break;\n check = scanPos + scan.value.length;\n scanPos += scan.value.length;\n scan.next();\n }\n }\n }\n let sev = maxSeverity(active);\n if (widget) {\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 if (pos == docLen)\n break;\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 {\n sources: input.map(i => i.source).filter(x => x != null),\n ...combineConfig(input.map(i => i.config), {\n delay: 750,\n markerFilter: null,\n tooltipFilter: null,\n needsRefresh: null,\n hideOn: () => null,\n }, {\n delay: Math.max,\n markerFilter: combineFilter,\n tooltipFilter: combineFilter,\n needsRefresh: (a, b) => !a ? b : !b ? a : u => a(u) || b(u),\n hideOn: (a, b) => !a ? b : !b ? a : (t, x, y) => a(t, x, y) || b(t, x, y),\n autoPanel: (a, b) => a || b\n })\n };\n }\n});\nfunction combineFilter(a, b) {\n return !a ? b : !b ? a : (d, s) => b(a(d, s), s);\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).\n\nNote that settings given here will apply to all linters active in\nthe editor. If `null` is given as source, this only configures the\nlint 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 let markClass = action.markClass ? \" \" + action.markClass : \"\";\n return elt(\"button\", {\n type: \"button\",\n class: \"cm-diagnosticAction\" + markClass,\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 : { ...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":["document","Set","n","Schema","e","Object","t","Math","s","o","c","navigator","Language","LRLanguage","DocInput","ParseContext","Date","r","Promise","LanguageState","setTimeout","clearTimeout","requestIdleCallback","cancelIdleCallback","LanguageSupport","Array","Error","JSON","IndentContext","TreeIndentContext","l","PreparedFoldWidget","RangeError","HighlightStyle","a","TreeHighlighter","d","console","SelectedDiagnostic","LintState","DiagnosticWidget","LintPanel","PanelItem","encodeURIComponent"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"3730.dcf04b12bbd00d6f.js","sources":["webpack://@mdn/fred/./node_modules/@codemirror/lang-css/dist/index.js","webpack://@mdn/fred/./node_modules/@codemirror/lang-html/dist/index.js","webpack://@mdn/fred/./node_modules/@codemirror/lang-javascript/dist/index.js","webpack://@mdn/fred/./node_modules/@codemirror/lang-wast/dist/index.js","webpack://@mdn/fred/./node_modules/@codemirror/language/dist/index.js","webpack://@mdn/fred/./node_modules/@codemirror/lint/dist/index.js"],"sourcesContent":["import { parser } from '@lezer/css';\nimport { syntaxTree, LRLanguage, indentNodeProp, continuedIndent, foldNodeProp, foldInside, LanguageSupport } from '@codemirror/language';\nimport { NodeWeakMap, IterMode } from '@lezer/common';\n\nlet _properties = null;\nfunction properties() {\n if (!_properties && typeof document == \"object\" && document.body) {\n let { style } = document.body, names = [], seen = new Set;\n for (let prop in style)\n if (prop != \"cssText\" && prop != \"cssFloat\") {\n if (typeof style[prop] == \"string\") {\n if (/[A-Z]/.test(prop))\n prop = prop.replace(/[A-Z]/g, ch => \"-\" + ch.toLowerCase());\n if (!seen.has(prop)) {\n names.push(prop);\n seen.add(prop);\n }\n }\n }\n _properties = names.sort().map(name => ({ type: \"property\", label: name, apply: name + \": \" }));\n }\n return _properties || [];\n}\nconst pseudoClasses = /*@__PURE__*/[\n \"active\", \"after\", \"any-link\", \"autofill\", \"backdrop\", \"before\",\n \"checked\", \"cue\", \"default\", \"defined\", \"disabled\", \"empty\",\n \"enabled\", \"file-selector-button\", \"first\", \"first-child\",\n \"first-letter\", \"first-line\", \"first-of-type\", \"focus\",\n \"focus-visible\", \"focus-within\", \"fullscreen\", \"has\", \"host\",\n \"host-context\", \"hover\", \"in-range\", \"indeterminate\", \"invalid\",\n \"is\", \"lang\", \"last-child\", \"last-of-type\", \"left\", \"link\", \"marker\",\n \"modal\", \"not\", \"nth-child\", \"nth-last-child\", \"nth-last-of-type\",\n \"nth-of-type\", \"only-child\", \"only-of-type\", \"optional\", \"out-of-range\",\n \"part\", \"placeholder\", \"placeholder-shown\", \"read-only\", \"read-write\",\n \"required\", \"right\", \"root\", \"scope\", \"selection\", \"slotted\", \"target\",\n \"target-text\", \"valid\", \"visited\", \"where\"\n].map(name => ({ type: \"class\", label: name }));\nconst values = /*@__PURE__*/[\n \"above\", \"absolute\", \"activeborder\", \"additive\", \"activecaption\", \"after-white-space\",\n \"ahead\", \"alias\", \"all\", \"all-scroll\", \"alphabetic\", \"alternate\", \"always\",\n \"antialiased\", \"appworkspace\", \"asterisks\", \"attr\", \"auto\", \"auto-flow\", \"avoid\", \"avoid-column\",\n \"avoid-page\", \"avoid-region\", \"axis-pan\", \"background\", \"backwards\", \"baseline\", \"below\",\n \"bidi-override\", \"blink\", \"block\", \"block-axis\", \"bold\", \"bolder\", \"border\", \"border-box\",\n \"both\", \"bottom\", \"break\", \"break-all\", \"break-word\", \"bullets\", \"button\", \"button-bevel\",\n \"buttonface\", \"buttonhighlight\", \"buttonshadow\", \"buttontext\", \"calc\", \"capitalize\",\n \"caps-lock-indicator\", \"caption\", \"captiontext\", \"caret\", \"cell\", \"center\", \"checkbox\", \"circle\",\n \"cjk-decimal\", \"clear\", \"clip\", \"close-quote\", \"col-resize\", \"collapse\", \"color\", \"color-burn\",\n \"color-dodge\", \"column\", \"column-reverse\", \"compact\", \"condensed\", \"contain\", \"content\",\n \"contents\", \"content-box\", \"context-menu\", \"continuous\", \"copy\", \"counter\", \"counters\", \"cover\",\n \"crop\", \"cross\", \"crosshair\", \"currentcolor\", \"cursive\", \"cyclic\", \"darken\", \"dashed\", \"decimal\",\n \"decimal-leading-zero\", \"default\", \"default-button\", \"dense\", \"destination-atop\", \"destination-in\",\n \"destination-out\", \"destination-over\", \"difference\", \"disc\", \"discard\", \"disclosure-closed\",\n \"disclosure-open\", \"document\", \"dot-dash\", \"dot-dot-dash\", \"dotted\", \"double\", \"down\", \"e-resize\",\n \"ease\", \"ease-in\", \"ease-in-out\", \"ease-out\", \"element\", \"ellipse\", \"ellipsis\", \"embed\", \"end\",\n \"ethiopic-abegede-gez\", \"ethiopic-halehame-aa-er\", \"ethiopic-halehame-gez\", \"ew-resize\", \"exclusion\",\n \"expanded\", \"extends\", \"extra-condensed\", \"extra-expanded\", \"fantasy\", \"fast\", \"fill\", \"fill-box\",\n \"fixed\", \"flat\", \"flex\", \"flex-end\", \"flex-start\", \"footnotes\", \"forwards\", \"from\",\n \"geometricPrecision\", \"graytext\", \"grid\", \"groove\", \"hand\", \"hard-light\", \"help\", \"hidden\", \"hide\",\n \"higher\", \"highlight\", \"highlighttext\", \"horizontal\", \"hsl\", \"hsla\", \"hue\", \"icon\", \"ignore\",\n \"inactiveborder\", \"inactivecaption\", \"inactivecaptiontext\", \"infinite\", \"infobackground\", \"infotext\",\n \"inherit\", \"initial\", \"inline\", \"inline-axis\", \"inline-block\", \"inline-flex\", \"inline-grid\",\n \"inline-table\", \"inset\", \"inside\", \"intrinsic\", \"invert\", \"italic\", \"justify\", \"keep-all\",\n \"landscape\", \"large\", \"larger\", \"left\", \"level\", \"lighter\", \"lighten\", \"line-through\", \"linear\",\n \"linear-gradient\", \"lines\", \"list-item\", \"listbox\", \"listitem\", \"local\", \"logical\", \"loud\", \"lower\",\n \"lower-hexadecimal\", \"lower-latin\", \"lower-norwegian\", \"lowercase\", \"ltr\", \"luminosity\", \"manipulation\",\n \"match\", \"matrix\", \"matrix3d\", \"medium\", \"menu\", \"menutext\", \"message-box\", \"middle\", \"min-intrinsic\",\n \"mix\", \"monospace\", \"move\", \"multiple\", \"multiple_mask_images\", \"multiply\", \"n-resize\", \"narrower\",\n \"ne-resize\", \"nesw-resize\", \"no-close-quote\", \"no-drop\", \"no-open-quote\", \"no-repeat\", \"none\",\n \"normal\", \"not-allowed\", \"nowrap\", \"ns-resize\", \"numbers\", \"numeric\", \"nw-resize\", \"nwse-resize\",\n \"oblique\", \"opacity\", \"open-quote\", \"optimizeLegibility\", \"optimizeSpeed\", \"outset\", \"outside\",\n \"outside-shape\", \"overlay\", \"overline\", \"padding\", \"padding-box\", \"painted\", \"page\", \"paused\",\n \"perspective\", \"pinch-zoom\", \"plus-darker\", \"plus-lighter\", \"pointer\", \"polygon\", \"portrait\",\n \"pre\", \"pre-line\", \"pre-wrap\", \"preserve-3d\", \"progress\", \"push-button\", \"radial-gradient\", \"radio\",\n \"read-only\", \"read-write\", \"read-write-plaintext-only\", \"rectangle\", \"region\", \"relative\", \"repeat\",\n \"repeating-linear-gradient\", \"repeating-radial-gradient\", \"repeat-x\", \"repeat-y\", \"reset\", \"reverse\",\n \"rgb\", \"rgba\", \"ridge\", \"right\", \"rotate\", \"rotate3d\", \"rotateX\", \"rotateY\", \"rotateZ\", \"round\",\n \"row\", \"row-resize\", \"row-reverse\", \"rtl\", \"run-in\", \"running\", \"s-resize\", \"sans-serif\", \"saturation\",\n \"scale\", \"scale3d\", \"scaleX\", \"scaleY\", \"scaleZ\", \"screen\", \"scroll\", \"scrollbar\", \"scroll-position\",\n \"se-resize\", \"self-start\", \"self-end\", \"semi-condensed\", \"semi-expanded\", \"separate\", \"serif\", \"show\",\n \"single\", \"skew\", \"skewX\", \"skewY\", \"skip-white-space\", \"slide\", \"slider-horizontal\",\n \"slider-vertical\", \"sliderthumb-horizontal\", \"sliderthumb-vertical\", \"slow\", \"small\", \"small-caps\",\n \"small-caption\", \"smaller\", \"soft-light\", \"solid\", \"source-atop\", \"source-in\", \"source-out\",\n \"source-over\", \"space\", \"space-around\", \"space-between\", \"space-evenly\", \"spell-out\", \"square\", \"start\",\n \"static\", \"status-bar\", \"stretch\", \"stroke\", \"stroke-box\", \"sub\", \"subpixel-antialiased\", \"svg_masks\",\n \"super\", \"sw-resize\", \"symbolic\", \"symbols\", \"system-ui\", \"table\", \"table-caption\", \"table-cell\",\n \"table-column\", \"table-column-group\", \"table-footer-group\", \"table-header-group\", \"table-row\",\n \"table-row-group\", \"text\", \"text-bottom\", \"text-top\", \"textarea\", \"textfield\", \"thick\", \"thin\",\n \"threeddarkshadow\", \"threedface\", \"threedhighlight\", \"threedlightshadow\", \"threedshadow\", \"to\", \"top\",\n \"transform\", \"translate\", \"translate3d\", \"translateX\", \"translateY\", \"translateZ\", \"transparent\",\n \"ultra-condensed\", \"ultra-expanded\", \"underline\", \"unidirectional-pan\", \"unset\", \"up\", \"upper-latin\",\n \"uppercase\", \"url\", \"var\", \"vertical\", \"vertical-text\", \"view-box\", \"visible\", \"visibleFill\",\n \"visiblePainted\", \"visibleStroke\", \"visual\", \"w-resize\", \"wait\", \"wave\", \"wider\", \"window\", \"windowframe\",\n \"windowtext\", \"words\", \"wrap\", \"wrap-reverse\", \"x-large\", \"x-small\", \"xor\", \"xx-large\", \"xx-small\"\n].map(name => ({ type: \"keyword\", label: name })).concat(/*@__PURE__*/[\n \"aliceblue\", \"antiquewhite\", \"aqua\", \"aquamarine\", \"azure\", \"beige\",\n \"bisque\", \"black\", \"blanchedalmond\", \"blue\", \"blueviolet\", \"brown\",\n \"burlywood\", \"cadetblue\", \"chartreuse\", \"chocolate\", \"coral\", \"cornflowerblue\",\n \"cornsilk\", \"crimson\", \"cyan\", \"darkblue\", \"darkcyan\", \"darkgoldenrod\",\n \"darkgray\", \"darkgreen\", \"darkkhaki\", \"darkmagenta\", \"darkolivegreen\",\n \"darkorange\", \"darkorchid\", \"darkred\", \"darksalmon\", \"darkseagreen\",\n \"darkslateblue\", \"darkslategray\", \"darkturquoise\", \"darkviolet\",\n \"deeppink\", \"deepskyblue\", \"dimgray\", \"dodgerblue\", \"firebrick\",\n \"floralwhite\", \"forestgreen\", \"fuchsia\", \"gainsboro\", \"ghostwhite\",\n \"gold\", \"goldenrod\", \"gray\", \"grey\", \"green\", \"greenyellow\", \"honeydew\",\n \"hotpink\", \"indianred\", \"indigo\", \"ivory\", \"khaki\", \"lavender\",\n \"lavenderblush\", \"lawngreen\", \"lemonchiffon\", \"lightblue\", \"lightcoral\",\n \"lightcyan\", \"lightgoldenrodyellow\", \"lightgray\", \"lightgreen\", \"lightpink\",\n \"lightsalmon\", \"lightseagreen\", \"lightskyblue\", \"lightslategray\",\n \"lightsteelblue\", \"lightyellow\", \"lime\", \"limegreen\", \"linen\", \"magenta\",\n \"maroon\", \"mediumaquamarine\", \"mediumblue\", \"mediumorchid\", \"mediumpurple\",\n \"mediumseagreen\", \"mediumslateblue\", \"mediumspringgreen\", \"mediumturquoise\",\n \"mediumvioletred\", \"midnightblue\", \"mintcream\", \"mistyrose\", \"moccasin\",\n \"navajowhite\", \"navy\", \"oldlace\", \"olive\", \"olivedrab\", \"orange\", \"orangered\",\n \"orchid\", \"palegoldenrod\", \"palegreen\", \"paleturquoise\", \"palevioletred\",\n \"papayawhip\", \"peachpuff\", \"peru\", \"pink\", \"plum\", \"powderblue\",\n \"purple\", \"rebeccapurple\", \"red\", \"rosybrown\", \"royalblue\", \"saddlebrown\",\n \"salmon\", \"sandybrown\", \"seagreen\", \"seashell\", \"sienna\", \"silver\", \"skyblue\",\n \"slateblue\", \"slategray\", \"snow\", \"springgreen\", \"steelblue\", \"tan\",\n \"teal\", \"thistle\", \"tomato\", \"turquoise\", \"violet\", \"wheat\", \"white\",\n \"whitesmoke\", \"yellow\", \"yellowgreen\"\n].map(name => ({ type: \"constant\", label: name })));\nconst tags = /*@__PURE__*/[\n \"a\", \"abbr\", \"address\", \"article\", \"aside\", \"b\", \"bdi\", \"bdo\", \"blockquote\", \"body\",\n \"br\", \"button\", \"canvas\", \"caption\", \"cite\", \"code\", \"col\", \"colgroup\", \"dd\", \"del\",\n \"details\", \"dfn\", \"dialog\", \"div\", \"dl\", \"dt\", \"em\", \"figcaption\", \"figure\", \"footer\",\n \"form\", \"header\", \"hgroup\", \"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\", \"hr\", \"html\", \"i\", \"iframe\",\n \"img\", \"input\", \"ins\", \"kbd\", \"label\", \"legend\", \"li\", \"main\", \"meter\", \"nav\", \"ol\", \"output\",\n \"p\", \"pre\", \"ruby\", \"section\", \"select\", \"small\", \"source\", \"span\", \"strong\", \"sub\", \"summary\",\n \"sup\", \"table\", \"tbody\", \"td\", \"template\", \"textarea\", \"tfoot\", \"th\", \"thead\", \"tr\", \"u\", \"ul\"\n].map(name => ({ type: \"type\", label: name }));\nconst atRules = /*@__PURE__*/[\n \"@charset\", \"@color-profile\", \"@container\", \"@counter-style\", \"@font-face\", \"@font-feature-values\",\n \"@font-palette-values\", \"@import\", \"@keyframes\", \"@layer\", \"@media\", \"@namespace\", \"@page\",\n \"@position-try\", \"@property\", \"@scope\", \"@starting-style\", \"@supports\", \"@view-transition\"\n].map(label => ({ type: \"keyword\", label }));\nconst identifier = /^(\\w[\\w-]*|-\\w[\\w-]*|)$/, variable = /^-(-[\\w-]*)?$/;\nfunction isVarArg(node, doc) {\n var _a;\n if (node.name == \"(\" || node.type.isError)\n node = node.parent || node;\n if (node.name != \"ArgList\")\n return false;\n let callee = (_a = node.parent) === null || _a === void 0 ? void 0 : _a.firstChild;\n if ((callee === null || callee === void 0 ? void 0 : callee.name) != \"Callee\")\n return false;\n return doc.sliceString(callee.from, callee.to) == \"var\";\n}\nconst VariablesByNode = /*@__PURE__*/new NodeWeakMap();\nconst declSelector = [\"Declaration\"];\nfunction astTop(node) {\n for (let cur = node;;) {\n if (cur.type.isTop)\n return cur;\n if (!(cur = cur.parent))\n return node;\n }\n}\nfunction variableNames(doc, node, isVariable) {\n if (node.to - node.from > 4096) {\n let known = VariablesByNode.get(node);\n if (known)\n return known;\n let result = [], seen = new Set, cursor = node.cursor(IterMode.IncludeAnonymous);\n if (cursor.firstChild())\n do {\n for (let option of variableNames(doc, cursor.node, isVariable))\n if (!seen.has(option.label)) {\n seen.add(option.label);\n result.push(option);\n }\n } while (cursor.nextSibling());\n VariablesByNode.set(node, result);\n return result;\n }\n else {\n let result = [], seen = new Set;\n node.cursor().iterate(node => {\n var _a;\n if (isVariable(node) && node.matchContext(declSelector) && ((_a = node.node.nextSibling) === null || _a === void 0 ? void 0 : _a.name) == \":\") {\n let name = doc.sliceString(node.from, node.to);\n if (!seen.has(name)) {\n seen.add(name);\n result.push({ label: name, type: \"variable\" });\n }\n }\n });\n return result;\n }\n}\n/**\nCreate a completion source for a CSS dialect, providing a\npredicate for determining what kind of syntax node can act as a\ncompletable variable. This is used by language modes like Sass and\nLess to reuse this package's completion logic.\n*/\nconst defineCSSCompletionSource = (isVariable) => context => {\n let { state, pos } = context, node = syntaxTree(state).resolveInner(pos, -1);\n let isDash = node.type.isError && node.from == node.to - 1 && state.doc.sliceString(node.from, node.to) == \"-\";\n if (node.name == \"PropertyName\" ||\n (isDash || node.name == \"TagName\") && /^(Block|Styles)$/.test(node.resolve(node.to).name))\n return { from: node.from, options: properties(), validFor: identifier };\n if (node.name == \"ValueName\")\n return { from: node.from, options: values, validFor: identifier };\n if (node.name == \"PseudoClassName\")\n return { from: node.from, options: pseudoClasses, validFor: identifier };\n if (isVariable(node) || (context.explicit || isDash) && isVarArg(node, state.doc))\n return { from: isVariable(node) || isDash ? node.from : pos,\n options: variableNames(state.doc, astTop(node), isVariable),\n validFor: variable };\n if (node.name == \"TagName\") {\n for (let { parent } = node; parent; parent = parent.parent)\n if (parent.name == \"Block\")\n return { from: node.from, options: properties(), validFor: identifier };\n return { from: node.from, options: tags, validFor: identifier };\n }\n if (node.name == \"AtKeyword\")\n return { from: node.from, options: atRules, validFor: identifier };\n if (!context.explicit)\n return null;\n let above = node.resolve(pos), before = above.childBefore(pos);\n if (before && before.name == \":\" && above.name == \"PseudoClassSelector\")\n return { from: pos, options: pseudoClasses, validFor: identifier };\n if (before && before.name == \":\" && above.name == \"Declaration\" || above.name == \"ArgList\")\n return { from: pos, options: values, validFor: identifier };\n if (above.name == \"Block\" || above.name == \"Styles\")\n return { from: pos, options: properties(), validFor: identifier };\n return null;\n};\n/**\nCSS property, variable, and value keyword completion source.\n*/\nconst cssCompletionSource = /*@__PURE__*/defineCSSCompletionSource(n => n.name == \"VariableName\");\n\n/**\nA language provider based on the [Lezer CSS\nparser](https://github.com/lezer-parser/css), extended with\nhighlighting and indentation information.\n*/\nconst cssLanguage = /*@__PURE__*/LRLanguage.define({\n name: \"css\",\n parser: /*@__PURE__*/parser.configure({\n props: [\n /*@__PURE__*/indentNodeProp.add({\n Declaration: /*@__PURE__*/continuedIndent()\n }),\n /*@__PURE__*/foldNodeProp.add({\n \"Block KeyframeList\": foldInside\n })\n ]\n }),\n languageData: {\n commentTokens: { block: { open: \"/*\", close: \"*/\" } },\n indentOnInput: /^\\s*\\}$/,\n wordChars: \"-\"\n }\n});\n/**\nLanguage support for CSS.\n*/\nfunction css() {\n return new LanguageSupport(cssLanguage, cssLanguage.data.of({ autocomplete: cssCompletionSource }));\n}\n\nexport { css, cssCompletionSource, cssLanguage, defineCSSCompletionSource };\n","import { parser, configureNesting } from '@lezer/html';\nimport { cssLanguage, css } from '@codemirror/lang-css';\nimport { javascriptLanguage, typescriptLanguage, jsxLanguage, tsxLanguage, javascript } from '@codemirror/lang-javascript';\nimport { EditorView } from '@codemirror/view';\nimport { EditorSelection } from '@codemirror/state';\nimport { syntaxTree, LRLanguage, indentNodeProp, foldNodeProp, bracketMatchingHandle, LanguageSupport } from '@codemirror/language';\n\nconst Targets = [\"_blank\", \"_self\", \"_top\", \"_parent\"];\nconst Charsets = [\"ascii\", \"utf-8\", \"utf-16\", \"latin1\", \"latin1\"];\nconst Methods = [\"get\", \"post\", \"put\", \"delete\"];\nconst Encs = [\"application/x-www-form-urlencoded\", \"multipart/form-data\", \"text/plain\"];\nconst Bool = [\"true\", \"false\"];\nconst S = {}; // Empty tag spec\nconst Tags = {\n a: {\n attrs: {\n href: null, ping: null, type: null,\n media: null,\n target: Targets,\n hreflang: null\n }\n },\n abbr: S,\n address: S,\n area: {\n attrs: {\n alt: null, coords: null, href: null, target: null, ping: null,\n media: null, hreflang: null, type: null,\n shape: [\"default\", \"rect\", \"circle\", \"poly\"]\n }\n },\n article: S,\n aside: S,\n audio: {\n attrs: {\n src: null, mediagroup: null,\n crossorigin: [\"anonymous\", \"use-credentials\"],\n preload: [\"none\", \"metadata\", \"auto\"],\n autoplay: [\"autoplay\"],\n loop: [\"loop\"],\n controls: [\"controls\"]\n }\n },\n b: S,\n base: { attrs: { href: null, target: Targets } },\n bdi: S,\n bdo: S,\n blockquote: { attrs: { cite: null } },\n body: S,\n br: S,\n button: {\n attrs: {\n form: null, formaction: null, name: null, value: null,\n autofocus: [\"autofocus\"],\n disabled: [\"autofocus\"],\n formenctype: Encs,\n formmethod: Methods,\n formnovalidate: [\"novalidate\"],\n formtarget: Targets,\n type: [\"submit\", \"reset\", \"button\"]\n }\n },\n canvas: { attrs: { width: null, height: null } },\n caption: S,\n center: S,\n cite: S,\n code: S,\n col: { attrs: { span: null } },\n colgroup: { attrs: { span: null } },\n command: {\n attrs: {\n type: [\"command\", \"checkbox\", \"radio\"],\n label: null, icon: null, radiogroup: null, command: null, title: null,\n disabled: [\"disabled\"],\n checked: [\"checked\"]\n }\n },\n data: { attrs: { value: null } },\n datagrid: { attrs: { disabled: [\"disabled\"], multiple: [\"multiple\"] } },\n datalist: { attrs: { data: null } },\n dd: S,\n del: { attrs: { cite: null, datetime: null } },\n details: { attrs: { open: [\"open\"] } },\n dfn: S,\n div: S,\n dl: S,\n dt: S,\n em: S,\n embed: { attrs: { src: null, type: null, width: null, height: null } },\n eventsource: { attrs: { src: null } },\n fieldset: { attrs: { disabled: [\"disabled\"], form: null, name: null } },\n figcaption: S,\n figure: S,\n footer: S,\n form: {\n attrs: {\n action: null, name: null,\n \"accept-charset\": Charsets,\n autocomplete: [\"on\", \"off\"],\n enctype: Encs,\n method: Methods,\n novalidate: [\"novalidate\"],\n target: Targets\n }\n },\n h1: S, h2: S, h3: S, h4: S, h5: S, h6: S,\n head: {\n children: [\"title\", \"base\", \"link\", \"style\", \"meta\", \"script\", \"noscript\", \"command\"]\n },\n header: S,\n hgroup: S,\n hr: S,\n html: {\n attrs: { manifest: null }\n },\n i: S,\n iframe: {\n attrs: {\n src: null, srcdoc: null, name: null, width: null, height: null,\n sandbox: [\"allow-top-navigation\", \"allow-same-origin\", \"allow-forms\", \"allow-scripts\"],\n seamless: [\"seamless\"]\n }\n },\n img: {\n attrs: {\n alt: null, src: null, ismap: null, usemap: null, width: null, height: null,\n crossorigin: [\"anonymous\", \"use-credentials\"]\n }\n },\n input: {\n attrs: {\n alt: null, dirname: null, form: null, formaction: null,\n height: null, list: null, max: null, maxlength: null, min: null,\n name: null, pattern: null, placeholder: null, size: null, src: null,\n step: null, value: null, width: null,\n accept: [\"audio/*\", \"video/*\", \"image/*\"],\n autocomplete: [\"on\", \"off\"],\n autofocus: [\"autofocus\"],\n checked: [\"checked\"],\n disabled: [\"disabled\"],\n formenctype: Encs,\n formmethod: Methods,\n formnovalidate: [\"novalidate\"],\n formtarget: Targets,\n multiple: [\"multiple\"],\n readonly: [\"readonly\"],\n required: [\"required\"],\n type: [\"hidden\", \"text\", \"search\", \"tel\", \"url\", \"email\", \"password\", \"datetime\", \"date\", \"month\",\n \"week\", \"time\", \"datetime-local\", \"number\", \"range\", \"color\", \"checkbox\", \"radio\",\n \"file\", \"submit\", \"image\", \"reset\", \"button\"]\n }\n },\n ins: { attrs: { cite: null, datetime: null } },\n kbd: S,\n keygen: {\n attrs: {\n challenge: null, form: null, name: null,\n autofocus: [\"autofocus\"],\n disabled: [\"disabled\"],\n keytype: [\"RSA\"]\n }\n },\n label: { attrs: { for: null, form: null } },\n legend: S,\n li: { attrs: { value: null } },\n link: {\n attrs: {\n href: null, type: null,\n hreflang: null,\n media: null,\n sizes: [\"all\", \"16x16\", \"16x16 32x32\", \"16x16 32x32 64x64\"]\n }\n },\n map: { attrs: { name: null } },\n mark: S,\n menu: { attrs: { label: null, type: [\"list\", \"context\", \"toolbar\"] } },\n meta: {\n attrs: {\n content: null,\n charset: Charsets,\n name: [\"viewport\", \"application-name\", \"author\", \"description\", \"generator\", \"keywords\"],\n \"http-equiv\": [\"content-language\", \"content-type\", \"default-style\", \"refresh\"]\n }\n },\n meter: { attrs: { value: null, min: null, low: null, high: null, max: null, optimum: null } },\n nav: S,\n noscript: S,\n object: {\n attrs: {\n data: null, type: null, name: null, usemap: null, form: null, width: null, height: null,\n typemustmatch: [\"typemustmatch\"]\n }\n },\n ol: { attrs: { reversed: [\"reversed\"], start: null, type: [\"1\", \"a\", \"A\", \"i\", \"I\"] },\n children: [\"li\", \"script\", \"template\", \"ul\", \"ol\"] },\n optgroup: { attrs: { disabled: [\"disabled\"], label: null } },\n option: { attrs: { disabled: [\"disabled\"], label: null, selected: [\"selected\"], value: null } },\n output: { attrs: { for: null, form: null, name: null } },\n p: S,\n param: { attrs: { name: null, value: null } },\n pre: S,\n progress: { attrs: { value: null, max: null } },\n q: { attrs: { cite: null } },\n rp: S,\n rt: S,\n ruby: S,\n samp: S,\n script: {\n attrs: {\n type: [\"text/javascript\"],\n src: null,\n async: [\"async\"],\n defer: [\"defer\"],\n charset: Charsets\n }\n },\n section: S,\n select: {\n attrs: {\n form: null, name: null, size: null,\n autofocus: [\"autofocus\"],\n disabled: [\"disabled\"],\n multiple: [\"multiple\"]\n }\n },\n slot: { attrs: { name: null } },\n small: S,\n source: { attrs: { src: null, type: null, media: null } },\n span: S,\n strong: S,\n style: {\n attrs: {\n type: [\"text/css\"],\n media: null,\n scoped: null\n }\n },\n sub: S,\n summary: S,\n sup: S,\n table: S,\n tbody: S,\n td: { attrs: { colspan: null, rowspan: null, headers: null } },\n template: S,\n textarea: {\n attrs: {\n dirname: null, form: null, maxlength: null, name: null, placeholder: null,\n rows: null, cols: null,\n autofocus: [\"autofocus\"],\n disabled: [\"disabled\"],\n readonly: [\"readonly\"],\n required: [\"required\"],\n wrap: [\"soft\", \"hard\"]\n }\n },\n tfoot: S,\n th: { attrs: { colspan: null, rowspan: null, headers: null, scope: [\"row\", \"col\", \"rowgroup\", \"colgroup\"] } },\n thead: S,\n time: { attrs: { datetime: null } },\n title: S,\n tr: S,\n track: {\n attrs: {\n src: null, label: null, default: null,\n kind: [\"subtitles\", \"captions\", \"descriptions\", \"chapters\", \"metadata\"],\n srclang: null\n }\n },\n ul: { children: [\"li\", \"script\", \"template\", \"ul\", \"ol\"] },\n var: S,\n video: {\n attrs: {\n src: null, poster: null, width: null, height: null,\n crossorigin: [\"anonymous\", \"use-credentials\"],\n preload: [\"auto\", \"metadata\", \"none\"],\n autoplay: [\"autoplay\"],\n mediagroup: [\"movie\"],\n muted: [\"muted\"],\n controls: [\"controls\"]\n }\n },\n wbr: S\n};\nconst GlobalAttrs = {\n accesskey: null,\n class: null,\n contenteditable: Bool,\n contextmenu: null,\n dir: [\"ltr\", \"rtl\", \"auto\"],\n draggable: [\"true\", \"false\", \"auto\"],\n dropzone: [\"copy\", \"move\", \"link\", \"string:\", \"file:\"],\n hidden: [\"hidden\"],\n id: null,\n inert: [\"inert\"],\n itemid: null,\n itemprop: null,\n itemref: null,\n itemscope: [\"itemscope\"],\n itemtype: null,\n lang: [\"ar\", \"bn\", \"de\", \"en-GB\", \"en-US\", \"es\", \"fr\", \"hi\", \"id\", \"ja\", \"pa\", \"pt\", \"ru\", \"tr\", \"zh\"],\n spellcheck: Bool,\n autocorrect: Bool,\n autocapitalize: Bool,\n style: null,\n tabindex: null,\n title: null,\n translate: [\"yes\", \"no\"],\n rel: [\"stylesheet\", \"alternate\", \"author\", \"bookmark\", \"help\", \"license\", \"next\", \"nofollow\", \"noreferrer\", \"prefetch\", \"prev\", \"search\", \"tag\"],\n role: /*@__PURE__*/\"alert application article banner button cell checkbox complementary contentinfo dialog document feed figure form grid gridcell heading img list listbox listitem main navigation region row rowgroup search switch tab table tabpanel textbox timer\".split(\" \"),\n \"aria-activedescendant\": null,\n \"aria-atomic\": Bool,\n \"aria-autocomplete\": [\"inline\", \"list\", \"both\", \"none\"],\n \"aria-busy\": Bool,\n \"aria-checked\": [\"true\", \"false\", \"mixed\", \"undefined\"],\n \"aria-controls\": null,\n \"aria-describedby\": null,\n \"aria-disabled\": Bool,\n \"aria-dropeffect\": null,\n \"aria-expanded\": [\"true\", \"false\", \"undefined\"],\n \"aria-flowto\": null,\n \"aria-grabbed\": [\"true\", \"false\", \"undefined\"],\n \"aria-haspopup\": Bool,\n \"aria-hidden\": Bool,\n \"aria-invalid\": [\"true\", \"false\", \"grammar\", \"spelling\"],\n \"aria-label\": null,\n \"aria-labelledby\": null,\n \"aria-level\": null,\n \"aria-live\": [\"off\", \"polite\", \"assertive\"],\n \"aria-multiline\": Bool,\n \"aria-multiselectable\": Bool,\n \"aria-owns\": null,\n \"aria-posinset\": null,\n \"aria-pressed\": [\"true\", \"false\", \"mixed\", \"undefined\"],\n \"aria-readonly\": Bool,\n \"aria-relevant\": null,\n \"aria-required\": Bool,\n \"aria-selected\": [\"true\", \"false\", \"undefined\"],\n \"aria-setsize\": null,\n \"aria-sort\": [\"ascending\", \"descending\", \"none\", \"other\"],\n \"aria-valuemax\": null,\n \"aria-valuemin\": null,\n \"aria-valuenow\": null,\n \"aria-valuetext\": null\n};\nconst eventAttributes = /*@__PURE__*/(\"beforeunload copy cut dragstart dragover dragleave dragenter dragend \" +\n \"drag paste focus blur change click load mousedown mouseenter mouseleave \" +\n \"mouseup keydown keyup resize scroll unload\").split(\" \").map(n => \"on\" + n);\nfor (let a of eventAttributes)\n GlobalAttrs[a] = null;\nclass Schema {\n constructor(extraTags, extraAttrs) {\n this.tags = { ...Tags, ...extraTags };\n this.globalAttrs = { ...GlobalAttrs, ...extraAttrs };\n this.allTags = Object.keys(this.tags);\n this.globalAttrNames = Object.keys(this.globalAttrs);\n }\n}\nSchema.default = /*@__PURE__*/new Schema;\nfunction elementName(doc, tree, max = doc.length) {\n if (!tree)\n return \"\";\n let tag = tree.firstChild;\n let name = tag && tag.getChild(\"TagName\");\n return name ? doc.sliceString(name.from, Math.min(name.to, max)) : \"\";\n}\nfunction findParentElement(tree, skip = false) {\n for (; tree; tree = tree.parent)\n if (tree.name == \"Element\") {\n if (skip)\n skip = false;\n else\n return tree;\n }\n return null;\n}\nfunction allowedChildren(doc, tree, schema) {\n let parentInfo = schema.tags[elementName(doc, findParentElement(tree))];\n return (parentInfo === null || parentInfo === void 0 ? void 0 : parentInfo.children) || schema.allTags;\n}\nfunction openTags(doc, tree) {\n let open = [];\n for (let parent = findParentElement(tree); parent && !parent.type.isTop; parent = findParentElement(parent.parent)) {\n let tagName = elementName(doc, parent);\n if (tagName && parent.lastChild.name == \"CloseTag\")\n break;\n if (tagName && open.indexOf(tagName) < 0 && (tree.name == \"EndTag\" || tree.from >= parent.firstChild.to))\n open.push(tagName);\n }\n return open;\n}\nconst identifier = /^[:\\-\\.\\w\\u00b7-\\uffff]*$/;\nfunction completeTag(state, schema, tree, from, to) {\n let end = /\\s*>/.test(state.sliceDoc(to, to + 5)) ? \"\" : \">\";\n let parent = findParentElement(tree, tree.name == \"StartTag\" || tree.name == \"TagName\");\n return { from, to,\n options: allowedChildren(state.doc, parent, schema).map(tagName => ({ label: tagName, type: \"type\" })).concat(openTags(state.doc, tree).map((tag, i) => ({ label: \"/\" + tag, apply: \"/\" + tag + end,\n type: \"type\", boost: 99 - i }))),\n validFor: /^\\/?[:\\-\\.\\w\\u00b7-\\uffff]*$/ };\n}\nfunction completeCloseTag(state, tree, from, to) {\n let end = /\\s*>/.test(state.sliceDoc(to, to + 5)) ? \"\" : \">\";\n return { from, to,\n options: openTags(state.doc, tree).map((tag, i) => ({ label: tag, apply: tag + end, type: \"type\", boost: 99 - i })),\n validFor: identifier };\n}\nfunction completeStartTag(state, schema, tree, pos) {\n let options = [], level = 0;\n for (let tagName of allowedChildren(state.doc, tree, schema))\n options.push({ label: \"<\" + tagName, type: \"type\" });\n for (let open of openTags(state.doc, tree))\n options.push({ label: \"</\" + open + \">\", type: \"type\", boost: 99 - level++ });\n return { from: pos, to: pos, options, validFor: /^<\\/?[:\\-\\.\\w\\u00b7-\\uffff]*$/ };\n}\nfunction completeAttrName(state, schema, tree, from, to) {\n let elt = findParentElement(tree), info = elt ? schema.tags[elementName(state.doc, elt)] : null;\n let localAttrs = info && info.attrs ? Object.keys(info.attrs) : [];\n let names = info && info.globalAttrs === false ? localAttrs\n : localAttrs.length ? localAttrs.concat(schema.globalAttrNames) : schema.globalAttrNames;\n return { from, to,\n options: names.map(attrName => ({ label: attrName, type: \"property\" })),\n validFor: identifier };\n}\nfunction completeAttrValue(state, schema, tree, from, to) {\n var _a;\n let nameNode = (_a = tree.parent) === null || _a === void 0 ? void 0 : _a.getChild(\"AttributeName\");\n let options = [], token = undefined;\n if (nameNode) {\n let attrName = state.sliceDoc(nameNode.from, nameNode.to);\n let attrs = schema.globalAttrs[attrName];\n if (!attrs) {\n let elt = findParentElement(tree), info = elt ? schema.tags[elementName(state.doc, elt)] : null;\n attrs = (info === null || info === void 0 ? void 0 : info.attrs) && info.attrs[attrName];\n }\n if (attrs) {\n let base = state.sliceDoc(from, to).toLowerCase(), quoteStart = '\"', quoteEnd = '\"';\n if (/^['\"]/.test(base)) {\n token = base[0] == '\"' ? /^[^\"]*$/ : /^[^']*$/;\n quoteStart = \"\";\n quoteEnd = state.sliceDoc(to, to + 1) == base[0] ? \"\" : base[0];\n base = base.slice(1);\n from++;\n }\n else {\n token = /^[^\\s<>='\"]*$/;\n }\n for (let value of attrs)\n options.push({ label: value, apply: quoteStart + value + quoteEnd, type: \"constant\" });\n }\n }\n return { from, to, options, validFor: token };\n}\nfunction htmlCompletionFor(schema, context) {\n let { state, pos } = context, tree = syntaxTree(state).resolveInner(pos, -1), around = tree.resolve(pos);\n for (let scan = pos, before; around == tree && (before = tree.childBefore(scan));) {\n let last = before.lastChild;\n if (!last || !last.type.isError || last.from < last.to)\n break;\n around = tree = before;\n scan = last.from;\n }\n if (tree.name == \"TagName\") {\n return tree.parent && /CloseTag$/.test(tree.parent.name) ? completeCloseTag(state, tree, tree.from, pos)\n : completeTag(state, schema, tree, tree.from, pos);\n }\n else if (tree.name == \"StartTag\" || tree.name == \"IncompleteTag\") {\n return completeTag(state, schema, tree, pos, pos);\n }\n else if (tree.name == \"StartCloseTag\" || tree.name == \"IncompleteCloseTag\") {\n return completeCloseTag(state, tree, pos, pos);\n }\n else if (tree.name == \"OpenTag\" || tree.name == \"SelfClosingTag\" || tree.name == \"AttributeName\") {\n return completeAttrName(state, schema, tree, tree.name == \"AttributeName\" ? tree.from : pos, pos);\n }\n else if (tree.name == \"Is\" || tree.name == \"AttributeValue\" || tree.name == \"UnquotedAttributeValue\") {\n return completeAttrValue(state, schema, tree, tree.name == \"Is\" ? pos : tree.from, pos);\n }\n else if (context.explicit && (around.name == \"Element\" || around.name == \"Text\" || around.name == \"Document\")) {\n return completeStartTag(state, schema, tree, pos);\n }\n else {\n return null;\n }\n}\n/**\nHTML tag completion. Opens and closes tags and attributes in a\ncontext-aware way.\n*/\nfunction htmlCompletionSource(context) {\n return htmlCompletionFor(Schema.default, context);\n}\n/**\nCreate a completion source for HTML extended with additional tags\nor attributes.\n*/\nfunction htmlCompletionSourceWith(config) {\n let { extraTags, extraGlobalAttributes: extraAttrs } = config;\n let schema = extraAttrs || extraTags ? new Schema(extraTags, extraAttrs) : Schema.default;\n return (context) => htmlCompletionFor(schema, context);\n}\n\nconst jsonParser = /*@__PURE__*/javascriptLanguage.parser.configure({ top: \"SingleExpression\" });\nconst defaultNesting = [\n { tag: \"script\",\n attrs: attrs => attrs.type == \"text/typescript\" || attrs.lang == \"ts\",\n parser: typescriptLanguage.parser },\n { tag: \"script\",\n attrs: attrs => attrs.type == \"text/babel\" || attrs.type == \"text/jsx\",\n parser: jsxLanguage.parser },\n { tag: \"script\",\n attrs: attrs => attrs.type == \"text/typescript-jsx\",\n parser: tsxLanguage.parser },\n { tag: \"script\",\n attrs(attrs) {\n return /^(importmap|speculationrules|application\\/(.+\\+)?json)$/i.test(attrs.type);\n },\n parser: jsonParser },\n { tag: \"script\",\n attrs(attrs) {\n return !attrs.type || /^(?:text|application)\\/(?:x-)?(?:java|ecma)script$|^module$|^$/i.test(attrs.type);\n },\n parser: javascriptLanguage.parser },\n { tag: \"style\",\n attrs(attrs) {\n return (!attrs.lang || attrs.lang == \"css\") && (!attrs.type || /^(text\\/)?(x-)?(stylesheet|css)$/i.test(attrs.type));\n },\n parser: cssLanguage.parser }\n];\nconst defaultAttrs = /*@__PURE__*/[\n { name: \"style\",\n parser: /*@__PURE__*/cssLanguage.parser.configure({ top: \"Styles\" }) }\n].concat(/*@__PURE__*/eventAttributes.map(name => ({ name, parser: javascriptLanguage.parser })));\nconst htmlPlain = /*@__PURE__*/LRLanguage.define({\n name: \"html\",\n parser: /*@__PURE__*/parser.configure({\n props: [\n /*@__PURE__*/indentNodeProp.add({\n Element(context) {\n let after = /^(\\s*)(<\\/)?/.exec(context.textAfter);\n if (context.node.to <= context.pos + after[0].length)\n return context.continue();\n return context.lineIndent(context.node.from) + (after[2] ? 0 : context.unit);\n },\n \"OpenTag CloseTag SelfClosingTag\"(context) {\n return context.column(context.node.from) + context.unit;\n },\n Document(context) {\n if (context.pos + /\\s*/.exec(context.textAfter)[0].length < context.node.to)\n return context.continue();\n let endElt = null, close;\n for (let cur = context.node;;) {\n let last = cur.lastChild;\n if (!last || last.name != \"Element\" || last.to != cur.to)\n break;\n endElt = cur = last;\n }\n if (endElt && !((close = endElt.lastChild) && (close.name == \"CloseTag\" || close.name == \"SelfClosingTag\")))\n return context.lineIndent(endElt.from) + context.unit;\n return null;\n }\n }),\n /*@__PURE__*/foldNodeProp.add({\n Element(node) {\n let first = node.firstChild, last = node.lastChild;\n if (!first || first.name != \"OpenTag\")\n return null;\n return { from: first.to, to: last.name == \"CloseTag\" ? last.from : node.to };\n }\n }),\n /*@__PURE__*/bracketMatchingHandle.add({\n \"OpenTag CloseTag\": node => node.getChild(\"TagName\")\n })\n ]\n }),\n languageData: {\n commentTokens: { block: { open: \"<!--\", close: \"-->\" } },\n indentOnInput: /^\\s*<\\/\\w+\\W$/,\n wordChars: \"-_\"\n }\n});\n/**\nA language provider based on the [Lezer HTML\nparser](https://github.com/lezer-parser/html), extended with the\nJavaScript and CSS parsers to parse the content of `<script>` and\n`<style>` tags.\n*/\nconst htmlLanguage = /*@__PURE__*/htmlPlain.configure({\n wrap: /*@__PURE__*/configureNesting(defaultNesting, defaultAttrs)\n});\n/**\nLanguage support for HTML, including\n[`htmlCompletion`](https://codemirror.net/6/docs/ref/#lang-html.htmlCompletion) and JavaScript and\nCSS support extensions.\n*/\nfunction html(config = {}) {\n let dialect = \"\", wrap;\n if (config.matchClosingTags === false)\n dialect = \"noMatch\";\n if (config.selfClosingTags === true)\n dialect = (dialect ? dialect + \" \" : \"\") + \"selfClosing\";\n if (config.nestedLanguages && config.nestedLanguages.length ||\n config.nestedAttributes && config.nestedAttributes.length)\n wrap = configureNesting((config.nestedLanguages || []).concat(defaultNesting), (config.nestedAttributes || []).concat(defaultAttrs));\n let lang = wrap ? htmlPlain.configure({ wrap, dialect }) : dialect ? htmlLanguage.configure({ dialect }) : htmlLanguage;\n return new LanguageSupport(lang, [\n htmlLanguage.data.of({ autocomplete: htmlCompletionSourceWith(config) }),\n config.autoCloseTags !== false ? autoCloseTags : [],\n javascript().support,\n css().support\n ]);\n}\nconst selfClosers = /*@__PURE__*/new Set(/*@__PURE__*/\"area base br col command embed frame hr img input keygen link meta param source track wbr menuitem\".split(\" \"));\n/**\nExtension that will automatically insert close tags when a `>` or\n`/` is typed.\n*/\nconst autoCloseTags = /*@__PURE__*/EditorView.inputHandler.of((view, from, to, text, insertTransaction) => {\n if (view.composing || view.state.readOnly || from != to || (text != \">\" && text != \"/\") ||\n !htmlLanguage.isActiveAt(view.state, from, -1))\n return false;\n let base = insertTransaction(), { state } = base;\n let closeTags = state.changeByRange(range => {\n var _a, _b, _c;\n let didType = state.doc.sliceString(range.from - 1, range.to) == text;\n let { head } = range, after = syntaxTree(state).resolveInner(head, -1), name;\n if (didType && text == \">\" && after.name == \"EndTag\") {\n let tag = after.parent;\n if (((_b = (_a = tag.parent) === null || _a === void 0 ? void 0 : _a.lastChild) === null || _b === void 0 ? void 0 : _b.name) != \"CloseTag\" &&\n (name = elementName(state.doc, tag.parent, head)) &&\n !selfClosers.has(name)) {\n let to = head + (state.doc.sliceString(head, head + 1) === \">\" ? 1 : 0);\n let insert = `</${name}>`;\n return { range, changes: { from: head, to, insert } };\n }\n }\n else if (didType && text == \"/\" && after.name == \"IncompleteCloseTag\") {\n let tag = after.parent;\n if (after.from == head - 2 && ((_c = tag.lastChild) === null || _c === void 0 ? void 0 : _c.name) != \"CloseTag\" &&\n (name = elementName(state.doc, tag, head)) && !selfClosers.has(name)) {\n let to = head + (state.doc.sliceString(head, head + 1) === \">\" ? 1 : 0);\n let insert = `${name}>`;\n return {\n range: EditorSelection.cursor(head + insert.length, -1),\n changes: { from: head, to, insert }\n };\n }\n }\n return { range };\n });\n if (closeTags.changes.empty)\n return false;\n view.dispatch([\n base,\n state.update(closeTags, {\n userEvent: \"input.complete\",\n scrollIntoView: true\n })\n ]);\n return true;\n});\n\nexport { autoCloseTags, html, htmlCompletionSource, htmlCompletionSourceWith, htmlLanguage };\n","import { parser } from '@lezer/javascript';\nimport { syntaxTree, LRLanguage, indentNodeProp, continuedIndent, flatIndent, delimitedIndent, foldNodeProp, foldInside, defineLanguageFacet, sublanguageProp, LanguageSupport } from '@codemirror/language';\nimport { EditorSelection } from '@codemirror/state';\nimport { EditorView } from '@codemirror/view';\nimport { snippetCompletion, ifNotIn, completeFromList } from '@codemirror/autocomplete';\nimport { NodeWeakMap, IterMode } from '@lezer/common';\n\n/**\nA collection of JavaScript-related\n[snippets](https://codemirror.net/6/docs/ref/#autocomplete.snippet).\n*/\nconst snippets = [\n /*@__PURE__*/snippetCompletion(\"function ${name}(${params}) {\\n\\t${}\\n}\", {\n label: \"function\",\n detail: \"definition\",\n type: \"keyword\"\n }),\n /*@__PURE__*/snippetCompletion(\"for (let ${index} = 0; ${index} < ${bound}; ${index}++) {\\n\\t${}\\n}\", {\n label: \"for\",\n detail: \"loop\",\n type: \"keyword\"\n }),\n /*@__PURE__*/snippetCompletion(\"for (let ${name} of ${collection}) {\\n\\t${}\\n}\", {\n label: \"for\",\n detail: \"of loop\",\n type: \"keyword\"\n }),\n /*@__PURE__*/snippetCompletion(\"do {\\n\\t${}\\n} while (${})\", {\n label: \"do\",\n detail: \"loop\",\n type: \"keyword\"\n }),\n /*@__PURE__*/snippetCompletion(\"while (${}) {\\n\\t${}\\n}\", {\n label: \"while\",\n detail: \"loop\",\n type: \"keyword\"\n }),\n /*@__PURE__*/snippetCompletion(\"try {\\n\\t${}\\n} catch (${error}) {\\n\\t${}\\n}\", {\n label: \"try\",\n detail: \"/ catch block\",\n type: \"keyword\"\n }),\n /*@__PURE__*/snippetCompletion(\"if (${}) {\\n\\t${}\\n}\", {\n label: \"if\",\n detail: \"block\",\n type: \"keyword\"\n }),\n /*@__PURE__*/snippetCompletion(\"if (${}) {\\n\\t${}\\n} else {\\n\\t${}\\n}\", {\n label: \"if\",\n detail: \"/ else block\",\n type: \"keyword\"\n }),\n /*@__PURE__*/snippetCompletion(\"class ${name} {\\n\\tconstructor(${params}) {\\n\\t\\t${}\\n\\t}\\n}\", {\n label: \"class\",\n detail: \"definition\",\n type: \"keyword\"\n }),\n /*@__PURE__*/snippetCompletion(\"import {${names}} from \\\"${module}\\\"\\n${}\", {\n label: \"import\",\n detail: \"named\",\n type: \"keyword\"\n }),\n /*@__PURE__*/snippetCompletion(\"import ${name} from \\\"${module}\\\"\\n${}\", {\n label: \"import\",\n detail: \"default\",\n type: \"keyword\"\n })\n];\n/**\nA collection of snippet completions for TypeScript. Includes the\nJavaScript [snippets](https://codemirror.net/6/docs/ref/#lang-javascript.snippets).\n*/\nconst typescriptSnippets = /*@__PURE__*/snippets.concat([\n /*@__PURE__*/snippetCompletion(\"interface ${name} {\\n\\t${}\\n}\", {\n label: \"interface\",\n detail: \"definition\",\n type: \"keyword\"\n }),\n /*@__PURE__*/snippetCompletion(\"type ${name} = ${type}\", {\n label: \"type\",\n detail: \"definition\",\n type: \"keyword\"\n }),\n /*@__PURE__*/snippetCompletion(\"enum ${name} {\\n\\t${}\\n}\", {\n label: \"enum\",\n detail: \"definition\",\n type: \"keyword\"\n })\n]);\n\nconst cache = /*@__PURE__*/new NodeWeakMap();\nconst ScopeNodes = /*@__PURE__*/new Set([\n \"Script\", \"Block\",\n \"FunctionExpression\", \"FunctionDeclaration\", \"ArrowFunction\", \"MethodDeclaration\",\n \"ForStatement\"\n]);\nfunction defID(type) {\n return (node, def) => {\n let id = node.node.getChild(\"VariableDefinition\");\n if (id)\n def(id, type);\n return true;\n };\n}\nconst functionContext = [\"FunctionDeclaration\"];\nconst gatherCompletions = {\n FunctionDeclaration: /*@__PURE__*/defID(\"function\"),\n ClassDeclaration: /*@__PURE__*/defID(\"class\"),\n ClassExpression: () => true,\n EnumDeclaration: /*@__PURE__*/defID(\"constant\"),\n TypeAliasDeclaration: /*@__PURE__*/defID(\"type\"),\n NamespaceDeclaration: /*@__PURE__*/defID(\"namespace\"),\n VariableDefinition(node, def) { if (!node.matchContext(functionContext))\n def(node, \"variable\"); },\n TypeDefinition(node, def) { def(node, \"type\"); },\n __proto__: null\n};\nfunction getScope(doc, node) {\n let cached = cache.get(node);\n if (cached)\n return cached;\n let completions = [], top = true;\n function def(node, type) {\n let name = doc.sliceString(node.from, node.to);\n completions.push({ label: name, type });\n }\n node.cursor(IterMode.IncludeAnonymous).iterate(node => {\n if (top) {\n top = false;\n }\n else if (node.name) {\n let gather = gatherCompletions[node.name];\n if (gather && gather(node, def) || ScopeNodes.has(node.name))\n return false;\n }\n else if (node.to - node.from > 8192) {\n // Allow caching for bigger internal nodes\n for (let c of getScope(doc, node.node))\n completions.push(c);\n return false;\n }\n });\n cache.set(node, completions);\n return completions;\n}\nconst Identifier = /^[\\w$\\xa1-\\uffff][\\w$\\d\\xa1-\\uffff]*$/;\nconst dontComplete = [\n \"TemplateString\", \"String\", \"RegExp\",\n \"LineComment\", \"BlockComment\",\n \"VariableDefinition\", \"TypeDefinition\", \"Label\",\n \"PropertyDefinition\", \"PropertyName\",\n \"PrivatePropertyDefinition\", \"PrivatePropertyName\",\n \"JSXText\", \"JSXAttributeValue\", \"JSXOpenTag\", \"JSXCloseTag\", \"JSXSelfClosingTag\",\n \".\", \"?.\"\n];\n/**\nCompletion source that looks up locally defined names in\nJavaScript code.\n*/\nfunction localCompletionSource(context) {\n let inner = syntaxTree(context.state).resolveInner(context.pos, -1);\n if (dontComplete.indexOf(inner.name) > -1)\n return null;\n let isWord = inner.name == \"VariableName\" ||\n inner.to - inner.from < 20 && Identifier.test(context.state.sliceDoc(inner.from, inner.to));\n if (!isWord && !context.explicit)\n return null;\n let options = [];\n for (let pos = inner; pos; pos = pos.parent) {\n if (ScopeNodes.has(pos.name))\n options = options.concat(getScope(context.state.doc, pos));\n }\n return {\n options,\n from: isWord ? inner.from : context.pos,\n validFor: Identifier\n };\n}\nfunction pathFor(read, member, name) {\n var _a;\n let path = [];\n for (;;) {\n let obj = member.firstChild, prop;\n if ((obj === null || obj === void 0 ? void 0 : obj.name) == \"VariableName\") {\n path.push(read(obj));\n return { path: path.reverse(), name };\n }\n else if ((obj === null || obj === void 0 ? void 0 : obj.name) == \"MemberExpression\" && ((_a = (prop = obj.lastChild)) === null || _a === void 0 ? void 0 : _a.name) == \"PropertyName\") {\n path.push(read(prop));\n member = obj;\n }\n else {\n return null;\n }\n }\n}\n/**\nHelper function for defining JavaScript completion sources. It\nreturns the completable name and object path for a completion\ncontext, or null if no name/property completion should happen at\nthat position. For example, when completing after `a.b.c` it will\nreturn `{path: [\"a\", \"b\"], name: \"c\"}`. When completing after `x`\nit will return `{path: [], name: \"x\"}`. When not in a property or\nname, it will return null if `context.explicit` is false, and\n`{path: [], name: \"\"}` otherwise.\n*/\nfunction completionPath(context) {\n let read = (node) => context.state.doc.sliceString(node.from, node.to);\n let inner = syntaxTree(context.state).resolveInner(context.pos, -1);\n if (inner.name == \"PropertyName\") {\n return pathFor(read, inner.parent, read(inner));\n }\n else if ((inner.name == \".\" || inner.name == \"?.\") && inner.parent.name == \"MemberExpression\") {\n return pathFor(read, inner.parent, \"\");\n }\n else if (dontComplete.indexOf(inner.name) > -1) {\n return null;\n }\n else if (inner.name == \"VariableName\" || inner.to - inner.from < 20 && Identifier.test(read(inner))) {\n return { path: [], name: read(inner) };\n }\n else if (inner.name == \"MemberExpression\") {\n return pathFor(read, inner, \"\");\n }\n else {\n return context.explicit ? { path: [], name: \"\" } : null;\n }\n}\nfunction enumeratePropertyCompletions(obj, top) {\n let options = [], seen = new Set;\n for (let depth = 0;; depth++) {\n for (let name of (Object.getOwnPropertyNames || Object.keys)(obj)) {\n if (!/^[a-zA-Z_$\\xaa-\\uffdc][\\w$\\xaa-\\uffdc]*$/.test(name) || seen.has(name))\n continue;\n seen.add(name);\n let value;\n try {\n value = obj[name];\n }\n catch (_) {\n continue;\n }\n options.push({\n label: name,\n type: typeof value == \"function\" ? (/^[A-Z]/.test(name) ? \"class\" : top ? \"function\" : \"method\")\n : top ? \"variable\" : \"property\",\n boost: -depth\n });\n }\n let next = Object.getPrototypeOf(obj);\n if (!next)\n return options;\n obj = next;\n }\n}\n/**\nDefines a [completion source](https://codemirror.net/6/docs/ref/#autocomplete.CompletionSource) that\ncompletes from the given scope object (for example `globalThis`).\nWill enter properties of the object when completing properties on\na directly-named path.\n*/\nfunction scopeCompletionSource(scope) {\n let cache = new Map;\n return (context) => {\n let path = completionPath(context);\n if (!path)\n return null;\n let target = scope;\n for (let step of path.path) {\n target = target[step];\n if (!target)\n return null;\n }\n let options = cache.get(target);\n if (!options)\n cache.set(target, options = enumeratePropertyCompletions(target, !path.path.length));\n return {\n from: context.pos - path.name.length,\n options,\n validFor: Identifier\n };\n };\n}\n\n/**\nA language provider based on the [Lezer JavaScript\nparser](https://github.com/lezer-parser/javascript), extended with\nhighlighting and indentation information.\n*/\nconst javascriptLanguage = /*@__PURE__*/LRLanguage.define({\n name: \"javascript\",\n parser: /*@__PURE__*/parser.configure({\n props: [\n /*@__PURE__*/indentNodeProp.add({\n IfStatement: /*@__PURE__*/continuedIndent({ except: /^\\s*({|else\\b)/ }),\n TryStatement: /*@__PURE__*/continuedIndent({ except: /^\\s*({|catch\\b|finally\\b)/ }),\n LabeledStatement: flatIndent,\n SwitchBody: context => {\n let after = context.textAfter, closed = /^\\s*\\}/.test(after), isCase = /^\\s*(case|default)\\b/.test(after);\n return context.baseIndent + (closed ? 0 : isCase ? 1 : 2) * context.unit;\n },\n Block: /*@__PURE__*/delimitedIndent({ closing: \"}\" }),\n ArrowFunction: cx => cx.baseIndent + cx.unit,\n \"TemplateString BlockComment\": () => null,\n \"Statement Property\": /*@__PURE__*/continuedIndent({ except: /^\\s*{/ }),\n JSXElement(context) {\n let closed = /^\\s*<\\//.test(context.textAfter);\n return context.lineIndent(context.node.from) + (closed ? 0 : context.unit);\n },\n JSXEscape(context) {\n let closed = /\\s*\\}/.test(context.textAfter);\n return context.lineIndent(context.node.from) + (closed ? 0 : context.unit);\n },\n \"JSXOpenTag JSXSelfClosingTag\"(context) {\n return context.column(context.node.from) + context.unit;\n }\n }),\n /*@__PURE__*/foldNodeProp.add({\n \"Block ClassBody SwitchBody EnumBody ObjectExpression ArrayExpression ObjectType\": foldInside,\n BlockComment(tree) { return { from: tree.from + 2, to: tree.to - 2 }; }\n })\n ]\n }),\n languageData: {\n closeBrackets: { brackets: [\"(\", \"[\", \"{\", \"'\", '\"', \"`\"] },\n commentTokens: { line: \"//\", block: { open: \"/*\", close: \"*/\" } },\n indentOnInput: /^\\s*(?:case |default:|\\{|\\}|<\\/)$/,\n wordChars: \"$\"\n }\n});\nconst jsxSublanguage = {\n test: node => /^JSX/.test(node.name),\n facet: /*@__PURE__*/defineLanguageFacet({ commentTokens: { block: { open: \"{/*\", close: \"*/}\" } } })\n};\n/**\nA language provider for TypeScript.\n*/\nconst typescriptLanguage = /*@__PURE__*/javascriptLanguage.configure({ dialect: \"ts\" }, \"typescript\");\n/**\nLanguage provider for JSX.\n*/\nconst jsxLanguage = /*@__PURE__*/javascriptLanguage.configure({\n dialect: \"jsx\",\n props: [/*@__PURE__*/sublanguageProp.add(n => n.isTop ? [jsxSublanguage] : undefined)]\n});\n/**\nLanguage provider for JSX + TypeScript.\n*/\nconst tsxLanguage = /*@__PURE__*/javascriptLanguage.configure({\n dialect: \"jsx ts\",\n props: [/*@__PURE__*/sublanguageProp.add(n => n.isTop ? [jsxSublanguage] : undefined)]\n}, \"typescript\");\nlet kwCompletion = (name) => ({ label: name, type: \"keyword\" });\nconst keywords = /*@__PURE__*/\"break case const continue default delete export extends false finally in instanceof let new return static super switch this throw true typeof var yield\".split(\" \").map(kwCompletion);\nconst typescriptKeywords = /*@__PURE__*/keywords.concat(/*@__PURE__*/[\"declare\", \"implements\", \"private\", \"protected\", \"public\"].map(kwCompletion));\n/**\nJavaScript support. Includes [snippet](https://codemirror.net/6/docs/ref/#lang-javascript.snippets)\nand local variable completion.\n*/\nfunction javascript(config = {}) {\n let lang = config.jsx ? (config.typescript ? tsxLanguage : jsxLanguage)\n : config.typescript ? typescriptLanguage : javascriptLanguage;\n let completions = config.typescript ? typescriptSnippets.concat(typescriptKeywords) : snippets.concat(keywords);\n return new LanguageSupport(lang, [\n javascriptLanguage.data.of({\n autocomplete: ifNotIn(dontComplete, completeFromList(completions))\n }),\n javascriptLanguage.data.of({\n autocomplete: localCompletionSource\n }),\n config.jsx ? autoCloseTags : [],\n ]);\n}\nfunction findOpenTag(node) {\n for (;;) {\n if (node.name == \"JSXOpenTag\" || node.name == \"JSXSelfClosingTag\" || node.name == \"JSXFragmentTag\")\n return node;\n if (node.name == \"JSXEscape\" || !node.parent)\n return null;\n node = node.parent;\n }\n}\nfunction elementName(doc, tree, max = doc.length) {\n for (let ch = tree === null || tree === void 0 ? void 0 : tree.firstChild; ch; ch = ch.nextSibling) {\n if (ch.name == \"JSXIdentifier\" || ch.name == \"JSXBuiltin\" || ch.name == \"JSXNamespacedName\" ||\n ch.name == \"JSXMemberExpression\")\n return doc.sliceString(ch.from, Math.min(ch.to, max));\n }\n return \"\";\n}\nconst android = typeof navigator == \"object\" && /*@__PURE__*//Android\\b/.test(navigator.userAgent);\n/**\nExtension that will automatically insert JSX close tags when a `>` or\n`/` is typed.\n*/\nconst autoCloseTags = /*@__PURE__*/EditorView.inputHandler.of((view, from, to, text, defaultInsert) => {\n if ((android ? view.composing : view.compositionStarted) || view.state.readOnly ||\n from != to || (text != \">\" && text != \"/\") ||\n !javascriptLanguage.isActiveAt(view.state, from, -1))\n return false;\n let base = defaultInsert(), { state } = base;\n let closeTags = state.changeByRange(range => {\n var _a;\n let { head } = range, around = syntaxTree(state).resolveInner(head - 1, -1), name;\n if (around.name == \"JSXStartTag\")\n around = around.parent;\n if (state.doc.sliceString(head - 1, head) != text || around.name == \"JSXAttributeValue\" && around.to > head) ;\n else if (text == \">\" && around.name == \"JSXFragmentTag\") {\n return { range, changes: { from: head, insert: `</>` } };\n }\n else if (text == \"/\" && around.name == \"JSXStartCloseTag\") {\n let empty = around.parent, base = empty.parent;\n if (base && empty.from == head - 2 &&\n ((name = elementName(state.doc, base.firstChild, head)) || ((_a = base.firstChild) === null || _a === void 0 ? void 0 : _a.name) == \"JSXFragmentTag\")) {\n let insert = `${name}>`;\n return { range: EditorSelection.cursor(head + insert.length, -1), changes: { from: head, insert } };\n }\n }\n else if (text == \">\") {\n let openTag = findOpenTag(around);\n if (openTag && openTag.name == \"JSXOpenTag\" &&\n !/^\\/?>|^<\\//.test(state.doc.sliceString(head, head + 2)) &&\n (name = elementName(state.doc, openTag, head)))\n return { range, changes: { from: head, insert: `</${name}>` } };\n }\n return { range };\n });\n if (closeTags.changes.empty)\n return false;\n view.dispatch([\n base,\n state.update(closeTags, { userEvent: \"input.complete\", scrollIntoView: true })\n ]);\n return true;\n});\n\n/**\nConnects an [ESLint](https://eslint.org/) linter to CodeMirror's\n[lint](https://codemirror.net/6/docs/ref/#lint) integration. `eslint` should be an instance of the\n[`Linter`](https://eslint.org/docs/developer-guide/nodejs-api#linter)\nclass, and `config` an optional ESLint configuration. The return\nvalue of this function can be passed to [`linter`](https://codemirror.net/6/docs/ref/#lint.linter)\nto create a JavaScript linting extension.\n\nNote that ESLint targets node, and is tricky to run in the\nbrowser. The\n[eslint-linter-browserify](https://github.com/UziTech/eslint-linter-browserify)\npackage may help with that (see\n[example](https://github.com/UziTech/eslint-linter-browserify/blob/master/example/script.js)).\n*/\nfunction esLint(eslint, config) {\n if (!config) {\n config = {\n parserOptions: { ecmaVersion: 2019, sourceType: \"module\" },\n env: { browser: true, node: true, es6: true, es2015: true, es2017: true, es2020: true },\n rules: {}\n };\n eslint.getRules().forEach((desc, name) => {\n var _a;\n if ((_a = desc.meta.docs) === null || _a === void 0 ? void 0 : _a.recommended)\n config.rules[name] = 2;\n });\n }\n return (view) => {\n let { state } = view, found = [];\n for (let { from, to } of javascriptLanguage.findRegions(state)) {\n let fromLine = state.doc.lineAt(from), offset = { line: fromLine.number - 1, col: from - fromLine.from, pos: from };\n for (let d of eslint.verify(state.sliceDoc(from, to), config))\n found.push(translateDiagnostic(d, state.doc, offset));\n }\n return found;\n };\n}\nfunction mapPos(line, col, doc, offset) {\n return doc.line(line + offset.line).from + col + (line == 1 ? offset.col - 1 : -1);\n}\nfunction translateDiagnostic(input, doc, offset) {\n let start = mapPos(input.line, input.column, doc, offset);\n let result = {\n from: start,\n to: input.endLine != null && input.endColumn != 1 ? mapPos(input.endLine, input.endColumn, doc, offset) : start,\n message: input.message,\n source: input.ruleId ? \"eslint:\" + input.ruleId : \"eslint\",\n severity: input.severity == 1 ? \"warning\" : \"error\",\n };\n if (input.fix) {\n let { range, text } = input.fix, from = range[0] + offset.pos - start, to = range[1] + offset.pos - start;\n result.actions = [{\n name: \"fix\",\n apply(view, start) {\n view.dispatch({ changes: { from: start + from, to: start + to, insert: text }, scrollIntoView: true });\n }\n }];\n }\n return result;\n}\n\nexport { autoCloseTags, completionPath, esLint, javascript, javascriptLanguage, jsxLanguage, localCompletionSource, scopeCompletionSource, snippets, tsxLanguage, typescriptLanguage, typescriptSnippets };\n","import { LRLanguage, indentNodeProp, delimitedIndent, foldNodeProp, foldInside, LanguageSupport } from '@codemirror/language';\nimport { styleTags, tags } from '@lezer/highlight';\nimport { LRParser } from '@lezer/lr';\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst spec_Keyword = {__proto__:null,anyref:34, dataref:34, eqref:34, externref:34, i31ref:34, funcref:34, i8:34, i16:34, i32:34, i64:34, f32:34, f64:34};\nconst parser = /*@__PURE__*/LRParser.deserialize({\n version: 14,\n states: \"!^Q]QPOOOqQPO'#CbOOQO'#Cd'#CdOOQO'#Cl'#ClOOQO'#Ch'#ChQ]QPOOOOQO,58|,58|OxQPO,58|OOQO-E6f-E6fOOQO1G.h1G.h\",\n stateData: \"!P~O_OSPOSQOS~OTPOVROXROYROZROaQO~OSUO~P]OSXO~P]O\",\n goto: \"xaPPPPPPbPbPPPhPPPrXROPTVQTOQVPTWTVXSOPTV\",\n nodeNames: \"⚠ LineComment BlockComment Module ) ( App Identifier Type Keyword Number String\",\n maxTerm: 17,\n nodeProps: [\n [\"isolate\", -3,1,2,11,\"\"],\n [\"openedBy\", 4,\"(\"],\n [\"closedBy\", 5,\")\"],\n [\"group\", -6,6,7,8,9,10,11,\"Expression\"]\n ],\n skippedNodes: [0,1,2],\n repeatNodeCount: 1,\n tokenData: \"0o~R^XY}YZ}]^}pq}rs!Stu#pxy'Uyz(e{|(j}!O(j!Q!R(s!R![*p!]!^.^#T#o.{~!SO_~~!VVOr!Srs!ls#O!S#O#P!q#P;'S!S;'S;=`#j<%lO!S~!qOZ~~!tRO;'S!S;'S;=`!};=`O!S~#QWOr!Srs!ls#O!S#O#P!q#P;'S!S;'S;=`#j;=`<%l!S<%lO!S~#mP;=`<%l!S~#siqr%bst%btu%buv%bvw%bwx%bz{%b{|%b}!O%b!O!P%b!P!Q%b!Q![%b![!]%b!^!_%b!_!`%b!`!a%b!a!b%b!b!c%b!c!}%b#Q#R%b#R#S%b#S#T%b#T#o%b#p#q%b#r#s%b~%giV~qr%bst%btu%buv%bvw%bwx%bz{%b{|%b}!O%b!O!P%b!P!Q%b!Q![%b![!]%b!^!_%b!_!`%b!`!a%b!a!b%b!b!c%b!c!}%b#Q#R%b#R#S%b#S#T%b#T#o%b#p#q%b#r#s%b~'ZPT~!]!^'^~'aTO!]'^!]!^'p!^;'S'^;'S;=`(_<%lO'^~'sVOy'^yz(Yz!]'^!]!^'p!^;'S'^;'S;=`(_<%lO'^~(_OQ~~(bP;=`<%l'^~(jOS~~(mQ!Q!R(s!R![*p~(xUY~!O!P)[!Q![*p!g!h){#R#S+U#X#Y){#l#m+[~)aRY~!Q![)j!g!h){#X#Y){~)oSY~!Q![)j!g!h){#R#S*j#X#Y){~*OR{|*X}!O*X!Q![*_~*[P!Q![*_~*dQY~!Q![*_#R#S*X~*mP!Q![)j~*uTY~!O!P)[!Q![*p!g!h){#R#S+U#X#Y){~+XP!Q![*p~+_R!Q![+h!c!i+h#T#Z+h~+mVY~!O!P,S!Q![+h!c!i+h!r!s-P#R#S+[#T#Z+h#d#e-P~,XTY~!Q![,h!c!i,h!r!s-P#T#Z,h#d#e-P~,mUY~!Q![,h!c!i,h!r!s-P#R#S.Q#T#Z,h#d#e-P~-ST{|-c}!O-c!Q![-o!c!i-o#T#Z-o~-fR!Q![-o!c!i-o#T#Z-o~-tSY~!Q![-o!c!i-o#R#S-c#T#Z-o~.TR!Q![,h!c!i,h#T#Z,h~.aP!]!^.d~.iSP~OY.dZ;'S.d;'S;=`.u<%lO.d~.xP;=`<%l.d~/QiX~qr.{st.{tu.{uv.{vw.{wx.{z{.{{|.{}!O.{!O!P.{!P!Q.{!Q![.{![!].{!^!_.{!_!`.{!`!a.{!a!b.{!b!c.{!c!}.{#Q#R.{#R#S.{#S#T.{#T#o.{#p#q.{#r#s.{\",\n tokenizers: [0],\n topRules: {\"Module\":[0,3]},\n specialized: [{term: 9, get: (value) => spec_Keyword[value] || -1}],\n tokenPrec: 0\n});\n\nconst wastLanguage = /*@__PURE__*/LRLanguage.define({\n name: \"wast\",\n parser: /*@__PURE__*/parser.configure({\n props: [\n /*@__PURE__*/indentNodeProp.add({\n App: /*@__PURE__*/delimitedIndent({ closing: \")\", align: false })\n }),\n /*@__PURE__*/foldNodeProp.add({\n App: foldInside,\n BlockComment(tree) { return { from: tree.from + 2, to: tree.to - 2 }; }\n }),\n /*@__PURE__*/styleTags({\n Keyword: tags.keyword,\n Type: tags.typeName,\n Number: tags.number,\n String: tags.string,\n Identifier: tags.variableName,\n LineComment: tags.lineComment,\n BlockComment: tags.blockComment,\n \"( )\": tags.paren\n })\n ]\n }),\n languageData: {\n commentTokens: { line: \";;\", block: { open: \"(;\", close: \";)\" } },\n closeBrackets: { brackets: [\"(\", '\"'] }\n }\n});\nfunction wast() {\n return new LanguageSupport(wastLanguage);\n}\n\nexport { wast, wastLanguage };\n","import { NodeProp, IterMode, Tree, TreeFragment, Parser, NodeType, NodeSet } from '@lezer/common';\nimport { StateEffect, StateField, Facet, EditorState, countColumn, combineConfig, RangeSet, RangeSetBuilder, Prec } from '@codemirror/state';\nimport { ViewPlugin, logException, EditorView, Decoration, WidgetType, gutter, GutterMarker, Direction } from '@codemirror/view';\nimport { tags, tagHighlighter, highlightTree, styleTags } from '@lezer/highlight';\nimport { StyleModule } from 'style-mod';\n\nvar _a;\n/**\nNode prop stored in a parser's top syntax node to provide the\nfacet that stores language-specific data for that language.\n*/\nconst languageDataProp = /*@__PURE__*/new NodeProp();\n/**\nHelper function to define a facet (to be added to the top syntax\nnode(s) for a language via\n[`languageDataProp`](https://codemirror.net/6/docs/ref/#language.languageDataProp)), that will be\nused to associate language data with the language. You\nprobably only need this when subclassing\n[`Language`](https://codemirror.net/6/docs/ref/#language.Language).\n*/\nfunction defineLanguageFacet(baseData) {\n return Facet.define({\n combine: baseData ? values => values.concat(baseData) : undefined\n });\n}\n/**\nSyntax node prop used to register sublanguages. Should be added to\nthe top level node type for the language.\n*/\nconst sublanguageProp = /*@__PURE__*/new NodeProp();\n/**\nA language object manages parsing and per-language\n[metadata](https://codemirror.net/6/docs/ref/#state.EditorState.languageDataAt). Parse data is\nmanaged as a [Lezer](https://lezer.codemirror.net) tree. The class\ncan be used directly, via the [`LRLanguage`](https://codemirror.net/6/docs/ref/#language.LRLanguage)\nsubclass for [Lezer](https://lezer.codemirror.net/) LR parsers, or\nvia the [`StreamLanguage`](https://codemirror.net/6/docs/ref/#language.StreamLanguage) subclass\nfor stream parsers.\n*/\nclass Language {\n /**\n Construct a language object. If you need to invoke this\n directly, first define a data facet with\n [`defineLanguageFacet`](https://codemirror.net/6/docs/ref/#language.defineLanguageFacet), and then\n configure your parser to [attach](https://codemirror.net/6/docs/ref/#language.languageDataProp) it\n to the language's outer syntax node.\n */\n constructor(\n /**\n The [language data](https://codemirror.net/6/docs/ref/#state.EditorState.languageDataAt) facet\n used for this language.\n */\n data, parser, extraExtensions = [], \n /**\n A language name.\n */\n name = \"\") {\n this.data = data;\n this.name = name;\n // Kludge to define EditorState.tree as a debugging helper,\n // without the EditorState package actually knowing about\n // languages and lezer trees.\n if (!EditorState.prototype.hasOwnProperty(\"tree\"))\n Object.defineProperty(EditorState.prototype, \"tree\", { get() { return syntaxTree(this); } });\n this.parser = parser;\n this.extension = [\n language.of(this),\n EditorState.languageData.of((state, pos, side) => {\n let top = topNodeAt(state, pos, side), data = top.type.prop(languageDataProp);\n if (!data)\n return [];\n let base = state.facet(data), sub = top.type.prop(sublanguageProp);\n if (sub) {\n let innerNode = top.resolve(pos - top.from, side);\n for (let sublang of sub)\n if (sublang.test(innerNode, state)) {\n let data = state.facet(sublang.facet);\n return sublang.type == \"replace\" ? data : data.concat(base);\n }\n }\n return base;\n })\n ].concat(extraExtensions);\n }\n /**\n Query whether this language is active at the given position.\n */\n isActiveAt(state, pos, side = -1) {\n return topNodeAt(state, pos, side).type.prop(languageDataProp) == this.data;\n }\n /**\n Find the document regions that were parsed using this language.\n The returned regions will _include_ any nested languages rooted\n in this language, when those exist.\n */\n findRegions(state) {\n let lang = state.facet(language);\n if ((lang === null || lang === void 0 ? void 0 : lang.data) == this.data)\n return [{ from: 0, to: state.doc.length }];\n if (!lang || !lang.allowsNesting)\n return [];\n let result = [];\n let explore = (tree, from) => {\n if (tree.prop(languageDataProp) == this.data) {\n result.push({ from, to: from + tree.length });\n return;\n }\n let mount = tree.prop(NodeProp.mounted);\n if (mount) {\n if (mount.tree.prop(languageDataProp) == this.data) {\n if (mount.overlay)\n for (let r of mount.overlay)\n result.push({ from: r.from + from, to: r.to + from });\n else\n result.push({ from: from, to: from + tree.length });\n return;\n }\n else if (mount.overlay) {\n let size = result.length;\n explore(mount.tree, mount.overlay[0].from + from);\n if (result.length > size)\n return;\n }\n }\n for (let i = 0; i < tree.children.length; i++) {\n let ch = tree.children[i];\n if (ch instanceof Tree)\n explore(ch, tree.positions[i] + from);\n }\n };\n explore(syntaxTree(state), 0);\n return result;\n }\n /**\n Indicates whether this language allows nested languages. The\n default implementation returns true.\n */\n get allowsNesting() { return true; }\n}\n/**\n@internal\n*/\nLanguage.setState = /*@__PURE__*/StateEffect.define();\nfunction topNodeAt(state, pos, side) {\n let topLang = state.facet(language), tree = syntaxTree(state).topNode;\n if (!topLang || topLang.allowsNesting) {\n for (let node = tree; node; node = node.enter(pos, side, IterMode.ExcludeBuffers | IterMode.EnterBracketed))\n if (node.type.isTop)\n tree = node;\n }\n return tree;\n}\n/**\nA subclass of [`Language`](https://codemirror.net/6/docs/ref/#language.Language) for use with Lezer\n[LR parsers](https://lezer.codemirror.net/docs/ref#lr.LRParser)\nparsers.\n*/\nclass LRLanguage extends Language {\n constructor(data, parser, name) {\n super(data, parser, [], name);\n this.parser = parser;\n }\n /**\n Define a language from a parser.\n */\n static define(spec) {\n let data = defineLanguageFacet(spec.languageData);\n return new LRLanguage(data, spec.parser.configure({\n props: [languageDataProp.add(type => type.isTop ? data : undefined)]\n }), spec.name);\n }\n /**\n Create a new instance of this language with a reconfigured\n version of its parser and optionally a new name.\n */\n configure(options, name) {\n return new LRLanguage(this.data, this.parser.configure(options), name || this.name);\n }\n get allowsNesting() { return this.parser.hasWrappers(); }\n}\n/**\nGet the syntax tree for a state, which is the current (possibly\nincomplete) parse tree of the active\n[language](https://codemirror.net/6/docs/ref/#language.Language), or the empty tree if there is no\nlanguage available.\n*/\nfunction syntaxTree(state) {\n let field = state.field(Language.state, false);\n return field ? field.tree : Tree.empty;\n}\n/**\nTry to get a parse tree that spans at least up to `upto`. The\nmethod will do at most `timeout` milliseconds of work to parse\nup to that point if the tree isn't already available.\n*/\nfunction ensureSyntaxTree(state, upto, timeout = 50) {\n var _a;\n let parse = (_a = state.field(Language.state, false)) === null || _a === void 0 ? void 0 : _a.context;\n if (!parse)\n return null;\n let oldVieport = parse.viewport;\n parse.updateViewport({ from: 0, to: upto });\n let result = parse.isDone(upto) || parse.work(timeout, upto) ? parse.tree : null;\n parse.updateViewport(oldVieport);\n return result;\n}\n/**\nQueries whether there is a full syntax tree available up to the\ngiven document position. If there isn't, the background parse\nprocess _might_ still be working and update the tree further, but\nthere is no guarantee of that—the parser will [stop\nworking](https://codemirror.net/6/docs/ref/#language.syntaxParserRunning) when it has spent a\ncertain amount of time or has moved beyond the visible viewport.\nAlways returns false if no language has been enabled.\n*/\nfunction syntaxTreeAvailable(state, upto = state.doc.length) {\n var _a;\n return ((_a = state.field(Language.state, false)) === null || _a === void 0 ? void 0 : _a.context.isDone(upto)) || false;\n}\n/**\nMove parsing forward, and update the editor state afterwards to\nreflect the new tree. Will work for at most `timeout`\nmilliseconds. Returns true if the parser managed get to the given\nposition in that time.\n*/\nfunction forceParsing(view, upto = view.viewport.to, timeout = 100) {\n let success = ensureSyntaxTree(view.state, upto, timeout);\n if (success != syntaxTree(view.state))\n view.dispatch({});\n return !!success;\n}\n/**\nTells you whether the language parser is planning to do more\nparsing work (in a `requestIdleCallback` pseudo-thread) or has\nstopped running, either because it parsed the entire document,\nbecause it spent too much time and was cut off, or because there\nis no language parser enabled.\n*/\nfunction syntaxParserRunning(view) {\n var _a;\n return ((_a = view.plugin(parseWorker)) === null || _a === void 0 ? void 0 : _a.isWorking()) || false;\n}\n/**\nLezer-style\n[`Input`](https://lezer.codemirror.net/docs/ref#common.Input)\nobject for a [`Text`](https://codemirror.net/6/docs/ref/#state.Text) object.\n*/\nclass DocInput {\n /**\n Create an input object for the given document.\n */\n constructor(doc) {\n this.doc = doc;\n this.cursorPos = 0;\n this.string = \"\";\n this.cursor = doc.iter();\n }\n get length() { return this.doc.length; }\n syncTo(pos) {\n this.string = this.cursor.next(pos - this.cursorPos).value;\n this.cursorPos = pos + this.string.length;\n return this.cursorPos - this.string.length;\n }\n chunk(pos) {\n this.syncTo(pos);\n return this.string;\n }\n get lineChunks() { return true; }\n read(from, to) {\n let stringStart = this.cursorPos - this.string.length;\n if (from < stringStart || to >= this.cursorPos)\n return this.doc.sliceString(from, to);\n else\n return this.string.slice(from - stringStart, to - stringStart);\n }\n}\nlet currentContext = null;\n/**\nA parse context provided to parsers working on the editor content.\n*/\nclass ParseContext {\n constructor(parser, \n /**\n The current editor state.\n */\n state, \n /**\n Tree fragments that can be reused by incremental re-parses.\n */\n fragments = [], \n /**\n @internal\n */\n tree, \n /**\n @internal\n */\n treeLen, \n /**\n The current editor viewport (or some overapproximation\n thereof). Intended to be used for opportunistically avoiding\n work (in which case\n [`skipUntilInView`](https://codemirror.net/6/docs/ref/#language.ParseContext.skipUntilInView)\n should be called to make sure the parser is restarted when the\n skipped region becomes visible).\n */\n viewport, \n /**\n @internal\n */\n skipped, \n /**\n This is where skipping parsers can register a promise that,\n when resolved, will schedule a new parse. It is cleared when\n the parse worker picks up the promise. @internal\n */\n scheduleOn) {\n this.parser = parser;\n this.state = state;\n this.fragments = fragments;\n this.tree = tree;\n this.treeLen = treeLen;\n this.viewport = viewport;\n this.skipped = skipped;\n this.scheduleOn = scheduleOn;\n this.parse = null;\n /**\n @internal\n */\n this.tempSkipped = [];\n }\n /**\n @internal\n */\n static create(parser, state, viewport) {\n return new ParseContext(parser, state, [], Tree.empty, 0, viewport, [], null);\n }\n startParse() {\n return this.parser.startParse(new DocInput(this.state.doc), this.fragments);\n }\n /**\n @internal\n */\n work(until, upto) {\n if (upto != null && upto >= this.state.doc.length)\n upto = undefined;\n if (this.tree != Tree.empty && this.isDone(upto !== null && upto !== void 0 ? upto : this.state.doc.length)) {\n this.takeTree();\n return true;\n }\n return this.withContext(() => {\n var _a;\n if (typeof until == \"number\") {\n let endTime = Date.now() + until;\n until = () => Date.now() > endTime;\n }\n if (!this.parse)\n this.parse = this.startParse();\n if (upto != null && (this.parse.stoppedAt == null || this.parse.stoppedAt > upto) &&\n upto < this.state.doc.length)\n this.parse.stopAt(upto);\n for (;;) {\n let done = this.parse.advance();\n if (done) {\n this.fragments = this.withoutTempSkipped(TreeFragment.addTree(done, this.fragments, this.parse.stoppedAt != null));\n this.treeLen = (_a = this.parse.stoppedAt) !== null && _a !== void 0 ? _a : this.state.doc.length;\n this.tree = done;\n this.parse = null;\n if (this.treeLen < (upto !== null && upto !== void 0 ? upto : this.state.doc.length))\n this.parse = this.startParse();\n else\n return true;\n }\n if (until())\n return false;\n }\n });\n }\n /**\n @internal\n */\n takeTree() {\n let pos, tree;\n if (this.parse && (pos = this.parse.parsedPos) >= this.treeLen) {\n if (this.parse.stoppedAt == null || this.parse.stoppedAt > pos)\n this.parse.stopAt(pos);\n this.withContext(() => { while (!(tree = this.parse.advance())) { } });\n this.treeLen = pos;\n this.tree = tree;\n this.fragments = this.withoutTempSkipped(TreeFragment.addTree(this.tree, this.fragments, true));\n this.parse = null;\n }\n }\n withContext(f) {\n let prev = currentContext;\n currentContext = this;\n try {\n return f();\n }\n finally {\n currentContext = prev;\n }\n }\n withoutTempSkipped(fragments) {\n for (let r; r = this.tempSkipped.pop();)\n fragments = cutFragments(fragments, r.from, r.to);\n return fragments;\n }\n /**\n @internal\n */\n changes(changes, newState) {\n let { fragments, tree, treeLen, viewport, skipped } = this;\n this.takeTree();\n if (!changes.empty) {\n let ranges = [];\n changes.iterChangedRanges((fromA, toA, fromB, toB) => ranges.push({ fromA, toA, fromB, toB }));\n fragments = TreeFragment.applyChanges(fragments, ranges);\n tree = Tree.empty;\n treeLen = 0;\n viewport = { from: changes.mapPos(viewport.from, -1), to: changes.mapPos(viewport.to, 1) };\n if (this.skipped.length) {\n skipped = [];\n for (let r of this.skipped) {\n let from = changes.mapPos(r.from, 1), to = changes.mapPos(r.to, -1);\n if (from < to)\n skipped.push({ from, to });\n }\n }\n }\n return new ParseContext(this.parser, newState, fragments, tree, treeLen, viewport, skipped, this.scheduleOn);\n }\n /**\n @internal\n */\n updateViewport(viewport) {\n if (this.viewport.from == viewport.from && this.viewport.to == viewport.to)\n return false;\n this.viewport = viewport;\n let startLen = this.skipped.length;\n for (let i = 0; i < this.skipped.length; i++) {\n let { from, to } = this.skipped[i];\n if (from < viewport.to && to > viewport.from) {\n this.fragments = cutFragments(this.fragments, from, to);\n this.skipped.splice(i--, 1);\n }\n }\n if (this.skipped.length >= startLen)\n return false;\n this.reset();\n return true;\n }\n /**\n @internal\n */\n reset() {\n if (this.parse) {\n this.takeTree();\n this.parse = null;\n }\n }\n /**\n Notify the parse scheduler that the given region was skipped\n because it wasn't in view, and the parse should be restarted\n when it comes into view.\n */\n skipUntilInView(from, to) {\n this.skipped.push({ from, to });\n }\n /**\n Returns a parser intended to be used as placeholder when\n asynchronously loading a nested parser. It'll skip its input and\n mark it as not-really-parsed, so that the next update will parse\n it again.\n \n When `until` is given, a reparse will be scheduled when that\n promise resolves.\n */\n static getSkippingParser(until) {\n return new class extends Parser {\n createParse(input, fragments, ranges) {\n let from = ranges[0].from, to = ranges[ranges.length - 1].to;\n let parser = {\n parsedPos: from,\n advance() {\n let cx = currentContext;\n if (cx) {\n for (let r of ranges)\n cx.tempSkipped.push(r);\n if (until)\n cx.scheduleOn = cx.scheduleOn ? Promise.all([cx.scheduleOn, until]) : until;\n }\n this.parsedPos = to;\n return new Tree(NodeType.none, [], [], to - from);\n },\n stoppedAt: null,\n stopAt() { }\n };\n return parser;\n }\n };\n }\n /**\n @internal\n */\n isDone(upto) {\n upto = Math.min(upto, this.state.doc.length);\n let frags = this.fragments;\n return this.treeLen >= upto && frags.length && frags[0].from == 0 && frags[0].to >= upto;\n }\n /**\n Get the context for the current parse, or `null` if no editor\n parse is in progress.\n */\n static get() { return currentContext; }\n}\nfunction cutFragments(fragments, from, to) {\n return TreeFragment.applyChanges(fragments, [{ fromA: from, toA: to, fromB: from, toB: to }]);\n}\nclass LanguageState {\n constructor(\n // A mutable parse state that is used to preserve work done during\n // the lifetime of a state when moving to the next state.\n context) {\n this.context = context;\n this.tree = context.tree;\n }\n apply(tr) {\n if (!tr.docChanged && this.tree == this.context.tree)\n return this;\n let newCx = this.context.changes(tr.changes, tr.state);\n // If the previous parse wasn't done, go forward only up to its\n // end position or the end of the viewport, to avoid slowing down\n // state updates with parse work beyond the viewport.\n let upto = this.context.treeLen == tr.startState.doc.length ? undefined\n : Math.max(tr.changes.mapPos(this.context.treeLen), newCx.viewport.to);\n if (!newCx.work(20 /* Work.Apply */, upto))\n newCx.takeTree();\n return new LanguageState(newCx);\n }\n static init(state) {\n let vpTo = Math.min(3000 /* Work.InitViewport */, state.doc.length);\n let parseState = ParseContext.create(state.facet(language).parser, state, { from: 0, to: vpTo });\n if (!parseState.work(20 /* Work.Apply */, vpTo))\n parseState.takeTree();\n return new LanguageState(parseState);\n }\n}\nLanguage.state = /*@__PURE__*/StateField.define({\n create: LanguageState.init,\n update(value, tr) {\n for (let e of tr.effects)\n if (e.is(Language.setState))\n return e.value;\n if (tr.startState.facet(language) != tr.state.facet(language))\n return LanguageState.init(tr.state);\n return value.apply(tr);\n }\n});\nlet requestIdle = (callback) => {\n let timeout = setTimeout(() => callback(), 500 /* Work.MaxPause */);\n return () => clearTimeout(timeout);\n};\nif (typeof requestIdleCallback != \"undefined\")\n requestIdle = (callback) => {\n let idle = -1, timeout = setTimeout(() => {\n idle = requestIdleCallback(callback, { timeout: 500 /* Work.MaxPause */ - 100 /* Work.MinPause */ });\n }, 100 /* Work.MinPause */);\n return () => idle < 0 ? clearTimeout(timeout) : cancelIdleCallback(idle);\n };\nconst isInputPending = typeof navigator != \"undefined\" && ((_a = navigator.scheduling) === null || _a === void 0 ? void 0 : _a.isInputPending)\n ? () => navigator.scheduling.isInputPending() : null;\nconst parseWorker = /*@__PURE__*/ViewPlugin.fromClass(class ParseWorker {\n constructor(view) {\n this.view = view;\n this.working = null;\n this.workScheduled = 0;\n // End of the current time chunk\n this.chunkEnd = -1;\n // Milliseconds of budget left for this chunk\n this.chunkBudget = -1;\n this.work = this.work.bind(this);\n this.scheduleWork();\n }\n update(update) {\n let cx = this.view.state.field(Language.state).context;\n if (cx.updateViewport(update.view.viewport) || this.view.viewport.to > cx.treeLen)\n this.scheduleWork();\n if (update.docChanged || update.selectionSet) {\n if (this.view.hasFocus)\n this.chunkBudget += 50 /* Work.ChangeBonus */;\n this.scheduleWork();\n }\n this.checkAsyncSchedule(cx);\n }\n scheduleWork() {\n if (this.working)\n return;\n let { state } = this.view, field = state.field(Language.state);\n if (field.tree != field.context.tree || !field.context.isDone(state.doc.length))\n this.working = requestIdle(this.work);\n }\n work(deadline) {\n this.working = null;\n let now = Date.now();\n if (this.chunkEnd < now && (this.chunkEnd < 0 || this.view.hasFocus)) { // Start a new chunk\n this.chunkEnd = now + 30000 /* Work.ChunkTime */;\n this.chunkBudget = 3000 /* Work.ChunkBudget */;\n }\n if (this.chunkBudget <= 0)\n return; // No more budget\n let { state, viewport: { to: vpTo } } = this.view, field = state.field(Language.state);\n if (field.tree == field.context.tree && field.context.isDone(vpTo + 100000 /* Work.MaxParseAhead */))\n return;\n let endTime = Date.now() + Math.min(this.chunkBudget, 100 /* Work.Slice */, deadline && !isInputPending ? Math.max(25 /* Work.MinSlice */, deadline.timeRemaining() - 5) : 1e9);\n let viewportFirst = field.context.treeLen < vpTo && state.doc.length > vpTo + 1000;\n let done = field.context.work(() => {\n return isInputPending && isInputPending() || Date.now() > endTime;\n }, vpTo + (viewportFirst ? 0 : 100000 /* Work.MaxParseAhead */));\n this.chunkBudget -= Date.now() - now;\n if (done || this.chunkBudget <= 0) {\n field.context.takeTree();\n this.view.dispatch({ effects: Language.setState.of(new LanguageState(field.context)) });\n }\n if (this.chunkBudget > 0 && !(done && !viewportFirst))\n this.scheduleWork();\n this.checkAsyncSchedule(field.context);\n }\n checkAsyncSchedule(cx) {\n if (cx.scheduleOn) {\n this.workScheduled++;\n cx.scheduleOn\n .then(() => this.scheduleWork())\n .catch(err => logException(this.view.state, err))\n .then(() => this.workScheduled--);\n cx.scheduleOn = null;\n }\n }\n destroy() {\n if (this.working)\n this.working();\n }\n isWorking() {\n return !!(this.working || this.workScheduled > 0);\n }\n}, {\n eventHandlers: { focus() { this.scheduleWork(); } }\n});\n/**\nThe facet used to associate a language with an editor state. Used\nby `Language` object's `extension` property (so you don't need to\nmanually wrap your languages in this). Can be used to access the\ncurrent language on a state.\n*/\nconst language = /*@__PURE__*/Facet.define({\n combine(languages) { return languages.length ? languages[0] : null; },\n enables: language => [\n Language.state,\n parseWorker,\n EditorView.contentAttributes.compute([language], state => {\n let lang = state.facet(language);\n return lang && lang.name ? { \"data-language\": lang.name } : {};\n })\n ]\n});\n/**\nThis class bundles a [language](https://codemirror.net/6/docs/ref/#language.Language) with an\noptional set of supporting extensions. Language packages are\nencouraged to export a function that optionally takes a\nconfiguration object and returns a `LanguageSupport` instance, as\nthe main way for client code to use the package.\n*/\nclass LanguageSupport {\n /**\n Create a language support object.\n */\n constructor(\n /**\n The language object.\n */\n language, \n /**\n An optional set of supporting extensions. When nesting a\n language in another language, the outer language is encouraged\n to include the supporting extensions for its inner languages\n in its own set of support extensions.\n */\n support = []) {\n this.language = language;\n this.support = support;\n this.extension = [language, support];\n }\n}\n/**\nLanguage descriptions are used to store metadata about languages\nand to dynamically load them. Their main role is finding the\nappropriate language for a filename or dynamically loading nested\nparsers.\n*/\nclass LanguageDescription {\n constructor(\n /**\n The name of this language.\n */\n name, \n /**\n Alternative names for the mode (lowercased, includes `this.name`).\n */\n alias, \n /**\n File extensions associated with this language.\n */\n extensions, \n /**\n Optional filename pattern that should be associated with this\n language.\n */\n filename, loadFunc, \n /**\n If the language has been loaded, this will hold its value.\n */\n support = undefined) {\n this.name = name;\n this.alias = alias;\n this.extensions = extensions;\n this.filename = filename;\n this.loadFunc = loadFunc;\n this.support = support;\n this.loading = null;\n }\n /**\n Start loading the the language. Will return a promise that\n resolves to a [`LanguageSupport`](https://codemirror.net/6/docs/ref/#language.LanguageSupport)\n object when the language successfully loads.\n */\n load() {\n return this.loading || (this.loading = this.loadFunc().then(support => this.support = support, err => { this.loading = null; throw err; }));\n }\n /**\n Create a language description.\n */\n static of(spec) {\n let { load, support } = spec;\n if (!load) {\n if (!support)\n throw new RangeError(\"Must pass either 'load' or 'support' to LanguageDescription.of\");\n load = () => Promise.resolve(support);\n }\n return new LanguageDescription(spec.name, (spec.alias || []).concat(spec.name).map(s => s.toLowerCase()), spec.extensions || [], spec.filename, load, support);\n }\n /**\n Look for a language in the given array of descriptions that\n matches the filename. Will first match\n [`filename`](https://codemirror.net/6/docs/ref/#language.LanguageDescription.filename) patterns,\n and then [extensions](https://codemirror.net/6/docs/ref/#language.LanguageDescription.extensions),\n and return the first language that matches.\n */\n static matchFilename(descs, filename) {\n for (let d of descs)\n if (d.filename && d.filename.test(filename))\n return d;\n let ext = /\\.([^.]+)$/.exec(filename);\n if (ext)\n for (let d of descs)\n if (d.extensions.indexOf(ext[1]) > -1)\n return d;\n return null;\n }\n /**\n Look for a language whose name or alias matches the the given\n name (case-insensitively). If `fuzzy` is true, and no direct\n matchs is found, this'll also search for a language whose name\n or alias occurs in the string (for names shorter than three\n characters, only when surrounded by non-word characters).\n */\n static matchLanguageName(descs, name, fuzzy = true) {\n name = name.toLowerCase();\n for (let d of descs)\n if (d.alias.some(a => a == name))\n return d;\n if (fuzzy)\n for (let d of descs)\n for (let a of d.alias) {\n let found = name.indexOf(a);\n if (found > -1 && (a.length > 2 || !/\\w/.test(name[found - 1]) && !/\\w/.test(name[found + a.length])))\n return d;\n }\n return null;\n }\n}\n\n/**\nFacet that defines a way to provide a function that computes the\nappropriate indentation depth, as a column number (see\n[`indentString`](https://codemirror.net/6/docs/ref/#language.indentString)), at the start of a given\nline. A return value of `null` indicates no indentation can be\ndetermined, and the line should inherit the indentation of the one\nabove it. A return value of `undefined` defers to the next indent\nservice.\n*/\nconst indentService = /*@__PURE__*/Facet.define();\n/**\nFacet for overriding the unit by which indentation happens. Should\nbe a string consisting entirely of the same whitespace character.\nWhen not set, this defaults to 2 spaces.\n*/\nconst indentUnit = /*@__PURE__*/Facet.define({\n combine: values => {\n if (!values.length)\n return \" \";\n let unit = values[0];\n if (!unit || /\\S/.test(unit) || Array.from(unit).some(e => e != unit[0]))\n throw new Error(\"Invalid indent unit: \" + JSON.stringify(values[0]));\n return unit;\n }\n});\n/**\nReturn the _column width_ of an indent unit in the state.\nDetermined by the [`indentUnit`](https://codemirror.net/6/docs/ref/#language.indentUnit)\nfacet, and [`tabSize`](https://codemirror.net/6/docs/ref/#state.EditorState^tabSize) when that\ncontains tabs.\n*/\nfunction getIndentUnit(state) {\n let unit = state.facet(indentUnit);\n return unit.charCodeAt(0) == 9 ? state.tabSize * unit.length : unit.length;\n}\n/**\nCreate an indentation string that covers columns 0 to `cols`.\nWill use tabs for as much of the columns as possible when the\n[`indentUnit`](https://codemirror.net/6/docs/ref/#language.indentUnit) facet contains\ntabs.\n*/\nfunction indentString(state, cols) {\n let result = \"\", ts = state.tabSize, ch = state.facet(indentUnit)[0];\n if (ch == \"\\t\") {\n while (cols >= ts) {\n result += \"\\t\";\n cols -= ts;\n }\n ch = \" \";\n }\n for (let i = 0; i < cols; i++)\n result += ch;\n return result;\n}\n/**\nGet the indentation, as a column number, at the given position.\nWill first consult any [indent services](https://codemirror.net/6/docs/ref/#language.indentService)\nthat are registered, and if none of those return an indentation,\nthis will check the syntax tree for the [indent node\nprop](https://codemirror.net/6/docs/ref/#language.indentNodeProp) and use that if found. Returns a\nnumber when an indentation could be determined, and null\notherwise.\n*/\nfunction getIndentation(context, pos) {\n if (context instanceof EditorState)\n context = new IndentContext(context);\n for (let service of context.state.facet(indentService)) {\n let result = service(context, pos);\n if (result !== undefined)\n return result;\n }\n let tree = syntaxTree(context.state);\n return tree.length >= pos ? syntaxIndentation(context, tree, pos) : null;\n}\n/**\nCreate a change set that auto-indents all lines touched by the\ngiven document range.\n*/\nfunction indentRange(state, from, to) {\n let updated = Object.create(null);\n let context = new IndentContext(state, { overrideIndentation: start => { var _a; return (_a = updated[start]) !== null && _a !== void 0 ? _a : -1; } });\n let changes = [];\n for (let pos = from; pos <= to;) {\n let line = state.doc.lineAt(pos);\n pos = line.to + 1;\n let indent = getIndentation(context, line.from);\n if (indent == null)\n continue;\n if (!/\\S/.test(line.text))\n indent = 0;\n let cur = /^\\s*/.exec(line.text)[0];\n let norm = indentString(state, indent);\n if (cur != norm) {\n updated[line.from] = indent;\n changes.push({ from: line.from, to: line.from + cur.length, insert: norm });\n }\n }\n return state.changes(changes);\n}\n/**\nIndentation contexts are used when calling [indentation\nservices](https://codemirror.net/6/docs/ref/#language.indentService). They provide helper utilities\nuseful in indentation logic, and can selectively override the\nindentation reported for some lines.\n*/\nclass IndentContext {\n /**\n Create an indent context.\n */\n constructor(\n /**\n The editor state.\n */\n state, \n /**\n @internal\n */\n options = {}) {\n this.state = state;\n this.options = options;\n this.unit = getIndentUnit(state);\n }\n /**\n Get a description of the line at the given position, taking\n [simulated line\n breaks](https://codemirror.net/6/docs/ref/#language.IndentContext.constructor^options.simulateBreak)\n into account. If there is such a break at `pos`, the `bias`\n argument determines whether the part of the line line before or\n after the break is used.\n */\n lineAt(pos, bias = 1) {\n let line = this.state.doc.lineAt(pos);\n let { simulateBreak, simulateDoubleBreak } = this.options;\n if (simulateBreak != null && simulateBreak >= line.from && simulateBreak <= line.to) {\n if (simulateDoubleBreak && simulateBreak == pos)\n return { text: \"\", from: pos };\n else if (bias < 0 ? simulateBreak < pos : simulateBreak <= pos)\n return { text: line.text.slice(simulateBreak - line.from), from: simulateBreak };\n else\n return { text: line.text.slice(0, simulateBreak - line.from), from: line.from };\n }\n return line;\n }\n /**\n Get the text directly after `pos`, either the entire line\n or the next 100 characters, whichever is shorter.\n */\n textAfterPos(pos, bias = 1) {\n if (this.options.simulateDoubleBreak && pos == this.options.simulateBreak)\n return \"\";\n let { text, from } = this.lineAt(pos, bias);\n return text.slice(pos - from, Math.min(text.length, pos + 100 - from));\n }\n /**\n Find the column for the given position.\n */\n column(pos, bias = 1) {\n let { text, from } = this.lineAt(pos, bias);\n let result = this.countColumn(text, pos - from);\n let override = this.options.overrideIndentation ? this.options.overrideIndentation(from) : -1;\n if (override > -1)\n result += override - this.countColumn(text, text.search(/\\S|$/));\n return result;\n }\n /**\n Find the column position (taking tabs into account) of the given\n position in the given string.\n */\n countColumn(line, pos = line.length) {\n return countColumn(line, this.state.tabSize, pos);\n }\n /**\n Find the indentation column of the line at the given point.\n */\n lineIndent(pos, bias = 1) {\n let { text, from } = this.lineAt(pos, bias);\n let override = this.options.overrideIndentation;\n if (override) {\n let overriden = override(from);\n if (overriden > -1)\n return overriden;\n }\n return this.countColumn(text, text.search(/\\S|$/));\n }\n /**\n Returns the [simulated line\n break](https://codemirror.net/6/docs/ref/#language.IndentContext.constructor^options.simulateBreak)\n for this context, if any.\n */\n get simulatedBreak() {\n return this.options.simulateBreak || null;\n }\n}\n/**\nA syntax tree node prop used to associate indentation strategies\nwith node types. Such a strategy is a function from an indentation\ncontext to a column number (see also\n[`indentString`](https://codemirror.net/6/docs/ref/#language.indentString)) or null, where null\nindicates that no definitive indentation can be determined.\n*/\nconst indentNodeProp = /*@__PURE__*/new NodeProp();\n// Compute the indentation for a given position from the syntax tree.\nfunction syntaxIndentation(cx, ast, pos) {\n let stack = ast.resolveStack(pos);\n let inner = ast.resolveInner(pos, -1).resolve(pos, 0).enterUnfinishedNodesBefore(pos);\n if (inner != stack.node) {\n let add = [];\n for (let cur = inner; cur && !(cur.from < stack.node.from || cur.to > stack.node.to ||\n cur.from == stack.node.from && cur.type == stack.node.type); cur = cur.parent)\n add.push(cur);\n for (let i = add.length - 1; i >= 0; i--)\n stack = { node: add[i], next: stack };\n }\n return indentFor(stack, cx, pos);\n}\nfunction indentFor(stack, cx, pos) {\n for (let cur = stack; cur; cur = cur.next) {\n let strategy = indentStrategy(cur.node);\n if (strategy)\n return strategy(TreeIndentContext.create(cx, pos, cur));\n }\n return 0;\n}\nfunction ignoreClosed(cx) {\n return cx.pos == cx.options.simulateBreak && cx.options.simulateDoubleBreak;\n}\nfunction indentStrategy(tree) {\n let strategy = tree.type.prop(indentNodeProp);\n if (strategy)\n return strategy;\n let first = tree.firstChild, close;\n if (first && (close = first.type.prop(NodeProp.closedBy))) {\n let last = tree.lastChild, closed = last && close.indexOf(last.name) > -1;\n return cx => delimitedStrategy(cx, true, 1, undefined, closed && !ignoreClosed(cx) ? last.from : undefined);\n }\n return tree.parent == null ? topIndent : null;\n}\nfunction topIndent() { return 0; }\n/**\nObjects of this type provide context information and helper\nmethods to indentation functions registered on syntax nodes.\n*/\nclass TreeIndentContext extends IndentContext {\n constructor(base, \n /**\n The position at which indentation is being computed.\n */\n pos, \n /**\n @internal\n */\n context) {\n super(base.state, base.options);\n this.base = base;\n this.pos = pos;\n this.context = context;\n }\n /**\n The syntax tree node to which the indentation strategy\n applies.\n */\n get node() { return this.context.node; }\n /**\n @internal\n */\n static create(base, pos, context) {\n return new TreeIndentContext(base, pos, context);\n }\n /**\n Get the text directly after `this.pos`, either the entire line\n or the next 100 characters, whichever is shorter.\n */\n get textAfter() {\n return this.textAfterPos(this.pos);\n }\n /**\n Get the indentation at the reference line for `this.node`, which\n is the line on which it starts, unless there is a node that is\n _not_ a parent of this node covering the start of that line. If\n so, the line at the start of that node is tried, again skipping\n on if it is covered by another such node.\n */\n get baseIndent() {\n return this.baseIndentFor(this.node);\n }\n /**\n Get the indentation for the reference line of the given node\n (see [`baseIndent`](https://codemirror.net/6/docs/ref/#language.TreeIndentContext.baseIndent)).\n */\n baseIndentFor(node) {\n let line = this.state.doc.lineAt(node.from);\n // Skip line starts that are covered by a sibling (or cousin, etc)\n for (;;) {\n let atBreak = node.resolve(line.from);\n while (atBreak.parent && atBreak.parent.from == atBreak.from)\n atBreak = atBreak.parent;\n if (isParent(atBreak, node))\n break;\n line = this.state.doc.lineAt(atBreak.from);\n }\n return this.lineIndent(line.from);\n }\n /**\n Continue looking for indentations in the node's parent nodes,\n and return the result of that.\n */\n continue() {\n return indentFor(this.context.next, this.base, this.pos);\n }\n}\nfunction isParent(parent, of) {\n for (let cur = of; cur; cur = cur.parent)\n if (parent == cur)\n return true;\n return false;\n}\n// Check whether a delimited node is aligned (meaning there are\n// non-skipped nodes on the same line as the opening delimiter). And\n// if so, return the opening token.\nfunction bracketedAligned(context) {\n let tree = context.node;\n let openToken = tree.childAfter(tree.from), last = tree.lastChild;\n if (!openToken)\n return null;\n let sim = context.options.simulateBreak;\n let openLine = context.state.doc.lineAt(openToken.from);\n let lineEnd = sim == null || sim <= openLine.from ? openLine.to : Math.min(openLine.to, sim);\n for (let pos = openToken.to;;) {\n let next = tree.childAfter(pos);\n if (!next || next == last)\n return null;\n if (!next.type.isSkipped) {\n if (next.from >= lineEnd)\n return null;\n let space = /^ */.exec(openLine.text.slice(openToken.to - openLine.from))[0].length;\n return { from: openToken.from, to: openToken.to + space };\n }\n pos = next.to;\n }\n}\n/**\nAn indentation strategy for delimited (usually bracketed) nodes.\nWill, by default, indent one unit more than the parent's base\nindent unless the line starts with a closing token. When `align`\nis true and there are non-skipped nodes on the node's opening\nline, the content of the node will be aligned with the end of the\nopening node, like this:\n\n foo(bar,\n baz)\n*/\nfunction delimitedIndent({ closing, align = true, units = 1 }) {\n return (context) => delimitedStrategy(context, align, units, closing);\n}\nfunction delimitedStrategy(context, align, units, closing, closedAt) {\n let after = context.textAfter, space = after.match(/^\\s*/)[0].length;\n let closed = closing && after.slice(space, space + closing.length) == closing || closedAt == context.pos + space;\n let aligned = align ? bracketedAligned(context) : null;\n if (aligned)\n return closed ? context.column(aligned.from) : context.column(aligned.to);\n return context.baseIndent + (closed ? 0 : context.unit * units);\n}\n/**\nAn indentation strategy that aligns a node's content to its base\nindentation.\n*/\nconst flatIndent = (context) => context.baseIndent;\n/**\nCreates an indentation strategy that, by default, indents\ncontinued lines one unit more than the node's base indentation.\nYou can provide `except` to prevent indentation of lines that\nmatch a pattern (for example `/^else\\b/` in `if`/`else`\nconstructs), and you can change the amount of units used with the\n`units` option.\n*/\nfunction continuedIndent({ except, units = 1 } = {}) {\n return (context) => {\n let matchExcept = except && except.test(context.textAfter);\n return context.baseIndent + (matchExcept ? 0 : units * context.unit);\n };\n}\nconst DontIndentBeyond = 200;\n/**\nEnables reindentation on input. When a language defines an\n`indentOnInput` field in its [language\ndata](https://codemirror.net/6/docs/ref/#state.EditorState.languageDataAt), which must hold a regular\nexpression, the line at the cursor will be reindented whenever new\ntext is typed and the input from the start of the line up to the\ncursor matches that regexp.\n\nTo avoid unneccesary reindents, it is recommended to start the\nregexp with `^` (usually followed by `\\s*`), and end it with `$`.\nFor example, `/^\\s*\\}$/` will reindent when a closing brace is\nadded at the start of a line.\n*/\nfunction indentOnInput() {\n return EditorState.transactionFilter.of(tr => {\n if (!tr.docChanged || !tr.isUserEvent(\"input.type\") && !tr.isUserEvent(\"input.complete\"))\n return tr;\n let rules = tr.startState.languageDataAt(\"indentOnInput\", tr.startState.selection.main.head);\n if (!rules.length)\n return tr;\n let doc = tr.newDoc, { head } = tr.newSelection.main, line = doc.lineAt(head);\n if (head > line.from + DontIndentBeyond)\n return tr;\n let lineStart = doc.sliceString(line.from, head);\n if (!rules.some(r => r.test(lineStart)))\n return tr;\n let { state } = tr, last = -1, changes = [];\n for (let { head } of state.selection.ranges) {\n let line = state.doc.lineAt(head);\n if (line.from == last)\n continue;\n last = line.from;\n let indent = getIndentation(state, line.from);\n if (indent == null)\n continue;\n let cur = /^\\s*/.exec(line.text)[0];\n let norm = indentString(state, indent);\n if (cur != norm)\n changes.push({ from: line.from, to: line.from + cur.length, insert: norm });\n }\n return changes.length ? [tr, { changes, sequential: true }] : tr;\n });\n}\n\n/**\nA facet that registers a code folding service. When called with\nthe extent of a line, such a function should return a foldable\nrange that starts on that line (but continues beyond it), if one\ncan be found.\n*/\nconst foldService = /*@__PURE__*/Facet.define();\n/**\nThis node prop is used to associate folding information with\nsyntax node types. Given a syntax node, it should check whether\nthat tree is foldable and return the range that can be collapsed\nwhen it is.\n*/\nconst foldNodeProp = /*@__PURE__*/new NodeProp();\n/**\n[Fold](https://codemirror.net/6/docs/ref/#language.foldNodeProp) function that folds everything but\nthe first and the last child of a syntax node. Useful for nodes\nthat start and end with delimiters.\n*/\nfunction foldInside(node) {\n let first = node.firstChild, last = node.lastChild;\n return first && first.to < last.from ? { from: first.to, to: last.type.isError ? node.to : last.from } : null;\n}\nfunction syntaxFolding(state, start, end) {\n let tree = syntaxTree(state);\n if (tree.length < end)\n return null;\n let stack = tree.resolveStack(end, 1);\n let found = null;\n for (let iter = stack; iter; iter = iter.next) {\n let cur = iter.node;\n if (cur.to <= end || cur.from > end)\n continue;\n if (found && cur.from < start)\n break;\n let prop = cur.type.prop(foldNodeProp);\n if (prop && (cur.to < tree.length - 50 || tree.length == state.doc.length || !isUnfinished(cur))) {\n let value = prop(cur, state);\n if (value && value.from <= end && value.from >= start && value.to > end)\n found = value;\n }\n }\n return found;\n}\nfunction isUnfinished(node) {\n let ch = node.lastChild;\n return ch && ch.to == node.to && ch.type.isError;\n}\n/**\nCheck whether the given line is foldable. First asks any fold\nservices registered through\n[`foldService`](https://codemirror.net/6/docs/ref/#language.foldService), and if none of them return\na result, tries to query the [fold node\nprop](https://codemirror.net/6/docs/ref/#language.foldNodeProp) of syntax nodes that cover the end\nof the line.\n*/\nfunction foldable(state, lineStart, lineEnd) {\n for (let service of state.facet(foldService)) {\n let result = service(state, lineStart, lineEnd);\n if (result)\n return result;\n }\n return syntaxFolding(state, lineStart, lineEnd);\n}\nfunction mapRange(range, mapping) {\n let from = mapping.mapPos(range.from, 1), to = mapping.mapPos(range.to, -1);\n return from >= to ? undefined : { from, to };\n}\n/**\nState effect that can be attached to a transaction to fold the\ngiven range. (You probably only need this in exceptional\ncircumstances—usually you'll just want to let\n[`foldCode`](https://codemirror.net/6/docs/ref/#language.foldCode) and the [fold\ngutter](https://codemirror.net/6/docs/ref/#language.foldGutter) create the transactions.)\n*/\nconst foldEffect = /*@__PURE__*/StateEffect.define({ map: mapRange });\n/**\nState effect that unfolds the given range (if it was folded).\n*/\nconst unfoldEffect = /*@__PURE__*/StateEffect.define({ map: mapRange });\nfunction selectedLines(view) {\n let lines = [];\n for (let { head } of view.state.selection.ranges) {\n if (lines.some(l => l.from <= head && l.to >= head))\n continue;\n lines.push(view.lineBlockAt(head));\n }\n return lines;\n}\n/**\nThe state field that stores the folded ranges (as a [decoration\nset](https://codemirror.net/6/docs/ref/#view.DecorationSet)). Can be passed to\n[`EditorState.toJSON`](https://codemirror.net/6/docs/ref/#state.EditorState.toJSON) and\n[`fromJSON`](https://codemirror.net/6/docs/ref/#state.EditorState^fromJSON) to serialize the fold\nstate.\n*/\nconst foldState = /*@__PURE__*/StateField.define({\n create() {\n return Decoration.none;\n },\n update(folded, tr) {\n if (tr.isUserEvent(\"delete\"))\n tr.changes.iterChangedRanges((fromA, toA) => folded = clearTouchedFolds(folded, fromA, toA));\n folded = folded.map(tr.changes);\n for (let e of tr.effects) {\n if (e.is(foldEffect) && !foldExists(folded, e.value.from, e.value.to)) {\n let { preparePlaceholder } = tr.state.facet(foldConfig);\n let widget = !preparePlaceholder ? foldWidget :\n Decoration.replace({ widget: new PreparedFoldWidget(preparePlaceholder(tr.state, e.value)) });\n folded = folded.update({ add: [widget.range(e.value.from, e.value.to)] });\n }\n else if (e.is(unfoldEffect)) {\n folded = folded.update({ filter: (from, to) => e.value.from != from || e.value.to != to,\n filterFrom: e.value.from, filterTo: e.value.to });\n }\n }\n // Clear folded ranges that cover the selection head\n if (tr.selection)\n folded = clearTouchedFolds(folded, tr.selection.main.head);\n return folded;\n },\n provide: f => EditorView.decorations.from(f),\n toJSON(folded, state) {\n let ranges = [];\n folded.between(0, state.doc.length, (from, to) => { ranges.push(from, to); });\n return ranges;\n },\n fromJSON(value) {\n if (!Array.isArray(value) || value.length % 2)\n throw new RangeError(\"Invalid JSON for fold state\");\n let ranges = [];\n for (let i = 0; i < value.length;) {\n let from = value[i++], to = value[i++];\n if (typeof from != \"number\" || typeof to != \"number\")\n throw new RangeError(\"Invalid JSON for fold state\");\n ranges.push(foldWidget.range(from, to));\n }\n return Decoration.set(ranges, true);\n }\n});\nfunction clearTouchedFolds(folded, from, to = from) {\n let touched = false;\n folded.between(from, to, (a, b) => { if (a < to && b > from)\n touched = true; });\n return !touched ? folded : folded.update({\n filterFrom: from,\n filterTo: to,\n filter: (a, b) => a >= to || b <= from\n });\n}\n/**\nGet a [range set](https://codemirror.net/6/docs/ref/#state.RangeSet) containing the folded ranges\nin the given state.\n*/\nfunction foldedRanges(state) {\n return state.field(foldState, false) || RangeSet.empty;\n}\nfunction findFold(state, from, to) {\n var _a;\n let found = null;\n (_a = state.field(foldState, false)) === null || _a === void 0 ? void 0 : _a.between(from, to, (from, to) => {\n if (!found || found.from > from)\n found = { from, to };\n });\n return found;\n}\nfunction foldExists(folded, from, to) {\n let found = false;\n folded.between(from, from, (a, b) => { if (a == from && b == to)\n found = true; });\n return found;\n}\nfunction maybeEnable(state, other) {\n return state.field(foldState, false) ? other : other.concat(StateEffect.appendConfig.of(codeFolding()));\n}\n/**\nFold the lines that are selected, if possible.\n*/\nconst foldCode = view => {\n for (let line of selectedLines(view)) {\n let range = foldable(view.state, line.from, line.to);\n if (range) {\n view.dispatch({ effects: maybeEnable(view.state, [foldEffect.of(range), announceFold(view, range)]) });\n return true;\n }\n }\n return false;\n};\n/**\nUnfold folded ranges on selected lines.\n*/\nconst unfoldCode = view => {\n if (!view.state.field(foldState, false))\n return false;\n let effects = [];\n for (let line of selectedLines(view)) {\n let folded = findFold(view.state, line.from, line.to);\n if (folded)\n effects.push(unfoldEffect.of(folded), announceFold(view, folded, false));\n }\n if (effects.length)\n view.dispatch({ effects });\n return effects.length > 0;\n};\nfunction announceFold(view, range, fold = true) {\n let lineFrom = view.state.doc.lineAt(range.from).number, lineTo = view.state.doc.lineAt(range.to).number;\n return EditorView.announce.of(`${view.state.phrase(fold ? \"Folded lines\" : \"Unfolded lines\")} ${lineFrom} ${view.state.phrase(\"to\")} ${lineTo}.`);\n}\n/**\nFold all top-level foldable ranges. Note that, in most cases,\nfolding information will depend on the [syntax\ntree](https://codemirror.net/6/docs/ref/#language.syntaxTree), and folding everything may not work\nreliably when the document hasn't been fully parsed (either\nbecause the editor state was only just initialized, or because the\ndocument is so big that the parser decided not to parse it\nentirely).\n*/\nconst foldAll = view => {\n let { state } = view, effects = [];\n for (let pos = 0; pos < state.doc.length;) {\n let line = view.lineBlockAt(pos), range = foldable(state, line.from, line.to);\n if (range)\n effects.push(foldEffect.of(range));\n pos = (range ? view.lineBlockAt(range.to) : line).to + 1;\n }\n if (effects.length)\n view.dispatch({ effects: maybeEnable(view.state, effects) });\n return !!effects.length;\n};\n/**\nUnfold all folded code.\n*/\nconst unfoldAll = view => {\n let field = view.state.field(foldState, false);\n if (!field || !field.size)\n return false;\n let effects = [];\n field.between(0, view.state.doc.length, (from, to) => { effects.push(unfoldEffect.of({ from, to })); });\n view.dispatch({ effects });\n return true;\n};\n// Find the foldable region containing the given line, if one exists\nfunction foldableContainer(view, lineBlock) {\n // Look backwards through line blocks until we find a foldable region that\n // intersects with the line\n for (let line = lineBlock;;) {\n let foldableRegion = foldable(view.state, line.from, line.to);\n if (foldableRegion && foldableRegion.to > lineBlock.from)\n return foldableRegion;\n if (!line.from)\n return null;\n line = view.lineBlockAt(line.from - 1);\n }\n}\n/**\nToggle folding at cursors. Unfolds if there is an existing fold\nstarting in that line, tries to find a foldable range around it\notherwise.\n*/\nconst toggleFold = (view) => {\n let effects = [];\n for (let line of selectedLines(view)) {\n let folded = findFold(view.state, line.from, line.to);\n if (folded) {\n effects.push(unfoldEffect.of(folded), announceFold(view, folded, false));\n }\n else {\n let foldRange = foldableContainer(view, line);\n if (foldRange)\n effects.push(foldEffect.of(foldRange), announceFold(view, foldRange));\n }\n }\n if (effects.length > 0)\n view.dispatch({ effects: maybeEnable(view.state, effects) });\n return !!effects.length;\n};\n/**\nDefault fold-related key bindings.\n\n - Ctrl-Shift-[ (Cmd-Alt-[ on macOS): [`foldCode`](https://codemirror.net/6/docs/ref/#language.foldCode).\n - Ctrl-Shift-] (Cmd-Alt-] on macOS): [`unfoldCode`](https://codemirror.net/6/docs/ref/#language.unfoldCode).\n - Ctrl-Alt-[: [`foldAll`](https://codemirror.net/6/docs/ref/#language.foldAll).\n - Ctrl-Alt-]: [`unfoldAll`](https://codemirror.net/6/docs/ref/#language.unfoldAll).\n*/\nconst foldKeymap = [\n { key: \"Ctrl-Shift-[\", mac: \"Cmd-Alt-[\", run: foldCode },\n { key: \"Ctrl-Shift-]\", mac: \"Cmd-Alt-]\", run: unfoldCode },\n { key: \"Ctrl-Alt-[\", run: foldAll },\n { key: \"Ctrl-Alt-]\", run: unfoldAll }\n];\nconst defaultConfig = {\n placeholderDOM: null,\n preparePlaceholder: null,\n placeholderText: \"…\"\n};\nconst foldConfig = /*@__PURE__*/Facet.define({\n combine(values) { return combineConfig(values, defaultConfig); }\n});\n/**\nCreate an extension that configures code folding.\n*/\nfunction codeFolding(config) {\n let result = [foldState, baseTheme$1];\n if (config)\n result.push(foldConfig.of(config));\n return result;\n}\nfunction widgetToDOM(view, prepared) {\n let { state } = view, conf = state.facet(foldConfig);\n let onclick = (event) => {\n let line = view.lineBlockAt(view.posAtDOM(event.target));\n let folded = findFold(view.state, line.from, line.to);\n if (folded)\n view.dispatch({ effects: unfoldEffect.of(folded) });\n event.preventDefault();\n };\n if (conf.placeholderDOM)\n return conf.placeholderDOM(view, onclick, prepared);\n let element = document.createElement(\"span\");\n element.textContent = conf.placeholderText;\n element.setAttribute(\"aria-label\", state.phrase(\"folded code\"));\n element.title = state.phrase(\"unfold\");\n element.className = \"cm-foldPlaceholder\";\n element.onclick = onclick;\n return element;\n}\nconst foldWidget = /*@__PURE__*/Decoration.replace({ widget: /*@__PURE__*/new class extends WidgetType {\n toDOM(view) { return widgetToDOM(view, null); }\n } });\nclass PreparedFoldWidget extends WidgetType {\n constructor(value) {\n super();\n this.value = value;\n }\n eq(other) { return this.value == other.value; }\n toDOM(view) { return widgetToDOM(view, this.value); }\n}\nconst foldGutterDefaults = {\n openText: \"⌄\",\n closedText: \"›\",\n markerDOM: null,\n domEventHandlers: {},\n foldingChanged: () => false\n};\nclass FoldMarker extends GutterMarker {\n constructor(config, open) {\n super();\n this.config = config;\n this.open = open;\n }\n eq(other) { return this.config == other.config && this.open == other.open; }\n toDOM(view) {\n if (this.config.markerDOM)\n return this.config.markerDOM(this.open);\n let span = document.createElement(\"span\");\n span.textContent = this.open ? this.config.openText : this.config.closedText;\n span.title = view.state.phrase(this.open ? \"Fold line\" : \"Unfold line\");\n return span;\n }\n}\n/**\nCreate an extension that registers a fold gutter, which shows a\nfold status indicator before foldable lines (which can be clicked\nto fold or unfold the line).\n*/\nfunction foldGutter(config = {}) {\n let fullConfig = { ...foldGutterDefaults, ...config };\n let canFold = new FoldMarker(fullConfig, true), canUnfold = new FoldMarker(fullConfig, false);\n let markers = ViewPlugin.fromClass(class {\n constructor(view) {\n this.from = view.viewport.from;\n this.markers = this.buildMarkers(view);\n }\n update(update) {\n if (update.docChanged || update.viewportChanged ||\n update.startState.facet(language) != update.state.facet(language) ||\n update.startState.field(foldState, false) != update.state.field(foldState, false) ||\n syntaxTree(update.startState) != syntaxTree(update.state) ||\n fullConfig.foldingChanged(update))\n this.markers = this.buildMarkers(update.view);\n }\n buildMarkers(view) {\n let builder = new RangeSetBuilder();\n for (let line of view.viewportLineBlocks) {\n let mark = findFold(view.state, line.from, line.to) ? canUnfold\n : foldable(view.state, line.from, line.to) ? canFold : null;\n if (mark)\n builder.add(line.from, line.from, mark);\n }\n return builder.finish();\n }\n });\n let { domEventHandlers } = fullConfig;\n return [\n markers,\n gutter({\n class: \"cm-foldGutter\",\n markers(view) { var _a; return ((_a = view.plugin(markers)) === null || _a === void 0 ? void 0 : _a.markers) || RangeSet.empty; },\n initialSpacer() {\n return new FoldMarker(fullConfig, false);\n },\n domEventHandlers: {\n ...domEventHandlers,\n click: (view, line, event) => {\n if (domEventHandlers.click && domEventHandlers.click(view, line, event))\n return true;\n let folded = findFold(view.state, line.from, line.to);\n if (folded) {\n view.dispatch({ effects: unfoldEffect.of(folded) });\n return true;\n }\n let range = foldable(view.state, line.from, line.to);\n if (range) {\n view.dispatch({ effects: foldEffect.of(range) });\n return true;\n }\n return false;\n }\n }\n }),\n codeFolding()\n ];\n}\nconst baseTheme$1 = /*@__PURE__*/EditorView.baseTheme({\n \".cm-foldPlaceholder\": {\n backgroundColor: \"#eee\",\n border: \"1px solid #ddd\",\n color: \"#888\",\n borderRadius: \".2em\",\n margin: \"0 1px\",\n padding: \"0 1px\",\n cursor: \"pointer\"\n },\n \".cm-foldGutter span\": {\n padding: \"0 1px\",\n cursor: \"pointer\"\n }\n});\n\n/**\nA highlight style associates CSS styles with highlighting\n[tags](https://lezer.codemirror.net/docs/ref#highlight.Tag).\n*/\nclass HighlightStyle {\n constructor(\n /**\n The tag styles used to create this highlight style.\n */\n specs, options) {\n this.specs = specs;\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 const all = typeof options.all == \"string\" ? options.all : options.all ? def(options.all) : undefined;\n const scopeOpt = options.scope;\n this.scope = scopeOpt instanceof Language ? (type) => type.prop(languageDataProp) == scopeOpt.data\n : scopeOpt ? (type) => type == scopeOpt : undefined;\n this.style = tagHighlighter(specs.map(style => ({\n tag: style.tag,\n class: style.class || def(Object.assign({}, style, { tag: null }))\n })), {\n all,\n }).style;\n this.module = modSpec ? new StyleModule(modSpec) : null;\n this.themeType = options.themeType;\n }\n /**\n Create a highlighter style that associates the given styles to\n the given tags. The specs 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 highlighter\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}\nconst highlighterFacet = /*@__PURE__*/Facet.define();\nconst fallbackHighlighter = /*@__PURE__*/Facet.define({\n combine(values) { return values.length ? [values[0]] : null; }\n});\nfunction getHighlighters(state) {\n let main = state.facet(highlighterFacet);\n return main.length ? main : state.facet(fallbackHighlighter);\n}\n/**\nWrap a highlighter in an editor extension that uses it to apply\nsyntax highlighting to the editor content.\n\nWhen multiple (non-fallback) styles are provided, the styling\napplied is the union of the classes they emit.\n*/\nfunction syntaxHighlighting(highlighter, options) {\n let ext = [treeHighlighter], themeType;\n if (highlighter instanceof HighlightStyle) {\n if (highlighter.module)\n ext.push(EditorView.styleModule.of(highlighter.module));\n themeType = highlighter.themeType;\n }\n if (options === null || options === void 0 ? void 0 : options.fallback)\n ext.push(fallbackHighlighter.of(highlighter));\n else if (themeType)\n ext.push(highlighterFacet.computeN([EditorView.darkTheme], state => {\n return state.facet(EditorView.darkTheme) == (themeType == \"dark\") ? [highlighter] : [];\n }));\n else\n ext.push(highlighterFacet.of(highlighter));\n return ext;\n}\n/**\nReturns the CSS classes (if any) that the highlighters active in\nthe state would assign to the given style\n[tags](https://lezer.codemirror.net/docs/ref#highlight.Tag) and\n(optional) language\n[scope](https://codemirror.net/6/docs/ref/#language.HighlightStyle^define^options.scope).\n*/\nfunction highlightingFor(state, tags, scope) {\n let highlighters = getHighlighters(state);\n let result = null;\n if (highlighters)\n for (let highlighter of highlighters) {\n if (!highlighter.scope || scope && highlighter.scope(scope)) {\n let cls = highlighter.style(tags);\n if (cls)\n result = result ? result + \" \" + cls : cls;\n }\n }\n return result;\n}\nclass TreeHighlighter {\n constructor(view) {\n this.markCache = Object.create(null);\n this.tree = syntaxTree(view.state);\n this.decorations = this.buildDeco(view, getHighlighters(view.state));\n this.decoratedTo = view.viewport.to;\n }\n update(update) {\n let tree = syntaxTree(update.state), highlighters = getHighlighters(update.state);\n let styleChange = highlighters != getHighlighters(update.startState);\n let { viewport } = update.view, decoratedToMapped = update.changes.mapPos(this.decoratedTo, 1);\n if (tree.length < viewport.to && !styleChange && tree.type == this.tree.type && decoratedToMapped >= viewport.to) {\n this.decorations = this.decorations.map(update.changes);\n this.decoratedTo = decoratedToMapped;\n }\n else if (tree != this.tree || update.viewportChanged || styleChange) {\n this.tree = tree;\n this.decorations = this.buildDeco(update.view, highlighters);\n this.decoratedTo = viewport.to;\n }\n }\n buildDeco(view, highlighters) {\n if (!highlighters || !this.tree.length)\n return Decoration.none;\n let builder = new RangeSetBuilder();\n for (let { from, to } of view.visibleRanges) {\n highlightTree(this.tree, highlighters, (from, to, style) => {\n builder.add(from, to, this.markCache[style] || (this.markCache[style] = Decoration.mark({ class: style })));\n }, from, to);\n }\n return builder.finish();\n }\n}\nconst treeHighlighter = /*@__PURE__*/Prec.high(/*@__PURE__*/ViewPlugin.fromClass(TreeHighlighter, {\n decorations: v => v.decorations\n}));\n/**\nA default highlight style (works well with light themes).\n*/\nconst defaultHighlightStyle = /*@__PURE__*/HighlightStyle.define([\n { tag: tags.meta,\n color: \"#404740\" },\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.invalid,\n color: \"#f00\" }\n]);\n\nconst baseTheme = /*@__PURE__*/EditorView.baseTheme({\n \"&.cm-focused .cm-matchingBracket\": { backgroundColor: \"#328c8252\" },\n \"&.cm-focused .cm-nonmatchingBracket\": { backgroundColor: \"#bb555544\" }\n});\nconst DefaultScanDist = 10000, DefaultBrackets = \"()[]{}\";\nconst bracketMatchingConfig = /*@__PURE__*/Facet.define({\n combine(configs) {\n return combineConfig(configs, {\n afterCursor: true,\n brackets: DefaultBrackets,\n maxScanDistance: DefaultScanDist,\n renderMatch: defaultRenderMatch\n });\n }\n});\nconst matchingMark = /*@__PURE__*/Decoration.mark({ class: \"cm-matchingBracket\" }), nonmatchingMark = /*@__PURE__*/Decoration.mark({ class: \"cm-nonmatchingBracket\" });\nfunction defaultRenderMatch(match) {\n let decorations = [];\n let mark = match.matched ? matchingMark : nonmatchingMark;\n decorations.push(mark.range(match.start.from, match.start.to));\n if (match.end)\n decorations.push(mark.range(match.end.from, match.end.to));\n return decorations;\n}\nconst bracketMatchingState = /*@__PURE__*/StateField.define({\n create() { return Decoration.none; },\n update(deco, tr) {\n if (!tr.docChanged && !tr.selection)\n return deco;\n let decorations = [];\n let config = tr.state.facet(bracketMatchingConfig);\n for (let range of tr.state.selection.ranges) {\n if (!range.empty)\n continue;\n let match = matchBrackets(tr.state, range.head, -1, config)\n || (range.head > 0 && matchBrackets(tr.state, range.head - 1, 1, config))\n || (config.afterCursor &&\n (matchBrackets(tr.state, range.head, 1, config) ||\n (range.head < tr.state.doc.length && matchBrackets(tr.state, range.head + 1, -1, config))));\n if (match)\n decorations = decorations.concat(config.renderMatch(match, tr.state));\n }\n return Decoration.set(decorations, true);\n },\n provide: f => EditorView.decorations.from(f)\n});\nconst bracketMatchingUnique = [\n bracketMatchingState,\n baseTheme\n];\n/**\nCreate an extension that enables bracket matching. Whenever the\ncursor is next to a bracket, that bracket and the one it matches\nare highlighted. Or, when no matching bracket is found, another\nhighlighting style is used to indicate this.\n*/\nfunction bracketMatching(config = {}) {\n return [bracketMatchingConfig.of(config), bracketMatchingUnique];\n}\n/**\nWhen larger syntax nodes, such as HTML tags, are marked as\nopening/closing, it can be a bit messy to treat the whole node as\na matchable bracket. This node prop allows you to define, for such\na node, a ‘handle’—the part of the node that is highlighted, and\nthat the cursor must be on to activate highlighting in the first\nplace.\n*/\nconst bracketMatchingHandle = /*@__PURE__*/new NodeProp();\nfunction matchingNodes(node, dir, brackets) {\n let byProp = node.prop(dir < 0 ? NodeProp.openedBy : NodeProp.closedBy);\n if (byProp)\n return byProp;\n if (node.name.length == 1) {\n let index = brackets.indexOf(node.name);\n if (index > -1 && index % 2 == (dir < 0 ? 1 : 0))\n return [brackets[index + dir]];\n }\n return null;\n}\nfunction findHandle(node) {\n let hasHandle = node.type.prop(bracketMatchingHandle);\n return hasHandle ? hasHandle(node.node) : node;\n}\n/**\nFind the matching bracket for the token at `pos`, scanning\ndirection `dir`. Only the `brackets` and `maxScanDistance`\nproperties are used from `config`, if given. Returns null if no\nbracket was found at `pos`, or a match result otherwise.\n*/\nfunction matchBrackets(state, pos, dir, config = {}) {\n let maxScanDistance = config.maxScanDistance || DefaultScanDist, brackets = config.brackets || DefaultBrackets;\n let tree = syntaxTree(state), node = tree.resolveInner(pos, dir);\n for (let cur = node; cur; cur = cur.parent) {\n let matches = matchingNodes(cur.type, dir, brackets);\n if (matches && cur.from < cur.to) {\n let handle = findHandle(cur);\n if (handle && (dir > 0 ? pos >= handle.from && pos < handle.to : pos > handle.from && pos <= handle.to))\n return matchMarkedBrackets(state, pos, dir, cur, handle, matches, brackets);\n }\n }\n return matchPlainBrackets(state, pos, dir, tree, node.type, maxScanDistance, brackets);\n}\nfunction matchMarkedBrackets(_state, _pos, dir, token, handle, matching, brackets) {\n let parent = token.parent, firstToken = { from: handle.from, to: handle.to };\n let depth = 0, cursor = parent === null || parent === void 0 ? void 0 : parent.cursor();\n if (cursor && (dir < 0 ? cursor.childBefore(token.from) : cursor.childAfter(token.to)))\n do {\n if (dir < 0 ? cursor.to <= token.from : cursor.from >= token.to) {\n if (depth == 0 && matching.indexOf(cursor.type.name) > -1 && cursor.from < cursor.to) {\n let endHandle = findHandle(cursor);\n return { start: firstToken, end: endHandle ? { from: endHandle.from, to: endHandle.to } : undefined, matched: true };\n }\n else if (matchingNodes(cursor.type, dir, brackets)) {\n depth++;\n }\n else if (matchingNodes(cursor.type, -dir, brackets)) {\n if (depth == 0) {\n let endHandle = findHandle(cursor);\n return {\n start: firstToken,\n end: endHandle && endHandle.from < endHandle.to ? { from: endHandle.from, to: endHandle.to } : undefined,\n matched: false\n };\n }\n depth--;\n }\n }\n } while (dir < 0 ? cursor.prevSibling() : cursor.nextSibling());\n return { start: firstToken, matched: false };\n}\nfunction matchPlainBrackets(state, pos, dir, tree, tokenType, maxScanDistance, brackets) {\n let startCh = dir < 0 ? state.sliceDoc(pos - 1, pos) : state.sliceDoc(pos, pos + 1);\n let bracket = brackets.indexOf(startCh);\n if (bracket < 0 || (bracket % 2 == 0) != (dir > 0))\n return null;\n let startToken = { from: dir < 0 ? pos - 1 : pos, to: dir > 0 ? pos + 1 : pos };\n let iter = state.doc.iterRange(pos, dir > 0 ? state.doc.length : 0), depth = 0;\n for (let distance = 0; !(iter.next()).done && distance <= maxScanDistance;) {\n let text = iter.value;\n if (dir < 0)\n distance += text.length;\n let basePos = pos + distance * dir;\n for (let pos = dir > 0 ? 0 : text.length - 1, end = dir > 0 ? text.length : -1; pos != end; pos += dir) {\n let found = brackets.indexOf(text[pos]);\n if (found < 0 || tree.resolveInner(basePos + pos, 1).type != tokenType)\n continue;\n if ((found % 2 == 0) == (dir > 0)) {\n depth++;\n }\n else if (depth == 1) { // Closing\n return { start: startToken, end: { from: basePos + pos, to: basePos + pos + 1 }, matched: (found >> 1) == (bracket >> 1) };\n }\n else {\n depth--;\n }\n }\n if (dir > 0)\n distance += text.length;\n }\n return iter.done ? { start: startToken, matched: false } : null;\n}\n\n// Counts the column offset in a string, taking tabs into account.\n// Used mostly to find indentation.\nfunction countCol(string, end, tabSize, startIndex = 0, startValue = 0) {\n if (end == null) {\n end = string.search(/[^\\s\\u00a0]/);\n if (end == -1)\n end = string.length;\n }\n let n = startValue;\n for (let i = startIndex; i < end; i++) {\n if (string.charCodeAt(i) == 9)\n n += tabSize - (n % tabSize);\n else\n n++;\n }\n return n;\n}\n/**\nEncapsulates a single line of input. Given to stream syntax code,\nwhich uses it to tokenize the content.\n*/\nclass StringStream {\n /**\n Create a stream.\n */\n constructor(\n /**\n The line.\n */\n string, tabSize, \n /**\n The current indent unit size.\n */\n indentUnit, overrideIndent) {\n this.string = string;\n this.tabSize = tabSize;\n this.indentUnit = indentUnit;\n this.overrideIndent = overrideIndent;\n /**\n The current position on the line.\n */\n this.pos = 0;\n /**\n The start position of the current token.\n */\n this.start = 0;\n this.lastColumnPos = 0;\n this.lastColumnValue = 0;\n }\n /**\n True if we are at the end of the line.\n */\n eol() { return this.pos >= this.string.length; }\n /**\n True if we are at the start of the line.\n */\n sol() { return this.pos == 0; }\n /**\n Get the next code unit after the current position, or undefined\n if we're at the end of the line.\n */\n peek() { return this.string.charAt(this.pos) || undefined; }\n /**\n Read the next code unit and advance `this.pos`.\n */\n next() {\n if (this.pos < this.string.length)\n return this.string.charAt(this.pos++);\n }\n /**\n Match the next character against the given string, regular\n expression, or predicate. Consume and return it if it matches.\n */\n eat(match) {\n let ch = this.string.charAt(this.pos);\n let ok;\n if (typeof match == \"string\")\n ok = ch == match;\n else\n ok = ch && (match instanceof RegExp ? match.test(ch) : match(ch));\n if (ok) {\n ++this.pos;\n return ch;\n }\n }\n /**\n Continue matching characters that match the given string,\n regular expression, or predicate function. Return true if any\n characters were consumed.\n */\n eatWhile(match) {\n let start = this.pos;\n while (this.eat(match)) { }\n return this.pos > start;\n }\n /**\n Consume whitespace ahead of `this.pos`. Return true if any was\n found.\n */\n eatSpace() {\n let start = this.pos;\n while (/[\\s\\u00a0]/.test(this.string.charAt(this.pos)))\n ++this.pos;\n return this.pos > start;\n }\n /**\n Move to the end of the line.\n */\n skipToEnd() { this.pos = this.string.length; }\n /**\n Move to directly before the given character, if found on the\n current line.\n */\n skipTo(ch) {\n let found = this.string.indexOf(ch, this.pos);\n if (found > -1) {\n this.pos = found;\n return true;\n }\n }\n /**\n Move back `n` characters.\n */\n backUp(n) { this.pos -= n; }\n /**\n Get the column position at `this.pos`.\n */\n column() {\n if (this.lastColumnPos < this.start) {\n this.lastColumnValue = countCol(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue);\n this.lastColumnPos = this.start;\n }\n return this.lastColumnValue;\n }\n /**\n Get the indentation column of the current line.\n */\n indentation() {\n var _a;\n return (_a = this.overrideIndent) !== null && _a !== void 0 ? _a : countCol(this.string, null, this.tabSize);\n }\n /**\n Match the input against the given string or regular expression\n (which should start with a `^`). Return true or the regexp match\n if it matches.\n \n Unless `consume` is set to `false`, this will move `this.pos`\n past the matched text.\n \n When matching a string `caseInsensitive` can be set to true to\n make the match case-insensitive.\n */\n match(pattern, consume, caseInsensitive) {\n if (typeof pattern == \"string\") {\n let cased = (str) => caseInsensitive ? str.toLowerCase() : str;\n let substr = this.string.substr(this.pos, pattern.length);\n if (cased(substr) == cased(pattern)) {\n if (consume !== false)\n this.pos += pattern.length;\n return true;\n }\n else\n return null;\n }\n else {\n let match = this.string.slice(this.pos).match(pattern);\n if (match && match.index > 0)\n return null;\n if (match && consume !== false)\n this.pos += match[0].length;\n return match;\n }\n }\n /**\n Get the current token.\n */\n current() { return this.string.slice(this.start, this.pos); }\n}\n\nfunction fullParser(spec) {\n return {\n name: spec.name || \"\",\n token: spec.token,\n blankLine: spec.blankLine || (() => { }),\n startState: spec.startState || (() => true),\n copyState: spec.copyState || defaultCopyState,\n indent: spec.indent || (() => null),\n languageData: spec.languageData || {},\n tokenTable: spec.tokenTable || noTokens,\n mergeTokens: spec.mergeTokens !== false\n };\n}\nfunction defaultCopyState(state) {\n if (typeof state != \"object\")\n return state;\n let newState = {};\n for (let prop in state) {\n let val = state[prop];\n newState[prop] = (val instanceof Array ? val.slice() : val);\n }\n return newState;\n}\nconst IndentedFrom = /*@__PURE__*/new WeakMap();\n/**\nA [language](https://codemirror.net/6/docs/ref/#language.Language) class based on a CodeMirror\n5-style [streaming parser](https://codemirror.net/6/docs/ref/#language.StreamParser).\n*/\nclass StreamLanguage extends Language {\n constructor(parser) {\n let data = defineLanguageFacet(parser.languageData);\n let p = fullParser(parser), self;\n let impl = new class extends Parser {\n createParse(input, fragments, ranges) {\n return new Parse(self, input, fragments, ranges);\n }\n };\n super(data, impl, [], parser.name);\n this.topNode = docID(data, this);\n self = this;\n this.streamParser = p;\n this.stateAfter = new NodeProp({ perNode: true });\n this.tokenTable = parser.tokenTable ? new TokenTable(p.tokenTable) : defaultTokenTable;\n }\n /**\n Define a stream language.\n */\n static define(spec) { return new StreamLanguage(spec); }\n /**\n @internal\n */\n getIndent(cx) {\n let from = undefined;\n let { overrideIndentation } = cx.options;\n if (overrideIndentation) {\n from = IndentedFrom.get(cx.state);\n if (from != null && from < cx.pos - 1e4)\n from = undefined;\n }\n let start = findState(this, cx.node.tree, cx.node.from, cx.node.from, from !== null && from !== void 0 ? from : cx.pos), statePos, state;\n if (start) {\n state = start.state;\n statePos = start.pos + 1;\n }\n else {\n state = this.streamParser.startState(cx.unit);\n statePos = cx.node.from;\n }\n if (cx.pos - statePos > 10000 /* C.MaxIndentScanDist */)\n return null;\n while (statePos < cx.pos) {\n let line = cx.state.doc.lineAt(statePos), end = Math.min(cx.pos, line.to);\n if (line.length) {\n let indentation = overrideIndentation ? overrideIndentation(line.from) : -1;\n let stream = new StringStream(line.text, cx.state.tabSize, cx.unit, indentation < 0 ? undefined : indentation);\n while (stream.pos < end - line.from)\n readToken(this.streamParser.token, stream, state);\n }\n else {\n this.streamParser.blankLine(state, cx.unit);\n }\n if (end == cx.pos)\n break;\n statePos = line.to + 1;\n }\n let line = cx.lineAt(cx.pos);\n if (overrideIndentation && from == null)\n IndentedFrom.set(cx.state, line.from);\n return this.streamParser.indent(state, /^\\s*(.*)/.exec(line.text)[1], cx);\n }\n get allowsNesting() { return false; }\n}\nfunction findState(lang, tree, off, startPos, before) {\n let state = off >= startPos && off + tree.length <= before && tree.prop(lang.stateAfter);\n if (state)\n return { state: lang.streamParser.copyState(state), pos: off + tree.length };\n for (let i = tree.children.length - 1; i >= 0; i--) {\n let child = tree.children[i], pos = off + tree.positions[i];\n let found = child instanceof Tree && pos < before && findState(lang, child, pos, startPos, before);\n if (found)\n return found;\n }\n return null;\n}\nfunction cutTree(lang, tree, from, to, inside) {\n if (inside && from <= 0 && to >= tree.length)\n return tree;\n if (!inside && from == 0 && tree.type == lang.topNode)\n inside = true;\n for (let i = tree.children.length - 1; i >= 0; i--) {\n let pos = tree.positions[i], child = tree.children[i], inner;\n if (pos < to && child instanceof Tree) {\n if (!(inner = cutTree(lang, child, from - pos, to - pos, inside)))\n break;\n return !inside ? inner\n : new Tree(tree.type, tree.children.slice(0, i).concat(inner), tree.positions.slice(0, i + 1), pos + inner.length);\n }\n }\n return null;\n}\nfunction findStartInFragments(lang, fragments, startPos, endPos, editorState) {\n for (let f of fragments) {\n let from = f.from + (f.openStart ? 25 : 0), to = f.to - (f.openEnd ? 25 : 0);\n let found = from <= startPos && to > startPos && findState(lang, f.tree, 0 - f.offset, startPos, to), tree;\n if (found && found.pos <= endPos && (tree = cutTree(lang, f.tree, startPos + f.offset, found.pos + f.offset, false)))\n return { state: found.state, tree };\n }\n return { state: lang.streamParser.startState(editorState ? getIndentUnit(editorState) : 4), tree: Tree.empty };\n}\nclass Parse {\n constructor(lang, input, fragments, ranges) {\n this.lang = lang;\n this.input = input;\n this.fragments = fragments;\n this.ranges = ranges;\n this.stoppedAt = null;\n this.chunks = [];\n this.chunkPos = [];\n this.chunk = [];\n this.chunkReused = undefined;\n this.rangeIndex = 0;\n this.to = ranges[ranges.length - 1].to;\n let context = ParseContext.get(), from = ranges[0].from;\n let { state, tree } = findStartInFragments(lang, fragments, from, this.to, context === null || context === void 0 ? void 0 : context.state);\n this.state = state;\n this.parsedPos = this.chunkStart = from + tree.length;\n for (let i = 0; i < tree.children.length; i++) {\n this.chunks.push(tree.children[i]);\n this.chunkPos.push(tree.positions[i]);\n }\n if (context && this.parsedPos < context.viewport.from - 100000 /* C.MaxDistanceBeforeViewport */ &&\n ranges.some(r => r.from <= context.viewport.from && r.to >= context.viewport.from)) {\n this.state = this.lang.streamParser.startState(getIndentUnit(context.state));\n context.skipUntilInView(this.parsedPos, context.viewport.from);\n this.parsedPos = context.viewport.from;\n }\n this.moveRangeIndex();\n }\n advance() {\n let context = ParseContext.get();\n let parseEnd = this.stoppedAt == null ? this.to : Math.min(this.to, this.stoppedAt);\n let end = Math.min(parseEnd, this.chunkStart + 512 /* C.ChunkSize */);\n if (context)\n end = Math.min(end, context.viewport.to);\n while (this.parsedPos < end)\n this.parseLine(context);\n if (this.chunkStart < this.parsedPos)\n this.finishChunk();\n if (this.parsedPos >= parseEnd)\n return this.finish();\n if (context && this.parsedPos >= context.viewport.to) {\n context.skipUntilInView(this.parsedPos, parseEnd);\n return this.finish();\n }\n return null;\n }\n stopAt(pos) {\n this.stoppedAt = pos;\n }\n lineAfter(pos) {\n let chunk = this.input.chunk(pos);\n if (!this.input.lineChunks) {\n let eol = chunk.indexOf(\"\\n\");\n if (eol > -1)\n chunk = chunk.slice(0, eol);\n }\n else if (chunk == \"\\n\") {\n chunk = \"\";\n }\n return pos + chunk.length <= this.to ? chunk : chunk.slice(0, this.to - pos);\n }\n nextLine() {\n let from = this.parsedPos, line = this.lineAfter(from), end = from + line.length;\n for (let index = this.rangeIndex;;) {\n let rangeEnd = this.ranges[index].to;\n if (rangeEnd >= end)\n break;\n line = line.slice(0, rangeEnd - (end - line.length));\n index++;\n if (index == this.ranges.length)\n break;\n let rangeStart = this.ranges[index].from;\n let after = this.lineAfter(rangeStart);\n line += after;\n end = rangeStart + after.length;\n }\n return { line, end };\n }\n skipGapsTo(pos, offset, side) {\n for (;;) {\n let end = this.ranges[this.rangeIndex].to, offPos = pos + offset;\n if (side > 0 ? end > offPos : end >= offPos)\n break;\n let start = this.ranges[++this.rangeIndex].from;\n offset += start - end;\n }\n return offset;\n }\n moveRangeIndex() {\n while (this.ranges[this.rangeIndex].to < this.parsedPos)\n this.rangeIndex++;\n }\n emitToken(id, from, to, offset) {\n let size = 4;\n if (this.ranges.length > 1) {\n offset = this.skipGapsTo(from, offset, 1);\n from += offset;\n let len0 = this.chunk.length;\n offset = this.skipGapsTo(to, offset, -1);\n to += offset;\n size += this.chunk.length - len0;\n }\n let last = this.chunk.length - 4;\n if (this.lang.streamParser.mergeTokens && size == 4 && last >= 0 &&\n this.chunk[last] == id && this.chunk[last + 2] == from)\n this.chunk[last + 2] = to;\n else\n this.chunk.push(id, from, to, size);\n return offset;\n }\n parseLine(context) {\n let { line, end } = this.nextLine(), offset = 0, { streamParser } = this.lang;\n let stream = new StringStream(line, context ? context.state.tabSize : 4, context ? getIndentUnit(context.state) : 2);\n if (stream.eol()) {\n streamParser.blankLine(this.state, stream.indentUnit);\n }\n else {\n while (!stream.eol()) {\n let token = readToken(streamParser.token, stream, this.state);\n if (token)\n offset = this.emitToken(this.lang.tokenTable.resolve(token), this.parsedPos + stream.start, this.parsedPos + stream.pos, offset);\n if (stream.start > 10000 /* C.MaxLineLength */)\n break;\n }\n }\n this.parsedPos = end;\n this.moveRangeIndex();\n if (this.parsedPos < this.to)\n this.parsedPos++;\n }\n finishChunk() {\n let tree = Tree.build({\n buffer: this.chunk,\n start: this.chunkStart,\n length: this.parsedPos - this.chunkStart,\n nodeSet,\n topID: 0,\n maxBufferLength: 512 /* C.ChunkSize */,\n reused: this.chunkReused\n });\n tree = new Tree(tree.type, tree.children, tree.positions, tree.length, [[this.lang.stateAfter, this.lang.streamParser.copyState(this.state)]]);\n this.chunks.push(tree);\n this.chunkPos.push(this.chunkStart - this.ranges[0].from);\n this.chunk = [];\n this.chunkReused = undefined;\n this.chunkStart = this.parsedPos;\n }\n finish() {\n return new Tree(this.lang.topNode, this.chunks, this.chunkPos, this.parsedPos - this.ranges[0].from).balance();\n }\n}\nfunction readToken(token, stream, state) {\n stream.start = stream.pos;\n for (let i = 0; i < 10; i++) {\n let result = token(stream, state);\n if (stream.pos > stream.start)\n return result;\n }\n throw new Error(\"Stream parser failed to advance stream.\");\n}\nconst noTokens = /*@__PURE__*/Object.create(null);\nconst typeArray = [NodeType.none];\nconst nodeSet = /*@__PURE__*/new NodeSet(typeArray);\nconst warned = [];\n// Cache of node types by name and tags\nconst byTag = /*@__PURE__*/Object.create(null);\nconst defaultTable = /*@__PURE__*/Object.create(null);\nfor (let [legacyName, name] of [\n [\"variable\", \"variableName\"],\n [\"variable-2\", \"variableName.special\"],\n [\"string-2\", \"string.special\"],\n [\"def\", \"variableName.definition\"],\n [\"tag\", \"tagName\"],\n [\"attribute\", \"attributeName\"],\n [\"type\", \"typeName\"],\n [\"builtin\", \"variableName.standard\"],\n [\"qualifier\", \"modifier\"],\n [\"error\", \"invalid\"],\n [\"header\", \"heading\"],\n [\"property\", \"propertyName\"]\n])\n defaultTable[legacyName] = /*@__PURE__*/createTokenType(noTokens, name);\nclass TokenTable {\n constructor(extra) {\n this.extra = extra;\n this.table = Object.assign(Object.create(null), defaultTable);\n }\n resolve(tag) {\n return !tag ? 0 : this.table[tag] || (this.table[tag] = createTokenType(this.extra, tag));\n }\n}\nconst defaultTokenTable = /*@__PURE__*/new TokenTable(noTokens);\nfunction warnForPart(part, msg) {\n if (warned.indexOf(part) > -1)\n return;\n warned.push(part);\n console.warn(msg);\n}\nfunction createTokenType(extra, tagStr) {\n let tags$1 = [];\n for (let name of tagStr.split(\" \")) {\n let found = [];\n for (let part of name.split(\".\")) {\n let value = (extra[part] || tags[part]);\n if (!value) {\n warnForPart(part, `Unknown highlighting tag ${part}`);\n }\n else if (typeof value == \"function\") {\n if (!found.length)\n warnForPart(part, `Modifier ${part} used at start of tag`);\n else\n found = found.map(value);\n }\n else {\n if (found.length)\n warnForPart(part, `Tag ${part} used as modifier`);\n else\n found = Array.isArray(value) ? value : [value];\n }\n }\n for (let tag of found)\n tags$1.push(tag);\n }\n if (!tags$1.length)\n return 0;\n let name = tagStr.replace(/ /g, \"_\"), key = name + \" \" + tags$1.map(t => t.id);\n let known = byTag[key];\n if (known)\n return known.id;\n let type = byTag[key] = NodeType.define({\n id: typeArray.length,\n name,\n props: [styleTags({ [name]: tags$1 })]\n });\n typeArray.push(type);\n return type.id;\n}\nfunction docID(data, lang) {\n let type = NodeType.define({ id: typeArray.length, name: \"Document\", props: [\n languageDataProp.add(() => data),\n indentNodeProp.add(() => cx => lang.getIndent(cx))\n ], top: true });\n typeArray.push(type);\n return type;\n}\n\nfunction buildForLine(line) {\n return line.length <= 4096 && /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac\\ufb50-\\ufdff]/.test(line);\n}\nfunction textHasRTL(text) {\n for (let i = text.iter(); !i.next().done;)\n if (buildForLine(i.value))\n return true;\n return false;\n}\nfunction changeAddsRTL(change) {\n let added = false;\n change.iterChanges((fA, tA, fB, tB, ins) => {\n if (!added && textHasRTL(ins))\n added = true;\n });\n return added;\n}\nconst alwaysIsolate = /*@__PURE__*/Facet.define({ combine: values => values.some(x => x) });\n/**\nMake sure nodes\n[marked](https://lezer.codemirror.net/docs/ref/#common.NodeProp^isolate)\nas isolating for bidirectional text are rendered in a way that\nisolates them from the surrounding text.\n*/\nfunction bidiIsolates(options = {}) {\n let extensions = [isolateMarks];\n if (options.alwaysIsolate)\n extensions.push(alwaysIsolate.of(true));\n return extensions;\n}\nconst isolateMarks = /*@__PURE__*/ViewPlugin.fromClass(class {\n constructor(view) {\n this.always = view.state.facet(alwaysIsolate) ||\n view.textDirection != Direction.LTR ||\n view.state.facet(EditorView.perLineTextDirection);\n this.hasRTL = !this.always && textHasRTL(view.state.doc);\n this.tree = syntaxTree(view.state);\n this.decorations = this.always || this.hasRTL ? buildDeco(view, this.tree, this.always) : Decoration.none;\n }\n update(update) {\n let always = update.state.facet(alwaysIsolate) ||\n update.view.textDirection != Direction.LTR ||\n update.state.facet(EditorView.perLineTextDirection);\n if (!always && !this.hasRTL && changeAddsRTL(update.changes))\n this.hasRTL = true;\n if (!always && !this.hasRTL)\n return;\n let tree = syntaxTree(update.state);\n if (always != this.always || tree != this.tree || update.docChanged || update.viewportChanged) {\n this.tree = tree;\n this.always = always;\n this.decorations = buildDeco(update.view, tree, always);\n }\n }\n}, {\n provide: plugin => {\n function access(view) {\n var _a, _b;\n return (_b = (_a = view.plugin(plugin)) === null || _a === void 0 ? void 0 : _a.decorations) !== null && _b !== void 0 ? _b : Decoration.none;\n }\n return [EditorView.outerDecorations.of(access),\n Prec.lowest(EditorView.bidiIsolatedRanges.of(access))];\n }\n});\nfunction buildDeco(view, tree, always) {\n let deco = new RangeSetBuilder();\n let ranges = view.visibleRanges;\n if (!always)\n ranges = clipRTLLines(ranges, view.state.doc);\n for (let { from, to } of ranges) {\n tree.iterate({\n enter: node => {\n let iso = node.type.prop(NodeProp.isolate);\n if (iso)\n deco.add(node.from, node.to, marks[iso]);\n },\n from, to\n });\n }\n return deco.finish();\n}\nfunction clipRTLLines(ranges, doc) {\n let cur = doc.iter(), pos = 0, result = [], last = null;\n for (let { from, to } of ranges) {\n if (last && last.to > from) {\n from = last.to;\n if (from >= to)\n continue;\n }\n if (pos + cur.value.length < from) {\n cur.next(from - (pos + cur.value.length));\n pos = from;\n }\n for (;;) {\n let start = pos, end = pos + cur.value.length;\n if (!cur.lineBreak && buildForLine(cur.value)) {\n if (last && last.to > start - 10)\n last.to = Math.min(to, end);\n else\n result.push(last = { from: start, to: Math.min(to, end) });\n }\n if (end >= to)\n break;\n pos = end;\n cur.next();\n }\n }\n return result;\n}\nconst marks = {\n rtl: /*@__PURE__*/Decoration.mark({ class: \"cm-iso\", inclusive: true, attributes: { dir: \"rtl\" }, bidiIsolate: Direction.RTL }),\n ltr: /*@__PURE__*/Decoration.mark({ class: \"cm-iso\", inclusive: true, attributes: { dir: \"ltr\" }, bidiIsolate: Direction.LTR }),\n auto: /*@__PURE__*/Decoration.mark({ class: \"cm-iso\", inclusive: true, attributes: { dir: \"auto\" }, bidiIsolate: null })\n};\n\nexport { DocInput, HighlightStyle, IndentContext, LRLanguage, Language, LanguageDescription, LanguageSupport, ParseContext, StreamLanguage, StringStream, TreeIndentContext, bidiIsolates, bracketMatching, bracketMatchingHandle, codeFolding, continuedIndent, defaultHighlightStyle, defineLanguageFacet, delimitedIndent, ensureSyntaxTree, flatIndent, foldAll, foldCode, foldEffect, foldGutter, foldInside, foldKeymap, foldNodeProp, foldService, foldState, foldable, foldedRanges, forceParsing, getIndentUnit, getIndentation, highlightingFor, indentNodeProp, indentOnInput, indentRange, indentService, indentString, indentUnit, language, languageDataProp, matchBrackets, sublanguageProp, syntaxHighlighting, syntaxParserRunning, syntaxTree, syntaxTreeAvailable, toggleFold, unfoldAll, unfoldCode, unfoldEffect };\n","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 let scan = state.doc.iter(), scanPos = 0, docLen = state.doc.length;\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 if (from > docLen)\n break;\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 to = Math.min(to, docLen);\n let widget = false;\n if (active.some(d => d.from == from && (d.to == to || to == docLen))) {\n widget = from == to;\n if (!widget && to - from < 10) {\n let behind = from - (scanPos + scan.value.length);\n if (behind > 0) {\n scan.next(behind);\n scanPos = from;\n }\n for (let check = from;;) {\n if (check >= to) {\n widget = true;\n break;\n }\n if (!scan.lineBreak && scanPos + scan.value.length > check)\n break;\n check = scanPos + scan.value.length;\n scanPos += scan.value.length;\n scan.next();\n }\n }\n }\n let sev = maxSeverity(active);\n if (widget) {\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 if (pos == docLen)\n break;\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 {\n sources: input.map(i => i.source).filter(x => x != null),\n ...combineConfig(input.map(i => i.config), {\n delay: 750,\n markerFilter: null,\n tooltipFilter: null,\n needsRefresh: null,\n hideOn: () => null,\n }, {\n delay: Math.max,\n markerFilter: combineFilter,\n tooltipFilter: combineFilter,\n needsRefresh: (a, b) => !a ? b : !b ? a : u => a(u) || b(u),\n hideOn: (a, b) => !a ? b : !b ? a : (t, x, y) => a(t, x, y) || b(t, x, y),\n autoPanel: (a, b) => a || b\n })\n };\n }\n});\nfunction combineFilter(a, b) {\n return !a ? b : !b ? a : (d, s) => b(a(d, s), s);\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).\n\nNote that settings given here will apply to all linters active in\nthe editor. If `null` is given as source, this only configures the\nlint 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 let markClass = action.markClass ? \" \" + action.markClass : \"\";\n return elt(\"button\", {\n type: \"button\",\n class: \"cm-diagnosticAction\" + markClass,\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.ctrlKey || event.altKey || event.metaKey)\n return;\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 : { ...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":["document","Set","n","Schema","e","Object","t","Math","s","o","c","navigator","Language","LRLanguage","DocInput","ParseContext","Date","r","Promise","LanguageState","setTimeout","clearTimeout","requestIdleCallback","cancelIdleCallback","LanguageSupport","Array","Error","JSON","IndentContext","TreeIndentContext","l","PreparedFoldWidget","RangeError","HighlightStyle","a","TreeHighlighter","d","console","SelectedDiagnostic","LintState","DiagnosticWidget","LintPanel","PanelItem","encodeURIComponent"],"mappings":"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"}
|