@mdn/fred 2.2.0 → 2.2.1
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 +30 -0
- package/components/content-section/server.css +1 -1
- package/components/curriculum/layout.css +2 -77
- package/components/curriculum/sidebar.css +0 -4
- package/components/curriculum/toc.css +1 -3
- package/components/curriculum-about/server.js +15 -6
- package/components/curriculum-default/server.js +15 -6
- package/components/curriculum-module/server.js +15 -6
- package/components/curriculum-overview/server.js +15 -36
- package/components/generic-layout/server.css +4 -60
- package/components/generic-layout/server.js +9 -4
- package/components/generic-sidebar/server.css +1 -3
- package/components/generic-toc/server.css +0 -3
- package/components/homepage-contributor-spotlight/server.css +5 -1
- package/components/html/global.css +2 -1
- package/components/layout/2-sidebars.css +141 -0
- package/components/layout/README.md +52 -10
- package/components/layout/global.css +5 -6
- package/components/left-sidebar/server.css +2 -12
- package/components/page-layout/server.css +1 -1
- package/components/play-console/element.css +15 -0
- package/components/print/global.css +2 -2
- package/components/reference-layout/server.css +2 -80
- package/components/reference-layout/server.js +6 -6
- package/out/service-worker.js +1 -1
- package/out/service-worker.js.map +1 -1
- package/out/static/client/{198.edf1fdf142c21fb8.css → 198.f743d603d3fa74b7.css} +2 -2
- package/out/static/client/{198.edf1fdf142c21fb8.css.map → 198.f743d603d3fa74b7.css.map} +1 -1
- package/out/static/client/270.66bae6059a1c23f9.css +2 -0
- package/out/static/client/270.66bae6059a1c23f9.css.map +1 -0
- package/out/static/client/5408.a0622390fa1726dc.css +2 -0
- package/out/static/client/5408.a0622390fa1726dc.css.map +1 -0
- package/out/static/client/6216.91b6560dce4c40eb.js +2 -0
- package/out/static/client/6216.91b6560dce4c40eb.js.map +1 -0
- package/out/static/client/6760.d97440f1ca6690c6.js +6 -0
- package/out/static/client/6760.d97440f1ca6690c6.js.map +1 -0
- package/out/static/client/{749.f46b8d04d93e42db.js → 749.15180d605dd9d7e9.js} +2 -2
- package/out/static/client/749.15180d605dd9d7e9.js.map +1 -0
- package/out/static/client/{index.a66b5a087a738e61.js → index.a845f20de1913b16.js} +3 -3
- package/out/static/client/{index.a66b5a087a738e61.js.map → index.a845f20de1913b16.js.map} +1 -1
- package/out/static/client/{runtime.149f3caaca6b394a.js → runtime.b11a359ec0a4abb0.js} +2 -2
- package/out/static/client/{runtime.149f3caaca6b394a.js.map → runtime.b11a359ec0a4abb0.js.map} +1 -1
- package/out/static/client/stats.json +740 -686
- package/out/static/client/styles-a11y-menu.7b49a1a7289a65dd.js +1 -0
- package/out/static/client/styles-advertising.ee901de4f53dfcfb.js +1 -0
- package/out/static/client/styles-article-footer.e9f7514e3e96e55e.js +1 -0
- package/out/static/client/styles-banner.d39b1822c276b7a1.js +1 -0
- package/out/static/client/styles-baseline-indicator.b0124633d8959185.js +1 -0
- package/out/static/client/styles-blog-index.a6463d0111bfa84b.js +1 -0
- package/out/static/client/styles-blog-post.226761d5090b01f6.js +1 -0
- package/out/static/client/{styles-blog-post.23b8b3e8e0ec1e69.css → styles-blog-post.c03ec8a22f8d4ff6.css} +2 -2
- package/out/static/client/{styles-blog-post.23b8b3e8e0ec1e69.css.map → styles-blog-post.c03ec8a22f8d4ff6.css.map} +1 -1
- package/out/static/client/styles-breadcrumbs-bar.9539fa2e37251d88.js +1 -0
- package/out/static/client/{styles-breadcrumbs-bar.02910e49bb8b2372.css → styles-breadcrumbs-bar.9a51a3c76a6231d0.css} +2 -2
- package/out/static/client/{styles-breadcrumbs-bar.02910e49bb8b2372.css.map → styles-breadcrumbs-bar.9a51a3c76a6231d0.css.map} +1 -1
- package/out/static/client/styles-breadcrumbs.73650619944b4ea9.js +1 -0
- package/out/static/client/styles-button.63c03050fb25b8ce.js +1 -0
- package/out/static/client/{styles-content-section.302cd1e445138b77.css → styles-content-section.01ee04d014688a05.css} +2 -2
- package/out/static/client/{styles-content-section.302cd1e445138b77.css.map → styles-content-section.01ee04d014688a05.css.map} +1 -1
- package/out/static/client/styles-content-section.4ebcf9edf977159a.js +1 -0
- package/out/static/client/styles-contributor-spotlight.f585c3be560baa36.js +1 -0
- package/out/static/client/styles-curriculum-about.df2a58fdc99668aa.js +1 -0
- package/out/static/client/styles-curriculum-default.87a662ae2e005fdc.js +1 -0
- package/out/static/client/styles-curriculum-landing.9af582d4a3e0692e.js +1 -0
- package/out/static/client/styles-curriculum-module.f87720da3b256bba.js +1 -0
- package/out/static/client/styles-curriculum-overview.16cdc5cb80128597.js +1 -0
- package/out/static/client/styles-featured-articles.950585abbd167c3f.js +1 -0
- package/out/static/client/styles-footer.f49c80542ef1fffb.js +1 -0
- package/out/static/client/styles-generic-about.b208cb4d9b62f6c5.js +1 -0
- package/out/static/client/styles-generic-community.264a7b11b708e2ae.js +1 -0
- package/out/static/client/styles-generic-content.bd4990121f075489.js +1 -0
- package/out/static/client/styles-generic-layout.1bc69c25775219ab.css +2 -0
- package/out/static/client/styles-generic-layout.1bc69c25775219ab.css.map +1 -0
- package/out/static/client/styles-generic-layout.518d8e7529d6d1e8.js +1 -0
- package/out/static/client/styles-generic-sidebar.a304a0ae4ff5d9d0.css +2 -0
- package/out/static/client/styles-generic-sidebar.a304a0ae4ff5d9d0.css.map +1 -0
- package/out/static/client/styles-generic-sidebar.a6ddb6ad375b6dea.js +1 -0
- package/out/static/client/styles-generic-toc.25a47b5903329e13.js +1 -0
- package/out/static/client/styles-generic-toc.b6981465a649e2b6.css +2 -0
- package/out/static/client/styles-generic-toc.b6981465a649e2b6.css.map +1 -0
- package/out/static/client/styles-global.b5c1c00652883917.js +1 -0
- package/out/static/client/{styles-global.2db431c11b66274e.css → styles-global.d24cf1d2734970c9.css} +2 -2
- package/out/static/client/{styles-global.2db431c11b66274e.css.map → styles-global.d24cf1d2734970c9.css.map} +1 -1
- package/out/static/client/styles-heading-anchor.a68e3e0eb0044a98.js +1 -0
- package/out/static/client/styles-homepage-body.04efe05e01579005.js +1 -0
- package/out/static/client/styles-homepage-contributor-spotlight.2bcbb1476c70410c.css +2 -0
- package/out/static/client/styles-homepage-contributor-spotlight.2bcbb1476c70410c.css.map +1 -0
- package/out/static/client/styles-homepage-contributor-spotlight.2da6fde81ab2e03a.js +1 -0
- package/out/static/client/styles-homepage-footer.d85ee198521b0417.js +1 -0
- package/out/static/client/styles-homepage-header.5c911fca0afedc7b.js +1 -0
- package/out/static/client/styles-homepage-hero.84542c123063331a.js +1 -0
- package/out/static/client/styles-homepage.6e3908e268226cfc.js +1 -0
- package/out/static/client/styles-latest-news.44b2cf830a3df3ba.js +1 -0
- package/out/static/client/styles-left-sidebar.81864a1b1af13cdc.css +2 -0
- package/out/static/client/styles-left-sidebar.81864a1b1af13cdc.css.map +1 -0
- package/out/static/client/styles-left-sidebar.c2ccc5982e4f4ec0.js +1 -0
- package/out/static/client/styles-logo.0e5223b5ca6c5c86.js +1 -0
- package/out/static/client/styles-mandala.5c6c0f84ff4bc09b.js +1 -0
- package/out/static/client/styles-menu.649d9e554d19dacb.js +1 -0
- package/out/static/client/styles-navigation.1bb818a8993b53bb.js +1 -0
- package/out/static/client/styles-not-found.5548da6ee760df5e.js +1 -0
- package/out/static/client/{styles-observatory-landing.7b47ee0004877825.css → styles-observatory-landing.55565f28f568d9fe.css} +2 -2
- package/out/static/client/{styles-observatory-landing.7b47ee0004877825.css.map → styles-observatory-landing.55565f28f568d9fe.css.map} +1 -1
- package/out/static/client/styles-observatory-landing.7b756d84bfd1f4a5.js +1 -0
- package/out/static/client/{styles-observatory-results.d8a2bea1fbfd4b2b.css → styles-observatory-results.8a6dcd7f335b94cc.css} +2 -2
- package/out/static/client/{styles-observatory-results.d8a2bea1fbfd4b2b.css.map → styles-observatory-results.8a6dcd7f335b94cc.css.map} +1 -1
- package/out/static/client/styles-observatory-results.a50f31e31fe5ce13.js +1 -0
- package/out/static/client/{styles-page-layout.e9b295138adbd4bc.css → styles-page-layout.5a4354f33e894319.css} +2 -2
- package/out/static/client/{styles-page-layout.e9b295138adbd4bc.css.map → styles-page-layout.5a4354f33e894319.css.map} +1 -1
- package/out/static/client/styles-page-layout.9a6bdcc133e4e481.js +1 -0
- package/out/static/client/styles-pagination.5b25c72cc0556f24.js +1 -0
- package/out/static/client/styles-playground.090bda8c12a63ec0.js +1 -0
- package/out/static/client/styles-recent-contributions.e713ba28ab0b7bc3.js +1 -0
- package/out/static/client/styles-reference-layout.e853d0ede90ff6ff.js +1 -0
- package/out/static/client/styles-reference-layout.f17861486ef2423f.css +2 -0
- package/out/static/client/styles-reference-layout.f17861486ef2423f.css.map +1 -0
- package/out/static/client/styles-reference-toc.dcf148c129d92975.js +1 -0
- package/out/static/client/styles-sandbox.dcb6dce1120b594d.js +1 -0
- package/out/static/client/{styles-site-search.ec3b6780533a8750.css → styles-site-search.3177bb12b1f83bf7.css} +2 -2
- package/out/static/client/{styles-site-search.ec3b6780533a8750.css.map → styles-site-search.3177bb12b1f83bf7.css.map} +1 -1
- package/out/static/client/styles-site-search.acc899abcd2a7645.js +1 -0
- package/out/static/client/styles-social-image.65fa265c06411ba3.js +1 -0
- package/out/static/client/styles-translation-banner.261e19907fee981b.js +1 -0
- package/out/static/client/styles-writer-toolbar.16afb45c733053cc.js +1 -0
- package/out/static/client/styles.298615289719f0aa.js +2 -0
- package/out/static/client/styles.298615289719f0aa.js.map +1 -0
- package/out/static/legacy/{2569.9f096bac448374bd.js → 2569.39ecdf7fe2d20c17.js} +2 -2
- package/out/static/legacy/{2569.9f096bac448374bd.js.map → 2569.39ecdf7fe2d20c17.js.map} +1 -1
- package/out/static/legacy/6753.9fefb8415a5a449e.js +27 -0
- package/out/static/legacy/6753.9fefb8415a5a449e.js.map +1 -0
- package/out/static/legacy/asset-manifest.json +8 -8
- package/out/static/legacy/{index.7ddac90f21db9f4e.html → index.5b77e00ea8d6df0b.html} +1 -1
- package/out/static/legacy/{index.6c7371784b8345e6.js → index.def60ac10a95218f.js} +3 -3
- package/out/static/legacy/{index.6c7371784b8345e6.js.map → index.def60ac10a95218f.js.map} +1 -1
- package/out/static/legacy/stats.json +13 -13
- package/out/static/legacy/{yari.74e397a2236facc5.js → yari.c9b6c25e48cbb380.js} +4 -4
- package/out/static/legacy/yari.c9b6c25e48cbb380.js.map +1 -0
- package/out/static/ssr/index.js +78 -37
- package/out/static/ssr/index.js.map +1 -1
- package/out/static/ssr/stats.json +4 -4
- package/package.json +18 -18
- package/out/static/client/5408.4bc756c440135b62.css +0 -2
- package/out/static/client/5408.4bc756c440135b62.css.map +0 -1
- package/out/static/client/6216.1bfd3cf0b0a6c7df.js +0 -2
- package/out/static/client/6216.1bfd3cf0b0a6c7df.js.map +0 -1
- package/out/static/client/6760.6ac3b2b3affbbe00.js +0 -6
- package/out/static/client/6760.6ac3b2b3affbbe00.js.map +0 -1
- package/out/static/client/749.f46b8d04d93e42db.js.map +0 -1
- package/out/static/client/styles-a11y-menu.b09c6038ee60691b.js +0 -1
- package/out/static/client/styles-advertising.8a72634ac33967b3.js +0 -1
- package/out/static/client/styles-article-footer.2008e05e900132bf.js +0 -1
- package/out/static/client/styles-banner.1588da63ad451f94.js +0 -1
- package/out/static/client/styles-baseline-indicator.045ce266c0388ff2.js +0 -1
- package/out/static/client/styles-blog-index.af7e5efac0463be9.js +0 -1
- package/out/static/client/styles-blog-post.21543a25c5d0c820.js +0 -1
- package/out/static/client/styles-breadcrumbs-bar.4e50455c81d9f236.js +0 -1
- package/out/static/client/styles-breadcrumbs.3272f39f147fdb26.js +0 -1
- package/out/static/client/styles-button.93e42cbce83fe9f8.js +0 -1
- package/out/static/client/styles-content-section.b38423c0dca8e3e4.js +0 -1
- package/out/static/client/styles-contributor-spotlight.efe854e18205bd6c.js +0 -1
- package/out/static/client/styles-curriculum-about.eb719efa09eab2e3.js +0 -1
- package/out/static/client/styles-curriculum-default.648a02845551d4a6.js +0 -1
- package/out/static/client/styles-curriculum-landing.f3af2ff9b3815ed8.js +0 -1
- package/out/static/client/styles-curriculum-module.284687a631bdb6c0.js +0 -1
- package/out/static/client/styles-curriculum-overview.81d25abdbb43b369.js +0 -1
- package/out/static/client/styles-featured-articles.1390540e6554e233.js +0 -1
- package/out/static/client/styles-footer.15153a4030e38f8f.js +0 -1
- package/out/static/client/styles-generic-about.f0afaa2db7066430.js +0 -1
- package/out/static/client/styles-generic-community.ff945b87102835f8.js +0 -1
- package/out/static/client/styles-generic-content.d0e560a0506475b1.js +0 -1
- package/out/static/client/styles-generic-layout.42a5e62407bd0066.css +0 -2
- package/out/static/client/styles-generic-layout.42a5e62407bd0066.css.map +0 -1
- package/out/static/client/styles-generic-layout.ca2cef837e24e7df.js +0 -1
- package/out/static/client/styles-generic-sidebar.b2b48d0d08f8bae7.js +0 -1
- package/out/static/client/styles-generic-sidebar.db43d8c5c4748aca.css +0 -2
- package/out/static/client/styles-generic-sidebar.db43d8c5c4748aca.css.map +0 -1
- package/out/static/client/styles-generic-toc.109e07ffeb20bc67.css +0 -2
- package/out/static/client/styles-generic-toc.109e07ffeb20bc67.css.map +0 -1
- package/out/static/client/styles-generic-toc.e8887bbe84a31d72.js +0 -1
- package/out/static/client/styles-global.efc5040b727dfca4.js +0 -1
- package/out/static/client/styles-heading-anchor.d7e14184517a1d3e.js +0 -1
- package/out/static/client/styles-homepage-body.1196a061fab22906.js +0 -1
- package/out/static/client/styles-homepage-contributor-spotlight.09a6993f73166d63.js +0 -1
- package/out/static/client/styles-homepage-contributor-spotlight.edc39a3f01eb964e.css +0 -2
- package/out/static/client/styles-homepage-contributor-spotlight.edc39a3f01eb964e.css.map +0 -1
- package/out/static/client/styles-homepage-footer.472132358e452a8b.js +0 -1
- package/out/static/client/styles-homepage-header.e6423ccb0a814f99.js +0 -1
- package/out/static/client/styles-homepage-hero.1c106d7a3adb970a.js +0 -1
- package/out/static/client/styles-homepage.843ab43d3f720fb6.js +0 -1
- package/out/static/client/styles-latest-news.986caae0711fbfe3.js +0 -1
- package/out/static/client/styles-left-sidebar.4d5208e5cb72af05.css +0 -2
- package/out/static/client/styles-left-sidebar.4d5208e5cb72af05.css.map +0 -1
- package/out/static/client/styles-left-sidebar.5a4d56fc21aab182.js +0 -1
- package/out/static/client/styles-logo.9cf3aa133bae8020.js +0 -1
- package/out/static/client/styles-mandala.b9822fc945abee39.js +0 -1
- package/out/static/client/styles-menu.97e048a6ffc666ce.js +0 -1
- package/out/static/client/styles-navigation.58a2a0a1f8d4487b.js +0 -1
- package/out/static/client/styles-not-found.a5c00a725a178969.js +0 -1
- package/out/static/client/styles-observatory-landing.c729a3523c37df23.js +0 -1
- package/out/static/client/styles-observatory-results.d4d142541bf683e1.js +0 -1
- package/out/static/client/styles-page-layout.baa1dac2402744c9.js +0 -1
- package/out/static/client/styles-pagination.04e3a505f4e789a6.js +0 -1
- package/out/static/client/styles-playground.7de5e497e2ebfa83.js +0 -1
- package/out/static/client/styles-recent-contributions.f1ab270b54c7e8de.js +0 -1
- package/out/static/client/styles-reference-layout.2c2d031dc83d605a.css +0 -2
- package/out/static/client/styles-reference-layout.2c2d031dc83d605a.css.map +0 -1
- package/out/static/client/styles-reference-layout.5c4b832bc9420f51.js +0 -1
- package/out/static/client/styles-reference-toc.afd507fb6d5ef895.js +0 -1
- package/out/static/client/styles-sandbox.3de7bd2afac30c66.js +0 -1
- package/out/static/client/styles-site-search.05f228cb7ac309b2.js +0 -1
- package/out/static/client/styles-social-image.dbdccf6b8d9258f2.js +0 -1
- package/out/static/client/styles-translation-banner.7698ddb14a70d0e5.js +0 -1
- package/out/static/client/styles-writer-toolbar.f161f8bd86e23a2a.js +0 -1
- package/out/static/client/styles.a182af71488aad03.js +0 -2
- package/out/static/client/styles.a182af71488aad03.js.map +0 -1
- package/out/static/legacy/6753.c44647828e8b4816.js +0 -27
- package/out/static/legacy/6753.c44647828e8b4816.js.map +0 -1
- package/out/static/legacy/yari.74e397a2236facc5.js.map +0 -1
- /package/out/static/client/{index.a66b5a087a738e61.js.LICENSE.txt → index.a845f20de1913b16.js.LICENSE.txt} +0 -0
- /package/out/static/legacy/{6753.c44647828e8b4816.js.LICENSE.txt → 6753.9fefb8415a5a449e.js.LICENSE.txt} +0 -0
- /package/out/static/legacy/{index.6c7371784b8345e6.js.LICENSE.txt → index.def60ac10a95218f.js.LICENSE.txt} +0 -0
- /package/out/static/legacy/{yari.74e397a2236facc5.js.LICENSE.txt → yari.c9b6c25e48cbb380.js.LICENSE.txt} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"749.f46b8d04d93e42db.js","sources":["webpack://@mdn/fred/./node_modules/@codemirror/autocomplete/dist/index.js","webpack://@mdn/fred/./node_modules/@codemirror/commands/dist/index.js","webpack://@mdn/fred/./node_modules/codemirror/dist/index.js"],"sourcesContent":["import { Annotation, StateEffect, EditorSelection, codePointAt, codePointSize, fromCodePoint, Facet, combineConfig, StateField, Prec, Text, Transaction, MapMode, RangeValue, RangeSet, CharCategory } from '@codemirror/state';\nimport { Direction, logException, showTooltip, EditorView, ViewPlugin, getTooltip, Decoration, WidgetType, keymap } from '@codemirror/view';\nimport { syntaxTree, indentUnit } from '@codemirror/language';\n\n/**\nAn instance of this is passed to completion source functions.\n*/\nclass CompletionContext {\n /**\n Create a new completion context. (Mostly useful for testing\n completion sources—in the editor, the extension will create\n these for you.)\n */\n constructor(\n /**\n The editor state that the completion happens in.\n */\n state, \n /**\n The position at which the completion is happening.\n */\n pos, \n /**\n Indicates whether completion was activated explicitly, or\n implicitly by typing. The usual way to respond to this is to\n only return completions when either there is part of a\n completable entity before the cursor, or `explicit` is true.\n */\n explicit, \n /**\n The editor view. May be undefined if the context was created\n in a situation where there is no such view available, such as\n in synchronous updates via\n [`CompletionResult.update`](https://codemirror.net/6/docs/ref/#autocomplete.CompletionResult.update)\n or when called by test code.\n */\n view) {\n this.state = state;\n this.pos = pos;\n this.explicit = explicit;\n this.view = view;\n /**\n @internal\n */\n this.abortListeners = [];\n /**\n @internal\n */\n this.abortOnDocChange = false;\n }\n /**\n Get the extent, content, and (if there is a token) type of the\n token before `this.pos`.\n */\n tokenBefore(types) {\n let token = syntaxTree(this.state).resolveInner(this.pos, -1);\n while (token && types.indexOf(token.name) < 0)\n token = token.parent;\n return token ? { from: token.from, to: this.pos,\n text: this.state.sliceDoc(token.from, this.pos),\n type: token.type } : null;\n }\n /**\n Get the match of the given expression directly before the\n cursor.\n */\n matchBefore(expr) {\n let line = this.state.doc.lineAt(this.pos);\n let start = Math.max(line.from, this.pos - 250);\n let str = line.text.slice(start - line.from, this.pos - line.from);\n let found = str.search(ensureAnchor(expr, false));\n return found < 0 ? null : { from: start + found, to: this.pos, text: str.slice(found) };\n }\n /**\n Yields true when the query has been aborted. Can be useful in\n asynchronous queries to avoid doing work that will be ignored.\n */\n get aborted() { return this.abortListeners == null; }\n /**\n Allows you to register abort handlers, which will be called when\n the query is\n [aborted](https://codemirror.net/6/docs/ref/#autocomplete.CompletionContext.aborted).\n \n By default, running queries will not be aborted for regular\n typing or backspacing, on the assumption that they are likely to\n return a result with a\n [`validFor`](https://codemirror.net/6/docs/ref/#autocomplete.CompletionResult.validFor) field that\n allows the result to be used after all. Passing `onDocChange:\n true` will cause this query to be aborted for any document\n change.\n */\n addEventListener(type, listener, options) {\n if (type == \"abort\" && this.abortListeners) {\n this.abortListeners.push(listener);\n if (options && options.onDocChange)\n this.abortOnDocChange = true;\n }\n }\n}\nfunction toSet(chars) {\n let flat = Object.keys(chars).join(\"\");\n let words = /\\w/.test(flat);\n if (words)\n flat = flat.replace(/\\w/g, \"\");\n return `[${words ? \"\\\\w\" : \"\"}${flat.replace(/[^\\w\\s]/g, \"\\\\$&\")}]`;\n}\nfunction prefixMatch(options) {\n let first = Object.create(null), rest = Object.create(null);\n for (let { label } of options) {\n first[label[0]] = true;\n for (let i = 1; i < label.length; i++)\n rest[label[i]] = true;\n }\n let source = toSet(first) + toSet(rest) + \"*$\";\n return [new RegExp(\"^\" + source), new RegExp(source)];\n}\n/**\nGiven a a fixed array of options, return an autocompleter that\ncompletes them.\n*/\nfunction completeFromList(list) {\n let options = list.map(o => typeof o == \"string\" ? { label: o } : o);\n let [validFor, match] = options.every(o => /^\\w+$/.test(o.label)) ? [/\\w*$/, /\\w+$/] : prefixMatch(options);\n return (context) => {\n let token = context.matchBefore(match);\n return token || context.explicit ? { from: token ? token.from : context.pos, options, validFor } : null;\n };\n}\n/**\nWrap the given completion source so that it will only fire when the\ncursor is in a syntax node with one of the given names.\n*/\nfunction ifIn(nodes, source) {\n return (context) => {\n for (let pos = syntaxTree(context.state).resolveInner(context.pos, -1); pos; pos = pos.parent) {\n if (nodes.indexOf(pos.name) > -1)\n return source(context);\n if (pos.type.isTop)\n break;\n }\n return null;\n };\n}\n/**\nWrap the given completion source so that it will not fire when the\ncursor is in a syntax node with one of the given names.\n*/\nfunction ifNotIn(nodes, source) {\n return (context) => {\n for (let pos = syntaxTree(context.state).resolveInner(context.pos, -1); pos; pos = pos.parent) {\n if (nodes.indexOf(pos.name) > -1)\n return null;\n if (pos.type.isTop)\n break;\n }\n return source(context);\n };\n}\nclass Option {\n constructor(completion, source, match, score) {\n this.completion = completion;\n this.source = source;\n this.match = match;\n this.score = score;\n }\n}\nfunction cur(state) { return state.selection.main.from; }\n// Make sure the given regexp has a $ at its end and, if `start` is\n// true, a ^ at its start.\nfunction ensureAnchor(expr, start) {\n var _a;\n let { source } = expr;\n let addStart = start && source[0] != \"^\", addEnd = source[source.length - 1] != \"$\";\n if (!addStart && !addEnd)\n return expr;\n return new RegExp(`${addStart ? \"^\" : \"\"}(?:${source})${addEnd ? \"$\" : \"\"}`, (_a = expr.flags) !== null && _a !== void 0 ? _a : (expr.ignoreCase ? \"i\" : \"\"));\n}\n/**\nThis annotation is added to transactions that are produced by\npicking a completion.\n*/\nconst pickedCompletion = /*@__PURE__*/Annotation.define();\n/**\nHelper function that returns a transaction spec which inserts a\ncompletion's text in the main selection range, and any other\nselection range that has the same text in front of it.\n*/\nfunction insertCompletionText(state, text, from, to) {\n let { main } = state.selection, fromOff = from - main.from, toOff = to - main.from;\n return {\n ...state.changeByRange(range => {\n if (range != main && from != to &&\n state.sliceDoc(range.from + fromOff, range.from + toOff) != state.sliceDoc(from, to))\n return { range };\n let lines = state.toText(text);\n return {\n changes: { from: range.from + fromOff, to: to == main.from ? range.to : range.from + toOff, insert: lines },\n range: EditorSelection.cursor(range.from + fromOff + lines.length)\n };\n }),\n scrollIntoView: true,\n userEvent: \"input.complete\"\n };\n}\nconst SourceCache = /*@__PURE__*/new WeakMap();\nfunction asSource(source) {\n if (!Array.isArray(source))\n return source;\n let known = SourceCache.get(source);\n if (!known)\n SourceCache.set(source, known = completeFromList(source));\n return known;\n}\nconst startCompletionEffect = /*@__PURE__*/StateEffect.define();\nconst closeCompletionEffect = /*@__PURE__*/StateEffect.define();\n\n// A pattern matcher for fuzzy completion matching. Create an instance\n// once for a pattern, and then use that to match any number of\n// completions.\nclass FuzzyMatcher {\n constructor(pattern) {\n this.pattern = pattern;\n this.chars = [];\n this.folded = [];\n // Buffers reused by calls to `match` to track matched character\n // positions.\n this.any = [];\n this.precise = [];\n this.byWord = [];\n this.score = 0;\n this.matched = [];\n for (let p = 0; p < pattern.length;) {\n let char = codePointAt(pattern, p), size = codePointSize(char);\n this.chars.push(char);\n let part = pattern.slice(p, p + size), upper = part.toUpperCase();\n this.folded.push(codePointAt(upper == part ? part.toLowerCase() : upper, 0));\n p += size;\n }\n this.astral = pattern.length != this.chars.length;\n }\n ret(score, matched) {\n this.score = score;\n this.matched = matched;\n return this;\n }\n // Matches a given word (completion) against the pattern (input).\n // Will return a boolean indicating whether there was a match and,\n // on success, set `this.score` to the score, `this.matched` to an\n // array of `from, to` pairs indicating the matched parts of `word`.\n //\n // The score is a number that is more negative the worse the match\n // is. See `Penalty` above.\n match(word) {\n if (this.pattern.length == 0)\n return this.ret(-100 /* Penalty.NotFull */, []);\n if (word.length < this.pattern.length)\n return null;\n let { chars, folded, any, precise, byWord } = this;\n // For single-character queries, only match when they occur right\n // at the start\n if (chars.length == 1) {\n let first = codePointAt(word, 0), firstSize = codePointSize(first);\n let score = firstSize == word.length ? 0 : -100 /* Penalty.NotFull */;\n if (first == chars[0]) ;\n else if (first == folded[0])\n score += -200 /* Penalty.CaseFold */;\n else\n return null;\n return this.ret(score, [0, firstSize]);\n }\n let direct = word.indexOf(this.pattern);\n if (direct == 0)\n return this.ret(word.length == this.pattern.length ? 0 : -100 /* Penalty.NotFull */, [0, this.pattern.length]);\n let len = chars.length, anyTo = 0;\n if (direct < 0) {\n for (let i = 0, e = Math.min(word.length, 200); i < e && anyTo < len;) {\n let next = codePointAt(word, i);\n if (next == chars[anyTo] || next == folded[anyTo])\n any[anyTo++] = i;\n i += codePointSize(next);\n }\n // No match, exit immediately\n if (anyTo < len)\n return null;\n }\n // This tracks the extent of the precise (non-folded, not\n // necessarily adjacent) match\n let preciseTo = 0;\n // Tracks whether there is a match that hits only characters that\n // appear to be starting words. `byWordFolded` is set to true when\n // a case folded character is encountered in such a match\n let byWordTo = 0, byWordFolded = false;\n // If we've found a partial adjacent match, these track its state\n let adjacentTo = 0, adjacentStart = -1, adjacentEnd = -1;\n let hasLower = /[a-z]/.test(word), wordAdjacent = true;\n // Go over the option's text, scanning for the various kinds of matches\n for (let i = 0, e = Math.min(word.length, 200), prevType = 0 /* Tp.NonWord */; i < e && byWordTo < len;) {\n let next = codePointAt(word, i);\n if (direct < 0) {\n if (preciseTo < len && next == chars[preciseTo])\n precise[preciseTo++] = i;\n if (adjacentTo < len) {\n if (next == chars[adjacentTo] || next == folded[adjacentTo]) {\n if (adjacentTo == 0)\n adjacentStart = i;\n adjacentEnd = i + 1;\n adjacentTo++;\n }\n else {\n adjacentTo = 0;\n }\n }\n }\n let ch, type = next < 0xff\n ? (next >= 48 && next <= 57 || next >= 97 && next <= 122 ? 2 /* Tp.Lower */ : next >= 65 && next <= 90 ? 1 /* Tp.Upper */ : 0 /* Tp.NonWord */)\n : ((ch = fromCodePoint(next)) != ch.toLowerCase() ? 1 /* Tp.Upper */ : ch != ch.toUpperCase() ? 2 /* Tp.Lower */ : 0 /* Tp.NonWord */);\n if (!i || type == 1 /* Tp.Upper */ && hasLower || prevType == 0 /* Tp.NonWord */ && type != 0 /* Tp.NonWord */) {\n if (chars[byWordTo] == next || (folded[byWordTo] == next && (byWordFolded = true)))\n byWord[byWordTo++] = i;\n else if (byWord.length)\n wordAdjacent = false;\n }\n prevType = type;\n i += codePointSize(next);\n }\n if (byWordTo == len && byWord[0] == 0 && wordAdjacent)\n return this.result(-100 /* Penalty.ByWord */ + (byWordFolded ? -200 /* Penalty.CaseFold */ : 0), byWord, word);\n if (adjacentTo == len && adjacentStart == 0)\n return this.ret(-200 /* Penalty.CaseFold */ - word.length + (adjacentEnd == word.length ? 0 : -100 /* Penalty.NotFull */), [0, adjacentEnd]);\n if (direct > -1)\n return this.ret(-700 /* Penalty.NotStart */ - word.length, [direct, direct + this.pattern.length]);\n if (adjacentTo == len)\n return this.ret(-200 /* Penalty.CaseFold */ + -700 /* Penalty.NotStart */ - word.length, [adjacentStart, adjacentEnd]);\n if (byWordTo == len)\n return this.result(-100 /* Penalty.ByWord */ + (byWordFolded ? -200 /* Penalty.CaseFold */ : 0) + -700 /* Penalty.NotStart */ +\n (wordAdjacent ? 0 : -1100 /* Penalty.Gap */), byWord, word);\n return chars.length == 2 ? null\n : this.result((any[0] ? -700 /* Penalty.NotStart */ : 0) + -200 /* Penalty.CaseFold */ + -1100 /* Penalty.Gap */, any, word);\n }\n result(score, positions, word) {\n let result = [], i = 0;\n for (let pos of positions) {\n let to = pos + (this.astral ? codePointSize(codePointAt(word, pos)) : 1);\n if (i && result[i - 1] == pos)\n result[i - 1] = to;\n else {\n result[i++] = pos;\n result[i++] = to;\n }\n }\n return this.ret(score - word.length, result);\n }\n}\nclass StrictMatcher {\n constructor(pattern) {\n this.pattern = pattern;\n this.matched = [];\n this.score = 0;\n this.folded = pattern.toLowerCase();\n }\n match(word) {\n if (word.length < this.pattern.length)\n return null;\n let start = word.slice(0, this.pattern.length);\n let match = start == this.pattern ? 0 : start.toLowerCase() == this.folded ? -200 /* Penalty.CaseFold */ : null;\n if (match == null)\n return null;\n this.matched = [0, start.length];\n this.score = match + (word.length == this.pattern.length ? 0 : -100 /* Penalty.NotFull */);\n return this;\n }\n}\n\nconst completionConfig = /*@__PURE__*/Facet.define({\n combine(configs) {\n return combineConfig(configs, {\n activateOnTyping: true,\n activateOnCompletion: () => false,\n activateOnTypingDelay: 100,\n selectOnOpen: true,\n override: null,\n closeOnBlur: true,\n maxRenderedOptions: 100,\n defaultKeymap: true,\n tooltipClass: () => \"\",\n optionClass: () => \"\",\n aboveCursor: false,\n icons: true,\n addToOptions: [],\n positionInfo: defaultPositionInfo,\n filterStrict: false,\n compareCompletions: (a, b) => (a.sortText || a.label).localeCompare(b.sortText || b.label),\n interactionDelay: 75,\n updateSyncTime: 100\n }, {\n defaultKeymap: (a, b) => a && b,\n closeOnBlur: (a, b) => a && b,\n icons: (a, b) => a && b,\n tooltipClass: (a, b) => c => joinClass(a(c), b(c)),\n optionClass: (a, b) => c => joinClass(a(c), b(c)),\n addToOptions: (a, b) => a.concat(b),\n filterStrict: (a, b) => a || b,\n });\n }\n});\nfunction joinClass(a, b) {\n return a ? b ? a + \" \" + b : a : b;\n}\nfunction defaultPositionInfo(view, list, option, info, space, tooltip) {\n let rtl = view.textDirection == Direction.RTL, left = rtl, narrow = false;\n let side = \"top\", offset, maxWidth;\n let spaceLeft = list.left - space.left, spaceRight = space.right - list.right;\n let infoWidth = info.right - info.left, infoHeight = info.bottom - info.top;\n if (left && spaceLeft < Math.min(infoWidth, spaceRight))\n left = false;\n else if (!left && spaceRight < Math.min(infoWidth, spaceLeft))\n left = true;\n if (infoWidth <= (left ? spaceLeft : spaceRight)) {\n offset = Math.max(space.top, Math.min(option.top, space.bottom - infoHeight)) - list.top;\n maxWidth = Math.min(400 /* Info.Width */, left ? spaceLeft : spaceRight);\n }\n else {\n narrow = true;\n maxWidth = Math.min(400 /* Info.Width */, (rtl ? list.right : space.right - list.left) - 30 /* Info.Margin */);\n let spaceBelow = space.bottom - list.bottom;\n if (spaceBelow >= infoHeight || spaceBelow > list.top) { // Below the completion\n offset = option.bottom - list.top;\n }\n else { // Above it\n side = \"bottom\";\n offset = list.bottom - option.top;\n }\n }\n let scaleY = (list.bottom - list.top) / tooltip.offsetHeight;\n let scaleX = (list.right - list.left) / tooltip.offsetWidth;\n return {\n style: `${side}: ${offset / scaleY}px; max-width: ${maxWidth / scaleX}px`,\n class: \"cm-completionInfo-\" + (narrow ? (rtl ? \"left-narrow\" : \"right-narrow\") : left ? \"left\" : \"right\")\n };\n}\n\nfunction optionContent(config) {\n let content = config.addToOptions.slice();\n if (config.icons)\n content.push({\n render(completion) {\n let icon = document.createElement(\"div\");\n icon.classList.add(\"cm-completionIcon\");\n if (completion.type)\n icon.classList.add(...completion.type.split(/\\s+/g).map(cls => \"cm-completionIcon-\" + cls));\n icon.setAttribute(\"aria-hidden\", \"true\");\n return icon;\n },\n position: 20\n });\n content.push({\n render(completion, _s, _v, match) {\n let labelElt = document.createElement(\"span\");\n labelElt.className = \"cm-completionLabel\";\n let label = completion.displayLabel || completion.label, off = 0;\n for (let j = 0; j < match.length;) {\n let from = match[j++], to = match[j++];\n if (from > off)\n labelElt.appendChild(document.createTextNode(label.slice(off, from)));\n let span = labelElt.appendChild(document.createElement(\"span\"));\n span.appendChild(document.createTextNode(label.slice(from, to)));\n span.className = \"cm-completionMatchedText\";\n off = to;\n }\n if (off < label.length)\n labelElt.appendChild(document.createTextNode(label.slice(off)));\n return labelElt;\n },\n position: 50\n }, {\n render(completion) {\n if (!completion.detail)\n return null;\n let detailElt = document.createElement(\"span\");\n detailElt.className = \"cm-completionDetail\";\n detailElt.textContent = completion.detail;\n return detailElt;\n },\n position: 80\n });\n return content.sort((a, b) => a.position - b.position).map(a => a.render);\n}\nfunction rangeAroundSelected(total, selected, max) {\n if (total <= max)\n return { from: 0, to: total };\n if (selected < 0)\n selected = 0;\n if (selected <= (total >> 1)) {\n let off = Math.floor(selected / max);\n return { from: off * max, to: (off + 1) * max };\n }\n let off = Math.floor((total - selected) / max);\n return { from: total - (off + 1) * max, to: total - off * max };\n}\nclass CompletionTooltip {\n constructor(view, stateField, applyCompletion) {\n this.view = view;\n this.stateField = stateField;\n this.applyCompletion = applyCompletion;\n this.info = null;\n this.infoDestroy = null;\n this.placeInfoReq = {\n read: () => this.measureInfo(),\n write: (pos) => this.placeInfo(pos),\n key: this\n };\n this.space = null;\n this.currentClass = \"\";\n let cState = view.state.field(stateField);\n let { options, selected } = cState.open;\n let config = view.state.facet(completionConfig);\n this.optionContent = optionContent(config);\n this.optionClass = config.optionClass;\n this.tooltipClass = config.tooltipClass;\n this.range = rangeAroundSelected(options.length, selected, config.maxRenderedOptions);\n this.dom = document.createElement(\"div\");\n this.dom.className = \"cm-tooltip-autocomplete\";\n this.updateTooltipClass(view.state);\n this.dom.addEventListener(\"mousedown\", (e) => {\n let { options } = view.state.field(stateField).open;\n for (let dom = e.target, match; dom && dom != this.dom; dom = dom.parentNode) {\n if (dom.nodeName == \"LI\" && (match = /-(\\d+)$/.exec(dom.id)) && +match[1] < options.length) {\n this.applyCompletion(view, options[+match[1]]);\n e.preventDefault();\n return;\n }\n }\n });\n this.dom.addEventListener(\"focusout\", (e) => {\n let state = view.state.field(this.stateField, false);\n if (state && state.tooltip && view.state.facet(completionConfig).closeOnBlur &&\n e.relatedTarget != view.contentDOM)\n view.dispatch({ effects: closeCompletionEffect.of(null) });\n });\n this.showOptions(options, cState.id);\n }\n mount() { this.updateSel(); }\n showOptions(options, id) {\n if (this.list)\n this.list.remove();\n this.list = this.dom.appendChild(this.createListBox(options, id, this.range));\n this.list.addEventListener(\"scroll\", () => {\n if (this.info)\n this.view.requestMeasure(this.placeInfoReq);\n });\n }\n update(update) {\n var _a;\n let cState = update.state.field(this.stateField);\n let prevState = update.startState.field(this.stateField);\n this.updateTooltipClass(update.state);\n if (cState != prevState) {\n let { options, selected, disabled } = cState.open;\n if (!prevState.open || prevState.open.options != options) {\n this.range = rangeAroundSelected(options.length, selected, update.state.facet(completionConfig).maxRenderedOptions);\n this.showOptions(options, cState.id);\n }\n this.updateSel();\n if (disabled != ((_a = prevState.open) === null || _a === void 0 ? void 0 : _a.disabled))\n this.dom.classList.toggle(\"cm-tooltip-autocomplete-disabled\", !!disabled);\n }\n }\n updateTooltipClass(state) {\n let cls = this.tooltipClass(state);\n if (cls != this.currentClass) {\n for (let c of this.currentClass.split(\" \"))\n if (c)\n this.dom.classList.remove(c);\n for (let c of cls.split(\" \"))\n if (c)\n this.dom.classList.add(c);\n this.currentClass = cls;\n }\n }\n positioned(space) {\n this.space = space;\n if (this.info)\n this.view.requestMeasure(this.placeInfoReq);\n }\n updateSel() {\n let cState = this.view.state.field(this.stateField), open = cState.open;\n if (open.selected > -1 && open.selected < this.range.from || open.selected >= this.range.to) {\n this.range = rangeAroundSelected(open.options.length, open.selected, this.view.state.facet(completionConfig).maxRenderedOptions);\n this.showOptions(open.options, cState.id);\n }\n let newSel = this.updateSelectedOption(open.selected);\n if (newSel) {\n this.destroyInfo();\n let { completion } = open.options[open.selected];\n let { info } = completion;\n if (!info)\n return;\n let infoResult = typeof info === \"string\" ? document.createTextNode(info) : info(completion);\n if (!infoResult)\n return;\n if (\"then\" in infoResult) {\n infoResult.then(obj => {\n if (obj && this.view.state.field(this.stateField, false) == cState)\n this.addInfoPane(obj, completion);\n }).catch(e => logException(this.view.state, e, \"completion info\"));\n }\n else {\n this.addInfoPane(infoResult, completion);\n newSel.setAttribute(\"aria-describedby\", this.info.id);\n }\n }\n }\n addInfoPane(content, completion) {\n this.destroyInfo();\n let wrap = this.info = document.createElement(\"div\");\n wrap.className = \"cm-tooltip cm-completionInfo\";\n wrap.id = \"cm-completionInfo-\" + Math.floor(Math.random() * 0xffff).toString(16);\n if (content.nodeType != null) {\n wrap.appendChild(content);\n this.infoDestroy = null;\n }\n else {\n let { dom, destroy } = content;\n wrap.appendChild(dom);\n this.infoDestroy = destroy || null;\n }\n this.dom.appendChild(wrap);\n this.view.requestMeasure(this.placeInfoReq);\n }\n updateSelectedOption(selected) {\n let set = null;\n for (let opt = this.list.firstChild, i = this.range.from; opt; opt = opt.nextSibling, i++) {\n if (opt.nodeName != \"LI\" || !opt.id) {\n i--; // A section header\n }\n else if (i == selected) {\n if (!opt.hasAttribute(\"aria-selected\")) {\n opt.setAttribute(\"aria-selected\", \"true\");\n set = opt;\n }\n }\n else {\n if (opt.hasAttribute(\"aria-selected\")) {\n opt.removeAttribute(\"aria-selected\");\n opt.removeAttribute(\"aria-describedby\");\n }\n }\n }\n if (set)\n scrollIntoView(this.list, set);\n return set;\n }\n measureInfo() {\n let sel = this.dom.querySelector(\"[aria-selected]\");\n if (!sel || !this.info)\n return null;\n let listRect = this.dom.getBoundingClientRect();\n let infoRect = this.info.getBoundingClientRect();\n let selRect = sel.getBoundingClientRect();\n let space = this.space;\n if (!space) {\n let docElt = this.dom.ownerDocument.documentElement;\n space = { left: 0, top: 0, right: docElt.clientWidth, bottom: docElt.clientHeight };\n }\n if (selRect.top > Math.min(space.bottom, listRect.bottom) - 10 ||\n selRect.bottom < Math.max(space.top, listRect.top) + 10)\n return null;\n return this.view.state.facet(completionConfig).positionInfo(this.view, listRect, selRect, infoRect, space, this.dom);\n }\n placeInfo(pos) {\n if (this.info) {\n if (pos) {\n if (pos.style)\n this.info.style.cssText = pos.style;\n this.info.className = \"cm-tooltip cm-completionInfo \" + (pos.class || \"\");\n }\n else {\n this.info.style.cssText = \"top: -1e6px\";\n }\n }\n }\n createListBox(options, id, range) {\n const ul = document.createElement(\"ul\");\n ul.id = id;\n ul.setAttribute(\"role\", \"listbox\");\n ul.setAttribute(\"aria-expanded\", \"true\");\n ul.setAttribute(\"aria-label\", this.view.state.phrase(\"Completions\"));\n ul.addEventListener(\"mousedown\", e => {\n // Prevent focus change when clicking the scrollbar\n if (e.target == ul)\n e.preventDefault();\n });\n let curSection = null;\n for (let i = range.from; i < range.to; i++) {\n let { completion, match } = options[i], { section } = completion;\n if (section) {\n let name = typeof section == \"string\" ? section : section.name;\n if (name != curSection && (i > range.from || range.from == 0)) {\n curSection = name;\n if (typeof section != \"string\" && section.header) {\n ul.appendChild(section.header(section));\n }\n else {\n let header = ul.appendChild(document.createElement(\"completion-section\"));\n header.textContent = name;\n }\n }\n }\n const li = ul.appendChild(document.createElement(\"li\"));\n li.id = id + \"-\" + i;\n li.setAttribute(\"role\", \"option\");\n let cls = this.optionClass(completion);\n if (cls)\n li.className = cls;\n for (let source of this.optionContent) {\n let node = source(completion, this.view.state, this.view, match);\n if (node)\n li.appendChild(node);\n }\n }\n if (range.from)\n ul.classList.add(\"cm-completionListIncompleteTop\");\n if (range.to < options.length)\n ul.classList.add(\"cm-completionListIncompleteBottom\");\n return ul;\n }\n destroyInfo() {\n if (this.info) {\n if (this.infoDestroy)\n this.infoDestroy();\n this.info.remove();\n this.info = null;\n }\n }\n destroy() {\n this.destroyInfo();\n }\n}\nfunction completionTooltip(stateField, applyCompletion) {\n return (view) => new CompletionTooltip(view, stateField, applyCompletion);\n}\nfunction scrollIntoView(container, element) {\n let parent = container.getBoundingClientRect();\n let self = element.getBoundingClientRect();\n let scaleY = parent.height / container.offsetHeight;\n if (self.top < parent.top)\n container.scrollTop -= (parent.top - self.top) / scaleY;\n else if (self.bottom > parent.bottom)\n container.scrollTop += (self.bottom - parent.bottom) / scaleY;\n}\n\n// Used to pick a preferred option when two options with the same\n// label occur in the result.\nfunction score(option) {\n return (option.boost || 0) * 100 + (option.apply ? 10 : 0) + (option.info ? 5 : 0) +\n (option.type ? 1 : 0);\n}\nfunction sortOptions(active, state) {\n let options = [];\n let sections = null, dynamicSectionScore = null;\n let addOption = (option) => {\n options.push(option);\n let { section } = option.completion;\n if (section) {\n if (!sections)\n sections = [];\n let name = typeof section == \"string\" ? section : section.name;\n if (!sections.some(s => s.name == name))\n sections.push(typeof section == \"string\" ? { name } : section);\n }\n };\n let conf = state.facet(completionConfig);\n for (let a of active)\n if (a.hasResult()) {\n let getMatch = a.result.getMatch;\n if (a.result.filter === false) {\n for (let option of a.result.options) {\n addOption(new Option(option, a.source, getMatch ? getMatch(option) : [], 1e9 - options.length));\n }\n }\n else {\n let pattern = state.sliceDoc(a.from, a.to), match;\n let matcher = conf.filterStrict ? new StrictMatcher(pattern) : new FuzzyMatcher(pattern);\n for (let option of a.result.options)\n if (match = matcher.match(option.label)) {\n let matched = !option.displayLabel ? match.matched : getMatch ? getMatch(option, match.matched) : [];\n let score = match.score + (option.boost || 0);\n addOption(new Option(option, a.source, matched, score));\n if (typeof option.section == \"object\" && option.section.rank === \"dynamic\") {\n let { name } = option.section;\n if (!dynamicSectionScore)\n dynamicSectionScore = Object.create(null);\n dynamicSectionScore[name] = Math.max(score, dynamicSectionScore[name] || -1e9);\n }\n }\n }\n }\n if (sections) {\n let sectionOrder = Object.create(null), pos = 0;\n let cmp = (a, b) => {\n return (a.rank === \"dynamic\" && b.rank === \"dynamic\" ? dynamicSectionScore[b.name] - dynamicSectionScore[a.name] : 0) ||\n (typeof a.rank == \"number\" ? a.rank : 1e9) - (typeof b.rank == \"number\" ? b.rank : 1e9) ||\n (a.name < b.name ? -1 : 1);\n };\n for (let s of sections.sort(cmp)) {\n pos -= 1e5;\n sectionOrder[s.name] = pos;\n }\n for (let option of options) {\n let { section } = option.completion;\n if (section)\n option.score += sectionOrder[typeof section == \"string\" ? section : section.name];\n }\n }\n let result = [], prev = null;\n let compare = conf.compareCompletions;\n for (let opt of options.sort((a, b) => (b.score - a.score) || compare(a.completion, b.completion))) {\n let cur = opt.completion;\n if (!prev || prev.label != cur.label || prev.detail != cur.detail ||\n (prev.type != null && cur.type != null && prev.type != cur.type) ||\n prev.apply != cur.apply || prev.boost != cur.boost)\n result.push(opt);\n else if (score(opt.completion) > score(prev))\n result[result.length - 1] = opt;\n prev = opt.completion;\n }\n return result;\n}\nclass CompletionDialog {\n constructor(options, attrs, tooltip, timestamp, selected, disabled) {\n this.options = options;\n this.attrs = attrs;\n this.tooltip = tooltip;\n this.timestamp = timestamp;\n this.selected = selected;\n this.disabled = disabled;\n }\n setSelected(selected, id) {\n return selected == this.selected || selected >= this.options.length ? this\n : new CompletionDialog(this.options, makeAttrs(id, selected), this.tooltip, this.timestamp, selected, this.disabled);\n }\n static build(active, state, id, prev, conf, didSetActive) {\n if (prev && !didSetActive && active.some(s => s.isPending))\n return prev.setDisabled();\n let options = sortOptions(active, state);\n if (!options.length)\n return prev && active.some(a => a.isPending) ? prev.setDisabled() : null;\n let selected = state.facet(completionConfig).selectOnOpen ? 0 : -1;\n if (prev && prev.selected != selected && prev.selected != -1) {\n let selectedValue = prev.options[prev.selected].completion;\n for (let i = 0; i < options.length; i++)\n if (options[i].completion == selectedValue) {\n selected = i;\n break;\n }\n }\n return new CompletionDialog(options, makeAttrs(id, selected), {\n pos: active.reduce((a, b) => b.hasResult() ? Math.min(a, b.from) : a, 1e8),\n create: createTooltip,\n above: conf.aboveCursor,\n }, prev ? prev.timestamp : Date.now(), selected, false);\n }\n map(changes) {\n return new CompletionDialog(this.options, this.attrs, { ...this.tooltip, pos: changes.mapPos(this.tooltip.pos) }, this.timestamp, this.selected, this.disabled);\n }\n setDisabled() {\n return new CompletionDialog(this.options, this.attrs, this.tooltip, this.timestamp, this.selected, true);\n }\n}\nclass CompletionState {\n constructor(active, id, open) {\n this.active = active;\n this.id = id;\n this.open = open;\n }\n static start() {\n return new CompletionState(none, \"cm-ac-\" + Math.floor(Math.random() * 2e6).toString(36), null);\n }\n update(tr) {\n let { state } = tr, conf = state.facet(completionConfig);\n let sources = conf.override ||\n state.languageDataAt(\"autocomplete\", cur(state)).map(asSource);\n let active = sources.map(source => {\n let value = this.active.find(s => s.source == source) ||\n new ActiveSource(source, this.active.some(a => a.state != 0 /* State.Inactive */) ? 1 /* State.Pending */ : 0 /* State.Inactive */);\n return value.update(tr, conf);\n });\n if (active.length == this.active.length && active.every((a, i) => a == this.active[i]))\n active = this.active;\n let open = this.open, didSet = tr.effects.some(e => e.is(setActiveEffect));\n if (open && tr.docChanged)\n open = open.map(tr.changes);\n if (tr.selection || active.some(a => a.hasResult() && tr.changes.touchesRange(a.from, a.to)) ||\n !sameResults(active, this.active) || didSet)\n open = CompletionDialog.build(active, state, this.id, open, conf, didSet);\n else if (open && open.disabled && !active.some(a => a.isPending))\n open = null;\n if (!open && active.every(a => !a.isPending) && active.some(a => a.hasResult()))\n active = active.map(a => a.hasResult() ? new ActiveSource(a.source, 0 /* State.Inactive */) : a);\n for (let effect of tr.effects)\n if (effect.is(setSelectedEffect))\n open = open && open.setSelected(effect.value, this.id);\n return active == this.active && open == this.open ? this : new CompletionState(active, this.id, open);\n }\n get tooltip() { return this.open ? this.open.tooltip : null; }\n get attrs() { return this.open ? this.open.attrs : this.active.length ? baseAttrs : noAttrs; }\n}\nfunction sameResults(a, b) {\n if (a == b)\n return true;\n for (let iA = 0, iB = 0;;) {\n while (iA < a.length && !a[iA].hasResult())\n iA++;\n while (iB < b.length && !b[iB].hasResult())\n iB++;\n let endA = iA == a.length, endB = iB == b.length;\n if (endA || endB)\n return endA == endB;\n if (a[iA++].result != b[iB++].result)\n return false;\n }\n}\nconst baseAttrs = {\n \"aria-autocomplete\": \"list\"\n};\nconst noAttrs = {};\nfunction makeAttrs(id, selected) {\n let result = {\n \"aria-autocomplete\": \"list\",\n \"aria-haspopup\": \"listbox\",\n \"aria-controls\": id\n };\n if (selected > -1)\n result[\"aria-activedescendant\"] = id + \"-\" + selected;\n return result;\n}\nconst none = [];\nfunction getUpdateType(tr, conf) {\n if (tr.isUserEvent(\"input.complete\")) {\n let completion = tr.annotation(pickedCompletion);\n if (completion && conf.activateOnCompletion(completion))\n return 4 /* UpdateType.Activate */ | 8 /* UpdateType.Reset */;\n }\n let typing = tr.isUserEvent(\"input.type\");\n return typing && conf.activateOnTyping ? 4 /* UpdateType.Activate */ | 1 /* UpdateType.Typing */\n : typing ? 1 /* UpdateType.Typing */\n : tr.isUserEvent(\"delete.backward\") ? 2 /* UpdateType.Backspacing */\n : tr.selection ? 8 /* UpdateType.Reset */\n : tr.docChanged ? 16 /* UpdateType.ResetIfTouching */ : 0 /* UpdateType.None */;\n}\nclass ActiveSource {\n constructor(source, state, explicit = false) {\n this.source = source;\n this.state = state;\n this.explicit = explicit;\n }\n hasResult() { return false; }\n get isPending() { return this.state == 1 /* State.Pending */; }\n update(tr, conf) {\n let type = getUpdateType(tr, conf), value = this;\n if ((type & 8 /* UpdateType.Reset */) || (type & 16 /* UpdateType.ResetIfTouching */) && this.touches(tr))\n value = new ActiveSource(value.source, 0 /* State.Inactive */);\n if ((type & 4 /* UpdateType.Activate */) && value.state == 0 /* State.Inactive */)\n value = new ActiveSource(this.source, 1 /* State.Pending */);\n value = value.updateFor(tr, type);\n for (let effect of tr.effects) {\n if (effect.is(startCompletionEffect))\n value = new ActiveSource(value.source, 1 /* State.Pending */, effect.value);\n else if (effect.is(closeCompletionEffect))\n value = new ActiveSource(value.source, 0 /* State.Inactive */);\n else if (effect.is(setActiveEffect))\n for (let active of effect.value)\n if (active.source == value.source)\n value = active;\n }\n return value;\n }\n updateFor(tr, type) { return this.map(tr.changes); }\n map(changes) { return this; }\n touches(tr) {\n return tr.changes.touchesRange(cur(tr.state));\n }\n}\nclass ActiveResult extends ActiveSource {\n constructor(source, explicit, limit, result, from, to) {\n super(source, 3 /* State.Result */, explicit);\n this.limit = limit;\n this.result = result;\n this.from = from;\n this.to = to;\n }\n hasResult() { return true; }\n updateFor(tr, type) {\n var _a;\n if (!(type & 3 /* UpdateType.SimpleInteraction */))\n return this.map(tr.changes);\n let result = this.result;\n if (result.map && !tr.changes.empty)\n result = result.map(result, tr.changes);\n let from = tr.changes.mapPos(this.from), to = tr.changes.mapPos(this.to, 1);\n let pos = cur(tr.state);\n if (pos > to || !result ||\n (type & 2 /* UpdateType.Backspacing */) && (cur(tr.startState) == this.from || pos < this.limit))\n return new ActiveSource(this.source, type & 4 /* UpdateType.Activate */ ? 1 /* State.Pending */ : 0 /* State.Inactive */);\n let limit = tr.changes.mapPos(this.limit);\n if (checkValid(result.validFor, tr.state, from, to))\n return new ActiveResult(this.source, this.explicit, limit, result, from, to);\n if (result.update &&\n (result = result.update(result, from, to, new CompletionContext(tr.state, pos, false))))\n return new ActiveResult(this.source, this.explicit, limit, result, result.from, (_a = result.to) !== null && _a !== void 0 ? _a : cur(tr.state));\n return new ActiveSource(this.source, 1 /* State.Pending */, this.explicit);\n }\n map(mapping) {\n if (mapping.empty)\n return this;\n let result = this.result.map ? this.result.map(this.result, mapping) : this.result;\n if (!result)\n return new ActiveSource(this.source, 0 /* State.Inactive */);\n return new ActiveResult(this.source, this.explicit, mapping.mapPos(this.limit), this.result, mapping.mapPos(this.from), mapping.mapPos(this.to, 1));\n }\n touches(tr) {\n return tr.changes.touchesRange(this.from, this.to);\n }\n}\nfunction checkValid(validFor, state, from, to) {\n if (!validFor)\n return false;\n let text = state.sliceDoc(from, to);\n return typeof validFor == \"function\" ? validFor(text, from, to, state) : ensureAnchor(validFor, true).test(text);\n}\nconst setActiveEffect = /*@__PURE__*/StateEffect.define({\n map(sources, mapping) { return sources.map(s => s.map(mapping)); }\n});\nconst setSelectedEffect = /*@__PURE__*/StateEffect.define();\nconst completionState = /*@__PURE__*/StateField.define({\n create() { return CompletionState.start(); },\n update(value, tr) { return value.update(tr); },\n provide: f => [\n showTooltip.from(f, val => val.tooltip),\n EditorView.contentAttributes.from(f, state => state.attrs)\n ]\n});\nfunction applyCompletion(view, option) {\n const apply = option.completion.apply || option.completion.label;\n let result = view.state.field(completionState).active.find(a => a.source == option.source);\n if (!(result instanceof ActiveResult))\n return false;\n if (typeof apply == \"string\")\n view.dispatch({\n ...insertCompletionText(view.state, apply, result.from, result.to),\n annotations: pickedCompletion.of(option.completion)\n });\n else\n apply(view, option.completion, result.from, result.to);\n return true;\n}\nconst createTooltip = /*@__PURE__*/completionTooltip(completionState, applyCompletion);\n\n/**\nReturns a command that moves the completion selection forward or\nbackward by the given amount.\n*/\nfunction moveCompletionSelection(forward, by = \"option\") {\n return (view) => {\n let cState = view.state.field(completionState, false);\n if (!cState || !cState.open || cState.open.disabled ||\n Date.now() - cState.open.timestamp < view.state.facet(completionConfig).interactionDelay)\n return false;\n let step = 1, tooltip;\n if (by == \"page\" && (tooltip = getTooltip(view, cState.open.tooltip)))\n step = Math.max(2, Math.floor(tooltip.dom.offsetHeight /\n tooltip.dom.querySelector(\"li\").offsetHeight) - 1);\n let { length } = cState.open.options;\n let selected = cState.open.selected > -1 ? cState.open.selected + step * (forward ? 1 : -1) : forward ? 0 : length - 1;\n if (selected < 0)\n selected = by == \"page\" ? 0 : length - 1;\n else if (selected >= length)\n selected = by == \"page\" ? length - 1 : 0;\n view.dispatch({ effects: setSelectedEffect.of(selected) });\n return true;\n };\n}\n/**\nAccept the current completion.\n*/\nconst acceptCompletion = (view) => {\n let cState = view.state.field(completionState, false);\n if (view.state.readOnly || !cState || !cState.open || cState.open.selected < 0 || cState.open.disabled ||\n Date.now() - cState.open.timestamp < view.state.facet(completionConfig).interactionDelay)\n return false;\n return applyCompletion(view, cState.open.options[cState.open.selected]);\n};\n/**\nExplicitly start autocompletion.\n*/\nconst startCompletion = (view) => {\n let cState = view.state.field(completionState, false);\n if (!cState)\n return false;\n view.dispatch({ effects: startCompletionEffect.of(true) });\n return true;\n};\n/**\nClose the currently active completion.\n*/\nconst closeCompletion = (view) => {\n let cState = view.state.field(completionState, false);\n if (!cState || !cState.active.some(a => a.state != 0 /* State.Inactive */))\n return false;\n view.dispatch({ effects: closeCompletionEffect.of(null) });\n return true;\n};\nclass RunningQuery {\n constructor(active, context) {\n this.active = active;\n this.context = context;\n this.time = Date.now();\n this.updates = [];\n // Note that 'undefined' means 'not done yet', whereas 'null' means\n // 'query returned null'.\n this.done = undefined;\n }\n}\nconst MaxUpdateCount = 50, MinAbortTime = 1000;\nconst completionPlugin = /*@__PURE__*/ViewPlugin.fromClass(class {\n constructor(view) {\n this.view = view;\n this.debounceUpdate = -1;\n this.running = [];\n this.debounceAccept = -1;\n this.pendingStart = false;\n this.composing = 0 /* CompositionState.None */;\n for (let active of view.state.field(completionState).active)\n if (active.isPending)\n this.startQuery(active);\n }\n update(update) {\n let cState = update.state.field(completionState);\n let conf = update.state.facet(completionConfig);\n if (!update.selectionSet && !update.docChanged && update.startState.field(completionState) == cState)\n return;\n let doesReset = update.transactions.some(tr => {\n let type = getUpdateType(tr, conf);\n return (type & 8 /* UpdateType.Reset */) || (tr.selection || tr.docChanged) && !(type & 3 /* UpdateType.SimpleInteraction */);\n });\n for (let i = 0; i < this.running.length; i++) {\n let query = this.running[i];\n if (doesReset ||\n query.context.abortOnDocChange && update.docChanged ||\n query.updates.length + update.transactions.length > MaxUpdateCount && Date.now() - query.time > MinAbortTime) {\n for (let handler of query.context.abortListeners) {\n try {\n handler();\n }\n catch (e) {\n logException(this.view.state, e);\n }\n }\n query.context.abortListeners = null;\n this.running.splice(i--, 1);\n }\n else {\n query.updates.push(...update.transactions);\n }\n }\n if (this.debounceUpdate > -1)\n clearTimeout(this.debounceUpdate);\n if (update.transactions.some(tr => tr.effects.some(e => e.is(startCompletionEffect))))\n this.pendingStart = true;\n let delay = this.pendingStart ? 50 : conf.activateOnTypingDelay;\n this.debounceUpdate = cState.active.some(a => a.isPending && !this.running.some(q => q.active.source == a.source))\n ? setTimeout(() => this.startUpdate(), delay) : -1;\n if (this.composing != 0 /* CompositionState.None */)\n for (let tr of update.transactions) {\n if (tr.isUserEvent(\"input.type\"))\n this.composing = 2 /* CompositionState.Changed */;\n else if (this.composing == 2 /* CompositionState.Changed */ && tr.selection)\n this.composing = 3 /* CompositionState.ChangedAndMoved */;\n }\n }\n startUpdate() {\n this.debounceUpdate = -1;\n this.pendingStart = false;\n let { state } = this.view, cState = state.field(completionState);\n for (let active of cState.active) {\n if (active.isPending && !this.running.some(r => r.active.source == active.source))\n this.startQuery(active);\n }\n if (this.running.length && cState.open && cState.open.disabled)\n this.debounceAccept = setTimeout(() => this.accept(), this.view.state.facet(completionConfig).updateSyncTime);\n }\n startQuery(active) {\n let { state } = this.view, pos = cur(state);\n let context = new CompletionContext(state, pos, active.explicit, this.view);\n let pending = new RunningQuery(active, context);\n this.running.push(pending);\n Promise.resolve(active.source(context)).then(result => {\n if (!pending.context.aborted) {\n pending.done = result || null;\n this.scheduleAccept();\n }\n }, err => {\n this.view.dispatch({ effects: closeCompletionEffect.of(null) });\n logException(this.view.state, err);\n });\n }\n scheduleAccept() {\n if (this.running.every(q => q.done !== undefined))\n this.accept();\n else if (this.debounceAccept < 0)\n this.debounceAccept = setTimeout(() => this.accept(), this.view.state.facet(completionConfig).updateSyncTime);\n }\n // For each finished query in this.running, try to create a result\n // or, if appropriate, restart the query.\n accept() {\n var _a;\n if (this.debounceAccept > -1)\n clearTimeout(this.debounceAccept);\n this.debounceAccept = -1;\n let updated = [];\n let conf = this.view.state.facet(completionConfig), cState = this.view.state.field(completionState);\n for (let i = 0; i < this.running.length; i++) {\n let query = this.running[i];\n if (query.done === undefined)\n continue;\n this.running.splice(i--, 1);\n if (query.done) {\n let pos = cur(query.updates.length ? query.updates[0].startState : this.view.state);\n let limit = Math.min(pos, query.done.from + (query.active.explicit ? 0 : 1));\n let active = new ActiveResult(query.active.source, query.active.explicit, limit, query.done, query.done.from, (_a = query.done.to) !== null && _a !== void 0 ? _a : pos);\n // Replay the transactions that happened since the start of\n // the request and see if that preserves the result\n for (let tr of query.updates)\n active = active.update(tr, conf);\n if (active.hasResult()) {\n updated.push(active);\n continue;\n }\n }\n let current = cState.active.find(a => a.source == query.active.source);\n if (current && current.isPending) {\n if (query.done == null) {\n // Explicitly failed. Should clear the pending status if it\n // hasn't been re-set in the meantime.\n let active = new ActiveSource(query.active.source, 0 /* State.Inactive */);\n for (let tr of query.updates)\n active = active.update(tr, conf);\n if (!active.isPending)\n updated.push(active);\n }\n else {\n // Cleared by subsequent transactions. Restart.\n this.startQuery(current);\n }\n }\n }\n if (updated.length || cState.open && cState.open.disabled)\n this.view.dispatch({ effects: setActiveEffect.of(updated) });\n }\n}, {\n eventHandlers: {\n blur(event) {\n let state = this.view.state.field(completionState, false);\n if (state && state.tooltip && this.view.state.facet(completionConfig).closeOnBlur) {\n let dialog = state.open && getTooltip(this.view, state.open.tooltip);\n if (!dialog || !dialog.dom.contains(event.relatedTarget))\n setTimeout(() => this.view.dispatch({ effects: closeCompletionEffect.of(null) }), 10);\n }\n },\n compositionstart() {\n this.composing = 1 /* CompositionState.Started */;\n },\n compositionend() {\n if (this.composing == 3 /* CompositionState.ChangedAndMoved */) {\n // Safari fires compositionend events synchronously, possibly\n // from inside an update, so dispatch asynchronously to avoid reentrancy\n setTimeout(() => this.view.dispatch({ effects: startCompletionEffect.of(false) }), 20);\n }\n this.composing = 0 /* CompositionState.None */;\n }\n }\n});\nconst windows = typeof navigator == \"object\" && /*@__PURE__*//Win/.test(navigator.platform);\nconst commitCharacters = /*@__PURE__*/Prec.highest(/*@__PURE__*/EditorView.domEventHandlers({\n keydown(event, view) {\n let field = view.state.field(completionState, false);\n if (!field || !field.open || field.open.disabled || field.open.selected < 0 ||\n event.key.length > 1 || event.ctrlKey && !(windows && event.altKey) || event.metaKey)\n return false;\n let option = field.open.options[field.open.selected];\n let result = field.active.find(a => a.source == option.source);\n let commitChars = option.completion.commitCharacters || result.result.commitCharacters;\n if (commitChars && commitChars.indexOf(event.key) > -1)\n applyCompletion(view, option);\n return false;\n }\n}));\n\nconst baseTheme = /*@__PURE__*/EditorView.baseTheme({\n \".cm-tooltip.cm-tooltip-autocomplete\": {\n \"& > ul\": {\n fontFamily: \"monospace\",\n whiteSpace: \"nowrap\",\n overflow: \"hidden auto\",\n maxWidth_fallback: \"700px\",\n maxWidth: \"min(700px, 95vw)\",\n minWidth: \"250px\",\n maxHeight: \"10em\",\n height: \"100%\",\n listStyle: \"none\",\n margin: 0,\n padding: 0,\n \"& > li, & > completion-section\": {\n padding: \"1px 3px\",\n lineHeight: 1.2\n },\n \"& > li\": {\n overflowX: \"hidden\",\n textOverflow: \"ellipsis\",\n cursor: \"pointer\"\n },\n \"& > completion-section\": {\n display: \"list-item\",\n borderBottom: \"1px solid silver\",\n paddingLeft: \"0.5em\",\n opacity: 0.7\n }\n }\n },\n \"&light .cm-tooltip-autocomplete ul li[aria-selected]\": {\n background: \"#17c\",\n color: \"white\",\n },\n \"&light .cm-tooltip-autocomplete-disabled ul li[aria-selected]\": {\n background: \"#777\",\n },\n \"&dark .cm-tooltip-autocomplete ul li[aria-selected]\": {\n background: \"#347\",\n color: \"white\",\n },\n \"&dark .cm-tooltip-autocomplete-disabled ul li[aria-selected]\": {\n background: \"#444\",\n },\n \".cm-completionListIncompleteTop:before, .cm-completionListIncompleteBottom:after\": {\n content: '\"···\"',\n opacity: 0.5,\n display: \"block\",\n textAlign: \"center\"\n },\n \".cm-tooltip.cm-completionInfo\": {\n position: \"absolute\",\n padding: \"3px 9px\",\n width: \"max-content\",\n maxWidth: `${400 /* Info.Width */}px`,\n boxSizing: \"border-box\",\n whiteSpace: \"pre-line\"\n },\n \".cm-completionInfo.cm-completionInfo-left\": { right: \"100%\" },\n \".cm-completionInfo.cm-completionInfo-right\": { left: \"100%\" },\n \".cm-completionInfo.cm-completionInfo-left-narrow\": { right: `${30 /* Info.Margin */}px` },\n \".cm-completionInfo.cm-completionInfo-right-narrow\": { left: `${30 /* Info.Margin */}px` },\n \"&light .cm-snippetField\": { backgroundColor: \"#00000022\" },\n \"&dark .cm-snippetField\": { backgroundColor: \"#ffffff22\" },\n \".cm-snippetFieldPosition\": {\n verticalAlign: \"text-top\",\n width: 0,\n height: \"1.15em\",\n display: \"inline-block\",\n margin: \"0 -0.7px -.7em\",\n borderLeft: \"1.4px dotted #888\"\n },\n \".cm-completionMatchedText\": {\n textDecoration: \"underline\"\n },\n \".cm-completionDetail\": {\n marginLeft: \"0.5em\",\n fontStyle: \"italic\"\n },\n \".cm-completionIcon\": {\n fontSize: \"90%\",\n width: \".8em\",\n display: \"inline-block\",\n textAlign: \"center\",\n paddingRight: \".6em\",\n opacity: \"0.6\",\n boxSizing: \"content-box\"\n },\n \".cm-completionIcon-function, .cm-completionIcon-method\": {\n \"&:after\": { content: \"'ƒ'\" }\n },\n \".cm-completionIcon-class\": {\n \"&:after\": { content: \"'○'\" }\n },\n \".cm-completionIcon-interface\": {\n \"&:after\": { content: \"'◌'\" }\n },\n \".cm-completionIcon-variable\": {\n \"&:after\": { content: \"'𝑥'\" }\n },\n \".cm-completionIcon-constant\": {\n \"&:after\": { content: \"'𝐶'\" }\n },\n \".cm-completionIcon-type\": {\n \"&:after\": { content: \"'𝑡'\" }\n },\n \".cm-completionIcon-enum\": {\n \"&:after\": { content: \"'∪'\" }\n },\n \".cm-completionIcon-property\": {\n \"&:after\": { content: \"'□'\" }\n },\n \".cm-completionIcon-keyword\": {\n \"&:after\": { content: \"'🔑\\uFE0E'\" } // Disable emoji rendering\n },\n \".cm-completionIcon-namespace\": {\n \"&:after\": { content: \"'▢'\" }\n },\n \".cm-completionIcon-text\": {\n \"&:after\": { content: \"'abc'\", fontSize: \"50%\", verticalAlign: \"middle\" }\n }\n});\n\nclass FieldPos {\n constructor(field, line, from, to) {\n this.field = field;\n this.line = line;\n this.from = from;\n this.to = to;\n }\n}\nclass FieldRange {\n constructor(field, from, to) {\n this.field = field;\n this.from = from;\n this.to = to;\n }\n map(changes) {\n let from = changes.mapPos(this.from, -1, MapMode.TrackDel);\n let to = changes.mapPos(this.to, 1, MapMode.TrackDel);\n return from == null || to == null ? null : new FieldRange(this.field, from, to);\n }\n}\nclass Snippet {\n constructor(lines, fieldPositions) {\n this.lines = lines;\n this.fieldPositions = fieldPositions;\n }\n instantiate(state, pos) {\n let text = [], lineStart = [pos];\n let lineObj = state.doc.lineAt(pos), baseIndent = /^\\s*/.exec(lineObj.text)[0];\n for (let line of this.lines) {\n if (text.length) {\n let indent = baseIndent, tabs = /^\\t*/.exec(line)[0].length;\n for (let i = 0; i < tabs; i++)\n indent += state.facet(indentUnit);\n lineStart.push(pos + indent.length - tabs);\n line = indent + line.slice(tabs);\n }\n text.push(line);\n pos += line.length + 1;\n }\n let ranges = this.fieldPositions.map(pos => new FieldRange(pos.field, lineStart[pos.line] + pos.from, lineStart[pos.line] + pos.to));\n return { text, ranges };\n }\n static parse(template) {\n let fields = [];\n let lines = [], positions = [], m;\n for (let line of template.split(/\\r\\n?|\\n/)) {\n while (m = /[#$]\\{(?:(\\d+)(?::([^{}]*))?|((?:\\\\[{}]|[^{}])*))\\}/.exec(line)) {\n let seq = m[1] ? +m[1] : null, rawName = m[2] || m[3] || \"\", found = -1;\n let name = rawName.replace(/\\\\[{}]/g, m => m[1]);\n for (let i = 0; i < fields.length; i++) {\n if (seq != null ? fields[i].seq == seq : name ? fields[i].name == name : false)\n found = i;\n }\n if (found < 0) {\n let i = 0;\n while (i < fields.length && (seq == null || (fields[i].seq != null && fields[i].seq < seq)))\n i++;\n fields.splice(i, 0, { seq, name });\n found = i;\n for (let pos of positions)\n if (pos.field >= found)\n pos.field++;\n }\n for (let pos of positions)\n if (pos.line == lines.length && pos.from > m.index) {\n let snip = m[2] ? 3 + (m[1] || \"\").length : 2;\n pos.from -= snip;\n pos.to -= snip;\n }\n positions.push(new FieldPos(found, lines.length, m.index, m.index + name.length));\n line = line.slice(0, m.index) + rawName + line.slice(m.index + m[0].length);\n }\n line = line.replace(/\\\\([{}])/g, (_, brace, index) => {\n for (let pos of positions)\n if (pos.line == lines.length && pos.from > index) {\n pos.from--;\n pos.to--;\n }\n return brace;\n });\n lines.push(line);\n }\n return new Snippet(lines, positions);\n }\n}\nlet fieldMarker = /*@__PURE__*/Decoration.widget({ widget: /*@__PURE__*/new class extends WidgetType {\n toDOM() {\n let span = document.createElement(\"span\");\n span.className = \"cm-snippetFieldPosition\";\n return span;\n }\n ignoreEvent() { return false; }\n } });\nlet fieldRange = /*@__PURE__*/Decoration.mark({ class: \"cm-snippetField\" });\nclass ActiveSnippet {\n constructor(ranges, active) {\n this.ranges = ranges;\n this.active = active;\n this.deco = Decoration.set(ranges.map(r => (r.from == r.to ? fieldMarker : fieldRange).range(r.from, r.to)), true);\n }\n map(changes) {\n let ranges = [];\n for (let r of this.ranges) {\n let mapped = r.map(changes);\n if (!mapped)\n return null;\n ranges.push(mapped);\n }\n return new ActiveSnippet(ranges, this.active);\n }\n selectionInsideField(sel) {\n return sel.ranges.every(range => this.ranges.some(r => r.field == this.active && r.from <= range.from && r.to >= range.to));\n }\n}\nconst setActive = /*@__PURE__*/StateEffect.define({\n map(value, changes) { return value && value.map(changes); }\n});\nconst moveToField = /*@__PURE__*/StateEffect.define();\nconst snippetState = /*@__PURE__*/StateField.define({\n create() { return null; },\n update(value, tr) {\n for (let effect of tr.effects) {\n if (effect.is(setActive))\n return effect.value;\n if (effect.is(moveToField) && value)\n return new ActiveSnippet(value.ranges, effect.value);\n }\n if (value && tr.docChanged)\n value = value.map(tr.changes);\n if (value && tr.selection && !value.selectionInsideField(tr.selection))\n value = null;\n return value;\n },\n provide: f => EditorView.decorations.from(f, val => val ? val.deco : Decoration.none)\n});\nfunction fieldSelection(ranges, field) {\n return EditorSelection.create(ranges.filter(r => r.field == field).map(r => EditorSelection.range(r.from, r.to)));\n}\n/**\nConvert a snippet template to a function that can\n[apply](https://codemirror.net/6/docs/ref/#autocomplete.Completion.apply) it. Snippets are written\nusing syntax like this:\n\n \"for (let ${index} = 0; ${index} < ${end}; ${index}++) {\\n\\t${}\\n}\"\n\nEach `${}` placeholder (you may also use `#{}`) indicates a field\nthat the user can fill in. Its name, if any, will be the default\ncontent for the field.\n\nWhen the snippet is activated by calling the returned function,\nthe code is inserted at the given position. Newlines in the\ntemplate are indented by the indentation of the start line, plus\none [indent unit](https://codemirror.net/6/docs/ref/#language.indentUnit) per tab character after\nthe newline.\n\nOn activation, (all instances of) the first field are selected.\nThe user can move between fields with Tab and Shift-Tab as long as\nthe fields are active. Moving to the last field or moving the\ncursor out of the current field deactivates the fields.\n\nThe order of fields defaults to textual order, but you can add\nnumbers to placeholders (`${1}` or `${1:defaultText}`) to provide\na custom order.\n\nTo include a literal `{` or `}` in your template, put a backslash\nin front of it. This will be removed and the brace will not be\ninterpreted as indicating a placeholder.\n*/\nfunction snippet(template) {\n let snippet = Snippet.parse(template);\n return (editor, completion, from, to) => {\n let { text, ranges } = snippet.instantiate(editor.state, from);\n let { main } = editor.state.selection;\n let spec = {\n changes: { from, to: to == main.from ? main.to : to, insert: Text.of(text) },\n scrollIntoView: true,\n annotations: completion ? [pickedCompletion.of(completion), Transaction.userEvent.of(\"input.complete\")] : undefined\n };\n if (ranges.length)\n spec.selection = fieldSelection(ranges, 0);\n if (ranges.some(r => r.field > 0)) {\n let active = new ActiveSnippet(ranges, 0);\n let effects = spec.effects = [setActive.of(active)];\n if (editor.state.field(snippetState, false) === undefined)\n effects.push(StateEffect.appendConfig.of([snippetState, addSnippetKeymap, snippetPointerHandler, baseTheme]));\n }\n editor.dispatch(editor.state.update(spec));\n };\n}\nfunction moveField(dir) {\n return ({ state, dispatch }) => {\n let active = state.field(snippetState, false);\n if (!active || dir < 0 && active.active == 0)\n return false;\n let next = active.active + dir, last = dir > 0 && !active.ranges.some(r => r.field == next + dir);\n dispatch(state.update({\n selection: fieldSelection(active.ranges, next),\n effects: setActive.of(last ? null : new ActiveSnippet(active.ranges, next)),\n scrollIntoView: true\n }));\n return true;\n };\n}\n/**\nA command that clears the active snippet, if any.\n*/\nconst clearSnippet = ({ state, dispatch }) => {\n let active = state.field(snippetState, false);\n if (!active)\n return false;\n dispatch(state.update({ effects: setActive.of(null) }));\n return true;\n};\n/**\nMove to the next snippet field, if available.\n*/\nconst nextSnippetField = /*@__PURE__*/moveField(1);\n/**\nMove to the previous snippet field, if available.\n*/\nconst prevSnippetField = /*@__PURE__*/moveField(-1);\n/**\nCheck if there is an active snippet with a next field for\n`nextSnippetField` to move to.\n*/\nfunction hasNextSnippetField(state) {\n let active = state.field(snippetState, false);\n return !!(active && active.ranges.some(r => r.field == active.active + 1));\n}\n/**\nReturns true if there is an active snippet and a previous field\nfor `prevSnippetField` to move to.\n*/\nfunction hasPrevSnippetField(state) {\n let active = state.field(snippetState, false);\n return !!(active && active.active > 0);\n}\nconst defaultSnippetKeymap = [\n { key: \"Tab\", run: nextSnippetField, shift: prevSnippetField },\n { key: \"Escape\", run: clearSnippet }\n];\n/**\nA facet that can be used to configure the key bindings used by\nsnippets. The default binds Tab to\n[`nextSnippetField`](https://codemirror.net/6/docs/ref/#autocomplete.nextSnippetField), Shift-Tab to\n[`prevSnippetField`](https://codemirror.net/6/docs/ref/#autocomplete.prevSnippetField), and Escape\nto [`clearSnippet`](https://codemirror.net/6/docs/ref/#autocomplete.clearSnippet).\n*/\nconst snippetKeymap = /*@__PURE__*/Facet.define({\n combine(maps) { return maps.length ? maps[0] : defaultSnippetKeymap; }\n});\nconst addSnippetKeymap = /*@__PURE__*/Prec.highest(/*@__PURE__*/keymap.compute([snippetKeymap], state => state.facet(snippetKeymap)));\n/**\nCreate a completion from a snippet. Returns an object with the\nproperties from `completion`, plus an `apply` function that\napplies the snippet.\n*/\nfunction snippetCompletion(template, completion) {\n return { ...completion, apply: snippet(template) };\n}\nconst snippetPointerHandler = /*@__PURE__*/EditorView.domEventHandlers({\n mousedown(event, view) {\n let active = view.state.field(snippetState, false), pos;\n if (!active || (pos = view.posAtCoords({ x: event.clientX, y: event.clientY })) == null)\n return false;\n let match = active.ranges.find(r => r.from <= pos && r.to >= pos);\n if (!match || match.field == active.active)\n return false;\n view.dispatch({\n selection: fieldSelection(active.ranges, match.field),\n effects: setActive.of(active.ranges.some(r => r.field > match.field)\n ? new ActiveSnippet(active.ranges, match.field) : null),\n scrollIntoView: true\n });\n return true;\n }\n});\n\nfunction wordRE(wordChars) {\n let escaped = wordChars.replace(/[\\]\\-\\\\]/g, \"\\\\$&\");\n try {\n return new RegExp(`[\\\\p{Alphabetic}\\\\p{Number}_${escaped}]+`, \"ug\");\n }\n catch (_a) {\n return new RegExp(`[\\w${escaped}]`, \"g\");\n }\n}\nfunction mapRE(re, f) {\n return new RegExp(f(re.source), re.unicode ? \"u\" : \"\");\n}\nconst wordCaches = /*@__PURE__*/Object.create(null);\nfunction wordCache(wordChars) {\n return wordCaches[wordChars] || (wordCaches[wordChars] = new WeakMap);\n}\nfunction storeWords(doc, wordRE, result, seen, ignoreAt) {\n for (let lines = doc.iterLines(), pos = 0; !lines.next().done;) {\n let { value } = lines, m;\n wordRE.lastIndex = 0;\n while (m = wordRE.exec(value)) {\n if (!seen[m[0]] && pos + m.index != ignoreAt) {\n result.push({ type: \"text\", label: m[0] });\n seen[m[0]] = true;\n if (result.length >= 2000 /* C.MaxList */)\n return;\n }\n }\n pos += value.length + 1;\n }\n}\nfunction collectWords(doc, cache, wordRE, to, ignoreAt) {\n let big = doc.length >= 1000 /* C.MinCacheLen */;\n let cached = big && cache.get(doc);\n if (cached)\n return cached;\n let result = [], seen = Object.create(null);\n if (doc.children) {\n let pos = 0;\n for (let ch of doc.children) {\n if (ch.length >= 1000 /* C.MinCacheLen */) {\n for (let c of collectWords(ch, cache, wordRE, to - pos, ignoreAt - pos)) {\n if (!seen[c.label]) {\n seen[c.label] = true;\n result.push(c);\n }\n }\n }\n else {\n storeWords(ch, wordRE, result, seen, ignoreAt - pos);\n }\n pos += ch.length + 1;\n }\n }\n else {\n storeWords(doc, wordRE, result, seen, ignoreAt);\n }\n if (big && result.length < 2000 /* C.MaxList */)\n cache.set(doc, result);\n return result;\n}\n/**\nA completion source that will scan the document for words (using a\n[character categorizer](https://codemirror.net/6/docs/ref/#state.EditorState.charCategorizer)), and\nreturn those as completions.\n*/\nconst completeAnyWord = context => {\n let wordChars = context.state.languageDataAt(\"wordChars\", context.pos).join(\"\");\n let re = wordRE(wordChars);\n let token = context.matchBefore(mapRE(re, s => s + \"$\"));\n if (!token && !context.explicit)\n return null;\n let from = token ? token.from : context.pos;\n let options = collectWords(context.state.doc, wordCache(wordChars), re, 50000 /* C.Range */, from);\n return { from, options, validFor: mapRE(re, s => \"^\" + s) };\n};\n\nconst defaults = {\n brackets: [\"(\", \"[\", \"{\", \"'\", '\"'],\n before: \")]}:;>\",\n stringPrefixes: []\n};\nconst closeBracketEffect = /*@__PURE__*/StateEffect.define({\n map(value, mapping) {\n let mapped = mapping.mapPos(value, -1, MapMode.TrackAfter);\n return mapped == null ? undefined : mapped;\n }\n});\nconst closedBracket = /*@__PURE__*/new class extends RangeValue {\n};\nclosedBracket.startSide = 1;\nclosedBracket.endSide = -1;\nconst bracketState = /*@__PURE__*/StateField.define({\n create() { return RangeSet.empty; },\n update(value, tr) {\n value = value.map(tr.changes);\n if (tr.selection) {\n let line = tr.state.doc.lineAt(tr.selection.main.head);\n value = value.update({ filter: from => from >= line.from && from <= line.to });\n }\n for (let effect of tr.effects)\n if (effect.is(closeBracketEffect))\n value = value.update({ add: [closedBracket.range(effect.value, effect.value + 1)] });\n return value;\n }\n});\n/**\nExtension to enable bracket-closing behavior. When a closeable\nbracket is typed, its closing bracket is immediately inserted\nafter the cursor. When closing a bracket directly in front of a\nclosing bracket inserted by the extension, the cursor moves over\nthat bracket.\n*/\nfunction closeBrackets() {\n return [inputHandler, bracketState];\n}\nconst definedClosing = \"()[]{}<>«»»«[]{}\";\nfunction closing(ch) {\n for (let i = 0; i < definedClosing.length; i += 2)\n if (definedClosing.charCodeAt(i) == ch)\n return definedClosing.charAt(i + 1);\n return fromCodePoint(ch < 128 ? ch : ch + 1);\n}\nfunction config(state, pos) {\n return state.languageDataAt(\"closeBrackets\", pos)[0] || defaults;\n}\nconst android = typeof navigator == \"object\" && /*@__PURE__*//Android\\b/.test(navigator.userAgent);\nconst inputHandler = /*@__PURE__*/EditorView.inputHandler.of((view, from, to, insert) => {\n if ((android ? view.composing : view.compositionStarted) || view.state.readOnly)\n return false;\n let sel = view.state.selection.main;\n if (insert.length > 2 || insert.length == 2 && codePointSize(codePointAt(insert, 0)) == 1 ||\n from != sel.from || to != sel.to)\n return false;\n let tr = insertBracket(view.state, insert);\n if (!tr)\n return false;\n view.dispatch(tr);\n return true;\n});\n/**\nCommand that implements deleting a pair of matching brackets when\nthe cursor is between them.\n*/\nconst deleteBracketPair = ({ state, dispatch }) => {\n if (state.readOnly)\n return false;\n let conf = config(state, state.selection.main.head);\n let tokens = conf.brackets || defaults.brackets;\n let dont = null, changes = state.changeByRange(range => {\n if (range.empty) {\n let before = prevChar(state.doc, range.head);\n for (let token of tokens) {\n if (token == before && nextChar(state.doc, range.head) == closing(codePointAt(token, 0)))\n return { changes: { from: range.head - token.length, to: range.head + token.length },\n range: EditorSelection.cursor(range.head - token.length) };\n }\n }\n return { range: dont = range };\n });\n if (!dont)\n dispatch(state.update(changes, { scrollIntoView: true, userEvent: \"delete.backward\" }));\n return !dont;\n};\n/**\nClose-brackets related key bindings. Binds Backspace to\n[`deleteBracketPair`](https://codemirror.net/6/docs/ref/#autocomplete.deleteBracketPair).\n*/\nconst closeBracketsKeymap = [\n { key: \"Backspace\", run: deleteBracketPair }\n];\n/**\nImplements the extension's behavior on text insertion. If the\ngiven string counts as a bracket in the language around the\nselection, and replacing the selection with it requires custom\nbehavior (inserting a closing version or skipping past a\npreviously-closed bracket), this function returns a transaction\nrepresenting that custom behavior. (You only need this if you want\nto programmatically insert brackets—the\n[`closeBrackets`](https://codemirror.net/6/docs/ref/#autocomplete.closeBrackets) extension will\ntake care of running this for user input.)\n*/\nfunction insertBracket(state, bracket) {\n let conf = config(state, state.selection.main.head);\n let tokens = conf.brackets || defaults.brackets;\n for (let tok of tokens) {\n let closed = closing(codePointAt(tok, 0));\n if (bracket == tok)\n return closed == tok ? handleSame(state, tok, tokens.indexOf(tok + tok + tok) > -1, conf)\n : handleOpen(state, tok, closed, conf.before || defaults.before);\n if (bracket == closed && closedBracketAt(state, state.selection.main.from))\n return handleClose(state, tok, closed);\n }\n return null;\n}\nfunction closedBracketAt(state, pos) {\n let found = false;\n state.field(bracketState).between(0, state.doc.length, from => {\n if (from == pos)\n found = true;\n });\n return found;\n}\nfunction nextChar(doc, pos) {\n let next = doc.sliceString(pos, pos + 2);\n return next.slice(0, codePointSize(codePointAt(next, 0)));\n}\nfunction prevChar(doc, pos) {\n let prev = doc.sliceString(pos - 2, pos);\n return codePointSize(codePointAt(prev, 0)) == prev.length ? prev : prev.slice(1);\n}\nfunction handleOpen(state, open, close, closeBefore) {\n let dont = null, changes = state.changeByRange(range => {\n if (!range.empty)\n return { changes: [{ insert: open, from: range.from }, { insert: close, from: range.to }],\n effects: closeBracketEffect.of(range.to + open.length),\n range: EditorSelection.range(range.anchor + open.length, range.head + open.length) };\n let next = nextChar(state.doc, range.head);\n if (!next || /\\s/.test(next) || closeBefore.indexOf(next) > -1)\n return { changes: { insert: open + close, from: range.head },\n effects: closeBracketEffect.of(range.head + open.length),\n range: EditorSelection.cursor(range.head + open.length) };\n return { range: dont = range };\n });\n return dont ? null : state.update(changes, {\n scrollIntoView: true,\n userEvent: \"input.type\"\n });\n}\nfunction handleClose(state, _open, close) {\n let dont = null, changes = state.changeByRange(range => {\n if (range.empty && nextChar(state.doc, range.head) == close)\n return { changes: { from: range.head, to: range.head + close.length, insert: close },\n range: EditorSelection.cursor(range.head + close.length) };\n return dont = { range };\n });\n return dont ? null : state.update(changes, {\n scrollIntoView: true,\n userEvent: \"input.type\"\n });\n}\n// Handles cases where the open and close token are the same, and\n// possibly triple quotes (as in `\"\"\"abc\"\"\"`-style quoting).\nfunction handleSame(state, token, allowTriple, config) {\n let stringPrefixes = config.stringPrefixes || defaults.stringPrefixes;\n let dont = null, changes = state.changeByRange(range => {\n if (!range.empty)\n return { changes: [{ insert: token, from: range.from }, { insert: token, from: range.to }],\n effects: closeBracketEffect.of(range.to + token.length),\n range: EditorSelection.range(range.anchor + token.length, range.head + token.length) };\n let pos = range.head, next = nextChar(state.doc, pos), start;\n if (next == token) {\n if (nodeStart(state, pos)) {\n return { changes: { insert: token + token, from: pos },\n effects: closeBracketEffect.of(pos + token.length),\n range: EditorSelection.cursor(pos + token.length) };\n }\n else if (closedBracketAt(state, pos)) {\n let isTriple = allowTriple && state.sliceDoc(pos, pos + token.length * 3) == token + token + token;\n let content = isTriple ? token + token + token : token;\n return { changes: { from: pos, to: pos + content.length, insert: content },\n range: EditorSelection.cursor(pos + content.length) };\n }\n }\n else if (allowTriple && state.sliceDoc(pos - 2 * token.length, pos) == token + token &&\n (start = canStartStringAt(state, pos - 2 * token.length, stringPrefixes)) > -1 &&\n nodeStart(state, start)) {\n return { changes: { insert: token + token + token + token, from: pos },\n effects: closeBracketEffect.of(pos + token.length),\n range: EditorSelection.cursor(pos + token.length) };\n }\n else if (state.charCategorizer(pos)(next) != CharCategory.Word) {\n if (canStartStringAt(state, pos, stringPrefixes) > -1 && !probablyInString(state, pos, token, stringPrefixes))\n return { changes: { insert: token + token, from: pos },\n effects: closeBracketEffect.of(pos + token.length),\n range: EditorSelection.cursor(pos + token.length) };\n }\n return { range: dont = range };\n });\n return dont ? null : state.update(changes, {\n scrollIntoView: true,\n userEvent: \"input.type\"\n });\n}\nfunction nodeStart(state, pos) {\n let tree = syntaxTree(state).resolveInner(pos + 1);\n return tree.parent && tree.from == pos;\n}\nfunction probablyInString(state, pos, quoteToken, prefixes) {\n let node = syntaxTree(state).resolveInner(pos, -1);\n let maxPrefix = prefixes.reduce((m, p) => Math.max(m, p.length), 0);\n for (let i = 0; i < 5; i++) {\n let start = state.sliceDoc(node.from, Math.min(node.to, node.from + quoteToken.length + maxPrefix));\n let quotePos = start.indexOf(quoteToken);\n if (!quotePos || quotePos > -1 && prefixes.indexOf(start.slice(0, quotePos)) > -1) {\n let first = node.firstChild;\n while (first && first.from == node.from && first.to - first.from > quoteToken.length + quotePos) {\n if (state.sliceDoc(first.to - quoteToken.length, first.to) == quoteToken)\n return false;\n first = first.firstChild;\n }\n return true;\n }\n let parent = node.to == pos && node.parent;\n if (!parent)\n break;\n node = parent;\n }\n return false;\n}\nfunction canStartStringAt(state, pos, prefixes) {\n let charCat = state.charCategorizer(pos);\n if (charCat(state.sliceDoc(pos - 1, pos)) != CharCategory.Word)\n return pos;\n for (let prefix of prefixes) {\n let start = pos - prefix.length;\n if (state.sliceDoc(start, pos) == prefix && charCat(state.sliceDoc(start - 1, start)) != CharCategory.Word)\n return start;\n }\n return -1;\n}\n\n/**\nReturns an extension that enables autocompletion.\n*/\nfunction autocompletion(config = {}) {\n return [\n commitCharacters,\n completionState,\n completionConfig.of(config),\n completionPlugin,\n completionKeymapExt,\n baseTheme\n ];\n}\n/**\nBasic keybindings for autocompletion.\n\n - Ctrl-Space (and Alt-\\` or Alt-i on macOS): [`startCompletion`](https://codemirror.net/6/docs/ref/#autocomplete.startCompletion)\n - Escape: [`closeCompletion`](https://codemirror.net/6/docs/ref/#autocomplete.closeCompletion)\n - ArrowDown: [`moveCompletionSelection`](https://codemirror.net/6/docs/ref/#autocomplete.moveCompletionSelection)`(true)`\n - ArrowUp: [`moveCompletionSelection`](https://codemirror.net/6/docs/ref/#autocomplete.moveCompletionSelection)`(false)`\n - PageDown: [`moveCompletionSelection`](https://codemirror.net/6/docs/ref/#autocomplete.moveCompletionSelection)`(true, \"page\")`\n - PageUp: [`moveCompletionSelection`](https://codemirror.net/6/docs/ref/#autocomplete.moveCompletionSelection)`(false, \"page\")`\n - Enter: [`acceptCompletion`](https://codemirror.net/6/docs/ref/#autocomplete.acceptCompletion)\n*/\nconst completionKeymap = [\n { key: \"Ctrl-Space\", run: startCompletion },\n { mac: \"Alt-`\", run: startCompletion },\n { mac: \"Alt-i\", run: startCompletion },\n { key: \"Escape\", run: closeCompletion },\n { key: \"ArrowDown\", run: /*@__PURE__*/moveCompletionSelection(true) },\n { key: \"ArrowUp\", run: /*@__PURE__*/moveCompletionSelection(false) },\n { key: \"PageDown\", run: /*@__PURE__*/moveCompletionSelection(true, \"page\") },\n { key: \"PageUp\", run: /*@__PURE__*/moveCompletionSelection(false, \"page\") },\n { key: \"Enter\", run: acceptCompletion }\n];\nconst completionKeymapExt = /*@__PURE__*/Prec.highest(/*@__PURE__*/keymap.computeN([completionConfig], state => state.facet(completionConfig).defaultKeymap ? [completionKeymap] : []));\n/**\nGet the current completion status. When completions are available,\nthis will return `\"active\"`. When completions are pending (in the\nprocess of being queried), this returns `\"pending\"`. Otherwise, it\nreturns `null`.\n*/\nfunction completionStatus(state) {\n let cState = state.field(completionState, false);\n return cState && cState.active.some(a => a.isPending) ? \"pending\"\n : cState && cState.active.some(a => a.state != 0 /* State.Inactive */) ? \"active\" : null;\n}\nconst completionArrayCache = /*@__PURE__*/new WeakMap;\n/**\nReturns the available completions as an array.\n*/\nfunction currentCompletions(state) {\n var _a;\n let open = (_a = state.field(completionState, false)) === null || _a === void 0 ? void 0 : _a.open;\n if (!open || open.disabled)\n return [];\n let completions = completionArrayCache.get(open.options);\n if (!completions)\n completionArrayCache.set(open.options, completions = open.options.map(o => o.completion));\n return completions;\n}\n/**\nReturn the currently selected completion, if any.\n*/\nfunction selectedCompletion(state) {\n var _a;\n let open = (_a = state.field(completionState, false)) === null || _a === void 0 ? void 0 : _a.open;\n return open && !open.disabled && open.selected >= 0 ? open.options[open.selected].completion : null;\n}\n/**\nReturns the currently selected position in the active completion\nlist, or null if no completions are active.\n*/\nfunction selectedCompletionIndex(state) {\n var _a;\n let open = (_a = state.field(completionState, false)) === null || _a === void 0 ? void 0 : _a.open;\n return open && !open.disabled && open.selected >= 0 ? open.selected : null;\n}\n/**\nCreate an effect that can be attached to a transaction to change\nthe currently selected completion.\n*/\nfunction setSelectedCompletion(index) {\n return setSelectedEffect.of(index);\n}\n\nexport { CompletionContext, acceptCompletion, autocompletion, clearSnippet, closeBrackets, closeBracketsKeymap, closeCompletion, completeAnyWord, completeFromList, completionKeymap, completionStatus, currentCompletions, deleteBracketPair, hasNextSnippetField, hasPrevSnippetField, ifIn, ifNotIn, insertBracket, insertCompletionText, moveCompletionSelection, nextSnippetField, pickedCompletion, prevSnippetField, selectedCompletion, selectedCompletionIndex, setSelectedCompletion, snippet, snippetCompletion, snippetKeymap, startCompletion };\n","import { Annotation, Facet, combineConfig, StateField, Transaction, ChangeSet, ChangeDesc, EditorSelection, StateEffect, Text, findClusterBreak, countColumn, CharCategory } from '@codemirror/state';\nimport { EditorView, Direction } from '@codemirror/view';\nimport { IndentContext, getIndentation, indentString, matchBrackets, syntaxTree, getIndentUnit, indentUnit } from '@codemirror/language';\nimport { NodeProp } from '@lezer/common';\n\n/**\nComment or uncomment the current selection. Will use line comments\nif available, otherwise falling back to block comments.\n*/\nconst toggleComment = target => {\n let { state } = target, line = state.doc.lineAt(state.selection.main.from), config = getConfig(target.state, line.from);\n return config.line ? toggleLineComment(target) : config.block ? toggleBlockCommentByLine(target) : false;\n};\nfunction command(f, option) {\n return ({ state, dispatch }) => {\n if (state.readOnly)\n return false;\n let tr = f(option, state);\n if (!tr)\n return false;\n dispatch(state.update(tr));\n return true;\n };\n}\n/**\nComment or uncomment the current selection using line comments.\nThe line comment syntax is taken from the\n[`commentTokens`](https://codemirror.net/6/docs/ref/#commands.CommentTokens) [language\ndata](https://codemirror.net/6/docs/ref/#state.EditorState.languageDataAt).\n*/\nconst toggleLineComment = /*@__PURE__*/command(changeLineComment, 0 /* CommentOption.Toggle */);\n/**\nComment the current selection using line comments.\n*/\nconst lineComment = /*@__PURE__*/command(changeLineComment, 1 /* CommentOption.Comment */);\n/**\nUncomment the current selection using line comments.\n*/\nconst lineUncomment = /*@__PURE__*/command(changeLineComment, 2 /* CommentOption.Uncomment */);\n/**\nComment or uncomment the current selection using block comments.\nThe block comment syntax is taken from the\n[`commentTokens`](https://codemirror.net/6/docs/ref/#commands.CommentTokens) [language\ndata](https://codemirror.net/6/docs/ref/#state.EditorState.languageDataAt).\n*/\nconst toggleBlockComment = /*@__PURE__*/command(changeBlockComment, 0 /* CommentOption.Toggle */);\n/**\nComment the current selection using block comments.\n*/\nconst blockComment = /*@__PURE__*/command(changeBlockComment, 1 /* CommentOption.Comment */);\n/**\nUncomment the current selection using block comments.\n*/\nconst blockUncomment = /*@__PURE__*/command(changeBlockComment, 2 /* CommentOption.Uncomment */);\n/**\nComment or uncomment the lines around the current selection using\nblock comments.\n*/\nconst toggleBlockCommentByLine = /*@__PURE__*/command((o, s) => changeBlockComment(o, s, selectedLineRanges(s)), 0 /* CommentOption.Toggle */);\nfunction getConfig(state, pos) {\n let data = state.languageDataAt(\"commentTokens\", pos, 1);\n return data.length ? data[0] : {};\n}\nconst SearchMargin = 50;\n/**\nDetermines if the given range is block-commented in the given\nstate.\n*/\nfunction findBlockComment(state, { open, close }, from, to) {\n let textBefore = state.sliceDoc(from - SearchMargin, from);\n let textAfter = state.sliceDoc(to, to + SearchMargin);\n let spaceBefore = /\\s*$/.exec(textBefore)[0].length, spaceAfter = /^\\s*/.exec(textAfter)[0].length;\n let beforeOff = textBefore.length - spaceBefore;\n if (textBefore.slice(beforeOff - open.length, beforeOff) == open &&\n textAfter.slice(spaceAfter, spaceAfter + close.length) == close) {\n return { open: { pos: from - spaceBefore, margin: spaceBefore && 1 },\n close: { pos: to + spaceAfter, margin: spaceAfter && 1 } };\n }\n let startText, endText;\n if (to - from <= 2 * SearchMargin) {\n startText = endText = state.sliceDoc(from, to);\n }\n else {\n startText = state.sliceDoc(from, from + SearchMargin);\n endText = state.sliceDoc(to - SearchMargin, to);\n }\n let startSpace = /^\\s*/.exec(startText)[0].length, endSpace = /\\s*$/.exec(endText)[0].length;\n let endOff = endText.length - endSpace - close.length;\n if (startText.slice(startSpace, startSpace + open.length) == open &&\n endText.slice(endOff, endOff + close.length) == close) {\n return { open: { pos: from + startSpace + open.length,\n margin: /\\s/.test(startText.charAt(startSpace + open.length)) ? 1 : 0 },\n close: { pos: to - endSpace - close.length,\n margin: /\\s/.test(endText.charAt(endOff - 1)) ? 1 : 0 } };\n }\n return null;\n}\nfunction selectedLineRanges(state) {\n let ranges = [];\n for (let r of state.selection.ranges) {\n let fromLine = state.doc.lineAt(r.from);\n let toLine = r.to <= fromLine.to ? fromLine : state.doc.lineAt(r.to);\n if (toLine.from > fromLine.from && toLine.from == r.to)\n toLine = r.to == fromLine.to + 1 ? fromLine : state.doc.lineAt(r.to - 1);\n let last = ranges.length - 1;\n if (last >= 0 && ranges[last].to > fromLine.from)\n ranges[last].to = toLine.to;\n else\n ranges.push({ from: fromLine.from + /^\\s*/.exec(fromLine.text)[0].length, to: toLine.to });\n }\n return ranges;\n}\n// Performs toggle, comment and uncomment of block comments in\n// languages that support them.\nfunction changeBlockComment(option, state, ranges = state.selection.ranges) {\n let tokens = ranges.map(r => getConfig(state, r.from).block);\n if (!tokens.every(c => c))\n return null;\n let comments = ranges.map((r, i) => findBlockComment(state, tokens[i], r.from, r.to));\n if (option != 2 /* CommentOption.Uncomment */ && !comments.every(c => c)) {\n return { changes: state.changes(ranges.map((range, i) => {\n if (comments[i])\n return [];\n return [{ from: range.from, insert: tokens[i].open + \" \" }, { from: range.to, insert: \" \" + tokens[i].close }];\n })) };\n }\n else if (option != 1 /* CommentOption.Comment */ && comments.some(c => c)) {\n let changes = [];\n for (let i = 0, comment; i < comments.length; i++)\n if (comment = comments[i]) {\n let token = tokens[i], { open, close } = comment;\n changes.push({ from: open.pos - token.open.length, to: open.pos + open.margin }, { from: close.pos - close.margin, to: close.pos + token.close.length });\n }\n return { changes };\n }\n return null;\n}\n// Performs toggle, comment and uncomment of line comments.\nfunction changeLineComment(option, state, ranges = state.selection.ranges) {\n let lines = [];\n let prevLine = -1;\n for (let { from, to } of ranges) {\n let startI = lines.length, minIndent = 1e9;\n let token = getConfig(state, from).line;\n if (!token)\n continue;\n for (let pos = from; pos <= to;) {\n let line = state.doc.lineAt(pos);\n if (line.from > prevLine && (from == to || to > line.from)) {\n prevLine = line.from;\n let indent = /^\\s*/.exec(line.text)[0].length;\n let empty = indent == line.length;\n let comment = line.text.slice(indent, indent + token.length) == token ? indent : -1;\n if (indent < line.text.length && indent < minIndent)\n minIndent = indent;\n lines.push({ line, comment, token, indent, empty, single: false });\n }\n pos = line.to + 1;\n }\n if (minIndent < 1e9)\n for (let i = startI; i < lines.length; i++)\n if (lines[i].indent < lines[i].line.text.length)\n lines[i].indent = minIndent;\n if (lines.length == startI + 1)\n lines[startI].single = true;\n }\n if (option != 2 /* CommentOption.Uncomment */ && lines.some(l => l.comment < 0 && (!l.empty || l.single))) {\n let changes = [];\n for (let { line, token, indent, empty, single } of lines)\n if (single || !empty)\n changes.push({ from: line.from + indent, insert: token + \" \" });\n let changeSet = state.changes(changes);\n return { changes: changeSet, selection: state.selection.map(changeSet, 1) };\n }\n else if (option != 1 /* CommentOption.Comment */ && lines.some(l => l.comment >= 0)) {\n let changes = [];\n for (let { line, comment, token } of lines)\n if (comment >= 0) {\n let from = line.from + comment, to = from + token.length;\n if (line.text[to - line.from] == \" \")\n to++;\n changes.push({ from, to });\n }\n return { changes };\n }\n return null;\n}\n\nconst fromHistory = /*@__PURE__*/Annotation.define();\n/**\nTransaction annotation that will prevent that transaction from\nbeing combined with other transactions in the undo history. Given\n`\"before\"`, it'll prevent merging with previous transactions. With\n`\"after\"`, subsequent transactions won't be combined with this\none. With `\"full\"`, the transaction is isolated on both sides.\n*/\nconst isolateHistory = /*@__PURE__*/Annotation.define();\n/**\nThis facet provides a way to register functions that, given a\ntransaction, provide a set of effects that the history should\nstore when inverting the transaction. This can be used to\nintegrate some kinds of effects in the history, so that they can\nbe undone (and redone again).\n*/\nconst invertedEffects = /*@__PURE__*/Facet.define();\nconst historyConfig = /*@__PURE__*/Facet.define({\n combine(configs) {\n return combineConfig(configs, {\n minDepth: 100,\n newGroupDelay: 500,\n joinToEvent: (_t, isAdjacent) => isAdjacent,\n }, {\n minDepth: Math.max,\n newGroupDelay: Math.min,\n joinToEvent: (a, b) => (tr, adj) => a(tr, adj) || b(tr, adj)\n });\n }\n});\nconst historyField_ = /*@__PURE__*/StateField.define({\n create() {\n return HistoryState.empty;\n },\n update(state, tr) {\n let config = tr.state.facet(historyConfig);\n let fromHist = tr.annotation(fromHistory);\n if (fromHist) {\n let item = HistEvent.fromTransaction(tr, fromHist.selection), from = fromHist.side;\n let other = from == 0 /* BranchName.Done */ ? state.undone : state.done;\n if (item)\n other = updateBranch(other, other.length, config.minDepth, item);\n else\n other = addSelection(other, tr.startState.selection);\n return new HistoryState(from == 0 /* BranchName.Done */ ? fromHist.rest : other, from == 0 /* BranchName.Done */ ? other : fromHist.rest);\n }\n let isolate = tr.annotation(isolateHistory);\n if (isolate == \"full\" || isolate == \"before\")\n state = state.isolate();\n if (tr.annotation(Transaction.addToHistory) === false)\n return !tr.changes.empty ? state.addMapping(tr.changes.desc) : state;\n let event = HistEvent.fromTransaction(tr);\n let time = tr.annotation(Transaction.time), userEvent = tr.annotation(Transaction.userEvent);\n if (event)\n state = state.addChanges(event, time, userEvent, config, tr);\n else if (tr.selection)\n state = state.addSelection(tr.startState.selection, time, userEvent, config.newGroupDelay);\n if (isolate == \"full\" || isolate == \"after\")\n state = state.isolate();\n return state;\n },\n toJSON(value) {\n return { done: value.done.map(e => e.toJSON()), undone: value.undone.map(e => e.toJSON()) };\n },\n fromJSON(json) {\n return new HistoryState(json.done.map(HistEvent.fromJSON), json.undone.map(HistEvent.fromJSON));\n }\n});\n/**\nCreate a history extension with the given configuration.\n*/\nfunction history(config = {}) {\n return [\n historyField_,\n historyConfig.of(config),\n EditorView.domEventHandlers({\n beforeinput(e, view) {\n let command = e.inputType == \"historyUndo\" ? undo : e.inputType == \"historyRedo\" ? redo : null;\n if (!command)\n return false;\n e.preventDefault();\n return command(view);\n }\n })\n ];\n}\n/**\nThe state field used to store the history data. Should probably\nonly be used when you want to\n[serialize](https://codemirror.net/6/docs/ref/#state.EditorState.toJSON) or\n[deserialize](https://codemirror.net/6/docs/ref/#state.EditorState^fromJSON) state objects in a way\nthat preserves history.\n*/\nconst historyField = historyField_;\nfunction cmd(side, selection) {\n return function ({ state, dispatch }) {\n if (!selection && state.readOnly)\n return false;\n let historyState = state.field(historyField_, false);\n if (!historyState)\n return false;\n let tr = historyState.pop(side, state, selection);\n if (!tr)\n return false;\n dispatch(tr);\n return true;\n };\n}\n/**\nUndo a single group of history events. Returns false if no group\nwas available.\n*/\nconst undo = /*@__PURE__*/cmd(0 /* BranchName.Done */, false);\n/**\nRedo a group of history events. Returns false if no group was\navailable.\n*/\nconst redo = /*@__PURE__*/cmd(1 /* BranchName.Undone */, false);\n/**\nUndo a change or selection change.\n*/\nconst undoSelection = /*@__PURE__*/cmd(0 /* BranchName.Done */, true);\n/**\nRedo a change or selection change.\n*/\nconst redoSelection = /*@__PURE__*/cmd(1 /* BranchName.Undone */, true);\nfunction depth(side) {\n return function (state) {\n let histState = state.field(historyField_, false);\n if (!histState)\n return 0;\n let branch = side == 0 /* BranchName.Done */ ? histState.done : histState.undone;\n return branch.length - (branch.length && !branch[0].changes ? 1 : 0);\n };\n}\n/**\nThe amount of undoable change events available in a given state.\n*/\nconst undoDepth = /*@__PURE__*/depth(0 /* BranchName.Done */);\n/**\nThe amount of redoable change events available in a given state.\n*/\nconst redoDepth = /*@__PURE__*/depth(1 /* BranchName.Undone */);\n// History events store groups of changes or effects that need to be\n// undone/redone together.\nclass HistEvent {\n constructor(\n // The changes in this event. Normal events hold at least one\n // change or effect. But it may be necessary to store selection\n // events before the first change, in which case a special type of\n // instance is created which doesn't hold any changes, with\n // changes == startSelection == undefined\n changes, \n // The effects associated with this event\n effects, \n // Accumulated mapping (from addToHistory==false) that should be\n // applied to events below this one.\n mapped, \n // The selection before this event\n startSelection, \n // Stores selection changes after this event, to be used for\n // selection undo/redo.\n selectionsAfter) {\n this.changes = changes;\n this.effects = effects;\n this.mapped = mapped;\n this.startSelection = startSelection;\n this.selectionsAfter = selectionsAfter;\n }\n setSelAfter(after) {\n return new HistEvent(this.changes, this.effects, this.mapped, this.startSelection, after);\n }\n toJSON() {\n var _a, _b, _c;\n return {\n changes: (_a = this.changes) === null || _a === void 0 ? void 0 : _a.toJSON(),\n mapped: (_b = this.mapped) === null || _b === void 0 ? void 0 : _b.toJSON(),\n startSelection: (_c = this.startSelection) === null || _c === void 0 ? void 0 : _c.toJSON(),\n selectionsAfter: this.selectionsAfter.map(s => s.toJSON())\n };\n }\n static fromJSON(json) {\n return new HistEvent(json.changes && ChangeSet.fromJSON(json.changes), [], json.mapped && ChangeDesc.fromJSON(json.mapped), json.startSelection && EditorSelection.fromJSON(json.startSelection), json.selectionsAfter.map(EditorSelection.fromJSON));\n }\n // This does not check `addToHistory` and such, it assumes the\n // transaction needs to be converted to an item. Returns null when\n // there are no changes or effects in the transaction.\n static fromTransaction(tr, selection) {\n let effects = none;\n for (let invert of tr.startState.facet(invertedEffects)) {\n let result = invert(tr);\n if (result.length)\n effects = effects.concat(result);\n }\n if (!effects.length && tr.changes.empty)\n return null;\n return new HistEvent(tr.changes.invert(tr.startState.doc), effects, undefined, selection || tr.startState.selection, none);\n }\n static selection(selections) {\n return new HistEvent(undefined, none, undefined, undefined, selections);\n }\n}\nfunction updateBranch(branch, to, maxLen, newEvent) {\n let start = to + 1 > maxLen + 20 ? to - maxLen - 1 : 0;\n let newBranch = branch.slice(start, to);\n newBranch.push(newEvent);\n return newBranch;\n}\nfunction isAdjacent(a, b) {\n let ranges = [], isAdjacent = false;\n a.iterChangedRanges((f, t) => ranges.push(f, t));\n b.iterChangedRanges((_f, _t, f, t) => {\n for (let i = 0; i < ranges.length;) {\n let from = ranges[i++], to = ranges[i++];\n if (t >= from && f <= to)\n isAdjacent = true;\n }\n });\n return isAdjacent;\n}\nfunction eqSelectionShape(a, b) {\n return a.ranges.length == b.ranges.length &&\n a.ranges.filter((r, i) => r.empty != b.ranges[i].empty).length === 0;\n}\nfunction conc(a, b) {\n return !a.length ? b : !b.length ? a : a.concat(b);\n}\nconst none = [];\nconst MaxSelectionsPerEvent = 200;\nfunction addSelection(branch, selection) {\n if (!branch.length) {\n return [HistEvent.selection([selection])];\n }\n else {\n let lastEvent = branch[branch.length - 1];\n let sels = lastEvent.selectionsAfter.slice(Math.max(0, lastEvent.selectionsAfter.length - MaxSelectionsPerEvent));\n if (sels.length && sels[sels.length - 1].eq(selection))\n return branch;\n sels.push(selection);\n return updateBranch(branch, branch.length - 1, 1e9, lastEvent.setSelAfter(sels));\n }\n}\n// Assumes the top item has one or more selectionAfter values\nfunction popSelection(branch) {\n let last = branch[branch.length - 1];\n let newBranch = branch.slice();\n newBranch[branch.length - 1] = last.setSelAfter(last.selectionsAfter.slice(0, last.selectionsAfter.length - 1));\n return newBranch;\n}\n// Add a mapping to the top event in the given branch. If this maps\n// away all the changes and effects in that item, drop it and\n// propagate the mapping to the next item.\nfunction addMappingToBranch(branch, mapping) {\n if (!branch.length)\n return branch;\n let length = branch.length, selections = none;\n while (length) {\n let event = mapEvent(branch[length - 1], mapping, selections);\n if (event.changes && !event.changes.empty || event.effects.length) { // Event survived mapping\n let result = branch.slice(0, length);\n result[length - 1] = event;\n return result;\n }\n else { // Drop this event, since there's no changes or effects left\n mapping = event.mapped;\n length--;\n selections = event.selectionsAfter;\n }\n }\n return selections.length ? [HistEvent.selection(selections)] : none;\n}\nfunction mapEvent(event, mapping, extraSelections) {\n let selections = conc(event.selectionsAfter.length ? event.selectionsAfter.map(s => s.map(mapping)) : none, extraSelections);\n // Change-less events don't store mappings (they are always the last event in a branch)\n if (!event.changes)\n return HistEvent.selection(selections);\n let mappedChanges = event.changes.map(mapping), before = mapping.mapDesc(event.changes, true);\n let fullMapping = event.mapped ? event.mapped.composeDesc(before) : before;\n return new HistEvent(mappedChanges, StateEffect.mapEffects(event.effects, mapping), fullMapping, event.startSelection.map(before), selections);\n}\nconst joinableUserEvent = /^(input\\.type|delete)($|\\.)/;\nclass HistoryState {\n constructor(done, undone, prevTime = 0, prevUserEvent = undefined) {\n this.done = done;\n this.undone = undone;\n this.prevTime = prevTime;\n this.prevUserEvent = prevUserEvent;\n }\n isolate() {\n return this.prevTime ? new HistoryState(this.done, this.undone) : this;\n }\n addChanges(event, time, userEvent, config, tr) {\n let done = this.done, lastEvent = done[done.length - 1];\n if (lastEvent && lastEvent.changes && !lastEvent.changes.empty && event.changes &&\n (!userEvent || joinableUserEvent.test(userEvent)) &&\n ((!lastEvent.selectionsAfter.length &&\n time - this.prevTime < config.newGroupDelay &&\n config.joinToEvent(tr, isAdjacent(lastEvent.changes, event.changes))) ||\n // For compose (but not compose.start) events, always join with previous event\n userEvent == \"input.type.compose\")) {\n done = updateBranch(done, done.length - 1, config.minDepth, new HistEvent(event.changes.compose(lastEvent.changes), conc(StateEffect.mapEffects(event.effects, lastEvent.changes), lastEvent.effects), lastEvent.mapped, lastEvent.startSelection, none));\n }\n else {\n done = updateBranch(done, done.length, config.minDepth, event);\n }\n return new HistoryState(done, none, time, userEvent);\n }\n addSelection(selection, time, userEvent, newGroupDelay) {\n let last = this.done.length ? this.done[this.done.length - 1].selectionsAfter : none;\n if (last.length > 0 &&\n time - this.prevTime < newGroupDelay &&\n userEvent == this.prevUserEvent && userEvent && /^select($|\\.)/.test(userEvent) &&\n eqSelectionShape(last[last.length - 1], selection))\n return this;\n return new HistoryState(addSelection(this.done, selection), this.undone, time, userEvent);\n }\n addMapping(mapping) {\n return new HistoryState(addMappingToBranch(this.done, mapping), addMappingToBranch(this.undone, mapping), this.prevTime, this.prevUserEvent);\n }\n pop(side, state, onlySelection) {\n let branch = side == 0 /* BranchName.Done */ ? this.done : this.undone;\n if (branch.length == 0)\n return null;\n let event = branch[branch.length - 1], selection = event.selectionsAfter[0] || state.selection;\n if (onlySelection && event.selectionsAfter.length) {\n return state.update({\n selection: event.selectionsAfter[event.selectionsAfter.length - 1],\n annotations: fromHistory.of({ side, rest: popSelection(branch), selection }),\n userEvent: side == 0 /* BranchName.Done */ ? \"select.undo\" : \"select.redo\",\n scrollIntoView: true\n });\n }\n else if (!event.changes) {\n return null;\n }\n else {\n let rest = branch.length == 1 ? none : branch.slice(0, branch.length - 1);\n if (event.mapped)\n rest = addMappingToBranch(rest, event.mapped);\n return state.update({\n changes: event.changes,\n selection: event.startSelection,\n effects: event.effects,\n annotations: fromHistory.of({ side, rest, selection }),\n filter: false,\n userEvent: side == 0 /* BranchName.Done */ ? \"undo\" : \"redo\",\n scrollIntoView: true\n });\n }\n }\n}\nHistoryState.empty = /*@__PURE__*/new HistoryState(none, none);\n/**\nDefault key bindings for the undo history.\n\n- Mod-z: [`undo`](https://codemirror.net/6/docs/ref/#commands.undo).\n- Mod-y (Mod-Shift-z on macOS) + Ctrl-Shift-z on Linux: [`redo`](https://codemirror.net/6/docs/ref/#commands.redo).\n- Mod-u: [`undoSelection`](https://codemirror.net/6/docs/ref/#commands.undoSelection).\n- Alt-u (Mod-Shift-u on macOS): [`redoSelection`](https://codemirror.net/6/docs/ref/#commands.redoSelection).\n*/\nconst historyKeymap = [\n { key: \"Mod-z\", run: undo, preventDefault: true },\n { key: \"Mod-y\", mac: \"Mod-Shift-z\", run: redo, preventDefault: true },\n { linux: \"Ctrl-Shift-z\", run: redo, preventDefault: true },\n { key: \"Mod-u\", run: undoSelection, preventDefault: true },\n { key: \"Alt-u\", mac: \"Mod-Shift-u\", run: redoSelection, preventDefault: true }\n];\n\nfunction updateSel(sel, by) {\n return EditorSelection.create(sel.ranges.map(by), sel.mainIndex);\n}\nfunction setSel(state, selection) {\n return state.update({ selection, scrollIntoView: true, userEvent: \"select\" });\n}\nfunction moveSel({ state, dispatch }, how) {\n let selection = updateSel(state.selection, how);\n if (selection.eq(state.selection, true))\n return false;\n dispatch(setSel(state, selection));\n return true;\n}\nfunction rangeEnd(range, forward) {\n return EditorSelection.cursor(forward ? range.to : range.from);\n}\nfunction cursorByChar(view, forward) {\n return moveSel(view, range => range.empty ? view.moveByChar(range, forward) : rangeEnd(range, forward));\n}\nfunction ltrAtCursor(view) {\n return view.textDirectionAt(view.state.selection.main.head) == Direction.LTR;\n}\n/**\nMove the selection one character to the left (which is backward in\nleft-to-right text, forward in right-to-left text).\n*/\nconst cursorCharLeft = view => cursorByChar(view, !ltrAtCursor(view));\n/**\nMove the selection one character to the right.\n*/\nconst cursorCharRight = view => cursorByChar(view, ltrAtCursor(view));\n/**\nMove the selection one character forward.\n*/\nconst cursorCharForward = view => cursorByChar(view, true);\n/**\nMove the selection one character backward.\n*/\nconst cursorCharBackward = view => cursorByChar(view, false);\nfunction byCharLogical(state, range, forward) {\n let pos = range.head, line = state.doc.lineAt(pos);\n if (pos == (forward ? line.to : line.from))\n pos = forward ? Math.min(state.doc.length, line.to + 1) : Math.max(0, line.from - 1);\n else\n pos = line.from + findClusterBreak(line.text, pos - line.from, forward);\n return EditorSelection.cursor(pos, forward ? -1 : 1);\n}\nfunction moveByCharLogical(target, forward) {\n return moveSel(target, range => range.empty ? byCharLogical(target.state, range, forward) : rangeEnd(range, forward));\n}\n/**\nMove the selection one character forward, in logical\n(non-text-direction-aware) string index order.\n*/\nconst cursorCharForwardLogical = target => moveByCharLogical(target, true);\n/**\nMove the selection one character backward, in logical string index\norder.\n*/\nconst cursorCharBackwardLogical = target => moveByCharLogical(target, false);\nfunction cursorByGroup(view, forward) {\n return moveSel(view, range => range.empty ? view.moveByGroup(range, forward) : rangeEnd(range, forward));\n}\n/**\nMove the selection to the left across one group of word or\nnon-word (but also non-space) characters.\n*/\nconst cursorGroupLeft = view => cursorByGroup(view, !ltrAtCursor(view));\n/**\nMove the selection one group to the right.\n*/\nconst cursorGroupRight = view => cursorByGroup(view, ltrAtCursor(view));\n/**\nMove the selection one group forward.\n*/\nconst cursorGroupForward = view => cursorByGroup(view, true);\n/**\nMove the selection one group backward.\n*/\nconst cursorGroupBackward = view => cursorByGroup(view, false);\nfunction toGroupStart(view, pos, start) {\n let categorize = view.state.charCategorizer(pos);\n let cat = categorize(start), initial = cat != CharCategory.Space;\n return (next) => {\n let nextCat = categorize(next);\n if (nextCat != CharCategory.Space)\n return initial && nextCat == cat;\n initial = false;\n return true;\n };\n}\n/**\nMove the cursor one group forward in the default Windows style,\nwhere it moves to the start of the next group.\n*/\nconst cursorGroupForwardWin = view => {\n return moveSel(view, range => range.empty\n ? view.moveByChar(range, true, start => toGroupStart(view, range.head, start))\n : rangeEnd(range, true));\n};\nconst segmenter = typeof Intl != \"undefined\" && Intl.Segmenter ?\n /*@__PURE__*/new (Intl.Segmenter)(undefined, { granularity: \"word\" }) : null;\nfunction moveBySubword(view, range, forward) {\n let categorize = view.state.charCategorizer(range.from);\n let cat = CharCategory.Space, pos = range.from, steps = 0;\n let done = false, sawUpper = false, sawLower = false;\n let step = (next) => {\n if (done)\n return false;\n pos += forward ? next.length : -next.length;\n let nextCat = categorize(next), ahead;\n if (nextCat == CharCategory.Word && next.charCodeAt(0) < 128 && /[\\W_]/.test(next))\n nextCat = -1; // Treat word punctuation specially\n if (cat == CharCategory.Space)\n cat = nextCat;\n if (cat != nextCat)\n return false;\n if (cat == CharCategory.Word) {\n if (next.toLowerCase() == next) {\n if (!forward && sawUpper)\n return false;\n sawLower = true;\n }\n else if (sawLower) {\n if (forward)\n return false;\n done = true;\n }\n else {\n if (sawUpper && forward && categorize(ahead = view.state.sliceDoc(pos, pos + 1)) == CharCategory.Word &&\n ahead.toLowerCase() == ahead)\n return false;\n sawUpper = true;\n }\n }\n steps++;\n return true;\n };\n let end = view.moveByChar(range, forward, start => {\n step(start);\n return step;\n });\n if (segmenter && cat == CharCategory.Word && end.from == range.from + steps * (forward ? 1 : -1)) {\n let from = Math.min(range.head, end.head), to = Math.max(range.head, end.head);\n let skipped = view.state.sliceDoc(from, to);\n if (skipped.length > 1 && /[\\u4E00-\\uffff]/.test(skipped)) {\n let segments = Array.from(segmenter.segment(skipped));\n if (segments.length > 1) {\n if (forward)\n return EditorSelection.cursor(range.head + segments[1].index, -1);\n return EditorSelection.cursor(end.head + segments[segments.length - 1].index, 1);\n }\n }\n }\n return end;\n}\nfunction cursorBySubword(view, forward) {\n return moveSel(view, range => range.empty ? moveBySubword(view, range, forward) : rangeEnd(range, forward));\n}\n/**\nMove the selection one group or camel-case subword forward.\n*/\nconst cursorSubwordForward = view => cursorBySubword(view, true);\n/**\nMove the selection one group or camel-case subword backward.\n*/\nconst cursorSubwordBackward = view => cursorBySubword(view, false);\nfunction interestingNode(state, node, bracketProp) {\n if (node.type.prop(bracketProp))\n return true;\n let len = node.to - node.from;\n return len && (len > 2 || /[^\\s,.;:]/.test(state.sliceDoc(node.from, node.to))) || node.firstChild;\n}\nfunction moveBySyntax(state, start, forward) {\n let pos = syntaxTree(state).resolveInner(start.head);\n let bracketProp = forward ? NodeProp.closedBy : NodeProp.openedBy;\n // Scan forward through child nodes to see if there's an interesting\n // node ahead.\n for (let at = start.head;;) {\n let next = forward ? pos.childAfter(at) : pos.childBefore(at);\n if (!next)\n break;\n if (interestingNode(state, next, bracketProp))\n pos = next;\n else\n at = forward ? next.to : next.from;\n }\n let bracket = pos.type.prop(bracketProp), match, newPos;\n if (bracket && (match = forward ? matchBrackets(state, pos.from, 1) : matchBrackets(state, pos.to, -1)) && match.matched)\n newPos = forward ? match.end.to : match.end.from;\n else\n newPos = forward ? pos.to : pos.from;\n return EditorSelection.cursor(newPos, forward ? -1 : 1);\n}\n/**\nMove the cursor over the next syntactic element to the left.\n*/\nconst cursorSyntaxLeft = view => moveSel(view, range => moveBySyntax(view.state, range, !ltrAtCursor(view)));\n/**\nMove the cursor over the next syntactic element to the right.\n*/\nconst cursorSyntaxRight = view => moveSel(view, range => moveBySyntax(view.state, range, ltrAtCursor(view)));\nfunction cursorByLine(view, forward) {\n return moveSel(view, range => {\n if (!range.empty)\n return rangeEnd(range, forward);\n let moved = view.moveVertically(range, forward);\n return moved.head != range.head ? moved : view.moveToLineBoundary(range, forward);\n });\n}\n/**\nMove the selection one line up.\n*/\nconst cursorLineUp = view => cursorByLine(view, false);\n/**\nMove the selection one line down.\n*/\nconst cursorLineDown = view => cursorByLine(view, true);\nfunction pageInfo(view) {\n let selfScroll = view.scrollDOM.clientHeight < view.scrollDOM.scrollHeight - 2;\n let marginTop = 0, marginBottom = 0, height;\n if (selfScroll) {\n for (let source of view.state.facet(EditorView.scrollMargins)) {\n let margins = source(view);\n if (margins === null || margins === void 0 ? void 0 : margins.top)\n marginTop = Math.max(margins === null || margins === void 0 ? void 0 : margins.top, marginTop);\n if (margins === null || margins === void 0 ? void 0 : margins.bottom)\n marginBottom = Math.max(margins === null || margins === void 0 ? void 0 : margins.bottom, marginBottom);\n }\n height = view.scrollDOM.clientHeight - marginTop - marginBottom;\n }\n else {\n height = (view.dom.ownerDocument.defaultView || window).innerHeight;\n }\n return { marginTop, marginBottom, selfScroll,\n height: Math.max(view.defaultLineHeight, height - 5) };\n}\nfunction cursorByPage(view, forward) {\n let page = pageInfo(view);\n let { state } = view, selection = updateSel(state.selection, range => {\n return range.empty ? view.moveVertically(range, forward, page.height)\n : rangeEnd(range, forward);\n });\n if (selection.eq(state.selection))\n return false;\n let effect;\n if (page.selfScroll) {\n let startPos = view.coordsAtPos(state.selection.main.head);\n let scrollRect = view.scrollDOM.getBoundingClientRect();\n let scrollTop = scrollRect.top + page.marginTop, scrollBottom = scrollRect.bottom - page.marginBottom;\n if (startPos && startPos.top > scrollTop && startPos.bottom < scrollBottom)\n effect = EditorView.scrollIntoView(selection.main.head, { y: \"start\", yMargin: startPos.top - scrollTop });\n }\n view.dispatch(setSel(state, selection), { effects: effect });\n return true;\n}\n/**\nMove the selection one page up.\n*/\nconst cursorPageUp = view => cursorByPage(view, false);\n/**\nMove the selection one page down.\n*/\nconst cursorPageDown = view => cursorByPage(view, true);\nfunction moveByLineBoundary(view, start, forward) {\n let line = view.lineBlockAt(start.head), moved = view.moveToLineBoundary(start, forward);\n if (moved.head == start.head && moved.head != (forward ? line.to : line.from))\n moved = view.moveToLineBoundary(start, forward, false);\n if (!forward && moved.head == line.from && line.length) {\n let space = /^\\s*/.exec(view.state.sliceDoc(line.from, Math.min(line.from + 100, line.to)))[0].length;\n if (space && start.head != line.from + space)\n moved = EditorSelection.cursor(line.from + space);\n }\n return moved;\n}\n/**\nMove the selection to the next line wrap point, or to the end of\nthe line if there isn't one left on this line.\n*/\nconst cursorLineBoundaryForward = view => moveSel(view, range => moveByLineBoundary(view, range, true));\n/**\nMove the selection to previous line wrap point, or failing that to\nthe start of the line. If the line is indented, and the cursor\nisn't already at the end of the indentation, this will move to the\nend of the indentation instead of the start of the line.\n*/\nconst cursorLineBoundaryBackward = view => moveSel(view, range => moveByLineBoundary(view, range, false));\n/**\nMove the selection one line wrap point to the left.\n*/\nconst cursorLineBoundaryLeft = view => moveSel(view, range => moveByLineBoundary(view, range, !ltrAtCursor(view)));\n/**\nMove the selection one line wrap point to the right.\n*/\nconst cursorLineBoundaryRight = view => moveSel(view, range => moveByLineBoundary(view, range, ltrAtCursor(view)));\n/**\nMove the selection to the start of the line.\n*/\nconst cursorLineStart = view => moveSel(view, range => EditorSelection.cursor(view.lineBlockAt(range.head).from, 1));\n/**\nMove the selection to the end of the line.\n*/\nconst cursorLineEnd = view => moveSel(view, range => EditorSelection.cursor(view.lineBlockAt(range.head).to, -1));\nfunction toMatchingBracket(state, dispatch, extend) {\n let found = false, selection = updateSel(state.selection, range => {\n let matching = matchBrackets(state, range.head, -1)\n || matchBrackets(state, range.head, 1)\n || (range.head > 0 && matchBrackets(state, range.head - 1, 1))\n || (range.head < state.doc.length && matchBrackets(state, range.head + 1, -1));\n if (!matching || !matching.end)\n return range;\n found = true;\n let head = matching.start.from == range.head ? matching.end.to : matching.end.from;\n return extend ? EditorSelection.range(range.anchor, head) : EditorSelection.cursor(head);\n });\n if (!found)\n return false;\n dispatch(setSel(state, selection));\n return true;\n}\n/**\nMove the selection to the bracket matching the one it is currently\non, if any.\n*/\nconst cursorMatchingBracket = ({ state, dispatch }) => toMatchingBracket(state, dispatch, false);\n/**\nExtend the selection to the bracket matching the one the selection\nhead is currently on, if any.\n*/\nconst selectMatchingBracket = ({ state, dispatch }) => toMatchingBracket(state, dispatch, true);\nfunction extendSel(target, how) {\n let selection = updateSel(target.state.selection, range => {\n let head = how(range);\n return EditorSelection.range(range.anchor, head.head, head.goalColumn, head.bidiLevel || undefined);\n });\n if (selection.eq(target.state.selection))\n return false;\n target.dispatch(setSel(target.state, selection));\n return true;\n}\nfunction selectByChar(view, forward) {\n return extendSel(view, range => view.moveByChar(range, forward));\n}\n/**\nMove the selection head one character to the left, while leaving\nthe anchor in place.\n*/\nconst selectCharLeft = view => selectByChar(view, !ltrAtCursor(view));\n/**\nMove the selection head one character to the right.\n*/\nconst selectCharRight = view => selectByChar(view, ltrAtCursor(view));\n/**\nMove the selection head one character forward.\n*/\nconst selectCharForward = view => selectByChar(view, true);\n/**\nMove the selection head one character backward.\n*/\nconst selectCharBackward = view => selectByChar(view, false);\n/**\nMove the selection head one character forward by logical\n(non-direction aware) string index order.\n*/\nconst selectCharForwardLogical = target => extendSel(target, range => byCharLogical(target.state, range, true));\n/**\nMove the selection head one character backward by logical string\nindex order.\n*/\nconst selectCharBackwardLogical = target => extendSel(target, range => byCharLogical(target.state, range, false));\nfunction selectByGroup(view, forward) {\n return extendSel(view, range => view.moveByGroup(range, forward));\n}\n/**\nMove the selection head one [group](https://codemirror.net/6/docs/ref/#commands.cursorGroupLeft) to\nthe left.\n*/\nconst selectGroupLeft = view => selectByGroup(view, !ltrAtCursor(view));\n/**\nMove the selection head one group to the right.\n*/\nconst selectGroupRight = view => selectByGroup(view, ltrAtCursor(view));\n/**\nMove the selection head one group forward.\n*/\nconst selectGroupForward = view => selectByGroup(view, true);\n/**\nMove the selection head one group backward.\n*/\nconst selectGroupBackward = view => selectByGroup(view, false);\n/**\nMove the selection head one group forward in the default Windows\nstyle, skipping to the start of the next group.\n*/\nconst selectGroupForwardWin = view => {\n return extendSel(view, range => view.moveByChar(range, true, start => toGroupStart(view, range.head, start)));\n};\nfunction selectBySubword(view, forward) {\n return extendSel(view, range => moveBySubword(view, range, forward));\n}\n/**\nMove the selection head one group or camel-case subword forward.\n*/\nconst selectSubwordForward = view => selectBySubword(view, true);\n/**\nMove the selection head one group or subword backward.\n*/\nconst selectSubwordBackward = view => selectBySubword(view, false);\n/**\nMove the selection head over the next syntactic element to the left.\n*/\nconst selectSyntaxLeft = view => extendSel(view, range => moveBySyntax(view.state, range, !ltrAtCursor(view)));\n/**\nMove the selection head over the next syntactic element to the right.\n*/\nconst selectSyntaxRight = view => extendSel(view, range => moveBySyntax(view.state, range, ltrAtCursor(view)));\nfunction selectByLine(view, forward) {\n return extendSel(view, range => view.moveVertically(range, forward));\n}\n/**\nMove the selection head one line up.\n*/\nconst selectLineUp = view => selectByLine(view, false);\n/**\nMove the selection head one line down.\n*/\nconst selectLineDown = view => selectByLine(view, true);\nfunction selectByPage(view, forward) {\n return extendSel(view, range => view.moveVertically(range, forward, pageInfo(view).height));\n}\n/**\nMove the selection head one page up.\n*/\nconst selectPageUp = view => selectByPage(view, false);\n/**\nMove the selection head one page down.\n*/\nconst selectPageDown = view => selectByPage(view, true);\n/**\nMove the selection head to the next line boundary.\n*/\nconst selectLineBoundaryForward = view => extendSel(view, range => moveByLineBoundary(view, range, true));\n/**\nMove the selection head to the previous line boundary.\n*/\nconst selectLineBoundaryBackward = view => extendSel(view, range => moveByLineBoundary(view, range, false));\n/**\nMove the selection head one line boundary to the left.\n*/\nconst selectLineBoundaryLeft = view => extendSel(view, range => moveByLineBoundary(view, range, !ltrAtCursor(view)));\n/**\nMove the selection head one line boundary to the right.\n*/\nconst selectLineBoundaryRight = view => extendSel(view, range => moveByLineBoundary(view, range, ltrAtCursor(view)));\n/**\nMove the selection head to the start of the line.\n*/\nconst selectLineStart = view => extendSel(view, range => EditorSelection.cursor(view.lineBlockAt(range.head).from));\n/**\nMove the selection head to the end of the line.\n*/\nconst selectLineEnd = view => extendSel(view, range => EditorSelection.cursor(view.lineBlockAt(range.head).to));\n/**\nMove the selection to the start of the document.\n*/\nconst cursorDocStart = ({ state, dispatch }) => {\n dispatch(setSel(state, { anchor: 0 }));\n return true;\n};\n/**\nMove the selection to the end of the document.\n*/\nconst cursorDocEnd = ({ state, dispatch }) => {\n dispatch(setSel(state, { anchor: state.doc.length }));\n return true;\n};\n/**\nMove the selection head to the start of the document.\n*/\nconst selectDocStart = ({ state, dispatch }) => {\n dispatch(setSel(state, { anchor: state.selection.main.anchor, head: 0 }));\n return true;\n};\n/**\nMove the selection head to the end of the document.\n*/\nconst selectDocEnd = ({ state, dispatch }) => {\n dispatch(setSel(state, { anchor: state.selection.main.anchor, head: state.doc.length }));\n return true;\n};\n/**\nSelect the entire document.\n*/\nconst selectAll = ({ state, dispatch }) => {\n dispatch(state.update({ selection: { anchor: 0, head: state.doc.length }, userEvent: \"select\" }));\n return true;\n};\n/**\nExpand the selection to cover entire lines.\n*/\nconst selectLine = ({ state, dispatch }) => {\n let ranges = selectedLineBlocks(state).map(({ from, to }) => EditorSelection.range(from, Math.min(to + 1, state.doc.length)));\n dispatch(state.update({ selection: EditorSelection.create(ranges), userEvent: \"select\" }));\n return true;\n};\n/**\nSelect the next syntactic construct that is larger than the\nselection. Note that this will only work insofar as the language\n[provider](https://codemirror.net/6/docs/ref/#language.language) you use builds up a full\nsyntax tree.\n*/\nconst selectParentSyntax = ({ state, dispatch }) => {\n let selection = updateSel(state.selection, range => {\n let tree = syntaxTree(state), stack = tree.resolveStack(range.from, 1);\n if (range.empty) {\n let stackBefore = tree.resolveStack(range.from, -1);\n if (stackBefore.node.from >= stack.node.from && stackBefore.node.to <= stack.node.to)\n stack = stackBefore;\n }\n for (let cur = stack; cur; cur = cur.next) {\n let { node } = cur;\n if (((node.from < range.from && node.to >= range.to) ||\n (node.to > range.to && node.from <= range.from)) &&\n cur.next)\n return EditorSelection.range(node.to, node.from);\n }\n return range;\n });\n if (selection.eq(state.selection))\n return false;\n dispatch(setSel(state, selection));\n return true;\n};\nfunction addCursorVertically(view, forward) {\n let { state } = view, sel = state.selection, ranges = state.selection.ranges.slice();\n for (let range of state.selection.ranges) {\n let line = state.doc.lineAt(range.head);\n if (forward ? line.to < view.state.doc.length : line.from > 0)\n for (let cur = range;;) {\n let next = view.moveVertically(cur, forward);\n if (next.head < line.from || next.head > line.to) {\n if (!ranges.some(r => r.head == next.head))\n ranges.push(next);\n break;\n }\n else if (next.head == cur.head) {\n break;\n }\n else {\n cur = next;\n }\n }\n }\n if (ranges.length == sel.ranges.length)\n return false;\n view.dispatch(setSel(state, EditorSelection.create(ranges, ranges.length - 1)));\n return true;\n}\n/**\nExpand the selection by adding a cursor above the heads of\ncurrently selected ranges.\n*/\nconst addCursorAbove = view => addCursorVertically(view, false);\n/**\nExpand the selection by adding a cursor below the heads of\ncurrently selected ranges.\n*/\nconst addCursorBelow = view => addCursorVertically(view, true);\n/**\nSimplify the current selection. When multiple ranges are selected,\nreduce it to its main range. Otherwise, if the selection is\nnon-empty, convert it to a cursor selection.\n*/\nconst simplifySelection = ({ state, dispatch }) => {\n let cur = state.selection, selection = null;\n if (cur.ranges.length > 1)\n selection = EditorSelection.create([cur.main]);\n else if (!cur.main.empty)\n selection = EditorSelection.create([EditorSelection.cursor(cur.main.head)]);\n if (!selection)\n return false;\n dispatch(setSel(state, selection));\n return true;\n};\nfunction deleteBy(target, by) {\n if (target.state.readOnly)\n return false;\n let event = \"delete.selection\", { state } = target;\n let changes = state.changeByRange(range => {\n let { from, to } = range;\n if (from == to) {\n let towards = by(range);\n if (towards < from) {\n event = \"delete.backward\";\n towards = skipAtomic(target, towards, false);\n }\n else if (towards > from) {\n event = \"delete.forward\";\n towards = skipAtomic(target, towards, true);\n }\n from = Math.min(from, towards);\n to = Math.max(to, towards);\n }\n else {\n from = skipAtomic(target, from, false);\n to = skipAtomic(target, to, true);\n }\n return from == to ? { range } : { changes: { from, to }, range: EditorSelection.cursor(from, from < range.head ? -1 : 1) };\n });\n if (changes.changes.empty)\n return false;\n target.dispatch(state.update(changes, {\n scrollIntoView: true,\n userEvent: event,\n effects: event == \"delete.selection\" ? EditorView.announce.of(state.phrase(\"Selection deleted\")) : undefined\n }));\n return true;\n}\nfunction skipAtomic(target, pos, forward) {\n if (target instanceof EditorView)\n for (let ranges of target.state.facet(EditorView.atomicRanges).map(f => f(target)))\n ranges.between(pos, pos, (from, to) => {\n if (from < pos && to > pos)\n pos = forward ? to : from;\n });\n return pos;\n}\nconst deleteByChar = (target, forward, byIndentUnit) => deleteBy(target, range => {\n let pos = range.from, { state } = target, line = state.doc.lineAt(pos), before, targetPos;\n if (byIndentUnit && !forward && pos > line.from && pos < line.from + 200 &&\n !/[^ \\t]/.test(before = line.text.slice(0, pos - line.from))) {\n if (before[before.length - 1] == \"\\t\")\n return pos - 1;\n let col = countColumn(before, state.tabSize), drop = col % getIndentUnit(state) || getIndentUnit(state);\n for (let i = 0; i < drop && before[before.length - 1 - i] == \" \"; i++)\n pos--;\n targetPos = pos;\n }\n else {\n targetPos = findClusterBreak(line.text, pos - line.from, forward, forward) + line.from;\n if (targetPos == pos && line.number != (forward ? state.doc.lines : 1))\n targetPos += forward ? 1 : -1;\n else if (!forward && /[\\ufe00-\\ufe0f]/.test(line.text.slice(targetPos - line.from, pos - line.from)))\n targetPos = findClusterBreak(line.text, targetPos - line.from, false, false) + line.from;\n }\n return targetPos;\n});\n/**\nDelete the selection, or, for cursor selections, the character or\nindentation unit before the cursor.\n*/\nconst deleteCharBackward = view => deleteByChar(view, false, true);\n/**\nDelete the selection or the character before the cursor. Does not\nimplement any extended behavior like deleting whole indentation\nunits in one go.\n*/\nconst deleteCharBackwardStrict = view => deleteByChar(view, false, false);\n/**\nDelete the selection or the character after the cursor.\n*/\nconst deleteCharForward = view => deleteByChar(view, true, false);\nconst deleteByGroup = (target, forward) => deleteBy(target, range => {\n let pos = range.head, { state } = target, line = state.doc.lineAt(pos);\n let categorize = state.charCategorizer(pos);\n for (let cat = null;;) {\n if (pos == (forward ? line.to : line.from)) {\n if (pos == range.head && line.number != (forward ? state.doc.lines : 1))\n pos += forward ? 1 : -1;\n break;\n }\n let next = findClusterBreak(line.text, pos - line.from, forward) + line.from;\n let nextChar = line.text.slice(Math.min(pos, next) - line.from, Math.max(pos, next) - line.from);\n let nextCat = categorize(nextChar);\n if (cat != null && nextCat != cat)\n break;\n if (nextChar != \" \" || pos != range.head)\n cat = nextCat;\n pos = next;\n }\n return pos;\n});\n/**\nDelete the selection or backward until the end of the next\n[group](https://codemirror.net/6/docs/ref/#view.EditorView.moveByGroup), only skipping groups of\nwhitespace when they consist of a single space.\n*/\nconst deleteGroupBackward = target => deleteByGroup(target, false);\n/**\nDelete the selection or forward until the end of the next group.\n*/\nconst deleteGroupForward = target => deleteByGroup(target, true);\n/**\nVariant of [`deleteGroupForward`](https://codemirror.net/6/docs/ref/#commands.deleteGroupForward)\nthat uses the Windows convention of also deleting the whitespace\nafter a word.\n*/\nconst deleteGroupForwardWin = view => deleteBy(view, range => view.moveByChar(range, true, start => toGroupStart(view, range.head, start)).head);\n/**\nDelete the selection, or, if it is a cursor selection, delete to\nthe end of the line. If the cursor is directly at the end of the\nline, delete the line break after it.\n*/\nconst deleteToLineEnd = view => deleteBy(view, range => {\n let lineEnd = view.lineBlockAt(range.head).to;\n return range.head < lineEnd ? lineEnd : Math.min(view.state.doc.length, range.head + 1);\n});\n/**\nDelete the selection, or, if it is a cursor selection, delete to\nthe start of the line. If the cursor is directly at the start of the\nline, delete the line break before it.\n*/\nconst deleteToLineStart = view => deleteBy(view, range => {\n let lineStart = view.lineBlockAt(range.head).from;\n return range.head > lineStart ? lineStart : Math.max(0, range.head - 1);\n});\n/**\nDelete the selection, or, if it is a cursor selection, delete to\nthe start of the line or the next line wrap before the cursor.\n*/\nconst deleteLineBoundaryBackward = view => deleteBy(view, range => {\n let lineStart = view.moveToLineBoundary(range, false).head;\n return range.head > lineStart ? lineStart : Math.max(0, range.head - 1);\n});\n/**\nDelete the selection, or, if it is a cursor selection, delete to\nthe end of the line or the next line wrap after the cursor.\n*/\nconst deleteLineBoundaryForward = view => deleteBy(view, range => {\n let lineStart = view.moveToLineBoundary(range, true).head;\n return range.head < lineStart ? lineStart : Math.min(view.state.doc.length, range.head + 1);\n});\n/**\nDelete all whitespace directly before a line end from the\ndocument.\n*/\nconst deleteTrailingWhitespace = ({ state, dispatch }) => {\n if (state.readOnly)\n return false;\n let changes = [];\n for (let pos = 0, prev = \"\", iter = state.doc.iter();;) {\n iter.next();\n if (iter.lineBreak || iter.done) {\n let trailing = prev.search(/\\s+$/);\n if (trailing > -1)\n changes.push({ from: pos - (prev.length - trailing), to: pos });\n if (iter.done)\n break;\n prev = \"\";\n }\n else {\n prev = iter.value;\n }\n pos += iter.value.length;\n }\n if (!changes.length)\n return false;\n dispatch(state.update({ changes, userEvent: \"delete\" }));\n return true;\n};\n/**\nReplace each selection range with a line break, leaving the cursor\non the line before the break.\n*/\nconst splitLine = ({ state, dispatch }) => {\n if (state.readOnly)\n return false;\n let changes = state.changeByRange(range => {\n return { changes: { from: range.from, to: range.to, insert: Text.of([\"\", \"\"]) },\n range: EditorSelection.cursor(range.from) };\n });\n dispatch(state.update(changes, { scrollIntoView: true, userEvent: \"input\" }));\n return true;\n};\n/**\nFlip the characters before and after the cursor(s).\n*/\nconst transposeChars = ({ state, dispatch }) => {\n if (state.readOnly)\n return false;\n let changes = state.changeByRange(range => {\n if (!range.empty || range.from == 0 || range.from == state.doc.length)\n return { range };\n let pos = range.from, line = state.doc.lineAt(pos);\n let from = pos == line.from ? pos - 1 : findClusterBreak(line.text, pos - line.from, false) + line.from;\n let to = pos == line.to ? pos + 1 : findClusterBreak(line.text, pos - line.from, true) + line.from;\n return { changes: { from, to, insert: state.doc.slice(pos, to).append(state.doc.slice(from, pos)) },\n range: EditorSelection.cursor(to) };\n });\n if (changes.changes.empty)\n return false;\n dispatch(state.update(changes, { scrollIntoView: true, userEvent: \"move.character\" }));\n return true;\n};\nfunction selectedLineBlocks(state) {\n let blocks = [], upto = -1;\n for (let range of state.selection.ranges) {\n let startLine = state.doc.lineAt(range.from), endLine = state.doc.lineAt(range.to);\n if (!range.empty && range.to == endLine.from)\n endLine = state.doc.lineAt(range.to - 1);\n if (upto >= startLine.number) {\n let prev = blocks[blocks.length - 1];\n prev.to = endLine.to;\n prev.ranges.push(range);\n }\n else {\n blocks.push({ from: startLine.from, to: endLine.to, ranges: [range] });\n }\n upto = endLine.number + 1;\n }\n return blocks;\n}\nfunction moveLine(state, dispatch, forward) {\n if (state.readOnly)\n return false;\n let changes = [], ranges = [];\n for (let block of selectedLineBlocks(state)) {\n if (forward ? block.to == state.doc.length : block.from == 0)\n continue;\n let nextLine = state.doc.lineAt(forward ? block.to + 1 : block.from - 1);\n let size = nextLine.length + 1;\n if (forward) {\n changes.push({ from: block.to, to: nextLine.to }, { from: block.from, insert: nextLine.text + state.lineBreak });\n for (let r of block.ranges)\n ranges.push(EditorSelection.range(Math.min(state.doc.length, r.anchor + size), Math.min(state.doc.length, r.head + size)));\n }\n else {\n changes.push({ from: nextLine.from, to: block.from }, { from: block.to, insert: state.lineBreak + nextLine.text });\n for (let r of block.ranges)\n ranges.push(EditorSelection.range(r.anchor - size, r.head - size));\n }\n }\n if (!changes.length)\n return false;\n dispatch(state.update({\n changes,\n scrollIntoView: true,\n selection: EditorSelection.create(ranges, state.selection.mainIndex),\n userEvent: \"move.line\"\n }));\n return true;\n}\n/**\nMove the selected lines up one line.\n*/\nconst moveLineUp = ({ state, dispatch }) => moveLine(state, dispatch, false);\n/**\nMove the selected lines down one line.\n*/\nconst moveLineDown = ({ state, dispatch }) => moveLine(state, dispatch, true);\nfunction copyLine(state, dispatch, forward) {\n if (state.readOnly)\n return false;\n let changes = [];\n for (let block of selectedLineBlocks(state)) {\n if (forward)\n changes.push({ from: block.from, insert: state.doc.slice(block.from, block.to) + state.lineBreak });\n else\n changes.push({ from: block.to, insert: state.lineBreak + state.doc.slice(block.from, block.to) });\n }\n let changeSet = state.changes(changes);\n dispatch(state.update({\n changes: changeSet,\n selection: state.selection.map(changeSet, forward ? 1 : -1),\n scrollIntoView: true,\n userEvent: \"input.copyline\"\n }));\n return true;\n}\n/**\nCreate a copy of the selected lines. Keep the selection in the top copy.\n*/\nconst copyLineUp = ({ state, dispatch }) => copyLine(state, dispatch, false);\n/**\nCreate a copy of the selected lines. Keep the selection in the bottom copy.\n*/\nconst copyLineDown = ({ state, dispatch }) => copyLine(state, dispatch, true);\n/**\nDelete selected lines.\n*/\nconst deleteLine = view => {\n if (view.state.readOnly)\n return false;\n let { state } = view, changes = state.changes(selectedLineBlocks(state).map(({ from, to }) => {\n if (from > 0)\n from--;\n else if (to < state.doc.length)\n to++;\n return { from, to };\n }));\n let selection = updateSel(state.selection, range => {\n let dist = undefined;\n if (view.lineWrapping) {\n let block = view.lineBlockAt(range.head), pos = view.coordsAtPos(range.head, range.assoc || 1);\n if (pos)\n dist = (block.bottom + view.documentTop) - pos.bottom + view.defaultLineHeight / 2;\n }\n return view.moveVertically(range, true, dist);\n }).map(changes);\n view.dispatch({ changes, selection, scrollIntoView: true, userEvent: \"delete.line\" });\n return true;\n};\n/**\nReplace the selection with a newline.\n*/\nconst insertNewline = ({ state, dispatch }) => {\n dispatch(state.update(state.replaceSelection(state.lineBreak), { scrollIntoView: true, userEvent: \"input\" }));\n return true;\n};\n/**\nReplace the selection with a newline and the same amount of\nindentation as the line above.\n*/\nconst insertNewlineKeepIndent = ({ state, dispatch }) => {\n dispatch(state.update(state.changeByRange(range => {\n let indent = /^\\s*/.exec(state.doc.lineAt(range.from).text)[0];\n return {\n changes: { from: range.from, to: range.to, insert: state.lineBreak + indent },\n range: EditorSelection.cursor(range.from + indent.length + 1)\n };\n }), { scrollIntoView: true, userEvent: \"input\" }));\n return true;\n};\nfunction isBetweenBrackets(state, pos) {\n if (/\\(\\)|\\[\\]|\\{\\}/.test(state.sliceDoc(pos - 1, pos + 1)))\n return { from: pos, to: pos };\n let context = syntaxTree(state).resolveInner(pos);\n let before = context.childBefore(pos), after = context.childAfter(pos), closedBy;\n if (before && after && before.to <= pos && after.from >= pos &&\n (closedBy = before.type.prop(NodeProp.closedBy)) && closedBy.indexOf(after.name) > -1 &&\n state.doc.lineAt(before.to).from == state.doc.lineAt(after.from).from &&\n !/\\S/.test(state.sliceDoc(before.to, after.from)))\n return { from: before.to, to: after.from };\n return null;\n}\n/**\nReplace the selection with a newline and indent the newly created\nline(s). If the current line consists only of whitespace, this\nwill also delete that whitespace. When the cursor is between\nmatching brackets, an additional newline will be inserted after\nthe cursor.\n*/\nconst insertNewlineAndIndent = /*@__PURE__*/newlineAndIndent(false);\n/**\nCreate a blank, indented line below the current line.\n*/\nconst insertBlankLine = /*@__PURE__*/newlineAndIndent(true);\nfunction newlineAndIndent(atEof) {\n return ({ state, dispatch }) => {\n if (state.readOnly)\n return false;\n let changes = state.changeByRange(range => {\n let { from, to } = range, line = state.doc.lineAt(from);\n let explode = !atEof && from == to && isBetweenBrackets(state, from);\n if (atEof)\n from = to = (to <= line.to ? line : state.doc.lineAt(to)).to;\n let cx = new IndentContext(state, { simulateBreak: from, simulateDoubleBreak: !!explode });\n let indent = getIndentation(cx, from);\n if (indent == null)\n indent = countColumn(/^\\s*/.exec(state.doc.lineAt(from).text)[0], state.tabSize);\n while (to < line.to && /\\s/.test(line.text[to - line.from]))\n to++;\n if (explode)\n ({ from, to } = explode);\n else if (from > line.from && from < line.from + 100 && !/\\S/.test(line.text.slice(0, from)))\n from = line.from;\n let insert = [\"\", indentString(state, indent)];\n if (explode)\n insert.push(indentString(state, cx.lineIndent(line.from, -1)));\n return { changes: { from, to, insert: Text.of(insert) },\n range: EditorSelection.cursor(from + 1 + insert[1].length) };\n });\n dispatch(state.update(changes, { scrollIntoView: true, userEvent: \"input\" }));\n return true;\n };\n}\nfunction changeBySelectedLine(state, f) {\n let atLine = -1;\n return state.changeByRange(range => {\n let changes = [];\n for (let pos = range.from; pos <= range.to;) {\n let line = state.doc.lineAt(pos);\n if (line.number > atLine && (range.empty || range.to > line.from)) {\n f(line, changes, range);\n atLine = line.number;\n }\n pos = line.to + 1;\n }\n let changeSet = state.changes(changes);\n return { changes,\n range: EditorSelection.range(changeSet.mapPos(range.anchor, 1), changeSet.mapPos(range.head, 1)) };\n });\n}\n/**\nAuto-indent the selected lines. This uses the [indentation service\nfacet](https://codemirror.net/6/docs/ref/#language.indentService) as source for auto-indent\ninformation.\n*/\nconst indentSelection = ({ state, dispatch }) => {\n if (state.readOnly)\n return false;\n let updated = Object.create(null);\n let context = new IndentContext(state, { overrideIndentation: start => {\n let found = updated[start];\n return found == null ? -1 : found;\n } });\n let changes = changeBySelectedLine(state, (line, changes, range) => {\n let indent = getIndentation(context, line.from);\n if (indent == null)\n return;\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 || range.from < line.from + cur.length) {\n updated[line.from] = indent;\n changes.push({ from: line.from, to: line.from + cur.length, insert: norm });\n }\n });\n if (!changes.changes.empty)\n dispatch(state.update(changes, { userEvent: \"indent\" }));\n return true;\n};\n/**\nAdd a [unit](https://codemirror.net/6/docs/ref/#language.indentUnit) of indentation to all selected\nlines.\n*/\nconst indentMore = ({ state, dispatch }) => {\n if (state.readOnly)\n return false;\n dispatch(state.update(changeBySelectedLine(state, (line, changes) => {\n changes.push({ from: line.from, insert: state.facet(indentUnit) });\n }), { userEvent: \"input.indent\" }));\n return true;\n};\n/**\nRemove a [unit](https://codemirror.net/6/docs/ref/#language.indentUnit) of indentation from all\nselected lines.\n*/\nconst indentLess = ({ state, dispatch }) => {\n if (state.readOnly)\n return false;\n dispatch(state.update(changeBySelectedLine(state, (line, changes) => {\n let space = /^\\s*/.exec(line.text)[0];\n if (!space)\n return;\n let col = countColumn(space, state.tabSize), keep = 0;\n let insert = indentString(state, Math.max(0, col - getIndentUnit(state)));\n while (keep < space.length && keep < insert.length && space.charCodeAt(keep) == insert.charCodeAt(keep))\n keep++;\n changes.push({ from: line.from + keep, to: line.from + space.length, insert: insert.slice(keep) });\n }), { userEvent: \"delete.dedent\" }));\n return true;\n};\n/**\nEnables or disables\n[tab-focus mode](https://codemirror.net/6/docs/ref/#view.EditorView.setTabFocusMode). While on, this\nprevents the editor's key bindings from capturing Tab or\nShift-Tab, making it possible for the user to move focus out of\nthe editor with the keyboard.\n*/\nconst toggleTabFocusMode = view => {\n view.setTabFocusMode();\n return true;\n};\n/**\nTemporarily enables [tab-focus\nmode](https://codemirror.net/6/docs/ref/#view.EditorView.setTabFocusMode) for two seconds or until\nanother key is pressed.\n*/\nconst temporarilySetTabFocusMode = view => {\n view.setTabFocusMode(2000);\n return true;\n};\n/**\nInsert a tab character at the cursor or, if something is selected,\nuse [`indentMore`](https://codemirror.net/6/docs/ref/#commands.indentMore) to indent the entire\nselection.\n*/\nconst insertTab = ({ state, dispatch }) => {\n if (state.selection.ranges.some(r => !r.empty))\n return indentMore({ state, dispatch });\n dispatch(state.update(state.replaceSelection(\"\\t\"), { scrollIntoView: true, userEvent: \"input\" }));\n return true;\n};\n/**\nArray of key bindings containing the Emacs-style bindings that are\navailable on macOS by default.\n\n - Ctrl-b: [`cursorCharLeft`](https://codemirror.net/6/docs/ref/#commands.cursorCharLeft) ([`selectCharLeft`](https://codemirror.net/6/docs/ref/#commands.selectCharLeft) with Shift)\n - Ctrl-f: [`cursorCharRight`](https://codemirror.net/6/docs/ref/#commands.cursorCharRight) ([`selectCharRight`](https://codemirror.net/6/docs/ref/#commands.selectCharRight) with Shift)\n - Ctrl-p: [`cursorLineUp`](https://codemirror.net/6/docs/ref/#commands.cursorLineUp) ([`selectLineUp`](https://codemirror.net/6/docs/ref/#commands.selectLineUp) with Shift)\n - Ctrl-n: [`cursorLineDown`](https://codemirror.net/6/docs/ref/#commands.cursorLineDown) ([`selectLineDown`](https://codemirror.net/6/docs/ref/#commands.selectLineDown) with Shift)\n - Ctrl-a: [`cursorLineStart`](https://codemirror.net/6/docs/ref/#commands.cursorLineStart) ([`selectLineStart`](https://codemirror.net/6/docs/ref/#commands.selectLineStart) with Shift)\n - Ctrl-e: [`cursorLineEnd`](https://codemirror.net/6/docs/ref/#commands.cursorLineEnd) ([`selectLineEnd`](https://codemirror.net/6/docs/ref/#commands.selectLineEnd) with Shift)\n - Ctrl-d: [`deleteCharForward`](https://codemirror.net/6/docs/ref/#commands.deleteCharForward)\n - Ctrl-h: [`deleteCharBackward`](https://codemirror.net/6/docs/ref/#commands.deleteCharBackward)\n - Ctrl-k: [`deleteToLineEnd`](https://codemirror.net/6/docs/ref/#commands.deleteToLineEnd)\n - Ctrl-Alt-h: [`deleteGroupBackward`](https://codemirror.net/6/docs/ref/#commands.deleteGroupBackward)\n - Ctrl-o: [`splitLine`](https://codemirror.net/6/docs/ref/#commands.splitLine)\n - Ctrl-t: [`transposeChars`](https://codemirror.net/6/docs/ref/#commands.transposeChars)\n - Ctrl-v: [`cursorPageDown`](https://codemirror.net/6/docs/ref/#commands.cursorPageDown)\n - Alt-v: [`cursorPageUp`](https://codemirror.net/6/docs/ref/#commands.cursorPageUp)\n*/\nconst emacsStyleKeymap = [\n { key: \"Ctrl-b\", run: cursorCharLeft, shift: selectCharLeft, preventDefault: true },\n { key: \"Ctrl-f\", run: cursorCharRight, shift: selectCharRight },\n { key: \"Ctrl-p\", run: cursorLineUp, shift: selectLineUp },\n { key: \"Ctrl-n\", run: cursorLineDown, shift: selectLineDown },\n { key: \"Ctrl-a\", run: cursorLineStart, shift: selectLineStart },\n { key: \"Ctrl-e\", run: cursorLineEnd, shift: selectLineEnd },\n { key: \"Ctrl-d\", run: deleteCharForward },\n { key: \"Ctrl-h\", run: deleteCharBackward },\n { key: \"Ctrl-k\", run: deleteToLineEnd },\n { key: \"Ctrl-Alt-h\", run: deleteGroupBackward },\n { key: \"Ctrl-o\", run: splitLine },\n { key: \"Ctrl-t\", run: transposeChars },\n { key: \"Ctrl-v\", run: cursorPageDown },\n];\n/**\nAn array of key bindings closely sticking to platform-standard or\nwidely used bindings. (This includes the bindings from\n[`emacsStyleKeymap`](https://codemirror.net/6/docs/ref/#commands.emacsStyleKeymap), with their `key`\nproperty changed to `mac`.)\n\n - ArrowLeft: [`cursorCharLeft`](https://codemirror.net/6/docs/ref/#commands.cursorCharLeft) ([`selectCharLeft`](https://codemirror.net/6/docs/ref/#commands.selectCharLeft) with Shift)\n - ArrowRight: [`cursorCharRight`](https://codemirror.net/6/docs/ref/#commands.cursorCharRight) ([`selectCharRight`](https://codemirror.net/6/docs/ref/#commands.selectCharRight) with Shift)\n - Ctrl-ArrowLeft (Alt-ArrowLeft on macOS): [`cursorGroupLeft`](https://codemirror.net/6/docs/ref/#commands.cursorGroupLeft) ([`selectGroupLeft`](https://codemirror.net/6/docs/ref/#commands.selectGroupLeft) with Shift)\n - Ctrl-ArrowRight (Alt-ArrowRight on macOS): [`cursorGroupRight`](https://codemirror.net/6/docs/ref/#commands.cursorGroupRight) ([`selectGroupRight`](https://codemirror.net/6/docs/ref/#commands.selectGroupRight) with Shift)\n - Cmd-ArrowLeft (on macOS): [`cursorLineStart`](https://codemirror.net/6/docs/ref/#commands.cursorLineStart) ([`selectLineStart`](https://codemirror.net/6/docs/ref/#commands.selectLineStart) with Shift)\n - Cmd-ArrowRight (on macOS): [`cursorLineEnd`](https://codemirror.net/6/docs/ref/#commands.cursorLineEnd) ([`selectLineEnd`](https://codemirror.net/6/docs/ref/#commands.selectLineEnd) with Shift)\n - ArrowUp: [`cursorLineUp`](https://codemirror.net/6/docs/ref/#commands.cursorLineUp) ([`selectLineUp`](https://codemirror.net/6/docs/ref/#commands.selectLineUp) with Shift)\n - ArrowDown: [`cursorLineDown`](https://codemirror.net/6/docs/ref/#commands.cursorLineDown) ([`selectLineDown`](https://codemirror.net/6/docs/ref/#commands.selectLineDown) with Shift)\n - Cmd-ArrowUp (on macOS): [`cursorDocStart`](https://codemirror.net/6/docs/ref/#commands.cursorDocStart) ([`selectDocStart`](https://codemirror.net/6/docs/ref/#commands.selectDocStart) with Shift)\n - Cmd-ArrowDown (on macOS): [`cursorDocEnd`](https://codemirror.net/6/docs/ref/#commands.cursorDocEnd) ([`selectDocEnd`](https://codemirror.net/6/docs/ref/#commands.selectDocEnd) with Shift)\n - Ctrl-ArrowUp (on macOS): [`cursorPageUp`](https://codemirror.net/6/docs/ref/#commands.cursorPageUp) ([`selectPageUp`](https://codemirror.net/6/docs/ref/#commands.selectPageUp) with Shift)\n - Ctrl-ArrowDown (on macOS): [`cursorPageDown`](https://codemirror.net/6/docs/ref/#commands.cursorPageDown) ([`selectPageDown`](https://codemirror.net/6/docs/ref/#commands.selectPageDown) with Shift)\n - PageUp: [`cursorPageUp`](https://codemirror.net/6/docs/ref/#commands.cursorPageUp) ([`selectPageUp`](https://codemirror.net/6/docs/ref/#commands.selectPageUp) with Shift)\n - PageDown: [`cursorPageDown`](https://codemirror.net/6/docs/ref/#commands.cursorPageDown) ([`selectPageDown`](https://codemirror.net/6/docs/ref/#commands.selectPageDown) with Shift)\n - Home: [`cursorLineBoundaryBackward`](https://codemirror.net/6/docs/ref/#commands.cursorLineBoundaryBackward) ([`selectLineBoundaryBackward`](https://codemirror.net/6/docs/ref/#commands.selectLineBoundaryBackward) with Shift)\n - End: [`cursorLineBoundaryForward`](https://codemirror.net/6/docs/ref/#commands.cursorLineBoundaryForward) ([`selectLineBoundaryForward`](https://codemirror.net/6/docs/ref/#commands.selectLineBoundaryForward) with Shift)\n - Ctrl-Home (Cmd-Home on macOS): [`cursorDocStart`](https://codemirror.net/6/docs/ref/#commands.cursorDocStart) ([`selectDocStart`](https://codemirror.net/6/docs/ref/#commands.selectDocStart) with Shift)\n - Ctrl-End (Cmd-Home on macOS): [`cursorDocEnd`](https://codemirror.net/6/docs/ref/#commands.cursorDocEnd) ([`selectDocEnd`](https://codemirror.net/6/docs/ref/#commands.selectDocEnd) with Shift)\n - Enter and Shift-Enter: [`insertNewlineAndIndent`](https://codemirror.net/6/docs/ref/#commands.insertNewlineAndIndent)\n - Ctrl-a (Cmd-a on macOS): [`selectAll`](https://codemirror.net/6/docs/ref/#commands.selectAll)\n - Backspace: [`deleteCharBackward`](https://codemirror.net/6/docs/ref/#commands.deleteCharBackward)\n - Delete: [`deleteCharForward`](https://codemirror.net/6/docs/ref/#commands.deleteCharForward)\n - Ctrl-Backspace (Alt-Backspace on macOS): [`deleteGroupBackward`](https://codemirror.net/6/docs/ref/#commands.deleteGroupBackward)\n - Ctrl-Delete (Alt-Delete on macOS): [`deleteGroupForward`](https://codemirror.net/6/docs/ref/#commands.deleteGroupForward)\n - Cmd-Backspace (macOS): [`deleteLineBoundaryBackward`](https://codemirror.net/6/docs/ref/#commands.deleteLineBoundaryBackward).\n - Cmd-Delete (macOS): [`deleteLineBoundaryForward`](https://codemirror.net/6/docs/ref/#commands.deleteLineBoundaryForward).\n*/\nconst standardKeymap = /*@__PURE__*/[\n { key: \"ArrowLeft\", run: cursorCharLeft, shift: selectCharLeft, preventDefault: true },\n { key: \"Mod-ArrowLeft\", mac: \"Alt-ArrowLeft\", run: cursorGroupLeft, shift: selectGroupLeft, preventDefault: true },\n { mac: \"Cmd-ArrowLeft\", run: cursorLineBoundaryLeft, shift: selectLineBoundaryLeft, preventDefault: true },\n { key: \"ArrowRight\", run: cursorCharRight, shift: selectCharRight, preventDefault: true },\n { key: \"Mod-ArrowRight\", mac: \"Alt-ArrowRight\", run: cursorGroupRight, shift: selectGroupRight, preventDefault: true },\n { mac: \"Cmd-ArrowRight\", run: cursorLineBoundaryRight, shift: selectLineBoundaryRight, preventDefault: true },\n { key: \"ArrowUp\", run: cursorLineUp, shift: selectLineUp, preventDefault: true },\n { mac: \"Cmd-ArrowUp\", run: cursorDocStart, shift: selectDocStart },\n { mac: \"Ctrl-ArrowUp\", run: cursorPageUp, shift: selectPageUp },\n { key: \"ArrowDown\", run: cursorLineDown, shift: selectLineDown, preventDefault: true },\n { mac: \"Cmd-ArrowDown\", run: cursorDocEnd, shift: selectDocEnd },\n { mac: \"Ctrl-ArrowDown\", run: cursorPageDown, shift: selectPageDown },\n { key: \"PageUp\", run: cursorPageUp, shift: selectPageUp },\n { key: \"PageDown\", run: cursorPageDown, shift: selectPageDown },\n { key: \"Home\", run: cursorLineBoundaryBackward, shift: selectLineBoundaryBackward, preventDefault: true },\n { key: \"Mod-Home\", run: cursorDocStart, shift: selectDocStart },\n { key: \"End\", run: cursorLineBoundaryForward, shift: selectLineBoundaryForward, preventDefault: true },\n { key: \"Mod-End\", run: cursorDocEnd, shift: selectDocEnd },\n { key: \"Enter\", run: insertNewlineAndIndent, shift: insertNewlineAndIndent },\n { key: \"Mod-a\", run: selectAll },\n { key: \"Backspace\", run: deleteCharBackward, shift: deleteCharBackward, preventDefault: true },\n { key: \"Delete\", run: deleteCharForward, preventDefault: true },\n { key: \"Mod-Backspace\", mac: \"Alt-Backspace\", run: deleteGroupBackward, preventDefault: true },\n { key: \"Mod-Delete\", mac: \"Alt-Delete\", run: deleteGroupForward, preventDefault: true },\n { mac: \"Mod-Backspace\", run: deleteLineBoundaryBackward, preventDefault: true },\n { mac: \"Mod-Delete\", run: deleteLineBoundaryForward, preventDefault: true }\n].concat(/*@__PURE__*/emacsStyleKeymap.map(b => ({ mac: b.key, run: b.run, shift: b.shift })));\n/**\nThe default keymap. Includes all bindings from\n[`standardKeymap`](https://codemirror.net/6/docs/ref/#commands.standardKeymap) plus the following:\n\n- Alt-ArrowLeft (Ctrl-ArrowLeft on macOS): [`cursorSyntaxLeft`](https://codemirror.net/6/docs/ref/#commands.cursorSyntaxLeft) ([`selectSyntaxLeft`](https://codemirror.net/6/docs/ref/#commands.selectSyntaxLeft) with Shift)\n- Alt-ArrowRight (Ctrl-ArrowRight on macOS): [`cursorSyntaxRight`](https://codemirror.net/6/docs/ref/#commands.cursorSyntaxRight) ([`selectSyntaxRight`](https://codemirror.net/6/docs/ref/#commands.selectSyntaxRight) with Shift)\n- Alt-ArrowUp: [`moveLineUp`](https://codemirror.net/6/docs/ref/#commands.moveLineUp)\n- Alt-ArrowDown: [`moveLineDown`](https://codemirror.net/6/docs/ref/#commands.moveLineDown)\n- Shift-Alt-ArrowUp: [`copyLineUp`](https://codemirror.net/6/docs/ref/#commands.copyLineUp)\n- Shift-Alt-ArrowDown: [`copyLineDown`](https://codemirror.net/6/docs/ref/#commands.copyLineDown)\n- Ctrl-Alt-ArrowUp (Cmd-Alt-ArrowUp on macOS): [`addCursorAbove`](https://codemirror.net/6/docs/ref/#commands.addCursorAbove).\n- Ctrl-Alt-ArrowDown (Cmd-Alt-ArrowDown on macOS): [`addCursorBelow`](https://codemirror.net/6/docs/ref/#commands.addCursorBelow).\n- Escape: [`simplifySelection`](https://codemirror.net/6/docs/ref/#commands.simplifySelection)\n- Ctrl-Enter (Cmd-Enter on macOS): [`insertBlankLine`](https://codemirror.net/6/docs/ref/#commands.insertBlankLine)\n- Alt-l (Ctrl-l on macOS): [`selectLine`](https://codemirror.net/6/docs/ref/#commands.selectLine)\n- Ctrl-i (Cmd-i on macOS): [`selectParentSyntax`](https://codemirror.net/6/docs/ref/#commands.selectParentSyntax)\n- Ctrl-[ (Cmd-[ on macOS): [`indentLess`](https://codemirror.net/6/docs/ref/#commands.indentLess)\n- Ctrl-] (Cmd-] on macOS): [`indentMore`](https://codemirror.net/6/docs/ref/#commands.indentMore)\n- Ctrl-Alt-\\\\ (Cmd-Alt-\\\\ on macOS): [`indentSelection`](https://codemirror.net/6/docs/ref/#commands.indentSelection)\n- Shift-Ctrl-k (Shift-Cmd-k on macOS): [`deleteLine`](https://codemirror.net/6/docs/ref/#commands.deleteLine)\n- Shift-Ctrl-\\\\ (Shift-Cmd-\\\\ on macOS): [`cursorMatchingBracket`](https://codemirror.net/6/docs/ref/#commands.cursorMatchingBracket)\n- Ctrl-/ (Cmd-/ on macOS): [`toggleComment`](https://codemirror.net/6/docs/ref/#commands.toggleComment).\n- Shift-Alt-a: [`toggleBlockComment`](https://codemirror.net/6/docs/ref/#commands.toggleBlockComment).\n- Ctrl-m (Alt-Shift-m on macOS): [`toggleTabFocusMode`](https://codemirror.net/6/docs/ref/#commands.toggleTabFocusMode).\n*/\nconst defaultKeymap = /*@__PURE__*/[\n { key: \"Alt-ArrowLeft\", mac: \"Ctrl-ArrowLeft\", run: cursorSyntaxLeft, shift: selectSyntaxLeft },\n { key: \"Alt-ArrowRight\", mac: \"Ctrl-ArrowRight\", run: cursorSyntaxRight, shift: selectSyntaxRight },\n { key: \"Alt-ArrowUp\", run: moveLineUp },\n { key: \"Shift-Alt-ArrowUp\", run: copyLineUp },\n { key: \"Alt-ArrowDown\", run: moveLineDown },\n { key: \"Shift-Alt-ArrowDown\", run: copyLineDown },\n { key: \"Mod-Alt-ArrowUp\", run: addCursorAbove },\n { key: \"Mod-Alt-ArrowDown\", run: addCursorBelow },\n { key: \"Escape\", run: simplifySelection },\n { key: \"Mod-Enter\", run: insertBlankLine },\n { key: \"Alt-l\", mac: \"Ctrl-l\", run: selectLine },\n { key: \"Mod-i\", run: selectParentSyntax, preventDefault: true },\n { key: \"Mod-[\", run: indentLess },\n { key: \"Mod-]\", run: indentMore },\n { key: \"Mod-Alt-\\\\\", run: indentSelection },\n { key: \"Shift-Mod-k\", run: deleteLine },\n { key: \"Shift-Mod-\\\\\", run: cursorMatchingBracket },\n { key: \"Mod-/\", run: toggleComment },\n { key: \"Alt-A\", run: toggleBlockComment },\n { key: \"Ctrl-m\", mac: \"Shift-Alt-m\", run: toggleTabFocusMode },\n].concat(standardKeymap);\n/**\nA binding that binds Tab to [`indentMore`](https://codemirror.net/6/docs/ref/#commands.indentMore) and\nShift-Tab to [`indentLess`](https://codemirror.net/6/docs/ref/#commands.indentLess).\nPlease see the [Tab example](../../examples/tab/) before using\nthis.\n*/\nconst indentWithTab = { key: \"Tab\", run: indentMore, shift: indentLess };\n\nexport { addCursorAbove, addCursorBelow, blockComment, blockUncomment, copyLineDown, copyLineUp, cursorCharBackward, cursorCharBackwardLogical, cursorCharForward, cursorCharForwardLogical, cursorCharLeft, cursorCharRight, cursorDocEnd, cursorDocStart, cursorGroupBackward, cursorGroupForward, cursorGroupForwardWin, cursorGroupLeft, cursorGroupRight, cursorLineBoundaryBackward, cursorLineBoundaryForward, cursorLineBoundaryLeft, cursorLineBoundaryRight, cursorLineDown, cursorLineEnd, cursorLineStart, cursorLineUp, cursorMatchingBracket, cursorPageDown, cursorPageUp, cursorSubwordBackward, cursorSubwordForward, cursorSyntaxLeft, cursorSyntaxRight, defaultKeymap, deleteCharBackward, deleteCharBackwardStrict, deleteCharForward, deleteGroupBackward, deleteGroupForward, deleteGroupForwardWin, deleteLine, deleteLineBoundaryBackward, deleteLineBoundaryForward, deleteToLineEnd, deleteToLineStart, deleteTrailingWhitespace, emacsStyleKeymap, history, historyField, historyKeymap, indentLess, indentMore, indentSelection, indentWithTab, insertBlankLine, insertNewline, insertNewlineAndIndent, insertNewlineKeepIndent, insertTab, invertedEffects, isolateHistory, lineComment, lineUncomment, moveLineDown, moveLineUp, redo, redoDepth, redoSelection, selectAll, selectCharBackward, selectCharBackwardLogical, selectCharForward, selectCharForwardLogical, selectCharLeft, selectCharRight, selectDocEnd, selectDocStart, selectGroupBackward, selectGroupForward, selectGroupForwardWin, selectGroupLeft, selectGroupRight, selectLine, selectLineBoundaryBackward, selectLineBoundaryForward, selectLineBoundaryLeft, selectLineBoundaryRight, selectLineDown, selectLineEnd, selectLineStart, selectLineUp, selectMatchingBracket, selectPageDown, selectPageUp, selectParentSyntax, selectSubwordBackward, selectSubwordForward, selectSyntaxLeft, selectSyntaxRight, simplifySelection, splitLine, standardKeymap, temporarilySetTabFocusMode, toggleBlockComment, toggleBlockCommentByLine, toggleComment, toggleLineComment, toggleTabFocusMode, transposeChars, undo, undoDepth, undoSelection };\n","import { lineNumbers, highlightActiveLineGutter, highlightSpecialChars, drawSelection, dropCursor, rectangularSelection, crosshairCursor, highlightActiveLine, keymap } from '@codemirror/view';\nexport { EditorView } from '@codemirror/view';\nimport { EditorState } from '@codemirror/state';\nimport { foldGutter, indentOnInput, syntaxHighlighting, defaultHighlightStyle, bracketMatching, foldKeymap } from '@codemirror/language';\nimport { history, defaultKeymap, historyKeymap } from '@codemirror/commands';\nimport { highlightSelectionMatches, searchKeymap } from '@codemirror/search';\nimport { closeBrackets, autocompletion, closeBracketsKeymap, completionKeymap } from '@codemirror/autocomplete';\nimport { lintKeymap } from '@codemirror/lint';\n\n// (The superfluous function calls around the list of extensions work\n// around current limitations in tree-shaking software.)\n/**\nThis is an extension value that just pulls together a number of\nextensions that you might want in a basic editor. It is meant as a\nconvenient helper to quickly set up CodeMirror without installing\nand importing a lot of separate packages.\n\nSpecifically, it includes...\n\n - [the default command bindings](https://codemirror.net/6/docs/ref/#commands.defaultKeymap)\n - [line numbers](https://codemirror.net/6/docs/ref/#view.lineNumbers)\n - [special character highlighting](https://codemirror.net/6/docs/ref/#view.highlightSpecialChars)\n - [the undo history](https://codemirror.net/6/docs/ref/#commands.history)\n - [a fold gutter](https://codemirror.net/6/docs/ref/#language.foldGutter)\n - [custom selection drawing](https://codemirror.net/6/docs/ref/#view.drawSelection)\n - [drop cursor](https://codemirror.net/6/docs/ref/#view.dropCursor)\n - [multiple selections](https://codemirror.net/6/docs/ref/#state.EditorState^allowMultipleSelections)\n - [reindentation on input](https://codemirror.net/6/docs/ref/#language.indentOnInput)\n - [the default highlight style](https://codemirror.net/6/docs/ref/#language.defaultHighlightStyle) (as fallback)\n - [bracket matching](https://codemirror.net/6/docs/ref/#language.bracketMatching)\n - [bracket closing](https://codemirror.net/6/docs/ref/#autocomplete.closeBrackets)\n - [autocompletion](https://codemirror.net/6/docs/ref/#autocomplete.autocompletion)\n - [rectangular selection](https://codemirror.net/6/docs/ref/#view.rectangularSelection) and [crosshair cursor](https://codemirror.net/6/docs/ref/#view.crosshairCursor)\n - [active line highlighting](https://codemirror.net/6/docs/ref/#view.highlightActiveLine)\n - [active line gutter highlighting](https://codemirror.net/6/docs/ref/#view.highlightActiveLineGutter)\n - [selection match highlighting](https://codemirror.net/6/docs/ref/#search.highlightSelectionMatches)\n - [search](https://codemirror.net/6/docs/ref/#search.searchKeymap)\n - [linting](https://codemirror.net/6/docs/ref/#lint.lintKeymap)\n\n(You'll probably want to add some language package to your setup\ntoo.)\n\nThis extension does not allow customization. The idea is that,\nonce you decide you want to configure your editor more precisely,\nyou take this package's source (which is just a bunch of imports\nand an array literal), copy it into your own code, and adjust it\nas desired.\n*/\nconst basicSetup = /*@__PURE__*/(() => [\n lineNumbers(),\n highlightActiveLineGutter(),\n highlightSpecialChars(),\n history(),\n foldGutter(),\n drawSelection(),\n dropCursor(),\n EditorState.allowMultipleSelections.of(true),\n indentOnInput(),\n syntaxHighlighting(defaultHighlightStyle, { fallback: true }),\n bracketMatching(),\n closeBrackets(),\n autocompletion(),\n rectangularSelection(),\n crosshairCursor(),\n highlightActiveLine(),\n highlightSelectionMatches(),\n keymap.of([\n ...closeBracketsKeymap,\n ...defaultKeymap,\n ...searchKeymap,\n ...historyKeymap,\n ...foldKeymap,\n ...completionKeymap,\n ...lintKeymap\n ])\n])();\n/**\nA minimal set of extensions to create a functional editor. Only\nincludes [the default keymap](https://codemirror.net/6/docs/ref/#commands.defaultKeymap), [undo\nhistory](https://codemirror.net/6/docs/ref/#commands.history), [special character\nhighlighting](https://codemirror.net/6/docs/ref/#view.highlightSpecialChars), [custom selection\ndrawing](https://codemirror.net/6/docs/ref/#view.drawSelection), and [default highlight\nstyle](https://codemirror.net/6/docs/ref/#language.defaultHighlightStyle).\n*/\nconst minimalSetup = /*@__PURE__*/(() => [\n highlightSpecialChars(),\n history(),\n drawSelection(),\n syntaxHighlighting(defaultHighlightStyle, { fallback: true }),\n keymap.of([\n ...defaultKeymap,\n ...historyKeymap,\n ])\n])();\n\nexport { basicSetup, minimalSetup };\n"],"names":["CompletionContext","t","e","Math","Object","RegExp","Option","c","WeakMap","Array","FuzzyMatcher","s","i","StrictMatcher","o","CompletionTooltip","document","n","CompletionDialog","Date","CompletionState","ActiveSource","ActiveResult","l","RunningQuery","clearTimeout","setTimeout","Promise","navigator","FieldPos","FieldRange","Snippet","ActiveSnippet","HistoryState","HistEvent","Intl","window","r"],"mappings":"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"}
|