@inkandswitch/patchwork-pkg-base 0.0.131 → 0.0.132
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/module-settings-url +1 -1
- package/package.json +1 -1
- package/packages/account/dist/index.css +19 -0
- package/packages/account/dist/index.css.map +2 -2
- package/packages/add-doc-to-sidebar-button/button.js +6 -0
- package/packages/add-doc-to-sidebar-button/styles.css +8 -1
- package/packages/chat/dist/index.js +1 -1
- package/packages/codemirror-base/dist/tool.js +75 -59
- package/packages/codemirror-base/dist/tool.js.map +2 -2
- package/packages/codemirror-markdown/dist/extensions/markdown.js +25 -0
- package/packages/codemirror-markdown/dist/extensions/markdown.js.map +2 -2
- package/packages/comments-view/dist/assets/{main-DXYeEDFB.js → main-EQKeEvzx.js} +50 -3
- package/packages/comments-view/dist/assets/main-EQKeEvzx.js.map +1 -0
- package/packages/comments-view/dist/index.js +3 -3
- package/packages/doc-openwith/doc-openwith.js +15 -1
- package/packages/doc-presence/doc-presence.js +66 -23
- package/packages/drafts/dist/assets/{main-CG9HOCai.js → main-wz7oton3.js} +134 -80
- package/packages/drafts/dist/assets/main-wz7oton3.js.map +1 -0
- package/packages/drafts/dist/index.js +3 -3
- package/packages/file/dist/index.js +1 -1
- package/packages/file/dist/{tool-Bucjz6Ay.js → tool-CSiyzu4S.js} +51 -41
- package/packages/file/dist/tool-CSiyzu4S.js.map +1 -0
- package/packages/file/dist/{typescript-language-server-BId-R8tz.js → typescript-language-server-T-bVgxs5.js} +2 -2
- package/packages/file/dist/{typescript-language-server-BId-R8tz.js.map → typescript-language-server-T-bVgxs5.js.map} +1 -1
- package/packages/packages/dist/index.js +6 -1
- package/packages/patternwitch/tool.js +30 -3
- package/packages/providers/dist/assets/FocusProvider-CsJzhQWV.js +2 -0
- package/packages/providers/dist/assets/FocusProvider-CsJzhQWV.js.map +1 -0
- package/packages/providers/dist/index.js +1 -1
- package/packages/theming/dist/{active-theme-WA6XMDTP.js → active-theme-HEMDARRS.js} +3 -3
- package/packages/theming/dist/{chunk-4GOF67HA.js → chunk-2LCY4PP2.js} +2 -2
- package/packages/theming/dist/{chunk-L7WQSSFT.js → chunk-MJMDS3V5.js} +2 -2
- package/packages/theming/dist/{lychee-BMLMUNP6.css → lychee-BADZHTMJ.css} +1 -1
- package/packages/theming/dist/main.js +4 -4
- package/packages/theming/dist/{theme-titlebar-LG6PFBKR.js → theme-titlebar-JLYY4TZR.js} +3 -3
- package/packages/theming/dist/{theme-tray-R3PJDYCL.js → theme-tray-OZPNTCHA.js} +3 -3
- package/packages/theming/dist/tool.js +2 -2
- package/packages/threepane/dist/IsolatedDocumentArea-PIXYOA25.js +2 -0
- package/packages/threepane/dist/PatchworkFrame-O76GWRUL.js +2 -0
- package/packages/threepane/dist/{PatchworkFrame-HMA5KZLY.js.map → PatchworkFrame-O76GWRUL.js.map} +3 -3
- package/packages/threepane/dist/{chunk-UOTRB26X.js → chunk-Y2SEQB3F.js} +24 -8
- package/packages/threepane/dist/{chunk-UOTRB26X.js.map → chunk-Y2SEQB3F.js.map} +3 -3
- package/packages/threepane/dist/index.js +1 -1
- package/plugin-registry-url +1 -1
- package/packages/comments-view/dist/assets/main-DXYeEDFB.js.map +0 -1
- package/packages/drafts/dist/assets/main-CG9HOCai.js.map +0 -1
- package/packages/file/dist/tool-Bucjz6Ay.js.map +0 -1
- package/packages/providers/dist/assets/FocusProvider-AfpGH4B_.js +0 -2
- package/packages/providers/dist/assets/FocusProvider-AfpGH4B_.js.map +0 -1
- package/packages/threepane/dist/IsolatedDocumentArea-JJMLEL4O.js +0 -2
- package/packages/threepane/dist/PatchworkFrame-HMA5KZLY.js +0 -2
- /package/packages/theming/dist/{active-theme-WA6XMDTP.js.map → active-theme-HEMDARRS.js.map} +0 -0
- /package/packages/theming/dist/{chunk-4GOF67HA.js.map → chunk-2LCY4PP2.js.map} +0 -0
- /package/packages/theming/dist/{chunk-L7WQSSFT.js.map → chunk-MJMDS3V5.js.map} +0 -0
- /package/packages/theming/dist/{theme-titlebar-LG6PFBKR.js.map → theme-titlebar-JLYY4TZR.js.map} +0 -0
- /package/packages/theming/dist/{theme-tray-R3PJDYCL.js.map → theme-tray-OZPNTCHA.js.map} +0 -0
- /package/packages/threepane/dist/{IsolatedDocumentArea-JJMLEL4O.js.map → IsolatedDocumentArea-PIXYOA25.js.map} +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/extensions/markdown.ts", "../../node_modules/.pnpm/@codemirror+language-data@6.5.2/node_modules/@codemirror/language-data/dist/index.js", "../../node_modules/.pnpm/@codemirror+search@6.6.0/node_modules/@codemirror/search/dist/index.js", "../../node_modules/.pnpm/crelt@1.0.6/node_modules/crelt/index.js", "../../src/extensions/formatting.ts", "../../src/extensions/tasks.ts", "../../src/extensions/margin.ts", "../../src/extensions/headings.ts", "../../src/extensions/lists.ts", "../../src/extensions/prefix.ts", "../../src/extensions/vertical.ts", "../../src/extensions/zoom.ts", "../../src/themes/markdown.ts"],
|
|
4
|
-
"sourcesContent": ["/** CodeMirror Extensions */\nimport { completionKeymap } from \"@codemirror/autocomplete\";\nimport { defaultKeymap, indentWithTab } from \"@codemirror/commands\";\nimport { markdown, markdownLanguage } from \"@codemirror/lang-markdown\";\nimport { foldKeymap, indentOnInput, indentUnit } from \"@codemirror/language\";\nimport { styleTags, tags } from \"@lezer/highlight\";\nimport { languages } from \"@codemirror/language-data\";\nimport { searchKeymap } from \"@codemirror/search\";\nimport { EditorView, keymap } from \"@codemirror/view\";\n\nimport { markdownFormattingKeymap } from \"./formatting.ts\";\nimport { taskCheckboxes } from \"./tasks.ts\";\nimport { margin } from \"./margin.ts\";\nimport { headings } from \"./headings.ts\";\nimport { lists } from \"./lists.ts\";\nimport { prefixes } from \"./prefix.ts\";\nimport { verticalMemory } from \"./vertical.ts\";\nimport { markdownZoom } from \"./zoom.ts\";\n\n/** Styles */\nimport { theme } from \"../themes/markdown.ts\";\n\n// Undo/redo (`history()`/`historyKeymap`) is deliberately absent: the base\n// editor (codemirror-base) owns it, so it can reset the stack when a scope\n// swap re-points the doc handle (see codemirror-base's history extension).\n// Adding a second `history()` here would keep the underlying singleton state\n// field alive across that reset and break it.\nexport function markdownExtensions() {\n return [\n ...theme(\"sans\"),\n indentOnInput(),\n markdownZoom,\n keymap.of([\n ...markdownFormattingKeymap,\n ...defaultKeymap,\n ...searchKeymap,\n ...foldKeymap,\n ...completionKeymap,\n indentWithTab,\n ]),\n EditorView.lineWrapping,\n // GFM base: task lists, tables, strikethrough, autolinks.\n markdown({\n base: markdownLanguage,\n codeLanguages: languages,\n extensions: [bareUrls],\n }),\n taskCheckboxes,\n margin,\n prefixes,\n verticalMemory,\n headings,\n lists,\n indentUnit.of(\" \"),\n ];\n}\n\n/**\n * A url pasted on its own is a link, not code. Only the url *inside* link\n * syntax \u2014 `[text](url)`, `<url>`, `[ref]: url`, `` \u2014 is markup,\n * so only that keeps `tags.url` (and the code font the theme gives it).\n * Path rules outrank the plain `URL` rule lezer-markdown ships with.\n */\nexport const bareUrls = {\n props: [\n styleTags({\n URL: tags.link,\n \"Link/URL Image/URL Autolink/URL LinkReference/URL\": tags.url,\n }),\n ],\n};\n", "import { LanguageDescription, LanguageSupport, StreamLanguage } from '@codemirror/language';\n\nfunction legacy(parser) {\n return new LanguageSupport(StreamLanguage.define(parser));\n}\nfunction sql(dialectName) {\n return import('@codemirror/lang-sql').then(m => m.sql({ dialect: m[dialectName] }));\n}\n/**\nAn array of language descriptions for known language packages.\n*/\nconst languages = [\n // New-style language modes\n /*@__PURE__*/LanguageDescription.of({\n name: \"C\",\n extensions: [\"c\", \"h\", \"ino\"],\n load() {\n return import('@codemirror/lang-cpp').then(m => m.cpp());\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"C++\",\n alias: [\"cpp\"],\n extensions: [\"cpp\", \"c++\", \"cc\", \"cxx\", \"hpp\", \"h++\", \"hh\", \"hxx\"],\n load() {\n return import('@codemirror/lang-cpp').then(m => m.cpp());\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"CQL\",\n alias: [\"cassandra\"],\n extensions: [\"cql\"],\n load() { return sql(\"Cassandra\"); }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"CSS\",\n extensions: [\"css\"],\n load() {\n return import('@codemirror/lang-css').then(m => m.css());\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Go\",\n extensions: [\"go\"],\n load() {\n return import('@codemirror/lang-go').then(m => m.go());\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"HTML\",\n alias: [\"xhtml\"],\n extensions: [\"html\", \"htm\", \"handlebars\", \"hbs\"],\n load() {\n return import('@codemirror/lang-html').then(m => m.html());\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Java\",\n extensions: [\"java\"],\n load() {\n return import('@codemirror/lang-java').then(m => m.java());\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"JavaScript\",\n alias: [\"ecmascript\", \"js\", \"node\"],\n extensions: [\"js\", \"mjs\", \"cjs\"],\n load() {\n return import('@codemirror/lang-javascript').then(m => m.javascript());\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Jinja\",\n extensions: [\"j2\", \"jinja\", \"jinja2\"],\n load() {\n return import('@codemirror/lang-jinja').then(m => m.jinja());\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"JSON\",\n alias: [\"json5\"],\n extensions: [\"json\", \"map\"],\n load() {\n return import('@codemirror/lang-json').then(m => m.json());\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"JSX\",\n extensions: [\"jsx\"],\n load() {\n return import('@codemirror/lang-javascript').then(m => m.javascript({ jsx: true }));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"LESS\",\n extensions: [\"less\"],\n load() {\n return import('@codemirror/lang-less').then(m => m.less());\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Liquid\",\n extensions: [\"liquid\"],\n load() {\n return import('@codemirror/lang-liquid').then(m => m.liquid());\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"MariaDB SQL\",\n load() { return sql(\"MariaSQL\"); }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Markdown\",\n extensions: [\"md\", \"markdown\", \"mkd\"],\n load() {\n return import('@codemirror/lang-markdown').then(m => m.markdown());\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"MS SQL\",\n load() { return sql(\"MSSQL\"); }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"MySQL\",\n load() { return sql(\"MySQL\"); }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"PHP\",\n extensions: [\"php\", \"php3\", \"php4\", \"php5\", \"php7\", \"phtml\"],\n load() {\n return import('@codemirror/lang-php').then(m => m.php());\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"PLSQL\",\n extensions: [\"pls\"],\n load() { return sql(\"PLSQL\"); }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"PostgreSQL\",\n load() { return sql(\"PostgreSQL\"); }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Python\",\n extensions: [\"BUILD\", \"bzl\", \"py\", \"pyw\"],\n filename: /^(BUCK|BUILD)$/,\n load() {\n return import('@codemirror/lang-python').then(m => m.python());\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Rust\",\n extensions: [\"rs\"],\n load() {\n return import('@codemirror/lang-rust').then(m => m.rust());\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Sass\",\n extensions: [\"sass\"],\n load() {\n return import('@codemirror/lang-sass').then(m => m.sass({ indented: true }));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"SCSS\",\n extensions: [\"scss\"],\n load() {\n return import('@codemirror/lang-sass').then(m => m.sass());\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"SQL\",\n extensions: [\"sql\"],\n load() { return sql(\"StandardSQL\"); }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"SQLite\",\n load() { return sql(\"SQLite\"); }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"TSX\",\n extensions: [\"tsx\"],\n load() {\n return import('@codemirror/lang-javascript').then(m => m.javascript({ jsx: true, typescript: true }));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"TypeScript\",\n alias: [\"ts\"],\n extensions: [\"ts\", \"mts\", \"cts\"],\n load() {\n return import('@codemirror/lang-javascript').then(m => m.javascript({ typescript: true }));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"WebAssembly\",\n extensions: [\"wat\", \"wast\"],\n load() {\n return import('@codemirror/lang-wast').then(m => m.wast());\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"XML\",\n alias: [\"rss\", \"wsdl\", \"xsd\"],\n extensions: [\"xml\", \"xsl\", \"xsd\", \"svg\"],\n load() {\n return import('@codemirror/lang-xml').then(m => m.xml());\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"YAML\",\n alias: [\"yml\"],\n extensions: [\"yaml\", \"yml\"],\n load() {\n return import('@codemirror/lang-yaml').then(m => m.yaml());\n }\n }),\n // Legacy modes ported from CodeMirror 5\n /*@__PURE__*/LanguageDescription.of({\n name: \"APL\",\n extensions: [\"dyalog\", \"apl\"],\n load() {\n return import('@codemirror/legacy-modes/mode/apl').then(m => legacy(m.apl));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"PGP\",\n alias: [\"asciiarmor\"],\n extensions: [\"asc\", \"pgp\", \"sig\"],\n load() {\n return import('@codemirror/legacy-modes/mode/asciiarmor').then(m => legacy(m.asciiArmor));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"ASN.1\",\n extensions: [\"asn\", \"asn1\"],\n load() {\n return import('@codemirror/legacy-modes/mode/asn1').then(m => legacy(m.asn1({})));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Asterisk\",\n filename: /^extensions\\.conf$/i,\n load() {\n return import('@codemirror/legacy-modes/mode/asterisk').then(m => legacy(m.asterisk));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Brainfuck\",\n extensions: [\"b\", \"bf\"],\n load() {\n return import('@codemirror/legacy-modes/mode/brainfuck').then(m => legacy(m.brainfuck));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Cobol\",\n extensions: [\"cob\", \"cpy\"],\n load() {\n return import('@codemirror/legacy-modes/mode/cobol').then(m => legacy(m.cobol));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"C#\",\n alias: [\"csharp\", \"cs\"],\n extensions: [\"cs\"],\n load() {\n return import('@codemirror/legacy-modes/mode/clike').then(m => legacy(m.csharp));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Clojure\",\n extensions: [\"clj\", \"cljc\", \"cljx\"],\n load() {\n return import('@codemirror/legacy-modes/mode/clojure').then(m => legacy(m.clojure));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"ClojureScript\",\n extensions: [\"cljs\"],\n load() {\n return import('@codemirror/legacy-modes/mode/clojure').then(m => legacy(m.clojure));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Closure Stylesheets (GSS)\",\n extensions: [\"gss\"],\n load() {\n return import('@codemirror/legacy-modes/mode/css').then(m => legacy(m.gss));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"CMake\",\n extensions: [\"cmake\", \"cmake.in\"],\n filename: /^CMakeLists\\.txt$/,\n load() {\n return import('@codemirror/legacy-modes/mode/cmake').then(m => legacy(m.cmake));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"CoffeeScript\",\n alias: [\"coffee\", \"coffee-script\"],\n extensions: [\"coffee\"],\n load() {\n return import('@codemirror/legacy-modes/mode/coffeescript').then(m => legacy(m.coffeeScript));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Common Lisp\",\n alias: [\"lisp\"],\n extensions: [\"cl\", \"lisp\", \"el\"],\n load() {\n return import('@codemirror/legacy-modes/mode/commonlisp').then(m => legacy(m.commonLisp));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Cypher\",\n extensions: [\"cyp\", \"cypher\"],\n load() {\n return import('@codemirror/legacy-modes/mode/cypher').then(m => legacy(m.cypher));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Cython\",\n extensions: [\"pyx\", \"pxd\", \"pxi\"],\n load() {\n return import('@codemirror/legacy-modes/mode/python').then(m => legacy(m.cython));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Crystal\",\n extensions: [\"cr\"],\n load() {\n return import('@codemirror/legacy-modes/mode/crystal').then(m => legacy(m.crystal));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"D\",\n extensions: [\"d\"],\n load() {\n return import('@codemirror/legacy-modes/mode/d').then(m => legacy(m.d));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Dart\",\n extensions: [\"dart\"],\n load() {\n return import('@codemirror/legacy-modes/mode/clike').then(m => legacy(m.dart));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"diff\",\n extensions: [\"diff\", \"patch\"],\n load() {\n return import('@codemirror/legacy-modes/mode/diff').then(m => legacy(m.diff));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Dockerfile\",\n filename: /^Dockerfile$/,\n load() {\n return import('@codemirror/legacy-modes/mode/dockerfile').then(m => legacy(m.dockerFile));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"DTD\",\n extensions: [\"dtd\"],\n load() {\n return import('@codemirror/legacy-modes/mode/dtd').then(m => legacy(m.dtd));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Dylan\",\n extensions: [\"dylan\", \"dyl\", \"intr\"],\n load() {\n return import('@codemirror/legacy-modes/mode/dylan').then(m => legacy(m.dylan));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"EBNF\",\n load() {\n return import('@codemirror/legacy-modes/mode/ebnf').then(m => legacy(m.ebnf));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"ECL\",\n extensions: [\"ecl\"],\n load() {\n return import('@codemirror/legacy-modes/mode/ecl').then(m => legacy(m.ecl));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"edn\",\n extensions: [\"edn\"],\n load() {\n return import('@codemirror/legacy-modes/mode/clojure').then(m => legacy(m.clojure));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Eiffel\",\n extensions: [\"e\"],\n load() {\n return import('@codemirror/legacy-modes/mode/eiffel').then(m => legacy(m.eiffel));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Elm\",\n extensions: [\"elm\"],\n load() {\n return import('@codemirror/legacy-modes/mode/elm').then(m => legacy(m.elm));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Erlang\",\n extensions: [\"erl\"],\n load() {\n return import('@codemirror/legacy-modes/mode/erlang').then(m => legacy(m.erlang));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Esper\",\n load() {\n return import('@codemirror/legacy-modes/mode/sql').then(m => legacy(m.esper));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Factor\",\n extensions: [\"factor\"],\n load() {\n return import('@codemirror/legacy-modes/mode/factor').then(m => legacy(m.factor));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"FCL\",\n load() {\n return import('@codemirror/legacy-modes/mode/fcl').then(m => legacy(m.fcl));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Forth\",\n extensions: [\"forth\", \"fth\", \"4th\"],\n load() {\n return import('@codemirror/legacy-modes/mode/forth').then(m => legacy(m.forth));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Fortran\",\n extensions: [\"f\", \"for\", \"f77\", \"f90\", \"f95\"],\n load() {\n return import('@codemirror/legacy-modes/mode/fortran').then(m => legacy(m.fortran));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"F#\",\n alias: [\"fsharp\"],\n extensions: [\"fs\"],\n load() {\n return import('@codemirror/legacy-modes/mode/mllike').then(m => legacy(m.fSharp));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Gas\",\n extensions: [\"s\"],\n load() {\n return import('@codemirror/legacy-modes/mode/gas').then(m => legacy(m.gas));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Gherkin\",\n extensions: [\"feature\"],\n load() {\n return import('@codemirror/legacy-modes/mode/gherkin').then(m => legacy(m.gherkin));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Groovy\",\n extensions: [\"groovy\", \"gradle\"],\n filename: /^Jenkinsfile$/,\n load() {\n return import('@codemirror/legacy-modes/mode/groovy').then(m => legacy(m.groovy));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Haskell\",\n extensions: [\"hs\"],\n load() {\n return import('@codemirror/legacy-modes/mode/haskell').then(m => legacy(m.haskell));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Haxe\",\n extensions: [\"hx\"],\n load() {\n return import('@codemirror/legacy-modes/mode/haxe').then(m => legacy(m.haxe));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"HXML\",\n extensions: [\"hxml\"],\n load() {\n return import('@codemirror/legacy-modes/mode/haxe').then(m => legacy(m.hxml));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"HTTP\",\n load() {\n return import('@codemirror/legacy-modes/mode/http').then(m => legacy(m.http));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"IDL\",\n extensions: [\"pro\"],\n load() {\n return import('@codemirror/legacy-modes/mode/idl').then(m => legacy(m.idl));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"JSON-LD\",\n alias: [\"jsonld\"],\n extensions: [\"jsonld\"],\n load() {\n return import('@codemirror/legacy-modes/mode/javascript').then(m => legacy(m.jsonld));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Julia\",\n extensions: [\"jl\"],\n load() {\n return import('@codemirror/legacy-modes/mode/julia').then(m => legacy(m.julia));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Kotlin\",\n extensions: [\"kt\", \"kts\"],\n load() {\n return import('@codemirror/legacy-modes/mode/clike').then(m => legacy(m.kotlin));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"LiveScript\",\n alias: [\"ls\"],\n extensions: [\"ls\"],\n load() {\n return import('@codemirror/legacy-modes/mode/livescript').then(m => legacy(m.liveScript));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Lua\",\n extensions: [\"lua\"],\n load() {\n return import('@codemirror/legacy-modes/mode/lua').then(m => legacy(m.lua));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"mIRC\",\n extensions: [\"mrc\"],\n load() {\n return import('@codemirror/legacy-modes/mode/mirc').then(m => legacy(m.mirc));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Mathematica\",\n extensions: [\"m\", \"nb\", \"wl\", \"wls\"],\n load() {\n return import('@codemirror/legacy-modes/mode/mathematica').then(m => legacy(m.mathematica));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Modelica\",\n extensions: [\"mo\"],\n load() {\n return import('@codemirror/legacy-modes/mode/modelica').then(m => legacy(m.modelica));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"MUMPS\",\n extensions: [\"mps\"],\n load() {\n return import('@codemirror/legacy-modes/mode/mumps').then(m => legacy(m.mumps));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Mbox\",\n extensions: [\"mbox\"],\n load() {\n return import('@codemirror/legacy-modes/mode/mbox').then(m => legacy(m.mbox));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Nginx\",\n filename: /nginx.*\\.conf$/i,\n load() {\n return import('@codemirror/legacy-modes/mode/nginx').then(m => legacy(m.nginx));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"NSIS\",\n extensions: [\"nsh\", \"nsi\"],\n load() {\n return import('@codemirror/legacy-modes/mode/nsis').then(m => legacy(m.nsis));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"NTriples\",\n extensions: [\"nt\", \"nq\"],\n load() {\n return import('@codemirror/legacy-modes/mode/ntriples').then(m => legacy(m.ntriples));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Objective-C\",\n alias: [\"objective-c\", \"objc\"],\n extensions: [\"m\"],\n load() {\n return import('@codemirror/legacy-modes/mode/clike').then(m => legacy(m.objectiveC));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Objective-C++\",\n alias: [\"objective-c++\", \"objc++\"],\n extensions: [\"mm\"],\n load() {\n return import('@codemirror/legacy-modes/mode/clike').then(m => legacy(m.objectiveCpp));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"OCaml\",\n extensions: [\"ml\", \"mli\", \"mll\", \"mly\"],\n load() {\n return import('@codemirror/legacy-modes/mode/mllike').then(m => legacy(m.oCaml));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Octave\",\n extensions: [\"m\"],\n load() {\n return import('@codemirror/legacy-modes/mode/octave').then(m => legacy(m.octave));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Oz\",\n extensions: [\"oz\"],\n load() {\n return import('@codemirror/legacy-modes/mode/oz').then(m => legacy(m.oz));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Pascal\",\n extensions: [\"p\", \"pas\"],\n load() {\n return import('@codemirror/legacy-modes/mode/pascal').then(m => legacy(m.pascal));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Perl\",\n extensions: [\"pl\", \"pm\"],\n load() {\n return import('@codemirror/legacy-modes/mode/perl').then(m => legacy(m.perl));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Pig\",\n extensions: [\"pig\"],\n load() {\n return import('@codemirror/legacy-modes/mode/pig').then(m => legacy(m.pig));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"PowerShell\",\n extensions: [\"ps1\", \"psd1\", \"psm1\"],\n load() {\n return import('@codemirror/legacy-modes/mode/powershell').then(m => legacy(m.powerShell));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Properties files\",\n alias: [\"ini\", \"properties\"],\n extensions: [\"properties\", \"ini\", \"in\"],\n load() {\n return import('@codemirror/legacy-modes/mode/properties').then(m => legacy(m.properties));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"ProtoBuf\",\n extensions: [\"proto\"],\n load() {\n return import('@codemirror/legacy-modes/mode/protobuf').then(m => legacy(m.protobuf));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Pug\",\n alias: [\"jade\"],\n extensions: [\"pug\", \"jade\"],\n load() {\n return import('@codemirror/legacy-modes/mode/pug').then(m => legacy(m.pug));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Puppet\",\n extensions: [\"pp\"],\n load() {\n return import('@codemirror/legacy-modes/mode/puppet').then(m => legacy(m.puppet));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Q\",\n extensions: [\"q\"],\n load() {\n return import('@codemirror/legacy-modes/mode/q').then(m => legacy(m.q));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"R\",\n alias: [\"rscript\"],\n extensions: [\"r\", \"R\"],\n load() {\n return import('@codemirror/legacy-modes/mode/r').then(m => legacy(m.r));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"RPM Changes\",\n load() {\n return import('@codemirror/legacy-modes/mode/rpm').then(m => legacy(m.rpmChanges));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"RPM Spec\",\n extensions: [\"spec\"],\n load() {\n return import('@codemirror/legacy-modes/mode/rpm').then(m => legacy(m.rpmSpec));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Ruby\",\n alias: [\"jruby\", \"macruby\", \"rake\", \"rb\", \"rbx\"],\n extensions: [\"rb\"],\n filename: /^(Gemfile|Rakefile)$/,\n load() {\n return import('@codemirror/legacy-modes/mode/ruby').then(m => legacy(m.ruby));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"SAS\",\n extensions: [\"sas\"],\n load() {\n return import('@codemirror/legacy-modes/mode/sas').then(m => legacy(m.sas));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Scala\",\n extensions: [\"scala\"],\n load() {\n return import('@codemirror/legacy-modes/mode/clike').then(m => legacy(m.scala));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Scheme\",\n extensions: [\"scm\", \"ss\"],\n load() {\n return import('@codemirror/legacy-modes/mode/scheme').then(m => legacy(m.scheme));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Shell\",\n alias: [\"bash\", \"sh\", \"zsh\"],\n extensions: [\"sh\", \"ksh\", \"bash\"],\n filename: /^PKGBUILD$/,\n load() {\n return import('@codemirror/legacy-modes/mode/shell').then(m => legacy(m.shell));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Sieve\",\n extensions: [\"siv\", \"sieve\"],\n load() {\n return import('@codemirror/legacy-modes/mode/sieve').then(m => legacy(m.sieve));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Smalltalk\",\n extensions: [\"st\"],\n load() {\n return import('@codemirror/legacy-modes/mode/smalltalk').then(m => legacy(m.smalltalk));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Solr\",\n load() {\n return import('@codemirror/legacy-modes/mode/solr').then(m => legacy(m.solr));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"SML\",\n extensions: [\"sml\", \"sig\", \"fun\", \"smackspec\"],\n load() {\n return import('@codemirror/legacy-modes/mode/mllike').then(m => legacy(m.sml));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"SPARQL\",\n alias: [\"sparul\"],\n extensions: [\"rq\", \"sparql\"],\n load() {\n return import('@codemirror/legacy-modes/mode/sparql').then(m => legacy(m.sparql));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Spreadsheet\",\n alias: [\"excel\", \"formula\"],\n load() {\n return import('@codemirror/legacy-modes/mode/spreadsheet').then(m => legacy(m.spreadsheet));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Squirrel\",\n extensions: [\"nut\"],\n load() {\n return import('@codemirror/legacy-modes/mode/clike').then(m => legacy(m.squirrel));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Stylus\",\n extensions: [\"styl\"],\n load() {\n return import('@codemirror/legacy-modes/mode/stylus').then(m => legacy(m.stylus));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Swift\",\n extensions: [\"swift\"],\n load() {\n return import('@codemirror/legacy-modes/mode/swift').then(m => legacy(m.swift));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"sTeX\",\n load() {\n return import('@codemirror/legacy-modes/mode/stex').then(m => legacy(m.stex));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"LaTeX\",\n alias: [\"tex\"],\n extensions: [\"text\", \"ltx\", \"tex\"],\n load() {\n return import('@codemirror/legacy-modes/mode/stex').then(m => legacy(m.stex));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"SystemVerilog\",\n extensions: [\"v\", \"sv\", \"svh\"],\n load() {\n return import('@codemirror/legacy-modes/mode/verilog').then(m => legacy(m.verilog));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Tcl\",\n extensions: [\"tcl\"],\n load() {\n return import('@codemirror/legacy-modes/mode/tcl').then(m => legacy(m.tcl));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Textile\",\n extensions: [\"textile\"],\n load() {\n return import('@codemirror/legacy-modes/mode/textile').then(m => legacy(m.textile));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"TiddlyWiki\",\n load() {\n return import('@codemirror/legacy-modes/mode/tiddlywiki').then(m => legacy(m.tiddlyWiki));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Tiki wiki\",\n load() {\n return import('@codemirror/legacy-modes/mode/tiki').then(m => legacy(m.tiki));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"TOML\",\n extensions: [\"toml\"],\n load() {\n return import('@codemirror/legacy-modes/mode/toml').then(m => legacy(m.toml));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Troff\",\n extensions: [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\"],\n load() {\n return import('@codemirror/legacy-modes/mode/troff').then(m => legacy(m.troff));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"TTCN\",\n extensions: [\"ttcn\", \"ttcn3\", \"ttcnpp\"],\n load() {\n return import('@codemirror/legacy-modes/mode/ttcn').then(m => legacy(m.ttcn));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"TTCN_CFG\",\n extensions: [\"cfg\"],\n load() {\n return import('@codemirror/legacy-modes/mode/ttcn-cfg').then(m => legacy(m.ttcnCfg));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Turtle\",\n extensions: [\"ttl\"],\n load() {\n return import('@codemirror/legacy-modes/mode/turtle').then(m => legacy(m.turtle));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Web IDL\",\n extensions: [\"webidl\"],\n load() {\n return import('@codemirror/legacy-modes/mode/webidl').then(m => legacy(m.webIDL));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"VB.NET\",\n extensions: [\"vb\"],\n load() {\n return import('@codemirror/legacy-modes/mode/vb').then(m => legacy(m.vb));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"VBScript\",\n extensions: [\"vbs\"],\n load() {\n return import('@codemirror/legacy-modes/mode/vbscript').then(m => legacy(m.vbScript));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Velocity\",\n extensions: [\"vtl\"],\n load() {\n return import('@codemirror/legacy-modes/mode/velocity').then(m => legacy(m.velocity));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Verilog\",\n extensions: [\"v\"],\n load() {\n return import('@codemirror/legacy-modes/mode/verilog').then(m => legacy(m.verilog));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"VHDL\",\n extensions: [\"vhd\", \"vhdl\"],\n load() {\n return import('@codemirror/legacy-modes/mode/vhdl').then(m => legacy(m.vhdl));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"XQuery\",\n extensions: [\"xy\", \"xquery\", \"xq\", \"xqm\", \"xqy\"],\n load() {\n return import('@codemirror/legacy-modes/mode/xquery').then(m => legacy(m.xQuery));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Yacas\",\n extensions: [\"ys\"],\n load() {\n return import('@codemirror/legacy-modes/mode/yacas').then(m => legacy(m.yacas));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Z80\",\n extensions: [\"z80\"],\n load() {\n return import('@codemirror/legacy-modes/mode/z80').then(m => legacy(m.z80));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"MscGen\",\n extensions: [\"mscgen\", \"mscin\", \"msc\"],\n load() {\n return import('@codemirror/legacy-modes/mode/mscgen').then(m => legacy(m.mscgen));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"X\u00F9\",\n extensions: [\"xu\"],\n load() {\n return import('@codemirror/legacy-modes/mode/mscgen').then(m => legacy(m.xu));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"MsGenny\",\n extensions: [\"msgenny\"],\n load() {\n return import('@codemirror/legacy-modes/mode/mscgen').then(m => legacy(m.msgenny));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Vue\",\n extensions: [\"vue\"],\n load() {\n return import('@codemirror/lang-vue').then(m => m.vue());\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Angular Template\",\n load() {\n return import('@codemirror/lang-angular').then(m => m.angular());\n }\n })\n];\n\nexport { languages };\n", "import { showDialog, EditorView, Decoration, ViewPlugin, showPanel, runScopeHandlers, getPanel } from '@codemirror/view';\nimport { codePointAt, fromCodePoint, codePointSize, EditorSelection, Facet, combineConfig, CharCategory, StateEffect, StateField, RangeSetBuilder, Prec, EditorState, findClusterBreak } from '@codemirror/state';\nimport elt from 'crelt';\n\nconst basicNormalize = typeof String.prototype.normalize == \"function\"\n ? x => x.normalize(\"NFKD\") : x => x;\n/**\nA search cursor provides an iterator over text matches in a\ndocument.\n*/\nclass SearchCursor {\n /**\n Create a text cursor. The query is the search string, `from` to\n `to` provides the region to search.\n \n When `normalize` is given, it will be called, on both the query\n string and the content it is matched against, before comparing.\n You can, for example, create a case-insensitive search by\n passing `s => s.toLowerCase()`.\n \n Text is always normalized with\n [`.normalize(\"NFKD\")`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize)\n (when supported).\n */\n constructor(text, query, from = 0, to = text.length, normalize, test) {\n this.test = test;\n /**\n The current match (only holds a meaningful value after\n [`next`](https://codemirror.net/6/docs/ref/#search.SearchCursor.next) has been called and when\n `done` is false).\n */\n this.value = { from: 0, to: 0 };\n /**\n Whether the end of the iterated region has been reached.\n */\n this.done = false;\n this.matches = [];\n this.buffer = \"\";\n this.bufferPos = 0;\n this.iter = text.iterRange(from, to);\n this.bufferStart = from;\n this.normalize = normalize ? x => normalize(basicNormalize(x)) : basicNormalize;\n this.query = this.normalize(query);\n }\n peek() {\n if (this.bufferPos == this.buffer.length) {\n this.bufferStart += this.buffer.length;\n this.iter.next();\n if (this.iter.done)\n return -1;\n this.bufferPos = 0;\n this.buffer = this.iter.value;\n }\n return codePointAt(this.buffer, this.bufferPos);\n }\n /**\n Look for the next match. Updates the iterator's\n [`value`](https://codemirror.net/6/docs/ref/#search.SearchCursor.value) and\n [`done`](https://codemirror.net/6/docs/ref/#search.SearchCursor.done) properties. Should be called\n at least once before using the cursor.\n */\n next() {\n while (this.matches.length)\n this.matches.pop();\n return this.nextOverlapping();\n }\n /**\n The `next` method will ignore matches that partially overlap a\n previous match. This method behaves like `next`, but includes\n such matches.\n */\n nextOverlapping() {\n for (;;) {\n let next = this.peek();\n if (next < 0) {\n this.done = true;\n return this;\n }\n let str = fromCodePoint(next), start = this.bufferStart + this.bufferPos;\n this.bufferPos += codePointSize(next);\n let norm = this.normalize(str);\n if (norm.length)\n for (let i = 0, pos = start;; i++) {\n let code = norm.charCodeAt(i);\n let match = this.match(code, pos, this.bufferPos + this.bufferStart);\n if (i == norm.length - 1) {\n if (match) {\n this.value = match;\n return this;\n }\n break;\n }\n if (pos == start && i < str.length && str.charCodeAt(i) == code)\n pos++;\n }\n }\n }\n match(code, pos, end) {\n let match = null;\n for (let i = 0; i < this.matches.length; i += 2) {\n let index = this.matches[i], keep = false;\n if (this.query.charCodeAt(index) == code) {\n if (index == this.query.length - 1) {\n match = { from: this.matches[i + 1], to: end };\n }\n else {\n this.matches[i]++;\n keep = true;\n }\n }\n if (!keep) {\n this.matches.splice(i, 2);\n i -= 2;\n }\n }\n if (this.query.charCodeAt(0) == code) {\n if (this.query.length == 1)\n match = { from: pos, to: end };\n else\n this.matches.push(1, pos);\n }\n if (match && this.test && !this.test(match.from, match.to, this.buffer, this.bufferStart))\n match = null;\n return match;\n }\n}\nif (typeof Symbol != \"undefined\")\n SearchCursor.prototype[Symbol.iterator] = function () { return this; };\n\nconst empty = { from: -1, to: -1, match: /*@__PURE__*//.*/.exec(\"\") };\nconst baseFlags = \"gm\" + (/x/.unicode == null ? \"\" : \"u\");\n/**\nThis class is similar to [`SearchCursor`](https://codemirror.net/6/docs/ref/#search.SearchCursor)\nbut searches for a regular expression pattern instead of a plain\nstring.\n*/\nclass RegExpCursor {\n /**\n Create a cursor that will search the given range in the given\n document. `query` should be the raw pattern (as you'd pass it to\n `new RegExp`).\n */\n constructor(text, query, options, from = 0, to = text.length) {\n this.text = text;\n this.to = to;\n this.curLine = \"\";\n /**\n Set to `true` when the cursor has reached the end of the search\n range.\n */\n this.done = false;\n /**\n Will contain an object with the extent of the match and the\n match object when [`next`](https://codemirror.net/6/docs/ref/#search.RegExpCursor.next)\n sucessfully finds a match.\n */\n this.value = empty;\n if (/\\\\[sWDnr]|\\n|\\r|\\[\\^/.test(query))\n return new MultilineRegExpCursor(text, query, options, from, to);\n this.re = new RegExp(query, baseFlags + ((options === null || options === void 0 ? void 0 : options.ignoreCase) ? \"i\" : \"\"));\n this.test = options === null || options === void 0 ? void 0 : options.test;\n this.iter = text.iter();\n let startLine = text.lineAt(from);\n this.curLineStart = startLine.from;\n this.matchPos = toCharEnd(text, from);\n this.getLine(this.curLineStart);\n }\n getLine(skip) {\n this.iter.next(skip);\n if (this.iter.lineBreak) {\n this.curLine = \"\";\n }\n else {\n this.curLine = this.iter.value;\n if (this.curLineStart + this.curLine.length > this.to)\n this.curLine = this.curLine.slice(0, this.to - this.curLineStart);\n this.iter.next();\n }\n }\n nextLine() {\n this.curLineStart = this.curLineStart + this.curLine.length + 1;\n if (this.curLineStart > this.to)\n this.curLine = \"\";\n else\n this.getLine(0);\n }\n /**\n Move to the next match, if there is one.\n */\n next() {\n for (let off = this.matchPos - this.curLineStart;;) {\n this.re.lastIndex = off;\n let match = this.matchPos <= this.to && this.re.exec(this.curLine);\n if (match) {\n let from = this.curLineStart + match.index, to = from + match[0].length;\n this.matchPos = toCharEnd(this.text, to + (from == to ? 1 : 0));\n if (from == this.curLineStart + this.curLine.length)\n this.nextLine();\n if ((from < to || from > this.value.to) && (!this.test || this.test(from, to, match))) {\n this.value = { from, to, match };\n return this;\n }\n off = this.matchPos - this.curLineStart;\n }\n else if (this.curLineStart + this.curLine.length < this.to) {\n this.nextLine();\n off = 0;\n }\n else {\n this.done = true;\n return this;\n }\n }\n }\n}\nconst flattened = /*@__PURE__*/new WeakMap();\n// Reusable (partially) flattened document strings\nclass FlattenedDoc {\n constructor(from, text) {\n this.from = from;\n this.text = text;\n }\n get to() { return this.from + this.text.length; }\n static get(doc, from, to) {\n let cached = flattened.get(doc);\n if (!cached || cached.from >= to || cached.to <= from) {\n let flat = new FlattenedDoc(from, doc.sliceString(from, to));\n flattened.set(doc, flat);\n return flat;\n }\n if (cached.from == from && cached.to == to)\n return cached;\n let { text, from: cachedFrom } = cached;\n if (cachedFrom > from) {\n text = doc.sliceString(from, cachedFrom) + text;\n cachedFrom = from;\n }\n if (cached.to < to)\n text += doc.sliceString(cached.to, to);\n flattened.set(doc, new FlattenedDoc(cachedFrom, text));\n return new FlattenedDoc(from, text.slice(from - cachedFrom, to - cachedFrom));\n }\n}\nclass MultilineRegExpCursor {\n constructor(text, query, options, from, to) {\n this.text = text;\n this.to = to;\n this.done = false;\n this.value = empty;\n this.matchPos = toCharEnd(text, from);\n this.re = new RegExp(query, baseFlags + ((options === null || options === void 0 ? void 0 : options.ignoreCase) ? \"i\" : \"\"));\n this.test = options === null || options === void 0 ? void 0 : options.test;\n this.flat = FlattenedDoc.get(text, from, this.chunkEnd(from + 5000 /* Chunk.Base */));\n }\n chunkEnd(pos) {\n return pos >= this.to ? this.to : this.text.lineAt(pos).to;\n }\n next() {\n for (;;) {\n let off = this.re.lastIndex = this.matchPos - this.flat.from;\n let match = this.re.exec(this.flat.text);\n // Skip empty matches directly after the last match\n if (match && !match[0] && match.index == off) {\n this.re.lastIndex = off + 1;\n match = this.re.exec(this.flat.text);\n }\n if (match) {\n let from = this.flat.from + match.index, to = from + match[0].length;\n // If a match goes almost to the end of a noncomplete chunk, try\n // again, since it'll likely be able to match more\n if ((this.flat.to >= this.to || match.index + match[0].length <= this.flat.text.length - 10) &&\n (!this.test || this.test(from, to, match))) {\n this.value = { from, to, match };\n this.matchPos = toCharEnd(this.text, to + (from == to ? 1 : 0));\n return this;\n }\n }\n if (this.flat.to == this.to) {\n this.done = true;\n return this;\n }\n // Grow the flattened doc\n this.flat = FlattenedDoc.get(this.text, this.flat.from, this.chunkEnd(this.flat.from + this.flat.text.length * 2));\n }\n }\n}\nif (typeof Symbol != \"undefined\") {\n RegExpCursor.prototype[Symbol.iterator] = MultilineRegExpCursor.prototype[Symbol.iterator] =\n function () { return this; };\n}\nfunction validRegExp(source) {\n try {\n new RegExp(source, baseFlags);\n return true;\n }\n catch (_a) {\n return false;\n }\n}\nfunction toCharEnd(text, pos) {\n if (pos >= text.length)\n return pos;\n let line = text.lineAt(pos), next;\n while (pos < line.to && (next = line.text.charCodeAt(pos - line.from)) >= 0xDC00 && next < 0xE000)\n pos++;\n return pos;\n}\n\n/**\nCommand that shows a dialog asking the user for a line number, and\nwhen a valid position is provided, moves the cursor to that line.\n\nSupports line numbers, relative line offsets prefixed with `+` or\n`-`, document percentages suffixed with `%`, and an optional\ncolumn position by adding `:` and a second number after the line\nnumber.\n*/\nconst gotoLine = view => {\n let { state } = view;\n let line = String(state.doc.lineAt(view.state.selection.main.head).number);\n let { close, result } = showDialog(view, {\n label: state.phrase(\"Go to line\"),\n input: { type: \"text\", name: \"line\", value: line },\n focus: true,\n submitLabel: state.phrase(\"go\"),\n });\n result.then(form => {\n let match = form && /^([+-])?(\\d+)?(:\\d+)?(%)?$/.exec(form.elements[\"line\"].value);\n if (!match) {\n view.dispatch({ effects: close });\n return;\n }\n let startLine = state.doc.lineAt(state.selection.main.head);\n let [, sign, ln, cl, percent] = match;\n let col = cl ? +cl.slice(1) : 0;\n let line = ln ? +ln : startLine.number;\n if (ln && percent) {\n let pc = line / 100;\n if (sign)\n pc = pc * (sign == \"-\" ? -1 : 1) + (startLine.number / state.doc.lines);\n line = Math.round(state.doc.lines * pc);\n }\n else if (ln && sign) {\n line = line * (sign == \"-\" ? -1 : 1) + startLine.number;\n }\n let docLine = state.doc.line(Math.max(1, Math.min(state.doc.lines, line)));\n let selection = EditorSelection.cursor(docLine.from + Math.max(0, Math.min(col, docLine.length)));\n view.dispatch({\n effects: [close, EditorView.scrollIntoView(selection.from, { y: 'center' })],\n selection,\n });\n });\n return true;\n};\n\nconst defaultHighlightOptions = {\n highlightWordAroundCursor: false,\n minSelectionLength: 1,\n maxMatches: 100,\n wholeWords: false\n};\nconst highlightConfig = /*@__PURE__*/Facet.define({\n combine(options) {\n return combineConfig(options, defaultHighlightOptions, {\n highlightWordAroundCursor: (a, b) => a || b,\n minSelectionLength: Math.min,\n maxMatches: Math.min\n });\n }\n});\n/**\nThis extension highlights text that matches the selection. It uses\nthe `\"cm-selectionMatch\"` class for the highlighting. When\n`highlightWordAroundCursor` is enabled, the word at the cursor\nitself will be highlighted with `\"cm-selectionMatch-main\"`.\n*/\nfunction highlightSelectionMatches(options) {\n let ext = [defaultTheme, matchHighlighter];\n if (options)\n ext.push(highlightConfig.of(options));\n return ext;\n}\nconst matchDeco = /*@__PURE__*/Decoration.mark({ class: \"cm-selectionMatch\" });\nconst mainMatchDeco = /*@__PURE__*/Decoration.mark({ class: \"cm-selectionMatch cm-selectionMatch-main\" });\n// Whether the characters directly outside the given positions are non-word characters\nfunction insideWordBoundaries(check, state, from, to) {\n return (from == 0 || check(state.sliceDoc(from - 1, from)) != CharCategory.Word) &&\n (to == state.doc.length || check(state.sliceDoc(to, to + 1)) != CharCategory.Word);\n}\n// Whether the characters directly at the given positions are word characters\nfunction insideWord(check, state, from, to) {\n return check(state.sliceDoc(from, from + 1)) == CharCategory.Word\n && check(state.sliceDoc(to - 1, to)) == CharCategory.Word;\n}\nconst matchHighlighter = /*@__PURE__*/ViewPlugin.fromClass(class {\n constructor(view) {\n this.decorations = this.getDeco(view);\n }\n update(update) {\n if (update.selectionSet || update.docChanged || update.viewportChanged)\n this.decorations = this.getDeco(update.view);\n }\n getDeco(view) {\n let conf = view.state.facet(highlightConfig);\n let { state } = view, sel = state.selection;\n if (sel.ranges.length > 1)\n return Decoration.none;\n let range = sel.main, query, check = null;\n if (range.empty) {\n if (!conf.highlightWordAroundCursor)\n return Decoration.none;\n let word = state.wordAt(range.head);\n if (!word)\n return Decoration.none;\n check = state.charCategorizer(range.head);\n query = state.sliceDoc(word.from, word.to);\n }\n else {\n let len = range.to - range.from;\n if (len < conf.minSelectionLength || len > 200)\n return Decoration.none;\n if (conf.wholeWords) {\n query = state.sliceDoc(range.from, range.to); // TODO: allow and include leading/trailing space?\n check = state.charCategorizer(range.head);\n if (!(insideWordBoundaries(check, state, range.from, range.to) &&\n insideWord(check, state, range.from, range.to)))\n return Decoration.none;\n }\n else {\n query = state.sliceDoc(range.from, range.to);\n if (!query)\n return Decoration.none;\n }\n }\n let deco = [];\n for (let part of view.visibleRanges) {\n let cursor = new SearchCursor(state.doc, query, part.from, part.to);\n while (!cursor.next().done) {\n let { from, to } = cursor.value;\n if (!check || insideWordBoundaries(check, state, from, to)) {\n if (range.empty && from <= range.from && to >= range.to)\n deco.push(mainMatchDeco.range(from, to));\n else if (from >= range.to || to <= range.from)\n deco.push(matchDeco.range(from, to));\n if (deco.length > conf.maxMatches)\n return Decoration.none;\n }\n }\n }\n return Decoration.set(deco);\n }\n}, {\n decorations: v => v.decorations\n});\nconst defaultTheme = /*@__PURE__*/EditorView.baseTheme({\n \".cm-selectionMatch\": { backgroundColor: \"#99ff7780\" },\n \".cm-searchMatch .cm-selectionMatch\": { backgroundColor: \"transparent\" }\n});\n// Select the words around the cursors.\nconst selectWord = ({ state, dispatch }) => {\n let { selection } = state;\n let newSel = EditorSelection.create(selection.ranges.map(range => state.wordAt(range.head) || EditorSelection.cursor(range.head)), selection.mainIndex);\n if (newSel.eq(selection))\n return false;\n dispatch(state.update({ selection: newSel }));\n return true;\n};\n// Find next occurrence of query relative to last cursor. Wrap around\n// the document if there are no more matches.\nfunction findNextOccurrence(state, query) {\n let { main, ranges } = state.selection;\n let word = state.wordAt(main.head), fullWord = word && word.from == main.from && word.to == main.to;\n for (let cycled = false, cursor = new SearchCursor(state.doc, query, ranges[ranges.length - 1].to);;) {\n cursor.next();\n if (cursor.done) {\n if (cycled)\n return null;\n cursor = new SearchCursor(state.doc, query, 0, Math.max(0, ranges[ranges.length - 1].from - 1));\n cycled = true;\n }\n else {\n if (cycled && ranges.some(r => r.from == cursor.value.from))\n continue;\n if (fullWord) {\n let word = state.wordAt(cursor.value.from);\n if (!word || word.from != cursor.value.from || word.to != cursor.value.to)\n continue;\n }\n return cursor.value;\n }\n }\n}\n/**\nSelect next occurrence of the current selection. Expand selection\nto the surrounding word when the selection is empty.\n*/\nconst selectNextOccurrence = ({ state, dispatch }) => {\n let { ranges } = state.selection;\n if (ranges.some(sel => sel.from === sel.to))\n return selectWord({ state, dispatch });\n let searchedText = state.sliceDoc(ranges[0].from, ranges[0].to);\n if (state.selection.ranges.some(r => state.sliceDoc(r.from, r.to) != searchedText))\n return false;\n let range = findNextOccurrence(state, searchedText);\n if (!range)\n return false;\n dispatch(state.update({\n selection: state.selection.addRange(EditorSelection.range(range.from, range.to), false),\n effects: EditorView.scrollIntoView(range.to)\n }));\n return true;\n};\n\nconst searchConfigFacet = /*@__PURE__*/Facet.define({\n combine(configs) {\n return combineConfig(configs, {\n top: false,\n caseSensitive: false,\n literal: false,\n regexp: false,\n wholeWord: false,\n createPanel: view => new SearchPanel(view),\n scrollToMatch: range => EditorView.scrollIntoView(range)\n });\n }\n});\n/**\nAdd search state to the editor configuration, and optionally\nconfigure the search extension.\n([`openSearchPanel`](https://codemirror.net/6/docs/ref/#search.openSearchPanel) will automatically\nenable this if it isn't already on).\n*/\nfunction search(config) {\n return config ? [searchConfigFacet.of(config), searchExtensions] : searchExtensions;\n}\n/**\nA search query. Part of the editor's search state.\n*/\nclass SearchQuery {\n /**\n Create a query object.\n */\n constructor(config) {\n this.search = config.search;\n this.caseSensitive = !!config.caseSensitive;\n this.literal = !!config.literal;\n this.regexp = !!config.regexp;\n this.replace = config.replace || \"\";\n this.valid = !!this.search && (!this.regexp || validRegExp(this.search));\n this.unquoted = this.unquote(this.search);\n this.wholeWord = !!config.wholeWord;\n this.test = config.test;\n }\n /**\n @internal\n */\n unquote(text) {\n return this.literal ? text :\n text.replace(/\\\\([nrt\\\\])/g, (_, ch) => ch == \"n\" ? \"\\n\" : ch == \"r\" ? \"\\r\" : ch == \"t\" ? \"\\t\" : \"\\\\\");\n }\n /**\n Compare this query to another query.\n */\n eq(other) {\n return this.search == other.search && this.replace == other.replace &&\n this.caseSensitive == other.caseSensitive && this.regexp == other.regexp &&\n this.wholeWord == other.wholeWord && this.test == other.test;\n }\n /**\n @internal\n */\n create() {\n return this.regexp ? new RegExpQuery(this) : new StringQuery(this);\n }\n /**\n Get a search cursor for this query, searching through the given\n range in the given state.\n */\n getCursor(state, from = 0, to) {\n let st = state.doc ? state : EditorState.create({ doc: state });\n if (to == null)\n to = st.doc.length;\n return this.regexp ? regexpCursor(this, st, from, to) : stringCursor(this, st, from, to);\n }\n}\nclass QueryType {\n constructor(spec) {\n this.spec = spec;\n }\n}\nfunction wrapStringTest(test, state, inner) {\n return (from, to, buffer, bufferPos) => {\n if (inner && !inner(from, to, buffer, bufferPos))\n return false;\n let match = from >= bufferPos && to <= bufferPos + buffer.length\n ? buffer.slice(from - bufferPos, to - bufferPos)\n : state.doc.sliceString(from, to);\n return test(match, state, from, to);\n };\n}\nfunction stringCursor(spec, state, from, to) {\n let test;\n if (spec.wholeWord)\n test = stringWordTest(state.doc, state.charCategorizer(state.selection.main.head));\n if (spec.test)\n test = wrapStringTest(spec.test, state, test);\n return new SearchCursor(state.doc, spec.unquoted, from, to, spec.caseSensitive ? undefined : x => x.toLowerCase(), test);\n}\nfunction stringWordTest(doc, categorizer) {\n return (from, to, buf, bufPos) => {\n if (bufPos > from || bufPos + buf.length < to) {\n bufPos = Math.max(0, from - 2);\n buf = doc.sliceString(bufPos, Math.min(doc.length, to + 2));\n }\n return (categorizer(charBefore(buf, from - bufPos)) != CharCategory.Word ||\n categorizer(charAfter(buf, from - bufPos)) != CharCategory.Word) &&\n (categorizer(charAfter(buf, to - bufPos)) != CharCategory.Word ||\n categorizer(charBefore(buf, to - bufPos)) != CharCategory.Word);\n };\n}\nclass StringQuery extends QueryType {\n constructor(spec) {\n super(spec);\n }\n nextMatch(state, curFrom, curTo) {\n let cursor = stringCursor(this.spec, state, curTo, state.doc.length).nextOverlapping();\n if (cursor.done) {\n let end = Math.min(state.doc.length, curFrom + this.spec.unquoted.length);\n cursor = stringCursor(this.spec, state, 0, end).nextOverlapping();\n }\n return cursor.done || cursor.value.from == curFrom && cursor.value.to == curTo ? null : cursor.value;\n }\n // Searching in reverse is, rather than implementing an inverted search\n // cursor, done by scanning chunk after chunk forward.\n prevMatchInRange(state, from, to) {\n for (let pos = to;;) {\n let start = Math.max(from, pos - 10000 /* FindPrev.ChunkSize */ - this.spec.unquoted.length);\n let cursor = stringCursor(this.spec, state, start, pos), range = null;\n while (!cursor.nextOverlapping().done)\n range = cursor.value;\n if (range)\n return range;\n if (start == from)\n return null;\n pos -= 10000 /* FindPrev.ChunkSize */;\n }\n }\n prevMatch(state, curFrom, curTo) {\n let found = this.prevMatchInRange(state, 0, curFrom);\n if (!found)\n found = this.prevMatchInRange(state, Math.max(0, curTo - this.spec.unquoted.length), state.doc.length);\n return found && (found.from != curFrom || found.to != curTo) ? found : null;\n }\n getReplacement(_result) { return this.spec.unquote(this.spec.replace); }\n matchAll(state, limit) {\n let cursor = stringCursor(this.spec, state, 0, state.doc.length), ranges = [];\n while (!cursor.next().done) {\n if (ranges.length >= limit)\n return null;\n ranges.push(cursor.value);\n }\n return ranges;\n }\n highlight(state, from, to, add) {\n let cursor = stringCursor(this.spec, state, Math.max(0, from - this.spec.unquoted.length), Math.min(to + this.spec.unquoted.length, state.doc.length));\n while (!cursor.next().done)\n add(cursor.value.from, cursor.value.to);\n }\n}\nfunction wrapRegexpTest(test, state, inner) {\n return (from, to, match) => {\n return (!inner || inner(from, to, match)) && test(match[0], state, from, to);\n };\n}\nfunction regexpCursor(spec, state, from, to) {\n let test;\n if (spec.wholeWord)\n test = regexpWordTest(state.charCategorizer(state.selection.main.head));\n if (spec.test)\n test = wrapRegexpTest(spec.test, state, test);\n return new RegExpCursor(state.doc, spec.search, { ignoreCase: !spec.caseSensitive, test }, from, to);\n}\nfunction charBefore(str, index) {\n return str.slice(findClusterBreak(str, index, false), index);\n}\nfunction charAfter(str, index) {\n return str.slice(index, findClusterBreak(str, index));\n}\nfunction regexpWordTest(categorizer) {\n return (_from, _to, match) => !match[0].length ||\n (categorizer(charBefore(match.input, match.index)) != CharCategory.Word ||\n categorizer(charAfter(match.input, match.index)) != CharCategory.Word) &&\n (categorizer(charAfter(match.input, match.index + match[0].length)) != CharCategory.Word ||\n categorizer(charBefore(match.input, match.index + match[0].length)) != CharCategory.Word);\n}\nclass RegExpQuery extends QueryType {\n nextMatch(state, curFrom, curTo) {\n let cursor = regexpCursor(this.spec, state, curTo, state.doc.length).next();\n if (cursor.done)\n cursor = regexpCursor(this.spec, state, 0, curFrom).next();\n return cursor.done ? null : cursor.value;\n }\n prevMatchInRange(state, from, to) {\n for (let size = 1;; size++) {\n let start = Math.max(from, to - size * 10000 /* FindPrev.ChunkSize */);\n let cursor = regexpCursor(this.spec, state, start, to), range = null;\n while (!cursor.next().done)\n range = cursor.value;\n if (range && (start == from || range.from > start + 10))\n return range;\n if (start == from)\n return null;\n }\n }\n prevMatch(state, curFrom, curTo) {\n return this.prevMatchInRange(state, 0, curFrom) ||\n this.prevMatchInRange(state, curTo, state.doc.length);\n }\n getReplacement(result) {\n return this.spec.unquote(this.spec.replace).replace(/\\$([$&]|\\d+)/g, (m, i) => {\n if (i == \"&\")\n return result.match[0];\n if (i == \"$\")\n return \"$\";\n for (let l = i.length; l > 0; l--) {\n let n = +i.slice(0, l);\n if (n > 0 && n < result.match.length)\n return result.match[n] + i.slice(l);\n }\n return m;\n });\n }\n matchAll(state, limit) {\n let cursor = regexpCursor(this.spec, state, 0, state.doc.length), ranges = [];\n while (!cursor.next().done) {\n if (ranges.length >= limit)\n return null;\n ranges.push(cursor.value);\n }\n return ranges;\n }\n highlight(state, from, to, add) {\n let cursor = regexpCursor(this.spec, state, Math.max(0, from - 250 /* RegExp.HighlightMargin */), Math.min(to + 250 /* RegExp.HighlightMargin */, state.doc.length));\n while (!cursor.next().done)\n add(cursor.value.from, cursor.value.to);\n }\n}\n/**\nA state effect that updates the current search query. Note that\nthis only has an effect if the search state has been initialized\n(by including [`search`](https://codemirror.net/6/docs/ref/#search.search) in your configuration or\nby running [`openSearchPanel`](https://codemirror.net/6/docs/ref/#search.openSearchPanel) at least\nonce).\n*/\nconst setSearchQuery = /*@__PURE__*/StateEffect.define();\nconst togglePanel = /*@__PURE__*/StateEffect.define();\nconst searchState = /*@__PURE__*/StateField.define({\n create(state) {\n return new SearchState(defaultQuery(state).create(), null);\n },\n update(value, tr) {\n for (let effect of tr.effects) {\n if (effect.is(setSearchQuery))\n value = new SearchState(effect.value.create(), value.panel);\n else if (effect.is(togglePanel))\n value = new SearchState(value.query, effect.value ? createSearchPanel : null);\n }\n return value;\n },\n provide: f => showPanel.from(f, val => val.panel)\n});\n/**\nGet the current search query from an editor state.\n*/\nfunction getSearchQuery(state) {\n let curState = state.field(searchState, false);\n return curState ? curState.query.spec : defaultQuery(state);\n}\n/**\nQuery whether the search panel is open in the given editor state.\n*/\nfunction searchPanelOpen(state) {\n var _a;\n return ((_a = state.field(searchState, false)) === null || _a === void 0 ? void 0 : _a.panel) != null;\n}\nclass SearchState {\n constructor(query, panel) {\n this.query = query;\n this.panel = panel;\n }\n}\nconst matchMark = /*@__PURE__*/Decoration.mark({ class: \"cm-searchMatch\" }), selectedMatchMark = /*@__PURE__*/Decoration.mark({ class: \"cm-searchMatch cm-searchMatch-selected\" });\nconst searchHighlighter = /*@__PURE__*/ViewPlugin.fromClass(class {\n constructor(view) {\n this.view = view;\n this.decorations = this.highlight(view.state.field(searchState));\n }\n update(update) {\n let state = update.state.field(searchState);\n if (state != update.startState.field(searchState) || update.docChanged || update.selectionSet || update.viewportChanged)\n this.decorations = this.highlight(state);\n }\n highlight({ query, panel }) {\n if (!panel || !query.spec.valid)\n return Decoration.none;\n let { view } = this;\n let builder = new RangeSetBuilder();\n for (let i = 0, ranges = view.visibleRanges, l = ranges.length; i < l; i++) {\n let { from, to } = ranges[i];\n while (i < l - 1 && to > ranges[i + 1].from - 2 * 250 /* RegExp.HighlightMargin */)\n to = ranges[++i].to;\n query.highlight(view.state, from, to, (from, to) => {\n let selected = view.state.selection.ranges.some(r => r.from == from && r.to == to);\n builder.add(from, to, selected ? selectedMatchMark : matchMark);\n });\n }\n return builder.finish();\n }\n}, {\n decorations: v => v.decorations\n});\nfunction searchCommand(f) {\n return view => {\n let state = view.state.field(searchState, false);\n return state && state.query.spec.valid ? f(view, state) : openSearchPanel(view);\n };\n}\n/**\nOpen the search panel if it isn't already open, and move the\nselection to the first match after the current main selection.\nWill wrap around to the start of the document when it reaches the\nend.\n*/\nconst findNext = /*@__PURE__*/searchCommand((view, { query }) => {\n let { to } = view.state.selection.main;\n let next = query.nextMatch(view.state, to, to);\n if (!next)\n return false;\n let selection = EditorSelection.single(next.from, next.to);\n let config = view.state.facet(searchConfigFacet);\n view.dispatch({\n selection,\n effects: [announceMatch(view, next), config.scrollToMatch(selection.main, view)],\n userEvent: \"select.search\"\n });\n selectSearchInput(view);\n return true;\n});\n/**\nMove the selection to the previous instance of the search query,\nbefore the current main selection. Will wrap past the start\nof the document to start searching at the end again.\n*/\nconst findPrevious = /*@__PURE__*/searchCommand((view, { query }) => {\n let { state } = view, { from } = state.selection.main;\n let prev = query.prevMatch(state, from, from);\n if (!prev)\n return false;\n let selection = EditorSelection.single(prev.from, prev.to);\n let config = view.state.facet(searchConfigFacet);\n view.dispatch({\n selection,\n effects: [announceMatch(view, prev), config.scrollToMatch(selection.main, view)],\n userEvent: \"select.search\"\n });\n selectSearchInput(view);\n return true;\n});\n/**\nSelect all instances of the search query.\n*/\nconst selectMatches = /*@__PURE__*/searchCommand((view, { query }) => {\n let ranges = query.matchAll(view.state, 1000);\n if (!ranges || !ranges.length)\n return false;\n view.dispatch({\n selection: EditorSelection.create(ranges.map(r => EditorSelection.range(r.from, r.to))),\n userEvent: \"select.search.matches\"\n });\n return true;\n});\n/**\nSelect all instances of the currently selected text.\n*/\nconst selectSelectionMatches = ({ state, dispatch }) => {\n let sel = state.selection;\n if (sel.ranges.length > 1 || sel.main.empty)\n return false;\n let { from, to } = sel.main;\n let ranges = [], main = 0;\n for (let cur = new SearchCursor(state.doc, state.sliceDoc(from, to)); !cur.next().done;) {\n if (ranges.length > 1000)\n return false;\n if (cur.value.from == from)\n main = ranges.length;\n ranges.push(EditorSelection.range(cur.value.from, cur.value.to));\n }\n dispatch(state.update({\n selection: EditorSelection.create(ranges, main),\n userEvent: \"select.search.matches\"\n }));\n return true;\n};\n/**\nReplace the current match of the search query.\n*/\nconst replaceNext = /*@__PURE__*/searchCommand((view, { query }) => {\n let { state } = view, { from, to } = state.selection.main;\n if (state.readOnly)\n return false;\n let match = query.nextMatch(state, from, from);\n if (!match)\n return false;\n let next = match;\n let changes = [], selection, replacement;\n let effects = [];\n if (next.from == from && next.to == to) {\n replacement = state.toText(query.getReplacement(next));\n changes.push({ from: next.from, to: next.to, insert: replacement });\n next = query.nextMatch(state, next.from, next.to);\n effects.push(EditorView.announce.of(state.phrase(\"replaced match on line $\", state.doc.lineAt(from).number) + \".\"));\n }\n let changeSet = view.state.changes(changes);\n if (next) {\n selection = EditorSelection.single(next.from, next.to).map(changeSet);\n effects.push(announceMatch(view, next));\n effects.push(state.facet(searchConfigFacet).scrollToMatch(selection.main, view));\n }\n view.dispatch({\n changes: changeSet,\n selection,\n effects,\n userEvent: \"input.replace\"\n });\n return true;\n});\n/**\nReplace all instances of the search query with the given\nreplacement.\n*/\nconst replaceAll = /*@__PURE__*/searchCommand((view, { query }) => {\n if (view.state.readOnly)\n return false;\n let changes = query.matchAll(view.state, 1e9).map(match => {\n let { from, to } = match;\n return { from, to, insert: query.getReplacement(match) };\n });\n if (!changes.length)\n return false;\n let announceText = view.state.phrase(\"replaced $ matches\", changes.length) + \".\";\n view.dispatch({\n changes,\n effects: EditorView.announce.of(announceText),\n userEvent: \"input.replace.all\"\n });\n return true;\n});\nfunction createSearchPanel(view) {\n return view.state.facet(searchConfigFacet).createPanel(view);\n}\nfunction defaultQuery(state, fallback) {\n var _a, _b, _c, _d, _e;\n let sel = state.selection.main;\n let selText = sel.empty || sel.to > sel.from + 100 ? \"\" : state.sliceDoc(sel.from, sel.to);\n if (fallback && !selText)\n return fallback;\n let config = state.facet(searchConfigFacet);\n return new SearchQuery({\n search: ((_a = fallback === null || fallback === void 0 ? void 0 : fallback.literal) !== null && _a !== void 0 ? _a : config.literal) ? selText : selText.replace(/\\n/g, \"\\\\n\"),\n caseSensitive: (_b = fallback === null || fallback === void 0 ? void 0 : fallback.caseSensitive) !== null && _b !== void 0 ? _b : config.caseSensitive,\n literal: (_c = fallback === null || fallback === void 0 ? void 0 : fallback.literal) !== null && _c !== void 0 ? _c : config.literal,\n regexp: (_d = fallback === null || fallback === void 0 ? void 0 : fallback.regexp) !== null && _d !== void 0 ? _d : config.regexp,\n wholeWord: (_e = fallback === null || fallback === void 0 ? void 0 : fallback.wholeWord) !== null && _e !== void 0 ? _e : config.wholeWord\n });\n}\nfunction getSearchInput(view) {\n let panel = getPanel(view, createSearchPanel);\n return panel && panel.dom.querySelector(\"[main-field]\");\n}\nfunction selectSearchInput(view) {\n let input = getSearchInput(view);\n if (input && input == view.root.activeElement)\n input.select();\n}\n/**\nMake sure the search panel is open and focused.\n*/\nconst openSearchPanel = view => {\n let state = view.state.field(searchState, false);\n if (state && state.panel) {\n let searchInput = getSearchInput(view);\n if (searchInput && searchInput != view.root.activeElement) {\n let query = defaultQuery(view.state, state.query.spec);\n if (query.valid)\n view.dispatch({ effects: setSearchQuery.of(query) });\n searchInput.focus();\n searchInput.select();\n }\n }\n else {\n view.dispatch({ effects: [\n togglePanel.of(true),\n state ? setSearchQuery.of(defaultQuery(view.state, state.query.spec)) : StateEffect.appendConfig.of(searchExtensions)\n ] });\n }\n return true;\n};\n/**\nClose the search panel.\n*/\nconst closeSearchPanel = view => {\n let state = view.state.field(searchState, false);\n if (!state || !state.panel)\n return false;\n let panel = getPanel(view, createSearchPanel);\n if (panel && panel.dom.contains(view.root.activeElement))\n view.focus();\n view.dispatch({ effects: togglePanel.of(false) });\n return true;\n};\n/**\nDefault search-related key bindings.\n\n - Mod-f: [`openSearchPanel`](https://codemirror.net/6/docs/ref/#search.openSearchPanel)\n - F3, Mod-g: [`findNext`](https://codemirror.net/6/docs/ref/#search.findNext)\n - Shift-F3, Shift-Mod-g: [`findPrevious`](https://codemirror.net/6/docs/ref/#search.findPrevious)\n - Mod-Alt-g: [`gotoLine`](https://codemirror.net/6/docs/ref/#search.gotoLine)\n - Mod-d: [`selectNextOccurrence`](https://codemirror.net/6/docs/ref/#search.selectNextOccurrence)\n*/\nconst searchKeymap = [\n { key: \"Mod-f\", run: openSearchPanel, scope: \"editor search-panel\" },\n { key: \"F3\", run: findNext, shift: findPrevious, scope: \"editor search-panel\", preventDefault: true },\n { key: \"Mod-g\", run: findNext, shift: findPrevious, scope: \"editor search-panel\", preventDefault: true },\n { key: \"Escape\", run: closeSearchPanel, scope: \"editor search-panel\" },\n { key: \"Mod-Shift-l\", run: selectSelectionMatches },\n { key: \"Mod-Alt-g\", run: gotoLine },\n { key: \"Mod-d\", run: selectNextOccurrence, preventDefault: true },\n];\nclass SearchPanel {\n constructor(view) {\n this.view = view;\n let query = this.query = view.state.field(searchState).query.spec;\n this.commit = this.commit.bind(this);\n this.searchField = elt(\"input\", {\n value: query.search,\n placeholder: phrase(view, \"Find\"),\n \"aria-label\": phrase(view, \"Find\"),\n class: \"cm-textfield\",\n name: \"search\",\n form: \"\",\n \"main-field\": \"true\",\n onchange: this.commit,\n onkeyup: this.commit\n });\n this.replaceField = elt(\"input\", {\n value: query.replace,\n placeholder: phrase(view, \"Replace\"),\n \"aria-label\": phrase(view, \"Replace\"),\n class: \"cm-textfield\",\n name: \"replace\",\n form: \"\",\n onchange: this.commit,\n onkeyup: this.commit\n });\n this.caseField = elt(\"input\", {\n type: \"checkbox\",\n name: \"case\",\n form: \"\",\n checked: query.caseSensitive,\n onchange: this.commit\n });\n this.reField = elt(\"input\", {\n type: \"checkbox\",\n name: \"re\",\n form: \"\",\n checked: query.regexp,\n onchange: this.commit\n });\n this.wordField = elt(\"input\", {\n type: \"checkbox\",\n name: \"word\",\n form: \"\",\n checked: query.wholeWord,\n onchange: this.commit\n });\n function button(name, onclick, content) {\n return elt(\"button\", { class: \"cm-button\", name, onclick, type: \"button\" }, content);\n }\n this.dom = elt(\"div\", { onkeydown: (e) => this.keydown(e), class: \"cm-search\" }, [\n this.searchField,\n button(\"next\", () => findNext(view), [phrase(view, \"next\")]),\n button(\"prev\", () => findPrevious(view), [phrase(view, \"previous\")]),\n button(\"select\", () => selectMatches(view), [phrase(view, \"all\")]),\n elt(\"label\", null, [this.caseField, phrase(view, \"match case\")]),\n elt(\"label\", null, [this.reField, phrase(view, \"regexp\")]),\n elt(\"label\", null, [this.wordField, phrase(view, \"by word\")]),\n ...view.state.readOnly ? [] : [\n elt(\"br\"),\n this.replaceField,\n button(\"replace\", () => replaceNext(view), [phrase(view, \"replace\")]),\n button(\"replaceAll\", () => replaceAll(view), [phrase(view, \"replace all\")])\n ],\n elt(\"button\", {\n name: \"close\",\n onclick: () => closeSearchPanel(view),\n \"aria-label\": phrase(view, \"close\"),\n type: \"button\"\n }, [\"\u00D7\"])\n ]);\n }\n commit() {\n let query = new SearchQuery({\n search: this.searchField.value,\n caseSensitive: this.caseField.checked,\n regexp: this.reField.checked,\n wholeWord: this.wordField.checked,\n replace: this.replaceField.value,\n });\n if (!query.eq(this.query)) {\n this.query = query;\n this.view.dispatch({ effects: setSearchQuery.of(query) });\n }\n }\n keydown(e) {\n if (runScopeHandlers(this.view, e, \"search-panel\")) {\n e.preventDefault();\n }\n else if (e.keyCode == 13 && e.target == this.searchField) {\n e.preventDefault();\n (e.shiftKey ? findPrevious : findNext)(this.view);\n }\n else if (e.keyCode == 13 && e.target == this.replaceField) {\n e.preventDefault();\n replaceNext(this.view);\n }\n }\n update(update) {\n for (let tr of update.transactions)\n for (let effect of tr.effects) {\n if (effect.is(setSearchQuery) && !effect.value.eq(this.query))\n this.setQuery(effect.value);\n }\n }\n setQuery(query) {\n this.query = query;\n this.searchField.value = query.search;\n this.replaceField.value = query.replace;\n this.caseField.checked = query.caseSensitive;\n this.reField.checked = query.regexp;\n this.wordField.checked = query.wholeWord;\n }\n mount() {\n this.searchField.select();\n }\n get pos() { return 80; }\n get top() { return this.view.state.facet(searchConfigFacet).top; }\n}\nfunction phrase(view, phrase) { return view.state.phrase(phrase); }\nconst AnnounceMargin = 30;\nconst Break = /[\\s\\.,:;?!]/;\nfunction announceMatch(view, { from, to }) {\n let line = view.state.doc.lineAt(from), lineEnd = view.state.doc.lineAt(to).to;\n let start = Math.max(line.from, from - AnnounceMargin), end = Math.min(lineEnd, to + AnnounceMargin);\n let text = view.state.sliceDoc(start, end);\n if (start != line.from) {\n for (let i = 0; i < AnnounceMargin; i++)\n if (!Break.test(text[i + 1]) && Break.test(text[i])) {\n text = text.slice(i);\n break;\n }\n }\n if (end != lineEnd) {\n for (let i = text.length - 1; i > text.length - AnnounceMargin; i--)\n if (!Break.test(text[i - 1]) && Break.test(text[i])) {\n text = text.slice(0, i);\n break;\n }\n }\n return EditorView.announce.of(`${view.state.phrase(\"current match\")}. ${text} ${view.state.phrase(\"on line\")} ${line.number}.`);\n}\nconst baseTheme = /*@__PURE__*/EditorView.baseTheme({\n \".cm-panel.cm-search\": {\n padding: \"2px 6px 4px\",\n position: \"relative\",\n \"& [name=close]\": {\n position: \"absolute\",\n top: \"0\",\n right: \"4px\",\n backgroundColor: \"inherit\",\n border: \"none\",\n font: \"inherit\",\n padding: 0,\n margin: 0\n },\n \"& input, & button, & label\": {\n margin: \".2em .6em .2em 0\"\n },\n \"& input[type=checkbox]\": {\n marginRight: \".2em\"\n },\n \"& label\": {\n fontSize: \"80%\",\n whiteSpace: \"pre\"\n }\n },\n \"&light .cm-searchMatch\": { backgroundColor: \"#ffff0054\" },\n \"&dark .cm-searchMatch\": { backgroundColor: \"#00ffff8a\" },\n \"&light .cm-searchMatch-selected\": { backgroundColor: \"#ff6a0054\" },\n \"&dark .cm-searchMatch-selected\": { backgroundColor: \"#ff00ff8a\" }\n});\nconst searchExtensions = [\n searchState,\n /*@__PURE__*/Prec.low(searchHighlighter),\n baseTheme\n];\n\nexport { RegExpCursor, SearchCursor, SearchQuery, closeSearchPanel, findNext, findPrevious, getSearchQuery, gotoLine, highlightSelectionMatches, openSearchPanel, replaceAll, replaceNext, search, searchKeymap, searchPanelOpen, selectMatches, selectNextOccurrence, selectSelectionMatches, setSearchQuery };\n", "export default function crelt() {\n var elt = arguments[0]\n if (typeof elt == \"string\") elt = document.createElement(elt)\n var i = 1, next = arguments[1]\n if (next && typeof next == \"object\" && next.nodeType == null && !Array.isArray(next)) {\n for (var name in next) if (Object.prototype.hasOwnProperty.call(next, name)) {\n var value = next[name]\n if (typeof value == \"string\") elt.setAttribute(name, value)\n else if (value != null) elt[name] = value\n }\n i++\n }\n for (; i < arguments.length; i++) add(elt, arguments[i])\n return elt\n}\n\nfunction add(elt, child) {\n if (typeof child == \"string\") {\n elt.appendChild(document.createTextNode(child))\n } else if (child == null) {\n } else if (child.nodeType != null) {\n elt.appendChild(child)\n } else if (Array.isArray(child)) {\n for (var i = 0; i < child.length; i++) add(elt, child[i])\n } else {\n throw new RangeError(\"Unsupported child node: \" + child)\n }\n}\n", "import type { StateCommand } from \"@codemirror/state\";\nimport { EditorSelection } from \"@codemirror/state\";\nimport type { KeyBinding } from \"@codemirror/view\";\n\nconst MARKS = [\"**\", \"__\", \"~~\", \"*\", \"_\", \"`\"];\n\nconst toggleWrap =\n (mark: string): StateCommand =>\n ({ state, dispatch }) => {\n const selection = state.changeByRange((range) => {\n let from = range.from;\n let to = range.to;\n for (;;) {\n const found = MARKS.find(\n (m) =>\n state.sliceDoc(from - m.length, from) === m &&\n state.sliceDoc(to, to + m.length) === m\n );\n if (!found) break;\n if (found === mark) {\n return {\n changes: [\n { from: from - mark.length, to: from },\n { from: to, to: to + mark.length },\n ],\n range: EditorSelection.range(\n range.from - mark.length,\n range.to - mark.length\n ),\n };\n }\n from -= found.length;\n to += found.length;\n }\n\n from = range.from;\n to = range.to;\n for (;;) {\n const found = MARKS.find(\n (m) =>\n to - from >= m.length * 2 &&\n state.sliceDoc(from, from + m.length) === m &&\n state.sliceDoc(to - m.length, to) === m\n );\n if (!found) break;\n if (found === mark) {\n return {\n changes: [\n { from, to: from + mark.length },\n { from: to - mark.length, to },\n ],\n range: EditorSelection.range(\n range.from,\n range.to - mark.length * 2\n ),\n };\n }\n from += found.length;\n to -= found.length;\n }\n\n return {\n changes: [\n { from: range.from, insert: mark },\n { from: range.to, insert: mark },\n ],\n range: EditorSelection.range(\n range.from + mark.length,\n range.to + mark.length\n ),\n };\n });\n\n dispatch(state.update(selection, { scrollIntoView: true, userEvent: \"input\" }));\n return true;\n };\n\nexport const toggleBold = toggleWrap(\"**\");\nexport const toggleItalic = toggleWrap(\"_\");\nexport const toggleStrikethrough = toggleWrap(\"~~\");\nexport const toggleCode = toggleWrap(\"`\");\n\nexport const markdownFormattingKeymap: KeyBinding[] = [\n { key: \"Mod-b\", run: toggleBold, preventDefault: true },\n { key: \"Mod-i\", run: toggleItalic, preventDefault: true },\n { key: \"Mod-Shift-x\", run: toggleStrikethrough, preventDefault: true },\n { key: \"Mod-e\", run: toggleCode, preventDefault: true },\n];\n", "import { syntaxTree } from \"@codemirror/language\";\nimport { RangeSetBuilder } from \"@codemirror/state\";\nimport {\n Decoration,\n EditorView,\n ViewPlugin,\n ViewUpdate,\n WidgetType,\n type DecorationSet,\n} from \"@codemirror/view\";\n\n/**\n * GFM task list checkboxes: each `[ ]` / `[x]` marker in a list item is drawn\n * as a checkbox, and clicking it flips the character between the brackets.\n *\n * Needs the GFM markdown base (`markdownLanguage`), which is what parses the\n * `TaskMarker` node. Lives in the same bundle as the `markdown()` call so that\n * `syntaxTree` reads the same `Language` facet (see the note in embed.ts).\n */\n/**\n * The box, after nextaction's: a soft rounded square. Open, it's a clear grey\n * outline; ticked, it fades back along with its task's text \u2014 a faint outline\n * and a grey tick. The tick draws itself in (a mask slides off it) only when\n * it's just been ticked, not every time a ticked task scrolls into view, and\n * the box swells a little while pressed.\n */\nconst SVG = \"http://www.w3.org/2000/svg\";\n\nfunction tick(animate: boolean) {\n const svg = document.createElementNS(SVG, \"svg\");\n svg.setAttribute(\"viewBox\", \"0 0 24 24\");\n svg.setAttribute(\"class\", \"cm-task-tick\");\n svg.setAttribute(\"aria-hidden\", \"true\");\n const path = document.createElementNS(SVG, \"path\");\n path.setAttribute(\"d\", \"M19 7L10 16.5l-4.5-4.5\");\n svg.append(path);\n if (animate) {\n // a block of the page's colour over the tick, sliding off it\n const mask = document.createElementNS(SVG, \"rect\");\n mask.setAttribute(\"class\", \"cm-task-tick-mask\");\n for (const [k, v] of [[\"x\", \"0\"], [\"y\", \"0\"], [\"width\", \"24\"], [\"height\", \"24\"]])\n mask.setAttribute(k, v);\n const slide = document.createElementNS(SVG, \"animate\");\n for (const [k, v] of [\n [\"attributeName\", \"x\"],\n [\"values\", \"0;24;24\"],\n [\"dur\", \"0.24s\"],\n [\"begin\", \"0.1s\"],\n [\"fill\", \"freeze\"],\n ])\n slide.setAttribute(k, v);\n mask.append(slide);\n svg.append(mask);\n }\n return svg;\n}\n\n/** When a box was last ticked: the box drawn just after animates its tick. */\nconst justTicked = new WeakMap<EditorView, number>();\n\nclass TaskWidget extends WidgetType {\n constructor(readonly checked: boolean) {\n super();\n }\n\n eq(other: TaskWidget) {\n return other.checked === this.checked;\n }\n\n toDOM(view: EditorView) {\n const box = document.createElement(\"span\");\n box.className = \"cm-task\" + (this.checked ? \" cm-task-checked\" : \"\");\n box.setAttribute(\"role\", \"checkbox\");\n box.setAttribute(\"aria-checked\", String(this.checked));\n box.setAttribute(\"aria-label\", this.checked ? \"Done\" : \"To do\");\n const disabled = !view.state.facet(EditorView.editable);\n if (disabled) box.setAttribute(\"aria-disabled\", \"true\");\n\n if (this.checked) {\n const ticked = justTicked.get(view);\n box.append(tick(ticked !== undefined && performance.now() - ticked < 400));\n }\n\n // mousedown, not click: keeps focus/selection where it was and stops\n // CodeMirror from moving the cursor onto the line.\n box.addEventListener(\"mousedown\", (event) => {\n // only the main button ticks it: a right-click is for the list menu.\n if (event.button !== 0) return;\n event.preventDefault();\n if (disabled) return;\n box.classList.add(\"cm-task-pressed\");\n const up = () => {\n box.classList.remove(\"cm-task-pressed\");\n window.removeEventListener(\"mouseup\", up, true);\n };\n window.addEventListener(\"mouseup\", up, true);\n if (!this.checked) justTicked.set(view, performance.now());\n toggle(view, view.posAtDOM(box));\n });\n return box;\n }\n\n ignoreEvent() {\n return true;\n }\n}\n\n/** Flip the task marker starting at `from` (the `[`). */\nfunction toggle(view: EditorView, from: number) {\n const marker = view.state.doc.sliceString(from, from + 3);\n if (!/^\\[[ xX]\\]$/.test(marker)) return;\n const insert = marker[1] === \" \" ? \"x\" : \" \";\n view.dispatch({\n changes: { from: from + 1, to: from + 2, insert },\n userEvent: \"input.toggle-task\",\n });\n}\n\nconst motion = (ms: number) =>\n `max(1ms, calc(${ms}ms * var(--studio-motion-scale, 1) * var(--studio-motion-preference, 1)))`;\n\nconst ink = (fade: number) =>\n `color-mix(in oklab, var(--text-editor-line, currentColor), transparent ${fade}%)`;\n\nconst taskTheme = EditorView.baseTheme({\n \".cm-task\": {\n \"--cm-task-size\": \"calc(1.05rem * var(--markdown-zoom, 1))\",\n boxSizing: \"border-box\",\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n flex: \"none\",\n width: \"var(--cm-task-size)\",\n height: \"var(--cm-task-size)\",\n borderRadius: \"calc(var(--cm-task-size) / 3.5)\",\n border: `1.5px solid ${ink(45)}`,\n color: ink(45),\n verticalAlign: \"-0.15em\",\n cursor: \"var(--studio-cursor-pointer, pointer)\",\n userSelect: \"none\",\n transition: `border-color ${motion(140)} linear, color ${motion(140)} linear, scale ${motion(100)} ease`,\n },\n \".cm-task-pressed\": {\n scale: \"1.1\",\n },\n // done: it steps back with its text (see .cm-task-done)\n \".cm-task-checked\": {\n borderColor: ink(80),\n color: ink(55),\n },\n \".cm-task[aria-disabled]\": {\n cursor: \"default\",\n },\n \".cm-task-tick\": {\n width: \"100%\",\n height: \"100%\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: \"2.5\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n },\n \".cm-task-tick-mask\": {\n fill: \"var(--text-editor-fill, white)\",\n stroke: \"none\",\n },\n});\n\nconst doneMark = Decoration.mark({ class: \"cm-task-done\" });\n\nfunction build(view: EditorView): DecorationSet {\n const builder = new RangeSetBuilder<Decoration>();\n const { doc } = view.state;\n for (const { from, to } of view.visibleRanges) {\n syntaxTree(view.state).iterate({\n from,\n to,\n enter: (node) => {\n if (node.name !== \"TaskMarker\") return;\n const checked = doc.sliceString(node.from + 1, node.to - 1) !== \" \";\n builder.add(\n node.from,\n node.to,\n Decoration.replace({ widget: new TaskWidget(checked) })\n );\n // Fade a done task's text (the `Task` node runs from the marker to\n // the end of the item's paragraph; nested lists sit outside it).\n const task = node.node.parent;\n if (checked && task?.name === \"Task\" && task.to > node.to) {\n builder.add(node.to, task.to, doneMark);\n }\n },\n });\n }\n return builder.finish();\n}\n\nconst taskPlugin = ViewPlugin.fromClass(\n class {\n decorations: DecorationSet;\n constructor(view: EditorView) {\n this.decorations = build(view);\n }\n update(update: ViewUpdate) {\n // The tree changes as the parser catches up, not only on edits.\n if (\n update.docChanged ||\n update.viewportChanged ||\n syntaxTree(update.startState) !== syntaxTree(update.state)\n ) {\n this.decorations = build(update.view);\n }\n }\n },\n { decorations: (v) => v.decorations }\n);\n\nexport const taskCheckboxes = [taskPlugin, taskTheme];\n", "import { syntaxTree } from \"@codemirror/language\";\nimport { type EditorState, type Range } from \"@codemirror/state\";\nimport {\n Decoration,\n EditorView,\n ViewPlugin,\n WidgetType,\n type DecorationSet,\n type ViewUpdate,\n} from \"@codemirror/view\";\n\n/**\n * Bear-style margin: block markers hang out to the left of the text, so the\n * body text of headings, lists and quotes all starts on the same column.\n *\n * H1 The title (`# ` \u2192 H1 label)\n * \u2022 a bullet (`- ` \u2192 dot)\n * 3. a number (the number it renders as, whatever was typed)\n * \u2610 a task (`- [ ] ` \u2192 checkbox, no bullet)\n * \u2503 a quote (`> ` \u2192 a bar)\n *\n * The markup itself is never shown, and the caret never goes into it: see\n * prefix.ts.\n *\n * Everything hung goes in a `.cm-md-hang` box: a fixed-width inline-flex with\n * a negative margin of the same width, so it takes no room on the line and\n * whatever it holds sits right-aligned in the margin. Its width is in rem so a\n * big heading doesn't hang further out than a paragraph.\n */\n\nconst hidden = Decoration.replace({});\n// inclusive, so it wraps the checkbox widget tasks.ts puts at its very start.\nconst taskMark = Decoration.mark({\n class: \"cm-md-hang cm-md-list-marker\",\n inclusive: true,\n});\n\nclass HeadingLabel extends WidgetType {\n /** `shown` only on the caret's line; elsewhere it keeps its room, unseen. */\n constructor(readonly level: number, readonly shown: boolean) {\n super();\n }\n eq(other: HeadingLabel) {\n return other.level === this.level && other.shown === this.shown;\n }\n toDOM() {\n const span = document.createElement(\"span\");\n span.className = `cm-md-hang cm-md-heading-label${this.shown ? \"\" : \" cm-md-heading-label-idle\"}`;\n span.setAttribute(\"aria-hidden\", \"true\");\n const n = document.createElement(\"span\");\n n.className = \"cm-md-heading-level\";\n n.textContent = String(this.level);\n span.append(\"H\", n);\n return span;\n }\n}\n\nclass Bullet extends WidgetType {\n eq() {\n return true;\n }\n toDOM() {\n const span = document.createElement(\"span\");\n span.className = \"cm-md-hang cm-md-list-marker\";\n const dot = document.createElement(\"span\");\n dot.className = \"cm-bullet\";\n span.append(dot);\n return span;\n }\n}\n\nclass NumberLabel extends WidgetType {\n constructor(readonly text: string) {\n super();\n }\n eq(other: NumberLabel) {\n return other.text === this.text;\n }\n toDOM() {\n const span = document.createElement(\"span\");\n span.className = \"cm-md-hang cm-md-list-marker cm-md-hang-number\";\n span.textContent = this.text;\n return span;\n }\n}\n\ntype SyntaxNode = ReturnType<ReturnType<typeof syntaxTree>[\"resolveInner\"]>;\n\n/**\n * What an ordered list mark renders as: CommonMark numbers a list from its\n * first item's number and counts up, whatever the later items say, so\n * `1. 2. 10.` is 1, 2, 3. The source is left alone \u2014 rewriting it would race\n * other people renumbering the same list \u2014 and the margin shows the truth.\n */\nfunction renderedNumber(state: EditorState, mark: SyntaxNode) {\n const text = state.doc.sliceString(mark.from, mark.to);\n const delimiter = text.slice(-1);\n let item = mark.parent;\n if (!item || item.name !== \"ListItem\") return text;\n let index = 0;\n let first = item;\n for (let prev = item.prevSibling; prev; prev = prev.prevSibling) {\n if (prev.name !== \"ListItem\") continue;\n index++;\n first = prev;\n }\n const firstMark = first.getChild(\"ListMark\");\n const start = firstMark\n ? parseInt(state.doc.sliceString(firstMark.from, firstMark.to), 10)\n : 1;\n const n = (Number.isNaN(start) ? 1 : start) + index;\n // nested ordered lists count the way GitHub draws them: 1. \u2192 i. \u2192 a.\n let depth = 0;\n for (let p = item.parent?.parent; p; p = p.parent)\n if (p.name === \"OrderedList\") depth++;\n return `${counter(n, depth)}${delimiter}`;\n}\n\n/** `n` in the style for an ordered list `depth` lists deep. */\nexport function counter(n: number, depth: number) {\n const style = depth % 3;\n if (style === 1 && n > 0 && n < 4000) return roman(n);\n if (style === 2 && n > 0) return alpha(n);\n return String(n);\n}\n\nfunction roman(n: number) {\n const numerals: [number, string][] = [\n [1000, \"m\"], [900, \"cm\"], [500, \"d\"], [400, \"cd\"], [100, \"c\"], [90, \"xc\"],\n [50, \"l\"], [40, \"xl\"], [10, \"x\"], [9, \"ix\"], [5, \"v\"], [4, \"iv\"], [1, \"i\"],\n ];\n let out = \"\";\n for (const [value, numeral] of numerals)\n while (n >= value) {\n out += numeral;\n n -= value;\n }\n return out;\n}\n\nfunction alpha(n: number) {\n let out = \"\";\n while (n > 0) {\n n--;\n out = String.fromCharCode(97 + (n % 26)) + out;\n n = Math.floor(n / 26);\n }\n return out;\n}\n\nconst codeLine = Decoration.line({ class: \"cm-md-code\" });\nconst inlineCode = Decoration.mark({ class: \"cm-md-inline-code\" });\nconst calloutMarker = Decoration.mark({ class: \"cm-md-callout-marker\" });\n\n/** Lines holding any part of the selection: a callout's `[!NOTE]` shows as\n * text on them, so its type can be changed. */\nfunction caretLines(state: EditorState) {\n const lines = new Set<number>();\n for (const r of state.selection.ranges) {\n const last = state.doc.lineAt(r.to).number;\n for (let n = state.doc.lineAt(r.from).number; n <= last; n++) lines.add(n);\n }\n return lines;\n}\n\nexport const CALLOUTS = {\n note: \"Note\",\n tip: \"Tip\",\n important: \"Important\",\n warning: \"Warning\",\n caution: \"Caution\",\n} as const;\nexport type CalloutType = keyof typeof CALLOUTS;\n\n/**\n * A GitHub-style callout's marker on the first line of a quote:\n * `> [!NOTE]`, any case. Text after it (`> [!TIP] Shortcuts`) is taken as the\n * title, as Obsidian does; GitHub would leave it in the body.\n */\nfunction calloutAt(line: { from: number; text: string }) {\n const m = /^((?:\\s*>\\s?)+)\\[!(\\w+)\\][ \\t]*(.*)$/.exec(line.text);\n if (!m) return null;\n const type = m[2].toLowerCase();\n if (!(type in CALLOUTS)) return null;\n const from = line.from + m[1].length;\n return {\n type: type as CalloutType,\n from,\n to: line.from + line.text.length - m[3].length,\n titled: m[3].trim() !== \"\",\n };\n}\n\n// 16\u00D716, stroked in currentColor.\nconst ICONS: Record<CalloutType, string> = {\n note: '<circle cx=\"8\" cy=\"8\" r=\"6.25\"/><path d=\"M8 7.25v4M8 4.75v.01\"/>',\n tip: '<path d=\"M5.75 11.5h4.5M6.5 14h3M8 1.75a4.25 4.25 0 0 0-2.5 7.7c.5.4.75.9.75 1.55V11.5h3.5V11c0-.65.25-1.15.75-1.55A4.25 4.25 0 0 0 8 1.75z\"/>',\n important: '<path d=\"M2.25 3.25a1.5 1.5 0 0 1 1.5-1.5h8.5a1.5 1.5 0 0 1 1.5 1.5v6.5a1.5 1.5 0 0 1-1.5 1.5H7l-3 2.5v-2.5h-.25a1.5 1.5 0 0 1-1.5-1.5z\"/><path d=\"M8 4.5v3M8 9.5v.01\"/>',\n warning: '<path d=\"M7.13 2.25a1 1 0 0 1 1.74 0l5.6 9.75a1 1 0 0 1-.87 1.5H2.4a1 1 0 0 1-.87-1.5z\"/><path d=\"M8 6v3M8 11v.01\"/>',\n caution: '<path d=\"M5.5 1.75h5l3.75 3.75v5l-3.75 3.75h-5L1.75 10.5v-5z\"/><path d=\"M8 5v3.5M8 10.75v.01\"/>',\n};\n\nclass CalloutTitle extends WidgetType {\n constructor(readonly type: CalloutType, readonly label: boolean) {\n super();\n }\n eq(other: CalloutTitle) {\n return other.type === this.type && other.label === this.label;\n }\n toDOM() {\n const span = document.createElement(\"span\");\n span.className = \"cm-md-callout-title\";\n span.innerHTML =\n `<svg viewBox=\"0 0 16 16\" aria-hidden=\"true\" fill=\"none\" stroke=\"currentColor\" ` +\n `stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">${ICONS[this.type]}</svg>`;\n if (this.label) span.append(CALLOUTS[this.type]);\n else span.setAttribute(\"aria-label\", CALLOUTS[this.type]);\n return span;\n }\n}\n\n/**\n * Lists are laid out with indentation, not spaces: every line in one is\n * padded by its depth (one list indent per list it's in), its markdown\n * indentation is hidden, and the marker sits in the padding \u2014 on the body's\n * column at the top level \u2014 so an item's text, and its wrapped lines, start\n * one indent in.\n */\nfunction listLines(\n state: EditorState,\n from: number,\n to: number,\n decos: Range<Decoration>[]\n) {\n const { doc } = state;\n const tree = syntaxTree(state);\n const last = doc.lineAt(to).number;\n for (let n = doc.lineAt(from).number; n <= last; n++) {\n const line = doc.line(n);\n const indent = /^[ \\t]*/.exec(line.text)![0].length;\n if (indent === line.length) continue; // blank\n let depth = 0;\n let code = false;\n for (\n let node: SyntaxNode | null = tree.resolveInner(line.from + indent, 1);\n node;\n node = node.parent\n ) {\n if (node.name === \"ListItem\") depth++;\n if (node.name === \"FencedCode\" || node.name === \"CodeBlock\") code = true;\n }\n if (!depth) continue;\n decos.push(\n Decoration.line({\n class: \"cm-md-list-line\",\n attributes: { style: `--md-list-depth: ${depth}` },\n }).range(line.from)\n );\n // code keeps its spaces: they're part of what it says.\n if (indent && !code) decos.push(hidden.range(line.from, line.from + indent));\n }\n}\n\n/** `pos` moved past any spaces (not newlines) that follow it. */\nfunction skipSpaces(state: EditorState, pos: number) {\n const line = state.doc.lineAt(pos);\n while (pos < line.to && state.doc.sliceString(pos, pos + 1) === \" \") pos++;\n return pos;\n}\n\nfunction build(view: EditorView): DecorationSet {\n const { state } = view;\n const { doc } = state;\n const editing = caretLines(state);\n const decos: Range<Decoration>[] = [];\n\n for (const { from, to } of view.visibleRanges) {\n syntaxTree(state).iterate({\n from,\n to,\n enter: (node) => {\n const name = node.name;\n\n const heading = /^ATXHeading(\\d)$/.exec(name);\n if (heading) {\n const mark = node.node.firstChild;\n if (!mark || mark.name !== \"HeaderMark\") return;\n const line = doc.lineAt(node.from);\n decos.push(\n Decoration.replace({\n widget: new HeadingLabel(Number(heading[1]), editing.has(line.number)),\n }).range(line.from, skipSpaces(state, mark.to)),\n // the heading's size on the whole line, for what the highlighter\n // doesn't wrap (a rendered link): see headingLines in the theme.\n Decoration.line({ class: `cm-md-h${heading[1]}` }).range(line.from)\n );\n return;\n }\n\n if (name === \"ListMark\") {\n const end = skipSpaces(state, node.to);\n const char = doc.sliceString(node.from, node.to);\n const bullet = [\"-\", \"+\", \"*\"].includes(char);\n const task = node.node.nextSibling?.firstChild;\n const isTask =\n bullet &&\n task?.name === \"TaskMarker\" &&\n doc.sliceString(end, task.from).trim() === \"\";\n if (isTask && task) {\n // the checkbox takes the bullet's place: drop the mark, and hang\n // the task marker (which tasks.ts draws as a checkbox).\n if (end > node.from) decos.push(hidden.range(node.from, end));\n decos.push(taskMark.range(task.from, task.to));\n // the space after the box is hidden, not hung: hung, the caret\n // at the start of the text would be drawn at the end of the hang.\n const after = skipSpaces(state, task.to);\n if (after > task.to) decos.push(hidden.range(task.to, after));\n return;\n }\n if (bullet) {\n decos.push(\n Decoration.replace({ widget: new Bullet() }).range(node.from, end)\n );\n } else {\n decos.push(\n Decoration.replace({\n widget: new NumberLabel(renderedNumber(state, node.node)),\n }).range(node.from, end)\n );\n }\n return;\n }\n\n if (\n (name === \"BulletList\" || name === \"OrderedList\") &&\n node.node.parent?.name !== \"ListItem\"\n ) {\n listLines(state, node.from, node.to, decos);\n return; // carry on into it for its marks\n }\n\n if (name === \"FencedCode\" || name === \"CodeBlock\") {\n // every line in the code font, whether or not its language\n // highlighter tags each word: untagged text would otherwise take\n // the body font.\n const first = doc.lineAt(node.from).number;\n const last = doc.lineAt(node.to).number;\n for (let n = first; n <= last; n++) {\n const ends =\n (n === first ? \" cm-md-code-first\" : \"\") +\n (n === last ? \" cm-md-code-last\" : \"\");\n decos.push(\n (ends ? Decoration.line({ class: \"cm-md-code\" + ends }) : codeLine).range(\n doc.line(n).from\n )\n );\n }\n return false;\n }\n\n if (name === \"InlineCode\") {\n // one tinted pill for the whole thing, backticks and all\n decos.push(inlineCode.range(node.from, node.to));\n return false;\n }\n\n if (name === \"Blockquote\") {\n // one bar per quote, however deeply it nests.\n for (let p = node.node.parent; p; p = p.parent)\n if (p.name === \"Blockquote\") return;\n const first = doc.lineAt(node.from).number;\n const last = doc.lineAt(node.to).number;\n const callout = calloutAt(doc.line(first));\n for (let n = first; n <= last; n++) {\n const line = doc.line(n);\n const classes = [\"cm-md-quote\"];\n if (n === first) classes.push(\"cm-md-quote-first\");\n if (n === last) classes.push(\"cm-md-quote-last\");\n if (callout) {\n classes.push(\"cm-md-callout\", `cm-md-callout-${callout.type}`);\n if (n === first) classes.push(\"cm-md-callout-title-line\");\n }\n decos.push(\n Decoration.line({ class: classes.join(\" \") }).range(line.from)\n );\n }\n if (callout) {\n decos.push(\n editing.has(first)\n ? calloutMarker.range(callout.from, callout.to)\n : Decoration.replace({\n widget: new CalloutTitle(callout.type, !callout.titled),\n }).range(callout.from, callout.to)\n );\n }\n return; // carry on into it for its QuoteMarks\n }\n\n if (name === \"QuoteMark\") {\n const line = doc.lineAt(node.from);\n // only the first mark on a line starts the prefix; `>>` nests.\n const before = doc.sliceString(line.from, node.from);\n if (before.trim() !== \"\") return;\n let end = node.to;\n for (;;) {\n const next = skipSpaces(state, end);\n if (doc.sliceString(next, next + 1) !== \">\") break;\n end = next + 1;\n }\n end = skipSpaces(state, end);\n decos.push(hidden.range(line.from, end));\n }\n },\n });\n }\n\n return Decoration.set(decos, true);\n}\n\nconst marginPlugin = ViewPlugin.fromClass(\n class {\n decorations: DecorationSet;\n constructor(view: EditorView) {\n this.decorations = build(view);\n }\n update(update: ViewUpdate) {\n if (\n update.docChanged ||\n update.selectionSet ||\n update.viewportChanged ||\n syntaxTree(update.startState) !== syntaxTree(update.state)\n ) {\n this.decorations = build(update.view);\n }\n }\n },\n { decorations: (v) => v.decorations }\n);\n\nconst zoomed = (length: string) => `calc(${length} * var(--markdown-zoom, 1))`;\n\nconst marginTheme = EditorView.baseTheme({\n \".cm-content\": {\n \"--markdown-hang\": zoomed(\"2.5rem\"),\n \"--markdown-list-indent\": zoomed(\"1.6rem\"),\n \"--markdown-quote-indent\": zoomed(\"1.1rem\"),\n },\n \".cm-md-hang\": {\n display: \"inline-flex\",\n justifyContent: \"flex-end\",\n alignItems: \"baseline\",\n boxSizing: \"border-box\",\n width: \"var(--markdown-hang)\",\n marginLeft: \"calc(-1 * var(--markdown-hang))\",\n paddingRight: zoomed(\"0.6rem\"),\n whiteSpace: \"pre\",\n // a heading's raw `## ` shrinks to label size so it fits the margin.\n fontSize: zoomed(\"0.8rem\"),\n color: \"var(--text-editor-line-offset-40, #999)\",\n fontWeight: \"normal\",\n fontStyle: \"normal\",\n textDecoration: \"none\",\n },\n // highlight spans inside the box (a heading's `##`) keep their own size and\n // margins otherwise, and as flex items those margins would push the line.\n \".cm-md-hang *\": {\n fontSize: \"inherit\",\n margin: \"0\",\n },\n \".cm-md-hang-number\": {\n fontSize: \"inherit\",\n color: \"inherit\",\n fontVariantNumeric: \"tabular-nums\",\n },\n \".cm-md-heading-label\": {\n fontFamily: \"var(--markdown-body-family, inherit)\",\n letterSpacing: \"0.02em\",\n },\n \".cm-md-heading-label-idle\": {\n visibility: \"hidden\",\n },\n // a list line: padded one indent per level (CodeMirror's own 6px first)\n \".cm-md-list-line\": {\n paddingLeft: \"calc(6px + var(--md-list-depth, 1) * var(--markdown-list-indent))\",\n },\n // its marker, in that padding: from the start of the indent, not hung right\n \".cm-md-list-marker\": {\n width: \"var(--markdown-list-indent)\",\n marginLeft: \"calc(-1 * var(--markdown-list-indent))\",\n justifyContent: \"flex-start\",\n paddingRight: \"0\",\n },\n \".cm-md-heading-level\": {\n fontSize: \"0.75em\",\n verticalAlign: \"-0.15em\",\n },\n \".cm-md-hang .cm-bullet\": {\n display: \"inline-block\",\n width: \"0.5em\",\n height: \"0.5em\",\n // in the box's left, centred under where a number's first digit sits\n marginLeft: \"0.15em\",\n borderRadius: \"50%\",\n // theming's list marker colour (the primary accent, as ink)\n background:\n \"var(--syntax-list-marker, var(--text-editor-primary-text, currentColor))\",\n alignSelf: \"center\",\n },\n \".cm-md-hang .cm-task\": {\n margin: \"0\",\n },\n // a quote: its bar on the body's column, its text one quote indent in\n \".cm-md-quote\": {\n position: \"relative\",\n paddingLeft: \"calc(6px + var(--markdown-quote-indent))\",\n },\n // code sits on a faint step up the editor's fill ramp: inline, a pill;\n // a block, a rounded panel with a little room inside\n \".cm-md-code\": {\n fontFamily: \"var(--text-editor-family-code)\",\n background: \"var(--text-editor-fill-offset-10, rgb(0 0 0 / 0.04))\",\n paddingInline: `calc(6px + ${zoomed(\"0.75rem\")})`,\n },\n \".cm-md-code-first\": {\n paddingTop: zoomed(\"0.5rem\"),\n borderTopLeftRadius: \"6px\",\n borderTopRightRadius: \"6px\",\n },\n \".cm-md-code-last\": {\n paddingBottom: zoomed(\"0.5rem\"),\n borderBottomLeftRadius: \"6px\",\n borderBottomRightRadius: \"6px\",\n },\n \".cm-md-inline-code\": {\n background: \"var(--text-editor-fill-offset-10, rgb(0 0 0 / 0.04))\",\n borderRadius: \"4px\",\n padding: \"0.1em 0.3em\",\n boxDecorationBreak: \"clone\",\n WebkitBoxDecorationBreak: \"clone\",\n },\n\n // GitHub-style callouts. Colours from theming's --studio-callout-* (the\n // accent: bar) and --text-editor-callout-*-text/-fill (title ink, box\n // tint), with fallbacks for running without the theme.\n ...Object.fromEntries(\n (Object.keys(CALLOUTS) as CalloutType[]).map((type) => {\n const fallback = { note: \"#36e\", tip: \"#1a7f37\", important: \"#8250df\", warning: \"#d4a72c\", caution: \"#d1242f\" }[type];\n return [\n `.cm-md-callout-${type}`,\n {\n \"--md-callout\": `var(--studio-callout-${type}, ${fallback})`,\n \"--md-callout-text\": `var(--text-editor-callout-${type}-text, color-mix(in oklch, var(--md-callout), currentColor 35%))`,\n \"--md-callout-fill\": `var(--text-editor-callout-${type}-fill, color-mix(in oklch, var(--md-callout) 9%, transparent))`,\n },\n ];\n })\n ),\n \".cm-md-callout\": {\n // the body reads as body text, not as a quote: the theme's quote styling\n // (italic, the punctuation grey) comes through these variables.\n \"--syntax-quote\": \"var(--text-editor-line)\",\n \"--syntax-style-quote\": \"normal\",\n \"--syntax-weight-quote\": \"normal\",\n \"--syntax-fill-quote\": \"transparent\",\n // a stacking context, so the tint drawn behind the text (z-index -1)\n // stays above the editor's own background.\n isolation: \"isolate\",\n paddingRight: zoomed(\"0.75rem\"),\n },\n // (doubled up to outrank the plain quote bar's rule further down)\n \".cm-md-quote.cm-md-callout::before\": {\n background: \"var(--md-callout)\",\n opacity: \"1\",\n },\n \".cm-md-callout::after\": {\n content: '\"\"',\n position: \"absolute\",\n zIndex: \"-1\",\n left: \"6px\",\n right: \"0\",\n top: \"0\",\n bottom: \"0\",\n background: \"var(--md-callout-fill)\",\n },\n \".cm-md-callout.cm-md-quote-first\": {\n paddingTop: zoomed(\"0.5rem\"),\n },\n \".cm-md-callout.cm-md-quote-last\": {\n paddingBottom: zoomed(\"0.5rem\"),\n },\n \".cm-md-callout.cm-md-quote-first::before, .cm-md-callout.cm-md-quote-first::after\": {\n top: \"0\",\n borderTopRightRadius: \"6px\",\n },\n \".cm-md-callout.cm-md-quote-last::before, .cm-md-callout.cm-md-quote-last::after\": {\n bottom: \"0\",\n borderBottomRightRadius: \"6px\",\n },\n \".cm-md-callout.cm-md-quote-first::before\": { borderTopRightRadius: \"0\" },\n \".cm-md-callout.cm-md-quote-last::before\": { borderBottomRightRadius: \"0\" },\n \".cm-md-callout-title-line\": {\n color: \"var(--md-callout-text)\",\n fontWeight: \"600\",\n },\n \".cm-md-callout-title\": {\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: \"0.4em\",\n color: \"var(--md-callout-text)\",\n fontWeight: \"600\",\n marginRight: \"0.4em\",\n },\n \".cm-md-callout-title svg\": {\n width: \"1em\",\n height: \"1em\",\n flex: \"none\",\n },\n // the raw `[!NOTE]`, on the caret's line. it parses as a reference link,\n // so the highlighter's link colour and underline are undone inside it.\n \".cm-md-callout-marker, .cm-md-callout-marker *\": {\n color: \"var(--md-callout-text)\",\n textDecoration: \"none\",\n },\n \".cm-md-callout-marker\": {\n fontFamily: \"var(--text-editor-family-code)\",\n fontSize: \"0.9em\",\n },\n \".cm-md-quote::before\": {\n content: '\"\"',\n position: \"absolute\",\n // on the body's column (past CodeMirror's own 6px line padding)\n left: \"6px\",\n top: \"0\",\n bottom: \"0\",\n width: \"3px\",\n background: \"var(--syntax-quote-bar, var(--studio-link, currentColor))\",\n opacity: \"0.6\",\n },\n \".cm-md-quote-first::before\": {\n top: \"0.2em\",\n borderTopLeftRadius: \"3px\",\n borderTopRightRadius: \"3px\",\n },\n \".cm-md-quote-last::before\": {\n bottom: \"0.2em\",\n borderBottomLeftRadius: \"3px\",\n borderBottomRightRadius: \"3px\",\n },\n});\n\nexport const margin = [marginPlugin, marginTheme];\n", "import { syntaxTree } from \"@codemirror/language\";\nimport {\n EditorSelection,\n type EditorState,\n Prec,\n type Line,\n type StateCommand,\n} from \"@codemirror/state\";\nimport { keymap } from \"@codemirror/view\";\n\n/**\n * Headings behave like the block type they are in lush and rich, not like\n * text that starts with `#`. The `# ` is a block prefix (prefix.ts: never\n * shown, never holds the caret, Backspace at the text's start removes it);\n * this adds what's particular to headings:\n *\n * - Enter at the start of a heading pushes it down, leaving a line above.\n * - Mod-Shift-h / Mod-Shift-j make a heading / subheading (lush's keys), and\n * Mod-Shift-b makes body text. Mod-Alt-1\u20263 and Mod-Alt-0 do the same.\n * (lush's Title key, Mod-Shift-t, belongs to the browser.)\n */\n\nexport type HeadingPrefix = { from: number; to: number; level: number };\n\n/** The hidden `# ` at the start of `line`, if the line is an ATX heading. */\nexport function headingPrefix(\n state: EditorState,\n line: Line\n): HeadingPrefix | null {\n for (\n let node: ReturnType<ReturnType<typeof syntaxTree>[\"resolveInner\"]> | null =\n syntaxTree(state).resolveInner(line.from, 1);\n node;\n node = node.parent\n ) {\n const m = /^ATXHeading(\\d)$/.exec(node.name);\n if (!m) continue;\n if (state.doc.lineAt(node.from).number !== line.number) return null;\n const mark = node.firstChild;\n if (!mark || mark.name !== \"HeaderMark\") return null;\n let to = mark.to;\n while (to < line.to && state.doc.sliceString(to, to + 1) === \" \") to++;\n return { from: line.from, to, level: Number(m[1]) };\n }\n return null;\n}\n\n/** Each line touched by the selection, once. */\nfunction selectedLines(state: EditorState) {\n const seen = new Set<number>();\n const lines: Line[] = [];\n for (const r of state.selection.ranges) {\n for (\n let n = state.doc.lineAt(r.from).number;\n n <= state.doc.lineAt(r.to).number;\n n++\n ) {\n if (seen.has(n)) continue;\n seen.add(n);\n lines.push(state.doc.line(n));\n }\n }\n return lines;\n}\n\n/**\n * Make the selected lines headings of `level`, or body text for level 0.\n * If every line is already that level it toggles them back to body text.\n */\nexport const setHeading =\n (level: number): StateCommand =>\n ({ state, dispatch }) => {\n const lines = selectedLines(state);\n const prefixes = lines.map((line) => headingPrefix(state, line));\n const already =\n level > 0 && prefixes.every((p) => p && p.level === level);\n const target = already ? 0 : level;\n const insert = target ? \"#\".repeat(target) + \" \" : \"\";\n const changes = lines.map((line, i) => {\n const p = prefixes[i];\n return { from: line.from, to: p ? p.to : line.from, insert };\n });\n dispatch(\n state.update({\n changes,\n scrollIntoView: true,\n userEvent: \"input.format\",\n })\n );\n return true;\n };\n\n/** The prefix of the heading whose text the (only, empty) cursor starts. */\nfunction atHeadingStart(state: EditorState) {\n const sel = state.selection;\n if (sel.ranges.length !== 1 || !sel.main.empty) return null;\n const line = state.doc.lineAt(sel.main.head);\n const prefix = headingPrefix(state, line);\n return prefix && sel.main.head === prefix.to ? prefix : null;\n}\n\nconst enter: StateCommand = ({ state, dispatch }) => {\n const prefix = atHeadingStart(state);\n if (!prefix) return false;\n const line = state.doc.lineAt(prefix.from);\n // an empty heading: let the usual Enter make a new line below it.\n if (prefix.to >= line.to) return false;\n dispatch(\n state.update({\n changes: { from: line.from, insert: \"\\n\" },\n selection: EditorSelection.cursor(prefix.to + 1),\n scrollIntoView: true,\n userEvent: \"input\",\n })\n );\n return true;\n};\n\nexport const headings = [\n // above lang-markdown's own (Prec.high) Enter.\n Prec.highest(\n keymap.of([\n { key: \"Enter\", run: enter },\n { key: \"Mod-Shift-h\", run: setHeading(2), preventDefault: true },\n { key: \"Mod-Shift-j\", run: setHeading(3), preventDefault: true },\n { key: \"Mod-Shift-b\", run: setHeading(0), preventDefault: true },\n { key: \"Mod-Alt-1\", run: setHeading(1), preventDefault: true },\n { key: \"Mod-Alt-2\", run: setHeading(2), preventDefault: true },\n { key: \"Mod-Alt-3\", run: setHeading(3), preventDefault: true },\n { key: \"Mod-Alt-0\", run: setHeading(0), preventDefault: true },\n ])\n ),\n];\n", "import { ensureSyntaxTree, syntaxTree } from \"@codemirror/language\";\nimport { indentMore } from \"@codemirror/commands\";\nimport {\n type ChangeSpec,\n type EditorState,\n type Range,\n Prec,\n StateEffect,\n StateField,\n} from \"@codemirror/state\";\nimport {\n Decoration,\n EditorView,\n ViewPlugin,\n WidgetType,\n keymap,\n type Command,\n type DecorationSet,\n} from \"@codemirror/view\";\n\n/**\n * List tidying, from a menu on a list's margin marker (the number, bullet or\n * checkbox that margin.ts hangs there). Right-clicking the text itself keeps\n * the browser's own menu, with its spelling and clipboard items.\n *\n * - Fix numbering: rewrite an ordered list's numbers to the ones it renders\n * as (margin.ts already shows those; this makes the source agree).\n * - Move done to bottom / Clear done: for task lists.\n * - Hide done / Show done: folds every done task away, in this editor only.\n */\n\ntype SyntaxNode = ReturnType<ReturnType<typeof syntaxTree>[\"resolveInner\"]>;\n\n/** The innermost list holding `pos`. */\nexport function listAt(state: EditorState, pos: number): SyntaxNode | null {\n for (\n let n: SyntaxNode | null = syntaxTree(state).resolveInner(pos, 1);\n n;\n n = n.parent\n ) {\n if (n.name === \"BulletList\" || n.name === \"OrderedList\") return n;\n }\n return null;\n}\n\nconst items = (list: SyntaxNode) => list.getChildren(\"ListItem\");\n\n/** `true`/`false` for a ticked/open task item, `null` for a plain item. */\nfunction done(state: EditorState, item: SyntaxNode): boolean | null {\n const marker = item.getChild(\"Task\")?.getChild(\"TaskMarker\");\n if (!marker) return null;\n return state.doc.sliceString(marker.from + 1, marker.to - 1).trim() !== \"\";\n}\n\n/** An item as written: from the start of its first line (so its indent comes\n * with it) to the end of its last nested line. */\nconst startOf = (state: EditorState, item: SyntaxNode) =>\n state.doc.lineAt(item.from).from;\nconst textOf = (state: EditorState, item: SyntaxNode) =>\n state.doc.sliceString(startOf(state, item), item.to);\n\n/**\n * Changes that delete `gone` (indexes into `all`) along with the line breaks\n * between them, without overlapping: a run of deleted items takes the gap up\n * to the next kept item, or, at the end of the list, the gap after the kept\n * item before it.\n */\nfunction deleteItems(\n state: EditorState,\n all: SyntaxNode[],\n gone: Set<number>\n): ChangeSpec[] {\n const changes: ChangeSpec[] = [];\n for (let i = 0; i < all.length; ) {\n if (!gone.has(i)) {\n i++;\n continue;\n }\n let j = i;\n while (j + 1 < all.length && gone.has(j + 1)) j++;\n if (j + 1 < all.length) {\n changes.push({ from: startOf(state, all[i]), to: startOf(state, all[j + 1]) });\n } else if (i > 0) {\n changes.push({ from: all[i - 1].to, to: all[j].to });\n } else {\n changes.push({ from: startOf(state, all[i]), to: all[j].to });\n }\n i = j + 1;\n }\n return changes;\n}\n\n/** Rewrite an ordered list's numbers to count up from its first. */\nexport function renumber(state: EditorState, list: SyntaxNode): ChangeSpec[] {\n const changes: ChangeSpec[] = [];\n const all = items(list);\n const firstMark = all[0]?.getChild(\"ListMark\");\n if (!firstMark) return changes;\n // a list inside a list item starts again from 1; a top-level one keeps its\n // first number (`5.` there is usually on purpose).\n const nested = list.parent?.name === \"ListItem\";\n const start = nested\n ? 1\n : parseInt(state.doc.sliceString(firstMark.from, firstMark.to), 10) || 0;\n all.forEach((item, i) => {\n const mark = item.getChild(\"ListMark\");\n if (!mark) return;\n const text = state.doc.sliceString(mark.from, mark.to);\n const want = `${start + i}${text.slice(-1)}`;\n if (want === text) return;\n changes.push({ from: mark.from, to: mark.to, insert: want });\n // the item's later lines are indented to its text; keep them there, or\n // `9.`\u2192`10.` would un-nest whatever's under it.\n const shift = want.length - text.length;\n const first = state.doc.lineAt(item.from).number;\n const last = state.doc.lineAt(item.to).number;\n for (let n = first + 1; n <= last; n++) {\n const line = state.doc.line(n);\n if (shift > 0) {\n if (line.length) changes.push({ from: line.from, insert: \" \".repeat(shift) });\n } else {\n const spaces = /^ */.exec(line.text)![0].length;\n const cut = Math.min(spaces, -shift);\n if (cut) changes.push({ from: line.from, to: line.from + cut });\n }\n }\n });\n return changes;\n}\n\nexport function needsRenumber(state: EditorState, list: SyntaxNode) {\n return list.name === \"OrderedList\" && renumber(state, list).length > 0;\n}\n\n/** Remove a list's done tasks. */\nexport function clearDone(state: EditorState, list: SyntaxNode): ChangeSpec[] {\n const all = items(list);\n const gone = new Set(all.flatMap((it, i) => (done(state, it) ? [i] : [])));\n return deleteItems(state, all, gone);\n}\n\n/**\n * Move a list's done tasks below its open ones, keeping each group's order.\n * Only the done tasks above the last open one move; it's the minimal edit, so\n * someone typing elsewhere in the list keeps their place.\n */\nexport function moveDoneDown(\n state: EditorState,\n list: SyntaxNode\n): ChangeSpec[] {\n const all = items(list);\n let lastOpen = -1;\n all.forEach((it, i) => {\n if (done(state, it) === false || done(state, it) === null) lastOpen = i;\n });\n const moving = new Set<number>();\n for (let i = 0; i < lastOpen; i++) if (done(state, all[i])) moving.add(i);\n if (!moving.size) return [];\n const texts = [...moving].map((i) => textOf(state, all[i]));\n return [\n ...deleteItems(state, all, moving),\n { from: all[lastOpen].to, insert: \"\\n\" + texts.join(\"\\n\") },\n ];\n}\n\nconst countDone = (state: EditorState, list: SyntaxNode) =>\n items(list).filter((it) => done(state, it)).length;\n\n/**\n * Tab on an ordered item indents it as usual, and if that makes it the first\n * item of a new list inside the one above, numbers it 1 \u2014 `4.` tabbed in\n * under `3.` is the start of a sub-list, not its fourth item.\n */\n/** The first non-space on a line: where its list marker is, if any. */\nconst textStart = (line: { from: number; text: string }) =>\n line.from + /^\\s*/.exec(line.text)![0].length;\n\nconst tabInOrderedList: Command = (view) => {\n const before = view.state;\n const line = before.doc.lineAt(before.selection.main.head);\n const was = listAt(before, textStart(line));\n if (!was || was.name !== \"OrderedList\" || before.selection.ranges.length !== 1)\n return false;\n if (!indentMore(view)) return false;\n const { state } = view;\n const now = state.doc.lineAt(state.selection.main.head);\n ensureSyntaxTree(state, now.to, 100);\n const list = listAt(state, textStart(now));\n const first = list && items(list)[0];\n const mark = first?.getChild(\"ListMark\");\n if (\n !list ||\n !mark ||\n list.name !== \"OrderedList\" ||\n list.parent?.name !== \"ListItem\" ||\n state.doc.lineAt(first!.from).number !== now.number\n )\n return true;\n const text = state.doc.sliceString(mark.from, mark.to);\n const want = `1${text.slice(-1)}`;\n if (text !== want)\n view.dispatch({\n changes: { from: mark.from, to: mark.to, insert: want },\n userEvent: \"input.renumber\",\n });\n return true;\n};\n\n// ---------------------------------------------------------------------------\n// hiding done tasks\n\nconst setHideDone = StateEffect.define<boolean>();\n\nclass HiddenDone extends WidgetType {\n constructor(readonly count: number) {\n super();\n }\n eq(other: HiddenDone) {\n return other.count === this.count;\n }\n toDOM(view: EditorView) {\n const button = document.createElement(\"button\");\n button.type = \"button\";\n button.className = \"cm-md-hidden-done\";\n button.textContent = `${this.count} done`;\n button.title = \"Show done tasks\";\n button.addEventListener(\"mousedown\", (event) => {\n event.preventDefault();\n view.dispatch({ effects: setHideDone.of(false) });\n });\n return button;\n }\n ignoreEvent() {\n return true;\n }\n}\n\n/**\n * Every run of done tasks folded away, and one \"3 done\" button at the end of\n * each list that had any (in place of its last run, if that's where it ends).\n */\nfunction hiddenDone(state: EditorState): DecorationSet {\n const decos: Range<Decoration>[] = [];\n const hide = Decoration.replace({ block: true });\n // a done item hides its nested items with it; don't hide them twice.\n let hiddenTo = -1;\n syntaxTree(state).iterate({\n enter: (node) => {\n if (node.from < hiddenTo) return false;\n if (node.name !== \"BulletList\" && node.name !== \"OrderedList\") return;\n const all = items(node.node);\n const total = all.filter((it) => done(state, it)).length;\n if (!total) return;\n const button = new HiddenDone(total);\n for (let i = 0; i < all.length; ) {\n if (!done(state, all[i])) {\n i++;\n continue;\n }\n let j = i;\n while (j + 1 < all.length && done(state, all[j + 1])) j++;\n const last = j === all.length - 1;\n decos.push(\n (last ? Decoration.replace({ block: true, widget: button }) : hide).range(\n startOf(state, all[i]),\n all[j].to\n )\n );\n hiddenTo = Math.max(hiddenTo, all[j].to);\n i = j + 1;\n }\n const end = all[all.length - 1];\n if (!done(state, end)) {\n decos.push(\n Decoration.widget({ block: true, side: 1, widget: button }).range(end.to)\n );\n }\n },\n });\n return Decoration.set(decos, true);\n}\n\nconst hideDoneField = StateField.define<{ on: boolean; decos: DecorationSet }>({\n create: () => ({ on: false, decos: Decoration.none }),\n update(value, tr) {\n let on = value.on;\n for (const e of tr.effects) if (e.is(setHideDone)) on = e.value;\n if (!on) return { on, decos: Decoration.none };\n if (on === value.on && !tr.docChanged && syntaxTree(tr.startState) === syntaxTree(tr.state))\n return value;\n return { on, decos: hiddenDone(tr.state) };\n },\n provide: (f) => [\n EditorView.decorations.from(f, (v) => v.decos),\n EditorView.atomicRanges.from(f, (v) => () => v.decos),\n ],\n});\n\nexport const isHidingDone = (state: EditorState) =>\n state.field(hideDoneField, false)?.on ?? false;\n\n// ---------------------------------------------------------------------------\n// the menu\n\ntype Item = { label: string; run: () => void; disabled?: boolean };\n\n/**\n * What the menu offers for the list at `pos`. An ordered list always offers\n * Fix numbering and a task list always offers all its task actions, greyed\n * out when there's nothing for them to do: a menu that only sometimes opens\n * reads as one that doesn't work.\n */\nfunction menuItems(view: EditorView, pos: number): Item[] {\n const { state } = view;\n const list = listAt(state, pos);\n if (!list) return [];\n const apply = (changes: ChangeSpec[], userEvent: string) => () =>\n view.dispatch({ changes, userEvent });\n const out: Item[] = [];\n if (list.name === \"OrderedList\") {\n const changes = renumber(state, list);\n out.push({\n label: \"Fix numbering\",\n run: apply(changes, \"input.renumber\"),\n disabled: !changes.length,\n });\n }\n const hasTasks = items(list).some((it) => done(state, it) !== null);\n if (hasTasks) {\n const n = countDone(state, list);\n const moves = moveDoneDown(state, list);\n out.push({\n label: \"Move done to bottom\",\n run: apply(moves, \"input.move\"),\n disabled: !moves.length,\n });\n out.push({\n label: n ? `Clear done (${n})` : \"Clear done\",\n run: apply(clearDone(state, list), \"delete.clear-done\"),\n disabled: !n,\n });\n const hiding = isHidingDone(state);\n out.push({\n label: hiding ? \"Show done\" : \"Hide done\",\n run: () => view.dispatch({ effects: setHideDone.of(!hiding) }),\n });\n }\n return out;\n}\n\nfunction openMenu(view: EditorView, x: number, y: number, entries: Item[]) {\n const menu = document.createElement(\"div\");\n menu.className = \"cm-md-menu\";\n menu.setAttribute(\"role\", \"menu\");\n menu.style.left = `${x}px`;\n menu.style.top = `${y}px`;\n const buttons = entries.map(({ label, run, disabled }) => {\n const b = document.createElement(\"button\");\n b.type = \"button\";\n b.className = \"cm-md-menu-item\";\n b.setAttribute(\"role\", \"menuitem\");\n b.textContent = label;\n b.disabled = !!disabled;\n b.addEventListener(\"click\", () => {\n close();\n run();\n view.focus();\n });\n return b;\n });\n menu.append(...buttons);\n\n const outside = (e: Event) => {\n if (!menu.contains(e.target as Node)) close();\n };\n const keys = (e: KeyboardEvent) => {\n const i = buttons.indexOf(document.activeElement as HTMLButtonElement);\n if (e.key === \"Escape\") {\n e.preventDefault();\n close();\n view.focus();\n } else if (e.key === \"ArrowDown\" || e.key === \"ArrowUp\") {\n e.preventDefault();\n const step = e.key === \"ArrowDown\" ? 1 : -1;\n const live = buttons.filter((b) => !b.disabled);\n const at = live.indexOf(buttons[i]);\n live[(at + step + live.length) % live.length]?.focus();\n }\n };\n function close() {\n if (menu.matches?.(\":popover-open\")) menu.hidePopover();\n menu.remove();\n window.removeEventListener(\"pointerdown\", outside, true);\n window.removeEventListener(\"scroll\", close, true);\n window.removeEventListener(\"blur\", close);\n menu.removeEventListener(\"keydown\", keys);\n }\n window.addEventListener(\"pointerdown\", outside, true);\n window.addEventListener(\"scroll\", close, true);\n window.addEventListener(\"blur\", close);\n menu.addEventListener(\"keydown\", keys);\n\n view.dom.appendChild(menu);\n // In the top layer, so nothing the editor sits in can move it (a\n // transformed or contained ancestor makes `position: fixed` relative to\n // itself), clip it, or draw over it (the app's side panels did all three).\n if (typeof menu.showPopover === \"function\") {\n menu.popover = \"manual\";\n menu.showPopover();\n }\n // where it actually landed, put right: covers browsers without popovers.\n let r = menu.getBoundingClientRect();\n if (r.left !== x || r.top !== y) {\n menu.style.left = `${x + (x - r.left)}px`;\n menu.style.top = `${y + (y - r.top)}px`;\n r = menu.getBoundingClientRect();\n }\n // and on screen\n const shift = (prop: \"left\" | \"top\", by: number) =>\n (menu.style[prop] = `${parseFloat(menu.style[prop]) - by}px`);\n if (r.right > window.innerWidth) shift(\"left\", r.width);\n if (r.bottom > window.innerHeight) shift(\"top\", r.height);\n buttons.find((b) => !b.disabled)?.focus();\n return close;\n}\n\n// a plain listener, not `eventHandlers`: the markers are mostly widgets, and\n// CodeMirror doesn't pass events inside widgets on to its handlers.\nconst menuPlugin = ViewPlugin.fromClass(\n class {\n close: (() => void) | null = null;\n constructor(readonly view: EditorView) {\n view.contentDOM.addEventListener(\"contextmenu\", this.open);\n }\n open = (event: MouseEvent) => {\n const { view } = this;\n const target = event.target as HTMLElement | null;\n const marker = target?.closest(\".cm-md-hang, .cm-md-hidden-done\");\n if (!marker || !view.contentDOM.contains(marker)) return;\n const entries = menuItems(view, view.posAtDOM(marker));\n if (!entries.length) return;\n event.preventDefault();\n this.close?.();\n this.close = openMenu(view, event.clientX, event.clientY, entries);\n };\n destroy() {\n this.view.contentDOM.removeEventListener(\"contextmenu\", this.open);\n this.close?.();\n }\n }\n);\n\nconst listsTheme = EditorView.baseTheme({\n \".cm-md-menu\": {\n position: \"fixed\",\n // undo the popover defaults (centred, inset 0)\n inset: \"auto\",\n margin: \"0\",\n zIndex: \"var(--studio-layer-popover, 4000)\",\n display: \"flex\",\n flexDirection: \"column\",\n minWidth: \"12rem\",\n padding: \"4px\",\n borderRadius: \"6px\",\n background: \"var(--studio-fill, white)\",\n color: \"var(--studio-line, black)\",\n border:\n \"var(--studio-border-width, 1px) var(--studio-border-style, solid) var(--studio-fill-offset-30, #ddd)\",\n boxShadow: \"var(--studio-shadow-md, 0 4px 6px -1px rgb(0 0 0 / 0.1))\",\n fontFamily: \"var(--studio-family-ui, system-ui, sans-serif)\",\n fontSize: \"0.8rem\",\n },\n \".cm-md-menu-item\": {\n all: \"unset\",\n padding: \"8px 12px\",\n borderRadius: \"4px\",\n cursor: \"var(--studio-cursor-default, default)\",\n },\n \".cm-md-menu-item:disabled\": {\n opacity: \"0.45\",\n },\n \".cm-md-menu-item:not(:disabled):hover, .cm-md-menu-item:focus-visible\": {\n background: \"var(--studio-fill-offset-20, #eee)\",\n },\n \".cm-md-hidden-done\": {\n all: \"unset\",\n display: \"block\",\n paddingInline: \"6px 2px\",\n fontSize: \"0.8rem\",\n color: \"var(--text-editor-line-offset-40, #999)\",\n cursor: \"var(--studio-cursor-pointer, pointer)\",\n },\n \".cm-md-hidden-done:hover\": {\n textDecoration: \"underline\",\n },\n});\n\nexport const lists = [\n hideDoneField,\n menuPlugin,\n listsTheme,\n // ahead of indentWithTab in the main keymap\n Prec.high(keymap.of([{ key: \"Tab\", run: tabInOrderedList }])),\n];\n", "import { syntaxTree } from \"@codemirror/language\";\nimport {\n EditorSelection,\n EditorState,\n Prec,\n type Line,\n type StateCommand,\n} from \"@codemirror/state\";\nimport { EditorView, keymap } from \"@codemirror/view\";\n\n/**\n * A line's block prefix: the markup at its start that says what kind of block\n * it is \u2014 `# `, `> `, `- `, `1. `, `- [ ] `, and any mix and indentation of\n * those (`> - [ ] `). margin.ts never shows it as text: it draws a label, a\n * dot, a number, a checkbox or a bar in its place. So, as in lush and rich:\n *\n * - the caret never goes inside it (moving left out of the text goes on to\n * the line above, rather than sticking);\n * - Backspace at the start of the text takes off the innermost marker\n * (`- [ ] x` \u2192 `- x` \u2192 `x`; `# x` \u2192 `x`; `> x` \u2192 `x`);\n * - Delete at the end of the line before pulls in the text, not the markup;\n * - typing a marker at the start of the text replaces the line's own\n * (`1. ` then `2. ` is a `2.` item, not a list inside a list; `## ` on a\n * heading changes its level).\n */\n\nexport type Prefix = {\n from: number;\n to: number;\n /** names of the marker nodes, outermost first */\n marks: string[];\n /** where each marker starts; Backspace deletes from the last one to `to` */\n starts: number[];\n};\n\nconst MARKS = new Set([\"QuoteMark\", \"ListMark\", \"HeaderMark\", \"TaskMarker\"]);\n\nfunction skipSpaces(state: EditorState, pos: number, end: number) {\n while (pos < end && /[ \\t]/.test(state.doc.sliceString(pos, pos + 1))) pos++;\n return pos;\n}\n\n/** The block prefix at the start of `line`, or null if it has none. */\nexport function blockPrefix(state: EditorState, line: Line): Prefix | null {\n const tree = syntaxTree(state);\n const marks: string[] = [];\n const starts: number[] = [];\n let pos = line.from;\n for (;;) {\n const at = skipSpaces(state, pos, line.to);\n const node = tree.resolveInner(at, 1);\n if (!MARKS.has(node.name) || node.from !== at || node.to <= at) break;\n // a closing `##` or a `>` mid-line isn't a prefix.\n if (doc(state, pos, at).trim() !== \"\") break;\n marks.push(node.name);\n starts.push(at);\n pos = node.to;\n }\n if (!marks.length) return null;\n return { from: line.from, to: skipSpaces(state, pos, line.to), marks, starts };\n}\n\nconst doc = (state: EditorState, from: number, to: number) =>\n state.doc.sliceString(from, to);\n\n/** Keep empty cursors out of block prefixes. */\nconst keepOut = EditorState.transactionFilter.of((tr) => {\n if (!tr.selection) return tr;\n const { state } = tr;\n const before = tr.startState.selection;\n let moved = false;\n const ranges = tr.selection.ranges.map((r, i) => {\n if (!r.empty) return r;\n const line = state.doc.lineAt(r.head);\n const prefix = blockPrefix(state, line);\n if (!prefix || r.head >= prefix.to) return r;\n const old = before.ranges[i] ?? before.main;\n const leaving =\n !tr.docChanged && old.empty && old.head === prefix.to && line.from > 0;\n moved = true;\n return EditorSelection.cursor(leaving ? line.from - 1 : prefix.to);\n });\n if (!moved) return tr;\n return [\n tr,\n {\n selection: EditorSelection.create(ranges, tr.selection.mainIndex),\n sequential: true,\n },\n ];\n});\n\n/** The prefix whose end the only, empty, cursor sits at. */\nfunction atTextStart(state: EditorState) {\n const sel = state.selection;\n if (sel.ranges.length !== 1 || !sel.main.empty) return null;\n const prefix = blockPrefix(state, state.doc.lineAt(sel.main.head));\n return prefix && sel.main.head === prefix.to ? prefix : null;\n}\n\nconst backspace: StateCommand = ({ state, dispatch }) => {\n const prefix = atTextStart(state);\n if (!prefix) return false;\n dispatch(\n state.update({\n changes: { from: prefix.starts.at(-1)!, to: prefix.to },\n selection: EditorSelection.cursor(prefix.starts.at(-1)!),\n userEvent: \"delete.backward\",\n })\n );\n return true;\n};\n\nconst deleteForward: StateCommand = ({ state, dispatch }) => {\n const sel = state.selection;\n if (sel.ranges.length !== 1 || !sel.main.empty) return false;\n const line = state.doc.lineAt(sel.main.head);\n if (sel.main.head !== line.to || line.number >= state.doc.lines) return false;\n const prefix = blockPrefix(state, state.doc.line(line.number + 1));\n if (!prefix) return false;\n dispatch(\n state.update({\n changes: { from: line.to, to: prefix.to },\n userEvent: \"delete.forward\",\n })\n );\n return true;\n};\n\nconst inCode = (state: EditorState, pos: number) => {\n for (\n let n: ReturnType<ReturnType<typeof syntaxTree>[\"resolveInner\"]> | null =\n syntaxTree(state).resolveInner(pos, -1);\n n;\n n = n.parent\n ) {\n if (/^(FencedCode|CodeBlock|CodeText|InlineCode)$/.test(n.name)) return true;\n }\n return false;\n};\n\n/** A marker that, typed at the start of a list item, replaces its own. */\nconst LIST_OR_HEADING = /^(\\d{1,9}[.)]|[-*+]|#{1,6})$/;\n/** On a heading only `#`s do: `## 1. Introduction` is a heading. */\nconst HEADING = /^#{1,6}$/;\n\n/**\n * Typing a space after a marker at the start of a list item's or heading's\n * text swaps the line's innermost marker for the typed one. Quotes are left\n * alone: `> - ` is a list in a quote, which is what you meant.\n */\nconst replaceMarker = EditorView.inputHandler.of((view, from, to, text) => {\n if (text !== \" \" || from !== to) return false;\n const { state } = view;\n const line = state.doc.lineAt(from);\n const prefix = blockPrefix(state, line);\n if (!prefix || inCode(state, from)) return false;\n const { marks, starts } = prefix;\n let typed = doc(state, prefix.to, from);\n let mine = marks.length - 1; // the marker the typed one replaces\n if (!typed && prefix.to === from && marks.length > 1) {\n // the parser may already have taken what was typed for a marker of its\n // own (`1. 2.` is a list in a list; `# #` a heading's closing mark).\n typed = doc(state, starts[mine], from);\n mine--;\n }\n if (!typed || marks[mine] === \"QuoteMark\") return false;\n // a task's box goes with its bullet.\n if (marks[mine] === \"TaskMarker\" && marks[mine - 1] === \"ListMark\") mine--;\n const ok = marks[mine] === \"HeaderMark\" ? HEADING : LIST_OR_HEADING;\n if (!ok.test(typed)) return false;\n view.dispatch({\n changes: { from: starts[mine], to: from, insert: typed + \" \" },\n selection: EditorSelection.cursor(starts[mine] + typed.length + 1),\n userEvent: \"input.type\",\n });\n return true;\n});\n\nexport const prefixes = [\n keepOut,\n replaceMarker,\n // above lang-markdown's own (Prec.high) Backspace.\n Prec.highest(\n keymap.of([\n { key: \"Backspace\", run: backspace },\n { key: \"Delete\", run: deleteForward },\n ])\n ),\n];\n", "import { EditorSelection, Prec } from \"@codemirror/state\";\nimport { cursorLineDown, cursorLineUp } from \"@codemirror/commands\";\nimport { EditorView, keymap, type Command } from \"@codemirror/view\";\n\n/**\n * Up then Down comes back to where you were.\n *\n * CodeMirror keeps the caret's goal as a pixel column. That's right for plain\n * text, but here leaving a line can change its width \u2014 a link the caret was\n * in folds back to just its text, a quote loses its `>` \u2014 so the same pixel\n * column lands on a different character on the way back. Through a run of\n * Up/Down presses this remembers the character offset on each line the caret\n * passed through, and goes back to it on returning to that line. Any other\n * move, or an edit, starts afresh.\n */\n\ntype Streak = {\n /** line number \u2192 where the caret was on it */\n visited: Map<number, number>;\n /** where the last vertical move left the caret; anything else resets */\n head: number;\n doc: EditorView[\"state\"][\"doc\"];\n};\n\nconst streaks = new WeakMap<EditorView, Streak>();\n\nexport const vertical =\n (move: Command): Command =>\n (view) => {\n const { state } = view;\n const sel = state.selection;\n if (sel.ranges.length !== 1 || !sel.main.empty) return move(view);\n\n let streak = streaks.get(view);\n if (!streak || streak.head !== sel.main.head || streak.doc !== state.doc) {\n streak = { visited: new Map(), head: sel.main.head, doc: state.doc };\n }\n const from = state.doc.lineAt(sel.main.head).number;\n if (!streak.visited.has(from)) streak.visited.set(from, sel.main.head);\n\n if (!move(view)) return false;\n\n const now = view.state.selection.main;\n const to = view.state.doc.lineAt(now.head).number;\n // moving between the rows of one wrapped line is just a move: only\n // arriving on a different line goes back to where the caret was on it.\n const back = to !== from ? streak.visited.get(to) : undefined;\n if (to === from) streak.visited.set(to, now.head);\n if (back !== undefined && back !== now.head && view.state.doc === streak.doc) {\n view.dispatch({\n selection: EditorSelection.cursor(back),\n scrollIntoView: true,\n userEvent: \"select\",\n });\n }\n streak.head = view.state.selection.main.head;\n streak.doc = view.state.doc;\n streaks.set(view, streak);\n return true;\n };\n\n// above the default keymap's own Up/Down.\nexport const verticalMemory = Prec.high(\n keymap.of([\n { key: \"ArrowUp\", run: vertical(cursorLineUp) },\n { key: \"ArrowDown\", run: vertical(cursorLineDown) },\n { mac: \"Ctrl-p\", run: vertical(cursorLineUp) },\n { mac: \"Ctrl-n\", run: vertical(cursorLineDown) },\n ])\n);\n", "import { Prec } from \"@codemirror/state\";\nimport { EditorView, keymap } from \"@codemirror/view\";\n\n/**\n * Cmd+= / Cmd+- / Cmd+0 (Ctrl off a Mac) resize the editor's text instead of\n * zooming the whole page \u2014 same steps as the `file` tool's editor.\n *\n * Alongside the font size this sets `--markdown-zoom` (new size / base size)\n * on the editor, because the markdown theme lays out line heights, padding\n * and heading margins in `rem`, which wouldn't follow the font. The theme\n * multiplies those by the factor (see `zoomed` in themes/markdown.ts).\n */\nconst MIN_FONT_SIZE = 6;\nconst FALLBACK_FONT_SIZE = 16;\n\nconst px = (value: string) => parseFloat(value) || FALLBACK_FONT_SIZE;\n\n/** The editor's font size with no zoom applied. */\nfunction baseSize(view: EditorView): number {\n const { style } = view.dom;\n const zoomed = style.fontSize;\n style.fontSize = \"\";\n const base = px(getComputedStyle(view.dom).fontSize);\n style.fontSize = zoomed;\n return base;\n}\n\nfunction step(view: EditorView, by: number): boolean {\n const { style } = view.dom;\n if (by === 0) {\n style.fontSize = \"\";\n style.removeProperty(\"--markdown-zoom\");\n } else {\n const current = px(getComputedStyle(view.dom).fontSize);\n const size = Math.max(MIN_FONT_SIZE, current + by);\n style.fontSize = `${size}px`;\n style.setProperty(\"--markdown-zoom\", String(size / baseSize(view)));\n }\n view.requestMeasure();\n return true;\n}\n\nexport const zoomIn = (view: EditorView) => step(view, 1);\nexport const zoomOut = (view: EditorView) => step(view, -1);\nexport const zoomReset = (view: EditorView) => step(view, 0);\n\nexport const markdownZoom = Prec.high(\n keymap.of([\n // `+` and `_` are the shifted keys, for keyboards that need Shift.\n { key: \"Mod-=\", run: zoomIn, preventDefault: true },\n { key: \"Mod-+\", run: zoomIn, preventDefault: true },\n { key: \"Mod--\", run: zoomOut, preventDefault: true },\n { key: \"Mod-_\", run: zoomOut, preventDefault: true },\n { key: \"Mod-0\", run: zoomReset, preventDefault: true },\n ])\n);\n", "import { HighlightStyle, syntaxHighlighting } from \"@codemirror/language\";\nimport { EditorView } from \"@codemirror/view\";\nimport { tags } from \"@lezer/highlight\";\n\nconst bodyFont = (style: \"serif\" | \"sans\") =>\n style == \"serif\"\n ? 'var(--text-editor-family-serif, \"Merriweather\", serif)'\n : \"var(--text-editor-family-sans)\";\n\n/**\n * Scale a fixed length by the editor's text zoom (`--markdown-zoom`, set by\n * extensions/zoom.ts). `em`/`ex` lengths follow the font already; `rem` and\n * `px` ones need this or they'd stay put while the text grows.\n */\nconst zoomed = (length: string) => `calc(${length} * var(--markdown-zoom, 1))`;\n\nconst markdownStyles = (style: \"serif\" | \"sans\"): Record<string, any> => ({\n \"&\": {},\n \"&.cm-editor.cm-focused\": {\n outline: \"none\",\n },\n\n \"&.cm-editor\": {\n height: \"100%\",\n display: \"flex\",\n alignContent: \"center\",\n justifyContent: \"center\",\n overflow: \"auto\",\n },\n \".cm-scroller\": {\n background: \"var(--text-editor-fill)\",\n },\n \".cm-gutter\": {\n background: \"transparent\",\n },\n \".cm-content\": {\n // for things outside the highlighter (the link widget) to match the text.\n \"--markdown-body-family\": bodyFont(style),\n // Justified text makes it look more like the I&S web essay template,\n // but doesn't feel right for most documents.\n // textAlign: \"justify\",\n textWrap: \"pretty\",\n fontFamily: bodyFont(style),\n lineHeight: zoomed(\"1.5rem\"),\n color: \"var(--text-editor-line)\",\n caretColor: \"var(--text-editor-cursor-fill)\",\n background: \"var(--text-editor-fill)\",\n marginBlock: zoomed(\"2rem\"),\n marginInline: \"auto\",\n // lol i guess this is the same as box-sizing: content-box\n maxWidth: `calc(var(--max-text-line-width, 100ex) - ${zoomed(\"2rem\")})`,\n padding: zoomed(\"2rem\"),\n // room for the markers hung in the margin (extensions/margin.ts).\n paddingLeft: `calc(${zoomed(\"2rem\")} + var(--markdown-hang, 0px))`,\n boxShadow: \"none\",\n marginBottom: \"8em\",\n borderRadius: \"8px\",\n },\n \".cm-content li\": {\n marginBottom: 0,\n },\n \".cm-task-done\": {\n opacity: 0.6,\n },\n \".cm-activeLine\": {\n backgroundColor: \"inherit\",\n },\n\n \".frontmatter, .frontmatter *\": {\n fontSize: zoomed(\"14px\"),\n fontFamily: \"var(--text-editor-family-code)\",\n color: \"var(--syntax-comment, #666)\",\n textDecoration: \"none\",\n fontWeight: \"normal\",\n lineHeight: \"0.8em\",\n },\n\n \".cm-gutters\": {\n borderRight: \"0\",\n border: \"0\",\n background: \"var(--text-editor-gutter-fill)\",\n },\n\n \".cm-comment-gutter\": {\n width: \"20px\",\n },\n\n \".cm-folded-range-gutter-line-number\": {\n display: \"none\",\n },\n\n \".cm-folded-range-gutter\": {\n background: \"var(--text-editor-fill)\",\n borderRight: \"0px\",\n width: \"40px\",\n },\n\n \".cm-folded-line-widget\": {\n background: \"var(--text-editor-fill)\",\n border: \"0px\",\n },\n\n \".cm-folded-range\": {\n background: \"var(--text-editor-fill)\",\n },\n});\n\nconst baseHeadingStyles = {\n fontFamily: \"var(--studio-heading-family, var(--text-editor-family-sans))\",\n textDecoration: \"none\",\n};\n\n/** A title stands out by weight: h1 very heavy, the rest a step lighter.\n * A theme can still set them (--studio-heading-weight-1 for h1). */\nconst H1_WEIGHT = \"var(--studio-heading-weight-1, 800)\";\nconst HEADING_WEIGHT = \"var(--studio-heading-weight, 650)\";\n\n/** Size and leading per heading level, shared by the highlight rules (the\n * heading's text) and the line classes margin.ts puts on heading lines. */\nconst headingSizes: Record<\n number,\n { fontSize?: string; lineHeight?: string; fontWeight: string }\n> = {\n 1: { fontSize: `var(--studio-heading-size-1, ${zoomed(\"1.5rem\")})`, lineHeight: zoomed(\"2rem\"), fontWeight: H1_WEIGHT },\n 2: { fontSize: `var(--studio-heading-size-2, ${zoomed(\"1.5rem\")})`, lineHeight: zoomed(\"2rem\"), fontWeight: HEADING_WEIGHT },\n 3: { fontSize: `var(--studio-heading-size-3, ${zoomed(\"1.25rem\")})`, lineHeight: zoomed(\"1.75rem\"), fontWeight: HEADING_WEIGHT },\n 4: { fontSize: `var(--studio-heading-size-4, ${zoomed(\"1.1rem\")})`, fontWeight: HEADING_WEIGHT },\n 5: { fontWeight: HEADING_WEIGHT },\n 6: { fontWeight: HEADING_WEIGHT },\n};\n\n/**\n * The same, on the whole line: a widget that replaces part of a heading (a\n * rendered link) isn't wrapped in the heading's highlight span, so without\n * this it falls back to the body size.\n */\nconst headingLines = {\n ...Object.fromEntries(\n Object.entries(headingSizes).map(([level, size]) => [\n `.cm-md-h${level}`,\n {\n fontFamily: baseHeadingStyles.fontFamily,\n ...size,\n // the patchwork theme's highlighter weights headings by this; match\n \"--syntax-weight-heading\": size.fontWeight,\n },\n ])\n ),\n // headings are set off by size, not colour: the theme's heading colour\n // (--syntax-heading, which the patchwork theme's highlighter reads) is the\n // text colour here, whatever the theme picks for code.\n \".cm-md-h1, .cm-md-h2, .cm-md-h3, .cm-md-h4, .cm-md-h5, .cm-md-h6\": {\n \"--syntax-heading\": \"var(--text-editor-line)\",\n },\n};\n\nconst baseCodeStyles = {\n fontFamily: \"var(--text-editor-family-code)\",\n fontSize: \"1em\",\n};\n\nexport const markdownSyntaxHighlighting = (style: \"serif\" | \"sans\") =>\n HighlightStyle.define([\n // this is how you ensure that codeblocks are still monospace.\n // a node's own class *replaces* its parent's in the highlighter, so text\n // inside **bold**, *italic* and ~~struck~~ loses this one and falls back to\n // `.cm-content`, which the patchwork theme sets to the code font. those\n // rules set the body font again; inline code inside them still wins,\n // being later in this list.\n {\n tag: tags.content,\n fontFamily: bodyFont(style),\n },\n {\n tag: tags.heading1,\n ...baseHeadingStyles,\n ...headingSizes[1],\n marginBottom: zoomed(\"1rem\"),\n marginTop: zoomed(\"2rem\"),\n },\n {\n tag: tags.heading2,\n ...baseHeadingStyles,\n ...headingSizes[2],\n marginBottom: zoomed(\"1rem\"),\n marginTop: zoomed(\"2rem\"),\n },\n {\n tag: tags.heading3,\n ...baseHeadingStyles,\n ...headingSizes[3],\n marginBottom: zoomed(\"1rem\"),\n marginTop: zoomed(\"2rem\"),\n },\n {\n tag: tags.heading4,\n ...baseHeadingStyles,\n ...headingSizes[4],\n marginBottom: zoomed(\"1rem\"),\n marginTop: zoomed(\"2rem\"),\n },\n {\n tag: [tags.heading5, tags.heading6],\n ...baseHeadingStyles,\n ...headingSizes[5],\n },\n {\n tag: tags.processingInstruction,\n color: \"var(--text-editor-line-offset-40)\",\n },\n {\n tag: tags.comment,\n color: \"var(--syntax-comment, #555)\",\n fontFamily: \"var(--text-editor-family-code)\",\n },\n // quotes are set off by their bar (margin.ts), not by italics.\n {\n tag: tags.strong,\n fontFamily: bodyFont(style),\n fontWeight: \"var(--syntax-weight-strong, bold)\",\n },\n {\n tag: tags.emphasis,\n fontFamily: bodyFont(style),\n fontStyle: \"var(--syntax-style-emphasis, italic)\",\n },\n {\n tag: tags.strikethrough,\n fontFamily: bodyFont(style),\n textDecoration: \"line-through\",\n },\n {\n tag: [tags.meta],\n fontWeight: 300,\n color: \"var(--syntax-meta, #999)\",\n fontFamily: \"var(--text-editor-family-sans)\",\n },\n { tag: tags.keyword, ...baseCodeStyles, color: \"var(--syntax-keyword, #708)\" },\n {\n tag: [\n tags.atom,\n tags.bool,\n tags.url,\n tags.contentSeparator,\n tags.labelName,\n ],\n ...baseCodeStyles,\n color: \"var(--syntax-atom, var(--studio-secondary))\",\n },\n { tag: [tags.literal, tags.inserted], ...baseCodeStyles, color: \"var(--syntax-inserted, #164)\" },\n { tag: [tags.string, tags.deleted], ...baseCodeStyles, color: \"var(--syntax-string, #5f67b5)\" },\n {\n tag: [tags.regexp, tags.escape, tags.special(tags.string)],\n ...baseCodeStyles,\n color: \"var(--syntax-regexp, #e40)\",\n },\n {\n tag: tags.definition(tags.variableName),\n ...baseCodeStyles,\n color: \"var(--syntax-definition--variable-name, #00f)\",\n },\n { tag: tags.local(tags.variableName), ...baseCodeStyles, color: \"var(--syntax-variable-name, #30a)\" },\n { tag: [tags.typeName, tags.namespace], ...baseCodeStyles, color: \"var(--syntax-type-name, #085)\" },\n { tag: tags.className, ...baseCodeStyles, color: \"var(--syntax-class-name, #167)\" },\n {\n tag: [tags.special(tags.variableName), tags.macroName],\n ...baseCodeStyles,\n color: \"var(--syntax-special--variable-name, #256)\",\n },\n {\n tag: tags.definition(tags.propertyName),\n ...baseCodeStyles,\n color: \"var(--syntax-function--property-name, #00c)\",\n },\n { tag: tags.monospace, ...baseCodeStyles },\n ]);\n\nexport const theme = (style: \"serif\" | \"sans\") => [\n EditorView.theme({ ...markdownStyles(style), ...headingLines }),\n syntaxHighlighting(markdownSyntaxHighlighting(style)),\n];\n\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["/** CodeMirror Extensions */\nimport { completionKeymap } from \"@codemirror/autocomplete\";\nimport { defaultKeymap, indentWithTab } from \"@codemirror/commands\";\nimport { markdown, markdownLanguage } from \"@codemirror/lang-markdown\";\nimport { foldKeymap, indentOnInput, indentUnit } from \"@codemirror/language\";\nimport { styleTags, tags } from \"@lezer/highlight\";\nimport { languages } from \"@codemirror/language-data\";\nimport { searchKeymap } from \"@codemirror/search\";\nimport { EditorView, keymap } from \"@codemirror/view\";\n\nimport { markdownFormattingKeymap } from \"./formatting.ts\";\nimport { taskCheckboxes } from \"./tasks.ts\";\nimport { margin } from \"./margin.ts\";\nimport { headings } from \"./headings.ts\";\nimport { lists } from \"./lists.ts\";\nimport { prefixes } from \"./prefix.ts\";\nimport { verticalMemory } from \"./vertical.ts\";\nimport { markdownZoom } from \"./zoom.ts\";\n\n/** Styles */\nimport { theme } from \"../themes/markdown.ts\";\n\n// Undo/redo (`history()`/`historyKeymap`) is deliberately absent: the base\n// editor (codemirror-base) owns it, so it can reset the stack when a scope\n// swap re-points the doc handle (see codemirror-base's history extension).\n// Adding a second `history()` here would keep the underlying singleton state\n// field alive across that reset and break it.\nexport function markdownExtensions() {\n return [\n ...theme(\"sans\"),\n indentOnInput(),\n markdownZoom,\n keymap.of([\n ...markdownFormattingKeymap,\n ...defaultKeymap,\n ...searchKeymap,\n ...foldKeymap,\n ...completionKeymap,\n indentWithTab,\n ]),\n EditorView.lineWrapping,\n // GFM base: task lists, tables, strikethrough, autolinks.\n markdown({\n base: markdownLanguage,\n codeLanguages: languages,\n extensions: [bareUrls],\n }),\n taskCheckboxes,\n margin,\n prefixes,\n verticalMemory,\n headings,\n lists,\n indentUnit.of(\" \"),\n ];\n}\n\n/**\n * A url pasted on its own is a link, not code. Only the url *inside* link\n * syntax \u2014 `[text](url)`, `<url>`, `[ref]: url`, `` \u2014 is markup,\n * so only that keeps `tags.url` (and the code font the theme gives it).\n * Path rules outrank the plain `URL` rule lezer-markdown ships with.\n */\nexport const bareUrls = {\n props: [\n styleTags({\n URL: tags.link,\n \"Link/URL Image/URL Autolink/URL LinkReference/URL\": tags.url,\n }),\n ],\n};\n", "import { LanguageDescription, LanguageSupport, StreamLanguage } from '@codemirror/language';\n\nfunction legacy(parser) {\n return new LanguageSupport(StreamLanguage.define(parser));\n}\nfunction sql(dialectName) {\n return import('@codemirror/lang-sql').then(m => m.sql({ dialect: m[dialectName] }));\n}\n/**\nAn array of language descriptions for known language packages.\n*/\nconst languages = [\n // New-style language modes\n /*@__PURE__*/LanguageDescription.of({\n name: \"C\",\n extensions: [\"c\", \"h\", \"ino\"],\n load() {\n return import('@codemirror/lang-cpp').then(m => m.cpp());\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"C++\",\n alias: [\"cpp\"],\n extensions: [\"cpp\", \"c++\", \"cc\", \"cxx\", \"hpp\", \"h++\", \"hh\", \"hxx\"],\n load() {\n return import('@codemirror/lang-cpp').then(m => m.cpp());\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"CQL\",\n alias: [\"cassandra\"],\n extensions: [\"cql\"],\n load() { return sql(\"Cassandra\"); }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"CSS\",\n extensions: [\"css\"],\n load() {\n return import('@codemirror/lang-css').then(m => m.css());\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Go\",\n extensions: [\"go\"],\n load() {\n return import('@codemirror/lang-go').then(m => m.go());\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"HTML\",\n alias: [\"xhtml\"],\n extensions: [\"html\", \"htm\", \"handlebars\", \"hbs\"],\n load() {\n return import('@codemirror/lang-html').then(m => m.html());\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Java\",\n extensions: [\"java\"],\n load() {\n return import('@codemirror/lang-java').then(m => m.java());\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"JavaScript\",\n alias: [\"ecmascript\", \"js\", \"node\"],\n extensions: [\"js\", \"mjs\", \"cjs\"],\n load() {\n return import('@codemirror/lang-javascript').then(m => m.javascript());\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Jinja\",\n extensions: [\"j2\", \"jinja\", \"jinja2\"],\n load() {\n return import('@codemirror/lang-jinja').then(m => m.jinja());\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"JSON\",\n alias: [\"json5\"],\n extensions: [\"json\", \"map\"],\n load() {\n return import('@codemirror/lang-json').then(m => m.json());\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"JSX\",\n extensions: [\"jsx\"],\n load() {\n return import('@codemirror/lang-javascript').then(m => m.javascript({ jsx: true }));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"LESS\",\n extensions: [\"less\"],\n load() {\n return import('@codemirror/lang-less').then(m => m.less());\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Liquid\",\n extensions: [\"liquid\"],\n load() {\n return import('@codemirror/lang-liquid').then(m => m.liquid());\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"MariaDB SQL\",\n load() { return sql(\"MariaSQL\"); }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Markdown\",\n extensions: [\"md\", \"markdown\", \"mkd\"],\n load() {\n return import('@codemirror/lang-markdown').then(m => m.markdown());\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"MS SQL\",\n load() { return sql(\"MSSQL\"); }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"MySQL\",\n load() { return sql(\"MySQL\"); }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"PHP\",\n extensions: [\"php\", \"php3\", \"php4\", \"php5\", \"php7\", \"phtml\"],\n load() {\n return import('@codemirror/lang-php').then(m => m.php());\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"PLSQL\",\n extensions: [\"pls\"],\n load() { return sql(\"PLSQL\"); }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"PostgreSQL\",\n load() { return sql(\"PostgreSQL\"); }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Python\",\n extensions: [\"BUILD\", \"bzl\", \"py\", \"pyw\"],\n filename: /^(BUCK|BUILD)$/,\n load() {\n return import('@codemirror/lang-python').then(m => m.python());\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Rust\",\n extensions: [\"rs\"],\n load() {\n return import('@codemirror/lang-rust').then(m => m.rust());\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Sass\",\n extensions: [\"sass\"],\n load() {\n return import('@codemirror/lang-sass').then(m => m.sass({ indented: true }));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"SCSS\",\n extensions: [\"scss\"],\n load() {\n return import('@codemirror/lang-sass').then(m => m.sass());\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"SQL\",\n extensions: [\"sql\"],\n load() { return sql(\"StandardSQL\"); }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"SQLite\",\n load() { return sql(\"SQLite\"); }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"TSX\",\n extensions: [\"tsx\"],\n load() {\n return import('@codemirror/lang-javascript').then(m => m.javascript({ jsx: true, typescript: true }));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"TypeScript\",\n alias: [\"ts\"],\n extensions: [\"ts\", \"mts\", \"cts\"],\n load() {\n return import('@codemirror/lang-javascript').then(m => m.javascript({ typescript: true }));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"WebAssembly\",\n extensions: [\"wat\", \"wast\"],\n load() {\n return import('@codemirror/lang-wast').then(m => m.wast());\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"XML\",\n alias: [\"rss\", \"wsdl\", \"xsd\"],\n extensions: [\"xml\", \"xsl\", \"xsd\", \"svg\"],\n load() {\n return import('@codemirror/lang-xml').then(m => m.xml());\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"YAML\",\n alias: [\"yml\"],\n extensions: [\"yaml\", \"yml\"],\n load() {\n return import('@codemirror/lang-yaml').then(m => m.yaml());\n }\n }),\n // Legacy modes ported from CodeMirror 5\n /*@__PURE__*/LanguageDescription.of({\n name: \"APL\",\n extensions: [\"dyalog\", \"apl\"],\n load() {\n return import('@codemirror/legacy-modes/mode/apl').then(m => legacy(m.apl));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"PGP\",\n alias: [\"asciiarmor\"],\n extensions: [\"asc\", \"pgp\", \"sig\"],\n load() {\n return import('@codemirror/legacy-modes/mode/asciiarmor').then(m => legacy(m.asciiArmor));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"ASN.1\",\n extensions: [\"asn\", \"asn1\"],\n load() {\n return import('@codemirror/legacy-modes/mode/asn1').then(m => legacy(m.asn1({})));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Asterisk\",\n filename: /^extensions\\.conf$/i,\n load() {\n return import('@codemirror/legacy-modes/mode/asterisk').then(m => legacy(m.asterisk));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Brainfuck\",\n extensions: [\"b\", \"bf\"],\n load() {\n return import('@codemirror/legacy-modes/mode/brainfuck').then(m => legacy(m.brainfuck));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Cobol\",\n extensions: [\"cob\", \"cpy\"],\n load() {\n return import('@codemirror/legacy-modes/mode/cobol').then(m => legacy(m.cobol));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"C#\",\n alias: [\"csharp\", \"cs\"],\n extensions: [\"cs\"],\n load() {\n return import('@codemirror/legacy-modes/mode/clike').then(m => legacy(m.csharp));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Clojure\",\n extensions: [\"clj\", \"cljc\", \"cljx\"],\n load() {\n return import('@codemirror/legacy-modes/mode/clojure').then(m => legacy(m.clojure));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"ClojureScript\",\n extensions: [\"cljs\"],\n load() {\n return import('@codemirror/legacy-modes/mode/clojure').then(m => legacy(m.clojure));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Closure Stylesheets (GSS)\",\n extensions: [\"gss\"],\n load() {\n return import('@codemirror/legacy-modes/mode/css').then(m => legacy(m.gss));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"CMake\",\n extensions: [\"cmake\", \"cmake.in\"],\n filename: /^CMakeLists\\.txt$/,\n load() {\n return import('@codemirror/legacy-modes/mode/cmake').then(m => legacy(m.cmake));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"CoffeeScript\",\n alias: [\"coffee\", \"coffee-script\"],\n extensions: [\"coffee\"],\n load() {\n return import('@codemirror/legacy-modes/mode/coffeescript').then(m => legacy(m.coffeeScript));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Common Lisp\",\n alias: [\"lisp\"],\n extensions: [\"cl\", \"lisp\", \"el\"],\n load() {\n return import('@codemirror/legacy-modes/mode/commonlisp').then(m => legacy(m.commonLisp));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Cypher\",\n extensions: [\"cyp\", \"cypher\"],\n load() {\n return import('@codemirror/legacy-modes/mode/cypher').then(m => legacy(m.cypher));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Cython\",\n extensions: [\"pyx\", \"pxd\", \"pxi\"],\n load() {\n return import('@codemirror/legacy-modes/mode/python').then(m => legacy(m.cython));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Crystal\",\n extensions: [\"cr\"],\n load() {\n return import('@codemirror/legacy-modes/mode/crystal').then(m => legacy(m.crystal));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"D\",\n extensions: [\"d\"],\n load() {\n return import('@codemirror/legacy-modes/mode/d').then(m => legacy(m.d));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Dart\",\n extensions: [\"dart\"],\n load() {\n return import('@codemirror/legacy-modes/mode/clike').then(m => legacy(m.dart));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"diff\",\n extensions: [\"diff\", \"patch\"],\n load() {\n return import('@codemirror/legacy-modes/mode/diff').then(m => legacy(m.diff));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Dockerfile\",\n filename: /^Dockerfile$/,\n load() {\n return import('@codemirror/legacy-modes/mode/dockerfile').then(m => legacy(m.dockerFile));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"DTD\",\n extensions: [\"dtd\"],\n load() {\n return import('@codemirror/legacy-modes/mode/dtd').then(m => legacy(m.dtd));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Dylan\",\n extensions: [\"dylan\", \"dyl\", \"intr\"],\n load() {\n return import('@codemirror/legacy-modes/mode/dylan').then(m => legacy(m.dylan));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"EBNF\",\n load() {\n return import('@codemirror/legacy-modes/mode/ebnf').then(m => legacy(m.ebnf));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"ECL\",\n extensions: [\"ecl\"],\n load() {\n return import('@codemirror/legacy-modes/mode/ecl').then(m => legacy(m.ecl));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"edn\",\n extensions: [\"edn\"],\n load() {\n return import('@codemirror/legacy-modes/mode/clojure').then(m => legacy(m.clojure));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Eiffel\",\n extensions: [\"e\"],\n load() {\n return import('@codemirror/legacy-modes/mode/eiffel').then(m => legacy(m.eiffel));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Elm\",\n extensions: [\"elm\"],\n load() {\n return import('@codemirror/legacy-modes/mode/elm').then(m => legacy(m.elm));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Erlang\",\n extensions: [\"erl\"],\n load() {\n return import('@codemirror/legacy-modes/mode/erlang').then(m => legacy(m.erlang));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Esper\",\n load() {\n return import('@codemirror/legacy-modes/mode/sql').then(m => legacy(m.esper));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Factor\",\n extensions: [\"factor\"],\n load() {\n return import('@codemirror/legacy-modes/mode/factor').then(m => legacy(m.factor));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"FCL\",\n load() {\n return import('@codemirror/legacy-modes/mode/fcl').then(m => legacy(m.fcl));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Forth\",\n extensions: [\"forth\", \"fth\", \"4th\"],\n load() {\n return import('@codemirror/legacy-modes/mode/forth').then(m => legacy(m.forth));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Fortran\",\n extensions: [\"f\", \"for\", \"f77\", \"f90\", \"f95\"],\n load() {\n return import('@codemirror/legacy-modes/mode/fortran').then(m => legacy(m.fortran));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"F#\",\n alias: [\"fsharp\"],\n extensions: [\"fs\"],\n load() {\n return import('@codemirror/legacy-modes/mode/mllike').then(m => legacy(m.fSharp));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Gas\",\n extensions: [\"s\"],\n load() {\n return import('@codemirror/legacy-modes/mode/gas').then(m => legacy(m.gas));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Gherkin\",\n extensions: [\"feature\"],\n load() {\n return import('@codemirror/legacy-modes/mode/gherkin').then(m => legacy(m.gherkin));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Groovy\",\n extensions: [\"groovy\", \"gradle\"],\n filename: /^Jenkinsfile$/,\n load() {\n return import('@codemirror/legacy-modes/mode/groovy').then(m => legacy(m.groovy));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Haskell\",\n extensions: [\"hs\"],\n load() {\n return import('@codemirror/legacy-modes/mode/haskell').then(m => legacy(m.haskell));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Haxe\",\n extensions: [\"hx\"],\n load() {\n return import('@codemirror/legacy-modes/mode/haxe').then(m => legacy(m.haxe));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"HXML\",\n extensions: [\"hxml\"],\n load() {\n return import('@codemirror/legacy-modes/mode/haxe').then(m => legacy(m.hxml));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"HTTP\",\n load() {\n return import('@codemirror/legacy-modes/mode/http').then(m => legacy(m.http));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"IDL\",\n extensions: [\"pro\"],\n load() {\n return import('@codemirror/legacy-modes/mode/idl').then(m => legacy(m.idl));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"JSON-LD\",\n alias: [\"jsonld\"],\n extensions: [\"jsonld\"],\n load() {\n return import('@codemirror/legacy-modes/mode/javascript').then(m => legacy(m.jsonld));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Julia\",\n extensions: [\"jl\"],\n load() {\n return import('@codemirror/legacy-modes/mode/julia').then(m => legacy(m.julia));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Kotlin\",\n extensions: [\"kt\", \"kts\"],\n load() {\n return import('@codemirror/legacy-modes/mode/clike').then(m => legacy(m.kotlin));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"LiveScript\",\n alias: [\"ls\"],\n extensions: [\"ls\"],\n load() {\n return import('@codemirror/legacy-modes/mode/livescript').then(m => legacy(m.liveScript));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Lua\",\n extensions: [\"lua\"],\n load() {\n return import('@codemirror/legacy-modes/mode/lua').then(m => legacy(m.lua));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"mIRC\",\n extensions: [\"mrc\"],\n load() {\n return import('@codemirror/legacy-modes/mode/mirc').then(m => legacy(m.mirc));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Mathematica\",\n extensions: [\"m\", \"nb\", \"wl\", \"wls\"],\n load() {\n return import('@codemirror/legacy-modes/mode/mathematica').then(m => legacy(m.mathematica));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Modelica\",\n extensions: [\"mo\"],\n load() {\n return import('@codemirror/legacy-modes/mode/modelica').then(m => legacy(m.modelica));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"MUMPS\",\n extensions: [\"mps\"],\n load() {\n return import('@codemirror/legacy-modes/mode/mumps').then(m => legacy(m.mumps));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Mbox\",\n extensions: [\"mbox\"],\n load() {\n return import('@codemirror/legacy-modes/mode/mbox').then(m => legacy(m.mbox));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Nginx\",\n filename: /nginx.*\\.conf$/i,\n load() {\n return import('@codemirror/legacy-modes/mode/nginx').then(m => legacy(m.nginx));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"NSIS\",\n extensions: [\"nsh\", \"nsi\"],\n load() {\n return import('@codemirror/legacy-modes/mode/nsis').then(m => legacy(m.nsis));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"NTriples\",\n extensions: [\"nt\", \"nq\"],\n load() {\n return import('@codemirror/legacy-modes/mode/ntriples').then(m => legacy(m.ntriples));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Objective-C\",\n alias: [\"objective-c\", \"objc\"],\n extensions: [\"m\"],\n load() {\n return import('@codemirror/legacy-modes/mode/clike').then(m => legacy(m.objectiveC));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Objective-C++\",\n alias: [\"objective-c++\", \"objc++\"],\n extensions: [\"mm\"],\n load() {\n return import('@codemirror/legacy-modes/mode/clike').then(m => legacy(m.objectiveCpp));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"OCaml\",\n extensions: [\"ml\", \"mli\", \"mll\", \"mly\"],\n load() {\n return import('@codemirror/legacy-modes/mode/mllike').then(m => legacy(m.oCaml));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Octave\",\n extensions: [\"m\"],\n load() {\n return import('@codemirror/legacy-modes/mode/octave').then(m => legacy(m.octave));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Oz\",\n extensions: [\"oz\"],\n load() {\n return import('@codemirror/legacy-modes/mode/oz').then(m => legacy(m.oz));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Pascal\",\n extensions: [\"p\", \"pas\"],\n load() {\n return import('@codemirror/legacy-modes/mode/pascal').then(m => legacy(m.pascal));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Perl\",\n extensions: [\"pl\", \"pm\"],\n load() {\n return import('@codemirror/legacy-modes/mode/perl').then(m => legacy(m.perl));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Pig\",\n extensions: [\"pig\"],\n load() {\n return import('@codemirror/legacy-modes/mode/pig').then(m => legacy(m.pig));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"PowerShell\",\n extensions: [\"ps1\", \"psd1\", \"psm1\"],\n load() {\n return import('@codemirror/legacy-modes/mode/powershell').then(m => legacy(m.powerShell));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Properties files\",\n alias: [\"ini\", \"properties\"],\n extensions: [\"properties\", \"ini\", \"in\"],\n load() {\n return import('@codemirror/legacy-modes/mode/properties').then(m => legacy(m.properties));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"ProtoBuf\",\n extensions: [\"proto\"],\n load() {\n return import('@codemirror/legacy-modes/mode/protobuf').then(m => legacy(m.protobuf));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Pug\",\n alias: [\"jade\"],\n extensions: [\"pug\", \"jade\"],\n load() {\n return import('@codemirror/legacy-modes/mode/pug').then(m => legacy(m.pug));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Puppet\",\n extensions: [\"pp\"],\n load() {\n return import('@codemirror/legacy-modes/mode/puppet').then(m => legacy(m.puppet));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Q\",\n extensions: [\"q\"],\n load() {\n return import('@codemirror/legacy-modes/mode/q').then(m => legacy(m.q));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"R\",\n alias: [\"rscript\"],\n extensions: [\"r\", \"R\"],\n load() {\n return import('@codemirror/legacy-modes/mode/r').then(m => legacy(m.r));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"RPM Changes\",\n load() {\n return import('@codemirror/legacy-modes/mode/rpm').then(m => legacy(m.rpmChanges));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"RPM Spec\",\n extensions: [\"spec\"],\n load() {\n return import('@codemirror/legacy-modes/mode/rpm').then(m => legacy(m.rpmSpec));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Ruby\",\n alias: [\"jruby\", \"macruby\", \"rake\", \"rb\", \"rbx\"],\n extensions: [\"rb\"],\n filename: /^(Gemfile|Rakefile)$/,\n load() {\n return import('@codemirror/legacy-modes/mode/ruby').then(m => legacy(m.ruby));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"SAS\",\n extensions: [\"sas\"],\n load() {\n return import('@codemirror/legacy-modes/mode/sas').then(m => legacy(m.sas));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Scala\",\n extensions: [\"scala\"],\n load() {\n return import('@codemirror/legacy-modes/mode/clike').then(m => legacy(m.scala));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Scheme\",\n extensions: [\"scm\", \"ss\"],\n load() {\n return import('@codemirror/legacy-modes/mode/scheme').then(m => legacy(m.scheme));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Shell\",\n alias: [\"bash\", \"sh\", \"zsh\"],\n extensions: [\"sh\", \"ksh\", \"bash\"],\n filename: /^PKGBUILD$/,\n load() {\n return import('@codemirror/legacy-modes/mode/shell').then(m => legacy(m.shell));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Sieve\",\n extensions: [\"siv\", \"sieve\"],\n load() {\n return import('@codemirror/legacy-modes/mode/sieve').then(m => legacy(m.sieve));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Smalltalk\",\n extensions: [\"st\"],\n load() {\n return import('@codemirror/legacy-modes/mode/smalltalk').then(m => legacy(m.smalltalk));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Solr\",\n load() {\n return import('@codemirror/legacy-modes/mode/solr').then(m => legacy(m.solr));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"SML\",\n extensions: [\"sml\", \"sig\", \"fun\", \"smackspec\"],\n load() {\n return import('@codemirror/legacy-modes/mode/mllike').then(m => legacy(m.sml));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"SPARQL\",\n alias: [\"sparul\"],\n extensions: [\"rq\", \"sparql\"],\n load() {\n return import('@codemirror/legacy-modes/mode/sparql').then(m => legacy(m.sparql));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Spreadsheet\",\n alias: [\"excel\", \"formula\"],\n load() {\n return import('@codemirror/legacy-modes/mode/spreadsheet').then(m => legacy(m.spreadsheet));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Squirrel\",\n extensions: [\"nut\"],\n load() {\n return import('@codemirror/legacy-modes/mode/clike').then(m => legacy(m.squirrel));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Stylus\",\n extensions: [\"styl\"],\n load() {\n return import('@codemirror/legacy-modes/mode/stylus').then(m => legacy(m.stylus));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Swift\",\n extensions: [\"swift\"],\n load() {\n return import('@codemirror/legacy-modes/mode/swift').then(m => legacy(m.swift));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"sTeX\",\n load() {\n return import('@codemirror/legacy-modes/mode/stex').then(m => legacy(m.stex));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"LaTeX\",\n alias: [\"tex\"],\n extensions: [\"text\", \"ltx\", \"tex\"],\n load() {\n return import('@codemirror/legacy-modes/mode/stex').then(m => legacy(m.stex));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"SystemVerilog\",\n extensions: [\"v\", \"sv\", \"svh\"],\n load() {\n return import('@codemirror/legacy-modes/mode/verilog').then(m => legacy(m.verilog));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Tcl\",\n extensions: [\"tcl\"],\n load() {\n return import('@codemirror/legacy-modes/mode/tcl').then(m => legacy(m.tcl));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Textile\",\n extensions: [\"textile\"],\n load() {\n return import('@codemirror/legacy-modes/mode/textile').then(m => legacy(m.textile));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"TiddlyWiki\",\n load() {\n return import('@codemirror/legacy-modes/mode/tiddlywiki').then(m => legacy(m.tiddlyWiki));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Tiki wiki\",\n load() {\n return import('@codemirror/legacy-modes/mode/tiki').then(m => legacy(m.tiki));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"TOML\",\n extensions: [\"toml\"],\n load() {\n return import('@codemirror/legacy-modes/mode/toml').then(m => legacy(m.toml));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Troff\",\n extensions: [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\"],\n load() {\n return import('@codemirror/legacy-modes/mode/troff').then(m => legacy(m.troff));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"TTCN\",\n extensions: [\"ttcn\", \"ttcn3\", \"ttcnpp\"],\n load() {\n return import('@codemirror/legacy-modes/mode/ttcn').then(m => legacy(m.ttcn));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"TTCN_CFG\",\n extensions: [\"cfg\"],\n load() {\n return import('@codemirror/legacy-modes/mode/ttcn-cfg').then(m => legacy(m.ttcnCfg));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Turtle\",\n extensions: [\"ttl\"],\n load() {\n return import('@codemirror/legacy-modes/mode/turtle').then(m => legacy(m.turtle));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Web IDL\",\n extensions: [\"webidl\"],\n load() {\n return import('@codemirror/legacy-modes/mode/webidl').then(m => legacy(m.webIDL));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"VB.NET\",\n extensions: [\"vb\"],\n load() {\n return import('@codemirror/legacy-modes/mode/vb').then(m => legacy(m.vb));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"VBScript\",\n extensions: [\"vbs\"],\n load() {\n return import('@codemirror/legacy-modes/mode/vbscript').then(m => legacy(m.vbScript));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Velocity\",\n extensions: [\"vtl\"],\n load() {\n return import('@codemirror/legacy-modes/mode/velocity').then(m => legacy(m.velocity));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Verilog\",\n extensions: [\"v\"],\n load() {\n return import('@codemirror/legacy-modes/mode/verilog').then(m => legacy(m.verilog));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"VHDL\",\n extensions: [\"vhd\", \"vhdl\"],\n load() {\n return import('@codemirror/legacy-modes/mode/vhdl').then(m => legacy(m.vhdl));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"XQuery\",\n extensions: [\"xy\", \"xquery\", \"xq\", \"xqm\", \"xqy\"],\n load() {\n return import('@codemirror/legacy-modes/mode/xquery').then(m => legacy(m.xQuery));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Yacas\",\n extensions: [\"ys\"],\n load() {\n return import('@codemirror/legacy-modes/mode/yacas').then(m => legacy(m.yacas));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Z80\",\n extensions: [\"z80\"],\n load() {\n return import('@codemirror/legacy-modes/mode/z80').then(m => legacy(m.z80));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"MscGen\",\n extensions: [\"mscgen\", \"mscin\", \"msc\"],\n load() {\n return import('@codemirror/legacy-modes/mode/mscgen').then(m => legacy(m.mscgen));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"X\u00F9\",\n extensions: [\"xu\"],\n load() {\n return import('@codemirror/legacy-modes/mode/mscgen').then(m => legacy(m.xu));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"MsGenny\",\n extensions: [\"msgenny\"],\n load() {\n return import('@codemirror/legacy-modes/mode/mscgen').then(m => legacy(m.msgenny));\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Vue\",\n extensions: [\"vue\"],\n load() {\n return import('@codemirror/lang-vue').then(m => m.vue());\n }\n }),\n /*@__PURE__*/LanguageDescription.of({\n name: \"Angular Template\",\n load() {\n return import('@codemirror/lang-angular').then(m => m.angular());\n }\n })\n];\n\nexport { languages };\n", "import { showDialog, EditorView, Decoration, ViewPlugin, showPanel, runScopeHandlers, getPanel } from '@codemirror/view';\nimport { codePointAt, fromCodePoint, codePointSize, EditorSelection, Facet, combineConfig, CharCategory, StateEffect, StateField, RangeSetBuilder, Prec, EditorState, findClusterBreak } from '@codemirror/state';\nimport elt from 'crelt';\n\nconst basicNormalize = typeof String.prototype.normalize == \"function\"\n ? x => x.normalize(\"NFKD\") : x => x;\n/**\nA search cursor provides an iterator over text matches in a\ndocument.\n*/\nclass SearchCursor {\n /**\n Create a text cursor. The query is the search string, `from` to\n `to` provides the region to search.\n \n When `normalize` is given, it will be called, on both the query\n string and the content it is matched against, before comparing.\n You can, for example, create a case-insensitive search by\n passing `s => s.toLowerCase()`.\n \n Text is always normalized with\n [`.normalize(\"NFKD\")`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize)\n (when supported).\n */\n constructor(text, query, from = 0, to = text.length, normalize, test) {\n this.test = test;\n /**\n The current match (only holds a meaningful value after\n [`next`](https://codemirror.net/6/docs/ref/#search.SearchCursor.next) has been called and when\n `done` is false).\n */\n this.value = { from: 0, to: 0 };\n /**\n Whether the end of the iterated region has been reached.\n */\n this.done = false;\n this.matches = [];\n this.buffer = \"\";\n this.bufferPos = 0;\n this.iter = text.iterRange(from, to);\n this.bufferStart = from;\n this.normalize = normalize ? x => normalize(basicNormalize(x)) : basicNormalize;\n this.query = this.normalize(query);\n }\n peek() {\n if (this.bufferPos == this.buffer.length) {\n this.bufferStart += this.buffer.length;\n this.iter.next();\n if (this.iter.done)\n return -1;\n this.bufferPos = 0;\n this.buffer = this.iter.value;\n }\n return codePointAt(this.buffer, this.bufferPos);\n }\n /**\n Look for the next match. Updates the iterator's\n [`value`](https://codemirror.net/6/docs/ref/#search.SearchCursor.value) and\n [`done`](https://codemirror.net/6/docs/ref/#search.SearchCursor.done) properties. Should be called\n at least once before using the cursor.\n */\n next() {\n while (this.matches.length)\n this.matches.pop();\n return this.nextOverlapping();\n }\n /**\n The `next` method will ignore matches that partially overlap a\n previous match. This method behaves like `next`, but includes\n such matches.\n */\n nextOverlapping() {\n for (;;) {\n let next = this.peek();\n if (next < 0) {\n this.done = true;\n return this;\n }\n let str = fromCodePoint(next), start = this.bufferStart + this.bufferPos;\n this.bufferPos += codePointSize(next);\n let norm = this.normalize(str);\n if (norm.length)\n for (let i = 0, pos = start;; i++) {\n let code = norm.charCodeAt(i);\n let match = this.match(code, pos, this.bufferPos + this.bufferStart);\n if (i == norm.length - 1) {\n if (match) {\n this.value = match;\n return this;\n }\n break;\n }\n if (pos == start && i < str.length && str.charCodeAt(i) == code)\n pos++;\n }\n }\n }\n match(code, pos, end) {\n let match = null;\n for (let i = 0; i < this.matches.length; i += 2) {\n let index = this.matches[i], keep = false;\n if (this.query.charCodeAt(index) == code) {\n if (index == this.query.length - 1) {\n match = { from: this.matches[i + 1], to: end };\n }\n else {\n this.matches[i]++;\n keep = true;\n }\n }\n if (!keep) {\n this.matches.splice(i, 2);\n i -= 2;\n }\n }\n if (this.query.charCodeAt(0) == code) {\n if (this.query.length == 1)\n match = { from: pos, to: end };\n else\n this.matches.push(1, pos);\n }\n if (match && this.test && !this.test(match.from, match.to, this.buffer, this.bufferStart))\n match = null;\n return match;\n }\n}\nif (typeof Symbol != \"undefined\")\n SearchCursor.prototype[Symbol.iterator] = function () { return this; };\n\nconst empty = { from: -1, to: -1, match: /*@__PURE__*//.*/.exec(\"\") };\nconst baseFlags = \"gm\" + (/x/.unicode == null ? \"\" : \"u\");\n/**\nThis class is similar to [`SearchCursor`](https://codemirror.net/6/docs/ref/#search.SearchCursor)\nbut searches for a regular expression pattern instead of a plain\nstring.\n*/\nclass RegExpCursor {\n /**\n Create a cursor that will search the given range in the given\n document. `query` should be the raw pattern (as you'd pass it to\n `new RegExp`).\n */\n constructor(text, query, options, from = 0, to = text.length) {\n this.text = text;\n this.to = to;\n this.curLine = \"\";\n /**\n Set to `true` when the cursor has reached the end of the search\n range.\n */\n this.done = false;\n /**\n Will contain an object with the extent of the match and the\n match object when [`next`](https://codemirror.net/6/docs/ref/#search.RegExpCursor.next)\n sucessfully finds a match.\n */\n this.value = empty;\n if (/\\\\[sWDnr]|\\n|\\r|\\[\\^/.test(query))\n return new MultilineRegExpCursor(text, query, options, from, to);\n this.re = new RegExp(query, baseFlags + ((options === null || options === void 0 ? void 0 : options.ignoreCase) ? \"i\" : \"\"));\n this.test = options === null || options === void 0 ? void 0 : options.test;\n this.iter = text.iter();\n let startLine = text.lineAt(from);\n this.curLineStart = startLine.from;\n this.matchPos = toCharEnd(text, from);\n this.getLine(this.curLineStart);\n }\n getLine(skip) {\n this.iter.next(skip);\n if (this.iter.lineBreak) {\n this.curLine = \"\";\n }\n else {\n this.curLine = this.iter.value;\n if (this.curLineStart + this.curLine.length > this.to)\n this.curLine = this.curLine.slice(0, this.to - this.curLineStart);\n this.iter.next();\n }\n }\n nextLine() {\n this.curLineStart = this.curLineStart + this.curLine.length + 1;\n if (this.curLineStart > this.to)\n this.curLine = \"\";\n else\n this.getLine(0);\n }\n /**\n Move to the next match, if there is one.\n */\n next() {\n for (let off = this.matchPos - this.curLineStart;;) {\n this.re.lastIndex = off;\n let match = this.matchPos <= this.to && this.re.exec(this.curLine);\n if (match) {\n let from = this.curLineStart + match.index, to = from + match[0].length;\n this.matchPos = toCharEnd(this.text, to + (from == to ? 1 : 0));\n if (from == this.curLineStart + this.curLine.length)\n this.nextLine();\n if ((from < to || from > this.value.to) && (!this.test || this.test(from, to, match))) {\n this.value = { from, to, match };\n return this;\n }\n off = this.matchPos - this.curLineStart;\n }\n else if (this.curLineStart + this.curLine.length < this.to) {\n this.nextLine();\n off = 0;\n }\n else {\n this.done = true;\n return this;\n }\n }\n }\n}\nconst flattened = /*@__PURE__*/new WeakMap();\n// Reusable (partially) flattened document strings\nclass FlattenedDoc {\n constructor(from, text) {\n this.from = from;\n this.text = text;\n }\n get to() { return this.from + this.text.length; }\n static get(doc, from, to) {\n let cached = flattened.get(doc);\n if (!cached || cached.from >= to || cached.to <= from) {\n let flat = new FlattenedDoc(from, doc.sliceString(from, to));\n flattened.set(doc, flat);\n return flat;\n }\n if (cached.from == from && cached.to == to)\n return cached;\n let { text, from: cachedFrom } = cached;\n if (cachedFrom > from) {\n text = doc.sliceString(from, cachedFrom) + text;\n cachedFrom = from;\n }\n if (cached.to < to)\n text += doc.sliceString(cached.to, to);\n flattened.set(doc, new FlattenedDoc(cachedFrom, text));\n return new FlattenedDoc(from, text.slice(from - cachedFrom, to - cachedFrom));\n }\n}\nclass MultilineRegExpCursor {\n constructor(text, query, options, from, to) {\n this.text = text;\n this.to = to;\n this.done = false;\n this.value = empty;\n this.matchPos = toCharEnd(text, from);\n this.re = new RegExp(query, baseFlags + ((options === null || options === void 0 ? void 0 : options.ignoreCase) ? \"i\" : \"\"));\n this.test = options === null || options === void 0 ? void 0 : options.test;\n this.flat = FlattenedDoc.get(text, from, this.chunkEnd(from + 5000 /* Chunk.Base */));\n }\n chunkEnd(pos) {\n return pos >= this.to ? this.to : this.text.lineAt(pos).to;\n }\n next() {\n for (;;) {\n let off = this.re.lastIndex = this.matchPos - this.flat.from;\n let match = this.re.exec(this.flat.text);\n // Skip empty matches directly after the last match\n if (match && !match[0] && match.index == off) {\n this.re.lastIndex = off + 1;\n match = this.re.exec(this.flat.text);\n }\n if (match) {\n let from = this.flat.from + match.index, to = from + match[0].length;\n // If a match goes almost to the end of a noncomplete chunk, try\n // again, since it'll likely be able to match more\n if ((this.flat.to >= this.to || match.index + match[0].length <= this.flat.text.length - 10) &&\n (!this.test || this.test(from, to, match))) {\n this.value = { from, to, match };\n this.matchPos = toCharEnd(this.text, to + (from == to ? 1 : 0));\n return this;\n }\n }\n if (this.flat.to == this.to) {\n this.done = true;\n return this;\n }\n // Grow the flattened doc\n this.flat = FlattenedDoc.get(this.text, this.flat.from, this.chunkEnd(this.flat.from + this.flat.text.length * 2));\n }\n }\n}\nif (typeof Symbol != \"undefined\") {\n RegExpCursor.prototype[Symbol.iterator] = MultilineRegExpCursor.prototype[Symbol.iterator] =\n function () { return this; };\n}\nfunction validRegExp(source) {\n try {\n new RegExp(source, baseFlags);\n return true;\n }\n catch (_a) {\n return false;\n }\n}\nfunction toCharEnd(text, pos) {\n if (pos >= text.length)\n return pos;\n let line = text.lineAt(pos), next;\n while (pos < line.to && (next = line.text.charCodeAt(pos - line.from)) >= 0xDC00 && next < 0xE000)\n pos++;\n return pos;\n}\n\n/**\nCommand that shows a dialog asking the user for a line number, and\nwhen a valid position is provided, moves the cursor to that line.\n\nSupports line numbers, relative line offsets prefixed with `+` or\n`-`, document percentages suffixed with `%`, and an optional\ncolumn position by adding `:` and a second number after the line\nnumber.\n*/\nconst gotoLine = view => {\n let { state } = view;\n let line = String(state.doc.lineAt(view.state.selection.main.head).number);\n let { close, result } = showDialog(view, {\n label: state.phrase(\"Go to line\"),\n input: { type: \"text\", name: \"line\", value: line },\n focus: true,\n submitLabel: state.phrase(\"go\"),\n });\n result.then(form => {\n let match = form && /^([+-])?(\\d+)?(:\\d+)?(%)?$/.exec(form.elements[\"line\"].value);\n if (!match) {\n view.dispatch({ effects: close });\n return;\n }\n let startLine = state.doc.lineAt(state.selection.main.head);\n let [, sign, ln, cl, percent] = match;\n let col = cl ? +cl.slice(1) : 0;\n let line = ln ? +ln : startLine.number;\n if (ln && percent) {\n let pc = line / 100;\n if (sign)\n pc = pc * (sign == \"-\" ? -1 : 1) + (startLine.number / state.doc.lines);\n line = Math.round(state.doc.lines * pc);\n }\n else if (ln && sign) {\n line = line * (sign == \"-\" ? -1 : 1) + startLine.number;\n }\n let docLine = state.doc.line(Math.max(1, Math.min(state.doc.lines, line)));\n let selection = EditorSelection.cursor(docLine.from + Math.max(0, Math.min(col, docLine.length)));\n view.dispatch({\n effects: [close, EditorView.scrollIntoView(selection.from, { y: 'center' })],\n selection,\n });\n });\n return true;\n};\n\nconst defaultHighlightOptions = {\n highlightWordAroundCursor: false,\n minSelectionLength: 1,\n maxMatches: 100,\n wholeWords: false\n};\nconst highlightConfig = /*@__PURE__*/Facet.define({\n combine(options) {\n return combineConfig(options, defaultHighlightOptions, {\n highlightWordAroundCursor: (a, b) => a || b,\n minSelectionLength: Math.min,\n maxMatches: Math.min\n });\n }\n});\n/**\nThis extension highlights text that matches the selection. It uses\nthe `\"cm-selectionMatch\"` class for the highlighting. When\n`highlightWordAroundCursor` is enabled, the word at the cursor\nitself will be highlighted with `\"cm-selectionMatch-main\"`.\n*/\nfunction highlightSelectionMatches(options) {\n let ext = [defaultTheme, matchHighlighter];\n if (options)\n ext.push(highlightConfig.of(options));\n return ext;\n}\nconst matchDeco = /*@__PURE__*/Decoration.mark({ class: \"cm-selectionMatch\" });\nconst mainMatchDeco = /*@__PURE__*/Decoration.mark({ class: \"cm-selectionMatch cm-selectionMatch-main\" });\n// Whether the characters directly outside the given positions are non-word characters\nfunction insideWordBoundaries(check, state, from, to) {\n return (from == 0 || check(state.sliceDoc(from - 1, from)) != CharCategory.Word) &&\n (to == state.doc.length || check(state.sliceDoc(to, to + 1)) != CharCategory.Word);\n}\n// Whether the characters directly at the given positions are word characters\nfunction insideWord(check, state, from, to) {\n return check(state.sliceDoc(from, from + 1)) == CharCategory.Word\n && check(state.sliceDoc(to - 1, to)) == CharCategory.Word;\n}\nconst matchHighlighter = /*@__PURE__*/ViewPlugin.fromClass(class {\n constructor(view) {\n this.decorations = this.getDeco(view);\n }\n update(update) {\n if (update.selectionSet || update.docChanged || update.viewportChanged)\n this.decorations = this.getDeco(update.view);\n }\n getDeco(view) {\n let conf = view.state.facet(highlightConfig);\n let { state } = view, sel = state.selection;\n if (sel.ranges.length > 1)\n return Decoration.none;\n let range = sel.main, query, check = null;\n if (range.empty) {\n if (!conf.highlightWordAroundCursor)\n return Decoration.none;\n let word = state.wordAt(range.head);\n if (!word)\n return Decoration.none;\n check = state.charCategorizer(range.head);\n query = state.sliceDoc(word.from, word.to);\n }\n else {\n let len = range.to - range.from;\n if (len < conf.minSelectionLength || len > 200)\n return Decoration.none;\n if (conf.wholeWords) {\n query = state.sliceDoc(range.from, range.to); // TODO: allow and include leading/trailing space?\n check = state.charCategorizer(range.head);\n if (!(insideWordBoundaries(check, state, range.from, range.to) &&\n insideWord(check, state, range.from, range.to)))\n return Decoration.none;\n }\n else {\n query = state.sliceDoc(range.from, range.to);\n if (!query)\n return Decoration.none;\n }\n }\n let deco = [];\n for (let part of view.visibleRanges) {\n let cursor = new SearchCursor(state.doc, query, part.from, part.to);\n while (!cursor.next().done) {\n let { from, to } = cursor.value;\n if (!check || insideWordBoundaries(check, state, from, to)) {\n if (range.empty && from <= range.from && to >= range.to)\n deco.push(mainMatchDeco.range(from, to));\n else if (from >= range.to || to <= range.from)\n deco.push(matchDeco.range(from, to));\n if (deco.length > conf.maxMatches)\n return Decoration.none;\n }\n }\n }\n return Decoration.set(deco);\n }\n}, {\n decorations: v => v.decorations\n});\nconst defaultTheme = /*@__PURE__*/EditorView.baseTheme({\n \".cm-selectionMatch\": { backgroundColor: \"#99ff7780\" },\n \".cm-searchMatch .cm-selectionMatch\": { backgroundColor: \"transparent\" }\n});\n// Select the words around the cursors.\nconst selectWord = ({ state, dispatch }) => {\n let { selection } = state;\n let newSel = EditorSelection.create(selection.ranges.map(range => state.wordAt(range.head) || EditorSelection.cursor(range.head)), selection.mainIndex);\n if (newSel.eq(selection))\n return false;\n dispatch(state.update({ selection: newSel }));\n return true;\n};\n// Find next occurrence of query relative to last cursor. Wrap around\n// the document if there are no more matches.\nfunction findNextOccurrence(state, query) {\n let { main, ranges } = state.selection;\n let word = state.wordAt(main.head), fullWord = word && word.from == main.from && word.to == main.to;\n for (let cycled = false, cursor = new SearchCursor(state.doc, query, ranges[ranges.length - 1].to);;) {\n cursor.next();\n if (cursor.done) {\n if (cycled)\n return null;\n cursor = new SearchCursor(state.doc, query, 0, Math.max(0, ranges[ranges.length - 1].from - 1));\n cycled = true;\n }\n else {\n if (cycled && ranges.some(r => r.from == cursor.value.from))\n continue;\n if (fullWord) {\n let word = state.wordAt(cursor.value.from);\n if (!word || word.from != cursor.value.from || word.to != cursor.value.to)\n continue;\n }\n return cursor.value;\n }\n }\n}\n/**\nSelect next occurrence of the current selection. Expand selection\nto the surrounding word when the selection is empty.\n*/\nconst selectNextOccurrence = ({ state, dispatch }) => {\n let { ranges } = state.selection;\n if (ranges.some(sel => sel.from === sel.to))\n return selectWord({ state, dispatch });\n let searchedText = state.sliceDoc(ranges[0].from, ranges[0].to);\n if (state.selection.ranges.some(r => state.sliceDoc(r.from, r.to) != searchedText))\n return false;\n let range = findNextOccurrence(state, searchedText);\n if (!range)\n return false;\n dispatch(state.update({\n selection: state.selection.addRange(EditorSelection.range(range.from, range.to), false),\n effects: EditorView.scrollIntoView(range.to)\n }));\n return true;\n};\n\nconst searchConfigFacet = /*@__PURE__*/Facet.define({\n combine(configs) {\n return combineConfig(configs, {\n top: false,\n caseSensitive: false,\n literal: false,\n regexp: false,\n wholeWord: false,\n createPanel: view => new SearchPanel(view),\n scrollToMatch: range => EditorView.scrollIntoView(range)\n });\n }\n});\n/**\nAdd search state to the editor configuration, and optionally\nconfigure the search extension.\n([`openSearchPanel`](https://codemirror.net/6/docs/ref/#search.openSearchPanel) will automatically\nenable this if it isn't already on).\n*/\nfunction search(config) {\n return config ? [searchConfigFacet.of(config), searchExtensions] : searchExtensions;\n}\n/**\nA search query. Part of the editor's search state.\n*/\nclass SearchQuery {\n /**\n Create a query object.\n */\n constructor(config) {\n this.search = config.search;\n this.caseSensitive = !!config.caseSensitive;\n this.literal = !!config.literal;\n this.regexp = !!config.regexp;\n this.replace = config.replace || \"\";\n this.valid = !!this.search && (!this.regexp || validRegExp(this.search));\n this.unquoted = this.unquote(this.search);\n this.wholeWord = !!config.wholeWord;\n this.test = config.test;\n }\n /**\n @internal\n */\n unquote(text) {\n return this.literal ? text :\n text.replace(/\\\\([nrt\\\\])/g, (_, ch) => ch == \"n\" ? \"\\n\" : ch == \"r\" ? \"\\r\" : ch == \"t\" ? \"\\t\" : \"\\\\\");\n }\n /**\n Compare this query to another query.\n */\n eq(other) {\n return this.search == other.search && this.replace == other.replace &&\n this.caseSensitive == other.caseSensitive && this.regexp == other.regexp &&\n this.wholeWord == other.wholeWord && this.test == other.test;\n }\n /**\n @internal\n */\n create() {\n return this.regexp ? new RegExpQuery(this) : new StringQuery(this);\n }\n /**\n Get a search cursor for this query, searching through the given\n range in the given state.\n */\n getCursor(state, from = 0, to) {\n let st = state.doc ? state : EditorState.create({ doc: state });\n if (to == null)\n to = st.doc.length;\n return this.regexp ? regexpCursor(this, st, from, to) : stringCursor(this, st, from, to);\n }\n}\nclass QueryType {\n constructor(spec) {\n this.spec = spec;\n }\n}\nfunction wrapStringTest(test, state, inner) {\n return (from, to, buffer, bufferPos) => {\n if (inner && !inner(from, to, buffer, bufferPos))\n return false;\n let match = from >= bufferPos && to <= bufferPos + buffer.length\n ? buffer.slice(from - bufferPos, to - bufferPos)\n : state.doc.sliceString(from, to);\n return test(match, state, from, to);\n };\n}\nfunction stringCursor(spec, state, from, to) {\n let test;\n if (spec.wholeWord)\n test = stringWordTest(state.doc, state.charCategorizer(state.selection.main.head));\n if (spec.test)\n test = wrapStringTest(spec.test, state, test);\n return new SearchCursor(state.doc, spec.unquoted, from, to, spec.caseSensitive ? undefined : x => x.toLowerCase(), test);\n}\nfunction stringWordTest(doc, categorizer) {\n return (from, to, buf, bufPos) => {\n if (bufPos > from || bufPos + buf.length < to) {\n bufPos = Math.max(0, from - 2);\n buf = doc.sliceString(bufPos, Math.min(doc.length, to + 2));\n }\n return (categorizer(charBefore(buf, from - bufPos)) != CharCategory.Word ||\n categorizer(charAfter(buf, from - bufPos)) != CharCategory.Word) &&\n (categorizer(charAfter(buf, to - bufPos)) != CharCategory.Word ||\n categorizer(charBefore(buf, to - bufPos)) != CharCategory.Word);\n };\n}\nclass StringQuery extends QueryType {\n constructor(spec) {\n super(spec);\n }\n nextMatch(state, curFrom, curTo) {\n let cursor = stringCursor(this.spec, state, curTo, state.doc.length).nextOverlapping();\n if (cursor.done) {\n let end = Math.min(state.doc.length, curFrom + this.spec.unquoted.length);\n cursor = stringCursor(this.spec, state, 0, end).nextOverlapping();\n }\n return cursor.done || cursor.value.from == curFrom && cursor.value.to == curTo ? null : cursor.value;\n }\n // Searching in reverse is, rather than implementing an inverted search\n // cursor, done by scanning chunk after chunk forward.\n prevMatchInRange(state, from, to) {\n for (let pos = to;;) {\n let start = Math.max(from, pos - 10000 /* FindPrev.ChunkSize */ - this.spec.unquoted.length);\n let cursor = stringCursor(this.spec, state, start, pos), range = null;\n while (!cursor.nextOverlapping().done)\n range = cursor.value;\n if (range)\n return range;\n if (start == from)\n return null;\n pos -= 10000 /* FindPrev.ChunkSize */;\n }\n }\n prevMatch(state, curFrom, curTo) {\n let found = this.prevMatchInRange(state, 0, curFrom);\n if (!found)\n found = this.prevMatchInRange(state, Math.max(0, curTo - this.spec.unquoted.length), state.doc.length);\n return found && (found.from != curFrom || found.to != curTo) ? found : null;\n }\n getReplacement(_result) { return this.spec.unquote(this.spec.replace); }\n matchAll(state, limit) {\n let cursor = stringCursor(this.spec, state, 0, state.doc.length), ranges = [];\n while (!cursor.next().done) {\n if (ranges.length >= limit)\n return null;\n ranges.push(cursor.value);\n }\n return ranges;\n }\n highlight(state, from, to, add) {\n let cursor = stringCursor(this.spec, state, Math.max(0, from - this.spec.unquoted.length), Math.min(to + this.spec.unquoted.length, state.doc.length));\n while (!cursor.next().done)\n add(cursor.value.from, cursor.value.to);\n }\n}\nfunction wrapRegexpTest(test, state, inner) {\n return (from, to, match) => {\n return (!inner || inner(from, to, match)) && test(match[0], state, from, to);\n };\n}\nfunction regexpCursor(spec, state, from, to) {\n let test;\n if (spec.wholeWord)\n test = regexpWordTest(state.charCategorizer(state.selection.main.head));\n if (spec.test)\n test = wrapRegexpTest(spec.test, state, test);\n return new RegExpCursor(state.doc, spec.search, { ignoreCase: !spec.caseSensitive, test }, from, to);\n}\nfunction charBefore(str, index) {\n return str.slice(findClusterBreak(str, index, false), index);\n}\nfunction charAfter(str, index) {\n return str.slice(index, findClusterBreak(str, index));\n}\nfunction regexpWordTest(categorizer) {\n return (_from, _to, match) => !match[0].length ||\n (categorizer(charBefore(match.input, match.index)) != CharCategory.Word ||\n categorizer(charAfter(match.input, match.index)) != CharCategory.Word) &&\n (categorizer(charAfter(match.input, match.index + match[0].length)) != CharCategory.Word ||\n categorizer(charBefore(match.input, match.index + match[0].length)) != CharCategory.Word);\n}\nclass RegExpQuery extends QueryType {\n nextMatch(state, curFrom, curTo) {\n let cursor = regexpCursor(this.spec, state, curTo, state.doc.length).next();\n if (cursor.done)\n cursor = regexpCursor(this.spec, state, 0, curFrom).next();\n return cursor.done ? null : cursor.value;\n }\n prevMatchInRange(state, from, to) {\n for (let size = 1;; size++) {\n let start = Math.max(from, to - size * 10000 /* FindPrev.ChunkSize */);\n let cursor = regexpCursor(this.spec, state, start, to), range = null;\n while (!cursor.next().done)\n range = cursor.value;\n if (range && (start == from || range.from > start + 10))\n return range;\n if (start == from)\n return null;\n }\n }\n prevMatch(state, curFrom, curTo) {\n return this.prevMatchInRange(state, 0, curFrom) ||\n this.prevMatchInRange(state, curTo, state.doc.length);\n }\n getReplacement(result) {\n return this.spec.unquote(this.spec.replace).replace(/\\$([$&]|\\d+)/g, (m, i) => {\n if (i == \"&\")\n return result.match[0];\n if (i == \"$\")\n return \"$\";\n for (let l = i.length; l > 0; l--) {\n let n = +i.slice(0, l);\n if (n > 0 && n < result.match.length)\n return result.match[n] + i.slice(l);\n }\n return m;\n });\n }\n matchAll(state, limit) {\n let cursor = regexpCursor(this.spec, state, 0, state.doc.length), ranges = [];\n while (!cursor.next().done) {\n if (ranges.length >= limit)\n return null;\n ranges.push(cursor.value);\n }\n return ranges;\n }\n highlight(state, from, to, add) {\n let cursor = regexpCursor(this.spec, state, Math.max(0, from - 250 /* RegExp.HighlightMargin */), Math.min(to + 250 /* RegExp.HighlightMargin */, state.doc.length));\n while (!cursor.next().done)\n add(cursor.value.from, cursor.value.to);\n }\n}\n/**\nA state effect that updates the current search query. Note that\nthis only has an effect if the search state has been initialized\n(by including [`search`](https://codemirror.net/6/docs/ref/#search.search) in your configuration or\nby running [`openSearchPanel`](https://codemirror.net/6/docs/ref/#search.openSearchPanel) at least\nonce).\n*/\nconst setSearchQuery = /*@__PURE__*/StateEffect.define();\nconst togglePanel = /*@__PURE__*/StateEffect.define();\nconst searchState = /*@__PURE__*/StateField.define({\n create(state) {\n return new SearchState(defaultQuery(state).create(), null);\n },\n update(value, tr) {\n for (let effect of tr.effects) {\n if (effect.is(setSearchQuery))\n value = new SearchState(effect.value.create(), value.panel);\n else if (effect.is(togglePanel))\n value = new SearchState(value.query, effect.value ? createSearchPanel : null);\n }\n return value;\n },\n provide: f => showPanel.from(f, val => val.panel)\n});\n/**\nGet the current search query from an editor state.\n*/\nfunction getSearchQuery(state) {\n let curState = state.field(searchState, false);\n return curState ? curState.query.spec : defaultQuery(state);\n}\n/**\nQuery whether the search panel is open in the given editor state.\n*/\nfunction searchPanelOpen(state) {\n var _a;\n return ((_a = state.field(searchState, false)) === null || _a === void 0 ? void 0 : _a.panel) != null;\n}\nclass SearchState {\n constructor(query, panel) {\n this.query = query;\n this.panel = panel;\n }\n}\nconst matchMark = /*@__PURE__*/Decoration.mark({ class: \"cm-searchMatch\" }), selectedMatchMark = /*@__PURE__*/Decoration.mark({ class: \"cm-searchMatch cm-searchMatch-selected\" });\nconst searchHighlighter = /*@__PURE__*/ViewPlugin.fromClass(class {\n constructor(view) {\n this.view = view;\n this.decorations = this.highlight(view.state.field(searchState));\n }\n update(update) {\n let state = update.state.field(searchState);\n if (state != update.startState.field(searchState) || update.docChanged || update.selectionSet || update.viewportChanged)\n this.decorations = this.highlight(state);\n }\n highlight({ query, panel }) {\n if (!panel || !query.spec.valid)\n return Decoration.none;\n let { view } = this;\n let builder = new RangeSetBuilder();\n for (let i = 0, ranges = view.visibleRanges, l = ranges.length; i < l; i++) {\n let { from, to } = ranges[i];\n while (i < l - 1 && to > ranges[i + 1].from - 2 * 250 /* RegExp.HighlightMargin */)\n to = ranges[++i].to;\n query.highlight(view.state, from, to, (from, to) => {\n let selected = view.state.selection.ranges.some(r => r.from == from && r.to == to);\n builder.add(from, to, selected ? selectedMatchMark : matchMark);\n });\n }\n return builder.finish();\n }\n}, {\n decorations: v => v.decorations\n});\nfunction searchCommand(f) {\n return view => {\n let state = view.state.field(searchState, false);\n return state && state.query.spec.valid ? f(view, state) : openSearchPanel(view);\n };\n}\n/**\nOpen the search panel if it isn't already open, and move the\nselection to the first match after the current main selection.\nWill wrap around to the start of the document when it reaches the\nend.\n*/\nconst findNext = /*@__PURE__*/searchCommand((view, { query }) => {\n let { to } = view.state.selection.main;\n let next = query.nextMatch(view.state, to, to);\n if (!next)\n return false;\n let selection = EditorSelection.single(next.from, next.to);\n let config = view.state.facet(searchConfigFacet);\n view.dispatch({\n selection,\n effects: [announceMatch(view, next), config.scrollToMatch(selection.main, view)],\n userEvent: \"select.search\"\n });\n selectSearchInput(view);\n return true;\n});\n/**\nMove the selection to the previous instance of the search query,\nbefore the current main selection. Will wrap past the start\nof the document to start searching at the end again.\n*/\nconst findPrevious = /*@__PURE__*/searchCommand((view, { query }) => {\n let { state } = view, { from } = state.selection.main;\n let prev = query.prevMatch(state, from, from);\n if (!prev)\n return false;\n let selection = EditorSelection.single(prev.from, prev.to);\n let config = view.state.facet(searchConfigFacet);\n view.dispatch({\n selection,\n effects: [announceMatch(view, prev), config.scrollToMatch(selection.main, view)],\n userEvent: \"select.search\"\n });\n selectSearchInput(view);\n return true;\n});\n/**\nSelect all instances of the search query.\n*/\nconst selectMatches = /*@__PURE__*/searchCommand((view, { query }) => {\n let ranges = query.matchAll(view.state, 1000);\n if (!ranges || !ranges.length)\n return false;\n view.dispatch({\n selection: EditorSelection.create(ranges.map(r => EditorSelection.range(r.from, r.to))),\n userEvent: \"select.search.matches\"\n });\n return true;\n});\n/**\nSelect all instances of the currently selected text.\n*/\nconst selectSelectionMatches = ({ state, dispatch }) => {\n let sel = state.selection;\n if (sel.ranges.length > 1 || sel.main.empty)\n return false;\n let { from, to } = sel.main;\n let ranges = [], main = 0;\n for (let cur = new SearchCursor(state.doc, state.sliceDoc(from, to)); !cur.next().done;) {\n if (ranges.length > 1000)\n return false;\n if (cur.value.from == from)\n main = ranges.length;\n ranges.push(EditorSelection.range(cur.value.from, cur.value.to));\n }\n dispatch(state.update({\n selection: EditorSelection.create(ranges, main),\n userEvent: \"select.search.matches\"\n }));\n return true;\n};\n/**\nReplace the current match of the search query.\n*/\nconst replaceNext = /*@__PURE__*/searchCommand((view, { query }) => {\n let { state } = view, { from, to } = state.selection.main;\n if (state.readOnly)\n return false;\n let match = query.nextMatch(state, from, from);\n if (!match)\n return false;\n let next = match;\n let changes = [], selection, replacement;\n let effects = [];\n if (next.from == from && next.to == to) {\n replacement = state.toText(query.getReplacement(next));\n changes.push({ from: next.from, to: next.to, insert: replacement });\n next = query.nextMatch(state, next.from, next.to);\n effects.push(EditorView.announce.of(state.phrase(\"replaced match on line $\", state.doc.lineAt(from).number) + \".\"));\n }\n let changeSet = view.state.changes(changes);\n if (next) {\n selection = EditorSelection.single(next.from, next.to).map(changeSet);\n effects.push(announceMatch(view, next));\n effects.push(state.facet(searchConfigFacet).scrollToMatch(selection.main, view));\n }\n view.dispatch({\n changes: changeSet,\n selection,\n effects,\n userEvent: \"input.replace\"\n });\n return true;\n});\n/**\nReplace all instances of the search query with the given\nreplacement.\n*/\nconst replaceAll = /*@__PURE__*/searchCommand((view, { query }) => {\n if (view.state.readOnly)\n return false;\n let changes = query.matchAll(view.state, 1e9).map(match => {\n let { from, to } = match;\n return { from, to, insert: query.getReplacement(match) };\n });\n if (!changes.length)\n return false;\n let announceText = view.state.phrase(\"replaced $ matches\", changes.length) + \".\";\n view.dispatch({\n changes,\n effects: EditorView.announce.of(announceText),\n userEvent: \"input.replace.all\"\n });\n return true;\n});\nfunction createSearchPanel(view) {\n return view.state.facet(searchConfigFacet).createPanel(view);\n}\nfunction defaultQuery(state, fallback) {\n var _a, _b, _c, _d, _e;\n let sel = state.selection.main;\n let selText = sel.empty || sel.to > sel.from + 100 ? \"\" : state.sliceDoc(sel.from, sel.to);\n if (fallback && !selText)\n return fallback;\n let config = state.facet(searchConfigFacet);\n return new SearchQuery({\n search: ((_a = fallback === null || fallback === void 0 ? void 0 : fallback.literal) !== null && _a !== void 0 ? _a : config.literal) ? selText : selText.replace(/\\n/g, \"\\\\n\"),\n caseSensitive: (_b = fallback === null || fallback === void 0 ? void 0 : fallback.caseSensitive) !== null && _b !== void 0 ? _b : config.caseSensitive,\n literal: (_c = fallback === null || fallback === void 0 ? void 0 : fallback.literal) !== null && _c !== void 0 ? _c : config.literal,\n regexp: (_d = fallback === null || fallback === void 0 ? void 0 : fallback.regexp) !== null && _d !== void 0 ? _d : config.regexp,\n wholeWord: (_e = fallback === null || fallback === void 0 ? void 0 : fallback.wholeWord) !== null && _e !== void 0 ? _e : config.wholeWord\n });\n}\nfunction getSearchInput(view) {\n let panel = getPanel(view, createSearchPanel);\n return panel && panel.dom.querySelector(\"[main-field]\");\n}\nfunction selectSearchInput(view) {\n let input = getSearchInput(view);\n if (input && input == view.root.activeElement)\n input.select();\n}\n/**\nMake sure the search panel is open and focused.\n*/\nconst openSearchPanel = view => {\n let state = view.state.field(searchState, false);\n if (state && state.panel) {\n let searchInput = getSearchInput(view);\n if (searchInput && searchInput != view.root.activeElement) {\n let query = defaultQuery(view.state, state.query.spec);\n if (query.valid)\n view.dispatch({ effects: setSearchQuery.of(query) });\n searchInput.focus();\n searchInput.select();\n }\n }\n else {\n view.dispatch({ effects: [\n togglePanel.of(true),\n state ? setSearchQuery.of(defaultQuery(view.state, state.query.spec)) : StateEffect.appendConfig.of(searchExtensions)\n ] });\n }\n return true;\n};\n/**\nClose the search panel.\n*/\nconst closeSearchPanel = view => {\n let state = view.state.field(searchState, false);\n if (!state || !state.panel)\n return false;\n let panel = getPanel(view, createSearchPanel);\n if (panel && panel.dom.contains(view.root.activeElement))\n view.focus();\n view.dispatch({ effects: togglePanel.of(false) });\n return true;\n};\n/**\nDefault search-related key bindings.\n\n - Mod-f: [`openSearchPanel`](https://codemirror.net/6/docs/ref/#search.openSearchPanel)\n - F3, Mod-g: [`findNext`](https://codemirror.net/6/docs/ref/#search.findNext)\n - Shift-F3, Shift-Mod-g: [`findPrevious`](https://codemirror.net/6/docs/ref/#search.findPrevious)\n - Mod-Alt-g: [`gotoLine`](https://codemirror.net/6/docs/ref/#search.gotoLine)\n - Mod-d: [`selectNextOccurrence`](https://codemirror.net/6/docs/ref/#search.selectNextOccurrence)\n*/\nconst searchKeymap = [\n { key: \"Mod-f\", run: openSearchPanel, scope: \"editor search-panel\" },\n { key: \"F3\", run: findNext, shift: findPrevious, scope: \"editor search-panel\", preventDefault: true },\n { key: \"Mod-g\", run: findNext, shift: findPrevious, scope: \"editor search-panel\", preventDefault: true },\n { key: \"Escape\", run: closeSearchPanel, scope: \"editor search-panel\" },\n { key: \"Mod-Shift-l\", run: selectSelectionMatches },\n { key: \"Mod-Alt-g\", run: gotoLine },\n { key: \"Mod-d\", run: selectNextOccurrence, preventDefault: true },\n];\nclass SearchPanel {\n constructor(view) {\n this.view = view;\n let query = this.query = view.state.field(searchState).query.spec;\n this.commit = this.commit.bind(this);\n this.searchField = elt(\"input\", {\n value: query.search,\n placeholder: phrase(view, \"Find\"),\n \"aria-label\": phrase(view, \"Find\"),\n class: \"cm-textfield\",\n name: \"search\",\n form: \"\",\n \"main-field\": \"true\",\n onchange: this.commit,\n onkeyup: this.commit\n });\n this.replaceField = elt(\"input\", {\n value: query.replace,\n placeholder: phrase(view, \"Replace\"),\n \"aria-label\": phrase(view, \"Replace\"),\n class: \"cm-textfield\",\n name: \"replace\",\n form: \"\",\n onchange: this.commit,\n onkeyup: this.commit\n });\n this.caseField = elt(\"input\", {\n type: \"checkbox\",\n name: \"case\",\n form: \"\",\n checked: query.caseSensitive,\n onchange: this.commit\n });\n this.reField = elt(\"input\", {\n type: \"checkbox\",\n name: \"re\",\n form: \"\",\n checked: query.regexp,\n onchange: this.commit\n });\n this.wordField = elt(\"input\", {\n type: \"checkbox\",\n name: \"word\",\n form: \"\",\n checked: query.wholeWord,\n onchange: this.commit\n });\n function button(name, onclick, content) {\n return elt(\"button\", { class: \"cm-button\", name, onclick, type: \"button\" }, content);\n }\n this.dom = elt(\"div\", { onkeydown: (e) => this.keydown(e), class: \"cm-search\" }, [\n this.searchField,\n button(\"next\", () => findNext(view), [phrase(view, \"next\")]),\n button(\"prev\", () => findPrevious(view), [phrase(view, \"previous\")]),\n button(\"select\", () => selectMatches(view), [phrase(view, \"all\")]),\n elt(\"label\", null, [this.caseField, phrase(view, \"match case\")]),\n elt(\"label\", null, [this.reField, phrase(view, \"regexp\")]),\n elt(\"label\", null, [this.wordField, phrase(view, \"by word\")]),\n ...view.state.readOnly ? [] : [\n elt(\"br\"),\n this.replaceField,\n button(\"replace\", () => replaceNext(view), [phrase(view, \"replace\")]),\n button(\"replaceAll\", () => replaceAll(view), [phrase(view, \"replace all\")])\n ],\n elt(\"button\", {\n name: \"close\",\n onclick: () => closeSearchPanel(view),\n \"aria-label\": phrase(view, \"close\"),\n type: \"button\"\n }, [\"\u00D7\"])\n ]);\n }\n commit() {\n let query = new SearchQuery({\n search: this.searchField.value,\n caseSensitive: this.caseField.checked,\n regexp: this.reField.checked,\n wholeWord: this.wordField.checked,\n replace: this.replaceField.value,\n });\n if (!query.eq(this.query)) {\n this.query = query;\n this.view.dispatch({ effects: setSearchQuery.of(query) });\n }\n }\n keydown(e) {\n if (runScopeHandlers(this.view, e, \"search-panel\")) {\n e.preventDefault();\n }\n else if (e.keyCode == 13 && e.target == this.searchField) {\n e.preventDefault();\n (e.shiftKey ? findPrevious : findNext)(this.view);\n }\n else if (e.keyCode == 13 && e.target == this.replaceField) {\n e.preventDefault();\n replaceNext(this.view);\n }\n }\n update(update) {\n for (let tr of update.transactions)\n for (let effect of tr.effects) {\n if (effect.is(setSearchQuery) && !effect.value.eq(this.query))\n this.setQuery(effect.value);\n }\n }\n setQuery(query) {\n this.query = query;\n this.searchField.value = query.search;\n this.replaceField.value = query.replace;\n this.caseField.checked = query.caseSensitive;\n this.reField.checked = query.regexp;\n this.wordField.checked = query.wholeWord;\n }\n mount() {\n this.searchField.select();\n }\n get pos() { return 80; }\n get top() { return this.view.state.facet(searchConfigFacet).top; }\n}\nfunction phrase(view, phrase) { return view.state.phrase(phrase); }\nconst AnnounceMargin = 30;\nconst Break = /[\\s\\.,:;?!]/;\nfunction announceMatch(view, { from, to }) {\n let line = view.state.doc.lineAt(from), lineEnd = view.state.doc.lineAt(to).to;\n let start = Math.max(line.from, from - AnnounceMargin), end = Math.min(lineEnd, to + AnnounceMargin);\n let text = view.state.sliceDoc(start, end);\n if (start != line.from) {\n for (let i = 0; i < AnnounceMargin; i++)\n if (!Break.test(text[i + 1]) && Break.test(text[i])) {\n text = text.slice(i);\n break;\n }\n }\n if (end != lineEnd) {\n for (let i = text.length - 1; i > text.length - AnnounceMargin; i--)\n if (!Break.test(text[i - 1]) && Break.test(text[i])) {\n text = text.slice(0, i);\n break;\n }\n }\n return EditorView.announce.of(`${view.state.phrase(\"current match\")}. ${text} ${view.state.phrase(\"on line\")} ${line.number}.`);\n}\nconst baseTheme = /*@__PURE__*/EditorView.baseTheme({\n \".cm-panel.cm-search\": {\n padding: \"2px 6px 4px\",\n position: \"relative\",\n \"& [name=close]\": {\n position: \"absolute\",\n top: \"0\",\n right: \"4px\",\n backgroundColor: \"inherit\",\n border: \"none\",\n font: \"inherit\",\n padding: 0,\n margin: 0\n },\n \"& input, & button, & label\": {\n margin: \".2em .6em .2em 0\"\n },\n \"& input[type=checkbox]\": {\n marginRight: \".2em\"\n },\n \"& label\": {\n fontSize: \"80%\",\n whiteSpace: \"pre\"\n }\n },\n \"&light .cm-searchMatch\": { backgroundColor: \"#ffff0054\" },\n \"&dark .cm-searchMatch\": { backgroundColor: \"#00ffff8a\" },\n \"&light .cm-searchMatch-selected\": { backgroundColor: \"#ff6a0054\" },\n \"&dark .cm-searchMatch-selected\": { backgroundColor: \"#ff00ff8a\" }\n});\nconst searchExtensions = [\n searchState,\n /*@__PURE__*/Prec.low(searchHighlighter),\n baseTheme\n];\n\nexport { RegExpCursor, SearchCursor, SearchQuery, closeSearchPanel, findNext, findPrevious, getSearchQuery, gotoLine, highlightSelectionMatches, openSearchPanel, replaceAll, replaceNext, search, searchKeymap, searchPanelOpen, selectMatches, selectNextOccurrence, selectSelectionMatches, setSearchQuery };\n", "export default function crelt() {\n var elt = arguments[0]\n if (typeof elt == \"string\") elt = document.createElement(elt)\n var i = 1, next = arguments[1]\n if (next && typeof next == \"object\" && next.nodeType == null && !Array.isArray(next)) {\n for (var name in next) if (Object.prototype.hasOwnProperty.call(next, name)) {\n var value = next[name]\n if (typeof value == \"string\") elt.setAttribute(name, value)\n else if (value != null) elt[name] = value\n }\n i++\n }\n for (; i < arguments.length; i++) add(elt, arguments[i])\n return elt\n}\n\nfunction add(elt, child) {\n if (typeof child == \"string\") {\n elt.appendChild(document.createTextNode(child))\n } else if (child == null) {\n } else if (child.nodeType != null) {\n elt.appendChild(child)\n } else if (Array.isArray(child)) {\n for (var i = 0; i < child.length; i++) add(elt, child[i])\n } else {\n throw new RangeError(\"Unsupported child node: \" + child)\n }\n}\n", "import type { StateCommand } from \"@codemirror/state\";\nimport { EditorSelection } from \"@codemirror/state\";\nimport type { KeyBinding } from \"@codemirror/view\";\n\nconst MARKS = [\"**\", \"__\", \"~~\", \"*\", \"_\", \"`\"];\n\nconst toggleWrap =\n (mark: string): StateCommand =>\n ({ state, dispatch }) => {\n const selection = state.changeByRange((range) => {\n let from = range.from;\n let to = range.to;\n for (;;) {\n const found = MARKS.find(\n (m) =>\n state.sliceDoc(from - m.length, from) === m &&\n state.sliceDoc(to, to + m.length) === m\n );\n if (!found) break;\n if (found === mark) {\n return {\n changes: [\n { from: from - mark.length, to: from },\n { from: to, to: to + mark.length },\n ],\n range: EditorSelection.range(\n range.from - mark.length,\n range.to - mark.length\n ),\n };\n }\n from -= found.length;\n to += found.length;\n }\n\n from = range.from;\n to = range.to;\n for (;;) {\n const found = MARKS.find(\n (m) =>\n to - from >= m.length * 2 &&\n state.sliceDoc(from, from + m.length) === m &&\n state.sliceDoc(to - m.length, to) === m\n );\n if (!found) break;\n if (found === mark) {\n return {\n changes: [\n { from, to: from + mark.length },\n { from: to - mark.length, to },\n ],\n range: EditorSelection.range(\n range.from,\n range.to - mark.length * 2\n ),\n };\n }\n from += found.length;\n to -= found.length;\n }\n\n return {\n changes: [\n { from: range.from, insert: mark },\n { from: range.to, insert: mark },\n ],\n range: EditorSelection.range(\n range.from + mark.length,\n range.to + mark.length\n ),\n };\n });\n\n dispatch(state.update(selection, { scrollIntoView: true, userEvent: \"input\" }));\n return true;\n };\n\nexport const toggleBold = toggleWrap(\"**\");\nexport const toggleItalic = toggleWrap(\"_\");\nexport const toggleStrikethrough = toggleWrap(\"~~\");\nexport const toggleCode = toggleWrap(\"`\");\n\nexport const markdownFormattingKeymap: KeyBinding[] = [\n { key: \"Mod-b\", run: toggleBold, preventDefault: true },\n { key: \"Mod-i\", run: toggleItalic, preventDefault: true },\n { key: \"Mod-Shift-x\", run: toggleStrikethrough, preventDefault: true },\n { key: \"Mod-e\", run: toggleCode, preventDefault: true },\n];\n", "import { syntaxTree } from \"@codemirror/language\";\nimport { RangeSetBuilder } from \"@codemirror/state\";\nimport {\n Decoration,\n EditorView,\n ViewPlugin,\n ViewUpdate,\n WidgetType,\n type DecorationSet,\n} from \"@codemirror/view\";\n\n/**\n * GFM task list checkboxes: each `[ ]` / `[x]` marker in a list item is drawn\n * as a checkbox, and clicking it flips the character between the brackets.\n *\n * Needs the GFM markdown base (`markdownLanguage`), which is what parses the\n * `TaskMarker` node. Lives in the same bundle as the `markdown()` call so that\n * `syntaxTree` reads the same `Language` facet (see the note in embed.ts).\n */\n/**\n * The box, after nextaction's: a soft rounded square. Open, it's a clear grey\n * outline; ticked, it fades back along with its task's text \u2014 a faint outline\n * and a grey tick. The tick draws itself in (a mask slides off it) only when\n * it's just been ticked, not every time a ticked task scrolls into view, and\n * the box swells a little while pressed.\n */\nconst SVG = \"http://www.w3.org/2000/svg\";\n\nfunction tick(animate: boolean) {\n const svg = document.createElementNS(SVG, \"svg\");\n svg.setAttribute(\"viewBox\", \"0 0 24 24\");\n svg.setAttribute(\"class\", \"cm-task-tick\");\n svg.setAttribute(\"aria-hidden\", \"true\");\n const path = document.createElementNS(SVG, \"path\");\n path.setAttribute(\"d\", \"M19 7L10 16.5l-4.5-4.5\");\n svg.append(path);\n if (animate) {\n // a block of the page's colour over the tick, sliding off it\n const mask = document.createElementNS(SVG, \"rect\");\n mask.setAttribute(\"class\", \"cm-task-tick-mask\");\n for (const [k, v] of [[\"x\", \"0\"], [\"y\", \"0\"], [\"width\", \"24\"], [\"height\", \"24\"]])\n mask.setAttribute(k, v);\n const slide = document.createElementNS(SVG, \"animate\");\n for (const [k, v] of [\n [\"attributeName\", \"x\"],\n [\"values\", \"0;24;24\"],\n [\"dur\", \"0.24s\"],\n [\"begin\", \"0.1s\"],\n [\"fill\", \"freeze\"],\n ])\n slide.setAttribute(k, v);\n mask.append(slide);\n svg.append(mask);\n }\n return svg;\n}\n\n/** When a box was last ticked: the box drawn just after animates its tick. */\nconst justTicked = new WeakMap<EditorView, number>();\n\nclass TaskWidget extends WidgetType {\n constructor(readonly checked: boolean) {\n super();\n }\n\n eq(other: TaskWidget) {\n return other.checked === this.checked;\n }\n\n toDOM(view: EditorView) {\n const box = document.createElement(\"span\");\n box.className = \"cm-task\" + (this.checked ? \" cm-task-checked\" : \"\");\n box.setAttribute(\"role\", \"checkbox\");\n box.setAttribute(\"aria-checked\", String(this.checked));\n box.setAttribute(\"aria-label\", this.checked ? \"Done\" : \"To do\");\n const disabled = !view.state.facet(EditorView.editable);\n if (disabled) box.setAttribute(\"aria-disabled\", \"true\");\n\n if (this.checked) {\n const ticked = justTicked.get(view);\n box.append(tick(ticked !== undefined && performance.now() - ticked < 400));\n }\n\n // mousedown, not click: keeps focus/selection where it was and stops\n // CodeMirror from moving the cursor onto the line.\n box.addEventListener(\"mousedown\", (event) => {\n // only the main button ticks it: a right-click is for the list menu.\n if (event.button !== 0) return;\n event.preventDefault();\n if (disabled) return;\n box.classList.add(\"cm-task-pressed\");\n const up = () => {\n box.classList.remove(\"cm-task-pressed\");\n window.removeEventListener(\"mouseup\", up, true);\n };\n window.addEventListener(\"mouseup\", up, true);\n if (!this.checked) justTicked.set(view, performance.now());\n toggle(view, view.posAtDOM(box));\n });\n return box;\n }\n\n ignoreEvent() {\n return true;\n }\n}\n\n/** Flip the task marker starting at `from` (the `[`). */\nfunction toggle(view: EditorView, from: number) {\n const marker = view.state.doc.sliceString(from, from + 3);\n if (!/^\\[[ xX]\\]$/.test(marker)) return;\n const insert = marker[1] === \" \" ? \"x\" : \" \";\n view.dispatch({\n changes: { from: from + 1, to: from + 2, insert },\n userEvent: \"input.toggle-task\",\n });\n}\n\nconst motion = (ms: number) =>\n `max(1ms, calc(${ms}ms * var(--studio-motion-scale, 1) * var(--studio-motion-preference, 1)))`;\n\nconst ink = (fade: number) =>\n `color-mix(in oklab, var(--text-editor-line, currentColor), transparent ${fade}%)`;\n\nconst taskTheme = EditorView.baseTheme({\n \".cm-task\": {\n \"--cm-task-size\": \"calc(1.05rem * var(--markdown-zoom, 1))\",\n boxSizing: \"border-box\",\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n flex: \"none\",\n width: \"var(--cm-task-size)\",\n height: \"var(--cm-task-size)\",\n borderRadius: \"calc(var(--cm-task-size) / 3.5)\",\n border: `1.5px solid ${ink(45)}`,\n color: ink(45),\n verticalAlign: \"-0.15em\",\n cursor: \"var(--studio-cursor-pointer, pointer)\",\n userSelect: \"none\",\n transition: `border-color ${motion(140)} linear, color ${motion(140)} linear, scale ${motion(100)} ease`,\n },\n \".cm-task-pressed\": {\n scale: \"1.1\",\n },\n // done: it steps back with its text (see .cm-task-done)\n \".cm-task-checked\": {\n borderColor: ink(80),\n color: ink(55),\n },\n \".cm-task[aria-disabled]\": {\n cursor: \"default\",\n },\n \".cm-task-tick\": {\n width: \"100%\",\n height: \"100%\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: \"2.5\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n },\n \".cm-task-tick-mask\": {\n fill: \"var(--text-editor-fill, white)\",\n stroke: \"none\",\n },\n});\n\nconst doneMark = Decoration.mark({ class: \"cm-task-done\" });\n\nfunction build(view: EditorView): DecorationSet {\n const builder = new RangeSetBuilder<Decoration>();\n const { doc } = view.state;\n for (const { from, to } of view.visibleRanges) {\n syntaxTree(view.state).iterate({\n from,\n to,\n enter: (node) => {\n if (node.name !== \"TaskMarker\") return;\n const checked = doc.sliceString(node.from + 1, node.to - 1) !== \" \";\n builder.add(\n node.from,\n node.to,\n Decoration.replace({ widget: new TaskWidget(checked) })\n );\n // Fade a done task's text (the `Task` node runs from the marker to\n // the end of the item's paragraph; nested lists sit outside it).\n const task = node.node.parent;\n if (checked && task?.name === \"Task\" && task.to > node.to) {\n builder.add(node.to, task.to, doneMark);\n }\n },\n });\n }\n return builder.finish();\n}\n\nconst taskPlugin = ViewPlugin.fromClass(\n class {\n decorations: DecorationSet;\n constructor(view: EditorView) {\n this.decorations = build(view);\n }\n update(update: ViewUpdate) {\n // The tree changes as the parser catches up, not only on edits.\n if (\n update.docChanged ||\n update.viewportChanged ||\n syntaxTree(update.startState) !== syntaxTree(update.state)\n ) {\n this.decorations = build(update.view);\n }\n }\n },\n { decorations: (v) => v.decorations }\n);\n\nexport const taskCheckboxes = [taskPlugin, taskTheme];\n", "import { syntaxTree } from \"@codemirror/language\";\nimport { type EditorState, type Range } from \"@codemirror/state\";\nimport {\n Decoration,\n EditorView,\n ViewPlugin,\n WidgetType,\n type DecorationSet,\n type ViewUpdate,\n} from \"@codemirror/view\";\n\n/**\n * Bear-style margin: block markers hang out to the left of the text, so the\n * body text of headings, lists and quotes all starts on the same column.\n *\n * H1 The title (`# ` \u2192 H1 label)\n * \u2022 a bullet (`- ` \u2192 dot)\n * 3. a number (the number it renders as, whatever was typed)\n * \u2610 a task (`- [ ] ` \u2192 checkbox, no bullet)\n * \u2503 a quote (`> ` \u2192 a bar)\n *\n * The markup itself is never shown, and the caret never goes into it: see\n * prefix.ts.\n *\n * Everything hung goes in a `.cm-md-hang` box: a fixed-width inline-flex with\n * a negative margin of the same width, so it takes no room on the line and\n * whatever it holds sits right-aligned in the margin. Its width is in rem so a\n * big heading doesn't hang further out than a paragraph.\n */\n\nconst hidden = Decoration.replace({});\n// inclusive, so it wraps the checkbox widget tasks.ts puts at its very start.\nconst taskMark = Decoration.mark({\n class: \"cm-md-hang cm-md-list-marker\",\n inclusive: true,\n});\n\nclass HeadingLabel extends WidgetType {\n /** `shown` only on the caret's line; elsewhere it keeps its room, unseen. */\n constructor(readonly level: number, readonly shown: boolean) {\n super();\n }\n eq(other: HeadingLabel) {\n return other.level === this.level && other.shown === this.shown;\n }\n toDOM() {\n const span = document.createElement(\"span\");\n span.className = `cm-md-hang cm-md-heading-label${this.shown ? \"\" : \" cm-md-heading-label-idle\"}`;\n span.setAttribute(\"aria-hidden\", \"true\");\n const n = document.createElement(\"span\");\n n.className = \"cm-md-heading-level\";\n n.textContent = String(this.level);\n span.append(\"H\", n);\n return span;\n }\n}\n\nclass Bullet extends WidgetType {\n eq() {\n return true;\n }\n toDOM() {\n const span = document.createElement(\"span\");\n span.className = \"cm-md-hang cm-md-list-marker\";\n const dot = document.createElement(\"span\");\n dot.className = \"cm-bullet\";\n span.append(dot);\n return span;\n }\n}\n\nclass Rule extends WidgetType {\n eq() {\n return true;\n }\n toDOM() {\n const hr = document.createElement(\"span\");\n hr.className = \"cm-md-hr\";\n hr.setAttribute(\"role\", \"separator\");\n return hr;\n }\n}\n\nclass NumberLabel extends WidgetType {\n constructor(readonly text: string) {\n super();\n }\n eq(other: NumberLabel) {\n return other.text === this.text;\n }\n toDOM() {\n const span = document.createElement(\"span\");\n span.className = \"cm-md-hang cm-md-list-marker cm-md-hang-number\";\n span.textContent = this.text;\n return span;\n }\n}\n\ntype SyntaxNode = ReturnType<ReturnType<typeof syntaxTree>[\"resolveInner\"]>;\n\n/**\n * What an ordered list mark renders as: CommonMark numbers a list from its\n * first item's number and counts up, whatever the later items say, so\n * `1. 2. 10.` is 1, 2, 3. The source is left alone \u2014 rewriting it would race\n * other people renumbering the same list \u2014 and the margin shows the truth.\n */\nfunction renderedNumber(state: EditorState, mark: SyntaxNode) {\n const text = state.doc.sliceString(mark.from, mark.to);\n const delimiter = text.slice(-1);\n let item = mark.parent;\n if (!item || item.name !== \"ListItem\") return text;\n let index = 0;\n let first = item;\n for (let prev = item.prevSibling; prev; prev = prev.prevSibling) {\n if (prev.name !== \"ListItem\") continue;\n index++;\n first = prev;\n }\n const firstMark = first.getChild(\"ListMark\");\n const start = firstMark\n ? parseInt(state.doc.sliceString(firstMark.from, firstMark.to), 10)\n : 1;\n const n = (Number.isNaN(start) ? 1 : start) + index;\n // nested ordered lists count the way GitHub draws them: 1. \u2192 i. \u2192 a.\n let depth = 0;\n for (let p = item.parent?.parent; p; p = p.parent)\n if (p.name === \"OrderedList\") depth++;\n return `${counter(n, depth)}${delimiter}`;\n}\n\n/** `n` in the style for an ordered list `depth` lists deep. */\nexport function counter(n: number, depth: number) {\n const style = depth % 3;\n if (style === 1 && n > 0 && n < 4000) return roman(n);\n if (style === 2 && n > 0) return alpha(n);\n return String(n);\n}\n\nfunction roman(n: number) {\n const numerals: [number, string][] = [\n [1000, \"m\"], [900, \"cm\"], [500, \"d\"], [400, \"cd\"], [100, \"c\"], [90, \"xc\"],\n [50, \"l\"], [40, \"xl\"], [10, \"x\"], [9, \"ix\"], [5, \"v\"], [4, \"iv\"], [1, \"i\"],\n ];\n let out = \"\";\n for (const [value, numeral] of numerals)\n while (n >= value) {\n out += numeral;\n n -= value;\n }\n return out;\n}\n\nfunction alpha(n: number) {\n let out = \"\";\n while (n > 0) {\n n--;\n out = String.fromCharCode(97 + (n % 26)) + out;\n n = Math.floor(n / 26);\n }\n return out;\n}\n\nconst codeLine = Decoration.line({ class: \"cm-md-code\" });\nconst inlineCode = Decoration.mark({ class: \"cm-md-inline-code\" });\nconst calloutMarker = Decoration.mark({ class: \"cm-md-callout-marker\" });\n\n/** Lines holding any part of the selection: a callout's `[!NOTE]` shows as\n * text on them, so its type can be changed. */\nfunction caretLines(state: EditorState) {\n const lines = new Set<number>();\n for (const r of state.selection.ranges) {\n const last = state.doc.lineAt(r.to).number;\n for (let n = state.doc.lineAt(r.from).number; n <= last; n++) lines.add(n);\n }\n return lines;\n}\n\nexport const CALLOUTS = {\n note: \"Note\",\n tip: \"Tip\",\n important: \"Important\",\n warning: \"Warning\",\n caution: \"Caution\",\n} as const;\nexport type CalloutType = keyof typeof CALLOUTS;\n\n/**\n * A GitHub-style callout's marker on the first line of a quote:\n * `> [!NOTE]`, any case. Text after it (`> [!TIP] Shortcuts`) is taken as the\n * title, as Obsidian does; GitHub would leave it in the body.\n */\nfunction calloutAt(line: { from: number; text: string }) {\n const m = /^((?:\\s*>\\s?)+)\\[!(\\w+)\\][ \\t]*(.*)$/.exec(line.text);\n if (!m) return null;\n const type = m[2].toLowerCase();\n if (!(type in CALLOUTS)) return null;\n const from = line.from + m[1].length;\n return {\n type: type as CalloutType,\n from,\n to: line.from + line.text.length - m[3].length,\n titled: m[3].trim() !== \"\",\n };\n}\n\n// 16\u00D716, stroked in currentColor.\nconst ICONS: Record<CalloutType, string> = {\n note: '<circle cx=\"8\" cy=\"8\" r=\"6.25\"/><path d=\"M8 7.25v4M8 4.75v.01\"/>',\n tip: '<path d=\"M5.75 11.5h4.5M6.5 14h3M8 1.75a4.25 4.25 0 0 0-2.5 7.7c.5.4.75.9.75 1.55V11.5h3.5V11c0-.65.25-1.15.75-1.55A4.25 4.25 0 0 0 8 1.75z\"/>',\n important: '<path d=\"M2.25 3.25a1.5 1.5 0 0 1 1.5-1.5h8.5a1.5 1.5 0 0 1 1.5 1.5v6.5a1.5 1.5 0 0 1-1.5 1.5H7l-3 2.5v-2.5h-.25a1.5 1.5 0 0 1-1.5-1.5z\"/><path d=\"M8 4.5v3M8 9.5v.01\"/>',\n warning: '<path d=\"M7.13 2.25a1 1 0 0 1 1.74 0l5.6 9.75a1 1 0 0 1-.87 1.5H2.4a1 1 0 0 1-.87-1.5z\"/><path d=\"M8 6v3M8 11v.01\"/>',\n caution: '<path d=\"M5.5 1.75h5l3.75 3.75v5l-3.75 3.75h-5L1.75 10.5v-5z\"/><path d=\"M8 5v3.5M8 10.75v.01\"/>',\n};\n\nclass CalloutTitle extends WidgetType {\n constructor(readonly type: CalloutType, readonly label: boolean) {\n super();\n }\n eq(other: CalloutTitle) {\n return other.type === this.type && other.label === this.label;\n }\n toDOM() {\n const span = document.createElement(\"span\");\n span.className = \"cm-md-callout-title\";\n span.innerHTML =\n `<svg viewBox=\"0 0 16 16\" aria-hidden=\"true\" fill=\"none\" stroke=\"currentColor\" ` +\n `stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">${ICONS[this.type]}</svg>`;\n if (this.label) span.append(CALLOUTS[this.type]);\n else span.setAttribute(\"aria-label\", CALLOUTS[this.type]);\n return span;\n }\n}\n\n/**\n * Lists are laid out with indentation, not spaces: every line in one is\n * padded by its depth (one list indent per list it's in), its markdown\n * indentation is hidden, and the marker sits in the padding \u2014 on the body's\n * column at the top level \u2014 so an item's text, and its wrapped lines, start\n * one indent in.\n */\nfunction listLines(\n state: EditorState,\n from: number,\n to: number,\n decos: Range<Decoration>[]\n) {\n const { doc } = state;\n const tree = syntaxTree(state);\n const last = doc.lineAt(to).number;\n for (let n = doc.lineAt(from).number; n <= last; n++) {\n const line = doc.line(n);\n const indent = /^[ \\t]*/.exec(line.text)![0].length;\n if (indent === line.length) continue; // blank\n let depth = 0;\n let code = false;\n for (\n let node: SyntaxNode | null = tree.resolveInner(line.from + indent, 1);\n node;\n node = node.parent\n ) {\n if (node.name === \"ListItem\") depth++;\n if (node.name === \"FencedCode\" || node.name === \"CodeBlock\") code = true;\n }\n if (!depth) continue;\n decos.push(\n Decoration.line({\n class: \"cm-md-list-line\",\n attributes: { style: `--md-list-depth: ${depth}` },\n }).range(line.from)\n );\n // code keeps its spaces: they're part of what it says.\n if (indent && !code) decos.push(hidden.range(line.from, line.from + indent));\n }\n}\n\n/** `pos` moved past any spaces (not newlines) that follow it. */\nfunction skipSpaces(state: EditorState, pos: number) {\n const line = state.doc.lineAt(pos);\n while (pos < line.to && state.doc.sliceString(pos, pos + 1) === \" \") pos++;\n return pos;\n}\n\nfunction build(view: EditorView): DecorationSet {\n const { state } = view;\n const { doc } = state;\n const editing = caretLines(state);\n const decos: Range<Decoration>[] = [];\n\n for (const { from, to } of view.visibleRanges) {\n syntaxTree(state).iterate({\n from,\n to,\n enter: (node) => {\n const name = node.name;\n\n const heading = /^ATXHeading(\\d)$/.exec(name);\n if (heading) {\n const mark = node.node.firstChild;\n if (!mark || mark.name !== \"HeaderMark\") return;\n const line = doc.lineAt(node.from);\n decos.push(\n Decoration.replace({\n widget: new HeadingLabel(Number(heading[1]), editing.has(line.number)),\n }).range(line.from, skipSpaces(state, mark.to)),\n // the heading's size on the whole line, for what the highlighter\n // doesn't wrap (a rendered link): see headingLines in the theme.\n Decoration.line({ class: `cm-md-h${heading[1]}` }).range(line.from)\n );\n return;\n }\n\n if (name === \"ListMark\") {\n const end = skipSpaces(state, node.to);\n const char = doc.sliceString(node.from, node.to);\n const bullet = [\"-\", \"+\", \"*\"].includes(char);\n const task = node.node.nextSibling?.firstChild;\n const isTask =\n bullet &&\n task?.name === \"TaskMarker\" &&\n doc.sliceString(end, task.from).trim() === \"\";\n if (isTask && task) {\n // the checkbox takes the bullet's place: drop the mark, and hang\n // the task marker (which tasks.ts draws as a checkbox).\n if (end > node.from) decos.push(hidden.range(node.from, end));\n decos.push(taskMark.range(task.from, task.to));\n // the space after the box is hidden, not hung: hung, the caret\n // at the start of the text would be drawn at the end of the hang.\n const after = skipSpaces(state, task.to);\n if (after > task.to) decos.push(hidden.range(task.to, after));\n return;\n }\n if (bullet) {\n decos.push(\n Decoration.replace({ widget: new Bullet() }).range(node.from, end)\n );\n } else {\n decos.push(\n Decoration.replace({\n widget: new NumberLabel(renderedNumber(state, node.node)),\n }).range(node.from, end)\n );\n }\n return;\n }\n\n if (\n (name === \"BulletList\" || name === \"OrderedList\") &&\n node.node.parent?.name !== \"ListItem\"\n ) {\n listLines(state, node.from, node.to, decos);\n return; // carry on into it for its marks\n }\n\n if (name === \"FencedCode\" || name === \"CodeBlock\") {\n // every line in the code font, whether or not its language\n // highlighter tags each word: untagged text would otherwise take\n // the body font.\n const first = doc.lineAt(node.from).number;\n const last = doc.lineAt(node.to).number;\n for (let n = first; n <= last; n++) {\n const ends =\n (n === first ? \" cm-md-code-first\" : \"\") +\n (n === last ? \" cm-md-code-last\" : \"\");\n decos.push(\n (ends ? Decoration.line({ class: \"cm-md-code\" + ends }) : codeLine).range(\n doc.line(n).from\n )\n );\n }\n return false;\n }\n\n if (name === \"HorizontalRule\") {\n // a rule across the text; the `---` itself only on the caret's line\n const line = doc.lineAt(node.from);\n if (!editing.has(line.number))\n decos.push(\n Decoration.replace({ widget: new Rule() }).range(node.from, node.to)\n );\n return false;\n }\n\n if (name === \"InlineCode\") {\n // one tinted pill for the whole thing, backticks and all\n decos.push(inlineCode.range(node.from, node.to));\n return false;\n }\n\n if (name === \"Blockquote\") {\n // one bar per quote, however deeply it nests.\n for (let p = node.node.parent; p; p = p.parent)\n if (p.name === \"Blockquote\") return;\n const first = doc.lineAt(node.from).number;\n const last = doc.lineAt(node.to).number;\n const callout = calloutAt(doc.line(first));\n for (let n = first; n <= last; n++) {\n const line = doc.line(n);\n const classes = [\"cm-md-quote\"];\n if (n === first) classes.push(\"cm-md-quote-first\");\n if (n === last) classes.push(\"cm-md-quote-last\");\n if (callout) {\n classes.push(\"cm-md-callout\", `cm-md-callout-${callout.type}`);\n if (n === first) classes.push(\"cm-md-callout-title-line\");\n }\n decos.push(\n Decoration.line({ class: classes.join(\" \") }).range(line.from)\n );\n }\n if (callout) {\n decos.push(\n editing.has(first)\n ? calloutMarker.range(callout.from, callout.to)\n : Decoration.replace({\n widget: new CalloutTitle(callout.type, !callout.titled),\n }).range(callout.from, callout.to)\n );\n }\n return; // carry on into it for its QuoteMarks\n }\n\n if (name === \"QuoteMark\") {\n const line = doc.lineAt(node.from);\n // only the first mark on a line starts the prefix; `>>` nests.\n const before = doc.sliceString(line.from, node.from);\n if (before.trim() !== \"\") return;\n let end = node.to;\n for (;;) {\n const next = skipSpaces(state, end);\n if (doc.sliceString(next, next + 1) !== \">\") break;\n end = next + 1;\n }\n end = skipSpaces(state, end);\n decos.push(hidden.range(line.from, end));\n }\n },\n });\n }\n\n return Decoration.set(decos, true);\n}\n\nconst marginPlugin = ViewPlugin.fromClass(\n class {\n decorations: DecorationSet;\n constructor(view: EditorView) {\n this.decorations = build(view);\n }\n update(update: ViewUpdate) {\n if (\n update.docChanged ||\n update.selectionSet ||\n update.viewportChanged ||\n syntaxTree(update.startState) !== syntaxTree(update.state)\n ) {\n this.decorations = build(update.view);\n }\n }\n },\n { decorations: (v) => v.decorations }\n);\n\nconst zoomed = (length: string) => `calc(${length} * var(--markdown-zoom, 1))`;\n\nconst marginTheme = EditorView.baseTheme({\n \".cm-content\": {\n \"--markdown-hang\": zoomed(\"2.5rem\"),\n \"--markdown-list-indent\": zoomed(\"1.6rem\"),\n \"--markdown-quote-indent\": zoomed(\"1.1rem\"),\n },\n \".cm-md-hang\": {\n display: \"inline-flex\",\n justifyContent: \"flex-end\",\n alignItems: \"baseline\",\n boxSizing: \"border-box\",\n width: \"var(--markdown-hang)\",\n marginLeft: \"calc(-1 * var(--markdown-hang))\",\n paddingRight: zoomed(\"0.6rem\"),\n whiteSpace: \"pre\",\n // a heading's raw `## ` shrinks to label size so it fits the margin.\n fontSize: zoomed(\"0.8rem\"),\n color: \"var(--text-editor-line-offset-40, #999)\",\n fontWeight: \"normal\",\n fontStyle: \"normal\",\n textDecoration: \"none\",\n },\n // highlight spans inside the box (a heading's `##`) keep their own size and\n // margins otherwise, and as flex items those margins would push the line.\n \".cm-md-hang *\": {\n fontSize: \"inherit\",\n margin: \"0\",\n },\n \".cm-md-hang-number\": {\n fontSize: \"inherit\",\n color: \"inherit\",\n fontVariantNumeric: \"tabular-nums\",\n },\n \".cm-md-heading-label\": {\n fontFamily: \"var(--markdown-body-family, inherit)\",\n letterSpacing: \"0.02em\",\n },\n \".cm-md-heading-label-idle\": {\n visibility: \"hidden\",\n },\n // a list line: padded one indent per level (CodeMirror's own 6px first)\n \".cm-md-list-line\": {\n paddingLeft: \"calc(6px + var(--md-list-depth, 1) * var(--markdown-list-indent))\",\n },\n // its marker, in that padding: from the start of the indent, not hung right\n \".cm-md-list-marker\": {\n width: \"var(--markdown-list-indent)\",\n marginLeft: \"calc(-1 * var(--markdown-list-indent))\",\n justifyContent: \"flex-start\",\n paddingRight: \"0\",\n },\n \".cm-md-heading-level\": {\n fontSize: \"0.75em\",\n verticalAlign: \"-0.15em\",\n },\n \".cm-md-hang .cm-bullet\": {\n display: \"inline-block\",\n width: \"0.5em\",\n height: \"0.5em\",\n // in the box's left, centred under where a number's first digit sits\n marginLeft: \"0.15em\",\n borderRadius: \"50%\",\n // theming's list marker colour (the primary accent, as ink)\n background:\n \"var(--syntax-list-marker, var(--text-editor-primary-text, currentColor))\",\n alignSelf: \"center\",\n },\n \".cm-md-hang .cm-task\": {\n margin: \"0\",\n },\n // a quote: its bar on the body's column, its text one quote indent in\n \".cm-md-quote\": {\n position: \"relative\",\n paddingLeft: \"calc(6px + var(--markdown-quote-indent))\",\n },\n // code sits on a faint step up the editor's fill ramp: inline, a pill;\n // a block, a rounded panel with a little room inside\n \".cm-md-code\": {\n fontFamily: \"var(--text-editor-family-code)\",\n background: \"var(--text-editor-fill-offset-10, rgb(0 0 0 / 0.04))\",\n paddingInline: `calc(6px + ${zoomed(\"0.75rem\")})`,\n },\n \".cm-md-code-first\": {\n paddingTop: zoomed(\"0.5rem\"),\n borderTopLeftRadius: \"6px\",\n borderTopRightRadius: \"6px\",\n },\n \".cm-md-code-last\": {\n paddingBottom: zoomed(\"0.5rem\"),\n borderBottomLeftRadius: \"6px\",\n borderBottomRightRadius: \"6px\",\n },\n \".cm-md-hr\": {\n display: \"inline-block\",\n width: \"100%\",\n verticalAlign: \"middle\",\n borderTop:\n \"var(--studio-border-width, 1px) var(--studio-border-style, solid) var(--text-editor-fill-offset-40, rgb(0 0 0 / 0.15))\",\n },\n \".cm-md-inline-code\": {\n background: \"var(--text-editor-fill-offset-10, rgb(0 0 0 / 0.04))\",\n borderRadius: \"4px\",\n padding: \"0.1em 0.3em\",\n boxDecorationBreak: \"clone\",\n WebkitBoxDecorationBreak: \"clone\",\n },\n\n // GitHub-style callouts. Colours from theming's --studio-callout-* (the\n // accent: bar) and --text-editor-callout-*-text/-fill (title ink, box\n // tint), with fallbacks for running without the theme.\n ...Object.fromEntries(\n (Object.keys(CALLOUTS) as CalloutType[]).map((type) => {\n const fallback = { note: \"#36e\", tip: \"#1a7f37\", important: \"#8250df\", warning: \"#d4a72c\", caution: \"#d1242f\" }[type];\n return [\n `.cm-md-callout-${type}`,\n {\n \"--md-callout\": `var(--studio-callout-${type}, ${fallback})`,\n \"--md-callout-text\": `var(--text-editor-callout-${type}-text, color-mix(in oklch, var(--md-callout), currentColor 35%))`,\n \"--md-callout-fill\": `var(--text-editor-callout-${type}-fill, color-mix(in oklch, var(--md-callout) 9%, transparent))`,\n },\n ];\n })\n ),\n \".cm-md-callout\": {\n // the body reads as body text, not as a quote: the theme's quote styling\n // (italic, the punctuation grey) comes through these variables.\n \"--syntax-quote\": \"var(--text-editor-line)\",\n \"--syntax-style-quote\": \"normal\",\n \"--syntax-weight-quote\": \"normal\",\n \"--syntax-fill-quote\": \"transparent\",\n // a stacking context, so the tint drawn behind the text (z-index -1)\n // stays above the editor's own background.\n isolation: \"isolate\",\n paddingRight: zoomed(\"0.75rem\"),\n },\n // (doubled up to outrank the plain quote bar's rule further down)\n \".cm-md-quote.cm-md-callout::before\": {\n background: \"var(--md-callout)\",\n opacity: \"1\",\n },\n \".cm-md-callout::after\": {\n content: '\"\"',\n position: \"absolute\",\n zIndex: \"-1\",\n left: \"6px\",\n right: \"0\",\n top: \"0\",\n bottom: \"0\",\n background: \"var(--md-callout-fill)\",\n },\n \".cm-md-callout.cm-md-quote-first\": {\n paddingTop: zoomed(\"0.5rem\"),\n },\n \".cm-md-callout.cm-md-quote-last\": {\n paddingBottom: zoomed(\"0.5rem\"),\n },\n \".cm-md-callout.cm-md-quote-first::before, .cm-md-callout.cm-md-quote-first::after\": {\n top: \"0\",\n borderTopRightRadius: \"6px\",\n },\n \".cm-md-callout.cm-md-quote-last::before, .cm-md-callout.cm-md-quote-last::after\": {\n bottom: \"0\",\n borderBottomRightRadius: \"6px\",\n },\n \".cm-md-callout.cm-md-quote-first::before\": { borderTopRightRadius: \"0\" },\n \".cm-md-callout.cm-md-quote-last::before\": { borderBottomRightRadius: \"0\" },\n \".cm-md-callout-title-line\": {\n color: \"var(--md-callout-text)\",\n fontWeight: \"600\",\n },\n \".cm-md-callout-title\": {\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: \"0.4em\",\n color: \"var(--md-callout-text)\",\n fontWeight: \"600\",\n marginRight: \"0.4em\",\n },\n \".cm-md-callout-title svg\": {\n width: \"1em\",\n height: \"1em\",\n flex: \"none\",\n },\n // the raw `[!NOTE]`, on the caret's line. it parses as a reference link,\n // so the highlighter's link colour and underline are undone inside it.\n \".cm-md-callout-marker, .cm-md-callout-marker *\": {\n color: \"var(--md-callout-text)\",\n textDecoration: \"none\",\n },\n \".cm-md-callout-marker\": {\n fontFamily: \"var(--text-editor-family-code)\",\n fontSize: \"0.9em\",\n },\n \".cm-md-quote::before\": {\n content: '\"\"',\n position: \"absolute\",\n // on the body's column (past CodeMirror's own 6px line padding)\n left: \"6px\",\n top: \"0\",\n bottom: \"0\",\n width: \"3px\",\n background: \"var(--syntax-quote-bar, var(--studio-link, currentColor))\",\n opacity: \"0.6\",\n },\n \".cm-md-quote-first::before\": {\n top: \"0.2em\",\n borderTopLeftRadius: \"3px\",\n borderTopRightRadius: \"3px\",\n },\n \".cm-md-quote-last::before\": {\n bottom: \"0.2em\",\n borderBottomLeftRadius: \"3px\",\n borderBottomRightRadius: \"3px\",\n },\n});\n\nexport const margin = [marginPlugin, marginTheme];\n", "import { syntaxTree } from \"@codemirror/language\";\nimport {\n EditorSelection,\n type EditorState,\n Prec,\n type Line,\n type StateCommand,\n} from \"@codemirror/state\";\nimport { keymap } from \"@codemirror/view\";\n\n/**\n * Headings behave like the block type they are in lush and rich, not like\n * text that starts with `#`. The `# ` is a block prefix (prefix.ts: never\n * shown, never holds the caret, Backspace at the text's start removes it);\n * this adds what's particular to headings:\n *\n * - Enter at the start of a heading pushes it down, leaving a line above.\n * - Mod-Shift-h / Mod-Shift-j make a heading / subheading (lush's keys), and\n * Mod-Shift-b makes body text. Mod-Alt-1\u20263 and Mod-Alt-0 do the same.\n * (lush's Title key, Mod-Shift-t, belongs to the browser.)\n */\n\nexport type HeadingPrefix = { from: number; to: number; level: number };\n\n/** The hidden `# ` at the start of `line`, if the line is an ATX heading. */\nexport function headingPrefix(\n state: EditorState,\n line: Line\n): HeadingPrefix | null {\n for (\n let node: ReturnType<ReturnType<typeof syntaxTree>[\"resolveInner\"]> | null =\n syntaxTree(state).resolveInner(line.from, 1);\n node;\n node = node.parent\n ) {\n const m = /^ATXHeading(\\d)$/.exec(node.name);\n if (!m) continue;\n if (state.doc.lineAt(node.from).number !== line.number) return null;\n const mark = node.firstChild;\n if (!mark || mark.name !== \"HeaderMark\") return null;\n let to = mark.to;\n while (to < line.to && state.doc.sliceString(to, to + 1) === \" \") to++;\n return { from: line.from, to, level: Number(m[1]) };\n }\n return null;\n}\n\n/** Each line touched by the selection, once. */\nfunction selectedLines(state: EditorState) {\n const seen = new Set<number>();\n const lines: Line[] = [];\n for (const r of state.selection.ranges) {\n for (\n let n = state.doc.lineAt(r.from).number;\n n <= state.doc.lineAt(r.to).number;\n n++\n ) {\n if (seen.has(n)) continue;\n seen.add(n);\n lines.push(state.doc.line(n));\n }\n }\n return lines;\n}\n\n/**\n * Make the selected lines headings of `level`, or body text for level 0.\n * If every line is already that level it toggles them back to body text.\n */\nexport const setHeading =\n (level: number): StateCommand =>\n ({ state, dispatch }) => {\n const lines = selectedLines(state);\n const prefixes = lines.map((line) => headingPrefix(state, line));\n const already =\n level > 0 && prefixes.every((p) => p && p.level === level);\n const target = already ? 0 : level;\n const insert = target ? \"#\".repeat(target) + \" \" : \"\";\n const changes = lines.map((line, i) => {\n const p = prefixes[i];\n return { from: line.from, to: p ? p.to : line.from, insert };\n });\n dispatch(\n state.update({\n changes,\n scrollIntoView: true,\n userEvent: \"input.format\",\n })\n );\n return true;\n };\n\n/** The prefix of the heading whose text the (only, empty) cursor starts. */\nfunction atHeadingStart(state: EditorState) {\n const sel = state.selection;\n if (sel.ranges.length !== 1 || !sel.main.empty) return null;\n const line = state.doc.lineAt(sel.main.head);\n const prefix = headingPrefix(state, line);\n return prefix && sel.main.head === prefix.to ? prefix : null;\n}\n\nconst enter: StateCommand = ({ state, dispatch }) => {\n const prefix = atHeadingStart(state);\n if (!prefix) return false;\n const line = state.doc.lineAt(prefix.from);\n // an empty heading: let the usual Enter make a new line below it.\n if (prefix.to >= line.to) return false;\n dispatch(\n state.update({\n changes: { from: line.from, insert: \"\\n\" },\n selection: EditorSelection.cursor(prefix.to + 1),\n scrollIntoView: true,\n userEvent: \"input\",\n })\n );\n return true;\n};\n\nexport const headings = [\n // above lang-markdown's own (Prec.high) Enter.\n Prec.highest(\n keymap.of([\n { key: \"Enter\", run: enter },\n { key: \"Mod-Shift-h\", run: setHeading(2), preventDefault: true },\n { key: \"Mod-Shift-j\", run: setHeading(3), preventDefault: true },\n { key: \"Mod-Shift-b\", run: setHeading(0), preventDefault: true },\n { key: \"Mod-Alt-1\", run: setHeading(1), preventDefault: true },\n { key: \"Mod-Alt-2\", run: setHeading(2), preventDefault: true },\n { key: \"Mod-Alt-3\", run: setHeading(3), preventDefault: true },\n { key: \"Mod-Alt-0\", run: setHeading(0), preventDefault: true },\n ])\n ),\n];\n", "import { ensureSyntaxTree, syntaxTree } from \"@codemirror/language\";\nimport { indentMore } from \"@codemirror/commands\";\nimport {\n type ChangeSpec,\n type EditorState,\n type Range,\n Prec,\n StateEffect,\n StateField,\n} from \"@codemirror/state\";\nimport {\n Decoration,\n EditorView,\n ViewPlugin,\n WidgetType,\n keymap,\n type Command,\n type DecorationSet,\n} from \"@codemirror/view\";\n\n/**\n * List tidying, from a menu on a list's margin marker (the number, bullet or\n * checkbox that margin.ts hangs there). Right-clicking the text itself keeps\n * the browser's own menu, with its spelling and clipboard items.\n *\n * - Fix numbering: rewrite an ordered list's numbers to the ones it renders\n * as (margin.ts already shows those; this makes the source agree).\n * - Move done to bottom / Clear done: for task lists.\n * - Hide done / Show done: folds every done task away, in this editor only.\n */\n\ntype SyntaxNode = ReturnType<ReturnType<typeof syntaxTree>[\"resolveInner\"]>;\n\n/** The innermost list holding `pos`. */\nexport function listAt(state: EditorState, pos: number): SyntaxNode | null {\n for (\n let n: SyntaxNode | null = syntaxTree(state).resolveInner(pos, 1);\n n;\n n = n.parent\n ) {\n if (n.name === \"BulletList\" || n.name === \"OrderedList\") return n;\n }\n return null;\n}\n\nconst items = (list: SyntaxNode) => list.getChildren(\"ListItem\");\n\n/** `true`/`false` for a ticked/open task item, `null` for a plain item. */\nfunction done(state: EditorState, item: SyntaxNode): boolean | null {\n const marker = item.getChild(\"Task\")?.getChild(\"TaskMarker\");\n if (!marker) return null;\n return state.doc.sliceString(marker.from + 1, marker.to - 1).trim() !== \"\";\n}\n\n/** An item as written: from the start of its first line (so its indent comes\n * with it) to the end of its last nested line. */\nconst startOf = (state: EditorState, item: SyntaxNode) =>\n state.doc.lineAt(item.from).from;\nconst textOf = (state: EditorState, item: SyntaxNode) =>\n state.doc.sliceString(startOf(state, item), item.to);\n\n/**\n * Changes that delete `gone` (indexes into `all`) along with the line breaks\n * between them, without overlapping: a run of deleted items takes the gap up\n * to the next kept item, or, at the end of the list, the gap after the kept\n * item before it.\n */\nfunction deleteItems(\n state: EditorState,\n all: SyntaxNode[],\n gone: Set<number>\n): ChangeSpec[] {\n const changes: ChangeSpec[] = [];\n for (let i = 0; i < all.length; ) {\n if (!gone.has(i)) {\n i++;\n continue;\n }\n let j = i;\n while (j + 1 < all.length && gone.has(j + 1)) j++;\n if (j + 1 < all.length) {\n changes.push({ from: startOf(state, all[i]), to: startOf(state, all[j + 1]) });\n } else if (i > 0) {\n changes.push({ from: all[i - 1].to, to: all[j].to });\n } else {\n changes.push({ from: startOf(state, all[i]), to: all[j].to });\n }\n i = j + 1;\n }\n return changes;\n}\n\n/** Rewrite an ordered list's numbers to count up from its first. */\nexport function renumber(state: EditorState, list: SyntaxNode): ChangeSpec[] {\n const changes: ChangeSpec[] = [];\n const all = items(list);\n const firstMark = all[0]?.getChild(\"ListMark\");\n if (!firstMark) return changes;\n // a list inside a list item starts again from 1; a top-level one keeps its\n // first number (`5.` there is usually on purpose).\n const nested = list.parent?.name === \"ListItem\";\n const start = nested\n ? 1\n : parseInt(state.doc.sliceString(firstMark.from, firstMark.to), 10) || 0;\n all.forEach((item, i) => {\n const mark = item.getChild(\"ListMark\");\n if (!mark) return;\n const text = state.doc.sliceString(mark.from, mark.to);\n const want = `${start + i}${text.slice(-1)}`;\n if (want === text) return;\n changes.push({ from: mark.from, to: mark.to, insert: want });\n // the item's later lines are indented to its text; keep them there, or\n // `9.`\u2192`10.` would un-nest whatever's under it.\n const shift = want.length - text.length;\n const first = state.doc.lineAt(item.from).number;\n const last = state.doc.lineAt(item.to).number;\n for (let n = first + 1; n <= last; n++) {\n const line = state.doc.line(n);\n if (shift > 0) {\n if (line.length) changes.push({ from: line.from, insert: \" \".repeat(shift) });\n } else {\n const spaces = /^ */.exec(line.text)![0].length;\n const cut = Math.min(spaces, -shift);\n if (cut) changes.push({ from: line.from, to: line.from + cut });\n }\n }\n });\n return changes;\n}\n\nexport function needsRenumber(state: EditorState, list: SyntaxNode) {\n return list.name === \"OrderedList\" && renumber(state, list).length > 0;\n}\n\n/** Remove a list's done tasks. */\nexport function clearDone(state: EditorState, list: SyntaxNode): ChangeSpec[] {\n const all = items(list);\n const gone = new Set(all.flatMap((it, i) => (done(state, it) ? [i] : [])));\n return deleteItems(state, all, gone);\n}\n\n/**\n * Move a list's done tasks below its open ones, keeping each group's order.\n * Only the done tasks above the last open one move; it's the minimal edit, so\n * someone typing elsewhere in the list keeps their place.\n */\nexport function moveDoneDown(\n state: EditorState,\n list: SyntaxNode\n): ChangeSpec[] {\n const all = items(list);\n let lastOpen = -1;\n all.forEach((it, i) => {\n if (done(state, it) === false || done(state, it) === null) lastOpen = i;\n });\n const moving = new Set<number>();\n for (let i = 0; i < lastOpen; i++) if (done(state, all[i])) moving.add(i);\n if (!moving.size) return [];\n const texts = [...moving].map((i) => textOf(state, all[i]));\n return [\n ...deleteItems(state, all, moving),\n { from: all[lastOpen].to, insert: \"\\n\" + texts.join(\"\\n\") },\n ];\n}\n\nconst countDone = (state: EditorState, list: SyntaxNode) =>\n items(list).filter((it) => done(state, it)).length;\n\n/**\n * Tab on an ordered item indents it as usual, and if that makes it the first\n * item of a new list inside the one above, numbers it 1 \u2014 `4.` tabbed in\n * under `3.` is the start of a sub-list, not its fourth item.\n */\n/** The first non-space on a line: where its list marker is, if any. */\nconst textStart = (line: { from: number; text: string }) =>\n line.from + /^\\s*/.exec(line.text)![0].length;\n\nconst tabInOrderedList: Command = (view) => {\n const before = view.state;\n const line = before.doc.lineAt(before.selection.main.head);\n const was = listAt(before, textStart(line));\n if (!was || was.name !== \"OrderedList\" || before.selection.ranges.length !== 1)\n return false;\n if (!indentMore(view)) return false;\n const { state } = view;\n const now = state.doc.lineAt(state.selection.main.head);\n ensureSyntaxTree(state, now.to, 100);\n const list = listAt(state, textStart(now));\n const first = list && items(list)[0];\n const mark = first?.getChild(\"ListMark\");\n if (\n !list ||\n !mark ||\n list.name !== \"OrderedList\" ||\n list.parent?.name !== \"ListItem\" ||\n state.doc.lineAt(first!.from).number !== now.number\n )\n return true;\n const text = state.doc.sliceString(mark.from, mark.to);\n const want = `1${text.slice(-1)}`;\n if (text !== want)\n view.dispatch({\n changes: { from: mark.from, to: mark.to, insert: want },\n userEvent: \"input.renumber\",\n });\n return true;\n};\n\n// ---------------------------------------------------------------------------\n// hiding done tasks\n\nconst setHideDone = StateEffect.define<boolean>();\n\nclass HiddenDone extends WidgetType {\n constructor(readonly count: number) {\n super();\n }\n eq(other: HiddenDone) {\n return other.count === this.count;\n }\n toDOM(view: EditorView) {\n const button = document.createElement(\"button\");\n button.type = \"button\";\n button.className = \"cm-md-hidden-done\";\n button.textContent = `${this.count} done`;\n button.title = \"Show done tasks\";\n button.addEventListener(\"mousedown\", (event) => {\n event.preventDefault();\n view.dispatch({ effects: setHideDone.of(false) });\n });\n return button;\n }\n ignoreEvent() {\n return true;\n }\n}\n\n/**\n * Every run of done tasks folded away, and one \"3 done\" button at the end of\n * each list that had any (in place of its last run, if that's where it ends).\n */\nfunction hiddenDone(state: EditorState): DecorationSet {\n const decos: Range<Decoration>[] = [];\n const hide = Decoration.replace({ block: true });\n // a done item hides its nested items with it; don't hide them twice.\n let hiddenTo = -1;\n syntaxTree(state).iterate({\n enter: (node) => {\n if (node.from < hiddenTo) return false;\n if (node.name !== \"BulletList\" && node.name !== \"OrderedList\") return;\n const all = items(node.node);\n const total = all.filter((it) => done(state, it)).length;\n if (!total) return;\n const button = new HiddenDone(total);\n for (let i = 0; i < all.length; ) {\n if (!done(state, all[i])) {\n i++;\n continue;\n }\n let j = i;\n while (j + 1 < all.length && done(state, all[j + 1])) j++;\n const last = j === all.length - 1;\n decos.push(\n (last ? Decoration.replace({ block: true, widget: button }) : hide).range(\n startOf(state, all[i]),\n all[j].to\n )\n );\n hiddenTo = Math.max(hiddenTo, all[j].to);\n i = j + 1;\n }\n const end = all[all.length - 1];\n if (!done(state, end)) {\n decos.push(\n Decoration.widget({ block: true, side: 1, widget: button }).range(end.to)\n );\n }\n },\n });\n return Decoration.set(decos, true);\n}\n\nconst hideDoneField = StateField.define<{ on: boolean; decos: DecorationSet }>({\n create: () => ({ on: false, decos: Decoration.none }),\n update(value, tr) {\n let on = value.on;\n for (const e of tr.effects) if (e.is(setHideDone)) on = e.value;\n if (!on) return { on, decos: Decoration.none };\n if (on === value.on && !tr.docChanged && syntaxTree(tr.startState) === syntaxTree(tr.state))\n return value;\n return { on, decos: hiddenDone(tr.state) };\n },\n provide: (f) => [\n EditorView.decorations.from(f, (v) => v.decos),\n EditorView.atomicRanges.from(f, (v) => () => v.decos),\n ],\n});\n\nexport const isHidingDone = (state: EditorState) =>\n state.field(hideDoneField, false)?.on ?? false;\n\n// ---------------------------------------------------------------------------\n// the menu\n\ntype Item = { label: string; run: () => void; disabled?: boolean };\n\n/**\n * What the menu offers for the list at `pos`. An ordered list always offers\n * Fix numbering and a task list always offers all its task actions, greyed\n * out when there's nothing for them to do: a menu that only sometimes opens\n * reads as one that doesn't work.\n */\nfunction menuItems(view: EditorView, pos: number): Item[] {\n const { state } = view;\n const list = listAt(state, pos);\n if (!list) return [];\n const apply = (changes: ChangeSpec[], userEvent: string) => () =>\n view.dispatch({ changes, userEvent });\n const out: Item[] = [];\n if (list.name === \"OrderedList\") {\n const changes = renumber(state, list);\n out.push({\n label: \"Fix numbering\",\n run: apply(changes, \"input.renumber\"),\n disabled: !changes.length,\n });\n }\n const hasTasks = items(list).some((it) => done(state, it) !== null);\n if (hasTasks) {\n const n = countDone(state, list);\n const moves = moveDoneDown(state, list);\n out.push({\n label: \"Move done to bottom\",\n run: apply(moves, \"input.move\"),\n disabled: !moves.length,\n });\n out.push({\n label: n ? `Clear done (${n})` : \"Clear done\",\n run: apply(clearDone(state, list), \"delete.clear-done\"),\n disabled: !n,\n });\n const hiding = isHidingDone(state);\n out.push({\n label: hiding ? \"Show done\" : \"Hide done\",\n run: () => view.dispatch({ effects: setHideDone.of(!hiding) }),\n });\n }\n return out;\n}\n\nfunction openMenu(view: EditorView, x: number, y: number, entries: Item[]) {\n const menu = document.createElement(\"div\");\n menu.className = \"cm-md-menu\";\n menu.setAttribute(\"role\", \"menu\");\n menu.style.left = `${x}px`;\n menu.style.top = `${y}px`;\n const buttons = entries.map(({ label, run, disabled }) => {\n const b = document.createElement(\"button\");\n b.type = \"button\";\n b.className = \"cm-md-menu-item\";\n b.setAttribute(\"role\", \"menuitem\");\n b.textContent = label;\n b.disabled = !!disabled;\n b.addEventListener(\"click\", () => {\n close();\n run();\n view.focus();\n });\n return b;\n });\n menu.append(...buttons);\n\n const outside = (e: Event) => {\n if (!menu.contains(e.target as Node)) close();\n };\n const keys = (e: KeyboardEvent) => {\n const i = buttons.indexOf(document.activeElement as HTMLButtonElement);\n if (e.key === \"Escape\") {\n e.preventDefault();\n close();\n view.focus();\n } else if (e.key === \"ArrowDown\" || e.key === \"ArrowUp\") {\n e.preventDefault();\n const step = e.key === \"ArrowDown\" ? 1 : -1;\n const live = buttons.filter((b) => !b.disabled);\n const at = live.indexOf(buttons[i]);\n live[(at + step + live.length) % live.length]?.focus();\n }\n };\n function close() {\n if (menu.matches?.(\":popover-open\")) menu.hidePopover();\n menu.remove();\n window.removeEventListener(\"pointerdown\", outside, true);\n window.removeEventListener(\"scroll\", close, true);\n window.removeEventListener(\"blur\", close);\n menu.removeEventListener(\"keydown\", keys);\n }\n window.addEventListener(\"pointerdown\", outside, true);\n window.addEventListener(\"scroll\", close, true);\n window.addEventListener(\"blur\", close);\n menu.addEventListener(\"keydown\", keys);\n\n view.dom.appendChild(menu);\n // In the top layer, so nothing the editor sits in can move it (a\n // transformed or contained ancestor makes `position: fixed` relative to\n // itself), clip it, or draw over it (the app's side panels did all three).\n if (typeof menu.showPopover === \"function\") {\n menu.popover = \"manual\";\n menu.showPopover();\n }\n // where it actually landed, put right: covers browsers without popovers.\n let r = menu.getBoundingClientRect();\n if (r.left !== x || r.top !== y) {\n menu.style.left = `${x + (x - r.left)}px`;\n menu.style.top = `${y + (y - r.top)}px`;\n r = menu.getBoundingClientRect();\n }\n // and on screen\n const shift = (prop: \"left\" | \"top\", by: number) =>\n (menu.style[prop] = `${parseFloat(menu.style[prop]) - by}px`);\n if (r.right > window.innerWidth) shift(\"left\", r.width);\n if (r.bottom > window.innerHeight) shift(\"top\", r.height);\n buttons.find((b) => !b.disabled)?.focus();\n return close;\n}\n\n// a plain listener, not `eventHandlers`: the markers are mostly widgets, and\n// CodeMirror doesn't pass events inside widgets on to its handlers.\nconst menuPlugin = ViewPlugin.fromClass(\n class {\n close: (() => void) | null = null;\n constructor(readonly view: EditorView) {\n view.contentDOM.addEventListener(\"contextmenu\", this.open);\n }\n open = (event: MouseEvent) => {\n const { view } = this;\n const target = event.target as HTMLElement | null;\n const marker = target?.closest(\".cm-md-hang, .cm-md-hidden-done\");\n if (!marker || !view.contentDOM.contains(marker)) return;\n const entries = menuItems(view, view.posAtDOM(marker));\n if (!entries.length) return;\n event.preventDefault();\n this.close?.();\n this.close = openMenu(view, event.clientX, event.clientY, entries);\n };\n destroy() {\n this.view.contentDOM.removeEventListener(\"contextmenu\", this.open);\n this.close?.();\n }\n }\n);\n\nconst listsTheme = EditorView.baseTheme({\n \".cm-md-menu\": {\n position: \"fixed\",\n // undo the popover defaults (centred, inset 0)\n inset: \"auto\",\n margin: \"0\",\n zIndex: \"var(--studio-layer-popover, 4000)\",\n display: \"flex\",\n flexDirection: \"column\",\n minWidth: \"12rem\",\n padding: \"4px\",\n borderRadius: \"6px\",\n background: \"var(--studio-fill, white)\",\n color: \"var(--studio-line, black)\",\n border:\n \"var(--studio-border-width, 1px) var(--studio-border-style, solid) var(--studio-fill-offset-30, #ddd)\",\n boxShadow: \"var(--studio-shadow-md, 0 4px 6px -1px rgb(0 0 0 / 0.1))\",\n fontFamily: \"var(--studio-family-ui, system-ui, sans-serif)\",\n fontSize: \"0.8rem\",\n },\n \".cm-md-menu-item\": {\n all: \"unset\",\n padding: \"8px 12px\",\n borderRadius: \"4px\",\n cursor: \"var(--studio-cursor-default, default)\",\n },\n \".cm-md-menu-item:disabled\": {\n opacity: \"0.45\",\n },\n \".cm-md-menu-item:not(:disabled):hover, .cm-md-menu-item:focus-visible\": {\n background: \"var(--studio-fill-offset-20, #eee)\",\n },\n \".cm-md-hidden-done\": {\n all: \"unset\",\n display: \"block\",\n paddingInline: \"6px 2px\",\n fontSize: \"0.8rem\",\n color: \"var(--text-editor-line-offset-40, #999)\",\n cursor: \"var(--studio-cursor-pointer, pointer)\",\n },\n \".cm-md-hidden-done:hover\": {\n textDecoration: \"underline\",\n },\n});\n\nexport const lists = [\n hideDoneField,\n menuPlugin,\n listsTheme,\n // ahead of indentWithTab in the main keymap\n Prec.high(keymap.of([{ key: \"Tab\", run: tabInOrderedList }])),\n];\n", "import { syntaxTree } from \"@codemirror/language\";\nimport {\n EditorSelection,\n EditorState,\n Prec,\n type Line,\n type StateCommand,\n} from \"@codemirror/state\";\nimport { EditorView, keymap } from \"@codemirror/view\";\n\n/**\n * A line's block prefix: the markup at its start that says what kind of block\n * it is \u2014 `# `, `> `, `- `, `1. `, `- [ ] `, and any mix and indentation of\n * those (`> - [ ] `). margin.ts never shows it as text: it draws a label, a\n * dot, a number, a checkbox or a bar in its place. So, as in lush and rich:\n *\n * - the caret never goes inside it (moving left out of the text goes on to\n * the line above, rather than sticking);\n * - Backspace at the start of the text takes off the innermost marker\n * (`- [ ] x` \u2192 `- x` \u2192 `x`; `# x` \u2192 `x`; `> x` \u2192 `x`);\n * - Delete at the end of the line before pulls in the text, not the markup;\n * - typing a marker at the start of the text replaces the line's own\n * (`1. ` then `2. ` is a `2.` item, not a list inside a list; `## ` on a\n * heading changes its level).\n */\n\nexport type Prefix = {\n from: number;\n to: number;\n /** names of the marker nodes, outermost first */\n marks: string[];\n /** where each marker starts; Backspace deletes from the last one to `to` */\n starts: number[];\n};\n\nconst MARKS = new Set([\"QuoteMark\", \"ListMark\", \"HeaderMark\", \"TaskMarker\"]);\n\nfunction skipSpaces(state: EditorState, pos: number, end: number) {\n while (pos < end && /[ \\t]/.test(state.doc.sliceString(pos, pos + 1))) pos++;\n return pos;\n}\n\n/** The block prefix at the start of `line`, or null if it has none. */\nexport function blockPrefix(state: EditorState, line: Line): Prefix | null {\n const tree = syntaxTree(state);\n const marks: string[] = [];\n const starts: number[] = [];\n let pos = line.from;\n for (;;) {\n const at = skipSpaces(state, pos, line.to);\n const node = tree.resolveInner(at, 1);\n if (!MARKS.has(node.name) || node.from !== at || node.to <= at) break;\n // a closing `##` or a `>` mid-line isn't a prefix.\n if (doc(state, pos, at).trim() !== \"\") break;\n marks.push(node.name);\n starts.push(at);\n pos = node.to;\n }\n if (!marks.length) return null;\n return { from: line.from, to: skipSpaces(state, pos, line.to), marks, starts };\n}\n\nconst doc = (state: EditorState, from: number, to: number) =>\n state.doc.sliceString(from, to);\n\n/** Keep empty cursors out of block prefixes. */\nconst keepOut = EditorState.transactionFilter.of((tr) => {\n if (!tr.selection) return tr;\n const { state } = tr;\n const before = tr.startState.selection;\n let moved = false;\n const ranges = tr.selection.ranges.map((r, i) => {\n if (!r.empty) return r;\n const line = state.doc.lineAt(r.head);\n const prefix = blockPrefix(state, line);\n if (!prefix || r.head >= prefix.to) return r;\n const old = before.ranges[i] ?? before.main;\n const leaving =\n !tr.docChanged && old.empty && old.head === prefix.to && line.from > 0;\n moved = true;\n return EditorSelection.cursor(leaving ? line.from - 1 : prefix.to);\n });\n if (!moved) return tr;\n return [\n tr,\n {\n selection: EditorSelection.create(ranges, tr.selection.mainIndex),\n sequential: true,\n },\n ];\n});\n\n/** The prefix whose end the only, empty, cursor sits at. */\nfunction atTextStart(state: EditorState) {\n const sel = state.selection;\n if (sel.ranges.length !== 1 || !sel.main.empty) return null;\n const prefix = blockPrefix(state, state.doc.lineAt(sel.main.head));\n return prefix && sel.main.head === prefix.to ? prefix : null;\n}\n\nconst backspace: StateCommand = ({ state, dispatch }) => {\n const prefix = atTextStart(state);\n if (!prefix) return false;\n dispatch(\n state.update({\n changes: { from: prefix.starts.at(-1)!, to: prefix.to },\n selection: EditorSelection.cursor(prefix.starts.at(-1)!),\n userEvent: \"delete.backward\",\n })\n );\n return true;\n};\n\nconst deleteForward: StateCommand = ({ state, dispatch }) => {\n const sel = state.selection;\n if (sel.ranges.length !== 1 || !sel.main.empty) return false;\n const line = state.doc.lineAt(sel.main.head);\n if (sel.main.head !== line.to || line.number >= state.doc.lines) return false;\n const prefix = blockPrefix(state, state.doc.line(line.number + 1));\n if (!prefix) return false;\n dispatch(\n state.update({\n changes: { from: line.to, to: prefix.to },\n userEvent: \"delete.forward\",\n })\n );\n return true;\n};\n\nconst inCode = (state: EditorState, pos: number) => {\n for (\n let n: ReturnType<ReturnType<typeof syntaxTree>[\"resolveInner\"]> | null =\n syntaxTree(state).resolveInner(pos, -1);\n n;\n n = n.parent\n ) {\n if (/^(FencedCode|CodeBlock|CodeText|InlineCode)$/.test(n.name)) return true;\n }\n return false;\n};\n\n/** A marker that, typed at the start of a list item, replaces its own. */\nconst LIST_OR_HEADING = /^(\\d{1,9}[.)]|[-*+]|#{1,6})$/;\n/** On a heading only `#`s do: `## 1. Introduction` is a heading. */\nconst HEADING = /^#{1,6}$/;\n\n/**\n * Typing a space after a marker at the start of a list item's or heading's\n * text swaps the line's innermost marker for the typed one. Quotes are left\n * alone: `> - ` is a list in a quote, which is what you meant.\n */\nconst replaceMarker = EditorView.inputHandler.of((view, from, to, text) => {\n if (text !== \" \" || from !== to) return false;\n const { state } = view;\n const line = state.doc.lineAt(from);\n const prefix = blockPrefix(state, line);\n if (!prefix || inCode(state, from)) return false;\n const { marks, starts } = prefix;\n let typed = doc(state, prefix.to, from);\n let mine = marks.length - 1; // the marker the typed one replaces\n if (!typed && prefix.to === from && marks.length > 1) {\n // the parser may already have taken what was typed for a marker of its\n // own (`1. 2.` is a list in a list; `# #` a heading's closing mark).\n typed = doc(state, starts[mine], from);\n mine--;\n }\n if (!typed || marks[mine] === \"QuoteMark\") return false;\n // a task's box goes with its bullet.\n if (marks[mine] === \"TaskMarker\" && marks[mine - 1] === \"ListMark\") mine--;\n const ok = marks[mine] === \"HeaderMark\" ? HEADING : LIST_OR_HEADING;\n if (!ok.test(typed)) return false;\n view.dispatch({\n changes: { from: starts[mine], to: from, insert: typed + \" \" },\n selection: EditorSelection.cursor(starts[mine] + typed.length + 1),\n userEvent: \"input.type\",\n });\n return true;\n});\n\nexport const prefixes = [\n keepOut,\n replaceMarker,\n // above lang-markdown's own (Prec.high) Backspace.\n Prec.highest(\n keymap.of([\n { key: \"Backspace\", run: backspace },\n { key: \"Delete\", run: deleteForward },\n ])\n ),\n];\n", "import { EditorSelection, Prec } from \"@codemirror/state\";\nimport { cursorLineDown, cursorLineUp } from \"@codemirror/commands\";\nimport { EditorView, keymap, type Command } from \"@codemirror/view\";\n\n/**\n * Up then Down comes back to where you were.\n *\n * CodeMirror keeps the caret's goal as a pixel column. That's right for plain\n * text, but here leaving a line can change its width \u2014 a link the caret was\n * in folds back to just its text, a quote loses its `>` \u2014 so the same pixel\n * column lands on a different character on the way back. Through a run of\n * Up/Down presses this remembers the character offset on each line the caret\n * passed through, and goes back to it on returning to that line. Any other\n * move, or an edit, starts afresh.\n */\n\ntype Streak = {\n /** line number \u2192 where the caret was on it */\n visited: Map<number, number>;\n /** where the last vertical move left the caret; anything else resets */\n head: number;\n doc: EditorView[\"state\"][\"doc\"];\n};\n\nconst streaks = new WeakMap<EditorView, Streak>();\n\nexport const vertical =\n (move: Command): Command =>\n (view) => {\n const { state } = view;\n const sel = state.selection;\n if (sel.ranges.length !== 1 || !sel.main.empty) return move(view);\n\n let streak = streaks.get(view);\n if (!streak || streak.head !== sel.main.head || streak.doc !== state.doc) {\n streak = { visited: new Map(), head: sel.main.head, doc: state.doc };\n }\n const from = state.doc.lineAt(sel.main.head).number;\n if (!streak.visited.has(from)) streak.visited.set(from, sel.main.head);\n\n if (!move(view)) return false;\n\n const now = view.state.selection.main;\n const to = view.state.doc.lineAt(now.head).number;\n // moving between the rows of one wrapped line is just a move: only\n // arriving on a different line goes back to where the caret was on it.\n const back = to !== from ? streak.visited.get(to) : undefined;\n if (to === from) streak.visited.set(to, now.head);\n if (back !== undefined && back !== now.head && view.state.doc === streak.doc) {\n view.dispatch({\n selection: EditorSelection.cursor(back),\n scrollIntoView: true,\n userEvent: \"select\",\n });\n }\n streak.head = view.state.selection.main.head;\n streak.doc = view.state.doc;\n streaks.set(view, streak);\n return true;\n };\n\n// above the default keymap's own Up/Down.\nexport const verticalMemory = Prec.high(\n keymap.of([\n { key: \"ArrowUp\", run: vertical(cursorLineUp) },\n { key: \"ArrowDown\", run: vertical(cursorLineDown) },\n { mac: \"Ctrl-p\", run: vertical(cursorLineUp) },\n { mac: \"Ctrl-n\", run: vertical(cursorLineDown) },\n ])\n);\n", "import { Prec } from \"@codemirror/state\";\nimport { EditorView, keymap } from \"@codemirror/view\";\n\n/**\n * Cmd+= / Cmd+- / Cmd+0 (Ctrl off a Mac) resize the editor's text instead of\n * zooming the whole page \u2014 same steps as the `file` tool's editor.\n *\n * Alongside the font size this sets `--markdown-zoom` (new size / base size)\n * on the editor, because the markdown theme lays out line heights, padding\n * and heading margins in `rem`, which wouldn't follow the font. The theme\n * multiplies those by the factor (see `zoomed` in themes/markdown.ts).\n */\nconst MIN_FONT_SIZE = 6;\nconst FALLBACK_FONT_SIZE = 16;\n\nconst px = (value: string) => parseFloat(value) || FALLBACK_FONT_SIZE;\n\n/** The editor's font size with no zoom applied. */\nfunction baseSize(view: EditorView): number {\n const { style } = view.dom;\n const zoomed = style.fontSize;\n style.fontSize = \"\";\n const base = px(getComputedStyle(view.dom).fontSize);\n style.fontSize = zoomed;\n return base;\n}\n\nfunction step(view: EditorView, by: number): boolean {\n const { style } = view.dom;\n if (by === 0) {\n style.fontSize = \"\";\n style.removeProperty(\"--markdown-zoom\");\n } else {\n const current = px(getComputedStyle(view.dom).fontSize);\n const size = Math.max(MIN_FONT_SIZE, current + by);\n style.fontSize = `${size}px`;\n style.setProperty(\"--markdown-zoom\", String(size / baseSize(view)));\n }\n view.requestMeasure();\n return true;\n}\n\nexport const zoomIn = (view: EditorView) => step(view, 1);\nexport const zoomOut = (view: EditorView) => step(view, -1);\nexport const zoomReset = (view: EditorView) => step(view, 0);\n\nexport const markdownZoom = Prec.high(\n keymap.of([\n // `+` and `_` are the shifted keys, for keyboards that need Shift.\n { key: \"Mod-=\", run: zoomIn, preventDefault: true },\n { key: \"Mod-+\", run: zoomIn, preventDefault: true },\n { key: \"Mod--\", run: zoomOut, preventDefault: true },\n { key: \"Mod-_\", run: zoomOut, preventDefault: true },\n { key: \"Mod-0\", run: zoomReset, preventDefault: true },\n ])\n);\n", "import { HighlightStyle, syntaxHighlighting } from \"@codemirror/language\";\nimport { EditorView } from \"@codemirror/view\";\nimport { tags } from \"@lezer/highlight\";\n\nconst bodyFont = (style: \"serif\" | \"sans\") =>\n style == \"serif\"\n ? 'var(--text-editor-family-serif, \"Merriweather\", serif)'\n : \"var(--text-editor-family-sans)\";\n\n/**\n * Scale a fixed length by the editor's text zoom (`--markdown-zoom`, set by\n * extensions/zoom.ts). `em`/`ex` lengths follow the font already; `rem` and\n * `px` ones need this or they'd stay put while the text grows.\n */\nconst zoomed = (length: string) => `calc(${length} * var(--markdown-zoom, 1))`;\n\nconst markdownStyles = (style: \"serif\" | \"sans\"): Record<string, any> => ({\n \"&\": {},\n \"&.cm-editor.cm-focused\": {\n outline: \"none\",\n },\n\n \"&.cm-editor\": {\n height: \"100%\",\n display: \"flex\",\n alignContent: \"center\",\n justifyContent: \"center\",\n overflow: \"auto\",\n },\n \".cm-scroller\": {\n background: \"var(--text-editor-fill)\",\n },\n \".cm-gutter\": {\n background: \"transparent\",\n },\n \".cm-content\": {\n // for things outside the highlighter (the link widget) to match the text.\n \"--markdown-body-family\": bodyFont(style),\n // Justified text makes it look more like the I&S web essay template,\n // but doesn't feel right for most documents.\n // textAlign: \"justify\",\n textWrap: \"pretty\",\n fontFamily: bodyFont(style),\n lineHeight: zoomed(\"1.5rem\"),\n color: \"var(--text-editor-line)\",\n caretColor: \"var(--text-editor-cursor-fill)\",\n background: \"var(--text-editor-fill)\",\n marginBlock: zoomed(\"2rem\"),\n marginInline: \"auto\",\n // lol i guess this is the same as box-sizing: content-box\n maxWidth: `calc(var(--max-text-line-width, 100ex) - ${zoomed(\"2rem\")})`,\n padding: zoomed(\"2rem\"),\n // room for the markers hung in the margin (extensions/margin.ts).\n paddingLeft: `calc(${zoomed(\"2rem\")} + var(--markdown-hang, 0px))`,\n boxShadow: \"none\",\n marginBottom: \"8em\",\n borderRadius: \"8px\",\n },\n \".cm-content li\": {\n marginBottom: 0,\n },\n \".cm-task-done\": {\n opacity: 0.6,\n },\n \".cm-activeLine\": {\n backgroundColor: \"inherit\",\n },\n\n \".frontmatter, .frontmatter *\": {\n fontSize: zoomed(\"14px\"),\n fontFamily: \"var(--text-editor-family-code)\",\n color: \"var(--syntax-comment, #666)\",\n textDecoration: \"none\",\n fontWeight: \"normal\",\n lineHeight: \"0.8em\",\n },\n\n \".cm-gutters\": {\n borderRight: \"0\",\n border: \"0\",\n background: \"var(--text-editor-gutter-fill)\",\n },\n\n \".cm-comment-gutter\": {\n width: \"20px\",\n },\n\n \".cm-folded-range-gutter-line-number\": {\n display: \"none\",\n },\n\n \".cm-folded-range-gutter\": {\n background: \"var(--text-editor-fill)\",\n borderRight: \"0px\",\n width: \"40px\",\n },\n\n \".cm-folded-line-widget\": {\n background: \"var(--text-editor-fill)\",\n border: \"0px\",\n },\n\n \".cm-folded-range\": {\n background: \"var(--text-editor-fill)\",\n },\n});\n\nconst baseHeadingStyles = {\n fontFamily: \"var(--studio-heading-family, var(--text-editor-family-sans))\",\n textDecoration: \"none\",\n};\n\n/** A title stands out by weight: h1 very heavy, the rest a step lighter.\n * A theme can still set them (--studio-heading-weight-1 for h1). */\nconst H1_WEIGHT = \"var(--studio-heading-weight-1, 800)\";\nconst HEADING_WEIGHT = \"var(--studio-heading-weight, 650)\";\n\n/** Size and leading per heading level, shared by the highlight rules (the\n * heading's text) and the line classes margin.ts puts on heading lines. */\nconst headingSizes: Record<\n number,\n { fontSize?: string; lineHeight?: string; fontWeight: string }\n> = {\n 1: { fontSize: `var(--studio-heading-size-1, ${zoomed(\"1.5rem\")})`, lineHeight: zoomed(\"2rem\"), fontWeight: H1_WEIGHT },\n 2: { fontSize: `var(--studio-heading-size-2, ${zoomed(\"1.5rem\")})`, lineHeight: zoomed(\"2rem\"), fontWeight: HEADING_WEIGHT },\n 3: { fontSize: `var(--studio-heading-size-3, ${zoomed(\"1.25rem\")})`, lineHeight: zoomed(\"1.75rem\"), fontWeight: HEADING_WEIGHT },\n 4: { fontSize: `var(--studio-heading-size-4, ${zoomed(\"1.1rem\")})`, fontWeight: HEADING_WEIGHT },\n 5: { fontWeight: HEADING_WEIGHT },\n 6: { fontWeight: HEADING_WEIGHT },\n};\n\n/**\n * The same, on the whole line: a widget that replaces part of a heading (a\n * rendered link) isn't wrapped in the heading's highlight span, so without\n * this it falls back to the body size.\n */\nconst headingLines = {\n ...Object.fromEntries(\n Object.entries(headingSizes).map(([level, size]) => [\n `.cm-md-h${level}`,\n {\n fontFamily: baseHeadingStyles.fontFamily,\n ...size,\n // the patchwork theme's highlighter weights headings by this; match\n \"--syntax-weight-heading\": size.fontWeight,\n },\n ])\n ),\n // headings are set off by size, not colour: the theme's heading colour\n // (--syntax-heading, which the patchwork theme's highlighter reads) is the\n // text colour here, whatever the theme picks for code.\n \".cm-md-h1, .cm-md-h2, .cm-md-h3, .cm-md-h4, .cm-md-h5, .cm-md-h6\": {\n \"--syntax-heading\": \"var(--text-editor-line)\",\n },\n};\n\nconst baseCodeStyles = {\n fontFamily: \"var(--text-editor-family-code)\",\n fontSize: \"1em\",\n};\n\nexport const markdownSyntaxHighlighting = (style: \"serif\" | \"sans\") =>\n HighlightStyle.define([\n // this is how you ensure that codeblocks are still monospace.\n // a node's own class *replaces* its parent's in the highlighter, so text\n // inside **bold**, *italic* and ~~struck~~ loses this one and falls back to\n // `.cm-content`, which the patchwork theme sets to the code font. those\n // rules set the body font again; inline code inside them still wins,\n // being later in this list.\n {\n tag: tags.content,\n fontFamily: bodyFont(style),\n },\n {\n tag: tags.heading1,\n ...baseHeadingStyles,\n ...headingSizes[1],\n marginBottom: zoomed(\"1rem\"),\n marginTop: zoomed(\"2rem\"),\n },\n {\n tag: tags.heading2,\n ...baseHeadingStyles,\n ...headingSizes[2],\n marginBottom: zoomed(\"1rem\"),\n marginTop: zoomed(\"2rem\"),\n },\n {\n tag: tags.heading3,\n ...baseHeadingStyles,\n ...headingSizes[3],\n marginBottom: zoomed(\"1rem\"),\n marginTop: zoomed(\"2rem\"),\n },\n {\n tag: tags.heading4,\n ...baseHeadingStyles,\n ...headingSizes[4],\n marginBottom: zoomed(\"1rem\"),\n marginTop: zoomed(\"2rem\"),\n },\n {\n tag: [tags.heading5, tags.heading6],\n ...baseHeadingStyles,\n ...headingSizes[5],\n },\n {\n tag: tags.processingInstruction,\n color: \"var(--text-editor-line-offset-40)\",\n },\n {\n tag: tags.comment,\n color: \"var(--syntax-comment, #555)\",\n fontFamily: \"var(--text-editor-family-code)\",\n },\n // quotes are set off by their bar (margin.ts), not by italics.\n {\n tag: tags.strong,\n fontFamily: bodyFont(style),\n fontWeight: \"var(--syntax-weight-strong, bold)\",\n },\n {\n tag: tags.emphasis,\n fontFamily: bodyFont(style),\n fontStyle: \"var(--syntax-style-emphasis, italic)\",\n },\n {\n tag: tags.strikethrough,\n fontFamily: bodyFont(style),\n textDecoration: \"line-through\",\n },\n {\n tag: [tags.meta],\n fontWeight: 300,\n color: \"var(--syntax-meta, #999)\",\n fontFamily: \"var(--text-editor-family-sans)\",\n },\n { tag: tags.keyword, ...baseCodeStyles, color: \"var(--syntax-keyword, #708)\" },\n {\n tag: [\n tags.atom,\n tags.bool,\n tags.url,\n tags.contentSeparator,\n tags.labelName,\n ],\n ...baseCodeStyles,\n color: \"var(--syntax-atom, var(--studio-secondary))\",\n },\n { tag: [tags.literal, tags.inserted], ...baseCodeStyles, color: \"var(--syntax-inserted, #164)\" },\n { tag: [tags.string, tags.deleted], ...baseCodeStyles, color: \"var(--syntax-string, #5f67b5)\" },\n {\n tag: [tags.regexp, tags.escape, tags.special(tags.string)],\n ...baseCodeStyles,\n color: \"var(--syntax-regexp, #e40)\",\n },\n {\n tag: tags.definition(tags.variableName),\n ...baseCodeStyles,\n color: \"var(--syntax-definition--variable-name, #00f)\",\n },\n { tag: tags.local(tags.variableName), ...baseCodeStyles, color: \"var(--syntax-variable-name, #30a)\" },\n { tag: [tags.typeName, tags.namespace], ...baseCodeStyles, color: \"var(--syntax-type-name, #085)\" },\n { tag: tags.className, ...baseCodeStyles, color: \"var(--syntax-class-name, #167)\" },\n {\n tag: [tags.special(tags.variableName), tags.macroName],\n ...baseCodeStyles,\n color: \"var(--syntax-special--variable-name, #256)\",\n },\n {\n tag: tags.definition(tags.propertyName),\n ...baseCodeStyles,\n color: \"var(--syntax-function--property-name, #00c)\",\n },\n { tag: tags.monospace, ...baseCodeStyles },\n ]);\n\nexport const theme = (style: \"serif\" | \"sans\") => [\n EditorView.theme({ ...markdownStyles(style), ...headingLines }),\n syntaxHighlighting(markdownSyntaxHighlighting(style)),\n];\n\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["doc", "line", "word", "doc", "add", "from", "to", "phrase", "EditorView", "keymap", "EditorSelection", "RangeSetBuilder", "Decoration", "EditorView", "ViewPlugin", "doc", "syntaxTree", "Decoration", "EditorView", "ViewPlugin", "WidgetType", "doc", "build", "syntaxTree", "EditorSelection", "Prec", "prefixes", "syntaxTree", "Prec", "StateEffect", "StateField", "Decoration", "EditorView", "ViewPlugin", "WidgetType", "keymap", "StateEffect", "WidgetType", "Decoration", "syntaxTree", "StateField", "EditorView", "step", "ViewPlugin", "Prec", "keymap", "syntaxTree", "EditorSelection", "EditorState", "Prec", "EditorView", "keymap", "MARKS", "skipSpaces", "EditorSelection", "Prec", "keymap", "Prec", "keymap", "zoomed", "EditorView", "zoomed", "EditorView", "keymap", "EditorView"]
|
|
7
7
|
}
|