@powerhousedao/ph-clint-app 0.1.0-dev.1 → 0.1.0-dev.10

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.
Files changed (149) hide show
  1. package/dist/connect/assets/AddDriveModal-CBK9gEWg-CCNM0KVP.js +2 -0
  2. package/dist/connect/assets/AddDriveModal-CBK9gEWg-CCNM0KVP.js.map +1 -0
  3. package/dist/connect/assets/ClearStorageModal-Cx0Rt-29-BM5nVGF1.js +2 -0
  4. package/dist/connect/assets/ClearStorageModal-Cx0Rt-29-BM5nVGF1.js.map +1 -0
  5. package/dist/connect/assets/CookiesPolicyModal-Gae1QuhA-D4gsUPUc.js +2 -0
  6. package/dist/connect/assets/CookiesPolicyModal-Gae1QuhA-D4gsUPUc.js.map +1 -0
  7. package/dist/connect/assets/CreateDocumentModal-5i6rmv3C-E3Cp7jBG.js +2 -0
  8. package/dist/connect/assets/CreateDocumentModal-5i6rmv3C-E3Cp7jBG.js.map +1 -0
  9. package/dist/connect/assets/DebugSettingsModal-ZNWhlMQN-DQ1zdAiY.js +2 -0
  10. package/dist/connect/assets/DebugSettingsModal-ZNWhlMQN-DQ1zdAiY.js.map +1 -0
  11. package/dist/connect/assets/DeleteDriveModal-BbAx_yXt-B21Gj_WB.js +2 -0
  12. package/dist/connect/assets/DeleteDriveModal-BbAx_yXt-B21Gj_WB.js.map +1 -0
  13. package/dist/connect/assets/DeleteItemModal-CkWegLlh-BjzQ9bb8.js +2 -0
  14. package/dist/connect/assets/DeleteItemModal-CkWegLlh-BjzQ9bb8.js.map +1 -0
  15. package/dist/connect/assets/DisclaimerModal-CCnvwoB5-DDQH0sV5.js +2 -0
  16. package/dist/connect/assets/DisclaimerModal-CCnvwoB5-DDQH0sV5.js.map +1 -0
  17. package/dist/connect/assets/DriveSettingsModal-DxMjOsLg-DMAYy5Qu.js +2 -0
  18. package/dist/connect/assets/DriveSettingsModal-DxMjOsLg-DMAYy5Qu.js.map +1 -0
  19. package/dist/connect/assets/ExportDocumentWithErrorsModal-hgliF8Gy-BosXc1A4.js +2 -0
  20. package/dist/connect/assets/ExportDocumentWithErrorsModal-hgliF8Gy-BosXc1A4.js.map +1 -0
  21. package/dist/connect/assets/InspectorModal-C4rE0Y5E-DYcDcB4c.js +30 -0
  22. package/dist/connect/assets/InspectorModal-C4rE0Y5E-DYcDcB4c.js.map +1 -0
  23. package/dist/connect/assets/MissingPackageModal-cr5tZDVw-cjdwZumA.js +2 -0
  24. package/dist/connect/assets/MissingPackageModal-cr5tZDVw-cjdwZumA.js.map +1 -0
  25. package/dist/connect/assets/SettingsModal-hA7NvG5u-NnZVwRwT.js +2 -0
  26. package/dist/connect/assets/SettingsModal-hA7NvG5u-NnZVwRwT.js.map +1 -0
  27. package/dist/connect/assets/UpgradeDriveModal-DldcNCaT-C3IKavGb.js +2 -0
  28. package/dist/connect/assets/UpgradeDriveModal-DldcNCaT-C3IKavGb.js.map +1 -0
  29. package/dist/connect/assets/__vite-browser-external-DfS4o2DG.js +2 -0
  30. package/dist/connect/assets/__vite-browser-external-DfS4o2DG.js.map +1 -0
  31. package/dist/connect/assets/__vite-browser-external-HZkqN3TL.js +2 -0
  32. package/dist/connect/assets/__vite-browser-external-HZkqN3TL.js.map +1 -0
  33. package/dist/connect/assets/app-module-BbhoykB5-Fa-xjapP.js +29 -0
  34. package/dist/connect/assets/app-module-BbhoykB5-Fa-xjapP.js.map +1 -0
  35. package/dist/connect/assets/chunk-B3K2TuZy.js +1 -0
  36. package/dist/connect/assets/chunk-VBDAOXYI-B4r8Aw5i-CQ-0hltn.js +2 -0
  37. package/dist/connect/assets/chunk-VBDAOXYI-B4r8Aw5i-CQ-0hltn.js.map +1 -0
  38. package/dist/connect/assets/chunk-VBDAOXYI-D3T5F-M4.js +3 -0
  39. package/dist/connect/assets/chunk-VBDAOXYI-D3T5F-M4.js.map +1 -0
  40. package/dist/connect/assets/chunk-zsgVPwQN.js +1 -0
  41. package/dist/connect/assets/components-CzmLhCpl.js +2 -0
  42. package/dist/connect/assets/components-CzmLhCpl.js.map +1 -0
  43. package/dist/connect/assets/connect-BZY3g1_-.js +2 -0
  44. package/dist/connect/assets/connect-BZY3g1_-.js.map +1 -0
  45. package/dist/connect/assets/connect-MjNGHHUz-4lla73ZT.js +501 -0
  46. package/dist/connect/assets/connect-MjNGHHUz-4lla73ZT.js.map +1 -0
  47. package/dist/connect/assets/connect-MjNGHHUz-BryDP-UK.js +529 -0
  48. package/dist/connect/assets/connect-MjNGHHUz-BryDP-UK.js.map +1 -0
  49. package/dist/connect/assets/connect-MjNGHHUz-DCp-qNSW-CTGw6_fq.js +644 -0
  50. package/dist/connect/assets/connect-MjNGHHUz-DCp-qNSW-CTGw6_fq.js.map +1 -0
  51. package/dist/connect/assets/connect.config-DDu1QWU1-CPxkNdH8.js +2 -0
  52. package/dist/connect/assets/connect.config-DDu1QWU1-CPxkNdH8.js.map +1 -0
  53. package/dist/connect/assets/dist-B7W7q8B9-CR_p0UE1.js +42 -0
  54. package/dist/connect/assets/dist-B7W7q8B9-CR_p0UE1.js.map +1 -0
  55. package/dist/connect/assets/dist-BXygvBtd-DvYcx8sL.js +2 -0
  56. package/dist/connect/assets/dist-BXygvBtd-DvYcx8sL.js.map +1 -0
  57. package/dist/connect/assets/dist-CTGANq2I-OEI7AFvB.js +0 -0
  58. package/dist/connect/assets/document-drive-BF7UoToX-DkpWtXXU.js +385 -0
  59. package/dist/connect/assets/document-drive-BF7UoToX-DkpWtXXU.js.map +1 -0
  60. package/dist/connect/assets/document-editor-CHM7Pu4m-BqJ7z0KA.js +29 -0
  61. package/dist/connect/assets/document-editor-CHM7Pu4m-BqJ7z0KA.js.map +1 -0
  62. package/dist/connect/assets/documents-D25BA9nW-D6x72KRG.js +57 -0
  63. package/dist/connect/assets/documents-D25BA9nW-D6x72KRG.js.map +1 -0
  64. package/dist/connect/assets/editor-9B-mf9yE-CwwLHhk7.js +2 -0
  65. package/dist/connect/assets/editor-9B-mf9yE-CwwLHhk7.js.map +1 -0
  66. package/dist/connect/assets/editor-CK3kNsTD-gsrBTl-E.js +13 -0
  67. package/dist/connect/assets/editor-CK3kNsTD-gsrBTl-E.js.map +1 -0
  68. package/dist/connect/assets/editor-CQwD5q6a-kwkhqbcn.js +2 -0
  69. package/dist/connect/assets/editor-CQwD5q6a-kwkhqbcn.js.map +1 -0
  70. package/dist/connect/assets/editor-CWOotorA-BFOZU67C.js +2 -0
  71. package/dist/connect/assets/editor-CWOotorA-BFOZU67C.js.map +1 -0
  72. package/dist/connect/assets/editor-Cf3CPqYZ-Cx9ZGQfp.js +2 -0
  73. package/dist/connect/assets/editor-Cf3CPqYZ-Cx9ZGQfp.js.map +1 -0
  74. package/dist/connect/assets/editor-D-RcRLrc-B3ubYCiM.js +1 -0
  75. package/dist/connect/assets/editor-D3oczmnl.js +2 -0
  76. package/dist/connect/assets/editor-D3oczmnl.js.map +1 -0
  77. package/dist/connect/assets/editor-PTrHnWW0-8Lr0hIbT.js +2 -0
  78. package/dist/connect/assets/editor-PTrHnWW0-8Lr0hIbT.js.map +1 -0
  79. package/dist/connect/assets/editor-XwOmbkwc-BNkVW6fZ.js +2 -0
  80. package/dist/connect/assets/editor-XwOmbkwc-BNkVW6fZ.js.map +1 -0
  81. package/dist/connect/assets/editor-ouUpfWQx-Bwt4WR-8.js +53 -0
  82. package/dist/connect/assets/editor-ouUpfWQx-Bwt4WR-8.js.map +1 -0
  83. package/dist/connect/assets/esm-NRvLaTq1.js +485 -0
  84. package/dist/connect/assets/esm-NRvLaTq1.js.map +1 -0
  85. package/dist/connect/assets/graphql-editor-CpHMdwcs-TBSYhJDO.js +14 -0
  86. package/dist/connect/assets/graphql-editor-CpHMdwcs-TBSYhJDO.js.map +1 -0
  87. package/dist/connect/assets/hooks-DcjZbCsk-DeRtYBVD.js +13 -0
  88. package/dist/connect/assets/hooks-DcjZbCsk-DeRtYBVD.js.map +1 -0
  89. package/dist/connect/assets/hooks-Vx4YtE1e-DsujkZGZ.js +2 -0
  90. package/dist/connect/assets/hooks-Vx4YtE1e-DsujkZGZ.js.map +1 -0
  91. package/dist/connect/assets/i18next-B07yHGWe.js +2 -0
  92. package/dist/connect/assets/i18next-B07yHGWe.js.map +1 -0
  93. package/dist/connect/assets/index-BzDF5yEH.css +2 -0
  94. package/dist/connect/assets/index-FULRicth.js +133 -0
  95. package/dist/connect/assets/index-FULRicth.js.map +1 -0
  96. package/dist/connect/assets/index.modern-Bfz1MSQq.js +2 -0
  97. package/dist/connect/assets/index.modern-Bfz1MSQq.js.map +1 -0
  98. package/dist/connect/assets/json-editor-C_IZ6CW1-Cxby5qEA.js +2 -0
  99. package/dist/connect/assets/json-editor-C_IZ6CW1-Cxby5qEA.js.map +1 -0
  100. package/dist/connect/assets/load-CXhaOice-8WLmFWs9.js +4 -0
  101. package/dist/connect/assets/load-CXhaOice-8WLmFWs9.js.map +1 -0
  102. package/dist/connect/assets/lodash.debounce-eFf-KvWl.js +803 -0
  103. package/dist/connect/assets/lodash.debounce-eFf-KvWl.js.map +1 -0
  104. package/dist/connect/assets/nodefs-CVI3Z1Xb-DdUrh9z_.js +2 -0
  105. package/dist/connect/assets/nodefs-CVI3Z1Xb-DdUrh9z_.js.map +1 -0
  106. package/dist/connect/assets/nodefs-D0TyfOk-.js +2 -0
  107. package/dist/connect/assets/nodefs-D0TyfOk-.js.map +1 -0
  108. package/dist/connect/assets/nodefs-iwlcSNyU.js +2 -0
  109. package/dist/connect/assets/nodefs-iwlcSNyU.js.map +1 -0
  110. package/dist/connect/assets/opfs-ahp-C3rjknSS.js +4 -0
  111. package/dist/connect/assets/opfs-ahp-C3rjknSS.js.map +1 -0
  112. package/dist/connect/assets/opfs-ahp-Cnv_7n9l-DCmWNksN.js +4 -0
  113. package/dist/connect/assets/opfs-ahp-Cnv_7n9l-DCmWNksN.js.map +1 -0
  114. package/dist/connect/assets/opfs-ahp-DnDPNLA9.js +4 -0
  115. package/dist/connect/assets/opfs-ahp-DnDPNLA9.js.map +1 -0
  116. package/dist/connect/assets/package-BfEuD7B1-BfRYGKvg.js +2 -0
  117. package/dist/connect/assets/package-BfEuD7B1-BfRYGKvg.js.map +1 -0
  118. package/dist/connect/assets/parser-DbYKMg6c-usgms9X3.js +22 -0
  119. package/dist/connect/assets/parser-DbYKMg6c-usgms9X3.js.map +1 -0
  120. package/dist/connect/assets/pg_dump-Cvfbb5Q0.wasm +0 -0
  121. package/dist/connect/assets/pglite-COscPi1Y.data +0 -0
  122. package/dist/connect/assets/pglite-CeYkvzd0.wasm +0 -0
  123. package/dist/connect/assets/pglite.worker-DvzUF7C_.js +142 -0
  124. package/dist/connect/assets/pglite.worker-DvzUF7C_.js.map +1 -0
  125. package/dist/connect/assets/preload-helper-rov5CBGT.js +1 -0
  126. package/dist/connect/assets/processor-module-CkuQiq7B-NgwLFT1B.js +39 -0
  127. package/dist/connect/assets/processor-module-CkuQiq7B-NgwLFT1B.js.map +1 -0
  128. package/dist/connect/assets/reactor-DAcFOba2-CdQem7g3.js +134 -0
  129. package/dist/connect/assets/reactor-DAcFOba2-CdQem7g3.js.map +1 -0
  130. package/dist/connect/assets/schemas-Bj5Xrw0U-EgU8DTwQ.js +40 -0
  131. package/dist/connect/assets/schemas-Bj5Xrw0U-EgU8DTwQ.js.map +1 -0
  132. package/dist/connect/assets/state-schemas-CitlQ5rT-CL9kk_uV.js +3 -0
  133. package/dist/connect/assets/state-schemas-CitlQ5rT-CL9kk_uV.js.map +1 -0
  134. package/dist/connect/assets/style-D0HSuDqn-CTfeWVw6.js +128 -0
  135. package/dist/connect/assets/style-D0HSuDqn-CTfeWVw6.js.map +1 -0
  136. package/dist/connect/assets/subgraph-module-CU_-umq2-CtfVtSp9.js +17 -0
  137. package/dist/connect/assets/subgraph-module-CU_-umq2-CtfVtSp9.js.map +1 -0
  138. package/dist/connect/assets/switchboard-Cx2GQN5a.js +2 -0
  139. package/dist/connect/assets/switchboard-Cx2GQN5a.js.map +1 -0
  140. package/dist/connect/assets/useRegistryPackages-DSzf8iPN-BYf0GDSw.js +2 -0
  141. package/dist/connect/assets/useRegistryPackages-DSzf8iPN-BYf0GDSw.js.map +1 -0
  142. package/dist/connect/assets/useVetraDocument-DF0teXXM-BQzuB5to.js +2 -0
  143. package/dist/connect/assets/useVetraDocument-DF0teXXM-BQzuB5to.js.map +1 -0
  144. package/dist/connect/assets/validate-BWGPnihN-R_6oKK2_.js +61 -0
  145. package/dist/connect/assets/validate-BWGPnihN-R_6oKK2_.js.map +1 -0
  146. package/dist/connect/icon.ico +0 -0
  147. package/dist/connect/index.html +51 -0
  148. package/dist/connect/ph-packages.json +3 -0
  149. package/package.json +3 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks-DcjZbCsk-DeRtYBVD.js","names":[],"sources":["../../../node_modules/.pnpm/@powerhousedao+powerhouse-vetra-packages@6.0.0-dev.170_@emnapi+core@1.9.2_@emnapi+runti_2549454b6b7ed6e3af2d6cfad2c5a765/node_modules/@powerhousedao/powerhouse-vetra-packages/dist/browser/hooks-DcjZbCsk.js"],"sourcesContent":["import { a as updateTimeout } from \"./documents-D25BA9nW.js\";\nimport { useEffect, useRef } from \"react\";\n//#region ../../node_modules/.pnpm/@marijn+find-cluster-break@1.0.2/node_modules/@marijn/find-cluster-break/src/index.js\nlet rangeFrom = [], rangeTo = [];\n(() => {\n\tlet numbers = \"lc,34,7n,7,7b,19,,,,2,,2,,,20,b,1c,l,g,,2t,7,2,6,2,2,,4,z,,u,r,2j,b,1m,9,9,,o,4,,9,,3,,5,17,3,3b,f,,w,1j,,,,4,8,4,,3,7,a,2,t,,1m,,,,2,4,8,,9,,a,2,q,,2,2,1l,,4,2,4,2,2,3,3,,u,2,3,,b,2,1l,,4,5,,2,4,,k,2,m,6,,,1m,,,2,,4,8,,7,3,a,2,u,,1n,,,,c,,9,,14,,3,,1l,3,5,3,,4,7,2,b,2,t,,1m,,2,,2,,3,,5,2,7,2,b,2,s,2,1l,2,,,2,4,8,,9,,a,2,t,,20,,4,,2,3,,,8,,29,,2,7,c,8,2q,,2,9,b,6,22,2,r,,,,,,1j,e,,5,,2,5,b,,10,9,,2u,4,,6,,2,2,2,p,2,4,3,g,4,d,,2,2,6,,f,,jj,3,qa,3,t,3,t,2,u,2,1s,2,,7,8,,2,b,9,,19,3,3b,2,y,,3a,3,4,2,9,,6,3,63,2,2,,1m,,,7,,,,,2,8,6,a,2,,1c,h,1r,4,1c,7,,,5,,14,9,c,2,w,4,2,2,,3,1k,,,2,3,,,3,1m,8,2,2,48,3,,d,,7,4,,6,,3,2,5i,1m,,5,ek,,5f,x,2da,3,3x,,2o,w,fe,6,2x,2,n9w,4,,a,w,2,28,2,7k,,3,,4,,p,2,5,,47,2,q,i,d,,12,8,p,b,1a,3,1c,,2,4,2,2,13,,1v,6,2,2,2,2,c,,8,,1b,,1f,,,3,2,2,5,2,,,16,2,8,,6m,,2,,4,,fn4,,kh,g,g,g,a6,2,gt,,6a,,45,5,1ae,3,,2,5,4,14,3,4,,4l,2,fx,4,ar,2,49,b,4w,,1i,f,1k,3,1d,4,2,2,1x,3,10,5,,8,1q,,c,2,1g,9,a,4,2,,2n,3,2,,,2,6,,4g,,3,8,l,2,1l,2,,,,,m,,e,7,3,5,5f,8,2,3,,,n,,29,,2,6,,,2,,,2,,2,6j,,2,4,6,2,,2,r,2,2d,8,2,,,2,2y,,,,2,6,,,2t,3,2,4,,5,77,9,,2,6t,,a,2,,,4,,40,4,2,2,4,,w,a,14,6,2,4,8,,9,6,2,3,1a,d,,2,ba,7,,6,,,2a,m,2,7,,2,,2,3e,6,3,,,2,,7,,,20,2,3,,,,9n,2,f0b,5,1n,7,t4,,1r,4,29,,f5k,2,43q,,,3,4,5,8,8,2,7,u,4,44,3,1iz,1j,4,1e,8,,e,,m,5,,f,11s,7,,h,2,7,,2,,5,79,7,c5,4,15s,7,31,7,240,5,gx7k,2o,3k,6o\".split(\",\").map((s) => s ? parseInt(s, 36) : 1);\n\tfor (let i = 0, n = 0; i < numbers.length; i++) (i % 2 ? rangeTo : rangeFrom).push(n = n + numbers[i]);\n})();\nfunction isExtendingChar(code) {\n\tif (code < 768) return false;\n\tfor (let from = 0, to = rangeFrom.length;;) {\n\t\tlet mid = from + to >> 1;\n\t\tif (code < rangeFrom[mid]) to = mid;\n\t\telse if (code >= rangeTo[mid]) from = mid + 1;\n\t\telse return true;\n\t\tif (from == to) return false;\n\t}\n}\nfunction isRegionalIndicator(code) {\n\treturn code >= 127462 && code <= 127487;\n}\nconst ZWJ = 8205;\nfunction findClusterBreak$1(str, pos, forward = true, includeExtending = true) {\n\treturn (forward ? nextClusterBreak : prevClusterBreak)(str, pos, includeExtending);\n}\nfunction nextClusterBreak(str, pos, includeExtending) {\n\tif (pos == str.length) return pos;\n\tif (pos && surrogateLow$1(str.charCodeAt(pos)) && surrogateHigh$1(str.charCodeAt(pos - 1))) pos--;\n\tlet prev = codePointAt$1(str, pos);\n\tpos += codePointSize$1(prev);\n\twhile (pos < str.length) {\n\t\tlet next = codePointAt$1(str, pos);\n\t\tif (prev == ZWJ || next == ZWJ || includeExtending && isExtendingChar(next)) {\n\t\t\tpos += codePointSize$1(next);\n\t\t\tprev = next;\n\t\t} else if (isRegionalIndicator(next)) {\n\t\t\tlet countBefore = 0, i = pos - 2;\n\t\t\twhile (i >= 0 && isRegionalIndicator(codePointAt$1(str, i))) {\n\t\t\t\tcountBefore++;\n\t\t\t\ti -= 2;\n\t\t\t}\n\t\t\tif (countBefore % 2 == 0) break;\n\t\t\telse pos += 2;\n\t\t} else break;\n\t}\n\treturn pos;\n}\nfunction prevClusterBreak(str, pos, includeExtending) {\n\twhile (pos > 0) {\n\t\tlet found = nextClusterBreak(str, pos - 2, includeExtending);\n\t\tif (found < pos) return found;\n\t\tpos--;\n\t}\n\treturn 0;\n}\nfunction codePointAt$1(str, pos) {\n\tlet code0 = str.charCodeAt(pos);\n\tif (!surrogateHigh$1(code0) || pos + 1 == str.length) return code0;\n\tlet code1 = str.charCodeAt(pos + 1);\n\tif (!surrogateLow$1(code1)) return code0;\n\treturn (code0 - 55296 << 10) + (code1 - 56320) + 65536;\n}\nfunction surrogateLow$1(ch) {\n\treturn ch >= 56320 && ch < 57344;\n}\nfunction surrogateHigh$1(ch) {\n\treturn ch >= 55296 && ch < 56320;\n}\nfunction codePointSize$1(code) {\n\treturn code < 65536 ? 1 : 2;\n}\n//#endregion\n//#region ../../node_modules/.pnpm/@codemirror+state@6.5.2/node_modules/@codemirror/state/dist/index.js\n/**\nThe data structure for documents. @nonabstract\n*/\nvar Text = class Text {\n\t/**\n\tGet the line description around the given position.\n\t*/\n\tlineAt(pos) {\n\t\tif (pos < 0 || pos > this.length) throw new RangeError(`Invalid position ${pos} in document of length ${this.length}`);\n\t\treturn this.lineInner(pos, false, 1, 0);\n\t}\n\t/**\n\tGet the description for the given (1-based) line number.\n\t*/\n\tline(n) {\n\t\tif (n < 1 || n > this.lines) throw new RangeError(`Invalid line number ${n} in ${this.lines}-line document`);\n\t\treturn this.lineInner(n, true, 1, 0);\n\t}\n\t/**\n\tReplace a range of the text with the given content.\n\t*/\n\treplace(from, to, text) {\n\t\t[from, to] = clip(this, from, to);\n\t\tlet parts = [];\n\t\tthis.decompose(0, from, parts, 2);\n\t\tif (text.length) text.decompose(0, text.length, parts, 3);\n\t\tthis.decompose(to, this.length, parts, 1);\n\t\treturn TextNode.from(parts, this.length - (to - from) + text.length);\n\t}\n\t/**\n\tAppend another document to this one.\n\t*/\n\tappend(other) {\n\t\treturn this.replace(this.length, this.length, other);\n\t}\n\t/**\n\tRetrieve the text between the given points.\n\t*/\n\tslice(from, to = this.length) {\n\t\t[from, to] = clip(this, from, to);\n\t\tlet parts = [];\n\t\tthis.decompose(from, to, parts, 0);\n\t\treturn TextNode.from(parts, to - from);\n\t}\n\t/**\n\tTest whether this text is equal to another instance.\n\t*/\n\teq(other) {\n\t\tif (other == this) return true;\n\t\tif (other.length != this.length || other.lines != this.lines) return false;\n\t\tlet start = this.scanIdentical(other, 1), end = this.length - this.scanIdentical(other, -1);\n\t\tlet a = new RawTextCursor(this), b = new RawTextCursor(other);\n\t\tfor (let skip = start, pos = start;;) {\n\t\t\ta.next(skip);\n\t\t\tb.next(skip);\n\t\t\tskip = 0;\n\t\t\tif (a.lineBreak != b.lineBreak || a.done != b.done || a.value != b.value) return false;\n\t\t\tpos += a.value.length;\n\t\t\tif (a.done || pos >= end) return true;\n\t\t}\n\t}\n\t/**\n\tIterate over the text. When `dir` is `-1`, iteration happens\n\tfrom end to start. This will return lines and the breaks between\n\tthem as separate strings.\n\t*/\n\titer(dir = 1) {\n\t\treturn new RawTextCursor(this, dir);\n\t}\n\t/**\n\tIterate over a range of the text. When `from` > `to`, the\n\titerator will run in reverse.\n\t*/\n\titerRange(from, to = this.length) {\n\t\treturn new PartialTextCursor(this, from, to);\n\t}\n\t/**\n\tReturn a cursor that iterates over the given range of lines,\n\t_without_ returning the line breaks between, and yielding empty\n\tstrings for empty lines.\n\t\n\tWhen `from` and `to` are given, they should be 1-based line numbers.\n\t*/\n\titerLines(from, to) {\n\t\tlet inner;\n\t\tif (from == null) inner = this.iter();\n\t\telse {\n\t\t\tif (to == null) to = this.lines + 1;\n\t\t\tlet start = this.line(from).from;\n\t\t\tinner = this.iterRange(start, Math.max(start, to == this.lines + 1 ? this.length : to <= 1 ? 0 : this.line(to - 1).to));\n\t\t}\n\t\treturn new LineCursor(inner);\n\t}\n\t/**\n\tReturn the document as a string, using newline characters to\n\tseparate lines.\n\t*/\n\ttoString() {\n\t\treturn this.sliceString(0);\n\t}\n\t/**\n\tConvert the document to an array of lines (which can be\n\tdeserialized again via [`Text.of`](https://codemirror.net/6/docs/ref/#state.Text^of)).\n\t*/\n\ttoJSON() {\n\t\tlet lines = [];\n\t\tthis.flatten(lines);\n\t\treturn lines;\n\t}\n\t/**\n\t@internal\n\t*/\n\tconstructor() {}\n\t/**\n\tCreate a `Text` instance for the given array of lines.\n\t*/\n\tstatic of(text) {\n\t\tif (text.length == 0) throw new RangeError(\"A document must have at least one line\");\n\t\tif (text.length == 1 && !text[0]) return Text.empty;\n\t\treturn text.length <= 32 ? new TextLeaf(text) : TextNode.from(TextLeaf.split(text, []));\n\t}\n};\nvar TextLeaf = class TextLeaf extends Text {\n\tconstructor(text, length = textLength(text)) {\n\t\tsuper();\n\t\tthis.text = text;\n\t\tthis.length = length;\n\t}\n\tget lines() {\n\t\treturn this.text.length;\n\t}\n\tget children() {\n\t\treturn null;\n\t}\n\tlineInner(target, isLine, line, offset) {\n\t\tfor (let i = 0;; i++) {\n\t\t\tlet string = this.text[i], end = offset + string.length;\n\t\t\tif ((isLine ? line : end) >= target) return new Line(offset, end, line, string);\n\t\t\toffset = end + 1;\n\t\t\tline++;\n\t\t}\n\t}\n\tdecompose(from, to, target, open) {\n\t\tlet text = from <= 0 && to >= this.length ? this : new TextLeaf(sliceText(this.text, from, to), Math.min(to, this.length) - Math.max(0, from));\n\t\tif (open & 1) {\n\t\t\tlet prev = target.pop();\n\t\t\tlet joined = appendText(text.text, prev.text.slice(), 0, text.length);\n\t\t\tif (joined.length <= 32) target.push(new TextLeaf(joined, prev.length + text.length));\n\t\t\telse {\n\t\t\t\tlet mid = joined.length >> 1;\n\t\t\t\ttarget.push(new TextLeaf(joined.slice(0, mid)), new TextLeaf(joined.slice(mid)));\n\t\t\t}\n\t\t} else target.push(text);\n\t}\n\treplace(from, to, text) {\n\t\tif (!(text instanceof TextLeaf)) return super.replace(from, to, text);\n\t\t[from, to] = clip(this, from, to);\n\t\tlet lines = appendText(this.text, appendText(text.text, sliceText(this.text, 0, from)), to);\n\t\tlet newLen = this.length + text.length - (to - from);\n\t\tif (lines.length <= 32) return new TextLeaf(lines, newLen);\n\t\treturn TextNode.from(TextLeaf.split(lines, []), newLen);\n\t}\n\tsliceString(from, to = this.length, lineSep = \"\\n\") {\n\t\t[from, to] = clip(this, from, to);\n\t\tlet result = \"\";\n\t\tfor (let pos = 0, i = 0; pos <= to && i < this.text.length; i++) {\n\t\t\tlet line = this.text[i], end = pos + line.length;\n\t\t\tif (pos > from && i) result += lineSep;\n\t\t\tif (from < end && to > pos) result += line.slice(Math.max(0, from - pos), to - pos);\n\t\t\tpos = end + 1;\n\t\t}\n\t\treturn result;\n\t}\n\tflatten(target) {\n\t\tfor (let line of this.text) target.push(line);\n\t}\n\tscanIdentical() {\n\t\treturn 0;\n\t}\n\tstatic split(text, target) {\n\t\tlet part = [], len = -1;\n\t\tfor (let line of text) {\n\t\t\tpart.push(line);\n\t\t\tlen += line.length + 1;\n\t\t\tif (part.length == 32) {\n\t\t\t\ttarget.push(new TextLeaf(part, len));\n\t\t\t\tpart = [];\n\t\t\t\tlen = -1;\n\t\t\t}\n\t\t}\n\t\tif (len > -1) target.push(new TextLeaf(part, len));\n\t\treturn target;\n\t}\n};\nvar TextNode = class TextNode extends Text {\n\tconstructor(children, length) {\n\t\tsuper();\n\t\tthis.children = children;\n\t\tthis.length = length;\n\t\tthis.lines = 0;\n\t\tfor (let child of children) this.lines += child.lines;\n\t}\n\tlineInner(target, isLine, line, offset) {\n\t\tfor (let i = 0;; i++) {\n\t\t\tlet child = this.children[i], end = offset + child.length, endLine = line + child.lines - 1;\n\t\t\tif ((isLine ? endLine : end) >= target) return child.lineInner(target, isLine, line, offset);\n\t\t\toffset = end + 1;\n\t\t\tline = endLine + 1;\n\t\t}\n\t}\n\tdecompose(from, to, target, open) {\n\t\tfor (let i = 0, pos = 0; pos <= to && i < this.children.length; i++) {\n\t\t\tlet child = this.children[i], end = pos + child.length;\n\t\t\tif (from <= end && to >= pos) {\n\t\t\t\tlet childOpen = open & ((pos <= from ? 1 : 0) | (end >= to ? 2 : 0));\n\t\t\t\tif (pos >= from && end <= to && !childOpen) target.push(child);\n\t\t\t\telse child.decompose(from - pos, to - pos, target, childOpen);\n\t\t\t}\n\t\t\tpos = end + 1;\n\t\t}\n\t}\n\treplace(from, to, text) {\n\t\t[from, to] = clip(this, from, to);\n\t\tif (text.lines < this.lines) for (let i = 0, pos = 0; i < this.children.length; i++) {\n\t\t\tlet child = this.children[i], end = pos + child.length;\n\t\t\tif (from >= pos && to <= end) {\n\t\t\t\tlet updated = child.replace(from - pos, to - pos, text);\n\t\t\t\tlet totalLines = this.lines - child.lines + updated.lines;\n\t\t\t\tif (updated.lines < totalLines >> 4 && updated.lines > totalLines >> 6) {\n\t\t\t\t\tlet copy = this.children.slice();\n\t\t\t\t\tcopy[i] = updated;\n\t\t\t\t\treturn new TextNode(copy, this.length - (to - from) + text.length);\n\t\t\t\t}\n\t\t\t\treturn super.replace(pos, end, updated);\n\t\t\t}\n\t\t\tpos = end + 1;\n\t\t}\n\t\treturn super.replace(from, to, text);\n\t}\n\tsliceString(from, to = this.length, lineSep = \"\\n\") {\n\t\t[from, to] = clip(this, from, to);\n\t\tlet result = \"\";\n\t\tfor (let i = 0, pos = 0; i < this.children.length && pos <= to; i++) {\n\t\t\tlet child = this.children[i], end = pos + child.length;\n\t\t\tif (pos > from && i) result += lineSep;\n\t\t\tif (from < end && to > pos) result += child.sliceString(from - pos, to - pos, lineSep);\n\t\t\tpos = end + 1;\n\t\t}\n\t\treturn result;\n\t}\n\tflatten(target) {\n\t\tfor (let child of this.children) child.flatten(target);\n\t}\n\tscanIdentical(other, dir) {\n\t\tif (!(other instanceof TextNode)) return 0;\n\t\tlet length = 0;\n\t\tlet [iA, iB, eA, eB] = dir > 0 ? [\n\t\t\t0,\n\t\t\t0,\n\t\t\tthis.children.length,\n\t\t\tother.children.length\n\t\t] : [\n\t\t\tthis.children.length - 1,\n\t\t\tother.children.length - 1,\n\t\t\t-1,\n\t\t\t-1\n\t\t];\n\t\tfor (;; iA += dir, iB += dir) {\n\t\t\tif (iA == eA || iB == eB) return length;\n\t\t\tlet chA = this.children[iA], chB = other.children[iB];\n\t\t\tif (chA != chB) return length + chA.scanIdentical(chB, dir);\n\t\t\tlength += chA.length + 1;\n\t\t}\n\t}\n\tstatic from(children, length = children.reduce((l, ch) => l + ch.length + 1, -1)) {\n\t\tlet lines = 0;\n\t\tfor (let ch of children) lines += ch.lines;\n\t\tif (lines < 32) {\n\t\t\tlet flat = [];\n\t\t\tfor (let ch of children) ch.flatten(flat);\n\t\t\treturn new TextLeaf(flat, length);\n\t\t}\n\t\tlet chunk = Math.max(32, lines >> 5), maxChunk = chunk << 1, minChunk = chunk >> 1;\n\t\tlet chunked = [], currentLines = 0, currentLen = -1, currentChunk = [];\n\t\tfunction add(child) {\n\t\t\tlet last;\n\t\t\tif (child.lines > maxChunk && child instanceof TextNode) for (let node of child.children) add(node);\n\t\t\telse if (child.lines > minChunk && (currentLines > minChunk || !currentLines)) {\n\t\t\t\tflush();\n\t\t\t\tchunked.push(child);\n\t\t\t} else if (child instanceof TextLeaf && currentLines && (last = currentChunk[currentChunk.length - 1]) instanceof TextLeaf && child.lines + last.lines <= 32) {\n\t\t\t\tcurrentLines += child.lines;\n\t\t\t\tcurrentLen += child.length + 1;\n\t\t\t\tcurrentChunk[currentChunk.length - 1] = new TextLeaf(last.text.concat(child.text), last.length + 1 + child.length);\n\t\t\t} else {\n\t\t\t\tif (currentLines + child.lines > chunk) flush();\n\t\t\t\tcurrentLines += child.lines;\n\t\t\t\tcurrentLen += child.length + 1;\n\t\t\t\tcurrentChunk.push(child);\n\t\t\t}\n\t\t}\n\t\tfunction flush() {\n\t\t\tif (currentLines == 0) return;\n\t\t\tchunked.push(currentChunk.length == 1 ? currentChunk[0] : TextNode.from(currentChunk, currentLen));\n\t\t\tcurrentLen = -1;\n\t\t\tcurrentLines = currentChunk.length = 0;\n\t\t}\n\t\tfor (let child of children) add(child);\n\t\tflush();\n\t\treturn chunked.length == 1 ? chunked[0] : new TextNode(chunked, length);\n\t}\n};\nText.empty = /* @__PURE__ */ new TextLeaf([\"\"], 0);\nfunction textLength(text) {\n\tlet length = -1;\n\tfor (let line of text) length += line.length + 1;\n\treturn length;\n}\nfunction appendText(text, target, from = 0, to = 1e9) {\n\tfor (let pos = 0, i = 0, first = true; i < text.length && pos <= to; i++) {\n\t\tlet line = text[i], end = pos + line.length;\n\t\tif (end >= from) {\n\t\t\tif (end > to) line = line.slice(0, to - pos);\n\t\t\tif (pos < from) line = line.slice(from - pos);\n\t\t\tif (first) {\n\t\t\t\ttarget[target.length - 1] += line;\n\t\t\t\tfirst = false;\n\t\t\t} else target.push(line);\n\t\t}\n\t\tpos = end + 1;\n\t}\n\treturn target;\n}\nfunction sliceText(text, from, to) {\n\treturn appendText(text, [\"\"], from, to);\n}\nvar RawTextCursor = class {\n\tconstructor(text, dir = 1) {\n\t\tthis.dir = dir;\n\t\tthis.done = false;\n\t\tthis.lineBreak = false;\n\t\tthis.value = \"\";\n\t\tthis.nodes = [text];\n\t\tthis.offsets = [dir > 0 ? 1 : (text instanceof TextLeaf ? text.text.length : text.children.length) << 1];\n\t}\n\tnextInner(skip, dir) {\n\t\tthis.done = this.lineBreak = false;\n\t\tfor (;;) {\n\t\t\tlet last = this.nodes.length - 1;\n\t\t\tlet top = this.nodes[last], offsetValue = this.offsets[last], offset = offsetValue >> 1;\n\t\t\tlet size = top instanceof TextLeaf ? top.text.length : top.children.length;\n\t\t\tif (offset == (dir > 0 ? size : 0)) {\n\t\t\t\tif (last == 0) {\n\t\t\t\t\tthis.done = true;\n\t\t\t\t\tthis.value = \"\";\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tif (dir > 0) this.offsets[last - 1]++;\n\t\t\t\tthis.nodes.pop();\n\t\t\t\tthis.offsets.pop();\n\t\t\t} else if ((offsetValue & 1) == (dir > 0 ? 0 : 1)) {\n\t\t\t\tthis.offsets[last] += dir;\n\t\t\t\tif (skip == 0) {\n\t\t\t\t\tthis.lineBreak = true;\n\t\t\t\t\tthis.value = \"\\n\";\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tskip--;\n\t\t\t} else if (top instanceof TextLeaf) {\n\t\t\t\tlet next = top.text[offset + (dir < 0 ? -1 : 0)];\n\t\t\t\tthis.offsets[last] += dir;\n\t\t\t\tif (next.length > Math.max(0, skip)) {\n\t\t\t\t\tthis.value = skip == 0 ? next : dir > 0 ? next.slice(skip) : next.slice(0, next.length - skip);\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tskip -= next.length;\n\t\t\t} else {\n\t\t\t\tlet next = top.children[offset + (dir < 0 ? -1 : 0)];\n\t\t\t\tif (skip > next.length) {\n\t\t\t\t\tskip -= next.length;\n\t\t\t\t\tthis.offsets[last] += dir;\n\t\t\t\t} else {\n\t\t\t\t\tif (dir < 0) this.offsets[last]--;\n\t\t\t\t\tthis.nodes.push(next);\n\t\t\t\t\tthis.offsets.push(dir > 0 ? 1 : (next instanceof TextLeaf ? next.text.length : next.children.length) << 1);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tnext(skip = 0) {\n\t\tif (skip < 0) {\n\t\t\tthis.nextInner(-skip, -this.dir);\n\t\t\tskip = this.value.length;\n\t\t}\n\t\treturn this.nextInner(skip, this.dir);\n\t}\n};\nvar PartialTextCursor = class {\n\tconstructor(text, start, end) {\n\t\tthis.value = \"\";\n\t\tthis.done = false;\n\t\tthis.cursor = new RawTextCursor(text, start > end ? -1 : 1);\n\t\tthis.pos = start > end ? text.length : 0;\n\t\tthis.from = Math.min(start, end);\n\t\tthis.to = Math.max(start, end);\n\t}\n\tnextInner(skip, dir) {\n\t\tif (dir < 0 ? this.pos <= this.from : this.pos >= this.to) {\n\t\t\tthis.value = \"\";\n\t\t\tthis.done = true;\n\t\t\treturn this;\n\t\t}\n\t\tskip += Math.max(0, dir < 0 ? this.pos - this.to : this.from - this.pos);\n\t\tlet limit = dir < 0 ? this.pos - this.from : this.to - this.pos;\n\t\tif (skip > limit) skip = limit;\n\t\tlimit -= skip;\n\t\tlet { value } = this.cursor.next(skip);\n\t\tthis.pos += (value.length + skip) * dir;\n\t\tthis.value = value.length <= limit ? value : dir < 0 ? value.slice(value.length - limit) : value.slice(0, limit);\n\t\tthis.done = !this.value;\n\t\treturn this;\n\t}\n\tnext(skip = 0) {\n\t\tif (skip < 0) skip = Math.max(skip, this.from - this.pos);\n\t\telse if (skip > 0) skip = Math.min(skip, this.to - this.pos);\n\t\treturn this.nextInner(skip, this.cursor.dir);\n\t}\n\tget lineBreak() {\n\t\treturn this.cursor.lineBreak && this.value != \"\";\n\t}\n};\nvar LineCursor = class {\n\tconstructor(inner) {\n\t\tthis.inner = inner;\n\t\tthis.afterBreak = true;\n\t\tthis.value = \"\";\n\t\tthis.done = false;\n\t}\n\tnext(skip = 0) {\n\t\tlet { done, lineBreak, value } = this.inner.next(skip);\n\t\tif (done && this.afterBreak) {\n\t\t\tthis.value = \"\";\n\t\t\tthis.afterBreak = false;\n\t\t} else if (done) {\n\t\t\tthis.done = true;\n\t\t\tthis.value = \"\";\n\t\t} else if (lineBreak) if (this.afterBreak) this.value = \"\";\n\t\telse {\n\t\t\tthis.afterBreak = true;\n\t\t\tthis.next();\n\t\t}\n\t\telse {\n\t\t\tthis.value = value;\n\t\t\tthis.afterBreak = false;\n\t\t}\n\t\treturn this;\n\t}\n\tget lineBreak() {\n\t\treturn false;\n\t}\n};\nif (typeof Symbol != \"undefined\") {\n\tText.prototype[Symbol.iterator] = function() {\n\t\treturn this.iter();\n\t};\n\tRawTextCursor.prototype[Symbol.iterator] = PartialTextCursor.prototype[Symbol.iterator] = LineCursor.prototype[Symbol.iterator] = function() {\n\t\treturn this;\n\t};\n}\n/**\nThis type describes a line in the document. It is created\non-demand when lines are [queried](https://codemirror.net/6/docs/ref/#state.Text.lineAt).\n*/\nvar Line = class {\n\t/**\n\t@internal\n\t*/\n\tconstructor(from, to, number, text) {\n\t\tthis.from = from;\n\t\tthis.to = to;\n\t\tthis.number = number;\n\t\tthis.text = text;\n\t}\n\t/**\n\tThe length of the line (not including any line break after it).\n\t*/\n\tget length() {\n\t\treturn this.to - this.from;\n\t}\n};\nfunction clip(text, from, to) {\n\tfrom = Math.max(0, Math.min(text.length, from));\n\treturn [from, Math.max(from, Math.min(text.length, to))];\n}\n/**\nReturns a next grapheme cluster break _after_ (not equal to)\n`pos`, if `forward` is true, or before otherwise. Returns `pos`\nitself if no further cluster break is available in the string.\nMoves across surrogate pairs, extending characters (when\n`includeExtending` is true), characters joined with zero-width\njoiners, and flag emoji.\n*/\nfunction findClusterBreak(str, pos, forward = true, includeExtending = true) {\n\treturn findClusterBreak$1(str, pos, forward, includeExtending);\n}\nfunction surrogateLow(ch) {\n\treturn ch >= 56320 && ch < 57344;\n}\nfunction surrogateHigh(ch) {\n\treturn ch >= 55296 && ch < 56320;\n}\n/**\nFind the code point at the given position in a string (like the\n[`codePointAt`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/codePointAt)\nstring method).\n*/\nfunction codePointAt(str, pos) {\n\tlet code0 = str.charCodeAt(pos);\n\tif (!surrogateHigh(code0) || pos + 1 == str.length) return code0;\n\tlet code1 = str.charCodeAt(pos + 1);\n\tif (!surrogateLow(code1)) return code0;\n\treturn (code0 - 55296 << 10) + (code1 - 56320) + 65536;\n}\n/**\nGiven a Unicode codepoint, return the JavaScript string that\nrespresents it (like\n[`String.fromCodePoint`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fromCodePoint)).\n*/\nfunction fromCodePoint(code) {\n\tif (code <= 65535) return String.fromCharCode(code);\n\tcode -= 65536;\n\treturn String.fromCharCode((code >> 10) + 55296, (code & 1023) + 56320);\n}\n/**\nThe amount of positions a character takes up in a JavaScript string.\n*/\nfunction codePointSize(code) {\n\treturn code < 65536 ? 1 : 2;\n}\nconst DefaultSplit = /\\r\\n?|\\n/;\n/**\nDistinguishes different ways in which positions can be mapped.\n*/\nvar MapMode = /* @__PURE__ */ (function(MapMode) {\n\t/**\n\tMap a position to a valid new position, even when its context\n\twas deleted.\n\t*/\n\tMapMode[MapMode[\"Simple\"] = 0] = \"Simple\";\n\t/**\n\tReturn null if deletion happens across the position.\n\t*/\n\tMapMode[MapMode[\"TrackDel\"] = 1] = \"TrackDel\";\n\t/**\n\tReturn null if the character _before_ the position is deleted.\n\t*/\n\tMapMode[MapMode[\"TrackBefore\"] = 2] = \"TrackBefore\";\n\t/**\n\tReturn null if the character _after_ the position is deleted.\n\t*/\n\tMapMode[MapMode[\"TrackAfter\"] = 3] = \"TrackAfter\";\n\treturn MapMode;\n})(MapMode || (MapMode = {}));\n/**\nA change description is a variant of [change set](https://codemirror.net/6/docs/ref/#state.ChangeSet)\nthat doesn't store the inserted text. As such, it can't be\napplied, but is cheaper to store and manipulate.\n*/\nvar ChangeDesc = class ChangeDesc {\n\t/**\n\t@internal\n\t*/\n\tconstructor(sections) {\n\t\tthis.sections = sections;\n\t}\n\t/**\n\tThe length of the document before the change.\n\t*/\n\tget length() {\n\t\tlet result = 0;\n\t\tfor (let i = 0; i < this.sections.length; i += 2) result += this.sections[i];\n\t\treturn result;\n\t}\n\t/**\n\tThe length of the document after the change.\n\t*/\n\tget newLength() {\n\t\tlet result = 0;\n\t\tfor (let i = 0; i < this.sections.length; i += 2) {\n\t\t\tlet ins = this.sections[i + 1];\n\t\t\tresult += ins < 0 ? this.sections[i] : ins;\n\t\t}\n\t\treturn result;\n\t}\n\t/**\n\tFalse when there are actual changes in this set.\n\t*/\n\tget empty() {\n\t\treturn this.sections.length == 0 || this.sections.length == 2 && this.sections[1] < 0;\n\t}\n\t/**\n\tIterate over the unchanged parts left by these changes. `posA`\n\tprovides the position of the range in the old document, `posB`\n\tthe new position in the changed document.\n\t*/\n\titerGaps(f) {\n\t\tfor (let i = 0, posA = 0, posB = 0; i < this.sections.length;) {\n\t\t\tlet len = this.sections[i++], ins = this.sections[i++];\n\t\t\tif (ins < 0) {\n\t\t\t\tf(posA, posB, len);\n\t\t\t\tposB += len;\n\t\t\t} else posB += ins;\n\t\t\tposA += len;\n\t\t}\n\t}\n\t/**\n\tIterate over the ranges changed by these changes. (See\n\t[`ChangeSet.iterChanges`](https://codemirror.net/6/docs/ref/#state.ChangeSet.iterChanges) for a\n\tvariant that also provides you with the inserted text.)\n\t`fromA`/`toA` provides the extent of the change in the starting\n\tdocument, `fromB`/`toB` the extent of the replacement in the\n\tchanged document.\n\t\n\tWhen `individual` is true, adjacent changes (which are kept\n\tseparate for [position mapping](https://codemirror.net/6/docs/ref/#state.ChangeDesc.mapPos)) are\n\treported separately.\n\t*/\n\titerChangedRanges(f, individual = false) {\n\t\titerChanges(this, f, individual);\n\t}\n\t/**\n\tGet a description of the inverted form of these changes.\n\t*/\n\tget invertedDesc() {\n\t\tlet sections = [];\n\t\tfor (let i = 0; i < this.sections.length;) {\n\t\t\tlet len = this.sections[i++], ins = this.sections[i++];\n\t\t\tif (ins < 0) sections.push(len, ins);\n\t\t\telse sections.push(ins, len);\n\t\t}\n\t\treturn new ChangeDesc(sections);\n\t}\n\t/**\n\tCompute the combined effect of applying another set of changes\n\tafter this one. The length of the document after this set should\n\tmatch the length before `other`.\n\t*/\n\tcomposeDesc(other) {\n\t\treturn this.empty ? other : other.empty ? this : composeSets(this, other);\n\t}\n\t/**\n\tMap this description, which should start with the same document\n\tas `other`, over another set of changes, so that it can be\n\tapplied after it. When `before` is true, map as if the changes\n\tin `this` happened before the ones in `other`.\n\t*/\n\tmapDesc(other, before = false) {\n\t\treturn other.empty ? this : mapSet(this, other, before);\n\t}\n\tmapPos(pos, assoc = -1, mode = MapMode.Simple) {\n\t\tlet posA = 0, posB = 0;\n\t\tfor (let i = 0; i < this.sections.length;) {\n\t\t\tlet len = this.sections[i++], ins = this.sections[i++], endA = posA + len;\n\t\t\tif (ins < 0) {\n\t\t\t\tif (endA > pos) return posB + (pos - posA);\n\t\t\t\tposB += len;\n\t\t\t} else {\n\t\t\t\tif (mode != MapMode.Simple && endA >= pos && (mode == MapMode.TrackDel && posA < pos && endA > pos || mode == MapMode.TrackBefore && posA < pos || mode == MapMode.TrackAfter && endA > pos)) return null;\n\t\t\t\tif (endA > pos || endA == pos && assoc < 0 && !len) return pos == posA || assoc < 0 ? posB : posB + ins;\n\t\t\t\tposB += ins;\n\t\t\t}\n\t\t\tposA = endA;\n\t\t}\n\t\tif (pos > posA) throw new RangeError(`Position ${pos} is out of range for changeset of length ${posA}`);\n\t\treturn posB;\n\t}\n\t/**\n\tCheck whether these changes touch a given range. When one of the\n\tchanges entirely covers the range, the string `\"cover\"` is\n\treturned.\n\t*/\n\ttouchesRange(from, to = from) {\n\t\tfor (let i = 0, pos = 0; i < this.sections.length && pos <= to;) {\n\t\t\tlet len = this.sections[i++], ins = this.sections[i++], end = pos + len;\n\t\t\tif (ins >= 0 && pos <= to && end >= from) return pos < from && end > to ? \"cover\" : true;\n\t\t\tpos = end;\n\t\t}\n\t\treturn false;\n\t}\n\t/**\n\t@internal\n\t*/\n\ttoString() {\n\t\tlet result = \"\";\n\t\tfor (let i = 0; i < this.sections.length;) {\n\t\t\tlet len = this.sections[i++], ins = this.sections[i++];\n\t\t\tresult += (result ? \" \" : \"\") + len + (ins >= 0 ? \":\" + ins : \"\");\n\t\t}\n\t\treturn result;\n\t}\n\t/**\n\tSerialize this change desc to a JSON-representable value.\n\t*/\n\ttoJSON() {\n\t\treturn this.sections;\n\t}\n\t/**\n\tCreate a change desc from its JSON representation (as produced\n\tby [`toJSON`](https://codemirror.net/6/docs/ref/#state.ChangeDesc.toJSON).\n\t*/\n\tstatic fromJSON(json) {\n\t\tif (!Array.isArray(json) || json.length % 2 || json.some((a) => typeof a != \"number\")) throw new RangeError(\"Invalid JSON representation of ChangeDesc\");\n\t\treturn new ChangeDesc(json);\n\t}\n\t/**\n\t@internal\n\t*/\n\tstatic create(sections) {\n\t\treturn new ChangeDesc(sections);\n\t}\n};\n/**\nA change set represents a group of modifications to a document. It\nstores the document length, and can only be applied to documents\nwith exactly that length.\n*/\nvar ChangeSet = class ChangeSet extends ChangeDesc {\n\tconstructor(sections, inserted) {\n\t\tsuper(sections);\n\t\tthis.inserted = inserted;\n\t}\n\t/**\n\tApply the changes to a document, returning the modified\n\tdocument.\n\t*/\n\tapply(doc) {\n\t\tif (this.length != doc.length) throw new RangeError(\"Applying change set to a document with the wrong length\");\n\t\titerChanges(this, (fromA, toA, fromB, _toB, text) => doc = doc.replace(fromB, fromB + (toA - fromA), text), false);\n\t\treturn doc;\n\t}\n\tmapDesc(other, before = false) {\n\t\treturn mapSet(this, other, before, true);\n\t}\n\t/**\n\tGiven the document as it existed _before_ the changes, return a\n\tchange set that represents the inverse of this set, which could\n\tbe used to go from the document created by the changes back to\n\tthe document as it existed before the changes.\n\t*/\n\tinvert(doc) {\n\t\tlet sections = this.sections.slice(), inserted = [];\n\t\tfor (let i = 0, pos = 0; i < sections.length; i += 2) {\n\t\t\tlet len = sections[i], ins = sections[i + 1];\n\t\t\tif (ins >= 0) {\n\t\t\t\tsections[i] = ins;\n\t\t\t\tsections[i + 1] = len;\n\t\t\t\tlet index = i >> 1;\n\t\t\t\twhile (inserted.length < index) inserted.push(Text.empty);\n\t\t\t\tinserted.push(len ? doc.slice(pos, pos + len) : Text.empty);\n\t\t\t}\n\t\t\tpos += len;\n\t\t}\n\t\treturn new ChangeSet(sections, inserted);\n\t}\n\t/**\n\tCombine two subsequent change sets into a single set. `other`\n\tmust start in the document produced by `this`. If `this` goes\n\t`docA` → `docB` and `other` represents `docB` → `docC`, the\n\treturned value will represent the change `docA` → `docC`.\n\t*/\n\tcompose(other) {\n\t\treturn this.empty ? other : other.empty ? this : composeSets(this, other, true);\n\t}\n\t/**\n\tGiven another change set starting in the same document, maps this\n\tchange set over the other, producing a new change set that can be\n\tapplied to the document produced by applying `other`. When\n\t`before` is `true`, order changes as if `this` comes before\n\t`other`, otherwise (the default) treat `other` as coming first.\n\t\n\tGiven two changes `A` and `B`, `A.compose(B.map(A))` and\n\t`B.compose(A.map(B, true))` will produce the same document. This\n\tprovides a basic form of [operational\n\ttransformation](https://en.wikipedia.org/wiki/Operational_transformation),\n\tand can be used for collaborative editing.\n\t*/\n\tmap(other, before = false) {\n\t\treturn other.empty ? this : mapSet(this, other, before, true);\n\t}\n\t/**\n\tIterate over the changed ranges in the document, calling `f` for\n\teach, with the range in the original document (`fromA`-`toA`)\n\tand the range that replaces it in the new document\n\t(`fromB`-`toB`).\n\t\n\tWhen `individual` is true, adjacent changes are reported\n\tseparately.\n\t*/\n\titerChanges(f, individual = false) {\n\t\titerChanges(this, f, individual);\n\t}\n\t/**\n\tGet a [change description](https://codemirror.net/6/docs/ref/#state.ChangeDesc) for this change\n\tset.\n\t*/\n\tget desc() {\n\t\treturn ChangeDesc.create(this.sections);\n\t}\n\t/**\n\t@internal\n\t*/\n\tfilter(ranges) {\n\t\tlet resultSections = [], resultInserted = [], filteredSections = [];\n\t\tlet iter = new SectionIter(this);\n\t\tdone: for (let i = 0, pos = 0;;) {\n\t\t\tlet next = i == ranges.length ? 1e9 : ranges[i++];\n\t\t\twhile (pos < next || pos == next && iter.len == 0) {\n\t\t\t\tif (iter.done) break done;\n\t\t\t\tlet len = Math.min(iter.len, next - pos);\n\t\t\t\taddSection(filteredSections, len, -1);\n\t\t\t\tlet ins = iter.ins == -1 ? -1 : iter.off == 0 ? iter.ins : 0;\n\t\t\t\taddSection(resultSections, len, ins);\n\t\t\t\tif (ins > 0) addInsert(resultInserted, resultSections, iter.text);\n\t\t\t\titer.forward(len);\n\t\t\t\tpos += len;\n\t\t\t}\n\t\t\tlet end = ranges[i++];\n\t\t\twhile (pos < end) {\n\t\t\t\tif (iter.done) break done;\n\t\t\t\tlet len = Math.min(iter.len, end - pos);\n\t\t\t\taddSection(resultSections, len, -1);\n\t\t\t\taddSection(filteredSections, len, iter.ins == -1 ? -1 : iter.off == 0 ? iter.ins : 0);\n\t\t\t\titer.forward(len);\n\t\t\t\tpos += len;\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\tchanges: new ChangeSet(resultSections, resultInserted),\n\t\t\tfiltered: ChangeDesc.create(filteredSections)\n\t\t};\n\t}\n\t/**\n\tSerialize this change set to a JSON-representable value.\n\t*/\n\ttoJSON() {\n\t\tlet parts = [];\n\t\tfor (let i = 0; i < this.sections.length; i += 2) {\n\t\t\tlet len = this.sections[i], ins = this.sections[i + 1];\n\t\t\tif (ins < 0) parts.push(len);\n\t\t\telse if (ins == 0) parts.push([len]);\n\t\t\telse parts.push([len].concat(this.inserted[i >> 1].toJSON()));\n\t\t}\n\t\treturn parts;\n\t}\n\t/**\n\tCreate a change set for the given changes, for a document of the\n\tgiven length, using `lineSep` as line separator.\n\t*/\n\tstatic of(changes, length, lineSep) {\n\t\tlet sections = [], inserted = [], pos = 0;\n\t\tlet total = null;\n\t\tfunction flush(force = false) {\n\t\t\tif (!force && !sections.length) return;\n\t\t\tif (pos < length) addSection(sections, length - pos, -1);\n\t\t\tlet set = new ChangeSet(sections, inserted);\n\t\t\ttotal = total ? total.compose(set.map(total)) : set;\n\t\t\tsections = [];\n\t\t\tinserted = [];\n\t\t\tpos = 0;\n\t\t}\n\t\tfunction process(spec) {\n\t\t\tif (Array.isArray(spec)) for (let sub of spec) process(sub);\n\t\t\telse if (spec instanceof ChangeSet) {\n\t\t\t\tif (spec.length != length) throw new RangeError(`Mismatched change set length (got ${spec.length}, expected ${length})`);\n\t\t\t\tflush();\n\t\t\t\ttotal = total ? total.compose(spec.map(total)) : spec;\n\t\t\t} else {\n\t\t\t\tlet { from, to = from, insert } = spec;\n\t\t\t\tif (from > to || from < 0 || to > length) throw new RangeError(`Invalid change range ${from} to ${to} (in doc of length ${length})`);\n\t\t\t\tlet insText = !insert ? Text.empty : typeof insert == \"string\" ? Text.of(insert.split(lineSep || DefaultSplit)) : insert;\n\t\t\t\tlet insLen = insText.length;\n\t\t\t\tif (from == to && insLen == 0) return;\n\t\t\t\tif (from < pos) flush();\n\t\t\t\tif (from > pos) addSection(sections, from - pos, -1);\n\t\t\t\taddSection(sections, to - from, insLen);\n\t\t\t\taddInsert(inserted, sections, insText);\n\t\t\t\tpos = to;\n\t\t\t}\n\t\t}\n\t\tprocess(changes);\n\t\tflush(!total);\n\t\treturn total;\n\t}\n\t/**\n\tCreate an empty changeset of the given length.\n\t*/\n\tstatic empty(length) {\n\t\treturn new ChangeSet(length ? [length, -1] : [], []);\n\t}\n\t/**\n\tCreate a changeset from its JSON representation (as produced by\n\t[`toJSON`](https://codemirror.net/6/docs/ref/#state.ChangeSet.toJSON).\n\t*/\n\tstatic fromJSON(json) {\n\t\tif (!Array.isArray(json)) throw new RangeError(\"Invalid JSON representation of ChangeSet\");\n\t\tlet sections = [], inserted = [];\n\t\tfor (let i = 0; i < json.length; i++) {\n\t\t\tlet part = json[i];\n\t\t\tif (typeof part == \"number\") sections.push(part, -1);\n\t\t\telse if (!Array.isArray(part) || typeof part[0] != \"number\" || part.some((e, i) => i && typeof e != \"string\")) throw new RangeError(\"Invalid JSON representation of ChangeSet\");\n\t\t\telse if (part.length == 1) sections.push(part[0], 0);\n\t\t\telse {\n\t\t\t\twhile (inserted.length < i) inserted.push(Text.empty);\n\t\t\t\tinserted[i] = Text.of(part.slice(1));\n\t\t\t\tsections.push(part[0], inserted[i].length);\n\t\t\t}\n\t\t}\n\t\treturn new ChangeSet(sections, inserted);\n\t}\n\t/**\n\t@internal\n\t*/\n\tstatic createSet(sections, inserted) {\n\t\treturn new ChangeSet(sections, inserted);\n\t}\n};\nfunction addSection(sections, len, ins, forceJoin = false) {\n\tif (len == 0 && ins <= 0) return;\n\tlet last = sections.length - 2;\n\tif (last >= 0 && ins <= 0 && ins == sections[last + 1]) sections[last] += len;\n\telse if (last >= 0 && len == 0 && sections[last] == 0) sections[last + 1] += ins;\n\telse if (forceJoin) {\n\t\tsections[last] += len;\n\t\tsections[last + 1] += ins;\n\t} else sections.push(len, ins);\n}\nfunction addInsert(values, sections, value) {\n\tif (value.length == 0) return;\n\tlet index = sections.length - 2 >> 1;\n\tif (index < values.length) values[values.length - 1] = values[values.length - 1].append(value);\n\telse {\n\t\twhile (values.length < index) values.push(Text.empty);\n\t\tvalues.push(value);\n\t}\n}\nfunction iterChanges(desc, f, individual) {\n\tlet inserted = desc.inserted;\n\tfor (let posA = 0, posB = 0, i = 0; i < desc.sections.length;) {\n\t\tlet len = desc.sections[i++], ins = desc.sections[i++];\n\t\tif (ins < 0) {\n\t\t\tposA += len;\n\t\t\tposB += len;\n\t\t} else {\n\t\t\tlet endA = posA, endB = posB, text = Text.empty;\n\t\t\tfor (;;) {\n\t\t\t\tendA += len;\n\t\t\t\tendB += ins;\n\t\t\t\tif (ins && inserted) text = text.append(inserted[i - 2 >> 1]);\n\t\t\t\tif (individual || i == desc.sections.length || desc.sections[i + 1] < 0) break;\n\t\t\t\tlen = desc.sections[i++];\n\t\t\t\tins = desc.sections[i++];\n\t\t\t}\n\t\t\tf(posA, endA, posB, endB, text);\n\t\t\tposA = endA;\n\t\t\tposB = endB;\n\t\t}\n\t}\n}\nfunction mapSet(setA, setB, before, mkSet = false) {\n\tlet sections = [], insert = mkSet ? [] : null;\n\tlet a = new SectionIter(setA), b = new SectionIter(setB);\n\tfor (let inserted = -1;;) if (a.done && b.len || b.done && a.len) throw new Error(\"Mismatched change set lengths\");\n\telse if (a.ins == -1 && b.ins == -1) {\n\t\tlet len = Math.min(a.len, b.len);\n\t\taddSection(sections, len, -1);\n\t\ta.forward(len);\n\t\tb.forward(len);\n\t} else if (b.ins >= 0 && (a.ins < 0 || inserted == a.i || a.off == 0 && (b.len < a.len || b.len == a.len && !before))) {\n\t\tlet len = b.len;\n\t\taddSection(sections, b.ins, -1);\n\t\twhile (len) {\n\t\t\tlet piece = Math.min(a.len, len);\n\t\t\tif (a.ins >= 0 && inserted < a.i && a.len <= piece) {\n\t\t\t\taddSection(sections, 0, a.ins);\n\t\t\t\tif (insert) addInsert(insert, sections, a.text);\n\t\t\t\tinserted = a.i;\n\t\t\t}\n\t\t\ta.forward(piece);\n\t\t\tlen -= piece;\n\t\t}\n\t\tb.next();\n\t} else if (a.ins >= 0) {\n\t\tlet len = 0, left = a.len;\n\t\twhile (left) if (b.ins == -1) {\n\t\t\tlet piece = Math.min(left, b.len);\n\t\t\tlen += piece;\n\t\t\tleft -= piece;\n\t\t\tb.forward(piece);\n\t\t} else if (b.ins == 0 && b.len < left) {\n\t\t\tleft -= b.len;\n\t\t\tb.next();\n\t\t} else break;\n\t\taddSection(sections, len, inserted < a.i ? a.ins : 0);\n\t\tif (insert && inserted < a.i) addInsert(insert, sections, a.text);\n\t\tinserted = a.i;\n\t\ta.forward(a.len - left);\n\t} else if (a.done && b.done) return insert ? ChangeSet.createSet(sections, insert) : ChangeDesc.create(sections);\n\telse throw new Error(\"Mismatched change set lengths\");\n}\nfunction composeSets(setA, setB, mkSet = false) {\n\tlet sections = [];\n\tlet insert = mkSet ? [] : null;\n\tlet a = new SectionIter(setA), b = new SectionIter(setB);\n\tfor (let open = false;;) if (a.done && b.done) return insert ? ChangeSet.createSet(sections, insert) : ChangeDesc.create(sections);\n\telse if (a.ins == 0) {\n\t\taddSection(sections, a.len, 0, open);\n\t\ta.next();\n\t} else if (b.len == 0 && !b.done) {\n\t\taddSection(sections, 0, b.ins, open);\n\t\tif (insert) addInsert(insert, sections, b.text);\n\t\tb.next();\n\t} else if (a.done || b.done) throw new Error(\"Mismatched change set lengths\");\n\telse {\n\t\tlet len = Math.min(a.len2, b.len), sectionLen = sections.length;\n\t\tif (a.ins == -1) {\n\t\t\tlet insB = b.ins == -1 ? -1 : b.off ? 0 : b.ins;\n\t\t\taddSection(sections, len, insB, open);\n\t\t\tif (insert && insB) addInsert(insert, sections, b.text);\n\t\t} else if (b.ins == -1) {\n\t\t\taddSection(sections, a.off ? 0 : a.len, len, open);\n\t\t\tif (insert) addInsert(insert, sections, a.textBit(len));\n\t\t} else {\n\t\t\taddSection(sections, a.off ? 0 : a.len, b.off ? 0 : b.ins, open);\n\t\t\tif (insert && !b.off) addInsert(insert, sections, b.text);\n\t\t}\n\t\topen = (a.ins > len || b.ins >= 0 && b.len > len) && (open || sections.length > sectionLen);\n\t\ta.forward2(len);\n\t\tb.forward(len);\n\t}\n}\nvar SectionIter = class {\n\tconstructor(set) {\n\t\tthis.set = set;\n\t\tthis.i = 0;\n\t\tthis.next();\n\t}\n\tnext() {\n\t\tlet { sections } = this.set;\n\t\tif (this.i < sections.length) {\n\t\t\tthis.len = sections[this.i++];\n\t\t\tthis.ins = sections[this.i++];\n\t\t} else {\n\t\t\tthis.len = 0;\n\t\t\tthis.ins = -2;\n\t\t}\n\t\tthis.off = 0;\n\t}\n\tget done() {\n\t\treturn this.ins == -2;\n\t}\n\tget len2() {\n\t\treturn this.ins < 0 ? this.len : this.ins;\n\t}\n\tget text() {\n\t\tlet { inserted } = this.set, index = this.i - 2 >> 1;\n\t\treturn index >= inserted.length ? Text.empty : inserted[index];\n\t}\n\ttextBit(len) {\n\t\tlet { inserted } = this.set, index = this.i - 2 >> 1;\n\t\treturn index >= inserted.length && !len ? Text.empty : inserted[index].slice(this.off, len == null ? void 0 : this.off + len);\n\t}\n\tforward(len) {\n\t\tif (len == this.len) this.next();\n\t\telse {\n\t\t\tthis.len -= len;\n\t\t\tthis.off += len;\n\t\t}\n\t}\n\tforward2(len) {\n\t\tif (this.ins == -1) this.forward(len);\n\t\telse if (len == this.ins) this.next();\n\t\telse {\n\t\t\tthis.ins -= len;\n\t\t\tthis.off += len;\n\t\t}\n\t}\n};\n/**\nA single selection range. When\n[`allowMultipleSelections`](https://codemirror.net/6/docs/ref/#state.EditorState^allowMultipleSelections)\nis enabled, a [selection](https://codemirror.net/6/docs/ref/#state.EditorSelection) may hold\nmultiple ranges. By default, selections hold exactly one range.\n*/\nvar SelectionRange = class SelectionRange {\n\tconstructor(from, to, flags) {\n\t\tthis.from = from;\n\t\tthis.to = to;\n\t\tthis.flags = flags;\n\t}\n\t/**\n\tThe anchor of the range—the side that doesn't move when you\n\textend it.\n\t*/\n\tget anchor() {\n\t\treturn this.flags & 32 ? this.to : this.from;\n\t}\n\t/**\n\tThe head of the range, which is moved when the range is\n\t[extended](https://codemirror.net/6/docs/ref/#state.SelectionRange.extend).\n\t*/\n\tget head() {\n\t\treturn this.flags & 32 ? this.from : this.to;\n\t}\n\t/**\n\tTrue when `anchor` and `head` are at the same position.\n\t*/\n\tget empty() {\n\t\treturn this.from == this.to;\n\t}\n\t/**\n\tIf this is a cursor that is explicitly associated with the\n\tcharacter on one of its sides, this returns the side. -1 means\n\tthe character before its position, 1 the character after, and 0\n\tmeans no association.\n\t*/\n\tget assoc() {\n\t\treturn this.flags & 8 ? -1 : this.flags & 16 ? 1 : 0;\n\t}\n\t/**\n\tThe bidirectional text level associated with this cursor, if\n\tany.\n\t*/\n\tget bidiLevel() {\n\t\tlet level = this.flags & 7;\n\t\treturn level == 7 ? null : level;\n\t}\n\t/**\n\tThe goal column (stored vertical offset) associated with a\n\tcursor. This is used to preserve the vertical position when\n\t[moving](https://codemirror.net/6/docs/ref/#view.EditorView.moveVertically) across\n\tlines of different length.\n\t*/\n\tget goalColumn() {\n\t\tlet value = this.flags >> 6;\n\t\treturn value == 16777215 ? void 0 : value;\n\t}\n\t/**\n\tMap this range through a change, producing a valid range in the\n\tupdated document.\n\t*/\n\tmap(change, assoc = -1) {\n\t\tlet from, to;\n\t\tif (this.empty) from = to = change.mapPos(this.from, assoc);\n\t\telse {\n\t\t\tfrom = change.mapPos(this.from, 1);\n\t\t\tto = change.mapPos(this.to, -1);\n\t\t}\n\t\treturn from == this.from && to == this.to ? this : new SelectionRange(from, to, this.flags);\n\t}\n\t/**\n\tExtend this range to cover at least `from` to `to`.\n\t*/\n\textend(from, to = from) {\n\t\tif (from <= this.anchor && to >= this.anchor) return EditorSelection.range(from, to);\n\t\tlet head = Math.abs(from - this.anchor) > Math.abs(to - this.anchor) ? from : to;\n\t\treturn EditorSelection.range(this.anchor, head);\n\t}\n\t/**\n\tCompare this range to another range.\n\t*/\n\teq(other, includeAssoc = false) {\n\t\treturn this.anchor == other.anchor && this.head == other.head && (!includeAssoc || !this.empty || this.assoc == other.assoc);\n\t}\n\t/**\n\tReturn a JSON-serializable object representing the range.\n\t*/\n\ttoJSON() {\n\t\treturn {\n\t\t\tanchor: this.anchor,\n\t\t\thead: this.head\n\t\t};\n\t}\n\t/**\n\tConvert a JSON representation of a range to a `SelectionRange`\n\tinstance.\n\t*/\n\tstatic fromJSON(json) {\n\t\tif (!json || typeof json.anchor != \"number\" || typeof json.head != \"number\") throw new RangeError(\"Invalid JSON representation for SelectionRange\");\n\t\treturn EditorSelection.range(json.anchor, json.head);\n\t}\n\t/**\n\t@internal\n\t*/\n\tstatic create(from, to, flags) {\n\t\treturn new SelectionRange(from, to, flags);\n\t}\n};\n/**\nAn editor selection holds one or more selection ranges.\n*/\nvar EditorSelection = class EditorSelection {\n\tconstructor(ranges, mainIndex) {\n\t\tthis.ranges = ranges;\n\t\tthis.mainIndex = mainIndex;\n\t}\n\t/**\n\tMap a selection through a change. Used to adjust the selection\n\tposition for changes.\n\t*/\n\tmap(change, assoc = -1) {\n\t\tif (change.empty) return this;\n\t\treturn EditorSelection.create(this.ranges.map((r) => r.map(change, assoc)), this.mainIndex);\n\t}\n\t/**\n\tCompare this selection to another selection. By default, ranges\n\tare compared only by position. When `includeAssoc` is true,\n\tcursor ranges must also have the same\n\t[`assoc`](https://codemirror.net/6/docs/ref/#state.SelectionRange.assoc) value.\n\t*/\n\teq(other, includeAssoc = false) {\n\t\tif (this.ranges.length != other.ranges.length || this.mainIndex != other.mainIndex) return false;\n\t\tfor (let i = 0; i < this.ranges.length; i++) if (!this.ranges[i].eq(other.ranges[i], includeAssoc)) return false;\n\t\treturn true;\n\t}\n\t/**\n\tGet the primary selection range. Usually, you should make sure\n\tyour code applies to _all_ ranges, by using methods like\n\t[`changeByRange`](https://codemirror.net/6/docs/ref/#state.EditorState.changeByRange).\n\t*/\n\tget main() {\n\t\treturn this.ranges[this.mainIndex];\n\t}\n\t/**\n\tMake sure the selection only has one range. Returns a selection\n\tholding only the main range from this selection.\n\t*/\n\tasSingle() {\n\t\treturn this.ranges.length == 1 ? this : new EditorSelection([this.main], 0);\n\t}\n\t/**\n\tExtend this selection with an extra range.\n\t*/\n\taddRange(range, main = true) {\n\t\treturn EditorSelection.create([range].concat(this.ranges), main ? 0 : this.mainIndex + 1);\n\t}\n\t/**\n\tReplace a given range with another range, and then normalize the\n\tselection to merge and sort ranges if necessary.\n\t*/\n\treplaceRange(range, which = this.mainIndex) {\n\t\tlet ranges = this.ranges.slice();\n\t\tranges[which] = range;\n\t\treturn EditorSelection.create(ranges, this.mainIndex);\n\t}\n\t/**\n\tConvert this selection to an object that can be serialized to\n\tJSON.\n\t*/\n\ttoJSON() {\n\t\treturn {\n\t\t\tranges: this.ranges.map((r) => r.toJSON()),\n\t\t\tmain: this.mainIndex\n\t\t};\n\t}\n\t/**\n\tCreate a selection from a JSON representation.\n\t*/\n\tstatic fromJSON(json) {\n\t\tif (!json || !Array.isArray(json.ranges) || typeof json.main != \"number\" || json.main >= json.ranges.length) throw new RangeError(\"Invalid JSON representation for EditorSelection\");\n\t\treturn new EditorSelection(json.ranges.map((r) => SelectionRange.fromJSON(r)), json.main);\n\t}\n\t/**\n\tCreate a selection holding a single range.\n\t*/\n\tstatic single(anchor, head = anchor) {\n\t\treturn new EditorSelection([EditorSelection.range(anchor, head)], 0);\n\t}\n\t/**\n\tSort and merge the given set of ranges, creating a valid\n\tselection.\n\t*/\n\tstatic create(ranges, mainIndex = 0) {\n\t\tif (ranges.length == 0) throw new RangeError(\"A selection needs at least one range\");\n\t\tfor (let pos = 0, i = 0; i < ranges.length; i++) {\n\t\t\tlet range = ranges[i];\n\t\t\tif (range.empty ? range.from <= pos : range.from < pos) return EditorSelection.normalized(ranges.slice(), mainIndex);\n\t\t\tpos = range.to;\n\t\t}\n\t\treturn new EditorSelection(ranges, mainIndex);\n\t}\n\t/**\n\tCreate a cursor selection range at the given position. You can\n\tsafely ignore the optional arguments in most situations.\n\t*/\n\tstatic cursor(pos, assoc = 0, bidiLevel, goalColumn) {\n\t\treturn SelectionRange.create(pos, pos, (assoc == 0 ? 0 : assoc < 0 ? 8 : 16) | (bidiLevel == null ? 7 : Math.min(6, bidiLevel)) | (goalColumn !== null && goalColumn !== void 0 ? goalColumn : 16777215) << 6);\n\t}\n\t/**\n\tCreate a selection range.\n\t*/\n\tstatic range(anchor, head, goalColumn, bidiLevel) {\n\t\tlet flags = (goalColumn !== null && goalColumn !== void 0 ? goalColumn : 16777215) << 6 | (bidiLevel == null ? 7 : Math.min(6, bidiLevel));\n\t\treturn head < anchor ? SelectionRange.create(head, anchor, 48 | flags) : SelectionRange.create(anchor, head, (head > anchor ? 8 : 0) | flags);\n\t}\n\t/**\n\t@internal\n\t*/\n\tstatic normalized(ranges, mainIndex = 0) {\n\t\tlet main = ranges[mainIndex];\n\t\tranges.sort((a, b) => a.from - b.from);\n\t\tmainIndex = ranges.indexOf(main);\n\t\tfor (let i = 1; i < ranges.length; i++) {\n\t\t\tlet range = ranges[i], prev = ranges[i - 1];\n\t\t\tif (range.empty ? range.from <= prev.to : range.from < prev.to) {\n\t\t\t\tlet from = prev.from, to = Math.max(range.to, prev.to);\n\t\t\t\tif (i <= mainIndex) mainIndex--;\n\t\t\t\tranges.splice(--i, 2, range.anchor > range.head ? EditorSelection.range(to, from) : EditorSelection.range(from, to));\n\t\t\t}\n\t\t}\n\t\treturn new EditorSelection(ranges, mainIndex);\n\t}\n};\nfunction checkSelection(selection, docLength) {\n\tfor (let range of selection.ranges) if (range.to > docLength) throw new RangeError(\"Selection points outside of document\");\n}\nlet nextID = 0;\n/**\nA facet is a labeled value that is associated with an editor\nstate. It takes inputs from any number of extensions, and combines\nthose into a single output value.\n\nExamples of uses of facets are the [tab\nsize](https://codemirror.net/6/docs/ref/#state.EditorState^tabSize), [editor\nattributes](https://codemirror.net/6/docs/ref/#view.EditorView^editorAttributes), and [update\nlisteners](https://codemirror.net/6/docs/ref/#view.EditorView^updateListener).\n\nNote that `Facet` instances can be used anywhere where\n[`FacetReader`](https://codemirror.net/6/docs/ref/#state.FacetReader) is expected.\n*/\nvar Facet = class Facet {\n\tconstructor(combine, compareInput, compare, isStatic, enables) {\n\t\tthis.combine = combine;\n\t\tthis.compareInput = compareInput;\n\t\tthis.compare = compare;\n\t\tthis.isStatic = isStatic;\n\t\t/**\n\t\t@internal\n\t\t*/\n\t\tthis.id = nextID++;\n\t\tthis.default = combine([]);\n\t\tthis.extensions = typeof enables == \"function\" ? enables(this) : enables;\n\t}\n\t/**\n\tReturns a facet reader for this facet, which can be used to\n\t[read](https://codemirror.net/6/docs/ref/#state.EditorState.facet) it but not to define values for it.\n\t*/\n\tget reader() {\n\t\treturn this;\n\t}\n\t/**\n\tDefine a new facet.\n\t*/\n\tstatic define(config = {}) {\n\t\treturn new Facet(config.combine || ((a) => a), config.compareInput || ((a, b) => a === b), config.compare || (!config.combine ? sameArray$1 : (a, b) => a === b), !!config.static, config.enables);\n\t}\n\t/**\n\tReturns an extension that adds the given value to this facet.\n\t*/\n\tof(value) {\n\t\treturn new FacetProvider([], this, 0, value);\n\t}\n\t/**\n\tCreate an extension that computes a value for the facet from a\n\tstate. You must take care to declare the parts of the state that\n\tthis value depends on, since your function is only called again\n\tfor a new state when one of those parts changed.\n\t\n\tIn cases where your value depends only on a single field, you'll\n\twant to use the [`from`](https://codemirror.net/6/docs/ref/#state.Facet.from) method instead.\n\t*/\n\tcompute(deps, get) {\n\t\tif (this.isStatic) throw new Error(\"Can't compute a static facet\");\n\t\treturn new FacetProvider(deps, this, 1, get);\n\t}\n\t/**\n\tCreate an extension that computes zero or more values for this\n\tfacet from a state.\n\t*/\n\tcomputeN(deps, get) {\n\t\tif (this.isStatic) throw new Error(\"Can't compute a static facet\");\n\t\treturn new FacetProvider(deps, this, 2, get);\n\t}\n\tfrom(field, get) {\n\t\tif (!get) get = (x) => x;\n\t\treturn this.compute([field], (state) => get(state.field(field)));\n\t}\n};\nfunction sameArray$1(a, b) {\n\treturn a == b || a.length == b.length && a.every((e, i) => e === b[i]);\n}\nvar FacetProvider = class {\n\tconstructor(dependencies, facet, type, value) {\n\t\tthis.dependencies = dependencies;\n\t\tthis.facet = facet;\n\t\tthis.type = type;\n\t\tthis.value = value;\n\t\tthis.id = nextID++;\n\t}\n\tdynamicSlot(addresses) {\n\t\tvar _a;\n\t\tlet getter = this.value;\n\t\tlet compare = this.facet.compareInput;\n\t\tlet id = this.id, idx = addresses[id] >> 1, multi = this.type == 2;\n\t\tlet depDoc = false, depSel = false, depAddrs = [];\n\t\tfor (let dep of this.dependencies) if (dep == \"doc\") depDoc = true;\n\t\telse if (dep == \"selection\") depSel = true;\n\t\telse if ((((_a = addresses[dep.id]) !== null && _a !== void 0 ? _a : 1) & 1) == 0) depAddrs.push(addresses[dep.id]);\n\t\treturn {\n\t\t\tcreate(state) {\n\t\t\t\tstate.values[idx] = getter(state);\n\t\t\t\treturn 1;\n\t\t\t},\n\t\t\tupdate(state, tr) {\n\t\t\t\tif (depDoc && tr.docChanged || depSel && (tr.docChanged || tr.selection) || ensureAll(state, depAddrs)) {\n\t\t\t\t\tlet newVal = getter(state);\n\t\t\t\t\tif (multi ? !compareArray(newVal, state.values[idx], compare) : !compare(newVal, state.values[idx])) {\n\t\t\t\t\t\tstate.values[idx] = newVal;\n\t\t\t\t\t\treturn 1;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn 0;\n\t\t\t},\n\t\t\treconfigure: (state, oldState) => {\n\t\t\t\tlet newVal, oldAddr = oldState.config.address[id];\n\t\t\t\tif (oldAddr != null) {\n\t\t\t\t\tlet oldVal = getAddr(oldState, oldAddr);\n\t\t\t\t\tif (this.dependencies.every((dep) => {\n\t\t\t\t\t\treturn dep instanceof Facet ? oldState.facet(dep) === state.facet(dep) : dep instanceof StateField ? oldState.field(dep, false) == state.field(dep, false) : true;\n\t\t\t\t\t}) || (multi ? compareArray(newVal = getter(state), oldVal, compare) : compare(newVal = getter(state), oldVal))) {\n\t\t\t\t\t\tstate.values[idx] = oldVal;\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t}\n\t\t\t\t} else newVal = getter(state);\n\t\t\t\tstate.values[idx] = newVal;\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t};\n\t}\n};\nfunction compareArray(a, b, compare) {\n\tif (a.length != b.length) return false;\n\tfor (let i = 0; i < a.length; i++) if (!compare(a[i], b[i])) return false;\n\treturn true;\n}\nfunction ensureAll(state, addrs) {\n\tlet changed = false;\n\tfor (let addr of addrs) if (ensureAddr(state, addr) & 1) changed = true;\n\treturn changed;\n}\nfunction dynamicFacetSlot(addresses, facet, providers) {\n\tlet providerAddrs = providers.map((p) => addresses[p.id]);\n\tlet providerTypes = providers.map((p) => p.type);\n\tlet dynamic = providerAddrs.filter((p) => !(p & 1));\n\tlet idx = addresses[facet.id] >> 1;\n\tfunction get(state) {\n\t\tlet values = [];\n\t\tfor (let i = 0; i < providerAddrs.length; i++) {\n\t\t\tlet value = getAddr(state, providerAddrs[i]);\n\t\t\tif (providerTypes[i] == 2) for (let val of value) values.push(val);\n\t\t\telse values.push(value);\n\t\t}\n\t\treturn facet.combine(values);\n\t}\n\treturn {\n\t\tcreate(state) {\n\t\t\tfor (let addr of providerAddrs) ensureAddr(state, addr);\n\t\t\tstate.values[idx] = get(state);\n\t\t\treturn 1;\n\t\t},\n\t\tupdate(state, tr) {\n\t\t\tif (!ensureAll(state, dynamic)) return 0;\n\t\t\tlet value = get(state);\n\t\t\tif (facet.compare(value, state.values[idx])) return 0;\n\t\t\tstate.values[idx] = value;\n\t\t\treturn 1;\n\t\t},\n\t\treconfigure(state, oldState) {\n\t\t\tlet depChanged = ensureAll(state, providerAddrs);\n\t\t\tlet oldProviders = oldState.config.facets[facet.id], oldValue = oldState.facet(facet);\n\t\t\tif (oldProviders && !depChanged && sameArray$1(providers, oldProviders)) {\n\t\t\t\tstate.values[idx] = oldValue;\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t\tlet value = get(state);\n\t\t\tif (facet.compare(value, oldValue)) {\n\t\t\t\tstate.values[idx] = oldValue;\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t\tstate.values[idx] = value;\n\t\t\treturn 1;\n\t\t}\n\t};\n}\nconst initField = /* @__PURE__ */ Facet.define({ static: true });\n/**\nFields can store additional information in an editor state, and\nkeep it in sync with the rest of the state.\n*/\nvar StateField = class StateField {\n\tconstructor(id, createF, updateF, compareF, spec) {\n\t\tthis.id = id;\n\t\tthis.createF = createF;\n\t\tthis.updateF = updateF;\n\t\tthis.compareF = compareF;\n\t\tthis.spec = spec;\n\t\t/**\n\t\t@internal\n\t\t*/\n\t\tthis.provides = void 0;\n\t}\n\t/**\n\tDefine a state field.\n\t*/\n\tstatic define(config) {\n\t\tlet field = new StateField(nextID++, config.create, config.update, config.compare || ((a, b) => a === b), config);\n\t\tif (config.provide) field.provides = config.provide(field);\n\t\treturn field;\n\t}\n\tcreate(state) {\n\t\tlet init = state.facet(initField).find((i) => i.field == this);\n\t\treturn ((init === null || init === void 0 ? void 0 : init.create) || this.createF)(state);\n\t}\n\t/**\n\t@internal\n\t*/\n\tslot(addresses) {\n\t\tlet idx = addresses[this.id] >> 1;\n\t\treturn {\n\t\t\tcreate: (state) => {\n\t\t\t\tstate.values[idx] = this.create(state);\n\t\t\t\treturn 1;\n\t\t\t},\n\t\t\tupdate: (state, tr) => {\n\t\t\t\tlet oldVal = state.values[idx];\n\t\t\t\tlet value = this.updateF(oldVal, tr);\n\t\t\t\tif (this.compareF(oldVal, value)) return 0;\n\t\t\t\tstate.values[idx] = value;\n\t\t\t\treturn 1;\n\t\t\t},\n\t\t\treconfigure: (state, oldState) => {\n\t\t\t\tlet init = state.facet(initField), oldInit = oldState.facet(initField), reInit;\n\t\t\t\tif ((reInit = init.find((i) => i.field == this)) && reInit != oldInit.find((i) => i.field == this)) {\n\t\t\t\t\tstate.values[idx] = reInit.create(state);\n\t\t\t\t\treturn 1;\n\t\t\t\t}\n\t\t\t\tif (oldState.config.address[this.id] != null) {\n\t\t\t\t\tstate.values[idx] = oldState.field(this);\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\t\t\t\tstate.values[idx] = this.create(state);\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t};\n\t}\n\t/**\n\tReturns an extension that enables this field and overrides the\n\tway it is initialized. Can be useful when you need to provide a\n\tnon-default starting value for the field.\n\t*/\n\tinit(create) {\n\t\treturn [this, initField.of({\n\t\t\tfield: this,\n\t\t\tcreate\n\t\t})];\n\t}\n\t/**\n\tState field instances can be used as\n\t[`Extension`](https://codemirror.net/6/docs/ref/#state.Extension) values to enable the field in a\n\tgiven state.\n\t*/\n\tget extension() {\n\t\treturn this;\n\t}\n};\nconst Prec_ = {\n\tlowest: 4,\n\tlow: 3,\n\tdefault: 2,\n\thigh: 1,\n\thighest: 0\n};\nfunction prec(value) {\n\treturn (ext) => new PrecExtension(ext, value);\n}\n/**\nBy default extensions are registered in the order they are found\nin the flattened form of nested array that was provided.\nIndividual extension values can be assigned a precedence to\noverride this. Extensions that do not have a precedence set get\nthe precedence of the nearest parent with a precedence, or\n[`default`](https://codemirror.net/6/docs/ref/#state.Prec.default) if there is no such parent. The\nfinal ordering of extensions is determined by first sorting by\nprecedence and then by order within each precedence.\n*/\nconst Prec = {\n\thighest: /* @__PURE__ */ prec(Prec_.highest),\n\thigh: /* @__PURE__ */ prec(Prec_.high),\n\tdefault: /* @__PURE__ */ prec(Prec_.default),\n\tlow: /* @__PURE__ */ prec(Prec_.low),\n\tlowest: /* @__PURE__ */ prec(Prec_.lowest)\n};\nvar PrecExtension = class {\n\tconstructor(inner, prec) {\n\t\tthis.inner = inner;\n\t\tthis.prec = prec;\n\t}\n};\n/**\nExtension compartments can be used to make a configuration\ndynamic. By [wrapping](https://codemirror.net/6/docs/ref/#state.Compartment.of) part of your\nconfiguration in a compartment, you can later\n[replace](https://codemirror.net/6/docs/ref/#state.Compartment.reconfigure) that part through a\ntransaction.\n*/\nvar Compartment = class Compartment {\n\t/**\n\tCreate an instance of this compartment to add to your [state\n\tconfiguration](https://codemirror.net/6/docs/ref/#state.EditorStateConfig.extensions).\n\t*/\n\tof(ext) {\n\t\treturn new CompartmentInstance(this, ext);\n\t}\n\t/**\n\tCreate an [effect](https://codemirror.net/6/docs/ref/#state.TransactionSpec.effects) that\n\treconfigures this compartment.\n\t*/\n\treconfigure(content) {\n\t\treturn Compartment.reconfigure.of({\n\t\t\tcompartment: this,\n\t\t\textension: content\n\t\t});\n\t}\n\t/**\n\tGet the current content of the compartment in the state, or\n\t`undefined` if it isn't present.\n\t*/\n\tget(state) {\n\t\treturn state.config.compartments.get(this);\n\t}\n};\nvar CompartmentInstance = class {\n\tconstructor(compartment, inner) {\n\t\tthis.compartment = compartment;\n\t\tthis.inner = inner;\n\t}\n};\nvar Configuration = class Configuration {\n\tconstructor(base, compartments, dynamicSlots, address, staticValues, facets) {\n\t\tthis.base = base;\n\t\tthis.compartments = compartments;\n\t\tthis.dynamicSlots = dynamicSlots;\n\t\tthis.address = address;\n\t\tthis.staticValues = staticValues;\n\t\tthis.facets = facets;\n\t\tthis.statusTemplate = [];\n\t\twhile (this.statusTemplate.length < dynamicSlots.length) this.statusTemplate.push(0);\n\t}\n\tstaticFacet(facet) {\n\t\tlet addr = this.address[facet.id];\n\t\treturn addr == null ? facet.default : this.staticValues[addr >> 1];\n\t}\n\tstatic resolve(base, compartments, oldState) {\n\t\tlet fields = [];\n\t\tlet facets = Object.create(null);\n\t\tlet newCompartments = /* @__PURE__ */ new Map();\n\t\tfor (let ext of flatten(base, compartments, newCompartments)) if (ext instanceof StateField) fields.push(ext);\n\t\telse (facets[ext.facet.id] || (facets[ext.facet.id] = [])).push(ext);\n\t\tlet address = Object.create(null);\n\t\tlet staticValues = [];\n\t\tlet dynamicSlots = [];\n\t\tfor (let field of fields) {\n\t\t\taddress[field.id] = dynamicSlots.length << 1;\n\t\t\tdynamicSlots.push((a) => field.slot(a));\n\t\t}\n\t\tlet oldFacets = oldState === null || oldState === void 0 ? void 0 : oldState.config.facets;\n\t\tfor (let id in facets) {\n\t\t\tlet providers = facets[id], facet = providers[0].facet;\n\t\t\tlet oldProviders = oldFacets && oldFacets[id] || [];\n\t\t\tif (providers.every((p) => p.type == 0)) {\n\t\t\t\taddress[facet.id] = staticValues.length << 1 | 1;\n\t\t\t\tif (sameArray$1(oldProviders, providers)) staticValues.push(oldState.facet(facet));\n\t\t\t\telse {\n\t\t\t\t\tlet value = facet.combine(providers.map((p) => p.value));\n\t\t\t\t\tstaticValues.push(oldState && facet.compare(value, oldState.facet(facet)) ? oldState.facet(facet) : value);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor (let p of providers) if (p.type == 0) {\n\t\t\t\t\taddress[p.id] = staticValues.length << 1 | 1;\n\t\t\t\t\tstaticValues.push(p.value);\n\t\t\t\t} else {\n\t\t\t\t\taddress[p.id] = dynamicSlots.length << 1;\n\t\t\t\t\tdynamicSlots.push((a) => p.dynamicSlot(a));\n\t\t\t\t}\n\t\t\t\taddress[facet.id] = dynamicSlots.length << 1;\n\t\t\t\tdynamicSlots.push((a) => dynamicFacetSlot(a, facet, providers));\n\t\t\t}\n\t\t}\n\t\treturn new Configuration(base, newCompartments, dynamicSlots.map((f) => f(address)), address, staticValues, facets);\n\t}\n};\nfunction flatten(extension, compartments, newCompartments) {\n\tlet result = [\n\t\t[],\n\t\t[],\n\t\t[],\n\t\t[],\n\t\t[]\n\t];\n\tlet seen = /* @__PURE__ */ new Map();\n\tfunction inner(ext, prec) {\n\t\tlet known = seen.get(ext);\n\t\tif (known != null) {\n\t\t\tif (known <= prec) return;\n\t\t\tlet found = result[known].indexOf(ext);\n\t\t\tif (found > -1) result[known].splice(found, 1);\n\t\t\tif (ext instanceof CompartmentInstance) newCompartments.delete(ext.compartment);\n\t\t}\n\t\tseen.set(ext, prec);\n\t\tif (Array.isArray(ext)) for (let e of ext) inner(e, prec);\n\t\telse if (ext instanceof CompartmentInstance) {\n\t\t\tif (newCompartments.has(ext.compartment)) throw new RangeError(`Duplicate use of compartment in extensions`);\n\t\t\tlet content = compartments.get(ext.compartment) || ext.inner;\n\t\t\tnewCompartments.set(ext.compartment, content);\n\t\t\tinner(content, prec);\n\t\t} else if (ext instanceof PrecExtension) inner(ext.inner, ext.prec);\n\t\telse if (ext instanceof StateField) {\n\t\t\tresult[prec].push(ext);\n\t\t\tif (ext.provides) inner(ext.provides, prec);\n\t\t} else if (ext instanceof FacetProvider) {\n\t\t\tresult[prec].push(ext);\n\t\t\tif (ext.facet.extensions) inner(ext.facet.extensions, Prec_.default);\n\t\t} else {\n\t\t\tlet content = ext.extension;\n\t\t\tif (!content) throw new Error(`Unrecognized extension value in extension set (${ext}). This sometimes happens because multiple instances of @codemirror/state are loaded, breaking instanceof checks.`);\n\t\t\tinner(content, prec);\n\t\t}\n\t}\n\tinner(extension, Prec_.default);\n\treturn result.reduce((a, b) => a.concat(b));\n}\nfunction ensureAddr(state, addr) {\n\tif (addr & 1) return 2;\n\tlet idx = addr >> 1;\n\tlet status = state.status[idx];\n\tif (status == 4) throw new Error(\"Cyclic dependency between fields and/or facets\");\n\tif (status & 2) return status;\n\tstate.status[idx] = 4;\n\tlet changed = state.computeSlot(state, state.config.dynamicSlots[idx]);\n\treturn state.status[idx] = 2 | changed;\n}\nfunction getAddr(state, addr) {\n\treturn addr & 1 ? state.config.staticValues[addr >> 1] : state.values[addr >> 1];\n}\nconst languageData = /* @__PURE__ */ Facet.define();\nconst allowMultipleSelections = /* @__PURE__ */ Facet.define({\n\tcombine: (values) => values.some((v) => v),\n\tstatic: true\n});\nconst lineSeparator = /* @__PURE__ */ Facet.define({\n\tcombine: (values) => values.length ? values[0] : void 0,\n\tstatic: true\n});\nconst changeFilter = /* @__PURE__ */ Facet.define();\nconst transactionFilter = /* @__PURE__ */ Facet.define();\nconst transactionExtender = /* @__PURE__ */ Facet.define();\nconst readOnly = /* @__PURE__ */ Facet.define({ combine: (values) => values.length ? values[0] : false });\n/**\nAnnotations are tagged values that are used to add metadata to\ntransactions in an extensible way. They should be used to model\nthings that effect the entire transaction (such as its [time\nstamp](https://codemirror.net/6/docs/ref/#state.Transaction^time) or information about its\n[origin](https://codemirror.net/6/docs/ref/#state.Transaction^userEvent)). For effects that happen\n_alongside_ the other changes made by the transaction, [state\neffects](https://codemirror.net/6/docs/ref/#state.StateEffect) are more appropriate.\n*/\nvar Annotation = class {\n\t/**\n\t@internal\n\t*/\n\tconstructor(type, value) {\n\t\tthis.type = type;\n\t\tthis.value = value;\n\t}\n\t/**\n\tDefine a new type of annotation.\n\t*/\n\tstatic define() {\n\t\treturn new AnnotationType();\n\t}\n};\n/**\nMarker that identifies a type of [annotation](https://codemirror.net/6/docs/ref/#state.Annotation).\n*/\nvar AnnotationType = class {\n\t/**\n\tCreate an instance of this annotation.\n\t*/\n\tof(value) {\n\t\treturn new Annotation(this, value);\n\t}\n};\n/**\nRepresentation of a type of state effect. Defined with\n[`StateEffect.define`](https://codemirror.net/6/docs/ref/#state.StateEffect^define).\n*/\nvar StateEffectType = class {\n\t/**\n\t@internal\n\t*/\n\tconstructor(map) {\n\t\tthis.map = map;\n\t}\n\t/**\n\tCreate a [state effect](https://codemirror.net/6/docs/ref/#state.StateEffect) instance of this\n\ttype.\n\t*/\n\tof(value) {\n\t\treturn new StateEffect(this, value);\n\t}\n};\n/**\nState effects can be used to represent additional effects\nassociated with a [transaction](https://codemirror.net/6/docs/ref/#state.Transaction.effects). They\nare often useful to model changes to custom [state\nfields](https://codemirror.net/6/docs/ref/#state.StateField), when those changes aren't implicit in\ndocument or selection changes.\n*/\nvar StateEffect = class StateEffect {\n\t/**\n\t@internal\n\t*/\n\tconstructor(type, value) {\n\t\tthis.type = type;\n\t\tthis.value = value;\n\t}\n\t/**\n\tMap this effect through a position mapping. Will return\n\t`undefined` when that ends up deleting the effect.\n\t*/\n\tmap(mapping) {\n\t\tlet mapped = this.type.map(this.value, mapping);\n\t\treturn mapped === void 0 ? void 0 : mapped == this.value ? this : new StateEffect(this.type, mapped);\n\t}\n\t/**\n\tTells you whether this effect object is of a given\n\t[type](https://codemirror.net/6/docs/ref/#state.StateEffectType).\n\t*/\n\tis(type) {\n\t\treturn this.type == type;\n\t}\n\t/**\n\tDefine a new effect type. The type parameter indicates the type\n\tof values that his effect holds. It should be a type that\n\tdoesn't include `undefined`, since that is used in\n\t[mapping](https://codemirror.net/6/docs/ref/#state.StateEffect.map) to indicate that an effect is\n\tremoved.\n\t*/\n\tstatic define(spec = {}) {\n\t\treturn new StateEffectType(spec.map || ((v) => v));\n\t}\n\t/**\n\tMap an array of effects through a change set.\n\t*/\n\tstatic mapEffects(effects, mapping) {\n\t\tif (!effects.length) return effects;\n\t\tlet result = [];\n\t\tfor (let effect of effects) {\n\t\t\tlet mapped = effect.map(mapping);\n\t\t\tif (mapped) result.push(mapped);\n\t\t}\n\t\treturn result;\n\t}\n};\n/**\nThis effect can be used to reconfigure the root extensions of\nthe editor. Doing this will discard any extensions\n[appended](https://codemirror.net/6/docs/ref/#state.StateEffect^appendConfig), but does not reset\nthe content of [reconfigured](https://codemirror.net/6/docs/ref/#state.Compartment.reconfigure)\ncompartments.\n*/\nStateEffect.reconfigure = /* @__PURE__ */ StateEffect.define();\n/**\nAppend extensions to the top-level configuration of the editor.\n*/\nStateEffect.appendConfig = /* @__PURE__ */ StateEffect.define();\n/**\nChanges to the editor state are grouped into transactions.\nTypically, a user action creates a single transaction, which may\ncontain any number of document changes, may change the selection,\nor have other effects. Create a transaction by calling\n[`EditorState.update`](https://codemirror.net/6/docs/ref/#state.EditorState.update), or immediately\ndispatch one by calling\n[`EditorView.dispatch`](https://codemirror.net/6/docs/ref/#view.EditorView.dispatch).\n*/\nvar Transaction = class Transaction {\n\tconstructor(startState, changes, selection, effects, annotations, scrollIntoView) {\n\t\tthis.startState = startState;\n\t\tthis.changes = changes;\n\t\tthis.selection = selection;\n\t\tthis.effects = effects;\n\t\tthis.annotations = annotations;\n\t\tthis.scrollIntoView = scrollIntoView;\n\t\t/**\n\t\t@internal\n\t\t*/\n\t\tthis._doc = null;\n\t\t/**\n\t\t@internal\n\t\t*/\n\t\tthis._state = null;\n\t\tif (selection) checkSelection(selection, changes.newLength);\n\t\tif (!annotations.some((a) => a.type == Transaction.time)) this.annotations = annotations.concat(Transaction.time.of(Date.now()));\n\t}\n\t/**\n\t@internal\n\t*/\n\tstatic create(startState, changes, selection, effects, annotations, scrollIntoView) {\n\t\treturn new Transaction(startState, changes, selection, effects, annotations, scrollIntoView);\n\t}\n\t/**\n\tThe new document produced by the transaction. Contrary to\n\t[`.state`](https://codemirror.net/6/docs/ref/#state.Transaction.state)`.doc`, accessing this won't\n\tforce the entire new state to be computed right away, so it is\n\trecommended that [transaction\n\tfilters](https://codemirror.net/6/docs/ref/#state.EditorState^transactionFilter) use this getter\n\twhen they need to look at the new document.\n\t*/\n\tget newDoc() {\n\t\treturn this._doc || (this._doc = this.changes.apply(this.startState.doc));\n\t}\n\t/**\n\tThe new selection produced by the transaction. If\n\t[`this.selection`](https://codemirror.net/6/docs/ref/#state.Transaction.selection) is undefined,\n\tthis will [map](https://codemirror.net/6/docs/ref/#state.EditorSelection.map) the start state's\n\tcurrent selection through the changes made by the transaction.\n\t*/\n\tget newSelection() {\n\t\treturn this.selection || this.startState.selection.map(this.changes);\n\t}\n\t/**\n\tThe new state created by the transaction. Computed on demand\n\t(but retained for subsequent access), so it is recommended not to\n\taccess it in [transaction\n\tfilters](https://codemirror.net/6/docs/ref/#state.EditorState^transactionFilter) when possible.\n\t*/\n\tget state() {\n\t\tif (!this._state) this.startState.applyTransaction(this);\n\t\treturn this._state;\n\t}\n\t/**\n\tGet the value of the given annotation type, if any.\n\t*/\n\tannotation(type) {\n\t\tfor (let ann of this.annotations) if (ann.type == type) return ann.value;\n\t}\n\t/**\n\tIndicates whether the transaction changed the document.\n\t*/\n\tget docChanged() {\n\t\treturn !this.changes.empty;\n\t}\n\t/**\n\tIndicates whether this transaction reconfigures the state\n\t(through a [configuration compartment](https://codemirror.net/6/docs/ref/#state.Compartment) or\n\twith a top-level configuration\n\t[effect](https://codemirror.net/6/docs/ref/#state.StateEffect^reconfigure).\n\t*/\n\tget reconfigured() {\n\t\treturn this.startState.config != this.state.config;\n\t}\n\t/**\n\tReturns true if the transaction has a [user\n\tevent](https://codemirror.net/6/docs/ref/#state.Transaction^userEvent) annotation that is equal to\n\tor more specific than `event`. For example, if the transaction\n\thas `\"select.pointer\"` as user event, `\"select\"` and\n\t`\"select.pointer\"` will match it.\n\t*/\n\tisUserEvent(event) {\n\t\tlet e = this.annotation(Transaction.userEvent);\n\t\treturn !!(e && (e == event || e.length > event.length && e.slice(0, event.length) == event && e[event.length] == \".\"));\n\t}\n};\n/**\nAnnotation used to store transaction timestamps. Automatically\nadded to every transaction, holding `Date.now()`.\n*/\nTransaction.time = /* @__PURE__ */ Annotation.define();\n/**\nAnnotation used to associate a transaction with a user interface\nevent. Holds a string identifying the event, using a\ndot-separated format to support attaching more specific\ninformation. The events used by the core libraries are:\n\n- `\"input\"` when content is entered\n- `\"input.type\"` for typed input\n- `\"input.type.compose\"` for composition\n- `\"input.paste\"` for pasted input\n- `\"input.drop\"` when adding content with drag-and-drop\n- `\"input.complete\"` when autocompleting\n- `\"delete\"` when the user deletes content\n- `\"delete.selection\"` when deleting the selection\n- `\"delete.forward\"` when deleting forward from the selection\n- `\"delete.backward\"` when deleting backward from the selection\n- `\"delete.cut\"` when cutting to the clipboard\n- `\"move\"` when content is moved\n- `\"move.drop\"` when content is moved within the editor through drag-and-drop\n- `\"select\"` when explicitly changing the selection\n- `\"select.pointer\"` when selecting with a mouse or other pointing device\n- `\"undo\"` and `\"redo\"` for history actions\n\nUse [`isUserEvent`](https://codemirror.net/6/docs/ref/#state.Transaction.isUserEvent) to check\nwhether the annotation matches a given event.\n*/\nTransaction.userEvent = /* @__PURE__ */ Annotation.define();\n/**\nAnnotation indicating whether a transaction should be added to\nthe undo history or not.\n*/\nTransaction.addToHistory = /* @__PURE__ */ Annotation.define();\n/**\nAnnotation indicating (when present and true) that a transaction\nrepresents a change made by some other actor, not the user. This\nis used, for example, to tag other people's changes in\ncollaborative editing.\n*/\nTransaction.remote = /* @__PURE__ */ Annotation.define();\nfunction joinRanges(a, b) {\n\tlet result = [];\n\tfor (let iA = 0, iB = 0;;) {\n\t\tlet from, to;\n\t\tif (iA < a.length && (iB == b.length || b[iB] >= a[iA])) {\n\t\t\tfrom = a[iA++];\n\t\t\tto = a[iA++];\n\t\t} else if (iB < b.length) {\n\t\t\tfrom = b[iB++];\n\t\t\tto = b[iB++];\n\t\t} else return result;\n\t\tif (!result.length || result[result.length - 1] < from) result.push(from, to);\n\t\telse if (result[result.length - 1] < to) result[result.length - 1] = to;\n\t}\n}\nfunction mergeTransaction(a, b, sequential) {\n\tvar _a;\n\tlet mapForA, mapForB, changes;\n\tif (sequential) {\n\t\tmapForA = b.changes;\n\t\tmapForB = ChangeSet.empty(b.changes.length);\n\t\tchanges = a.changes.compose(b.changes);\n\t} else {\n\t\tmapForA = b.changes.map(a.changes);\n\t\tmapForB = a.changes.mapDesc(b.changes, true);\n\t\tchanges = a.changes.compose(mapForA);\n\t}\n\treturn {\n\t\tchanges,\n\t\tselection: b.selection ? b.selection.map(mapForB) : (_a = a.selection) === null || _a === void 0 ? void 0 : _a.map(mapForA),\n\t\teffects: StateEffect.mapEffects(a.effects, mapForA).concat(StateEffect.mapEffects(b.effects, mapForB)),\n\t\tannotations: a.annotations.length ? a.annotations.concat(b.annotations) : b.annotations,\n\t\tscrollIntoView: a.scrollIntoView || b.scrollIntoView\n\t};\n}\nfunction resolveTransactionInner(state, spec, docSize) {\n\tlet sel = spec.selection, annotations = asArray$1(spec.annotations);\n\tif (spec.userEvent) annotations = annotations.concat(Transaction.userEvent.of(spec.userEvent));\n\treturn {\n\t\tchanges: spec.changes instanceof ChangeSet ? spec.changes : ChangeSet.of(spec.changes || [], docSize, state.facet(lineSeparator)),\n\t\tselection: sel && (sel instanceof EditorSelection ? sel : EditorSelection.single(sel.anchor, sel.head)),\n\t\teffects: asArray$1(spec.effects),\n\t\tannotations,\n\t\tscrollIntoView: !!spec.scrollIntoView\n\t};\n}\nfunction resolveTransaction(state, specs, filter) {\n\tlet s = resolveTransactionInner(state, specs.length ? specs[0] : {}, state.doc.length);\n\tif (specs.length && specs[0].filter === false) filter = false;\n\tfor (let i = 1; i < specs.length; i++) {\n\t\tif (specs[i].filter === false) filter = false;\n\t\tlet seq = !!specs[i].sequential;\n\t\ts = mergeTransaction(s, resolveTransactionInner(state, specs[i], seq ? s.changes.newLength : state.doc.length), seq);\n\t}\n\tlet tr = Transaction.create(state, s.changes, s.selection, s.effects, s.annotations, s.scrollIntoView);\n\treturn extendTransaction(filter ? filterTransaction(tr) : tr);\n}\nfunction filterTransaction(tr) {\n\tlet state = tr.startState;\n\tlet result = true;\n\tfor (let filter of state.facet(changeFilter)) {\n\t\tlet value = filter(tr);\n\t\tif (value === false) {\n\t\t\tresult = false;\n\t\t\tbreak;\n\t\t}\n\t\tif (Array.isArray(value)) result = result === true ? value : joinRanges(result, value);\n\t}\n\tif (result !== true) {\n\t\tlet changes, back;\n\t\tif (result === false) {\n\t\t\tback = tr.changes.invertedDesc;\n\t\t\tchanges = ChangeSet.empty(state.doc.length);\n\t\t} else {\n\t\t\tlet filtered = tr.changes.filter(result);\n\t\t\tchanges = filtered.changes;\n\t\t\tback = filtered.filtered.mapDesc(filtered.changes).invertedDesc;\n\t\t}\n\t\ttr = Transaction.create(state, changes, tr.selection && tr.selection.map(back), StateEffect.mapEffects(tr.effects, back), tr.annotations, tr.scrollIntoView);\n\t}\n\tlet filters = state.facet(transactionFilter);\n\tfor (let i = filters.length - 1; i >= 0; i--) {\n\t\tlet filtered = filters[i](tr);\n\t\tif (filtered instanceof Transaction) tr = filtered;\n\t\telse if (Array.isArray(filtered) && filtered.length == 1 && filtered[0] instanceof Transaction) tr = filtered[0];\n\t\telse tr = resolveTransaction(state, asArray$1(filtered), false);\n\t}\n\treturn tr;\n}\nfunction extendTransaction(tr) {\n\tlet state = tr.startState, extenders = state.facet(transactionExtender), spec = tr;\n\tfor (let i = extenders.length - 1; i >= 0; i--) {\n\t\tlet extension = extenders[i](tr);\n\t\tif (extension && Object.keys(extension).length) spec = mergeTransaction(spec, resolveTransactionInner(state, extension, tr.changes.newLength), true);\n\t}\n\treturn spec == tr ? tr : Transaction.create(state, tr.changes, tr.selection, spec.effects, spec.annotations, spec.scrollIntoView);\n}\nconst none$2 = [];\nfunction asArray$1(value) {\n\treturn value == null ? none$2 : Array.isArray(value) ? value : [value];\n}\n/**\nThe categories produced by a [character\ncategorizer](https://codemirror.net/6/docs/ref/#state.EditorState.charCategorizer). These are used\ndo things like selecting by word.\n*/\nvar CharCategory = /* @__PURE__ */ (function(CharCategory) {\n\t/**\n\tWord characters.\n\t*/\n\tCharCategory[CharCategory[\"Word\"] = 0] = \"Word\";\n\t/**\n\tWhitespace.\n\t*/\n\tCharCategory[CharCategory[\"Space\"] = 1] = \"Space\";\n\t/**\n\tAnything else.\n\t*/\n\tCharCategory[CharCategory[\"Other\"] = 2] = \"Other\";\n\treturn CharCategory;\n})(CharCategory || (CharCategory = {}));\nconst nonASCIISingleCaseWordChar = /[\\u00df\\u0587\\u0590-\\u05f4\\u0600-\\u06ff\\u3040-\\u309f\\u30a0-\\u30ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\uac00-\\ud7af]/;\nlet wordChar;\ntry {\n\twordChar = /* @__PURE__ */ new RegExp(\"[\\\\p{Alphabetic}\\\\p{Number}_]\", \"u\");\n} catch (_) {}\nfunction hasWordChar(str) {\n\tif (wordChar) return wordChar.test(str);\n\tfor (let i = 0; i < str.length; i++) {\n\t\tlet ch = str[i];\n\t\tif (/\\w/.test(ch) || ch > \"€\" && (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch))) return true;\n\t}\n\treturn false;\n}\nfunction makeCategorizer(wordChars) {\n\treturn (char) => {\n\t\tif (!/\\S/.test(char)) return CharCategory.Space;\n\t\tif (hasWordChar(char)) return CharCategory.Word;\n\t\tfor (let i = 0; i < wordChars.length; i++) if (char.indexOf(wordChars[i]) > -1) return CharCategory.Word;\n\t\treturn CharCategory.Other;\n\t};\n}\n/**\nThe editor state class is a persistent (immutable) data structure.\nTo update a state, you [create](https://codemirror.net/6/docs/ref/#state.EditorState.update) a\n[transaction](https://codemirror.net/6/docs/ref/#state.Transaction), which produces a _new_ state\ninstance, without modifying the original object.\n\nAs such, _never_ mutate properties of a state directly. That'll\njust break things.\n*/\nvar EditorState = class EditorState {\n\tconstructor(config, doc, selection, values, computeSlot, tr) {\n\t\tthis.config = config;\n\t\tthis.doc = doc;\n\t\tthis.selection = selection;\n\t\tthis.values = values;\n\t\tthis.status = config.statusTemplate.slice();\n\t\tthis.computeSlot = computeSlot;\n\t\tif (tr) tr._state = this;\n\t\tfor (let i = 0; i < this.config.dynamicSlots.length; i++) ensureAddr(this, i << 1);\n\t\tthis.computeSlot = null;\n\t}\n\tfield(field, require = true) {\n\t\tlet addr = this.config.address[field.id];\n\t\tif (addr == null) {\n\t\t\tif (require) throw new RangeError(\"Field is not present in this state\");\n\t\t\treturn;\n\t\t}\n\t\tensureAddr(this, addr);\n\t\treturn getAddr(this, addr);\n\t}\n\t/**\n\tCreate a [transaction](https://codemirror.net/6/docs/ref/#state.Transaction) that updates this\n\tstate. Any number of [transaction specs](https://codemirror.net/6/docs/ref/#state.TransactionSpec)\n\tcan be passed. Unless\n\t[`sequential`](https://codemirror.net/6/docs/ref/#state.TransactionSpec.sequential) is set, the\n\t[changes](https://codemirror.net/6/docs/ref/#state.TransactionSpec.changes) (if any) of each spec\n\tare assumed to start in the _current_ document (not the document\n\tproduced by previous specs), and its\n\t[selection](https://codemirror.net/6/docs/ref/#state.TransactionSpec.selection) and\n\t[effects](https://codemirror.net/6/docs/ref/#state.TransactionSpec.effects) are assumed to refer\n\tto the document created by its _own_ changes. The resulting\n\ttransaction contains the combined effect of all the different\n\tspecs. For [selection](https://codemirror.net/6/docs/ref/#state.TransactionSpec.selection), later\n\tspecs take precedence over earlier ones.\n\t*/\n\tupdate(...specs) {\n\t\treturn resolveTransaction(this, specs, true);\n\t}\n\t/**\n\t@internal\n\t*/\n\tapplyTransaction(tr) {\n\t\tlet conf = this.config, { base, compartments } = conf;\n\t\tfor (let effect of tr.effects) if (effect.is(Compartment.reconfigure)) {\n\t\t\tif (conf) {\n\t\t\t\tcompartments = /* @__PURE__ */ new Map();\n\t\t\t\tconf.compartments.forEach((val, key) => compartments.set(key, val));\n\t\t\t\tconf = null;\n\t\t\t}\n\t\t\tcompartments.set(effect.value.compartment, effect.value.extension);\n\t\t} else if (effect.is(StateEffect.reconfigure)) {\n\t\t\tconf = null;\n\t\t\tbase = effect.value;\n\t\t} else if (effect.is(StateEffect.appendConfig)) {\n\t\t\tconf = null;\n\t\t\tbase = asArray$1(base).concat(effect.value);\n\t\t}\n\t\tlet startValues;\n\t\tif (!conf) {\n\t\t\tconf = Configuration.resolve(base, compartments, this);\n\t\t\tstartValues = new EditorState(conf, this.doc, this.selection, conf.dynamicSlots.map(() => null), (state, slot) => slot.reconfigure(state, this), null).values;\n\t\t} else startValues = tr.startState.values.slice();\n\t\tlet selection = tr.startState.facet(allowMultipleSelections) ? tr.newSelection : tr.newSelection.asSingle();\n\t\tnew EditorState(conf, tr.newDoc, selection, startValues, (state, slot) => slot.update(state, tr), tr);\n\t}\n\t/**\n\tCreate a [transaction spec](https://codemirror.net/6/docs/ref/#state.TransactionSpec) that\n\treplaces every selection range with the given content.\n\t*/\n\treplaceSelection(text) {\n\t\tif (typeof text == \"string\") text = this.toText(text);\n\t\treturn this.changeByRange((range) => ({\n\t\t\tchanges: {\n\t\t\t\tfrom: range.from,\n\t\t\t\tto: range.to,\n\t\t\t\tinsert: text\n\t\t\t},\n\t\t\trange: EditorSelection.cursor(range.from + text.length)\n\t\t}));\n\t}\n\t/**\n\tCreate a set of changes and a new selection by running the given\n\tfunction for each range in the active selection. The function\n\tcan return an optional set of changes (in the coordinate space\n\tof the start document), plus an updated range (in the coordinate\n\tspace of the document produced by the call's own changes). This\n\tmethod will merge all the changes and ranges into a single\n\tchangeset and selection, and return it as a [transaction\n\tspec](https://codemirror.net/6/docs/ref/#state.TransactionSpec), which can be passed to\n\t[`update`](https://codemirror.net/6/docs/ref/#state.EditorState.update).\n\t*/\n\tchangeByRange(f) {\n\t\tlet sel = this.selection;\n\t\tlet result1 = f(sel.ranges[0]);\n\t\tlet changes = this.changes(result1.changes), ranges = [result1.range];\n\t\tlet effects = asArray$1(result1.effects);\n\t\tfor (let i = 1; i < sel.ranges.length; i++) {\n\t\t\tlet result = f(sel.ranges[i]);\n\t\t\tlet newChanges = this.changes(result.changes), newMapped = newChanges.map(changes);\n\t\t\tfor (let j = 0; j < i; j++) ranges[j] = ranges[j].map(newMapped);\n\t\t\tlet mapBy = changes.mapDesc(newChanges, true);\n\t\t\tranges.push(result.range.map(mapBy));\n\t\t\tchanges = changes.compose(newMapped);\n\t\t\teffects = StateEffect.mapEffects(effects, newMapped).concat(StateEffect.mapEffects(asArray$1(result.effects), mapBy));\n\t\t}\n\t\treturn {\n\t\t\tchanges,\n\t\t\tselection: EditorSelection.create(ranges, sel.mainIndex),\n\t\t\teffects\n\t\t};\n\t}\n\t/**\n\tCreate a [change set](https://codemirror.net/6/docs/ref/#state.ChangeSet) from the given change\n\tdescription, taking the state's document length and line\n\tseparator into account.\n\t*/\n\tchanges(spec = []) {\n\t\tif (spec instanceof ChangeSet) return spec;\n\t\treturn ChangeSet.of(spec, this.doc.length, this.facet(EditorState.lineSeparator));\n\t}\n\t/**\n\tUsing the state's [line\n\tseparator](https://codemirror.net/6/docs/ref/#state.EditorState^lineSeparator), create a\n\t[`Text`](https://codemirror.net/6/docs/ref/#state.Text) instance from the given string.\n\t*/\n\ttoText(string) {\n\t\treturn Text.of(string.split(this.facet(EditorState.lineSeparator) || DefaultSplit));\n\t}\n\t/**\n\tReturn the given range of the document as a string.\n\t*/\n\tsliceDoc(from = 0, to = this.doc.length) {\n\t\treturn this.doc.sliceString(from, to, this.lineBreak);\n\t}\n\t/**\n\tGet the value of a state [facet](https://codemirror.net/6/docs/ref/#state.Facet).\n\t*/\n\tfacet(facet) {\n\t\tlet addr = this.config.address[facet.id];\n\t\tif (addr == null) return facet.default;\n\t\tensureAddr(this, addr);\n\t\treturn getAddr(this, addr);\n\t}\n\t/**\n\tConvert this state to a JSON-serializable object. When custom\n\tfields should be serialized, you can pass them in as an object\n\tmapping property names (in the resulting object, which should\n\tnot use `doc` or `selection`) to fields.\n\t*/\n\ttoJSON(fields) {\n\t\tlet result = {\n\t\t\tdoc: this.sliceDoc(),\n\t\t\tselection: this.selection.toJSON()\n\t\t};\n\t\tif (fields) for (let prop in fields) {\n\t\t\tlet value = fields[prop];\n\t\t\tif (value instanceof StateField && this.config.address[value.id] != null) result[prop] = value.spec.toJSON(this.field(fields[prop]), this);\n\t\t}\n\t\treturn result;\n\t}\n\t/**\n\tDeserialize a state from its JSON representation. When custom\n\tfields should be deserialized, pass the same object you passed\n\tto [`toJSON`](https://codemirror.net/6/docs/ref/#state.EditorState.toJSON) when serializing as\n\tthird argument.\n\t*/\n\tstatic fromJSON(json, config = {}, fields) {\n\t\tif (!json || typeof json.doc != \"string\") throw new RangeError(\"Invalid JSON representation for EditorState\");\n\t\tlet fieldInit = [];\n\t\tif (fields) {\n\t\t\tfor (let prop in fields) if (Object.prototype.hasOwnProperty.call(json, prop)) {\n\t\t\t\tlet field = fields[prop], value = json[prop];\n\t\t\t\tfieldInit.push(field.init((state) => field.spec.fromJSON(value, state)));\n\t\t\t}\n\t\t}\n\t\treturn EditorState.create({\n\t\t\tdoc: json.doc,\n\t\t\tselection: EditorSelection.fromJSON(json.selection),\n\t\t\textensions: config.extensions ? fieldInit.concat([config.extensions]) : fieldInit\n\t\t});\n\t}\n\t/**\n\tCreate a new state. You'll usually only need this when\n\tinitializing an editor—updated states are created by applying\n\ttransactions.\n\t*/\n\tstatic create(config = {}) {\n\t\tlet configuration = Configuration.resolve(config.extensions || [], /* @__PURE__ */ new Map());\n\t\tlet doc = config.doc instanceof Text ? config.doc : Text.of((config.doc || \"\").split(configuration.staticFacet(EditorState.lineSeparator) || DefaultSplit));\n\t\tlet selection = !config.selection ? EditorSelection.single(0) : config.selection instanceof EditorSelection ? config.selection : EditorSelection.single(config.selection.anchor, config.selection.head);\n\t\tcheckSelection(selection, doc.length);\n\t\tif (!configuration.staticFacet(allowMultipleSelections)) selection = selection.asSingle();\n\t\treturn new EditorState(configuration, doc, selection, configuration.dynamicSlots.map(() => null), (state, slot) => slot.create(state), null);\n\t}\n\t/**\n\tThe size (in columns) of a tab in the document, determined by\n\tthe [`tabSize`](https://codemirror.net/6/docs/ref/#state.EditorState^tabSize) facet.\n\t*/\n\tget tabSize() {\n\t\treturn this.facet(EditorState.tabSize);\n\t}\n\t/**\n\tGet the proper [line-break](https://codemirror.net/6/docs/ref/#state.EditorState^lineSeparator)\n\tstring for this state.\n\t*/\n\tget lineBreak() {\n\t\treturn this.facet(EditorState.lineSeparator) || \"\\n\";\n\t}\n\t/**\n\tReturns true when the editor is\n\t[configured](https://codemirror.net/6/docs/ref/#state.EditorState^readOnly) to be read-only.\n\t*/\n\tget readOnly() {\n\t\treturn this.facet(readOnly);\n\t}\n\t/**\n\tLook up a translation for the given phrase (via the\n\t[`phrases`](https://codemirror.net/6/docs/ref/#state.EditorState^phrases) facet), or return the\n\toriginal string if no translation is found.\n\t\n\tIf additional arguments are passed, they will be inserted in\n\tplace of markers like `$1` (for the first value) and `$2`, etc.\n\tA single `$` is equivalent to `$1`, and `$$` will produce a\n\tliteral dollar sign.\n\t*/\n\tphrase(phrase, ...insert) {\n\t\tfor (let map of this.facet(EditorState.phrases)) if (Object.prototype.hasOwnProperty.call(map, phrase)) {\n\t\t\tphrase = map[phrase];\n\t\t\tbreak;\n\t\t}\n\t\tif (insert.length) phrase = phrase.replace(/\\$(\\$|\\d*)/g, (m, i) => {\n\t\t\tif (i == \"$\") return \"$\";\n\t\t\tlet n = +(i || 1);\n\t\t\treturn !n || n > insert.length ? m : insert[n - 1];\n\t\t});\n\t\treturn phrase;\n\t}\n\t/**\n\tFind the values for a given language data field, provided by the\n\tthe [`languageData`](https://codemirror.net/6/docs/ref/#state.EditorState^languageData) facet.\n\t\n\tExamples of language data fields are...\n\t\n\t- [`\"commentTokens\"`](https://codemirror.net/6/docs/ref/#commands.CommentTokens) for specifying\n\tcomment syntax.\n\t- [`\"autocomplete\"`](https://codemirror.net/6/docs/ref/#autocomplete.autocompletion^config.override)\n\tfor providing language-specific completion sources.\n\t- [`\"wordChars\"`](https://codemirror.net/6/docs/ref/#state.EditorState.charCategorizer) for adding\n\tcharacters that should be considered part of words in this\n\tlanguage.\n\t- [`\"closeBrackets\"`](https://codemirror.net/6/docs/ref/#autocomplete.CloseBracketConfig) controls\n\tbracket closing behavior.\n\t*/\n\tlanguageDataAt(name, pos, side = -1) {\n\t\tlet values = [];\n\t\tfor (let provider of this.facet(languageData)) for (let result of provider(this, pos, side)) if (Object.prototype.hasOwnProperty.call(result, name)) values.push(result[name]);\n\t\treturn values;\n\t}\n\t/**\n\tReturn a function that can categorize strings (expected to\n\trepresent a single [grapheme cluster](https://codemirror.net/6/docs/ref/#state.findClusterBreak))\n\tinto one of:\n\t\n\t- Word (contains an alphanumeric character or a character\n\texplicitly listed in the local language's `\"wordChars\"`\n\tlanguage data, which should be a string)\n\t- Space (contains only whitespace)\n\t- Other (anything else)\n\t*/\n\tcharCategorizer(at) {\n\t\treturn makeCategorizer(this.languageDataAt(\"wordChars\", at).join(\"\"));\n\t}\n\t/**\n\tFind the word at the given position, meaning the range\n\tcontaining all [word](https://codemirror.net/6/docs/ref/#state.CharCategory.Word) characters\n\taround it. If no word characters are adjacent to the position,\n\tthis returns null.\n\t*/\n\twordAt(pos) {\n\t\tlet { text, from, length } = this.doc.lineAt(pos);\n\t\tlet cat = this.charCategorizer(pos);\n\t\tlet start = pos - from, end = pos - from;\n\t\twhile (start > 0) {\n\t\t\tlet prev = findClusterBreak(text, start, false);\n\t\t\tif (cat(text.slice(prev, start)) != CharCategory.Word) break;\n\t\t\tstart = prev;\n\t\t}\n\t\twhile (end < length) {\n\t\t\tlet next = findClusterBreak(text, end);\n\t\t\tif (cat(text.slice(end, next)) != CharCategory.Word) break;\n\t\t\tend = next;\n\t\t}\n\t\treturn start == end ? null : EditorSelection.range(start + from, end + from);\n\t}\n};\n/**\nA facet that, when enabled, causes the editor to allow multiple\nranges to be selected. Be careful though, because by default the\neditor relies on the native DOM selection, which cannot handle\nmultiple selections. An extension like\n[`drawSelection`](https://codemirror.net/6/docs/ref/#view.drawSelection) can be used to make\nsecondary selections visible to the user.\n*/\nEditorState.allowMultipleSelections = allowMultipleSelections;\n/**\nConfigures the tab size to use in this state. The first\n(highest-precedence) value of the facet is used. If no value is\ngiven, this defaults to 4.\n*/\nEditorState.tabSize = /* @__PURE__ */ Facet.define({ combine: (values) => values.length ? values[0] : 4 });\n/**\nThe line separator to use. By default, any of `\"\\n\"`, `\"\\r\\n\"`\nand `\"\\r\"` is treated as a separator when splitting lines, and\nlines are joined with `\"\\n\"`.\n\nWhen you configure a value here, only that precise separator\nwill be used, allowing you to round-trip documents through the\neditor without normalizing line separators.\n*/\nEditorState.lineSeparator = lineSeparator;\n/**\nThis facet controls the value of the\n[`readOnly`](https://codemirror.net/6/docs/ref/#state.EditorState.readOnly) getter, which is\nconsulted by commands and extensions that implement editing\nfunctionality to determine whether they should apply. It\ndefaults to false, but when its highest-precedence value is\n`true`, such functionality disables itself.\n\nNot to be confused with\n[`EditorView.editable`](https://codemirror.net/6/docs/ref/#view.EditorView^editable), which\ncontrols whether the editor's DOM is set to be editable (and\nthus focusable).\n*/\nEditorState.readOnly = readOnly;\n/**\nRegisters translation phrases. The\n[`phrase`](https://codemirror.net/6/docs/ref/#state.EditorState.phrase) method will look through\nall objects registered with this facet to find translations for\nits argument.\n*/\nEditorState.phrases = /* @__PURE__ */ Facet.define({ compare(a, b) {\n\tlet kA = Object.keys(a), kB = Object.keys(b);\n\treturn kA.length == kB.length && kA.every((k) => a[k] == b[k]);\n} });\n/**\nA facet used to register [language\ndata](https://codemirror.net/6/docs/ref/#state.EditorState.languageDataAt) providers.\n*/\nEditorState.languageData = languageData;\n/**\nFacet used to register change filters, which are called for each\ntransaction (unless explicitly\n[disabled](https://codemirror.net/6/docs/ref/#state.TransactionSpec.filter)), and can suppress\npart of the transaction's changes.\n\nSuch a function can return `true` to indicate that it doesn't\nwant to do anything, `false` to completely stop the changes in\nthe transaction, or a set of ranges in which changes should be\nsuppressed. Such ranges are represented as an array of numbers,\nwith each pair of two numbers indicating the start and end of a\nrange. So for example `[10, 20, 100, 110]` suppresses changes\nbetween 10 and 20, and between 100 and 110.\n*/\nEditorState.changeFilter = changeFilter;\n/**\nFacet used to register a hook that gets a chance to update or\nreplace transaction specs before they are applied. This will\nonly be applied for transactions that don't have\n[`filter`](https://codemirror.net/6/docs/ref/#state.TransactionSpec.filter) set to `false`. You\ncan either return a single transaction spec (possibly the input\ntransaction), or an array of specs (which will be combined in\nthe same way as the arguments to\n[`EditorState.update`](https://codemirror.net/6/docs/ref/#state.EditorState.update)).\n\nWhen possible, it is recommended to avoid accessing\n[`Transaction.state`](https://codemirror.net/6/docs/ref/#state.Transaction.state) in a filter,\nsince it will force creation of a state that will then be\ndiscarded again, if the transaction is actually filtered.\n\n(This functionality should be used with care. Indiscriminately\nmodifying transaction is likely to break something or degrade\nthe user experience.)\n*/\nEditorState.transactionFilter = transactionFilter;\n/**\nThis is a more limited form of\n[`transactionFilter`](https://codemirror.net/6/docs/ref/#state.EditorState^transactionFilter),\nwhich can only add\n[annotations](https://codemirror.net/6/docs/ref/#state.TransactionSpec.annotations) and\n[effects](https://codemirror.net/6/docs/ref/#state.TransactionSpec.effects). _But_, this type\nof filter runs even if the transaction has disabled regular\n[filtering](https://codemirror.net/6/docs/ref/#state.TransactionSpec.filter), making it suitable\nfor effects that don't need to touch the changes or selection,\nbut do want to process every transaction.\n\nExtenders run _after_ filters, when both are present.\n*/\nEditorState.transactionExtender = transactionExtender;\nCompartment.reconfigure = /* @__PURE__ */ StateEffect.define();\n/**\nUtility function for combining behaviors to fill in a config\nobject from an array of provided configs. `defaults` should hold\ndefault values for all optional fields in `Config`.\n\nThe function will, by default, error\nwhen a field gets two values that aren't `===`-equal, but you can\nprovide combine functions per field to do something else.\n*/\nfunction combineConfig(configs, defaults, combine = {}) {\n\tlet result = {};\n\tfor (let config of configs) for (let key of Object.keys(config)) {\n\t\tlet value = config[key], current = result[key];\n\t\tif (current === void 0) result[key] = value;\n\t\telse if (current === value || value === void 0);\n\t\telse if (Object.hasOwnProperty.call(combine, key)) result[key] = combine[key](current, value);\n\t\telse throw new Error(\"Config merge conflict for field \" + key);\n\t}\n\tfor (let key in defaults) if (result[key] === void 0) result[key] = defaults[key];\n\treturn result;\n}\n/**\nEach range is associated with a value, which must inherit from\nthis class.\n*/\nvar RangeValue = class {\n\t/**\n\tCompare this value with another value. Used when comparing\n\trangesets. The default implementation compares by identity.\n\tUnless you are only creating a fixed number of unique instances\n\tof your value type, it is a good idea to implement this\n\tproperly.\n\t*/\n\teq(other) {\n\t\treturn this == other;\n\t}\n\t/**\n\tCreate a [range](https://codemirror.net/6/docs/ref/#state.Range) with this value.\n\t*/\n\trange(from, to = from) {\n\t\treturn Range$1.create(from, to, this);\n\t}\n};\nRangeValue.prototype.startSide = RangeValue.prototype.endSide = 0;\nRangeValue.prototype.point = false;\nRangeValue.prototype.mapMode = MapMode.TrackDel;\n/**\nA range associates a value with a range of positions.\n*/\nvar Range$1 = class Range$1 {\n\tconstructor(from, to, value) {\n\t\tthis.from = from;\n\t\tthis.to = to;\n\t\tthis.value = value;\n\t}\n\t/**\n\t@internal\n\t*/\n\tstatic create(from, to, value) {\n\t\treturn new Range$1(from, to, value);\n\t}\n};\nfunction cmpRange(a, b) {\n\treturn a.from - b.from || a.value.startSide - b.value.startSide;\n}\nvar Chunk = class Chunk {\n\tconstructor(from, to, value, maxPoint) {\n\t\tthis.from = from;\n\t\tthis.to = to;\n\t\tthis.value = value;\n\t\tthis.maxPoint = maxPoint;\n\t}\n\tget length() {\n\t\treturn this.to[this.to.length - 1];\n\t}\n\tfindIndex(pos, side, end, startAt = 0) {\n\t\tlet arr = end ? this.to : this.from;\n\t\tfor (let lo = startAt, hi = arr.length;;) {\n\t\t\tif (lo == hi) return lo;\n\t\t\tlet mid = lo + hi >> 1;\n\t\t\tlet diff = arr[mid] - pos || (end ? this.value[mid].endSide : this.value[mid].startSide) - side;\n\t\t\tif (mid == lo) return diff >= 0 ? lo : hi;\n\t\t\tif (diff >= 0) hi = mid;\n\t\t\telse lo = mid + 1;\n\t\t}\n\t}\n\tbetween(offset, from, to, f) {\n\t\tfor (let i = this.findIndex(from, -1e9, true), e = this.findIndex(to, 1e9, false, i); i < e; i++) if (f(this.from[i] + offset, this.to[i] + offset, this.value[i]) === false) return false;\n\t}\n\tmap(offset, changes) {\n\t\tlet value = [], from = [], to = [], newPos = -1, maxPoint = -1;\n\t\tfor (let i = 0; i < this.value.length; i++) {\n\t\t\tlet val = this.value[i], curFrom = this.from[i] + offset, curTo = this.to[i] + offset, newFrom, newTo;\n\t\t\tif (curFrom == curTo) {\n\t\t\t\tlet mapped = changes.mapPos(curFrom, val.startSide, val.mapMode);\n\t\t\t\tif (mapped == null) continue;\n\t\t\t\tnewFrom = newTo = mapped;\n\t\t\t\tif (val.startSide != val.endSide) {\n\t\t\t\t\tnewTo = changes.mapPos(curFrom, val.endSide);\n\t\t\t\t\tif (newTo < newFrom) continue;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tnewFrom = changes.mapPos(curFrom, val.startSide);\n\t\t\t\tnewTo = changes.mapPos(curTo, val.endSide);\n\t\t\t\tif (newFrom > newTo || newFrom == newTo && val.startSide > 0 && val.endSide <= 0) continue;\n\t\t\t}\n\t\t\tif ((newTo - newFrom || val.endSide - val.startSide) < 0) continue;\n\t\t\tif (newPos < 0) newPos = newFrom;\n\t\t\tif (val.point) maxPoint = Math.max(maxPoint, newTo - newFrom);\n\t\t\tvalue.push(val);\n\t\t\tfrom.push(newFrom - newPos);\n\t\t\tto.push(newTo - newPos);\n\t\t}\n\t\treturn {\n\t\t\tmapped: value.length ? new Chunk(from, to, value, maxPoint) : null,\n\t\t\tpos: newPos\n\t\t};\n\t}\n};\n/**\nA range set stores a collection of [ranges](https://codemirror.net/6/docs/ref/#state.Range) in a\nway that makes them efficient to [map](https://codemirror.net/6/docs/ref/#state.RangeSet.map) and\n[update](https://codemirror.net/6/docs/ref/#state.RangeSet.update). This is an immutable data\nstructure.\n*/\nvar RangeSet = class RangeSet {\n\tconstructor(chunkPos, chunk, nextLayer, maxPoint) {\n\t\tthis.chunkPos = chunkPos;\n\t\tthis.chunk = chunk;\n\t\tthis.nextLayer = nextLayer;\n\t\tthis.maxPoint = maxPoint;\n\t}\n\t/**\n\t@internal\n\t*/\n\tstatic create(chunkPos, chunk, nextLayer, maxPoint) {\n\t\treturn new RangeSet(chunkPos, chunk, nextLayer, maxPoint);\n\t}\n\t/**\n\t@internal\n\t*/\n\tget length() {\n\t\tlet last = this.chunk.length - 1;\n\t\treturn last < 0 ? 0 : Math.max(this.chunkEnd(last), this.nextLayer.length);\n\t}\n\t/**\n\tThe number of ranges in the set.\n\t*/\n\tget size() {\n\t\tif (this.isEmpty) return 0;\n\t\tlet size = this.nextLayer.size;\n\t\tfor (let chunk of this.chunk) size += chunk.value.length;\n\t\treturn size;\n\t}\n\t/**\n\t@internal\n\t*/\n\tchunkEnd(index) {\n\t\treturn this.chunkPos[index] + this.chunk[index].length;\n\t}\n\t/**\n\tUpdate the range set, optionally adding new ranges or filtering\n\tout existing ones.\n\t\n\t(Note: The type parameter is just there as a kludge to work\n\taround TypeScript variance issues that prevented `RangeSet<X>`\n\tfrom being a subtype of `RangeSet<Y>` when `X` is a subtype of\n\t`Y`.)\n\t*/\n\tupdate(updateSpec) {\n\t\tlet { add = [], sort = false, filterFrom = 0, filterTo = this.length } = updateSpec;\n\t\tlet filter = updateSpec.filter;\n\t\tif (add.length == 0 && !filter) return this;\n\t\tif (sort) add = add.slice().sort(cmpRange);\n\t\tif (this.isEmpty) return add.length ? RangeSet.of(add) : this;\n\t\tlet cur = new LayerCursor(this, null, -1).goto(0), i = 0, spill = [];\n\t\tlet builder = new RangeSetBuilder();\n\t\twhile (cur.value || i < add.length) if (i < add.length && (cur.from - add[i].from || cur.startSide - add[i].value.startSide) >= 0) {\n\t\t\tlet range = add[i++];\n\t\t\tif (!builder.addInner(range.from, range.to, range.value)) spill.push(range);\n\t\t} else if (cur.rangeIndex == 1 && cur.chunkIndex < this.chunk.length && (i == add.length || this.chunkEnd(cur.chunkIndex) < add[i].from) && (!filter || filterFrom > this.chunkEnd(cur.chunkIndex) || filterTo < this.chunkPos[cur.chunkIndex]) && builder.addChunk(this.chunkPos[cur.chunkIndex], this.chunk[cur.chunkIndex])) cur.nextChunk();\n\t\telse {\n\t\t\tif (!filter || filterFrom > cur.to || filterTo < cur.from || filter(cur.from, cur.to, cur.value)) {\n\t\t\t\tif (!builder.addInner(cur.from, cur.to, cur.value)) spill.push(Range$1.create(cur.from, cur.to, cur.value));\n\t\t\t}\n\t\t\tcur.next();\n\t\t}\n\t\treturn builder.finishInner(this.nextLayer.isEmpty && !spill.length ? RangeSet.empty : this.nextLayer.update({\n\t\t\tadd: spill,\n\t\t\tfilter,\n\t\t\tfilterFrom,\n\t\t\tfilterTo\n\t\t}));\n\t}\n\t/**\n\tMap this range set through a set of changes, return the new set.\n\t*/\n\tmap(changes) {\n\t\tif (changes.empty || this.isEmpty) return this;\n\t\tlet chunks = [], chunkPos = [], maxPoint = -1;\n\t\tfor (let i = 0; i < this.chunk.length; i++) {\n\t\t\tlet start = this.chunkPos[i], chunk = this.chunk[i];\n\t\t\tlet touch = changes.touchesRange(start, start + chunk.length);\n\t\t\tif (touch === false) {\n\t\t\t\tmaxPoint = Math.max(maxPoint, chunk.maxPoint);\n\t\t\t\tchunks.push(chunk);\n\t\t\t\tchunkPos.push(changes.mapPos(start));\n\t\t\t} else if (touch === true) {\n\t\t\t\tlet { mapped, pos } = chunk.map(start, changes);\n\t\t\t\tif (mapped) {\n\t\t\t\t\tmaxPoint = Math.max(maxPoint, mapped.maxPoint);\n\t\t\t\t\tchunks.push(mapped);\n\t\t\t\t\tchunkPos.push(pos);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tlet next = this.nextLayer.map(changes);\n\t\treturn chunks.length == 0 ? next : new RangeSet(chunkPos, chunks, next || RangeSet.empty, maxPoint);\n\t}\n\t/**\n\tIterate over the ranges that touch the region `from` to `to`,\n\tcalling `f` for each. There is no guarantee that the ranges will\n\tbe reported in any specific order. When the callback returns\n\t`false`, iteration stops.\n\t*/\n\tbetween(from, to, f) {\n\t\tif (this.isEmpty) return;\n\t\tfor (let i = 0; i < this.chunk.length; i++) {\n\t\t\tlet start = this.chunkPos[i], chunk = this.chunk[i];\n\t\t\tif (to >= start && from <= start + chunk.length && chunk.between(start, from - start, to - start, f) === false) return;\n\t\t}\n\t\tthis.nextLayer.between(from, to, f);\n\t}\n\t/**\n\tIterate over the ranges in this set, in order, including all\n\tranges that end at or after `from`.\n\t*/\n\titer(from = 0) {\n\t\treturn HeapCursor.from([this]).goto(from);\n\t}\n\t/**\n\t@internal\n\t*/\n\tget isEmpty() {\n\t\treturn this.nextLayer == this;\n\t}\n\t/**\n\tIterate over the ranges in a collection of sets, in order,\n\tstarting from `from`.\n\t*/\n\tstatic iter(sets, from = 0) {\n\t\treturn HeapCursor.from(sets).goto(from);\n\t}\n\t/**\n\tIterate over two groups of sets, calling methods on `comparator`\n\tto notify it of possible differences.\n\t*/\n\tstatic compare(oldSets, newSets, textDiff, comparator, minPointSize = -1) {\n\t\tlet a = oldSets.filter((set) => set.maxPoint > 0 || !set.isEmpty && set.maxPoint >= minPointSize);\n\t\tlet b = newSets.filter((set) => set.maxPoint > 0 || !set.isEmpty && set.maxPoint >= minPointSize);\n\t\tlet sharedChunks = findSharedChunks(a, b, textDiff);\n\t\tlet sideA = new SpanCursor(a, sharedChunks, minPointSize);\n\t\tlet sideB = new SpanCursor(b, sharedChunks, minPointSize);\n\t\ttextDiff.iterGaps((fromA, fromB, length) => compare(sideA, fromA, sideB, fromB, length, comparator));\n\t\tif (textDiff.empty && textDiff.length == 0) compare(sideA, 0, sideB, 0, 0, comparator);\n\t}\n\t/**\n\tCompare the contents of two groups of range sets, returning true\n\tif they are equivalent in the given range.\n\t*/\n\tstatic eq(oldSets, newSets, from = 0, to) {\n\t\tif (to == null) to = 999999999;\n\t\tlet a = oldSets.filter((set) => !set.isEmpty && newSets.indexOf(set) < 0);\n\t\tlet b = newSets.filter((set) => !set.isEmpty && oldSets.indexOf(set) < 0);\n\t\tif (a.length != b.length) return false;\n\t\tif (!a.length) return true;\n\t\tlet sharedChunks = findSharedChunks(a, b);\n\t\tlet sideA = new SpanCursor(a, sharedChunks, 0).goto(from), sideB = new SpanCursor(b, sharedChunks, 0).goto(from);\n\t\tfor (;;) {\n\t\t\tif (sideA.to != sideB.to || !sameValues(sideA.active, sideB.active) || sideA.point && (!sideB.point || !sideA.point.eq(sideB.point))) return false;\n\t\t\tif (sideA.to > to) return true;\n\t\t\tsideA.next();\n\t\t\tsideB.next();\n\t\t}\n\t}\n\t/**\n\tIterate over a group of range sets at the same time, notifying\n\tthe iterator about the ranges covering every given piece of\n\tcontent. Returns the open count (see\n\t[`SpanIterator.span`](https://codemirror.net/6/docs/ref/#state.SpanIterator.span)) at the end\n\tof the iteration.\n\t*/\n\tstatic spans(sets, from, to, iterator, minPointSize = -1) {\n\t\tlet cursor = new SpanCursor(sets, null, minPointSize).goto(from), pos = from;\n\t\tlet openRanges = cursor.openStart;\n\t\tfor (;;) {\n\t\t\tlet curTo = Math.min(cursor.to, to);\n\t\t\tif (cursor.point) {\n\t\t\t\tlet active = cursor.activeForPoint(cursor.to);\n\t\t\t\tlet openCount = cursor.pointFrom < from ? active.length + 1 : cursor.point.startSide < 0 ? active.length : Math.min(active.length, openRanges);\n\t\t\t\titerator.point(pos, curTo, cursor.point, active, openCount, cursor.pointRank);\n\t\t\t\topenRanges = Math.min(cursor.openEnd(curTo), active.length);\n\t\t\t} else if (curTo > pos) {\n\t\t\t\titerator.span(pos, curTo, cursor.active, openRanges);\n\t\t\t\topenRanges = cursor.openEnd(curTo);\n\t\t\t}\n\t\t\tif (cursor.to > to) return openRanges + (cursor.point && cursor.to > to ? 1 : 0);\n\t\t\tpos = cursor.to;\n\t\t\tcursor.next();\n\t\t}\n\t}\n\t/**\n\tCreate a range set for the given range or array of ranges. By\n\tdefault, this expects the ranges to be _sorted_ (by start\n\tposition and, if two start at the same position,\n\t`value.startSide`). You can pass `true` as second argument to\n\tcause the method to sort them.\n\t*/\n\tstatic of(ranges, sort = false) {\n\t\tlet build = new RangeSetBuilder();\n\t\tfor (let range of ranges instanceof Range$1 ? [ranges] : sort ? lazySort(ranges) : ranges) build.add(range.from, range.to, range.value);\n\t\treturn build.finish();\n\t}\n\t/**\n\tJoin an array of range sets into a single set.\n\t*/\n\tstatic join(sets) {\n\t\tif (!sets.length) return RangeSet.empty;\n\t\tlet result = sets[sets.length - 1];\n\t\tfor (let i = sets.length - 2; i >= 0; i--) for (let layer = sets[i]; layer != RangeSet.empty; layer = layer.nextLayer) result = new RangeSet(layer.chunkPos, layer.chunk, result, Math.max(layer.maxPoint, result.maxPoint));\n\t\treturn result;\n\t}\n};\n/**\nThe empty set of ranges.\n*/\nRangeSet.empty = /* @__PURE__ */ new RangeSet([], [], null, -1);\nfunction lazySort(ranges) {\n\tif (ranges.length > 1) for (let prev = ranges[0], i = 1; i < ranges.length; i++) {\n\t\tlet cur = ranges[i];\n\t\tif (cmpRange(prev, cur) > 0) return ranges.slice().sort(cmpRange);\n\t\tprev = cur;\n\t}\n\treturn ranges;\n}\nRangeSet.empty.nextLayer = RangeSet.empty;\n/**\nA range set builder is a data structure that helps build up a\n[range set](https://codemirror.net/6/docs/ref/#state.RangeSet) directly, without first allocating\nan array of [`Range`](https://codemirror.net/6/docs/ref/#state.Range) objects.\n*/\nvar RangeSetBuilder = class RangeSetBuilder {\n\tfinishChunk(newArrays) {\n\t\tthis.chunks.push(new Chunk(this.from, this.to, this.value, this.maxPoint));\n\t\tthis.chunkPos.push(this.chunkStart);\n\t\tthis.chunkStart = -1;\n\t\tthis.setMaxPoint = Math.max(this.setMaxPoint, this.maxPoint);\n\t\tthis.maxPoint = -1;\n\t\tif (newArrays) {\n\t\t\tthis.from = [];\n\t\t\tthis.to = [];\n\t\t\tthis.value = [];\n\t\t}\n\t}\n\t/**\n\tCreate an empty builder.\n\t*/\n\tconstructor() {\n\t\tthis.chunks = [];\n\t\tthis.chunkPos = [];\n\t\tthis.chunkStart = -1;\n\t\tthis.last = null;\n\t\tthis.lastFrom = -1e9;\n\t\tthis.lastTo = -1e9;\n\t\tthis.from = [];\n\t\tthis.to = [];\n\t\tthis.value = [];\n\t\tthis.maxPoint = -1;\n\t\tthis.setMaxPoint = -1;\n\t\tthis.nextLayer = null;\n\t}\n\t/**\n\tAdd a range. Ranges should be added in sorted (by `from` and\n\t`value.startSide`) order.\n\t*/\n\tadd(from, to, value) {\n\t\tif (!this.addInner(from, to, value)) (this.nextLayer || (this.nextLayer = new RangeSetBuilder())).add(from, to, value);\n\t}\n\t/**\n\t@internal\n\t*/\n\taddInner(from, to, value) {\n\t\tlet diff = from - this.lastTo || value.startSide - this.last.endSide;\n\t\tif (diff <= 0 && (from - this.lastFrom || value.startSide - this.last.startSide) < 0) throw new Error(\"Ranges must be added sorted by `from` position and `startSide`\");\n\t\tif (diff < 0) return false;\n\t\tif (this.from.length == 250) this.finishChunk(true);\n\t\tif (this.chunkStart < 0) this.chunkStart = from;\n\t\tthis.from.push(from - this.chunkStart);\n\t\tthis.to.push(to - this.chunkStart);\n\t\tthis.last = value;\n\t\tthis.lastFrom = from;\n\t\tthis.lastTo = to;\n\t\tthis.value.push(value);\n\t\tif (value.point) this.maxPoint = Math.max(this.maxPoint, to - from);\n\t\treturn true;\n\t}\n\t/**\n\t@internal\n\t*/\n\taddChunk(from, chunk) {\n\t\tif ((from - this.lastTo || chunk.value[0].startSide - this.last.endSide) < 0) return false;\n\t\tif (this.from.length) this.finishChunk(true);\n\t\tthis.setMaxPoint = Math.max(this.setMaxPoint, chunk.maxPoint);\n\t\tthis.chunks.push(chunk);\n\t\tthis.chunkPos.push(from);\n\t\tlet last = chunk.value.length - 1;\n\t\tthis.last = chunk.value[last];\n\t\tthis.lastFrom = chunk.from[last] + from;\n\t\tthis.lastTo = chunk.to[last] + from;\n\t\treturn true;\n\t}\n\t/**\n\tFinish the range set. Returns the new set. The builder can't be\n\tused anymore after this has been called.\n\t*/\n\tfinish() {\n\t\treturn this.finishInner(RangeSet.empty);\n\t}\n\t/**\n\t@internal\n\t*/\n\tfinishInner(next) {\n\t\tif (this.from.length) this.finishChunk(false);\n\t\tif (this.chunks.length == 0) return next;\n\t\tlet result = RangeSet.create(this.chunkPos, this.chunks, this.nextLayer ? this.nextLayer.finishInner(next) : next, this.setMaxPoint);\n\t\tthis.from = null;\n\t\treturn result;\n\t}\n};\nfunction findSharedChunks(a, b, textDiff) {\n\tlet inA = /* @__PURE__ */ new Map();\n\tfor (let set of a) for (let i = 0; i < set.chunk.length; i++) if (set.chunk[i].maxPoint <= 0) inA.set(set.chunk[i], set.chunkPos[i]);\n\tlet shared = /* @__PURE__ */ new Set();\n\tfor (let set of b) for (let i = 0; i < set.chunk.length; i++) {\n\t\tlet known = inA.get(set.chunk[i]);\n\t\tif (known != null && (textDiff ? textDiff.mapPos(known) : known) == set.chunkPos[i] && !(textDiff === null || textDiff === void 0 ? void 0 : textDiff.touchesRange(known, known + set.chunk[i].length))) shared.add(set.chunk[i]);\n\t}\n\treturn shared;\n}\nvar LayerCursor = class {\n\tconstructor(layer, skip, minPoint, rank = 0) {\n\t\tthis.layer = layer;\n\t\tthis.skip = skip;\n\t\tthis.minPoint = minPoint;\n\t\tthis.rank = rank;\n\t}\n\tget startSide() {\n\t\treturn this.value ? this.value.startSide : 0;\n\t}\n\tget endSide() {\n\t\treturn this.value ? this.value.endSide : 0;\n\t}\n\tgoto(pos, side = -1e9) {\n\t\tthis.chunkIndex = this.rangeIndex = 0;\n\t\tthis.gotoInner(pos, side, false);\n\t\treturn this;\n\t}\n\tgotoInner(pos, side, forward) {\n\t\twhile (this.chunkIndex < this.layer.chunk.length) {\n\t\t\tlet next = this.layer.chunk[this.chunkIndex];\n\t\t\tif (!(this.skip && this.skip.has(next) || this.layer.chunkEnd(this.chunkIndex) < pos || next.maxPoint < this.minPoint)) break;\n\t\t\tthis.chunkIndex++;\n\t\t\tforward = false;\n\t\t}\n\t\tif (this.chunkIndex < this.layer.chunk.length) {\n\t\t\tlet rangeIndex = this.layer.chunk[this.chunkIndex].findIndex(pos - this.layer.chunkPos[this.chunkIndex], side, true);\n\t\t\tif (!forward || this.rangeIndex < rangeIndex) this.setRangeIndex(rangeIndex);\n\t\t}\n\t\tthis.next();\n\t}\n\tforward(pos, side) {\n\t\tif ((this.to - pos || this.endSide - side) < 0) this.gotoInner(pos, side, true);\n\t}\n\tnext() {\n\t\tfor (;;) if (this.chunkIndex == this.layer.chunk.length) {\n\t\t\tthis.from = this.to = 1e9;\n\t\t\tthis.value = null;\n\t\t\tbreak;\n\t\t} else {\n\t\t\tlet chunkPos = this.layer.chunkPos[this.chunkIndex], chunk = this.layer.chunk[this.chunkIndex];\n\t\t\tthis.from = chunkPos + chunk.from[this.rangeIndex];\n\t\t\tthis.to = chunkPos + chunk.to[this.rangeIndex];\n\t\t\tthis.value = chunk.value[this.rangeIndex];\n\t\t\tthis.setRangeIndex(this.rangeIndex + 1);\n\t\t\tif (this.minPoint < 0 || this.value.point && this.to - this.from >= this.minPoint) break;\n\t\t}\n\t}\n\tsetRangeIndex(index) {\n\t\tif (index == this.layer.chunk[this.chunkIndex].value.length) {\n\t\t\tthis.chunkIndex++;\n\t\t\tif (this.skip) while (this.chunkIndex < this.layer.chunk.length && this.skip.has(this.layer.chunk[this.chunkIndex])) this.chunkIndex++;\n\t\t\tthis.rangeIndex = 0;\n\t\t} else this.rangeIndex = index;\n\t}\n\tnextChunk() {\n\t\tthis.chunkIndex++;\n\t\tthis.rangeIndex = 0;\n\t\tthis.next();\n\t}\n\tcompare(other) {\n\t\treturn this.from - other.from || this.startSide - other.startSide || this.rank - other.rank || this.to - other.to || this.endSide - other.endSide;\n\t}\n};\nvar HeapCursor = class HeapCursor {\n\tconstructor(heap) {\n\t\tthis.heap = heap;\n\t}\n\tstatic from(sets, skip = null, minPoint = -1) {\n\t\tlet heap = [];\n\t\tfor (let i = 0; i < sets.length; i++) for (let cur = sets[i]; !cur.isEmpty; cur = cur.nextLayer) if (cur.maxPoint >= minPoint) heap.push(new LayerCursor(cur, skip, minPoint, i));\n\t\treturn heap.length == 1 ? heap[0] : new HeapCursor(heap);\n\t}\n\tget startSide() {\n\t\treturn this.value ? this.value.startSide : 0;\n\t}\n\tgoto(pos, side = -1e9) {\n\t\tfor (let cur of this.heap) cur.goto(pos, side);\n\t\tfor (let i = this.heap.length >> 1; i >= 0; i--) heapBubble(this.heap, i);\n\t\tthis.next();\n\t\treturn this;\n\t}\n\tforward(pos, side) {\n\t\tfor (let cur of this.heap) cur.forward(pos, side);\n\t\tfor (let i = this.heap.length >> 1; i >= 0; i--) heapBubble(this.heap, i);\n\t\tif ((this.to - pos || this.value.endSide - side) < 0) this.next();\n\t}\n\tnext() {\n\t\tif (this.heap.length == 0) {\n\t\t\tthis.from = this.to = 1e9;\n\t\t\tthis.value = null;\n\t\t\tthis.rank = -1;\n\t\t} else {\n\t\t\tlet top = this.heap[0];\n\t\t\tthis.from = top.from;\n\t\t\tthis.to = top.to;\n\t\t\tthis.value = top.value;\n\t\t\tthis.rank = top.rank;\n\t\t\tif (top.value) top.next();\n\t\t\theapBubble(this.heap, 0);\n\t\t}\n\t}\n};\nfunction heapBubble(heap, index) {\n\tfor (let cur = heap[index];;) {\n\t\tlet childIndex = (index << 1) + 1;\n\t\tif (childIndex >= heap.length) break;\n\t\tlet child = heap[childIndex];\n\t\tif (childIndex + 1 < heap.length && child.compare(heap[childIndex + 1]) >= 0) {\n\t\t\tchild = heap[childIndex + 1];\n\t\t\tchildIndex++;\n\t\t}\n\t\tif (cur.compare(child) < 0) break;\n\t\theap[childIndex] = cur;\n\t\theap[index] = child;\n\t\tindex = childIndex;\n\t}\n}\nvar SpanCursor = class {\n\tconstructor(sets, skip, minPoint) {\n\t\tthis.minPoint = minPoint;\n\t\tthis.active = [];\n\t\tthis.activeTo = [];\n\t\tthis.activeRank = [];\n\t\tthis.minActive = -1;\n\t\tthis.point = null;\n\t\tthis.pointFrom = 0;\n\t\tthis.pointRank = 0;\n\t\tthis.to = -1e9;\n\t\tthis.endSide = 0;\n\t\tthis.openStart = -1;\n\t\tthis.cursor = HeapCursor.from(sets, skip, minPoint);\n\t}\n\tgoto(pos, side = -1e9) {\n\t\tthis.cursor.goto(pos, side);\n\t\tthis.active.length = this.activeTo.length = this.activeRank.length = 0;\n\t\tthis.minActive = -1;\n\t\tthis.to = pos;\n\t\tthis.endSide = side;\n\t\tthis.openStart = -1;\n\t\tthis.next();\n\t\treturn this;\n\t}\n\tforward(pos, side) {\n\t\twhile (this.minActive > -1 && (this.activeTo[this.minActive] - pos || this.active[this.minActive].endSide - side) < 0) this.removeActive(this.minActive);\n\t\tthis.cursor.forward(pos, side);\n\t}\n\tremoveActive(index) {\n\t\tremove(this.active, index);\n\t\tremove(this.activeTo, index);\n\t\tremove(this.activeRank, index);\n\t\tthis.minActive = findMinIndex(this.active, this.activeTo);\n\t}\n\taddActive(trackOpen) {\n\t\tlet i = 0, { value, to, rank } = this.cursor;\n\t\twhile (i < this.activeRank.length && (rank - this.activeRank[i] || to - this.activeTo[i]) > 0) i++;\n\t\tinsert(this.active, i, value);\n\t\tinsert(this.activeTo, i, to);\n\t\tinsert(this.activeRank, i, rank);\n\t\tif (trackOpen) insert(trackOpen, i, this.cursor.from);\n\t\tthis.minActive = findMinIndex(this.active, this.activeTo);\n\t}\n\tnext() {\n\t\tlet from = this.to, wasPoint = this.point;\n\t\tthis.point = null;\n\t\tlet trackOpen = this.openStart < 0 ? [] : null;\n\t\tfor (;;) {\n\t\t\tlet a = this.minActive;\n\t\t\tif (a > -1 && (this.activeTo[a] - this.cursor.from || this.active[a].endSide - this.cursor.startSide) < 0) {\n\t\t\t\tif (this.activeTo[a] > from) {\n\t\t\t\t\tthis.to = this.activeTo[a];\n\t\t\t\t\tthis.endSide = this.active[a].endSide;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tthis.removeActive(a);\n\t\t\t\tif (trackOpen) remove(trackOpen, a);\n\t\t\t} else if (!this.cursor.value) {\n\t\t\t\tthis.to = this.endSide = 1e9;\n\t\t\t\tbreak;\n\t\t\t} else if (this.cursor.from > from) {\n\t\t\t\tthis.to = this.cursor.from;\n\t\t\t\tthis.endSide = this.cursor.startSide;\n\t\t\t\tbreak;\n\t\t\t} else {\n\t\t\t\tlet nextVal = this.cursor.value;\n\t\t\t\tif (!nextVal.point) {\n\t\t\t\t\tthis.addActive(trackOpen);\n\t\t\t\t\tthis.cursor.next();\n\t\t\t\t} else if (wasPoint && this.cursor.to == this.to && this.cursor.from < this.cursor.to) this.cursor.next();\n\t\t\t\telse {\n\t\t\t\t\tthis.point = nextVal;\n\t\t\t\t\tthis.pointFrom = this.cursor.from;\n\t\t\t\t\tthis.pointRank = this.cursor.rank;\n\t\t\t\t\tthis.to = this.cursor.to;\n\t\t\t\t\tthis.endSide = nextVal.endSide;\n\t\t\t\t\tthis.cursor.next();\n\t\t\t\t\tthis.forward(this.to, this.endSide);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (trackOpen) {\n\t\t\tthis.openStart = 0;\n\t\t\tfor (let i = trackOpen.length - 1; i >= 0 && trackOpen[i] < from; i--) this.openStart++;\n\t\t}\n\t}\n\tactiveForPoint(to) {\n\t\tif (!this.active.length) return this.active;\n\t\tlet active = [];\n\t\tfor (let i = this.active.length - 1; i >= 0; i--) {\n\t\t\tif (this.activeRank[i] < this.pointRank) break;\n\t\t\tif (this.activeTo[i] > to || this.activeTo[i] == to && this.active[i].endSide >= this.point.endSide) active.push(this.active[i]);\n\t\t}\n\t\treturn active.reverse();\n\t}\n\topenEnd(to) {\n\t\tlet open = 0;\n\t\tfor (let i = this.activeTo.length - 1; i >= 0 && this.activeTo[i] > to; i--) open++;\n\t\treturn open;\n\t}\n};\nfunction compare(a, startA, b, startB, length, comparator) {\n\ta.goto(startA);\n\tb.goto(startB);\n\tlet endB = startB + length;\n\tlet pos = startB, dPos = startB - startA;\n\tfor (;;) {\n\t\tlet dEnd = a.to + dPos - b.to, diff = dEnd || a.endSide - b.endSide;\n\t\tlet end = diff < 0 ? a.to + dPos : b.to, clipEnd = Math.min(end, endB);\n\t\tif (a.point || b.point) {\n\t\t\tif (!(a.point && b.point && (a.point == b.point || a.point.eq(b.point)) && sameValues(a.activeForPoint(a.to), b.activeForPoint(b.to)))) comparator.comparePoint(pos, clipEnd, a.point, b.point);\n\t\t} else if (clipEnd > pos && !sameValues(a.active, b.active)) comparator.compareRange(pos, clipEnd, a.active, b.active);\n\t\tif (end > endB) break;\n\t\tif ((dEnd || a.openEnd != b.openEnd) && comparator.boundChange) comparator.boundChange(end);\n\t\tpos = end;\n\t\tif (diff <= 0) a.next();\n\t\tif (diff >= 0) b.next();\n\t}\n}\nfunction sameValues(a, b) {\n\tif (a.length != b.length) return false;\n\tfor (let i = 0; i < a.length; i++) if (a[i] != b[i] && !a[i].eq(b[i])) return false;\n\treturn true;\n}\nfunction remove(array, index) {\n\tfor (let i = index, e = array.length - 1; i < e; i++) array[i] = array[i + 1];\n\tarray.pop();\n}\nfunction insert(array, index, value) {\n\tfor (let i = array.length - 1; i >= index; i--) array[i + 1] = array[i];\n\tarray[index] = value;\n}\nfunction findMinIndex(value, array) {\n\tlet found = -1, foundPos = 1e9;\n\tfor (let i = 0; i < array.length; i++) if ((array[i] - foundPos || value[i].endSide - value[found].endSide) < 0) {\n\t\tfound = i;\n\t\tfoundPos = array[i];\n\t}\n\treturn found;\n}\n/**\nCount the column position at the given offset into the string,\ntaking extending characters and tab size into account.\n*/\nfunction countColumn(string, tabSize, to = string.length) {\n\tlet n = 0;\n\tfor (let i = 0; i < to && i < string.length;) if (string.charCodeAt(i) == 9) {\n\t\tn += tabSize - n % tabSize;\n\t\ti++;\n\t} else {\n\t\tn++;\n\t\ti = findClusterBreak(string, i);\n\t}\n\treturn n;\n}\n/**\nFind the offset that corresponds to the given column position in a\nstring, taking extending characters and tab size into account. By\ndefault, the string length is returned when it is too short to\nreach the column. Pass `strict` true to make it return -1 in that\nsituation.\n*/\nfunction findColumn(string, col, tabSize, strict) {\n\tfor (let i = 0, n = 0;;) {\n\t\tif (n >= col) return i;\n\t\tif (i == string.length) break;\n\t\tn += string.charCodeAt(i) == 9 ? tabSize - n % tabSize : 1;\n\t\ti = findClusterBreak(string, i);\n\t}\n\treturn strict === true ? -1 : string.length;\n}\n//#endregion\n//#region ../../node_modules/.pnpm/style-mod@4.1.3/node_modules/style-mod/src/style-mod.js\nconst C = \"ͼ\";\nconst COUNT = typeof Symbol == \"undefined\" ? \"__\" + C : Symbol.for(C);\nconst SET = typeof Symbol == \"undefined\" ? \"__styleSet\" + Math.floor(Math.random() * 1e8) : Symbol(\"styleSet\");\nconst top = typeof globalThis != \"undefined\" ? globalThis : typeof window != \"undefined\" ? window : {};\nvar StyleModule = class {\n\tconstructor(spec, options) {\n\t\tthis.rules = [];\n\t\tlet { finish } = options || {};\n\t\tfunction splitSelector(selector) {\n\t\t\treturn /^@/.test(selector) ? [selector] : selector.split(/,\\s*/);\n\t\t}\n\t\tfunction render(selectors, spec, target, isKeyframes) {\n\t\t\tlet local = [], isAt = /^@(\\w+)\\b/.exec(selectors[0]), keyframes = isAt && isAt[1] == \"keyframes\";\n\t\t\tif (isAt && spec == null) return target.push(selectors[0] + \";\");\n\t\t\tfor (let prop in spec) {\n\t\t\t\tlet value = spec[prop];\n\t\t\t\tif (/&/.test(prop)) render(prop.split(/,\\s*/).map((part) => selectors.map((sel) => part.replace(/&/, sel))).reduce((a, b) => a.concat(b)), value, target);\n\t\t\t\telse if (value && typeof value == \"object\") {\n\t\t\t\t\tif (!isAt) throw new RangeError(\"The value of a property (\" + prop + \") should be a primitive value.\");\n\t\t\t\t\trender(splitSelector(prop), value, local, keyframes);\n\t\t\t\t} else if (value != null) local.push(prop.replace(/_.*/, \"\").replace(/[A-Z]/g, (l) => \"-\" + l.toLowerCase()) + \": \" + value + \";\");\n\t\t\t}\n\t\t\tif (local.length || keyframes) target.push((finish && !isAt && !isKeyframes ? selectors.map(finish) : selectors).join(\", \") + \" {\" + local.join(\" \") + \"}\");\n\t\t}\n\t\tfor (let prop in spec) render(splitSelector(prop), spec[prop], this.rules);\n\t}\n\tgetRules() {\n\t\treturn this.rules.join(\"\\n\");\n\t}\n\tstatic newName() {\n\t\tlet id = top[COUNT] || 1;\n\t\ttop[COUNT] = id + 1;\n\t\treturn C + id.toString(36);\n\t}\n\tstatic mount(root, modules, options) {\n\t\tlet set = root[SET], nonce = options && options.nonce;\n\t\tif (!set) set = new StyleSet(root, nonce);\n\t\telse if (nonce) set.setNonce(nonce);\n\t\tset.mount(Array.isArray(modules) ? modules : [modules], root);\n\t}\n};\nlet adoptedSet = /* @__PURE__ */ new Map();\nvar StyleSet = class {\n\tconstructor(root, nonce) {\n\t\tlet doc = root.ownerDocument || root, win = doc.defaultView;\n\t\tif (!root.head && root.adoptedStyleSheets && win.CSSStyleSheet) {\n\t\t\tlet adopted = adoptedSet.get(doc);\n\t\t\tif (adopted) return root[SET] = adopted;\n\t\t\tthis.sheet = new win.CSSStyleSheet();\n\t\t\tadoptedSet.set(doc, this);\n\t\t} else {\n\t\t\tthis.styleTag = doc.createElement(\"style\");\n\t\t\tif (nonce) this.styleTag.setAttribute(\"nonce\", nonce);\n\t\t}\n\t\tthis.modules = [];\n\t\troot[SET] = this;\n\t}\n\tmount(modules, root) {\n\t\tlet sheet = this.sheet;\n\t\tlet pos = 0, j = 0;\n\t\tfor (let i = 0; i < modules.length; i++) {\n\t\t\tlet mod = modules[i], index = this.modules.indexOf(mod);\n\t\t\tif (index < j && index > -1) {\n\t\t\t\tthis.modules.splice(index, 1);\n\t\t\t\tj--;\n\t\t\t\tindex = -1;\n\t\t\t}\n\t\t\tif (index == -1) {\n\t\t\t\tthis.modules.splice(j++, 0, mod);\n\t\t\t\tif (sheet) for (let k = 0; k < mod.rules.length; k++) sheet.insertRule(mod.rules[k], pos++);\n\t\t\t} else {\n\t\t\t\twhile (j < index) pos += this.modules[j++].rules.length;\n\t\t\t\tpos += mod.rules.length;\n\t\t\t\tj++;\n\t\t\t}\n\t\t}\n\t\tif (sheet) {\n\t\t\tif (root.adoptedStyleSheets.indexOf(this.sheet) < 0) root.adoptedStyleSheets = [this.sheet, ...root.adoptedStyleSheets];\n\t\t} else {\n\t\t\tlet text = \"\";\n\t\t\tfor (let i = 0; i < this.modules.length; i++) text += this.modules[i].getRules() + \"\\n\";\n\t\t\tthis.styleTag.textContent = text;\n\t\t\tlet target = root.head || root;\n\t\t\tif (this.styleTag.parentNode != target) target.insertBefore(this.styleTag, target.firstChild);\n\t\t}\n\t}\n\tsetNonce(nonce) {\n\t\tif (this.styleTag && this.styleTag.getAttribute(\"nonce\") != nonce) this.styleTag.setAttribute(\"nonce\", nonce);\n\t}\n};\n//#endregion\n//#region ../../node_modules/.pnpm/w3c-keyname@2.2.8/node_modules/w3c-keyname/index.js\nvar base = {\n\t8: \"Backspace\",\n\t9: \"Tab\",\n\t10: \"Enter\",\n\t12: \"NumLock\",\n\t13: \"Enter\",\n\t16: \"Shift\",\n\t17: \"Control\",\n\t18: \"Alt\",\n\t20: \"CapsLock\",\n\t27: \"Escape\",\n\t32: \" \",\n\t33: \"PageUp\",\n\t34: \"PageDown\",\n\t35: \"End\",\n\t36: \"Home\",\n\t37: \"ArrowLeft\",\n\t38: \"ArrowUp\",\n\t39: \"ArrowRight\",\n\t40: \"ArrowDown\",\n\t44: \"PrintScreen\",\n\t45: \"Insert\",\n\t46: \"Delete\",\n\t59: \";\",\n\t61: \"=\",\n\t91: \"Meta\",\n\t92: \"Meta\",\n\t106: \"*\",\n\t107: \"+\",\n\t108: \",\",\n\t109: \"-\",\n\t110: \".\",\n\t111: \"/\",\n\t144: \"NumLock\",\n\t145: \"ScrollLock\",\n\t160: \"Shift\",\n\t161: \"Shift\",\n\t162: \"Control\",\n\t163: \"Control\",\n\t164: \"Alt\",\n\t165: \"Alt\",\n\t173: \"-\",\n\t186: \";\",\n\t187: \"=\",\n\t188: \",\",\n\t189: \"-\",\n\t190: \".\",\n\t191: \"/\",\n\t192: \"`\",\n\t219: \"[\",\n\t220: \"\\\\\",\n\t221: \"]\",\n\t222: \"'\"\n};\nvar shift = {\n\t48: \")\",\n\t49: \"!\",\n\t50: \"@\",\n\t51: \"#\",\n\t52: \"$\",\n\t53: \"%\",\n\t54: \"^\",\n\t55: \"&\",\n\t56: \"*\",\n\t57: \"(\",\n\t59: \":\",\n\t61: \"+\",\n\t173: \"_\",\n\t186: \":\",\n\t187: \"+\",\n\t188: \"<\",\n\t189: \"_\",\n\t190: \">\",\n\t191: \"?\",\n\t192: \"~\",\n\t219: \"{\",\n\t220: \"|\",\n\t221: \"}\",\n\t222: \"\\\"\"\n};\nvar mac = typeof navigator != \"undefined\" && /Mac/.test(navigator.platform);\nvar ie$1 = typeof navigator != \"undefined\" && /MSIE \\d|Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(navigator.userAgent);\nfor (var i = 0; i < 10; i++) base[48 + i] = base[96 + i] = String(i);\nfor (var i = 1; i <= 24; i++) base[i + 111] = \"F\" + i;\nfor (var i = 65; i <= 90; i++) {\n\tbase[i] = String.fromCharCode(i + 32);\n\tshift[i] = String.fromCharCode(i);\n}\nfor (var code in base) if (!shift.hasOwnProperty(code)) shift[code] = base[code];\nfunction keyName(event) {\n\tvar name = !(mac && event.metaKey && event.shiftKey && !event.ctrlKey && !event.altKey || ie$1 && event.shiftKey && event.key && event.key.length == 1 || event.key == \"Unidentified\") && event.key || (event.shiftKey ? shift : base)[event.keyCode] || event.key || \"Unidentified\";\n\tif (name == \"Esc\") name = \"Escape\";\n\tif (name == \"Del\") name = \"Delete\";\n\tif (name == \"Left\") name = \"ArrowLeft\";\n\tif (name == \"Up\") name = \"ArrowUp\";\n\tif (name == \"Right\") name = \"ArrowRight\";\n\tif (name == \"Down\") name = \"ArrowDown\";\n\treturn name;\n}\n//#endregion\n//#region ../../node_modules/.pnpm/@codemirror+view@6.36.7/node_modules/@codemirror/view/dist/index.js\nfunction getSelection(root) {\n\tlet target;\n\tif (root.nodeType == 11) target = root.getSelection ? root : root.ownerDocument;\n\telse target = root;\n\treturn target.getSelection();\n}\nfunction contains(dom, node) {\n\treturn node ? dom == node || dom.contains(node.nodeType != 1 ? node.parentNode : node) : false;\n}\nfunction hasSelection(dom, selection) {\n\tif (!selection.anchorNode) return false;\n\ttry {\n\t\treturn contains(dom, selection.anchorNode);\n\t} catch (_) {\n\t\treturn false;\n\t}\n}\nfunction clientRectsFor(dom) {\n\tif (dom.nodeType == 3) return textRange(dom, 0, dom.nodeValue.length).getClientRects();\n\telse if (dom.nodeType == 1) return dom.getClientRects();\n\telse return [];\n}\nfunction isEquivalentPosition(node, off, targetNode, targetOff) {\n\treturn targetNode ? scanFor(node, off, targetNode, targetOff, -1) || scanFor(node, off, targetNode, targetOff, 1) : false;\n}\nfunction domIndex(node) {\n\tfor (var index = 0;; index++) {\n\t\tnode = node.previousSibling;\n\t\tif (!node) return index;\n\t}\n}\nfunction isBlockElement(node) {\n\treturn node.nodeType == 1 && /^(DIV|P|LI|UL|OL|BLOCKQUOTE|DD|DT|H\\d|SECTION|PRE)$/.test(node.nodeName);\n}\nfunction scanFor(node, off, targetNode, targetOff, dir) {\n\tfor (;;) {\n\t\tif (node == targetNode && off == targetOff) return true;\n\t\tif (off == (dir < 0 ? 0 : maxOffset(node))) {\n\t\t\tif (node.nodeName == \"DIV\") return false;\n\t\t\tlet parent = node.parentNode;\n\t\t\tif (!parent || parent.nodeType != 1) return false;\n\t\t\toff = domIndex(node) + (dir < 0 ? 0 : 1);\n\t\t\tnode = parent;\n\t\t} else if (node.nodeType == 1) {\n\t\t\tnode = node.childNodes[off + (dir < 0 ? -1 : 0)];\n\t\t\tif (node.nodeType == 1 && node.contentEditable == \"false\") return false;\n\t\t\toff = dir < 0 ? maxOffset(node) : 0;\n\t\t} else return false;\n\t}\n}\nfunction maxOffset(node) {\n\treturn node.nodeType == 3 ? node.nodeValue.length : node.childNodes.length;\n}\nfunction flattenRect(rect, left) {\n\tlet x = left ? rect.left : rect.right;\n\treturn {\n\t\tleft: x,\n\t\tright: x,\n\t\ttop: rect.top,\n\t\tbottom: rect.bottom\n\t};\n}\nfunction windowRect(win) {\n\tlet vp = win.visualViewport;\n\tif (vp) return {\n\t\tleft: 0,\n\t\tright: vp.width,\n\t\ttop: 0,\n\t\tbottom: vp.height\n\t};\n\treturn {\n\t\tleft: 0,\n\t\tright: win.innerWidth,\n\t\ttop: 0,\n\t\tbottom: win.innerHeight\n\t};\n}\nfunction getScale(elt, rect) {\n\tlet scaleX = rect.width / elt.offsetWidth;\n\tlet scaleY = rect.height / elt.offsetHeight;\n\tif (scaleX > .995 && scaleX < 1.005 || !isFinite(scaleX) || Math.abs(rect.width - elt.offsetWidth) < 1) scaleX = 1;\n\tif (scaleY > .995 && scaleY < 1.005 || !isFinite(scaleY) || Math.abs(rect.height - elt.offsetHeight) < 1) scaleY = 1;\n\treturn {\n\t\tscaleX,\n\t\tscaleY\n\t};\n}\nfunction scrollRectIntoView(dom, rect, side, x, y, xMargin, yMargin, ltr) {\n\tlet doc = dom.ownerDocument, win = doc.defaultView || window;\n\tfor (let cur = dom, stop = false; cur && !stop;) if (cur.nodeType == 1) {\n\t\tlet bounding, top = cur == doc.body;\n\t\tlet scaleX = 1, scaleY = 1;\n\t\tif (top) bounding = windowRect(win);\n\t\telse {\n\t\t\tif (/^(fixed|sticky)$/.test(getComputedStyle(cur).position)) stop = true;\n\t\t\tif (cur.scrollHeight <= cur.clientHeight && cur.scrollWidth <= cur.clientWidth) {\n\t\t\t\tcur = cur.assignedSlot || cur.parentNode;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tlet rect = cur.getBoundingClientRect();\n\t\t\t({scaleX, scaleY} = getScale(cur, rect));\n\t\t\tbounding = {\n\t\t\t\tleft: rect.left,\n\t\t\t\tright: rect.left + cur.clientWidth * scaleX,\n\t\t\t\ttop: rect.top,\n\t\t\t\tbottom: rect.top + cur.clientHeight * scaleY\n\t\t\t};\n\t\t}\n\t\tlet moveX = 0, moveY = 0;\n\t\tif (y == \"nearest\") {\n\t\t\tif (rect.top < bounding.top) {\n\t\t\t\tmoveY = rect.top - (bounding.top + yMargin);\n\t\t\t\tif (side > 0 && rect.bottom > bounding.bottom + moveY) moveY = rect.bottom - bounding.bottom + yMargin;\n\t\t\t} else if (rect.bottom > bounding.bottom) {\n\t\t\t\tmoveY = rect.bottom - bounding.bottom + yMargin;\n\t\t\t\tif (side < 0 && rect.top - moveY < bounding.top) moveY = rect.top - (bounding.top + yMargin);\n\t\t\t}\n\t\t} else {\n\t\t\tlet rectHeight = rect.bottom - rect.top, boundingHeight = bounding.bottom - bounding.top;\n\t\t\tmoveY = (y == \"center\" && rectHeight <= boundingHeight ? rect.top + rectHeight / 2 - boundingHeight / 2 : y == \"start\" || y == \"center\" && side < 0 ? rect.top - yMargin : rect.bottom - boundingHeight + yMargin) - bounding.top;\n\t\t}\n\t\tif (x == \"nearest\") {\n\t\t\tif (rect.left < bounding.left) {\n\t\t\t\tmoveX = rect.left - (bounding.left + xMargin);\n\t\t\t\tif (side > 0 && rect.right > bounding.right + moveX) moveX = rect.right - bounding.right + xMargin;\n\t\t\t} else if (rect.right > bounding.right) {\n\t\t\t\tmoveX = rect.right - bounding.right + xMargin;\n\t\t\t\tif (side < 0 && rect.left < bounding.left + moveX) moveX = rect.left - (bounding.left + xMargin);\n\t\t\t}\n\t\t} else moveX = (x == \"center\" ? rect.left + (rect.right - rect.left) / 2 - (bounding.right - bounding.left) / 2 : x == \"start\" == ltr ? rect.left - xMargin : rect.right - (bounding.right - bounding.left) + xMargin) - bounding.left;\n\t\tif (moveX || moveY) if (top) win.scrollBy(moveX, moveY);\n\t\telse {\n\t\t\tlet movedX = 0, movedY = 0;\n\t\t\tif (moveY) {\n\t\t\t\tlet start = cur.scrollTop;\n\t\t\t\tcur.scrollTop += moveY / scaleY;\n\t\t\t\tmovedY = (cur.scrollTop - start) * scaleY;\n\t\t\t}\n\t\t\tif (moveX) {\n\t\t\t\tlet start = cur.scrollLeft;\n\t\t\t\tcur.scrollLeft += moveX / scaleX;\n\t\t\t\tmovedX = (cur.scrollLeft - start) * scaleX;\n\t\t\t}\n\t\t\trect = {\n\t\t\t\tleft: rect.left - movedX,\n\t\t\t\ttop: rect.top - movedY,\n\t\t\t\tright: rect.right - movedX,\n\t\t\t\tbottom: rect.bottom - movedY\n\t\t\t};\n\t\t\tif (movedX && Math.abs(movedX - moveX) < 1) x = \"nearest\";\n\t\t\tif (movedY && Math.abs(movedY - moveY) < 1) y = \"nearest\";\n\t\t}\n\t\tif (top) break;\n\t\tif (rect.top < bounding.top || rect.bottom > bounding.bottom || rect.left < bounding.left || rect.right > bounding.right) rect = {\n\t\t\tleft: Math.max(rect.left, bounding.left),\n\t\t\tright: Math.min(rect.right, bounding.right),\n\t\t\ttop: Math.max(rect.top, bounding.top),\n\t\t\tbottom: Math.min(rect.bottom, bounding.bottom)\n\t\t};\n\t\tcur = cur.assignedSlot || cur.parentNode;\n\t} else if (cur.nodeType == 11) cur = cur.host;\n\telse break;\n}\nfunction scrollableParents(dom) {\n\tlet doc = dom.ownerDocument, x, y;\n\tfor (let cur = dom.parentNode; cur;) if (cur == doc.body || x && y) break;\n\telse if (cur.nodeType == 1) {\n\t\tif (!y && cur.scrollHeight > cur.clientHeight) y = cur;\n\t\tif (!x && cur.scrollWidth > cur.clientWidth) x = cur;\n\t\tcur = cur.assignedSlot || cur.parentNode;\n\t} else if (cur.nodeType == 11) cur = cur.host;\n\telse break;\n\treturn {\n\t\tx,\n\t\ty\n\t};\n}\nvar DOMSelectionState = class {\n\tconstructor() {\n\t\tthis.anchorNode = null;\n\t\tthis.anchorOffset = 0;\n\t\tthis.focusNode = null;\n\t\tthis.focusOffset = 0;\n\t}\n\teq(domSel) {\n\t\treturn this.anchorNode == domSel.anchorNode && this.anchorOffset == domSel.anchorOffset && this.focusNode == domSel.focusNode && this.focusOffset == domSel.focusOffset;\n\t}\n\tsetRange(range) {\n\t\tlet { anchorNode, focusNode } = range;\n\t\tthis.set(anchorNode, Math.min(range.anchorOffset, anchorNode ? maxOffset(anchorNode) : 0), focusNode, Math.min(range.focusOffset, focusNode ? maxOffset(focusNode) : 0));\n\t}\n\tset(anchorNode, anchorOffset, focusNode, focusOffset) {\n\t\tthis.anchorNode = anchorNode;\n\t\tthis.anchorOffset = anchorOffset;\n\t\tthis.focusNode = focusNode;\n\t\tthis.focusOffset = focusOffset;\n\t}\n};\nlet preventScrollSupported = null;\nfunction focusPreventScroll(dom) {\n\tif (dom.setActive) return dom.setActive();\n\tif (preventScrollSupported) return dom.focus(preventScrollSupported);\n\tlet stack = [];\n\tfor (let cur = dom; cur; cur = cur.parentNode) {\n\t\tstack.push(cur, cur.scrollTop, cur.scrollLeft);\n\t\tif (cur == cur.ownerDocument) break;\n\t}\n\tdom.focus(preventScrollSupported == null ? { get preventScroll() {\n\t\tpreventScrollSupported = { preventScroll: true };\n\t\treturn true;\n\t} } : void 0);\n\tif (!preventScrollSupported) {\n\t\tpreventScrollSupported = false;\n\t\tfor (let i = 0; i < stack.length;) {\n\t\t\tlet elt = stack[i++], top = stack[i++], left = stack[i++];\n\t\t\tif (elt.scrollTop != top) elt.scrollTop = top;\n\t\t\tif (elt.scrollLeft != left) elt.scrollLeft = left;\n\t\t}\n\t}\n}\nlet scratchRange;\nfunction textRange(node, from, to = from) {\n\tlet range = scratchRange || (scratchRange = document.createRange());\n\trange.setEnd(node, to);\n\trange.setStart(node, from);\n\treturn range;\n}\nfunction dispatchKey(elt, name, code, mods) {\n\tlet options = {\n\t\tkey: name,\n\t\tcode: name,\n\t\tkeyCode: code,\n\t\twhich: code,\n\t\tcancelable: true\n\t};\n\tif (mods) ({altKey: options.altKey, ctrlKey: options.ctrlKey, shiftKey: options.shiftKey, metaKey: options.metaKey} = mods);\n\tlet down = new KeyboardEvent(\"keydown\", options);\n\tdown.synthetic = true;\n\telt.dispatchEvent(down);\n\tlet up = new KeyboardEvent(\"keyup\", options);\n\tup.synthetic = true;\n\telt.dispatchEvent(up);\n\treturn down.defaultPrevented || up.defaultPrevented;\n}\nfunction getRoot(node) {\n\twhile (node) {\n\t\tif (node && (node.nodeType == 9 || node.nodeType == 11 && node.host)) return node;\n\t\tnode = node.assignedSlot || node.parentNode;\n\t}\n\treturn null;\n}\nfunction clearAttributes(node) {\n\twhile (node.attributes.length) node.removeAttributeNode(node.attributes[0]);\n}\nfunction atElementStart(doc, selection) {\n\tlet node = selection.focusNode, offset = selection.focusOffset;\n\tif (!node || selection.anchorNode != node || selection.anchorOffset != offset) return false;\n\toffset = Math.min(offset, maxOffset(node));\n\tfor (;;) if (offset) {\n\t\tif (node.nodeType != 1) return false;\n\t\tlet prev = node.childNodes[offset - 1];\n\t\tif (prev.contentEditable == \"false\") offset--;\n\t\telse {\n\t\t\tnode = prev;\n\t\t\toffset = maxOffset(node);\n\t\t}\n\t} else if (node == doc) return true;\n\telse {\n\t\toffset = domIndex(node);\n\t\tnode = node.parentNode;\n\t}\n}\nfunction isScrolledToBottom(elt) {\n\treturn elt.scrollTop > Math.max(1, elt.scrollHeight - elt.clientHeight - 4);\n}\nfunction textNodeBefore(startNode, startOffset) {\n\tfor (let node = startNode, offset = startOffset;;) if (node.nodeType == 3 && offset > 0) return {\n\t\tnode,\n\t\toffset\n\t};\n\telse if (node.nodeType == 1 && offset > 0) {\n\t\tif (node.contentEditable == \"false\") return null;\n\t\tnode = node.childNodes[offset - 1];\n\t\toffset = maxOffset(node);\n\t} else if (node.parentNode && !isBlockElement(node)) {\n\t\toffset = domIndex(node);\n\t\tnode = node.parentNode;\n\t} else return null;\n}\nfunction textNodeAfter(startNode, startOffset) {\n\tfor (let node = startNode, offset = startOffset;;) if (node.nodeType == 3 && offset < node.nodeValue.length) return {\n\t\tnode,\n\t\toffset\n\t};\n\telse if (node.nodeType == 1 && offset < node.childNodes.length) {\n\t\tif (node.contentEditable == \"false\") return null;\n\t\tnode = node.childNodes[offset];\n\t\toffset = 0;\n\t} else if (node.parentNode && !isBlockElement(node)) {\n\t\toffset = domIndex(node) + 1;\n\t\tnode = node.parentNode;\n\t} else return null;\n}\nvar DOMPos = class DOMPos {\n\tconstructor(node, offset, precise = true) {\n\t\tthis.node = node;\n\t\tthis.offset = offset;\n\t\tthis.precise = precise;\n\t}\n\tstatic before(dom, precise) {\n\t\treturn new DOMPos(dom.parentNode, domIndex(dom), precise);\n\t}\n\tstatic after(dom, precise) {\n\t\treturn new DOMPos(dom.parentNode, domIndex(dom) + 1, precise);\n\t}\n};\nconst noChildren = [];\nvar ContentView = class ContentView {\n\tconstructor() {\n\t\tthis.parent = null;\n\t\tthis.dom = null;\n\t\tthis.flags = 2;\n\t}\n\tget overrideDOMText() {\n\t\treturn null;\n\t}\n\tget posAtStart() {\n\t\treturn this.parent ? this.parent.posBefore(this) : 0;\n\t}\n\tget posAtEnd() {\n\t\treturn this.posAtStart + this.length;\n\t}\n\tposBefore(view) {\n\t\tlet pos = this.posAtStart;\n\t\tfor (let child of this.children) {\n\t\t\tif (child == view) return pos;\n\t\t\tpos += child.length + child.breakAfter;\n\t\t}\n\t\tthrow new RangeError(\"Invalid child in posBefore\");\n\t}\n\tposAfter(view) {\n\t\treturn this.posBefore(view) + view.length;\n\t}\n\tsync(view, track) {\n\t\tif (this.flags & 2) {\n\t\t\tlet parent = this.dom;\n\t\t\tlet prev = null, next;\n\t\t\tfor (let child of this.children) {\n\t\t\t\tif (child.flags & 7) {\n\t\t\t\t\tif (!child.dom && (next = prev ? prev.nextSibling : parent.firstChild)) {\n\t\t\t\t\t\tlet contentView = ContentView.get(next);\n\t\t\t\t\t\tif (!contentView || !contentView.parent && contentView.canReuseDOM(child)) child.reuseDOM(next);\n\t\t\t\t\t}\n\t\t\t\t\tchild.sync(view, track);\n\t\t\t\t\tchild.flags &= -8;\n\t\t\t\t}\n\t\t\t\tnext = prev ? prev.nextSibling : parent.firstChild;\n\t\t\t\tif (track && !track.written && track.node == parent && next != child.dom) track.written = true;\n\t\t\t\tif (child.dom.parentNode == parent) while (next && next != child.dom) next = rm$1(next);\n\t\t\t\telse parent.insertBefore(child.dom, next);\n\t\t\t\tprev = child.dom;\n\t\t\t}\n\t\t\tnext = prev ? prev.nextSibling : parent.firstChild;\n\t\t\tif (next && track && track.node == parent) track.written = true;\n\t\t\twhile (next) next = rm$1(next);\n\t\t} else if (this.flags & 1) {\n\t\t\tfor (let child of this.children) if (child.flags & 7) {\n\t\t\t\tchild.sync(view, track);\n\t\t\t\tchild.flags &= -8;\n\t\t\t}\n\t\t}\n\t}\n\treuseDOM(_dom) {}\n\tlocalPosFromDOM(node, offset) {\n\t\tlet after;\n\t\tif (node == this.dom) after = this.dom.childNodes[offset];\n\t\telse {\n\t\t\tlet bias = maxOffset(node) == 0 ? 0 : offset == 0 ? -1 : 1;\n\t\t\tfor (;;) {\n\t\t\t\tlet parent = node.parentNode;\n\t\t\t\tif (parent == this.dom) break;\n\t\t\t\tif (bias == 0 && parent.firstChild != parent.lastChild) if (node == parent.firstChild) bias = -1;\n\t\t\t\telse bias = 1;\n\t\t\t\tnode = parent;\n\t\t\t}\n\t\t\tif (bias < 0) after = node;\n\t\t\telse after = node.nextSibling;\n\t\t}\n\t\tif (after == this.dom.firstChild) return 0;\n\t\twhile (after && !ContentView.get(after)) after = after.nextSibling;\n\t\tif (!after) return this.length;\n\t\tfor (let i = 0, pos = 0;; i++) {\n\t\t\tlet child = this.children[i];\n\t\t\tif (child.dom == after) return pos;\n\t\t\tpos += child.length + child.breakAfter;\n\t\t}\n\t}\n\tdomBoundsAround(from, to, offset = 0) {\n\t\tlet fromI = -1, fromStart = -1, toI = -1, toEnd = -1;\n\t\tfor (let i = 0, pos = offset, prevEnd = offset; i < this.children.length; i++) {\n\t\t\tlet child = this.children[i], end = pos + child.length;\n\t\t\tif (pos < from && end > to) return child.domBoundsAround(from, to, pos);\n\t\t\tif (end >= from && fromI == -1) {\n\t\t\t\tfromI = i;\n\t\t\t\tfromStart = pos;\n\t\t\t}\n\t\t\tif (pos > to && child.dom.parentNode == this.dom) {\n\t\t\t\ttoI = i;\n\t\t\t\ttoEnd = prevEnd;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tprevEnd = end;\n\t\t\tpos = end + child.breakAfter;\n\t\t}\n\t\treturn {\n\t\t\tfrom: fromStart,\n\t\t\tto: toEnd < 0 ? offset + this.length : toEnd,\n\t\t\tstartDOM: (fromI ? this.children[fromI - 1].dom.nextSibling : null) || this.dom.firstChild,\n\t\t\tendDOM: toI < this.children.length && toI >= 0 ? this.children[toI].dom : null\n\t\t};\n\t}\n\tmarkDirty(andParent = false) {\n\t\tthis.flags |= 2;\n\t\tthis.markParentsDirty(andParent);\n\t}\n\tmarkParentsDirty(childList) {\n\t\tfor (let parent = this.parent; parent; parent = parent.parent) {\n\t\t\tif (childList) parent.flags |= 2;\n\t\t\tif (parent.flags & 1) return;\n\t\t\tparent.flags |= 1;\n\t\t\tchildList = false;\n\t\t}\n\t}\n\tsetParent(parent) {\n\t\tif (this.parent != parent) {\n\t\t\tthis.parent = parent;\n\t\t\tif (this.flags & 7) this.markParentsDirty(true);\n\t\t}\n\t}\n\tsetDOM(dom) {\n\t\tif (this.dom == dom) return;\n\t\tif (this.dom) this.dom.cmView = null;\n\t\tthis.dom = dom;\n\t\tdom.cmView = this;\n\t}\n\tget rootView() {\n\t\tfor (let v = this;;) {\n\t\t\tlet parent = v.parent;\n\t\t\tif (!parent) return v;\n\t\t\tv = parent;\n\t\t}\n\t}\n\treplaceChildren(from, to, children = noChildren) {\n\t\tthis.markDirty();\n\t\tfor (let i = from; i < to; i++) {\n\t\t\tlet child = this.children[i];\n\t\t\tif (child.parent == this && children.indexOf(child) < 0) child.destroy();\n\t\t}\n\t\tif (children.length < 250) this.children.splice(from, to - from, ...children);\n\t\telse this.children = [].concat(this.children.slice(0, from), children, this.children.slice(to));\n\t\tfor (let i = 0; i < children.length; i++) children[i].setParent(this);\n\t}\n\tignoreMutation(_rec) {\n\t\treturn false;\n\t}\n\tignoreEvent(_event) {\n\t\treturn false;\n\t}\n\tchildCursor(pos = this.length) {\n\t\treturn new ChildCursor(this.children, pos, this.children.length);\n\t}\n\tchildPos(pos, bias = 1) {\n\t\treturn this.childCursor().findPos(pos, bias);\n\t}\n\ttoString() {\n\t\tlet name = this.constructor.name.replace(\"View\", \"\");\n\t\treturn name + (this.children.length ? \"(\" + this.children.join() + \")\" : this.length ? \"[\" + (name == \"Text\" ? this.text : this.length) + \"]\" : \"\") + (this.breakAfter ? \"#\" : \"\");\n\t}\n\tstatic get(node) {\n\t\treturn node.cmView;\n\t}\n\tget isEditable() {\n\t\treturn true;\n\t}\n\tget isWidget() {\n\t\treturn false;\n\t}\n\tget isHidden() {\n\t\treturn false;\n\t}\n\tmerge(from, to, source, hasStart, openStart, openEnd) {\n\t\treturn false;\n\t}\n\tbecome(other) {\n\t\treturn false;\n\t}\n\tcanReuseDOM(other) {\n\t\treturn other.constructor == this.constructor && !((this.flags | other.flags) & 8);\n\t}\n\tgetSide() {\n\t\treturn 0;\n\t}\n\tdestroy() {\n\t\tfor (let child of this.children) if (child.parent == this) child.destroy();\n\t\tthis.parent = null;\n\t}\n};\nContentView.prototype.breakAfter = 0;\nfunction rm$1(dom) {\n\tlet next = dom.nextSibling;\n\tdom.parentNode.removeChild(dom);\n\treturn next;\n}\nvar ChildCursor = class {\n\tconstructor(children, pos, i) {\n\t\tthis.children = children;\n\t\tthis.pos = pos;\n\t\tthis.i = i;\n\t\tthis.off = 0;\n\t}\n\tfindPos(pos, bias = 1) {\n\t\tfor (;;) {\n\t\t\tif (pos > this.pos || pos == this.pos && (bias > 0 || this.i == 0 || this.children[this.i - 1].breakAfter)) {\n\t\t\t\tthis.off = pos - this.pos;\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\tlet next = this.children[--this.i];\n\t\t\tthis.pos -= next.length + next.breakAfter;\n\t\t}\n\t}\n};\nfunction replaceRange(parent, fromI, fromOff, toI, toOff, insert, breakAtStart, openStart, openEnd) {\n\tlet { children } = parent;\n\tlet before = children.length ? children[fromI] : null;\n\tlet last = insert.length ? insert[insert.length - 1] : null;\n\tlet breakAtEnd = last ? last.breakAfter : breakAtStart;\n\tif (fromI == toI && before && !breakAtStart && !breakAtEnd && insert.length < 2 && before.merge(fromOff, toOff, insert.length ? last : null, fromOff == 0, openStart, openEnd)) return;\n\tif (toI < children.length) {\n\t\tlet after = children[toI];\n\t\tif (after && (toOff < after.length || after.breakAfter && (last === null || last === void 0 ? void 0 : last.breakAfter))) {\n\t\t\tif (fromI == toI) {\n\t\t\t\tafter = after.split(toOff);\n\t\t\t\ttoOff = 0;\n\t\t\t}\n\t\t\tif (!breakAtEnd && last && after.merge(0, toOff, last, true, 0, openEnd)) insert[insert.length - 1] = after;\n\t\t\telse {\n\t\t\t\tif (toOff || after.children.length && !after.children[0].length) after.merge(0, toOff, null, false, 0, openEnd);\n\t\t\t\tinsert.push(after);\n\t\t\t}\n\t\t} else if (after === null || after === void 0 ? void 0 : after.breakAfter) if (last) last.breakAfter = 1;\n\t\telse breakAtStart = 1;\n\t\ttoI++;\n\t}\n\tif (before) {\n\t\tbefore.breakAfter = breakAtStart;\n\t\tif (fromOff > 0) {\n\t\t\tif (!breakAtStart && insert.length && before.merge(fromOff, before.length, insert[0], false, openStart, 0)) before.breakAfter = insert.shift().breakAfter;\n\t\t\telse if (fromOff < before.length || before.children.length && before.children[before.children.length - 1].length == 0) before.merge(fromOff, before.length, null, false, openStart, 0);\n\t\t\tfromI++;\n\t\t}\n\t}\n\twhile (fromI < toI && insert.length) if (children[toI - 1].become(insert[insert.length - 1])) {\n\t\ttoI--;\n\t\tinsert.pop();\n\t\topenEnd = insert.length ? 0 : openStart;\n\t} else if (children[fromI].become(insert[0])) {\n\t\tfromI++;\n\t\tinsert.shift();\n\t\topenStart = insert.length ? 0 : openEnd;\n\t} else break;\n\tif (!insert.length && fromI && toI < children.length && !children[fromI - 1].breakAfter && children[toI].merge(0, 0, children[fromI - 1], false, openStart, openEnd)) fromI--;\n\tif (fromI < toI || insert.length) parent.replaceChildren(fromI, toI, insert);\n}\nfunction mergeChildrenInto(parent, from, to, insert, openStart, openEnd) {\n\tlet cur = parent.childCursor();\n\tlet { i: toI, off: toOff } = cur.findPos(to, 1);\n\tlet { i: fromI, off: fromOff } = cur.findPos(from, -1);\n\tlet dLen = from - to;\n\tfor (let view of insert) dLen += view.length;\n\tparent.length += dLen;\n\treplaceRange(parent, fromI, fromOff, toI, toOff, insert, 0, openStart, openEnd);\n}\nlet nav = typeof navigator != \"undefined\" ? navigator : {\n\tuserAgent: \"\",\n\tvendor: \"\",\n\tplatform: \"\"\n};\nlet doc = typeof document != \"undefined\" ? document : { documentElement: { style: {} } };\nconst ie_edge = /* @__PURE__ */ /Edge\\/(\\d+)/.exec(nav.userAgent);\nconst ie_upto10 = /* @__PURE__ */ /MSIE \\d/.test(nav.userAgent);\nconst ie_11up = /* @__PURE__ */ /Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(nav.userAgent);\nconst ie = !!(ie_upto10 || ie_11up || ie_edge);\nconst gecko = !ie && /* @__PURE__ */ /gecko\\/(\\d+)/i.test(nav.userAgent);\nconst chrome = !ie && /* @__PURE__ */ /Chrome\\/(\\d+)/.exec(nav.userAgent);\nconst webkit = \"webkitFontSmoothing\" in doc.documentElement.style;\nconst safari = !ie && /* @__PURE__ */ /Apple Computer/.test(nav.vendor);\nconst ios = safari && (/* @__PURE__ */ /Mobile\\/\\w+/.test(nav.userAgent) || nav.maxTouchPoints > 2);\nvar browser = {\n\tmac: ios || /* @__PURE__ */ /Mac/.test(nav.platform),\n\twindows: /* @__PURE__ */ /Win/.test(nav.platform),\n\tlinux: /* @__PURE__ */ /Linux|X11/.test(nav.platform),\n\tie,\n\tie_version: ie_upto10 ? doc.documentMode || 6 : ie_11up ? +ie_11up[1] : ie_edge ? +ie_edge[1] : 0,\n\tgecko,\n\tgecko_version: gecko ? +(/* @__PURE__ */ /Firefox\\/(\\d+)/.exec(nav.userAgent) || [0, 0])[1] : 0,\n\tchrome: !!chrome,\n\tchrome_version: chrome ? +chrome[1] : 0,\n\tios,\n\tandroid: /* @__PURE__ */ /Android\\b/.test(nav.userAgent),\n\twebkit,\n\tsafari,\n\twebkit_version: webkit ? +(/* @__PURE__ */ /\\bAppleWebKit\\/(\\d+)/.exec(nav.userAgent) || [0, 0])[1] : 0,\n\ttabSize: doc.documentElement.style.tabSize != null ? \"tab-size\" : \"-moz-tab-size\"\n};\nconst MaxJoinLen = 256;\nvar TextView = class TextView extends ContentView {\n\tconstructor(text) {\n\t\tsuper();\n\t\tthis.text = text;\n\t}\n\tget length() {\n\t\treturn this.text.length;\n\t}\n\tcreateDOM(textDOM) {\n\t\tthis.setDOM(textDOM || document.createTextNode(this.text));\n\t}\n\tsync(view, track) {\n\t\tif (!this.dom) this.createDOM();\n\t\tif (this.dom.nodeValue != this.text) {\n\t\t\tif (track && track.node == this.dom) track.written = true;\n\t\t\tthis.dom.nodeValue = this.text;\n\t\t}\n\t}\n\treuseDOM(dom) {\n\t\tif (dom.nodeType == 3) this.createDOM(dom);\n\t}\n\tmerge(from, to, source) {\n\t\tif (this.flags & 8 || source && (!(source instanceof TextView) || this.length - (to - from) + source.length > MaxJoinLen || source.flags & 8)) return false;\n\t\tthis.text = this.text.slice(0, from) + (source ? source.text : \"\") + this.text.slice(to);\n\t\tthis.markDirty();\n\t\treturn true;\n\t}\n\tsplit(from) {\n\t\tlet result = new TextView(this.text.slice(from));\n\t\tthis.text = this.text.slice(0, from);\n\t\tthis.markDirty();\n\t\tresult.flags |= this.flags & 8;\n\t\treturn result;\n\t}\n\tlocalPosFromDOM(node, offset) {\n\t\treturn node == this.dom ? offset : offset ? this.text.length : 0;\n\t}\n\tdomAtPos(pos) {\n\t\treturn new DOMPos(this.dom, pos);\n\t}\n\tdomBoundsAround(_from, _to, offset) {\n\t\treturn {\n\t\t\tfrom: offset,\n\t\t\tto: offset + this.length,\n\t\t\tstartDOM: this.dom,\n\t\t\tendDOM: this.dom.nextSibling\n\t\t};\n\t}\n\tcoordsAt(pos, side) {\n\t\treturn textCoords(this.dom, pos, side);\n\t}\n};\nvar MarkView = class MarkView extends ContentView {\n\tconstructor(mark, children = [], length = 0) {\n\t\tsuper();\n\t\tthis.mark = mark;\n\t\tthis.children = children;\n\t\tthis.length = length;\n\t\tfor (let ch of children) ch.setParent(this);\n\t}\n\tsetAttrs(dom) {\n\t\tclearAttributes(dom);\n\t\tif (this.mark.class) dom.className = this.mark.class;\n\t\tif (this.mark.attrs) for (let name in this.mark.attrs) dom.setAttribute(name, this.mark.attrs[name]);\n\t\treturn dom;\n\t}\n\tcanReuseDOM(other) {\n\t\treturn super.canReuseDOM(other) && !((this.flags | other.flags) & 8);\n\t}\n\treuseDOM(node) {\n\t\tif (node.nodeName == this.mark.tagName.toUpperCase()) {\n\t\t\tthis.setDOM(node);\n\t\t\tthis.flags |= 6;\n\t\t}\n\t}\n\tsync(view, track) {\n\t\tif (!this.dom) this.setDOM(this.setAttrs(document.createElement(this.mark.tagName)));\n\t\telse if (this.flags & 4) this.setAttrs(this.dom);\n\t\tsuper.sync(view, track);\n\t}\n\tmerge(from, to, source, _hasStart, openStart, openEnd) {\n\t\tif (source && (!(source instanceof MarkView && source.mark.eq(this.mark)) || from && openStart <= 0 || to < this.length && openEnd <= 0)) return false;\n\t\tmergeChildrenInto(this, from, to, source ? source.children.slice() : [], openStart - 1, openEnd - 1);\n\t\tthis.markDirty();\n\t\treturn true;\n\t}\n\tsplit(from) {\n\t\tlet result = [], off = 0, detachFrom = -1, i = 0;\n\t\tfor (let elt of this.children) {\n\t\t\tlet end = off + elt.length;\n\t\t\tif (end > from) result.push(off < from ? elt.split(from - off) : elt);\n\t\t\tif (detachFrom < 0 && off >= from) detachFrom = i;\n\t\t\toff = end;\n\t\t\ti++;\n\t\t}\n\t\tlet length = this.length - from;\n\t\tthis.length = from;\n\t\tif (detachFrom > -1) {\n\t\t\tthis.children.length = detachFrom;\n\t\t\tthis.markDirty();\n\t\t}\n\t\treturn new MarkView(this.mark, result, length);\n\t}\n\tdomAtPos(pos) {\n\t\treturn inlineDOMAtPos(this, pos);\n\t}\n\tcoordsAt(pos, side) {\n\t\treturn coordsInChildren(this, pos, side);\n\t}\n};\nfunction textCoords(text, pos, side) {\n\tlet length = text.nodeValue.length;\n\tif (pos > length) pos = length;\n\tlet from = pos, to = pos, flatten = 0;\n\tif (pos == 0 && side < 0 || pos == length && side >= 0) {\n\t\tif (!(browser.chrome || browser.gecko)) {\n\t\t\tif (pos) {\n\t\t\t\tfrom--;\n\t\t\t\tflatten = 1;\n\t\t\t} else if (to < length) {\n\t\t\t\tto++;\n\t\t\t\tflatten = -1;\n\t\t\t}\n\t\t}\n\t} else if (side < 0) from--;\n\telse if (to < length) to++;\n\tlet rects = textRange(text, from, to).getClientRects();\n\tif (!rects.length) return null;\n\tlet rect = rects[(flatten ? flatten < 0 : side >= 0) ? 0 : rects.length - 1];\n\tif (browser.safari && !flatten && rect.width == 0) rect = Array.prototype.find.call(rects, (r) => r.width) || rect;\n\treturn flatten ? flattenRect(rect, flatten < 0) : rect || null;\n}\nvar WidgetView = class WidgetView extends ContentView {\n\tstatic create(widget, length, side) {\n\t\treturn new WidgetView(widget, length, side);\n\t}\n\tconstructor(widget, length, side) {\n\t\tsuper();\n\t\tthis.widget = widget;\n\t\tthis.length = length;\n\t\tthis.side = side;\n\t\tthis.prevWidget = null;\n\t}\n\tsplit(from) {\n\t\tlet result = WidgetView.create(this.widget, this.length - from, this.side);\n\t\tthis.length -= from;\n\t\treturn result;\n\t}\n\tsync(view) {\n\t\tif (!this.dom || !this.widget.updateDOM(this.dom, view)) {\n\t\t\tif (this.dom && this.prevWidget) this.prevWidget.destroy(this.dom);\n\t\t\tthis.prevWidget = null;\n\t\t\tthis.setDOM(this.widget.toDOM(view));\n\t\t\tif (!this.widget.editable) this.dom.contentEditable = \"false\";\n\t\t}\n\t}\n\tgetSide() {\n\t\treturn this.side;\n\t}\n\tmerge(from, to, source, hasStart, openStart, openEnd) {\n\t\tif (source && (!(source instanceof WidgetView) || !this.widget.compare(source.widget) || from > 0 && openStart <= 0 || to < this.length && openEnd <= 0)) return false;\n\t\tthis.length = from + (source ? source.length : 0) + (this.length - to);\n\t\treturn true;\n\t}\n\tbecome(other) {\n\t\tif (other instanceof WidgetView && other.side == this.side && this.widget.constructor == other.widget.constructor) {\n\t\t\tif (!this.widget.compare(other.widget)) this.markDirty(true);\n\t\t\tif (this.dom && !this.prevWidget) this.prevWidget = this.widget;\n\t\t\tthis.widget = other.widget;\n\t\t\tthis.length = other.length;\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\tignoreMutation() {\n\t\treturn true;\n\t}\n\tignoreEvent(event) {\n\t\treturn this.widget.ignoreEvent(event);\n\t}\n\tget overrideDOMText() {\n\t\tif (this.length == 0) return Text.empty;\n\t\tlet top = this;\n\t\twhile (top.parent) top = top.parent;\n\t\tlet { view } = top, text = view && view.state.doc, start = this.posAtStart;\n\t\treturn text ? text.slice(start, start + this.length) : Text.empty;\n\t}\n\tdomAtPos(pos) {\n\t\treturn (this.length ? pos == 0 : this.side > 0) ? DOMPos.before(this.dom) : DOMPos.after(this.dom, pos == this.length);\n\t}\n\tdomBoundsAround() {\n\t\treturn null;\n\t}\n\tcoordsAt(pos, side) {\n\t\tlet custom = this.widget.coordsAt(this.dom, pos, side);\n\t\tif (custom) return custom;\n\t\tlet rects = this.dom.getClientRects(), rect = null;\n\t\tif (!rects.length) return null;\n\t\tlet fromBack = this.side ? this.side < 0 : pos > 0;\n\t\tfor (let i = fromBack ? rects.length - 1 : 0;; i += fromBack ? -1 : 1) {\n\t\t\trect = rects[i];\n\t\t\tif (pos > 0 ? i == 0 : i == rects.length - 1 || rect.top < rect.bottom) break;\n\t\t}\n\t\treturn flattenRect(rect, !fromBack);\n\t}\n\tget isEditable() {\n\t\treturn false;\n\t}\n\tget isWidget() {\n\t\treturn true;\n\t}\n\tget isHidden() {\n\t\treturn this.widget.isHidden;\n\t}\n\tdestroy() {\n\t\tsuper.destroy();\n\t\tif (this.dom) this.widget.destroy(this.dom);\n\t}\n};\nvar WidgetBufferView = class WidgetBufferView extends ContentView {\n\tconstructor(side) {\n\t\tsuper();\n\t\tthis.side = side;\n\t}\n\tget length() {\n\t\treturn 0;\n\t}\n\tmerge() {\n\t\treturn false;\n\t}\n\tbecome(other) {\n\t\treturn other instanceof WidgetBufferView && other.side == this.side;\n\t}\n\tsplit() {\n\t\treturn new WidgetBufferView(this.side);\n\t}\n\tsync() {\n\t\tif (!this.dom) {\n\t\t\tlet dom = document.createElement(\"img\");\n\t\t\tdom.className = \"cm-widgetBuffer\";\n\t\t\tdom.setAttribute(\"aria-hidden\", \"true\");\n\t\t\tthis.setDOM(dom);\n\t\t}\n\t}\n\tgetSide() {\n\t\treturn this.side;\n\t}\n\tdomAtPos(pos) {\n\t\treturn this.side > 0 ? DOMPos.before(this.dom) : DOMPos.after(this.dom);\n\t}\n\tlocalPosFromDOM() {\n\t\treturn 0;\n\t}\n\tdomBoundsAround() {\n\t\treturn null;\n\t}\n\tcoordsAt(pos) {\n\t\treturn this.dom.getBoundingClientRect();\n\t}\n\tget overrideDOMText() {\n\t\treturn Text.empty;\n\t}\n\tget isHidden() {\n\t\treturn true;\n\t}\n};\nTextView.prototype.children = WidgetView.prototype.children = WidgetBufferView.prototype.children = noChildren;\nfunction inlineDOMAtPos(parent, pos) {\n\tlet dom = parent.dom, { children } = parent, i = 0;\n\tfor (let off = 0; i < children.length; i++) {\n\t\tlet child = children[i], end = off + child.length;\n\t\tif (end == off && child.getSide() <= 0) continue;\n\t\tif (pos > off && pos < end && child.dom.parentNode == dom) return child.domAtPos(pos - off);\n\t\tif (pos <= off) break;\n\t\toff = end;\n\t}\n\tfor (let j = i; j > 0; j--) {\n\t\tlet prev = children[j - 1];\n\t\tif (prev.dom.parentNode == dom) return prev.domAtPos(prev.length);\n\t}\n\tfor (let j = i; j < children.length; j++) {\n\t\tlet next = children[j];\n\t\tif (next.dom.parentNode == dom) return next.domAtPos(0);\n\t}\n\treturn new DOMPos(dom, 0);\n}\nfunction joinInlineInto(parent, view, open) {\n\tlet last, { children } = parent;\n\tif (open > 0 && view instanceof MarkView && children.length && (last = children[children.length - 1]) instanceof MarkView && last.mark.eq(view.mark)) joinInlineInto(last, view.children[0], open - 1);\n\telse {\n\t\tchildren.push(view);\n\t\tview.setParent(parent);\n\t}\n\tparent.length += view.length;\n}\nfunction coordsInChildren(view, pos, side) {\n\tlet before = null, beforePos = -1, after = null, afterPos = -1;\n\tfunction scan(view, pos) {\n\t\tfor (let i = 0, off = 0; i < view.children.length && off <= pos; i++) {\n\t\t\tlet child = view.children[i], end = off + child.length;\n\t\t\tif (end >= pos) {\n\t\t\t\tif (child.children.length) scan(child, pos - off);\n\t\t\t\telse if ((!after || after.isHidden && (side > 0 || onSameLine(after, child))) && (end > pos || off == end && child.getSide() > 0)) {\n\t\t\t\t\tafter = child;\n\t\t\t\t\tafterPos = pos - off;\n\t\t\t\t} else if (off < pos || off == end && child.getSide() < 0 && !child.isHidden) {\n\t\t\t\t\tbefore = child;\n\t\t\t\t\tbeforePos = pos - off;\n\t\t\t\t}\n\t\t\t}\n\t\t\toff = end;\n\t\t}\n\t}\n\tscan(view, pos);\n\tlet target = (side < 0 ? before : after) || before || after;\n\tif (target) return target.coordsAt(Math.max(0, target == before ? beforePos : afterPos), side);\n\treturn fallbackRect(view);\n}\nfunction fallbackRect(view) {\n\tlet last = view.dom.lastChild;\n\tif (!last) return view.dom.getBoundingClientRect();\n\tlet rects = clientRectsFor(last);\n\treturn rects[rects.length - 1] || null;\n}\nfunction onSameLine(a, b) {\n\tlet posA = a.coordsAt(0, 1), posB = b.coordsAt(0, 1);\n\treturn posA && posB && posB.top < posA.bottom;\n}\nfunction combineAttrs(source, target) {\n\tfor (let name in source) if (name == \"class\" && target.class) target.class += \" \" + source.class;\n\telse if (name == \"style\" && target.style) target.style += \";\" + source.style;\n\telse target[name] = source[name];\n\treturn target;\n}\nconst noAttrs$1 = /* @__PURE__ */ Object.create(null);\nfunction attrsEq(a, b, ignore) {\n\tif (a == b) return true;\n\tif (!a) a = noAttrs$1;\n\tif (!b) b = noAttrs$1;\n\tlet keysA = Object.keys(a), keysB = Object.keys(b);\n\tif (keysA.length - (ignore && keysA.indexOf(ignore) > -1 ? 1 : 0) != keysB.length - (ignore && keysB.indexOf(ignore) > -1 ? 1 : 0)) return false;\n\tfor (let key of keysA) if (key != ignore && (keysB.indexOf(key) == -1 || a[key] !== b[key])) return false;\n\treturn true;\n}\nfunction updateAttrs(dom, prev, attrs) {\n\tlet changed = false;\n\tif (prev) {\n\t\tfor (let name in prev) if (!(attrs && name in attrs)) {\n\t\t\tchanged = true;\n\t\t\tif (name == \"style\") dom.style.cssText = \"\";\n\t\t\telse dom.removeAttribute(name);\n\t\t}\n\t}\n\tif (attrs) {\n\t\tfor (let name in attrs) if (!(prev && prev[name] == attrs[name])) {\n\t\t\tchanged = true;\n\t\t\tif (name == \"style\") dom.style.cssText = attrs[name];\n\t\t\telse dom.setAttribute(name, attrs[name]);\n\t\t}\n\t}\n\treturn changed;\n}\nfunction getAttrs(dom) {\n\tlet attrs = Object.create(null);\n\tfor (let i = 0; i < dom.attributes.length; i++) {\n\t\tlet attr = dom.attributes[i];\n\t\tattrs[attr.name] = attr.value;\n\t}\n\treturn attrs;\n}\n/**\nWidgets added to the content are described by subclasses of this\nclass. Using a description object like that makes it possible to\ndelay creating of the DOM structure for a widget until it is\nneeded, and to avoid redrawing widgets even if the decorations\nthat define them are recreated.\n*/\nvar WidgetType = class {\n\t/**\n\tCompare this instance to another instance of the same type.\n\t(TypeScript can't express this, but only instances of the same\n\tspecific class will be passed to this method.) This is used to\n\tavoid redrawing widgets when they are replaced by a new\n\tdecoration of the same type. The default implementation just\n\treturns `false`, which will cause new instances of the widget to\n\talways be redrawn.\n\t*/\n\teq(widget) {\n\t\treturn false;\n\t}\n\t/**\n\tUpdate a DOM element created by a widget of the same type (but\n\tdifferent, non-`eq` content) to reflect this widget. May return\n\ttrue to indicate that it could update, false to indicate it\n\tcouldn't (in which case the widget will be redrawn). The default\n\timplementation just returns false.\n\t*/\n\tupdateDOM(dom, view) {\n\t\treturn false;\n\t}\n\t/**\n\t@internal\n\t*/\n\tcompare(other) {\n\t\treturn this == other || this.constructor == other.constructor && this.eq(other);\n\t}\n\t/**\n\tThe estimated height this widget will have, to be used when\n\testimating the height of content that hasn't been drawn. May\n\treturn -1 to indicate you don't know. The default implementation\n\treturns -1.\n\t*/\n\tget estimatedHeight() {\n\t\treturn -1;\n\t}\n\t/**\n\tFor inline widgets that are displayed inline (as opposed to\n\t`inline-block`) and introduce line breaks (through `<br>` tags\n\tor textual newlines), this must indicate the amount of line\n\tbreaks they introduce. Defaults to 0.\n\t*/\n\tget lineBreaks() {\n\t\treturn 0;\n\t}\n\t/**\n\tCan be used to configure which kinds of events inside the widget\n\tshould be ignored by the editor. The default is to ignore all\n\tevents.\n\t*/\n\tignoreEvent(event) {\n\t\treturn true;\n\t}\n\t/**\n\tOverride the way screen coordinates for positions at/in the\n\twidget are found. `pos` will be the offset into the widget, and\n\t`side` the side of the position that is being queried—less than\n\tzero for before, greater than zero for after, and zero for\n\tdirectly at that position.\n\t*/\n\tcoordsAt(dom, pos, side) {\n\t\treturn null;\n\t}\n\t/**\n\t@internal\n\t*/\n\tget isHidden() {\n\t\treturn false;\n\t}\n\t/**\n\t@internal\n\t*/\n\tget editable() {\n\t\treturn false;\n\t}\n\t/**\n\tThis is called when the an instance of the widget is removed\n\tfrom the editor view.\n\t*/\n\tdestroy(dom) {}\n};\n/**\nThe different types of blocks that can occur in an editor view.\n*/\nvar BlockType = /* @__PURE__ */ (function(BlockType) {\n\t/**\n\tA line of text.\n\t*/\n\tBlockType[BlockType[\"Text\"] = 0] = \"Text\";\n\t/**\n\tA block widget associated with the position after it.\n\t*/\n\tBlockType[BlockType[\"WidgetBefore\"] = 1] = \"WidgetBefore\";\n\t/**\n\tA block widget associated with the position before it.\n\t*/\n\tBlockType[BlockType[\"WidgetAfter\"] = 2] = \"WidgetAfter\";\n\t/**\n\tA block widget [replacing](https://codemirror.net/6/docs/ref/#view.Decoration^replace) a range of content.\n\t*/\n\tBlockType[BlockType[\"WidgetRange\"] = 3] = \"WidgetRange\";\n\treturn BlockType;\n})(BlockType || (BlockType = {}));\n/**\nA decoration provides information on how to draw or style a piece\nof content. You'll usually use it wrapped in a\n[`Range`](https://codemirror.net/6/docs/ref/#state.Range), which adds a start and end position.\n@nonabstract\n*/\nvar Decoration = class extends RangeValue {\n\tconstructor(startSide, endSide, widget, spec) {\n\t\tsuper();\n\t\tthis.startSide = startSide;\n\t\tthis.endSide = endSide;\n\t\tthis.widget = widget;\n\t\tthis.spec = spec;\n\t}\n\t/**\n\t@internal\n\t*/\n\tget heightRelevant() {\n\t\treturn false;\n\t}\n\t/**\n\tCreate a mark decoration, which influences the styling of the\n\tcontent in its range. Nested mark decorations will cause nested\n\tDOM elements to be created. Nesting order is determined by\n\tprecedence of the [facet](https://codemirror.net/6/docs/ref/#view.EditorView^decorations), with\n\tthe higher-precedence decorations creating the inner DOM nodes.\n\tSuch elements are split on line boundaries and on the boundaries\n\tof lower-precedence decorations.\n\t*/\n\tstatic mark(spec) {\n\t\treturn new MarkDecoration(spec);\n\t}\n\t/**\n\tCreate a widget decoration, which displays a DOM element at the\n\tgiven position.\n\t*/\n\tstatic widget(spec) {\n\t\tlet side = Math.max(-1e4, Math.min(1e4, spec.side || 0)), block = !!spec.block;\n\t\tside += block && !spec.inlineOrder ? side > 0 ? 3e8 : -4e8 : side > 0 ? 1e8 : -1e8;\n\t\treturn new PointDecoration(spec, side, side, block, spec.widget || null, false);\n\t}\n\t/**\n\tCreate a replace decoration which replaces the given range with\n\ta widget, or simply hides it.\n\t*/\n\tstatic replace(spec) {\n\t\tlet block = !!spec.block, startSide, endSide;\n\t\tif (spec.isBlockGap) {\n\t\t\tstartSide = -5e8;\n\t\t\tendSide = 4e8;\n\t\t} else {\n\t\t\tlet { start, end } = getInclusive(spec, block);\n\t\t\tstartSide = (start ? block ? -3e8 : -1 : 5e8) - 1;\n\t\t\tendSide = (end ? block ? 2e8 : 1 : -6e8) + 1;\n\t\t}\n\t\treturn new PointDecoration(spec, startSide, endSide, block, spec.widget || null, true);\n\t}\n\t/**\n\tCreate a line decoration, which can add DOM attributes to the\n\tline starting at the given position.\n\t*/\n\tstatic line(spec) {\n\t\treturn new LineDecoration(spec);\n\t}\n\t/**\n\tBuild a [`DecorationSet`](https://codemirror.net/6/docs/ref/#view.DecorationSet) from the given\n\tdecorated range or ranges. If the ranges aren't already sorted,\n\tpass `true` for `sort` to make the library sort them for you.\n\t*/\n\tstatic set(of, sort = false) {\n\t\treturn RangeSet.of(of, sort);\n\t}\n\t/**\n\t@internal\n\t*/\n\thasHeight() {\n\t\treturn this.widget ? this.widget.estimatedHeight > -1 : false;\n\t}\n};\n/**\nThe empty set of decorations.\n*/\nDecoration.none = RangeSet.empty;\nvar MarkDecoration = class MarkDecoration extends Decoration {\n\tconstructor(spec) {\n\t\tlet { start, end } = getInclusive(spec);\n\t\tsuper(start ? -1 : 5e8, end ? 1 : -6e8, null, spec);\n\t\tthis.tagName = spec.tagName || \"span\";\n\t\tthis.class = spec.class || \"\";\n\t\tthis.attrs = spec.attributes || null;\n\t}\n\teq(other) {\n\t\tvar _a, _b;\n\t\treturn this == other || other instanceof MarkDecoration && this.tagName == other.tagName && (this.class || ((_a = this.attrs) === null || _a === void 0 ? void 0 : _a.class)) == (other.class || ((_b = other.attrs) === null || _b === void 0 ? void 0 : _b.class)) && attrsEq(this.attrs, other.attrs, \"class\");\n\t}\n\trange(from, to = from) {\n\t\tif (from >= to) throw new RangeError(\"Mark decorations may not be empty\");\n\t\treturn super.range(from, to);\n\t}\n};\nMarkDecoration.prototype.point = false;\nvar LineDecoration = class LineDecoration extends Decoration {\n\tconstructor(spec) {\n\t\tsuper(-2e8, -2e8, null, spec);\n\t}\n\teq(other) {\n\t\treturn other instanceof LineDecoration && this.spec.class == other.spec.class && attrsEq(this.spec.attributes, other.spec.attributes);\n\t}\n\trange(from, to = from) {\n\t\tif (to != from) throw new RangeError(\"Line decoration ranges must be zero-length\");\n\t\treturn super.range(from, to);\n\t}\n};\nLineDecoration.prototype.mapMode = MapMode.TrackBefore;\nLineDecoration.prototype.point = true;\nvar PointDecoration = class PointDecoration extends Decoration {\n\tconstructor(spec, startSide, endSide, block, widget, isReplace) {\n\t\tsuper(startSide, endSide, widget, spec);\n\t\tthis.block = block;\n\t\tthis.isReplace = isReplace;\n\t\tthis.mapMode = !block ? MapMode.TrackDel : startSide <= 0 ? MapMode.TrackBefore : MapMode.TrackAfter;\n\t}\n\tget type() {\n\t\treturn this.startSide != this.endSide ? BlockType.WidgetRange : this.startSide <= 0 ? BlockType.WidgetBefore : BlockType.WidgetAfter;\n\t}\n\tget heightRelevant() {\n\t\treturn this.block || !!this.widget && (this.widget.estimatedHeight >= 5 || this.widget.lineBreaks > 0);\n\t}\n\teq(other) {\n\t\treturn other instanceof PointDecoration && widgetsEq(this.widget, other.widget) && this.block == other.block && this.startSide == other.startSide && this.endSide == other.endSide;\n\t}\n\trange(from, to = from) {\n\t\tif (this.isReplace && (from > to || from == to && this.startSide > 0 && this.endSide <= 0)) throw new RangeError(\"Invalid range for replacement decoration\");\n\t\tif (!this.isReplace && to != from) throw new RangeError(\"Widget decorations can only have zero-length ranges\");\n\t\treturn super.range(from, to);\n\t}\n};\nPointDecoration.prototype.point = true;\nfunction getInclusive(spec, block = false) {\n\tlet { inclusiveStart: start, inclusiveEnd: end } = spec;\n\tif (start == null) start = spec.inclusive;\n\tif (end == null) end = spec.inclusive;\n\treturn {\n\t\tstart: start !== null && start !== void 0 ? start : block,\n\t\tend: end !== null && end !== void 0 ? end : block\n\t};\n}\nfunction widgetsEq(a, b) {\n\treturn a == b || !!(a && b && a.compare(b));\n}\nfunction addRange(from, to, ranges, margin = 0) {\n\tlet last = ranges.length - 1;\n\tif (last >= 0 && ranges[last] + margin >= from) ranges[last] = Math.max(ranges[last], to);\n\telse ranges.push(from, to);\n}\nvar LineView = class LineView extends ContentView {\n\tconstructor() {\n\t\tsuper(...arguments);\n\t\tthis.children = [];\n\t\tthis.length = 0;\n\t\tthis.prevAttrs = void 0;\n\t\tthis.attrs = null;\n\t\tthis.breakAfter = 0;\n\t}\n\tmerge(from, to, source, hasStart, openStart, openEnd) {\n\t\tif (source) {\n\t\t\tif (!(source instanceof LineView)) return false;\n\t\t\tif (!this.dom) source.transferDOM(this);\n\t\t}\n\t\tif (hasStart) this.setDeco(source ? source.attrs : null);\n\t\tmergeChildrenInto(this, from, to, source ? source.children.slice() : [], openStart, openEnd);\n\t\treturn true;\n\t}\n\tsplit(at) {\n\t\tlet end = new LineView();\n\t\tend.breakAfter = this.breakAfter;\n\t\tif (this.length == 0) return end;\n\t\tlet { i, off } = this.childPos(at);\n\t\tif (off) {\n\t\t\tend.append(this.children[i].split(off), 0);\n\t\t\tthis.children[i].merge(off, this.children[i].length, null, false, 0, 0);\n\t\t\ti++;\n\t\t}\n\t\tfor (let j = i; j < this.children.length; j++) end.append(this.children[j], 0);\n\t\twhile (i > 0 && this.children[i - 1].length == 0) this.children[--i].destroy();\n\t\tthis.children.length = i;\n\t\tthis.markDirty();\n\t\tthis.length = at;\n\t\treturn end;\n\t}\n\ttransferDOM(other) {\n\t\tif (!this.dom) return;\n\t\tthis.markDirty();\n\t\tother.setDOM(this.dom);\n\t\tother.prevAttrs = this.prevAttrs === void 0 ? this.attrs : this.prevAttrs;\n\t\tthis.prevAttrs = void 0;\n\t\tthis.dom = null;\n\t}\n\tsetDeco(attrs) {\n\t\tif (!attrsEq(this.attrs, attrs)) {\n\t\t\tif (this.dom) {\n\t\t\t\tthis.prevAttrs = this.attrs;\n\t\t\t\tthis.markDirty();\n\t\t\t}\n\t\t\tthis.attrs = attrs;\n\t\t}\n\t}\n\tappend(child, openStart) {\n\t\tjoinInlineInto(this, child, openStart);\n\t}\n\taddLineDeco(deco) {\n\t\tlet attrs = deco.spec.attributes, cls = deco.spec.class;\n\t\tif (attrs) this.attrs = combineAttrs(attrs, this.attrs || {});\n\t\tif (cls) this.attrs = combineAttrs({ class: cls }, this.attrs || {});\n\t}\n\tdomAtPos(pos) {\n\t\treturn inlineDOMAtPos(this, pos);\n\t}\n\treuseDOM(node) {\n\t\tif (node.nodeName == \"DIV\") {\n\t\t\tthis.setDOM(node);\n\t\t\tthis.flags |= 6;\n\t\t}\n\t}\n\tsync(view, track) {\n\t\tvar _a;\n\t\tif (!this.dom) {\n\t\t\tthis.setDOM(document.createElement(\"div\"));\n\t\t\tthis.dom.className = \"cm-line\";\n\t\t\tthis.prevAttrs = this.attrs ? null : void 0;\n\t\t} else if (this.flags & 4) {\n\t\t\tclearAttributes(this.dom);\n\t\t\tthis.dom.className = \"cm-line\";\n\t\t\tthis.prevAttrs = this.attrs ? null : void 0;\n\t\t}\n\t\tif (this.prevAttrs !== void 0) {\n\t\t\tupdateAttrs(this.dom, this.prevAttrs, this.attrs);\n\t\t\tthis.dom.classList.add(\"cm-line\");\n\t\t\tthis.prevAttrs = void 0;\n\t\t}\n\t\tsuper.sync(view, track);\n\t\tlet last = this.dom.lastChild;\n\t\twhile (last && ContentView.get(last) instanceof MarkView) last = last.lastChild;\n\t\tif (!last || !this.length || last.nodeName != \"BR\" && ((_a = ContentView.get(last)) === null || _a === void 0 ? void 0 : _a.isEditable) == false && (!browser.ios || !this.children.some((ch) => ch instanceof TextView))) {\n\t\t\tlet hack = document.createElement(\"BR\");\n\t\t\thack.cmIgnore = true;\n\t\t\tthis.dom.appendChild(hack);\n\t\t}\n\t}\n\tmeasureTextSize() {\n\t\tif (this.children.length == 0 || this.length > 20) return null;\n\t\tlet totalWidth = 0, textHeight;\n\t\tfor (let child of this.children) {\n\t\t\tif (!(child instanceof TextView) || /[^ -~]/.test(child.text)) return null;\n\t\t\tlet rects = clientRectsFor(child.dom);\n\t\t\tif (rects.length != 1) return null;\n\t\t\ttotalWidth += rects[0].width;\n\t\t\ttextHeight = rects[0].height;\n\t\t}\n\t\treturn !totalWidth ? null : {\n\t\t\tlineHeight: this.dom.getBoundingClientRect().height,\n\t\t\tcharWidth: totalWidth / this.length,\n\t\t\ttextHeight\n\t\t};\n\t}\n\tcoordsAt(pos, side) {\n\t\tlet rect = coordsInChildren(this, pos, side);\n\t\tif (!this.children.length && rect && this.parent) {\n\t\t\tlet { heightOracle } = this.parent.view.viewState, height = rect.bottom - rect.top;\n\t\t\tif (Math.abs(height - heightOracle.lineHeight) < 2 && heightOracle.textHeight < height) {\n\t\t\t\tlet dist = (height - heightOracle.textHeight) / 2;\n\t\t\t\treturn {\n\t\t\t\t\ttop: rect.top + dist,\n\t\t\t\t\tbottom: rect.bottom - dist,\n\t\t\t\t\tleft: rect.left,\n\t\t\t\t\tright: rect.left\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\treturn rect;\n\t}\n\tbecome(other) {\n\t\treturn other instanceof LineView && this.children.length == 0 && other.children.length == 0 && attrsEq(this.attrs, other.attrs) && this.breakAfter == other.breakAfter;\n\t}\n\tcovers() {\n\t\treturn true;\n\t}\n\tstatic find(docView, pos) {\n\t\tfor (let i = 0, off = 0; i < docView.children.length; i++) {\n\t\t\tlet block = docView.children[i], end = off + block.length;\n\t\t\tif (end >= pos) {\n\t\t\t\tif (block instanceof LineView) return block;\n\t\t\t\tif (end > pos) break;\n\t\t\t}\n\t\t\toff = end + block.breakAfter;\n\t\t}\n\t\treturn null;\n\t}\n};\nvar BlockWidgetView = class BlockWidgetView extends ContentView {\n\tconstructor(widget, length, deco) {\n\t\tsuper();\n\t\tthis.widget = widget;\n\t\tthis.length = length;\n\t\tthis.deco = deco;\n\t\tthis.breakAfter = 0;\n\t\tthis.prevWidget = null;\n\t}\n\tmerge(from, to, source, _takeDeco, openStart, openEnd) {\n\t\tif (source && (!(source instanceof BlockWidgetView) || !this.widget.compare(source.widget) || from > 0 && openStart <= 0 || to < this.length && openEnd <= 0)) return false;\n\t\tthis.length = from + (source ? source.length : 0) + (this.length - to);\n\t\treturn true;\n\t}\n\tdomAtPos(pos) {\n\t\treturn pos == 0 ? DOMPos.before(this.dom) : DOMPos.after(this.dom, pos == this.length);\n\t}\n\tsplit(at) {\n\t\tlet len = this.length - at;\n\t\tthis.length = at;\n\t\tlet end = new BlockWidgetView(this.widget, len, this.deco);\n\t\tend.breakAfter = this.breakAfter;\n\t\treturn end;\n\t}\n\tget children() {\n\t\treturn noChildren;\n\t}\n\tsync(view) {\n\t\tif (!this.dom || !this.widget.updateDOM(this.dom, view)) {\n\t\t\tif (this.dom && this.prevWidget) this.prevWidget.destroy(this.dom);\n\t\t\tthis.prevWidget = null;\n\t\t\tthis.setDOM(this.widget.toDOM(view));\n\t\t\tif (!this.widget.editable) this.dom.contentEditable = \"false\";\n\t\t}\n\t}\n\tget overrideDOMText() {\n\t\treturn this.parent ? this.parent.view.state.doc.slice(this.posAtStart, this.posAtEnd) : Text.empty;\n\t}\n\tdomBoundsAround() {\n\t\treturn null;\n\t}\n\tbecome(other) {\n\t\tif (other instanceof BlockWidgetView && other.widget.constructor == this.widget.constructor) {\n\t\t\tif (!other.widget.compare(this.widget)) this.markDirty(true);\n\t\t\tif (this.dom && !this.prevWidget) this.prevWidget = this.widget;\n\t\t\tthis.widget = other.widget;\n\t\t\tthis.length = other.length;\n\t\t\tthis.deco = other.deco;\n\t\t\tthis.breakAfter = other.breakAfter;\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\tignoreMutation() {\n\t\treturn true;\n\t}\n\tignoreEvent(event) {\n\t\treturn this.widget.ignoreEvent(event);\n\t}\n\tget isEditable() {\n\t\treturn false;\n\t}\n\tget isWidget() {\n\t\treturn true;\n\t}\n\tcoordsAt(pos, side) {\n\t\tlet custom = this.widget.coordsAt(this.dom, pos, side);\n\t\tif (custom) return custom;\n\t\tif (this.widget instanceof BlockGapWidget) return null;\n\t\treturn flattenRect(this.dom.getBoundingClientRect(), this.length ? pos == 0 : side <= 0);\n\t}\n\tdestroy() {\n\t\tsuper.destroy();\n\t\tif (this.dom) this.widget.destroy(this.dom);\n\t}\n\tcovers(side) {\n\t\tlet { startSide, endSide } = this.deco;\n\t\treturn startSide == endSide ? false : side < 0 ? startSide < 0 : endSide > 0;\n\t}\n};\nvar BlockGapWidget = class extends WidgetType {\n\tconstructor(height) {\n\t\tsuper();\n\t\tthis.height = height;\n\t}\n\ttoDOM() {\n\t\tlet elt = document.createElement(\"div\");\n\t\telt.className = \"cm-gap\";\n\t\tthis.updateDOM(elt);\n\t\treturn elt;\n\t}\n\teq(other) {\n\t\treturn other.height == this.height;\n\t}\n\tupdateDOM(elt) {\n\t\telt.style.height = this.height + \"px\";\n\t\treturn true;\n\t}\n\tget editable() {\n\t\treturn true;\n\t}\n\tget estimatedHeight() {\n\t\treturn this.height;\n\t}\n\tignoreEvent() {\n\t\treturn false;\n\t}\n};\nvar ContentBuilder = class ContentBuilder {\n\tconstructor(doc, pos, end, disallowBlockEffectsFor) {\n\t\tthis.doc = doc;\n\t\tthis.pos = pos;\n\t\tthis.end = end;\n\t\tthis.disallowBlockEffectsFor = disallowBlockEffectsFor;\n\t\tthis.content = [];\n\t\tthis.curLine = null;\n\t\tthis.breakAtStart = 0;\n\t\tthis.pendingBuffer = 0;\n\t\tthis.bufferMarks = [];\n\t\tthis.atCursorPos = true;\n\t\tthis.openStart = -1;\n\t\tthis.openEnd = -1;\n\t\tthis.text = \"\";\n\t\tthis.textOff = 0;\n\t\tthis.cursor = doc.iter();\n\t\tthis.skip = pos;\n\t}\n\tposCovered() {\n\t\tif (this.content.length == 0) return !this.breakAtStart && this.doc.lineAt(this.pos).from != this.pos;\n\t\tlet last = this.content[this.content.length - 1];\n\t\treturn !(last.breakAfter || last instanceof BlockWidgetView && last.deco.endSide < 0);\n\t}\n\tgetLine() {\n\t\tif (!this.curLine) {\n\t\t\tthis.content.push(this.curLine = new LineView());\n\t\t\tthis.atCursorPos = true;\n\t\t}\n\t\treturn this.curLine;\n\t}\n\tflushBuffer(active = this.bufferMarks) {\n\t\tif (this.pendingBuffer) {\n\t\t\tthis.curLine.append(wrapMarks(new WidgetBufferView(-1), active), active.length);\n\t\t\tthis.pendingBuffer = 0;\n\t\t}\n\t}\n\taddBlockWidget(view) {\n\t\tthis.flushBuffer();\n\t\tthis.curLine = null;\n\t\tthis.content.push(view);\n\t}\n\tfinish(openEnd) {\n\t\tif (this.pendingBuffer && openEnd <= this.bufferMarks.length) this.flushBuffer();\n\t\telse this.pendingBuffer = 0;\n\t\tif (!this.posCovered() && !(openEnd && this.content.length && this.content[this.content.length - 1] instanceof BlockWidgetView)) this.getLine();\n\t}\n\tbuildText(length, active, openStart) {\n\t\twhile (length > 0) {\n\t\t\tif (this.textOff == this.text.length) {\n\t\t\t\tlet { value, lineBreak, done } = this.cursor.next(this.skip);\n\t\t\t\tthis.skip = 0;\n\t\t\t\tif (done) throw new Error(\"Ran out of text content when drawing inline views\");\n\t\t\t\tif (lineBreak) {\n\t\t\t\t\tif (!this.posCovered()) this.getLine();\n\t\t\t\t\tif (this.content.length) this.content[this.content.length - 1].breakAfter = 1;\n\t\t\t\t\telse this.breakAtStart = 1;\n\t\t\t\t\tthis.flushBuffer();\n\t\t\t\t\tthis.curLine = null;\n\t\t\t\t\tthis.atCursorPos = true;\n\t\t\t\t\tlength--;\n\t\t\t\t\tcontinue;\n\t\t\t\t} else {\n\t\t\t\t\tthis.text = value;\n\t\t\t\t\tthis.textOff = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t\tlet take = Math.min(this.text.length - this.textOff, length, 512);\n\t\t\tthis.flushBuffer(active.slice(active.length - openStart));\n\t\t\tthis.getLine().append(wrapMarks(new TextView(this.text.slice(this.textOff, this.textOff + take)), active), openStart);\n\t\t\tthis.atCursorPos = true;\n\t\t\tthis.textOff += take;\n\t\t\tlength -= take;\n\t\t\topenStart = 0;\n\t\t}\n\t}\n\tspan(from, to, active, openStart) {\n\t\tthis.buildText(to - from, active, openStart);\n\t\tthis.pos = to;\n\t\tif (this.openStart < 0) this.openStart = openStart;\n\t}\n\tpoint(from, to, deco, active, openStart, index) {\n\t\tif (this.disallowBlockEffectsFor[index] && deco instanceof PointDecoration) {\n\t\t\tif (deco.block) throw new RangeError(\"Block decorations may not be specified via plugins\");\n\t\t\tif (to > this.doc.lineAt(this.pos).to) throw new RangeError(\"Decorations that replace line breaks may not be specified via plugins\");\n\t\t}\n\t\tlet len = to - from;\n\t\tif (deco instanceof PointDecoration) if (deco.block) {\n\t\t\tif (deco.startSide > 0 && !this.posCovered()) this.getLine();\n\t\t\tthis.addBlockWidget(new BlockWidgetView(deco.widget || NullWidget.block, len, deco));\n\t\t} else {\n\t\t\tlet view = WidgetView.create(deco.widget || NullWidget.inline, len, len ? 0 : deco.startSide);\n\t\t\tlet cursorBefore = this.atCursorPos && !view.isEditable && openStart <= active.length && (from < to || deco.startSide > 0);\n\t\t\tlet cursorAfter = !view.isEditable && (from < to || openStart > active.length || deco.startSide <= 0);\n\t\t\tlet line = this.getLine();\n\t\t\tif (this.pendingBuffer == 2 && !cursorBefore && !view.isEditable) this.pendingBuffer = 0;\n\t\t\tthis.flushBuffer(active);\n\t\t\tif (cursorBefore) {\n\t\t\t\tline.append(wrapMarks(new WidgetBufferView(1), active), openStart);\n\t\t\t\topenStart = active.length + Math.max(0, openStart - active.length);\n\t\t\t}\n\t\t\tline.append(wrapMarks(view, active), openStart);\n\t\t\tthis.atCursorPos = cursorAfter;\n\t\t\tthis.pendingBuffer = !cursorAfter ? 0 : from < to || openStart > active.length ? 1 : 2;\n\t\t\tif (this.pendingBuffer) this.bufferMarks = active.slice();\n\t\t}\n\t\telse if (this.doc.lineAt(this.pos).from == this.pos) this.getLine().addLineDeco(deco);\n\t\tif (len) {\n\t\t\tif (this.textOff + len <= this.text.length) this.textOff += len;\n\t\t\telse {\n\t\t\t\tthis.skip += len - (this.text.length - this.textOff);\n\t\t\t\tthis.text = \"\";\n\t\t\t\tthis.textOff = 0;\n\t\t\t}\n\t\t\tthis.pos = to;\n\t\t}\n\t\tif (this.openStart < 0) this.openStart = openStart;\n\t}\n\tstatic build(text, from, to, decorations, dynamicDecorationMap) {\n\t\tlet builder = new ContentBuilder(text, from, to, dynamicDecorationMap);\n\t\tbuilder.openEnd = RangeSet.spans(decorations, from, to, builder);\n\t\tif (builder.openStart < 0) builder.openStart = builder.openEnd;\n\t\tbuilder.finish(builder.openEnd);\n\t\treturn builder;\n\t}\n};\nfunction wrapMarks(view, active) {\n\tfor (let mark of active) view = new MarkView(mark, [view], view.length);\n\treturn view;\n}\nvar NullWidget = class extends WidgetType {\n\tconstructor(tag) {\n\t\tsuper();\n\t\tthis.tag = tag;\n\t}\n\teq(other) {\n\t\treturn other.tag == this.tag;\n\t}\n\ttoDOM() {\n\t\treturn document.createElement(this.tag);\n\t}\n\tupdateDOM(elt) {\n\t\treturn elt.nodeName.toLowerCase() == this.tag;\n\t}\n\tget isHidden() {\n\t\treturn true;\n\t}\n};\nNullWidget.inline = /* @__PURE__ */ new NullWidget(\"span\");\nNullWidget.block = /* @__PURE__ */ new NullWidget(\"div\");\n/**\nUsed to indicate [text direction](https://codemirror.net/6/docs/ref/#view.EditorView.textDirection).\n*/\nvar Direction = /* @__PURE__ */ (function(Direction) {\n\t/**\n\tLeft-to-right.\n\t*/\n\tDirection[Direction[\"LTR\"] = 0] = \"LTR\";\n\t/**\n\tRight-to-left.\n\t*/\n\tDirection[Direction[\"RTL\"] = 1] = \"RTL\";\n\treturn Direction;\n})(Direction || (Direction = {}));\nconst LTR = Direction.LTR, RTL = Direction.RTL;\nfunction dec(str) {\n\tlet result = [];\n\tfor (let i = 0; i < str.length; i++) result.push(1 << +str[i]);\n\treturn result;\n}\nconst LowTypes = /* @__PURE__ */ dec(\"88888888888888888888888888888888888666888888787833333333337888888000000000000000000000000008888880000000000000000000000000088888888888888888888888888888888888887866668888088888663380888308888800000000000000000000000800000000000000000000000000000008\");\nconst ArabicTypes = /* @__PURE__ */ dec(\"4444448826627288999999999992222222222222222222222222222222222222222222222229999999999999999999994444444444644222822222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222999999949999999229989999223333333333\");\nconst Brackets = /* @__PURE__ */ Object.create(null), BracketStack = [];\nfor (let p of [\n\t\"()\",\n\t\"[]\",\n\t\"{}\"\n]) {\n\tlet l = /* @__PURE__ */ p.charCodeAt(0), r = /* @__PURE__ */ p.charCodeAt(1);\n\tBrackets[l] = r;\n\tBrackets[r] = -l;\n}\nfunction charType(ch) {\n\treturn ch <= 247 ? LowTypes[ch] : 1424 <= ch && ch <= 1524 ? 2 : 1536 <= ch && ch <= 1785 ? ArabicTypes[ch - 1536] : 1774 <= ch && ch <= 2220 ? 4 : 8192 <= ch && ch <= 8204 ? 256 : 64336 <= ch && ch <= 65023 ? 4 : 1;\n}\nconst BidiRE = /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac\\ufb50-\\ufdff]/;\n/**\nRepresents a contiguous range of text that has a single direction\n(as in left-to-right or right-to-left).\n*/\nvar BidiSpan = class {\n\t/**\n\tThe direction of this span.\n\t*/\n\tget dir() {\n\t\treturn this.level % 2 ? RTL : LTR;\n\t}\n\t/**\n\t@internal\n\t*/\n\tconstructor(from, to, level) {\n\t\tthis.from = from;\n\t\tthis.to = to;\n\t\tthis.level = level;\n\t}\n\t/**\n\t@internal\n\t*/\n\tside(end, dir) {\n\t\treturn this.dir == dir == end ? this.to : this.from;\n\t}\n\t/**\n\t@internal\n\t*/\n\tforward(forward, dir) {\n\t\treturn forward == (this.dir == dir);\n\t}\n\t/**\n\t@internal\n\t*/\n\tstatic find(order, index, level, assoc) {\n\t\tlet maybe = -1;\n\t\tfor (let i = 0; i < order.length; i++) {\n\t\t\tlet span = order[i];\n\t\t\tif (span.from <= index && span.to >= index) {\n\t\t\t\tif (span.level == level) return i;\n\t\t\t\tif (maybe < 0 || (assoc != 0 ? assoc < 0 ? span.from < index : span.to > index : order[maybe].level > span.level)) maybe = i;\n\t\t\t}\n\t\t}\n\t\tif (maybe < 0) throw new RangeError(\"Index out of range\");\n\t\treturn maybe;\n\t}\n};\nfunction isolatesEq(a, b) {\n\tif (a.length != b.length) return false;\n\tfor (let i = 0; i < a.length; i++) {\n\t\tlet iA = a[i], iB = b[i];\n\t\tif (iA.from != iB.from || iA.to != iB.to || iA.direction != iB.direction || !isolatesEq(iA.inner, iB.inner)) return false;\n\t}\n\treturn true;\n}\nconst types = [];\nfunction computeCharTypes(line, rFrom, rTo, isolates, outerType) {\n\tfor (let iI = 0; iI <= isolates.length; iI++) {\n\t\tlet from = iI ? isolates[iI - 1].to : rFrom, to = iI < isolates.length ? isolates[iI].from : rTo;\n\t\tlet prevType = iI ? 256 : outerType;\n\t\tfor (let i = from, prev = prevType, prevStrong = prevType; i < to; i++) {\n\t\t\tlet type = charType(line.charCodeAt(i));\n\t\t\tif (type == 512) type = prev;\n\t\t\telse if (type == 8 && prevStrong == 4) type = 16;\n\t\t\ttypes[i] = type == 4 ? 2 : type;\n\t\t\tif (type & 7) prevStrong = type;\n\t\t\tprev = type;\n\t\t}\n\t\tfor (let i = from, prev = prevType, prevStrong = prevType; i < to; i++) {\n\t\t\tlet type = types[i];\n\t\t\tif (type == 128) if (i < to - 1 && prev == types[i + 1] && prev & 24) type = types[i] = prev;\n\t\t\telse types[i] = 256;\n\t\t\telse if (type == 64) {\n\t\t\t\tlet end = i + 1;\n\t\t\t\twhile (end < to && types[end] == 64) end++;\n\t\t\t\tlet replace = i && prev == 8 || end < rTo && types[end] == 8 ? prevStrong == 1 ? 1 : 8 : 256;\n\t\t\t\tfor (let j = i; j < end; j++) types[j] = replace;\n\t\t\t\ti = end - 1;\n\t\t\t} else if (type == 8 && prevStrong == 1) types[i] = 1;\n\t\t\tprev = type;\n\t\t\tif (type & 7) prevStrong = type;\n\t\t}\n\t}\n}\nfunction processBracketPairs(line, rFrom, rTo, isolates, outerType) {\n\tlet oppositeType = outerType == 1 ? 2 : 1;\n\tfor (let iI = 0, sI = 0, context = 0; iI <= isolates.length; iI++) {\n\t\tlet from = iI ? isolates[iI - 1].to : rFrom, to = iI < isolates.length ? isolates[iI].from : rTo;\n\t\tfor (let i = from, ch, br, type; i < to; i++) if (br = Brackets[ch = line.charCodeAt(i)]) if (br < 0) {\n\t\t\tfor (let sJ = sI - 3; sJ >= 0; sJ -= 3) if (BracketStack[sJ + 1] == -br) {\n\t\t\t\tlet flags = BracketStack[sJ + 2];\n\t\t\t\tlet type = flags & 2 ? outerType : !(flags & 4) ? 0 : flags & 1 ? oppositeType : outerType;\n\t\t\t\tif (type) types[i] = types[BracketStack[sJ]] = type;\n\t\t\t\tsI = sJ;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t} else if (BracketStack.length == 189) break;\n\t\telse {\n\t\t\tBracketStack[sI++] = i;\n\t\t\tBracketStack[sI++] = ch;\n\t\t\tBracketStack[sI++] = context;\n\t\t}\n\t\telse if ((type = types[i]) == 2 || type == 1) {\n\t\t\tlet embed = type == outerType;\n\t\t\tcontext = embed ? 0 : 1;\n\t\t\tfor (let sJ = sI - 3; sJ >= 0; sJ -= 3) {\n\t\t\t\tlet cur = BracketStack[sJ + 2];\n\t\t\t\tif (cur & 2) break;\n\t\t\t\tif (embed) BracketStack[sJ + 2] |= 2;\n\t\t\t\telse {\n\t\t\t\t\tif (cur & 4) break;\n\t\t\t\t\tBracketStack[sJ + 2] |= 4;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\nfunction processNeutrals(rFrom, rTo, isolates, outerType) {\n\tfor (let iI = 0, prev = outerType; iI <= isolates.length; iI++) {\n\t\tlet from = iI ? isolates[iI - 1].to : rFrom, to = iI < isolates.length ? isolates[iI].from : rTo;\n\t\tfor (let i = from; i < to;) {\n\t\t\tlet type = types[i];\n\t\t\tif (type == 256) {\n\t\t\t\tlet end = i + 1;\n\t\t\t\tfor (;;) if (end == to) {\n\t\t\t\t\tif (iI == isolates.length) break;\n\t\t\t\t\tend = isolates[iI++].to;\n\t\t\t\t\tto = iI < isolates.length ? isolates[iI].from : rTo;\n\t\t\t\t} else if (types[end] == 256) end++;\n\t\t\t\telse break;\n\t\t\t\tlet beforeL = prev == 1;\n\t\t\t\tlet replace = beforeL == ((end < rTo ? types[end] : outerType) == 1) ? beforeL ? 1 : 2 : outerType;\n\t\t\t\tfor (let j = end, jI = iI, fromJ = jI ? isolates[jI - 1].to : rFrom; j > i;) {\n\t\t\t\t\tif (j == fromJ) {\n\t\t\t\t\t\tj = isolates[--jI].from;\n\t\t\t\t\t\tfromJ = jI ? isolates[jI - 1].to : rFrom;\n\t\t\t\t\t}\n\t\t\t\t\ttypes[--j] = replace;\n\t\t\t\t}\n\t\t\t\ti = end;\n\t\t\t} else {\n\t\t\t\tprev = type;\n\t\t\t\ti++;\n\t\t\t}\n\t\t}\n\t}\n}\nfunction emitSpans(line, from, to, level, baseLevel, isolates, order) {\n\tlet ourType = level % 2 ? 2 : 1;\n\tif (level % 2 == baseLevel % 2) for (let iCh = from, iI = 0; iCh < to;) {\n\t\tlet sameDir = true, isNum = false;\n\t\tif (iI == isolates.length || iCh < isolates[iI].from) {\n\t\t\tlet next = types[iCh];\n\t\t\tif (next != ourType) {\n\t\t\t\tsameDir = false;\n\t\t\t\tisNum = next == 16;\n\t\t\t}\n\t\t}\n\t\tlet recurse = !sameDir && ourType == 1 ? [] : null;\n\t\tlet localLevel = sameDir ? level : level + 1;\n\t\tlet iScan = iCh;\n\t\trun: for (;;) if (iI < isolates.length && iScan == isolates[iI].from) {\n\t\t\tif (isNum) break run;\n\t\t\tlet iso = isolates[iI];\n\t\t\tif (!sameDir) for (let upto = iso.to, jI = iI + 1;;) {\n\t\t\t\tif (upto == to) break run;\n\t\t\t\tif (jI < isolates.length && isolates[jI].from == upto) upto = isolates[jI++].to;\n\t\t\t\telse if (types[upto] == ourType) break run;\n\t\t\t\telse break;\n\t\t\t}\n\t\t\tiI++;\n\t\t\tif (recurse) recurse.push(iso);\n\t\t\telse {\n\t\t\t\tif (iso.from > iCh) order.push(new BidiSpan(iCh, iso.from, localLevel));\n\t\t\t\tcomputeSectionOrder(line, iso.direction == LTR != !(localLevel % 2) ? level + 1 : level, baseLevel, iso.inner, iso.from, iso.to, order);\n\t\t\t\tiCh = iso.to;\n\t\t\t}\n\t\t\tiScan = iso.to;\n\t\t} else if (iScan == to || (sameDir ? types[iScan] != ourType : types[iScan] == ourType)) break;\n\t\telse iScan++;\n\t\tif (recurse) emitSpans(line, iCh, iScan, level + 1, baseLevel, recurse, order);\n\t\telse if (iCh < iScan) order.push(new BidiSpan(iCh, iScan, localLevel));\n\t\tiCh = iScan;\n\t}\n\telse for (let iCh = to, iI = isolates.length; iCh > from;) {\n\t\tlet sameDir = true, isNum = false;\n\t\tif (!iI || iCh > isolates[iI - 1].to) {\n\t\t\tlet next = types[iCh - 1];\n\t\t\tif (next != ourType) {\n\t\t\t\tsameDir = false;\n\t\t\t\tisNum = next == 16;\n\t\t\t}\n\t\t}\n\t\tlet recurse = !sameDir && ourType == 1 ? [] : null;\n\t\tlet localLevel = sameDir ? level : level + 1;\n\t\tlet iScan = iCh;\n\t\trun: for (;;) if (iI && iScan == isolates[iI - 1].to) {\n\t\t\tif (isNum) break run;\n\t\t\tlet iso = isolates[--iI];\n\t\t\tif (!sameDir) for (let upto = iso.from, jI = iI;;) {\n\t\t\t\tif (upto == from) break run;\n\t\t\t\tif (jI && isolates[jI - 1].to == upto) upto = isolates[--jI].from;\n\t\t\t\telse if (types[upto - 1] == ourType) break run;\n\t\t\t\telse break;\n\t\t\t}\n\t\t\tif (recurse) recurse.push(iso);\n\t\t\telse {\n\t\t\t\tif (iso.to < iCh) order.push(new BidiSpan(iso.to, iCh, localLevel));\n\t\t\t\tcomputeSectionOrder(line, iso.direction == LTR != !(localLevel % 2) ? level + 1 : level, baseLevel, iso.inner, iso.from, iso.to, order);\n\t\t\t\tiCh = iso.from;\n\t\t\t}\n\t\t\tiScan = iso.from;\n\t\t} else if (iScan == from || (sameDir ? types[iScan - 1] != ourType : types[iScan - 1] == ourType)) break;\n\t\telse iScan--;\n\t\tif (recurse) emitSpans(line, iScan, iCh, level + 1, baseLevel, recurse, order);\n\t\telse if (iScan < iCh) order.push(new BidiSpan(iScan, iCh, localLevel));\n\t\tiCh = iScan;\n\t}\n}\nfunction computeSectionOrder(line, level, baseLevel, isolates, from, to, order) {\n\tlet outerType = level % 2 ? 2 : 1;\n\tcomputeCharTypes(line, from, to, isolates, outerType);\n\tprocessBracketPairs(line, from, to, isolates, outerType);\n\tprocessNeutrals(from, to, isolates, outerType);\n\temitSpans(line, from, to, level, baseLevel, isolates, order);\n}\nfunction computeOrder(line, direction, isolates) {\n\tif (!line) return [new BidiSpan(0, 0, direction == RTL ? 1 : 0)];\n\tif (direction == LTR && !isolates.length && !BidiRE.test(line)) return trivialOrder(line.length);\n\tif (isolates.length) while (line.length > types.length) types[types.length] = 256;\n\tlet order = [], level = direction == LTR ? 0 : 1;\n\tcomputeSectionOrder(line, level, level, isolates, 0, line.length, order);\n\treturn order;\n}\nfunction trivialOrder(length) {\n\treturn [new BidiSpan(0, length, 0)];\n}\nlet movedOver = \"\";\nfunction moveVisually(line, order, dir, start, forward) {\n\tvar _a;\n\tlet startIndex = start.head - line.from;\n\tlet spanI = BidiSpan.find(order, startIndex, (_a = start.bidiLevel) !== null && _a !== void 0 ? _a : -1, start.assoc);\n\tlet span = order[spanI], spanEnd = span.side(forward, dir);\n\tif (startIndex == spanEnd) {\n\t\tlet nextI = spanI += forward ? 1 : -1;\n\t\tif (nextI < 0 || nextI >= order.length) return null;\n\t\tspan = order[spanI = nextI];\n\t\tstartIndex = span.side(!forward, dir);\n\t\tspanEnd = span.side(forward, dir);\n\t}\n\tlet nextIndex = findClusterBreak(line.text, startIndex, span.forward(forward, dir));\n\tif (nextIndex < span.from || nextIndex > span.to) nextIndex = spanEnd;\n\tmovedOver = line.text.slice(Math.min(startIndex, nextIndex), Math.max(startIndex, nextIndex));\n\tlet nextSpan = spanI == (forward ? order.length - 1 : 0) ? null : order[spanI + (forward ? 1 : -1)];\n\tif (nextSpan && nextIndex == spanEnd && nextSpan.level + (forward ? 0 : 1) < span.level) return EditorSelection.cursor(nextSpan.side(!forward, dir) + line.from, nextSpan.forward(forward, dir) ? 1 : -1, nextSpan.level);\n\treturn EditorSelection.cursor(nextIndex + line.from, span.forward(forward, dir) ? -1 : 1, span.level);\n}\nfunction autoDirection(text, from, to) {\n\tfor (let i = from; i < to; i++) {\n\t\tlet type = charType(text.charCodeAt(i));\n\t\tif (type == 1) return LTR;\n\t\tif (type == 2 || type == 4) return RTL;\n\t}\n\treturn LTR;\n}\nconst clickAddsSelectionRange = /* @__PURE__ */ Facet.define();\nconst dragMovesSelection$1 = /* @__PURE__ */ Facet.define();\nconst mouseSelectionStyle = /* @__PURE__ */ Facet.define();\nconst exceptionSink = /* @__PURE__ */ Facet.define();\nconst updateListener = /* @__PURE__ */ Facet.define();\nconst inputHandler$1 = /* @__PURE__ */ Facet.define();\nconst focusChangeEffect = /* @__PURE__ */ Facet.define();\nconst clipboardInputFilter = /* @__PURE__ */ Facet.define();\nconst clipboardOutputFilter = /* @__PURE__ */ Facet.define();\nconst perLineTextDirection = /* @__PURE__ */ Facet.define({ combine: (values) => values.some((x) => x) });\nconst nativeSelectionHidden = /* @__PURE__ */ Facet.define({ combine: (values) => values.some((x) => x) });\nconst scrollHandler = /* @__PURE__ */ Facet.define();\nvar ScrollTarget = class ScrollTarget {\n\tconstructor(range, y = \"nearest\", x = \"nearest\", yMargin = 5, xMargin = 5, isSnapshot = false) {\n\t\tthis.range = range;\n\t\tthis.y = y;\n\t\tthis.x = x;\n\t\tthis.yMargin = yMargin;\n\t\tthis.xMargin = xMargin;\n\t\tthis.isSnapshot = isSnapshot;\n\t}\n\tmap(changes) {\n\t\treturn changes.empty ? this : new ScrollTarget(this.range.map(changes), this.y, this.x, this.yMargin, this.xMargin, this.isSnapshot);\n\t}\n\tclip(state) {\n\t\treturn this.range.to <= state.doc.length ? this : new ScrollTarget(EditorSelection.cursor(state.doc.length), this.y, this.x, this.yMargin, this.xMargin, this.isSnapshot);\n\t}\n};\nconst scrollIntoView$1 = /* @__PURE__ */ StateEffect.define({ map: (t, ch) => t.map(ch) });\nconst setEditContextFormatting = /* @__PURE__ */ StateEffect.define();\n/**\nLog or report an unhandled exception in client code. Should\nprobably only be used by extension code that allows client code to\nprovide functions, and calls those functions in a context where an\nexception can't be propagated to calling code in a reasonable way\n(for example when in an event handler).\n\nEither calls a handler registered with\n[`EditorView.exceptionSink`](https://codemirror.net/6/docs/ref/#view.EditorView^exceptionSink),\n`window.onerror`, if defined, or `console.error` (in which case\nit'll pass `context`, when given, as first argument).\n*/\nfunction logException(state, exception, context) {\n\tlet handler = state.facet(exceptionSink);\n\tif (handler.length) handler[0](exception);\n\telse if (window.onerror) window.onerror(String(exception), context, void 0, void 0, exception);\n\telse if (context) console.error(context + \":\", exception);\n\telse console.error(exception);\n}\nconst editable = /* @__PURE__ */ Facet.define({ combine: (values) => values.length ? values[0] : true });\nlet nextPluginID = 0;\nconst viewPlugin = /* @__PURE__ */ Facet.define();\n/**\nView plugins associate stateful values with a view. They can\ninfluence the way the content is drawn, and are notified of things\nthat happen in the view.\n*/\nvar ViewPlugin = class ViewPlugin {\n\tconstructor(id, create, domEventHandlers, domEventObservers, buildExtensions) {\n\t\tthis.id = id;\n\t\tthis.create = create;\n\t\tthis.domEventHandlers = domEventHandlers;\n\t\tthis.domEventObservers = domEventObservers;\n\t\tthis.extension = buildExtensions(this);\n\t}\n\t/**\n\tDefine a plugin from a constructor function that creates the\n\tplugin's value, given an editor view.\n\t*/\n\tstatic define(create, spec) {\n\t\tconst { eventHandlers, eventObservers, provide, decorations: deco } = spec || {};\n\t\treturn new ViewPlugin(nextPluginID++, create, eventHandlers, eventObservers, (plugin) => {\n\t\t\tlet ext = [viewPlugin.of(plugin)];\n\t\t\tif (deco) ext.push(decorations.of((view) => {\n\t\t\t\tlet pluginInst = view.plugin(plugin);\n\t\t\t\treturn pluginInst ? deco(pluginInst) : Decoration.none;\n\t\t\t}));\n\t\t\tif (provide) ext.push(provide(plugin));\n\t\t\treturn ext;\n\t\t});\n\t}\n\t/**\n\tCreate a plugin for a class whose constructor takes a single\n\teditor view as argument.\n\t*/\n\tstatic fromClass(cls, spec) {\n\t\treturn ViewPlugin.define((view) => new cls(view), spec);\n\t}\n};\nvar PluginInstance = class {\n\tconstructor(spec) {\n\t\tthis.spec = spec;\n\t\tthis.mustUpdate = null;\n\t\tthis.value = null;\n\t}\n\tupdate(view) {\n\t\tif (!this.value) {\n\t\t\tif (this.spec) try {\n\t\t\t\tthis.value = this.spec.create(view);\n\t\t\t} catch (e) {\n\t\t\t\tlogException(view.state, e, \"CodeMirror plugin crashed\");\n\t\t\t\tthis.deactivate();\n\t\t\t}\n\t\t} else if (this.mustUpdate) {\n\t\t\tlet update = this.mustUpdate;\n\t\t\tthis.mustUpdate = null;\n\t\t\tif (this.value.update) try {\n\t\t\t\tthis.value.update(update);\n\t\t\t} catch (e) {\n\t\t\t\tlogException(update.state, e, \"CodeMirror plugin crashed\");\n\t\t\t\tif (this.value.destroy) try {\n\t\t\t\t\tthis.value.destroy();\n\t\t\t\t} catch (_) {}\n\t\t\t\tthis.deactivate();\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t}\n\tdestroy(view) {\n\t\tvar _a;\n\t\tif ((_a = this.value) === null || _a === void 0 ? void 0 : _a.destroy) try {\n\t\t\tthis.value.destroy();\n\t\t} catch (e) {\n\t\t\tlogException(view.state, e, \"CodeMirror plugin crashed\");\n\t\t}\n\t}\n\tdeactivate() {\n\t\tthis.spec = this.value = null;\n\t}\n};\nconst editorAttributes = /* @__PURE__ */ Facet.define();\nconst contentAttributes = /* @__PURE__ */ Facet.define();\nconst decorations = /* @__PURE__ */ Facet.define();\nconst outerDecorations = /* @__PURE__ */ Facet.define();\nconst atomicRanges = /* @__PURE__ */ Facet.define();\nconst bidiIsolatedRanges = /* @__PURE__ */ Facet.define();\nfunction getIsolatedRanges(view, line) {\n\tlet isolates = view.state.facet(bidiIsolatedRanges);\n\tif (!isolates.length) return isolates;\n\tlet sets = isolates.map((i) => i instanceof Function ? i(view) : i);\n\tlet result = [];\n\tRangeSet.spans(sets, line.from, line.to, {\n\t\tpoint() {},\n\t\tspan(fromDoc, toDoc, active, open) {\n\t\t\tlet from = fromDoc - line.from, to = toDoc - line.from;\n\t\t\tlet level = result;\n\t\t\tfor (let i = active.length - 1; i >= 0; i--, open--) {\n\t\t\t\tlet direction = active[i].spec.bidiIsolate, update;\n\t\t\t\tif (direction == null) direction = autoDirection(line.text, from, to);\n\t\t\t\tif (open > 0 && level.length && (update = level[level.length - 1]).to == from && update.direction == direction) {\n\t\t\t\t\tupdate.to = to;\n\t\t\t\t\tlevel = update.inner;\n\t\t\t\t} else {\n\t\t\t\t\tlet add = {\n\t\t\t\t\t\tfrom,\n\t\t\t\t\t\tto,\n\t\t\t\t\t\tdirection,\n\t\t\t\t\t\tinner: []\n\t\t\t\t\t};\n\t\t\t\t\tlevel.push(add);\n\t\t\t\t\tlevel = add.inner;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\treturn result;\n}\nconst scrollMargins = /* @__PURE__ */ Facet.define();\nfunction getScrollMargins(view) {\n\tlet left = 0, right = 0, top = 0, bottom = 0;\n\tfor (let source of view.state.facet(scrollMargins)) {\n\t\tlet m = source(view);\n\t\tif (m) {\n\t\t\tif (m.left != null) left = Math.max(left, m.left);\n\t\t\tif (m.right != null) right = Math.max(right, m.right);\n\t\t\tif (m.top != null) top = Math.max(top, m.top);\n\t\t\tif (m.bottom != null) bottom = Math.max(bottom, m.bottom);\n\t\t}\n\t}\n\treturn {\n\t\tleft,\n\t\tright,\n\t\ttop,\n\t\tbottom\n\t};\n}\nconst styleModule = /* @__PURE__ */ Facet.define();\nvar ChangedRange = class ChangedRange {\n\tconstructor(fromA, toA, fromB, toB) {\n\t\tthis.fromA = fromA;\n\t\tthis.toA = toA;\n\t\tthis.fromB = fromB;\n\t\tthis.toB = toB;\n\t}\n\tjoin(other) {\n\t\treturn new ChangedRange(Math.min(this.fromA, other.fromA), Math.max(this.toA, other.toA), Math.min(this.fromB, other.fromB), Math.max(this.toB, other.toB));\n\t}\n\taddToSet(set) {\n\t\tlet i = set.length, me = this;\n\t\tfor (; i > 0; i--) {\n\t\t\tlet range = set[i - 1];\n\t\t\tif (range.fromA > me.toA) continue;\n\t\t\tif (range.toA < me.fromA) break;\n\t\t\tme = me.join(range);\n\t\t\tset.splice(i - 1, 1);\n\t\t}\n\t\tset.splice(i, 0, me);\n\t\treturn set;\n\t}\n\tstatic extendWithRanges(diff, ranges) {\n\t\tif (ranges.length == 0) return diff;\n\t\tlet result = [];\n\t\tfor (let dI = 0, rI = 0, posA = 0, posB = 0;; dI++) {\n\t\t\tlet next = dI == diff.length ? null : diff[dI], off = posA - posB;\n\t\t\tlet end = next ? next.fromB : 1e9;\n\t\t\twhile (rI < ranges.length && ranges[rI] < end) {\n\t\t\t\tlet from = ranges[rI], to = ranges[rI + 1];\n\t\t\t\tlet fromB = Math.max(posB, from), toB = Math.min(end, to);\n\t\t\t\tif (fromB <= toB) new ChangedRange(fromB + off, toB + off, fromB, toB).addToSet(result);\n\t\t\t\tif (to > end) break;\n\t\t\t\telse rI += 2;\n\t\t\t}\n\t\t\tif (!next) return result;\n\t\t\tnew ChangedRange(next.fromA, next.toA, next.fromB, next.toB).addToSet(result);\n\t\t\tposA = next.toA;\n\t\t\tposB = next.toB;\n\t\t}\n\t}\n};\n/**\nView [plugins](https://codemirror.net/6/docs/ref/#view.ViewPlugin) are given instances of this\nclass, which describe what happened, whenever the view is updated.\n*/\nvar ViewUpdate = class ViewUpdate {\n\tconstructor(view, state, transactions) {\n\t\tthis.view = view;\n\t\tthis.state = state;\n\t\tthis.transactions = transactions;\n\t\t/**\n\t\t@internal\n\t\t*/\n\t\tthis.flags = 0;\n\t\tthis.startState = view.state;\n\t\tthis.changes = ChangeSet.empty(this.startState.doc.length);\n\t\tfor (let tr of transactions) this.changes = this.changes.compose(tr.changes);\n\t\tlet changedRanges = [];\n\t\tthis.changes.iterChangedRanges((fromA, toA, fromB, toB) => changedRanges.push(new ChangedRange(fromA, toA, fromB, toB)));\n\t\tthis.changedRanges = changedRanges;\n\t}\n\t/**\n\t@internal\n\t*/\n\tstatic create(view, state, transactions) {\n\t\treturn new ViewUpdate(view, state, transactions);\n\t}\n\t/**\n\tTells you whether the [viewport](https://codemirror.net/6/docs/ref/#view.EditorView.viewport) or\n\t[visible ranges](https://codemirror.net/6/docs/ref/#view.EditorView.visibleRanges) changed in this\n\tupdate.\n\t*/\n\tget viewportChanged() {\n\t\treturn (this.flags & 4) > 0;\n\t}\n\t/**\n\tReturns true when\n\t[`viewportChanged`](https://codemirror.net/6/docs/ref/#view.ViewUpdate.viewportChanged) is true\n\tand the viewport change is not just the result of mapping it in\n\tresponse to document changes.\n\t*/\n\tget viewportMoved() {\n\t\treturn (this.flags & 8) > 0;\n\t}\n\t/**\n\tIndicates whether the height of a block element in the editor\n\tchanged in this update.\n\t*/\n\tget heightChanged() {\n\t\treturn (this.flags & 2) > 0;\n\t}\n\t/**\n\tReturns true when the document was modified or the size of the\n\teditor, or elements within the editor, changed.\n\t*/\n\tget geometryChanged() {\n\t\treturn this.docChanged || (this.flags & 18) > 0;\n\t}\n\t/**\n\tTrue when this update indicates a focus change.\n\t*/\n\tget focusChanged() {\n\t\treturn (this.flags & 1) > 0;\n\t}\n\t/**\n\tWhether the document changed in this update.\n\t*/\n\tget docChanged() {\n\t\treturn !this.changes.empty;\n\t}\n\t/**\n\tWhether the selection was explicitly set in this update.\n\t*/\n\tget selectionSet() {\n\t\treturn this.transactions.some((tr) => tr.selection);\n\t}\n\t/**\n\t@internal\n\t*/\n\tget empty() {\n\t\treturn this.flags == 0 && this.transactions.length == 0;\n\t}\n};\nvar DocView = class extends ContentView {\n\tget length() {\n\t\treturn this.view.state.doc.length;\n\t}\n\tconstructor(view) {\n\t\tsuper();\n\t\tthis.view = view;\n\t\tthis.decorations = [];\n\t\tthis.dynamicDecorationMap = [false];\n\t\tthis.domChanged = null;\n\t\tthis.hasComposition = null;\n\t\tthis.markedForComposition = /* @__PURE__ */ new Set();\n\t\tthis.editContextFormatting = Decoration.none;\n\t\tthis.lastCompositionAfterCursor = false;\n\t\tthis.minWidth = 0;\n\t\tthis.minWidthFrom = 0;\n\t\tthis.minWidthTo = 0;\n\t\tthis.impreciseAnchor = null;\n\t\tthis.impreciseHead = null;\n\t\tthis.forceSelection = false;\n\t\tthis.lastUpdate = Date.now();\n\t\tthis.setDOM(view.contentDOM);\n\t\tthis.children = [new LineView()];\n\t\tthis.children[0].setParent(this);\n\t\tthis.updateDeco();\n\t\tthis.updateInner([new ChangedRange(0, 0, 0, view.state.doc.length)], 0, null);\n\t}\n\tupdate(update) {\n\t\tvar _a;\n\t\tlet changedRanges = update.changedRanges;\n\t\tif (this.minWidth > 0 && changedRanges.length) if (!changedRanges.every(({ fromA, toA }) => toA < this.minWidthFrom || fromA > this.minWidthTo)) this.minWidth = this.minWidthFrom = this.minWidthTo = 0;\n\t\telse {\n\t\t\tthis.minWidthFrom = update.changes.mapPos(this.minWidthFrom, 1);\n\t\t\tthis.minWidthTo = update.changes.mapPos(this.minWidthTo, 1);\n\t\t}\n\t\tthis.updateEditContextFormatting(update);\n\t\tlet readCompositionAt = -1;\n\t\tif (this.view.inputState.composing >= 0 && !this.view.observer.editContext) {\n\t\t\tif ((_a = this.domChanged) === null || _a === void 0 ? void 0 : _a.newSel) readCompositionAt = this.domChanged.newSel.head;\n\t\t\telse if (!touchesComposition(update.changes, this.hasComposition) && !update.selectionSet) readCompositionAt = update.state.selection.main.head;\n\t\t}\n\t\tlet composition = readCompositionAt > -1 ? findCompositionRange(this.view, update.changes, readCompositionAt) : null;\n\t\tthis.domChanged = null;\n\t\tif (this.hasComposition) {\n\t\t\tthis.markedForComposition.clear();\n\t\t\tlet { from, to } = this.hasComposition;\n\t\t\tchangedRanges = new ChangedRange(from, to, update.changes.mapPos(from, -1), update.changes.mapPos(to, 1)).addToSet(changedRanges.slice());\n\t\t}\n\t\tthis.hasComposition = composition ? {\n\t\t\tfrom: composition.range.fromB,\n\t\t\tto: composition.range.toB\n\t\t} : null;\n\t\tif ((browser.ie || browser.chrome) && !composition && update && update.state.doc.lines != update.startState.doc.lines) this.forceSelection = true;\n\t\tlet prevDeco = this.decorations;\n\t\tlet decoDiff = findChangedDeco(prevDeco, this.updateDeco(), update.changes);\n\t\tchangedRanges = ChangedRange.extendWithRanges(changedRanges, decoDiff);\n\t\tif (!(this.flags & 7) && changedRanges.length == 0) return false;\n\t\telse {\n\t\t\tthis.updateInner(changedRanges, update.startState.doc.length, composition);\n\t\t\tif (update.transactions.length) this.lastUpdate = Date.now();\n\t\t\treturn true;\n\t\t}\n\t}\n\tupdateInner(changes, oldLength, composition) {\n\t\tthis.view.viewState.mustMeasureContent = true;\n\t\tthis.updateChildren(changes, oldLength, composition);\n\t\tlet { observer } = this.view;\n\t\tobserver.ignore(() => {\n\t\t\tthis.dom.style.height = this.view.viewState.contentHeight / this.view.scaleY + \"px\";\n\t\t\tthis.dom.style.flexBasis = this.minWidth ? this.minWidth + \"px\" : \"\";\n\t\t\tlet track = browser.chrome || browser.ios ? {\n\t\t\t\tnode: observer.selectionRange.focusNode,\n\t\t\t\twritten: false\n\t\t\t} : void 0;\n\t\t\tthis.sync(this.view, track);\n\t\t\tthis.flags &= -8;\n\t\t\tif (track && (track.written || observer.selectionRange.focusNode != track.node)) this.forceSelection = true;\n\t\t\tthis.dom.style.height = \"\";\n\t\t});\n\t\tthis.markedForComposition.forEach((cView) => cView.flags &= -9);\n\t\tlet gaps = [];\n\t\tif (this.view.viewport.from || this.view.viewport.to < this.view.state.doc.length) {\n\t\t\tfor (let child of this.children) if (child instanceof BlockWidgetView && child.widget instanceof BlockGapWidget) gaps.push(child.dom);\n\t\t}\n\t\tobserver.updateGaps(gaps);\n\t}\n\tupdateChildren(changes, oldLength, composition) {\n\t\tlet ranges = composition ? composition.range.addToSet(changes.slice()) : changes;\n\t\tlet cursor = this.childCursor(oldLength);\n\t\tfor (let i = ranges.length - 1;; i--) {\n\t\t\tlet next = i >= 0 ? ranges[i] : null;\n\t\t\tif (!next) break;\n\t\t\tlet { fromA, toA, fromB, toB } = next, content, breakAtStart, openStart, openEnd;\n\t\t\tif (composition && composition.range.fromB < toB && composition.range.toB > fromB) {\n\t\t\t\tlet before = ContentBuilder.build(this.view.state.doc, fromB, composition.range.fromB, this.decorations, this.dynamicDecorationMap);\n\t\t\t\tlet after = ContentBuilder.build(this.view.state.doc, composition.range.toB, toB, this.decorations, this.dynamicDecorationMap);\n\t\t\t\tbreakAtStart = before.breakAtStart;\n\t\t\t\topenStart = before.openStart;\n\t\t\t\topenEnd = after.openEnd;\n\t\t\t\tlet compLine = this.compositionView(composition);\n\t\t\t\tif (after.breakAtStart) compLine.breakAfter = 1;\n\t\t\t\telse if (after.content.length && compLine.merge(compLine.length, compLine.length, after.content[0], false, after.openStart, 0)) {\n\t\t\t\t\tcompLine.breakAfter = after.content[0].breakAfter;\n\t\t\t\t\tafter.content.shift();\n\t\t\t\t}\n\t\t\t\tif (before.content.length && compLine.merge(0, 0, before.content[before.content.length - 1], true, 0, before.openEnd)) before.content.pop();\n\t\t\t\tcontent = before.content.concat(compLine).concat(after.content);\n\t\t\t} else ({content, breakAtStart, openStart, openEnd} = ContentBuilder.build(this.view.state.doc, fromB, toB, this.decorations, this.dynamicDecorationMap));\n\t\t\tlet { i: toI, off: toOff } = cursor.findPos(toA, 1);\n\t\t\tlet { i: fromI, off: fromOff } = cursor.findPos(fromA, -1);\n\t\t\treplaceRange(this, fromI, fromOff, toI, toOff, content, breakAtStart, openStart, openEnd);\n\t\t}\n\t\tif (composition) this.fixCompositionDOM(composition);\n\t}\n\tupdateEditContextFormatting(update) {\n\t\tthis.editContextFormatting = this.editContextFormatting.map(update.changes);\n\t\tfor (let tr of update.transactions) for (let effect of tr.effects) if (effect.is(setEditContextFormatting)) this.editContextFormatting = effect.value;\n\t}\n\tcompositionView(composition) {\n\t\tlet cur = new TextView(composition.text.nodeValue);\n\t\tcur.flags |= 8;\n\t\tfor (let { deco } of composition.marks) cur = new MarkView(deco, [cur], cur.length);\n\t\tlet line = new LineView();\n\t\tline.append(cur, 0);\n\t\treturn line;\n\t}\n\tfixCompositionDOM(composition) {\n\t\tlet fix = (dom, cView) => {\n\t\t\tcView.flags |= 8 | (cView.children.some((c) => c.flags & 7) ? 1 : 0);\n\t\t\tthis.markedForComposition.add(cView);\n\t\t\tlet prev = ContentView.get(dom);\n\t\t\tif (prev && prev != cView) prev.dom = null;\n\t\t\tcView.setDOM(dom);\n\t\t};\n\t\tlet pos = this.childPos(composition.range.fromB, 1);\n\t\tlet cView = this.children[pos.i];\n\t\tfix(composition.line, cView);\n\t\tfor (let i = composition.marks.length - 1; i >= -1; i--) {\n\t\t\tpos = cView.childPos(pos.off, 1);\n\t\t\tcView = cView.children[pos.i];\n\t\t\tfix(i >= 0 ? composition.marks[i].node : composition.text, cView);\n\t\t}\n\t}\n\tupdateSelection(mustRead = false, fromPointer = false) {\n\t\tif (mustRead || !this.view.observer.selectionRange.focusNode) this.view.observer.readSelectionRange();\n\t\tlet activeElt = this.view.root.activeElement, focused = activeElt == this.dom;\n\t\tlet selectionNotFocus = !focused && !(this.view.state.facet(editable) || this.dom.tabIndex > -1) && hasSelection(this.dom, this.view.observer.selectionRange) && !(activeElt && this.dom.contains(activeElt));\n\t\tif (!(focused || fromPointer || selectionNotFocus)) return;\n\t\tlet force = this.forceSelection;\n\t\tthis.forceSelection = false;\n\t\tlet main = this.view.state.selection.main;\n\t\tlet anchor = this.moveToLine(this.domAtPos(main.anchor));\n\t\tlet head = main.empty ? anchor : this.moveToLine(this.domAtPos(main.head));\n\t\tif (browser.gecko && main.empty && !this.hasComposition && betweenUneditable(anchor)) {\n\t\t\tlet dummy = document.createTextNode(\"\");\n\t\t\tthis.view.observer.ignore(() => anchor.node.insertBefore(dummy, anchor.node.childNodes[anchor.offset] || null));\n\t\t\tanchor = head = new DOMPos(dummy, 0);\n\t\t\tforce = true;\n\t\t}\n\t\tlet domSel = this.view.observer.selectionRange;\n\t\tif (force || !domSel.focusNode || (!isEquivalentPosition(anchor.node, anchor.offset, domSel.anchorNode, domSel.anchorOffset) || !isEquivalentPosition(head.node, head.offset, domSel.focusNode, domSel.focusOffset)) && !this.suppressWidgetCursorChange(domSel, main)) {\n\t\t\tthis.view.observer.ignore(() => {\n\t\t\t\tif (browser.android && browser.chrome && this.dom.contains(domSel.focusNode) && inUneditable(domSel.focusNode, this.dom)) {\n\t\t\t\t\tthis.dom.blur();\n\t\t\t\t\tthis.dom.focus({ preventScroll: true });\n\t\t\t\t}\n\t\t\t\tlet rawSel = getSelection(this.view.root);\n\t\t\t\tif (!rawSel);\n\t\t\t\telse if (main.empty) {\n\t\t\t\t\tif (browser.gecko) {\n\t\t\t\t\t\tlet nextTo = nextToUneditable(anchor.node, anchor.offset);\n\t\t\t\t\t\tif (nextTo && nextTo != 3) {\n\t\t\t\t\t\t\tlet text = (nextTo == 1 ? textNodeBefore : textNodeAfter)(anchor.node, anchor.offset);\n\t\t\t\t\t\t\tif (text) anchor = new DOMPos(text.node, text.offset);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\trawSel.collapse(anchor.node, anchor.offset);\n\t\t\t\t\tif (main.bidiLevel != null && rawSel.caretBidiLevel !== void 0) rawSel.caretBidiLevel = main.bidiLevel;\n\t\t\t\t} else if (rawSel.extend) {\n\t\t\t\t\trawSel.collapse(anchor.node, anchor.offset);\n\t\t\t\t\ttry {\n\t\t\t\t\t\trawSel.extend(head.node, head.offset);\n\t\t\t\t\t} catch (_) {}\n\t\t\t\t} else {\n\t\t\t\t\tlet range = document.createRange();\n\t\t\t\t\tif (main.anchor > main.head) [anchor, head] = [head, anchor];\n\t\t\t\t\trange.setEnd(head.node, head.offset);\n\t\t\t\t\trange.setStart(anchor.node, anchor.offset);\n\t\t\t\t\trawSel.removeAllRanges();\n\t\t\t\t\trawSel.addRange(range);\n\t\t\t\t}\n\t\t\t\tif (selectionNotFocus && this.view.root.activeElement == this.dom) {\n\t\t\t\t\tthis.dom.blur();\n\t\t\t\t\tif (activeElt) activeElt.focus();\n\t\t\t\t}\n\t\t\t});\n\t\t\tthis.view.observer.setSelectionRange(anchor, head);\n\t\t}\n\t\tthis.impreciseAnchor = anchor.precise ? null : new DOMPos(domSel.anchorNode, domSel.anchorOffset);\n\t\tthis.impreciseHead = head.precise ? null : new DOMPos(domSel.focusNode, domSel.focusOffset);\n\t}\n\tsuppressWidgetCursorChange(sel, cursor) {\n\t\treturn this.hasComposition && cursor.empty && isEquivalentPosition(sel.focusNode, sel.focusOffset, sel.anchorNode, sel.anchorOffset) && this.posFromDOM(sel.focusNode, sel.focusOffset) == cursor.head;\n\t}\n\tenforceCursorAssoc() {\n\t\tif (this.hasComposition) return;\n\t\tlet { view } = this, cursor = view.state.selection.main;\n\t\tlet sel = getSelection(view.root);\n\t\tlet { anchorNode, anchorOffset } = view.observer.selectionRange;\n\t\tif (!sel || !cursor.empty || !cursor.assoc || !sel.modify) return;\n\t\tlet line = LineView.find(this, cursor.head);\n\t\tif (!line) return;\n\t\tlet lineStart = line.posAtStart;\n\t\tif (cursor.head == lineStart || cursor.head == lineStart + line.length) return;\n\t\tlet before = this.coordsAt(cursor.head, -1), after = this.coordsAt(cursor.head, 1);\n\t\tif (!before || !after || before.bottom > after.top) return;\n\t\tlet dom = this.domAtPos(cursor.head + cursor.assoc);\n\t\tsel.collapse(dom.node, dom.offset);\n\t\tsel.modify(\"move\", cursor.assoc < 0 ? \"forward\" : \"backward\", \"lineboundary\");\n\t\tview.observer.readSelectionRange();\n\t\tlet newRange = view.observer.selectionRange;\n\t\tif (view.docView.posFromDOM(newRange.anchorNode, newRange.anchorOffset) != cursor.from) sel.collapse(anchorNode, anchorOffset);\n\t}\n\tmoveToLine(pos) {\n\t\tlet dom = this.dom, newPos;\n\t\tif (pos.node != dom) return pos;\n\t\tfor (let i = pos.offset; !newPos && i < dom.childNodes.length; i++) {\n\t\t\tlet view = ContentView.get(dom.childNodes[i]);\n\t\t\tif (view instanceof LineView) newPos = view.domAtPos(0);\n\t\t}\n\t\tfor (let i = pos.offset - 1; !newPos && i >= 0; i--) {\n\t\t\tlet view = ContentView.get(dom.childNodes[i]);\n\t\t\tif (view instanceof LineView) newPos = view.domAtPos(view.length);\n\t\t}\n\t\treturn newPos ? new DOMPos(newPos.node, newPos.offset, true) : pos;\n\t}\n\tnearest(dom) {\n\t\tfor (let cur = dom; cur;) {\n\t\t\tlet domView = ContentView.get(cur);\n\t\t\tif (domView && domView.rootView == this) return domView;\n\t\t\tcur = cur.parentNode;\n\t\t}\n\t\treturn null;\n\t}\n\tposFromDOM(node, offset) {\n\t\tlet view = this.nearest(node);\n\t\tif (!view) throw new RangeError(\"Trying to find position for a DOM position outside of the document\");\n\t\treturn view.localPosFromDOM(node, offset) + view.posAtStart;\n\t}\n\tdomAtPos(pos) {\n\t\tlet { i, off } = this.childCursor().findPos(pos, -1);\n\t\tfor (; i < this.children.length - 1;) {\n\t\t\tlet child = this.children[i];\n\t\t\tif (off < child.length || child instanceof LineView) break;\n\t\t\ti++;\n\t\t\toff = 0;\n\t\t}\n\t\treturn this.children[i].domAtPos(off);\n\t}\n\tcoordsAt(pos, side) {\n\t\tlet best = null, bestPos = 0;\n\t\tfor (let off = this.length, i = this.children.length - 1; i >= 0; i--) {\n\t\t\tlet child = this.children[i], end = off - child.breakAfter, start = end - child.length;\n\t\t\tif (end < pos) break;\n\t\t\tif (start <= pos && (start < pos || child.covers(-1)) && (end > pos || child.covers(1)) && (!best || child instanceof LineView && !(best instanceof LineView && side >= 0))) {\n\t\t\t\tbest = child;\n\t\t\t\tbestPos = start;\n\t\t\t} else if (best && start == pos && end == pos && child instanceof BlockWidgetView && Math.abs(side) < 2) {\n\t\t\t\tif (child.deco.startSide < 0) break;\n\t\t\t\telse if (i) best = null;\n\t\t\t}\n\t\t\toff = start;\n\t\t}\n\t\treturn best ? best.coordsAt(pos - bestPos, side) : null;\n\t}\n\tcoordsForChar(pos) {\n\t\tlet { i, off } = this.childPos(pos, 1), child = this.children[i];\n\t\tif (!(child instanceof LineView)) return null;\n\t\twhile (child.children.length) {\n\t\t\tlet { i, off: childOff } = child.childPos(off, 1);\n\t\t\tfor (;; i++) {\n\t\t\t\tif (i == child.children.length) return null;\n\t\t\t\tif ((child = child.children[i]).length) break;\n\t\t\t}\n\t\t\toff = childOff;\n\t\t}\n\t\tif (!(child instanceof TextView)) return null;\n\t\tlet end = findClusterBreak(child.text, off);\n\t\tif (end == off) return null;\n\t\tlet rects = textRange(child.dom, off, end).getClientRects();\n\t\tfor (let i = 0; i < rects.length; i++) {\n\t\t\tlet rect = rects[i];\n\t\t\tif (i == rects.length - 1 || rect.top < rect.bottom && rect.left < rect.right) return rect;\n\t\t}\n\t\treturn null;\n\t}\n\tmeasureVisibleLineHeights(viewport) {\n\t\tlet result = [], { from, to } = viewport;\n\t\tlet contentWidth = this.view.contentDOM.clientWidth;\n\t\tlet isWider = contentWidth > Math.max(this.view.scrollDOM.clientWidth, this.minWidth) + 1;\n\t\tlet widest = -1, ltr = this.view.textDirection == Direction.LTR;\n\t\tfor (let pos = 0, i = 0; i < this.children.length; i++) {\n\t\t\tlet child = this.children[i], end = pos + child.length;\n\t\t\tif (end > to) break;\n\t\t\tif (pos >= from) {\n\t\t\t\tlet childRect = child.dom.getBoundingClientRect();\n\t\t\t\tresult.push(childRect.height);\n\t\t\t\tif (isWider) {\n\t\t\t\t\tlet last = child.dom.lastChild;\n\t\t\t\t\tlet rects = last ? clientRectsFor(last) : [];\n\t\t\t\t\tif (rects.length) {\n\t\t\t\t\t\tlet rect = rects[rects.length - 1];\n\t\t\t\t\t\tlet width = ltr ? rect.right - childRect.left : childRect.right - rect.left;\n\t\t\t\t\t\tif (width > widest) {\n\t\t\t\t\t\t\twidest = width;\n\t\t\t\t\t\t\tthis.minWidth = contentWidth;\n\t\t\t\t\t\t\tthis.minWidthFrom = pos;\n\t\t\t\t\t\t\tthis.minWidthTo = end;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tpos = end + child.breakAfter;\n\t\t}\n\t\treturn result;\n\t}\n\ttextDirectionAt(pos) {\n\t\tlet { i } = this.childPos(pos, 1);\n\t\treturn getComputedStyle(this.children[i].dom).direction == \"rtl\" ? Direction.RTL : Direction.LTR;\n\t}\n\tmeasureTextSize() {\n\t\tfor (let child of this.children) if (child instanceof LineView) {\n\t\t\tlet measure = child.measureTextSize();\n\t\t\tif (measure) return measure;\n\t\t}\n\t\tlet dummy = document.createElement(\"div\"), lineHeight, charWidth, textHeight;\n\t\tdummy.className = \"cm-line\";\n\t\tdummy.style.width = \"99999px\";\n\t\tdummy.style.position = \"absolute\";\n\t\tdummy.textContent = \"abc def ghi jkl mno pqr stu\";\n\t\tthis.view.observer.ignore(() => {\n\t\t\tthis.dom.appendChild(dummy);\n\t\t\tlet rect = clientRectsFor(dummy.firstChild)[0];\n\t\t\tlineHeight = dummy.getBoundingClientRect().height;\n\t\t\tcharWidth = rect ? rect.width / 27 : 7;\n\t\t\ttextHeight = rect ? rect.height : lineHeight;\n\t\t\tdummy.remove();\n\t\t});\n\t\treturn {\n\t\t\tlineHeight,\n\t\t\tcharWidth,\n\t\t\ttextHeight\n\t\t};\n\t}\n\tchildCursor(pos = this.length) {\n\t\tlet i = this.children.length;\n\t\tif (i) pos -= this.children[--i].length;\n\t\treturn new ChildCursor(this.children, pos, i);\n\t}\n\tcomputeBlockGapDeco() {\n\t\tlet deco = [], vs = this.view.viewState;\n\t\tfor (let pos = 0, i = 0;; i++) {\n\t\t\tlet next = i == vs.viewports.length ? null : vs.viewports[i];\n\t\t\tlet end = next ? next.from - 1 : this.length;\n\t\t\tif (end > pos) {\n\t\t\t\tlet height = (vs.lineBlockAt(end).bottom - vs.lineBlockAt(pos).top) / this.view.scaleY;\n\t\t\t\tdeco.push(Decoration.replace({\n\t\t\t\t\twidget: new BlockGapWidget(height),\n\t\t\t\t\tblock: true,\n\t\t\t\t\tinclusive: true,\n\t\t\t\t\tisBlockGap: true\n\t\t\t\t}).range(pos, end));\n\t\t\t}\n\t\t\tif (!next) break;\n\t\t\tpos = next.to + 1;\n\t\t}\n\t\treturn Decoration.set(deco);\n\t}\n\tupdateDeco() {\n\t\tlet i = 1;\n\t\tlet allDeco = this.view.state.facet(decorations).map((d) => {\n\t\t\treturn (this.dynamicDecorationMap[i++] = typeof d == \"function\") ? d(this.view) : d;\n\t\t});\n\t\tlet dynamicOuter = false, outerDeco = this.view.state.facet(outerDecorations).map((d, i) => {\n\t\t\tlet dynamic = typeof d == \"function\";\n\t\t\tif (dynamic) dynamicOuter = true;\n\t\t\treturn dynamic ? d(this.view) : d;\n\t\t});\n\t\tif (outerDeco.length) {\n\t\t\tthis.dynamicDecorationMap[i++] = dynamicOuter;\n\t\t\tallDeco.push(RangeSet.join(outerDeco));\n\t\t}\n\t\tthis.decorations = [\n\t\t\tthis.editContextFormatting,\n\t\t\t...allDeco,\n\t\t\tthis.computeBlockGapDeco(),\n\t\t\tthis.view.viewState.lineGapDeco\n\t\t];\n\t\twhile (i < this.decorations.length) this.dynamicDecorationMap[i++] = false;\n\t\treturn this.decorations;\n\t}\n\tscrollIntoView(target) {\n\t\tif (target.isSnapshot) {\n\t\t\tlet ref = this.view.viewState.lineBlockAt(target.range.head);\n\t\t\tthis.view.scrollDOM.scrollTop = ref.top - target.yMargin;\n\t\t\tthis.view.scrollDOM.scrollLeft = target.xMargin;\n\t\t\treturn;\n\t\t}\n\t\tfor (let handler of this.view.state.facet(scrollHandler)) try {\n\t\t\tif (handler(this.view, target.range, target)) return true;\n\t\t} catch (e) {\n\t\t\tlogException(this.view.state, e, \"scroll handler\");\n\t\t}\n\t\tlet { range } = target;\n\t\tlet rect = this.coordsAt(range.head, range.empty ? range.assoc : range.head > range.anchor ? -1 : 1), other;\n\t\tif (!rect) return;\n\t\tif (!range.empty && (other = this.coordsAt(range.anchor, range.anchor > range.head ? -1 : 1))) rect = {\n\t\t\tleft: Math.min(rect.left, other.left),\n\t\t\ttop: Math.min(rect.top, other.top),\n\t\t\tright: Math.max(rect.right, other.right),\n\t\t\tbottom: Math.max(rect.bottom, other.bottom)\n\t\t};\n\t\tlet margins = getScrollMargins(this.view);\n\t\tlet targetRect = {\n\t\t\tleft: rect.left - margins.left,\n\t\t\ttop: rect.top - margins.top,\n\t\t\tright: rect.right + margins.right,\n\t\t\tbottom: rect.bottom + margins.bottom\n\t\t};\n\t\tlet { offsetWidth, offsetHeight } = this.view.scrollDOM;\n\t\tscrollRectIntoView(this.view.scrollDOM, targetRect, range.head < range.anchor ? -1 : 1, target.x, target.y, Math.max(Math.min(target.xMargin, offsetWidth), -offsetWidth), Math.max(Math.min(target.yMargin, offsetHeight), -offsetHeight), this.view.textDirection == Direction.LTR);\n\t}\n};\nfunction betweenUneditable(pos) {\n\treturn pos.node.nodeType == 1 && pos.node.firstChild && (pos.offset == 0 || pos.node.childNodes[pos.offset - 1].contentEditable == \"false\") && (pos.offset == pos.node.childNodes.length || pos.node.childNodes[pos.offset].contentEditable == \"false\");\n}\nfunction findCompositionNode(view, headPos) {\n\tlet sel = view.observer.selectionRange;\n\tif (!sel.focusNode) return null;\n\tlet textBefore = textNodeBefore(sel.focusNode, sel.focusOffset);\n\tlet textAfter = textNodeAfter(sel.focusNode, sel.focusOffset);\n\tlet textNode = textBefore || textAfter;\n\tif (textAfter && textBefore && textAfter.node != textBefore.node) {\n\t\tlet descAfter = ContentView.get(textAfter.node);\n\t\tif (!descAfter || descAfter instanceof TextView && descAfter.text != textAfter.node.nodeValue) textNode = textAfter;\n\t\telse if (view.docView.lastCompositionAfterCursor) {\n\t\t\tlet descBefore = ContentView.get(textBefore.node);\n\t\t\tif (!(!descBefore || descBefore instanceof TextView && descBefore.text != textBefore.node.nodeValue)) textNode = textAfter;\n\t\t}\n\t}\n\tview.docView.lastCompositionAfterCursor = textNode != textBefore;\n\tif (!textNode) return null;\n\tlet from = headPos - textNode.offset;\n\treturn {\n\t\tfrom,\n\t\tto: from + textNode.node.nodeValue.length,\n\t\tnode: textNode.node\n\t};\n}\nfunction findCompositionRange(view, changes, headPos) {\n\tlet found = findCompositionNode(view, headPos);\n\tif (!found) return null;\n\tlet { node: textNode, from, to } = found, text = textNode.nodeValue;\n\tif (/[\\n\\r]/.test(text)) return null;\n\tif (view.state.doc.sliceString(found.from, found.to) != text) return null;\n\tlet inv = changes.invertedDesc;\n\tlet range = new ChangedRange(inv.mapPos(from), inv.mapPos(to), from, to);\n\tlet marks = [];\n\tfor (let parent = textNode.parentNode;; parent = parent.parentNode) {\n\t\tlet parentView = ContentView.get(parent);\n\t\tif (parentView instanceof MarkView) marks.push({\n\t\t\tnode: parent,\n\t\t\tdeco: parentView.mark\n\t\t});\n\t\telse if (parentView instanceof LineView || parent.nodeName == \"DIV\" && parent.parentNode == view.contentDOM) return {\n\t\t\trange,\n\t\t\ttext: textNode,\n\t\t\tmarks,\n\t\t\tline: parent\n\t\t};\n\t\telse if (parent != view.contentDOM) marks.push({\n\t\t\tnode: parent,\n\t\t\tdeco: new MarkDecoration({\n\t\t\t\tinclusive: true,\n\t\t\t\tattributes: getAttrs(parent),\n\t\t\t\ttagName: parent.tagName.toLowerCase()\n\t\t\t})\n\t\t});\n\t\telse return null;\n\t}\n}\nfunction nextToUneditable(node, offset) {\n\tif (node.nodeType != 1) return 0;\n\treturn (offset && node.childNodes[offset - 1].contentEditable == \"false\" ? 1 : 0) | (offset < node.childNodes.length && node.childNodes[offset].contentEditable == \"false\" ? 2 : 0);\n}\nlet DecorationComparator$1 = class DecorationComparator {\n\tconstructor() {\n\t\tthis.changes = [];\n\t}\n\tcompareRange(from, to) {\n\t\taddRange(from, to, this.changes);\n\t}\n\tcomparePoint(from, to) {\n\t\taddRange(from, to, this.changes);\n\t}\n\tboundChange(pos) {\n\t\taddRange(pos, pos, this.changes);\n\t}\n};\nfunction findChangedDeco(a, b, diff) {\n\tlet comp = new DecorationComparator$1();\n\tRangeSet.compare(a, b, diff, comp);\n\treturn comp.changes;\n}\nfunction inUneditable(node, inside) {\n\tfor (let cur = node; cur && cur != inside; cur = cur.assignedSlot || cur.parentNode) if (cur.nodeType == 1 && cur.contentEditable == \"false\") return true;\n\treturn false;\n}\nfunction touchesComposition(changes, composition) {\n\tlet touched = false;\n\tif (composition) changes.iterChangedRanges((from, to) => {\n\t\tif (from < composition.to && to > composition.from) touched = true;\n\t});\n\treturn touched;\n}\nfunction groupAt(state, pos, bias = 1) {\n\tlet categorize = state.charCategorizer(pos);\n\tlet line = state.doc.lineAt(pos), linePos = pos - line.from;\n\tif (line.length == 0) return EditorSelection.cursor(pos);\n\tif (linePos == 0) bias = 1;\n\telse if (linePos == line.length) bias = -1;\n\tlet from = linePos, to = linePos;\n\tif (bias < 0) from = findClusterBreak(line.text, linePos, false);\n\telse to = findClusterBreak(line.text, linePos);\n\tlet cat = categorize(line.text.slice(from, to));\n\twhile (from > 0) {\n\t\tlet prev = findClusterBreak(line.text, from, false);\n\t\tif (categorize(line.text.slice(prev, from)) != cat) break;\n\t\tfrom = prev;\n\t}\n\twhile (to < line.length) {\n\t\tlet next = findClusterBreak(line.text, to);\n\t\tif (categorize(line.text.slice(to, next)) != cat) break;\n\t\tto = next;\n\t}\n\treturn EditorSelection.range(from + line.from, to + line.from);\n}\nfunction getdx(x, rect) {\n\treturn rect.left > x ? rect.left - x : Math.max(0, x - rect.right);\n}\nfunction getdy(y, rect) {\n\treturn rect.top > y ? rect.top - y : Math.max(0, y - rect.bottom);\n}\nfunction yOverlap(a, b) {\n\treturn a.top < b.bottom - 1 && a.bottom > b.top + 1;\n}\nfunction upTop(rect, top) {\n\treturn top < rect.top ? {\n\t\ttop,\n\t\tleft: rect.left,\n\t\tright: rect.right,\n\t\tbottom: rect.bottom\n\t} : rect;\n}\nfunction upBot(rect, bottom) {\n\treturn bottom > rect.bottom ? {\n\t\ttop: rect.top,\n\t\tleft: rect.left,\n\t\tright: rect.right,\n\t\tbottom\n\t} : rect;\n}\nfunction domPosAtCoords(parent, x, y) {\n\tlet closest, closestRect, closestX, closestY, closestOverlap = false;\n\tlet above, below, aboveRect, belowRect;\n\tfor (let child = parent.firstChild; child; child = child.nextSibling) {\n\t\tlet rects = clientRectsFor(child);\n\t\tfor (let i = 0; i < rects.length; i++) {\n\t\t\tlet rect = rects[i];\n\t\t\tif (closestRect && yOverlap(closestRect, rect)) rect = upTop(upBot(rect, closestRect.bottom), closestRect.top);\n\t\t\tlet dx = getdx(x, rect), dy = getdy(y, rect);\n\t\t\tif (dx == 0 && dy == 0) return child.nodeType == 3 ? domPosInText(child, x, y) : domPosAtCoords(child, x, y);\n\t\t\tif (!closest || closestY > dy || closestY == dy && closestX > dx) {\n\t\t\t\tclosest = child;\n\t\t\t\tclosestRect = rect;\n\t\t\t\tclosestX = dx;\n\t\t\t\tclosestY = dy;\n\t\t\t\tlet side = dy ? y < rect.top ? -1 : 1 : dx ? x < rect.left ? -1 : 1 : 0;\n\t\t\t\tclosestOverlap = !side || (side > 0 ? i < rects.length - 1 : i > 0);\n\t\t\t}\n\t\t\tif (dx == 0) {\n\t\t\t\tif (y > rect.bottom && (!aboveRect || aboveRect.bottom < rect.bottom)) {\n\t\t\t\t\tabove = child;\n\t\t\t\t\taboveRect = rect;\n\t\t\t\t} else if (y < rect.top && (!belowRect || belowRect.top > rect.top)) {\n\t\t\t\t\tbelow = child;\n\t\t\t\t\tbelowRect = rect;\n\t\t\t\t}\n\t\t\t} else if (aboveRect && yOverlap(aboveRect, rect)) aboveRect = upBot(aboveRect, rect.bottom);\n\t\t\telse if (belowRect && yOverlap(belowRect, rect)) belowRect = upTop(belowRect, rect.top);\n\t\t}\n\t}\n\tif (aboveRect && aboveRect.bottom >= y) {\n\t\tclosest = above;\n\t\tclosestRect = aboveRect;\n\t} else if (belowRect && belowRect.top <= y) {\n\t\tclosest = below;\n\t\tclosestRect = belowRect;\n\t}\n\tif (!closest) return {\n\t\tnode: parent,\n\t\toffset: 0\n\t};\n\tlet clipX = Math.max(closestRect.left, Math.min(closestRect.right, x));\n\tif (closest.nodeType == 3) return domPosInText(closest, clipX, y);\n\tif (closestOverlap && closest.contentEditable != \"false\") return domPosAtCoords(closest, clipX, y);\n\treturn {\n\t\tnode: parent,\n\t\toffset: Array.prototype.indexOf.call(parent.childNodes, closest) + (x >= (closestRect.left + closestRect.right) / 2 ? 1 : 0)\n\t};\n}\nfunction domPosInText(node, x, y) {\n\tlet len = node.nodeValue.length;\n\tlet closestOffset = -1, closestDY = 1e9, generalSide = 0;\n\tfor (let i = 0; i < len; i++) {\n\t\tlet rects = textRange(node, i, i + 1).getClientRects();\n\t\tfor (let j = 0; j < rects.length; j++) {\n\t\t\tlet rect = rects[j];\n\t\t\tif (rect.top == rect.bottom) continue;\n\t\t\tif (!generalSide) generalSide = x - rect.left;\n\t\t\tlet dy = (rect.top > y ? rect.top - y : y - rect.bottom) - 1;\n\t\t\tif (rect.left - 1 <= x && rect.right + 1 >= x && dy < closestDY) {\n\t\t\t\tlet right = x >= (rect.left + rect.right) / 2, after = right;\n\t\t\t\tif (browser.chrome || browser.gecko) {\n\t\t\t\t\tif (textRange(node, i).getBoundingClientRect().left == rect.right) after = !right;\n\t\t\t\t}\n\t\t\t\tif (dy <= 0) return {\n\t\t\t\t\tnode,\n\t\t\t\t\toffset: i + (after ? 1 : 0)\n\t\t\t\t};\n\t\t\t\tclosestOffset = i + (after ? 1 : 0);\n\t\t\t\tclosestDY = dy;\n\t\t\t}\n\t\t}\n\t}\n\treturn {\n\t\tnode,\n\t\toffset: closestOffset > -1 ? closestOffset : generalSide > 0 ? node.nodeValue.length : 0\n\t};\n}\nfunction posAtCoords(view, coords, precise, bias = -1) {\n\tvar _a, _b;\n\tlet content = view.contentDOM.getBoundingClientRect(), docTop = content.top + view.viewState.paddingTop;\n\tlet block, { docHeight } = view.viewState;\n\tlet { x, y } = coords, yOffset = y - docTop;\n\tif (yOffset < 0) return 0;\n\tif (yOffset > docHeight) return view.state.doc.length;\n\tfor (let halfLine = view.viewState.heightOracle.textHeight / 2, bounced = false;;) {\n\t\tblock = view.elementAtHeight(yOffset);\n\t\tif (block.type == BlockType.Text) break;\n\t\tfor (;;) {\n\t\t\tyOffset = bias > 0 ? block.bottom + halfLine : block.top - halfLine;\n\t\t\tif (yOffset >= 0 && yOffset <= docHeight) break;\n\t\t\tif (bounced) return precise ? null : 0;\n\t\t\tbounced = true;\n\t\t\tbias = -bias;\n\t\t}\n\t}\n\ty = docTop + yOffset;\n\tlet lineStart = block.from;\n\tif (lineStart < view.viewport.from) return view.viewport.from == 0 ? 0 : precise ? null : posAtCoordsImprecise(view, content, block, x, y);\n\tif (lineStart > view.viewport.to) return view.viewport.to == view.state.doc.length ? view.state.doc.length : precise ? null : posAtCoordsImprecise(view, content, block, x, y);\n\tlet doc = view.dom.ownerDocument;\n\tlet root = view.root.elementFromPoint ? view.root : doc;\n\tlet element = root.elementFromPoint(x, y);\n\tif (element && !view.contentDOM.contains(element)) element = null;\n\tif (!element) {\n\t\tx = Math.max(content.left + 1, Math.min(content.right - 1, x));\n\t\telement = root.elementFromPoint(x, y);\n\t\tif (element && !view.contentDOM.contains(element)) element = null;\n\t}\n\tlet node, offset = -1;\n\tif (element && ((_a = view.docView.nearest(element)) === null || _a === void 0 ? void 0 : _a.isEditable) != false) {\n\t\tif (doc.caretPositionFromPoint) {\n\t\t\tlet pos = doc.caretPositionFromPoint(x, y);\n\t\t\tif (pos) ({offsetNode: node, offset} = pos);\n\t\t} else if (doc.caretRangeFromPoint) {\n\t\t\tlet range = doc.caretRangeFromPoint(x, y);\n\t\t\tif (range) {\n\t\t\t\t({startContainer: node, startOffset: offset} = range);\n\t\t\t\tif (!view.contentDOM.contains(node) || browser.safari && isSuspiciousSafariCaretResult(node, offset, x) || browser.chrome && isSuspiciousChromeCaretResult(node, offset, x)) node = void 0;\n\t\t\t}\n\t\t}\n\t\tif (node) offset = Math.min(maxOffset(node), offset);\n\t}\n\tif (!node || !view.docView.dom.contains(node)) {\n\t\tlet line = LineView.find(view.docView, lineStart);\n\t\tif (!line) return yOffset > block.top + block.height / 2 ? block.to : block.from;\n\t\t({node, offset} = domPosAtCoords(line.dom, x, y));\n\t}\n\tlet nearest = view.docView.nearest(node);\n\tif (!nearest) return null;\n\tif (nearest.isWidget && ((_b = nearest.dom) === null || _b === void 0 ? void 0 : _b.nodeType) == 1) {\n\t\tlet rect = nearest.dom.getBoundingClientRect();\n\t\treturn coords.y < rect.top || coords.y <= rect.bottom && coords.x <= (rect.left + rect.right) / 2 ? nearest.posAtStart : nearest.posAtEnd;\n\t} else return nearest.localPosFromDOM(node, offset) + nearest.posAtStart;\n}\nfunction posAtCoordsImprecise(view, contentRect, block, x, y) {\n\tlet into = Math.round((x - contentRect.left) * view.defaultCharacterWidth);\n\tif (view.lineWrapping && block.height > view.defaultLineHeight * 1.5) {\n\t\tlet textHeight = view.viewState.heightOracle.textHeight;\n\t\tlet line = Math.floor((y - block.top - (view.defaultLineHeight - textHeight) * .5) / textHeight);\n\t\tinto += line * view.viewState.heightOracle.lineLength;\n\t}\n\tlet content = view.state.sliceDoc(block.from, block.to);\n\treturn block.from + findColumn(content, into, view.state.tabSize);\n}\nfunction isSuspiciousSafariCaretResult(node, offset, x) {\n\tlet len;\n\tif (node.nodeType != 3 || offset != (len = node.nodeValue.length)) return false;\n\tfor (let next = node.nextSibling; next; next = next.nextSibling) if (next.nodeType != 1 || next.nodeName != \"BR\") return false;\n\treturn textRange(node, len - 1, len).getBoundingClientRect().left > x;\n}\nfunction isSuspiciousChromeCaretResult(node, offset, x) {\n\tif (offset != 0) return false;\n\tfor (let cur = node;;) {\n\t\tlet parent = cur.parentNode;\n\t\tif (!parent || parent.nodeType != 1 || parent.firstChild != cur) return false;\n\t\tif (parent.classList.contains(\"cm-line\")) break;\n\t\tcur = parent;\n\t}\n\treturn x - (node.nodeType == 1 ? node.getBoundingClientRect() : textRange(node, 0, Math.max(node.nodeValue.length, 1)).getBoundingClientRect()).left > 5;\n}\nfunction blockAt(view, pos, side) {\n\tlet line = view.lineBlockAt(pos);\n\tif (Array.isArray(line.type)) {\n\t\tlet best;\n\t\tfor (let l of line.type) {\n\t\t\tif (l.from > pos) break;\n\t\t\tif (l.to < pos) continue;\n\t\t\tif (l.from < pos && l.to > pos) return l;\n\t\t\tif (!best || l.type == BlockType.Text && (best.type != l.type || (side < 0 ? l.from < pos : l.to > pos))) best = l;\n\t\t}\n\t\treturn best || line;\n\t}\n\treturn line;\n}\nfunction moveToLineBoundary(view, start, forward, includeWrap) {\n\tlet line = blockAt(view, start.head, start.assoc || -1);\n\tlet coords = !includeWrap || line.type != BlockType.Text || !(view.lineWrapping || line.widgetLineBreaks) ? null : view.coordsAtPos(start.assoc < 0 && start.head > line.from ? start.head - 1 : start.head);\n\tif (coords) {\n\t\tlet editorRect = view.dom.getBoundingClientRect();\n\t\tlet direction = view.textDirectionAt(line.from);\n\t\tlet pos = view.posAtCoords({\n\t\t\tx: forward == (direction == Direction.LTR) ? editorRect.right - 1 : editorRect.left + 1,\n\t\t\ty: (coords.top + coords.bottom) / 2\n\t\t});\n\t\tif (pos != null) return EditorSelection.cursor(pos, forward ? -1 : 1);\n\t}\n\treturn EditorSelection.cursor(forward ? line.to : line.from, forward ? -1 : 1);\n}\nfunction moveByChar(view, start, forward, by) {\n\tlet line = view.state.doc.lineAt(start.head), spans = view.bidiSpans(line);\n\tlet direction = view.textDirectionAt(line.from);\n\tfor (let cur = start, check = null;;) {\n\t\tlet next = moveVisually(line, spans, direction, cur, forward), char = movedOver;\n\t\tif (!next) {\n\t\t\tif (line.number == (forward ? view.state.doc.lines : 1)) return cur;\n\t\t\tchar = \"\\n\";\n\t\t\tline = view.state.doc.line(line.number + (forward ? 1 : -1));\n\t\t\tspans = view.bidiSpans(line);\n\t\t\tnext = view.visualLineSide(line, !forward);\n\t\t}\n\t\tif (!check) {\n\t\t\tif (!by) return next;\n\t\t\tcheck = by(char);\n\t\t} else if (!check(char)) return cur;\n\t\tcur = next;\n\t}\n}\nfunction byGroup(view, pos, start) {\n\tlet categorize = view.state.charCategorizer(pos);\n\tlet cat = categorize(start);\n\treturn (next) => {\n\t\tlet nextCat = categorize(next);\n\t\tif (cat == CharCategory.Space) cat = nextCat;\n\t\treturn cat == nextCat;\n\t};\n}\nfunction moveVertically(view, start, forward, distance) {\n\tlet startPos = start.head, dir = forward ? 1 : -1;\n\tif (startPos == (forward ? view.state.doc.length : 0)) return EditorSelection.cursor(startPos, start.assoc);\n\tlet goal = start.goalColumn, startY;\n\tlet rect = view.contentDOM.getBoundingClientRect();\n\tlet startCoords = view.coordsAtPos(startPos, start.assoc || -1), docTop = view.documentTop;\n\tif (startCoords) {\n\t\tif (goal == null) goal = startCoords.left - rect.left;\n\t\tstartY = dir < 0 ? startCoords.top : startCoords.bottom;\n\t} else {\n\t\tlet line = view.viewState.lineBlockAt(startPos);\n\t\tif (goal == null) goal = Math.min(rect.right - rect.left, view.defaultCharacterWidth * (startPos - line.from));\n\t\tstartY = (dir < 0 ? line.top : line.bottom) + docTop;\n\t}\n\tlet resolvedGoal = rect.left + goal;\n\tlet dist = distance !== null && distance !== void 0 ? distance : view.viewState.heightOracle.textHeight >> 1;\n\tfor (let extra = 0;; extra += 10) {\n\t\tlet curY = startY + (dist + extra) * dir;\n\t\tlet pos = posAtCoords(view, {\n\t\t\tx: resolvedGoal,\n\t\t\ty: curY\n\t\t}, false, dir);\n\t\tif (curY < rect.top || curY > rect.bottom || (dir < 0 ? pos < startPos : pos > startPos)) {\n\t\t\tlet charRect = view.docView.coordsForChar(pos);\n\t\t\tlet assoc = !charRect || curY < charRect.top ? -1 : 1;\n\t\t\treturn EditorSelection.cursor(pos, assoc, void 0, goal);\n\t\t}\n\t}\n}\nfunction skipAtomicRanges(atoms, pos, bias) {\n\tfor (;;) {\n\t\tlet moved = 0;\n\t\tfor (let set of atoms) set.between(pos - 1, pos + 1, (from, to, value) => {\n\t\t\tif (pos > from && pos < to) {\n\t\t\t\tlet side = moved || bias || (pos - from < to - pos ? -1 : 1);\n\t\t\t\tpos = side < 0 ? from : to;\n\t\t\t\tmoved = side;\n\t\t\t}\n\t\t});\n\t\tif (!moved) return pos;\n\t}\n}\nfunction skipAtoms(view, oldPos, pos) {\n\tlet newPos = skipAtomicRanges(view.state.facet(atomicRanges).map((f) => f(view)), pos.from, oldPos.head > pos.from ? -1 : 1);\n\treturn newPos == pos.from ? pos : EditorSelection.cursor(newPos, newPos < pos.from ? 1 : -1);\n}\nconst LineBreakPlaceholder = \"￿\";\nvar DOMReader = class {\n\tconstructor(points, state) {\n\t\tthis.points = points;\n\t\tthis.text = \"\";\n\t\tthis.lineSeparator = state.facet(EditorState.lineSeparator);\n\t}\n\tappend(text) {\n\t\tthis.text += text;\n\t}\n\tlineBreak() {\n\t\tthis.text += LineBreakPlaceholder;\n\t}\n\treadRange(start, end) {\n\t\tif (!start) return this;\n\t\tlet parent = start.parentNode;\n\t\tfor (let cur = start;;) {\n\t\t\tthis.findPointBefore(parent, cur);\n\t\t\tlet oldLen = this.text.length;\n\t\t\tthis.readNode(cur);\n\t\t\tlet next = cur.nextSibling;\n\t\t\tif (next == end) break;\n\t\t\tlet view = ContentView.get(cur), nextView = ContentView.get(next);\n\t\t\tif (view && nextView ? view.breakAfter : (view ? view.breakAfter : isBlockElement(cur)) || isBlockElement(next) && (cur.nodeName != \"BR\" || cur.cmIgnore) && this.text.length > oldLen) this.lineBreak();\n\t\t\tcur = next;\n\t\t}\n\t\tthis.findPointBefore(parent, end);\n\t\treturn this;\n\t}\n\treadTextNode(node) {\n\t\tlet text = node.nodeValue;\n\t\tfor (let point of this.points) if (point.node == node) point.pos = this.text.length + Math.min(point.offset, text.length);\n\t\tfor (let off = 0, re = this.lineSeparator ? null : /\\r\\n?|\\n/g;;) {\n\t\t\tlet nextBreak = -1, breakSize = 1, m;\n\t\t\tif (this.lineSeparator) {\n\t\t\t\tnextBreak = text.indexOf(this.lineSeparator, off);\n\t\t\t\tbreakSize = this.lineSeparator.length;\n\t\t\t} else if (m = re.exec(text)) {\n\t\t\t\tnextBreak = m.index;\n\t\t\t\tbreakSize = m[0].length;\n\t\t\t}\n\t\t\tthis.append(text.slice(off, nextBreak < 0 ? text.length : nextBreak));\n\t\t\tif (nextBreak < 0) break;\n\t\t\tthis.lineBreak();\n\t\t\tif (breakSize > 1) {\n\t\t\t\tfor (let point of this.points) if (point.node == node && point.pos > this.text.length) point.pos -= breakSize - 1;\n\t\t\t}\n\t\t\toff = nextBreak + breakSize;\n\t\t}\n\t}\n\treadNode(node) {\n\t\tif (node.cmIgnore) return;\n\t\tlet view = ContentView.get(node);\n\t\tlet fromView = view && view.overrideDOMText;\n\t\tif (fromView != null) {\n\t\t\tthis.findPointInside(node, fromView.length);\n\t\t\tfor (let i = fromView.iter(); !i.next().done;) if (i.lineBreak) this.lineBreak();\n\t\t\telse this.append(i.value);\n\t\t} else if (node.nodeType == 3) this.readTextNode(node);\n\t\telse if (node.nodeName == \"BR\") {\n\t\t\tif (node.nextSibling) this.lineBreak();\n\t\t} else if (node.nodeType == 1) this.readRange(node.firstChild, null);\n\t}\n\tfindPointBefore(node, next) {\n\t\tfor (let point of this.points) if (point.node == node && node.childNodes[point.offset] == next) point.pos = this.text.length;\n\t}\n\tfindPointInside(node, length) {\n\t\tfor (let point of this.points) if (node.nodeType == 3 ? point.node == node : node.contains(point.node)) point.pos = this.text.length + (isAtEnd(node, point.node, point.offset) ? length : 0);\n\t}\n};\nfunction isAtEnd(parent, node, offset) {\n\tfor (;;) {\n\t\tif (!node || offset < maxOffset(node)) return false;\n\t\tif (node == parent) return true;\n\t\toffset = domIndex(node) + 1;\n\t\tnode = node.parentNode;\n\t}\n}\nvar DOMPoint = class {\n\tconstructor(node, offset) {\n\t\tthis.node = node;\n\t\tthis.offset = offset;\n\t\tthis.pos = -1;\n\t}\n};\nvar DOMChange = class {\n\tconstructor(view, start, end, typeOver) {\n\t\tthis.typeOver = typeOver;\n\t\tthis.bounds = null;\n\t\tthis.text = \"\";\n\t\tthis.domChanged = start > -1;\n\t\tlet { impreciseHead: iHead, impreciseAnchor: iAnchor } = view.docView;\n\t\tif (view.state.readOnly && start > -1) this.newSel = null;\n\t\telse if (start > -1 && (this.bounds = view.docView.domBoundsAround(start, end, 0))) {\n\t\t\tlet selPoints = iHead || iAnchor ? [] : selectionPoints(view);\n\t\t\tlet reader = new DOMReader(selPoints, view.state);\n\t\t\treader.readRange(this.bounds.startDOM, this.bounds.endDOM);\n\t\t\tthis.text = reader.text;\n\t\t\tthis.newSel = selectionFromPoints(selPoints, this.bounds.from);\n\t\t} else {\n\t\t\tlet domSel = view.observer.selectionRange;\n\t\t\tlet head = iHead && iHead.node == domSel.focusNode && iHead.offset == domSel.focusOffset || !contains(view.contentDOM, domSel.focusNode) ? view.state.selection.main.head : view.docView.posFromDOM(domSel.focusNode, domSel.focusOffset);\n\t\t\tlet anchor = iAnchor && iAnchor.node == domSel.anchorNode && iAnchor.offset == domSel.anchorOffset || !contains(view.contentDOM, domSel.anchorNode) ? view.state.selection.main.anchor : view.docView.posFromDOM(domSel.anchorNode, domSel.anchorOffset);\n\t\t\tlet vp = view.viewport;\n\t\t\tif ((browser.ios || browser.chrome) && view.state.selection.main.empty && head != anchor && (vp.from > 0 || vp.to < view.state.doc.length)) {\n\t\t\t\tlet from = Math.min(head, anchor), to = Math.max(head, anchor);\n\t\t\t\tlet offFrom = vp.from - from, offTo = vp.to - to;\n\t\t\t\tif ((offFrom == 0 || offFrom == 1 || from == 0) && (offTo == 0 || offTo == -1 || to == view.state.doc.length)) {\n\t\t\t\t\thead = 0;\n\t\t\t\t\tanchor = view.state.doc.length;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.newSel = EditorSelection.single(anchor, head);\n\t\t}\n\t}\n};\nfunction applyDOMChange(view, domChange) {\n\tlet change;\n\tlet { newSel } = domChange, sel = view.state.selection.main;\n\tlet lastKey = view.inputState.lastKeyTime > Date.now() - 100 ? view.inputState.lastKeyCode : -1;\n\tif (domChange.bounds) {\n\t\tlet { from, to } = domChange.bounds;\n\t\tlet preferredPos = sel.from, preferredSide = null;\n\t\tif (lastKey === 8 || browser.android && domChange.text.length < to - from) {\n\t\t\tpreferredPos = sel.to;\n\t\t\tpreferredSide = \"end\";\n\t\t}\n\t\tlet diff = findDiff(view.state.doc.sliceString(from, to, LineBreakPlaceholder), domChange.text, preferredPos - from, preferredSide);\n\t\tif (diff) {\n\t\t\tif (browser.chrome && lastKey == 13 && diff.toB == diff.from + 2 && domChange.text.slice(diff.from, diff.toB) == LineBreakPlaceholder + LineBreakPlaceholder) diff.toB--;\n\t\t\tchange = {\n\t\t\t\tfrom: from + diff.from,\n\t\t\t\tto: from + diff.toA,\n\t\t\t\tinsert: Text.of(domChange.text.slice(diff.from, diff.toB).split(LineBreakPlaceholder))\n\t\t\t};\n\t\t}\n\t} else if (newSel && (!view.hasFocus && view.state.facet(editable) || newSel.main.eq(sel))) newSel = null;\n\tif (!change && !newSel) return false;\n\tif (!change && domChange.typeOver && !sel.empty && newSel && newSel.main.empty) change = {\n\t\tfrom: sel.from,\n\t\tto: sel.to,\n\t\tinsert: view.state.doc.slice(sel.from, sel.to)\n\t};\n\telse if ((browser.mac || browser.android) && change && change.from == change.to && change.from == sel.head - 1 && /^\\. ?$/.test(change.insert.toString()) && view.contentDOM.getAttribute(\"autocorrect\") == \"off\") {\n\t\tif (newSel && change.insert.length == 2) newSel = EditorSelection.single(newSel.main.anchor - 1, newSel.main.head - 1);\n\t\tchange = {\n\t\t\tfrom: change.from,\n\t\t\tto: change.to,\n\t\t\tinsert: Text.of([change.insert.toString().replace(\".\", \" \")])\n\t\t};\n\t} else if (change && change.from >= sel.from && change.to <= sel.to && (change.from != sel.from || change.to != sel.to) && sel.to - sel.from - (change.to - change.from) <= 4) change = {\n\t\tfrom: sel.from,\n\t\tto: sel.to,\n\t\tinsert: view.state.doc.slice(sel.from, change.from).append(change.insert).append(view.state.doc.slice(change.to, sel.to))\n\t};\n\telse if (browser.chrome && change && change.from == change.to && change.from == sel.head && change.insert.toString() == \"\\n \" && view.lineWrapping) {\n\t\tif (newSel) newSel = EditorSelection.single(newSel.main.anchor - 1, newSel.main.head - 1);\n\t\tchange = {\n\t\t\tfrom: sel.from,\n\t\t\tto: sel.to,\n\t\t\tinsert: Text.of([\" \"])\n\t\t};\n\t}\n\tif (change) return applyDOMChangeInner(view, change, newSel, lastKey);\n\telse if (newSel && !newSel.main.eq(sel)) {\n\t\tlet scrollIntoView = false, userEvent = \"select\";\n\t\tif (view.inputState.lastSelectionTime > Date.now() - 50) {\n\t\t\tif (view.inputState.lastSelectionOrigin == \"select\") scrollIntoView = true;\n\t\t\tuserEvent = view.inputState.lastSelectionOrigin;\n\t\t}\n\t\tview.dispatch({\n\t\t\tselection: newSel,\n\t\t\tscrollIntoView,\n\t\t\tuserEvent\n\t\t});\n\t\treturn true;\n\t} else return false;\n}\nfunction applyDOMChangeInner(view, change, newSel, lastKey = -1) {\n\tif (browser.ios && view.inputState.flushIOSKey(change)) return true;\n\tlet sel = view.state.selection.main;\n\tif (browser.android && (change.to == sel.to && (change.from == sel.from || change.from == sel.from - 1 && view.state.sliceDoc(change.from, sel.from) == \" \") && change.insert.length == 1 && change.insert.lines == 2 && dispatchKey(view.contentDOM, \"Enter\", 13) || (change.from == sel.from - 1 && change.to == sel.to && change.insert.length == 0 || lastKey == 8 && change.insert.length < change.to - change.from && change.to > sel.head) && dispatchKey(view.contentDOM, \"Backspace\", 8) || change.from == sel.from && change.to == sel.to + 1 && change.insert.length == 0 && dispatchKey(view.contentDOM, \"Delete\", 46))) return true;\n\tlet text = change.insert.toString();\n\tif (view.inputState.composing >= 0) view.inputState.composing++;\n\tlet defaultTr;\n\tlet defaultInsert = () => defaultTr || (defaultTr = applyDefaultInsert(view, change, newSel));\n\tif (!view.state.facet(inputHandler$1).some((h) => h(view, change.from, change.to, text, defaultInsert))) view.dispatch(defaultInsert());\n\treturn true;\n}\nfunction applyDefaultInsert(view, change, newSel) {\n\tlet tr, startState = view.state, sel = startState.selection.main;\n\tif (change.from >= sel.from && change.to <= sel.to && change.to - change.from >= (sel.to - sel.from) / 3 && (!newSel || newSel.main.empty && newSel.main.from == change.from + change.insert.length) && view.inputState.composing < 0) {\n\t\tlet before = sel.from < change.from ? startState.sliceDoc(sel.from, change.from) : \"\";\n\t\tlet after = sel.to > change.to ? startState.sliceDoc(change.to, sel.to) : \"\";\n\t\ttr = startState.replaceSelection(view.state.toText(before + change.insert.sliceString(0, void 0, view.state.lineBreak) + after));\n\t} else {\n\t\tlet changes = startState.changes(change);\n\t\tlet mainSel = newSel && newSel.main.to <= changes.newLength ? newSel.main : void 0;\n\t\tif (startState.selection.ranges.length > 1 && view.inputState.composing >= 0 && change.to <= sel.to && change.to >= sel.to - 10) {\n\t\t\tlet replaced = view.state.sliceDoc(change.from, change.to);\n\t\t\tlet compositionRange, composition = newSel && findCompositionNode(view, newSel.main.head);\n\t\t\tif (composition) {\n\t\t\t\tlet dLen = change.insert.length - (change.to - change.from);\n\t\t\t\tcompositionRange = {\n\t\t\t\t\tfrom: composition.from,\n\t\t\t\t\tto: composition.to - dLen\n\t\t\t\t};\n\t\t\t} else compositionRange = view.state.doc.lineAt(sel.head);\n\t\t\tlet offset = sel.to - change.to, size = sel.to - sel.from;\n\t\t\ttr = startState.changeByRange((range) => {\n\t\t\t\tif (range.from == sel.from && range.to == sel.to) return {\n\t\t\t\t\tchanges,\n\t\t\t\t\trange: mainSel || range.map(changes)\n\t\t\t\t};\n\t\t\t\tlet to = range.to - offset, from = to - replaced.length;\n\t\t\t\tif (range.to - range.from != size || view.state.sliceDoc(from, to) != replaced || range.to >= compositionRange.from && range.from <= compositionRange.to) return { range };\n\t\t\t\tlet rangeChanges = startState.changes({\n\t\t\t\t\tfrom,\n\t\t\t\t\tto,\n\t\t\t\t\tinsert: change.insert\n\t\t\t\t}), selOff = range.to - sel.to;\n\t\t\t\treturn {\n\t\t\t\t\tchanges: rangeChanges,\n\t\t\t\t\trange: !mainSel ? range.map(rangeChanges) : EditorSelection.range(Math.max(0, mainSel.anchor + selOff), Math.max(0, mainSel.head + selOff))\n\t\t\t\t};\n\t\t\t});\n\t\t} else tr = {\n\t\t\tchanges,\n\t\t\tselection: mainSel && startState.selection.replaceRange(mainSel)\n\t\t};\n\t}\n\tlet userEvent = \"input.type\";\n\tif (view.composing || view.inputState.compositionPendingChange && view.inputState.compositionEndedAt > Date.now() - 50) {\n\t\tview.inputState.compositionPendingChange = false;\n\t\tuserEvent += \".compose\";\n\t\tif (view.inputState.compositionFirstChange) {\n\t\t\tuserEvent += \".start\";\n\t\t\tview.inputState.compositionFirstChange = false;\n\t\t}\n\t}\n\treturn startState.update(tr, {\n\t\tuserEvent,\n\t\tscrollIntoView: true\n\t});\n}\nfunction findDiff(a, b, preferredPos, preferredSide) {\n\tlet minLen = Math.min(a.length, b.length);\n\tlet from = 0;\n\twhile (from < minLen && a.charCodeAt(from) == b.charCodeAt(from)) from++;\n\tif (from == minLen && a.length == b.length) return null;\n\tlet toA = a.length, toB = b.length;\n\twhile (toA > 0 && toB > 0 && a.charCodeAt(toA - 1) == b.charCodeAt(toB - 1)) {\n\t\ttoA--;\n\t\ttoB--;\n\t}\n\tif (preferredSide == \"end\") {\n\t\tlet adjust = Math.max(0, from - Math.min(toA, toB));\n\t\tpreferredPos -= toA + adjust - from;\n\t}\n\tif (toA < from && a.length < b.length) {\n\t\tlet move = preferredPos <= from && preferredPos >= toA ? from - preferredPos : 0;\n\t\tfrom -= move;\n\t\ttoB = from + (toB - toA);\n\t\ttoA = from;\n\t} else if (toB < from) {\n\t\tlet move = preferredPos <= from && preferredPos >= toB ? from - preferredPos : 0;\n\t\tfrom -= move;\n\t\ttoA = from + (toA - toB);\n\t\ttoB = from;\n\t}\n\treturn {\n\t\tfrom,\n\t\ttoA,\n\t\ttoB\n\t};\n}\nfunction selectionPoints(view) {\n\tlet result = [];\n\tif (view.root.activeElement != view.contentDOM) return result;\n\tlet { anchorNode, anchorOffset, focusNode, focusOffset } = view.observer.selectionRange;\n\tif (anchorNode) {\n\t\tresult.push(new DOMPoint(anchorNode, anchorOffset));\n\t\tif (focusNode != anchorNode || focusOffset != anchorOffset) result.push(new DOMPoint(focusNode, focusOffset));\n\t}\n\treturn result;\n}\nfunction selectionFromPoints(points, base) {\n\tif (points.length == 0) return null;\n\tlet anchor = points[0].pos, head = points.length == 2 ? points[1].pos : anchor;\n\treturn anchor > -1 && head > -1 ? EditorSelection.single(anchor + base, head + base) : null;\n}\nvar InputState = class {\n\tsetSelectionOrigin(origin) {\n\t\tthis.lastSelectionOrigin = origin;\n\t\tthis.lastSelectionTime = Date.now();\n\t}\n\tconstructor(view) {\n\t\tthis.view = view;\n\t\tthis.lastKeyCode = 0;\n\t\tthis.lastKeyTime = 0;\n\t\tthis.lastTouchTime = 0;\n\t\tthis.lastFocusTime = 0;\n\t\tthis.lastScrollTop = 0;\n\t\tthis.lastScrollLeft = 0;\n\t\tthis.pendingIOSKey = void 0;\n\t\t/**\n\t\tWhen enabled (>-1), tab presses are not given to key handlers,\n\t\tleaving the browser's default behavior. If >0, the mode expires\n\t\tat that timestamp, and any other keypress clears it.\n\t\tEsc enables temporary tab focus mode for two seconds when not\n\t\totherwise handled.\n\t\t*/\n\t\tthis.tabFocusMode = -1;\n\t\tthis.lastSelectionOrigin = null;\n\t\tthis.lastSelectionTime = 0;\n\t\tthis.lastContextMenu = 0;\n\t\tthis.scrollHandlers = [];\n\t\tthis.handlers = Object.create(null);\n\t\tthis.composing = -1;\n\t\tthis.compositionFirstChange = null;\n\t\tthis.compositionEndedAt = 0;\n\t\tthis.compositionPendingKey = false;\n\t\tthis.compositionPendingChange = false;\n\t\tthis.mouseSelection = null;\n\t\tthis.draggedContent = null;\n\t\tthis.handleEvent = this.handleEvent.bind(this);\n\t\tthis.notifiedFocused = view.hasFocus;\n\t\tif (browser.safari) view.contentDOM.addEventListener(\"input\", () => null);\n\t\tif (browser.gecko) firefoxCopyCutHack(view.contentDOM.ownerDocument);\n\t}\n\thandleEvent(event) {\n\t\tif (!eventBelongsToEditor(this.view, event) || this.ignoreDuringComposition(event)) return;\n\t\tif (event.type == \"keydown\" && this.keydown(event)) return;\n\t\tif (this.view.updateState != 0) Promise.resolve().then(() => this.runHandlers(event.type, event));\n\t\telse this.runHandlers(event.type, event);\n\t}\n\trunHandlers(type, event) {\n\t\tlet handlers = this.handlers[type];\n\t\tif (handlers) {\n\t\t\tfor (let observer of handlers.observers) observer(this.view, event);\n\t\t\tfor (let handler of handlers.handlers) {\n\t\t\t\tif (event.defaultPrevented) break;\n\t\t\t\tif (handler(this.view, event)) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tensureHandlers(plugins) {\n\t\tlet handlers = computeHandlers(plugins), prev = this.handlers, dom = this.view.contentDOM;\n\t\tfor (let type in handlers) if (type != \"scroll\") {\n\t\t\tlet passive = !handlers[type].handlers.length;\n\t\t\tlet exists = prev[type];\n\t\t\tif (exists && passive != !exists.handlers.length) {\n\t\t\t\tdom.removeEventListener(type, this.handleEvent);\n\t\t\t\texists = null;\n\t\t\t}\n\t\t\tif (!exists) dom.addEventListener(type, this.handleEvent, { passive });\n\t\t}\n\t\tfor (let type in prev) if (type != \"scroll\" && !handlers[type]) dom.removeEventListener(type, this.handleEvent);\n\t\tthis.handlers = handlers;\n\t}\n\tkeydown(event) {\n\t\tthis.lastKeyCode = event.keyCode;\n\t\tthis.lastKeyTime = Date.now();\n\t\tif (event.keyCode == 9 && this.tabFocusMode > -1 && (!this.tabFocusMode || Date.now() <= this.tabFocusMode)) return true;\n\t\tif (this.tabFocusMode > 0 && event.keyCode != 27 && modifierCodes.indexOf(event.keyCode) < 0) this.tabFocusMode = -1;\n\t\tif (browser.android && browser.chrome && !event.synthetic && (event.keyCode == 13 || event.keyCode == 8)) {\n\t\t\tthis.view.observer.delayAndroidKey(event.key, event.keyCode);\n\t\t\treturn true;\n\t\t}\n\t\tlet pending;\n\t\tif (browser.ios && !event.synthetic && !event.altKey && !event.metaKey && ((pending = PendingKeys.find((key) => key.keyCode == event.keyCode)) && !event.ctrlKey || EmacsyPendingKeys.indexOf(event.key) > -1 && event.ctrlKey && !event.shiftKey)) {\n\t\t\tthis.pendingIOSKey = pending || event;\n\t\t\tsetTimeout(() => this.flushIOSKey(), 250);\n\t\t\treturn true;\n\t\t}\n\t\tif (event.keyCode != 229) this.view.observer.forceFlush();\n\t\treturn false;\n\t}\n\tflushIOSKey(change) {\n\t\tlet key = this.pendingIOSKey;\n\t\tif (!key) return false;\n\t\tif (key.key == \"Enter\" && change && change.from < change.to && /^\\S+$/.test(change.insert.toString())) return false;\n\t\tthis.pendingIOSKey = void 0;\n\t\treturn dispatchKey(this.view.contentDOM, key.key, key.keyCode, key instanceof KeyboardEvent ? key : void 0);\n\t}\n\tignoreDuringComposition(event) {\n\t\tif (!/^key/.test(event.type)) return false;\n\t\tif (this.composing > 0) return true;\n\t\tif (browser.safari && !browser.ios && this.compositionPendingKey && Date.now() - this.compositionEndedAt < 100) {\n\t\t\tthis.compositionPendingKey = false;\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\tstartMouseSelection(mouseSelection) {\n\t\tif (this.mouseSelection) this.mouseSelection.destroy();\n\t\tthis.mouseSelection = mouseSelection;\n\t}\n\tupdate(update) {\n\t\tthis.view.observer.update(update);\n\t\tif (this.mouseSelection) this.mouseSelection.update(update);\n\t\tif (this.draggedContent && update.docChanged) this.draggedContent = this.draggedContent.map(update.changes);\n\t\tif (update.transactions.length) this.lastKeyCode = this.lastSelectionTime = 0;\n\t}\n\tdestroy() {\n\t\tif (this.mouseSelection) this.mouseSelection.destroy();\n\t}\n};\nfunction bindHandler(plugin, handler) {\n\treturn (view, event) => {\n\t\ttry {\n\t\t\treturn handler.call(plugin, event, view);\n\t\t} catch (e) {\n\t\t\tlogException(view.state, e);\n\t\t}\n\t};\n}\nfunction computeHandlers(plugins) {\n\tlet result = Object.create(null);\n\tfunction record(type) {\n\t\treturn result[type] || (result[type] = {\n\t\t\tobservers: [],\n\t\t\thandlers: []\n\t\t});\n\t}\n\tfor (let plugin of plugins) {\n\t\tlet spec = plugin.spec;\n\t\tif (spec && spec.domEventHandlers) for (let type in spec.domEventHandlers) {\n\t\t\tlet f = spec.domEventHandlers[type];\n\t\t\tif (f) record(type).handlers.push(bindHandler(plugin.value, f));\n\t\t}\n\t\tif (spec && spec.domEventObservers) for (let type in spec.domEventObservers) {\n\t\t\tlet f = spec.domEventObservers[type];\n\t\t\tif (f) record(type).observers.push(bindHandler(plugin.value, f));\n\t\t}\n\t}\n\tfor (let type in handlers) record(type).handlers.push(handlers[type]);\n\tfor (let type in observers) record(type).observers.push(observers[type]);\n\treturn result;\n}\nconst PendingKeys = [\n\t{\n\t\tkey: \"Backspace\",\n\t\tkeyCode: 8,\n\t\tinputType: \"deleteContentBackward\"\n\t},\n\t{\n\t\tkey: \"Enter\",\n\t\tkeyCode: 13,\n\t\tinputType: \"insertParagraph\"\n\t},\n\t{\n\t\tkey: \"Enter\",\n\t\tkeyCode: 13,\n\t\tinputType: \"insertLineBreak\"\n\t},\n\t{\n\t\tkey: \"Delete\",\n\t\tkeyCode: 46,\n\t\tinputType: \"deleteContentForward\"\n\t}\n];\nconst EmacsyPendingKeys = \"dthko\";\nconst modifierCodes = [\n\t16,\n\t17,\n\t18,\n\t20,\n\t91,\n\t92,\n\t224,\n\t225\n];\nconst dragScrollMargin = 6;\nfunction dragScrollSpeed(dist) {\n\treturn Math.max(0, dist) * .7 + 8;\n}\nfunction dist(a, b) {\n\treturn Math.max(Math.abs(a.clientX - b.clientX), Math.abs(a.clientY - b.clientY));\n}\nvar MouseSelection = class {\n\tconstructor(view, startEvent, style, mustSelect) {\n\t\tthis.view = view;\n\t\tthis.startEvent = startEvent;\n\t\tthis.style = style;\n\t\tthis.mustSelect = mustSelect;\n\t\tthis.scrollSpeed = {\n\t\t\tx: 0,\n\t\t\ty: 0\n\t\t};\n\t\tthis.scrolling = -1;\n\t\tthis.lastEvent = startEvent;\n\t\tthis.scrollParents = scrollableParents(view.contentDOM);\n\t\tthis.atoms = view.state.facet(atomicRanges).map((f) => f(view));\n\t\tlet doc = view.contentDOM.ownerDocument;\n\t\tdoc.addEventListener(\"mousemove\", this.move = this.move.bind(this));\n\t\tdoc.addEventListener(\"mouseup\", this.up = this.up.bind(this));\n\t\tthis.extend = startEvent.shiftKey;\n\t\tthis.multiple = view.state.facet(EditorState.allowMultipleSelections) && addsSelectionRange(view, startEvent);\n\t\tthis.dragging = isInPrimarySelection(view, startEvent) && getClickType(startEvent) == 1 ? null : false;\n\t}\n\tstart(event) {\n\t\tif (this.dragging === false) this.select(event);\n\t}\n\tmove(event) {\n\t\tif (event.buttons == 0) return this.destroy();\n\t\tif (this.dragging || this.dragging == null && dist(this.startEvent, event) < 10) return;\n\t\tthis.select(this.lastEvent = event);\n\t\tlet sx = 0, sy = 0;\n\t\tlet left = 0, top = 0, right = this.view.win.innerWidth, bottom = this.view.win.innerHeight;\n\t\tif (this.scrollParents.x) ({left, right} = this.scrollParents.x.getBoundingClientRect());\n\t\tif (this.scrollParents.y) ({top, bottom} = this.scrollParents.y.getBoundingClientRect());\n\t\tlet margins = getScrollMargins(this.view);\n\t\tif (event.clientX - margins.left <= left + dragScrollMargin) sx = -dragScrollSpeed(left - event.clientX);\n\t\telse if (event.clientX + margins.right >= right - dragScrollMargin) sx = dragScrollSpeed(event.clientX - right);\n\t\tif (event.clientY - margins.top <= top + dragScrollMargin) sy = -dragScrollSpeed(top - event.clientY);\n\t\telse if (event.clientY + margins.bottom >= bottom - dragScrollMargin) sy = dragScrollSpeed(event.clientY - bottom);\n\t\tthis.setScrollSpeed(sx, sy);\n\t}\n\tup(event) {\n\t\tif (this.dragging == null) this.select(this.lastEvent);\n\t\tif (!this.dragging) event.preventDefault();\n\t\tthis.destroy();\n\t}\n\tdestroy() {\n\t\tthis.setScrollSpeed(0, 0);\n\t\tlet doc = this.view.contentDOM.ownerDocument;\n\t\tdoc.removeEventListener(\"mousemove\", this.move);\n\t\tdoc.removeEventListener(\"mouseup\", this.up);\n\t\tthis.view.inputState.mouseSelection = this.view.inputState.draggedContent = null;\n\t}\n\tsetScrollSpeed(sx, sy) {\n\t\tthis.scrollSpeed = {\n\t\t\tx: sx,\n\t\t\ty: sy\n\t\t};\n\t\tif (sx || sy) {\n\t\t\tif (this.scrolling < 0) this.scrolling = setInterval(() => this.scroll(), 50);\n\t\t} else if (this.scrolling > -1) {\n\t\t\tclearInterval(this.scrolling);\n\t\t\tthis.scrolling = -1;\n\t\t}\n\t}\n\tscroll() {\n\t\tlet { x, y } = this.scrollSpeed;\n\t\tif (x && this.scrollParents.x) {\n\t\t\tthis.scrollParents.x.scrollLeft += x;\n\t\t\tx = 0;\n\t\t}\n\t\tif (y && this.scrollParents.y) {\n\t\t\tthis.scrollParents.y.scrollTop += y;\n\t\t\ty = 0;\n\t\t}\n\t\tif (x || y) this.view.win.scrollBy(x, y);\n\t\tif (this.dragging === false) this.select(this.lastEvent);\n\t}\n\tskipAtoms(sel) {\n\t\tlet ranges = null;\n\t\tfor (let i = 0; i < sel.ranges.length; i++) {\n\t\t\tlet range = sel.ranges[i], updated = null;\n\t\t\tif (range.empty) {\n\t\t\t\tlet pos = skipAtomicRanges(this.atoms, range.from, 0);\n\t\t\t\tif (pos != range.from) updated = EditorSelection.cursor(pos, -1);\n\t\t\t} else {\n\t\t\t\tlet from = skipAtomicRanges(this.atoms, range.from, -1);\n\t\t\t\tlet to = skipAtomicRanges(this.atoms, range.to, 1);\n\t\t\t\tif (from != range.from || to != range.to) updated = EditorSelection.range(range.from == range.anchor ? from : to, range.from == range.head ? from : to);\n\t\t\t}\n\t\t\tif (updated) {\n\t\t\t\tif (!ranges) ranges = sel.ranges.slice();\n\t\t\t\tranges[i] = updated;\n\t\t\t}\n\t\t}\n\t\treturn ranges ? EditorSelection.create(ranges, sel.mainIndex) : sel;\n\t}\n\tselect(event) {\n\t\tlet { view } = this, selection = this.skipAtoms(this.style.get(event, this.extend, this.multiple));\n\t\tif (this.mustSelect || !selection.eq(view.state.selection, this.dragging === false)) this.view.dispatch({\n\t\t\tselection,\n\t\t\tuserEvent: \"select.pointer\"\n\t\t});\n\t\tthis.mustSelect = false;\n\t}\n\tupdate(update) {\n\t\tif (update.transactions.some((tr) => tr.isUserEvent(\"input.type\"))) this.destroy();\n\t\telse if (this.style.update(update)) setTimeout(() => this.select(this.lastEvent), 20);\n\t}\n};\nfunction addsSelectionRange(view, event) {\n\tlet facet = view.state.facet(clickAddsSelectionRange);\n\treturn facet.length ? facet[0](event) : browser.mac ? event.metaKey : event.ctrlKey;\n}\nfunction dragMovesSelection(view, event) {\n\tlet facet = view.state.facet(dragMovesSelection$1);\n\treturn facet.length ? facet[0](event) : browser.mac ? !event.altKey : !event.ctrlKey;\n}\nfunction isInPrimarySelection(view, event) {\n\tlet { main } = view.state.selection;\n\tif (main.empty) return false;\n\tlet sel = getSelection(view.root);\n\tif (!sel || sel.rangeCount == 0) return true;\n\tlet rects = sel.getRangeAt(0).getClientRects();\n\tfor (let i = 0; i < rects.length; i++) {\n\t\tlet rect = rects[i];\n\t\tif (rect.left <= event.clientX && rect.right >= event.clientX && rect.top <= event.clientY && rect.bottom >= event.clientY) return true;\n\t}\n\treturn false;\n}\nfunction eventBelongsToEditor(view, event) {\n\tif (!event.bubbles) return true;\n\tif (event.defaultPrevented) return false;\n\tfor (let node = event.target, cView; node != view.contentDOM; node = node.parentNode) if (!node || node.nodeType == 11 || (cView = ContentView.get(node)) && cView.ignoreEvent(event)) return false;\n\treturn true;\n}\nconst handlers = /* @__PURE__ */ Object.create(null);\nconst observers = /* @__PURE__ */ Object.create(null);\nconst brokenClipboardAPI = browser.ie && browser.ie_version < 15 || browser.ios && browser.webkit_version < 604;\nfunction capturePaste(view) {\n\tlet parent = view.dom.parentNode;\n\tif (!parent) return;\n\tlet target = parent.appendChild(document.createElement(\"textarea\"));\n\ttarget.style.cssText = \"position: fixed; left: -10000px; top: 10px\";\n\ttarget.focus();\n\tsetTimeout(() => {\n\t\tview.focus();\n\t\ttarget.remove();\n\t\tdoPaste(view, target.value);\n\t}, 50);\n}\nfunction textFilter(state, facet, text) {\n\tfor (let filter of state.facet(facet)) text = filter(text, state);\n\treturn text;\n}\nfunction doPaste(view, input) {\n\tinput = textFilter(view.state, clipboardInputFilter, input);\n\tlet { state } = view, changes, i = 1, text = state.toText(input);\n\tlet byLine = text.lines == state.selection.ranges.length;\n\tif (lastLinewiseCopy != null && state.selection.ranges.every((r) => r.empty) && lastLinewiseCopy == text.toString()) {\n\t\tlet lastLine = -1;\n\t\tchanges = state.changeByRange((range) => {\n\t\t\tlet line = state.doc.lineAt(range.from);\n\t\t\tif (line.from == lastLine) return { range };\n\t\t\tlastLine = line.from;\n\t\t\tlet insert = state.toText((byLine ? text.line(i++).text : input) + state.lineBreak);\n\t\t\treturn {\n\t\t\t\tchanges: {\n\t\t\t\t\tfrom: line.from,\n\t\t\t\t\tinsert\n\t\t\t\t},\n\t\t\t\trange: EditorSelection.cursor(range.from + insert.length)\n\t\t\t};\n\t\t});\n\t} else if (byLine) changes = state.changeByRange((range) => {\n\t\tlet line = text.line(i++);\n\t\treturn {\n\t\t\tchanges: {\n\t\t\t\tfrom: range.from,\n\t\t\t\tto: range.to,\n\t\t\t\tinsert: line.text\n\t\t\t},\n\t\t\trange: EditorSelection.cursor(range.from + line.length)\n\t\t};\n\t});\n\telse changes = state.replaceSelection(text);\n\tview.dispatch(changes, {\n\t\tuserEvent: \"input.paste\",\n\t\tscrollIntoView: true\n\t});\n}\nobservers.scroll = (view) => {\n\tview.inputState.lastScrollTop = view.scrollDOM.scrollTop;\n\tview.inputState.lastScrollLeft = view.scrollDOM.scrollLeft;\n};\nhandlers.keydown = (view, event) => {\n\tview.inputState.setSelectionOrigin(\"select\");\n\tif (event.keyCode == 27 && view.inputState.tabFocusMode != 0) view.inputState.tabFocusMode = Date.now() + 2e3;\n\treturn false;\n};\nobservers.touchstart = (view, e) => {\n\tview.inputState.lastTouchTime = Date.now();\n\tview.inputState.setSelectionOrigin(\"select.pointer\");\n};\nobservers.touchmove = (view) => {\n\tview.inputState.setSelectionOrigin(\"select.pointer\");\n};\nhandlers.mousedown = (view, event) => {\n\tview.observer.flush();\n\tif (view.inputState.lastTouchTime > Date.now() - 2e3) return false;\n\tlet style = null;\n\tfor (let makeStyle of view.state.facet(mouseSelectionStyle)) {\n\t\tstyle = makeStyle(view, event);\n\t\tif (style) break;\n\t}\n\tif (!style && event.button == 0) style = basicMouseSelection(view, event);\n\tif (style) {\n\t\tlet mustFocus = !view.hasFocus;\n\t\tview.inputState.startMouseSelection(new MouseSelection(view, event, style, mustFocus));\n\t\tif (mustFocus) view.observer.ignore(() => {\n\t\t\tfocusPreventScroll(view.contentDOM);\n\t\t\tlet active = view.root.activeElement;\n\t\t\tif (active && !active.contains(view.contentDOM)) active.blur();\n\t\t});\n\t\tlet mouseSel = view.inputState.mouseSelection;\n\t\tif (mouseSel) {\n\t\t\tmouseSel.start(event);\n\t\t\treturn mouseSel.dragging === false;\n\t\t}\n\t}\n\treturn false;\n};\nfunction rangeForClick(view, pos, bias, type) {\n\tif (type == 1) return EditorSelection.cursor(pos, bias);\n\telse if (type == 2) return groupAt(view.state, pos, bias);\n\telse {\n\t\tlet visual = LineView.find(view.docView, pos), line = view.state.doc.lineAt(visual ? visual.posAtEnd : pos);\n\t\tlet from = visual ? visual.posAtStart : line.from, to = visual ? visual.posAtEnd : line.to;\n\t\tif (to < view.state.doc.length && to == line.to) to++;\n\t\treturn EditorSelection.range(from, to);\n\t}\n}\nlet inside = (x, y, rect) => y >= rect.top && y <= rect.bottom && x >= rect.left && x <= rect.right;\nfunction findPositionSide(view, pos, x, y) {\n\tlet line = LineView.find(view.docView, pos);\n\tif (!line) return 1;\n\tlet off = pos - line.posAtStart;\n\tif (off == 0) return 1;\n\tif (off == line.length) return -1;\n\tlet before = line.coordsAt(off, -1);\n\tif (before && inside(x, y, before)) return -1;\n\tlet after = line.coordsAt(off, 1);\n\tif (after && inside(x, y, after)) return 1;\n\treturn before && before.bottom >= y ? -1 : 1;\n}\nfunction queryPos(view, event) {\n\tlet pos = view.posAtCoords({\n\t\tx: event.clientX,\n\t\ty: event.clientY\n\t}, false);\n\treturn {\n\t\tpos,\n\t\tbias: findPositionSide(view, pos, event.clientX, event.clientY)\n\t};\n}\nconst BadMouseDetail = browser.ie && browser.ie_version <= 11;\nlet lastMouseDown = null, lastMouseDownCount = 0, lastMouseDownTime = 0;\nfunction getClickType(event) {\n\tif (!BadMouseDetail) return event.detail;\n\tlet last = lastMouseDown, lastTime = lastMouseDownTime;\n\tlastMouseDown = event;\n\tlastMouseDownTime = Date.now();\n\treturn lastMouseDownCount = !last || lastTime > Date.now() - 400 && Math.abs(last.clientX - event.clientX) < 2 && Math.abs(last.clientY - event.clientY) < 2 ? (lastMouseDownCount + 1) % 3 : 1;\n}\nfunction basicMouseSelection(view, event) {\n\tlet start = queryPos(view, event), type = getClickType(event);\n\tlet startSel = view.state.selection;\n\treturn {\n\t\tupdate(update) {\n\t\t\tif (update.docChanged) {\n\t\t\t\tstart.pos = update.changes.mapPos(start.pos);\n\t\t\t\tstartSel = startSel.map(update.changes);\n\t\t\t}\n\t\t},\n\t\tget(event, extend, multiple) {\n\t\t\tlet cur = queryPos(view, event), removed;\n\t\t\tlet range = rangeForClick(view, cur.pos, cur.bias, type);\n\t\t\tif (start.pos != cur.pos && !extend) {\n\t\t\t\tlet startRange = rangeForClick(view, start.pos, start.bias, type);\n\t\t\t\tlet from = Math.min(startRange.from, range.from), to = Math.max(startRange.to, range.to);\n\t\t\t\trange = from < range.from ? EditorSelection.range(from, to) : EditorSelection.range(to, from);\n\t\t\t}\n\t\t\tif (extend) return startSel.replaceRange(startSel.main.extend(range.from, range.to));\n\t\t\telse if (multiple && type == 1 && startSel.ranges.length > 1 && (removed = removeRangeAround(startSel, cur.pos))) return removed;\n\t\t\telse if (multiple) return startSel.addRange(range);\n\t\t\telse return EditorSelection.create([range]);\n\t\t}\n\t};\n}\nfunction removeRangeAround(sel, pos) {\n\tfor (let i = 0; i < sel.ranges.length; i++) {\n\t\tlet { from, to } = sel.ranges[i];\n\t\tif (from <= pos && to >= pos) return EditorSelection.create(sel.ranges.slice(0, i).concat(sel.ranges.slice(i + 1)), sel.mainIndex == i ? 0 : sel.mainIndex - (sel.mainIndex > i ? 1 : 0));\n\t}\n\treturn null;\n}\nhandlers.dragstart = (view, event) => {\n\tlet { selection: { main: range } } = view.state;\n\tif (event.target.draggable) {\n\t\tlet cView = view.docView.nearest(event.target);\n\t\tif (cView && cView.isWidget) {\n\t\t\tlet from = cView.posAtStart, to = from + cView.length;\n\t\t\tif (from >= range.to || to <= range.from) range = EditorSelection.range(from, to);\n\t\t}\n\t}\n\tlet { inputState } = view;\n\tif (inputState.mouseSelection) inputState.mouseSelection.dragging = true;\n\tinputState.draggedContent = range;\n\tif (event.dataTransfer) {\n\t\tevent.dataTransfer.setData(\"Text\", textFilter(view.state, clipboardOutputFilter, view.state.sliceDoc(range.from, range.to)));\n\t\tevent.dataTransfer.effectAllowed = \"copyMove\";\n\t}\n\treturn false;\n};\nhandlers.dragend = (view) => {\n\tview.inputState.draggedContent = null;\n\treturn false;\n};\nfunction dropText(view, event, text, direct) {\n\ttext = textFilter(view.state, clipboardInputFilter, text);\n\tif (!text) return;\n\tlet dropPos = view.posAtCoords({\n\t\tx: event.clientX,\n\t\ty: event.clientY\n\t}, false);\n\tlet { draggedContent } = view.inputState;\n\tlet del = direct && draggedContent && dragMovesSelection(view, event) ? {\n\t\tfrom: draggedContent.from,\n\t\tto: draggedContent.to\n\t} : null;\n\tlet ins = {\n\t\tfrom: dropPos,\n\t\tinsert: text\n\t};\n\tlet changes = view.state.changes(del ? [del, ins] : ins);\n\tview.focus();\n\tview.dispatch({\n\t\tchanges,\n\t\tselection: {\n\t\t\tanchor: changes.mapPos(dropPos, -1),\n\t\t\thead: changes.mapPos(dropPos, 1)\n\t\t},\n\t\tuserEvent: del ? \"move.drop\" : \"input.drop\"\n\t});\n\tview.inputState.draggedContent = null;\n}\nhandlers.drop = (view, event) => {\n\tif (!event.dataTransfer) return false;\n\tif (view.state.readOnly) return true;\n\tlet files = event.dataTransfer.files;\n\tif (files && files.length) {\n\t\tlet text = Array(files.length), read = 0;\n\t\tlet finishFile = () => {\n\t\t\tif (++read == files.length) dropText(view, event, text.filter((s) => s != null).join(view.state.lineBreak), false);\n\t\t};\n\t\tfor (let i = 0; i < files.length; i++) {\n\t\t\tlet reader = new FileReader();\n\t\t\treader.onerror = finishFile;\n\t\t\treader.onload = () => {\n\t\t\t\tif (!/[\\x00-\\x08\\x0e-\\x1f]{2}/.test(reader.result)) text[i] = reader.result;\n\t\t\t\tfinishFile();\n\t\t\t};\n\t\t\treader.readAsText(files[i]);\n\t\t}\n\t\treturn true;\n\t} else {\n\t\tlet text = event.dataTransfer.getData(\"Text\");\n\t\tif (text) {\n\t\t\tdropText(view, event, text, true);\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n};\nhandlers.paste = (view, event) => {\n\tif (view.state.readOnly) return true;\n\tview.observer.flush();\n\tlet data = brokenClipboardAPI ? null : event.clipboardData;\n\tif (data) {\n\t\tdoPaste(view, data.getData(\"text/plain\") || data.getData(\"text/uri-list\"));\n\t\treturn true;\n\t} else {\n\t\tcapturePaste(view);\n\t\treturn false;\n\t}\n};\nfunction captureCopy(view, text) {\n\tlet parent = view.dom.parentNode;\n\tif (!parent) return;\n\tlet target = parent.appendChild(document.createElement(\"textarea\"));\n\ttarget.style.cssText = \"position: fixed; left: -10000px; top: 10px\";\n\ttarget.value = text;\n\ttarget.focus();\n\ttarget.selectionEnd = text.length;\n\ttarget.selectionStart = 0;\n\tsetTimeout(() => {\n\t\ttarget.remove();\n\t\tview.focus();\n\t}, 50);\n}\nfunction copiedRange(state) {\n\tlet content = [], ranges = [], linewise = false;\n\tfor (let range of state.selection.ranges) if (!range.empty) {\n\t\tcontent.push(state.sliceDoc(range.from, range.to));\n\t\tranges.push(range);\n\t}\n\tif (!content.length) {\n\t\tlet upto = -1;\n\t\tfor (let { from } of state.selection.ranges) {\n\t\t\tlet line = state.doc.lineAt(from);\n\t\t\tif (line.number > upto) {\n\t\t\t\tcontent.push(line.text);\n\t\t\t\tranges.push({\n\t\t\t\t\tfrom: line.from,\n\t\t\t\t\tto: Math.min(state.doc.length, line.to + 1)\n\t\t\t\t});\n\t\t\t}\n\t\t\tupto = line.number;\n\t\t}\n\t\tlinewise = true;\n\t}\n\treturn {\n\t\ttext: textFilter(state, clipboardOutputFilter, content.join(state.lineBreak)),\n\t\tranges,\n\t\tlinewise\n\t};\n}\nlet lastLinewiseCopy = null;\nhandlers.copy = handlers.cut = (view, event) => {\n\tlet { text, ranges, linewise } = copiedRange(view.state);\n\tif (!text && !linewise) return false;\n\tlastLinewiseCopy = linewise ? text : null;\n\tif (event.type == \"cut\" && !view.state.readOnly) view.dispatch({\n\t\tchanges: ranges,\n\t\tscrollIntoView: true,\n\t\tuserEvent: \"delete.cut\"\n\t});\n\tlet data = brokenClipboardAPI ? null : event.clipboardData;\n\tif (data) {\n\t\tdata.clearData();\n\t\tdata.setData(\"text/plain\", text);\n\t\treturn true;\n\t} else {\n\t\tcaptureCopy(view, text);\n\t\treturn false;\n\t}\n};\nconst isFocusChange = /* @__PURE__ */ Annotation.define();\nfunction focusChangeTransaction(state, focus) {\n\tlet effects = [];\n\tfor (let getEffect of state.facet(focusChangeEffect)) {\n\t\tlet effect = getEffect(state, focus);\n\t\tif (effect) effects.push(effect);\n\t}\n\treturn effects.length ? state.update({\n\t\teffects,\n\t\tannotations: isFocusChange.of(true)\n\t}) : null;\n}\nfunction updateForFocusChange(view) {\n\tsetTimeout(() => {\n\t\tlet focus = view.hasFocus;\n\t\tif (focus != view.inputState.notifiedFocused) {\n\t\t\tlet tr = focusChangeTransaction(view.state, focus);\n\t\t\tif (tr) view.dispatch(tr);\n\t\t\telse view.update([]);\n\t\t}\n\t}, 10);\n}\nobservers.focus = (view) => {\n\tview.inputState.lastFocusTime = Date.now();\n\tif (!view.scrollDOM.scrollTop && (view.inputState.lastScrollTop || view.inputState.lastScrollLeft)) {\n\t\tview.scrollDOM.scrollTop = view.inputState.lastScrollTop;\n\t\tview.scrollDOM.scrollLeft = view.inputState.lastScrollLeft;\n\t}\n\tupdateForFocusChange(view);\n};\nobservers.blur = (view) => {\n\tview.observer.clearSelectionRange();\n\tupdateForFocusChange(view);\n};\nobservers.compositionstart = observers.compositionupdate = (view) => {\n\tif (view.observer.editContext) return;\n\tif (view.inputState.compositionFirstChange == null) view.inputState.compositionFirstChange = true;\n\tif (view.inputState.composing < 0) view.inputState.composing = 0;\n};\nobservers.compositionend = (view) => {\n\tif (view.observer.editContext) return;\n\tview.inputState.composing = -1;\n\tview.inputState.compositionEndedAt = Date.now();\n\tview.inputState.compositionPendingKey = true;\n\tview.inputState.compositionPendingChange = view.observer.pendingRecords().length > 0;\n\tview.inputState.compositionFirstChange = null;\n\tif (browser.chrome && browser.android) view.observer.flushSoon();\n\telse if (view.inputState.compositionPendingChange) Promise.resolve().then(() => view.observer.flush());\n\telse setTimeout(() => {\n\t\tif (view.inputState.composing < 0 && view.docView.hasComposition) view.update([]);\n\t}, 50);\n};\nobservers.contextmenu = (view) => {\n\tview.inputState.lastContextMenu = Date.now();\n};\nhandlers.beforeinput = (view, event) => {\n\tvar _a, _b;\n\tif (event.inputType == \"insertReplacementText\" && view.observer.editContext) {\n\t\tlet text = (_a = event.dataTransfer) === null || _a === void 0 ? void 0 : _a.getData(\"text/plain\"), ranges = event.getTargetRanges();\n\t\tif (text && ranges.length) {\n\t\t\tlet r = ranges[0];\n\t\t\tapplyDOMChangeInner(view, {\n\t\t\t\tfrom: view.posAtDOM(r.startContainer, r.startOffset),\n\t\t\t\tto: view.posAtDOM(r.endContainer, r.endOffset),\n\t\t\t\tinsert: view.state.toText(text)\n\t\t\t}, null);\n\t\t\treturn true;\n\t\t}\n\t}\n\tlet pending;\n\tif (browser.chrome && browser.android && (pending = PendingKeys.find((key) => key.inputType == event.inputType))) {\n\t\tview.observer.delayAndroidKey(pending.key, pending.keyCode);\n\t\tif (pending.key == \"Backspace\" || pending.key == \"Delete\") {\n\t\t\tlet startViewHeight = ((_b = window.visualViewport) === null || _b === void 0 ? void 0 : _b.height) || 0;\n\t\t\tsetTimeout(() => {\n\t\t\t\tvar _a;\n\t\t\t\tif ((((_a = window.visualViewport) === null || _a === void 0 ? void 0 : _a.height) || 0) > startViewHeight + 10 && view.hasFocus) {\n\t\t\t\t\tview.contentDOM.blur();\n\t\t\t\t\tview.focus();\n\t\t\t\t}\n\t\t\t}, 100);\n\t\t}\n\t}\n\tif (browser.ios && event.inputType == \"deleteContentForward\") view.observer.flushSoon();\n\tif (browser.safari && event.inputType == \"insertText\" && view.inputState.composing >= 0) setTimeout(() => observers.compositionend(view, event), 20);\n\treturn false;\n};\nconst appliedFirefoxHack = /* @__PURE__ */ new Set();\nfunction firefoxCopyCutHack(doc) {\n\tif (!appliedFirefoxHack.has(doc)) {\n\t\tappliedFirefoxHack.add(doc);\n\t\tdoc.addEventListener(\"copy\", () => {});\n\t\tdoc.addEventListener(\"cut\", () => {});\n\t}\n}\nconst wrappingWhiteSpace = [\n\t\"pre-wrap\",\n\t\"normal\",\n\t\"pre-line\",\n\t\"break-spaces\"\n];\nlet heightChangeFlag = false;\nfunction clearHeightChangeFlag() {\n\theightChangeFlag = false;\n}\nvar HeightOracle = class {\n\tconstructor(lineWrapping) {\n\t\tthis.lineWrapping = lineWrapping;\n\t\tthis.doc = Text.empty;\n\t\tthis.heightSamples = {};\n\t\tthis.lineHeight = 14;\n\t\tthis.charWidth = 7;\n\t\tthis.textHeight = 14;\n\t\tthis.lineLength = 30;\n\t}\n\theightForGap(from, to) {\n\t\tlet lines = this.doc.lineAt(to).number - this.doc.lineAt(from).number + 1;\n\t\tif (this.lineWrapping) lines += Math.max(0, Math.ceil((to - from - lines * this.lineLength * .5) / this.lineLength));\n\t\treturn this.lineHeight * lines;\n\t}\n\theightForLine(length) {\n\t\tif (!this.lineWrapping) return this.lineHeight;\n\t\treturn (1 + Math.max(0, Math.ceil((length - this.lineLength) / (this.lineLength - 5)))) * this.lineHeight;\n\t}\n\tsetDoc(doc) {\n\t\tthis.doc = doc;\n\t\treturn this;\n\t}\n\tmustRefreshForWrapping(whiteSpace) {\n\t\treturn wrappingWhiteSpace.indexOf(whiteSpace) > -1 != this.lineWrapping;\n\t}\n\tmustRefreshForHeights(lineHeights) {\n\t\tlet newHeight = false;\n\t\tfor (let i = 0; i < lineHeights.length; i++) {\n\t\t\tlet h = lineHeights[i];\n\t\t\tif (h < 0) i++;\n\t\t\telse if (!this.heightSamples[Math.floor(h * 10)]) {\n\t\t\t\tnewHeight = true;\n\t\t\t\tthis.heightSamples[Math.floor(h * 10)] = true;\n\t\t\t}\n\t\t}\n\t\treturn newHeight;\n\t}\n\trefresh(whiteSpace, lineHeight, charWidth, textHeight, lineLength, knownHeights) {\n\t\tlet lineWrapping = wrappingWhiteSpace.indexOf(whiteSpace) > -1;\n\t\tlet changed = Math.round(lineHeight) != Math.round(this.lineHeight) || this.lineWrapping != lineWrapping;\n\t\tthis.lineWrapping = lineWrapping;\n\t\tthis.lineHeight = lineHeight;\n\t\tthis.charWidth = charWidth;\n\t\tthis.textHeight = textHeight;\n\t\tthis.lineLength = lineLength;\n\t\tif (changed) {\n\t\t\tthis.heightSamples = {};\n\t\t\tfor (let i = 0; i < knownHeights.length; i++) {\n\t\t\t\tlet h = knownHeights[i];\n\t\t\t\tif (h < 0) i++;\n\t\t\t\telse this.heightSamples[Math.floor(h * 10)] = true;\n\t\t\t}\n\t\t}\n\t\treturn changed;\n\t}\n};\nvar MeasuredHeights = class {\n\tconstructor(from, heights) {\n\t\tthis.from = from;\n\t\tthis.heights = heights;\n\t\tthis.index = 0;\n\t}\n\tget more() {\n\t\treturn this.index < this.heights.length;\n\t}\n};\n/**\nRecord used to represent information about a block-level element\nin the editor view.\n*/\nvar BlockInfo = class BlockInfo {\n\t/**\n\t@internal\n\t*/\n\tconstructor(from, length, top, height, _content) {\n\t\tthis.from = from;\n\t\tthis.length = length;\n\t\tthis.top = top;\n\t\tthis.height = height;\n\t\tthis._content = _content;\n\t}\n\t/**\n\tThe type of element this is. When querying lines, this may be\n\tan array of all the blocks that make up the line.\n\t*/\n\tget type() {\n\t\treturn typeof this._content == \"number\" ? BlockType.Text : Array.isArray(this._content) ? this._content : this._content.type;\n\t}\n\t/**\n\tThe end of the element as a document position.\n\t*/\n\tget to() {\n\t\treturn this.from + this.length;\n\t}\n\t/**\n\tThe bottom position of the element.\n\t*/\n\tget bottom() {\n\t\treturn this.top + this.height;\n\t}\n\t/**\n\tIf this is a widget block, this will return the widget\n\tassociated with it.\n\t*/\n\tget widget() {\n\t\treturn this._content instanceof PointDecoration ? this._content.widget : null;\n\t}\n\t/**\n\tIf this is a textblock, this holds the number of line breaks\n\tthat appear in widgets inside the block.\n\t*/\n\tget widgetLineBreaks() {\n\t\treturn typeof this._content == \"number\" ? this._content : 0;\n\t}\n\t/**\n\t@internal\n\t*/\n\tjoin(other) {\n\t\tlet content = (Array.isArray(this._content) ? this._content : [this]).concat(Array.isArray(other._content) ? other._content : [other]);\n\t\treturn new BlockInfo(this.from, this.length + other.length, this.top, this.height + other.height, content);\n\t}\n};\nvar QueryType$1 = /* @__PURE__ */ (function(QueryType) {\n\tQueryType[QueryType[\"ByPos\"] = 0] = \"ByPos\";\n\tQueryType[QueryType[\"ByHeight\"] = 1] = \"ByHeight\";\n\tQueryType[QueryType[\"ByPosNoHeight\"] = 2] = \"ByPosNoHeight\";\n\treturn QueryType;\n})(QueryType$1 || (QueryType$1 = {}));\nconst Epsilon = .001;\nvar HeightMap = class HeightMap {\n\tconstructor(length, height, flags = 2) {\n\t\tthis.length = length;\n\t\tthis.height = height;\n\t\tthis.flags = flags;\n\t}\n\tget outdated() {\n\t\treturn (this.flags & 2) > 0;\n\t}\n\tset outdated(value) {\n\t\tthis.flags = (value ? 2 : 0) | this.flags & -3;\n\t}\n\tsetHeight(height) {\n\t\tif (this.height != height) {\n\t\t\tif (Math.abs(this.height - height) > Epsilon) heightChangeFlag = true;\n\t\t\tthis.height = height;\n\t\t}\n\t}\n\treplace(_from, _to, nodes) {\n\t\treturn HeightMap.of(nodes);\n\t}\n\tdecomposeLeft(_to, result) {\n\t\tresult.push(this);\n\t}\n\tdecomposeRight(_from, result) {\n\t\tresult.push(this);\n\t}\n\tapplyChanges(decorations, oldDoc, oracle, changes) {\n\t\tlet me = this, doc = oracle.doc;\n\t\tfor (let i = changes.length - 1; i >= 0; i--) {\n\t\t\tlet { fromA, toA, fromB, toB } = changes[i];\n\t\t\tlet start = me.lineAt(fromA, QueryType$1.ByPosNoHeight, oracle.setDoc(oldDoc), 0, 0);\n\t\t\tlet end = start.to >= toA ? start : me.lineAt(toA, QueryType$1.ByPosNoHeight, oracle, 0, 0);\n\t\t\ttoB += end.to - toA;\n\t\t\ttoA = end.to;\n\t\t\twhile (i > 0 && start.from <= changes[i - 1].toA) {\n\t\t\t\tfromA = changes[i - 1].fromA;\n\t\t\t\tfromB = changes[i - 1].fromB;\n\t\t\t\ti--;\n\t\t\t\tif (fromA < start.from) start = me.lineAt(fromA, QueryType$1.ByPosNoHeight, oracle, 0, 0);\n\t\t\t}\n\t\t\tfromB += start.from - fromA;\n\t\t\tfromA = start.from;\n\t\t\tlet nodes = NodeBuilder.build(oracle.setDoc(doc), decorations, fromB, toB);\n\t\t\tme = replace(me, me.replace(fromA, toA, nodes));\n\t\t}\n\t\treturn me.updateHeight(oracle, 0);\n\t}\n\tstatic empty() {\n\t\treturn new HeightMapText(0, 0);\n\t}\n\tstatic of(nodes) {\n\t\tif (nodes.length == 1) return nodes[0];\n\t\tlet i = 0, j = nodes.length, before = 0, after = 0;\n\t\tfor (;;) if (i == j) if (before > after * 2) {\n\t\t\tlet split = nodes[i - 1];\n\t\t\tif (split.break) nodes.splice(--i, 1, split.left, null, split.right);\n\t\t\telse nodes.splice(--i, 1, split.left, split.right);\n\t\t\tj += 1 + split.break;\n\t\t\tbefore -= split.size;\n\t\t} else if (after > before * 2) {\n\t\t\tlet split = nodes[j];\n\t\t\tif (split.break) nodes.splice(j, 1, split.left, null, split.right);\n\t\t\telse nodes.splice(j, 1, split.left, split.right);\n\t\t\tj += 2 + split.break;\n\t\t\tafter -= split.size;\n\t\t} else break;\n\t\telse if (before < after) {\n\t\t\tlet next = nodes[i++];\n\t\t\tif (next) before += next.size;\n\t\t} else {\n\t\t\tlet next = nodes[--j];\n\t\t\tif (next) after += next.size;\n\t\t}\n\t\tlet brk = 0;\n\t\tif (nodes[i - 1] == null) {\n\t\t\tbrk = 1;\n\t\t\ti--;\n\t\t} else if (nodes[i] == null) {\n\t\t\tbrk = 1;\n\t\t\tj++;\n\t\t}\n\t\treturn new HeightMapBranch(HeightMap.of(nodes.slice(0, i)), brk, HeightMap.of(nodes.slice(j)));\n\t}\n};\nfunction replace(old, val) {\n\tif (old == val) return old;\n\tif (old.constructor != val.constructor) heightChangeFlag = true;\n\treturn val;\n}\nHeightMap.prototype.size = 1;\nvar HeightMapBlock = class extends HeightMap {\n\tconstructor(length, height, deco) {\n\t\tsuper(length, height);\n\t\tthis.deco = deco;\n\t}\n\tblockAt(_height, _oracle, top, offset) {\n\t\treturn new BlockInfo(offset, this.length, top, this.height, this.deco || 0);\n\t}\n\tlineAt(_value, _type, oracle, top, offset) {\n\t\treturn this.blockAt(0, oracle, top, offset);\n\t}\n\tforEachLine(from, to, oracle, top, offset, f) {\n\t\tif (from <= offset + this.length && to >= offset) f(this.blockAt(0, oracle, top, offset));\n\t}\n\tupdateHeight(oracle, offset = 0, _force = false, measured) {\n\t\tif (measured && measured.from <= offset && measured.more) this.setHeight(measured.heights[measured.index++]);\n\t\tthis.outdated = false;\n\t\treturn this;\n\t}\n\ttoString() {\n\t\treturn `block(${this.length})`;\n\t}\n};\nvar HeightMapText = class HeightMapText extends HeightMapBlock {\n\tconstructor(length, height) {\n\t\tsuper(length, height, null);\n\t\tthis.collapsed = 0;\n\t\tthis.widgetHeight = 0;\n\t\tthis.breaks = 0;\n\t}\n\tblockAt(_height, _oracle, top, offset) {\n\t\treturn new BlockInfo(offset, this.length, top, this.height, this.breaks);\n\t}\n\treplace(_from, _to, nodes) {\n\t\tlet node = nodes[0];\n\t\tif (nodes.length == 1 && (node instanceof HeightMapText || node instanceof HeightMapGap && node.flags & 4) && Math.abs(this.length - node.length) < 10) {\n\t\t\tif (node instanceof HeightMapGap) node = new HeightMapText(node.length, this.height);\n\t\t\telse node.height = this.height;\n\t\t\tif (!this.outdated) node.outdated = false;\n\t\t\treturn node;\n\t\t} else return HeightMap.of(nodes);\n\t}\n\tupdateHeight(oracle, offset = 0, force = false, measured) {\n\t\tif (measured && measured.from <= offset && measured.more) this.setHeight(measured.heights[measured.index++]);\n\t\telse if (force || this.outdated) this.setHeight(Math.max(this.widgetHeight, oracle.heightForLine(this.length - this.collapsed)) + this.breaks * oracle.lineHeight);\n\t\tthis.outdated = false;\n\t\treturn this;\n\t}\n\ttoString() {\n\t\treturn `line(${this.length}${this.collapsed ? -this.collapsed : \"\"}${this.widgetHeight ? \":\" + this.widgetHeight : \"\"})`;\n\t}\n};\nvar HeightMapGap = class HeightMapGap extends HeightMap {\n\tconstructor(length) {\n\t\tsuper(length, 0);\n\t}\n\theightMetrics(oracle, offset) {\n\t\tlet firstLine = oracle.doc.lineAt(offset).number, lastLine = oracle.doc.lineAt(offset + this.length).number;\n\t\tlet lines = lastLine - firstLine + 1;\n\t\tlet perLine, perChar = 0;\n\t\tif (oracle.lineWrapping) {\n\t\t\tlet totalPerLine = Math.min(this.height, oracle.lineHeight * lines);\n\t\t\tperLine = totalPerLine / lines;\n\t\t\tif (this.length > lines + 1) perChar = (this.height - totalPerLine) / (this.length - lines - 1);\n\t\t} else perLine = this.height / lines;\n\t\treturn {\n\t\t\tfirstLine,\n\t\t\tlastLine,\n\t\t\tperLine,\n\t\t\tperChar\n\t\t};\n\t}\n\tblockAt(height, oracle, top, offset) {\n\t\tlet { firstLine, lastLine, perLine, perChar } = this.heightMetrics(oracle, offset);\n\t\tif (oracle.lineWrapping) {\n\t\t\tlet guess = offset + (height < oracle.lineHeight ? 0 : Math.round(Math.max(0, Math.min(1, (height - top) / this.height)) * this.length));\n\t\t\tlet line = oracle.doc.lineAt(guess), lineHeight = perLine + line.length * perChar;\n\t\t\tlet lineTop = Math.max(top, height - lineHeight / 2);\n\t\t\treturn new BlockInfo(line.from, line.length, lineTop, lineHeight, 0);\n\t\t} else {\n\t\t\tlet line = Math.max(0, Math.min(lastLine - firstLine, Math.floor((height - top) / perLine)));\n\t\t\tlet { from, length } = oracle.doc.line(firstLine + line);\n\t\t\treturn new BlockInfo(from, length, top + perLine * line, perLine, 0);\n\t\t}\n\t}\n\tlineAt(value, type, oracle, top, offset) {\n\t\tif (type == QueryType$1.ByHeight) return this.blockAt(value, oracle, top, offset);\n\t\tif (type == QueryType$1.ByPosNoHeight) {\n\t\t\tlet { from, to } = oracle.doc.lineAt(value);\n\t\t\treturn new BlockInfo(from, to - from, 0, 0, 0);\n\t\t}\n\t\tlet { firstLine, perLine, perChar } = this.heightMetrics(oracle, offset);\n\t\tlet line = oracle.doc.lineAt(value), lineHeight = perLine + line.length * perChar;\n\t\tlet linesAbove = line.number - firstLine;\n\t\tlet lineTop = top + perLine * linesAbove + perChar * (line.from - offset - linesAbove);\n\t\treturn new BlockInfo(line.from, line.length, Math.max(top, Math.min(lineTop, top + this.height - lineHeight)), lineHeight, 0);\n\t}\n\tforEachLine(from, to, oracle, top, offset, f) {\n\t\tfrom = Math.max(from, offset);\n\t\tto = Math.min(to, offset + this.length);\n\t\tlet { firstLine, perLine, perChar } = this.heightMetrics(oracle, offset);\n\t\tfor (let pos = from, lineTop = top; pos <= to;) {\n\t\t\tlet line = oracle.doc.lineAt(pos);\n\t\t\tif (pos == from) {\n\t\t\t\tlet linesAbove = line.number - firstLine;\n\t\t\t\tlineTop += perLine * linesAbove + perChar * (from - offset - linesAbove);\n\t\t\t}\n\t\t\tlet lineHeight = perLine + perChar * line.length;\n\t\t\tf(new BlockInfo(line.from, line.length, lineTop, lineHeight, 0));\n\t\t\tlineTop += lineHeight;\n\t\t\tpos = line.to + 1;\n\t\t}\n\t}\n\treplace(from, to, nodes) {\n\t\tlet after = this.length - to;\n\t\tif (after > 0) {\n\t\t\tlet last = nodes[nodes.length - 1];\n\t\t\tif (last instanceof HeightMapGap) nodes[nodes.length - 1] = new HeightMapGap(last.length + after);\n\t\t\telse nodes.push(null, new HeightMapGap(after - 1));\n\t\t}\n\t\tif (from > 0) {\n\t\t\tlet first = nodes[0];\n\t\t\tif (first instanceof HeightMapGap) nodes[0] = new HeightMapGap(from + first.length);\n\t\t\telse nodes.unshift(new HeightMapGap(from - 1), null);\n\t\t}\n\t\treturn HeightMap.of(nodes);\n\t}\n\tdecomposeLeft(to, result) {\n\t\tresult.push(new HeightMapGap(to - 1), null);\n\t}\n\tdecomposeRight(from, result) {\n\t\tresult.push(null, new HeightMapGap(this.length - from - 1));\n\t}\n\tupdateHeight(oracle, offset = 0, force = false, measured) {\n\t\tlet end = offset + this.length;\n\t\tif (measured && measured.from <= offset + this.length && measured.more) {\n\t\t\tlet nodes = [], pos = Math.max(offset, measured.from), singleHeight = -1;\n\t\t\tif (measured.from > offset) nodes.push(new HeightMapGap(measured.from - offset - 1).updateHeight(oracle, offset));\n\t\t\twhile (pos <= end && measured.more) {\n\t\t\t\tlet len = oracle.doc.lineAt(pos).length;\n\t\t\t\tif (nodes.length) nodes.push(null);\n\t\t\t\tlet height = measured.heights[measured.index++];\n\t\t\t\tif (singleHeight == -1) singleHeight = height;\n\t\t\t\telse if (Math.abs(height - singleHeight) >= Epsilon) singleHeight = -2;\n\t\t\t\tlet line = new HeightMapText(len, height);\n\t\t\t\tline.outdated = false;\n\t\t\t\tnodes.push(line);\n\t\t\t\tpos += len + 1;\n\t\t\t}\n\t\t\tif (pos <= end) nodes.push(null, new HeightMapGap(end - pos).updateHeight(oracle, pos));\n\t\t\tlet result = HeightMap.of(nodes);\n\t\t\tif (singleHeight < 0 || Math.abs(result.height - this.height) >= Epsilon || Math.abs(singleHeight - this.heightMetrics(oracle, offset).perLine) >= Epsilon) heightChangeFlag = true;\n\t\t\treturn replace(this, result);\n\t\t} else if (force || this.outdated) {\n\t\t\tthis.setHeight(oracle.heightForGap(offset, offset + this.length));\n\t\t\tthis.outdated = false;\n\t\t}\n\t\treturn this;\n\t}\n\ttoString() {\n\t\treturn `gap(${this.length})`;\n\t}\n};\nvar HeightMapBranch = class extends HeightMap {\n\tconstructor(left, brk, right) {\n\t\tsuper(left.length + brk + right.length, left.height + right.height, brk | (left.outdated || right.outdated ? 2 : 0));\n\t\tthis.left = left;\n\t\tthis.right = right;\n\t\tthis.size = left.size + right.size;\n\t}\n\tget break() {\n\t\treturn this.flags & 1;\n\t}\n\tblockAt(height, oracle, top, offset) {\n\t\tlet mid = top + this.left.height;\n\t\treturn height < mid ? this.left.blockAt(height, oracle, top, offset) : this.right.blockAt(height, oracle, mid, offset + this.left.length + this.break);\n\t}\n\tlineAt(value, type, oracle, top, offset) {\n\t\tlet rightTop = top + this.left.height, rightOffset = offset + this.left.length + this.break;\n\t\tlet left = type == QueryType$1.ByHeight ? value < rightTop : value < rightOffset;\n\t\tlet base = left ? this.left.lineAt(value, type, oracle, top, offset) : this.right.lineAt(value, type, oracle, rightTop, rightOffset);\n\t\tif (this.break || (left ? base.to < rightOffset : base.from > rightOffset)) return base;\n\t\tlet subQuery = type == QueryType$1.ByPosNoHeight ? QueryType$1.ByPosNoHeight : QueryType$1.ByPos;\n\t\tif (left) return base.join(this.right.lineAt(rightOffset, subQuery, oracle, rightTop, rightOffset));\n\t\telse return this.left.lineAt(rightOffset, subQuery, oracle, top, offset).join(base);\n\t}\n\tforEachLine(from, to, oracle, top, offset, f) {\n\t\tlet rightTop = top + this.left.height, rightOffset = offset + this.left.length + this.break;\n\t\tif (this.break) {\n\t\t\tif (from < rightOffset) this.left.forEachLine(from, to, oracle, top, offset, f);\n\t\t\tif (to >= rightOffset) this.right.forEachLine(from, to, oracle, rightTop, rightOffset, f);\n\t\t} else {\n\t\t\tlet mid = this.lineAt(rightOffset, QueryType$1.ByPos, oracle, top, offset);\n\t\t\tif (from < mid.from) this.left.forEachLine(from, mid.from - 1, oracle, top, offset, f);\n\t\t\tif (mid.to >= from && mid.from <= to) f(mid);\n\t\t\tif (to > mid.to) this.right.forEachLine(mid.to + 1, to, oracle, rightTop, rightOffset, f);\n\t\t}\n\t}\n\treplace(from, to, nodes) {\n\t\tlet rightStart = this.left.length + this.break;\n\t\tif (to < rightStart) return this.balanced(this.left.replace(from, to, nodes), this.right);\n\t\tif (from > this.left.length) return this.balanced(this.left, this.right.replace(from - rightStart, to - rightStart, nodes));\n\t\tlet result = [];\n\t\tif (from > 0) this.decomposeLeft(from, result);\n\t\tlet left = result.length;\n\t\tfor (let node of nodes) result.push(node);\n\t\tif (from > 0) mergeGaps(result, left - 1);\n\t\tif (to < this.length) {\n\t\t\tlet right = result.length;\n\t\t\tthis.decomposeRight(to, result);\n\t\t\tmergeGaps(result, right);\n\t\t}\n\t\treturn HeightMap.of(result);\n\t}\n\tdecomposeLeft(to, result) {\n\t\tlet left = this.left.length;\n\t\tif (to <= left) return this.left.decomposeLeft(to, result);\n\t\tresult.push(this.left);\n\t\tif (this.break) {\n\t\t\tleft++;\n\t\t\tif (to >= left) result.push(null);\n\t\t}\n\t\tif (to > left) this.right.decomposeLeft(to - left, result);\n\t}\n\tdecomposeRight(from, result) {\n\t\tlet left = this.left.length, right = left + this.break;\n\t\tif (from >= right) return this.right.decomposeRight(from - right, result);\n\t\tif (from < left) this.left.decomposeRight(from, result);\n\t\tif (this.break && from < right) result.push(null);\n\t\tresult.push(this.right);\n\t}\n\tbalanced(left, right) {\n\t\tif (left.size > 2 * right.size || right.size > 2 * left.size) return HeightMap.of(this.break ? [\n\t\t\tleft,\n\t\t\tnull,\n\t\t\tright\n\t\t] : [left, right]);\n\t\tthis.left = replace(this.left, left);\n\t\tthis.right = replace(this.right, right);\n\t\tthis.setHeight(left.height + right.height);\n\t\tthis.outdated = left.outdated || right.outdated;\n\t\tthis.size = left.size + right.size;\n\t\tthis.length = left.length + this.break + right.length;\n\t\treturn this;\n\t}\n\tupdateHeight(oracle, offset = 0, force = false, measured) {\n\t\tlet { left, right } = this, rightStart = offset + left.length + this.break, rebalance = null;\n\t\tif (measured && measured.from <= offset + left.length && measured.more) rebalance = left = left.updateHeight(oracle, offset, force, measured);\n\t\telse left.updateHeight(oracle, offset, force);\n\t\tif (measured && measured.from <= rightStart + right.length && measured.more) rebalance = right = right.updateHeight(oracle, rightStart, force, measured);\n\t\telse right.updateHeight(oracle, rightStart, force);\n\t\tif (rebalance) return this.balanced(left, right);\n\t\tthis.height = this.left.height + this.right.height;\n\t\tthis.outdated = false;\n\t\treturn this;\n\t}\n\ttoString() {\n\t\treturn this.left + (this.break ? \" \" : \"-\") + this.right;\n\t}\n};\nfunction mergeGaps(nodes, around) {\n\tlet before, after;\n\tif (nodes[around] == null && (before = nodes[around - 1]) instanceof HeightMapGap && (after = nodes[around + 1]) instanceof HeightMapGap) nodes.splice(around - 1, 3, new HeightMapGap(before.length + 1 + after.length));\n}\nconst relevantWidgetHeight = 5;\nvar NodeBuilder = class NodeBuilder {\n\tconstructor(pos, oracle) {\n\t\tthis.pos = pos;\n\t\tthis.oracle = oracle;\n\t\tthis.nodes = [];\n\t\tthis.lineStart = -1;\n\t\tthis.lineEnd = -1;\n\t\tthis.covering = null;\n\t\tthis.writtenTo = pos;\n\t}\n\tget isCovered() {\n\t\treturn this.covering && this.nodes[this.nodes.length - 1] == this.covering;\n\t}\n\tspan(_from, to) {\n\t\tif (this.lineStart > -1) {\n\t\t\tlet end = Math.min(to, this.lineEnd), last = this.nodes[this.nodes.length - 1];\n\t\t\tif (last instanceof HeightMapText) last.length += end - this.pos;\n\t\t\telse if (end > this.pos || !this.isCovered) this.nodes.push(new HeightMapText(end - this.pos, -1));\n\t\t\tthis.writtenTo = end;\n\t\t\tif (to > end) {\n\t\t\t\tthis.nodes.push(null);\n\t\t\t\tthis.writtenTo++;\n\t\t\t\tthis.lineStart = -1;\n\t\t\t}\n\t\t}\n\t\tthis.pos = to;\n\t}\n\tpoint(from, to, deco) {\n\t\tif (from < to || deco.heightRelevant) {\n\t\t\tlet height = deco.widget ? deco.widget.estimatedHeight : 0;\n\t\t\tlet breaks = deco.widget ? deco.widget.lineBreaks : 0;\n\t\t\tif (height < 0) height = this.oracle.lineHeight;\n\t\t\tlet len = to - from;\n\t\t\tif (deco.block) this.addBlock(new HeightMapBlock(len, height, deco));\n\t\t\telse if (len || breaks || height >= relevantWidgetHeight) this.addLineDeco(height, breaks, len);\n\t\t} else if (to > from) this.span(from, to);\n\t\tif (this.lineEnd > -1 && this.lineEnd < this.pos) this.lineEnd = this.oracle.doc.lineAt(this.pos).to;\n\t}\n\tenterLine() {\n\t\tif (this.lineStart > -1) return;\n\t\tlet { from, to } = this.oracle.doc.lineAt(this.pos);\n\t\tthis.lineStart = from;\n\t\tthis.lineEnd = to;\n\t\tif (this.writtenTo < from) {\n\t\t\tif (this.writtenTo < from - 1 || this.nodes[this.nodes.length - 1] == null) this.nodes.push(this.blankContent(this.writtenTo, from - 1));\n\t\t\tthis.nodes.push(null);\n\t\t}\n\t\tif (this.pos > from) this.nodes.push(new HeightMapText(this.pos - from, -1));\n\t\tthis.writtenTo = this.pos;\n\t}\n\tblankContent(from, to) {\n\t\tlet gap = new HeightMapGap(to - from);\n\t\tif (this.oracle.doc.lineAt(from).to == to) gap.flags |= 4;\n\t\treturn gap;\n\t}\n\tensureLine() {\n\t\tthis.enterLine();\n\t\tlet last = this.nodes.length ? this.nodes[this.nodes.length - 1] : null;\n\t\tif (last instanceof HeightMapText) return last;\n\t\tlet line = new HeightMapText(0, -1);\n\t\tthis.nodes.push(line);\n\t\treturn line;\n\t}\n\taddBlock(block) {\n\t\tthis.enterLine();\n\t\tlet deco = block.deco;\n\t\tif (deco && deco.startSide > 0 && !this.isCovered) this.ensureLine();\n\t\tthis.nodes.push(block);\n\t\tthis.writtenTo = this.pos = this.pos + block.length;\n\t\tif (deco && deco.endSide > 0) this.covering = block;\n\t}\n\taddLineDeco(height, breaks, length) {\n\t\tlet line = this.ensureLine();\n\t\tline.length += length;\n\t\tline.collapsed += length;\n\t\tline.widgetHeight = Math.max(line.widgetHeight, height);\n\t\tline.breaks += breaks;\n\t\tthis.writtenTo = this.pos = this.pos + length;\n\t}\n\tfinish(from) {\n\t\tlet last = this.nodes.length == 0 ? null : this.nodes[this.nodes.length - 1];\n\t\tif (this.lineStart > -1 && !(last instanceof HeightMapText) && !this.isCovered) this.nodes.push(new HeightMapText(0, -1));\n\t\telse if (this.writtenTo < this.pos || last == null) this.nodes.push(this.blankContent(this.writtenTo, this.pos));\n\t\tlet pos = from;\n\t\tfor (let node of this.nodes) {\n\t\t\tif (node instanceof HeightMapText) node.updateHeight(this.oracle, pos);\n\t\t\tpos += node ? node.length : 1;\n\t\t}\n\t\treturn this.nodes;\n\t}\n\tstatic build(oracle, decorations, from, to) {\n\t\tlet builder = new NodeBuilder(from, oracle);\n\t\tRangeSet.spans(decorations, from, to, builder, 0);\n\t\treturn builder.finish(from);\n\t}\n};\nfunction heightRelevantDecoChanges(a, b, diff) {\n\tlet comp = new DecorationComparator();\n\tRangeSet.compare(a, b, diff, comp, 0);\n\treturn comp.changes;\n}\nvar DecorationComparator = class {\n\tconstructor() {\n\t\tthis.changes = [];\n\t}\n\tcompareRange() {}\n\tcomparePoint(from, to, a, b) {\n\t\tif (from < to || a && a.heightRelevant || b && b.heightRelevant) addRange(from, to, this.changes, 5);\n\t}\n};\nfunction visiblePixelRange(dom, paddingTop) {\n\tlet rect = dom.getBoundingClientRect();\n\tlet doc = dom.ownerDocument, win = doc.defaultView || window;\n\tlet left = Math.max(0, rect.left), right = Math.min(win.innerWidth, rect.right);\n\tlet top = Math.max(0, rect.top), bottom = Math.min(win.innerHeight, rect.bottom);\n\tfor (let parent = dom.parentNode; parent && parent != doc.body;) if (parent.nodeType == 1) {\n\t\tlet elt = parent;\n\t\tlet style = window.getComputedStyle(elt);\n\t\tif ((elt.scrollHeight > elt.clientHeight || elt.scrollWidth > elt.clientWidth) && style.overflow != \"visible\") {\n\t\t\tlet parentRect = elt.getBoundingClientRect();\n\t\t\tleft = Math.max(left, parentRect.left);\n\t\t\tright = Math.min(right, parentRect.right);\n\t\t\ttop = Math.max(top, parentRect.top);\n\t\t\tbottom = Math.min(parent == dom.parentNode ? win.innerHeight : bottom, parentRect.bottom);\n\t\t}\n\t\tparent = style.position == \"absolute\" || style.position == \"fixed\" ? elt.offsetParent : elt.parentNode;\n\t} else if (parent.nodeType == 11) parent = parent.host;\n\telse break;\n\treturn {\n\t\tleft: left - rect.left,\n\t\tright: Math.max(left, right) - rect.left,\n\t\ttop: top - (rect.top + paddingTop),\n\t\tbottom: Math.max(top, bottom) - (rect.top + paddingTop)\n\t};\n}\nfunction inWindow(elt) {\n\tlet rect = elt.getBoundingClientRect(), win = elt.ownerDocument.defaultView || window;\n\treturn rect.left < win.innerWidth && rect.right > 0 && rect.top < win.innerHeight && rect.bottom > 0;\n}\nfunction fullPixelRange(dom, paddingTop) {\n\tlet rect = dom.getBoundingClientRect();\n\treturn {\n\t\tleft: 0,\n\t\tright: rect.right - rect.left,\n\t\ttop: paddingTop,\n\t\tbottom: rect.bottom - (rect.top + paddingTop)\n\t};\n}\nvar LineGap = class {\n\tconstructor(from, to, size, displaySize) {\n\t\tthis.from = from;\n\t\tthis.to = to;\n\t\tthis.size = size;\n\t\tthis.displaySize = displaySize;\n\t}\n\tstatic same(a, b) {\n\t\tif (a.length != b.length) return false;\n\t\tfor (let i = 0; i < a.length; i++) {\n\t\t\tlet gA = a[i], gB = b[i];\n\t\t\tif (gA.from != gB.from || gA.to != gB.to || gA.size != gB.size) return false;\n\t\t}\n\t\treturn true;\n\t}\n\tdraw(viewState, wrapping) {\n\t\treturn Decoration.replace({ widget: new LineGapWidget(this.displaySize * (wrapping ? viewState.scaleY : viewState.scaleX), wrapping) }).range(this.from, this.to);\n\t}\n};\nvar LineGapWidget = class extends WidgetType {\n\tconstructor(size, vertical) {\n\t\tsuper();\n\t\tthis.size = size;\n\t\tthis.vertical = vertical;\n\t}\n\teq(other) {\n\t\treturn other.size == this.size && other.vertical == this.vertical;\n\t}\n\ttoDOM() {\n\t\tlet elt = document.createElement(\"div\");\n\t\tif (this.vertical) elt.style.height = this.size + \"px\";\n\t\telse {\n\t\t\telt.style.width = this.size + \"px\";\n\t\t\telt.style.height = \"2px\";\n\t\t\telt.style.display = \"inline-block\";\n\t\t}\n\t\treturn elt;\n\t}\n\tget estimatedHeight() {\n\t\treturn this.vertical ? this.size : -1;\n\t}\n};\nvar ViewState = class {\n\tconstructor(state) {\n\t\tthis.state = state;\n\t\tthis.pixelViewport = {\n\t\t\tleft: 0,\n\t\t\tright: window.innerWidth,\n\t\t\ttop: 0,\n\t\t\tbottom: 0\n\t\t};\n\t\tthis.inView = true;\n\t\tthis.paddingTop = 0;\n\t\tthis.paddingBottom = 0;\n\t\tthis.contentDOMWidth = 0;\n\t\tthis.contentDOMHeight = 0;\n\t\tthis.editorHeight = 0;\n\t\tthis.editorWidth = 0;\n\t\tthis.scrollTop = 0;\n\t\tthis.scrolledToBottom = false;\n\t\tthis.scaleX = 1;\n\t\tthis.scaleY = 1;\n\t\tthis.scrollAnchorPos = 0;\n\t\tthis.scrollAnchorHeight = -1;\n\t\tthis.scaler = IdScaler;\n\t\tthis.scrollTarget = null;\n\t\tthis.printing = false;\n\t\tthis.mustMeasureContent = true;\n\t\tthis.defaultTextDirection = Direction.LTR;\n\t\tthis.visibleRanges = [];\n\t\tthis.mustEnforceCursorAssoc = false;\n\t\tthis.heightOracle = new HeightOracle(state.facet(contentAttributes).some((v) => typeof v != \"function\" && v.class == \"cm-lineWrapping\"));\n\t\tthis.stateDeco = state.facet(decorations).filter((d) => typeof d != \"function\");\n\t\tthis.heightMap = HeightMap.empty().applyChanges(this.stateDeco, Text.empty, this.heightOracle.setDoc(state.doc), [new ChangedRange(0, 0, 0, state.doc.length)]);\n\t\tfor (let i = 0; i < 2; i++) {\n\t\t\tthis.viewport = this.getViewport(0, null);\n\t\t\tif (!this.updateForViewport()) break;\n\t\t}\n\t\tthis.updateViewportLines();\n\t\tthis.lineGaps = this.ensureLineGaps([]);\n\t\tthis.lineGapDeco = Decoration.set(this.lineGaps.map((gap) => gap.draw(this, false)));\n\t\tthis.computeVisibleRanges();\n\t}\n\tupdateForViewport() {\n\t\tlet viewports = [this.viewport], { main } = this.state.selection;\n\t\tfor (let i = 0; i <= 1; i++) {\n\t\t\tlet pos = i ? main.head : main.anchor;\n\t\t\tif (!viewports.some(({ from, to }) => pos >= from && pos <= to)) {\n\t\t\t\tlet { from, to } = this.lineBlockAt(pos);\n\t\t\t\tviewports.push(new Viewport(from, to));\n\t\t\t}\n\t\t}\n\t\tthis.viewports = viewports.sort((a, b) => a.from - b.from);\n\t\treturn this.updateScaler();\n\t}\n\tupdateScaler() {\n\t\tlet scaler = this.scaler;\n\t\tthis.scaler = this.heightMap.height <= 7e6 ? IdScaler : new BigScaler(this.heightOracle, this.heightMap, this.viewports);\n\t\treturn scaler.eq(this.scaler) ? 0 : 2;\n\t}\n\tupdateViewportLines() {\n\t\tthis.viewportLines = [];\n\t\tthis.heightMap.forEachLine(this.viewport.from, this.viewport.to, this.heightOracle.setDoc(this.state.doc), 0, 0, (block) => {\n\t\t\tthis.viewportLines.push(scaleBlock(block, this.scaler));\n\t\t});\n\t}\n\tupdate(update, scrollTarget = null) {\n\t\tthis.state = update.state;\n\t\tlet prevDeco = this.stateDeco;\n\t\tthis.stateDeco = this.state.facet(decorations).filter((d) => typeof d != \"function\");\n\t\tlet contentChanges = update.changedRanges;\n\t\tlet heightChanges = ChangedRange.extendWithRanges(contentChanges, heightRelevantDecoChanges(prevDeco, this.stateDeco, update ? update.changes : ChangeSet.empty(this.state.doc.length)));\n\t\tlet prevHeight = this.heightMap.height;\n\t\tlet scrollAnchor = this.scrolledToBottom ? null : this.scrollAnchorAt(this.scrollTop);\n\t\tclearHeightChangeFlag();\n\t\tthis.heightMap = this.heightMap.applyChanges(this.stateDeco, update.startState.doc, this.heightOracle.setDoc(this.state.doc), heightChanges);\n\t\tif (this.heightMap.height != prevHeight || heightChangeFlag) update.flags |= 2;\n\t\tif (scrollAnchor) {\n\t\t\tthis.scrollAnchorPos = update.changes.mapPos(scrollAnchor.from, -1);\n\t\t\tthis.scrollAnchorHeight = scrollAnchor.top;\n\t\t} else {\n\t\t\tthis.scrollAnchorPos = -1;\n\t\t\tthis.scrollAnchorHeight = prevHeight;\n\t\t}\n\t\tlet viewport = heightChanges.length ? this.mapViewport(this.viewport, update.changes) : this.viewport;\n\t\tif (scrollTarget && (scrollTarget.range.head < viewport.from || scrollTarget.range.head > viewport.to) || !this.viewportIsAppropriate(viewport)) viewport = this.getViewport(0, scrollTarget);\n\t\tlet viewportChange = viewport.from != this.viewport.from || viewport.to != this.viewport.to;\n\t\tthis.viewport = viewport;\n\t\tupdate.flags |= this.updateForViewport();\n\t\tif (viewportChange || !update.changes.empty || update.flags & 2) this.updateViewportLines();\n\t\tif (this.lineGaps.length || this.viewport.to - this.viewport.from > 4e3) this.updateLineGaps(this.ensureLineGaps(this.mapLineGaps(this.lineGaps, update.changes)));\n\t\tupdate.flags |= this.computeVisibleRanges(update.changes);\n\t\tif (scrollTarget) this.scrollTarget = scrollTarget;\n\t\tif (!this.mustEnforceCursorAssoc && update.selectionSet && update.view.lineWrapping && update.state.selection.main.empty && update.state.selection.main.assoc && !update.state.facet(nativeSelectionHidden)) this.mustEnforceCursorAssoc = true;\n\t}\n\tmeasure(view) {\n\t\tlet dom = view.contentDOM, style = window.getComputedStyle(dom);\n\t\tlet oracle = this.heightOracle;\n\t\tlet whiteSpace = style.whiteSpace;\n\t\tthis.defaultTextDirection = style.direction == \"rtl\" ? Direction.RTL : Direction.LTR;\n\t\tlet refresh = this.heightOracle.mustRefreshForWrapping(whiteSpace);\n\t\tlet domRect = dom.getBoundingClientRect();\n\t\tlet measureContent = refresh || this.mustMeasureContent || this.contentDOMHeight != domRect.height;\n\t\tthis.contentDOMHeight = domRect.height;\n\t\tthis.mustMeasureContent = false;\n\t\tlet result = 0, bias = 0;\n\t\tif (domRect.width && domRect.height) {\n\t\t\tlet { scaleX, scaleY } = getScale(dom, domRect);\n\t\t\tif (scaleX > .005 && Math.abs(this.scaleX - scaleX) > .005 || scaleY > .005 && Math.abs(this.scaleY - scaleY) > .005) {\n\t\t\t\tthis.scaleX = scaleX;\n\t\t\t\tthis.scaleY = scaleY;\n\t\t\t\tresult |= 16;\n\t\t\t\trefresh = measureContent = true;\n\t\t\t}\n\t\t}\n\t\tlet paddingTop = (parseInt(style.paddingTop) || 0) * this.scaleY;\n\t\tlet paddingBottom = (parseInt(style.paddingBottom) || 0) * this.scaleY;\n\t\tif (this.paddingTop != paddingTop || this.paddingBottom != paddingBottom) {\n\t\t\tthis.paddingTop = paddingTop;\n\t\t\tthis.paddingBottom = paddingBottom;\n\t\t\tresult |= 18;\n\t\t}\n\t\tif (this.editorWidth != view.scrollDOM.clientWidth) {\n\t\t\tif (oracle.lineWrapping) measureContent = true;\n\t\t\tthis.editorWidth = view.scrollDOM.clientWidth;\n\t\t\tresult |= 16;\n\t\t}\n\t\tlet scrollTop = view.scrollDOM.scrollTop * this.scaleY;\n\t\tif (this.scrollTop != scrollTop) {\n\t\t\tthis.scrollAnchorHeight = -1;\n\t\t\tthis.scrollTop = scrollTop;\n\t\t}\n\t\tthis.scrolledToBottom = isScrolledToBottom(view.scrollDOM);\n\t\tlet pixelViewport = (this.printing ? fullPixelRange : visiblePixelRange)(dom, this.paddingTop);\n\t\tlet dTop = pixelViewport.top - this.pixelViewport.top, dBottom = pixelViewport.bottom - this.pixelViewport.bottom;\n\t\tthis.pixelViewport = pixelViewport;\n\t\tlet inView = this.pixelViewport.bottom > this.pixelViewport.top && this.pixelViewport.right > this.pixelViewport.left;\n\t\tif (inView != this.inView) {\n\t\t\tthis.inView = inView;\n\t\t\tif (inView) measureContent = true;\n\t\t}\n\t\tif (!this.inView && !this.scrollTarget && !inWindow(view.dom)) return 0;\n\t\tlet contentWidth = domRect.width;\n\t\tif (this.contentDOMWidth != contentWidth || this.editorHeight != view.scrollDOM.clientHeight) {\n\t\t\tthis.contentDOMWidth = domRect.width;\n\t\t\tthis.editorHeight = view.scrollDOM.clientHeight;\n\t\t\tresult |= 16;\n\t\t}\n\t\tif (measureContent) {\n\t\t\tlet lineHeights = view.docView.measureVisibleLineHeights(this.viewport);\n\t\t\tif (oracle.mustRefreshForHeights(lineHeights)) refresh = true;\n\t\t\tif (refresh || oracle.lineWrapping && Math.abs(contentWidth - this.contentDOMWidth) > oracle.charWidth) {\n\t\t\t\tlet { lineHeight, charWidth, textHeight } = view.docView.measureTextSize();\n\t\t\t\trefresh = lineHeight > 0 && oracle.refresh(whiteSpace, lineHeight, charWidth, textHeight, contentWidth / charWidth, lineHeights);\n\t\t\t\tif (refresh) {\n\t\t\t\t\tview.docView.minWidth = 0;\n\t\t\t\t\tresult |= 16;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (dTop > 0 && dBottom > 0) bias = Math.max(dTop, dBottom);\n\t\t\telse if (dTop < 0 && dBottom < 0) bias = Math.min(dTop, dBottom);\n\t\t\tclearHeightChangeFlag();\n\t\t\tfor (let vp of this.viewports) {\n\t\t\t\tlet heights = vp.from == this.viewport.from ? lineHeights : view.docView.measureVisibleLineHeights(vp);\n\t\t\t\tthis.heightMap = (refresh ? HeightMap.empty().applyChanges(this.stateDeco, Text.empty, this.heightOracle, [new ChangedRange(0, 0, 0, view.state.doc.length)]) : this.heightMap).updateHeight(oracle, 0, refresh, new MeasuredHeights(vp.from, heights));\n\t\t\t}\n\t\t\tif (heightChangeFlag) result |= 2;\n\t\t}\n\t\tlet viewportChange = !this.viewportIsAppropriate(this.viewport, bias) || this.scrollTarget && (this.scrollTarget.range.head < this.viewport.from || this.scrollTarget.range.head > this.viewport.to);\n\t\tif (viewportChange) {\n\t\t\tif (result & 2) result |= this.updateScaler();\n\t\t\tthis.viewport = this.getViewport(bias, this.scrollTarget);\n\t\t\tresult |= this.updateForViewport();\n\t\t}\n\t\tif (result & 2 || viewportChange) this.updateViewportLines();\n\t\tif (this.lineGaps.length || this.viewport.to - this.viewport.from > 4e3) this.updateLineGaps(this.ensureLineGaps(refresh ? [] : this.lineGaps, view));\n\t\tresult |= this.computeVisibleRanges();\n\t\tif (this.mustEnforceCursorAssoc) {\n\t\t\tthis.mustEnforceCursorAssoc = false;\n\t\t\tview.docView.enforceCursorAssoc();\n\t\t}\n\t\treturn result;\n\t}\n\tget visibleTop() {\n\t\treturn this.scaler.fromDOM(this.pixelViewport.top);\n\t}\n\tget visibleBottom() {\n\t\treturn this.scaler.fromDOM(this.pixelViewport.bottom);\n\t}\n\tgetViewport(bias, scrollTarget) {\n\t\tlet marginTop = .5 - Math.max(-.5, Math.min(.5, bias / 1e3 / 2));\n\t\tlet map = this.heightMap, oracle = this.heightOracle;\n\t\tlet { visibleTop, visibleBottom } = this;\n\t\tlet viewport = new Viewport(map.lineAt(visibleTop - marginTop * 1e3, QueryType$1.ByHeight, oracle, 0, 0).from, map.lineAt(visibleBottom + (1 - marginTop) * 1e3, QueryType$1.ByHeight, oracle, 0, 0).to);\n\t\tif (scrollTarget) {\n\t\t\tlet { head } = scrollTarget.range;\n\t\t\tif (head < viewport.from || head > viewport.to) {\n\t\t\t\tlet viewHeight = Math.min(this.editorHeight, this.pixelViewport.bottom - this.pixelViewport.top);\n\t\t\t\tlet block = map.lineAt(head, QueryType$1.ByPos, oracle, 0, 0), topPos;\n\t\t\t\tif (scrollTarget.y == \"center\") topPos = (block.top + block.bottom) / 2 - viewHeight / 2;\n\t\t\t\telse if (scrollTarget.y == \"start\" || scrollTarget.y == \"nearest\" && head < viewport.from) topPos = block.top;\n\t\t\t\telse topPos = block.bottom - viewHeight;\n\t\t\t\tviewport = new Viewport(map.lineAt(topPos - 1e3 / 2, QueryType$1.ByHeight, oracle, 0, 0).from, map.lineAt(topPos + viewHeight + 1e3 / 2, QueryType$1.ByHeight, oracle, 0, 0).to);\n\t\t\t}\n\t\t}\n\t\treturn viewport;\n\t}\n\tmapViewport(viewport, changes) {\n\t\tlet from = changes.mapPos(viewport.from, -1), to = changes.mapPos(viewport.to, 1);\n\t\treturn new Viewport(this.heightMap.lineAt(from, QueryType$1.ByPos, this.heightOracle, 0, 0).from, this.heightMap.lineAt(to, QueryType$1.ByPos, this.heightOracle, 0, 0).to);\n\t}\n\tviewportIsAppropriate({ from, to }, bias = 0) {\n\t\tif (!this.inView) return true;\n\t\tlet { top } = this.heightMap.lineAt(from, QueryType$1.ByPos, this.heightOracle, 0, 0);\n\t\tlet { bottom } = this.heightMap.lineAt(to, QueryType$1.ByPos, this.heightOracle, 0, 0);\n\t\tlet { visibleTop, visibleBottom } = this;\n\t\treturn (from == 0 || top <= visibleTop - Math.max(10, Math.min(-bias, 250))) && (to == this.state.doc.length || bottom >= visibleBottom + Math.max(10, Math.min(bias, 250))) && top > visibleTop - 2 * 1e3 && bottom < visibleBottom + 2 * 1e3;\n\t}\n\tmapLineGaps(gaps, changes) {\n\t\tif (!gaps.length || changes.empty) return gaps;\n\t\tlet mapped = [];\n\t\tfor (let gap of gaps) if (!changes.touchesRange(gap.from, gap.to)) mapped.push(new LineGap(changes.mapPos(gap.from), changes.mapPos(gap.to), gap.size, gap.displaySize));\n\t\treturn mapped;\n\t}\n\tensureLineGaps(current, mayMeasure) {\n\t\tlet wrapping = this.heightOracle.lineWrapping;\n\t\tlet margin = wrapping ? 1e4 : 2e3, halfMargin = margin >> 1, doubleMargin = margin << 1;\n\t\tif (this.defaultTextDirection != Direction.LTR && !wrapping) return [];\n\t\tlet gaps = [];\n\t\tlet addGap = (from, to, line, structure) => {\n\t\t\tif (to - from < halfMargin) return;\n\t\t\tlet sel = this.state.selection.main, avoid = [sel.from];\n\t\t\tif (!sel.empty) avoid.push(sel.to);\n\t\t\tfor (let pos of avoid) if (pos > from && pos < to) {\n\t\t\t\taddGap(from, pos - 10, line, structure);\n\t\t\t\taddGap(pos + 10, to, line, structure);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlet gap = find(current, (gap) => gap.from >= line.from && gap.to <= line.to && Math.abs(gap.from - from) < halfMargin && Math.abs(gap.to - to) < halfMargin && !avoid.some((pos) => gap.from < pos && gap.to > pos));\n\t\t\tif (!gap) {\n\t\t\t\tif (to < line.to && mayMeasure && wrapping && mayMeasure.visibleRanges.some((r) => r.from <= to && r.to >= to)) {\n\t\t\t\t\tlet lineStart = mayMeasure.moveToLineBoundary(EditorSelection.cursor(to), false, true).head;\n\t\t\t\t\tif (lineStart > from) to = lineStart;\n\t\t\t\t}\n\t\t\t\tlet size = this.gapSize(line, from, to, structure);\n\t\t\t\tgap = new LineGap(from, to, size, wrapping || size < 2e6 ? size : 2e6);\n\t\t\t}\n\t\t\tgaps.push(gap);\n\t\t};\n\t\tlet checkLine = (line) => {\n\t\t\tif (line.length < doubleMargin || line.type != BlockType.Text) return;\n\t\t\tlet structure = lineStructure(line.from, line.to, this.stateDeco);\n\t\t\tif (structure.total < doubleMargin) return;\n\t\t\tlet target = this.scrollTarget ? this.scrollTarget.range.head : null;\n\t\t\tlet viewFrom, viewTo;\n\t\t\tif (wrapping) {\n\t\t\t\tlet marginHeight = margin / this.heightOracle.lineLength * this.heightOracle.lineHeight;\n\t\t\t\tlet top, bot;\n\t\t\t\tif (target != null) {\n\t\t\t\t\tlet targetFrac = findFraction(structure, target);\n\t\t\t\t\tlet spaceFrac = ((this.visibleBottom - this.visibleTop) / 2 + marginHeight) / line.height;\n\t\t\t\t\ttop = targetFrac - spaceFrac;\n\t\t\t\t\tbot = targetFrac + spaceFrac;\n\t\t\t\t} else {\n\t\t\t\t\ttop = (this.visibleTop - line.top - marginHeight) / line.height;\n\t\t\t\t\tbot = (this.visibleBottom - line.top + marginHeight) / line.height;\n\t\t\t\t}\n\t\t\t\tviewFrom = findPosition(structure, top);\n\t\t\t\tviewTo = findPosition(structure, bot);\n\t\t\t} else {\n\t\t\t\tlet totalWidth = structure.total * this.heightOracle.charWidth;\n\t\t\t\tlet marginWidth = margin * this.heightOracle.charWidth;\n\t\t\t\tlet horizOffset = 0;\n\t\t\t\tif (totalWidth > 2e6) {\n\t\t\t\t\tfor (let old of current) if (old.from >= line.from && old.from < line.to && old.size != old.displaySize && old.from * this.heightOracle.charWidth + horizOffset < this.pixelViewport.left) horizOffset = old.size - old.displaySize;\n\t\t\t\t}\n\t\t\t\tlet pxLeft = this.pixelViewport.left + horizOffset, pxRight = this.pixelViewport.right + horizOffset;\n\t\t\t\tlet left, right;\n\t\t\t\tif (target != null) {\n\t\t\t\t\tlet targetFrac = findFraction(structure, target);\n\t\t\t\t\tlet spaceFrac = ((pxRight - pxLeft) / 2 + marginWidth) / totalWidth;\n\t\t\t\t\tleft = targetFrac - spaceFrac;\n\t\t\t\t\tright = targetFrac + spaceFrac;\n\t\t\t\t} else {\n\t\t\t\t\tleft = (pxLeft - marginWidth) / totalWidth;\n\t\t\t\t\tright = (pxRight + marginWidth) / totalWidth;\n\t\t\t\t}\n\t\t\t\tviewFrom = findPosition(structure, left);\n\t\t\t\tviewTo = findPosition(structure, right);\n\t\t\t}\n\t\t\tif (viewFrom > line.from) addGap(line.from, viewFrom, line, structure);\n\t\t\tif (viewTo < line.to) addGap(viewTo, line.to, line, structure);\n\t\t};\n\t\tfor (let line of this.viewportLines) if (Array.isArray(line.type)) line.type.forEach(checkLine);\n\t\telse checkLine(line);\n\t\treturn gaps;\n\t}\n\tgapSize(line, from, to, structure) {\n\t\tlet fraction = findFraction(structure, to) - findFraction(structure, from);\n\t\tif (this.heightOracle.lineWrapping) return line.height * fraction;\n\t\telse return structure.total * this.heightOracle.charWidth * fraction;\n\t}\n\tupdateLineGaps(gaps) {\n\t\tif (!LineGap.same(gaps, this.lineGaps)) {\n\t\t\tthis.lineGaps = gaps;\n\t\t\tthis.lineGapDeco = Decoration.set(gaps.map((gap) => gap.draw(this, this.heightOracle.lineWrapping)));\n\t\t}\n\t}\n\tcomputeVisibleRanges(changes) {\n\t\tlet deco = this.stateDeco;\n\t\tif (this.lineGaps.length) deco = deco.concat(this.lineGapDeco);\n\t\tlet ranges = [];\n\t\tRangeSet.spans(deco, this.viewport.from, this.viewport.to, {\n\t\t\tspan(from, to) {\n\t\t\t\tranges.push({\n\t\t\t\t\tfrom,\n\t\t\t\t\tto\n\t\t\t\t});\n\t\t\t},\n\t\t\tpoint() {}\n\t\t}, 20);\n\t\tlet changed = 0;\n\t\tif (ranges.length != this.visibleRanges.length) changed = 12;\n\t\telse for (let i = 0; i < ranges.length && !(changed & 8); i++) {\n\t\t\tlet old = this.visibleRanges[i], nw = ranges[i];\n\t\t\tif (old.from != nw.from || old.to != nw.to) {\n\t\t\t\tchanged |= 4;\n\t\t\t\tif (!(changes && changes.mapPos(old.from, -1) == nw.from && changes.mapPos(old.to, 1) == nw.to)) changed |= 8;\n\t\t\t}\n\t\t}\n\t\tthis.visibleRanges = ranges;\n\t\treturn changed;\n\t}\n\tlineBlockAt(pos) {\n\t\treturn pos >= this.viewport.from && pos <= this.viewport.to && this.viewportLines.find((b) => b.from <= pos && b.to >= pos) || scaleBlock(this.heightMap.lineAt(pos, QueryType$1.ByPos, this.heightOracle, 0, 0), this.scaler);\n\t}\n\tlineBlockAtHeight(height) {\n\t\treturn height >= this.viewportLines[0].top && height <= this.viewportLines[this.viewportLines.length - 1].bottom && this.viewportLines.find((l) => l.top <= height && l.bottom >= height) || scaleBlock(this.heightMap.lineAt(this.scaler.fromDOM(height), QueryType$1.ByHeight, this.heightOracle, 0, 0), this.scaler);\n\t}\n\tscrollAnchorAt(scrollTop) {\n\t\tlet block = this.lineBlockAtHeight(scrollTop + 8);\n\t\treturn block.from >= this.viewport.from || this.viewportLines[0].top - scrollTop > 200 ? block : this.viewportLines[0];\n\t}\n\telementAtHeight(height) {\n\t\treturn scaleBlock(this.heightMap.blockAt(this.scaler.fromDOM(height), this.heightOracle, 0, 0), this.scaler);\n\t}\n\tget docHeight() {\n\t\treturn this.scaler.toDOM(this.heightMap.height);\n\t}\n\tget contentHeight() {\n\t\treturn this.docHeight + this.paddingTop + this.paddingBottom;\n\t}\n};\nvar Viewport = class {\n\tconstructor(from, to) {\n\t\tthis.from = from;\n\t\tthis.to = to;\n\t}\n};\nfunction lineStructure(from, to, stateDeco) {\n\tlet ranges = [], pos = from, total = 0;\n\tRangeSet.spans(stateDeco, from, to, {\n\t\tspan() {},\n\t\tpoint(from, to) {\n\t\t\tif (from > pos) {\n\t\t\t\tranges.push({\n\t\t\t\t\tfrom: pos,\n\t\t\t\t\tto: from\n\t\t\t\t});\n\t\t\t\ttotal += from - pos;\n\t\t\t}\n\t\t\tpos = to;\n\t\t}\n\t}, 20);\n\tif (pos < to) {\n\t\tranges.push({\n\t\t\tfrom: pos,\n\t\t\tto\n\t\t});\n\t\ttotal += to - pos;\n\t}\n\treturn {\n\t\ttotal,\n\t\tranges\n\t};\n}\nfunction findPosition({ total, ranges }, ratio) {\n\tif (ratio <= 0) return ranges[0].from;\n\tif (ratio >= 1) return ranges[ranges.length - 1].to;\n\tlet dist = Math.floor(total * ratio);\n\tfor (let i = 0;; i++) {\n\t\tlet { from, to } = ranges[i], size = to - from;\n\t\tif (dist <= size) return from + dist;\n\t\tdist -= size;\n\t}\n}\nfunction findFraction(structure, pos) {\n\tlet counted = 0;\n\tfor (let { from, to } of structure.ranges) {\n\t\tif (pos <= to) {\n\t\t\tcounted += pos - from;\n\t\t\tbreak;\n\t\t}\n\t\tcounted += to - from;\n\t}\n\treturn counted / structure.total;\n}\nfunction find(array, f) {\n\tfor (let val of array) if (f(val)) return val;\n}\nconst IdScaler = {\n\ttoDOM(n) {\n\t\treturn n;\n\t},\n\tfromDOM(n) {\n\t\treturn n;\n\t},\n\tscale: 1,\n\teq(other) {\n\t\treturn other == this;\n\t}\n};\nvar BigScaler = class BigScaler {\n\tconstructor(oracle, heightMap, viewports) {\n\t\tlet vpHeight = 0, base = 0, domBase = 0;\n\t\tthis.viewports = viewports.map(({ from, to }) => {\n\t\t\tlet top = heightMap.lineAt(from, QueryType$1.ByPos, oracle, 0, 0).top;\n\t\t\tlet bottom = heightMap.lineAt(to, QueryType$1.ByPos, oracle, 0, 0).bottom;\n\t\t\tvpHeight += bottom - top;\n\t\t\treturn {\n\t\t\t\tfrom,\n\t\t\t\tto,\n\t\t\t\ttop,\n\t\t\t\tbottom,\n\t\t\t\tdomTop: 0,\n\t\t\t\tdomBottom: 0\n\t\t\t};\n\t\t});\n\t\tthis.scale = (7e6 - vpHeight) / (heightMap.height - vpHeight);\n\t\tfor (let obj of this.viewports) {\n\t\t\tobj.domTop = domBase + (obj.top - base) * this.scale;\n\t\t\tdomBase = obj.domBottom = obj.domTop + (obj.bottom - obj.top);\n\t\t\tbase = obj.bottom;\n\t\t}\n\t}\n\ttoDOM(n) {\n\t\tfor (let i = 0, base = 0, domBase = 0;; i++) {\n\t\t\tlet vp = i < this.viewports.length ? this.viewports[i] : null;\n\t\t\tif (!vp || n < vp.top) return domBase + (n - base) * this.scale;\n\t\t\tif (n <= vp.bottom) return vp.domTop + (n - vp.top);\n\t\t\tbase = vp.bottom;\n\t\t\tdomBase = vp.domBottom;\n\t\t}\n\t}\n\tfromDOM(n) {\n\t\tfor (let i = 0, base = 0, domBase = 0;; i++) {\n\t\t\tlet vp = i < this.viewports.length ? this.viewports[i] : null;\n\t\t\tif (!vp || n < vp.domTop) return base + (n - domBase) / this.scale;\n\t\t\tif (n <= vp.domBottom) return vp.top + (n - vp.domTop);\n\t\t\tbase = vp.bottom;\n\t\t\tdomBase = vp.domBottom;\n\t\t}\n\t}\n\teq(other) {\n\t\tif (!(other instanceof BigScaler)) return false;\n\t\treturn this.scale == other.scale && this.viewports.length == other.viewports.length && this.viewports.every((vp, i) => vp.from == other.viewports[i].from && vp.to == other.viewports[i].to);\n\t}\n};\nfunction scaleBlock(block, scaler) {\n\tif (scaler.scale == 1) return block;\n\tlet bTop = scaler.toDOM(block.top), bBottom = scaler.toDOM(block.bottom);\n\treturn new BlockInfo(block.from, block.length, bTop, bBottom - bTop, Array.isArray(block._content) ? block._content.map((b) => scaleBlock(b, scaler)) : block._content);\n}\nconst theme = /* @__PURE__ */ Facet.define({ combine: (strs) => strs.join(\" \") });\nconst darkTheme = /* @__PURE__ */ Facet.define({ combine: (values) => values.indexOf(true) > -1 });\nconst baseThemeID = /* @__PURE__ */ StyleModule.newName(), baseLightID = /* @__PURE__ */ StyleModule.newName(), baseDarkID = /* @__PURE__ */ StyleModule.newName();\nconst lightDarkIDs = {\n\t\"&light\": \".\" + baseLightID,\n\t\"&dark\": \".\" + baseDarkID\n};\nfunction buildTheme(main, spec, scopes) {\n\treturn new StyleModule(spec, { finish(sel) {\n\t\treturn /&/.test(sel) ? sel.replace(/&\\w*/, (m) => {\n\t\t\tif (m == \"&\") return main;\n\t\t\tif (!scopes || !scopes[m]) throw new RangeError(`Unsupported selector: ${m}`);\n\t\t\treturn scopes[m];\n\t\t}) : main + \" \" + sel;\n\t} });\n}\nconst baseTheme$1$5 = /* @__PURE__ */ buildTheme(\".\" + baseThemeID, {\n\t\"&\": {\n\t\tposition: \"relative !important\",\n\t\tboxSizing: \"border-box\",\n\t\t\"&.cm-focused\": { outline: \"1px dotted #212121\" },\n\t\tdisplay: \"flex !important\",\n\t\tflexDirection: \"column\"\n\t},\n\t\".cm-scroller\": {\n\t\tdisplay: \"flex !important\",\n\t\talignItems: \"flex-start !important\",\n\t\tfontFamily: \"monospace\",\n\t\tlineHeight: 1.4,\n\t\theight: \"100%\",\n\t\toverflowX: \"auto\",\n\t\tposition: \"relative\",\n\t\tzIndex: 0,\n\t\toverflowAnchor: \"none\"\n\t},\n\t\".cm-content\": {\n\t\tmargin: 0,\n\t\tflexGrow: 2,\n\t\tflexShrink: 0,\n\t\tdisplay: \"block\",\n\t\twhiteSpace: \"pre\",\n\t\twordWrap: \"normal\",\n\t\tboxSizing: \"border-box\",\n\t\tminHeight: \"100%\",\n\t\tpadding: \"4px 0\",\n\t\toutline: \"none\",\n\t\t\"&[contenteditable=true]\": { WebkitUserModify: \"read-write-plaintext-only\" }\n\t},\n\t\".cm-lineWrapping\": {\n\t\twhiteSpace_fallback: \"pre-wrap\",\n\t\twhiteSpace: \"break-spaces\",\n\t\twordBreak: \"break-word\",\n\t\toverflowWrap: \"anywhere\",\n\t\tflexShrink: 1\n\t},\n\t\"&light .cm-content\": { caretColor: \"black\" },\n\t\"&dark .cm-content\": { caretColor: \"white\" },\n\t\".cm-line\": {\n\t\tdisplay: \"block\",\n\t\tpadding: \"0 2px 0 6px\"\n\t},\n\t\".cm-layer\": {\n\t\tposition: \"absolute\",\n\t\tleft: 0,\n\t\ttop: 0,\n\t\tcontain: \"size style\",\n\t\t\"& > *\": { position: \"absolute\" }\n\t},\n\t\"&light .cm-selectionBackground\": { background: \"#d9d9d9\" },\n\t\"&dark .cm-selectionBackground\": { background: \"#222\" },\n\t\"&light.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground\": { background: \"#d7d4f0\" },\n\t\"&dark.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground\": { background: \"#233\" },\n\t\".cm-cursorLayer\": { pointerEvents: \"none\" },\n\t\"&.cm-focused > .cm-scroller > .cm-cursorLayer\": { animation: \"steps(1) cm-blink 1.2s infinite\" },\n\t\"@keyframes cm-blink\": {\n\t\t\"0%\": {},\n\t\t\"50%\": { opacity: 0 },\n\t\t\"100%\": {}\n\t},\n\t\"@keyframes cm-blink2\": {\n\t\t\"0%\": {},\n\t\t\"50%\": { opacity: 0 },\n\t\t\"100%\": {}\n\t},\n\t\".cm-cursor, .cm-dropCursor\": {\n\t\tborderLeft: \"1.2px solid black\",\n\t\tmarginLeft: \"-0.6px\",\n\t\tpointerEvents: \"none\"\n\t},\n\t\".cm-cursor\": { display: \"none\" },\n\t\"&dark .cm-cursor\": { borderLeftColor: \"#ddd\" },\n\t\".cm-dropCursor\": { position: \"absolute\" },\n\t\"&.cm-focused > .cm-scroller > .cm-cursorLayer .cm-cursor\": { display: \"block\" },\n\t\".cm-iso\": { unicodeBidi: \"isolate\" },\n\t\".cm-announced\": {\n\t\tposition: \"fixed\",\n\t\ttop: \"-10000px\"\n\t},\n\t\"@media print\": { \".cm-announced\": { display: \"none\" } },\n\t\"&light .cm-activeLine\": { backgroundColor: \"#cceeff44\" },\n\t\"&dark .cm-activeLine\": { backgroundColor: \"#99eeff33\" },\n\t\"&light .cm-specialChar\": { color: \"red\" },\n\t\"&dark .cm-specialChar\": { color: \"#f78\" },\n\t\".cm-gutters\": {\n\t\tflexShrink: 0,\n\t\tdisplay: \"flex\",\n\t\theight: \"100%\",\n\t\tboxSizing: \"border-box\",\n\t\tinsetInlineStart: 0,\n\t\tzIndex: 200\n\t},\n\t\"&light .cm-gutters\": {\n\t\tbackgroundColor: \"#f5f5f5\",\n\t\tcolor: \"#6c6c6c\",\n\t\tborderRight: \"1px solid #ddd\"\n\t},\n\t\"&dark .cm-gutters\": {\n\t\tbackgroundColor: \"#333338\",\n\t\tcolor: \"#ccc\"\n\t},\n\t\".cm-gutter\": {\n\t\tdisplay: \"flex !important\",\n\t\tflexDirection: \"column\",\n\t\tflexShrink: 0,\n\t\tboxSizing: \"border-box\",\n\t\tminHeight: \"100%\",\n\t\toverflow: \"hidden\"\n\t},\n\t\".cm-gutterElement\": { boxSizing: \"border-box\" },\n\t\".cm-lineNumbers .cm-gutterElement\": {\n\t\tpadding: \"0 3px 0 5px\",\n\t\tminWidth: \"20px\",\n\t\ttextAlign: \"right\",\n\t\twhiteSpace: \"nowrap\"\n\t},\n\t\"&light .cm-activeLineGutter\": { backgroundColor: \"#e2f2ff\" },\n\t\"&dark .cm-activeLineGutter\": { backgroundColor: \"#222227\" },\n\t\".cm-panels\": {\n\t\tboxSizing: \"border-box\",\n\t\tposition: \"sticky\",\n\t\tleft: 0,\n\t\tright: 0,\n\t\tzIndex: 300\n\t},\n\t\"&light .cm-panels\": {\n\t\tbackgroundColor: \"#f5f5f5\",\n\t\tcolor: \"black\"\n\t},\n\t\"&light .cm-panels-top\": { borderBottom: \"1px solid #ddd\" },\n\t\"&light .cm-panels-bottom\": { borderTop: \"1px solid #ddd\" },\n\t\"&dark .cm-panels\": {\n\t\tbackgroundColor: \"#333338\",\n\t\tcolor: \"white\"\n\t},\n\t\".cm-tab\": {\n\t\tdisplay: \"inline-block\",\n\t\toverflow: \"hidden\",\n\t\tverticalAlign: \"bottom\"\n\t},\n\t\".cm-widgetBuffer\": {\n\t\tverticalAlign: \"text-top\",\n\t\theight: \"1em\",\n\t\twidth: 0,\n\t\tdisplay: \"inline\"\n\t},\n\t\".cm-placeholder\": {\n\t\tcolor: \"#888\",\n\t\tdisplay: \"inline-block\",\n\t\tverticalAlign: \"top\",\n\t\tuserSelect: \"none\"\n\t},\n\t\".cm-highlightSpace\": {\n\t\tbackgroundImage: \"radial-gradient(circle at 50% 55%, #aaa 20%, transparent 5%)\",\n\t\tbackgroundPosition: \"center\"\n\t},\n\t\".cm-highlightTab\": {\n\t\tbackgroundImage: `url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"200\" height=\"20\"><path stroke=\"%23888\" stroke-width=\"1\" fill=\"none\" d=\"M1 10H196L190 5M190 15L196 10M197 4L197 16\"/></svg>')`,\n\t\tbackgroundSize: \"auto 100%\",\n\t\tbackgroundPosition: \"right 90%\",\n\t\tbackgroundRepeat: \"no-repeat\"\n\t},\n\t\".cm-trailingSpace\": { backgroundColor: \"#ff332255\" },\n\t\".cm-button\": {\n\t\tverticalAlign: \"middle\",\n\t\tcolor: \"inherit\",\n\t\tfontSize: \"70%\",\n\t\tpadding: \".2em 1em\",\n\t\tborderRadius: \"1px\"\n\t},\n\t\"&light .cm-button\": {\n\t\tbackgroundImage: \"linear-gradient(#eff1f5, #d9d9df)\",\n\t\tborder: \"1px solid #888\",\n\t\t\"&:active\": { backgroundImage: \"linear-gradient(#b4b4b4, #d0d3d6)\" }\n\t},\n\t\"&dark .cm-button\": {\n\t\tbackgroundImage: \"linear-gradient(#393939, #111)\",\n\t\tborder: \"1px solid #888\",\n\t\t\"&:active\": { backgroundImage: \"linear-gradient(#111, #333)\" }\n\t},\n\t\".cm-textfield\": {\n\t\tverticalAlign: \"middle\",\n\t\tcolor: \"inherit\",\n\t\tfontSize: \"70%\",\n\t\tborder: \"1px solid silver\",\n\t\tpadding: \".2em .5em\"\n\t},\n\t\"&light .cm-textfield\": { backgroundColor: \"white\" },\n\t\"&dark .cm-textfield\": {\n\t\tborder: \"1px solid #555\",\n\t\tbackgroundColor: \"inherit\"\n\t}\n}, lightDarkIDs);\nconst observeOptions = {\n\tchildList: true,\n\tcharacterData: true,\n\tsubtree: true,\n\tattributes: true,\n\tcharacterDataOldValue: true\n};\nconst useCharData = browser.ie && browser.ie_version <= 11;\nvar DOMObserver = class {\n\tconstructor(view) {\n\t\tthis.view = view;\n\t\tthis.active = false;\n\t\tthis.editContext = null;\n\t\tthis.selectionRange = new DOMSelectionState();\n\t\tthis.selectionChanged = false;\n\t\tthis.delayedFlush = -1;\n\t\tthis.resizeTimeout = -1;\n\t\tthis.queue = [];\n\t\tthis.delayedAndroidKey = null;\n\t\tthis.flushingAndroidKey = -1;\n\t\tthis.lastChange = 0;\n\t\tthis.scrollTargets = [];\n\t\tthis.intersection = null;\n\t\tthis.resizeScroll = null;\n\t\tthis.intersecting = false;\n\t\tthis.gapIntersection = null;\n\t\tthis.gaps = [];\n\t\tthis.printQuery = null;\n\t\tthis.parentCheck = -1;\n\t\tthis.dom = view.contentDOM;\n\t\tthis.observer = new MutationObserver((mutations) => {\n\t\t\tfor (let mut of mutations) this.queue.push(mut);\n\t\t\tif ((browser.ie && browser.ie_version <= 11 || browser.ios && view.composing) && mutations.some((m) => m.type == \"childList\" && m.removedNodes.length || m.type == \"characterData\" && m.oldValue.length > m.target.nodeValue.length)) this.flushSoon();\n\t\t\telse this.flush();\n\t\t});\n\t\tif (window.EditContext && view.constructor.EDIT_CONTEXT !== false && !(browser.chrome && browser.chrome_version < 126)) {\n\t\t\tthis.editContext = new EditContextManager(view);\n\t\t\tif (view.state.facet(editable)) view.contentDOM.editContext = this.editContext.editContext;\n\t\t}\n\t\tif (useCharData) this.onCharData = (event) => {\n\t\t\tthis.queue.push({\n\t\t\t\ttarget: event.target,\n\t\t\t\ttype: \"characterData\",\n\t\t\t\toldValue: event.prevValue\n\t\t\t});\n\t\t\tthis.flushSoon();\n\t\t};\n\t\tthis.onSelectionChange = this.onSelectionChange.bind(this);\n\t\tthis.onResize = this.onResize.bind(this);\n\t\tthis.onPrint = this.onPrint.bind(this);\n\t\tthis.onScroll = this.onScroll.bind(this);\n\t\tif (window.matchMedia) this.printQuery = window.matchMedia(\"print\");\n\t\tif (typeof ResizeObserver == \"function\") {\n\t\t\tthis.resizeScroll = new ResizeObserver(() => {\n\t\t\t\tvar _a;\n\t\t\t\tif (((_a = this.view.docView) === null || _a === void 0 ? void 0 : _a.lastUpdate) < Date.now() - 75) this.onResize();\n\t\t\t});\n\t\t\tthis.resizeScroll.observe(view.scrollDOM);\n\t\t}\n\t\tthis.addWindowListeners(this.win = view.win);\n\t\tthis.start();\n\t\tif (typeof IntersectionObserver == \"function\") {\n\t\t\tthis.intersection = new IntersectionObserver((entries) => {\n\t\t\t\tif (this.parentCheck < 0) this.parentCheck = setTimeout(this.listenForScroll.bind(this), 1e3);\n\t\t\t\tif (entries.length > 0 && entries[entries.length - 1].intersectionRatio > 0 != this.intersecting) {\n\t\t\t\t\tthis.intersecting = !this.intersecting;\n\t\t\t\t\tif (this.intersecting != this.view.inView) this.onScrollChanged(document.createEvent(\"Event\"));\n\t\t\t\t}\n\t\t\t}, { threshold: [0, .001] });\n\t\t\tthis.intersection.observe(this.dom);\n\t\t\tthis.gapIntersection = new IntersectionObserver((entries) => {\n\t\t\t\tif (entries.length > 0 && entries[entries.length - 1].intersectionRatio > 0) this.onScrollChanged(document.createEvent(\"Event\"));\n\t\t\t}, {});\n\t\t}\n\t\tthis.listenForScroll();\n\t\tthis.readSelectionRange();\n\t}\n\tonScrollChanged(e) {\n\t\tthis.view.inputState.runHandlers(\"scroll\", e);\n\t\tif (this.intersecting) this.view.measure();\n\t}\n\tonScroll(e) {\n\t\tif (this.intersecting) this.flush(false);\n\t\tif (this.editContext) this.view.requestMeasure(this.editContext.measureReq);\n\t\tthis.onScrollChanged(e);\n\t}\n\tonResize() {\n\t\tif (this.resizeTimeout < 0) this.resizeTimeout = setTimeout(() => {\n\t\t\tthis.resizeTimeout = -1;\n\t\t\tthis.view.requestMeasure();\n\t\t}, 50);\n\t}\n\tonPrint(event) {\n\t\tif ((event.type == \"change\" || !event.type) && !event.matches) return;\n\t\tthis.view.viewState.printing = true;\n\t\tthis.view.measure();\n\t\tsetTimeout(() => {\n\t\t\tthis.view.viewState.printing = false;\n\t\t\tthis.view.requestMeasure();\n\t\t}, 500);\n\t}\n\tupdateGaps(gaps) {\n\t\tif (this.gapIntersection && (gaps.length != this.gaps.length || this.gaps.some((g, i) => g != gaps[i]))) {\n\t\t\tthis.gapIntersection.disconnect();\n\t\t\tfor (let gap of gaps) this.gapIntersection.observe(gap);\n\t\t\tthis.gaps = gaps;\n\t\t}\n\t}\n\tonSelectionChange(event) {\n\t\tlet wasChanged = this.selectionChanged;\n\t\tif (!this.readSelectionRange() || this.delayedAndroidKey) return;\n\t\tlet { view } = this, sel = this.selectionRange;\n\t\tif (view.state.facet(editable) ? view.root.activeElement != this.dom : !hasSelection(this.dom, sel)) return;\n\t\tlet context = sel.anchorNode && view.docView.nearest(sel.anchorNode);\n\t\tif (context && context.ignoreEvent(event)) {\n\t\t\tif (!wasChanged) this.selectionChanged = false;\n\t\t\treturn;\n\t\t}\n\t\tif ((browser.ie && browser.ie_version <= 11 || browser.android && browser.chrome) && !view.state.selection.main.empty && sel.focusNode && isEquivalentPosition(sel.focusNode, sel.focusOffset, sel.anchorNode, sel.anchorOffset)) this.flushSoon();\n\t\telse this.flush(false);\n\t}\n\treadSelectionRange() {\n\t\tlet { view } = this;\n\t\tlet selection = getSelection(view.root);\n\t\tif (!selection) return false;\n\t\tlet range = browser.safari && view.root.nodeType == 11 && view.root.activeElement == this.dom && safariSelectionRangeHack(this.view, selection) || selection;\n\t\tif (!range || this.selectionRange.eq(range)) return false;\n\t\tlet local = hasSelection(this.dom, range);\n\t\tif (local && !this.selectionChanged && view.inputState.lastFocusTime > Date.now() - 200 && view.inputState.lastTouchTime < Date.now() - 300 && atElementStart(this.dom, range)) {\n\t\t\tthis.view.inputState.lastFocusTime = 0;\n\t\t\tview.docView.updateSelection();\n\t\t\treturn false;\n\t\t}\n\t\tthis.selectionRange.setRange(range);\n\t\tif (local) this.selectionChanged = true;\n\t\treturn true;\n\t}\n\tsetSelectionRange(anchor, head) {\n\t\tthis.selectionRange.set(anchor.node, anchor.offset, head.node, head.offset);\n\t\tthis.selectionChanged = false;\n\t}\n\tclearSelectionRange() {\n\t\tthis.selectionRange.set(null, 0, null, 0);\n\t}\n\tlistenForScroll() {\n\t\tthis.parentCheck = -1;\n\t\tlet i = 0, changed = null;\n\t\tfor (let dom = this.dom; dom;) if (dom.nodeType == 1) {\n\t\t\tif (!changed && i < this.scrollTargets.length && this.scrollTargets[i] == dom) i++;\n\t\t\telse if (!changed) changed = this.scrollTargets.slice(0, i);\n\t\t\tif (changed) changed.push(dom);\n\t\t\tdom = dom.assignedSlot || dom.parentNode;\n\t\t} else if (dom.nodeType == 11) dom = dom.host;\n\t\telse break;\n\t\tif (i < this.scrollTargets.length && !changed) changed = this.scrollTargets.slice(0, i);\n\t\tif (changed) {\n\t\t\tfor (let dom of this.scrollTargets) dom.removeEventListener(\"scroll\", this.onScroll);\n\t\t\tfor (let dom of this.scrollTargets = changed) dom.addEventListener(\"scroll\", this.onScroll);\n\t\t}\n\t}\n\tignore(f) {\n\t\tif (!this.active) return f();\n\t\ttry {\n\t\t\tthis.stop();\n\t\t\treturn f();\n\t\t} finally {\n\t\t\tthis.start();\n\t\t\tthis.clear();\n\t\t}\n\t}\n\tstart() {\n\t\tif (this.active) return;\n\t\tthis.observer.observe(this.dom, observeOptions);\n\t\tif (useCharData) this.dom.addEventListener(\"DOMCharacterDataModified\", this.onCharData);\n\t\tthis.active = true;\n\t}\n\tstop() {\n\t\tif (!this.active) return;\n\t\tthis.active = false;\n\t\tthis.observer.disconnect();\n\t\tif (useCharData) this.dom.removeEventListener(\"DOMCharacterDataModified\", this.onCharData);\n\t}\n\tclear() {\n\t\tthis.processRecords();\n\t\tthis.queue.length = 0;\n\t\tthis.selectionChanged = false;\n\t}\n\tdelayAndroidKey(key, keyCode) {\n\t\tvar _a;\n\t\tif (!this.delayedAndroidKey) {\n\t\t\tlet flush = () => {\n\t\t\t\tlet key = this.delayedAndroidKey;\n\t\t\t\tif (key) {\n\t\t\t\t\tthis.clearDelayedAndroidKey();\n\t\t\t\t\tthis.view.inputState.lastKeyCode = key.keyCode;\n\t\t\t\t\tthis.view.inputState.lastKeyTime = Date.now();\n\t\t\t\t\tif (!this.flush() && key.force) dispatchKey(this.dom, key.key, key.keyCode);\n\t\t\t\t}\n\t\t\t};\n\t\t\tthis.flushingAndroidKey = this.view.win.requestAnimationFrame(flush);\n\t\t}\n\t\tif (!this.delayedAndroidKey || key == \"Enter\") this.delayedAndroidKey = {\n\t\t\tkey,\n\t\t\tkeyCode,\n\t\t\tforce: this.lastChange < Date.now() - 50 || !!((_a = this.delayedAndroidKey) === null || _a === void 0 ? void 0 : _a.force)\n\t\t};\n\t}\n\tclearDelayedAndroidKey() {\n\t\tthis.win.cancelAnimationFrame(this.flushingAndroidKey);\n\t\tthis.delayedAndroidKey = null;\n\t\tthis.flushingAndroidKey = -1;\n\t}\n\tflushSoon() {\n\t\tif (this.delayedFlush < 0) this.delayedFlush = this.view.win.requestAnimationFrame(() => {\n\t\t\tthis.delayedFlush = -1;\n\t\t\tthis.flush();\n\t\t});\n\t}\n\tforceFlush() {\n\t\tif (this.delayedFlush >= 0) {\n\t\t\tthis.view.win.cancelAnimationFrame(this.delayedFlush);\n\t\t\tthis.delayedFlush = -1;\n\t\t}\n\t\tthis.flush();\n\t}\n\tpendingRecords() {\n\t\tfor (let mut of this.observer.takeRecords()) this.queue.push(mut);\n\t\treturn this.queue;\n\t}\n\tprocessRecords() {\n\t\tlet records = this.pendingRecords();\n\t\tif (records.length) this.queue = [];\n\t\tlet from = -1, to = -1, typeOver = false;\n\t\tfor (let record of records) {\n\t\t\tlet range = this.readMutation(record);\n\t\t\tif (!range) continue;\n\t\t\tif (range.typeOver) typeOver = true;\n\t\t\tif (from == -1) ({from, to} = range);\n\t\t\telse {\n\t\t\t\tfrom = Math.min(range.from, from);\n\t\t\t\tto = Math.max(range.to, to);\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\tfrom,\n\t\t\tto,\n\t\t\ttypeOver\n\t\t};\n\t}\n\treadChange() {\n\t\tlet { from, to, typeOver } = this.processRecords();\n\t\tlet newSel = this.selectionChanged && hasSelection(this.dom, this.selectionRange);\n\t\tif (from < 0 && !newSel) return null;\n\t\tif (from > -1) this.lastChange = Date.now();\n\t\tthis.view.inputState.lastFocusTime = 0;\n\t\tthis.selectionChanged = false;\n\t\tlet change = new DOMChange(this.view, from, to, typeOver);\n\t\tthis.view.docView.domChanged = { newSel: change.newSel ? change.newSel.main : null };\n\t\treturn change;\n\t}\n\tflush(readSelection = true) {\n\t\tif (this.delayedFlush >= 0 || this.delayedAndroidKey) return false;\n\t\tif (readSelection) this.readSelectionRange();\n\t\tlet domChange = this.readChange();\n\t\tif (!domChange) {\n\t\t\tthis.view.requestMeasure();\n\t\t\treturn false;\n\t\t}\n\t\tlet startState = this.view.state;\n\t\tlet handled = applyDOMChange(this.view, domChange);\n\t\tif (this.view.state == startState && (domChange.domChanged || domChange.newSel && !domChange.newSel.main.eq(this.view.state.selection.main))) this.view.update([]);\n\t\treturn handled;\n\t}\n\treadMutation(rec) {\n\t\tlet cView = this.view.docView.nearest(rec.target);\n\t\tif (!cView || cView.ignoreMutation(rec)) return null;\n\t\tcView.markDirty(rec.type == \"attributes\");\n\t\tif (rec.type == \"attributes\") cView.flags |= 4;\n\t\tif (rec.type == \"childList\") {\n\t\t\tlet childBefore = findChild(cView, rec.previousSibling || rec.target.previousSibling, -1);\n\t\t\tlet childAfter = findChild(cView, rec.nextSibling || rec.target.nextSibling, 1);\n\t\t\treturn {\n\t\t\t\tfrom: childBefore ? cView.posAfter(childBefore) : cView.posAtStart,\n\t\t\t\tto: childAfter ? cView.posBefore(childAfter) : cView.posAtEnd,\n\t\t\t\ttypeOver: false\n\t\t\t};\n\t\t} else if (rec.type == \"characterData\") return {\n\t\t\tfrom: cView.posAtStart,\n\t\t\tto: cView.posAtEnd,\n\t\t\ttypeOver: rec.target.nodeValue == rec.oldValue\n\t\t};\n\t\telse return null;\n\t}\n\tsetWindow(win) {\n\t\tif (win != this.win) {\n\t\t\tthis.removeWindowListeners(this.win);\n\t\t\tthis.win = win;\n\t\t\tthis.addWindowListeners(this.win);\n\t\t}\n\t}\n\taddWindowListeners(win) {\n\t\twin.addEventListener(\"resize\", this.onResize);\n\t\tif (this.printQuery) if (this.printQuery.addEventListener) this.printQuery.addEventListener(\"change\", this.onPrint);\n\t\telse this.printQuery.addListener(this.onPrint);\n\t\telse win.addEventListener(\"beforeprint\", this.onPrint);\n\t\twin.addEventListener(\"scroll\", this.onScroll);\n\t\twin.document.addEventListener(\"selectionchange\", this.onSelectionChange);\n\t}\n\tremoveWindowListeners(win) {\n\t\twin.removeEventListener(\"scroll\", this.onScroll);\n\t\twin.removeEventListener(\"resize\", this.onResize);\n\t\tif (this.printQuery) if (this.printQuery.removeEventListener) this.printQuery.removeEventListener(\"change\", this.onPrint);\n\t\telse this.printQuery.removeListener(this.onPrint);\n\t\telse win.removeEventListener(\"beforeprint\", this.onPrint);\n\t\twin.document.removeEventListener(\"selectionchange\", this.onSelectionChange);\n\t}\n\tupdate(update) {\n\t\tif (this.editContext) {\n\t\t\tthis.editContext.update(update);\n\t\t\tif (update.startState.facet(editable) != update.state.facet(editable)) update.view.contentDOM.editContext = update.state.facet(editable) ? this.editContext.editContext : null;\n\t\t}\n\t}\n\tdestroy() {\n\t\tvar _a, _b, _c;\n\t\tthis.stop();\n\t\t(_a = this.intersection) === null || _a === void 0 || _a.disconnect();\n\t\t(_b = this.gapIntersection) === null || _b === void 0 || _b.disconnect();\n\t\t(_c = this.resizeScroll) === null || _c === void 0 || _c.disconnect();\n\t\tfor (let dom of this.scrollTargets) dom.removeEventListener(\"scroll\", this.onScroll);\n\t\tthis.removeWindowListeners(this.win);\n\t\tclearTimeout(this.parentCheck);\n\t\tclearTimeout(this.resizeTimeout);\n\t\tthis.win.cancelAnimationFrame(this.delayedFlush);\n\t\tthis.win.cancelAnimationFrame(this.flushingAndroidKey);\n\t\tif (this.editContext) {\n\t\t\tthis.view.contentDOM.editContext = null;\n\t\t\tthis.editContext.destroy();\n\t\t}\n\t}\n};\nfunction findChild(cView, dom, dir) {\n\twhile (dom) {\n\t\tlet curView = ContentView.get(dom);\n\t\tif (curView && curView.parent == cView) return curView;\n\t\tlet parent = dom.parentNode;\n\t\tdom = parent != cView.dom ? parent : dir > 0 ? dom.nextSibling : dom.previousSibling;\n\t}\n\treturn null;\n}\nfunction buildSelectionRangeFromRange(view, range) {\n\tlet anchorNode = range.startContainer, anchorOffset = range.startOffset;\n\tlet focusNode = range.endContainer, focusOffset = range.endOffset;\n\tlet curAnchor = view.docView.domAtPos(view.state.selection.main.anchor);\n\tif (isEquivalentPosition(curAnchor.node, curAnchor.offset, focusNode, focusOffset)) [anchorNode, anchorOffset, focusNode, focusOffset] = [\n\t\tfocusNode,\n\t\tfocusOffset,\n\t\tanchorNode,\n\t\tanchorOffset\n\t];\n\treturn {\n\t\tanchorNode,\n\t\tanchorOffset,\n\t\tfocusNode,\n\t\tfocusOffset\n\t};\n}\nfunction safariSelectionRangeHack(view, selection) {\n\tif (selection.getComposedRanges) {\n\t\tlet range = selection.getComposedRanges(view.root)[0];\n\t\tif (range) return buildSelectionRangeFromRange(view, range);\n\t}\n\tlet found = null;\n\tfunction read(event) {\n\t\tevent.preventDefault();\n\t\tevent.stopImmediatePropagation();\n\t\tfound = event.getTargetRanges()[0];\n\t}\n\tview.contentDOM.addEventListener(\"beforeinput\", read, true);\n\tview.dom.ownerDocument.execCommand(\"indent\");\n\tview.contentDOM.removeEventListener(\"beforeinput\", read, true);\n\treturn found ? buildSelectionRangeFromRange(view, found) : null;\n}\nvar EditContextManager = class {\n\tconstructor(view) {\n\t\tthis.from = 0;\n\t\tthis.to = 0;\n\t\tthis.pendingContextChange = null;\n\t\tthis.handlers = Object.create(null);\n\t\tthis.composing = null;\n\t\tthis.resetRange(view.state);\n\t\tlet context = this.editContext = new window.EditContext({\n\t\t\ttext: view.state.doc.sliceString(this.from, this.to),\n\t\t\tselectionStart: this.toContextPos(Math.max(this.from, Math.min(this.to, view.state.selection.main.anchor))),\n\t\t\tselectionEnd: this.toContextPos(view.state.selection.main.head)\n\t\t});\n\t\tthis.handlers.textupdate = (e) => {\n\t\t\tlet main = view.state.selection.main, { anchor, head } = main;\n\t\t\tlet from = this.toEditorPos(e.updateRangeStart), to = this.toEditorPos(e.updateRangeEnd);\n\t\t\tif (view.inputState.composing >= 0 && !this.composing) this.composing = {\n\t\t\t\tcontextBase: e.updateRangeStart,\n\t\t\t\teditorBase: from,\n\t\t\t\tdrifted: false\n\t\t\t};\n\t\t\tlet change = {\n\t\t\t\tfrom,\n\t\t\t\tto,\n\t\t\t\tinsert: Text.of(e.text.split(\"\\n\"))\n\t\t\t};\n\t\t\tif (change.from == this.from && anchor < this.from) change.from = anchor;\n\t\t\telse if (change.to == this.to && anchor > this.to) change.to = anchor;\n\t\t\tif (change.from == change.to && !change.insert.length) {\n\t\t\t\tlet newSel = EditorSelection.single(this.toEditorPos(e.selectionStart), this.toEditorPos(e.selectionEnd));\n\t\t\t\tif (!newSel.main.eq(main)) view.dispatch({\n\t\t\t\t\tselection: newSel,\n\t\t\t\t\tuserEvent: \"select\"\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ((browser.mac || browser.android) && change.from == head - 1 && /^\\. ?$/.test(e.text) && view.contentDOM.getAttribute(\"autocorrect\") == \"off\") change = {\n\t\t\t\tfrom,\n\t\t\t\tto,\n\t\t\t\tinsert: Text.of([e.text.replace(\".\", \" \")])\n\t\t\t};\n\t\t\tthis.pendingContextChange = change;\n\t\t\tif (!view.state.readOnly) {\n\t\t\t\tlet newLen = this.to - this.from + (change.to - change.from + change.insert.length);\n\t\t\t\tapplyDOMChangeInner(view, change, EditorSelection.single(this.toEditorPos(e.selectionStart, newLen), this.toEditorPos(e.selectionEnd, newLen)));\n\t\t\t}\n\t\t\tif (this.pendingContextChange) {\n\t\t\t\tthis.revertPending(view.state);\n\t\t\t\tthis.setSelection(view.state);\n\t\t\t}\n\t\t};\n\t\tthis.handlers.characterboundsupdate = (e) => {\n\t\t\tlet rects = [], prev = null;\n\t\t\tfor (let i = this.toEditorPos(e.rangeStart), end = this.toEditorPos(e.rangeEnd); i < end; i++) {\n\t\t\t\tlet rect = view.coordsForChar(i);\n\t\t\t\tprev = rect && new DOMRect(rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top) || prev || new DOMRect();\n\t\t\t\trects.push(prev);\n\t\t\t}\n\t\t\tcontext.updateCharacterBounds(e.rangeStart, rects);\n\t\t};\n\t\tthis.handlers.textformatupdate = (e) => {\n\t\t\tlet deco = [];\n\t\t\tfor (let format of e.getTextFormats()) {\n\t\t\t\tlet lineStyle = format.underlineStyle, thickness = format.underlineThickness;\n\t\t\t\tif (lineStyle != \"None\" && thickness != \"None\") {\n\t\t\t\t\tlet from = this.toEditorPos(format.rangeStart), to = this.toEditorPos(format.rangeEnd);\n\t\t\t\t\tif (from < to) {\n\t\t\t\t\t\tlet style = `text-decoration: underline ${lineStyle == \"Dashed\" ? \"dashed \" : lineStyle == \"Squiggle\" ? \"wavy \" : \"\"}${thickness == \"Thin\" ? 1 : 2}px`;\n\t\t\t\t\t\tdeco.push(Decoration.mark({ attributes: { style } }).range(from, to));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tview.dispatch({ effects: setEditContextFormatting.of(Decoration.set(deco)) });\n\t\t};\n\t\tthis.handlers.compositionstart = () => {\n\t\t\tif (view.inputState.composing < 0) {\n\t\t\t\tview.inputState.composing = 0;\n\t\t\t\tview.inputState.compositionFirstChange = true;\n\t\t\t}\n\t\t};\n\t\tthis.handlers.compositionend = () => {\n\t\t\tview.inputState.composing = -1;\n\t\t\tview.inputState.compositionFirstChange = null;\n\t\t\tif (this.composing) {\n\t\t\t\tlet { drifted } = this.composing;\n\t\t\t\tthis.composing = null;\n\t\t\t\tif (drifted) this.reset(view.state);\n\t\t\t}\n\t\t};\n\t\tfor (let event in this.handlers) context.addEventListener(event, this.handlers[event]);\n\t\tthis.measureReq = { read: (view) => {\n\t\t\tthis.editContext.updateControlBounds(view.contentDOM.getBoundingClientRect());\n\t\t\tlet sel = getSelection(view.root);\n\t\t\tif (sel && sel.rangeCount) this.editContext.updateSelectionBounds(sel.getRangeAt(0).getBoundingClientRect());\n\t\t} };\n\t}\n\tapplyEdits(update) {\n\t\tlet off = 0, abort = false, pending = this.pendingContextChange;\n\t\tupdate.changes.iterChanges((fromA, toA, _fromB, _toB, insert) => {\n\t\t\tif (abort) return;\n\t\t\tlet dLen = insert.length - (toA - fromA);\n\t\t\tif (pending && toA >= pending.to) if (pending.from == fromA && pending.to == toA && pending.insert.eq(insert)) {\n\t\t\t\tpending = this.pendingContextChange = null;\n\t\t\t\toff += dLen;\n\t\t\t\tthis.to += dLen;\n\t\t\t\treturn;\n\t\t\t} else {\n\t\t\t\tpending = null;\n\t\t\t\tthis.revertPending(update.state);\n\t\t\t}\n\t\t\tfromA += off;\n\t\t\ttoA += off;\n\t\t\tif (toA <= this.from) {\n\t\t\t\tthis.from += dLen;\n\t\t\t\tthis.to += dLen;\n\t\t\t} else if (fromA < this.to) {\n\t\t\t\tif (fromA < this.from || toA > this.to || this.to - this.from + insert.length > 3e4) {\n\t\t\t\t\tabort = true;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis.editContext.updateText(this.toContextPos(fromA), this.toContextPos(toA), insert.toString());\n\t\t\t\tthis.to += dLen;\n\t\t\t}\n\t\t\toff += dLen;\n\t\t});\n\t\tif (pending && !abort) this.revertPending(update.state);\n\t\treturn !abort;\n\t}\n\tupdate(update) {\n\t\tlet reverted = this.pendingContextChange, startSel = update.startState.selection.main;\n\t\tif (this.composing && (this.composing.drifted || !update.changes.touchesRange(startSel.from, startSel.to) && update.transactions.some((tr) => !tr.isUserEvent(\"input.type\") && tr.changes.touchesRange(this.from, this.to)))) {\n\t\t\tthis.composing.drifted = true;\n\t\t\tthis.composing.editorBase = update.changes.mapPos(this.composing.editorBase);\n\t\t} else if (!this.applyEdits(update) || !this.rangeIsValid(update.state)) {\n\t\t\tthis.pendingContextChange = null;\n\t\t\tthis.reset(update.state);\n\t\t} else if (update.docChanged || update.selectionSet || reverted) this.setSelection(update.state);\n\t\tif (update.geometryChanged || update.docChanged || update.selectionSet) update.view.requestMeasure(this.measureReq);\n\t}\n\tresetRange(state) {\n\t\tlet { head } = state.selection.main;\n\t\tthis.from = Math.max(0, head - 1e4);\n\t\tthis.to = Math.min(state.doc.length, head + 1e4);\n\t}\n\treset(state) {\n\t\tthis.resetRange(state);\n\t\tthis.editContext.updateText(0, this.editContext.text.length, state.doc.sliceString(this.from, this.to));\n\t\tthis.setSelection(state);\n\t}\n\trevertPending(state) {\n\t\tlet pending = this.pendingContextChange;\n\t\tthis.pendingContextChange = null;\n\t\tthis.editContext.updateText(this.toContextPos(pending.from), this.toContextPos(pending.from + pending.insert.length), state.doc.sliceString(pending.from, pending.to));\n\t}\n\tsetSelection(state) {\n\t\tlet { main } = state.selection;\n\t\tlet start = this.toContextPos(Math.max(this.from, Math.min(this.to, main.anchor)));\n\t\tlet end = this.toContextPos(main.head);\n\t\tif (this.editContext.selectionStart != start || this.editContext.selectionEnd != end) this.editContext.updateSelection(start, end);\n\t}\n\trangeIsValid(state) {\n\t\tlet { head } = state.selection.main;\n\t\treturn !(this.from > 0 && head - this.from < 500 || this.to < state.doc.length && this.to - head < 500 || this.to - this.from > 1e4 * 3);\n\t}\n\ttoEditorPos(contextPos, clipLen = this.to - this.from) {\n\t\tcontextPos = Math.min(contextPos, clipLen);\n\t\tlet c = this.composing;\n\t\treturn c && c.drifted ? c.editorBase + (contextPos - c.contextBase) : contextPos + this.from;\n\t}\n\ttoContextPos(editorPos) {\n\t\tlet c = this.composing;\n\t\treturn c && c.drifted ? c.contextBase + (editorPos - c.editorBase) : editorPos - this.from;\n\t}\n\tdestroy() {\n\t\tfor (let event in this.handlers) this.editContext.removeEventListener(event, this.handlers[event]);\n\t}\n};\n/**\nAn editor view represents the editor's user interface. It holds\nthe editable DOM surface, and possibly other elements such as the\nline number gutter. It handles events and dispatches state\ntransactions for editing actions.\n*/\nvar EditorView = class EditorView {\n\t/**\n\tThe current editor state.\n\t*/\n\tget state() {\n\t\treturn this.viewState.state;\n\t}\n\t/**\n\tTo be able to display large documents without consuming too much\n\tmemory or overloading the browser, CodeMirror only draws the\n\tcode that is visible (plus a margin around it) to the DOM. This\n\tproperty tells you the extent of the current drawn viewport, in\n\tdocument positions.\n\t*/\n\tget viewport() {\n\t\treturn this.viewState.viewport;\n\t}\n\t/**\n\tWhen there are, for example, large collapsed ranges in the\n\tviewport, its size can be a lot bigger than the actual visible\n\tcontent. Thus, if you are doing something like styling the\n\tcontent in the viewport, it is preferable to only do so for\n\tthese ranges, which are the subset of the viewport that is\n\tactually drawn.\n\t*/\n\tget visibleRanges() {\n\t\treturn this.viewState.visibleRanges;\n\t}\n\t/**\n\tReturns false when the editor is entirely scrolled out of view\n\tor otherwise hidden.\n\t*/\n\tget inView() {\n\t\treturn this.viewState.inView;\n\t}\n\t/**\n\tIndicates whether the user is currently composing text via\n\t[IME](https://en.wikipedia.org/wiki/Input_method), and at least\n\tone change has been made in the current composition.\n\t*/\n\tget composing() {\n\t\treturn !!this.inputState && this.inputState.composing > 0;\n\t}\n\t/**\n\tIndicates whether the user is currently in composing state. Note\n\tthat on some platforms, like Android, this will be the case a\n\tlot, since just putting the cursor on a word starts a\n\tcomposition there.\n\t*/\n\tget compositionStarted() {\n\t\treturn !!this.inputState && this.inputState.composing >= 0;\n\t}\n\t/**\n\tThe document or shadow root that the view lives in.\n\t*/\n\tget root() {\n\t\treturn this._root;\n\t}\n\t/**\n\t@internal\n\t*/\n\tget win() {\n\t\treturn this.dom.ownerDocument.defaultView || window;\n\t}\n\t/**\n\tConstruct a new view. You'll want to either provide a `parent`\n\toption, or put `view.dom` into your document after creating a\n\tview, so that the user can see the editor.\n\t*/\n\tconstructor(config = {}) {\n\t\tvar _a;\n\t\tthis.plugins = [];\n\t\tthis.pluginMap = /* @__PURE__ */ new Map();\n\t\tthis.editorAttrs = {};\n\t\tthis.contentAttrs = {};\n\t\tthis.bidiCache = [];\n\t\tthis.destroyed = false;\n\t\t/**\n\t\t@internal\n\t\t*/\n\t\tthis.updateState = 2;\n\t\t/**\n\t\t@internal\n\t\t*/\n\t\tthis.measureScheduled = -1;\n\t\t/**\n\t\t@internal\n\t\t*/\n\t\tthis.measureRequests = [];\n\t\tthis.contentDOM = document.createElement(\"div\");\n\t\tthis.scrollDOM = document.createElement(\"div\");\n\t\tthis.scrollDOM.tabIndex = -1;\n\t\tthis.scrollDOM.className = \"cm-scroller\";\n\t\tthis.scrollDOM.appendChild(this.contentDOM);\n\t\tthis.announceDOM = document.createElement(\"div\");\n\t\tthis.announceDOM.className = \"cm-announced\";\n\t\tthis.announceDOM.setAttribute(\"aria-live\", \"polite\");\n\t\tthis.dom = document.createElement(\"div\");\n\t\tthis.dom.appendChild(this.announceDOM);\n\t\tthis.dom.appendChild(this.scrollDOM);\n\t\tif (config.parent) config.parent.appendChild(this.dom);\n\t\tlet { dispatch } = config;\n\t\tthis.dispatchTransactions = config.dispatchTransactions || dispatch && ((trs) => trs.forEach((tr) => dispatch(tr, this))) || ((trs) => this.update(trs));\n\t\tthis.dispatch = this.dispatch.bind(this);\n\t\tthis._root = config.root || getRoot(config.parent) || document;\n\t\tthis.viewState = new ViewState(config.state || EditorState.create(config));\n\t\tif (config.scrollTo && config.scrollTo.is(scrollIntoView$1)) this.viewState.scrollTarget = config.scrollTo.value.clip(this.viewState.state);\n\t\tthis.plugins = this.state.facet(viewPlugin).map((spec) => new PluginInstance(spec));\n\t\tfor (let plugin of this.plugins) plugin.update(this);\n\t\tthis.observer = new DOMObserver(this);\n\t\tthis.inputState = new InputState(this);\n\t\tthis.inputState.ensureHandlers(this.plugins);\n\t\tthis.docView = new DocView(this);\n\t\tthis.mountStyles();\n\t\tthis.updateAttrs();\n\t\tthis.updateState = 0;\n\t\tthis.requestMeasure();\n\t\tif ((_a = document.fonts) === null || _a === void 0 ? void 0 : _a.ready) document.fonts.ready.then(() => this.requestMeasure());\n\t}\n\tdispatch(...input) {\n\t\tlet trs = input.length == 1 && input[0] instanceof Transaction ? input : input.length == 1 && Array.isArray(input[0]) ? input[0] : [this.state.update(...input)];\n\t\tthis.dispatchTransactions(trs, this);\n\t}\n\t/**\n\tUpdate the view for the given array of transactions. This will\n\tupdate the visible document and selection to match the state\n\tproduced by the transactions, and notify view plugins of the\n\tchange. You should usually call\n\t[`dispatch`](https://codemirror.net/6/docs/ref/#view.EditorView.dispatch) instead, which uses this\n\tas a primitive.\n\t*/\n\tupdate(transactions) {\n\t\tif (this.updateState != 0) throw new Error(\"Calls to EditorView.update are not allowed while an update is in progress\");\n\t\tlet redrawn = false, attrsChanged = false, update;\n\t\tlet state = this.state;\n\t\tfor (let tr of transactions) {\n\t\t\tif (tr.startState != state) throw new RangeError(\"Trying to update state with a transaction that doesn't start from the previous state.\");\n\t\t\tstate = tr.state;\n\t\t}\n\t\tif (this.destroyed) {\n\t\t\tthis.viewState.state = state;\n\t\t\treturn;\n\t\t}\n\t\tlet focus = this.hasFocus, focusFlag = 0, dispatchFocus = null;\n\t\tif (transactions.some((tr) => tr.annotation(isFocusChange))) {\n\t\t\tthis.inputState.notifiedFocused = focus;\n\t\t\tfocusFlag = 1;\n\t\t} else if (focus != this.inputState.notifiedFocused) {\n\t\t\tthis.inputState.notifiedFocused = focus;\n\t\t\tdispatchFocus = focusChangeTransaction(state, focus);\n\t\t\tif (!dispatchFocus) focusFlag = 1;\n\t\t}\n\t\tlet pendingKey = this.observer.delayedAndroidKey, domChange = null;\n\t\tif (pendingKey) {\n\t\t\tthis.observer.clearDelayedAndroidKey();\n\t\t\tdomChange = this.observer.readChange();\n\t\t\tif (domChange && !this.state.doc.eq(state.doc) || !this.state.selection.eq(state.selection)) domChange = null;\n\t\t} else this.observer.clear();\n\t\tif (state.facet(EditorState.phrases) != this.state.facet(EditorState.phrases)) return this.setState(state);\n\t\tupdate = ViewUpdate.create(this, state, transactions);\n\t\tupdate.flags |= focusFlag;\n\t\tlet scrollTarget = this.viewState.scrollTarget;\n\t\ttry {\n\t\t\tthis.updateState = 2;\n\t\t\tfor (let tr of transactions) {\n\t\t\t\tif (scrollTarget) scrollTarget = scrollTarget.map(tr.changes);\n\t\t\t\tif (tr.scrollIntoView) {\n\t\t\t\t\tlet { main } = tr.state.selection;\n\t\t\t\t\tscrollTarget = new ScrollTarget(main.empty ? main : EditorSelection.cursor(main.head, main.head > main.anchor ? -1 : 1));\n\t\t\t\t}\n\t\t\t\tfor (let e of tr.effects) if (e.is(scrollIntoView$1)) scrollTarget = e.value.clip(this.state);\n\t\t\t}\n\t\t\tthis.viewState.update(update, scrollTarget);\n\t\t\tthis.bidiCache = CachedOrder.update(this.bidiCache, update.changes);\n\t\t\tif (!update.empty) {\n\t\t\t\tthis.updatePlugins(update);\n\t\t\t\tthis.inputState.update(update);\n\t\t\t}\n\t\t\tredrawn = this.docView.update(update);\n\t\t\tif (this.state.facet(styleModule) != this.styleModules) this.mountStyles();\n\t\t\tattrsChanged = this.updateAttrs();\n\t\t\tthis.showAnnouncements(transactions);\n\t\t\tthis.docView.updateSelection(redrawn, transactions.some((tr) => tr.isUserEvent(\"select.pointer\")));\n\t\t} finally {\n\t\t\tthis.updateState = 0;\n\t\t}\n\t\tif (update.startState.facet(theme) != update.state.facet(theme)) this.viewState.mustMeasureContent = true;\n\t\tif (redrawn || attrsChanged || scrollTarget || this.viewState.mustEnforceCursorAssoc || this.viewState.mustMeasureContent) this.requestMeasure();\n\t\tif (redrawn) this.docViewUpdate();\n\t\tif (!update.empty) for (let listener of this.state.facet(updateListener)) try {\n\t\t\tlistener(update);\n\t\t} catch (e) {\n\t\t\tlogException(this.state, e, \"update listener\");\n\t\t}\n\t\tif (dispatchFocus || domChange) Promise.resolve().then(() => {\n\t\t\tif (dispatchFocus && this.state == dispatchFocus.startState) this.dispatch(dispatchFocus);\n\t\t\tif (domChange) {\n\t\t\t\tif (!applyDOMChange(this, domChange) && pendingKey.force) dispatchKey(this.contentDOM, pendingKey.key, pendingKey.keyCode);\n\t\t\t}\n\t\t});\n\t}\n\t/**\n\tReset the view to the given state. (This will cause the entire\n\tdocument to be redrawn and all view plugins to be reinitialized,\n\tso you should probably only use it when the new state isn't\n\tderived from the old state. Otherwise, use\n\t[`dispatch`](https://codemirror.net/6/docs/ref/#view.EditorView.dispatch) instead.)\n\t*/\n\tsetState(newState) {\n\t\tif (this.updateState != 0) throw new Error(\"Calls to EditorView.setState are not allowed while an update is in progress\");\n\t\tif (this.destroyed) {\n\t\t\tthis.viewState.state = newState;\n\t\t\treturn;\n\t\t}\n\t\tthis.updateState = 2;\n\t\tlet hadFocus = this.hasFocus;\n\t\ttry {\n\t\t\tfor (let plugin of this.plugins) plugin.destroy(this);\n\t\t\tthis.viewState = new ViewState(newState);\n\t\t\tthis.plugins = newState.facet(viewPlugin).map((spec) => new PluginInstance(spec));\n\t\t\tthis.pluginMap.clear();\n\t\t\tfor (let plugin of this.plugins) plugin.update(this);\n\t\t\tthis.docView.destroy();\n\t\t\tthis.docView = new DocView(this);\n\t\t\tthis.inputState.ensureHandlers(this.plugins);\n\t\t\tthis.mountStyles();\n\t\t\tthis.updateAttrs();\n\t\t\tthis.bidiCache = [];\n\t\t} finally {\n\t\t\tthis.updateState = 0;\n\t\t}\n\t\tif (hadFocus) this.focus();\n\t\tthis.requestMeasure();\n\t}\n\tupdatePlugins(update) {\n\t\tlet prevSpecs = update.startState.facet(viewPlugin), specs = update.state.facet(viewPlugin);\n\t\tif (prevSpecs != specs) {\n\t\t\tlet newPlugins = [];\n\t\t\tfor (let spec of specs) {\n\t\t\t\tlet found = prevSpecs.indexOf(spec);\n\t\t\t\tif (found < 0) newPlugins.push(new PluginInstance(spec));\n\t\t\t\telse {\n\t\t\t\t\tlet plugin = this.plugins[found];\n\t\t\t\t\tplugin.mustUpdate = update;\n\t\t\t\t\tnewPlugins.push(plugin);\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (let plugin of this.plugins) if (plugin.mustUpdate != update) plugin.destroy(this);\n\t\t\tthis.plugins = newPlugins;\n\t\t\tthis.pluginMap.clear();\n\t\t} else for (let p of this.plugins) p.mustUpdate = update;\n\t\tfor (let i = 0; i < this.plugins.length; i++) this.plugins[i].update(this);\n\t\tif (prevSpecs != specs) this.inputState.ensureHandlers(this.plugins);\n\t}\n\tdocViewUpdate() {\n\t\tfor (let plugin of this.plugins) {\n\t\t\tlet val = plugin.value;\n\t\t\tif (val && val.docViewUpdate) try {\n\t\t\t\tval.docViewUpdate(this);\n\t\t\t} catch (e) {\n\t\t\t\tlogException(this.state, e, \"doc view update listener\");\n\t\t\t}\n\t\t}\n\t}\n\t/**\n\t@internal\n\t*/\n\tmeasure(flush = true) {\n\t\tif (this.destroyed) return;\n\t\tif (this.measureScheduled > -1) this.win.cancelAnimationFrame(this.measureScheduled);\n\t\tif (this.observer.delayedAndroidKey) {\n\t\t\tthis.measureScheduled = -1;\n\t\t\tthis.requestMeasure();\n\t\t\treturn;\n\t\t}\n\t\tthis.measureScheduled = 0;\n\t\tif (flush) this.observer.forceFlush();\n\t\tlet updated = null;\n\t\tlet sDOM = this.scrollDOM, scrollTop = sDOM.scrollTop * this.scaleY;\n\t\tlet { scrollAnchorPos, scrollAnchorHeight } = this.viewState;\n\t\tif (Math.abs(scrollTop - this.viewState.scrollTop) > 1) scrollAnchorHeight = -1;\n\t\tthis.viewState.scrollAnchorHeight = -1;\n\t\ttry {\n\t\t\tfor (let i = 0;; i++) {\n\t\t\t\tif (scrollAnchorHeight < 0) if (isScrolledToBottom(sDOM)) {\n\t\t\t\t\tscrollAnchorPos = -1;\n\t\t\t\t\tscrollAnchorHeight = this.viewState.heightMap.height;\n\t\t\t\t} else {\n\t\t\t\t\tlet block = this.viewState.scrollAnchorAt(scrollTop);\n\t\t\t\t\tscrollAnchorPos = block.from;\n\t\t\t\t\tscrollAnchorHeight = block.top;\n\t\t\t\t}\n\t\t\t\tthis.updateState = 1;\n\t\t\t\tlet changed = this.viewState.measure(this);\n\t\t\t\tif (!changed && !this.measureRequests.length && this.viewState.scrollTarget == null) break;\n\t\t\t\tif (i > 5) {\n\t\t\t\t\tconsole.warn(this.measureRequests.length ? \"Measure loop restarted more than 5 times\" : \"Viewport failed to stabilize\");\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tlet measuring = [];\n\t\t\t\tif (!(changed & 4)) [this.measureRequests, measuring] = [measuring, this.measureRequests];\n\t\t\t\tlet measured = measuring.map((m) => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\treturn m.read(this);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tlogException(this.state, e);\n\t\t\t\t\t\treturn BadMeasure;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tlet update = ViewUpdate.create(this, this.state, []), redrawn = false;\n\t\t\t\tupdate.flags |= changed;\n\t\t\t\tif (!updated) updated = update;\n\t\t\t\telse updated.flags |= changed;\n\t\t\t\tthis.updateState = 2;\n\t\t\t\tif (!update.empty) {\n\t\t\t\t\tthis.updatePlugins(update);\n\t\t\t\t\tthis.inputState.update(update);\n\t\t\t\t\tthis.updateAttrs();\n\t\t\t\t\tredrawn = this.docView.update(update);\n\t\t\t\t\tif (redrawn) this.docViewUpdate();\n\t\t\t\t}\n\t\t\t\tfor (let i = 0; i < measuring.length; i++) if (measured[i] != BadMeasure) try {\n\t\t\t\t\tlet m = measuring[i];\n\t\t\t\t\tif (m.write) m.write(measured[i], this);\n\t\t\t\t} catch (e) {\n\t\t\t\t\tlogException(this.state, e);\n\t\t\t\t}\n\t\t\t\tif (redrawn) this.docView.updateSelection(true);\n\t\t\t\tif (!update.viewportChanged && this.measureRequests.length == 0) {\n\t\t\t\t\tif (this.viewState.editorHeight) if (this.viewState.scrollTarget) {\n\t\t\t\t\t\tthis.docView.scrollIntoView(this.viewState.scrollTarget);\n\t\t\t\t\t\tthis.viewState.scrollTarget = null;\n\t\t\t\t\t\tscrollAnchorHeight = -1;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlet diff = (scrollAnchorPos < 0 ? this.viewState.heightMap.height : this.viewState.lineBlockAt(scrollAnchorPos).top) - scrollAnchorHeight;\n\t\t\t\t\t\tif (diff > 1 || diff < -1) {\n\t\t\t\t\t\t\tscrollTop = scrollTop + diff;\n\t\t\t\t\t\t\tsDOM.scrollTop = scrollTop / this.scaleY;\n\t\t\t\t\t\t\tscrollAnchorHeight = -1;\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} finally {\n\t\t\tthis.updateState = 0;\n\t\t\tthis.measureScheduled = -1;\n\t\t}\n\t\tif (updated && !updated.empty) for (let listener of this.state.facet(updateListener)) listener(updated);\n\t}\n\t/**\n\tGet the CSS classes for the currently active editor themes.\n\t*/\n\tget themeClasses() {\n\t\treturn baseThemeID + \" \" + (this.state.facet(darkTheme) ? baseDarkID : baseLightID) + \" \" + this.state.facet(theme);\n\t}\n\tupdateAttrs() {\n\t\tlet editorAttrs = attrsFromFacet(this, editorAttributes, { class: \"cm-editor\" + (this.hasFocus ? \" cm-focused \" : \" \") + this.themeClasses });\n\t\tlet contentAttrs = {\n\t\t\tspellcheck: \"false\",\n\t\t\tautocorrect: \"off\",\n\t\t\tautocapitalize: \"off\",\n\t\t\twritingsuggestions: \"false\",\n\t\t\ttranslate: \"no\",\n\t\t\tcontenteditable: !this.state.facet(editable) ? \"false\" : \"true\",\n\t\t\tclass: \"cm-content\",\n\t\t\tstyle: `${browser.tabSize}: ${this.state.tabSize}`,\n\t\t\trole: \"textbox\",\n\t\t\t\"aria-multiline\": \"true\"\n\t\t};\n\t\tif (this.state.readOnly) contentAttrs[\"aria-readonly\"] = \"true\";\n\t\tattrsFromFacet(this, contentAttributes, contentAttrs);\n\t\tlet changed = this.observer.ignore(() => {\n\t\t\tlet changedContent = updateAttrs(this.contentDOM, this.contentAttrs, contentAttrs);\n\t\t\tlet changedEditor = updateAttrs(this.dom, this.editorAttrs, editorAttrs);\n\t\t\treturn changedContent || changedEditor;\n\t\t});\n\t\tthis.editorAttrs = editorAttrs;\n\t\tthis.contentAttrs = contentAttrs;\n\t\treturn changed;\n\t}\n\tshowAnnouncements(trs) {\n\t\tlet first = true;\n\t\tfor (let tr of trs) for (let effect of tr.effects) if (effect.is(EditorView.announce)) {\n\t\t\tif (first) this.announceDOM.textContent = \"\";\n\t\t\tfirst = false;\n\t\t\tlet div = this.announceDOM.appendChild(document.createElement(\"div\"));\n\t\t\tdiv.textContent = effect.value;\n\t\t}\n\t}\n\tmountStyles() {\n\t\tthis.styleModules = this.state.facet(styleModule);\n\t\tlet nonce = this.state.facet(EditorView.cspNonce);\n\t\tStyleModule.mount(this.root, this.styleModules.concat(baseTheme$1$5).reverse(), nonce ? { nonce } : void 0);\n\t}\n\treadMeasured() {\n\t\tif (this.updateState == 2) throw new Error(\"Reading the editor layout isn't allowed during an update\");\n\t\tif (this.updateState == 0 && this.measureScheduled > -1) this.measure(false);\n\t}\n\t/**\n\tSchedule a layout measurement, optionally providing callbacks to\n\tdo custom DOM measuring followed by a DOM write phase. Using\n\tthis is preferable reading DOM layout directly from, for\n\texample, an event handler, because it'll make sure measuring and\n\tdrawing done by other components is synchronized, avoiding\n\tunnecessary DOM layout computations.\n\t*/\n\trequestMeasure(request) {\n\t\tif (this.measureScheduled < 0) this.measureScheduled = this.win.requestAnimationFrame(() => this.measure());\n\t\tif (request) {\n\t\t\tif (this.measureRequests.indexOf(request) > -1) return;\n\t\t\tif (request.key != null) {\n\t\t\t\tfor (let i = 0; i < this.measureRequests.length; i++) if (this.measureRequests[i].key === request.key) {\n\t\t\t\t\tthis.measureRequests[i] = request;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.measureRequests.push(request);\n\t\t}\n\t}\n\t/**\n\tGet the value of a specific plugin, if present. Note that\n\tplugins that crash can be dropped from a view, so even when you\n\tknow you registered a given plugin, it is recommended to check\n\tthe return value of this method.\n\t*/\n\tplugin(plugin) {\n\t\tlet known = this.pluginMap.get(plugin);\n\t\tif (known === void 0 || known && known.spec != plugin) this.pluginMap.set(plugin, known = this.plugins.find((p) => p.spec == plugin) || null);\n\t\treturn known && known.update(this).value;\n\t}\n\t/**\n\tThe top position of the document, in screen coordinates. This\n\tmay be negative when the editor is scrolled down. Points\n\tdirectly to the top of the first line, not above the padding.\n\t*/\n\tget documentTop() {\n\t\treturn this.contentDOM.getBoundingClientRect().top + this.viewState.paddingTop;\n\t}\n\t/**\n\tReports the padding above and below the document.\n\t*/\n\tget documentPadding() {\n\t\treturn {\n\t\t\ttop: this.viewState.paddingTop,\n\t\t\tbottom: this.viewState.paddingBottom\n\t\t};\n\t}\n\t/**\n\tIf the editor is transformed with CSS, this provides the scale\n\talong the X axis. Otherwise, it will just be 1. Note that\n\ttransforms other than translation and scaling are not supported.\n\t*/\n\tget scaleX() {\n\t\treturn this.viewState.scaleX;\n\t}\n\t/**\n\tProvide the CSS transformed scale along the Y axis.\n\t*/\n\tget scaleY() {\n\t\treturn this.viewState.scaleY;\n\t}\n\t/**\n\tFind the text line or block widget at the given vertical\n\tposition (which is interpreted as relative to the [top of the\n\tdocument](https://codemirror.net/6/docs/ref/#view.EditorView.documentTop)).\n\t*/\n\telementAtHeight(height) {\n\t\tthis.readMeasured();\n\t\treturn this.viewState.elementAtHeight(height);\n\t}\n\t/**\n\tFind the line block (see\n\t[`lineBlockAt`](https://codemirror.net/6/docs/ref/#view.EditorView.lineBlockAt) at the given\n\theight, again interpreted relative to the [top of the\n\tdocument](https://codemirror.net/6/docs/ref/#view.EditorView.documentTop).\n\t*/\n\tlineBlockAtHeight(height) {\n\t\tthis.readMeasured();\n\t\treturn this.viewState.lineBlockAtHeight(height);\n\t}\n\t/**\n\tGet the extent and vertical position of all [line\n\tblocks](https://codemirror.net/6/docs/ref/#view.EditorView.lineBlockAt) in the viewport. Positions\n\tare relative to the [top of the\n\tdocument](https://codemirror.net/6/docs/ref/#view.EditorView.documentTop);\n\t*/\n\tget viewportLineBlocks() {\n\t\treturn this.viewState.viewportLines;\n\t}\n\t/**\n\tFind the line block around the given document position. A line\n\tblock is a range delimited on both sides by either a\n\tnon-[hidden](https://codemirror.net/6/docs/ref/#view.Decoration^replace) line break, or the\n\tstart/end of the document. It will usually just hold a line of\n\ttext, but may be broken into multiple textblocks by block\n\twidgets.\n\t*/\n\tlineBlockAt(pos) {\n\t\treturn this.viewState.lineBlockAt(pos);\n\t}\n\t/**\n\tThe editor's total content height.\n\t*/\n\tget contentHeight() {\n\t\treturn this.viewState.contentHeight;\n\t}\n\t/**\n\tMove a cursor position by [grapheme\n\tcluster](https://codemirror.net/6/docs/ref/#state.findClusterBreak). `forward` determines whether\n\tthe motion is away from the line start, or towards it. In\n\tbidirectional text, the line is traversed in visual order, using\n\tthe editor's [text direction](https://codemirror.net/6/docs/ref/#view.EditorView.textDirection).\n\tWhen the start position was the last one on the line, the\n\treturned position will be across the line break. If there is no\n\tfurther line, the original position is returned.\n\t\n\tBy default, this method moves over a single cluster. The\n\toptional `by` argument can be used to move across more. It will\n\tbe called with the first cluster as argument, and should return\n\ta predicate that determines, for each subsequent cluster,\n\twhether it should also be moved over.\n\t*/\n\tmoveByChar(start, forward, by) {\n\t\treturn skipAtoms(this, start, moveByChar(this, start, forward, by));\n\t}\n\t/**\n\tMove a cursor position across the next group of either\n\t[letters](https://codemirror.net/6/docs/ref/#state.EditorState.charCategorizer) or non-letter\n\tnon-whitespace characters.\n\t*/\n\tmoveByGroup(start, forward) {\n\t\treturn skipAtoms(this, start, moveByChar(this, start, forward, (initial) => byGroup(this, start.head, initial)));\n\t}\n\t/**\n\tGet the cursor position visually at the start or end of a line.\n\tNote that this may differ from the _logical_ position at its\n\tstart or end (which is simply at `line.from`/`line.to`) if text\n\tat the start or end goes against the line's base text direction.\n\t*/\n\tvisualLineSide(line, end) {\n\t\tlet order = this.bidiSpans(line), dir = this.textDirectionAt(line.from);\n\t\tlet span = order[end ? order.length - 1 : 0];\n\t\treturn EditorSelection.cursor(span.side(end, dir) + line.from, span.forward(!end, dir) ? 1 : -1);\n\t}\n\t/**\n\tMove to the next line boundary in the given direction. If\n\t`includeWrap` is true, line wrapping is on, and there is a\n\tfurther wrap point on the current line, the wrap point will be\n\treturned. Otherwise this function will return the start or end\n\tof the line.\n\t*/\n\tmoveToLineBoundary(start, forward, includeWrap = true) {\n\t\treturn moveToLineBoundary(this, start, forward, includeWrap);\n\t}\n\t/**\n\tMove a cursor position vertically. When `distance` isn't given,\n\tit defaults to moving to the next line (including wrapped\n\tlines). Otherwise, `distance` should provide a positive distance\n\tin pixels.\n\t\n\tWhen `start` has a\n\t[`goalColumn`](https://codemirror.net/6/docs/ref/#state.SelectionRange.goalColumn), the vertical\n\tmotion will use that as a target horizontal position. Otherwise,\n\tthe cursor's own horizontal position is used. The returned\n\tcursor will have its goal column set to whichever column was\n\tused.\n\t*/\n\tmoveVertically(start, forward, distance) {\n\t\treturn skipAtoms(this, start, moveVertically(this, start, forward, distance));\n\t}\n\t/**\n\tFind the DOM parent node and offset (child offset if `node` is\n\tan element, character offset when it is a text node) at the\n\tgiven document position.\n\t\n\tNote that for positions that aren't currently in\n\t`visibleRanges`, the resulting DOM position isn't necessarily\n\tmeaningful (it may just point before or after a placeholder\n\telement).\n\t*/\n\tdomAtPos(pos) {\n\t\treturn this.docView.domAtPos(pos);\n\t}\n\t/**\n\tFind the document position at the given DOM node. Can be useful\n\tfor associating positions with DOM events. Will raise an error\n\twhen `node` isn't part of the editor content.\n\t*/\n\tposAtDOM(node, offset = 0) {\n\t\treturn this.docView.posFromDOM(node, offset);\n\t}\n\tposAtCoords(coords, precise = true) {\n\t\tthis.readMeasured();\n\t\treturn posAtCoords(this, coords, precise);\n\t}\n\t/**\n\tGet the screen coordinates at the given document position.\n\t`side` determines whether the coordinates are based on the\n\telement before (-1) or after (1) the position (if no element is\n\tavailable on the given side, the method will transparently use\n\tanother strategy to get reasonable coordinates).\n\t*/\n\tcoordsAtPos(pos, side = 1) {\n\t\tthis.readMeasured();\n\t\tlet rect = this.docView.coordsAt(pos, side);\n\t\tif (!rect || rect.left == rect.right) return rect;\n\t\tlet line = this.state.doc.lineAt(pos), order = this.bidiSpans(line);\n\t\tlet span = order[BidiSpan.find(order, pos - line.from, -1, side)];\n\t\treturn flattenRect(rect, span.dir == Direction.LTR == side > 0);\n\t}\n\t/**\n\tReturn the rectangle around a given character. If `pos` does not\n\tpoint in front of a character that is in the viewport and\n\trendered (i.e. not replaced, not a line break), this will return\n\tnull. For space characters that are a line wrap point, this will\n\treturn the position before the line break.\n\t*/\n\tcoordsForChar(pos) {\n\t\tthis.readMeasured();\n\t\treturn this.docView.coordsForChar(pos);\n\t}\n\t/**\n\tThe default width of a character in the editor. May not\n\taccurately reflect the width of all characters (given variable\n\twidth fonts or styling of invididual ranges).\n\t*/\n\tget defaultCharacterWidth() {\n\t\treturn this.viewState.heightOracle.charWidth;\n\t}\n\t/**\n\tThe default height of a line in the editor. May not be accurate\n\tfor all lines.\n\t*/\n\tget defaultLineHeight() {\n\t\treturn this.viewState.heightOracle.lineHeight;\n\t}\n\t/**\n\tThe text direction\n\t([`direction`](https://developer.mozilla.org/en-US/docs/Web/CSS/direction)\n\tCSS property) of the editor's content element.\n\t*/\n\tget textDirection() {\n\t\treturn this.viewState.defaultTextDirection;\n\t}\n\t/**\n\tFind the text direction of the block at the given position, as\n\tassigned by CSS. If\n\t[`perLineTextDirection`](https://codemirror.net/6/docs/ref/#view.EditorView^perLineTextDirection)\n\tisn't enabled, or the given position is outside of the viewport,\n\tthis will always return the same as\n\t[`textDirection`](https://codemirror.net/6/docs/ref/#view.EditorView.textDirection). Note that\n\tthis may trigger a DOM layout.\n\t*/\n\ttextDirectionAt(pos) {\n\t\tif (!this.state.facet(perLineTextDirection) || pos < this.viewport.from || pos > this.viewport.to) return this.textDirection;\n\t\tthis.readMeasured();\n\t\treturn this.docView.textDirectionAt(pos);\n\t}\n\t/**\n\tWhether this editor [wraps lines](https://codemirror.net/6/docs/ref/#view.EditorView.lineWrapping)\n\t(as determined by the\n\t[`white-space`](https://developer.mozilla.org/en-US/docs/Web/CSS/white-space)\n\tCSS property of its content element).\n\t*/\n\tget lineWrapping() {\n\t\treturn this.viewState.heightOracle.lineWrapping;\n\t}\n\t/**\n\tReturns the bidirectional text structure of the given line\n\t(which should be in the current document) as an array of span\n\tobjects. The order of these spans matches the [text\n\tdirection](https://codemirror.net/6/docs/ref/#view.EditorView.textDirection)—if that is\n\tleft-to-right, the leftmost spans come first, otherwise the\n\trightmost spans come first.\n\t*/\n\tbidiSpans(line) {\n\t\tif (line.length > MaxBidiLine) return trivialOrder(line.length);\n\t\tlet dir = this.textDirectionAt(line.from), isolates;\n\t\tfor (let entry of this.bidiCache) if (entry.from == line.from && entry.dir == dir && (entry.fresh || isolatesEq(entry.isolates, isolates = getIsolatedRanges(this, line)))) return entry.order;\n\t\tif (!isolates) isolates = getIsolatedRanges(this, line);\n\t\tlet order = computeOrder(line.text, dir, isolates);\n\t\tthis.bidiCache.push(new CachedOrder(line.from, line.to, dir, isolates, true, order));\n\t\treturn order;\n\t}\n\t/**\n\tCheck whether the editor has focus.\n\t*/\n\tget hasFocus() {\n\t\tvar _a;\n\t\treturn (this.dom.ownerDocument.hasFocus() || browser.safari && ((_a = this.inputState) === null || _a === void 0 ? void 0 : _a.lastContextMenu) > Date.now() - 3e4) && this.root.activeElement == this.contentDOM;\n\t}\n\t/**\n\tPut focus on the editor.\n\t*/\n\tfocus() {\n\t\tthis.observer.ignore(() => {\n\t\t\tfocusPreventScroll(this.contentDOM);\n\t\t\tthis.docView.updateSelection();\n\t\t});\n\t}\n\t/**\n\tUpdate the [root](https://codemirror.net/6/docs/ref/##view.EditorViewConfig.root) in which the editor lives. This is only\n\tnecessary when moving the editor's existing DOM to a new window or shadow root.\n\t*/\n\tsetRoot(root) {\n\t\tif (this._root != root) {\n\t\t\tthis._root = root;\n\t\t\tthis.observer.setWindow((root.nodeType == 9 ? root : root.ownerDocument).defaultView || window);\n\t\t\tthis.mountStyles();\n\t\t}\n\t}\n\t/**\n\tClean up this editor view, removing its element from the\n\tdocument, unregistering event handlers, and notifying\n\tplugins. The view instance can no longer be used after\n\tcalling this.\n\t*/\n\tdestroy() {\n\t\tif (this.root.activeElement == this.contentDOM) this.contentDOM.blur();\n\t\tfor (let plugin of this.plugins) plugin.destroy(this);\n\t\tthis.plugins = [];\n\t\tthis.inputState.destroy();\n\t\tthis.docView.destroy();\n\t\tthis.dom.remove();\n\t\tthis.observer.destroy();\n\t\tif (this.measureScheduled > -1) this.win.cancelAnimationFrame(this.measureScheduled);\n\t\tthis.destroyed = true;\n\t}\n\t/**\n\tReturns an effect that can be\n\t[added](https://codemirror.net/6/docs/ref/#state.TransactionSpec.effects) to a transaction to\n\tcause it to scroll the given position or range into view.\n\t*/\n\tstatic scrollIntoView(pos, options = {}) {\n\t\treturn scrollIntoView$1.of(new ScrollTarget(typeof pos == \"number\" ? EditorSelection.cursor(pos) : pos, options.y, options.x, options.yMargin, options.xMargin));\n\t}\n\t/**\n\tReturn an effect that resets the editor to its current (at the\n\ttime this method was called) scroll position. Note that this\n\tonly affects the editor's own scrollable element, not parents.\n\tSee also\n\t[`EditorViewConfig.scrollTo`](https://codemirror.net/6/docs/ref/#view.EditorViewConfig.scrollTo).\n\t\n\tThe effect should be used with a document identical to the one\n\tit was created for. Failing to do so is not an error, but may\n\tnot scroll to the expected position. You can\n\t[map](https://codemirror.net/6/docs/ref/#state.StateEffect.map) the effect to account for changes.\n\t*/\n\tscrollSnapshot() {\n\t\tlet { scrollTop, scrollLeft } = this.scrollDOM;\n\t\tlet ref = this.viewState.scrollAnchorAt(scrollTop);\n\t\treturn scrollIntoView$1.of(new ScrollTarget(EditorSelection.cursor(ref.from), \"start\", \"start\", ref.top - scrollTop, scrollLeft, true));\n\t}\n\t/**\n\tEnable or disable tab-focus mode, which disables key bindings\n\tfor Tab and Shift-Tab, letting the browser's default\n\tfocus-changing behavior go through instead. This is useful to\n\tprevent trapping keyboard users in your editor.\n\t\n\tWithout argument, this toggles the mode. With a boolean, it\n\tenables (true) or disables it (false). Given a number, it\n\ttemporarily enables the mode until that number of milliseconds\n\thave passed or another non-Tab key is pressed.\n\t*/\n\tsetTabFocusMode(to) {\n\t\tif (to == null) this.inputState.tabFocusMode = this.inputState.tabFocusMode < 0 ? 0 : -1;\n\t\telse if (typeof to == \"boolean\") this.inputState.tabFocusMode = to ? 0 : -1;\n\t\telse if (this.inputState.tabFocusMode != 0) this.inputState.tabFocusMode = Date.now() + to;\n\t}\n\t/**\n\tReturns an extension that can be used to add DOM event handlers.\n\tThe value should be an object mapping event names to handler\n\tfunctions. For any given event, such functions are ordered by\n\textension precedence, and the first handler to return true will\n\tbe assumed to have handled that event, and no other handlers or\n\tbuilt-in behavior will be activated for it. These are registered\n\ton the [content element](https://codemirror.net/6/docs/ref/#view.EditorView.contentDOM), except\n\tfor `scroll` handlers, which will be called any time the\n\teditor's [scroll element](https://codemirror.net/6/docs/ref/#view.EditorView.scrollDOM) or one of\n\tits parent nodes is scrolled.\n\t*/\n\tstatic domEventHandlers(handlers) {\n\t\treturn ViewPlugin.define(() => ({}), { eventHandlers: handlers });\n\t}\n\t/**\n\tCreate an extension that registers DOM event observers. Contrary\n\tto event [handlers](https://codemirror.net/6/docs/ref/#view.EditorView^domEventHandlers),\n\tobservers can't be prevented from running by a higher-precedence\n\thandler returning true. They also don't prevent other handlers\n\tand observers from running when they return true, and should not\n\tcall `preventDefault`.\n\t*/\n\tstatic domEventObservers(observers) {\n\t\treturn ViewPlugin.define(() => ({}), { eventObservers: observers });\n\t}\n\t/**\n\tCreate a theme extension. The first argument can be a\n\t[`style-mod`](https://github.com/marijnh/style-mod#documentation)\n\tstyle spec providing the styles for the theme. These will be\n\tprefixed with a generated class for the style.\n\t\n\tBecause the selectors will be prefixed with a scope class, rule\n\tthat directly match the editor's [wrapper\n\telement](https://codemirror.net/6/docs/ref/#view.EditorView.dom)—to which the scope class will be\n\tadded—need to be explicitly differentiated by adding an `&` to\n\tthe selector for that element—for example\n\t`&.cm-focused`.\n\t\n\tWhen `dark` is set to true, the theme will be marked as dark,\n\twhich will cause the `&dark` rules from [base\n\tthemes](https://codemirror.net/6/docs/ref/#view.EditorView^baseTheme) to be used (as opposed to\n\t`&light` when a light theme is active).\n\t*/\n\tstatic theme(spec, options) {\n\t\tlet prefix = StyleModule.newName();\n\t\tlet result = [theme.of(prefix), styleModule.of(buildTheme(`.${prefix}`, spec))];\n\t\tif (options && options.dark) result.push(darkTheme.of(true));\n\t\treturn result;\n\t}\n\t/**\n\tCreate an extension that adds styles to the base theme. Like\n\twith [`theme`](https://codemirror.net/6/docs/ref/#view.EditorView^theme), use `&` to indicate the\n\tplace of the editor wrapper element when directly targeting\n\tthat. You can also use `&dark` or `&light` instead to only\n\ttarget editors with a dark or light theme.\n\t*/\n\tstatic baseTheme(spec) {\n\t\treturn Prec.lowest(styleModule.of(buildTheme(\".\" + baseThemeID, spec, lightDarkIDs)));\n\t}\n\t/**\n\tRetrieve an editor view instance from the view's DOM\n\trepresentation.\n\t*/\n\tstatic findFromDOM(dom) {\n\t\tvar _a;\n\t\tlet content = dom.querySelector(\".cm-content\");\n\t\tlet cView = content && ContentView.get(content) || ContentView.get(dom);\n\t\treturn ((_a = cView === null || cView === void 0 ? void 0 : cView.rootView) === null || _a === void 0 ? void 0 : _a.view) || null;\n\t}\n};\n/**\nFacet to add a [style\nmodule](https://github.com/marijnh/style-mod#documentation) to\nan editor view. The view will ensure that the module is\nmounted in its [document\nroot](https://codemirror.net/6/docs/ref/#view.EditorView.constructor^config.root).\n*/\nEditorView.styleModule = styleModule;\n/**\nAn input handler can override the way changes to the editable\nDOM content are handled. Handlers are passed the document\npositions between which the change was found, and the new\ncontent. When one returns true, no further input handlers are\ncalled and the default behavior is prevented.\n\nThe `insert` argument can be used to get the default transaction\nthat would be applied for this input. This can be useful when\ndispatching the custom behavior as a separate transaction.\n*/\nEditorView.inputHandler = inputHandler$1;\n/**\nFunctions provided in this facet will be used to transform text\npasted or dropped into the editor.\n*/\nEditorView.clipboardInputFilter = clipboardInputFilter;\n/**\nTransform text copied or dragged from the editor.\n*/\nEditorView.clipboardOutputFilter = clipboardOutputFilter;\n/**\nScroll handlers can override how things are scrolled into view.\nIf they return `true`, no further handling happens for the\nscrolling. If they return false, the default scroll behavior is\napplied. Scroll handlers should never initiate editor updates.\n*/\nEditorView.scrollHandler = scrollHandler;\n/**\nThis facet can be used to provide functions that create effects\nto be dispatched when the editor's focus state changes.\n*/\nEditorView.focusChangeEffect = focusChangeEffect;\n/**\nBy default, the editor assumes all its content has the same\n[text direction](https://codemirror.net/6/docs/ref/#view.Direction). Configure this with a `true`\nvalue to make it read the text direction of every (rendered)\nline separately.\n*/\nEditorView.perLineTextDirection = perLineTextDirection;\n/**\nAllows you to provide a function that should be called when the\nlibrary catches an exception from an extension (mostly from view\nplugins, but may be used by other extensions to route exceptions\nfrom user-code-provided callbacks). This is mostly useful for\ndebugging and logging. See [`logException`](https://codemirror.net/6/docs/ref/#view.logException).\n*/\nEditorView.exceptionSink = exceptionSink;\n/**\nA facet that can be used to register a function to be called\nevery time the view updates.\n*/\nEditorView.updateListener = updateListener;\n/**\nFacet that controls whether the editor content DOM is editable.\nWhen its highest-precedence value is `false`, the element will\nnot have its `contenteditable` attribute set. (Note that this\ndoesn't affect API calls that change the editor content, even\nwhen those are bound to keys or buttons. See the\n[`readOnly`](https://codemirror.net/6/docs/ref/#state.EditorState.readOnly) facet for that.)\n*/\nEditorView.editable = editable;\n/**\nAllows you to influence the way mouse selection happens. The\nfunctions in this facet will be called for a `mousedown` event\non the editor, and can return an object that overrides the way a\nselection is computed from that mouse click or drag.\n*/\nEditorView.mouseSelectionStyle = mouseSelectionStyle;\n/**\nFacet used to configure whether a given selection drag event\nshould move or copy the selection. The given predicate will be\ncalled with the `mousedown` event, and can return `true` when\nthe drag should move the content.\n*/\nEditorView.dragMovesSelection = dragMovesSelection$1;\n/**\nFacet used to configure whether a given selecting click adds a\nnew range to the existing selection or replaces it entirely. The\ndefault behavior is to check `event.metaKey` on macOS, and\n`event.ctrlKey` elsewhere.\n*/\nEditorView.clickAddsSelectionRange = clickAddsSelectionRange;\n/**\nA facet that determines which [decorations](https://codemirror.net/6/docs/ref/#view.Decoration)\nare shown in the view. Decorations can be provided in two\nways—directly, or via a function that takes an editor view.\n\nOnly decoration sets provided directly are allowed to influence\nthe editor's vertical layout structure. The ones provided as\nfunctions are called _after_ the new viewport has been computed,\nand thus **must not** introduce block widgets or replacing\ndecorations that cover line breaks.\n\nIf you want decorated ranges to behave like atomic units for\ncursor motion and deletion purposes, also provide the range set\ncontaining the decorations to\n[`EditorView.atomicRanges`](https://codemirror.net/6/docs/ref/#view.EditorView^atomicRanges).\n*/\nEditorView.decorations = decorations;\n/**\nFacet that works much like\n[`decorations`](https://codemirror.net/6/docs/ref/#view.EditorView^decorations), but puts its\ninputs at the very bottom of the precedence stack, meaning mark\ndecorations provided here will only be split by other, partially\noverlapping \\`outerDecorations\\` ranges, and wrap around all\nregular decorations. Use this for mark elements that should, as\nmuch as possible, remain in one piece.\n*/\nEditorView.outerDecorations = outerDecorations;\n/**\nUsed to provide ranges that should be treated as atoms as far as\ncursor motion is concerned. This causes methods like\n[`moveByChar`](https://codemirror.net/6/docs/ref/#view.EditorView.moveByChar) and\n[`moveVertically`](https://codemirror.net/6/docs/ref/#view.EditorView.moveVertically) (and the\ncommands built on top of them) to skip across such regions when\na selection endpoint would enter them. This does _not_ prevent\ndirect programmatic [selection\nupdates](https://codemirror.net/6/docs/ref/#state.TransactionSpec.selection) from moving into such\nregions.\n*/\nEditorView.atomicRanges = atomicRanges;\n/**\nWhen range decorations add a `unicode-bidi: isolate` style, they\nshould also include a\n[`bidiIsolate`](https://codemirror.net/6/docs/ref/#view.MarkDecorationSpec.bidiIsolate) property\nin their decoration spec, and be exposed through this facet, so\nthat the editor can compute the proper text order. (Other values\nfor `unicode-bidi`, except of course `normal`, are not\nsupported.)\n*/\nEditorView.bidiIsolatedRanges = bidiIsolatedRanges;\n/**\nFacet that allows extensions to provide additional scroll\nmargins (space around the sides of the scrolling element that\nshould be considered invisible). This can be useful when the\nplugin introduces elements that cover part of that element (for\nexample a horizontally fixed gutter).\n*/\nEditorView.scrollMargins = scrollMargins;\n/**\nThis facet records whether a dark theme is active. The extension\nreturned by [`theme`](https://codemirror.net/6/docs/ref/#view.EditorView^theme) automatically\nincludes an instance of this when the `dark` option is set to\ntrue.\n*/\nEditorView.darkTheme = darkTheme;\n/**\nProvides a Content Security Policy nonce to use when creating\nthe style sheets for the editor. Holds the empty string when no\nnonce has been provided.\n*/\nEditorView.cspNonce = /* @__PURE__ */ Facet.define({ combine: (values) => values.length ? values[0] : \"\" });\n/**\nFacet that provides additional DOM attributes for the editor's\neditable DOM element.\n*/\nEditorView.contentAttributes = contentAttributes;\n/**\nFacet that provides DOM attributes for the editor's outer\nelement.\n*/\nEditorView.editorAttributes = editorAttributes;\n/**\nAn extension that enables line wrapping in the editor (by\nsetting CSS `white-space` to `pre-wrap` in the content).\n*/\nEditorView.lineWrapping = /* @__PURE__ */ EditorView.contentAttributes.of({ \"class\": \"cm-lineWrapping\" });\n/**\nState effect used to include screen reader announcements in a\ntransaction. These will be added to the DOM in a visually hidden\nelement with `aria-live=\"polite\"` set, and should be used to\ndescribe effects that are visually obvious but may not be\nnoticed by screen reader users (such as moving to the next\nsearch match).\n*/\nEditorView.announce = /* @__PURE__ */ StateEffect.define();\nconst MaxBidiLine = 4096;\nconst BadMeasure = {};\nvar CachedOrder = class CachedOrder {\n\tconstructor(from, to, dir, isolates, fresh, order) {\n\t\tthis.from = from;\n\t\tthis.to = to;\n\t\tthis.dir = dir;\n\t\tthis.isolates = isolates;\n\t\tthis.fresh = fresh;\n\t\tthis.order = order;\n\t}\n\tstatic update(cache, changes) {\n\t\tif (changes.empty && !cache.some((c) => c.fresh)) return cache;\n\t\tlet result = [], lastDir = cache.length ? cache[cache.length - 1].dir : Direction.LTR;\n\t\tfor (let i = Math.max(0, cache.length - 10); i < cache.length; i++) {\n\t\t\tlet entry = cache[i];\n\t\t\tif (entry.dir == lastDir && !changes.touchesRange(entry.from, entry.to)) result.push(new CachedOrder(changes.mapPos(entry.from, 1), changes.mapPos(entry.to, -1), entry.dir, entry.isolates, false, entry.order));\n\t\t}\n\t\treturn result;\n\t}\n};\nfunction attrsFromFacet(view, facet, base) {\n\tfor (let sources = view.state.facet(facet), i = sources.length - 1; i >= 0; i--) {\n\t\tlet source = sources[i], value = typeof source == \"function\" ? source(view) : source;\n\t\tif (value) combineAttrs(value, base);\n\t}\n\treturn base;\n}\nconst currentPlatform = browser.mac ? \"mac\" : browser.windows ? \"win\" : browser.linux ? \"linux\" : \"key\";\nfunction normalizeKeyName(name, platform) {\n\tconst parts = name.split(/-(?!$)/);\n\tlet result = parts[parts.length - 1];\n\tif (result == \"Space\") result = \" \";\n\tlet alt, ctrl, shift, meta;\n\tfor (let i = 0; i < parts.length - 1; ++i) {\n\t\tconst mod = parts[i];\n\t\tif (/^(cmd|meta|m)$/i.test(mod)) meta = true;\n\t\telse if (/^a(lt)?$/i.test(mod)) alt = true;\n\t\telse if (/^(c|ctrl|control)$/i.test(mod)) ctrl = true;\n\t\telse if (/^s(hift)?$/i.test(mod)) shift = true;\n\t\telse if (/^mod$/i.test(mod)) if (platform == \"mac\") meta = true;\n\t\telse ctrl = true;\n\t\telse throw new Error(\"Unrecognized modifier name: \" + mod);\n\t}\n\tif (alt) result = \"Alt-\" + result;\n\tif (ctrl) result = \"Ctrl-\" + result;\n\tif (meta) result = \"Meta-\" + result;\n\tif (shift) result = \"Shift-\" + result;\n\treturn result;\n}\nfunction modifiers(name, event, shift) {\n\tif (event.altKey) name = \"Alt-\" + name;\n\tif (event.ctrlKey) name = \"Ctrl-\" + name;\n\tif (event.metaKey) name = \"Meta-\" + name;\n\tif (shift !== false && event.shiftKey) name = \"Shift-\" + name;\n\treturn name;\n}\nconst handleKeyEvents = /* @__PURE__ */ Prec.default(/* @__PURE__ */ EditorView.domEventHandlers({ keydown(event, view) {\n\treturn runHandlers(getKeymap(view.state), event, view, \"editor\");\n} }));\n/**\nFacet used for registering keymaps.\n\nYou can add multiple keymaps to an editor. Their priorities\ndetermine their precedence (the ones specified early or with high\npriority get checked first). When a handler has returned `true`\nfor a given key, no further handlers are called.\n*/\nconst keymap = /* @__PURE__ */ Facet.define({ enables: handleKeyEvents });\nconst Keymaps = /* @__PURE__ */ new WeakMap();\nfunction getKeymap(state) {\n\tlet bindings = state.facet(keymap);\n\tlet map = Keymaps.get(bindings);\n\tif (!map) Keymaps.set(bindings, map = buildKeymap(bindings.reduce((a, b) => a.concat(b), [])));\n\treturn map;\n}\n/**\nRun the key handlers registered for a given scope. The event\nobject should be a `\"keydown\"` event. Returns true if any of the\nhandlers handled it.\n*/\nfunction runScopeHandlers(view, event, scope) {\n\treturn runHandlers(getKeymap(view.state), event, view, scope);\n}\nlet storedPrefix = null;\nconst PrefixTimeout = 4e3;\nfunction buildKeymap(bindings, platform = currentPlatform) {\n\tlet bound = Object.create(null);\n\tlet isPrefix = Object.create(null);\n\tlet checkPrefix = (name, is) => {\n\t\tlet current = isPrefix[name];\n\t\tif (current == null) isPrefix[name] = is;\n\t\telse if (current != is) throw new Error(\"Key binding \" + name + \" is used both as a regular binding and as a multi-stroke prefix\");\n\t};\n\tlet add = (scope, key, command, preventDefault, stopPropagation) => {\n\t\tvar _a, _b;\n\t\tlet scopeObj = bound[scope] || (bound[scope] = Object.create(null));\n\t\tlet parts = key.split(/ (?!$)/).map((k) => normalizeKeyName(k, platform));\n\t\tfor (let i = 1; i < parts.length; i++) {\n\t\t\tlet prefix = parts.slice(0, i).join(\" \");\n\t\t\tcheckPrefix(prefix, true);\n\t\t\tif (!scopeObj[prefix]) scopeObj[prefix] = {\n\t\t\t\tpreventDefault: true,\n\t\t\t\tstopPropagation: false,\n\t\t\t\trun: [(view) => {\n\t\t\t\t\tlet ourObj = storedPrefix = {\n\t\t\t\t\t\tview,\n\t\t\t\t\t\tprefix,\n\t\t\t\t\t\tscope\n\t\t\t\t\t};\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tif (storedPrefix == ourObj) storedPrefix = null;\n\t\t\t\t\t}, PrefixTimeout);\n\t\t\t\t\treturn true;\n\t\t\t\t}]\n\t\t\t};\n\t\t}\n\t\tlet full = parts.join(\" \");\n\t\tcheckPrefix(full, false);\n\t\tlet binding = scopeObj[full] || (scopeObj[full] = {\n\t\t\tpreventDefault: false,\n\t\t\tstopPropagation: false,\n\t\t\trun: ((_b = (_a = scopeObj._any) === null || _a === void 0 ? void 0 : _a.run) === null || _b === void 0 ? void 0 : _b.slice()) || []\n\t\t});\n\t\tif (command) binding.run.push(command);\n\t\tif (preventDefault) binding.preventDefault = true;\n\t\tif (stopPropagation) binding.stopPropagation = true;\n\t};\n\tfor (let b of bindings) {\n\t\tlet scopes = b.scope ? b.scope.split(\" \") : [\"editor\"];\n\t\tif (b.any) for (let scope of scopes) {\n\t\t\tlet scopeObj = bound[scope] || (bound[scope] = Object.create(null));\n\t\t\tif (!scopeObj._any) scopeObj._any = {\n\t\t\t\tpreventDefault: false,\n\t\t\t\tstopPropagation: false,\n\t\t\t\trun: []\n\t\t\t};\n\t\t\tlet { any } = b;\n\t\t\tfor (let key in scopeObj) scopeObj[key].run.push((view) => any(view, currentKeyEvent));\n\t\t}\n\t\tlet name = b[platform] || b.key;\n\t\tif (!name) continue;\n\t\tfor (let scope of scopes) {\n\t\t\tadd(scope, name, b.run, b.preventDefault, b.stopPropagation);\n\t\t\tif (b.shift) add(scope, \"Shift-\" + name, b.shift, b.preventDefault, b.stopPropagation);\n\t\t}\n\t}\n\treturn bound;\n}\nlet currentKeyEvent = null;\nfunction runHandlers(map, event, view, scope) {\n\tcurrentKeyEvent = event;\n\tlet name = keyName(event);\n\tlet isChar = codePointSize(codePointAt(name, 0)) == name.length && name != \" \";\n\tlet prefix = \"\", handled = false, prevented = false, stopPropagation = false;\n\tif (storedPrefix && storedPrefix.view == view && storedPrefix.scope == scope) {\n\t\tprefix = storedPrefix.prefix + \" \";\n\t\tif (modifierCodes.indexOf(event.keyCode) < 0) {\n\t\t\tprevented = true;\n\t\t\tstoredPrefix = null;\n\t\t}\n\t}\n\tlet ran = /* @__PURE__ */ new Set();\n\tlet runFor = (binding) => {\n\t\tif (binding) {\n\t\t\tfor (let cmd of binding.run) if (!ran.has(cmd)) {\n\t\t\t\tran.add(cmd);\n\t\t\t\tif (cmd(view)) {\n\t\t\t\t\tif (binding.stopPropagation) stopPropagation = true;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (binding.preventDefault) {\n\t\t\t\tif (binding.stopPropagation) stopPropagation = true;\n\t\t\t\tprevented = true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t};\n\tlet scopeObj = map[scope], baseName, shiftName;\n\tif (scopeObj) {\n\t\tif (runFor(scopeObj[prefix + modifiers(name, event, !isChar)])) handled = true;\n\t\telse if (isChar && (event.altKey || event.metaKey || event.ctrlKey) && !(browser.windows && event.ctrlKey && event.altKey) && (baseName = base[event.keyCode]) && baseName != name) {\n\t\t\tif (runFor(scopeObj[prefix + modifiers(baseName, event, true)])) handled = true;\n\t\t\telse if (event.shiftKey && (shiftName = shift[event.keyCode]) != name && shiftName != baseName && runFor(scopeObj[prefix + modifiers(shiftName, event, false)])) handled = true;\n\t\t} else if (isChar && event.shiftKey && runFor(scopeObj[prefix + modifiers(name, event, true)])) handled = true;\n\t\tif (!handled && runFor(scopeObj._any)) handled = true;\n\t}\n\tif (prevented) handled = true;\n\tif (handled && stopPropagation) event.stopPropagation();\n\tcurrentKeyEvent = null;\n\treturn handled;\n}\n/**\nImplementation of [`LayerMarker`](https://codemirror.net/6/docs/ref/#view.LayerMarker) that creates\na rectangle at a given set of coordinates.\n*/\nvar RectangleMarker = class RectangleMarker {\n\t/**\n\tCreate a marker with the given class and dimensions. If `width`\n\tis null, the DOM element will get no width style.\n\t*/\n\tconstructor(className, left, top, width, height) {\n\t\tthis.className = className;\n\t\tthis.left = left;\n\t\tthis.top = top;\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t}\n\tdraw() {\n\t\tlet elt = document.createElement(\"div\");\n\t\telt.className = this.className;\n\t\tthis.adjust(elt);\n\t\treturn elt;\n\t}\n\tupdate(elt, prev) {\n\t\tif (prev.className != this.className) return false;\n\t\tthis.adjust(elt);\n\t\treturn true;\n\t}\n\tadjust(elt) {\n\t\telt.style.left = this.left + \"px\";\n\t\telt.style.top = this.top + \"px\";\n\t\tif (this.width != null) elt.style.width = this.width + \"px\";\n\t\telt.style.height = this.height + \"px\";\n\t}\n\teq(p) {\n\t\treturn this.left == p.left && this.top == p.top && this.width == p.width && this.height == p.height && this.className == p.className;\n\t}\n\t/**\n\tCreate a set of rectangles for the given selection range,\n\tassigning them theclass`className`. Will create a single\n\trectangle for empty ranges, and a set of selection-style\n\trectangles covering the range's content (in a bidi-aware\n\tway) for non-empty ones.\n\t*/\n\tstatic forRange(view, className, range) {\n\t\tif (range.empty) {\n\t\t\tlet pos = view.coordsAtPos(range.head, range.assoc || 1);\n\t\t\tif (!pos) return [];\n\t\t\tlet base = getBase(view);\n\t\t\treturn [new RectangleMarker(className, pos.left - base.left, pos.top - base.top, null, pos.bottom - pos.top)];\n\t\t} else return rectanglesForRange(view, className, range);\n\t}\n};\nfunction getBase(view) {\n\tlet rect = view.scrollDOM.getBoundingClientRect();\n\treturn {\n\t\tleft: (view.textDirection == Direction.LTR ? rect.left : rect.right - view.scrollDOM.clientWidth * view.scaleX) - view.scrollDOM.scrollLeft * view.scaleX,\n\t\ttop: rect.top - view.scrollDOM.scrollTop * view.scaleY\n\t};\n}\nfunction wrappedLine(view, pos, side, inside) {\n\tlet coords = view.coordsAtPos(pos, side * 2);\n\tif (!coords) return inside;\n\tlet editorRect = view.dom.getBoundingClientRect();\n\tlet y = (coords.top + coords.bottom) / 2;\n\tlet left = view.posAtCoords({\n\t\tx: editorRect.left + 1,\n\t\ty\n\t});\n\tlet right = view.posAtCoords({\n\t\tx: editorRect.right - 1,\n\t\ty\n\t});\n\tif (left == null || right == null) return inside;\n\treturn {\n\t\tfrom: Math.max(inside.from, Math.min(left, right)),\n\t\tto: Math.min(inside.to, Math.max(left, right))\n\t};\n}\nfunction rectanglesForRange(view, className, range) {\n\tif (range.to <= view.viewport.from || range.from >= view.viewport.to) return [];\n\tlet from = Math.max(range.from, view.viewport.from), to = Math.min(range.to, view.viewport.to);\n\tlet ltr = view.textDirection == Direction.LTR;\n\tlet content = view.contentDOM, contentRect = content.getBoundingClientRect(), base = getBase(view);\n\tlet lineElt = content.querySelector(\".cm-line\"), lineStyle = lineElt && window.getComputedStyle(lineElt);\n\tlet leftSide = contentRect.left + (lineStyle ? parseInt(lineStyle.paddingLeft) + Math.min(0, parseInt(lineStyle.textIndent)) : 0);\n\tlet rightSide = contentRect.right - (lineStyle ? parseInt(lineStyle.paddingRight) : 0);\n\tlet startBlock = blockAt(view, from, 1), endBlock = blockAt(view, to, -1);\n\tlet visualStart = startBlock.type == BlockType.Text ? startBlock : null;\n\tlet visualEnd = endBlock.type == BlockType.Text ? endBlock : null;\n\tif (visualStart && (view.lineWrapping || startBlock.widgetLineBreaks)) visualStart = wrappedLine(view, from, 1, visualStart);\n\tif (visualEnd && (view.lineWrapping || endBlock.widgetLineBreaks)) visualEnd = wrappedLine(view, to, -1, visualEnd);\n\tif (visualStart && visualEnd && visualStart.from == visualEnd.from && visualStart.to == visualEnd.to) return pieces(drawForLine(range.from, range.to, visualStart));\n\telse {\n\t\tlet top = visualStart ? drawForLine(range.from, null, visualStart) : drawForWidget(startBlock, false);\n\t\tlet bottom = visualEnd ? drawForLine(null, range.to, visualEnd) : drawForWidget(endBlock, true);\n\t\tlet between = [];\n\t\tif ((visualStart || startBlock).to < (visualEnd || endBlock).from - (visualStart && visualEnd ? 1 : 0) || startBlock.widgetLineBreaks > 1 && top.bottom + view.defaultLineHeight / 2 < bottom.top) between.push(piece(leftSide, top.bottom, rightSide, bottom.top));\n\t\telse if (top.bottom < bottom.top && view.elementAtHeight((top.bottom + bottom.top) / 2).type == BlockType.Text) top.bottom = bottom.top = (top.bottom + bottom.top) / 2;\n\t\treturn pieces(top).concat(between).concat(pieces(bottom));\n\t}\n\tfunction piece(left, top, right, bottom) {\n\t\treturn new RectangleMarker(className, left - base.left, top - base.top, right - left, bottom - top);\n\t}\n\tfunction pieces({ top, bottom, horizontal }) {\n\t\tlet pieces = [];\n\t\tfor (let i = 0; i < horizontal.length; i += 2) pieces.push(piece(horizontal[i], top, horizontal[i + 1], bottom));\n\t\treturn pieces;\n\t}\n\tfunction drawForLine(from, to, line) {\n\t\tlet top = 1e9, bottom = -1e9, horizontal = [];\n\t\tfunction addSpan(from, fromOpen, to, toOpen, dir) {\n\t\t\tlet fromCoords = view.coordsAtPos(from, from == line.to ? -2 : 2);\n\t\t\tlet toCoords = view.coordsAtPos(to, to == line.from ? 2 : -2);\n\t\t\tif (!fromCoords || !toCoords) return;\n\t\t\ttop = Math.min(fromCoords.top, toCoords.top, top);\n\t\t\tbottom = Math.max(fromCoords.bottom, toCoords.bottom, bottom);\n\t\t\tif (dir == Direction.LTR) horizontal.push(ltr && fromOpen ? leftSide : fromCoords.left, ltr && toOpen ? rightSide : toCoords.right);\n\t\t\telse horizontal.push(!ltr && toOpen ? leftSide : toCoords.left, !ltr && fromOpen ? rightSide : fromCoords.right);\n\t\t}\n\t\tlet start = from !== null && from !== void 0 ? from : line.from, end = to !== null && to !== void 0 ? to : line.to;\n\t\tfor (let r of view.visibleRanges) if (r.to > start && r.from < end) for (let pos = Math.max(r.from, start), endPos = Math.min(r.to, end);;) {\n\t\t\tlet docLine = view.state.doc.lineAt(pos);\n\t\t\tfor (let span of view.bidiSpans(docLine)) {\n\t\t\t\tlet spanFrom = span.from + docLine.from, spanTo = span.to + docLine.from;\n\t\t\t\tif (spanFrom >= endPos) break;\n\t\t\t\tif (spanTo > pos) addSpan(Math.max(spanFrom, pos), from == null && spanFrom <= start, Math.min(spanTo, endPos), to == null && spanTo >= end, span.dir);\n\t\t\t}\n\t\t\tpos = docLine.to + 1;\n\t\t\tif (pos >= endPos) break;\n\t\t}\n\t\tif (horizontal.length == 0) addSpan(start, from == null, end, to == null, view.textDirection);\n\t\treturn {\n\t\t\ttop,\n\t\t\tbottom,\n\t\t\thorizontal\n\t\t};\n\t}\n\tfunction drawForWidget(block, top) {\n\t\tlet y = contentRect.top + (top ? block.top : block.bottom);\n\t\treturn {\n\t\t\ttop: y,\n\t\t\tbottom: y,\n\t\t\thorizontal: []\n\t\t};\n\t}\n}\nfunction sameMarker(a, b) {\n\treturn a.constructor == b.constructor && a.eq(b);\n}\nvar LayerView = class {\n\tconstructor(view, layer) {\n\t\tthis.view = view;\n\t\tthis.layer = layer;\n\t\tthis.drawn = [];\n\t\tthis.scaleX = 1;\n\t\tthis.scaleY = 1;\n\t\tthis.measureReq = {\n\t\t\tread: this.measure.bind(this),\n\t\t\twrite: this.draw.bind(this)\n\t\t};\n\t\tthis.dom = view.scrollDOM.appendChild(document.createElement(\"div\"));\n\t\tthis.dom.classList.add(\"cm-layer\");\n\t\tif (layer.above) this.dom.classList.add(\"cm-layer-above\");\n\t\tif (layer.class) this.dom.classList.add(layer.class);\n\t\tthis.scale();\n\t\tthis.dom.setAttribute(\"aria-hidden\", \"true\");\n\t\tthis.setOrder(view.state);\n\t\tview.requestMeasure(this.measureReq);\n\t\tif (layer.mount) layer.mount(this.dom, view);\n\t}\n\tupdate(update) {\n\t\tif (update.startState.facet(layerOrder) != update.state.facet(layerOrder)) this.setOrder(update.state);\n\t\tif (this.layer.update(update, this.dom) || update.geometryChanged) {\n\t\t\tthis.scale();\n\t\t\tupdate.view.requestMeasure(this.measureReq);\n\t\t}\n\t}\n\tdocViewUpdate(view) {\n\t\tif (this.layer.updateOnDocViewUpdate !== false) view.requestMeasure(this.measureReq);\n\t}\n\tsetOrder(state) {\n\t\tlet pos = 0, order = state.facet(layerOrder);\n\t\twhile (pos < order.length && order[pos] != this.layer) pos++;\n\t\tthis.dom.style.zIndex = String((this.layer.above ? 150 : -1) - pos);\n\t}\n\tmeasure() {\n\t\treturn this.layer.markers(this.view);\n\t}\n\tscale() {\n\t\tlet { scaleX, scaleY } = this.view;\n\t\tif (scaleX != this.scaleX || scaleY != this.scaleY) {\n\t\t\tthis.scaleX = scaleX;\n\t\t\tthis.scaleY = scaleY;\n\t\t\tthis.dom.style.transform = `scale(${1 / scaleX}, ${1 / scaleY})`;\n\t\t}\n\t}\n\tdraw(markers) {\n\t\tif (markers.length != this.drawn.length || markers.some((p, i) => !sameMarker(p, this.drawn[i]))) {\n\t\t\tlet old = this.dom.firstChild, oldI = 0;\n\t\t\tfor (let marker of markers) if (marker.update && old && marker.constructor && this.drawn[oldI].constructor && marker.update(old, this.drawn[oldI])) {\n\t\t\t\told = old.nextSibling;\n\t\t\t\toldI++;\n\t\t\t} else this.dom.insertBefore(marker.draw(), old);\n\t\t\twhile (old) {\n\t\t\t\tlet next = old.nextSibling;\n\t\t\t\told.remove();\n\t\t\t\told = next;\n\t\t\t}\n\t\t\tthis.drawn = markers;\n\t\t}\n\t}\n\tdestroy() {\n\t\tif (this.layer.destroy) this.layer.destroy(this.dom, this.view);\n\t\tthis.dom.remove();\n\t}\n};\nconst layerOrder = /* @__PURE__ */ Facet.define();\n/**\nDefine a layer.\n*/\nfunction layer(config) {\n\treturn [ViewPlugin.define((v) => new LayerView(v, config)), layerOrder.of(config)];\n}\nconst selectionConfig = /* @__PURE__ */ Facet.define({ combine(configs) {\n\treturn combineConfig(configs, {\n\t\tcursorBlinkRate: 1200,\n\t\tdrawRangeCursor: true\n\t}, {\n\t\tcursorBlinkRate: (a, b) => Math.min(a, b),\n\t\tdrawRangeCursor: (a, b) => a || b\n\t});\n} });\n/**\nReturns an extension that hides the browser's native selection and\ncursor, replacing the selection with a background behind the text\n(with the `cm-selectionBackground` class), and the\ncursors with elements overlaid over the code (using\n`cm-cursor-primary` and `cm-cursor-secondary`).\n\nThis allows the editor to display secondary selection ranges, and\ntends to produce a type of selection more in line with that users\nexpect in a text editor (the native selection styling will often\nleave gaps between lines and won't fill the horizontal space after\na line when the selection continues past it).\n\nIt does have a performance cost, in that it requires an extra DOM\nlayout cycle for many updates (the selection is drawn based on DOM\nlayout information that's only available after laying out the\ncontent).\n*/\nfunction drawSelection(config = {}) {\n\treturn [\n\t\tselectionConfig.of(config),\n\t\tcursorLayer,\n\t\tselectionLayer,\n\t\thideNativeSelection,\n\t\tnativeSelectionHidden.of(true)\n\t];\n}\nfunction configChanged(update) {\n\treturn update.startState.facet(selectionConfig) != update.state.facet(selectionConfig);\n}\nconst cursorLayer = /* @__PURE__ */ layer({\n\tabove: true,\n\tmarkers(view) {\n\t\tlet { state } = view, conf = state.facet(selectionConfig);\n\t\tlet cursors = [];\n\t\tfor (let r of state.selection.ranges) {\n\t\t\tlet prim = r == state.selection.main;\n\t\t\tif (r.empty || conf.drawRangeCursor) {\n\t\t\t\tlet className = prim ? \"cm-cursor cm-cursor-primary\" : \"cm-cursor cm-cursor-secondary\";\n\t\t\t\tlet cursor = r.empty ? r : EditorSelection.cursor(r.head, r.head > r.anchor ? -1 : 1);\n\t\t\t\tfor (let piece of RectangleMarker.forRange(view, className, cursor)) cursors.push(piece);\n\t\t\t}\n\t\t}\n\t\treturn cursors;\n\t},\n\tupdate(update, dom) {\n\t\tif (update.transactions.some((tr) => tr.selection)) dom.style.animationName = dom.style.animationName == \"cm-blink\" ? \"cm-blink2\" : \"cm-blink\";\n\t\tlet confChange = configChanged(update);\n\t\tif (confChange) setBlinkRate(update.state, dom);\n\t\treturn update.docChanged || update.selectionSet || confChange;\n\t},\n\tmount(dom, view) {\n\t\tsetBlinkRate(view.state, dom);\n\t},\n\tclass: \"cm-cursorLayer\"\n});\nfunction setBlinkRate(state, dom) {\n\tdom.style.animationDuration = state.facet(selectionConfig).cursorBlinkRate + \"ms\";\n}\nconst selectionLayer = /* @__PURE__ */ layer({\n\tabove: false,\n\tmarkers(view) {\n\t\treturn view.state.selection.ranges.map((r) => r.empty ? [] : RectangleMarker.forRange(view, \"cm-selectionBackground\", r)).reduce((a, b) => a.concat(b));\n\t},\n\tupdate(update, dom) {\n\t\treturn update.docChanged || update.selectionSet || update.viewportChanged || configChanged(update);\n\t},\n\tclass: \"cm-selectionLayer\"\n});\nconst hideNativeSelection = /* @__PURE__ */ Prec.highest(/* @__PURE__ */ EditorView.theme({\n\t\".cm-line\": {\n\t\t\"& ::selection, &::selection\": { backgroundColor: \"transparent !important\" },\n\t\tcaretColor: \"transparent !important\"\n\t},\n\t\".cm-content\": {\n\t\tcaretColor: \"transparent !important\",\n\t\t\"& :focus\": {\n\t\t\tcaretColor: \"initial !important\",\n\t\t\t\"&::selection, & ::selection\": { backgroundColor: \"Highlight !important\" }\n\t\t}\n\t}\n}));\nconst setDropCursorPos = /* @__PURE__ */ StateEffect.define({ map(pos, mapping) {\n\treturn pos == null ? null : mapping.mapPos(pos);\n} });\nconst dropCursorPos = /* @__PURE__ */ StateField.define({\n\tcreate() {\n\t\treturn null;\n\t},\n\tupdate(pos, tr) {\n\t\tif (pos != null) pos = tr.changes.mapPos(pos);\n\t\treturn tr.effects.reduce((pos, e) => e.is(setDropCursorPos) ? e.value : pos, pos);\n\t}\n});\nconst drawDropCursor = /* @__PURE__ */ ViewPlugin.fromClass(class {\n\tconstructor(view) {\n\t\tthis.view = view;\n\t\tthis.cursor = null;\n\t\tthis.measureReq = {\n\t\t\tread: this.readPos.bind(this),\n\t\t\twrite: this.drawCursor.bind(this)\n\t\t};\n\t}\n\tupdate(update) {\n\t\tvar _a;\n\t\tlet cursorPos = update.state.field(dropCursorPos);\n\t\tif (cursorPos == null) {\n\t\t\tif (this.cursor != null) {\n\t\t\t\t(_a = this.cursor) === null || _a === void 0 || _a.remove();\n\t\t\t\tthis.cursor = null;\n\t\t\t}\n\t\t} else {\n\t\t\tif (!this.cursor) {\n\t\t\t\tthis.cursor = this.view.scrollDOM.appendChild(document.createElement(\"div\"));\n\t\t\t\tthis.cursor.className = \"cm-dropCursor\";\n\t\t\t}\n\t\t\tif (update.startState.field(dropCursorPos) != cursorPos || update.docChanged || update.geometryChanged) this.view.requestMeasure(this.measureReq);\n\t\t}\n\t}\n\treadPos() {\n\t\tlet { view } = this;\n\t\tlet pos = view.state.field(dropCursorPos);\n\t\tlet rect = pos != null && view.coordsAtPos(pos);\n\t\tif (!rect) return null;\n\t\tlet outer = view.scrollDOM.getBoundingClientRect();\n\t\treturn {\n\t\t\tleft: rect.left - outer.left + view.scrollDOM.scrollLeft * view.scaleX,\n\t\t\ttop: rect.top - outer.top + view.scrollDOM.scrollTop * view.scaleY,\n\t\t\theight: rect.bottom - rect.top\n\t\t};\n\t}\n\tdrawCursor(pos) {\n\t\tif (this.cursor) {\n\t\t\tlet { scaleX, scaleY } = this.view;\n\t\t\tif (pos) {\n\t\t\t\tthis.cursor.style.left = pos.left / scaleX + \"px\";\n\t\t\t\tthis.cursor.style.top = pos.top / scaleY + \"px\";\n\t\t\t\tthis.cursor.style.height = pos.height / scaleY + \"px\";\n\t\t\t} else this.cursor.style.left = \"-100000px\";\n\t\t}\n\t}\n\tdestroy() {\n\t\tif (this.cursor) this.cursor.remove();\n\t}\n\tsetDropPos(pos) {\n\t\tif (this.view.state.field(dropCursorPos) != pos) this.view.dispatch({ effects: setDropCursorPos.of(pos) });\n\t}\n}, { eventObservers: {\n\tdragover(event) {\n\t\tthis.setDropPos(this.view.posAtCoords({\n\t\t\tx: event.clientX,\n\t\t\ty: event.clientY\n\t\t}));\n\t},\n\tdragleave(event) {\n\t\tif (event.target == this.view.contentDOM || !this.view.contentDOM.contains(event.relatedTarget)) this.setDropPos(null);\n\t},\n\tdragend() {\n\t\tthis.setDropPos(null);\n\t},\n\tdrop() {\n\t\tthis.setDropPos(null);\n\t}\n} });\n/**\nDraws a cursor at the current drop position when something is\ndragged over the editor.\n*/\nfunction dropCursor() {\n\treturn [dropCursorPos, drawDropCursor];\n}\nfunction iterMatches(doc, re, from, to, f) {\n\tre.lastIndex = 0;\n\tfor (let cursor = doc.iterRange(from, to), pos = from, m; !cursor.next().done; pos += cursor.value.length) if (!cursor.lineBreak) while (m = re.exec(cursor.value)) f(pos + m.index, m);\n}\nfunction matchRanges(view, maxLength) {\n\tlet visible = view.visibleRanges;\n\tif (visible.length == 1 && visible[0].from == view.viewport.from && visible[0].to == view.viewport.to) return visible;\n\tlet result = [];\n\tfor (let { from, to } of visible) {\n\t\tfrom = Math.max(view.state.doc.lineAt(from).from, from - maxLength);\n\t\tto = Math.min(view.state.doc.lineAt(to).to, to + maxLength);\n\t\tif (result.length && result[result.length - 1].to >= from) result[result.length - 1].to = to;\n\t\telse result.push({\n\t\t\tfrom,\n\t\t\tto\n\t\t});\n\t}\n\treturn result;\n}\n/**\nHelper class used to make it easier to maintain decorations on\nvisible code that matches a given regular expression. To be used\nin a [view plugin](https://codemirror.net/6/docs/ref/#view.ViewPlugin). Instances of this object\nrepresent a matching configuration.\n*/\nvar MatchDecorator = class {\n\t/**\n\tCreate a decorator.\n\t*/\n\tconstructor(config) {\n\t\tconst { regexp, decoration, decorate, boundary, maxLength = 1e3 } = config;\n\t\tif (!regexp.global) throw new RangeError(\"The regular expression given to MatchDecorator should have its 'g' flag set\");\n\t\tthis.regexp = regexp;\n\t\tif (decorate) this.addMatch = (match, view, from, add) => decorate(add, from, from + match[0].length, match, view);\n\t\telse if (typeof decoration == \"function\") this.addMatch = (match, view, from, add) => {\n\t\t\tlet deco = decoration(match, view, from);\n\t\t\tif (deco) add(from, from + match[0].length, deco);\n\t\t};\n\t\telse if (decoration) this.addMatch = (match, _view, from, add) => add(from, from + match[0].length, decoration);\n\t\telse throw new RangeError(\"Either 'decorate' or 'decoration' should be provided to MatchDecorator\");\n\t\tthis.boundary = boundary;\n\t\tthis.maxLength = maxLength;\n\t}\n\t/**\n\tCompute the full set of decorations for matches in the given\n\tview's viewport. You'll want to call this when initializing your\n\tplugin.\n\t*/\n\tcreateDeco(view) {\n\t\tlet build = new RangeSetBuilder(), add = build.add.bind(build);\n\t\tfor (let { from, to } of matchRanges(view, this.maxLength)) iterMatches(view.state.doc, this.regexp, from, to, (from, m) => this.addMatch(m, view, from, add));\n\t\treturn build.finish();\n\t}\n\t/**\n\tUpdate a set of decorations for a view update. `deco` _must_ be\n\tthe set of decorations produced by _this_ `MatchDecorator` for\n\tthe view state before the update.\n\t*/\n\tupdateDeco(update, deco) {\n\t\tlet changeFrom = 1e9, changeTo = -1;\n\t\tif (update.docChanged) update.changes.iterChanges((_f, _t, from, to) => {\n\t\t\tif (to >= update.view.viewport.from && from <= update.view.viewport.to) {\n\t\t\t\tchangeFrom = Math.min(from, changeFrom);\n\t\t\t\tchangeTo = Math.max(to, changeTo);\n\t\t\t}\n\t\t});\n\t\tif (update.viewportMoved || changeTo - changeFrom > 1e3) return this.createDeco(update.view);\n\t\tif (changeTo > -1) return this.updateRange(update.view, deco.map(update.changes), changeFrom, changeTo);\n\t\treturn deco;\n\t}\n\tupdateRange(view, deco, updateFrom, updateTo) {\n\t\tfor (let r of view.visibleRanges) {\n\t\t\tlet from = Math.max(r.from, updateFrom), to = Math.min(r.to, updateTo);\n\t\t\tif (to > from) {\n\t\t\t\tlet fromLine = view.state.doc.lineAt(from), toLine = fromLine.to < to ? view.state.doc.lineAt(to) : fromLine;\n\t\t\t\tlet start = Math.max(r.from, fromLine.from), end = Math.min(r.to, toLine.to);\n\t\t\t\tif (this.boundary) {\n\t\t\t\t\tfor (; from > fromLine.from; from--) if (this.boundary.test(fromLine.text[from - 1 - fromLine.from])) {\n\t\t\t\t\t\tstart = from;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tfor (; to < toLine.to; to++) if (this.boundary.test(toLine.text[to - toLine.from])) {\n\t\t\t\t\t\tend = to;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tlet ranges = [], m;\n\t\t\t\tlet add = (from, to, deco) => ranges.push(deco.range(from, to));\n\t\t\t\tif (fromLine == toLine) {\n\t\t\t\t\tthis.regexp.lastIndex = start - fromLine.from;\n\t\t\t\t\twhile ((m = this.regexp.exec(fromLine.text)) && m.index < end - fromLine.from) this.addMatch(m, view, m.index + fromLine.from, add);\n\t\t\t\t} else iterMatches(view.state.doc, this.regexp, start, end, (from, m) => this.addMatch(m, view, from, add));\n\t\t\t\tdeco = deco.update({\n\t\t\t\t\tfilterFrom: start,\n\t\t\t\t\tfilterTo: end,\n\t\t\t\t\tfilter: (from, to) => from < start || to > end,\n\t\t\t\t\tadd: ranges\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\treturn deco;\n\t}\n};\nconst UnicodeRegexpSupport = /x/.unicode != null ? \"gu\" : \"g\";\nconst Specials = /* @__PURE__ */ new RegExp(\"[\\0-\\b\\n-\u001f-Ÿ­؜​‎‏\\u2028\\u2029‭‮⁦⁧⁩-]\", UnicodeRegexpSupport);\nconst Names = {\n\t0: \"null\",\n\t7: \"bell\",\n\t8: \"backspace\",\n\t10: \"newline\",\n\t11: \"vertical tab\",\n\t13: \"carriage return\",\n\t27: \"escape\",\n\t8203: \"zero width space\",\n\t8204: \"zero width non-joiner\",\n\t8205: \"zero width joiner\",\n\t8206: \"left-to-right mark\",\n\t8207: \"right-to-left mark\",\n\t8232: \"line separator\",\n\t8237: \"left-to-right override\",\n\t8238: \"right-to-left override\",\n\t8294: \"left-to-right isolate\",\n\t8295: \"right-to-left isolate\",\n\t8297: \"pop directional isolate\",\n\t8233: \"paragraph separator\",\n\t65279: \"zero width no-break space\",\n\t65532: \"object replacement\"\n};\nlet _supportsTabSize = null;\nfunction supportsTabSize() {\n\tvar _a;\n\tif (_supportsTabSize == null && typeof document != \"undefined\" && document.body) {\n\t\tlet styles = document.body.style;\n\t\t_supportsTabSize = ((_a = styles.tabSize) !== null && _a !== void 0 ? _a : styles.MozTabSize) != null;\n\t}\n\treturn _supportsTabSize || false;\n}\nconst specialCharConfig = /* @__PURE__ */ Facet.define({ combine(configs) {\n\tlet config = combineConfig(configs, {\n\t\trender: null,\n\t\tspecialChars: Specials,\n\t\taddSpecialChars: null\n\t});\n\tif (config.replaceTabs = !supportsTabSize()) config.specialChars = new RegExp(\"\t|\" + config.specialChars.source, UnicodeRegexpSupport);\n\tif (config.addSpecialChars) config.specialChars = new RegExp(config.specialChars.source + \"|\" + config.addSpecialChars.source, UnicodeRegexpSupport);\n\treturn config;\n} });\n/**\nReturns an extension that installs highlighting of special\ncharacters.\n*/\nfunction highlightSpecialChars(config = {}) {\n\treturn [specialCharConfig.of(config), specialCharPlugin()];\n}\nlet _plugin = null;\nfunction specialCharPlugin() {\n\treturn _plugin || (_plugin = ViewPlugin.fromClass(class {\n\t\tconstructor(view) {\n\t\t\tthis.view = view;\n\t\t\tthis.decorations = Decoration.none;\n\t\t\tthis.decorationCache = Object.create(null);\n\t\t\tthis.decorator = this.makeDecorator(view.state.facet(specialCharConfig));\n\t\t\tthis.decorations = this.decorator.createDeco(view);\n\t\t}\n\t\tmakeDecorator(conf) {\n\t\t\treturn new MatchDecorator({\n\t\t\t\tregexp: conf.specialChars,\n\t\t\t\tdecoration: (m, view, pos) => {\n\t\t\t\t\tlet { doc } = view.state;\n\t\t\t\t\tlet code = codePointAt(m[0], 0);\n\t\t\t\t\tif (code == 9) {\n\t\t\t\t\t\tlet line = doc.lineAt(pos);\n\t\t\t\t\t\tlet size = view.state.tabSize, col = countColumn(line.text, size, pos - line.from);\n\t\t\t\t\t\treturn Decoration.replace({ widget: new TabWidget((size - col % size) * this.view.defaultCharacterWidth / this.view.scaleX) });\n\t\t\t\t\t}\n\t\t\t\t\treturn this.decorationCache[code] || (this.decorationCache[code] = Decoration.replace({ widget: new SpecialCharWidget(conf, code) }));\n\t\t\t\t},\n\t\t\t\tboundary: conf.replaceTabs ? void 0 : /[^]/\n\t\t\t});\n\t\t}\n\t\tupdate(update) {\n\t\t\tlet conf = update.state.facet(specialCharConfig);\n\t\t\tif (update.startState.facet(specialCharConfig) != conf) {\n\t\t\t\tthis.decorator = this.makeDecorator(conf);\n\t\t\t\tthis.decorations = this.decorator.createDeco(update.view);\n\t\t\t} else this.decorations = this.decorator.updateDeco(update, this.decorations);\n\t\t}\n\t}, { decorations: (v) => v.decorations }));\n}\nconst DefaultPlaceholder = \"•\";\nfunction placeholder$1(code) {\n\tif (code >= 32) return DefaultPlaceholder;\n\tif (code == 10) return \"␤\";\n\treturn String.fromCharCode(9216 + code);\n}\nvar SpecialCharWidget = class extends WidgetType {\n\tconstructor(options, code) {\n\t\tsuper();\n\t\tthis.options = options;\n\t\tthis.code = code;\n\t}\n\teq(other) {\n\t\treturn other.code == this.code;\n\t}\n\ttoDOM(view) {\n\t\tlet ph = placeholder$1(this.code);\n\t\tlet desc = view.state.phrase(\"Control character\") + \" \" + (Names[this.code] || \"0x\" + this.code.toString(16));\n\t\tlet custom = this.options.render && this.options.render(this.code, desc, ph);\n\t\tif (custom) return custom;\n\t\tlet span = document.createElement(\"span\");\n\t\tspan.textContent = ph;\n\t\tspan.title = desc;\n\t\tspan.setAttribute(\"aria-label\", desc);\n\t\tspan.className = \"cm-specialChar\";\n\t\treturn span;\n\t}\n\tignoreEvent() {\n\t\treturn false;\n\t}\n};\nvar TabWidget = class extends WidgetType {\n\tconstructor(width) {\n\t\tsuper();\n\t\tthis.width = width;\n\t}\n\teq(other) {\n\t\treturn other.width == this.width;\n\t}\n\ttoDOM() {\n\t\tlet span = document.createElement(\"span\");\n\t\tspan.textContent = \"\t\";\n\t\tspan.className = \"cm-tab\";\n\t\tspan.style.width = this.width + \"px\";\n\t\treturn span;\n\t}\n\tignoreEvent() {\n\t\treturn false;\n\t}\n};\n/**\nMark lines that have a cursor on them with the `\"cm-activeLine\"`\nDOM class.\n*/\nfunction highlightActiveLine() {\n\treturn activeLineHighlighter;\n}\nconst lineDeco = /* @__PURE__ */ Decoration.line({ class: \"cm-activeLine\" });\nconst activeLineHighlighter = /* @__PURE__ */ ViewPlugin.fromClass(class {\n\tconstructor(view) {\n\t\tthis.decorations = this.getDeco(view);\n\t}\n\tupdate(update) {\n\t\tif (update.docChanged || update.selectionSet) this.decorations = this.getDeco(update.view);\n\t}\n\tgetDeco(view) {\n\t\tlet lastLineStart = -1, deco = [];\n\t\tfor (let r of view.state.selection.ranges) {\n\t\t\tlet line = view.lineBlockAt(r.head);\n\t\t\tif (line.from > lastLineStart) {\n\t\t\t\tdeco.push(lineDeco.range(line.from));\n\t\t\t\tlastLineStart = line.from;\n\t\t\t}\n\t\t}\n\t\treturn Decoration.set(deco);\n\t}\n}, { decorations: (v) => v.decorations });\nconst MaxOff = 2e3;\nfunction rectangleFor(state, a, b) {\n\tlet startLine = Math.min(a.line, b.line), endLine = Math.max(a.line, b.line);\n\tlet ranges = [];\n\tif (a.off > MaxOff || b.off > MaxOff || a.col < 0 || b.col < 0) {\n\t\tlet startOff = Math.min(a.off, b.off), endOff = Math.max(a.off, b.off);\n\t\tfor (let i = startLine; i <= endLine; i++) {\n\t\t\tlet line = state.doc.line(i);\n\t\t\tif (line.length <= endOff) ranges.push(EditorSelection.range(line.from + startOff, line.to + endOff));\n\t\t}\n\t} else {\n\t\tlet startCol = Math.min(a.col, b.col), endCol = Math.max(a.col, b.col);\n\t\tfor (let i = startLine; i <= endLine; i++) {\n\t\t\tlet line = state.doc.line(i);\n\t\t\tlet start = findColumn(line.text, startCol, state.tabSize, true);\n\t\t\tif (start < 0) ranges.push(EditorSelection.cursor(line.to));\n\t\t\telse {\n\t\t\t\tlet end = findColumn(line.text, endCol, state.tabSize);\n\t\t\t\tranges.push(EditorSelection.range(line.from + start, line.from + end));\n\t\t\t}\n\t\t}\n\t}\n\treturn ranges;\n}\nfunction absoluteColumn(view, x) {\n\tlet ref = view.coordsAtPos(view.viewport.from);\n\treturn ref ? Math.round(Math.abs((ref.left - x) / view.defaultCharacterWidth)) : -1;\n}\nfunction getPos(view, event) {\n\tlet offset = view.posAtCoords({\n\t\tx: event.clientX,\n\t\ty: event.clientY\n\t}, false);\n\tlet line = view.state.doc.lineAt(offset), off = offset - line.from;\n\tlet col = off > MaxOff ? -1 : off == line.length ? absoluteColumn(view, event.clientX) : countColumn(line.text, view.state.tabSize, offset - line.from);\n\treturn {\n\t\tline: line.number,\n\t\tcol,\n\t\toff\n\t};\n}\nfunction rectangleSelectionStyle(view, event) {\n\tlet start = getPos(view, event), startSel = view.state.selection;\n\tif (!start) return null;\n\treturn {\n\t\tupdate(update) {\n\t\t\tif (update.docChanged) {\n\t\t\t\tlet newStart = update.changes.mapPos(update.startState.doc.line(start.line).from);\n\t\t\t\tlet newLine = update.state.doc.lineAt(newStart);\n\t\t\t\tstart = {\n\t\t\t\t\tline: newLine.number,\n\t\t\t\t\tcol: start.col,\n\t\t\t\t\toff: Math.min(start.off, newLine.length)\n\t\t\t\t};\n\t\t\t\tstartSel = startSel.map(update.changes);\n\t\t\t}\n\t\t},\n\t\tget(event, _extend, multiple) {\n\t\t\tlet cur = getPos(view, event);\n\t\t\tif (!cur) return startSel;\n\t\t\tlet ranges = rectangleFor(view.state, start, cur);\n\t\t\tif (!ranges.length) return startSel;\n\t\t\tif (multiple) return EditorSelection.create(ranges.concat(startSel.ranges));\n\t\t\telse return EditorSelection.create(ranges);\n\t\t}\n\t};\n}\n/**\nCreate an extension that enables rectangular selections. By\ndefault, it will react to left mouse drag with the Alt key held\ndown. When such a selection occurs, the text within the rectangle\nthat was dragged over will be selected, as one selection\n[range](https://codemirror.net/6/docs/ref/#state.SelectionRange) per line.\n*/\nfunction rectangularSelection(options) {\n\tlet filter = (options === null || options === void 0 ? void 0 : options.eventFilter) || ((e) => e.altKey && e.button == 0);\n\treturn EditorView.mouseSelectionStyle.of((view, event) => filter(event) ? rectangleSelectionStyle(view, event) : null);\n}\nconst keys = {\n\tAlt: [18, (e) => !!e.altKey],\n\tControl: [17, (e) => !!e.ctrlKey],\n\tShift: [16, (e) => !!e.shiftKey],\n\tMeta: [91, (e) => !!e.metaKey]\n};\nconst showCrosshair = { style: \"cursor: crosshair\" };\n/**\nReturns an extension that turns the pointer cursor into a\ncrosshair when a given modifier key, defaulting to Alt, is held\ndown. Can serve as a visual hint that rectangular selection is\ngoing to happen when paired with\n[`rectangularSelection`](https://codemirror.net/6/docs/ref/#view.rectangularSelection).\n*/\nfunction crosshairCursor(options = {}) {\n\tlet [code, getter] = keys[options.key || \"Alt\"];\n\tlet plugin = ViewPlugin.fromClass(class {\n\t\tconstructor(view) {\n\t\t\tthis.view = view;\n\t\t\tthis.isDown = false;\n\t\t}\n\t\tset(isDown) {\n\t\t\tif (this.isDown != isDown) {\n\t\t\t\tthis.isDown = isDown;\n\t\t\t\tthis.view.update([]);\n\t\t\t}\n\t\t}\n\t}, { eventObservers: {\n\t\tkeydown(e) {\n\t\t\tthis.set(e.keyCode == code || getter(e));\n\t\t},\n\t\tkeyup(e) {\n\t\t\tif (e.keyCode == code || !getter(e)) this.set(false);\n\t\t},\n\t\tmousemove(e) {\n\t\t\tthis.set(getter(e));\n\t\t}\n\t} });\n\treturn [plugin, EditorView.contentAttributes.of((view) => {\n\t\tvar _a;\n\t\treturn ((_a = view.plugin(plugin)) === null || _a === void 0 ? void 0 : _a.isDown) ? showCrosshair : null;\n\t})];\n}\nconst Outside = \"-10000px\";\nvar TooltipViewManager = class {\n\tconstructor(view, facet, createTooltipView, removeTooltipView) {\n\t\tthis.facet = facet;\n\t\tthis.createTooltipView = createTooltipView;\n\t\tthis.removeTooltipView = removeTooltipView;\n\t\tthis.input = view.state.facet(facet);\n\t\tthis.tooltips = this.input.filter((t) => t);\n\t\tlet prev = null;\n\t\tthis.tooltipViews = this.tooltips.map((t) => prev = createTooltipView(t, prev));\n\t}\n\tupdate(update, above) {\n\t\tvar _a;\n\t\tlet input = update.state.facet(this.facet);\n\t\tlet tooltips = input.filter((x) => x);\n\t\tif (input === this.input) {\n\t\t\tfor (let t of this.tooltipViews) if (t.update) t.update(update);\n\t\t\treturn false;\n\t\t}\n\t\tlet tooltipViews = [], newAbove = above ? [] : null;\n\t\tfor (let i = 0; i < tooltips.length; i++) {\n\t\t\tlet tip = tooltips[i], known = -1;\n\t\t\tif (!tip) continue;\n\t\t\tfor (let i = 0; i < this.tooltips.length; i++) {\n\t\t\t\tlet other = this.tooltips[i];\n\t\t\t\tif (other && other.create == tip.create) known = i;\n\t\t\t}\n\t\t\tif (known < 0) {\n\t\t\t\ttooltipViews[i] = this.createTooltipView(tip, i ? tooltipViews[i - 1] : null);\n\t\t\t\tif (newAbove) newAbove[i] = !!tip.above;\n\t\t\t} else {\n\t\t\t\tlet tooltipView = tooltipViews[i] = this.tooltipViews[known];\n\t\t\t\tif (newAbove) newAbove[i] = above[known];\n\t\t\t\tif (tooltipView.update) tooltipView.update(update);\n\t\t\t}\n\t\t}\n\t\tfor (let t of this.tooltipViews) if (tooltipViews.indexOf(t) < 0) {\n\t\t\tthis.removeTooltipView(t);\n\t\t\t(_a = t.destroy) === null || _a === void 0 || _a.call(t);\n\t\t}\n\t\tif (above) {\n\t\t\tnewAbove.forEach((val, i) => above[i] = val);\n\t\t\tabove.length = newAbove.length;\n\t\t}\n\t\tthis.input = input;\n\t\tthis.tooltips = tooltips;\n\t\tthis.tooltipViews = tooltipViews;\n\t\treturn true;\n\t}\n};\nfunction windowSpace(view) {\n\tlet docElt = view.dom.ownerDocument.documentElement;\n\treturn {\n\t\ttop: 0,\n\t\tleft: 0,\n\t\tbottom: docElt.clientHeight,\n\t\tright: docElt.clientWidth\n\t};\n}\nconst tooltipConfig = /* @__PURE__ */ Facet.define({ combine: (values) => {\n\tvar _a, _b, _c;\n\treturn {\n\t\tposition: browser.ios ? \"absolute\" : ((_a = values.find((conf) => conf.position)) === null || _a === void 0 ? void 0 : _a.position) || \"fixed\",\n\t\tparent: ((_b = values.find((conf) => conf.parent)) === null || _b === void 0 ? void 0 : _b.parent) || null,\n\t\ttooltipSpace: ((_c = values.find((conf) => conf.tooltipSpace)) === null || _c === void 0 ? void 0 : _c.tooltipSpace) || windowSpace\n\t};\n} });\nconst knownHeight = /* @__PURE__ */ new WeakMap();\nconst tooltipPlugin = /* @__PURE__ */ ViewPlugin.fromClass(class {\n\tconstructor(view) {\n\t\tthis.view = view;\n\t\tthis.above = [];\n\t\tthis.inView = true;\n\t\tthis.madeAbsolute = false;\n\t\tthis.lastTransaction = 0;\n\t\tthis.measureTimeout = -1;\n\t\tlet config = view.state.facet(tooltipConfig);\n\t\tthis.position = config.position;\n\t\tthis.parent = config.parent;\n\t\tthis.classes = view.themeClasses;\n\t\tthis.createContainer();\n\t\tthis.measureReq = {\n\t\t\tread: this.readMeasure.bind(this),\n\t\t\twrite: this.writeMeasure.bind(this),\n\t\t\tkey: this\n\t\t};\n\t\tthis.resizeObserver = typeof ResizeObserver == \"function\" ? new ResizeObserver(() => this.measureSoon()) : null;\n\t\tthis.manager = new TooltipViewManager(view, showTooltip, (t, p) => this.createTooltip(t, p), (t) => {\n\t\t\tif (this.resizeObserver) this.resizeObserver.unobserve(t.dom);\n\t\t\tt.dom.remove();\n\t\t});\n\t\tthis.above = this.manager.tooltips.map((t) => !!t.above);\n\t\tthis.intersectionObserver = typeof IntersectionObserver == \"function\" ? new IntersectionObserver((entries) => {\n\t\t\tif (Date.now() > this.lastTransaction - 50 && entries.length > 0 && entries[entries.length - 1].intersectionRatio < 1) this.measureSoon();\n\t\t}, { threshold: [1] }) : null;\n\t\tthis.observeIntersection();\n\t\tview.win.addEventListener(\"resize\", this.measureSoon = this.measureSoon.bind(this));\n\t\tthis.maybeMeasure();\n\t}\n\tcreateContainer() {\n\t\tif (this.parent) {\n\t\t\tthis.container = document.createElement(\"div\");\n\t\t\tthis.container.style.position = \"relative\";\n\t\t\tthis.container.className = this.view.themeClasses;\n\t\t\tthis.parent.appendChild(this.container);\n\t\t} else this.container = this.view.dom;\n\t}\n\tobserveIntersection() {\n\t\tif (this.intersectionObserver) {\n\t\t\tthis.intersectionObserver.disconnect();\n\t\t\tfor (let tooltip of this.manager.tooltipViews) this.intersectionObserver.observe(tooltip.dom);\n\t\t}\n\t}\n\tmeasureSoon() {\n\t\tif (this.measureTimeout < 0) this.measureTimeout = setTimeout(() => {\n\t\t\tthis.measureTimeout = -1;\n\t\t\tthis.maybeMeasure();\n\t\t}, 50);\n\t}\n\tupdate(update) {\n\t\tif (update.transactions.length) this.lastTransaction = Date.now();\n\t\tlet updated = this.manager.update(update, this.above);\n\t\tif (updated) this.observeIntersection();\n\t\tlet shouldMeasure = updated || update.geometryChanged;\n\t\tlet newConfig = update.state.facet(tooltipConfig);\n\t\tif (newConfig.position != this.position && !this.madeAbsolute) {\n\t\t\tthis.position = newConfig.position;\n\t\t\tfor (let t of this.manager.tooltipViews) t.dom.style.position = this.position;\n\t\t\tshouldMeasure = true;\n\t\t}\n\t\tif (newConfig.parent != this.parent) {\n\t\t\tif (this.parent) this.container.remove();\n\t\t\tthis.parent = newConfig.parent;\n\t\t\tthis.createContainer();\n\t\t\tfor (let t of this.manager.tooltipViews) this.container.appendChild(t.dom);\n\t\t\tshouldMeasure = true;\n\t\t} else if (this.parent && this.view.themeClasses != this.classes) this.classes = this.container.className = this.view.themeClasses;\n\t\tif (shouldMeasure) this.maybeMeasure();\n\t}\n\tcreateTooltip(tooltip, prev) {\n\t\tlet tooltipView = tooltip.create(this.view);\n\t\tlet before = prev ? prev.dom : null;\n\t\ttooltipView.dom.classList.add(\"cm-tooltip\");\n\t\tif (tooltip.arrow && !tooltipView.dom.querySelector(\".cm-tooltip > .cm-tooltip-arrow\")) {\n\t\t\tlet arrow = document.createElement(\"div\");\n\t\t\tarrow.className = \"cm-tooltip-arrow\";\n\t\t\ttooltipView.dom.appendChild(arrow);\n\t\t}\n\t\ttooltipView.dom.style.position = this.position;\n\t\ttooltipView.dom.style.top = Outside;\n\t\ttooltipView.dom.style.left = \"0px\";\n\t\tthis.container.insertBefore(tooltipView.dom, before);\n\t\tif (tooltipView.mount) tooltipView.mount(this.view);\n\t\tif (this.resizeObserver) this.resizeObserver.observe(tooltipView.dom);\n\t\treturn tooltipView;\n\t}\n\tdestroy() {\n\t\tvar _a, _b, _c;\n\t\tthis.view.win.removeEventListener(\"resize\", this.measureSoon);\n\t\tfor (let tooltipView of this.manager.tooltipViews) {\n\t\t\ttooltipView.dom.remove();\n\t\t\t(_a = tooltipView.destroy) === null || _a === void 0 || _a.call(tooltipView);\n\t\t}\n\t\tif (this.parent) this.container.remove();\n\t\t(_b = this.resizeObserver) === null || _b === void 0 || _b.disconnect();\n\t\t(_c = this.intersectionObserver) === null || _c === void 0 || _c.disconnect();\n\t\tclearTimeout(this.measureTimeout);\n\t}\n\treadMeasure() {\n\t\tlet scaleX = 1, scaleY = 1, makeAbsolute = false;\n\t\tif (this.position == \"fixed\" && this.manager.tooltipViews.length) {\n\t\t\tlet { dom } = this.manager.tooltipViews[0];\n\t\t\tif (browser.gecko) makeAbsolute = dom.offsetParent != this.container.ownerDocument.body;\n\t\t\telse if (dom.style.top == Outside && dom.style.left == \"0px\") {\n\t\t\t\tlet rect = dom.getBoundingClientRect();\n\t\t\t\tmakeAbsolute = Math.abs(rect.top + 1e4) > 1 || Math.abs(rect.left) > 1;\n\t\t\t}\n\t\t}\n\t\tif (makeAbsolute || this.position == \"absolute\") if (this.parent) {\n\t\t\tlet rect = this.parent.getBoundingClientRect();\n\t\t\tif (rect.width && rect.height) {\n\t\t\t\tscaleX = rect.width / this.parent.offsetWidth;\n\t\t\t\tscaleY = rect.height / this.parent.offsetHeight;\n\t\t\t}\n\t\t} else ({scaleX, scaleY} = this.view.viewState);\n\t\tlet visible = this.view.scrollDOM.getBoundingClientRect(), margins = getScrollMargins(this.view);\n\t\treturn {\n\t\t\tvisible: {\n\t\t\t\tleft: visible.left + margins.left,\n\t\t\t\ttop: visible.top + margins.top,\n\t\t\t\tright: visible.right - margins.right,\n\t\t\t\tbottom: visible.bottom - margins.bottom\n\t\t\t},\n\t\t\tparent: this.parent ? this.container.getBoundingClientRect() : this.view.dom.getBoundingClientRect(),\n\t\t\tpos: this.manager.tooltips.map((t, i) => {\n\t\t\t\tlet tv = this.manager.tooltipViews[i];\n\t\t\t\treturn tv.getCoords ? tv.getCoords(t.pos) : this.view.coordsAtPos(t.pos);\n\t\t\t}),\n\t\t\tsize: this.manager.tooltipViews.map(({ dom }) => dom.getBoundingClientRect()),\n\t\t\tspace: this.view.state.facet(tooltipConfig).tooltipSpace(this.view),\n\t\t\tscaleX,\n\t\t\tscaleY,\n\t\t\tmakeAbsolute\n\t\t};\n\t}\n\twriteMeasure(measured) {\n\t\tvar _a;\n\t\tif (measured.makeAbsolute) {\n\t\t\tthis.madeAbsolute = true;\n\t\t\tthis.position = \"absolute\";\n\t\t\tfor (let t of this.manager.tooltipViews) t.dom.style.position = \"absolute\";\n\t\t}\n\t\tlet { visible, space, scaleX, scaleY } = measured;\n\t\tlet others = [];\n\t\tfor (let i = 0; i < this.manager.tooltips.length; i++) {\n\t\t\tlet tooltip = this.manager.tooltips[i], tView = this.manager.tooltipViews[i], { dom } = tView;\n\t\t\tlet pos = measured.pos[i], size = measured.size[i];\n\t\t\tif (!pos || tooltip.clip !== false && (pos.bottom <= Math.max(visible.top, space.top) || pos.top >= Math.min(visible.bottom, space.bottom) || pos.right < Math.max(visible.left, space.left) - .1 || pos.left > Math.min(visible.right, space.right) + .1)) {\n\t\t\t\tdom.style.top = Outside;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tlet arrow = tooltip.arrow ? tView.dom.querySelector(\".cm-tooltip-arrow\") : null;\n\t\t\tlet arrowHeight = arrow ? 7 : 0;\n\t\t\tlet width = size.right - size.left, height = (_a = knownHeight.get(tView)) !== null && _a !== void 0 ? _a : size.bottom - size.top;\n\t\t\tlet offset = tView.offset || noOffset, ltr = this.view.textDirection == Direction.LTR;\n\t\t\tlet left = size.width > space.right - space.left ? ltr ? space.left : space.right - size.width : ltr ? Math.max(space.left, Math.min(pos.left - (arrow ? 14 : 0) + offset.x, space.right - width)) : Math.min(Math.max(space.left, pos.left - width + (arrow ? 14 : 0) - offset.x), space.right - width);\n\t\t\tlet above = this.above[i];\n\t\t\tif (!tooltip.strictSide && (above ? pos.top - height - arrowHeight - offset.y < space.top : pos.bottom + height + arrowHeight + offset.y > space.bottom) && above == space.bottom - pos.bottom > pos.top - space.top) above = this.above[i] = !above;\n\t\t\tlet spaceVert = (above ? pos.top - space.top : space.bottom - pos.bottom) - arrowHeight;\n\t\t\tif (spaceVert < height && tView.resize !== false) {\n\t\t\t\tif (spaceVert < this.view.defaultLineHeight) {\n\t\t\t\t\tdom.style.top = Outside;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tknownHeight.set(tView, height);\n\t\t\t\tdom.style.height = (height = spaceVert) / scaleY + \"px\";\n\t\t\t} else if (dom.style.height) dom.style.height = \"\";\n\t\t\tlet top = above ? pos.top - height - arrowHeight - offset.y : pos.bottom + arrowHeight + offset.y;\n\t\t\tlet right = left + width;\n\t\t\tif (tView.overlap !== true) {\n\t\t\t\tfor (let r of others) if (r.left < right && r.right > left && r.top < top + height && r.bottom > top) top = above ? r.top - height - 2 - arrowHeight : r.bottom + arrowHeight + 2;\n\t\t\t}\n\t\t\tif (this.position == \"absolute\") {\n\t\t\t\tdom.style.top = (top - measured.parent.top) / scaleY + \"px\";\n\t\t\t\tsetLeftStyle(dom, (left - measured.parent.left) / scaleX);\n\t\t\t} else {\n\t\t\t\tdom.style.top = top / scaleY + \"px\";\n\t\t\t\tsetLeftStyle(dom, left / scaleX);\n\t\t\t}\n\t\t\tif (arrow) {\n\t\t\t\tlet arrowLeft = pos.left + (ltr ? offset.x : -offset.x) - (left + 14 - 7);\n\t\t\t\tarrow.style.left = arrowLeft / scaleX + \"px\";\n\t\t\t}\n\t\t\tif (tView.overlap !== true) others.push({\n\t\t\t\tleft,\n\t\t\t\ttop,\n\t\t\t\tright,\n\t\t\t\tbottom: top + height\n\t\t\t});\n\t\t\tdom.classList.toggle(\"cm-tooltip-above\", above);\n\t\t\tdom.classList.toggle(\"cm-tooltip-below\", !above);\n\t\t\tif (tView.positioned) tView.positioned(measured.space);\n\t\t}\n\t}\n\tmaybeMeasure() {\n\t\tif (this.manager.tooltips.length) {\n\t\t\tif (this.view.inView) this.view.requestMeasure(this.measureReq);\n\t\t\tif (this.inView != this.view.inView) {\n\t\t\t\tthis.inView = this.view.inView;\n\t\t\t\tif (!this.inView) for (let tv of this.manager.tooltipViews) tv.dom.style.top = Outside;\n\t\t\t}\n\t\t}\n\t}\n}, { eventObservers: { scroll() {\n\tthis.maybeMeasure();\n} } });\nfunction setLeftStyle(elt, value) {\n\tlet current = parseInt(elt.style.left, 10);\n\tif (isNaN(current) || Math.abs(value - current) > 1) elt.style.left = value + \"px\";\n}\nconst baseTheme$6 = /* @__PURE__ */ EditorView.baseTheme({\n\t\".cm-tooltip\": {\n\t\tzIndex: 500,\n\t\tboxSizing: \"border-box\"\n\t},\n\t\"&light .cm-tooltip\": {\n\t\tborder: \"1px solid #bbb\",\n\t\tbackgroundColor: \"#f5f5f5\"\n\t},\n\t\"&light .cm-tooltip-section:not(:first-child)\": { borderTop: \"1px solid #bbb\" },\n\t\"&dark .cm-tooltip\": {\n\t\tbackgroundColor: \"#333338\",\n\t\tcolor: \"white\"\n\t},\n\t\".cm-tooltip-arrow\": {\n\t\theight: `7px`,\n\t\twidth: `14px`,\n\t\tposition: \"absolute\",\n\t\tzIndex: -1,\n\t\toverflow: \"hidden\",\n\t\t\"&:before, &:after\": {\n\t\t\tcontent: \"''\",\n\t\t\tposition: \"absolute\",\n\t\t\twidth: 0,\n\t\t\theight: 0,\n\t\t\tborderLeft: `7px solid transparent`,\n\t\t\tborderRight: `7px solid transparent`\n\t\t},\n\t\t\".cm-tooltip-above &\": {\n\t\t\tbottom: `-7px`,\n\t\t\t\"&:before\": { borderTop: `7px solid #bbb` },\n\t\t\t\"&:after\": {\n\t\t\t\tborderTop: `7px solid #f5f5f5`,\n\t\t\t\tbottom: \"1px\"\n\t\t\t}\n\t\t},\n\t\t\".cm-tooltip-below &\": {\n\t\t\ttop: `-7px`,\n\t\t\t\"&:before\": { borderBottom: `7px solid #bbb` },\n\t\t\t\"&:after\": {\n\t\t\t\tborderBottom: `7px solid #f5f5f5`,\n\t\t\t\ttop: \"1px\"\n\t\t\t}\n\t\t}\n\t},\n\t\"&dark .cm-tooltip .cm-tooltip-arrow\": {\n\t\t\"&:before\": {\n\t\t\tborderTopColor: \"#333338\",\n\t\t\tborderBottomColor: \"#333338\"\n\t\t},\n\t\t\"&:after\": {\n\t\t\tborderTopColor: \"transparent\",\n\t\t\tborderBottomColor: \"transparent\"\n\t\t}\n\t}\n});\nconst noOffset = {\n\tx: 0,\n\ty: 0\n};\n/**\nFacet to which an extension can add a value to show a tooltip.\n*/\nconst showTooltip = /* @__PURE__ */ Facet.define({ enables: [tooltipPlugin, baseTheme$6] });\nconst showHoverTooltip = /* @__PURE__ */ Facet.define({ combine: (inputs) => inputs.reduce((a, i) => a.concat(i), []) });\nvar HoverTooltipHost = class HoverTooltipHost {\n\tstatic create(view) {\n\t\treturn new HoverTooltipHost(view);\n\t}\n\tconstructor(view) {\n\t\tthis.view = view;\n\t\tthis.mounted = false;\n\t\tthis.dom = document.createElement(\"div\");\n\t\tthis.dom.classList.add(\"cm-tooltip-hover\");\n\t\tthis.manager = new TooltipViewManager(view, showHoverTooltip, (t, p) => this.createHostedView(t, p), (t) => t.dom.remove());\n\t}\n\tcreateHostedView(tooltip, prev) {\n\t\tlet hostedView = tooltip.create(this.view);\n\t\thostedView.dom.classList.add(\"cm-tooltip-section\");\n\t\tthis.dom.insertBefore(hostedView.dom, prev ? prev.dom.nextSibling : this.dom.firstChild);\n\t\tif (this.mounted && hostedView.mount) hostedView.mount(this.view);\n\t\treturn hostedView;\n\t}\n\tmount(view) {\n\t\tfor (let hostedView of this.manager.tooltipViews) if (hostedView.mount) hostedView.mount(view);\n\t\tthis.mounted = true;\n\t}\n\tpositioned(space) {\n\t\tfor (let hostedView of this.manager.tooltipViews) if (hostedView.positioned) hostedView.positioned(space);\n\t}\n\tupdate(update) {\n\t\tthis.manager.update(update);\n\t}\n\tdestroy() {\n\t\tvar _a;\n\t\tfor (let t of this.manager.tooltipViews) (_a = t.destroy) === null || _a === void 0 || _a.call(t);\n\t}\n\tpassProp(name) {\n\t\tlet value = void 0;\n\t\tfor (let view of this.manager.tooltipViews) {\n\t\t\tlet given = view[name];\n\t\t\tif (given !== void 0) {\n\t\t\t\tif (value === void 0) value = given;\n\t\t\t\telse if (value !== given) return void 0;\n\t\t\t}\n\t\t}\n\t\treturn value;\n\t}\n\tget offset() {\n\t\treturn this.passProp(\"offset\");\n\t}\n\tget getCoords() {\n\t\treturn this.passProp(\"getCoords\");\n\t}\n\tget overlap() {\n\t\treturn this.passProp(\"overlap\");\n\t}\n\tget resize() {\n\t\treturn this.passProp(\"resize\");\n\t}\n};\nconst showHoverTooltipHost = /* @__PURE__ */ showTooltip.compute([showHoverTooltip], (state) => {\n\tlet tooltips = state.facet(showHoverTooltip);\n\tif (tooltips.length === 0) return null;\n\treturn {\n\t\tpos: Math.min(...tooltips.map((t) => t.pos)),\n\t\tend: Math.max(...tooltips.map((t) => {\n\t\t\tvar _a;\n\t\t\treturn (_a = t.end) !== null && _a !== void 0 ? _a : t.pos;\n\t\t})),\n\t\tcreate: HoverTooltipHost.create,\n\t\tabove: tooltips[0].above,\n\t\tarrow: tooltips.some((t) => t.arrow)\n\t};\n});\nvar HoverPlugin = class {\n\tconstructor(view, source, field, setHover, hoverTime) {\n\t\tthis.view = view;\n\t\tthis.source = source;\n\t\tthis.field = field;\n\t\tthis.setHover = setHover;\n\t\tthis.hoverTime = hoverTime;\n\t\tthis.hoverTimeout = -1;\n\t\tthis.restartTimeout = -1;\n\t\tthis.pending = null;\n\t\tthis.lastMove = {\n\t\t\tx: 0,\n\t\t\ty: 0,\n\t\t\ttarget: view.dom,\n\t\t\ttime: 0\n\t\t};\n\t\tthis.checkHover = this.checkHover.bind(this);\n\t\tview.dom.addEventListener(\"mouseleave\", this.mouseleave = this.mouseleave.bind(this));\n\t\tview.dom.addEventListener(\"mousemove\", this.mousemove = this.mousemove.bind(this));\n\t}\n\tupdate() {\n\t\tif (this.pending) {\n\t\t\tthis.pending = null;\n\t\t\tclearTimeout(this.restartTimeout);\n\t\t\tthis.restartTimeout = setTimeout(() => this.startHover(), 20);\n\t\t}\n\t}\n\tget active() {\n\t\treturn this.view.state.field(this.field);\n\t}\n\tcheckHover() {\n\t\tthis.hoverTimeout = -1;\n\t\tif (this.active.length) return;\n\t\tlet hovered = Date.now() - this.lastMove.time;\n\t\tif (hovered < this.hoverTime) this.hoverTimeout = setTimeout(this.checkHover, this.hoverTime - hovered);\n\t\telse this.startHover();\n\t}\n\tstartHover() {\n\t\tclearTimeout(this.restartTimeout);\n\t\tlet { view, lastMove } = this;\n\t\tlet desc = view.docView.nearest(lastMove.target);\n\t\tif (!desc) return;\n\t\tlet pos, side = 1;\n\t\tif (desc instanceof WidgetView) pos = desc.posAtStart;\n\t\telse {\n\t\t\tpos = view.posAtCoords(lastMove);\n\t\t\tif (pos == null) return;\n\t\t\tlet posCoords = view.coordsAtPos(pos);\n\t\t\tif (!posCoords || lastMove.y < posCoords.top || lastMove.y > posCoords.bottom || lastMove.x < posCoords.left - view.defaultCharacterWidth || lastMove.x > posCoords.right + view.defaultCharacterWidth) return;\n\t\t\tlet bidi = view.bidiSpans(view.state.doc.lineAt(pos)).find((s) => s.from <= pos && s.to >= pos);\n\t\t\tlet rtl = bidi && bidi.dir == Direction.RTL ? -1 : 1;\n\t\t\tside = lastMove.x < posCoords.left ? -rtl : rtl;\n\t\t}\n\t\tlet open = this.source(view, pos, side);\n\t\tif (open === null || open === void 0 ? void 0 : open.then) {\n\t\t\tlet pending = this.pending = { pos };\n\t\t\topen.then((result) => {\n\t\t\t\tif (this.pending == pending) {\n\t\t\t\t\tthis.pending = null;\n\t\t\t\t\tif (result && !(Array.isArray(result) && !result.length)) view.dispatch({ effects: this.setHover.of(Array.isArray(result) ? result : [result]) });\n\t\t\t\t}\n\t\t\t}, (e) => logException(view.state, e, \"hover tooltip\"));\n\t\t} else if (open && !(Array.isArray(open) && !open.length)) view.dispatch({ effects: this.setHover.of(Array.isArray(open) ? open : [open]) });\n\t}\n\tget tooltip() {\n\t\tlet plugin = this.view.plugin(tooltipPlugin);\n\t\tlet index = plugin ? plugin.manager.tooltips.findIndex((t) => t.create == HoverTooltipHost.create) : -1;\n\t\treturn index > -1 ? plugin.manager.tooltipViews[index] : null;\n\t}\n\tmousemove(event) {\n\t\tvar _a, _b;\n\t\tthis.lastMove = {\n\t\t\tx: event.clientX,\n\t\t\ty: event.clientY,\n\t\t\ttarget: event.target,\n\t\t\ttime: Date.now()\n\t\t};\n\t\tif (this.hoverTimeout < 0) this.hoverTimeout = setTimeout(this.checkHover, this.hoverTime);\n\t\tlet { active, tooltip } = this;\n\t\tif (active.length && tooltip && !isInTooltip(tooltip.dom, event) || this.pending) {\n\t\t\tlet { pos } = active[0] || this.pending, end = (_b = (_a = active[0]) === null || _a === void 0 ? void 0 : _a.end) !== null && _b !== void 0 ? _b : pos;\n\t\t\tif (pos == end ? this.view.posAtCoords(this.lastMove) != pos : !isOverRange(this.view, pos, end, event.clientX, event.clientY)) {\n\t\t\t\tthis.view.dispatch({ effects: this.setHover.of([]) });\n\t\t\t\tthis.pending = null;\n\t\t\t}\n\t\t}\n\t}\n\tmouseleave(event) {\n\t\tclearTimeout(this.hoverTimeout);\n\t\tthis.hoverTimeout = -1;\n\t\tlet { active } = this;\n\t\tif (active.length) {\n\t\t\tlet { tooltip } = this;\n\t\t\tif (!(tooltip && tooltip.dom.contains(event.relatedTarget))) this.view.dispatch({ effects: this.setHover.of([]) });\n\t\t\telse this.watchTooltipLeave(tooltip.dom);\n\t\t}\n\t}\n\twatchTooltipLeave(tooltip) {\n\t\tlet watch = (event) => {\n\t\t\ttooltip.removeEventListener(\"mouseleave\", watch);\n\t\t\tif (this.active.length && !this.view.dom.contains(event.relatedTarget)) this.view.dispatch({ effects: this.setHover.of([]) });\n\t\t};\n\t\ttooltip.addEventListener(\"mouseleave\", watch);\n\t}\n\tdestroy() {\n\t\tclearTimeout(this.hoverTimeout);\n\t\tthis.view.dom.removeEventListener(\"mouseleave\", this.mouseleave);\n\t\tthis.view.dom.removeEventListener(\"mousemove\", this.mousemove);\n\t}\n};\nconst tooltipMargin = 4;\nfunction isInTooltip(tooltip, event) {\n\tlet { left, right, top, bottom } = tooltip.getBoundingClientRect(), arrow;\n\tif (arrow = tooltip.querySelector(\".cm-tooltip-arrow\")) {\n\t\tlet arrowRect = arrow.getBoundingClientRect();\n\t\ttop = Math.min(arrowRect.top, top);\n\t\tbottom = Math.max(arrowRect.bottom, bottom);\n\t}\n\treturn event.clientX >= left - tooltipMargin && event.clientX <= right + tooltipMargin && event.clientY >= top - tooltipMargin && event.clientY <= bottom + tooltipMargin;\n}\nfunction isOverRange(view, from, to, x, y, margin) {\n\tlet rect = view.scrollDOM.getBoundingClientRect();\n\tlet docBottom = view.documentTop + view.documentPadding.top + view.contentHeight;\n\tif (rect.left > x || rect.right < x || rect.top > y || Math.min(rect.bottom, docBottom) < y) return false;\n\tlet pos = view.posAtCoords({\n\t\tx,\n\t\ty\n\t}, false);\n\treturn pos >= from && pos <= to;\n}\n/**\nSet up a hover tooltip, which shows up when the pointer hovers\nover ranges of text. The callback is called when the mouse hovers\nover the document text. It should, if there is a tooltip\nassociated with position `pos`, return the tooltip description\n(either directly or in a promise). The `side` argument indicates\non which side of the position the pointer is—it will be -1 if the\npointer is before the position, 1 if after the position.\n\nNote that all hover tooltips are hosted within a single tooltip\ncontainer element. This allows multiple tooltips over the same\nrange to be \"merged\" together without overlapping.\n\nThe return value is a valid [editor extension](https://codemirror.net/6/docs/ref/#state.Extension)\nbut also provides an `active` property holding a state field that\ncan be used to read the currently active tooltips produced by this\nextension.\n*/\nfunction hoverTooltip(source, options = {}) {\n\tlet setHover = StateEffect.define();\n\tlet hoverState = StateField.define({\n\t\tcreate() {\n\t\t\treturn [];\n\t\t},\n\t\tupdate(value, tr) {\n\t\t\tif (value.length) {\n\t\t\t\tif (options.hideOnChange && (tr.docChanged || tr.selection)) value = [];\n\t\t\t\telse if (options.hideOn) value = value.filter((v) => !options.hideOn(tr, v));\n\t\t\t\tif (tr.docChanged) {\n\t\t\t\t\tlet mapped = [];\n\t\t\t\t\tfor (let tooltip of value) {\n\t\t\t\t\t\tlet newPos = tr.changes.mapPos(tooltip.pos, -1, MapMode.TrackDel);\n\t\t\t\t\t\tif (newPos != null) {\n\t\t\t\t\t\t\tlet copy = Object.assign(Object.create(null), tooltip);\n\t\t\t\t\t\t\tcopy.pos = newPos;\n\t\t\t\t\t\t\tif (copy.end != null) copy.end = tr.changes.mapPos(copy.end);\n\t\t\t\t\t\t\tmapped.push(copy);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tvalue = mapped;\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (let effect of tr.effects) {\n\t\t\t\tif (effect.is(setHover)) value = effect.value;\n\t\t\t\tif (effect.is(closeHoverTooltipEffect)) value = [];\n\t\t\t}\n\t\t\treturn value;\n\t\t},\n\t\tprovide: (f) => showHoverTooltip.from(f)\n\t});\n\treturn {\n\t\tactive: hoverState,\n\t\textension: [\n\t\t\thoverState,\n\t\t\tViewPlugin.define((view) => new HoverPlugin(view, source, hoverState, setHover, options.hoverTime || 300)),\n\t\t\tshowHoverTooltipHost\n\t\t]\n\t};\n}\n/**\nGet the active tooltip view for a given tooltip, if available.\n*/\nfunction getTooltip(view, tooltip) {\n\tlet plugin = view.plugin(tooltipPlugin);\n\tif (!plugin) return null;\n\tlet found = plugin.manager.tooltips.indexOf(tooltip);\n\treturn found < 0 ? null : plugin.manager.tooltipViews[found];\n}\nconst closeHoverTooltipEffect = /* @__PURE__ */ StateEffect.define();\nconst panelConfig = /* @__PURE__ */ Facet.define({ combine(configs) {\n\tlet topContainer, bottomContainer;\n\tfor (let c of configs) {\n\t\ttopContainer = topContainer || c.topContainer;\n\t\tbottomContainer = bottomContainer || c.bottomContainer;\n\t}\n\treturn {\n\t\ttopContainer,\n\t\tbottomContainer\n\t};\n} });\n/**\nGet the active panel created by the given constructor, if any.\nThis can be useful when you need access to your panels' DOM\nstructure.\n*/\nfunction getPanel(view, panel) {\n\tlet plugin = view.plugin(panelPlugin);\n\tlet index = plugin ? plugin.specs.indexOf(panel) : -1;\n\treturn index > -1 ? plugin.panels[index] : null;\n}\nconst panelPlugin = /* @__PURE__ */ ViewPlugin.fromClass(class {\n\tconstructor(view) {\n\t\tthis.input = view.state.facet(showPanel);\n\t\tthis.specs = this.input.filter((s) => s);\n\t\tthis.panels = this.specs.map((spec) => spec(view));\n\t\tlet conf = view.state.facet(panelConfig);\n\t\tthis.top = new PanelGroup(view, true, conf.topContainer);\n\t\tthis.bottom = new PanelGroup(view, false, conf.bottomContainer);\n\t\tthis.top.sync(this.panels.filter((p) => p.top));\n\t\tthis.bottom.sync(this.panels.filter((p) => !p.top));\n\t\tfor (let p of this.panels) {\n\t\t\tp.dom.classList.add(\"cm-panel\");\n\t\t\tif (p.mount) p.mount();\n\t\t}\n\t}\n\tupdate(update) {\n\t\tlet conf = update.state.facet(panelConfig);\n\t\tif (this.top.container != conf.topContainer) {\n\t\t\tthis.top.sync([]);\n\t\t\tthis.top = new PanelGroup(update.view, true, conf.topContainer);\n\t\t}\n\t\tif (this.bottom.container != conf.bottomContainer) {\n\t\t\tthis.bottom.sync([]);\n\t\t\tthis.bottom = new PanelGroup(update.view, false, conf.bottomContainer);\n\t\t}\n\t\tthis.top.syncClasses();\n\t\tthis.bottom.syncClasses();\n\t\tlet input = update.state.facet(showPanel);\n\t\tif (input != this.input) {\n\t\t\tlet specs = input.filter((x) => x);\n\t\t\tlet panels = [], top = [], bottom = [], mount = [];\n\t\t\tfor (let spec of specs) {\n\t\t\t\tlet known = this.specs.indexOf(spec), panel;\n\t\t\t\tif (known < 0) {\n\t\t\t\t\tpanel = spec(update.view);\n\t\t\t\t\tmount.push(panel);\n\t\t\t\t} else {\n\t\t\t\t\tpanel = this.panels[known];\n\t\t\t\t\tif (panel.update) panel.update(update);\n\t\t\t\t}\n\t\t\t\tpanels.push(panel);\n\t\t\t\t(panel.top ? top : bottom).push(panel);\n\t\t\t}\n\t\t\tthis.specs = specs;\n\t\t\tthis.panels = panels;\n\t\t\tthis.top.sync(top);\n\t\t\tthis.bottom.sync(bottom);\n\t\t\tfor (let p of mount) {\n\t\t\t\tp.dom.classList.add(\"cm-panel\");\n\t\t\t\tif (p.mount) p.mount();\n\t\t\t}\n\t\t} else for (let p of this.panels) if (p.update) p.update(update);\n\t}\n\tdestroy() {\n\t\tthis.top.sync([]);\n\t\tthis.bottom.sync([]);\n\t}\n}, { provide: (plugin) => EditorView.scrollMargins.of((view) => {\n\tlet value = view.plugin(plugin);\n\treturn value && {\n\t\ttop: value.top.scrollMargin(),\n\t\tbottom: value.bottom.scrollMargin()\n\t};\n}) });\nvar PanelGroup = class {\n\tconstructor(view, top, container) {\n\t\tthis.view = view;\n\t\tthis.top = top;\n\t\tthis.container = container;\n\t\tthis.dom = void 0;\n\t\tthis.classes = \"\";\n\t\tthis.panels = [];\n\t\tthis.syncClasses();\n\t}\n\tsync(panels) {\n\t\tfor (let p of this.panels) if (p.destroy && panels.indexOf(p) < 0) p.destroy();\n\t\tthis.panels = panels;\n\t\tthis.syncDOM();\n\t}\n\tsyncDOM() {\n\t\tif (this.panels.length == 0) {\n\t\t\tif (this.dom) {\n\t\t\t\tthis.dom.remove();\n\t\t\t\tthis.dom = void 0;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tif (!this.dom) {\n\t\t\tthis.dom = document.createElement(\"div\");\n\t\t\tthis.dom.className = this.top ? \"cm-panels cm-panels-top\" : \"cm-panels cm-panels-bottom\";\n\t\t\tthis.dom.style[this.top ? \"top\" : \"bottom\"] = \"0\";\n\t\t\tlet parent = this.container || this.view.dom;\n\t\t\tparent.insertBefore(this.dom, this.top ? parent.firstChild : null);\n\t\t}\n\t\tlet curDOM = this.dom.firstChild;\n\t\tfor (let panel of this.panels) if (panel.dom.parentNode == this.dom) {\n\t\t\twhile (curDOM != panel.dom) curDOM = rm(curDOM);\n\t\t\tcurDOM = curDOM.nextSibling;\n\t\t} else this.dom.insertBefore(panel.dom, curDOM);\n\t\twhile (curDOM) curDOM = rm(curDOM);\n\t}\n\tscrollMargin() {\n\t\treturn !this.dom || this.container ? 0 : Math.max(0, this.top ? this.dom.getBoundingClientRect().bottom - Math.max(0, this.view.scrollDOM.getBoundingClientRect().top) : Math.min(innerHeight, this.view.scrollDOM.getBoundingClientRect().bottom) - this.dom.getBoundingClientRect().top);\n\t}\n\tsyncClasses() {\n\t\tif (!this.container || this.classes == this.view.themeClasses) return;\n\t\tfor (let cls of this.classes.split(\" \")) if (cls) this.container.classList.remove(cls);\n\t\tfor (let cls of (this.classes = this.view.themeClasses).split(\" \")) if (cls) this.container.classList.add(cls);\n\t}\n};\nfunction rm(node) {\n\tlet next = node.nextSibling;\n\tnode.remove();\n\treturn next;\n}\n/**\nOpening a panel is done by providing a constructor function for\nthe panel through this facet. (The panel is closed again when its\nconstructor is no longer provided.) Values of `null` are ignored.\n*/\nconst showPanel = /* @__PURE__ */ Facet.define({ enables: panelPlugin });\n/**\nA gutter marker represents a bit of information attached to a line\nin a specific gutter. Your own custom markers have to extend this\nclass.\n*/\nvar GutterMarker = class extends RangeValue {\n\t/**\n\t@internal\n\t*/\n\tcompare(other) {\n\t\treturn this == other || this.constructor == other.constructor && this.eq(other);\n\t}\n\t/**\n\tCompare this marker to another marker of the same type.\n\t*/\n\teq(other) {\n\t\treturn false;\n\t}\n\t/**\n\tCalled if the marker has a `toDOM` method and its representation\n\twas removed from a gutter.\n\t*/\n\tdestroy(dom) {}\n};\nGutterMarker.prototype.elementClass = \"\";\nGutterMarker.prototype.toDOM = void 0;\nGutterMarker.prototype.mapMode = MapMode.TrackBefore;\nGutterMarker.prototype.startSide = GutterMarker.prototype.endSide = -1;\nGutterMarker.prototype.point = true;\n/**\nFacet used to add a class to all gutter elements for a given line.\nMarkers given to this facet should _only_ define an\n[`elementclass`](https://codemirror.net/6/docs/ref/#view.GutterMarker.elementClass), not a\n[`toDOM`](https://codemirror.net/6/docs/ref/#view.GutterMarker.toDOM) (or the marker will appear\nin all gutters for the line).\n*/\nconst gutterLineClass = /* @__PURE__ */ Facet.define();\n/**\nFacet used to add a class to all gutter elements next to a widget.\nShould not provide widgets with a `toDOM` method.\n*/\nconst gutterWidgetClass = /* @__PURE__ */ Facet.define();\nconst defaults$1 = {\n\tclass: \"\",\n\trenderEmptyElements: false,\n\telementStyle: \"\",\n\tmarkers: () => RangeSet.empty,\n\tlineMarker: () => null,\n\twidgetMarker: () => null,\n\tlineMarkerChange: null,\n\tinitialSpacer: null,\n\tupdateSpacer: null,\n\tdomEventHandlers: {}\n};\nconst activeGutters = /* @__PURE__ */ Facet.define();\n/**\nDefine an editor gutter. The order in which the gutters appear is\ndetermined by their extension priority.\n*/\nfunction gutter(config) {\n\treturn [gutters(), activeGutters.of(Object.assign(Object.assign({}, defaults$1), config))];\n}\nconst unfixGutters = /* @__PURE__ */ Facet.define({ combine: (values) => values.some((x) => x) });\n/**\nThe gutter-drawing plugin is automatically enabled when you add a\ngutter, but you can use this function to explicitly configure it.\n\nUnless `fixed` is explicitly set to `false`, the gutters are\nfixed, meaning they don't scroll along with the content\nhorizontally (except on Internet Explorer, which doesn't support\nCSS [`position:\nsticky`](https://developer.mozilla.org/en-US/docs/Web/CSS/position#sticky)).\n*/\nfunction gutters(config) {\n\tlet result = [gutterView];\n\tif (config && config.fixed === false) result.push(unfixGutters.of(true));\n\treturn result;\n}\nconst gutterView = /* @__PURE__ */ ViewPlugin.fromClass(class {\n\tconstructor(view) {\n\t\tthis.view = view;\n\t\tthis.prevViewport = view.viewport;\n\t\tthis.dom = document.createElement(\"div\");\n\t\tthis.dom.className = \"cm-gutters\";\n\t\tthis.dom.setAttribute(\"aria-hidden\", \"true\");\n\t\tthis.dom.style.minHeight = this.view.contentHeight / this.view.scaleY + \"px\";\n\t\tthis.gutters = view.state.facet(activeGutters).map((conf) => new SingleGutterView(view, conf));\n\t\tfor (let gutter of this.gutters) this.dom.appendChild(gutter.dom);\n\t\tthis.fixed = !view.state.facet(unfixGutters);\n\t\tif (this.fixed) this.dom.style.position = \"sticky\";\n\t\tthis.syncGutters(false);\n\t\tview.scrollDOM.insertBefore(this.dom, view.contentDOM);\n\t}\n\tupdate(update) {\n\t\tif (this.updateGutters(update)) {\n\t\t\tlet vpA = this.prevViewport, vpB = update.view.viewport;\n\t\t\tlet vpOverlap = Math.min(vpA.to, vpB.to) - Math.max(vpA.from, vpB.from);\n\t\t\tthis.syncGutters(vpOverlap < (vpB.to - vpB.from) * .8);\n\t\t}\n\t\tif (update.geometryChanged) this.dom.style.minHeight = this.view.contentHeight / this.view.scaleY + \"px\";\n\t\tif (this.view.state.facet(unfixGutters) != !this.fixed) {\n\t\t\tthis.fixed = !this.fixed;\n\t\t\tthis.dom.style.position = this.fixed ? \"sticky\" : \"\";\n\t\t}\n\t\tthis.prevViewport = update.view.viewport;\n\t}\n\tsyncGutters(detach) {\n\t\tlet after = this.dom.nextSibling;\n\t\tif (detach) this.dom.remove();\n\t\tlet lineClasses = RangeSet.iter(this.view.state.facet(gutterLineClass), this.view.viewport.from);\n\t\tlet classSet = [];\n\t\tlet contexts = this.gutters.map((gutter) => new UpdateContext(gutter, this.view.viewport, -this.view.documentPadding.top));\n\t\tfor (let line of this.view.viewportLineBlocks) {\n\t\t\tif (classSet.length) classSet = [];\n\t\t\tif (Array.isArray(line.type)) {\n\t\t\t\tlet first = true;\n\t\t\t\tfor (let b of line.type) if (b.type == BlockType.Text && first) {\n\t\t\t\t\tadvanceCursor(lineClasses, classSet, b.from);\n\t\t\t\t\tfor (let cx of contexts) cx.line(this.view, b, classSet);\n\t\t\t\t\tfirst = false;\n\t\t\t\t} else if (b.widget) for (let cx of contexts) cx.widget(this.view, b);\n\t\t\t} else if (line.type == BlockType.Text) {\n\t\t\t\tadvanceCursor(lineClasses, classSet, line.from);\n\t\t\t\tfor (let cx of contexts) cx.line(this.view, line, classSet);\n\t\t\t} else if (line.widget) for (let cx of contexts) cx.widget(this.view, line);\n\t\t}\n\t\tfor (let cx of contexts) cx.finish();\n\t\tif (detach) this.view.scrollDOM.insertBefore(this.dom, after);\n\t}\n\tupdateGutters(update) {\n\t\tlet prev = update.startState.facet(activeGutters), cur = update.state.facet(activeGutters);\n\t\tlet change = update.docChanged || update.heightChanged || update.viewportChanged || !RangeSet.eq(update.startState.facet(gutterLineClass), update.state.facet(gutterLineClass), update.view.viewport.from, update.view.viewport.to);\n\t\tif (prev == cur) {\n\t\t\tfor (let gutter of this.gutters) if (gutter.update(update)) change = true;\n\t\t} else {\n\t\t\tchange = true;\n\t\t\tlet gutters = [];\n\t\t\tfor (let conf of cur) {\n\t\t\t\tlet known = prev.indexOf(conf);\n\t\t\t\tif (known < 0) gutters.push(new SingleGutterView(this.view, conf));\n\t\t\t\telse {\n\t\t\t\t\tthis.gutters[known].update(update);\n\t\t\t\t\tgutters.push(this.gutters[known]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (let g of this.gutters) {\n\t\t\t\tg.dom.remove();\n\t\t\t\tif (gutters.indexOf(g) < 0) g.destroy();\n\t\t\t}\n\t\t\tfor (let g of gutters) this.dom.appendChild(g.dom);\n\t\t\tthis.gutters = gutters;\n\t\t}\n\t\treturn change;\n\t}\n\tdestroy() {\n\t\tfor (let view of this.gutters) view.destroy();\n\t\tthis.dom.remove();\n\t}\n}, { provide: (plugin) => EditorView.scrollMargins.of((view) => {\n\tlet value = view.plugin(plugin);\n\tif (!value || value.gutters.length == 0 || !value.fixed) return null;\n\treturn view.textDirection == Direction.LTR ? { left: value.dom.offsetWidth * view.scaleX } : { right: value.dom.offsetWidth * view.scaleX };\n}) });\nfunction asArray(val) {\n\treturn Array.isArray(val) ? val : [val];\n}\nfunction advanceCursor(cursor, collect, pos) {\n\twhile (cursor.value && cursor.from <= pos) {\n\t\tif (cursor.from == pos) collect.push(cursor.value);\n\t\tcursor.next();\n\t}\n}\nvar UpdateContext = class {\n\tconstructor(gutter, viewport, height) {\n\t\tthis.gutter = gutter;\n\t\tthis.height = height;\n\t\tthis.i = 0;\n\t\tthis.cursor = RangeSet.iter(gutter.markers, viewport.from);\n\t}\n\taddElement(view, block, markers) {\n\t\tlet { gutter } = this, above = (block.top - this.height) / view.scaleY, height = block.height / view.scaleY;\n\t\tif (this.i == gutter.elements.length) {\n\t\t\tlet newElt = new GutterElement(view, height, above, markers);\n\t\t\tgutter.elements.push(newElt);\n\t\t\tgutter.dom.appendChild(newElt.dom);\n\t\t} else gutter.elements[this.i].update(view, height, above, markers);\n\t\tthis.height = block.bottom;\n\t\tthis.i++;\n\t}\n\tline(view, line, extraMarkers) {\n\t\tlet localMarkers = [];\n\t\tadvanceCursor(this.cursor, localMarkers, line.from);\n\t\tif (extraMarkers.length) localMarkers = localMarkers.concat(extraMarkers);\n\t\tlet forLine = this.gutter.config.lineMarker(view, line, localMarkers);\n\t\tif (forLine) localMarkers.unshift(forLine);\n\t\tlet gutter = this.gutter;\n\t\tif (localMarkers.length == 0 && !gutter.config.renderEmptyElements) return;\n\t\tthis.addElement(view, line, localMarkers);\n\t}\n\twidget(view, block) {\n\t\tlet marker = this.gutter.config.widgetMarker(view, block.widget, block), markers = marker ? [marker] : null;\n\t\tfor (let cls of view.state.facet(gutterWidgetClass)) {\n\t\t\tlet marker = cls(view, block.widget, block);\n\t\t\tif (marker) (markers || (markers = [])).push(marker);\n\t\t}\n\t\tif (markers) this.addElement(view, block, markers);\n\t}\n\tfinish() {\n\t\tlet gutter = this.gutter;\n\t\twhile (gutter.elements.length > this.i) {\n\t\t\tlet last = gutter.elements.pop();\n\t\t\tgutter.dom.removeChild(last.dom);\n\t\t\tlast.destroy();\n\t\t}\n\t}\n};\nvar SingleGutterView = class {\n\tconstructor(view, config) {\n\t\tthis.view = view;\n\t\tthis.config = config;\n\t\tthis.elements = [];\n\t\tthis.spacer = null;\n\t\tthis.dom = document.createElement(\"div\");\n\t\tthis.dom.className = \"cm-gutter\" + (this.config.class ? \" \" + this.config.class : \"\");\n\t\tfor (let prop in config.domEventHandlers) this.dom.addEventListener(prop, (event) => {\n\t\t\tlet target = event.target, y;\n\t\t\tif (target != this.dom && this.dom.contains(target)) {\n\t\t\t\twhile (target.parentNode != this.dom) target = target.parentNode;\n\t\t\t\tlet rect = target.getBoundingClientRect();\n\t\t\t\ty = (rect.top + rect.bottom) / 2;\n\t\t\t} else y = event.clientY;\n\t\t\tlet line = view.lineBlockAtHeight(y - view.documentTop);\n\t\t\tif (config.domEventHandlers[prop](view, line, event)) event.preventDefault();\n\t\t});\n\t\tthis.markers = asArray(config.markers(view));\n\t\tif (config.initialSpacer) {\n\t\t\tthis.spacer = new GutterElement(view, 0, 0, [config.initialSpacer(view)]);\n\t\t\tthis.dom.appendChild(this.spacer.dom);\n\t\t\tthis.spacer.dom.style.cssText += \"visibility: hidden; pointer-events: none\";\n\t\t}\n\t}\n\tupdate(update) {\n\t\tlet prevMarkers = this.markers;\n\t\tthis.markers = asArray(this.config.markers(update.view));\n\t\tif (this.spacer && this.config.updateSpacer) {\n\t\t\tlet updated = this.config.updateSpacer(this.spacer.markers[0], update);\n\t\t\tif (updated != this.spacer.markers[0]) this.spacer.update(update.view, 0, 0, [updated]);\n\t\t}\n\t\tlet vp = update.view.viewport;\n\t\treturn !RangeSet.eq(this.markers, prevMarkers, vp.from, vp.to) || (this.config.lineMarkerChange ? this.config.lineMarkerChange(update) : false);\n\t}\n\tdestroy() {\n\t\tfor (let elt of this.elements) elt.destroy();\n\t}\n};\nvar GutterElement = class {\n\tconstructor(view, height, above, markers) {\n\t\tthis.height = -1;\n\t\tthis.above = 0;\n\t\tthis.markers = [];\n\t\tthis.dom = document.createElement(\"div\");\n\t\tthis.dom.className = \"cm-gutterElement\";\n\t\tthis.update(view, height, above, markers);\n\t}\n\tupdate(view, height, above, markers) {\n\t\tif (this.height != height) {\n\t\t\tthis.height = height;\n\t\t\tthis.dom.style.height = height + \"px\";\n\t\t}\n\t\tif (this.above != above) this.dom.style.marginTop = (this.above = above) ? above + \"px\" : \"\";\n\t\tif (!sameMarkers(this.markers, markers)) this.setMarkers(view, markers);\n\t}\n\tsetMarkers(view, markers) {\n\t\tlet cls = \"cm-gutterElement\", domPos = this.dom.firstChild;\n\t\tfor (let iNew = 0, iOld = 0;;) {\n\t\t\tlet skipTo = iOld, marker = iNew < markers.length ? markers[iNew++] : null, matched = false;\n\t\t\tif (marker) {\n\t\t\t\tlet c = marker.elementClass;\n\t\t\t\tif (c) cls += \" \" + c;\n\t\t\t\tfor (let i = iOld; i < this.markers.length; i++) if (this.markers[i].compare(marker)) {\n\t\t\t\t\tskipTo = i;\n\t\t\t\t\tmatched = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} else skipTo = this.markers.length;\n\t\t\twhile (iOld < skipTo) {\n\t\t\t\tlet next = this.markers[iOld++];\n\t\t\t\tif (next.toDOM) {\n\t\t\t\t\tnext.destroy(domPos);\n\t\t\t\t\tlet after = domPos.nextSibling;\n\t\t\t\t\tdomPos.remove();\n\t\t\t\t\tdomPos = after;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!marker) break;\n\t\t\tif (marker.toDOM) if (matched) domPos = domPos.nextSibling;\n\t\t\telse this.dom.insertBefore(marker.toDOM(view), domPos);\n\t\t\tif (matched) iOld++;\n\t\t}\n\t\tthis.dom.className = cls;\n\t\tthis.markers = markers;\n\t}\n\tdestroy() {\n\t\tthis.setMarkers(null, []);\n\t}\n};\nfunction sameMarkers(a, b) {\n\tif (a.length != b.length) return false;\n\tfor (let i = 0; i < a.length; i++) if (!a[i].compare(b[i])) return false;\n\treturn true;\n}\n/**\nFacet used to provide markers to the line number gutter.\n*/\nconst lineNumberMarkers = /* @__PURE__ */ Facet.define();\n/**\nFacet used to create markers in the line number gutter next to widgets.\n*/\nconst lineNumberWidgetMarker = /* @__PURE__ */ Facet.define();\nconst lineNumberConfig = /* @__PURE__ */ Facet.define({ combine(values) {\n\treturn combineConfig(values, {\n\t\tformatNumber: String,\n\t\tdomEventHandlers: {}\n\t}, { domEventHandlers(a, b) {\n\t\tlet result = Object.assign({}, a);\n\t\tfor (let event in b) {\n\t\t\tlet exists = result[event], add = b[event];\n\t\t\tresult[event] = exists ? (view, line, event) => exists(view, line, event) || add(view, line, event) : add;\n\t\t}\n\t\treturn result;\n\t} });\n} });\nvar NumberMarker = class extends GutterMarker {\n\tconstructor(number) {\n\t\tsuper();\n\t\tthis.number = number;\n\t}\n\teq(other) {\n\t\treturn this.number == other.number;\n\t}\n\ttoDOM() {\n\t\treturn document.createTextNode(this.number);\n\t}\n};\nfunction formatNumber(view, number) {\n\treturn view.state.facet(lineNumberConfig).formatNumber(number, view.state);\n}\nconst lineNumberGutter = /* @__PURE__ */ activeGutters.compute([lineNumberConfig], (state) => ({\n\tclass: \"cm-lineNumbers\",\n\trenderEmptyElements: false,\n\tmarkers(view) {\n\t\treturn view.state.facet(lineNumberMarkers);\n\t},\n\tlineMarker(view, line, others) {\n\t\tif (others.some((m) => m.toDOM)) return null;\n\t\treturn new NumberMarker(formatNumber(view, view.state.doc.lineAt(line.from).number));\n\t},\n\twidgetMarker: (view, widget, block) => {\n\t\tfor (let m of view.state.facet(lineNumberWidgetMarker)) {\n\t\t\tlet result = m(view, widget, block);\n\t\t\tif (result) return result;\n\t\t}\n\t\treturn null;\n\t},\n\tlineMarkerChange: (update) => update.startState.facet(lineNumberConfig) != update.state.facet(lineNumberConfig),\n\tinitialSpacer(view) {\n\t\treturn new NumberMarker(formatNumber(view, maxLineNumber(view.state.doc.lines)));\n\t},\n\tupdateSpacer(spacer, update) {\n\t\tlet max = formatNumber(update.view, maxLineNumber(update.view.state.doc.lines));\n\t\treturn max == spacer.number ? spacer : new NumberMarker(max);\n\t},\n\tdomEventHandlers: state.facet(lineNumberConfig).domEventHandlers\n}));\n/**\nCreate a line number gutter extension.\n*/\nfunction lineNumbers(config = {}) {\n\treturn [\n\t\tlineNumberConfig.of(config),\n\t\tgutters(),\n\t\tlineNumberGutter\n\t];\n}\nfunction maxLineNumber(lines) {\n\tlet last = 9;\n\twhile (last < lines) last = last * 10 + 9;\n\treturn last;\n}\nconst activeLineGutterMarker = /* @__PURE__ */ new class extends GutterMarker {\n\tconstructor() {\n\t\tsuper(...arguments);\n\t\tthis.elementClass = \"cm-activeLineGutter\";\n\t}\n}();\nconst activeLineGutterHighlighter = /* @__PURE__ */ gutterLineClass.compute([\"selection\"], (state) => {\n\tlet marks = [], last = -1;\n\tfor (let range of state.selection.ranges) {\n\t\tlet linePos = state.doc.lineAt(range.head).from;\n\t\tif (linePos > last) {\n\t\t\tlast = linePos;\n\t\t\tmarks.push(activeLineGutterMarker.range(linePos));\n\t\t}\n\t}\n\treturn RangeSet.of(marks);\n});\n/**\nReturns an extension that adds a `cm-activeLineGutter` class to\nall gutter elements on the [active\nline](https://codemirror.net/6/docs/ref/#view.highlightActiveLine).\n*/\nfunction highlightActiveLineGutter() {\n\treturn activeLineGutterHighlighter;\n}\n//#endregion\n//#region ../../node_modules/.pnpm/crelt@1.0.6/node_modules/crelt/index.js\nfunction crelt() {\n\tvar elt = arguments[0];\n\tif (typeof elt == \"string\") elt = document.createElement(elt);\n\tvar i = 1, next = arguments[1];\n\tif (next && typeof next == \"object\" && next.nodeType == null && !Array.isArray(next)) {\n\t\tfor (var name in next) if (Object.prototype.hasOwnProperty.call(next, name)) {\n\t\t\tvar value = next[name];\n\t\t\tif (typeof value == \"string\") elt.setAttribute(name, value);\n\t\t\telse if (value != null) elt[name] = value;\n\t\t}\n\t\ti++;\n\t}\n\tfor (; i < arguments.length; i++) add(elt, arguments[i]);\n\treturn elt;\n}\nfunction add(elt, child) {\n\tif (typeof child == \"string\") elt.appendChild(document.createTextNode(child));\n\telse if (child == null) {} else if (child.nodeType != null) elt.appendChild(child);\n\telse if (Array.isArray(child)) for (var i = 0; i < child.length; i++) add(elt, child[i]);\n\telse throw new RangeError(\"Unsupported child node: \" + child);\n}\n//#endregion\n//#region ../../node_modules/.pnpm/@codemirror+lint@6.8.5/node_modules/@codemirror/lint/dist/index.js\nvar SelectedDiagnostic = class {\n\tconstructor(from, to, diagnostic) {\n\t\tthis.from = from;\n\t\tthis.to = to;\n\t\tthis.diagnostic = diagnostic;\n\t}\n};\nvar LintState = class LintState {\n\tconstructor(diagnostics, panel, selected) {\n\t\tthis.diagnostics = diagnostics;\n\t\tthis.panel = panel;\n\t\tthis.selected = selected;\n\t}\n\tstatic init(diagnostics, panel, state) {\n\t\tlet diagnosticFilter = state.facet(lintConfig).markerFilter;\n\t\tif (diagnosticFilter) diagnostics = diagnosticFilter(diagnostics, state);\n\t\tlet sorted = diagnostics.slice().sort((a, b) => a.from - b.from || a.to - b.to);\n\t\tlet deco = new RangeSetBuilder(), active = [], pos = 0;\n\t\tfor (let i = 0;;) {\n\t\t\tlet next = i == sorted.length ? null : sorted[i];\n\t\t\tif (!next && !active.length) break;\n\t\t\tlet from, to;\n\t\t\tif (active.length) {\n\t\t\t\tfrom = pos;\n\t\t\t\tto = active.reduce((p, d) => Math.min(p, d.to), next && next.from > from ? next.from : 1e8);\n\t\t\t} else {\n\t\t\t\tfrom = next.from;\n\t\t\t\tto = next.to;\n\t\t\t\tactive.push(next);\n\t\t\t\ti++;\n\t\t\t}\n\t\t\twhile (i < sorted.length) {\n\t\t\t\tlet next = sorted[i];\n\t\t\t\tif (next.from == from && (next.to > next.from || next.to == from)) {\n\t\t\t\t\tactive.push(next);\n\t\t\t\t\ti++;\n\t\t\t\t\tto = Math.min(next.to, to);\n\t\t\t\t} else {\n\t\t\t\t\tto = Math.min(next.from, to);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tlet sev = maxSeverity(active);\n\t\t\tif (active.some((d) => d.from == d.to || d.from == d.to - 1 && state.doc.lineAt(d.from).to == d.from)) deco.add(from, from, Decoration.widget({\n\t\t\t\twidget: new DiagnosticWidget(sev),\n\t\t\t\tdiagnostics: active.slice()\n\t\t\t}));\n\t\t\telse {\n\t\t\t\tlet markClass = active.reduce((c, d) => d.markClass ? c + \" \" + d.markClass : c, \"\");\n\t\t\t\tdeco.add(from, to, Decoration.mark({\n\t\t\t\t\tclass: \"cm-lintRange cm-lintRange-\" + sev + markClass,\n\t\t\t\t\tdiagnostics: active.slice(),\n\t\t\t\t\tinclusiveEnd: active.some((a) => a.to > to)\n\t\t\t\t}));\n\t\t\t}\n\t\t\tpos = to;\n\t\t\tfor (let i = 0; i < active.length; i++) if (active[i].to <= pos) active.splice(i--, 1);\n\t\t}\n\t\tlet set = deco.finish();\n\t\treturn new LintState(set, panel, findDiagnostic(set));\n\t}\n};\nfunction findDiagnostic(diagnostics, diagnostic = null, after = 0) {\n\tlet found = null;\n\tdiagnostics.between(after, 1e9, (from, to, { spec }) => {\n\t\tif (diagnostic && spec.diagnostics.indexOf(diagnostic) < 0) return;\n\t\tif (!found) found = new SelectedDiagnostic(from, to, diagnostic || spec.diagnostics[0]);\n\t\telse if (spec.diagnostics.indexOf(found.diagnostic) < 0) return false;\n\t\telse found = new SelectedDiagnostic(found.from, to, found.diagnostic);\n\t});\n\treturn found;\n}\nfunction hideTooltip(tr, tooltip) {\n\tlet from = tooltip.pos, to = tooltip.end || from;\n\tlet result = tr.state.facet(lintConfig).hideOn(tr, from, to);\n\tif (result != null) return result;\n\tlet line = tr.startState.doc.lineAt(tooltip.pos);\n\treturn !!(tr.effects.some((e) => e.is(setDiagnosticsEffect)) || tr.changes.touchesRange(line.from, Math.max(line.to, to)));\n}\nfunction maybeEnableLint(state, effects) {\n\treturn state.field(lintState, false) ? effects : effects.concat(StateEffect.appendConfig.of(lintExtensions));\n}\n/**\nReturns a transaction spec which updates the current set of\ndiagnostics, and enables the lint extension if if wasn't already\nactive.\n*/\nfunction setDiagnostics(state, diagnostics) {\n\treturn { effects: maybeEnableLint(state, [setDiagnosticsEffect.of(diagnostics)]) };\n}\n/**\nThe state effect that updates the set of active diagnostics. Can\nbe useful when writing an extension that needs to track these.\n*/\nconst setDiagnosticsEffect = /* @__PURE__ */ StateEffect.define();\nconst togglePanel$1 = /* @__PURE__ */ StateEffect.define();\nconst movePanelSelection = /* @__PURE__ */ StateEffect.define();\nconst lintState = /* @__PURE__ */ StateField.define({\n\tcreate() {\n\t\treturn new LintState(Decoration.none, null, null);\n\t},\n\tupdate(value, tr) {\n\t\tif (tr.docChanged && value.diagnostics.size) {\n\t\t\tlet mapped = value.diagnostics.map(tr.changes), selected = null, panel = value.panel;\n\t\t\tif (value.selected) {\n\t\t\t\tlet selPos = tr.changes.mapPos(value.selected.from, 1);\n\t\t\t\tselected = findDiagnostic(mapped, value.selected.diagnostic, selPos) || findDiagnostic(mapped, null, selPos);\n\t\t\t}\n\t\t\tif (!mapped.size && panel && tr.state.facet(lintConfig).autoPanel) panel = null;\n\t\t\tvalue = new LintState(mapped, panel, selected);\n\t\t}\n\t\tfor (let effect of tr.effects) if (effect.is(setDiagnosticsEffect)) {\n\t\t\tlet panel = !tr.state.facet(lintConfig).autoPanel ? value.panel : effect.value.length ? LintPanel.open : null;\n\t\t\tvalue = LintState.init(effect.value, panel, tr.state);\n\t\t} else if (effect.is(togglePanel$1)) value = new LintState(value.diagnostics, effect.value ? LintPanel.open : null, value.selected);\n\t\telse if (effect.is(movePanelSelection)) value = new LintState(value.diagnostics, value.panel, effect.value);\n\t\treturn value;\n\t},\n\tprovide: (f) => [showPanel.from(f, (val) => val.panel), EditorView.decorations.from(f, (s) => s.diagnostics)]\n});\nconst activeMark = /* @__PURE__ */ Decoration.mark({ class: \"cm-lintRange cm-lintRange-active\" });\nfunction lintTooltip(view, pos, side) {\n\tlet { diagnostics } = view.state.field(lintState);\n\tlet found, start = -1, end = -1;\n\tdiagnostics.between(pos - (side < 0 ? 1 : 0), pos + (side > 0 ? 1 : 0), (from, to, { spec }) => {\n\t\tif (pos >= from && pos <= to && (from == to || (pos > from || side > 0) && (pos < to || side < 0))) {\n\t\t\tfound = spec.diagnostics;\n\t\t\tstart = from;\n\t\t\tend = to;\n\t\t\treturn false;\n\t\t}\n\t});\n\tlet diagnosticFilter = view.state.facet(lintConfig).tooltipFilter;\n\tif (found && diagnosticFilter) found = diagnosticFilter(found, view.state);\n\tif (!found) return null;\n\treturn {\n\t\tpos: start,\n\t\tend,\n\t\tabove: view.state.doc.lineAt(start).to < end,\n\t\tcreate() {\n\t\t\treturn { dom: diagnosticsTooltip(view, found) };\n\t\t}\n\t};\n}\nfunction diagnosticsTooltip(view, diagnostics) {\n\treturn crelt(\"ul\", { class: \"cm-tooltip-lint\" }, diagnostics.map((d) => renderDiagnostic(view, d, false)));\n}\n/**\nCommand to open and focus the lint panel.\n*/\nconst openLintPanel = (view) => {\n\tlet field = view.state.field(lintState, false);\n\tif (!field || !field.panel) view.dispatch({ effects: maybeEnableLint(view.state, [togglePanel$1.of(true)]) });\n\tlet panel = getPanel(view, LintPanel.open);\n\tif (panel) panel.dom.querySelector(\".cm-panel-lint ul\").focus();\n\treturn true;\n};\n/**\nCommand to close the lint panel, when open.\n*/\nconst closeLintPanel = (view) => {\n\tlet field = view.state.field(lintState, false);\n\tif (!field || !field.panel) return false;\n\tview.dispatch({ effects: togglePanel$1.of(false) });\n\treturn true;\n};\n/**\nMove the selection to the next diagnostic.\n*/\nconst nextDiagnostic = (view) => {\n\tlet field = view.state.field(lintState, false);\n\tif (!field) return false;\n\tlet sel = view.state.selection.main, next = field.diagnostics.iter(sel.to + 1);\n\tif (!next.value) {\n\t\tnext = field.diagnostics.iter(0);\n\t\tif (!next.value || next.from == sel.from && next.to == sel.to) return false;\n\t}\n\tview.dispatch({\n\t\tselection: {\n\t\t\tanchor: next.from,\n\t\t\thead: next.to\n\t\t},\n\t\tscrollIntoView: true\n\t});\n\treturn true;\n};\n/**\nA set of default key bindings for the lint functionality.\n\n- Ctrl-Shift-m (Cmd-Shift-m on macOS): [`openLintPanel`](https://codemirror.net/6/docs/ref/#lint.openLintPanel)\n- F8: [`nextDiagnostic`](https://codemirror.net/6/docs/ref/#lint.nextDiagnostic)\n*/\nconst lintKeymap = [{\n\tkey: \"Mod-Shift-m\",\n\trun: openLintPanel,\n\tpreventDefault: true\n}, {\n\tkey: \"F8\",\n\trun: nextDiagnostic\n}];\nconst lintPlugin = /* @__PURE__ */ ViewPlugin.fromClass(class {\n\tconstructor(view) {\n\t\tthis.view = view;\n\t\tthis.timeout = -1;\n\t\tthis.set = true;\n\t\tlet { delay } = view.state.facet(lintConfig);\n\t\tthis.lintTime = Date.now() + delay;\n\t\tthis.run = this.run.bind(this);\n\t\tthis.timeout = setTimeout(this.run, delay);\n\t}\n\trun() {\n\t\tclearTimeout(this.timeout);\n\t\tlet now = Date.now();\n\t\tif (now < this.lintTime - 10) this.timeout = setTimeout(this.run, this.lintTime - now);\n\t\telse {\n\t\t\tthis.set = false;\n\t\t\tlet { state } = this.view, { sources } = state.facet(lintConfig);\n\t\t\tif (sources.length) batchResults(sources.map((s) => Promise.resolve(s(this.view))), (annotations) => {\n\t\t\t\tif (this.view.state.doc == state.doc) this.view.dispatch(setDiagnostics(this.view.state, annotations.reduce((a, b) => a.concat(b))));\n\t\t\t}, (error) => {\n\t\t\t\tlogException(this.view.state, error);\n\t\t\t});\n\t\t}\n\t}\n\tupdate(update) {\n\t\tlet config = update.state.facet(lintConfig);\n\t\tif (update.docChanged || config != update.startState.facet(lintConfig) || config.needsRefresh && config.needsRefresh(update)) {\n\t\t\tthis.lintTime = Date.now() + config.delay;\n\t\t\tif (!this.set) {\n\t\t\t\tthis.set = true;\n\t\t\t\tthis.timeout = setTimeout(this.run, config.delay);\n\t\t\t}\n\t\t}\n\t}\n\tforce() {\n\t\tif (this.set) {\n\t\t\tthis.lintTime = Date.now();\n\t\t\tthis.run();\n\t\t}\n\t}\n\tdestroy() {\n\t\tclearTimeout(this.timeout);\n\t}\n});\nfunction batchResults(promises, sink, error) {\n\tlet collected = [], timeout = -1;\n\tfor (let p of promises) p.then((value) => {\n\t\tcollected.push(value);\n\t\tclearTimeout(timeout);\n\t\tif (collected.length == promises.length) sink(collected);\n\t\telse timeout = setTimeout(() => sink(collected), 200);\n\t}, error);\n}\nconst lintConfig = /* @__PURE__ */ Facet.define({ combine(input) {\n\treturn Object.assign({ sources: input.map((i) => i.source).filter((x) => x != null) }, combineConfig(input.map((i) => i.config), {\n\t\tdelay: 750,\n\t\tmarkerFilter: null,\n\t\ttooltipFilter: null,\n\t\tneedsRefresh: null,\n\t\thideOn: () => null\n\t}, { needsRefresh: (a, b) => !a ? b : !b ? a : (u) => a(u) || b(u) }));\n} });\n/**\nGiven a diagnostic source, this function returns an extension that\nenables linting with that source. It will be called whenever the\neditor is idle (after its content changed). If `null` is given as\nsource, this only configures the lint extension.\n*/\nfunction linter(source, config = {}) {\n\treturn [\n\t\tlintConfig.of({\n\t\t\tsource,\n\t\t\tconfig\n\t\t}),\n\t\tlintPlugin,\n\t\tlintExtensions\n\t];\n}\n/**\nForces any linters [configured](https://codemirror.net/6/docs/ref/#lint.linter) to run when the\neditor is idle to run right away.\n*/\nfunction forceLinting(view) {\n\tlet plugin = view.plugin(lintPlugin);\n\tif (plugin) plugin.force();\n}\nfunction assignKeys(actions) {\n\tlet assigned = [];\n\tif (actions) actions: for (let { name } of actions) {\n\t\tfor (let i = 0; i < name.length; i++) {\n\t\t\tlet ch = name[i];\n\t\t\tif (/[a-zA-Z]/.test(ch) && !assigned.some((c) => c.toLowerCase() == ch.toLowerCase())) {\n\t\t\t\tassigned.push(ch);\n\t\t\t\tcontinue actions;\n\t\t\t}\n\t\t}\n\t\tassigned.push(\"\");\n\t}\n\treturn assigned;\n}\nfunction renderDiagnostic(view, diagnostic, inPanel) {\n\tvar _a;\n\tlet keys = inPanel ? assignKeys(diagnostic.actions) : [];\n\treturn crelt(\"li\", { class: \"cm-diagnostic cm-diagnostic-\" + diagnostic.severity }, crelt(\"span\", { class: \"cm-diagnosticText\" }, diagnostic.renderMessage ? diagnostic.renderMessage(view) : diagnostic.message), (_a = diagnostic.actions) === null || _a === void 0 ? void 0 : _a.map((action, i) => {\n\t\tlet fired = false, click = (e) => {\n\t\t\te.preventDefault();\n\t\t\tif (fired) return;\n\t\t\tfired = true;\n\t\t\tlet found = findDiagnostic(view.state.field(lintState).diagnostics, diagnostic);\n\t\t\tif (found) action.apply(view, found.from, found.to);\n\t\t};\n\t\tlet { name } = action, keyIndex = keys[i] ? name.indexOf(keys[i]) : -1;\n\t\tlet nameElt = keyIndex < 0 ? name : [\n\t\t\tname.slice(0, keyIndex),\n\t\t\tcrelt(\"u\", name.slice(keyIndex, keyIndex + 1)),\n\t\t\tname.slice(keyIndex + 1)\n\t\t];\n\t\treturn crelt(\"button\", {\n\t\t\ttype: \"button\",\n\t\t\tclass: \"cm-diagnosticAction\",\n\t\t\tonclick: click,\n\t\t\tonmousedown: click,\n\t\t\t\"aria-label\": ` Action: ${name}${keyIndex < 0 ? \"\" : ` (access key \"${keys[i]})\"`}.`\n\t\t}, nameElt);\n\t}), diagnostic.source && crelt(\"div\", { class: \"cm-diagnosticSource\" }, diagnostic.source));\n}\nvar DiagnosticWidget = class extends WidgetType {\n\tconstructor(sev) {\n\t\tsuper();\n\t\tthis.sev = sev;\n\t}\n\teq(other) {\n\t\treturn other.sev == this.sev;\n\t}\n\ttoDOM() {\n\t\treturn crelt(\"span\", { class: \"cm-lintPoint cm-lintPoint-\" + this.sev });\n\t}\n};\nvar PanelItem = class {\n\tconstructor(view, diagnostic) {\n\t\tthis.diagnostic = diagnostic;\n\t\tthis.id = \"item_\" + Math.floor(Math.random() * 4294967295).toString(16);\n\t\tthis.dom = renderDiagnostic(view, diagnostic, true);\n\t\tthis.dom.id = this.id;\n\t\tthis.dom.setAttribute(\"role\", \"option\");\n\t}\n};\nvar LintPanel = class LintPanel {\n\tconstructor(view) {\n\t\tthis.view = view;\n\t\tthis.items = [];\n\t\tlet onkeydown = (event) => {\n\t\t\tif (event.keyCode == 27) {\n\t\t\t\tcloseLintPanel(this.view);\n\t\t\t\tthis.view.focus();\n\t\t\t} else if (event.keyCode == 38 || event.keyCode == 33) this.moveSelection((this.selectedIndex - 1 + this.items.length) % this.items.length);\n\t\t\telse if (event.keyCode == 40 || event.keyCode == 34) this.moveSelection((this.selectedIndex + 1) % this.items.length);\n\t\t\telse if (event.keyCode == 36) this.moveSelection(0);\n\t\t\telse if (event.keyCode == 35) this.moveSelection(this.items.length - 1);\n\t\t\telse if (event.keyCode == 13) this.view.focus();\n\t\t\telse if (event.keyCode >= 65 && event.keyCode <= 90 && this.selectedIndex >= 0) {\n\t\t\t\tlet { diagnostic } = this.items[this.selectedIndex], keys = assignKeys(diagnostic.actions);\n\t\t\t\tfor (let i = 0; i < keys.length; i++) if (keys[i].toUpperCase().charCodeAt(0) == event.keyCode) {\n\t\t\t\t\tlet found = findDiagnostic(this.view.state.field(lintState).diagnostics, diagnostic);\n\t\t\t\t\tif (found) diagnostic.actions[i].apply(view, found.from, found.to);\n\t\t\t\t}\n\t\t\t} else return;\n\t\t\tevent.preventDefault();\n\t\t};\n\t\tlet onclick = (event) => {\n\t\t\tfor (let i = 0; i < this.items.length; i++) if (this.items[i].dom.contains(event.target)) this.moveSelection(i);\n\t\t};\n\t\tthis.list = crelt(\"ul\", {\n\t\t\ttabIndex: 0,\n\t\t\trole: \"listbox\",\n\t\t\t\"aria-label\": this.view.state.phrase(\"Diagnostics\"),\n\t\t\tonkeydown,\n\t\t\tonclick\n\t\t});\n\t\tthis.dom = crelt(\"div\", { class: \"cm-panel-lint\" }, this.list, crelt(\"button\", {\n\t\t\ttype: \"button\",\n\t\t\tname: \"close\",\n\t\t\t\"aria-label\": this.view.state.phrase(\"close\"),\n\t\t\tonclick: () => closeLintPanel(this.view)\n\t\t}, \"×\"));\n\t\tthis.update();\n\t}\n\tget selectedIndex() {\n\t\tlet selected = this.view.state.field(lintState).selected;\n\t\tif (!selected) return -1;\n\t\tfor (let i = 0; i < this.items.length; i++) if (this.items[i].diagnostic == selected.diagnostic) return i;\n\t\treturn -1;\n\t}\n\tupdate() {\n\t\tlet { diagnostics, selected } = this.view.state.field(lintState);\n\t\tlet i = 0, needsSync = false, newSelectedItem = null;\n\t\tlet seen = /* @__PURE__ */ new Set();\n\t\tdiagnostics.between(0, this.view.state.doc.length, (_start, _end, { spec }) => {\n\t\t\tfor (let diagnostic of spec.diagnostics) {\n\t\t\t\tif (seen.has(diagnostic)) continue;\n\t\t\t\tseen.add(diagnostic);\n\t\t\t\tlet found = -1, item;\n\t\t\t\tfor (let j = i; j < this.items.length; j++) if (this.items[j].diagnostic == diagnostic) {\n\t\t\t\t\tfound = j;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (found < 0) {\n\t\t\t\t\titem = new PanelItem(this.view, diagnostic);\n\t\t\t\t\tthis.items.splice(i, 0, item);\n\t\t\t\t\tneedsSync = true;\n\t\t\t\t} else {\n\t\t\t\t\titem = this.items[found];\n\t\t\t\t\tif (found > i) {\n\t\t\t\t\t\tthis.items.splice(i, found - i);\n\t\t\t\t\t\tneedsSync = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (selected && item.diagnostic == selected.diagnostic) {\n\t\t\t\t\tif (!item.dom.hasAttribute(\"aria-selected\")) {\n\t\t\t\t\t\titem.dom.setAttribute(\"aria-selected\", \"true\");\n\t\t\t\t\t\tnewSelectedItem = item;\n\t\t\t\t\t}\n\t\t\t\t} else if (item.dom.hasAttribute(\"aria-selected\")) item.dom.removeAttribute(\"aria-selected\");\n\t\t\t\ti++;\n\t\t\t}\n\t\t});\n\t\twhile (i < this.items.length && !(this.items.length == 1 && this.items[0].diagnostic.from < 0)) {\n\t\t\tneedsSync = true;\n\t\t\tthis.items.pop();\n\t\t}\n\t\tif (this.items.length == 0) {\n\t\t\tthis.items.push(new PanelItem(this.view, {\n\t\t\t\tfrom: -1,\n\t\t\t\tto: -1,\n\t\t\t\tseverity: \"info\",\n\t\t\t\tmessage: this.view.state.phrase(\"No diagnostics\")\n\t\t\t}));\n\t\t\tneedsSync = true;\n\t\t}\n\t\tif (newSelectedItem) {\n\t\t\tthis.list.setAttribute(\"aria-activedescendant\", newSelectedItem.id);\n\t\t\tthis.view.requestMeasure({\n\t\t\t\tkey: this,\n\t\t\t\tread: () => ({\n\t\t\t\t\tsel: newSelectedItem.dom.getBoundingClientRect(),\n\t\t\t\t\tpanel: this.list.getBoundingClientRect()\n\t\t\t\t}),\n\t\t\t\twrite: ({ sel, panel }) => {\n\t\t\t\t\tlet scaleY = panel.height / this.list.offsetHeight;\n\t\t\t\t\tif (sel.top < panel.top) this.list.scrollTop -= (panel.top - sel.top) / scaleY;\n\t\t\t\t\telse if (sel.bottom > panel.bottom) this.list.scrollTop += (sel.bottom - panel.bottom) / scaleY;\n\t\t\t\t}\n\t\t\t});\n\t\t} else if (this.selectedIndex < 0) this.list.removeAttribute(\"aria-activedescendant\");\n\t\tif (needsSync) this.sync();\n\t}\n\tsync() {\n\t\tlet domPos = this.list.firstChild;\n\t\tfunction rm() {\n\t\t\tlet prev = domPos;\n\t\t\tdomPos = prev.nextSibling;\n\t\t\tprev.remove();\n\t\t}\n\t\tfor (let item of this.items) if (item.dom.parentNode == this.list) {\n\t\t\twhile (domPos != item.dom) rm();\n\t\t\tdomPos = item.dom.nextSibling;\n\t\t} else this.list.insertBefore(item.dom, domPos);\n\t\twhile (domPos) rm();\n\t}\n\tmoveSelection(selectedIndex) {\n\t\tif (this.selectedIndex < 0) return;\n\t\tlet selection = findDiagnostic(this.view.state.field(lintState).diagnostics, this.items[selectedIndex].diagnostic);\n\t\tif (!selection) return;\n\t\tthis.view.dispatch({\n\t\t\tselection: {\n\t\t\t\tanchor: selection.from,\n\t\t\t\thead: selection.to\n\t\t\t},\n\t\t\tscrollIntoView: true,\n\t\t\teffects: movePanelSelection.of(selection)\n\t\t});\n\t}\n\tstatic open(view) {\n\t\treturn new LintPanel(view);\n\t}\n};\nfunction svg(content, attrs = `viewBox=\"0 0 40 40\"`) {\n\treturn `url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" ${attrs}>${encodeURIComponent(content)}</svg>')`;\n}\nfunction underline(color) {\n\treturn svg(`<path d=\"m0 2.5 l2 -1.5 l1 0 l2 1.5 l1 0\" stroke=\"${color}\" fill=\"none\" stroke-width=\".7\"/>`, `width=\"6\" height=\"3\"`);\n}\nconst baseTheme$3 = /* @__PURE__ */ EditorView.baseTheme({\n\t\".cm-diagnostic\": {\n\t\tpadding: \"3px 6px 3px 8px\",\n\t\tmarginLeft: \"-1px\",\n\t\tdisplay: \"block\",\n\t\twhiteSpace: \"pre-wrap\"\n\t},\n\t\".cm-diagnostic-error\": { borderLeft: \"5px solid #d11\" },\n\t\".cm-diagnostic-warning\": { borderLeft: \"5px solid orange\" },\n\t\".cm-diagnostic-info\": { borderLeft: \"5px solid #999\" },\n\t\".cm-diagnostic-hint\": { borderLeft: \"5px solid #66d\" },\n\t\".cm-diagnosticAction\": {\n\t\tfont: \"inherit\",\n\t\tborder: \"none\",\n\t\tpadding: \"2px 4px\",\n\t\tbackgroundColor: \"#444\",\n\t\tcolor: \"white\",\n\t\tborderRadius: \"3px\",\n\t\tmarginLeft: \"8px\",\n\t\tcursor: \"pointer\"\n\t},\n\t\".cm-diagnosticSource\": {\n\t\tfontSize: \"70%\",\n\t\topacity: .7\n\t},\n\t\".cm-lintRange\": {\n\t\tbackgroundPosition: \"left bottom\",\n\t\tbackgroundRepeat: \"repeat-x\",\n\t\tpaddingBottom: \"0.7px\"\n\t},\n\t\".cm-lintRange-error\": { backgroundImage: /* @__PURE__ */ underline(\"#d11\") },\n\t\".cm-lintRange-warning\": { backgroundImage: /* @__PURE__ */ underline(\"orange\") },\n\t\".cm-lintRange-info\": { backgroundImage: /* @__PURE__ */ underline(\"#999\") },\n\t\".cm-lintRange-hint\": { backgroundImage: /* @__PURE__ */ underline(\"#66d\") },\n\t\".cm-lintRange-active\": { backgroundColor: \"#ffdd9980\" },\n\t\".cm-tooltip-lint\": {\n\t\tpadding: 0,\n\t\tmargin: 0\n\t},\n\t\".cm-lintPoint\": {\n\t\tposition: \"relative\",\n\t\t\"&:after\": {\n\t\t\tcontent: \"\\\"\\\"\",\n\t\t\tposition: \"absolute\",\n\t\t\tbottom: 0,\n\t\t\tleft: \"-2px\",\n\t\t\tborderLeft: \"3px solid transparent\",\n\t\t\tborderRight: \"3px solid transparent\",\n\t\t\tborderBottom: \"4px solid #d11\"\n\t\t}\n\t},\n\t\".cm-lintPoint-warning\": { \"&:after\": { borderBottomColor: \"orange\" } },\n\t\".cm-lintPoint-info\": { \"&:after\": { borderBottomColor: \"#999\" } },\n\t\".cm-lintPoint-hint\": { \"&:after\": { borderBottomColor: \"#66d\" } },\n\t\".cm-panel.cm-panel-lint\": {\n\t\tposition: \"relative\",\n\t\t\"& ul\": {\n\t\t\tmaxHeight: \"100px\",\n\t\t\toverflowY: \"auto\",\n\t\t\t\"& [aria-selected]\": {\n\t\t\t\tbackgroundColor: \"#ddd\",\n\t\t\t\t\"& u\": { textDecoration: \"underline\" }\n\t\t\t},\n\t\t\t\"&:focus [aria-selected]\": {\n\t\t\t\tbackground_fallback: \"#bdf\",\n\t\t\t\tbackgroundColor: \"Highlight\",\n\t\t\t\tcolor_fallback: \"white\",\n\t\t\t\tcolor: \"HighlightText\"\n\t\t\t},\n\t\t\t\"& u\": { textDecoration: \"none\" },\n\t\t\tpadding: 0,\n\t\t\tmargin: 0\n\t\t},\n\t\t\"& [name=close]\": {\n\t\t\tposition: \"absolute\",\n\t\t\ttop: \"0\",\n\t\t\tright: \"2px\",\n\t\t\tbackground: \"inherit\",\n\t\t\tborder: \"none\",\n\t\t\tfont: \"inherit\",\n\t\t\tpadding: 0,\n\t\t\tmargin: 0\n\t\t}\n\t}\n});\nfunction severityWeight(sev) {\n\treturn sev == \"error\" ? 4 : sev == \"warning\" ? 3 : sev == \"info\" ? 2 : 1;\n}\nfunction maxSeverity(diagnostics) {\n\tlet sev = \"hint\", weight = 1;\n\tfor (let d of diagnostics) {\n\t\tlet w = severityWeight(d.severity);\n\t\tif (w > weight) {\n\t\t\tweight = w;\n\t\t\tsev = d.severity;\n\t\t}\n\t}\n\treturn sev;\n}\nconst lintExtensions = [\n\tlintState,\n\t/* @__PURE__ */ EditorView.decorations.compute([lintState], (state) => {\n\t\tlet { selected, panel } = state.field(lintState);\n\t\treturn !selected || !panel || selected.from == selected.to ? Decoration.none : Decoration.set([activeMark.range(selected.from, selected.to)]);\n\t}),\n\t/* @__PURE__ */ hoverTooltip(lintTooltip, { hideOn: hideTooltip }),\n\tbaseTheme$3\n];\n//#endregion\n//#region ../../node_modules/.pnpm/@lezer+common@1.5.1/node_modules/@lezer/common/dist/index.js\n/**\nThe default maximum length of a `TreeBuffer` node.\n*/\nconst DefaultBufferLength = 1024;\nlet nextPropID = 0;\nvar Range = class {\n\tconstructor(from, to) {\n\t\tthis.from = from;\n\t\tthis.to = to;\n\t}\n};\n/**\nEach [node type](#common.NodeType) or [individual tree](#common.Tree)\ncan have metadata associated with it in props. Instances of this\nclass represent prop names.\n*/\nvar NodeProp = class {\n\t/**\n\tCreate a new node prop type.\n\t*/\n\tconstructor(config = {}) {\n\t\tthis.id = nextPropID++;\n\t\tthis.perNode = !!config.perNode;\n\t\tthis.deserialize = config.deserialize || (() => {\n\t\t\tthrow new Error(\"This node type doesn't define a deserialize function\");\n\t\t});\n\t\tthis.combine = config.combine || null;\n\t}\n\t/**\n\tThis is meant to be used with\n\t[`NodeSet.extend`](#common.NodeSet.extend) or\n\t[`LRParser.configure`](#lr.ParserConfig.props) to compute\n\tprop values for each node type in the set. Takes a [match\n\tobject](#common.NodeType^match) or function that returns undefined\n\tif the node type doesn't get this prop, and the prop's value if\n\tit does.\n\t*/\n\tadd(match) {\n\t\tif (this.perNode) throw new RangeError(\"Can't add per-node props to node types\");\n\t\tif (typeof match != \"function\") match = NodeType.match(match);\n\t\treturn (type) => {\n\t\t\tlet result = match(type);\n\t\t\treturn result === void 0 ? null : [this, result];\n\t\t};\n\t}\n};\n/**\nProp that is used to describe matching delimiters. For opening\ndelimiters, this holds an array of node names (written as a\nspace-separated string when declaring this prop in a grammar)\nfor the node types of closing delimiters that match it.\n*/\nNodeProp.closedBy = new NodeProp({ deserialize: (str) => str.split(\" \") });\n/**\nThe inverse of [`closedBy`](#common.NodeProp^closedBy). This is\nattached to closing delimiters, holding an array of node names\nof types of matching opening delimiters.\n*/\nNodeProp.openedBy = new NodeProp({ deserialize: (str) => str.split(\" \") });\n/**\nUsed to assign node types to groups (for example, all node\ntypes that represent an expression could be tagged with an\n`\"Expression\"` group).\n*/\nNodeProp.group = new NodeProp({ deserialize: (str) => str.split(\" \") });\n/**\nAttached to nodes to indicate these should be\n[displayed](https://codemirror.net/docs/ref/#language.syntaxTree)\nin a bidirectional text isolate, so that direction-neutral\ncharacters on their sides don't incorrectly get associated with\nsurrounding text. You'll generally want to set this for nodes\nthat contain arbitrary text, like strings and comments, and for\nnodes that appear _inside_ arbitrary text, like HTML tags. When\nnot given a value, in a grammar declaration, defaults to\n`\"auto\"`.\n*/\nNodeProp.isolate = new NodeProp({ deserialize: (value) => {\n\tif (value && value != \"rtl\" && value != \"ltr\" && value != \"auto\") throw new RangeError(\"Invalid value for isolate: \" + value);\n\treturn value || \"auto\";\n} });\n/**\nThe hash of the [context](#lr.ContextTracker.constructor)\nthat the node was parsed in, if any. Used to limit reuse of\ncontextual nodes.\n*/\nNodeProp.contextHash = new NodeProp({ perNode: true });\n/**\nThe distance beyond the end of the node that the tokenizer\nlooked ahead for any of the tokens inside the node. (The LR\nparser only stores this when it is larger than 25, for\nefficiency reasons.)\n*/\nNodeProp.lookAhead = new NodeProp({ perNode: true });\n/**\nThis per-node prop is used to replace a given node, or part of a\nnode, with another tree. This is useful to include trees from\ndifferent languages in mixed-language parsers.\n*/\nNodeProp.mounted = new NodeProp({ perNode: true });\n/**\nA mounted tree, which can be [stored](#common.NodeProp^mounted) on\na tree node to indicate that parts of its content are\nrepresented by another tree.\n*/\nvar MountedTree = class {\n\tconstructor(tree, overlay, parser, bracketed = false) {\n\t\tthis.tree = tree;\n\t\tthis.overlay = overlay;\n\t\tthis.parser = parser;\n\t\tthis.bracketed = bracketed;\n\t}\n\t/**\n\t@internal\n\t*/\n\tstatic get(tree) {\n\t\treturn tree && tree.props && tree.props[NodeProp.mounted.id];\n\t}\n};\nconst noProps = Object.create(null);\n/**\nEach node in a syntax tree has a node type associated with it.\n*/\nvar NodeType = class NodeType {\n\t/**\n\t@internal\n\t*/\n\tconstructor(name, props, id, flags = 0) {\n\t\tthis.name = name;\n\t\tthis.props = props;\n\t\tthis.id = id;\n\t\tthis.flags = flags;\n\t}\n\t/**\n\tDefine a node type.\n\t*/\n\tstatic define(spec) {\n\t\tlet props = spec.props && spec.props.length ? Object.create(null) : noProps;\n\t\tlet flags = (spec.top ? 1 : 0) | (spec.skipped ? 2 : 0) | (spec.error ? 4 : 0) | (spec.name == null ? 8 : 0);\n\t\tlet type = new NodeType(spec.name || \"\", props, spec.id, flags);\n\t\tif (spec.props) for (let src of spec.props) {\n\t\t\tif (!Array.isArray(src)) src = src(type);\n\t\t\tif (src) {\n\t\t\t\tif (src[0].perNode) throw new RangeError(\"Can't store a per-node prop on a node type\");\n\t\t\t\tprops[src[0].id] = src[1];\n\t\t\t}\n\t\t}\n\t\treturn type;\n\t}\n\t/**\n\tRetrieves a node prop for this type. Will return `undefined` if\n\tthe prop isn't present on this node.\n\t*/\n\tprop(prop) {\n\t\treturn this.props[prop.id];\n\t}\n\t/**\n\tTrue when this is the top node of a grammar.\n\t*/\n\tget isTop() {\n\t\treturn (this.flags & 1) > 0;\n\t}\n\t/**\n\tTrue when this node is produced by a skip rule.\n\t*/\n\tget isSkipped() {\n\t\treturn (this.flags & 2) > 0;\n\t}\n\t/**\n\tIndicates whether this is an error node.\n\t*/\n\tget isError() {\n\t\treturn (this.flags & 4) > 0;\n\t}\n\t/**\n\tWhen true, this node type doesn't correspond to a user-declared\n\tnamed node, for example because it is used to cache repetition.\n\t*/\n\tget isAnonymous() {\n\t\treturn (this.flags & 8) > 0;\n\t}\n\t/**\n\tReturns true when this node's name or one of its\n\t[groups](#common.NodeProp^group) matches the given string.\n\t*/\n\tis(name) {\n\t\tif (typeof name == \"string\") {\n\t\t\tif (this.name == name) return true;\n\t\t\tlet group = this.prop(NodeProp.group);\n\t\t\treturn group ? group.indexOf(name) > -1 : false;\n\t\t}\n\t\treturn this.id == name;\n\t}\n\t/**\n\tCreate a function from node types to arbitrary values by\n\tspecifying an object whose property names are node or\n\t[group](#common.NodeProp^group) names. Often useful with\n\t[`NodeProp.add`](#common.NodeProp.add). You can put multiple\n\tnames, separated by spaces, in a single property name to map\n\tmultiple node names to a single value.\n\t*/\n\tstatic match(map) {\n\t\tlet direct = Object.create(null);\n\t\tfor (let prop in map) for (let name of prop.split(\" \")) direct[name] = map[prop];\n\t\treturn (node) => {\n\t\t\tfor (let groups = node.prop(NodeProp.group), i = -1; i < (groups ? groups.length : 0); i++) {\n\t\t\t\tlet found = direct[i < 0 ? node.name : groups[i]];\n\t\t\t\tif (found) return found;\n\t\t\t}\n\t\t};\n\t}\n};\n/**\nAn empty dummy node type to use when no actual type is available.\n*/\nNodeType.none = new NodeType(\"\", Object.create(null), 0, 8);\n/**\nA node set holds a collection of node types. It is used to\ncompactly represent trees by storing their type ids, rather than a\nfull pointer to the type object, in a numeric array. Each parser\n[has](#lr.LRParser.nodeSet) a node set, and [tree\nbuffers](#common.TreeBuffer) can only store collections of nodes\nfrom the same set. A set can have a maximum of 2**16 (65536) node\ntypes in it, so that the ids fit into 16-bit typed array slots.\n*/\nvar NodeSet = class NodeSet {\n\t/**\n\tCreate a set with the given types. The `id` property of each\n\ttype should correspond to its position within the array.\n\t*/\n\tconstructor(types) {\n\t\tthis.types = types;\n\t\tfor (let i = 0; i < types.length; i++) if (types[i].id != i) throw new RangeError(\"Node type ids should correspond to array positions when creating a node set\");\n\t}\n\t/**\n\tCreate a copy of this set with some node properties added. The\n\targuments to this method can be created with\n\t[`NodeProp.add`](#common.NodeProp.add).\n\t*/\n\textend(...props) {\n\t\tlet newTypes = [];\n\t\tfor (let type of this.types) {\n\t\t\tlet newProps = null;\n\t\t\tfor (let source of props) {\n\t\t\t\tlet add = source(type);\n\t\t\t\tif (add) {\n\t\t\t\t\tif (!newProps) newProps = Object.assign({}, type.props);\n\t\t\t\t\tlet value = add[1], prop = add[0];\n\t\t\t\t\tif (prop.combine && prop.id in newProps) value = prop.combine(newProps[prop.id], value);\n\t\t\t\t\tnewProps[prop.id] = value;\n\t\t\t\t}\n\t\t\t}\n\t\t\tnewTypes.push(newProps ? new NodeType(type.name, newProps, type.id, type.flags) : type);\n\t\t}\n\t\treturn new NodeSet(newTypes);\n\t}\n};\nconst CachedNode = /* @__PURE__ */ new WeakMap(), CachedInnerNode = /* @__PURE__ */ new WeakMap();\n/**\nOptions that control iteration. Can be combined with the `|`\noperator to enable multiple ones.\n*/\nvar IterMode;\n(function(IterMode) {\n\t/**\n\tWhen enabled, iteration will only visit [`Tree`](#common.Tree)\n\tobjects, not nodes packed into\n\t[`TreeBuffer`](#common.TreeBuffer)s.\n\t*/\n\tIterMode[IterMode[\"ExcludeBuffers\"] = 1] = \"ExcludeBuffers\";\n\t/**\n\tEnable this to make iteration include anonymous nodes (such as\n\tthe nodes that wrap repeated grammar constructs into a balanced\n\ttree).\n\t*/\n\tIterMode[IterMode[\"IncludeAnonymous\"] = 2] = \"IncludeAnonymous\";\n\t/**\n\tBy default, regular [mounted](#common.NodeProp^mounted) nodes\n\treplace their base node in iteration. Enable this to ignore them\n\tinstead.\n\t*/\n\tIterMode[IterMode[\"IgnoreMounts\"] = 4] = \"IgnoreMounts\";\n\t/**\n\tThis option only applies in\n\t[`enter`](#common.SyntaxNode.enter)-style methods. It tells the\n\tlibrary to not enter mounted overlays if one covers the given\n\tposition.\n\t*/\n\tIterMode[IterMode[\"IgnoreOverlays\"] = 8] = \"IgnoreOverlays\";\n\t/**\n\tWhen set, positions on the boundary of a mounted overlay tree\n\tthat has its [`bracketed`](#common.NestedParse.bracketed) flag\n\tset will enter that tree regardless of side. Only supported in\n\t[`enter`](#common.SyntaxNode.enter), not in cursors.\n\t*/\n\tIterMode[IterMode[\"EnterBracketed\"] = 16] = \"EnterBracketed\";\n})(IterMode || (IterMode = {}));\n/**\nA piece of syntax tree. There are two ways to approach these\ntrees: the way they are actually stored in memory, and the\nconvenient way.\n\nSyntax trees are stored as a tree of `Tree` and `TreeBuffer`\nobjects. By packing detail information into `TreeBuffer` leaf\nnodes, the representation is made a lot more memory-efficient.\n\nHowever, when you want to actually work with tree nodes, this\nrepresentation is very awkward, so most client code will want to\nuse the [`TreeCursor`](#common.TreeCursor) or\n[`SyntaxNode`](#common.SyntaxNode) interface instead, which provides\na view on some part of this data structure, and can be used to\nmove around to adjacent nodes.\n*/\nvar Tree = class Tree {\n\t/**\n\tConstruct a new tree. See also [`Tree.build`](#common.Tree^build).\n\t*/\n\tconstructor(type, children, positions, length, props) {\n\t\tthis.type = type;\n\t\tthis.children = children;\n\t\tthis.positions = positions;\n\t\tthis.length = length;\n\t\t/**\n\t\t@internal\n\t\t*/\n\t\tthis.props = null;\n\t\tif (props && props.length) {\n\t\t\tthis.props = Object.create(null);\n\t\t\tfor (let [prop, value] of props) this.props[typeof prop == \"number\" ? prop : prop.id] = value;\n\t\t}\n\t}\n\t/**\n\t@internal\n\t*/\n\ttoString() {\n\t\tlet mounted = MountedTree.get(this);\n\t\tif (mounted && !mounted.overlay) return mounted.tree.toString();\n\t\tlet children = \"\";\n\t\tfor (let ch of this.children) {\n\t\t\tlet str = ch.toString();\n\t\t\tif (str) {\n\t\t\t\tif (children) children += \",\";\n\t\t\t\tchildren += str;\n\t\t\t}\n\t\t}\n\t\treturn !this.type.name ? children : (/\\W/.test(this.type.name) && !this.type.isError ? JSON.stringify(this.type.name) : this.type.name) + (children.length ? \"(\" + children + \")\" : \"\");\n\t}\n\t/**\n\tGet a [tree cursor](#common.TreeCursor) positioned at the top of\n\tthe tree. Mode can be used to [control](#common.IterMode) which\n\tnodes the cursor visits.\n\t*/\n\tcursor(mode = 0) {\n\t\treturn new TreeCursor(this.topNode, mode);\n\t}\n\t/**\n\tGet a [tree cursor](#common.TreeCursor) pointing into this tree\n\tat the given position and side (see\n\t[`moveTo`](#common.TreeCursor.moveTo).\n\t*/\n\tcursorAt(pos, side = 0, mode = 0) {\n\t\tlet cursor = new TreeCursor(CachedNode.get(this) || this.topNode);\n\t\tcursor.moveTo(pos, side);\n\t\tCachedNode.set(this, cursor._tree);\n\t\treturn cursor;\n\t}\n\t/**\n\tGet a [syntax node](#common.SyntaxNode) object for the top of the\n\ttree.\n\t*/\n\tget topNode() {\n\t\treturn new TreeNode(this, 0, 0, null);\n\t}\n\t/**\n\tGet the [syntax node](#common.SyntaxNode) at the given position.\n\tIf `side` is -1, this will move into nodes that end at the\n\tposition. If 1, it'll move into nodes that start at the\n\tposition. With 0, it'll only enter nodes that cover the position\n\tfrom both sides.\n\t\n\tNote that this will not enter\n\t[overlays](#common.MountedTree.overlay), and you often want\n\t[`resolveInner`](#common.Tree.resolveInner) instead.\n\t*/\n\tresolve(pos, side = 0) {\n\t\tlet node = resolveNode(CachedNode.get(this) || this.topNode, pos, side, false);\n\t\tCachedNode.set(this, node);\n\t\treturn node;\n\t}\n\t/**\n\tLike [`resolve`](#common.Tree.resolve), but will enter\n\t[overlaid](#common.MountedTree.overlay) nodes, producing a syntax node\n\tpointing into the innermost overlaid tree at the given position\n\t(with parent links going through all parent structure, including\n\tthe host trees).\n\t*/\n\tresolveInner(pos, side = 0) {\n\t\tlet node = resolveNode(CachedInnerNode.get(this) || this.topNode, pos, side, true);\n\t\tCachedInnerNode.set(this, node);\n\t\treturn node;\n\t}\n\t/**\n\tIn some situations, it can be useful to iterate through all\n\tnodes around a position, including those in overlays that don't\n\tdirectly cover the position. This method gives you an iterator\n\tthat will produce all nodes, from small to big, around the given\n\tposition.\n\t*/\n\tresolveStack(pos, side = 0) {\n\t\treturn stackIterator(this, pos, side);\n\t}\n\t/**\n\tIterate over the tree and its children, calling `enter` for any\n\tnode that touches the `from`/`to` region (if given) before\n\trunning over such a node's children, and `leave` (if given) when\n\tleaving the node. When `enter` returns `false`, that node will\n\tnot have its children iterated over (or `leave` called).\n\t*/\n\titerate(spec) {\n\t\tlet { enter, leave, from = 0, to = this.length } = spec;\n\t\tlet mode = spec.mode || 0, anon = (mode & IterMode.IncludeAnonymous) > 0;\n\t\tfor (let c = this.cursor(mode | IterMode.IncludeAnonymous);;) {\n\t\t\tlet entered = false;\n\t\t\tif (c.from <= to && c.to >= from && (!anon && c.type.isAnonymous || enter(c) !== false)) {\n\t\t\t\tif (c.firstChild()) continue;\n\t\t\t\tentered = true;\n\t\t\t}\n\t\t\tfor (;;) {\n\t\t\t\tif (entered && leave && (anon || !c.type.isAnonymous)) leave(c);\n\t\t\t\tif (c.nextSibling()) break;\n\t\t\t\tif (!c.parent()) return;\n\t\t\t\tentered = true;\n\t\t\t}\n\t\t}\n\t}\n\t/**\n\tGet the value of the given [node prop](#common.NodeProp) for this\n\tnode. Works with both per-node and per-type props.\n\t*/\n\tprop(prop) {\n\t\treturn !prop.perNode ? this.type.prop(prop) : this.props ? this.props[prop.id] : void 0;\n\t}\n\t/**\n\tReturns the node's [per-node props](#common.NodeProp.perNode) in a\n\tformat that can be passed to the [`Tree`](#common.Tree)\n\tconstructor.\n\t*/\n\tget propValues() {\n\t\tlet result = [];\n\t\tif (this.props) for (let id in this.props) result.push([+id, this.props[id]]);\n\t\treturn result;\n\t}\n\t/**\n\tBalance the direct children of this tree, producing a copy of\n\twhich may have children grouped into subtrees with type\n\t[`NodeType.none`](#common.NodeType^none).\n\t*/\n\tbalance(config = {}) {\n\t\treturn this.children.length <= 8 ? this : balanceRange(NodeType.none, this.children, this.positions, 0, this.children.length, 0, this.length, (children, positions, length) => new Tree(this.type, children, positions, length, this.propValues), config.makeTree || ((children, positions, length) => new Tree(NodeType.none, children, positions, length)));\n\t}\n\t/**\n\tBuild a tree from a postfix-ordered buffer of node information,\n\tor a cursor over such a buffer.\n\t*/\n\tstatic build(data) {\n\t\treturn buildTree(data);\n\t}\n};\n/**\nThe empty tree\n*/\nTree.empty = new Tree(NodeType.none, [], [], 0);\nvar FlatBufferCursor = class FlatBufferCursor {\n\tconstructor(buffer, index) {\n\t\tthis.buffer = buffer;\n\t\tthis.index = index;\n\t}\n\tget id() {\n\t\treturn this.buffer[this.index - 4];\n\t}\n\tget start() {\n\t\treturn this.buffer[this.index - 3];\n\t}\n\tget end() {\n\t\treturn this.buffer[this.index - 2];\n\t}\n\tget size() {\n\t\treturn this.buffer[this.index - 1];\n\t}\n\tget pos() {\n\t\treturn this.index;\n\t}\n\tnext() {\n\t\tthis.index -= 4;\n\t}\n\tfork() {\n\t\treturn new FlatBufferCursor(this.buffer, this.index);\n\t}\n};\n/**\nTree buffers contain (type, start, end, endIndex) quads for each\nnode. In such a buffer, nodes are stored in prefix order (parents\nbefore children, with the endIndex of the parent indicating which\nchildren belong to it).\n*/\nvar TreeBuffer = class TreeBuffer {\n\t/**\n\tCreate a tree buffer.\n\t*/\n\tconstructor(buffer, length, set) {\n\t\tthis.buffer = buffer;\n\t\tthis.length = length;\n\t\tthis.set = set;\n\t}\n\t/**\n\t@internal\n\t*/\n\tget type() {\n\t\treturn NodeType.none;\n\t}\n\t/**\n\t@internal\n\t*/\n\ttoString() {\n\t\tlet result = [];\n\t\tfor (let index = 0; index < this.buffer.length;) {\n\t\t\tresult.push(this.childString(index));\n\t\t\tindex = this.buffer[index + 3];\n\t\t}\n\t\treturn result.join(\",\");\n\t}\n\t/**\n\t@internal\n\t*/\n\tchildString(index) {\n\t\tlet id = this.buffer[index], endIndex = this.buffer[index + 3];\n\t\tlet type = this.set.types[id], result = type.name;\n\t\tif (/\\W/.test(result) && !type.isError) result = JSON.stringify(result);\n\t\tindex += 4;\n\t\tif (endIndex == index) return result;\n\t\tlet children = [];\n\t\twhile (index < endIndex) {\n\t\t\tchildren.push(this.childString(index));\n\t\t\tindex = this.buffer[index + 3];\n\t\t}\n\t\treturn result + \"(\" + children.join(\",\") + \")\";\n\t}\n\t/**\n\t@internal\n\t*/\n\tfindChild(startIndex, endIndex, dir, pos, side) {\n\t\tlet { buffer } = this, pick = -1;\n\t\tfor (let i = startIndex; i != endIndex; i = buffer[i + 3]) if (checkSide(side, pos, buffer[i + 1], buffer[i + 2])) {\n\t\t\tpick = i;\n\t\t\tif (dir > 0) break;\n\t\t}\n\t\treturn pick;\n\t}\n\t/**\n\t@internal\n\t*/\n\tslice(startI, endI, from) {\n\t\tlet b = this.buffer;\n\t\tlet copy = new Uint16Array(endI - startI), len = 0;\n\t\tfor (let i = startI, j = 0; i < endI;) {\n\t\t\tcopy[j++] = b[i++];\n\t\t\tcopy[j++] = b[i++] - from;\n\t\t\tlet to = copy[j++] = b[i++] - from;\n\t\t\tcopy[j++] = b[i++] - startI;\n\t\t\tlen = Math.max(len, to);\n\t\t}\n\t\treturn new TreeBuffer(copy, len, this.set);\n\t}\n};\nfunction checkSide(side, pos, from, to) {\n\tswitch (side) {\n\t\tcase -2: return from < pos;\n\t\tcase -1: return to >= pos && from < pos;\n\t\tcase 0: return from < pos && to > pos;\n\t\tcase 1: return from <= pos && to > pos;\n\t\tcase 2: return to > pos;\n\t\tcase 4: return true;\n\t}\n}\nfunction resolveNode(node, pos, side, overlays) {\n\tvar _a;\n\twhile (node.from == node.to || (side < 1 ? node.from >= pos : node.from > pos) || (side > -1 ? node.to <= pos : node.to < pos)) {\n\t\tlet parent = !overlays && node instanceof TreeNode && node.index < 0 ? null : node.parent;\n\t\tif (!parent) return node;\n\t\tnode = parent;\n\t}\n\tlet mode = overlays ? 0 : IterMode.IgnoreOverlays;\n\tif (overlays) {\n\t\tfor (let scan = node, parent = scan.parent; parent; scan = parent, parent = scan.parent) if (scan instanceof TreeNode && scan.index < 0 && ((_a = parent.enter(pos, side, mode)) === null || _a === void 0 ? void 0 : _a.from) != scan.from) node = parent;\n\t}\n\tfor (;;) {\n\t\tlet inner = node.enter(pos, side, mode);\n\t\tif (!inner) return node;\n\t\tnode = inner;\n\t}\n}\nvar BaseNode = class {\n\tcursor(mode = 0) {\n\t\treturn new TreeCursor(this, mode);\n\t}\n\tgetChild(type, before = null, after = null) {\n\t\tlet r = getChildren(this, type, before, after);\n\t\treturn r.length ? r[0] : null;\n\t}\n\tgetChildren(type, before = null, after = null) {\n\t\treturn getChildren(this, type, before, after);\n\t}\n\tresolve(pos, side = 0) {\n\t\treturn resolveNode(this, pos, side, false);\n\t}\n\tresolveInner(pos, side = 0) {\n\t\treturn resolveNode(this, pos, side, true);\n\t}\n\tmatchContext(context) {\n\t\treturn matchNodeContext(this.parent, context);\n\t}\n\tenterUnfinishedNodesBefore(pos) {\n\t\tlet scan = this.childBefore(pos), node = this;\n\t\twhile (scan) {\n\t\t\tlet last = scan.lastChild;\n\t\t\tif (!last || last.to != scan.to) break;\n\t\t\tif (last.type.isError && last.from == last.to) {\n\t\t\t\tnode = scan;\n\t\t\t\tscan = last.prevSibling;\n\t\t\t} else scan = last;\n\t\t}\n\t\treturn node;\n\t}\n\tget node() {\n\t\treturn this;\n\t}\n\tget next() {\n\t\treturn this.parent;\n\t}\n};\nvar TreeNode = class TreeNode extends BaseNode {\n\tconstructor(_tree, from, index, _parent) {\n\t\tsuper();\n\t\tthis._tree = _tree;\n\t\tthis.from = from;\n\t\tthis.index = index;\n\t\tthis._parent = _parent;\n\t}\n\tget type() {\n\t\treturn this._tree.type;\n\t}\n\tget name() {\n\t\treturn this._tree.type.name;\n\t}\n\tget to() {\n\t\treturn this.from + this._tree.length;\n\t}\n\tnextChild(i, dir, pos, side, mode = 0) {\n\t\tfor (let parent = this;;) {\n\t\t\tfor (let { children, positions } = parent._tree, e = dir > 0 ? children.length : -1; i != e; i += dir) {\n\t\t\t\tlet next = children[i], start = positions[i] + parent.from, mounted;\n\t\t\t\tif (!(mode & IterMode.EnterBracketed && next instanceof Tree && (mounted = MountedTree.get(next)) && !mounted.overlay && mounted.bracketed && pos >= start && pos <= start + next.length) && !checkSide(side, pos, start, start + next.length)) continue;\n\t\t\t\tif (next instanceof TreeBuffer) {\n\t\t\t\t\tif (mode & IterMode.ExcludeBuffers) continue;\n\t\t\t\t\tlet index = next.findChild(0, next.buffer.length, dir, pos - start, side);\n\t\t\t\t\tif (index > -1) return new BufferNode(new BufferContext(parent, next, i, start), null, index);\n\t\t\t\t} else if (mode & IterMode.IncludeAnonymous || !next.type.isAnonymous || hasChild(next)) {\n\t\t\t\t\tlet mounted;\n\t\t\t\t\tif (!(mode & IterMode.IgnoreMounts) && (mounted = MountedTree.get(next)) && !mounted.overlay) return new TreeNode(mounted.tree, start, i, parent);\n\t\t\t\t\tlet inner = new TreeNode(next, start, i, parent);\n\t\t\t\t\treturn mode & IterMode.IncludeAnonymous || !inner.type.isAnonymous ? inner : inner.nextChild(dir < 0 ? next.children.length - 1 : 0, dir, pos, side, mode);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (mode & IterMode.IncludeAnonymous || !parent.type.isAnonymous) return null;\n\t\t\tif (parent.index >= 0) i = parent.index + dir;\n\t\t\telse i = dir < 0 ? -1 : parent._parent._tree.children.length;\n\t\t\tparent = parent._parent;\n\t\t\tif (!parent) return null;\n\t\t}\n\t}\n\tget firstChild() {\n\t\treturn this.nextChild(0, 1, 0, 4);\n\t}\n\tget lastChild() {\n\t\treturn this.nextChild(this._tree.children.length - 1, -1, 0, 4);\n\t}\n\tchildAfter(pos) {\n\t\treturn this.nextChild(0, 1, pos, 2);\n\t}\n\tchildBefore(pos) {\n\t\treturn this.nextChild(this._tree.children.length - 1, -1, pos, -2);\n\t}\n\tprop(prop) {\n\t\treturn this._tree.prop(prop);\n\t}\n\tenter(pos, side, mode = 0) {\n\t\tlet mounted;\n\t\tif (!(mode & IterMode.IgnoreOverlays) && (mounted = MountedTree.get(this._tree)) && mounted.overlay) {\n\t\t\tlet rPos = pos - this.from, enterBracketed = mode & IterMode.EnterBracketed && mounted.bracketed;\n\t\t\tfor (let { from, to } of mounted.overlay) if ((side > 0 || enterBracketed ? from <= rPos : from < rPos) && (side < 0 || enterBracketed ? to >= rPos : to > rPos)) return new TreeNode(mounted.tree, mounted.overlay[0].from + this.from, -1, this);\n\t\t}\n\t\treturn this.nextChild(0, 1, pos, side, mode);\n\t}\n\tnextSignificantParent() {\n\t\tlet val = this;\n\t\twhile (val.type.isAnonymous && val._parent) val = val._parent;\n\t\treturn val;\n\t}\n\tget parent() {\n\t\treturn this._parent ? this._parent.nextSignificantParent() : null;\n\t}\n\tget nextSibling() {\n\t\treturn this._parent && this.index >= 0 ? this._parent.nextChild(this.index + 1, 1, 0, 4) : null;\n\t}\n\tget prevSibling() {\n\t\treturn this._parent && this.index >= 0 ? this._parent.nextChild(this.index - 1, -1, 0, 4) : null;\n\t}\n\tget tree() {\n\t\treturn this._tree;\n\t}\n\ttoTree() {\n\t\treturn this._tree;\n\t}\n\t/**\n\t@internal\n\t*/\n\ttoString() {\n\t\treturn this._tree.toString();\n\t}\n};\nfunction getChildren(node, type, before, after) {\n\tlet cur = node.cursor(), result = [];\n\tif (!cur.firstChild()) return result;\n\tif (before != null) for (let found = false; !found;) {\n\t\tfound = cur.type.is(before);\n\t\tif (!cur.nextSibling()) return result;\n\t}\n\tfor (;;) {\n\t\tif (after != null && cur.type.is(after)) return result;\n\t\tif (cur.type.is(type)) result.push(cur.node);\n\t\tif (!cur.nextSibling()) return after == null ? result : [];\n\t}\n}\nfunction matchNodeContext(node, context, i = context.length - 1) {\n\tfor (let p = node; i >= 0; p = p.parent) {\n\t\tif (!p) return false;\n\t\tif (!p.type.isAnonymous) {\n\t\t\tif (context[i] && context[i] != p.name) return false;\n\t\t\ti--;\n\t\t}\n\t}\n\treturn true;\n}\nvar BufferContext = class {\n\tconstructor(parent, buffer, index, start) {\n\t\tthis.parent = parent;\n\t\tthis.buffer = buffer;\n\t\tthis.index = index;\n\t\tthis.start = start;\n\t}\n};\nvar BufferNode = class BufferNode extends BaseNode {\n\tget name() {\n\t\treturn this.type.name;\n\t}\n\tget from() {\n\t\treturn this.context.start + this.context.buffer.buffer[this.index + 1];\n\t}\n\tget to() {\n\t\treturn this.context.start + this.context.buffer.buffer[this.index + 2];\n\t}\n\tconstructor(context, _parent, index) {\n\t\tsuper();\n\t\tthis.context = context;\n\t\tthis._parent = _parent;\n\t\tthis.index = index;\n\t\tthis.type = context.buffer.set.types[context.buffer.buffer[index]];\n\t}\n\tchild(dir, pos, side) {\n\t\tlet { buffer } = this.context;\n\t\tlet index = buffer.findChild(this.index + 4, buffer.buffer[this.index + 3], dir, pos - this.context.start, side);\n\t\treturn index < 0 ? null : new BufferNode(this.context, this, index);\n\t}\n\tget firstChild() {\n\t\treturn this.child(1, 0, 4);\n\t}\n\tget lastChild() {\n\t\treturn this.child(-1, 0, 4);\n\t}\n\tchildAfter(pos) {\n\t\treturn this.child(1, pos, 2);\n\t}\n\tchildBefore(pos) {\n\t\treturn this.child(-1, pos, -2);\n\t}\n\tprop(prop) {\n\t\treturn this.type.prop(prop);\n\t}\n\tenter(pos, side, mode = 0) {\n\t\tif (mode & IterMode.ExcludeBuffers) return null;\n\t\tlet { buffer } = this.context;\n\t\tlet index = buffer.findChild(this.index + 4, buffer.buffer[this.index + 3], side > 0 ? 1 : -1, pos - this.context.start, side);\n\t\treturn index < 0 ? null : new BufferNode(this.context, this, index);\n\t}\n\tget parent() {\n\t\treturn this._parent || this.context.parent.nextSignificantParent();\n\t}\n\texternalSibling(dir) {\n\t\treturn this._parent ? null : this.context.parent.nextChild(this.context.index + dir, dir, 0, 4);\n\t}\n\tget nextSibling() {\n\t\tlet { buffer } = this.context;\n\t\tlet after = buffer.buffer[this.index + 3];\n\t\tif (after < (this._parent ? buffer.buffer[this._parent.index + 3] : buffer.buffer.length)) return new BufferNode(this.context, this._parent, after);\n\t\treturn this.externalSibling(1);\n\t}\n\tget prevSibling() {\n\t\tlet { buffer } = this.context;\n\t\tlet parentStart = this._parent ? this._parent.index + 4 : 0;\n\t\tif (this.index == parentStart) return this.externalSibling(-1);\n\t\treturn new BufferNode(this.context, this._parent, buffer.findChild(parentStart, this.index, -1, 0, 4));\n\t}\n\tget tree() {\n\t\treturn null;\n\t}\n\ttoTree() {\n\t\tlet children = [], positions = [];\n\t\tlet { buffer } = this.context;\n\t\tlet startI = this.index + 4, endI = buffer.buffer[this.index + 3];\n\t\tif (endI > startI) {\n\t\t\tlet from = buffer.buffer[this.index + 1];\n\t\t\tchildren.push(buffer.slice(startI, endI, from));\n\t\t\tpositions.push(0);\n\t\t}\n\t\treturn new Tree(this.type, children, positions, this.to - this.from);\n\t}\n\t/**\n\t@internal\n\t*/\n\ttoString() {\n\t\treturn this.context.buffer.childString(this.index);\n\t}\n};\nfunction iterStack(heads) {\n\tif (!heads.length) return null;\n\tlet pick = 0, picked = heads[0];\n\tfor (let i = 1; i < heads.length; i++) {\n\t\tlet node = heads[i];\n\t\tif (node.from > picked.from || node.to < picked.to) {\n\t\t\tpicked = node;\n\t\t\tpick = i;\n\t\t}\n\t}\n\tlet next = picked instanceof TreeNode && picked.index < 0 ? null : picked.parent;\n\tlet newHeads = heads.slice();\n\tif (next) newHeads[pick] = next;\n\telse newHeads.splice(pick, 1);\n\treturn new StackIterator(newHeads, picked);\n}\nvar StackIterator = class {\n\tconstructor(heads, node) {\n\t\tthis.heads = heads;\n\t\tthis.node = node;\n\t}\n\tget next() {\n\t\treturn iterStack(this.heads);\n\t}\n};\nfunction stackIterator(tree, pos, side) {\n\tlet inner = tree.resolveInner(pos, side), layers = null;\n\tfor (let scan = inner instanceof TreeNode ? inner : inner.context.parent; scan; scan = scan.parent) if (scan.index < 0) {\n\t\tlet parent = scan.parent;\n\t\t(layers || (layers = [inner])).push(parent.resolve(pos, side));\n\t\tscan = parent;\n\t} else {\n\t\tlet mount = MountedTree.get(scan.tree);\n\t\tif (mount && mount.overlay && mount.overlay[0].from <= pos && mount.overlay[mount.overlay.length - 1].to >= pos) {\n\t\t\tlet root = new TreeNode(mount.tree, mount.overlay[0].from + scan.from, -1, scan);\n\t\t\t(layers || (layers = [inner])).push(resolveNode(root, pos, side, false));\n\t\t}\n\t}\n\treturn layers ? iterStack(layers) : inner;\n}\n/**\nA tree cursor object focuses on a given node in a syntax tree, and\nallows you to move to adjacent nodes.\n*/\nvar TreeCursor = class {\n\t/**\n\tShorthand for `.type.name`.\n\t*/\n\tget name() {\n\t\treturn this.type.name;\n\t}\n\t/**\n\t@internal\n\t*/\n\tconstructor(node, mode = 0) {\n\t\t/**\n\t\t@internal\n\t\t*/\n\t\tthis.buffer = null;\n\t\tthis.stack = [];\n\t\t/**\n\t\t@internal\n\t\t*/\n\t\tthis.index = 0;\n\t\tthis.bufferNode = null;\n\t\tthis.mode = mode & ~IterMode.EnterBracketed;\n\t\tif (node instanceof TreeNode) this.yieldNode(node);\n\t\telse {\n\t\t\tthis._tree = node.context.parent;\n\t\t\tthis.buffer = node.context;\n\t\t\tfor (let n = node._parent; n; n = n._parent) this.stack.unshift(n.index);\n\t\t\tthis.bufferNode = node;\n\t\t\tthis.yieldBuf(node.index);\n\t\t}\n\t}\n\tyieldNode(node) {\n\t\tif (!node) return false;\n\t\tthis._tree = node;\n\t\tthis.type = node.type;\n\t\tthis.from = node.from;\n\t\tthis.to = node.to;\n\t\treturn true;\n\t}\n\tyieldBuf(index, type) {\n\t\tthis.index = index;\n\t\tlet { start, buffer } = this.buffer;\n\t\tthis.type = type || buffer.set.types[buffer.buffer[index]];\n\t\tthis.from = start + buffer.buffer[index + 1];\n\t\tthis.to = start + buffer.buffer[index + 2];\n\t\treturn true;\n\t}\n\t/**\n\t@internal\n\t*/\n\tyield(node) {\n\t\tif (!node) return false;\n\t\tif (node instanceof TreeNode) {\n\t\t\tthis.buffer = null;\n\t\t\treturn this.yieldNode(node);\n\t\t}\n\t\tthis.buffer = node.context;\n\t\treturn this.yieldBuf(node.index, node.type);\n\t}\n\t/**\n\t@internal\n\t*/\n\ttoString() {\n\t\treturn this.buffer ? this.buffer.buffer.childString(this.index) : this._tree.toString();\n\t}\n\t/**\n\t@internal\n\t*/\n\tenterChild(dir, pos, side) {\n\t\tif (!this.buffer) return this.yield(this._tree.nextChild(dir < 0 ? this._tree._tree.children.length - 1 : 0, dir, pos, side, this.mode));\n\t\tlet { buffer } = this.buffer;\n\t\tlet index = buffer.findChild(this.index + 4, buffer.buffer[this.index + 3], dir, pos - this.buffer.start, side);\n\t\tif (index < 0) return false;\n\t\tthis.stack.push(this.index);\n\t\treturn this.yieldBuf(index);\n\t}\n\t/**\n\tMove the cursor to this node's first child. When this returns\n\tfalse, the node has no child, and the cursor has not been moved.\n\t*/\n\tfirstChild() {\n\t\treturn this.enterChild(1, 0, 4);\n\t}\n\t/**\n\tMove the cursor to this node's last child.\n\t*/\n\tlastChild() {\n\t\treturn this.enterChild(-1, 0, 4);\n\t}\n\t/**\n\tMove the cursor to the first child that ends after `pos`.\n\t*/\n\tchildAfter(pos) {\n\t\treturn this.enterChild(1, pos, 2);\n\t}\n\t/**\n\tMove to the last child that starts before `pos`.\n\t*/\n\tchildBefore(pos) {\n\t\treturn this.enterChild(-1, pos, -2);\n\t}\n\t/**\n\tMove the cursor to the child around `pos`. If side is -1 the\n\tchild may end at that position, when 1 it may start there. This\n\twill also enter [overlaid](#common.MountedTree.overlay)\n\t[mounted](#common.NodeProp^mounted) trees unless `overlays` is\n\tset to false.\n\t*/\n\tenter(pos, side, mode = this.mode) {\n\t\tif (!this.buffer) return this.yield(this._tree.enter(pos, side, mode));\n\t\treturn mode & IterMode.ExcludeBuffers ? false : this.enterChild(1, pos, side);\n\t}\n\t/**\n\tMove to the node's parent node, if this isn't the top node.\n\t*/\n\tparent() {\n\t\tif (!this.buffer) return this.yieldNode(this.mode & IterMode.IncludeAnonymous ? this._tree._parent : this._tree.parent);\n\t\tif (this.stack.length) return this.yieldBuf(this.stack.pop());\n\t\tlet parent = this.mode & IterMode.IncludeAnonymous ? this.buffer.parent : this.buffer.parent.nextSignificantParent();\n\t\tthis.buffer = null;\n\t\treturn this.yieldNode(parent);\n\t}\n\t/**\n\t@internal\n\t*/\n\tsibling(dir) {\n\t\tif (!this.buffer) return !this._tree._parent ? false : this.yield(this._tree.index < 0 ? null : this._tree._parent.nextChild(this._tree.index + dir, dir, 0, 4, this.mode));\n\t\tlet { buffer } = this.buffer, d = this.stack.length - 1;\n\t\tif (dir < 0) {\n\t\t\tlet parentStart = d < 0 ? 0 : this.stack[d] + 4;\n\t\t\tif (this.index != parentStart) return this.yieldBuf(buffer.findChild(parentStart, this.index, -1, 0, 4));\n\t\t} else {\n\t\t\tlet after = buffer.buffer[this.index + 3];\n\t\t\tif (after < (d < 0 ? buffer.buffer.length : buffer.buffer[this.stack[d] + 3])) return this.yieldBuf(after);\n\t\t}\n\t\treturn d < 0 ? this.yield(this.buffer.parent.nextChild(this.buffer.index + dir, dir, 0, 4, this.mode)) : false;\n\t}\n\t/**\n\tMove to this node's next sibling, if any.\n\t*/\n\tnextSibling() {\n\t\treturn this.sibling(1);\n\t}\n\t/**\n\tMove to this node's previous sibling, if any.\n\t*/\n\tprevSibling() {\n\t\treturn this.sibling(-1);\n\t}\n\tatLastNode(dir) {\n\t\tlet index, parent, { buffer } = this;\n\t\tif (buffer) {\n\t\t\tif (dir > 0) {\n\t\t\t\tif (this.index < buffer.buffer.buffer.length) return false;\n\t\t\t} else for (let i = 0; i < this.index; i++) if (buffer.buffer.buffer[i + 3] < this.index) return false;\n\t\t\t({index, parent} = buffer);\n\t\t} else ({index, _parent: parent} = this._tree);\n\t\tfor (; parent; {index, _parent: parent} = parent) if (index > -1) for (let i = index + dir, e = dir < 0 ? -1 : parent._tree.children.length; i != e; i += dir) {\n\t\t\tlet child = parent._tree.children[i];\n\t\t\tif (this.mode & IterMode.IncludeAnonymous || child instanceof TreeBuffer || !child.type.isAnonymous || hasChild(child)) return false;\n\t\t}\n\t\treturn true;\n\t}\n\tmove(dir, enter) {\n\t\tif (enter && this.enterChild(dir, 0, 4)) return true;\n\t\tfor (;;) {\n\t\t\tif (this.sibling(dir)) return true;\n\t\t\tif (this.atLastNode(dir) || !this.parent()) return false;\n\t\t}\n\t}\n\t/**\n\tMove to the next node in a\n\t[pre-order](https://en.wikipedia.org/wiki/Tree_traversal#Pre-order,_NLR)\n\ttraversal, going from a node to its first child or, if the\n\tcurrent node is empty or `enter` is false, its next sibling or\n\tthe next sibling of the first parent node that has one.\n\t*/\n\tnext(enter = true) {\n\t\treturn this.move(1, enter);\n\t}\n\t/**\n\tMove to the next node in a last-to-first pre-order traversal. A\n\tnode is followed by its last child or, if it has none, its\n\tprevious sibling or the previous sibling of the first parent\n\tnode that has one.\n\t*/\n\tprev(enter = true) {\n\t\treturn this.move(-1, enter);\n\t}\n\t/**\n\tMove the cursor to the innermost node that covers `pos`. If\n\t`side` is -1, it will enter nodes that end at `pos`. If it is 1,\n\tit will enter nodes that start at `pos`.\n\t*/\n\tmoveTo(pos, side = 0) {\n\t\twhile (this.from == this.to || (side < 1 ? this.from >= pos : this.from > pos) || (side > -1 ? this.to <= pos : this.to < pos)) if (!this.parent()) break;\n\t\twhile (this.enterChild(1, pos, side));\n\t\treturn this;\n\t}\n\t/**\n\tGet a [syntax node](#common.SyntaxNode) at the cursor's current\n\tposition.\n\t*/\n\tget node() {\n\t\tif (!this.buffer) return this._tree;\n\t\tlet cache = this.bufferNode, result = null, depth = 0;\n\t\tif (cache && cache.context == this.buffer) scan: for (let index = this.index, d = this.stack.length; d >= 0;) {\n\t\t\tfor (let c = cache; c; c = c._parent) if (c.index == index) {\n\t\t\t\tif (index == this.index) return c;\n\t\t\t\tresult = c;\n\t\t\t\tdepth = d + 1;\n\t\t\t\tbreak scan;\n\t\t\t}\n\t\t\tindex = this.stack[--d];\n\t\t}\n\t\tfor (let i = depth; i < this.stack.length; i++) result = new BufferNode(this.buffer, result, this.stack[i]);\n\t\treturn this.bufferNode = new BufferNode(this.buffer, result, this.index);\n\t}\n\t/**\n\tGet the [tree](#common.Tree) that represents the current node, if\n\tany. Will return null when the node is in a [tree\n\tbuffer](#common.TreeBuffer).\n\t*/\n\tget tree() {\n\t\treturn this.buffer ? null : this._tree._tree;\n\t}\n\t/**\n\tIterate over the current node and all its descendants, calling\n\t`enter` when entering a node and `leave`, if given, when leaving\n\tone. When `enter` returns `false`, any children of that node are\n\tskipped, and `leave` isn't called for it.\n\t*/\n\titerate(enter, leave) {\n\t\tfor (let depth = 0;;) {\n\t\t\tlet mustLeave = false;\n\t\t\tif (this.type.isAnonymous || enter(this) !== false) {\n\t\t\t\tif (this.firstChild()) {\n\t\t\t\t\tdepth++;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (!this.type.isAnonymous) mustLeave = true;\n\t\t\t}\n\t\t\tfor (;;) {\n\t\t\t\tif (mustLeave && leave) leave(this);\n\t\t\t\tmustLeave = this.type.isAnonymous;\n\t\t\t\tif (!depth) return;\n\t\t\t\tif (this.nextSibling()) break;\n\t\t\t\tthis.parent();\n\t\t\t\tdepth--;\n\t\t\t\tmustLeave = true;\n\t\t\t}\n\t\t}\n\t}\n\t/**\n\tTest whether the current node matches a given context—a sequence\n\tof direct parent node names. Empty strings in the context array\n\tare treated as wildcards.\n\t*/\n\tmatchContext(context) {\n\t\tif (!this.buffer) return matchNodeContext(this.node.parent, context);\n\t\tlet { buffer } = this.buffer, { types } = buffer.set;\n\t\tfor (let i = context.length - 1, d = this.stack.length - 1; i >= 0; d--) {\n\t\t\tif (d < 0) return matchNodeContext(this._tree, context, i);\n\t\t\tlet type = types[buffer.buffer[this.stack[d]]];\n\t\t\tif (!type.isAnonymous) {\n\t\t\t\tif (context[i] && context[i] != type.name) return false;\n\t\t\t\ti--;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n};\nfunction hasChild(tree) {\n\treturn tree.children.some((ch) => ch instanceof TreeBuffer || !ch.type.isAnonymous || hasChild(ch));\n}\nfunction buildTree(data) {\n\tvar _a;\n\tlet { buffer, nodeSet, maxBufferLength = DefaultBufferLength, reused = [], minRepeatType = nodeSet.types.length } = data;\n\tlet cursor = Array.isArray(buffer) ? new FlatBufferCursor(buffer, buffer.length) : buffer;\n\tlet types = nodeSet.types;\n\tlet contextHash = 0, lookAhead = 0;\n\tfunction takeNode(parentStart, minPos, children, positions, inRepeat, depth) {\n\t\tlet { id, start, end, size } = cursor;\n\t\tlet lookAheadAtStart = lookAhead, contextAtStart = contextHash;\n\t\tif (size < 0) {\n\t\t\tcursor.next();\n\t\t\tif (size == -1) {\n\t\t\t\tlet node = reused[id];\n\t\t\t\tchildren.push(node);\n\t\t\t\tpositions.push(start - parentStart);\n\t\t\t\treturn;\n\t\t\t} else if (size == -3) {\n\t\t\t\tcontextHash = id;\n\t\t\t\treturn;\n\t\t\t} else if (size == -4) {\n\t\t\t\tlookAhead = id;\n\t\t\t\treturn;\n\t\t\t} else throw new RangeError(`Unrecognized record size: ${size}`);\n\t\t}\n\t\tlet type = types[id], node, buffer;\n\t\tlet startPos = start - parentStart;\n\t\tif (end - start <= maxBufferLength && (buffer = findBufferSize(cursor.pos - minPos, inRepeat))) {\n\t\t\tlet data = new Uint16Array(buffer.size - buffer.skip);\n\t\t\tlet endPos = cursor.pos - buffer.size, index = data.length;\n\t\t\twhile (cursor.pos > endPos) index = copyToBuffer(buffer.start, data, index);\n\t\t\tnode = new TreeBuffer(data, end - buffer.start, nodeSet);\n\t\t\tstartPos = buffer.start - parentStart;\n\t\t} else {\n\t\t\tlet endPos = cursor.pos - size;\n\t\t\tcursor.next();\n\t\t\tlet localChildren = [], localPositions = [];\n\t\t\tlet localInRepeat = id >= minRepeatType ? id : -1;\n\t\t\tlet lastGroup = 0, lastEnd = end;\n\t\t\twhile (cursor.pos > endPos) if (localInRepeat >= 0 && cursor.id == localInRepeat && cursor.size >= 0) {\n\t\t\t\tif (cursor.end <= lastEnd - maxBufferLength) {\n\t\t\t\t\tmakeRepeatLeaf(localChildren, localPositions, start, lastGroup, cursor.end, lastEnd, localInRepeat, lookAheadAtStart, contextAtStart);\n\t\t\t\t\tlastGroup = localChildren.length;\n\t\t\t\t\tlastEnd = cursor.end;\n\t\t\t\t}\n\t\t\t\tcursor.next();\n\t\t\t} else if (depth > 2500) takeFlatNode(start, endPos, localChildren, localPositions);\n\t\t\telse takeNode(start, endPos, localChildren, localPositions, localInRepeat, depth + 1);\n\t\t\tif (localInRepeat >= 0 && lastGroup > 0 && lastGroup < localChildren.length) makeRepeatLeaf(localChildren, localPositions, start, lastGroup, start, lastEnd, localInRepeat, lookAheadAtStart, contextAtStart);\n\t\t\tlocalChildren.reverse();\n\t\t\tlocalPositions.reverse();\n\t\t\tif (localInRepeat > -1 && lastGroup > 0) {\n\t\t\t\tlet make = makeBalanced(type, contextAtStart);\n\t\t\t\tnode = balanceRange(type, localChildren, localPositions, 0, localChildren.length, 0, end - start, make, make);\n\t\t\t} else node = makeTree(type, localChildren, localPositions, end - start, lookAheadAtStart - end, contextAtStart);\n\t\t}\n\t\tchildren.push(node);\n\t\tpositions.push(startPos);\n\t}\n\tfunction takeFlatNode(parentStart, minPos, children, positions) {\n\t\tlet nodes = [];\n\t\tlet nodeCount = 0, stopAt = -1;\n\t\twhile (cursor.pos > minPos) {\n\t\t\tlet { id, start, end, size } = cursor;\n\t\t\tif (size > 4) cursor.next();\n\t\t\telse if (stopAt > -1 && start < stopAt) break;\n\t\t\telse {\n\t\t\t\tif (stopAt < 0) stopAt = end - maxBufferLength;\n\t\t\t\tnodes.push(id, start, end);\n\t\t\t\tnodeCount++;\n\t\t\t\tcursor.next();\n\t\t\t}\n\t\t}\n\t\tif (nodeCount) {\n\t\t\tlet buffer = new Uint16Array(nodeCount * 4);\n\t\t\tlet start = nodes[nodes.length - 2];\n\t\t\tfor (let i = nodes.length - 3, j = 0; i >= 0; i -= 3) {\n\t\t\t\tbuffer[j++] = nodes[i];\n\t\t\t\tbuffer[j++] = nodes[i + 1] - start;\n\t\t\t\tbuffer[j++] = nodes[i + 2] - start;\n\t\t\t\tbuffer[j++] = j;\n\t\t\t}\n\t\t\tchildren.push(new TreeBuffer(buffer, nodes[2] - start, nodeSet));\n\t\t\tpositions.push(start - parentStart);\n\t\t}\n\t}\n\tfunction makeBalanced(type, contextHash) {\n\t\treturn (children, positions, length) => {\n\t\t\tlet lookAhead = 0, lastI = children.length - 1, last, lookAheadProp;\n\t\t\tif (lastI >= 0 && (last = children[lastI]) instanceof Tree) {\n\t\t\t\tif (!lastI && last.type == type && last.length == length) return last;\n\t\t\t\tif (lookAheadProp = last.prop(NodeProp.lookAhead)) lookAhead = positions[lastI] + last.length + lookAheadProp;\n\t\t\t}\n\t\t\treturn makeTree(type, children, positions, length, lookAhead, contextHash);\n\t\t};\n\t}\n\tfunction makeRepeatLeaf(children, positions, base, i, from, to, type, lookAhead, contextHash) {\n\t\tlet localChildren = [], localPositions = [];\n\t\twhile (children.length > i) {\n\t\t\tlocalChildren.push(children.pop());\n\t\t\tlocalPositions.push(positions.pop() + base - from);\n\t\t}\n\t\tchildren.push(makeTree(nodeSet.types[type], localChildren, localPositions, to - from, lookAhead - to, contextHash));\n\t\tpositions.push(from - base);\n\t}\n\tfunction makeTree(type, children, positions, length, lookAhead, contextHash, props) {\n\t\tif (contextHash) {\n\t\t\tlet pair = [NodeProp.contextHash, contextHash];\n\t\t\tprops = props ? [pair].concat(props) : [pair];\n\t\t}\n\t\tif (lookAhead > 25) {\n\t\t\tlet pair = [NodeProp.lookAhead, lookAhead];\n\t\t\tprops = props ? [pair].concat(props) : [pair];\n\t\t}\n\t\treturn new Tree(type, children, positions, length, props);\n\t}\n\tfunction findBufferSize(maxSize, inRepeat) {\n\t\tlet fork = cursor.fork();\n\t\tlet size = 0, start = 0, skip = 0, minStart = fork.end - maxBufferLength;\n\t\tlet result = {\n\t\t\tsize: 0,\n\t\t\tstart: 0,\n\t\t\tskip: 0\n\t\t};\n\t\tscan: for (let minPos = fork.pos - maxSize; fork.pos > minPos;) {\n\t\t\tlet nodeSize = fork.size;\n\t\t\tif (fork.id == inRepeat && nodeSize >= 0) {\n\t\t\t\tresult.size = size;\n\t\t\t\tresult.start = start;\n\t\t\t\tresult.skip = skip;\n\t\t\t\tskip += 4;\n\t\t\t\tsize += 4;\n\t\t\t\tfork.next();\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tlet startPos = fork.pos - nodeSize;\n\t\t\tif (nodeSize < 0 || startPos < minPos || fork.start < minStart) break;\n\t\t\tlet localSkipped = fork.id >= minRepeatType ? 4 : 0;\n\t\t\tlet nodeStart = fork.start;\n\t\t\tfork.next();\n\t\t\twhile (fork.pos > startPos) {\n\t\t\t\tif (fork.size < 0) if (fork.size == -3 || fork.size == -4) localSkipped += 4;\n\t\t\t\telse break scan;\n\t\t\t\telse if (fork.id >= minRepeatType) localSkipped += 4;\n\t\t\t\tfork.next();\n\t\t\t}\n\t\t\tstart = nodeStart;\n\t\t\tsize += nodeSize;\n\t\t\tskip += localSkipped;\n\t\t}\n\t\tif (inRepeat < 0 || size == maxSize) {\n\t\t\tresult.size = size;\n\t\t\tresult.start = start;\n\t\t\tresult.skip = skip;\n\t\t}\n\t\treturn result.size > 4 ? result : void 0;\n\t}\n\tfunction copyToBuffer(bufferStart, buffer, index) {\n\t\tlet { id, start, end, size } = cursor;\n\t\tcursor.next();\n\t\tif (size >= 0 && id < minRepeatType) {\n\t\t\tlet startIndex = index;\n\t\t\tif (size > 4) {\n\t\t\t\tlet endPos = cursor.pos - (size - 4);\n\t\t\t\twhile (cursor.pos > endPos) index = copyToBuffer(bufferStart, buffer, index);\n\t\t\t}\n\t\t\tbuffer[--index] = startIndex;\n\t\t\tbuffer[--index] = end - bufferStart;\n\t\t\tbuffer[--index] = start - bufferStart;\n\t\t\tbuffer[--index] = id;\n\t\t} else if (size == -3) contextHash = id;\n\t\telse if (size == -4) lookAhead = id;\n\t\treturn index;\n\t}\n\tlet children = [], positions = [];\n\twhile (cursor.pos > 0) takeNode(data.start || 0, data.bufferStart || 0, children, positions, -1, 0);\n\tlet length = (_a = data.length) !== null && _a !== void 0 ? _a : children.length ? positions[0] + children[0].length : 0;\n\treturn new Tree(types[data.topID], children.reverse(), positions.reverse(), length);\n}\nconst nodeSizeCache = /* @__PURE__ */ new WeakMap();\nfunction nodeSize(balanceType, node) {\n\tif (!balanceType.isAnonymous || node instanceof TreeBuffer || node.type != balanceType) return 1;\n\tlet size = nodeSizeCache.get(node);\n\tif (size == null) {\n\t\tsize = 1;\n\t\tfor (let child of node.children) {\n\t\t\tif (child.type != balanceType || !(child instanceof Tree)) {\n\t\t\t\tsize = 1;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tsize += nodeSize(balanceType, child);\n\t\t}\n\t\tnodeSizeCache.set(node, size);\n\t}\n\treturn size;\n}\nfunction balanceRange(balanceType, children, positions, from, to, start, length, mkTop, mkTree) {\n\tlet total = 0;\n\tfor (let i = from; i < to; i++) total += nodeSize(balanceType, children[i]);\n\tlet maxChild = Math.ceil(total * 1.5 / 8);\n\tlet localChildren = [], localPositions = [];\n\tfunction divide(children, positions, from, to, offset) {\n\t\tfor (let i = from; i < to;) {\n\t\t\tlet groupFrom = i, groupStart = positions[i], groupSize = nodeSize(balanceType, children[i]);\n\t\t\ti++;\n\t\t\tfor (; i < to; i++) {\n\t\t\t\tlet nextSize = nodeSize(balanceType, children[i]);\n\t\t\t\tif (groupSize + nextSize >= maxChild) break;\n\t\t\t\tgroupSize += nextSize;\n\t\t\t}\n\t\t\tif (i == groupFrom + 1) {\n\t\t\t\tif (groupSize > maxChild) {\n\t\t\t\t\tlet only = children[groupFrom];\n\t\t\t\t\tdivide(only.children, only.positions, 0, only.children.length, positions[groupFrom] + offset);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tlocalChildren.push(children[groupFrom]);\n\t\t\t} else {\n\t\t\t\tlet length = positions[i - 1] + children[i - 1].length - groupStart;\n\t\t\t\tlocalChildren.push(balanceRange(balanceType, children, positions, groupFrom, i, groupStart, length, null, mkTree));\n\t\t\t}\n\t\t\tlocalPositions.push(groupStart + offset - start);\n\t\t}\n\t}\n\tdivide(children, positions, from, to, 0);\n\treturn (mkTop || mkTree)(localChildren, localPositions, length);\n}\n/**\nTree fragments are used during [incremental\nparsing](#common.Parser.startParse) to track parts of old trees\nthat can be reused in a new parse. An array of fragments is used\nto track regions of an old tree whose nodes might be reused in new\nparses. Use the static\n[`applyChanges`](#common.TreeFragment^applyChanges) method to\nupdate fragments for document changes.\n*/\nvar TreeFragment = class TreeFragment {\n\t/**\n\tConstruct a tree fragment. You'll usually want to use\n\t[`addTree`](#common.TreeFragment^addTree) and\n\t[`applyChanges`](#common.TreeFragment^applyChanges) instead of\n\tcalling this directly.\n\t*/\n\tconstructor(from, to, tree, offset, openStart = false, openEnd = false) {\n\t\tthis.from = from;\n\t\tthis.to = to;\n\t\tthis.tree = tree;\n\t\tthis.offset = offset;\n\t\tthis.open = (openStart ? 1 : 0) | (openEnd ? 2 : 0);\n\t}\n\t/**\n\tWhether the start of the fragment represents the start of a\n\tparse, or the end of a change. (In the second case, it may not\n\tbe safe to reuse some nodes at the start, depending on the\n\tparsing algorithm.)\n\t*/\n\tget openStart() {\n\t\treturn (this.open & 1) > 0;\n\t}\n\t/**\n\tWhether the end of the fragment represents the end of a\n\tfull-document parse, or the start of a change.\n\t*/\n\tget openEnd() {\n\t\treturn (this.open & 2) > 0;\n\t}\n\t/**\n\tCreate a set of fragments from a freshly parsed tree, or update\n\tan existing set of fragments by replacing the ones that overlap\n\twith a tree with content from the new tree. When `partial` is\n\ttrue, the parse is treated as incomplete, and the resulting\n\tfragment has [`openEnd`](#common.TreeFragment.openEnd) set to\n\ttrue.\n\t*/\n\tstatic addTree(tree, fragments = [], partial = false) {\n\t\tlet result = [new TreeFragment(0, tree.length, tree, 0, false, partial)];\n\t\tfor (let f of fragments) if (f.to > tree.length) result.push(f);\n\t\treturn result;\n\t}\n\t/**\n\tApply a set of edits to an array of fragments, removing or\n\tsplitting fragments as necessary to remove edited ranges, and\n\tadjusting offsets for fragments that moved.\n\t*/\n\tstatic applyChanges(fragments, changes, minGap = 128) {\n\t\tif (!changes.length) return fragments;\n\t\tlet result = [];\n\t\tlet fI = 1, nextF = fragments.length ? fragments[0] : null;\n\t\tfor (let cI = 0, pos = 0, off = 0;; cI++) {\n\t\t\tlet nextC = cI < changes.length ? changes[cI] : null;\n\t\t\tlet nextPos = nextC ? nextC.fromA : 1e9;\n\t\t\tif (nextPos - pos >= minGap) while (nextF && nextF.from < nextPos) {\n\t\t\t\tlet cut = nextF;\n\t\t\t\tif (pos >= cut.from || nextPos <= cut.to || off) {\n\t\t\t\t\tlet fFrom = Math.max(cut.from, pos) - off, fTo = Math.min(cut.to, nextPos) - off;\n\t\t\t\t\tcut = fFrom >= fTo ? null : new TreeFragment(fFrom, fTo, cut.tree, cut.offset + off, cI > 0, !!nextC);\n\t\t\t\t}\n\t\t\t\tif (cut) result.push(cut);\n\t\t\t\tif (nextF.to > nextPos) break;\n\t\t\t\tnextF = fI < fragments.length ? fragments[fI++] : null;\n\t\t\t}\n\t\t\tif (!nextC) break;\n\t\t\tpos = nextC.toA;\n\t\t\toff = nextC.toA - nextC.toB;\n\t\t}\n\t\treturn result;\n\t}\n};\n/**\nA superclass that parsers should extend.\n*/\nvar Parser = class {\n\t/**\n\tStart a parse, returning a [partial parse](#common.PartialParse)\n\tobject. [`fragments`](#common.TreeFragment) can be passed in to\n\tmake the parse incremental.\n\t\n\tBy default, the entire input is parsed. You can pass `ranges`,\n\twhich should be a sorted array of non-empty, non-overlapping\n\tranges, to parse only those ranges. The tree returned in that\n\tcase will start at `ranges[0].from`.\n\t*/\n\tstartParse(input, fragments, ranges) {\n\t\tif (typeof input == \"string\") input = new StringInput(input);\n\t\tranges = !ranges ? [new Range(0, input.length)] : ranges.length ? ranges.map((r) => new Range(r.from, r.to)) : [new Range(0, 0)];\n\t\treturn this.createParse(input, fragments || [], ranges);\n\t}\n\t/**\n\tRun a full parse, returning the resulting tree.\n\t*/\n\tparse(input, fragments, ranges) {\n\t\tlet parse = this.startParse(input, fragments, ranges);\n\t\tfor (;;) {\n\t\t\tlet done = parse.advance();\n\t\t\tif (done) return done;\n\t\t}\n\t}\n};\nvar StringInput = class {\n\tconstructor(string) {\n\t\tthis.string = string;\n\t}\n\tget length() {\n\t\treturn this.string.length;\n\t}\n\tchunk(from) {\n\t\treturn this.string.slice(from);\n\t}\n\tget lineChunks() {\n\t\treturn false;\n\t}\n\tread(from, to) {\n\t\treturn this.string.slice(from, to);\n\t}\n};\nnew NodeProp({ perNode: true });\n//#endregion\n//#region ../../node_modules/.pnpm/@lezer+lr@1.4.8/node_modules/@lezer/lr/dist/index.js\n/**\nA parse stack. These are used internally by the parser to track\nparsing progress. They also provide some properties and methods\nthat external code such as a tokenizer can use to get information\nabout the parse state.\n*/\nvar Stack = class Stack {\n\t/**\n\t@internal\n\t*/\n\tconstructor(p, stack, state, reducePos, pos, score, buffer, bufferBase, curContext, lookAhead = 0, parent) {\n\t\tthis.p = p;\n\t\tthis.stack = stack;\n\t\tthis.state = state;\n\t\tthis.reducePos = reducePos;\n\t\tthis.pos = pos;\n\t\tthis.score = score;\n\t\tthis.buffer = buffer;\n\t\tthis.bufferBase = bufferBase;\n\t\tthis.curContext = curContext;\n\t\tthis.lookAhead = lookAhead;\n\t\tthis.parent = parent;\n\t}\n\t/**\n\t@internal\n\t*/\n\ttoString() {\n\t\treturn `[${this.stack.filter((_, i) => i % 3 == 0).concat(this.state)}]@${this.pos}${this.score ? \"!\" + this.score : \"\"}`;\n\t}\n\t/**\n\t@internal\n\t*/\n\tstatic start(p, state, pos = 0) {\n\t\tlet cx = p.parser.context;\n\t\treturn new Stack(p, [], state, pos, pos, 0, [], 0, cx ? new StackContext(cx, cx.start) : null, 0, null);\n\t}\n\t/**\n\tThe stack's current [context](#lr.ContextTracker) value, if\n\tany. Its type will depend on the context tracker's type\n\tparameter, or it will be `null` if there is no context\n\ttracker.\n\t*/\n\tget context() {\n\t\treturn this.curContext ? this.curContext.context : null;\n\t}\n\t/**\n\t@internal\n\t*/\n\tpushState(state, start) {\n\t\tthis.stack.push(this.state, start, this.bufferBase + this.buffer.length);\n\t\tthis.state = state;\n\t}\n\t/**\n\t@internal\n\t*/\n\treduce(action) {\n\t\tvar _a;\n\t\tlet depth = action >> 19, type = action & 65535;\n\t\tlet { parser } = this.p;\n\t\tlet lookaheadRecord = this.reducePos < this.pos - 25 && this.setLookAhead(this.pos);\n\t\tlet dPrec = parser.dynamicPrecedence(type);\n\t\tif (dPrec) this.score += dPrec;\n\t\tif (depth == 0) {\n\t\t\tthis.pushState(parser.getGoto(this.state, type, true), this.reducePos);\n\t\t\tif (type < parser.minRepeatTerm) this.storeNode(type, this.reducePos, this.reducePos, lookaheadRecord ? 8 : 4, true);\n\t\t\tthis.reduceContext(type, this.reducePos);\n\t\t\treturn;\n\t\t}\n\t\tlet base = this.stack.length - (depth - 1) * 3 - (action & 262144 ? 6 : 0);\n\t\tlet start = base ? this.stack[base - 2] : this.p.ranges[0].from, size = this.reducePos - start;\n\t\tif (size >= 2e3 && !((_a = this.p.parser.nodeSet.types[type]) === null || _a === void 0 ? void 0 : _a.isAnonymous)) {\n\t\t\tif (start == this.p.lastBigReductionStart) {\n\t\t\t\tthis.p.bigReductionCount++;\n\t\t\t\tthis.p.lastBigReductionSize = size;\n\t\t\t} else if (this.p.lastBigReductionSize < size) {\n\t\t\t\tthis.p.bigReductionCount = 1;\n\t\t\t\tthis.p.lastBigReductionStart = start;\n\t\t\t\tthis.p.lastBigReductionSize = size;\n\t\t\t}\n\t\t}\n\t\tlet bufferBase = base ? this.stack[base - 1] : 0, count = this.bufferBase + this.buffer.length - bufferBase;\n\t\tif (type < parser.minRepeatTerm || action & 131072) {\n\t\t\tlet pos = parser.stateFlag(this.state, 1) ? this.pos : this.reducePos;\n\t\t\tthis.storeNode(type, start, pos, count + 4, true);\n\t\t}\n\t\tif (action & 262144) this.state = this.stack[base];\n\t\telse {\n\t\t\tlet baseStateID = this.stack[base - 3];\n\t\t\tthis.state = parser.getGoto(baseStateID, type, true);\n\t\t}\n\t\twhile (this.stack.length > base) this.stack.pop();\n\t\tthis.reduceContext(type, start);\n\t}\n\t/**\n\t@internal\n\t*/\n\tstoreNode(term, start, end, size = 4, mustSink = false) {\n\t\tif (term == 0 && (!this.stack.length || this.stack[this.stack.length - 1] < this.buffer.length + this.bufferBase)) {\n\t\t\tlet cur = this, top = this.buffer.length;\n\t\t\tif (top == 0 && cur.parent) {\n\t\t\t\ttop = cur.bufferBase - cur.parent.bufferBase;\n\t\t\t\tcur = cur.parent;\n\t\t\t}\n\t\t\tif (top > 0 && cur.buffer[top - 4] == 0 && cur.buffer[top - 1] > -1) {\n\t\t\t\tif (start == end) return;\n\t\t\t\tif (cur.buffer[top - 2] >= start) {\n\t\t\t\t\tcur.buffer[top - 2] = end;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (!mustSink || this.pos == end) this.buffer.push(term, start, end, size);\n\t\telse {\n\t\t\tlet index = this.buffer.length;\n\t\t\tif (index > 0 && (this.buffer[index - 4] != 0 || this.buffer[index - 1] < 0)) {\n\t\t\t\tlet mustMove = false;\n\t\t\t\tfor (let scan = index; scan > 0 && this.buffer[scan - 2] > end; scan -= 4) if (this.buffer[scan - 1] >= 0) {\n\t\t\t\t\tmustMove = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (mustMove) while (index > 0 && this.buffer[index - 2] > end) {\n\t\t\t\t\tthis.buffer[index] = this.buffer[index - 4];\n\t\t\t\t\tthis.buffer[index + 1] = this.buffer[index - 3];\n\t\t\t\t\tthis.buffer[index + 2] = this.buffer[index - 2];\n\t\t\t\t\tthis.buffer[index + 3] = this.buffer[index - 1];\n\t\t\t\t\tindex -= 4;\n\t\t\t\t\tif (size > 4) size -= 4;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.buffer[index] = term;\n\t\t\tthis.buffer[index + 1] = start;\n\t\t\tthis.buffer[index + 2] = end;\n\t\t\tthis.buffer[index + 3] = size;\n\t\t}\n\t}\n\t/**\n\t@internal\n\t*/\n\tshift(action, type, start, end) {\n\t\tif (action & 131072) this.pushState(action & 65535, this.pos);\n\t\telse if ((action & 262144) == 0) {\n\t\t\tlet nextState = action, { parser } = this.p;\n\t\t\tthis.pos = end;\n\t\t\tlet skipped = parser.stateFlag(nextState, 1);\n\t\t\tif (!skipped && (end > start || type <= parser.maxNode)) this.reducePos = end;\n\t\t\tthis.pushState(nextState, skipped ? start : Math.min(start, this.reducePos));\n\t\t\tthis.shiftContext(type, start);\n\t\t\tif (type <= parser.maxNode) this.buffer.push(type, start, end, 4);\n\t\t} else {\n\t\t\tthis.pos = end;\n\t\t\tthis.shiftContext(type, start);\n\t\t\tif (type <= this.p.parser.maxNode) this.buffer.push(type, start, end, 4);\n\t\t}\n\t}\n\t/**\n\t@internal\n\t*/\n\tapply(action, next, nextStart, nextEnd) {\n\t\tif (action & 65536) this.reduce(action);\n\t\telse this.shift(action, next, nextStart, nextEnd);\n\t}\n\t/**\n\t@internal\n\t*/\n\tuseNode(value, next) {\n\t\tlet index = this.p.reused.length - 1;\n\t\tif (index < 0 || this.p.reused[index] != value) {\n\t\t\tthis.p.reused.push(value);\n\t\t\tindex++;\n\t\t}\n\t\tlet start = this.pos;\n\t\tthis.reducePos = this.pos = start + value.length;\n\t\tthis.pushState(next, start);\n\t\tthis.buffer.push(index, start, this.reducePos, -1);\n\t\tif (this.curContext) this.updateContext(this.curContext.tracker.reuse(this.curContext.context, value, this, this.p.stream.reset(this.pos - value.length)));\n\t}\n\t/**\n\t@internal\n\t*/\n\tsplit() {\n\t\tlet parent = this;\n\t\tlet off = parent.buffer.length;\n\t\twhile (off > 0 && parent.buffer[off - 2] > parent.reducePos) off -= 4;\n\t\tlet buffer = parent.buffer.slice(off), base = parent.bufferBase + off;\n\t\twhile (parent && base == parent.bufferBase) parent = parent.parent;\n\t\treturn new Stack(this.p, this.stack.slice(), this.state, this.reducePos, this.pos, this.score, buffer, base, this.curContext, this.lookAhead, parent);\n\t}\n\t/**\n\t@internal\n\t*/\n\trecoverByDelete(next, nextEnd) {\n\t\tlet isNode = next <= this.p.parser.maxNode;\n\t\tif (isNode) this.storeNode(next, this.pos, nextEnd, 4);\n\t\tthis.storeNode(0, this.pos, nextEnd, isNode ? 8 : 4);\n\t\tthis.pos = this.reducePos = nextEnd;\n\t\tthis.score -= 190;\n\t}\n\t/**\n\tCheck if the given term would be able to be shifted (optionally\n\tafter some reductions) on this stack. This can be useful for\n\texternal tokenizers that want to make sure they only provide a\n\tgiven token when it applies.\n\t*/\n\tcanShift(term) {\n\t\tfor (let sim = new SimulatedStack(this);;) {\n\t\t\tlet action = this.p.parser.stateSlot(sim.state, 4) || this.p.parser.hasAction(sim.state, term);\n\t\t\tif (action == 0) return false;\n\t\t\tif ((action & 65536) == 0) return true;\n\t\t\tsim.reduce(action);\n\t\t}\n\t}\n\t/**\n\t@internal\n\t*/\n\trecoverByInsert(next) {\n\t\tif (this.stack.length >= 300) return [];\n\t\tlet nextStates = this.p.parser.nextStates(this.state);\n\t\tif (nextStates.length > 8 || this.stack.length >= 120) {\n\t\t\tlet best = [];\n\t\t\tfor (let i = 0, s; i < nextStates.length; i += 2) if ((s = nextStates[i + 1]) != this.state && this.p.parser.hasAction(s, next)) best.push(nextStates[i], s);\n\t\t\tif (this.stack.length < 120) for (let i = 0; best.length < 8 && i < nextStates.length; i += 2) {\n\t\t\t\tlet s = nextStates[i + 1];\n\t\t\t\tif (!best.some((v, i) => i & 1 && v == s)) best.push(nextStates[i], s);\n\t\t\t}\n\t\t\tnextStates = best;\n\t\t}\n\t\tlet result = [];\n\t\tfor (let i = 0; i < nextStates.length && result.length < 4; i += 2) {\n\t\t\tlet s = nextStates[i + 1];\n\t\t\tif (s == this.state) continue;\n\t\t\tlet stack = this.split();\n\t\t\tstack.pushState(s, this.pos);\n\t\t\tstack.storeNode(0, stack.pos, stack.pos, 4, true);\n\t\t\tstack.shiftContext(nextStates[i], this.pos);\n\t\t\tstack.reducePos = this.pos;\n\t\t\tstack.score -= 200;\n\t\t\tresult.push(stack);\n\t\t}\n\t\treturn result;\n\t}\n\t/**\n\t@internal\n\t*/\n\tforceReduce() {\n\t\tlet { parser } = this.p;\n\t\tlet reduce = parser.stateSlot(this.state, 5);\n\t\tif ((reduce & 65536) == 0) return false;\n\t\tif (!parser.validAction(this.state, reduce)) {\n\t\t\tlet depth = reduce >> 19, term = reduce & 65535;\n\t\t\tlet target = this.stack.length - depth * 3;\n\t\t\tif (target < 0 || parser.getGoto(this.stack[target], term, false) < 0) {\n\t\t\t\tlet backup = this.findForcedReduction();\n\t\t\t\tif (backup == null) return false;\n\t\t\t\treduce = backup;\n\t\t\t}\n\t\t\tthis.storeNode(0, this.pos, this.pos, 4, true);\n\t\t\tthis.score -= 100;\n\t\t}\n\t\tthis.reducePos = this.pos;\n\t\tthis.reduce(reduce);\n\t\treturn true;\n\t}\n\t/**\n\tTry to scan through the automaton to find some kind of reduction\n\tthat can be applied. Used when the regular ForcedReduce field\n\tisn't a valid action. @internal\n\t*/\n\tfindForcedReduction() {\n\t\tlet { parser } = this.p, seen = [];\n\t\tlet explore = (state, depth) => {\n\t\t\tif (seen.includes(state)) return;\n\t\t\tseen.push(state);\n\t\t\treturn parser.allActions(state, (action) => {\n\t\t\t\tif (action & 393216);\n\t\t\t\telse if (action & 65536) {\n\t\t\t\t\tlet rDepth = (action >> 19) - depth;\n\t\t\t\t\tif (rDepth > 1) {\n\t\t\t\t\t\tlet term = action & 65535, target = this.stack.length - rDepth * 3;\n\t\t\t\t\t\tif (target >= 0 && parser.getGoto(this.stack[target], term, false) >= 0) return rDepth << 19 | 65536 | term;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tlet found = explore(action, depth + 1);\n\t\t\t\t\tif (found != null) return found;\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\t\treturn explore(this.state, 0);\n\t}\n\t/**\n\t@internal\n\t*/\n\tforceAll() {\n\t\twhile (!this.p.parser.stateFlag(this.state, 2)) if (!this.forceReduce()) {\n\t\t\tthis.storeNode(0, this.pos, this.pos, 4, true);\n\t\t\tbreak;\n\t\t}\n\t\treturn this;\n\t}\n\t/**\n\tCheck whether this state has no further actions (assumed to be a direct descendant of the\n\ttop state, since any other states must be able to continue\n\tsomehow). @internal\n\t*/\n\tget deadEnd() {\n\t\tif (this.stack.length != 3) return false;\n\t\tlet { parser } = this.p;\n\t\treturn parser.data[parser.stateSlot(this.state, 1)] == 65535 && !parser.stateSlot(this.state, 4);\n\t}\n\t/**\n\tRestart the stack (put it back in its start state). Only safe\n\twhen this.stack.length == 3 (state is directly below the top\n\tstate). @internal\n\t*/\n\trestart() {\n\t\tthis.storeNode(0, this.pos, this.pos, 4, true);\n\t\tthis.state = this.stack[0];\n\t\tthis.stack.length = 0;\n\t}\n\t/**\n\t@internal\n\t*/\n\tsameState(other) {\n\t\tif (this.state != other.state || this.stack.length != other.stack.length) return false;\n\t\tfor (let i = 0; i < this.stack.length; i += 3) if (this.stack[i] != other.stack[i]) return false;\n\t\treturn true;\n\t}\n\t/**\n\tGet the parser used by this stack.\n\t*/\n\tget parser() {\n\t\treturn this.p.parser;\n\t}\n\t/**\n\tTest whether a given dialect (by numeric ID, as exported from\n\tthe terms file) is enabled.\n\t*/\n\tdialectEnabled(dialectID) {\n\t\treturn this.p.parser.dialect.flags[dialectID];\n\t}\n\tshiftContext(term, start) {\n\t\tif (this.curContext) this.updateContext(this.curContext.tracker.shift(this.curContext.context, term, this, this.p.stream.reset(start)));\n\t}\n\treduceContext(term, start) {\n\t\tif (this.curContext) this.updateContext(this.curContext.tracker.reduce(this.curContext.context, term, this, this.p.stream.reset(start)));\n\t}\n\t/**\n\t@internal\n\t*/\n\temitContext() {\n\t\tlet last = this.buffer.length - 1;\n\t\tif (last < 0 || this.buffer[last] != -3) this.buffer.push(this.curContext.hash, this.pos, this.pos, -3);\n\t}\n\t/**\n\t@internal\n\t*/\n\temitLookAhead() {\n\t\tlet last = this.buffer.length - 1;\n\t\tif (last < 0 || this.buffer[last] != -4) this.buffer.push(this.lookAhead, this.pos, this.pos, -4);\n\t}\n\tupdateContext(context) {\n\t\tif (context != this.curContext.context) {\n\t\t\tlet newCx = new StackContext(this.curContext.tracker, context);\n\t\t\tif (newCx.hash != this.curContext.hash) this.emitContext();\n\t\t\tthis.curContext = newCx;\n\t\t}\n\t}\n\t/**\n\t@internal\n\t*/\n\tsetLookAhead(lookAhead) {\n\t\tif (lookAhead <= this.lookAhead) return false;\n\t\tthis.emitLookAhead();\n\t\tthis.lookAhead = lookAhead;\n\t\treturn true;\n\t}\n\t/**\n\t@internal\n\t*/\n\tclose() {\n\t\tif (this.curContext && this.curContext.tracker.strict) this.emitContext();\n\t\tif (this.lookAhead > 0) this.emitLookAhead();\n\t}\n};\nvar StackContext = class {\n\tconstructor(tracker, context) {\n\t\tthis.tracker = tracker;\n\t\tthis.context = context;\n\t\tthis.hash = tracker.strict ? tracker.hash(context) : 0;\n\t}\n};\nvar SimulatedStack = class {\n\tconstructor(start) {\n\t\tthis.start = start;\n\t\tthis.state = start.state;\n\t\tthis.stack = start.stack;\n\t\tthis.base = this.stack.length;\n\t}\n\treduce(action) {\n\t\tlet term = action & 65535, depth = action >> 19;\n\t\tif (depth == 0) {\n\t\t\tif (this.stack == this.start.stack) this.stack = this.stack.slice();\n\t\t\tthis.stack.push(this.state, 0, 0);\n\t\t\tthis.base += 3;\n\t\t} else this.base -= (depth - 1) * 3;\n\t\tthis.state = this.start.p.parser.getGoto(this.stack[this.base - 3], term, true);\n\t}\n};\nvar StackBufferCursor = class StackBufferCursor {\n\tconstructor(stack, pos, index) {\n\t\tthis.stack = stack;\n\t\tthis.pos = pos;\n\t\tthis.index = index;\n\t\tthis.buffer = stack.buffer;\n\t\tif (this.index == 0) this.maybeNext();\n\t}\n\tstatic create(stack, pos = stack.bufferBase + stack.buffer.length) {\n\t\treturn new StackBufferCursor(stack, pos, pos - stack.bufferBase);\n\t}\n\tmaybeNext() {\n\t\tlet next = this.stack.parent;\n\t\tif (next != null) {\n\t\t\tthis.index = this.stack.bufferBase - next.bufferBase;\n\t\t\tthis.stack = next;\n\t\t\tthis.buffer = next.buffer;\n\t\t}\n\t}\n\tget id() {\n\t\treturn this.buffer[this.index - 4];\n\t}\n\tget start() {\n\t\treturn this.buffer[this.index - 3];\n\t}\n\tget end() {\n\t\treturn this.buffer[this.index - 2];\n\t}\n\tget size() {\n\t\treturn this.buffer[this.index - 1];\n\t}\n\tnext() {\n\t\tthis.index -= 4;\n\t\tthis.pos -= 4;\n\t\tif (this.index == 0) this.maybeNext();\n\t}\n\tfork() {\n\t\treturn new StackBufferCursor(this.stack, this.pos, this.index);\n\t}\n};\nfunction decodeArray(input, Type = Uint16Array) {\n\tif (typeof input != \"string\") return input;\n\tlet array = null;\n\tfor (let pos = 0, out = 0; pos < input.length;) {\n\t\tlet value = 0;\n\t\tfor (;;) {\n\t\t\tlet next = input.charCodeAt(pos++), stop = false;\n\t\t\tif (next == 126) {\n\t\t\t\tvalue = 65535;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (next >= 92) next--;\n\t\t\tif (next >= 34) next--;\n\t\t\tlet digit = next - 32;\n\t\t\tif (digit >= 46) {\n\t\t\t\tdigit -= 46;\n\t\t\t\tstop = true;\n\t\t\t}\n\t\t\tvalue += digit;\n\t\t\tif (stop) break;\n\t\t\tvalue *= 46;\n\t\t}\n\t\tif (array) array[out++] = value;\n\t\telse array = new Type(value);\n\t}\n\treturn array;\n}\nvar CachedToken = class {\n\tconstructor() {\n\t\tthis.start = -1;\n\t\tthis.value = -1;\n\t\tthis.end = -1;\n\t\tthis.extended = -1;\n\t\tthis.lookAhead = 0;\n\t\tthis.mask = 0;\n\t\tthis.context = 0;\n\t}\n};\nconst nullToken = new CachedToken();\n/**\n[Tokenizers](#lr.ExternalTokenizer) interact with the input\nthrough this interface. It presents the input as a stream of\ncharacters, tracking lookahead and hiding the complexity of\n[ranges](#common.Parser.parse^ranges) from tokenizer code.\n*/\nvar InputStream = class {\n\t/**\n\t@internal\n\t*/\n\tconstructor(input, ranges) {\n\t\tthis.input = input;\n\t\tthis.ranges = ranges;\n\t\t/**\n\t\t@internal\n\t\t*/\n\t\tthis.chunk = \"\";\n\t\t/**\n\t\t@internal\n\t\t*/\n\t\tthis.chunkOff = 0;\n\t\t/**\n\t\tBackup chunk\n\t\t*/\n\t\tthis.chunk2 = \"\";\n\t\tthis.chunk2Pos = 0;\n\t\t/**\n\t\tThe character code of the next code unit in the input, or -1\n\t\twhen the stream is at the end of the input.\n\t\t*/\n\t\tthis.next = -1;\n\t\t/**\n\t\t@internal\n\t\t*/\n\t\tthis.token = nullToken;\n\t\tthis.rangeIndex = 0;\n\t\tthis.pos = this.chunkPos = ranges[0].from;\n\t\tthis.range = ranges[0];\n\t\tthis.end = ranges[ranges.length - 1].to;\n\t\tthis.readNext();\n\t}\n\t/**\n\t@internal\n\t*/\n\tresolveOffset(offset, assoc) {\n\t\tlet range = this.range, index = this.rangeIndex;\n\t\tlet pos = this.pos + offset;\n\t\twhile (pos < range.from) {\n\t\t\tif (!index) return null;\n\t\t\tlet next = this.ranges[--index];\n\t\t\tpos -= range.from - next.to;\n\t\t\trange = next;\n\t\t}\n\t\twhile (assoc < 0 ? pos > range.to : pos >= range.to) {\n\t\t\tif (index == this.ranges.length - 1) return null;\n\t\t\tlet next = this.ranges[++index];\n\t\t\tpos += next.from - range.to;\n\t\t\trange = next;\n\t\t}\n\t\treturn pos;\n\t}\n\t/**\n\t@internal\n\t*/\n\tclipPos(pos) {\n\t\tif (pos >= this.range.from && pos < this.range.to) return pos;\n\t\tfor (let range of this.ranges) if (range.to > pos) return Math.max(pos, range.from);\n\t\treturn this.end;\n\t}\n\t/**\n\tLook at a code unit near the stream position. `.peek(0)` equals\n\t`.next`, `.peek(-1)` gives you the previous character, and so\n\ton.\n\t\n\tNote that looking around during tokenizing creates dependencies\n\ton potentially far-away content, which may reduce the\n\teffectiveness incremental parsing—when looking forward—or even\n\tcause invalid reparses when looking backward more than 25 code\n\tunits, since the library does not track lookbehind.\n\t*/\n\tpeek(offset) {\n\t\tlet idx = this.chunkOff + offset, pos, result;\n\t\tif (idx >= 0 && idx < this.chunk.length) {\n\t\t\tpos = this.pos + offset;\n\t\t\tresult = this.chunk.charCodeAt(idx);\n\t\t} else {\n\t\t\tlet resolved = this.resolveOffset(offset, 1);\n\t\t\tif (resolved == null) return -1;\n\t\t\tpos = resolved;\n\t\t\tif (pos >= this.chunk2Pos && pos < this.chunk2Pos + this.chunk2.length) result = this.chunk2.charCodeAt(pos - this.chunk2Pos);\n\t\t\telse {\n\t\t\t\tlet i = this.rangeIndex, range = this.range;\n\t\t\t\twhile (range.to <= pos) range = this.ranges[++i];\n\t\t\t\tthis.chunk2 = this.input.chunk(this.chunk2Pos = pos);\n\t\t\t\tif (pos + this.chunk2.length > range.to) this.chunk2 = this.chunk2.slice(0, range.to - pos);\n\t\t\t\tresult = this.chunk2.charCodeAt(0);\n\t\t\t}\n\t\t}\n\t\tif (pos >= this.token.lookAhead) this.token.lookAhead = pos + 1;\n\t\treturn result;\n\t}\n\t/**\n\tAccept a token. By default, the end of the token is set to the\n\tcurrent stream position, but you can pass an offset (relative to\n\tthe stream position) to change that.\n\t*/\n\tacceptToken(token, endOffset = 0) {\n\t\tlet end = endOffset ? this.resolveOffset(endOffset, -1) : this.pos;\n\t\tif (end == null || end < this.token.start) throw new RangeError(\"Token end out of bounds\");\n\t\tthis.token.value = token;\n\t\tthis.token.end = end;\n\t}\n\t/**\n\tAccept a token ending at a specific given position.\n\t*/\n\tacceptTokenTo(token, endPos) {\n\t\tthis.token.value = token;\n\t\tthis.token.end = endPos;\n\t}\n\tgetChunk() {\n\t\tif (this.pos >= this.chunk2Pos && this.pos < this.chunk2Pos + this.chunk2.length) {\n\t\t\tlet { chunk, chunkPos } = this;\n\t\t\tthis.chunk = this.chunk2;\n\t\t\tthis.chunkPos = this.chunk2Pos;\n\t\t\tthis.chunk2 = chunk;\n\t\t\tthis.chunk2Pos = chunkPos;\n\t\t\tthis.chunkOff = this.pos - this.chunkPos;\n\t\t} else {\n\t\t\tthis.chunk2 = this.chunk;\n\t\t\tthis.chunk2Pos = this.chunkPos;\n\t\t\tlet nextChunk = this.input.chunk(this.pos);\n\t\t\tthis.chunk = this.pos + nextChunk.length > this.range.to ? nextChunk.slice(0, this.range.to - this.pos) : nextChunk;\n\t\t\tthis.chunkPos = this.pos;\n\t\t\tthis.chunkOff = 0;\n\t\t}\n\t}\n\treadNext() {\n\t\tif (this.chunkOff >= this.chunk.length) {\n\t\t\tthis.getChunk();\n\t\t\tif (this.chunkOff == this.chunk.length) return this.next = -1;\n\t\t}\n\t\treturn this.next = this.chunk.charCodeAt(this.chunkOff);\n\t}\n\t/**\n\tMove the stream forward N (defaults to 1) code units. Returns\n\tthe new value of [`next`](#lr.InputStream.next).\n\t*/\n\tadvance(n = 1) {\n\t\tthis.chunkOff += n;\n\t\twhile (this.pos + n >= this.range.to) {\n\t\t\tif (this.rangeIndex == this.ranges.length - 1) return this.setDone();\n\t\t\tn -= this.range.to - this.pos;\n\t\t\tthis.range = this.ranges[++this.rangeIndex];\n\t\t\tthis.pos = this.range.from;\n\t\t}\n\t\tthis.pos += n;\n\t\tif (this.pos >= this.token.lookAhead) this.token.lookAhead = this.pos + 1;\n\t\treturn this.readNext();\n\t}\n\tsetDone() {\n\t\tthis.pos = this.chunkPos = this.end;\n\t\tthis.range = this.ranges[this.rangeIndex = this.ranges.length - 1];\n\t\tthis.chunk = \"\";\n\t\treturn this.next = -1;\n\t}\n\t/**\n\t@internal\n\t*/\n\treset(pos, token) {\n\t\tif (token) {\n\t\t\tthis.token = token;\n\t\t\ttoken.start = pos;\n\t\t\ttoken.lookAhead = pos + 1;\n\t\t\ttoken.value = token.extended = -1;\n\t\t} else this.token = nullToken;\n\t\tif (this.pos != pos) {\n\t\t\tthis.pos = pos;\n\t\t\tif (pos == this.end) {\n\t\t\t\tthis.setDone();\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\twhile (pos < this.range.from) this.range = this.ranges[--this.rangeIndex];\n\t\t\twhile (pos >= this.range.to) this.range = this.ranges[++this.rangeIndex];\n\t\t\tif (pos >= this.chunkPos && pos < this.chunkPos + this.chunk.length) this.chunkOff = pos - this.chunkPos;\n\t\t\telse {\n\t\t\t\tthis.chunk = \"\";\n\t\t\t\tthis.chunkOff = 0;\n\t\t\t}\n\t\t\tthis.readNext();\n\t\t}\n\t\treturn this;\n\t}\n\t/**\n\t@internal\n\t*/\n\tread(from, to) {\n\t\tif (from >= this.chunkPos && to <= this.chunkPos + this.chunk.length) return this.chunk.slice(from - this.chunkPos, to - this.chunkPos);\n\t\tif (from >= this.chunk2Pos && to <= this.chunk2Pos + this.chunk2.length) return this.chunk2.slice(from - this.chunk2Pos, to - this.chunk2Pos);\n\t\tif (from >= this.range.from && to <= this.range.to) return this.input.read(from, to);\n\t\tlet result = \"\";\n\t\tfor (let r of this.ranges) {\n\t\t\tif (r.from >= to) break;\n\t\t\tif (r.to > from) result += this.input.read(Math.max(r.from, from), Math.min(r.to, to));\n\t\t}\n\t\treturn result;\n\t}\n};\n/**\n@internal\n*/\nvar TokenGroup = class {\n\tconstructor(data, id) {\n\t\tthis.data = data;\n\t\tthis.id = id;\n\t}\n\ttoken(input, stack) {\n\t\tlet { parser } = stack.p;\n\t\treadToken(this.data, input, stack, this.id, parser.data, parser.tokenPrecTable);\n\t}\n};\nTokenGroup.prototype.contextual = TokenGroup.prototype.fallback = TokenGroup.prototype.extend = false;\n/**\n@hide\n*/\nvar LocalTokenGroup = class {\n\tconstructor(data, precTable, elseToken) {\n\t\tthis.precTable = precTable;\n\t\tthis.elseToken = elseToken;\n\t\tthis.data = typeof data == \"string\" ? decodeArray(data) : data;\n\t}\n\ttoken(input, stack) {\n\t\tlet start = input.pos, skipped = 0;\n\t\tfor (;;) {\n\t\t\tlet atEof = input.next < 0, nextPos = input.resolveOffset(1, 1);\n\t\t\treadToken(this.data, input, stack, 0, this.data, this.precTable);\n\t\t\tif (input.token.value > -1) break;\n\t\t\tif (this.elseToken == null) return;\n\t\t\tif (!atEof) skipped++;\n\t\t\tif (nextPos == null) break;\n\t\t\tinput.reset(nextPos, input.token);\n\t\t}\n\t\tif (skipped) {\n\t\t\tinput.reset(start, input.token);\n\t\t\tinput.acceptToken(this.elseToken, skipped);\n\t\t}\n\t}\n};\nLocalTokenGroup.prototype.contextual = TokenGroup.prototype.fallback = TokenGroup.prototype.extend = false;\nfunction readToken(data, input, stack, group, precTable, precOffset) {\n\tlet state = 0, groupMask = 1 << group, { dialect } = stack.p.parser;\n\tscan: for (;;) {\n\t\tif ((groupMask & data[state]) == 0) break;\n\t\tlet accEnd = data[state + 1];\n\t\tfor (let i = state + 3; i < accEnd; i += 2) if ((data[i + 1] & groupMask) > 0) {\n\t\t\tlet term = data[i];\n\t\t\tif (dialect.allows(term) && (input.token.value == -1 || input.token.value == term || overrides(term, input.token.value, precTable, precOffset))) {\n\t\t\t\tinput.acceptToken(term);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tlet next = input.next, low = 0, high = data[state + 2];\n\t\tif (input.next < 0 && high > low && data[accEnd + high * 3 - 3] == 65535) {\n\t\t\tstate = data[accEnd + high * 3 - 1];\n\t\t\tcontinue scan;\n\t\t}\n\t\tfor (; low < high;) {\n\t\t\tlet mid = low + high >> 1;\n\t\t\tlet index = accEnd + mid + (mid << 1);\n\t\t\tlet from = data[index], to = data[index + 1] || 65536;\n\t\t\tif (next < from) high = mid;\n\t\t\telse if (next >= to) low = mid + 1;\n\t\t\telse {\n\t\t\t\tstate = data[index + 2];\n\t\t\t\tinput.advance();\n\t\t\t\tcontinue scan;\n\t\t\t}\n\t\t}\n\t\tbreak;\n\t}\n}\nfunction findOffset(data, start, term) {\n\tfor (let i = start, next; (next = data[i]) != 65535; i++) if (next == term) return i - start;\n\treturn -1;\n}\nfunction overrides(token, prev, tableData, tableOffset) {\n\tlet iPrev = findOffset(tableData, tableOffset, prev);\n\treturn iPrev < 0 || findOffset(tableData, tableOffset, token) < iPrev;\n}\nconst verbose = typeof process != \"undefined\" && process.env && /\\bparse\\b/.test(process.env.LOG);\nlet stackIDs = null;\nfunction cutAt(tree, pos, side) {\n\tlet cursor = tree.cursor(IterMode.IncludeAnonymous);\n\tcursor.moveTo(pos);\n\tfor (;;) if (!(side < 0 ? cursor.childBefore(pos) : cursor.childAfter(pos))) for (;;) {\n\t\tif ((side < 0 ? cursor.to < pos : cursor.from > pos) && !cursor.type.isError) return side < 0 ? Math.max(0, Math.min(cursor.to - 1, pos - 25)) : Math.min(tree.length, Math.max(cursor.from + 1, pos + 25));\n\t\tif (side < 0 ? cursor.prevSibling() : cursor.nextSibling()) break;\n\t\tif (!cursor.parent()) return side < 0 ? 0 : tree.length;\n\t}\n}\nvar FragmentCursor = class {\n\tconstructor(fragments, nodeSet) {\n\t\tthis.fragments = fragments;\n\t\tthis.nodeSet = nodeSet;\n\t\tthis.i = 0;\n\t\tthis.fragment = null;\n\t\tthis.safeFrom = -1;\n\t\tthis.safeTo = -1;\n\t\tthis.trees = [];\n\t\tthis.start = [];\n\t\tthis.index = [];\n\t\tthis.nextFragment();\n\t}\n\tnextFragment() {\n\t\tlet fr = this.fragment = this.i == this.fragments.length ? null : this.fragments[this.i++];\n\t\tif (fr) {\n\t\t\tthis.safeFrom = fr.openStart ? cutAt(fr.tree, fr.from + fr.offset, 1) - fr.offset : fr.from;\n\t\t\tthis.safeTo = fr.openEnd ? cutAt(fr.tree, fr.to + fr.offset, -1) - fr.offset : fr.to;\n\t\t\twhile (this.trees.length) {\n\t\t\t\tthis.trees.pop();\n\t\t\t\tthis.start.pop();\n\t\t\t\tthis.index.pop();\n\t\t\t}\n\t\t\tthis.trees.push(fr.tree);\n\t\t\tthis.start.push(-fr.offset);\n\t\t\tthis.index.push(0);\n\t\t\tthis.nextStart = this.safeFrom;\n\t\t} else this.nextStart = 1e9;\n\t}\n\tnodeAt(pos) {\n\t\tif (pos < this.nextStart) return null;\n\t\twhile (this.fragment && this.safeTo <= pos) this.nextFragment();\n\t\tif (!this.fragment) return null;\n\t\tfor (;;) {\n\t\t\tlet last = this.trees.length - 1;\n\t\t\tif (last < 0) {\n\t\t\t\tthis.nextFragment();\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tlet top = this.trees[last], index = this.index[last];\n\t\t\tif (index == top.children.length) {\n\t\t\t\tthis.trees.pop();\n\t\t\t\tthis.start.pop();\n\t\t\t\tthis.index.pop();\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tlet next = top.children[index];\n\t\t\tlet start = this.start[last] + top.positions[index];\n\t\t\tif (start > pos) {\n\t\t\t\tthis.nextStart = start;\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (next instanceof Tree) {\n\t\t\t\tif (start == pos) {\n\t\t\t\t\tif (start < this.safeFrom) return null;\n\t\t\t\t\tlet end = start + next.length;\n\t\t\t\t\tif (end <= this.safeTo) {\n\t\t\t\t\t\tlet lookAhead = next.prop(NodeProp.lookAhead);\n\t\t\t\t\t\tif (!lookAhead || end + lookAhead < this.fragment.to) return next;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.index[last]++;\n\t\t\t\tif (start + next.length >= Math.max(this.safeFrom, pos)) {\n\t\t\t\t\tthis.trees.push(next);\n\t\t\t\t\tthis.start.push(start);\n\t\t\t\t\tthis.index.push(0);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.index[last]++;\n\t\t\t\tthis.nextStart = start + next.length;\n\t\t\t}\n\t\t}\n\t}\n};\nvar TokenCache = class {\n\tconstructor(parser, stream) {\n\t\tthis.stream = stream;\n\t\tthis.tokens = [];\n\t\tthis.mainToken = null;\n\t\tthis.actions = [];\n\t\tthis.tokens = parser.tokenizers.map((_) => new CachedToken());\n\t}\n\tgetActions(stack) {\n\t\tlet actionIndex = 0;\n\t\tlet main = null;\n\t\tlet { parser } = stack.p, { tokenizers } = parser;\n\t\tlet mask = parser.stateSlot(stack.state, 3);\n\t\tlet context = stack.curContext ? stack.curContext.hash : 0;\n\t\tlet lookAhead = 0;\n\t\tfor (let i = 0; i < tokenizers.length; i++) {\n\t\t\tif ((1 << i & mask) == 0) continue;\n\t\t\tlet tokenizer = tokenizers[i], token = this.tokens[i];\n\t\t\tif (main && !tokenizer.fallback) continue;\n\t\t\tif (tokenizer.contextual || token.start != stack.pos || token.mask != mask || token.context != context) {\n\t\t\t\tthis.updateCachedToken(token, tokenizer, stack);\n\t\t\t\ttoken.mask = mask;\n\t\t\t\ttoken.context = context;\n\t\t\t}\n\t\t\tif (token.lookAhead > token.end + 25) lookAhead = Math.max(token.lookAhead, lookAhead);\n\t\t\tif (token.value != 0) {\n\t\t\t\tlet startIndex = actionIndex;\n\t\t\t\tif (token.extended > -1) actionIndex = this.addActions(stack, token.extended, token.end, actionIndex);\n\t\t\t\tactionIndex = this.addActions(stack, token.value, token.end, actionIndex);\n\t\t\t\tif (!tokenizer.extend) {\n\t\t\t\t\tmain = token;\n\t\t\t\t\tif (actionIndex > startIndex) break;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\twhile (this.actions.length > actionIndex) this.actions.pop();\n\t\tif (lookAhead) stack.setLookAhead(lookAhead);\n\t\tif (!main && stack.pos == this.stream.end) {\n\t\t\tmain = new CachedToken();\n\t\t\tmain.value = stack.p.parser.eofTerm;\n\t\t\tmain.start = main.end = stack.pos;\n\t\t\tactionIndex = this.addActions(stack, main.value, main.end, actionIndex);\n\t\t}\n\t\tthis.mainToken = main;\n\t\treturn this.actions;\n\t}\n\tgetMainToken(stack) {\n\t\tif (this.mainToken) return this.mainToken;\n\t\tlet main = new CachedToken(), { pos, p } = stack;\n\t\tmain.start = pos;\n\t\tmain.end = Math.min(pos + 1, p.stream.end);\n\t\tmain.value = pos == p.stream.end ? p.parser.eofTerm : 0;\n\t\treturn main;\n\t}\n\tupdateCachedToken(token, tokenizer, stack) {\n\t\tlet start = this.stream.clipPos(stack.pos);\n\t\ttokenizer.token(this.stream.reset(start, token), stack);\n\t\tif (token.value > -1) {\n\t\t\tlet { parser } = stack.p;\n\t\t\tfor (let i = 0; i < parser.specialized.length; i++) if (parser.specialized[i] == token.value) {\n\t\t\t\tlet result = parser.specializers[i](this.stream.read(token.start, token.end), stack);\n\t\t\t\tif (result >= 0 && stack.p.parser.dialect.allows(result >> 1)) {\n\t\t\t\t\tif ((result & 1) == 0) token.value = result >> 1;\n\t\t\t\t\telse token.extended = result >> 1;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\ttoken.value = 0;\n\t\t\ttoken.end = this.stream.clipPos(start + 1);\n\t\t}\n\t}\n\tputAction(action, token, end, index) {\n\t\tfor (let i = 0; i < index; i += 3) if (this.actions[i] == action) return index;\n\t\tthis.actions[index++] = action;\n\t\tthis.actions[index++] = token;\n\t\tthis.actions[index++] = end;\n\t\treturn index;\n\t}\n\taddActions(stack, token, end, index) {\n\t\tlet { state } = stack, { parser } = stack.p, { data } = parser;\n\t\tfor (let set = 0; set < 2; set++) for (let i = parser.stateSlot(state, set ? 2 : 1);; i += 3) {\n\t\t\tif (data[i] == 65535) if (data[i + 1] == 1) i = pair(data, i + 2);\n\t\t\telse {\n\t\t\t\tif (index == 0 && data[i + 1] == 2) index = this.putAction(pair(data, i + 2), token, end, index);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (data[i] == token) index = this.putAction(pair(data, i + 1), token, end, index);\n\t\t}\n\t\treturn index;\n\t}\n};\nvar Parse = class {\n\tconstructor(parser, input, fragments, ranges) {\n\t\tthis.parser = parser;\n\t\tthis.input = input;\n\t\tthis.ranges = ranges;\n\t\tthis.recovering = 0;\n\t\tthis.nextStackID = 9812;\n\t\tthis.minStackPos = 0;\n\t\tthis.reused = [];\n\t\tthis.stoppedAt = null;\n\t\tthis.lastBigReductionStart = -1;\n\t\tthis.lastBigReductionSize = 0;\n\t\tthis.bigReductionCount = 0;\n\t\tthis.stream = new InputStream(input, ranges);\n\t\tthis.tokens = new TokenCache(parser, this.stream);\n\t\tthis.topTerm = parser.top[1];\n\t\tlet { from } = ranges[0];\n\t\tthis.stacks = [Stack.start(this, parser.top[0], from)];\n\t\tthis.fragments = fragments.length && this.stream.end - from > parser.bufferLength * 4 ? new FragmentCursor(fragments, parser.nodeSet) : null;\n\t}\n\tget parsedPos() {\n\t\treturn this.minStackPos;\n\t}\n\tadvance() {\n\t\tlet stacks = this.stacks, pos = this.minStackPos;\n\t\tlet newStacks = this.stacks = [];\n\t\tlet stopped, stoppedTokens;\n\t\tif (this.bigReductionCount > 300 && stacks.length == 1) {\n\t\t\tlet [s] = stacks;\n\t\t\twhile (s.forceReduce() && s.stack.length && s.stack[s.stack.length - 2] >= this.lastBigReductionStart);\n\t\t\tthis.bigReductionCount = this.lastBigReductionSize = 0;\n\t\t}\n\t\tfor (let i = 0; i < stacks.length; i++) {\n\t\t\tlet stack = stacks[i];\n\t\t\tfor (;;) {\n\t\t\t\tthis.tokens.mainToken = null;\n\t\t\t\tif (stack.pos > pos) newStacks.push(stack);\n\t\t\t\telse if (this.advanceStack(stack, newStacks, stacks)) continue;\n\t\t\t\telse {\n\t\t\t\t\tif (!stopped) {\n\t\t\t\t\t\tstopped = [];\n\t\t\t\t\t\tstoppedTokens = [];\n\t\t\t\t\t}\n\t\t\t\t\tstopped.push(stack);\n\t\t\t\t\tlet tok = this.tokens.getMainToken(stack);\n\t\t\t\t\tstoppedTokens.push(tok.value, tok.end);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (!newStacks.length) {\n\t\t\tlet finished = stopped && findFinished(stopped);\n\t\t\tif (finished) {\n\t\t\t\tif (verbose) console.log(\"Finish with \" + this.stackID(finished));\n\t\t\t\treturn this.stackToTree(finished);\n\t\t\t}\n\t\t\tif (this.parser.strict) {\n\t\t\t\tif (verbose && stopped) console.log(\"Stuck with token \" + (this.tokens.mainToken ? this.parser.getName(this.tokens.mainToken.value) : \"none\"));\n\t\t\t\tthrow new SyntaxError(\"No parse at \" + pos);\n\t\t\t}\n\t\t\tif (!this.recovering) this.recovering = 5;\n\t\t}\n\t\tif (this.recovering && stopped) {\n\t\t\tlet finished = this.stoppedAt != null && stopped[0].pos > this.stoppedAt ? stopped[0] : this.runRecovery(stopped, stoppedTokens, newStacks);\n\t\t\tif (finished) {\n\t\t\t\tif (verbose) console.log(\"Force-finish \" + this.stackID(finished));\n\t\t\t\treturn this.stackToTree(finished.forceAll());\n\t\t\t}\n\t\t}\n\t\tif (this.recovering) {\n\t\t\tlet maxRemaining = this.recovering == 1 ? 1 : this.recovering * 3;\n\t\t\tif (newStacks.length > maxRemaining) {\n\t\t\t\tnewStacks.sort((a, b) => b.score - a.score);\n\t\t\t\twhile (newStacks.length > maxRemaining) newStacks.pop();\n\t\t\t}\n\t\t\tif (newStacks.some((s) => s.reducePos > pos)) this.recovering--;\n\t\t} else if (newStacks.length > 1) {\n\t\t\touter: for (let i = 0; i < newStacks.length - 1; i++) {\n\t\t\t\tlet stack = newStacks[i];\n\t\t\t\tfor (let j = i + 1; j < newStacks.length; j++) {\n\t\t\t\t\tlet other = newStacks[j];\n\t\t\t\t\tif (stack.sameState(other) || stack.buffer.length > 500 && other.buffer.length > 500) if ((stack.score - other.score || stack.buffer.length - other.buffer.length) > 0) newStacks.splice(j--, 1);\n\t\t\t\t\telse {\n\t\t\t\t\t\tnewStacks.splice(i--, 1);\n\t\t\t\t\t\tcontinue outer;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (newStacks.length > 12) {\n\t\t\t\tnewStacks.sort((a, b) => b.score - a.score);\n\t\t\t\tnewStacks.splice(12, newStacks.length - 12);\n\t\t\t}\n\t\t}\n\t\tthis.minStackPos = newStacks[0].pos;\n\t\tfor (let i = 1; i < newStacks.length; i++) if (newStacks[i].pos < this.minStackPos) this.minStackPos = newStacks[i].pos;\n\t\treturn null;\n\t}\n\tstopAt(pos) {\n\t\tif (this.stoppedAt != null && this.stoppedAt < pos) throw new RangeError(\"Can't move stoppedAt forward\");\n\t\tthis.stoppedAt = pos;\n\t}\n\tadvanceStack(stack, stacks, split) {\n\t\tlet start = stack.pos, { parser } = this;\n\t\tlet base = verbose ? this.stackID(stack) + \" -> \" : \"\";\n\t\tif (this.stoppedAt != null && start > this.stoppedAt) return stack.forceReduce() ? stack : null;\n\t\tif (this.fragments) {\n\t\t\tlet strictCx = stack.curContext && stack.curContext.tracker.strict, cxHash = strictCx ? stack.curContext.hash : 0;\n\t\t\tfor (let cached = this.fragments.nodeAt(start); cached;) {\n\t\t\t\tlet match = this.parser.nodeSet.types[cached.type.id] == cached.type ? parser.getGoto(stack.state, cached.type.id) : -1;\n\t\t\t\tif (match > -1 && cached.length && (!strictCx || (cached.prop(NodeProp.contextHash) || 0) == cxHash)) {\n\t\t\t\t\tstack.useNode(cached, match);\n\t\t\t\t\tif (verbose) console.log(base + this.stackID(stack) + ` (via reuse of ${parser.getName(cached.type.id)})`);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tif (!(cached instanceof Tree) || cached.children.length == 0 || cached.positions[0] > 0) break;\n\t\t\t\tlet inner = cached.children[0];\n\t\t\t\tif (inner instanceof Tree && cached.positions[0] == 0) cached = inner;\n\t\t\t\telse break;\n\t\t\t}\n\t\t}\n\t\tlet defaultReduce = parser.stateSlot(stack.state, 4);\n\t\tif (defaultReduce > 0) {\n\t\t\tstack.reduce(defaultReduce);\n\t\t\tif (verbose) console.log(base + this.stackID(stack) + ` (via always-reduce ${parser.getName(defaultReduce & 65535)})`);\n\t\t\treturn true;\n\t\t}\n\t\tif (stack.stack.length >= 8400) while (stack.stack.length > 6e3 && stack.forceReduce());\n\t\tlet actions = this.tokens.getActions(stack);\n\t\tfor (let i = 0; i < actions.length;) {\n\t\t\tlet action = actions[i++], term = actions[i++], end = actions[i++];\n\t\t\tlet last = i == actions.length || !split;\n\t\t\tlet localStack = last ? stack : stack.split();\n\t\t\tlet main = this.tokens.mainToken;\n\t\t\tlocalStack.apply(action, term, main ? main.start : localStack.pos, end);\n\t\t\tif (verbose) console.log(base + this.stackID(localStack) + ` (via ${(action & 65536) == 0 ? \"shift\" : `reduce of ${parser.getName(action & 65535)}`} for ${parser.getName(term)} @ ${start}${localStack == stack ? \"\" : \", split\"})`);\n\t\t\tif (last) return true;\n\t\t\telse if (localStack.pos > start) stacks.push(localStack);\n\t\t\telse split.push(localStack);\n\t\t}\n\t\treturn false;\n\t}\n\tadvanceFully(stack, newStacks) {\n\t\tlet pos = stack.pos;\n\t\tfor (;;) {\n\t\t\tif (!this.advanceStack(stack, null, null)) return false;\n\t\t\tif (stack.pos > pos) {\n\t\t\t\tpushStackDedup(stack, newStacks);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t}\n\trunRecovery(stacks, tokens, newStacks) {\n\t\tlet finished = null, restarted = false;\n\t\tfor (let i = 0; i < stacks.length; i++) {\n\t\t\tlet stack = stacks[i], token = tokens[i << 1], tokenEnd = tokens[(i << 1) + 1];\n\t\t\tlet base = verbose ? this.stackID(stack) + \" -> \" : \"\";\n\t\t\tif (stack.deadEnd) {\n\t\t\t\tif (restarted) continue;\n\t\t\t\trestarted = true;\n\t\t\t\tstack.restart();\n\t\t\t\tif (verbose) console.log(base + this.stackID(stack) + \" (restarted)\");\n\t\t\t\tif (this.advanceFully(stack, newStacks)) continue;\n\t\t\t}\n\t\t\tlet force = stack.split(), forceBase = base;\n\t\t\tfor (let j = 0; j < 10 && force.forceReduce(); j++) {\n\t\t\t\tif (verbose) console.log(forceBase + this.stackID(force) + \" (via force-reduce)\");\n\t\t\t\tif (this.advanceFully(force, newStacks)) break;\n\t\t\t\tif (verbose) forceBase = this.stackID(force) + \" -> \";\n\t\t\t}\n\t\t\tfor (let insert of stack.recoverByInsert(token)) {\n\t\t\t\tif (verbose) console.log(base + this.stackID(insert) + \" (via recover-insert)\");\n\t\t\t\tthis.advanceFully(insert, newStacks);\n\t\t\t}\n\t\t\tif (this.stream.end > stack.pos) {\n\t\t\t\tif (tokenEnd == stack.pos) {\n\t\t\t\t\ttokenEnd++;\n\t\t\t\t\ttoken = 0;\n\t\t\t\t}\n\t\t\t\tstack.recoverByDelete(token, tokenEnd);\n\t\t\t\tif (verbose) console.log(base + this.stackID(stack) + ` (via recover-delete ${this.parser.getName(token)})`);\n\t\t\t\tpushStackDedup(stack, newStacks);\n\t\t\t} else if (!finished || finished.score < force.score) finished = force;\n\t\t}\n\t\treturn finished;\n\t}\n\tstackToTree(stack) {\n\t\tstack.close();\n\t\treturn Tree.build({\n\t\t\tbuffer: StackBufferCursor.create(stack),\n\t\t\tnodeSet: this.parser.nodeSet,\n\t\t\ttopID: this.topTerm,\n\t\t\tmaxBufferLength: this.parser.bufferLength,\n\t\t\treused: this.reused,\n\t\t\tstart: this.ranges[0].from,\n\t\t\tlength: stack.pos - this.ranges[0].from,\n\t\t\tminRepeatType: this.parser.minRepeatTerm\n\t\t});\n\t}\n\tstackID(stack) {\n\t\tlet id = (stackIDs || (stackIDs = /* @__PURE__ */ new WeakMap())).get(stack);\n\t\tif (!id) stackIDs.set(stack, id = String.fromCodePoint(this.nextStackID++));\n\t\treturn id + stack;\n\t}\n};\nfunction pushStackDedup(stack, newStacks) {\n\tfor (let i = 0; i < newStacks.length; i++) {\n\t\tlet other = newStacks[i];\n\t\tif (other.pos == stack.pos && other.sameState(stack)) {\n\t\t\tif (newStacks[i].score < stack.score) newStacks[i] = stack;\n\t\t\treturn;\n\t\t}\n\t}\n\tnewStacks.push(stack);\n}\nvar Dialect = class {\n\tconstructor(source, flags, disabled) {\n\t\tthis.source = source;\n\t\tthis.flags = flags;\n\t\tthis.disabled = disabled;\n\t}\n\tallows(term) {\n\t\treturn !this.disabled || this.disabled[term] == 0;\n\t}\n};\n/**\nHolds the parse tables for a given grammar, as generated by\n`lezer-generator`, and provides [methods](#common.Parser) to parse\ncontent with.\n*/\nvar LRParser = class LRParser extends Parser {\n\t/**\n\t@internal\n\t*/\n\tconstructor(spec) {\n\t\tsuper();\n\t\t/**\n\t\t@internal\n\t\t*/\n\t\tthis.wrappers = [];\n\t\tif (spec.version != 14) throw new RangeError(`Parser version (${spec.version}) doesn't match runtime version (14)`);\n\t\tlet nodeNames = spec.nodeNames.split(\" \");\n\t\tthis.minRepeatTerm = nodeNames.length;\n\t\tfor (let i = 0; i < spec.repeatNodeCount; i++) nodeNames.push(\"\");\n\t\tlet topTerms = Object.keys(spec.topRules).map((r) => spec.topRules[r][1]);\n\t\tlet nodeProps = [];\n\t\tfor (let i = 0; i < nodeNames.length; i++) nodeProps.push([]);\n\t\tfunction setProp(nodeID, prop, value) {\n\t\t\tnodeProps[nodeID].push([prop, prop.deserialize(String(value))]);\n\t\t}\n\t\tif (spec.nodeProps) for (let propSpec of spec.nodeProps) {\n\t\t\tlet prop = propSpec[0];\n\t\t\tif (typeof prop == \"string\") prop = NodeProp[prop];\n\t\t\tfor (let i = 1; i < propSpec.length;) {\n\t\t\t\tlet next = propSpec[i++];\n\t\t\t\tif (next >= 0) setProp(next, prop, propSpec[i++]);\n\t\t\t\telse {\n\t\t\t\t\tlet value = propSpec[i + -next];\n\t\t\t\t\tfor (let j = -next; j > 0; j--) setProp(propSpec[i++], prop, value);\n\t\t\t\t\ti++;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis.nodeSet = new NodeSet(nodeNames.map((name, i) => NodeType.define({\n\t\t\tname: i >= this.minRepeatTerm ? void 0 : name,\n\t\t\tid: i,\n\t\t\tprops: nodeProps[i],\n\t\t\ttop: topTerms.indexOf(i) > -1,\n\t\t\terror: i == 0,\n\t\t\tskipped: spec.skippedNodes && spec.skippedNodes.indexOf(i) > -1\n\t\t})));\n\t\tif (spec.propSources) this.nodeSet = this.nodeSet.extend(...spec.propSources);\n\t\tthis.strict = false;\n\t\tthis.bufferLength = DefaultBufferLength;\n\t\tlet tokenArray = decodeArray(spec.tokenData);\n\t\tthis.context = spec.context;\n\t\tthis.specializerSpecs = spec.specialized || [];\n\t\tthis.specialized = new Uint16Array(this.specializerSpecs.length);\n\t\tfor (let i = 0; i < this.specializerSpecs.length; i++) this.specialized[i] = this.specializerSpecs[i].term;\n\t\tthis.specializers = this.specializerSpecs.map(getSpecializer);\n\t\tthis.states = decodeArray(spec.states, Uint32Array);\n\t\tthis.data = decodeArray(spec.stateData);\n\t\tthis.goto = decodeArray(spec.goto);\n\t\tthis.maxTerm = spec.maxTerm;\n\t\tthis.tokenizers = spec.tokenizers.map((value) => typeof value == \"number\" ? new TokenGroup(tokenArray, value) : value);\n\t\tthis.topRules = spec.topRules;\n\t\tthis.dialects = spec.dialects || {};\n\t\tthis.dynamicPrecedences = spec.dynamicPrecedences || null;\n\t\tthis.tokenPrecTable = spec.tokenPrec;\n\t\tthis.termNames = spec.termNames || null;\n\t\tthis.maxNode = this.nodeSet.types.length - 1;\n\t\tthis.dialect = this.parseDialect();\n\t\tthis.top = this.topRules[Object.keys(this.topRules)[0]];\n\t}\n\tcreateParse(input, fragments, ranges) {\n\t\tlet parse = new Parse(this, input, fragments, ranges);\n\t\tfor (let w of this.wrappers) parse = w(parse, input, fragments, ranges);\n\t\treturn parse;\n\t}\n\t/**\n\tGet a goto table entry @internal\n\t*/\n\tgetGoto(state, term, loose = false) {\n\t\tlet table = this.goto;\n\t\tif (term >= table[0]) return -1;\n\t\tfor (let pos = table[term + 1];;) {\n\t\t\tlet groupTag = table[pos++], last = groupTag & 1;\n\t\t\tlet target = table[pos++];\n\t\t\tif (last && loose) return target;\n\t\t\tfor (let end = pos + (groupTag >> 1); pos < end; pos++) if (table[pos] == state) return target;\n\t\t\tif (last) return -1;\n\t\t}\n\t}\n\t/**\n\tCheck if this state has an action for a given terminal @internal\n\t*/\n\thasAction(state, terminal) {\n\t\tlet data = this.data;\n\t\tfor (let set = 0; set < 2; set++) for (let i = this.stateSlot(state, set ? 2 : 1), next;; i += 3) {\n\t\t\tif ((next = data[i]) == 65535) if (data[i + 1] == 1) next = data[i = pair(data, i + 2)];\n\t\t\telse if (data[i + 1] == 2) return pair(data, i + 2);\n\t\t\telse break;\n\t\t\tif (next == terminal || next == 0) return pair(data, i + 1);\n\t\t}\n\t\treturn 0;\n\t}\n\t/**\n\t@internal\n\t*/\n\tstateSlot(state, slot) {\n\t\treturn this.states[state * 6 + slot];\n\t}\n\t/**\n\t@internal\n\t*/\n\tstateFlag(state, flag) {\n\t\treturn (this.stateSlot(state, 0) & flag) > 0;\n\t}\n\t/**\n\t@internal\n\t*/\n\tvalidAction(state, action) {\n\t\treturn !!this.allActions(state, (a) => a == action ? true : null);\n\t}\n\t/**\n\t@internal\n\t*/\n\tallActions(state, action) {\n\t\tlet deflt = this.stateSlot(state, 4);\n\t\tlet result = deflt ? action(deflt) : void 0;\n\t\tfor (let i = this.stateSlot(state, 1); result == null; i += 3) {\n\t\t\tif (this.data[i] == 65535) if (this.data[i + 1] == 1) i = pair(this.data, i + 2);\n\t\t\telse break;\n\t\t\tresult = action(pair(this.data, i + 1));\n\t\t}\n\t\treturn result;\n\t}\n\t/**\n\tGet the states that can follow this one through shift actions or\n\tgoto jumps. @internal\n\t*/\n\tnextStates(state) {\n\t\tlet result = [];\n\t\tfor (let i = this.stateSlot(state, 1);; i += 3) {\n\t\t\tif (this.data[i] == 65535) if (this.data[i + 1] == 1) i = pair(this.data, i + 2);\n\t\t\telse break;\n\t\t\tif ((this.data[i + 2] & 1) == 0) {\n\t\t\t\tlet value = this.data[i + 1];\n\t\t\t\tif (!result.some((v, i) => i & 1 && v == value)) result.push(this.data[i], value);\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\t/**\n\tConfigure the parser. Returns a new parser instance that has the\n\tgiven settings modified. Settings not provided in `config` are\n\tkept from the original parser.\n\t*/\n\tconfigure(config) {\n\t\tlet copy = Object.assign(Object.create(LRParser.prototype), this);\n\t\tif (config.props) copy.nodeSet = this.nodeSet.extend(...config.props);\n\t\tif (config.top) {\n\t\t\tlet info = this.topRules[config.top];\n\t\t\tif (!info) throw new RangeError(`Invalid top rule name ${config.top}`);\n\t\t\tcopy.top = info;\n\t\t}\n\t\tif (config.tokenizers) copy.tokenizers = this.tokenizers.map((t) => {\n\t\t\tlet found = config.tokenizers.find((r) => r.from == t);\n\t\t\treturn found ? found.to : t;\n\t\t});\n\t\tif (config.specializers) {\n\t\t\tcopy.specializers = this.specializers.slice();\n\t\t\tcopy.specializerSpecs = this.specializerSpecs.map((s, i) => {\n\t\t\t\tlet found = config.specializers.find((r) => r.from == s.external);\n\t\t\t\tif (!found) return s;\n\t\t\t\tlet spec = Object.assign(Object.assign({}, s), { external: found.to });\n\t\t\t\tcopy.specializers[i] = getSpecializer(spec);\n\t\t\t\treturn spec;\n\t\t\t});\n\t\t}\n\t\tif (config.contextTracker) copy.context = config.contextTracker;\n\t\tif (config.dialect) copy.dialect = this.parseDialect(config.dialect);\n\t\tif (config.strict != null) copy.strict = config.strict;\n\t\tif (config.wrap) copy.wrappers = copy.wrappers.concat(config.wrap);\n\t\tif (config.bufferLength != null) copy.bufferLength = config.bufferLength;\n\t\treturn copy;\n\t}\n\t/**\n\tTells you whether any [parse wrappers](#lr.ParserConfig.wrap)\n\tare registered for this parser.\n\t*/\n\thasWrappers() {\n\t\treturn this.wrappers.length > 0;\n\t}\n\t/**\n\tReturns the name associated with a given term. This will only\n\twork for all terms when the parser was generated with the\n\t`--names` option. By default, only the names of tagged terms are\n\tstored.\n\t*/\n\tgetName(term) {\n\t\treturn this.termNames ? this.termNames[term] : String(term <= this.maxNode && this.nodeSet.types[term].name || term);\n\t}\n\t/**\n\tThe eof term id is always allocated directly after the node\n\ttypes. @internal\n\t*/\n\tget eofTerm() {\n\t\treturn this.maxNode + 1;\n\t}\n\t/**\n\tThe type of top node produced by the parser.\n\t*/\n\tget topNode() {\n\t\treturn this.nodeSet.types[this.top[1]];\n\t}\n\t/**\n\t@internal\n\t*/\n\tdynamicPrecedence(term) {\n\t\tlet prec = this.dynamicPrecedences;\n\t\treturn prec == null ? 0 : prec[term] || 0;\n\t}\n\t/**\n\t@internal\n\t*/\n\tparseDialect(dialect) {\n\t\tlet values = Object.keys(this.dialects), flags = values.map(() => false);\n\t\tif (dialect) for (let part of dialect.split(\" \")) {\n\t\t\tlet id = values.indexOf(part);\n\t\t\tif (id >= 0) flags[id] = true;\n\t\t}\n\t\tlet disabled = null;\n\t\tfor (let i = 0; i < values.length; i++) if (!flags[i]) for (let j = this.dialects[values[i]], id; (id = this.data[j++]) != 65535;) (disabled || (disabled = new Uint8Array(this.maxTerm + 1)))[id] = 1;\n\t\treturn new Dialect(dialect, flags, disabled);\n\t}\n\t/**\n\tUsed by the output of the parser generator. Not available to\n\tuser code. @hide\n\t*/\n\tstatic deserialize(spec) {\n\t\treturn new LRParser(spec);\n\t}\n};\nfunction pair(data, off) {\n\treturn data[off] | data[off + 1] << 16;\n}\nfunction findFinished(stacks) {\n\tlet best = null;\n\tfor (let stack of stacks) {\n\t\tlet stopped = stack.p.stoppedAt;\n\t\tif ((stack.pos == stack.p.stream.end || stopped != null && stack.pos > stopped) && stack.p.parser.stateFlag(stack.state, 2) && (!best || best.score < stack.score)) best = stack;\n\t}\n\treturn best;\n}\nfunction getSpecializer(spec) {\n\tif (spec.external) {\n\t\tlet mask = spec.extend ? 1 : 0;\n\t\treturn (value, stack) => spec.external(value, stack) << 1 | mask;\n\t}\n\treturn spec.get;\n}\n//#endregion\n//#region ../../node_modules/.pnpm/@lezer+highlight@1.2.3/node_modules/@lezer/highlight/dist/index.js\nlet nextTagID = 0;\n/**\nHighlighting tags are markers that denote a highlighting category.\nThey are [associated](#highlight.styleTags) with parts of a syntax\ntree by a language mode, and then mapped to an actual CSS style by\na [highlighter](#highlight.Highlighter).\n\nBecause syntax tree node types and highlight styles have to be\nable to talk the same language, CodeMirror uses a mostly _closed_\n[vocabulary](#highlight.tags) of syntax tags (as opposed to\ntraditional open string-based systems, which make it hard for\nhighlighting themes to cover all the tokens produced by the\nvarious languages).\n\nIt _is_ possible to [define](#highlight.Tag^define) your own\nhighlighting tags for system-internal use (where you control both\nthe language package and the highlighter), but such tags will not\nbe picked up by regular highlighters (though you can derive them\nfrom standard tags to allow highlighters to fall back to those).\n*/\nvar Tag = class Tag {\n\t/**\n\t@internal\n\t*/\n\tconstructor(name, set, base, modified) {\n\t\tthis.name = name;\n\t\tthis.set = set;\n\t\tthis.base = base;\n\t\tthis.modified = modified;\n\t\t/**\n\t\t@internal\n\t\t*/\n\t\tthis.id = nextTagID++;\n\t}\n\ttoString() {\n\t\tlet { name } = this;\n\t\tfor (let mod of this.modified) if (mod.name) name = `${mod.name}(${name})`;\n\t\treturn name;\n\t}\n\tstatic define(nameOrParent, parent) {\n\t\tlet name = typeof nameOrParent == \"string\" ? nameOrParent : \"?\";\n\t\tif (nameOrParent instanceof Tag) parent = nameOrParent;\n\t\tif (parent === null || parent === void 0 ? void 0 : parent.base) throw new Error(\"Can not derive from a modified tag\");\n\t\tlet tag = new Tag(name, [], null, []);\n\t\ttag.set.push(tag);\n\t\tif (parent) for (let t of parent.set) tag.set.push(t);\n\t\treturn tag;\n\t}\n\t/**\n\tDefine a tag _modifier_, which is a function that, given a tag,\n\twill return a tag that is a subtag of the original. Applying the\n\tsame modifier to a twice tag will return the same value (`m1(t1)\n\t== m1(t1)`) and applying multiple modifiers will, regardless or\n\torder, produce the same tag (`m1(m2(t1)) == m2(m1(t1))`).\n\t\n\tWhen multiple modifiers are applied to a given base tag, each\n\tsmaller set of modifiers is registered as a parent, so that for\n\texample `m1(m2(m3(t1)))` is a subtype of `m1(m2(t1))`,\n\t`m1(m3(t1)`, and so on.\n\t*/\n\tstatic defineModifier(name) {\n\t\tlet mod = new Modifier(name);\n\t\treturn (tag) => {\n\t\t\tif (tag.modified.indexOf(mod) > -1) return tag;\n\t\t\treturn Modifier.get(tag.base || tag, tag.modified.concat(mod).sort((a, b) => a.id - b.id));\n\t\t};\n\t}\n};\nlet nextModifierID = 0;\nvar Modifier = class Modifier {\n\tconstructor(name) {\n\t\tthis.name = name;\n\t\tthis.instances = [];\n\t\tthis.id = nextModifierID++;\n\t}\n\tstatic get(base, mods) {\n\t\tif (!mods.length) return base;\n\t\tlet exists = mods[0].instances.find((t) => t.base == base && sameArray(mods, t.modified));\n\t\tif (exists) return exists;\n\t\tlet set = [], tag = new Tag(base.name, set, base, mods);\n\t\tfor (let m of mods) m.instances.push(tag);\n\t\tlet configs = powerSet(mods);\n\t\tfor (let parent of base.set) if (!parent.modified.length) for (let config of configs) set.push(Modifier.get(parent, config));\n\t\treturn tag;\n\t}\n};\nfunction sameArray(a, b) {\n\treturn a.length == b.length && a.every((x, i) => x == b[i]);\n}\nfunction powerSet(array) {\n\tlet sets = [[]];\n\tfor (let i = 0; i < array.length; i++) for (let j = 0, e = sets.length; j < e; j++) sets.push(sets[j].concat(array[i]));\n\treturn sets.sort((a, b) => b.length - a.length);\n}\n/**\nThis function is used to add a set of tags to a language syntax\nvia [`NodeSet.extend`](#common.NodeSet.extend) or\n[`LRParser.configure`](#lr.LRParser.configure).\n\nThe argument object maps node selectors to [highlighting\ntags](#highlight.Tag) or arrays of tags.\n\nNode selectors may hold one or more (space-separated) node paths.\nSuch a path can be a [node name](#common.NodeType.name), or\nmultiple node names (or `*` wildcards) separated by slash\ncharacters, as in `\"Block/Declaration/VariableName\"`. Such a path\nmatches the final node but only if its direct parent nodes are the\nother nodes mentioned. A `*` in such a path matches any parent,\nbut only a single level—wildcards that match multiple parents\naren't supported, both for efficiency reasons and because Lezer\ntrees make it rather hard to reason about what they would match.)\n\nA path can be ended with `/...` to indicate that the tag assigned\nto the node should also apply to all child nodes, even if they\nmatch their own style (by default, only the innermost style is\nused).\n\nWhen a path ends in `!`, as in `Attribute!`, no further matching\nhappens for the node's child nodes, and the entire node gets the\ngiven style.\n\nIn this notation, node names that contain `/`, `!`, `*`, or `...`\nmust be quoted as JSON strings.\n\nFor example:\n\n```javascript\nparser.configure({props: [\nstyleTags({\n// Style Number and BigNumber nodes\n\"Number BigNumber\": tags.number,\n// Style Escape nodes whose parent is String\n\"String/Escape\": tags.escape,\n// Style anything inside Attributes nodes\n\"Attributes!\": tags.meta,\n// Add a style to all content inside Italic nodes\n\"Italic/...\": tags.emphasis,\n// Style InvalidString nodes as both `string` and `invalid`\n\"InvalidString\": [tags.string, tags.invalid],\n// Style the node named \"/\" as punctuation\n'\"/\"': tags.punctuation\n})\n]})\n```\n*/\nfunction styleTags(spec) {\n\tlet byName = Object.create(null);\n\tfor (let prop in spec) {\n\t\tlet tags = spec[prop];\n\t\tif (!Array.isArray(tags)) tags = [tags];\n\t\tfor (let part of prop.split(\" \")) if (part) {\n\t\t\tlet pieces = [], mode = 2, rest = part;\n\t\t\tfor (let pos = 0;;) {\n\t\t\t\tif (rest == \"...\" && pos > 0 && pos + 3 == part.length) {\n\t\t\t\t\tmode = 1;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tlet m = /^\"(?:[^\"\\\\]|\\\\.)*?\"|[^\\/!]+/.exec(rest);\n\t\t\t\tif (!m) throw new RangeError(\"Invalid path: \" + part);\n\t\t\t\tpieces.push(m[0] == \"*\" ? \"\" : m[0][0] == \"\\\"\" ? JSON.parse(m[0]) : m[0]);\n\t\t\t\tpos += m[0].length;\n\t\t\t\tif (pos == part.length) break;\n\t\t\t\tlet next = part[pos++];\n\t\t\t\tif (pos == part.length && next == \"!\") {\n\t\t\t\t\tmode = 0;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (next != \"/\") throw new RangeError(\"Invalid path: \" + part);\n\t\t\t\trest = part.slice(pos);\n\t\t\t}\n\t\t\tlet last = pieces.length - 1, inner = pieces[last];\n\t\t\tif (!inner) throw new RangeError(\"Invalid path: \" + part);\n\t\t\tbyName[inner] = new Rule(tags, mode, last > 0 ? pieces.slice(0, last) : null).sort(byName[inner]);\n\t\t}\n\t}\n\treturn ruleNodeProp.add(byName);\n}\nconst ruleNodeProp = new NodeProp({ combine(a, b) {\n\tlet cur, root, take;\n\twhile (a || b) {\n\t\tif (!a || b && a.depth >= b.depth) {\n\t\t\ttake = b;\n\t\t\tb = b.next;\n\t\t} else {\n\t\t\ttake = a;\n\t\t\ta = a.next;\n\t\t}\n\t\tif (cur && cur.mode == take.mode && !take.context && !cur.context) continue;\n\t\tlet copy = new Rule(take.tags, take.mode, take.context);\n\t\tif (cur) cur.next = copy;\n\t\telse root = copy;\n\t\tcur = copy;\n\t}\n\treturn root;\n} });\nvar Rule = class {\n\tconstructor(tags, mode, context, next) {\n\t\tthis.tags = tags;\n\t\tthis.mode = mode;\n\t\tthis.context = context;\n\t\tthis.next = next;\n\t}\n\tget opaque() {\n\t\treturn this.mode == 0;\n\t}\n\tget inherit() {\n\t\treturn this.mode == 1;\n\t}\n\tsort(other) {\n\t\tif (!other || other.depth < this.depth) {\n\t\t\tthis.next = other;\n\t\t\treturn this;\n\t\t}\n\t\tother.next = this.sort(other.next);\n\t\treturn other;\n\t}\n\tget depth() {\n\t\treturn this.context ? this.context.length : 0;\n\t}\n};\nRule.empty = new Rule([], 2, null);\n/**\nDefine a [highlighter](#highlight.Highlighter) from an array of\ntag/class pairs. Classes associated with more specific tags will\ntake precedence.\n*/\nfunction tagHighlighter(tags, options) {\n\tlet map = Object.create(null);\n\tfor (let style of tags) if (!Array.isArray(style.tag)) map[style.tag.id] = style.class;\n\telse for (let tag of style.tag) map[tag.id] = style.class;\n\tlet { scope, all = null } = options || {};\n\treturn {\n\t\tstyle: (tags) => {\n\t\t\tlet cls = all;\n\t\t\tfor (let tag of tags) for (let sub of tag.set) {\n\t\t\t\tlet tagClass = map[sub.id];\n\t\t\t\tif (tagClass) {\n\t\t\t\t\tcls = cls ? cls + \" \" + tagClass : tagClass;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn cls;\n\t\t},\n\t\tscope\n\t};\n}\nfunction highlightTags(highlighters, tags) {\n\tlet result = null;\n\tfor (let highlighter of highlighters) {\n\t\tlet value = highlighter.style(tags);\n\t\tif (value) result = result ? result + \" \" + value : value;\n\t}\n\treturn result;\n}\n/**\nHighlight the given [tree](#common.Tree) with the given\n[highlighter](#highlight.Highlighter). Often, the higher-level\n[`highlightCode`](#highlight.highlightCode) function is easier to\nuse.\n*/\nfunction highlightTree(tree, highlighter, putStyle, from = 0, to = tree.length) {\n\tlet builder = new HighlightBuilder(from, Array.isArray(highlighter) ? highlighter : [highlighter], putStyle);\n\tbuilder.highlightRange(tree.cursor(), from, to, \"\", builder.highlighters);\n\tbuilder.flush(to);\n}\nvar HighlightBuilder = class {\n\tconstructor(at, highlighters, span) {\n\t\tthis.at = at;\n\t\tthis.highlighters = highlighters;\n\t\tthis.span = span;\n\t\tthis.class = \"\";\n\t}\n\tstartSpan(at, cls) {\n\t\tif (cls != this.class) {\n\t\t\tthis.flush(at);\n\t\t\tif (at > this.at) this.at = at;\n\t\t\tthis.class = cls;\n\t\t}\n\t}\n\tflush(to) {\n\t\tif (to > this.at && this.class) this.span(this.at, to, this.class);\n\t}\n\thighlightRange(cursor, from, to, inheritedClass, highlighters) {\n\t\tlet { type, from: start, to: end } = cursor;\n\t\tif (start >= to || end <= from) return;\n\t\tif (type.isTop) highlighters = this.highlighters.filter((h) => !h.scope || h.scope(type));\n\t\tlet cls = inheritedClass;\n\t\tlet rule = getStyleTags(cursor) || Rule.empty;\n\t\tlet tagCls = highlightTags(highlighters, rule.tags);\n\t\tif (tagCls) {\n\t\t\tif (cls) cls += \" \";\n\t\t\tcls += tagCls;\n\t\t\tif (rule.mode == 1) inheritedClass += (inheritedClass ? \" \" : \"\") + tagCls;\n\t\t}\n\t\tthis.startSpan(Math.max(from, start), cls);\n\t\tif (rule.opaque) return;\n\t\tlet mounted = cursor.tree && cursor.tree.prop(NodeProp.mounted);\n\t\tif (mounted && mounted.overlay) {\n\t\t\tlet inner = cursor.node.enter(mounted.overlay[0].from + start, 1);\n\t\t\tlet innerHighlighters = this.highlighters.filter((h) => !h.scope || h.scope(mounted.tree.type));\n\t\t\tlet hasChild = cursor.firstChild();\n\t\t\tfor (let i = 0, pos = start;; i++) {\n\t\t\t\tlet next = i < mounted.overlay.length ? mounted.overlay[i] : null;\n\t\t\t\tlet nextPos = next ? next.from + start : end;\n\t\t\t\tlet rangeFrom = Math.max(from, pos), rangeTo = Math.min(to, nextPos);\n\t\t\t\tif (rangeFrom < rangeTo && hasChild) while (cursor.from < rangeTo) {\n\t\t\t\t\tthis.highlightRange(cursor, rangeFrom, rangeTo, inheritedClass, highlighters);\n\t\t\t\t\tthis.startSpan(Math.min(rangeTo, cursor.to), cls);\n\t\t\t\t\tif (cursor.to >= nextPos || !cursor.nextSibling()) break;\n\t\t\t\t}\n\t\t\t\tif (!next || nextPos > to) break;\n\t\t\t\tpos = next.to + start;\n\t\t\t\tif (pos > from) {\n\t\t\t\t\tthis.highlightRange(inner.cursor(), Math.max(from, next.from + start), Math.min(to, pos), \"\", innerHighlighters);\n\t\t\t\t\tthis.startSpan(Math.min(to, pos), cls);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (hasChild) cursor.parent();\n\t\t} else if (cursor.firstChild()) {\n\t\t\tif (mounted) inheritedClass = \"\";\n\t\t\tdo {\n\t\t\t\tif (cursor.to <= from) continue;\n\t\t\t\tif (cursor.from >= to) break;\n\t\t\t\tthis.highlightRange(cursor, from, to, inheritedClass, highlighters);\n\t\t\t\tthis.startSpan(Math.min(to, cursor.to), cls);\n\t\t\t} while (cursor.nextSibling());\n\t\t\tcursor.parent();\n\t\t}\n\t}\n};\n/**\nMatch a syntax node's [highlight rules](#highlight.styleTags). If\nthere's a match, return its set of tags, and whether it is\nopaque (uses a `!`) or applies to all child nodes (`/...`).\n*/\nfunction getStyleTags(node) {\n\tlet rule = node.type.prop(ruleNodeProp);\n\twhile (rule && rule.context && !node.matchContext(rule.context)) rule = rule.next;\n\treturn rule || null;\n}\nconst t = Tag.define;\nconst comment = t(), name = t(), typeName = t(name), propertyName = t(name), literal = t(), string = t(literal), number = t(literal), content = t(), heading = t(content), keyword = t(), operator = t(), punctuation = t(), bracket = t(punctuation), meta = t();\n/**\nThe default set of highlighting [tags](#highlight.Tag).\n\nThis collection is heavily biased towards programming languages,\nand necessarily incomplete. A full ontology of syntactic\nconstructs would fill a stack of books, and be impractical to\nwrite themes for. So try to make do with this set. If all else\nfails, [open an\nissue](https://github.com/codemirror/codemirror.next) to propose a\nnew tag, or [define](#highlight.Tag^define) a local custom tag for\nyour use case.\n\nNote that it is not obligatory to always attach the most specific\ntag possible to an element—if your grammar can't easily\ndistinguish a certain type of element (such as a local variable),\nit is okay to style it as its more general variant (a variable).\n\nFor tags that extend some parent tag, the documentation links to\nthe parent.\n*/\nconst tags = {\n\tcomment,\n\tlineComment: t(comment),\n\tblockComment: t(comment),\n\tdocComment: t(comment),\n\tname,\n\tvariableName: t(name),\n\ttypeName,\n\ttagName: t(typeName),\n\tpropertyName,\n\tattributeName: t(propertyName),\n\tclassName: t(name),\n\tlabelName: t(name),\n\tnamespace: t(name),\n\tmacroName: t(name),\n\tliteral,\n\tstring,\n\tdocString: t(string),\n\tcharacter: t(string),\n\tattributeValue: t(string),\n\tnumber,\n\tinteger: t(number),\n\tfloat: t(number),\n\tbool: t(literal),\n\tregexp: t(literal),\n\tescape: t(literal),\n\tcolor: t(literal),\n\turl: t(literal),\n\tkeyword,\n\tself: t(keyword),\n\tnull: t(keyword),\n\tatom: t(keyword),\n\tunit: t(keyword),\n\tmodifier: t(keyword),\n\toperatorKeyword: t(keyword),\n\tcontrolKeyword: t(keyword),\n\tdefinitionKeyword: t(keyword),\n\tmoduleKeyword: t(keyword),\n\toperator,\n\tderefOperator: t(operator),\n\tarithmeticOperator: t(operator),\n\tlogicOperator: t(operator),\n\tbitwiseOperator: t(operator),\n\tcompareOperator: t(operator),\n\tupdateOperator: t(operator),\n\tdefinitionOperator: t(operator),\n\ttypeOperator: t(operator),\n\tcontrolOperator: t(operator),\n\tpunctuation,\n\tseparator: t(punctuation),\n\tbracket,\n\tangleBracket: t(bracket),\n\tsquareBracket: t(bracket),\n\tparen: t(bracket),\n\tbrace: t(bracket),\n\tcontent,\n\theading,\n\theading1: t(heading),\n\theading2: t(heading),\n\theading3: t(heading),\n\theading4: t(heading),\n\theading5: t(heading),\n\theading6: t(heading),\n\tcontentSeparator: t(content),\n\tlist: t(content),\n\tquote: t(content),\n\temphasis: t(content),\n\tstrong: t(content),\n\tlink: t(content),\n\tmonospace: t(content),\n\tstrikethrough: t(content),\n\tinserted: t(),\n\tdeleted: t(),\n\tchanged: t(),\n\tinvalid: t(),\n\tmeta,\n\tdocumentMeta: t(meta),\n\tannotation: t(meta),\n\tprocessingInstruction: t(meta),\n\tdefinition: Tag.defineModifier(\"definition\"),\n\tconstant: Tag.defineModifier(\"constant\"),\n\tfunction: Tag.defineModifier(\"function\"),\n\tstandard: Tag.defineModifier(\"standard\"),\n\tlocal: Tag.defineModifier(\"local\"),\n\tspecial: Tag.defineModifier(\"special\")\n};\nfor (let name in tags) {\n\tlet val = tags[name];\n\tif (val instanceof Tag) val.name = name;\n}\ntagHighlighter([\n\t{\n\t\ttag: tags.link,\n\t\tclass: \"tok-link\"\n\t},\n\t{\n\t\ttag: tags.heading,\n\t\tclass: \"tok-heading\"\n\t},\n\t{\n\t\ttag: tags.emphasis,\n\t\tclass: \"tok-emphasis\"\n\t},\n\t{\n\t\ttag: tags.strong,\n\t\tclass: \"tok-strong\"\n\t},\n\t{\n\t\ttag: tags.keyword,\n\t\tclass: \"tok-keyword\"\n\t},\n\t{\n\t\ttag: tags.atom,\n\t\tclass: \"tok-atom\"\n\t},\n\t{\n\t\ttag: tags.bool,\n\t\tclass: \"tok-bool\"\n\t},\n\t{\n\t\ttag: tags.url,\n\t\tclass: \"tok-url\"\n\t},\n\t{\n\t\ttag: tags.labelName,\n\t\tclass: \"tok-labelName\"\n\t},\n\t{\n\t\ttag: tags.inserted,\n\t\tclass: \"tok-inserted\"\n\t},\n\t{\n\t\ttag: tags.deleted,\n\t\tclass: \"tok-deleted\"\n\t},\n\t{\n\t\ttag: tags.literal,\n\t\tclass: \"tok-literal\"\n\t},\n\t{\n\t\ttag: tags.string,\n\t\tclass: \"tok-string\"\n\t},\n\t{\n\t\ttag: tags.number,\n\t\tclass: \"tok-number\"\n\t},\n\t{\n\t\ttag: [\n\t\t\ttags.regexp,\n\t\t\ttags.escape,\n\t\t\ttags.special(tags.string)\n\t\t],\n\t\tclass: \"tok-string2\"\n\t},\n\t{\n\t\ttag: tags.variableName,\n\t\tclass: \"tok-variableName\"\n\t},\n\t{\n\t\ttag: tags.local(tags.variableName),\n\t\tclass: \"tok-variableName tok-local\"\n\t},\n\t{\n\t\ttag: tags.definition(tags.variableName),\n\t\tclass: \"tok-variableName tok-definition\"\n\t},\n\t{\n\t\ttag: tags.special(tags.variableName),\n\t\tclass: \"tok-variableName2\"\n\t},\n\t{\n\t\ttag: tags.definition(tags.propertyName),\n\t\tclass: \"tok-propertyName tok-definition\"\n\t},\n\t{\n\t\ttag: tags.typeName,\n\t\tclass: \"tok-typeName\"\n\t},\n\t{\n\t\ttag: tags.namespace,\n\t\tclass: \"tok-namespace\"\n\t},\n\t{\n\t\ttag: tags.className,\n\t\tclass: \"tok-className\"\n\t},\n\t{\n\t\ttag: tags.macroName,\n\t\tclass: \"tok-macroName\"\n\t},\n\t{\n\t\ttag: tags.propertyName,\n\t\tclass: \"tok-propertyName\"\n\t},\n\t{\n\t\ttag: tags.operator,\n\t\tclass: \"tok-operator\"\n\t},\n\t{\n\t\ttag: tags.comment,\n\t\tclass: \"tok-comment\"\n\t},\n\t{\n\t\ttag: tags.meta,\n\t\tclass: \"tok-meta\"\n\t},\n\t{\n\t\ttag: tags.invalid,\n\t\tclass: \"tok-invalid\"\n\t},\n\t{\n\t\ttag: tags.punctuation,\n\t\tclass: \"tok-punctuation\"\n\t}\n]);\n//#endregion\n//#region ../../node_modules/.pnpm/@codemirror+language@6.11.0/node_modules/@codemirror/language/dist/index.js\nvar _a;\n/**\nNode prop stored in a parser's top syntax node to provide the\nfacet that stores language-specific data for that language.\n*/\nconst languageDataProp = /* @__PURE__ */ new NodeProp();\n/**\nHelper function to define a facet (to be added to the top syntax\nnode(s) for a language via\n[`languageDataProp`](https://codemirror.net/6/docs/ref/#language.languageDataProp)), that will be\nused to associate language data with the language. You\nprobably only need this when subclassing\n[`Language`](https://codemirror.net/6/docs/ref/#language.Language).\n*/\nfunction defineLanguageFacet(baseData) {\n\treturn Facet.define({ combine: baseData ? (values) => values.concat(baseData) : void 0 });\n}\n/**\nSyntax node prop used to register sublanguages. Should be added to\nthe top level node type for the language.\n*/\nconst sublanguageProp = /* @__PURE__ */ new NodeProp();\n/**\nA language object manages parsing and per-language\n[metadata](https://codemirror.net/6/docs/ref/#state.EditorState.languageDataAt). Parse data is\nmanaged as a [Lezer](https://lezer.codemirror.net) tree. The class\ncan be used directly, via the [`LRLanguage`](https://codemirror.net/6/docs/ref/#language.LRLanguage)\nsubclass for [Lezer](https://lezer.codemirror.net/) LR parsers, or\nvia the [`StreamLanguage`](https://codemirror.net/6/docs/ref/#language.StreamLanguage) subclass\nfor stream parsers.\n*/\nvar Language = class {\n\t/**\n\tConstruct a language object. If you need to invoke this\n\tdirectly, first define a data facet with\n\t[`defineLanguageFacet`](https://codemirror.net/6/docs/ref/#language.defineLanguageFacet), and then\n\tconfigure your parser to [attach](https://codemirror.net/6/docs/ref/#language.languageDataProp) it\n\tto the language's outer syntax node.\n\t*/\n\tconstructor(data, parser, extraExtensions = [], name = \"\") {\n\t\tthis.data = data;\n\t\tthis.name = name;\n\t\tif (!EditorState.prototype.hasOwnProperty(\"tree\")) Object.defineProperty(EditorState.prototype, \"tree\", { get() {\n\t\t\treturn syntaxTree(this);\n\t\t} });\n\t\tthis.parser = parser;\n\t\tthis.extension = [language.of(this), EditorState.languageData.of((state, pos, side) => {\n\t\t\tlet top = topNodeAt(state, pos, side), data = top.type.prop(languageDataProp);\n\t\t\tif (!data) return [];\n\t\t\tlet base = state.facet(data), sub = top.type.prop(sublanguageProp);\n\t\t\tif (sub) {\n\t\t\t\tlet innerNode = top.resolve(pos - top.from, side);\n\t\t\t\tfor (let sublang of sub) if (sublang.test(innerNode, state)) {\n\t\t\t\t\tlet data = state.facet(sublang.facet);\n\t\t\t\t\treturn sublang.type == \"replace\" ? data : data.concat(base);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn base;\n\t\t})].concat(extraExtensions);\n\t}\n\t/**\n\tQuery whether this language is active at the given position.\n\t*/\n\tisActiveAt(state, pos, side = -1) {\n\t\treturn topNodeAt(state, pos, side).type.prop(languageDataProp) == this.data;\n\t}\n\t/**\n\tFind the document regions that were parsed using this language.\n\tThe returned regions will _include_ any nested languages rooted\n\tin this language, when those exist.\n\t*/\n\tfindRegions(state) {\n\t\tlet lang = state.facet(language);\n\t\tif ((lang === null || lang === void 0 ? void 0 : lang.data) == this.data) return [{\n\t\t\tfrom: 0,\n\t\t\tto: state.doc.length\n\t\t}];\n\t\tif (!lang || !lang.allowsNesting) return [];\n\t\tlet result = [];\n\t\tlet explore = (tree, from) => {\n\t\t\tif (tree.prop(languageDataProp) == this.data) {\n\t\t\t\tresult.push({\n\t\t\t\t\tfrom,\n\t\t\t\t\tto: from + tree.length\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlet mount = tree.prop(NodeProp.mounted);\n\t\t\tif (mount) {\n\t\t\t\tif (mount.tree.prop(languageDataProp) == this.data) {\n\t\t\t\t\tif (mount.overlay) for (let r of mount.overlay) result.push({\n\t\t\t\t\t\tfrom: r.from + from,\n\t\t\t\t\t\tto: r.to + from\n\t\t\t\t\t});\n\t\t\t\t\telse result.push({\n\t\t\t\t\t\tfrom,\n\t\t\t\t\t\tto: from + tree.length\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t} else if (mount.overlay) {\n\t\t\t\t\tlet size = result.length;\n\t\t\t\t\texplore(mount.tree, mount.overlay[0].from + from);\n\t\t\t\t\tif (result.length > size) return;\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (let i = 0; i < tree.children.length; i++) {\n\t\t\t\tlet ch = tree.children[i];\n\t\t\t\tif (ch instanceof Tree) explore(ch, tree.positions[i] + from);\n\t\t\t}\n\t\t};\n\t\texplore(syntaxTree(state), 0);\n\t\treturn result;\n\t}\n\t/**\n\tIndicates whether this language allows nested languages. The\n\tdefault implementation returns true.\n\t*/\n\tget allowsNesting() {\n\t\treturn true;\n\t}\n};\n/**\n@internal\n*/\nLanguage.setState = /* @__PURE__ */ StateEffect.define();\nfunction topNodeAt(state, pos, side) {\n\tlet topLang = state.facet(language), tree = syntaxTree(state).topNode;\n\tif (!topLang || topLang.allowsNesting) {\n\t\tfor (let node = tree; node; node = node.enter(pos, side, IterMode.ExcludeBuffers)) if (node.type.isTop) tree = node;\n\t}\n\treturn tree;\n}\n/**\nA subclass of [`Language`](https://codemirror.net/6/docs/ref/#language.Language) for use with Lezer\n[LR parsers](https://lezer.codemirror.net/docs/ref#lr.LRParser)\nparsers.\n*/\nvar LRLanguage = class LRLanguage extends Language {\n\tconstructor(data, parser, name) {\n\t\tsuper(data, parser, [], name);\n\t\tthis.parser = parser;\n\t}\n\t/**\n\tDefine a language from a parser.\n\t*/\n\tstatic define(spec) {\n\t\tlet data = defineLanguageFacet(spec.languageData);\n\t\treturn new LRLanguage(data, spec.parser.configure({ props: [languageDataProp.add((type) => type.isTop ? data : void 0)] }), spec.name);\n\t}\n\t/**\n\tCreate a new instance of this language with a reconfigured\n\tversion of its parser and optionally a new name.\n\t*/\n\tconfigure(options, name) {\n\t\treturn new LRLanguage(this.data, this.parser.configure(options), name || this.name);\n\t}\n\tget allowsNesting() {\n\t\treturn this.parser.hasWrappers();\n\t}\n};\n/**\nGet the syntax tree for a state, which is the current (possibly\nincomplete) parse tree of the active\n[language](https://codemirror.net/6/docs/ref/#language.Language), or the empty tree if there is no\nlanguage available.\n*/\nfunction syntaxTree(state) {\n\tlet field = state.field(Language.state, false);\n\treturn field ? field.tree : Tree.empty;\n}\n/**\nLezer-style\n[`Input`](https://lezer.codemirror.net/docs/ref#common.Input)\nobject for a [`Text`](https://codemirror.net/6/docs/ref/#state.Text) object.\n*/\nvar DocInput = class {\n\t/**\n\tCreate an input object for the given document.\n\t*/\n\tconstructor(doc) {\n\t\tthis.doc = doc;\n\t\tthis.cursorPos = 0;\n\t\tthis.string = \"\";\n\t\tthis.cursor = doc.iter();\n\t}\n\tget length() {\n\t\treturn this.doc.length;\n\t}\n\tsyncTo(pos) {\n\t\tthis.string = this.cursor.next(pos - this.cursorPos).value;\n\t\tthis.cursorPos = pos + this.string.length;\n\t\treturn this.cursorPos - this.string.length;\n\t}\n\tchunk(pos) {\n\t\tthis.syncTo(pos);\n\t\treturn this.string;\n\t}\n\tget lineChunks() {\n\t\treturn true;\n\t}\n\tread(from, to) {\n\t\tlet stringStart = this.cursorPos - this.string.length;\n\t\tif (from < stringStart || to >= this.cursorPos) return this.doc.sliceString(from, to);\n\t\telse return this.string.slice(from - stringStart, to - stringStart);\n\t}\n};\nlet currentContext = null;\n/**\nA parse context provided to parsers working on the editor content.\n*/\nvar ParseContext = class ParseContext {\n\tconstructor(parser, state, fragments = [], tree, treeLen, viewport, skipped, scheduleOn) {\n\t\tthis.parser = parser;\n\t\tthis.state = state;\n\t\tthis.fragments = fragments;\n\t\tthis.tree = tree;\n\t\tthis.treeLen = treeLen;\n\t\tthis.viewport = viewport;\n\t\tthis.skipped = skipped;\n\t\tthis.scheduleOn = scheduleOn;\n\t\tthis.parse = null;\n\t\t/**\n\t\t@internal\n\t\t*/\n\t\tthis.tempSkipped = [];\n\t}\n\t/**\n\t@internal\n\t*/\n\tstatic create(parser, state, viewport) {\n\t\treturn new ParseContext(parser, state, [], Tree.empty, 0, viewport, [], null);\n\t}\n\tstartParse() {\n\t\treturn this.parser.startParse(new DocInput(this.state.doc), this.fragments);\n\t}\n\t/**\n\t@internal\n\t*/\n\twork(until, upto) {\n\t\tif (upto != null && upto >= this.state.doc.length) upto = void 0;\n\t\tif (this.tree != Tree.empty && this.isDone(upto !== null && upto !== void 0 ? upto : this.state.doc.length)) {\n\t\t\tthis.takeTree();\n\t\t\treturn true;\n\t\t}\n\t\treturn this.withContext(() => {\n\t\t\tvar _a;\n\t\t\tif (typeof until == \"number\") {\n\t\t\t\tlet endTime = Date.now() + until;\n\t\t\t\tuntil = () => Date.now() > endTime;\n\t\t\t}\n\t\t\tif (!this.parse) this.parse = this.startParse();\n\t\t\tif (upto != null && (this.parse.stoppedAt == null || this.parse.stoppedAt > upto) && upto < this.state.doc.length) this.parse.stopAt(upto);\n\t\t\tfor (;;) {\n\t\t\t\tlet done = this.parse.advance();\n\t\t\t\tif (done) {\n\t\t\t\t\tthis.fragments = this.withoutTempSkipped(TreeFragment.addTree(done, this.fragments, this.parse.stoppedAt != null));\n\t\t\t\t\tthis.treeLen = (_a = this.parse.stoppedAt) !== null && _a !== void 0 ? _a : this.state.doc.length;\n\t\t\t\t\tthis.tree = done;\n\t\t\t\t\tthis.parse = null;\n\t\t\t\t\tif (this.treeLen < (upto !== null && upto !== void 0 ? upto : this.state.doc.length)) this.parse = this.startParse();\n\t\t\t\t\telse return true;\n\t\t\t\t}\n\t\t\t\tif (until()) return false;\n\t\t\t}\n\t\t});\n\t}\n\t/**\n\t@internal\n\t*/\n\ttakeTree() {\n\t\tlet pos, tree;\n\t\tif (this.parse && (pos = this.parse.parsedPos) >= this.treeLen) {\n\t\t\tif (this.parse.stoppedAt == null || this.parse.stoppedAt > pos) this.parse.stopAt(pos);\n\t\t\tthis.withContext(() => {\n\t\t\t\twhile (!(tree = this.parse.advance()));\n\t\t\t});\n\t\t\tthis.treeLen = pos;\n\t\t\tthis.tree = tree;\n\t\t\tthis.fragments = this.withoutTempSkipped(TreeFragment.addTree(this.tree, this.fragments, true));\n\t\t\tthis.parse = null;\n\t\t}\n\t}\n\twithContext(f) {\n\t\tlet prev = currentContext;\n\t\tcurrentContext = this;\n\t\ttry {\n\t\t\treturn f();\n\t\t} finally {\n\t\t\tcurrentContext = prev;\n\t\t}\n\t}\n\twithoutTempSkipped(fragments) {\n\t\tfor (let r; r = this.tempSkipped.pop();) fragments = cutFragments(fragments, r.from, r.to);\n\t\treturn fragments;\n\t}\n\t/**\n\t@internal\n\t*/\n\tchanges(changes, newState) {\n\t\tlet { fragments, tree, treeLen, viewport, skipped } = this;\n\t\tthis.takeTree();\n\t\tif (!changes.empty) {\n\t\t\tlet ranges = [];\n\t\t\tchanges.iterChangedRanges((fromA, toA, fromB, toB) => ranges.push({\n\t\t\t\tfromA,\n\t\t\t\ttoA,\n\t\t\t\tfromB,\n\t\t\t\ttoB\n\t\t\t}));\n\t\t\tfragments = TreeFragment.applyChanges(fragments, ranges);\n\t\t\ttree = Tree.empty;\n\t\t\ttreeLen = 0;\n\t\t\tviewport = {\n\t\t\t\tfrom: changes.mapPos(viewport.from, -1),\n\t\t\t\tto: changes.mapPos(viewport.to, 1)\n\t\t\t};\n\t\t\tif (this.skipped.length) {\n\t\t\t\tskipped = [];\n\t\t\t\tfor (let r of this.skipped) {\n\t\t\t\t\tlet from = changes.mapPos(r.from, 1), to = changes.mapPos(r.to, -1);\n\t\t\t\t\tif (from < to) skipped.push({\n\t\t\t\t\t\tfrom,\n\t\t\t\t\t\tto\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn new ParseContext(this.parser, newState, fragments, tree, treeLen, viewport, skipped, this.scheduleOn);\n\t}\n\t/**\n\t@internal\n\t*/\n\tupdateViewport(viewport) {\n\t\tif (this.viewport.from == viewport.from && this.viewport.to == viewport.to) return false;\n\t\tthis.viewport = viewport;\n\t\tlet startLen = this.skipped.length;\n\t\tfor (let i = 0; i < this.skipped.length; i++) {\n\t\t\tlet { from, to } = this.skipped[i];\n\t\t\tif (from < viewport.to && to > viewport.from) {\n\t\t\t\tthis.fragments = cutFragments(this.fragments, from, to);\n\t\t\t\tthis.skipped.splice(i--, 1);\n\t\t\t}\n\t\t}\n\t\tif (this.skipped.length >= startLen) return false;\n\t\tthis.reset();\n\t\treturn true;\n\t}\n\t/**\n\t@internal\n\t*/\n\treset() {\n\t\tif (this.parse) {\n\t\t\tthis.takeTree();\n\t\t\tthis.parse = null;\n\t\t}\n\t}\n\t/**\n\tNotify the parse scheduler that the given region was skipped\n\tbecause it wasn't in view, and the parse should be restarted\n\twhen it comes into view.\n\t*/\n\tskipUntilInView(from, to) {\n\t\tthis.skipped.push({\n\t\t\tfrom,\n\t\t\tto\n\t\t});\n\t}\n\t/**\n\tReturns a parser intended to be used as placeholder when\n\tasynchronously loading a nested parser. It'll skip its input and\n\tmark it as not-really-parsed, so that the next update will parse\n\tit again.\n\t\n\tWhen `until` is given, a reparse will be scheduled when that\n\tpromise resolves.\n\t*/\n\tstatic getSkippingParser(until) {\n\t\treturn new class extends Parser {\n\t\t\tcreateParse(input, fragments, ranges) {\n\t\t\t\tlet from = ranges[0].from, to = ranges[ranges.length - 1].to;\n\t\t\t\treturn {\n\t\t\t\t\tparsedPos: from,\n\t\t\t\t\tadvance() {\n\t\t\t\t\t\tlet cx = currentContext;\n\t\t\t\t\t\tif (cx) {\n\t\t\t\t\t\t\tfor (let r of ranges) cx.tempSkipped.push(r);\n\t\t\t\t\t\t\tif (until) cx.scheduleOn = cx.scheduleOn ? Promise.all([cx.scheduleOn, until]) : until;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.parsedPos = to;\n\t\t\t\t\t\treturn new Tree(NodeType.none, [], [], to - from);\n\t\t\t\t\t},\n\t\t\t\t\tstoppedAt: null,\n\t\t\t\t\tstopAt() {}\n\t\t\t\t};\n\t\t\t}\n\t\t}();\n\t}\n\t/**\n\t@internal\n\t*/\n\tisDone(upto) {\n\t\tupto = Math.min(upto, this.state.doc.length);\n\t\tlet frags = this.fragments;\n\t\treturn this.treeLen >= upto && frags.length && frags[0].from == 0 && frags[0].to >= upto;\n\t}\n\t/**\n\tGet the context for the current parse, or `null` if no editor\n\tparse is in progress.\n\t*/\n\tstatic get() {\n\t\treturn currentContext;\n\t}\n};\nfunction cutFragments(fragments, from, to) {\n\treturn TreeFragment.applyChanges(fragments, [{\n\t\tfromA: from,\n\t\ttoA: to,\n\t\tfromB: from,\n\t\ttoB: to\n\t}]);\n}\nvar LanguageState = class LanguageState {\n\tconstructor(context) {\n\t\tthis.context = context;\n\t\tthis.tree = context.tree;\n\t}\n\tapply(tr) {\n\t\tif (!tr.docChanged && this.tree == this.context.tree) return this;\n\t\tlet newCx = this.context.changes(tr.changes, tr.state);\n\t\tlet upto = this.context.treeLen == tr.startState.doc.length ? void 0 : Math.max(tr.changes.mapPos(this.context.treeLen), newCx.viewport.to);\n\t\tif (!newCx.work(20, upto)) newCx.takeTree();\n\t\treturn new LanguageState(newCx);\n\t}\n\tstatic init(state) {\n\t\tlet vpTo = Math.min(3e3, state.doc.length);\n\t\tlet parseState = ParseContext.create(state.facet(language).parser, state, {\n\t\t\tfrom: 0,\n\t\t\tto: vpTo\n\t\t});\n\t\tif (!parseState.work(20, vpTo)) parseState.takeTree();\n\t\treturn new LanguageState(parseState);\n\t}\n};\nLanguage.state = /* @__PURE__ */ StateField.define({\n\tcreate: LanguageState.init,\n\tupdate(value, tr) {\n\t\tfor (let e of tr.effects) if (e.is(Language.setState)) return e.value;\n\t\tif (tr.startState.facet(language) != tr.state.facet(language)) return LanguageState.init(tr.state);\n\t\treturn value.apply(tr);\n\t}\n});\nlet requestIdle = (callback) => {\n\tlet timeout = setTimeout(() => callback(), 500);\n\treturn () => clearTimeout(timeout);\n};\nif (typeof requestIdleCallback != \"undefined\") requestIdle = (callback) => {\n\tlet idle = -1, timeout = setTimeout(() => {\n\t\tidle = requestIdleCallback(callback, { timeout: 400 });\n\t}, 100);\n\treturn () => idle < 0 ? clearTimeout(timeout) : cancelIdleCallback(idle);\n};\nconst isInputPending = typeof navigator != \"undefined\" && ((_a = navigator.scheduling) === null || _a === void 0 ? void 0 : _a.isInputPending) ? () => navigator.scheduling.isInputPending() : null;\nconst parseWorker = /* @__PURE__ */ ViewPlugin.fromClass(class ParseWorker {\n\tconstructor(view) {\n\t\tthis.view = view;\n\t\tthis.working = null;\n\t\tthis.workScheduled = 0;\n\t\tthis.chunkEnd = -1;\n\t\tthis.chunkBudget = -1;\n\t\tthis.work = this.work.bind(this);\n\t\tthis.scheduleWork();\n\t}\n\tupdate(update) {\n\t\tlet cx = this.view.state.field(Language.state).context;\n\t\tif (cx.updateViewport(update.view.viewport) || this.view.viewport.to > cx.treeLen) this.scheduleWork();\n\t\tif (update.docChanged || update.selectionSet) {\n\t\t\tif (this.view.hasFocus) this.chunkBudget += 50;\n\t\t\tthis.scheduleWork();\n\t\t}\n\t\tthis.checkAsyncSchedule(cx);\n\t}\n\tscheduleWork() {\n\t\tif (this.working) return;\n\t\tlet { state } = this.view, field = state.field(Language.state);\n\t\tif (field.tree != field.context.tree || !field.context.isDone(state.doc.length)) this.working = requestIdle(this.work);\n\t}\n\twork(deadline) {\n\t\tthis.working = null;\n\t\tlet now = Date.now();\n\t\tif (this.chunkEnd < now && (this.chunkEnd < 0 || this.view.hasFocus)) {\n\t\t\tthis.chunkEnd = now + 3e4;\n\t\t\tthis.chunkBudget = 3e3;\n\t\t}\n\t\tif (this.chunkBudget <= 0) return;\n\t\tlet { state, viewport: { to: vpTo } } = this.view, field = state.field(Language.state);\n\t\tif (field.tree == field.context.tree && field.context.isDone(vpTo + 1e5)) return;\n\t\tlet endTime = Date.now() + Math.min(this.chunkBudget, 100, deadline && !isInputPending ? Math.max(25, deadline.timeRemaining() - 5) : 1e9);\n\t\tlet viewportFirst = field.context.treeLen < vpTo && state.doc.length > vpTo + 1e3;\n\t\tlet done = field.context.work(() => {\n\t\t\treturn isInputPending && isInputPending() || Date.now() > endTime;\n\t\t}, vpTo + (viewportFirst ? 0 : 1e5));\n\t\tthis.chunkBudget -= Date.now() - now;\n\t\tif (done || this.chunkBudget <= 0) {\n\t\t\tfield.context.takeTree();\n\t\t\tthis.view.dispatch({ effects: Language.setState.of(new LanguageState(field.context)) });\n\t\t}\n\t\tif (this.chunkBudget > 0 && !(done && !viewportFirst)) this.scheduleWork();\n\t\tthis.checkAsyncSchedule(field.context);\n\t}\n\tcheckAsyncSchedule(cx) {\n\t\tif (cx.scheduleOn) {\n\t\t\tthis.workScheduled++;\n\t\t\tcx.scheduleOn.then(() => this.scheduleWork()).catch((err) => logException(this.view.state, err)).then(() => this.workScheduled--);\n\t\t\tcx.scheduleOn = null;\n\t\t}\n\t}\n\tdestroy() {\n\t\tif (this.working) this.working();\n\t}\n\tisWorking() {\n\t\treturn !!(this.working || this.workScheduled > 0);\n\t}\n}, { eventHandlers: { focus() {\n\tthis.scheduleWork();\n} } });\n/**\nThe facet used to associate a language with an editor state. Used\nby `Language` object's `extension` property (so you don't need to\nmanually wrap your languages in this). Can be used to access the\ncurrent language on a state.\n*/\nconst language = /* @__PURE__ */ Facet.define({\n\tcombine(languages) {\n\t\treturn languages.length ? languages[0] : null;\n\t},\n\tenables: (language) => [\n\t\tLanguage.state,\n\t\tparseWorker,\n\t\tEditorView.contentAttributes.compute([language], (state) => {\n\t\t\tlet lang = state.facet(language);\n\t\t\treturn lang && lang.name ? { \"data-language\": lang.name } : {};\n\t\t})\n\t]\n});\n/**\nThis class bundles a [language](https://codemirror.net/6/docs/ref/#language.Language) with an\noptional set of supporting extensions. Language packages are\nencouraged to export a function that optionally takes a\nconfiguration object and returns a `LanguageSupport` instance, as\nthe main way for client code to use the package.\n*/\nvar LanguageSupport = class {\n\t/**\n\tCreate a language support object.\n\t*/\n\tconstructor(language, support = []) {\n\t\tthis.language = language;\n\t\tthis.support = support;\n\t\tthis.extension = [language, support];\n\t}\n};\n/**\nFacet that defines a way to provide a function that computes the\nappropriate indentation depth, as a column number (see\n[`indentString`](https://codemirror.net/6/docs/ref/#language.indentString)), at the start of a given\nline. A return value of `null` indicates no indentation can be\ndetermined, and the line should inherit the indentation of the one\nabove it. A return value of `undefined` defers to the next indent\nservice.\n*/\nconst indentService = /* @__PURE__ */ Facet.define();\n/**\nFacet for overriding the unit by which indentation happens. Should\nbe a string consisting either entirely of the same whitespace\ncharacter. When not set, this defaults to 2 spaces.\n*/\nconst indentUnit = /* @__PURE__ */ Facet.define({ combine: (values) => {\n\tif (!values.length) return \" \";\n\tlet unit = values[0];\n\tif (!unit || /\\S/.test(unit) || Array.from(unit).some((e) => e != unit[0])) throw new Error(\"Invalid indent unit: \" + JSON.stringify(values[0]));\n\treturn unit;\n} });\n/**\nReturn the _column width_ of an indent unit in the state.\nDetermined by the [`indentUnit`](https://codemirror.net/6/docs/ref/#language.indentUnit)\nfacet, and [`tabSize`](https://codemirror.net/6/docs/ref/#state.EditorState^tabSize) when that\ncontains tabs.\n*/\nfunction getIndentUnit(state) {\n\tlet unit = state.facet(indentUnit);\n\treturn unit.charCodeAt(0) == 9 ? state.tabSize * unit.length : unit.length;\n}\n/**\nCreate an indentation string that covers columns 0 to `cols`.\nWill use tabs for as much of the columns as possible when the\n[`indentUnit`](https://codemirror.net/6/docs/ref/#language.indentUnit) facet contains\ntabs.\n*/\nfunction indentString(state, cols) {\n\tlet result = \"\", ts = state.tabSize, ch = state.facet(indentUnit)[0];\n\tif (ch == \"\t\") {\n\t\twhile (cols >= ts) {\n\t\t\tresult += \"\t\";\n\t\t\tcols -= ts;\n\t\t}\n\t\tch = \" \";\n\t}\n\tfor (let i = 0; i < cols; i++) result += ch;\n\treturn result;\n}\n/**\nGet the indentation, as a column number, at the given position.\nWill first consult any [indent services](https://codemirror.net/6/docs/ref/#language.indentService)\nthat are registered, and if none of those return an indentation,\nthis will check the syntax tree for the [indent node\nprop](https://codemirror.net/6/docs/ref/#language.indentNodeProp) and use that if found. Returns a\nnumber when an indentation could be determined, and null\notherwise.\n*/\nfunction getIndentation(context, pos) {\n\tif (context instanceof EditorState) context = new IndentContext(context);\n\tfor (let service of context.state.facet(indentService)) {\n\t\tlet result = service(context, pos);\n\t\tif (result !== void 0) return result;\n\t}\n\tlet tree = syntaxTree(context.state);\n\treturn tree.length >= pos ? syntaxIndentation(context, tree, pos) : null;\n}\n/**\nIndentation contexts are used when calling [indentation\nservices](https://codemirror.net/6/docs/ref/#language.indentService). They provide helper utilities\nuseful in indentation logic, and can selectively override the\nindentation reported for some lines.\n*/\nvar IndentContext = class {\n\t/**\n\tCreate an indent context.\n\t*/\n\tconstructor(state, options = {}) {\n\t\tthis.state = state;\n\t\tthis.options = options;\n\t\tthis.unit = getIndentUnit(state);\n\t}\n\t/**\n\tGet a description of the line at the given position, taking\n\t[simulated line\n\tbreaks](https://codemirror.net/6/docs/ref/#language.IndentContext.constructor^options.simulateBreak)\n\tinto account. If there is such a break at `pos`, the `bias`\n\targument determines whether the part of the line line before or\n\tafter the break is used.\n\t*/\n\tlineAt(pos, bias = 1) {\n\t\tlet line = this.state.doc.lineAt(pos);\n\t\tlet { simulateBreak, simulateDoubleBreak } = this.options;\n\t\tif (simulateBreak != null && simulateBreak >= line.from && simulateBreak <= line.to) if (simulateDoubleBreak && simulateBreak == pos) return {\n\t\t\ttext: \"\",\n\t\t\tfrom: pos\n\t\t};\n\t\telse if (bias < 0 ? simulateBreak < pos : simulateBreak <= pos) return {\n\t\t\ttext: line.text.slice(simulateBreak - line.from),\n\t\t\tfrom: simulateBreak\n\t\t};\n\t\telse return {\n\t\t\ttext: line.text.slice(0, simulateBreak - line.from),\n\t\t\tfrom: line.from\n\t\t};\n\t\treturn line;\n\t}\n\t/**\n\tGet the text directly after `pos`, either the entire line\n\tor the next 100 characters, whichever is shorter.\n\t*/\n\ttextAfterPos(pos, bias = 1) {\n\t\tif (this.options.simulateDoubleBreak && pos == this.options.simulateBreak) return \"\";\n\t\tlet { text, from } = this.lineAt(pos, bias);\n\t\treturn text.slice(pos - from, Math.min(text.length, pos + 100 - from));\n\t}\n\t/**\n\tFind the column for the given position.\n\t*/\n\tcolumn(pos, bias = 1) {\n\t\tlet { text, from } = this.lineAt(pos, bias);\n\t\tlet result = this.countColumn(text, pos - from);\n\t\tlet override = this.options.overrideIndentation ? this.options.overrideIndentation(from) : -1;\n\t\tif (override > -1) result += override - this.countColumn(text, text.search(/\\S|$/));\n\t\treturn result;\n\t}\n\t/**\n\tFind the column position (taking tabs into account) of the given\n\tposition in the given string.\n\t*/\n\tcountColumn(line, pos = line.length) {\n\t\treturn countColumn(line, this.state.tabSize, pos);\n\t}\n\t/**\n\tFind the indentation column of the line at the given point.\n\t*/\n\tlineIndent(pos, bias = 1) {\n\t\tlet { text, from } = this.lineAt(pos, bias);\n\t\tlet override = this.options.overrideIndentation;\n\t\tif (override) {\n\t\t\tlet overriden = override(from);\n\t\t\tif (overriden > -1) return overriden;\n\t\t}\n\t\treturn this.countColumn(text, text.search(/\\S|$/));\n\t}\n\t/**\n\tReturns the [simulated line\n\tbreak](https://codemirror.net/6/docs/ref/#language.IndentContext.constructor^options.simulateBreak)\n\tfor this context, if any.\n\t*/\n\tget simulatedBreak() {\n\t\treturn this.options.simulateBreak || null;\n\t}\n};\n/**\nA syntax tree node prop used to associate indentation strategies\nwith node types. Such a strategy is a function from an indentation\ncontext to a column number (see also\n[`indentString`](https://codemirror.net/6/docs/ref/#language.indentString)) or null, where null\nindicates that no definitive indentation can be determined.\n*/\nconst indentNodeProp = /* @__PURE__ */ new NodeProp();\nfunction syntaxIndentation(cx, ast, pos) {\n\tlet stack = ast.resolveStack(pos);\n\tlet inner = ast.resolveInner(pos, -1).resolve(pos, 0).enterUnfinishedNodesBefore(pos);\n\tif (inner != stack.node) {\n\t\tlet add = [];\n\t\tfor (let cur = inner; cur && !(cur.from == stack.node.from && cur.type == stack.node.type); cur = cur.parent) add.push(cur);\n\t\tfor (let i = add.length - 1; i >= 0; i--) stack = {\n\t\t\tnode: add[i],\n\t\t\tnext: stack\n\t\t};\n\t}\n\treturn indentFor(stack, cx, pos);\n}\nfunction indentFor(stack, cx, pos) {\n\tfor (let cur = stack; cur; cur = cur.next) {\n\t\tlet strategy = indentStrategy(cur.node);\n\t\tif (strategy) return strategy(TreeIndentContext.create(cx, pos, cur));\n\t}\n\treturn 0;\n}\nfunction ignoreClosed(cx) {\n\treturn cx.pos == cx.options.simulateBreak && cx.options.simulateDoubleBreak;\n}\nfunction indentStrategy(tree) {\n\tlet strategy = tree.type.prop(indentNodeProp);\n\tif (strategy) return strategy;\n\tlet first = tree.firstChild, close;\n\tif (first && (close = first.type.prop(NodeProp.closedBy))) {\n\t\tlet last = tree.lastChild, closed = last && close.indexOf(last.name) > -1;\n\t\treturn (cx) => delimitedStrategy(cx, true, 1, void 0, closed && !ignoreClosed(cx) ? last.from : void 0);\n\t}\n\treturn tree.parent == null ? topIndent : null;\n}\nfunction topIndent() {\n\treturn 0;\n}\n/**\nObjects of this type provide context information and helper\nmethods to indentation functions registered on syntax nodes.\n*/\nvar TreeIndentContext = class TreeIndentContext extends IndentContext {\n\tconstructor(base, pos, context) {\n\t\tsuper(base.state, base.options);\n\t\tthis.base = base;\n\t\tthis.pos = pos;\n\t\tthis.context = context;\n\t}\n\t/**\n\tThe syntax tree node to which the indentation strategy\n\tapplies.\n\t*/\n\tget node() {\n\t\treturn this.context.node;\n\t}\n\t/**\n\t@internal\n\t*/\n\tstatic create(base, pos, context) {\n\t\treturn new TreeIndentContext(base, pos, context);\n\t}\n\t/**\n\tGet the text directly after `this.pos`, either the entire line\n\tor the next 100 characters, whichever is shorter.\n\t*/\n\tget textAfter() {\n\t\treturn this.textAfterPos(this.pos);\n\t}\n\t/**\n\tGet the indentation at the reference line for `this.node`, which\n\tis the line on which it starts, unless there is a node that is\n\t_not_ a parent of this node covering the start of that line. If\n\tso, the line at the start of that node is tried, again skipping\n\ton if it is covered by another such node.\n\t*/\n\tget baseIndent() {\n\t\treturn this.baseIndentFor(this.node);\n\t}\n\t/**\n\tGet the indentation for the reference line of the given node\n\t(see [`baseIndent`](https://codemirror.net/6/docs/ref/#language.TreeIndentContext.baseIndent)).\n\t*/\n\tbaseIndentFor(node) {\n\t\tlet line = this.state.doc.lineAt(node.from);\n\t\tfor (;;) {\n\t\t\tlet atBreak = node.resolve(line.from);\n\t\t\twhile (atBreak.parent && atBreak.parent.from == atBreak.from) atBreak = atBreak.parent;\n\t\t\tif (isParent(atBreak, node)) break;\n\t\t\tline = this.state.doc.lineAt(atBreak.from);\n\t\t}\n\t\treturn this.lineIndent(line.from);\n\t}\n\t/**\n\tContinue looking for indentations in the node's parent nodes,\n\tand return the result of that.\n\t*/\n\tcontinue() {\n\t\treturn indentFor(this.context.next, this.base, this.pos);\n\t}\n};\nfunction isParent(parent, of) {\n\tfor (let cur = of; cur; cur = cur.parent) if (parent == cur) return true;\n\treturn false;\n}\nfunction bracketedAligned(context) {\n\tlet tree = context.node;\n\tlet openToken = tree.childAfter(tree.from), last = tree.lastChild;\n\tif (!openToken) return null;\n\tlet sim = context.options.simulateBreak;\n\tlet openLine = context.state.doc.lineAt(openToken.from);\n\tlet lineEnd = sim == null || sim <= openLine.from ? openLine.to : Math.min(openLine.to, sim);\n\tfor (let pos = openToken.to;;) {\n\t\tlet next = tree.childAfter(pos);\n\t\tif (!next || next == last) return null;\n\t\tif (!next.type.isSkipped) {\n\t\t\tif (next.from >= lineEnd) return null;\n\t\t\tlet space = /^ */.exec(openLine.text.slice(openToken.to - openLine.from))[0].length;\n\t\t\treturn {\n\t\t\t\tfrom: openToken.from,\n\t\t\t\tto: openToken.to + space\n\t\t\t};\n\t\t}\n\t\tpos = next.to;\n\t}\n}\n/**\nAn indentation strategy for delimited (usually bracketed) nodes.\nWill, by default, indent one unit more than the parent's base\nindent unless the line starts with a closing token. When `align`\nis true and there are non-skipped nodes on the node's opening\nline, the content of the node will be aligned with the end of the\nopening node, like this:\n\nfoo(bar,\nbaz)\n*/\nfunction delimitedIndent({ closing, align = true, units = 1 }) {\n\treturn (context) => delimitedStrategy(context, align, units, closing);\n}\nfunction delimitedStrategy(context, align, units, closing, closedAt) {\n\tlet after = context.textAfter, space = after.match(/^\\s*/)[0].length;\n\tlet closed = closing && after.slice(space, space + closing.length) == closing || closedAt == context.pos + space;\n\tlet aligned = align ? bracketedAligned(context) : null;\n\tif (aligned) return closed ? context.column(aligned.from) : context.column(aligned.to);\n\treturn context.baseIndent + (closed ? 0 : context.unit * units);\n}\n/**\nCreates an indentation strategy that, by default, indents\ncontinued lines one unit more than the node's base indentation.\nYou can provide `except` to prevent indentation of lines that\nmatch a pattern (for example `/^else\\b/` in `if`/`else`\nconstructs), and you can change the amount of units used with the\n`units` option.\n*/\nfunction continuedIndent({ except, units = 1 } = {}) {\n\treturn (context) => {\n\t\tlet matchExcept = except && except.test(context.textAfter);\n\t\treturn context.baseIndent + (matchExcept ? 0 : units * context.unit);\n\t};\n}\nconst DontIndentBeyond = 200;\n/**\nEnables reindentation on input. When a language defines an\n`indentOnInput` field in its [language\ndata](https://codemirror.net/6/docs/ref/#state.EditorState.languageDataAt), which must hold a regular\nexpression, the line at the cursor will be reindented whenever new\ntext is typed and the input from the start of the line up to the\ncursor matches that regexp.\n\nTo avoid unneccesary reindents, it is recommended to start the\nregexp with `^` (usually followed by `\\s*`), and end it with `$`.\nFor example, `/^\\s*\\}$/` will reindent when a closing brace is\nadded at the start of a line.\n*/\nfunction indentOnInput() {\n\treturn EditorState.transactionFilter.of((tr) => {\n\t\tif (!tr.docChanged || !tr.isUserEvent(\"input.type\") && !tr.isUserEvent(\"input.complete\")) return tr;\n\t\tlet rules = tr.startState.languageDataAt(\"indentOnInput\", tr.startState.selection.main.head);\n\t\tif (!rules.length) return tr;\n\t\tlet doc = tr.newDoc, { head } = tr.newSelection.main, line = doc.lineAt(head);\n\t\tif (head > line.from + DontIndentBeyond) return tr;\n\t\tlet lineStart = doc.sliceString(line.from, head);\n\t\tif (!rules.some((r) => r.test(lineStart))) return tr;\n\t\tlet { state } = tr, last = -1, changes = [];\n\t\tfor (let { head } of state.selection.ranges) {\n\t\t\tlet line = state.doc.lineAt(head);\n\t\t\tif (line.from == last) continue;\n\t\t\tlast = line.from;\n\t\t\tlet indent = getIndentation(state, line.from);\n\t\t\tif (indent == null) continue;\n\t\t\tlet cur = /^\\s*/.exec(line.text)[0];\n\t\t\tlet norm = indentString(state, indent);\n\t\t\tif (cur != norm) changes.push({\n\t\t\t\tfrom: line.from,\n\t\t\t\tto: line.from + cur.length,\n\t\t\t\tinsert: norm\n\t\t\t});\n\t\t}\n\t\treturn changes.length ? [tr, {\n\t\t\tchanges,\n\t\t\tsequential: true\n\t\t}] : tr;\n\t});\n}\n/**\nA facet that registers a code folding service. When called with\nthe extent of a line, such a function should return a foldable\nrange that starts on that line (but continues beyond it), if one\ncan be found.\n*/\nconst foldService = /* @__PURE__ */ Facet.define();\n/**\nThis node prop is used to associate folding information with\nsyntax node types. Given a syntax node, it should check whether\nthat tree is foldable and return the range that can be collapsed\nwhen it is.\n*/\nconst foldNodeProp = /* @__PURE__ */ new NodeProp();\n/**\n[Fold](https://codemirror.net/6/docs/ref/#language.foldNodeProp) function that folds everything but\nthe first and the last child of a syntax node. Useful for nodes\nthat start and end with delimiters.\n*/\nfunction foldInside(node) {\n\tlet first = node.firstChild, last = node.lastChild;\n\treturn first && first.to < last.from ? {\n\t\tfrom: first.to,\n\t\tto: last.type.isError ? node.to : last.from\n\t} : null;\n}\nfunction syntaxFolding(state, start, end) {\n\tlet tree = syntaxTree(state);\n\tif (tree.length < end) return null;\n\tlet stack = tree.resolveStack(end, 1);\n\tlet found = null;\n\tfor (let iter = stack; iter; iter = iter.next) {\n\t\tlet cur = iter.node;\n\t\tif (cur.to <= end || cur.from > end) continue;\n\t\tif (found && cur.from < start) break;\n\t\tlet prop = cur.type.prop(foldNodeProp);\n\t\tif (prop && (cur.to < tree.length - 50 || tree.length == state.doc.length || !isUnfinished(cur))) {\n\t\t\tlet value = prop(cur, state);\n\t\t\tif (value && value.from <= end && value.from >= start && value.to > end) found = value;\n\t\t}\n\t}\n\treturn found;\n}\nfunction isUnfinished(node) {\n\tlet ch = node.lastChild;\n\treturn ch && ch.to == node.to && ch.type.isError;\n}\n/**\nCheck whether the given line is foldable. First asks any fold\nservices registered through\n[`foldService`](https://codemirror.net/6/docs/ref/#language.foldService), and if none of them return\na result, tries to query the [fold node\nprop](https://codemirror.net/6/docs/ref/#language.foldNodeProp) of syntax nodes that cover the end\nof the line.\n*/\nfunction foldable(state, lineStart, lineEnd) {\n\tfor (let service of state.facet(foldService)) {\n\t\tlet result = service(state, lineStart, lineEnd);\n\t\tif (result) return result;\n\t}\n\treturn syntaxFolding(state, lineStart, lineEnd);\n}\nfunction mapRange(range, mapping) {\n\tlet from = mapping.mapPos(range.from, 1), to = mapping.mapPos(range.to, -1);\n\treturn from >= to ? void 0 : {\n\t\tfrom,\n\t\tto\n\t};\n}\n/**\nState effect that can be attached to a transaction to fold the\ngiven range. (You probably only need this in exceptional\ncircumstances—usually you'll just want to let\n[`foldCode`](https://codemirror.net/6/docs/ref/#language.foldCode) and the [fold\ngutter](https://codemirror.net/6/docs/ref/#language.foldGutter) create the transactions.)\n*/\nconst foldEffect = /* @__PURE__ */ StateEffect.define({ map: mapRange });\n/**\nState effect that unfolds the given range (if it was folded).\n*/\nconst unfoldEffect = /* @__PURE__ */ StateEffect.define({ map: mapRange });\nfunction selectedLines(view) {\n\tlet lines = [];\n\tfor (let { head } of view.state.selection.ranges) {\n\t\tif (lines.some((l) => l.from <= head && l.to >= head)) continue;\n\t\tlines.push(view.lineBlockAt(head));\n\t}\n\treturn lines;\n}\n/**\nThe state field that stores the folded ranges (as a [decoration\nset](https://codemirror.net/6/docs/ref/#view.DecorationSet)). Can be passed to\n[`EditorState.toJSON`](https://codemirror.net/6/docs/ref/#state.EditorState.toJSON) and\n[`fromJSON`](https://codemirror.net/6/docs/ref/#state.EditorState^fromJSON) to serialize the fold\nstate.\n*/\nconst foldState = /* @__PURE__ */ StateField.define({\n\tcreate() {\n\t\treturn Decoration.none;\n\t},\n\tupdate(folded, tr) {\n\t\tfolded = folded.map(tr.changes);\n\t\tfor (let e of tr.effects) if (e.is(foldEffect) && !foldExists(folded, e.value.from, e.value.to)) {\n\t\t\tlet { preparePlaceholder } = tr.state.facet(foldConfig);\n\t\t\tlet widget = !preparePlaceholder ? foldWidget : Decoration.replace({ widget: new PreparedFoldWidget(preparePlaceholder(tr.state, e.value)) });\n\t\t\tfolded = folded.update({ add: [widget.range(e.value.from, e.value.to)] });\n\t\t} else if (e.is(unfoldEffect)) folded = folded.update({\n\t\t\tfilter: (from, to) => e.value.from != from || e.value.to != to,\n\t\t\tfilterFrom: e.value.from,\n\t\t\tfilterTo: e.value.to\n\t\t});\n\t\tif (tr.selection) {\n\t\t\tlet onSelection = false, { head } = tr.selection.main;\n\t\t\tfolded.between(head, head, (a, b) => {\n\t\t\t\tif (a < head && b > head) onSelection = true;\n\t\t\t});\n\t\t\tif (onSelection) folded = folded.update({\n\t\t\t\tfilterFrom: head,\n\t\t\t\tfilterTo: head,\n\t\t\t\tfilter: (a, b) => b <= head || a >= head\n\t\t\t});\n\t\t}\n\t\treturn folded;\n\t},\n\tprovide: (f) => EditorView.decorations.from(f),\n\ttoJSON(folded, state) {\n\t\tlet ranges = [];\n\t\tfolded.between(0, state.doc.length, (from, to) => {\n\t\t\tranges.push(from, to);\n\t\t});\n\t\treturn ranges;\n\t},\n\tfromJSON(value) {\n\t\tif (!Array.isArray(value) || value.length % 2) throw new RangeError(\"Invalid JSON for fold state\");\n\t\tlet ranges = [];\n\t\tfor (let i = 0; i < value.length;) {\n\t\t\tlet from = value[i++], to = value[i++];\n\t\t\tif (typeof from != \"number\" || typeof to != \"number\") throw new RangeError(\"Invalid JSON for fold state\");\n\t\t\tranges.push(foldWidget.range(from, to));\n\t\t}\n\t\treturn Decoration.set(ranges, true);\n\t}\n});\nfunction findFold(state, from, to) {\n\tvar _a;\n\tlet found = null;\n\t(_a = state.field(foldState, false)) === null || _a === void 0 || _a.between(from, to, (from, to) => {\n\t\tif (!found || found.from > from) found = {\n\t\t\tfrom,\n\t\t\tto\n\t\t};\n\t});\n\treturn found;\n}\nfunction foldExists(folded, from, to) {\n\tlet found = false;\n\tfolded.between(from, from, (a, b) => {\n\t\tif (a == from && b == to) found = true;\n\t});\n\treturn found;\n}\nfunction maybeEnable(state, other) {\n\treturn state.field(foldState, false) ? other : other.concat(StateEffect.appendConfig.of(codeFolding()));\n}\n/**\nFold the lines that are selected, if possible.\n*/\nconst foldCode = (view) => {\n\tfor (let line of selectedLines(view)) {\n\t\tlet range = foldable(view.state, line.from, line.to);\n\t\tif (range) {\n\t\t\tview.dispatch({ effects: maybeEnable(view.state, [foldEffect.of(range), announceFold(view, range)]) });\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n};\n/**\nUnfold folded ranges on selected lines.\n*/\nconst unfoldCode = (view) => {\n\tif (!view.state.field(foldState, false)) return false;\n\tlet effects = [];\n\tfor (let line of selectedLines(view)) {\n\t\tlet folded = findFold(view.state, line.from, line.to);\n\t\tif (folded) effects.push(unfoldEffect.of(folded), announceFold(view, folded, false));\n\t}\n\tif (effects.length) view.dispatch({ effects });\n\treturn effects.length > 0;\n};\nfunction announceFold(view, range, fold = true) {\n\tlet lineFrom = view.state.doc.lineAt(range.from).number, lineTo = view.state.doc.lineAt(range.to).number;\n\treturn EditorView.announce.of(`${view.state.phrase(fold ? \"Folded lines\" : \"Unfolded lines\")} ${lineFrom} ${view.state.phrase(\"to\")} ${lineTo}.`);\n}\n/**\nFold all top-level foldable ranges. Note that, in most cases,\nfolding information will depend on the [syntax\ntree](https://codemirror.net/6/docs/ref/#language.syntaxTree), and folding everything may not work\nreliably when the document hasn't been fully parsed (either\nbecause the editor state was only just initialized, or because the\ndocument is so big that the parser decided not to parse it\nentirely).\n*/\nconst foldAll = (view) => {\n\tlet { state } = view, effects = [];\n\tfor (let pos = 0; pos < state.doc.length;) {\n\t\tlet line = view.lineBlockAt(pos), range = foldable(state, line.from, line.to);\n\t\tif (range) effects.push(foldEffect.of(range));\n\t\tpos = (range ? view.lineBlockAt(range.to) : line).to + 1;\n\t}\n\tif (effects.length) view.dispatch({ effects: maybeEnable(view.state, effects) });\n\treturn !!effects.length;\n};\n/**\nUnfold all folded code.\n*/\nconst unfoldAll = (view) => {\n\tlet field = view.state.field(foldState, false);\n\tif (!field || !field.size) return false;\n\tlet effects = [];\n\tfield.between(0, view.state.doc.length, (from, to) => {\n\t\teffects.push(unfoldEffect.of({\n\t\t\tfrom,\n\t\t\tto\n\t\t}));\n\t});\n\tview.dispatch({ effects });\n\treturn true;\n};\n/**\nDefault fold-related key bindings.\n\n- Ctrl-Shift-[ (Cmd-Alt-[ on macOS): [`foldCode`](https://codemirror.net/6/docs/ref/#language.foldCode).\n- Ctrl-Shift-] (Cmd-Alt-] on macOS): [`unfoldCode`](https://codemirror.net/6/docs/ref/#language.unfoldCode).\n- Ctrl-Alt-[: [`foldAll`](https://codemirror.net/6/docs/ref/#language.foldAll).\n- Ctrl-Alt-]: [`unfoldAll`](https://codemirror.net/6/docs/ref/#language.unfoldAll).\n*/\nconst foldKeymap = [\n\t{\n\t\tkey: \"Ctrl-Shift-[\",\n\t\tmac: \"Cmd-Alt-[\",\n\t\trun: foldCode\n\t},\n\t{\n\t\tkey: \"Ctrl-Shift-]\",\n\t\tmac: \"Cmd-Alt-]\",\n\t\trun: unfoldCode\n\t},\n\t{\n\t\tkey: \"Ctrl-Alt-[\",\n\t\trun: foldAll\n\t},\n\t{\n\t\tkey: \"Ctrl-Alt-]\",\n\t\trun: unfoldAll\n\t}\n];\nconst defaultConfig = {\n\tplaceholderDOM: null,\n\tpreparePlaceholder: null,\n\tplaceholderText: \"…\"\n};\nconst foldConfig = /* @__PURE__ */ Facet.define({ combine(values) {\n\treturn combineConfig(values, defaultConfig);\n} });\n/**\nCreate an extension that configures code folding.\n*/\nfunction codeFolding(config) {\n\tlet result = [foldState, baseTheme$1$3];\n\tif (config) result.push(foldConfig.of(config));\n\treturn result;\n}\nfunction widgetToDOM(view, prepared) {\n\tlet { state } = view, conf = state.facet(foldConfig);\n\tlet onclick = (event) => {\n\t\tlet line = view.lineBlockAt(view.posAtDOM(event.target));\n\t\tlet folded = findFold(view.state, line.from, line.to);\n\t\tif (folded) view.dispatch({ effects: unfoldEffect.of(folded) });\n\t\tevent.preventDefault();\n\t};\n\tif (conf.placeholderDOM) return conf.placeholderDOM(view, onclick, prepared);\n\tlet element = document.createElement(\"span\");\n\telement.textContent = conf.placeholderText;\n\telement.setAttribute(\"aria-label\", state.phrase(\"folded code\"));\n\telement.title = state.phrase(\"unfold\");\n\telement.className = \"cm-foldPlaceholder\";\n\telement.onclick = onclick;\n\treturn element;\n}\nconst foldWidget = /* @__PURE__ */ Decoration.replace({ widget: /* @__PURE__ */ new class extends WidgetType {\n\ttoDOM(view) {\n\t\treturn widgetToDOM(view, null);\n\t}\n}() });\nvar PreparedFoldWidget = class extends WidgetType {\n\tconstructor(value) {\n\t\tsuper();\n\t\tthis.value = value;\n\t}\n\teq(other) {\n\t\treturn this.value == other.value;\n\t}\n\ttoDOM(view) {\n\t\treturn widgetToDOM(view, this.value);\n\t}\n};\nconst foldGutterDefaults = {\n\topenText: \"⌄\",\n\tclosedText: \"›\",\n\tmarkerDOM: null,\n\tdomEventHandlers: {},\n\tfoldingChanged: () => false\n};\nvar FoldMarker = class extends GutterMarker {\n\tconstructor(config, open) {\n\t\tsuper();\n\t\tthis.config = config;\n\t\tthis.open = open;\n\t}\n\teq(other) {\n\t\treturn this.config == other.config && this.open == other.open;\n\t}\n\ttoDOM(view) {\n\t\tif (this.config.markerDOM) return this.config.markerDOM(this.open);\n\t\tlet span = document.createElement(\"span\");\n\t\tspan.textContent = this.open ? this.config.openText : this.config.closedText;\n\t\tspan.title = view.state.phrase(this.open ? \"Fold line\" : \"Unfold line\");\n\t\treturn span;\n\t}\n};\n/**\nCreate an extension that registers a fold gutter, which shows a\nfold status indicator before foldable lines (which can be clicked\nto fold or unfold the line).\n*/\nfunction foldGutter(config = {}) {\n\tlet fullConfig = Object.assign(Object.assign({}, foldGutterDefaults), config);\n\tlet canFold = new FoldMarker(fullConfig, true), canUnfold = new FoldMarker(fullConfig, false);\n\tlet markers = ViewPlugin.fromClass(class {\n\t\tconstructor(view) {\n\t\t\tthis.from = view.viewport.from;\n\t\t\tthis.markers = this.buildMarkers(view);\n\t\t}\n\t\tupdate(update) {\n\t\t\tif (update.docChanged || update.viewportChanged || update.startState.facet(language) != update.state.facet(language) || update.startState.field(foldState, false) != update.state.field(foldState, false) || syntaxTree(update.startState) != syntaxTree(update.state) || fullConfig.foldingChanged(update)) this.markers = this.buildMarkers(update.view);\n\t\t}\n\t\tbuildMarkers(view) {\n\t\t\tlet builder = new RangeSetBuilder();\n\t\t\tfor (let line of view.viewportLineBlocks) {\n\t\t\t\tlet mark = findFold(view.state, line.from, line.to) ? canUnfold : foldable(view.state, line.from, line.to) ? canFold : null;\n\t\t\t\tif (mark) builder.add(line.from, line.from, mark);\n\t\t\t}\n\t\t\treturn builder.finish();\n\t\t}\n\t});\n\tlet { domEventHandlers } = fullConfig;\n\treturn [\n\t\tmarkers,\n\t\tgutter({\n\t\t\tclass: \"cm-foldGutter\",\n\t\t\tmarkers(view) {\n\t\t\t\tvar _a;\n\t\t\t\treturn ((_a = view.plugin(markers)) === null || _a === void 0 ? void 0 : _a.markers) || RangeSet.empty;\n\t\t\t},\n\t\t\tinitialSpacer() {\n\t\t\t\treturn new FoldMarker(fullConfig, false);\n\t\t\t},\n\t\t\tdomEventHandlers: Object.assign(Object.assign({}, domEventHandlers), { click: (view, line, event) => {\n\t\t\t\tif (domEventHandlers.click && domEventHandlers.click(view, line, event)) return true;\n\t\t\t\tlet folded = findFold(view.state, line.from, line.to);\n\t\t\t\tif (folded) {\n\t\t\t\t\tview.dispatch({ effects: unfoldEffect.of(folded) });\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tlet range = foldable(view.state, line.from, line.to);\n\t\t\t\tif (range) {\n\t\t\t\t\tview.dispatch({ effects: foldEffect.of(range) });\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t} })\n\t\t}),\n\t\tcodeFolding()\n\t];\n}\nconst baseTheme$1$3 = /* @__PURE__ */ EditorView.baseTheme({\n\t\".cm-foldPlaceholder\": {\n\t\tbackgroundColor: \"#eee\",\n\t\tborder: \"1px solid #ddd\",\n\t\tcolor: \"#888\",\n\t\tborderRadius: \".2em\",\n\t\tmargin: \"0 1px\",\n\t\tpadding: \"0 1px\",\n\t\tcursor: \"pointer\"\n\t},\n\t\".cm-foldGutter span\": {\n\t\tpadding: \"0 1px\",\n\t\tcursor: \"pointer\"\n\t}\n});\n/**\nA highlight style associates CSS styles with higlighting\n[tags](https://lezer.codemirror.net/docs/ref#highlight.Tag).\n*/\nvar HighlightStyle = class HighlightStyle {\n\tconstructor(specs, options) {\n\t\tthis.specs = specs;\n\t\tlet modSpec;\n\t\tfunction def(spec) {\n\t\t\tlet cls = StyleModule.newName();\n\t\t\t(modSpec || (modSpec = Object.create(null)))[\".\" + cls] = spec;\n\t\t\treturn cls;\n\t\t}\n\t\tconst all = typeof options.all == \"string\" ? options.all : options.all ? def(options.all) : void 0;\n\t\tconst scopeOpt = options.scope;\n\t\tthis.scope = scopeOpt instanceof Language ? (type) => type.prop(languageDataProp) == scopeOpt.data : scopeOpt ? (type) => type == scopeOpt : void 0;\n\t\tthis.style = tagHighlighter(specs.map((style) => ({\n\t\t\ttag: style.tag,\n\t\t\tclass: style.class || def(Object.assign({}, style, { tag: null }))\n\t\t})), { all }).style;\n\t\tthis.module = modSpec ? new StyleModule(modSpec) : null;\n\t\tthis.themeType = options.themeType;\n\t}\n\t/**\n\tCreate a highlighter style that associates the given styles to\n\tthe given tags. The specs must be objects that hold a style tag\n\tor array of tags in their `tag` property, and either a single\n\t`class` property providing a static CSS class (for highlighter\n\tthat rely on external styling), or a\n\t[`style-mod`](https://github.com/marijnh/style-mod#documentation)-style\n\tset of CSS properties (which define the styling for those tags).\n\t\n\tThe CSS rules created for a highlighter will be emitted in the\n\torder of the spec's properties. That means that for elements that\n\thave multiple tags associated with them, styles defined further\n\tdown in the list will have a higher CSS precedence than styles\n\tdefined earlier.\n\t*/\n\tstatic define(specs, options) {\n\t\treturn new HighlightStyle(specs, options || {});\n\t}\n};\nconst highlighterFacet = /* @__PURE__ */ Facet.define();\nconst fallbackHighlighter = /* @__PURE__ */ Facet.define({ combine(values) {\n\treturn values.length ? [values[0]] : null;\n} });\nfunction getHighlighters(state) {\n\tlet main = state.facet(highlighterFacet);\n\treturn main.length ? main : state.facet(fallbackHighlighter);\n}\n/**\nWrap a highlighter in an editor extension that uses it to apply\nsyntax highlighting to the editor content.\n\nWhen multiple (non-fallback) styles are provided, the styling\napplied is the union of the classes they emit.\n*/\nfunction syntaxHighlighting(highlighter, options) {\n\tlet ext = [treeHighlighter], themeType;\n\tif (highlighter instanceof HighlightStyle) {\n\t\tif (highlighter.module) ext.push(EditorView.styleModule.of(highlighter.module));\n\t\tthemeType = highlighter.themeType;\n\t}\n\tif (options === null || options === void 0 ? void 0 : options.fallback) ext.push(fallbackHighlighter.of(highlighter));\n\telse if (themeType) ext.push(highlighterFacet.computeN([EditorView.darkTheme], (state) => {\n\t\treturn state.facet(EditorView.darkTheme) == (themeType == \"dark\") ? [highlighter] : [];\n\t}));\n\telse ext.push(highlighterFacet.of(highlighter));\n\treturn ext;\n}\nvar TreeHighlighter = class {\n\tconstructor(view) {\n\t\tthis.markCache = Object.create(null);\n\t\tthis.tree = syntaxTree(view.state);\n\t\tthis.decorations = this.buildDeco(view, getHighlighters(view.state));\n\t\tthis.decoratedTo = view.viewport.to;\n\t}\n\tupdate(update) {\n\t\tlet tree = syntaxTree(update.state), highlighters = getHighlighters(update.state);\n\t\tlet styleChange = highlighters != getHighlighters(update.startState);\n\t\tlet { viewport } = update.view, decoratedToMapped = update.changes.mapPos(this.decoratedTo, 1);\n\t\tif (tree.length < viewport.to && !styleChange && tree.type == this.tree.type && decoratedToMapped >= viewport.to) {\n\t\t\tthis.decorations = this.decorations.map(update.changes);\n\t\t\tthis.decoratedTo = decoratedToMapped;\n\t\t} else if (tree != this.tree || update.viewportChanged || styleChange) {\n\t\t\tthis.tree = tree;\n\t\t\tthis.decorations = this.buildDeco(update.view, highlighters);\n\t\t\tthis.decoratedTo = viewport.to;\n\t\t}\n\t}\n\tbuildDeco(view, highlighters) {\n\t\tif (!highlighters || !this.tree.length) return Decoration.none;\n\t\tlet builder = new RangeSetBuilder();\n\t\tfor (let { from, to } of view.visibleRanges) highlightTree(this.tree, highlighters, (from, to, style) => {\n\t\t\tbuilder.add(from, to, this.markCache[style] || (this.markCache[style] = Decoration.mark({ class: style })));\n\t\t}, from, to);\n\t\treturn builder.finish();\n\t}\n};\nconst treeHighlighter = /* @__PURE__ */ Prec.high(/* @__PURE__ */ ViewPlugin.fromClass(TreeHighlighter, { decorations: (v) => v.decorations }));\n/**\nA default highlight style (works well with light themes).\n*/\nconst defaultHighlightStyle = /* @__PURE__ */ HighlightStyle.define([\n\t{\n\t\ttag: tags.meta,\n\t\tcolor: \"#404740\"\n\t},\n\t{\n\t\ttag: tags.link,\n\t\ttextDecoration: \"underline\"\n\t},\n\t{\n\t\ttag: tags.heading,\n\t\ttextDecoration: \"underline\",\n\t\tfontWeight: \"bold\"\n\t},\n\t{\n\t\ttag: tags.emphasis,\n\t\tfontStyle: \"italic\"\n\t},\n\t{\n\t\ttag: tags.strong,\n\t\tfontWeight: \"bold\"\n\t},\n\t{\n\t\ttag: tags.strikethrough,\n\t\ttextDecoration: \"line-through\"\n\t},\n\t{\n\t\ttag: tags.keyword,\n\t\tcolor: \"#708\"\n\t},\n\t{\n\t\ttag: [\n\t\t\ttags.atom,\n\t\t\ttags.bool,\n\t\t\ttags.url,\n\t\t\ttags.contentSeparator,\n\t\t\ttags.labelName\n\t\t],\n\t\tcolor: \"#219\"\n\t},\n\t{\n\t\ttag: [tags.literal, tags.inserted],\n\t\tcolor: \"#164\"\n\t},\n\t{\n\t\ttag: [tags.string, tags.deleted],\n\t\tcolor: \"#a11\"\n\t},\n\t{\n\t\ttag: [\n\t\t\ttags.regexp,\n\t\t\ttags.escape,\n\t\t\t/* @__PURE__ */ tags.special(tags.string)\n\t\t],\n\t\tcolor: \"#e40\"\n\t},\n\t{\n\t\ttag: /* @__PURE__ */ tags.definition(tags.variableName),\n\t\tcolor: \"#00f\"\n\t},\n\t{\n\t\ttag: /* @__PURE__ */ tags.local(tags.variableName),\n\t\tcolor: \"#30a\"\n\t},\n\t{\n\t\ttag: [tags.typeName, tags.namespace],\n\t\tcolor: \"#085\"\n\t},\n\t{\n\t\ttag: tags.className,\n\t\tcolor: \"#167\"\n\t},\n\t{\n\t\ttag: [/* @__PURE__ */ tags.special(tags.variableName), tags.macroName],\n\t\tcolor: \"#256\"\n\t},\n\t{\n\t\ttag: /* @__PURE__ */ tags.definition(tags.propertyName),\n\t\tcolor: \"#00c\"\n\t},\n\t{\n\t\ttag: tags.comment,\n\t\tcolor: \"#940\"\n\t},\n\t{\n\t\ttag: tags.invalid,\n\t\tcolor: \"#f00\"\n\t}\n]);\nconst baseTheme$4 = /* @__PURE__ */ EditorView.baseTheme({\n\t\"&.cm-focused .cm-matchingBracket\": { backgroundColor: \"#328c8252\" },\n\t\"&.cm-focused .cm-nonmatchingBracket\": { backgroundColor: \"#bb555544\" }\n});\nconst DefaultScanDist = 1e4, DefaultBrackets = \"()[]{}\";\nconst bracketMatchingConfig = /* @__PURE__ */ Facet.define({ combine(configs) {\n\treturn combineConfig(configs, {\n\t\tafterCursor: true,\n\t\tbrackets: DefaultBrackets,\n\t\tmaxScanDistance: DefaultScanDist,\n\t\trenderMatch: defaultRenderMatch\n\t});\n} });\nconst matchingMark = /* @__PURE__ */ Decoration.mark({ class: \"cm-matchingBracket\" }), nonmatchingMark = /* @__PURE__ */ Decoration.mark({ class: \"cm-nonmatchingBracket\" });\nfunction defaultRenderMatch(match) {\n\tlet decorations = [];\n\tlet mark = match.matched ? matchingMark : nonmatchingMark;\n\tdecorations.push(mark.range(match.start.from, match.start.to));\n\tif (match.end) decorations.push(mark.range(match.end.from, match.end.to));\n\treturn decorations;\n}\nconst bracketMatchingUnique = [/* @__PURE__ */ StateField.define({\n\tcreate() {\n\t\treturn Decoration.none;\n\t},\n\tupdate(deco, tr) {\n\t\tif (!tr.docChanged && !tr.selection) return deco;\n\t\tlet decorations = [];\n\t\tlet config = tr.state.facet(bracketMatchingConfig);\n\t\tfor (let range of tr.state.selection.ranges) {\n\t\t\tif (!range.empty) continue;\n\t\t\tlet match = matchBrackets(tr.state, range.head, -1, config) || range.head > 0 && matchBrackets(tr.state, range.head - 1, 1, config) || config.afterCursor && (matchBrackets(tr.state, range.head, 1, config) || range.head < tr.state.doc.length && matchBrackets(tr.state, range.head + 1, -1, config));\n\t\t\tif (match) decorations = decorations.concat(config.renderMatch(match, tr.state));\n\t\t}\n\t\treturn Decoration.set(decorations, true);\n\t},\n\tprovide: (f) => EditorView.decorations.from(f)\n}), baseTheme$4];\n/**\nCreate an extension that enables bracket matching. Whenever the\ncursor is next to a bracket, that bracket and the one it matches\nare highlighted. Or, when no matching bracket is found, another\nhighlighting style is used to indicate this.\n*/\nfunction bracketMatching(config = {}) {\n\treturn [bracketMatchingConfig.of(config), bracketMatchingUnique];\n}\n/**\nWhen larger syntax nodes, such as HTML tags, are marked as\nopening/closing, it can be a bit messy to treat the whole node as\na matchable bracket. This node prop allows you to define, for such\na node, a ‘handle’—the part of the node that is highlighted, and\nthat the cursor must be on to activate highlighting in the first\nplace.\n*/\nconst bracketMatchingHandle = /* @__PURE__ */ new NodeProp();\nfunction matchingNodes(node, dir, brackets) {\n\tlet byProp = node.prop(dir < 0 ? NodeProp.openedBy : NodeProp.closedBy);\n\tif (byProp) return byProp;\n\tif (node.name.length == 1) {\n\t\tlet index = brackets.indexOf(node.name);\n\t\tif (index > -1 && index % 2 == (dir < 0 ? 1 : 0)) return [brackets[index + dir]];\n\t}\n\treturn null;\n}\nfunction findHandle(node) {\n\tlet hasHandle = node.type.prop(bracketMatchingHandle);\n\treturn hasHandle ? hasHandle(node.node) : node;\n}\n/**\nFind the matching bracket for the token at `pos`, scanning\ndirection `dir`. Only the `brackets` and `maxScanDistance`\nproperties are used from `config`, if given. Returns null if no\nbracket was found at `pos`, or a match result otherwise.\n*/\nfunction matchBrackets(state, pos, dir, config = {}) {\n\tlet maxScanDistance = config.maxScanDistance || DefaultScanDist, brackets = config.brackets || DefaultBrackets;\n\tlet tree = syntaxTree(state), node = tree.resolveInner(pos, dir);\n\tfor (let cur = node; cur; cur = cur.parent) {\n\t\tlet matches = matchingNodes(cur.type, dir, brackets);\n\t\tif (matches && cur.from < cur.to) {\n\t\t\tlet handle = findHandle(cur);\n\t\t\tif (handle && (dir > 0 ? pos >= handle.from && pos < handle.to : pos > handle.from && pos <= handle.to)) return matchMarkedBrackets(state, pos, dir, cur, handle, matches, brackets);\n\t\t}\n\t}\n\treturn matchPlainBrackets(state, pos, dir, tree, node.type, maxScanDistance, brackets);\n}\nfunction matchMarkedBrackets(_state, _pos, dir, token, handle, matching, brackets) {\n\tlet parent = token.parent, firstToken = {\n\t\tfrom: handle.from,\n\t\tto: handle.to\n\t};\n\tlet depth = 0, cursor = parent === null || parent === void 0 ? void 0 : parent.cursor();\n\tif (cursor && (dir < 0 ? cursor.childBefore(token.from) : cursor.childAfter(token.to))) do\n\t\tif (dir < 0 ? cursor.to <= token.from : cursor.from >= token.to) {\n\t\t\tif (depth == 0 && matching.indexOf(cursor.type.name) > -1 && cursor.from < cursor.to) {\n\t\t\t\tlet endHandle = findHandle(cursor);\n\t\t\t\treturn {\n\t\t\t\t\tstart: firstToken,\n\t\t\t\t\tend: endHandle ? {\n\t\t\t\t\t\tfrom: endHandle.from,\n\t\t\t\t\t\tto: endHandle.to\n\t\t\t\t\t} : void 0,\n\t\t\t\t\tmatched: true\n\t\t\t\t};\n\t\t\t} else if (matchingNodes(cursor.type, dir, brackets)) depth++;\n\t\t\telse if (matchingNodes(cursor.type, -dir, brackets)) {\n\t\t\t\tif (depth == 0) {\n\t\t\t\t\tlet endHandle = findHandle(cursor);\n\t\t\t\t\treturn {\n\t\t\t\t\t\tstart: firstToken,\n\t\t\t\t\t\tend: endHandle && endHandle.from < endHandle.to ? {\n\t\t\t\t\t\t\tfrom: endHandle.from,\n\t\t\t\t\t\t\tto: endHandle.to\n\t\t\t\t\t\t} : void 0,\n\t\t\t\t\t\tmatched: false\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tdepth--;\n\t\t\t}\n\t\t}\n\twhile (dir < 0 ? cursor.prevSibling() : cursor.nextSibling());\n\treturn {\n\t\tstart: firstToken,\n\t\tmatched: false\n\t};\n}\nfunction matchPlainBrackets(state, pos, dir, tree, tokenType, maxScanDistance, brackets) {\n\tlet startCh = dir < 0 ? state.sliceDoc(pos - 1, pos) : state.sliceDoc(pos, pos + 1);\n\tlet bracket = brackets.indexOf(startCh);\n\tif (bracket < 0 || bracket % 2 == 0 != dir > 0) return null;\n\tlet startToken = {\n\t\tfrom: dir < 0 ? pos - 1 : pos,\n\t\tto: dir > 0 ? pos + 1 : pos\n\t};\n\tlet iter = state.doc.iterRange(pos, dir > 0 ? state.doc.length : 0), depth = 0;\n\tfor (let distance = 0; !iter.next().done && distance <= maxScanDistance;) {\n\t\tlet text = iter.value;\n\t\tif (dir < 0) distance += text.length;\n\t\tlet basePos = pos + distance * dir;\n\t\tfor (let pos = dir > 0 ? 0 : text.length - 1, end = dir > 0 ? text.length : -1; pos != end; pos += dir) {\n\t\t\tlet found = brackets.indexOf(text[pos]);\n\t\t\tif (found < 0 || tree.resolveInner(basePos + pos, 1).type != tokenType) continue;\n\t\t\tif (found % 2 == 0 == dir > 0) depth++;\n\t\t\telse if (depth == 1) return {\n\t\t\t\tstart: startToken,\n\t\t\t\tend: {\n\t\t\t\t\tfrom: basePos + pos,\n\t\t\t\t\tto: basePos + pos + 1\n\t\t\t\t},\n\t\t\t\tmatched: found >> 1 == bracket >> 1\n\t\t\t};\n\t\t\telse depth--;\n\t\t}\n\t\tif (dir > 0) distance += text.length;\n\t}\n\treturn iter.done ? {\n\t\tstart: startToken,\n\t\tmatched: false\n\t} : null;\n}\nconst noTokens = /* @__PURE__ */ Object.create(null);\nconst typeArray = [NodeType.none];\nconst warned = [];\nconst byTag = /* @__PURE__ */ Object.create(null);\nconst defaultTable = /* @__PURE__ */ Object.create(null);\nfor (let [legacyName, name] of [\n\t[\"variable\", \"variableName\"],\n\t[\"variable-2\", \"variableName.special\"],\n\t[\"string-2\", \"string.special\"],\n\t[\"def\", \"variableName.definition\"],\n\t[\"tag\", \"tagName\"],\n\t[\"attribute\", \"attributeName\"],\n\t[\"type\", \"typeName\"],\n\t[\"builtin\", \"variableName.standard\"],\n\t[\"qualifier\", \"modifier\"],\n\t[\"error\", \"invalid\"],\n\t[\"header\", \"heading\"],\n\t[\"property\", \"propertyName\"]\n]) defaultTable[legacyName] = /* @__PURE__ */ createTokenType(noTokens, name);\nfunction warnForPart(part, msg) {\n\tif (warned.indexOf(part) > -1) return;\n\twarned.push(part);\n\tconsole.warn(msg);\n}\nfunction createTokenType(extra, tagStr) {\n\tlet tags$1 = [];\n\tfor (let name of tagStr.split(\" \")) {\n\t\tlet found = [];\n\t\tfor (let part of name.split(\".\")) {\n\t\t\tlet value = extra[part] || tags[part];\n\t\t\tif (!value) warnForPart(part, `Unknown highlighting tag ${part}`);\n\t\t\telse if (typeof value == \"function\") if (!found.length) warnForPart(part, `Modifier ${part} used at start of tag`);\n\t\t\telse found = found.map(value);\n\t\t\telse if (found.length) warnForPart(part, `Tag ${part} used as modifier`);\n\t\t\telse found = Array.isArray(value) ? value : [value];\n\t\t}\n\t\tfor (let tag of found) tags$1.push(tag);\n\t}\n\tif (!tags$1.length) return 0;\n\tlet name = tagStr.replace(/ /g, \"_\"), key = name + \" \" + tags$1.map((t) => t.id);\n\tlet known = byTag[key];\n\tif (known) return known.id;\n\tlet type = byTag[key] = NodeType.define({\n\t\tid: typeArray.length,\n\t\tname,\n\t\tprops: [styleTags({ [name]: tags$1 })]\n\t});\n\ttypeArray.push(type);\n\treturn type.id;\n}\nDirection.RTL, Direction.LTR;\n//#endregion\n//#region ../../node_modules/.pnpm/thememirror@2.0.1_@codemirror+language@6.11.0_@codemirror+state@6.5.2_@codemirror+view@6.36.7/node_modules/thememirror/dist/create-theme.js\nconst createTheme = ({ variant, settings, styles }) => {\n\treturn [EditorView.theme({\n\t\t\"&\": {\n\t\t\tbackgroundColor: settings.background,\n\t\t\tcolor: settings.foreground\n\t\t},\n\t\t\".cm-content\": { caretColor: settings.caret },\n\t\t\".cm-cursor, .cm-dropCursor\": { borderLeftColor: settings.caret },\n\t\t\"&.cm-focused .cm-selectionBackgroundm .cm-selectionBackground, .cm-content ::selection\": { backgroundColor: settings.selection },\n\t\t\".cm-activeLine\": { backgroundColor: settings.lineHighlight },\n\t\t\".cm-gutters\": {\n\t\t\tbackgroundColor: settings.gutterBackground,\n\t\t\tcolor: settings.gutterForeground\n\t\t},\n\t\t\".cm-activeLineGutter\": { backgroundColor: settings.lineHighlight }\n\t}, { dark: variant === \"dark\" }), syntaxHighlighting(HighlightStyle.define(styles))];\n};\ncreateTheme({\n\tvariant: \"dark\",\n\tsettings: {\n\t\tbackground: \"#200020\",\n\t\tforeground: \"#D0D0FF\",\n\t\tcaret: \"#7070FF\",\n\t\tselection: \"#80000080\",\n\t\tgutterBackground: \"#200020\",\n\t\tgutterForeground: \"#C080C0\",\n\t\tlineHighlight: \"#80000040\"\n\t},\n\tstyles: [\n\t\t{\n\t\t\ttag: tags.comment,\n\t\t\tcolor: \"#404080\"\n\t\t},\n\t\t{\n\t\t\ttag: [tags.string, tags.regexp],\n\t\t\tcolor: \"#999999\"\n\t\t},\n\t\t{\n\t\t\ttag: tags.number,\n\t\t\tcolor: \"#7090B0\"\n\t\t},\n\t\t{\n\t\t\ttag: [tags.bool, tags.null],\n\t\t\tcolor: \"#8080A0\"\n\t\t},\n\t\t{\n\t\t\ttag: [tags.punctuation, tags.derefOperator],\n\t\t\tcolor: \"#805080\"\n\t\t},\n\t\t{\n\t\t\ttag: tags.keyword,\n\t\t\tcolor: \"#60B0FF\"\n\t\t},\n\t\t{\n\t\t\ttag: tags.definitionKeyword,\n\t\t\tcolor: \"#B0FFF0\"\n\t\t},\n\t\t{\n\t\t\ttag: tags.moduleKeyword,\n\t\t\tcolor: \"#60B0FF\"\n\t\t},\n\t\t{\n\t\t\ttag: tags.operator,\n\t\t\tcolor: \"#A0A0FF\"\n\t\t},\n\t\t{\n\t\t\ttag: [tags.variableName, tags.self],\n\t\t\tcolor: \"#008080\"\n\t\t},\n\t\t{\n\t\t\ttag: tags.operatorKeyword,\n\t\t\tcolor: \"#A0A0FF\"\n\t\t},\n\t\t{\n\t\t\ttag: tags.controlKeyword,\n\t\t\tcolor: \"#80A0FF\"\n\t\t},\n\t\t{\n\t\t\ttag: tags.className,\n\t\t\tcolor: \"#70E080\"\n\t\t},\n\t\t{\n\t\t\ttag: [tags.function(tags.propertyName), tags.propertyName],\n\t\t\tcolor: \"#50A0A0\"\n\t\t},\n\t\t{\n\t\t\ttag: tags.tagName,\n\t\t\tcolor: \"#009090\"\n\t\t},\n\t\t{\n\t\t\ttag: tags.modifier,\n\t\t\tcolor: \"#B0FFF0\"\n\t\t},\n\t\t{\n\t\t\ttag: [tags.squareBracket, tags.attributeName],\n\t\t\tcolor: \"#D0D0FF\"\n\t\t}\n\t]\n});\n//#endregion\n//#region ../../node_modules/.pnpm/thememirror@2.0.1_@codemirror+language@6.11.0_@codemirror+state@6.5.2_@codemirror+view@6.36.7/node_modules/thememirror/dist/themes/ayu-light.js\nconst ayuLight = createTheme({\n\tvariant: \"light\",\n\tsettings: {\n\t\tbackground: \"#fcfcfc\",\n\t\tforeground: \"#5c6166\",\n\t\tcaret: \"#ffaa33\",\n\t\tselection: \"#036dd626\",\n\t\tgutterBackground: \"#fcfcfc\",\n\t\tgutterForeground: \"#8a919966\",\n\t\tlineHighlight: \"#8a91991a\"\n\t},\n\tstyles: [\n\t\t{\n\t\t\ttag: tags.comment,\n\t\t\tcolor: \"#787b8099\"\n\t\t},\n\t\t{\n\t\t\ttag: tags.string,\n\t\t\tcolor: \"#86b300\"\n\t\t},\n\t\t{\n\t\t\ttag: tags.regexp,\n\t\t\tcolor: \"#4cbf99\"\n\t\t},\n\t\t{\n\t\t\ttag: [\n\t\t\t\ttags.number,\n\t\t\t\ttags.bool,\n\t\t\t\ttags.null\n\t\t\t],\n\t\t\tcolor: \"#ffaa33\"\n\t\t},\n\t\t{\n\t\t\ttag: tags.variableName,\n\t\t\tcolor: \"#5c6166\"\n\t\t},\n\t\t{\n\t\t\ttag: [tags.definitionKeyword, tags.modifier],\n\t\t\tcolor: \"#fa8d3e\"\n\t\t},\n\t\t{\n\t\t\ttag: [tags.keyword, tags.special(tags.brace)],\n\t\t\tcolor: \"#fa8d3e\"\n\t\t},\n\t\t{\n\t\t\ttag: tags.operator,\n\t\t\tcolor: \"#ed9366\"\n\t\t},\n\t\t{\n\t\t\ttag: tags.separator,\n\t\t\tcolor: \"#5c6166b3\"\n\t\t},\n\t\t{\n\t\t\ttag: tags.punctuation,\n\t\t\tcolor: \"#5c6166\"\n\t\t},\n\t\t{\n\t\t\ttag: [tags.definition(tags.propertyName), tags.function(tags.variableName)],\n\t\t\tcolor: \"#f2ae49\"\n\t\t},\n\t\t{\n\t\t\ttag: [tags.className, tags.definition(tags.typeName)],\n\t\t\tcolor: \"#22a4e6\"\n\t\t},\n\t\t{\n\t\t\ttag: [\n\t\t\t\ttags.tagName,\n\t\t\t\ttags.typeName,\n\t\t\t\ttags.self,\n\t\t\t\ttags.labelName\n\t\t\t],\n\t\t\tcolor: \"#55b4d4\"\n\t\t},\n\t\t{\n\t\t\ttag: tags.angleBracket,\n\t\t\tcolor: \"#55b4d480\"\n\t\t},\n\t\t{\n\t\t\ttag: tags.attributeName,\n\t\t\tcolor: \"#f2ae49\"\n\t\t}\n\t]\n});\ncreateTheme({\n\tvariant: \"dark\",\n\tsettings: {\n\t\tbackground: \"#15191EFA\",\n\t\tforeground: \"#EEF2F7\",\n\t\tcaret: \"#C4C4C4\",\n\t\tselection: \"#90B2D557\",\n\t\tgutterBackground: \"#15191EFA\",\n\t\tgutterForeground: \"#aaaaaa95\",\n\t\tlineHighlight: \"#57575712\"\n\t},\n\tstyles: [\n\t\t{\n\t\t\ttag: tags.comment,\n\t\t\tcolor: \"#6E6E6E\"\n\t\t},\n\t\t{\n\t\t\ttag: [\n\t\t\t\ttags.string,\n\t\t\t\ttags.regexp,\n\t\t\t\ttags.special(tags.brace)\n\t\t\t],\n\t\t\tcolor: \"#5C81B3\"\n\t\t},\n\t\t{\n\t\t\ttag: tags.number,\n\t\t\tcolor: \"#C1E1B8\"\n\t\t},\n\t\t{\n\t\t\ttag: tags.bool,\n\t\t\tcolor: \"#53667D\"\n\t\t},\n\t\t{\n\t\t\ttag: [\n\t\t\t\ttags.definitionKeyword,\n\t\t\t\ttags.modifier,\n\t\t\t\ttags.function(tags.propertyName)\n\t\t\t],\n\t\t\tcolor: \"#A3D295\",\n\t\t\tfontWeight: \"bold\"\n\t\t},\n\t\t{\n\t\t\ttag: [\n\t\t\t\ttags.keyword,\n\t\t\t\ttags.moduleKeyword,\n\t\t\t\ttags.operatorKeyword,\n\t\t\t\ttags.operator\n\t\t\t],\n\t\t\tcolor: \"#697A8E\",\n\t\t\tfontWeight: \"bold\"\n\t\t},\n\t\t{\n\t\t\ttag: [tags.variableName, tags.attributeName],\n\t\t\tcolor: \"#708E67\"\n\t\t},\n\t\t{\n\t\t\ttag: [\n\t\t\t\ttags.function(tags.variableName),\n\t\t\t\ttags.definition(tags.propertyName),\n\t\t\t\ttags.derefOperator\n\t\t\t],\n\t\t\tcolor: \"#fff\"\n\t\t},\n\t\t{\n\t\t\ttag: tags.tagName,\n\t\t\tcolor: \"#A3D295\"\n\t\t}\n\t]\n});\ncreateTheme({\n\tvariant: \"dark\",\n\tsettings: {\n\t\tbackground: \"#2e241d\",\n\t\tforeground: \"#BAAE9E\",\n\t\tcaret: \"#A7A7A7\",\n\t\tselection: \"#DDF0FF33\",\n\t\tgutterBackground: \"#28211C\",\n\t\tgutterForeground: \"#BAAE9E90\",\n\t\tlineHighlight: \"#FFFFFF08\"\n\t},\n\tstyles: [\n\t\t{\n\t\t\ttag: tags.comment,\n\t\t\tcolor: \"#666666\"\n\t\t},\n\t\t{\n\t\t\ttag: [tags.string, tags.special(tags.brace)],\n\t\t\tcolor: \"#54BE0D\"\n\t\t},\n\t\t{\n\t\t\ttag: tags.regexp,\n\t\t\tcolor: \"#E9C062\"\n\t\t},\n\t\t{\n\t\t\ttag: tags.number,\n\t\t\tcolor: \"#CF6A4C\"\n\t\t},\n\t\t{\n\t\t\ttag: [tags.keyword, tags.operator],\n\t\t\tcolor: \"#5EA6EA\"\n\t\t},\n\t\t{\n\t\t\ttag: tags.variableName,\n\t\t\tcolor: \"#7587A6\"\n\t\t},\n\t\t{\n\t\t\ttag: [tags.definitionKeyword, tags.modifier],\n\t\t\tcolor: \"#F9EE98\"\n\t\t},\n\t\t{\n\t\t\ttag: [tags.propertyName, tags.function(tags.variableName)],\n\t\t\tcolor: \"#937121\"\n\t\t},\n\t\t{\n\t\t\ttag: [\n\t\t\t\ttags.typeName,\n\t\t\t\ttags.angleBracket,\n\t\t\t\ttags.tagName\n\t\t\t],\n\t\t\tcolor: \"#9B859D\"\n\t\t}\n\t]\n});\ncreateTheme({\n\tvariant: \"dark\",\n\tsettings: {\n\t\tbackground: \"#3b2627\",\n\t\tforeground: \"#E6E1C4\",\n\t\tcaret: \"#E6E1C4\",\n\t\tselection: \"#16120E\",\n\t\tgutterBackground: \"#3b2627\",\n\t\tgutterForeground: \"#E6E1C490\",\n\t\tlineHighlight: \"#1F1611\"\n\t},\n\tstyles: [\n\t\t{\n\t\t\ttag: tags.comment,\n\t\t\tcolor: \"#6B4E32\"\n\t\t},\n\t\t{\n\t\t\ttag: [\n\t\t\t\ttags.keyword,\n\t\t\t\ttags.operator,\n\t\t\t\ttags.derefOperator\n\t\t\t],\n\t\t\tcolor: \"#EF5D32\"\n\t\t},\n\t\t{\n\t\t\ttag: tags.className,\n\t\t\tcolor: \"#EFAC32\",\n\t\t\tfontWeight: \"bold\"\n\t\t},\n\t\t{\n\t\t\ttag: [\n\t\t\t\ttags.typeName,\n\t\t\t\ttags.propertyName,\n\t\t\t\ttags.function(tags.variableName),\n\t\t\t\ttags.definition(tags.variableName)\n\t\t\t],\n\t\t\tcolor: \"#EFAC32\"\n\t\t},\n\t\t{\n\t\t\ttag: tags.definition(tags.typeName),\n\t\t\tcolor: \"#EFAC32\",\n\t\t\tfontWeight: \"bold\"\n\t\t},\n\t\t{\n\t\t\ttag: tags.labelName,\n\t\t\tcolor: \"#EFAC32\",\n\t\t\tfontWeight: \"bold\"\n\t\t},\n\t\t{\n\t\t\ttag: [tags.number, tags.bool],\n\t\t\tcolor: \"#6C99BB\"\n\t\t},\n\t\t{\n\t\t\ttag: [tags.variableName, tags.self],\n\t\t\tcolor: \"#7DAF9C\"\n\t\t},\n\t\t{\n\t\t\ttag: [\n\t\t\t\ttags.string,\n\t\t\t\ttags.special(tags.brace),\n\t\t\t\ttags.regexp\n\t\t\t],\n\t\t\tcolor: \"#D9D762\"\n\t\t},\n\t\t{\n\t\t\ttag: [\n\t\t\t\ttags.angleBracket,\n\t\t\t\ttags.tagName,\n\t\t\t\ttags.attributeName\n\t\t\t],\n\t\t\tcolor: \"#EFCB43\"\n\t\t}\n\t]\n});\ncreateTheme({\n\tvariant: \"dark\",\n\tsettings: {\n\t\tbackground: \"#000205\",\n\t\tforeground: \"#FFFFFF\",\n\t\tcaret: \"#E60065\",\n\t\tselection: \"#E60C6559\",\n\t\tgutterBackground: \"#000205\",\n\t\tgutterForeground: \"#ffffff90\",\n\t\tlineHighlight: \"#4DD7FC1A\"\n\t},\n\tstyles: [\n\t\t{\n\t\t\ttag: tags.comment,\n\t\t\tcolor: \"#404040\"\n\t\t},\n\t\t{\n\t\t\ttag: [\n\t\t\t\ttags.string,\n\t\t\t\ttags.special(tags.brace),\n\t\t\t\ttags.regexp\n\t\t\t],\n\t\t\tcolor: \"#00D8FF\"\n\t\t},\n\t\t{\n\t\t\ttag: tags.number,\n\t\t\tcolor: \"#E62286\"\n\t\t},\n\t\t{\n\t\t\ttag: [\n\t\t\t\ttags.variableName,\n\t\t\t\ttags.attributeName,\n\t\t\t\ttags.self\n\t\t\t],\n\t\t\tcolor: \"#E62286\",\n\t\t\tfontWeight: \"bold\"\n\t\t},\n\t\t{\n\t\t\ttag: tags.function(tags.variableName),\n\t\t\tcolor: \"#fff\",\n\t\t\tfontWeight: \"bold\"\n\t\t}\n\t]\n});\ncreateTheme({\n\tvariant: \"light\",\n\tsettings: {\n\t\tbackground: \"#fff\",\n\t\tforeground: \"#000\",\n\t\tcaret: \"#000\",\n\t\tselection: \"#BDD5FC\",\n\t\tgutterBackground: \"#fff\",\n\t\tgutterForeground: \"#00000070\",\n\t\tlineHighlight: \"#FFFBD1\"\n\t},\n\tstyles: [\n\t\t{\n\t\t\ttag: tags.comment,\n\t\t\tcolor: \"#BCC8BA\"\n\t\t},\n\t\t{\n\t\t\ttag: [\n\t\t\t\ttags.string,\n\t\t\t\ttags.special(tags.brace),\n\t\t\t\ttags.regexp\n\t\t\t],\n\t\t\tcolor: \"#5D90CD\"\n\t\t},\n\t\t{\n\t\t\ttag: [\n\t\t\t\ttags.number,\n\t\t\t\ttags.bool,\n\t\t\t\ttags.null\n\t\t\t],\n\t\t\tcolor: \"#46A609\"\n\t\t},\n\t\t{\n\t\t\ttag: tags.keyword,\n\t\t\tcolor: \"#AF956F\"\n\t\t},\n\t\t{\n\t\t\ttag: [tags.definitionKeyword, tags.modifier],\n\t\t\tcolor: \"#C52727\"\n\t\t},\n\t\t{\n\t\t\ttag: [\n\t\t\t\ttags.angleBracket,\n\t\t\t\ttags.tagName,\n\t\t\t\ttags.attributeName\n\t\t\t],\n\t\t\tcolor: \"#606060\"\n\t\t},\n\t\t{\n\t\t\ttag: tags.self,\n\t\t\tcolor: \"#000\"\n\t\t}\n\t]\n});\ncreateTheme({\n\tvariant: \"dark\",\n\tsettings: {\n\t\tbackground: \"#00254b\",\n\t\tforeground: \"#FFFFFF\",\n\t\tcaret: \"#FFFFFF\",\n\t\tselection: \"#B36539BF\",\n\t\tgutterBackground: \"#00254b\",\n\t\tgutterForeground: \"#FFFFFF70\",\n\t\tlineHighlight: \"#00000059\"\n\t},\n\tstyles: [\n\t\t{\n\t\t\ttag: tags.comment,\n\t\t\tcolor: \"#0088FF\"\n\t\t},\n\t\t{\n\t\t\ttag: tags.string,\n\t\t\tcolor: \"#3AD900\"\n\t\t},\n\t\t{\n\t\t\ttag: tags.regexp,\n\t\t\tcolor: \"#80FFC2\"\n\t\t},\n\t\t{\n\t\t\ttag: [\n\t\t\t\ttags.number,\n\t\t\t\ttags.bool,\n\t\t\t\ttags.null\n\t\t\t],\n\t\t\tcolor: \"#FF628C\"\n\t\t},\n\t\t{\n\t\t\ttag: [tags.definitionKeyword, tags.modifier],\n\t\t\tcolor: \"#FFEE80\"\n\t\t},\n\t\t{\n\t\t\ttag: tags.variableName,\n\t\t\tcolor: \"#CCCCCC\"\n\t\t},\n\t\t{\n\t\t\ttag: tags.self,\n\t\t\tcolor: \"#FF80E1\"\n\t\t},\n\t\t{\n\t\t\ttag: [\n\t\t\t\ttags.className,\n\t\t\t\ttags.definition(tags.propertyName),\n\t\t\t\ttags.function(tags.variableName),\n\t\t\t\ttags.definition(tags.typeName),\n\t\t\t\ttags.labelName\n\t\t\t],\n\t\t\tcolor: \"#FFDD00\"\n\t\t},\n\t\t{\n\t\t\ttag: [tags.keyword, tags.operator],\n\t\t\tcolor: \"#FF9D00\"\n\t\t},\n\t\t{\n\t\t\ttag: [tags.propertyName, tags.typeName],\n\t\t\tcolor: \"#80FFBB\"\n\t\t},\n\t\t{\n\t\t\ttag: tags.special(tags.brace),\n\t\t\tcolor: \"#EDEF7D\"\n\t\t},\n\t\t{\n\t\t\ttag: tags.attributeName,\n\t\t\tcolor: \"#9EFFFF\"\n\t\t},\n\t\t{\n\t\t\ttag: tags.derefOperator,\n\t\t\tcolor: \"#fff\"\n\t\t}\n\t]\n});\ncreateTheme({\n\tvariant: \"dark\",\n\tsettings: {\n\t\tbackground: \"#060521\",\n\t\tforeground: \"#E0E0E0\",\n\t\tcaret: \"#FFFFFFA6\",\n\t\tselection: \"#122BBB\",\n\t\tgutterBackground: \"#060521\",\n\t\tgutterForeground: \"#E0E0E090\",\n\t\tlineHighlight: \"#FFFFFF0F\"\n\t},\n\tstyles: [\n\t\t{\n\t\t\ttag: tags.comment,\n\t\t\tcolor: \"#AEAEAE\"\n\t\t},\n\t\t{\n\t\t\ttag: [\n\t\t\t\ttags.string,\n\t\t\t\ttags.special(tags.brace),\n\t\t\t\ttags.regexp\n\t\t\t],\n\t\t\tcolor: \"#8DFF8E\"\n\t\t},\n\t\t{\n\t\t\ttag: [\n\t\t\t\ttags.className,\n\t\t\t\ttags.definition(tags.propertyName),\n\t\t\t\ttags.function(tags.variableName),\n\t\t\t\ttags.function(tags.definition(tags.variableName)),\n\t\t\t\ttags.definition(tags.typeName)\n\t\t\t],\n\t\t\tcolor: \"#A3EBFF\"\n\t\t},\n\t\t{\n\t\t\ttag: [\n\t\t\t\ttags.number,\n\t\t\t\ttags.bool,\n\t\t\t\ttags.null\n\t\t\t],\n\t\t\tcolor: \"#62E9BD\"\n\t\t},\n\t\t{\n\t\t\ttag: [tags.keyword, tags.operator],\n\t\t\tcolor: \"#2BF1DC\"\n\t\t},\n\t\t{\n\t\t\ttag: [tags.definitionKeyword, tags.modifier],\n\t\t\tcolor: \"#F8FBB1\"\n\t\t},\n\t\t{\n\t\t\ttag: [tags.variableName, tags.self],\n\t\t\tcolor: \"#B683CA\"\n\t\t},\n\t\t{\n\t\t\ttag: [\n\t\t\t\ttags.angleBracket,\n\t\t\t\ttags.tagName,\n\t\t\t\ttags.typeName,\n\t\t\t\ttags.propertyName\n\t\t\t],\n\t\t\tcolor: \"#60A4F1\"\n\t\t},\n\t\t{\n\t\t\ttag: tags.derefOperator,\n\t\t\tcolor: \"#E0E0E0\"\n\t\t},\n\t\t{\n\t\t\ttag: tags.attributeName,\n\t\t\tcolor: \"#7BACCA\"\n\t\t}\n\t]\n});\ncreateTheme({\n\tvariant: \"dark\",\n\tsettings: {\n\t\tbackground: \"#2d2f3f\",\n\t\tforeground: \"#f8f8f2\",\n\t\tcaret: \"#f8f8f0\",\n\t\tselection: \"#44475a\",\n\t\tgutterBackground: \"#282a36\",\n\t\tgutterForeground: \"rgb(144, 145, 148)\",\n\t\tlineHighlight: \"#44475a\"\n\t},\n\tstyles: [\n\t\t{\n\t\t\ttag: tags.comment,\n\t\t\tcolor: \"#6272a4\"\n\t\t},\n\t\t{\n\t\t\ttag: [tags.string, tags.special(tags.brace)],\n\t\t\tcolor: \"#f1fa8c\"\n\t\t},\n\t\t{\n\t\t\ttag: [\n\t\t\t\ttags.number,\n\t\t\t\ttags.self,\n\t\t\t\ttags.bool,\n\t\t\t\ttags.null\n\t\t\t],\n\t\t\tcolor: \"#bd93f9\"\n\t\t},\n\t\t{\n\t\t\ttag: [tags.keyword, tags.operator],\n\t\t\tcolor: \"#ff79c6\"\n\t\t},\n\t\t{\n\t\t\ttag: [tags.definitionKeyword, tags.typeName],\n\t\t\tcolor: \"#8be9fd\"\n\t\t},\n\t\t{\n\t\t\ttag: tags.definition(tags.typeName),\n\t\t\tcolor: \"#f8f8f2\"\n\t\t},\n\t\t{\n\t\t\ttag: [\n\t\t\t\ttags.className,\n\t\t\t\ttags.definition(tags.propertyName),\n\t\t\t\ttags.function(tags.variableName),\n\t\t\t\ttags.attributeName\n\t\t\t],\n\t\t\tcolor: \"#50fa7b\"\n\t\t}\n\t]\n});\ncreateTheme({\n\tvariant: \"light\",\n\tsettings: {\n\t\tbackground: \"#FFFFFF\",\n\t\tforeground: \"#000000\",\n\t\tcaret: \"#000000\",\n\t\tselection: \"#80C7FF\",\n\t\tgutterBackground: \"#FFFFFF\",\n\t\tgutterForeground: \"#00000070\",\n\t\tlineHighlight: \"#C1E2F8\"\n\t},\n\tstyles: [\n\t\t{\n\t\t\ttag: tags.comment,\n\t\t\tcolor: \"#AAAAAA\"\n\t\t},\n\t\t{\n\t\t\ttag: [\n\t\t\t\ttags.keyword,\n\t\t\t\ttags.operator,\n\t\t\t\ttags.typeName,\n\t\t\t\ttags.tagName,\n\t\t\t\ttags.propertyName\n\t\t\t],\n\t\t\tcolor: \"#2F6F9F\",\n\t\t\tfontWeight: \"bold\"\n\t\t},\n\t\t{\n\t\t\ttag: [tags.attributeName, tags.definition(tags.propertyName)],\n\t\t\tcolor: \"#4F9FD0\"\n\t\t},\n\t\t{\n\t\t\ttag: [\n\t\t\t\ttags.className,\n\t\t\t\ttags.string,\n\t\t\t\ttags.special(tags.brace)\n\t\t\t],\n\t\t\tcolor: \"#CF4F5F\"\n\t\t},\n\t\t{\n\t\t\ttag: tags.number,\n\t\t\tcolor: \"#CF4F5F\",\n\t\t\tfontWeight: \"bold\"\n\t\t},\n\t\t{\n\t\t\ttag: tags.variableName,\n\t\t\tfontWeight: \"bold\"\n\t\t}\n\t]\n});\ncreateTheme({\n\tvariant: \"light\",\n\tsettings: {\n\t\tbackground: \"#f2f1f8\",\n\t\tforeground: \"#0c006b\",\n\t\tcaret: \"#5c49e9\",\n\t\tselection: \"#d5d1f2\",\n\t\tgutterBackground: \"#f2f1f8\",\n\t\tgutterForeground: \"#0c006b70\",\n\t\tlineHighlight: \"#e1def3\"\n\t},\n\tstyles: [\n\t\t{\n\t\t\ttag: tags.comment,\n\t\t\tcolor: \"#9995b7\"\n\t\t},\n\t\t{\n\t\t\ttag: tags.keyword,\n\t\t\tcolor: \"#ff5792\",\n\t\t\tfontWeight: \"bold\"\n\t\t},\n\t\t{\n\t\t\ttag: [tags.definitionKeyword, tags.modifier],\n\t\t\tcolor: \"#ff5792\"\n\t\t},\n\t\t{\n\t\t\ttag: [\n\t\t\t\ttags.className,\n\t\t\t\ttags.tagName,\n\t\t\t\ttags.definition(tags.typeName)\n\t\t\t],\n\t\t\tcolor: \"#0094f0\"\n\t\t},\n\t\t{\n\t\t\ttag: [\n\t\t\t\ttags.number,\n\t\t\t\ttags.bool,\n\t\t\t\ttags.null,\n\t\t\t\ttags.special(tags.brace)\n\t\t\t],\n\t\t\tcolor: \"#5842ff\"\n\t\t},\n\t\t{\n\t\t\ttag: [tags.definition(tags.propertyName), tags.function(tags.variableName)],\n\t\t\tcolor: \"#0095a8\"\n\t\t},\n\t\t{\n\t\t\ttag: tags.typeName,\n\t\t\tcolor: \"#b3694d\"\n\t\t},\n\t\t{\n\t\t\ttag: [tags.propertyName, tags.variableName],\n\t\t\tcolor: \"#fa8900\"\n\t\t},\n\t\t{\n\t\t\ttag: tags.operator,\n\t\t\tcolor: \"#ff5792\"\n\t\t},\n\t\t{\n\t\t\ttag: tags.self,\n\t\t\tcolor: \"#e64100\"\n\t\t},\n\t\t{\n\t\t\ttag: [tags.string, tags.regexp],\n\t\t\tcolor: \"#00b368\"\n\t\t},\n\t\t{\n\t\t\ttag: [tags.paren, tags.bracket],\n\t\t\tcolor: \"#0431fa\"\n\t\t},\n\t\t{\n\t\t\ttag: tags.labelName,\n\t\t\tcolor: \"#00bdd6\"\n\t\t},\n\t\t{\n\t\t\ttag: tags.attributeName,\n\t\t\tcolor: \"#e64100\"\n\t\t},\n\t\t{\n\t\t\ttag: tags.angleBracket,\n\t\t\tcolor: \"#9995b7\"\n\t\t}\n\t]\n});\ncreateTheme({\n\tvariant: \"light\",\n\tsettings: {\n\t\tbackground: \"#faf4ed\",\n\t\tforeground: \"#575279\",\n\t\tcaret: \"#575279\",\n\t\tselection: \"#6e6a8614\",\n\t\tgutterBackground: \"#faf4ed\",\n\t\tgutterForeground: \"#57527970\",\n\t\tlineHighlight: \"#6e6a860d\"\n\t},\n\tstyles: [\n\t\t{\n\t\t\ttag: tags.comment,\n\t\t\tcolor: \"#9893a5\"\n\t\t},\n\t\t{\n\t\t\ttag: [tags.bool, tags.null],\n\t\t\tcolor: \"#286983\"\n\t\t},\n\t\t{\n\t\t\ttag: tags.number,\n\t\t\tcolor: \"#d7827e\"\n\t\t},\n\t\t{\n\t\t\ttag: tags.className,\n\t\t\tcolor: \"#d7827e\"\n\t\t},\n\t\t{\n\t\t\ttag: [\n\t\t\t\ttags.angleBracket,\n\t\t\t\ttags.tagName,\n\t\t\t\ttags.typeName\n\t\t\t],\n\t\t\tcolor: \"#56949f\"\n\t\t},\n\t\t{\n\t\t\ttag: tags.attributeName,\n\t\t\tcolor: \"#907aa9\"\n\t\t},\n\t\t{\n\t\t\ttag: tags.punctuation,\n\t\t\tcolor: \"#797593\"\n\t\t},\n\t\t{\n\t\t\ttag: [tags.keyword, tags.modifier],\n\t\t\tcolor: \"#286983\"\n\t\t},\n\t\t{\n\t\t\ttag: [tags.string, tags.regexp],\n\t\t\tcolor: \"#ea9d34\"\n\t\t},\n\t\t{\n\t\t\ttag: tags.variableName,\n\t\t\tcolor: \"#d7827e\"\n\t\t}\n\t]\n});\ncreateTheme({\n\tvariant: \"light\",\n\tsettings: {\n\t\tbackground: \"#FFFFFF\",\n\t\tforeground: \"#000000\",\n\t\tcaret: \"#000000\",\n\t\tselection: \"#FFFD0054\",\n\t\tgutterBackground: \"#FFFFFF\",\n\t\tgutterForeground: \"#00000070\",\n\t\tlineHighlight: \"#00000008\"\n\t},\n\tstyles: [\n\t\t{\n\t\t\ttag: tags.comment,\n\t\t\tcolor: \"#CFCFCF\"\n\t\t},\n\t\t{\n\t\t\ttag: [\n\t\t\t\ttags.number,\n\t\t\t\ttags.bool,\n\t\t\t\ttags.null\n\t\t\t],\n\t\t\tcolor: \"#E66C29\"\n\t\t},\n\t\t{\n\t\t\ttag: [\n\t\t\t\ttags.className,\n\t\t\t\ttags.definition(tags.propertyName),\n\t\t\t\ttags.function(tags.variableName),\n\t\t\t\ttags.labelName,\n\t\t\t\ttags.definition(tags.typeName)\n\t\t\t],\n\t\t\tcolor: \"#2EB43B\"\n\t\t},\n\t\t{\n\t\t\ttag: tags.keyword,\n\t\t\tcolor: \"#D8B229\"\n\t\t},\n\t\t{\n\t\t\ttag: tags.operator,\n\t\t\tcolor: \"#4EA44E\",\n\t\t\tfontWeight: \"bold\"\n\t\t},\n\t\t{\n\t\t\ttag: [tags.definitionKeyword, tags.modifier],\n\t\t\tcolor: \"#925A47\"\n\t\t},\n\t\t{\n\t\t\ttag: tags.string,\n\t\t\tcolor: \"#704D3D\"\n\t\t},\n\t\t{\n\t\t\ttag: tags.typeName,\n\t\t\tcolor: \"#2F8996\"\n\t\t},\n\t\t{\n\t\t\ttag: [tags.variableName, tags.propertyName],\n\t\t\tcolor: \"#77ACB0\"\n\t\t},\n\t\t{\n\t\t\ttag: tags.self,\n\t\t\tcolor: \"#77ACB0\",\n\t\t\tfontWeight: \"bold\"\n\t\t},\n\t\t{\n\t\t\ttag: tags.regexp,\n\t\t\tcolor: \"#E3965E\"\n\t\t},\n\t\t{\n\t\t\ttag: [tags.tagName, tags.angleBracket],\n\t\t\tcolor: \"#BAA827\"\n\t\t},\n\t\t{\n\t\t\ttag: tags.attributeName,\n\t\t\tcolor: \"#B06520\"\n\t\t},\n\t\t{\n\t\t\ttag: tags.derefOperator,\n\t\t\tcolor: \"#000\"\n\t\t}\n\t]\n});\ncreateTheme({\n\tvariant: \"light\",\n\tsettings: {\n\t\tbackground: \"#fef7e5\",\n\t\tforeground: \"#586E75\",\n\t\tcaret: \"#000000\",\n\t\tselection: \"#073642\",\n\t\tgutterBackground: \"#fef7e5\",\n\t\tgutterForeground: \"#586E7580\",\n\t\tlineHighlight: \"#EEE8D5\"\n\t},\n\tstyles: [\n\t\t{\n\t\t\ttag: tags.comment,\n\t\t\tcolor: \"#93A1A1\"\n\t\t},\n\t\t{\n\t\t\ttag: tags.string,\n\t\t\tcolor: \"#2AA198\"\n\t\t},\n\t\t{\n\t\t\ttag: tags.regexp,\n\t\t\tcolor: \"#D30102\"\n\t\t},\n\t\t{\n\t\t\ttag: tags.number,\n\t\t\tcolor: \"#D33682\"\n\t\t},\n\t\t{\n\t\t\ttag: tags.variableName,\n\t\t\tcolor: \"#268BD2\"\n\t\t},\n\t\t{\n\t\t\ttag: [\n\t\t\t\ttags.keyword,\n\t\t\t\ttags.operator,\n\t\t\t\ttags.punctuation\n\t\t\t],\n\t\t\tcolor: \"#859900\"\n\t\t},\n\t\t{\n\t\t\ttag: [tags.definitionKeyword, tags.modifier],\n\t\t\tcolor: \"#073642\",\n\t\t\tfontWeight: \"bold\"\n\t\t},\n\t\t{\n\t\t\ttag: [\n\t\t\t\ttags.className,\n\t\t\t\ttags.self,\n\t\t\t\ttags.definition(tags.propertyName)\n\t\t\t],\n\t\t\tcolor: \"#268BD2\"\n\t\t},\n\t\t{\n\t\t\ttag: tags.function(tags.variableName),\n\t\t\tcolor: \"#268BD2\"\n\t\t},\n\t\t{\n\t\t\ttag: [tags.bool, tags.null],\n\t\t\tcolor: \"#B58900\"\n\t\t},\n\t\t{\n\t\t\ttag: tags.tagName,\n\t\t\tcolor: \"#268BD2\",\n\t\t\tfontWeight: \"bold\"\n\t\t},\n\t\t{\n\t\t\ttag: tags.angleBracket,\n\t\t\tcolor: \"#93A1A1\"\n\t\t},\n\t\t{\n\t\t\ttag: tags.attributeName,\n\t\t\tcolor: \"#93A1A1\"\n\t\t},\n\t\t{\n\t\t\ttag: tags.typeName,\n\t\t\tcolor: \"#859900\"\n\t\t}\n\t]\n});\ncreateTheme({\n\tvariant: \"light\",\n\tsettings: {\n\t\tbackground: \"#FFFFFF\",\n\t\tforeground: \"#4D4D4C\",\n\t\tcaret: \"#AEAFAD\",\n\t\tselection: \"#D6D6D6\",\n\t\tgutterBackground: \"#FFFFFF\",\n\t\tgutterForeground: \"#4D4D4C80\",\n\t\tlineHighlight: \"#EFEFEF\"\n\t},\n\tstyles: [\n\t\t{\n\t\t\ttag: tags.comment,\n\t\t\tcolor: \"#8E908C\"\n\t\t},\n\t\t{\n\t\t\ttag: [\n\t\t\t\ttags.variableName,\n\t\t\t\ttags.self,\n\t\t\t\ttags.propertyName,\n\t\t\t\ttags.attributeName,\n\t\t\t\ttags.regexp\n\t\t\t],\n\t\t\tcolor: \"#C82829\"\n\t\t},\n\t\t{\n\t\t\ttag: [\n\t\t\t\ttags.number,\n\t\t\t\ttags.bool,\n\t\t\t\ttags.null\n\t\t\t],\n\t\t\tcolor: \"#F5871F\"\n\t\t},\n\t\t{\n\t\t\ttag: [\n\t\t\t\ttags.className,\n\t\t\t\ttags.typeName,\n\t\t\t\ttags.definition(tags.typeName)\n\t\t\t],\n\t\t\tcolor: \"#C99E00\"\n\t\t},\n\t\t{\n\t\t\ttag: [tags.string, tags.special(tags.brace)],\n\t\t\tcolor: \"#718C00\"\n\t\t},\n\t\t{\n\t\t\ttag: tags.operator,\n\t\t\tcolor: \"#3E999F\"\n\t\t},\n\t\t{\n\t\t\ttag: [tags.definition(tags.propertyName), tags.function(tags.variableName)],\n\t\t\tcolor: \"#4271AE\"\n\t\t},\n\t\t{\n\t\t\ttag: tags.keyword,\n\t\t\tcolor: \"#8959A8\"\n\t\t},\n\t\t{\n\t\t\ttag: tags.derefOperator,\n\t\t\tcolor: \"#4D4D4C\"\n\t\t}\n\t]\n});\n//#endregion\n//#region ../../node_modules/.pnpm/@codemirror+autocomplete@6.18.6/node_modules/@codemirror/autocomplete/dist/index.js\n/**\nAn instance of this is passed to completion source functions.\n*/\nvar CompletionContext = class {\n\t/**\n\tCreate a new completion context. (Mostly useful for testing\n\tcompletion sources—in the editor, the extension will create\n\tthese for you.)\n\t*/\n\tconstructor(state, pos, explicit, view) {\n\t\tthis.state = state;\n\t\tthis.pos = pos;\n\t\tthis.explicit = explicit;\n\t\tthis.view = view;\n\t\t/**\n\t\t@internal\n\t\t*/\n\t\tthis.abortListeners = [];\n\t\t/**\n\t\t@internal\n\t\t*/\n\t\tthis.abortOnDocChange = false;\n\t}\n\t/**\n\tGet the extent, content, and (if there is a token) type of the\n\ttoken before `this.pos`.\n\t*/\n\ttokenBefore(types) {\n\t\tlet token = syntaxTree(this.state).resolveInner(this.pos, -1);\n\t\twhile (token && types.indexOf(token.name) < 0) token = token.parent;\n\t\treturn token ? {\n\t\t\tfrom: token.from,\n\t\t\tto: this.pos,\n\t\t\ttext: this.state.sliceDoc(token.from, this.pos),\n\t\t\ttype: token.type\n\t\t} : null;\n\t}\n\t/**\n\tGet the match of the given expression directly before the\n\tcursor.\n\t*/\n\tmatchBefore(expr) {\n\t\tlet line = this.state.doc.lineAt(this.pos);\n\t\tlet start = Math.max(line.from, this.pos - 250);\n\t\tlet str = line.text.slice(start - line.from, this.pos - line.from);\n\t\tlet found = str.search(ensureAnchor(expr, false));\n\t\treturn found < 0 ? null : {\n\t\t\tfrom: start + found,\n\t\t\tto: this.pos,\n\t\t\ttext: str.slice(found)\n\t\t};\n\t}\n\t/**\n\tYields true when the query has been aborted. Can be useful in\n\tasynchronous queries to avoid doing work that will be ignored.\n\t*/\n\tget aborted() {\n\t\treturn this.abortListeners == null;\n\t}\n\t/**\n\tAllows you to register abort handlers, which will be called when\n\tthe query is\n\t[aborted](https://codemirror.net/6/docs/ref/#autocomplete.CompletionContext.aborted).\n\t\n\tBy default, running queries will not be aborted for regular\n\ttyping or backspacing, on the assumption that they are likely to\n\treturn a result with a\n\t[`validFor`](https://codemirror.net/6/docs/ref/#autocomplete.CompletionResult.validFor) field that\n\tallows the result to be used after all. Passing `onDocChange:\n\ttrue` will cause this query to be aborted for any document\n\tchange.\n\t*/\n\taddEventListener(type, listener, options) {\n\t\tif (type == \"abort\" && this.abortListeners) {\n\t\t\tthis.abortListeners.push(listener);\n\t\t\tif (options && options.onDocChange) this.abortOnDocChange = true;\n\t\t}\n\t}\n};\nfunction toSet(chars) {\n\tlet flat = Object.keys(chars).join(\"\");\n\tlet words = /\\w/.test(flat);\n\tif (words) flat = flat.replace(/\\w/g, \"\");\n\treturn `[${words ? \"\\\\w\" : \"\"}${flat.replace(/[^\\w\\s]/g, \"\\\\$&\")}]`;\n}\nfunction prefixMatch(options) {\n\tlet first = Object.create(null), rest = Object.create(null);\n\tfor (let { label } of options) {\n\t\tfirst[label[0]] = true;\n\t\tfor (let i = 1; i < label.length; i++) rest[label[i]] = true;\n\t}\n\tlet source = toSet(first) + toSet(rest) + \"*$\";\n\treturn [new RegExp(\"^\" + source), new RegExp(source)];\n}\n/**\nGiven a a fixed array of options, return an autocompleter that\ncompletes them.\n*/\nfunction completeFromList(list) {\n\tlet options = list.map((o) => typeof o == \"string\" ? { label: o } : o);\n\tlet [validFor, match] = options.every((o) => /^\\w+$/.test(o.label)) ? [/\\w*$/, /\\w+$/] : prefixMatch(options);\n\treturn (context) => {\n\t\tlet token = context.matchBefore(match);\n\t\treturn token || context.explicit ? {\n\t\t\tfrom: token ? token.from : context.pos,\n\t\t\toptions,\n\t\t\tvalidFor\n\t\t} : null;\n\t};\n}\nvar Option = class {\n\tconstructor(completion, source, match, score) {\n\t\tthis.completion = completion;\n\t\tthis.source = source;\n\t\tthis.match = match;\n\t\tthis.score = score;\n\t}\n};\nfunction cur(state) {\n\treturn state.selection.main.from;\n}\nfunction ensureAnchor(expr, start) {\n\tvar _a;\n\tlet { source } = expr;\n\tlet addStart = start && source[0] != \"^\", addEnd = source[source.length - 1] != \"$\";\n\tif (!addStart && !addEnd) return expr;\n\treturn new RegExp(`${addStart ? \"^\" : \"\"}(?:${source})${addEnd ? \"$\" : \"\"}`, (_a = expr.flags) !== null && _a !== void 0 ? _a : expr.ignoreCase ? \"i\" : \"\");\n}\n/**\nThis annotation is added to transactions that are produced by\npicking a completion.\n*/\nconst pickedCompletion = /* @__PURE__ */ Annotation.define();\n/**\nHelper function that returns a transaction spec which inserts a\ncompletion's text in the main selection range, and any other\nselection range that has the same text in front of it.\n*/\nfunction insertCompletionText(state, text, from, to) {\n\tlet { main } = state.selection, fromOff = from - main.from, toOff = to - main.from;\n\treturn Object.assign(Object.assign({}, state.changeByRange((range) => {\n\t\tif (range != main && from != to && state.sliceDoc(range.from + fromOff, range.from + toOff) != state.sliceDoc(from, to)) return { range };\n\t\tlet lines = state.toText(text);\n\t\treturn {\n\t\t\tchanges: {\n\t\t\t\tfrom: range.from + fromOff,\n\t\t\t\tto: to == main.from ? range.to : range.from + toOff,\n\t\t\t\tinsert: lines\n\t\t\t},\n\t\t\trange: EditorSelection.cursor(range.from + fromOff + lines.length)\n\t\t};\n\t})), {\n\t\tscrollIntoView: true,\n\t\tuserEvent: \"input.complete\"\n\t});\n}\nconst SourceCache = /* @__PURE__ */ new WeakMap();\nfunction asSource(source) {\n\tif (!Array.isArray(source)) return source;\n\tlet known = SourceCache.get(source);\n\tif (!known) SourceCache.set(source, known = completeFromList(source));\n\treturn known;\n}\nconst startCompletionEffect = /* @__PURE__ */ StateEffect.define();\nconst closeCompletionEffect = /* @__PURE__ */ StateEffect.define();\nvar FuzzyMatcher = class {\n\tconstructor(pattern) {\n\t\tthis.pattern = pattern;\n\t\tthis.chars = [];\n\t\tthis.folded = [];\n\t\tthis.any = [];\n\t\tthis.precise = [];\n\t\tthis.byWord = [];\n\t\tthis.score = 0;\n\t\tthis.matched = [];\n\t\tfor (let p = 0; p < pattern.length;) {\n\t\t\tlet char = codePointAt(pattern, p), size = codePointSize(char);\n\t\t\tthis.chars.push(char);\n\t\t\tlet part = pattern.slice(p, p + size), upper = part.toUpperCase();\n\t\t\tthis.folded.push(codePointAt(upper == part ? part.toLowerCase() : upper, 0));\n\t\t\tp += size;\n\t\t}\n\t\tthis.astral = pattern.length != this.chars.length;\n\t}\n\tret(score, matched) {\n\t\tthis.score = score;\n\t\tthis.matched = matched;\n\t\treturn this;\n\t}\n\tmatch(word) {\n\t\tif (this.pattern.length == 0) return this.ret(-100, []);\n\t\tif (word.length < this.pattern.length) return null;\n\t\tlet { chars, folded, any, precise, byWord } = this;\n\t\tif (chars.length == 1) {\n\t\t\tlet first = codePointAt(word, 0), firstSize = codePointSize(first);\n\t\t\tlet score = firstSize == word.length ? 0 : -100;\n\t\t\tif (first == chars[0]);\n\t\t\telse if (first == folded[0]) score += -200;\n\t\t\telse return null;\n\t\t\treturn this.ret(score, [0, firstSize]);\n\t\t}\n\t\tlet direct = word.indexOf(this.pattern);\n\t\tif (direct == 0) return this.ret(word.length == this.pattern.length ? 0 : -100, [0, this.pattern.length]);\n\t\tlet len = chars.length, anyTo = 0;\n\t\tif (direct < 0) {\n\t\t\tfor (let i = 0, e = Math.min(word.length, 200); i < e && anyTo < len;) {\n\t\t\t\tlet next = codePointAt(word, i);\n\t\t\t\tif (next == chars[anyTo] || next == folded[anyTo]) any[anyTo++] = i;\n\t\t\t\ti += codePointSize(next);\n\t\t\t}\n\t\t\tif (anyTo < len) return null;\n\t\t}\n\t\tlet preciseTo = 0;\n\t\tlet byWordTo = 0, byWordFolded = false;\n\t\tlet adjacentTo = 0, adjacentStart = -1, adjacentEnd = -1;\n\t\tlet hasLower = /[a-z]/.test(word), wordAdjacent = true;\n\t\tfor (let i = 0, e = Math.min(word.length, 200), prevType = 0; i < e && byWordTo < len;) {\n\t\t\tlet next = codePointAt(word, i);\n\t\t\tif (direct < 0) {\n\t\t\t\tif (preciseTo < len && next == chars[preciseTo]) precise[preciseTo++] = i;\n\t\t\t\tif (adjacentTo < len) if (next == chars[adjacentTo] || next == folded[adjacentTo]) {\n\t\t\t\t\tif (adjacentTo == 0) adjacentStart = i;\n\t\t\t\t\tadjacentEnd = i + 1;\n\t\t\t\t\tadjacentTo++;\n\t\t\t\t} else adjacentTo = 0;\n\t\t\t}\n\t\t\tlet ch, type = next < 255 ? next >= 48 && next <= 57 || next >= 97 && next <= 122 ? 2 : next >= 65 && next <= 90 ? 1 : 0 : (ch = fromCodePoint(next)) != ch.toLowerCase() ? 1 : ch != ch.toUpperCase() ? 2 : 0;\n\t\t\tif (!i || type == 1 && hasLower || prevType == 0 && type != 0) {\n\t\t\t\tif (chars[byWordTo] == next || folded[byWordTo] == next && (byWordFolded = true)) byWord[byWordTo++] = i;\n\t\t\t\telse if (byWord.length) wordAdjacent = false;\n\t\t\t}\n\t\t\tprevType = type;\n\t\t\ti += codePointSize(next);\n\t\t}\n\t\tif (byWordTo == len && byWord[0] == 0 && wordAdjacent) return this.result(-100 + (byWordFolded ? -200 : 0), byWord, word);\n\t\tif (adjacentTo == len && adjacentStart == 0) return this.ret(-200 - word.length + (adjacentEnd == word.length ? 0 : -100), [0, adjacentEnd]);\n\t\tif (direct > -1) return this.ret(-700 - word.length, [direct, direct + this.pattern.length]);\n\t\tif (adjacentTo == len) return this.ret(-900 - word.length, [adjacentStart, adjacentEnd]);\n\t\tif (byWordTo == len) return this.result(-100 + (byWordFolded ? -200 : 0) + -700 + (wordAdjacent ? 0 : -1100), byWord, word);\n\t\treturn chars.length == 2 ? null : this.result((any[0] ? -700 : 0) + -200 + -1100, any, word);\n\t}\n\tresult(score, positions, word) {\n\t\tlet result = [], i = 0;\n\t\tfor (let pos of positions) {\n\t\t\tlet to = pos + (this.astral ? codePointSize(codePointAt(word, pos)) : 1);\n\t\t\tif (i && result[i - 1] == pos) result[i - 1] = to;\n\t\t\telse {\n\t\t\t\tresult[i++] = pos;\n\t\t\t\tresult[i++] = to;\n\t\t\t}\n\t\t}\n\t\treturn this.ret(score - word.length, result);\n\t}\n};\nvar StrictMatcher = class {\n\tconstructor(pattern) {\n\t\tthis.pattern = pattern;\n\t\tthis.matched = [];\n\t\tthis.score = 0;\n\t\tthis.folded = pattern.toLowerCase();\n\t}\n\tmatch(word) {\n\t\tif (word.length < this.pattern.length) return null;\n\t\tlet start = word.slice(0, this.pattern.length);\n\t\tlet match = start == this.pattern ? 0 : start.toLowerCase() == this.folded ? -200 : null;\n\t\tif (match == null) return null;\n\t\tthis.matched = [0, start.length];\n\t\tthis.score = match + (word.length == this.pattern.length ? 0 : -100);\n\t\treturn this;\n\t}\n};\nconst completionConfig = /* @__PURE__ */ Facet.define({ combine(configs) {\n\treturn combineConfig(configs, {\n\t\tactivateOnTyping: true,\n\t\tactivateOnCompletion: () => false,\n\t\tactivateOnTypingDelay: 100,\n\t\tselectOnOpen: true,\n\t\toverride: null,\n\t\tcloseOnBlur: true,\n\t\tmaxRenderedOptions: 100,\n\t\tdefaultKeymap: true,\n\t\ttooltipClass: () => \"\",\n\t\toptionClass: () => \"\",\n\t\taboveCursor: false,\n\t\ticons: true,\n\t\taddToOptions: [],\n\t\tpositionInfo: defaultPositionInfo,\n\t\tfilterStrict: false,\n\t\tcompareCompletions: (a, b) => a.label.localeCompare(b.label),\n\t\tinteractionDelay: 75,\n\t\tupdateSyncTime: 100\n\t}, {\n\t\tdefaultKeymap: (a, b) => a && b,\n\t\tcloseOnBlur: (a, b) => a && b,\n\t\ticons: (a, b) => a && b,\n\t\ttooltipClass: (a, b) => (c) => joinClass(a(c), b(c)),\n\t\toptionClass: (a, b) => (c) => joinClass(a(c), b(c)),\n\t\taddToOptions: (a, b) => a.concat(b),\n\t\tfilterStrict: (a, b) => a || b\n\t});\n} });\nfunction joinClass(a, b) {\n\treturn a ? b ? a + \" \" + b : a : b;\n}\nfunction defaultPositionInfo(view, list, option, info, space, tooltip) {\n\tlet rtl = view.textDirection == Direction.RTL, left = rtl, narrow = false;\n\tlet side = \"top\", offset, maxWidth;\n\tlet spaceLeft = list.left - space.left, spaceRight = space.right - list.right;\n\tlet infoWidth = info.right - info.left, infoHeight = info.bottom - info.top;\n\tif (left && spaceLeft < Math.min(infoWidth, spaceRight)) left = false;\n\telse if (!left && spaceRight < Math.min(infoWidth, spaceLeft)) left = true;\n\tif (infoWidth <= (left ? spaceLeft : spaceRight)) {\n\t\toffset = Math.max(space.top, Math.min(option.top, space.bottom - infoHeight)) - list.top;\n\t\tmaxWidth = Math.min(400, left ? spaceLeft : spaceRight);\n\t} else {\n\t\tnarrow = true;\n\t\tmaxWidth = Math.min(400, (rtl ? list.right : space.right - list.left) - 30);\n\t\tlet spaceBelow = space.bottom - list.bottom;\n\t\tif (spaceBelow >= infoHeight || spaceBelow > list.top) offset = option.bottom - list.top;\n\t\telse {\n\t\t\tside = \"bottom\";\n\t\t\toffset = list.bottom - option.top;\n\t\t}\n\t}\n\tlet scaleY = (list.bottom - list.top) / tooltip.offsetHeight;\n\tlet scaleX = (list.right - list.left) / tooltip.offsetWidth;\n\treturn {\n\t\tstyle: `${side}: ${offset / scaleY}px; max-width: ${maxWidth / scaleX}px`,\n\t\tclass: \"cm-completionInfo-\" + (narrow ? rtl ? \"left-narrow\" : \"right-narrow\" : left ? \"left\" : \"right\")\n\t};\n}\nfunction optionContent(config) {\n\tlet content = config.addToOptions.slice();\n\tif (config.icons) content.push({\n\t\trender(completion) {\n\t\t\tlet icon = document.createElement(\"div\");\n\t\t\ticon.classList.add(\"cm-completionIcon\");\n\t\t\tif (completion.type) icon.classList.add(...completion.type.split(/\\s+/g).map((cls) => \"cm-completionIcon-\" + cls));\n\t\t\ticon.setAttribute(\"aria-hidden\", \"true\");\n\t\t\treturn icon;\n\t\t},\n\t\tposition: 20\n\t});\n\tcontent.push({\n\t\trender(completion, _s, _v, match) {\n\t\t\tlet labelElt = document.createElement(\"span\");\n\t\t\tlabelElt.className = \"cm-completionLabel\";\n\t\t\tlet label = completion.displayLabel || completion.label, off = 0;\n\t\t\tfor (let j = 0; j < match.length;) {\n\t\t\t\tlet from = match[j++], to = match[j++];\n\t\t\t\tif (from > off) labelElt.appendChild(document.createTextNode(label.slice(off, from)));\n\t\t\t\tlet span = labelElt.appendChild(document.createElement(\"span\"));\n\t\t\t\tspan.appendChild(document.createTextNode(label.slice(from, to)));\n\t\t\t\tspan.className = \"cm-completionMatchedText\";\n\t\t\t\toff = to;\n\t\t\t}\n\t\t\tif (off < label.length) labelElt.appendChild(document.createTextNode(label.slice(off)));\n\t\t\treturn labelElt;\n\t\t},\n\t\tposition: 50\n\t}, {\n\t\trender(completion) {\n\t\t\tif (!completion.detail) return null;\n\t\t\tlet detailElt = document.createElement(\"span\");\n\t\t\tdetailElt.className = \"cm-completionDetail\";\n\t\t\tdetailElt.textContent = completion.detail;\n\t\t\treturn detailElt;\n\t\t},\n\t\tposition: 80\n\t});\n\treturn content.sort((a, b) => a.position - b.position).map((a) => a.render);\n}\nfunction rangeAroundSelected(total, selected, max) {\n\tif (total <= max) return {\n\t\tfrom: 0,\n\t\tto: total\n\t};\n\tif (selected < 0) selected = 0;\n\tif (selected <= total >> 1) {\n\t\tlet off = Math.floor(selected / max);\n\t\treturn {\n\t\t\tfrom: off * max,\n\t\t\tto: (off + 1) * max\n\t\t};\n\t}\n\tlet off = Math.floor((total - selected) / max);\n\treturn {\n\t\tfrom: total - (off + 1) * max,\n\t\tto: total - off * max\n\t};\n}\nvar CompletionTooltip = class {\n\tconstructor(view, stateField, applyCompletion) {\n\t\tthis.view = view;\n\t\tthis.stateField = stateField;\n\t\tthis.applyCompletion = applyCompletion;\n\t\tthis.info = null;\n\t\tthis.infoDestroy = null;\n\t\tthis.placeInfoReq = {\n\t\t\tread: () => this.measureInfo(),\n\t\t\twrite: (pos) => this.placeInfo(pos),\n\t\t\tkey: this\n\t\t};\n\t\tthis.space = null;\n\t\tthis.currentClass = \"\";\n\t\tlet cState = view.state.field(stateField);\n\t\tlet { options, selected } = cState.open;\n\t\tlet config = view.state.facet(completionConfig);\n\t\tthis.optionContent = optionContent(config);\n\t\tthis.optionClass = config.optionClass;\n\t\tthis.tooltipClass = config.tooltipClass;\n\t\tthis.range = rangeAroundSelected(options.length, selected, config.maxRenderedOptions);\n\t\tthis.dom = document.createElement(\"div\");\n\t\tthis.dom.className = \"cm-tooltip-autocomplete\";\n\t\tthis.updateTooltipClass(view.state);\n\t\tthis.dom.addEventListener(\"mousedown\", (e) => {\n\t\t\tlet { options } = view.state.field(stateField).open;\n\t\t\tfor (let dom = e.target, match; dom && dom != this.dom; dom = dom.parentNode) if (dom.nodeName == \"LI\" && (match = /-(\\d+)$/.exec(dom.id)) && +match[1] < options.length) {\n\t\t\t\tthis.applyCompletion(view, options[+match[1]]);\n\t\t\t\te.preventDefault();\n\t\t\t\treturn;\n\t\t\t}\n\t\t});\n\t\tthis.dom.addEventListener(\"focusout\", (e) => {\n\t\t\tlet state = view.state.field(this.stateField, false);\n\t\t\tif (state && state.tooltip && view.state.facet(completionConfig).closeOnBlur && e.relatedTarget != view.contentDOM) view.dispatch({ effects: closeCompletionEffect.of(null) });\n\t\t});\n\t\tthis.showOptions(options, cState.id);\n\t}\n\tmount() {\n\t\tthis.updateSel();\n\t}\n\tshowOptions(options, id) {\n\t\tif (this.list) this.list.remove();\n\t\tthis.list = this.dom.appendChild(this.createListBox(options, id, this.range));\n\t\tthis.list.addEventListener(\"scroll\", () => {\n\t\t\tif (this.info) this.view.requestMeasure(this.placeInfoReq);\n\t\t});\n\t}\n\tupdate(update) {\n\t\tvar _a;\n\t\tlet cState = update.state.field(this.stateField);\n\t\tlet prevState = update.startState.field(this.stateField);\n\t\tthis.updateTooltipClass(update.state);\n\t\tif (cState != prevState) {\n\t\t\tlet { options, selected, disabled } = cState.open;\n\t\t\tif (!prevState.open || prevState.open.options != options) {\n\t\t\t\tthis.range = rangeAroundSelected(options.length, selected, update.state.facet(completionConfig).maxRenderedOptions);\n\t\t\t\tthis.showOptions(options, cState.id);\n\t\t\t}\n\t\t\tthis.updateSel();\n\t\t\tif (disabled != ((_a = prevState.open) === null || _a === void 0 ? void 0 : _a.disabled)) this.dom.classList.toggle(\"cm-tooltip-autocomplete-disabled\", !!disabled);\n\t\t}\n\t}\n\tupdateTooltipClass(state) {\n\t\tlet cls = this.tooltipClass(state);\n\t\tif (cls != this.currentClass) {\n\t\t\tfor (let c of this.currentClass.split(\" \")) if (c) this.dom.classList.remove(c);\n\t\t\tfor (let c of cls.split(\" \")) if (c) this.dom.classList.add(c);\n\t\t\tthis.currentClass = cls;\n\t\t}\n\t}\n\tpositioned(space) {\n\t\tthis.space = space;\n\t\tif (this.info) this.view.requestMeasure(this.placeInfoReq);\n\t}\n\tupdateSel() {\n\t\tlet cState = this.view.state.field(this.stateField), open = cState.open;\n\t\tif (open.selected > -1 && open.selected < this.range.from || open.selected >= this.range.to) {\n\t\t\tthis.range = rangeAroundSelected(open.options.length, open.selected, this.view.state.facet(completionConfig).maxRenderedOptions);\n\t\t\tthis.showOptions(open.options, cState.id);\n\t\t}\n\t\tif (this.updateSelectedOption(open.selected)) {\n\t\t\tthis.destroyInfo();\n\t\t\tlet { completion } = open.options[open.selected];\n\t\t\tlet { info } = completion;\n\t\t\tif (!info) return;\n\t\t\tlet infoResult = typeof info === \"string\" ? document.createTextNode(info) : info(completion);\n\t\t\tif (!infoResult) return;\n\t\t\tif (\"then\" in infoResult) infoResult.then((obj) => {\n\t\t\t\tif (obj && this.view.state.field(this.stateField, false) == cState) this.addInfoPane(obj, completion);\n\t\t\t}).catch((e) => logException(this.view.state, e, \"completion info\"));\n\t\t\telse this.addInfoPane(infoResult, completion);\n\t\t}\n\t}\n\taddInfoPane(content, completion) {\n\t\tthis.destroyInfo();\n\t\tlet wrap = this.info = document.createElement(\"div\");\n\t\twrap.className = \"cm-tooltip cm-completionInfo\";\n\t\tif (content.nodeType != null) {\n\t\t\twrap.appendChild(content);\n\t\t\tthis.infoDestroy = null;\n\t\t} else {\n\t\t\tlet { dom, destroy } = content;\n\t\t\twrap.appendChild(dom);\n\t\t\tthis.infoDestroy = destroy || null;\n\t\t}\n\t\tthis.dom.appendChild(wrap);\n\t\tthis.view.requestMeasure(this.placeInfoReq);\n\t}\n\tupdateSelectedOption(selected) {\n\t\tlet set = null;\n\t\tfor (let opt = this.list.firstChild, i = this.range.from; opt; opt = opt.nextSibling, i++) if (opt.nodeName != \"LI\" || !opt.id) i--;\n\t\telse if (i == selected) {\n\t\t\tif (!opt.hasAttribute(\"aria-selected\")) {\n\t\t\t\topt.setAttribute(\"aria-selected\", \"true\");\n\t\t\t\tset = opt;\n\t\t\t}\n\t\t} else if (opt.hasAttribute(\"aria-selected\")) opt.removeAttribute(\"aria-selected\");\n\t\tif (set) scrollIntoView(this.list, set);\n\t\treturn set;\n\t}\n\tmeasureInfo() {\n\t\tlet sel = this.dom.querySelector(\"[aria-selected]\");\n\t\tif (!sel || !this.info) return null;\n\t\tlet listRect = this.dom.getBoundingClientRect();\n\t\tlet infoRect = this.info.getBoundingClientRect();\n\t\tlet selRect = sel.getBoundingClientRect();\n\t\tlet space = this.space;\n\t\tif (!space) {\n\t\t\tlet docElt = this.dom.ownerDocument.documentElement;\n\t\t\tspace = {\n\t\t\t\tleft: 0,\n\t\t\t\ttop: 0,\n\t\t\t\tright: docElt.clientWidth,\n\t\t\t\tbottom: docElt.clientHeight\n\t\t\t};\n\t\t}\n\t\tif (selRect.top > Math.min(space.bottom, listRect.bottom) - 10 || selRect.bottom < Math.max(space.top, listRect.top) + 10) return null;\n\t\treturn this.view.state.facet(completionConfig).positionInfo(this.view, listRect, selRect, infoRect, space, this.dom);\n\t}\n\tplaceInfo(pos) {\n\t\tif (this.info) if (pos) {\n\t\t\tif (pos.style) this.info.style.cssText = pos.style;\n\t\t\tthis.info.className = \"cm-tooltip cm-completionInfo \" + (pos.class || \"\");\n\t\t} else this.info.style.cssText = \"top: -1e6px\";\n\t}\n\tcreateListBox(options, id, range) {\n\t\tconst ul = document.createElement(\"ul\");\n\t\tul.id = id;\n\t\tul.setAttribute(\"role\", \"listbox\");\n\t\tul.setAttribute(\"aria-expanded\", \"true\");\n\t\tul.setAttribute(\"aria-label\", this.view.state.phrase(\"Completions\"));\n\t\tul.addEventListener(\"mousedown\", (e) => {\n\t\t\tif (e.target == ul) e.preventDefault();\n\t\t});\n\t\tlet curSection = null;\n\t\tfor (let i = range.from; i < range.to; i++) {\n\t\t\tlet { completion, match } = options[i], { section } = completion;\n\t\t\tif (section) {\n\t\t\t\tlet name = typeof section == \"string\" ? section : section.name;\n\t\t\t\tif (name != curSection && (i > range.from || range.from == 0)) {\n\t\t\t\t\tcurSection = name;\n\t\t\t\t\tif (typeof section != \"string\" && section.header) ul.appendChild(section.header(section));\n\t\t\t\t\telse {\n\t\t\t\t\t\tlet header = ul.appendChild(document.createElement(\"completion-section\"));\n\t\t\t\t\t\theader.textContent = name;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst li = ul.appendChild(document.createElement(\"li\"));\n\t\t\tli.id = id + \"-\" + i;\n\t\t\tli.setAttribute(\"role\", \"option\");\n\t\t\tlet cls = this.optionClass(completion);\n\t\t\tif (cls) li.className = cls;\n\t\t\tfor (let source of this.optionContent) {\n\t\t\t\tlet node = source(completion, this.view.state, this.view, match);\n\t\t\t\tif (node) li.appendChild(node);\n\t\t\t}\n\t\t}\n\t\tif (range.from) ul.classList.add(\"cm-completionListIncompleteTop\");\n\t\tif (range.to < options.length) ul.classList.add(\"cm-completionListIncompleteBottom\");\n\t\treturn ul;\n\t}\n\tdestroyInfo() {\n\t\tif (this.info) {\n\t\t\tif (this.infoDestroy) this.infoDestroy();\n\t\t\tthis.info.remove();\n\t\t\tthis.info = null;\n\t\t}\n\t}\n\tdestroy() {\n\t\tthis.destroyInfo();\n\t}\n};\nfunction completionTooltip(stateField, applyCompletion) {\n\treturn (view) => new CompletionTooltip(view, stateField, applyCompletion);\n}\nfunction scrollIntoView(container, element) {\n\tlet parent = container.getBoundingClientRect();\n\tlet self = element.getBoundingClientRect();\n\tlet scaleY = parent.height / container.offsetHeight;\n\tif (self.top < parent.top) container.scrollTop -= (parent.top - self.top) / scaleY;\n\telse if (self.bottom > parent.bottom) container.scrollTop += (self.bottom - parent.bottom) / scaleY;\n}\nfunction score(option) {\n\treturn (option.boost || 0) * 100 + (option.apply ? 10 : 0) + (option.info ? 5 : 0) + (option.type ? 1 : 0);\n}\nfunction sortOptions(active, state) {\n\tlet options = [];\n\tlet sections = null;\n\tlet addOption = (option) => {\n\t\toptions.push(option);\n\t\tlet { section } = option.completion;\n\t\tif (section) {\n\t\t\tif (!sections) sections = [];\n\t\t\tlet name = typeof section == \"string\" ? section : section.name;\n\t\t\tif (!sections.some((s) => s.name == name)) sections.push(typeof section == \"string\" ? { name } : section);\n\t\t}\n\t};\n\tlet conf = state.facet(completionConfig);\n\tfor (let a of active) if (a.hasResult()) {\n\t\tlet getMatch = a.result.getMatch;\n\t\tif (a.result.filter === false) for (let option of a.result.options) addOption(new Option(option, a.source, getMatch ? getMatch(option) : [], 1e9 - options.length));\n\t\telse {\n\t\t\tlet pattern = state.sliceDoc(a.from, a.to), match;\n\t\t\tlet matcher = conf.filterStrict ? new StrictMatcher(pattern) : new FuzzyMatcher(pattern);\n\t\t\tfor (let option of a.result.options) if (match = matcher.match(option.label)) {\n\t\t\t\tlet matched = !option.displayLabel ? match.matched : getMatch ? getMatch(option, match.matched) : [];\n\t\t\t\taddOption(new Option(option, a.source, matched, match.score + (option.boost || 0)));\n\t\t\t}\n\t\t}\n\t}\n\tif (sections) {\n\t\tlet sectionOrder = Object.create(null), pos = 0;\n\t\tlet cmp = (a, b) => {\n\t\t\tvar _a, _b;\n\t\t\treturn ((_a = a.rank) !== null && _a !== void 0 ? _a : 1e9) - ((_b = b.rank) !== null && _b !== void 0 ? _b : 1e9) || (a.name < b.name ? -1 : 1);\n\t\t};\n\t\tfor (let s of sections.sort(cmp)) {\n\t\t\tpos -= 1e5;\n\t\t\tsectionOrder[s.name] = pos;\n\t\t}\n\t\tfor (let option of options) {\n\t\t\tlet { section } = option.completion;\n\t\t\tif (section) option.score += sectionOrder[typeof section == \"string\" ? section : section.name];\n\t\t}\n\t}\n\tlet result = [], prev = null;\n\tlet compare = conf.compareCompletions;\n\tfor (let opt of options.sort((a, b) => b.score - a.score || compare(a.completion, b.completion))) {\n\t\tlet cur = opt.completion;\n\t\tif (!prev || prev.label != cur.label || prev.detail != cur.detail || prev.type != null && cur.type != null && prev.type != cur.type || prev.apply != cur.apply || prev.boost != cur.boost) result.push(opt);\n\t\telse if (score(opt.completion) > score(prev)) result[result.length - 1] = opt;\n\t\tprev = opt.completion;\n\t}\n\treturn result;\n}\nvar CompletionDialog = class CompletionDialog {\n\tconstructor(options, attrs, tooltip, timestamp, selected, disabled) {\n\t\tthis.options = options;\n\t\tthis.attrs = attrs;\n\t\tthis.tooltip = tooltip;\n\t\tthis.timestamp = timestamp;\n\t\tthis.selected = selected;\n\t\tthis.disabled = disabled;\n\t}\n\tsetSelected(selected, id) {\n\t\treturn selected == this.selected || selected >= this.options.length ? this : new CompletionDialog(this.options, makeAttrs(id, selected), this.tooltip, this.timestamp, selected, this.disabled);\n\t}\n\tstatic build(active, state, id, prev, conf, didSetActive) {\n\t\tif (prev && !didSetActive && active.some((s) => s.isPending)) return prev.setDisabled();\n\t\tlet options = sortOptions(active, state);\n\t\tif (!options.length) return prev && active.some((a) => a.isPending) ? prev.setDisabled() : null;\n\t\tlet selected = state.facet(completionConfig).selectOnOpen ? 0 : -1;\n\t\tif (prev && prev.selected != selected && prev.selected != -1) {\n\t\t\tlet selectedValue = prev.options[prev.selected].completion;\n\t\t\tfor (let i = 0; i < options.length; i++) if (options[i].completion == selectedValue) {\n\t\t\t\tselected = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\treturn new CompletionDialog(options, makeAttrs(id, selected), {\n\t\t\tpos: active.reduce((a, b) => b.hasResult() ? Math.min(a, b.from) : a, 1e8),\n\t\t\tcreate: createTooltip,\n\t\t\tabove: conf.aboveCursor\n\t\t}, prev ? prev.timestamp : Date.now(), selected, false);\n\t}\n\tmap(changes) {\n\t\treturn new CompletionDialog(this.options, this.attrs, Object.assign(Object.assign({}, this.tooltip), { pos: changes.mapPos(this.tooltip.pos) }), this.timestamp, this.selected, this.disabled);\n\t}\n\tsetDisabled() {\n\t\treturn new CompletionDialog(this.options, this.attrs, this.tooltip, this.timestamp, this.selected, true);\n\t}\n};\nvar CompletionState = class CompletionState {\n\tconstructor(active, id, open) {\n\t\tthis.active = active;\n\t\tthis.id = id;\n\t\tthis.open = open;\n\t}\n\tstatic start() {\n\t\treturn new CompletionState(none$1, \"cm-ac-\" + Math.floor(Math.random() * 2e6).toString(36), null);\n\t}\n\tupdate(tr) {\n\t\tlet { state } = tr, conf = state.facet(completionConfig);\n\t\tlet active = (conf.override || state.languageDataAt(\"autocomplete\", cur(state)).map(asSource)).map((source) => {\n\t\t\treturn (this.active.find((s) => s.source == source) || new ActiveSource(source, this.active.some((a) => a.state != 0) ? 1 : 0)).update(tr, conf);\n\t\t});\n\t\tif (active.length == this.active.length && active.every((a, i) => a == this.active[i])) active = this.active;\n\t\tlet open = this.open, didSet = tr.effects.some((e) => e.is(setActiveEffect));\n\t\tif (open && tr.docChanged) open = open.map(tr.changes);\n\t\tif (tr.selection || active.some((a) => a.hasResult() && tr.changes.touchesRange(a.from, a.to)) || !sameResults(active, this.active) || didSet) open = CompletionDialog.build(active, state, this.id, open, conf, didSet);\n\t\telse if (open && open.disabled && !active.some((a) => a.isPending)) open = null;\n\t\tif (!open && active.every((a) => !a.isPending) && active.some((a) => a.hasResult())) active = active.map((a) => a.hasResult() ? new ActiveSource(a.source, 0) : a);\n\t\tfor (let effect of tr.effects) if (effect.is(setSelectedEffect)) open = open && open.setSelected(effect.value, this.id);\n\t\treturn active == this.active && open == this.open ? this : new CompletionState(active, this.id, open);\n\t}\n\tget tooltip() {\n\t\treturn this.open ? this.open.tooltip : null;\n\t}\n\tget attrs() {\n\t\treturn this.open ? this.open.attrs : this.active.length ? baseAttrs : noAttrs;\n\t}\n};\nfunction sameResults(a, b) {\n\tif (a == b) return true;\n\tfor (let iA = 0, iB = 0;;) {\n\t\twhile (iA < a.length && !a[iA].hasResult()) iA++;\n\t\twhile (iB < b.length && !b[iB].hasResult()) iB++;\n\t\tlet endA = iA == a.length, endB = iB == b.length;\n\t\tif (endA || endB) return endA == endB;\n\t\tif (a[iA++].result != b[iB++].result) return false;\n\t}\n}\nconst baseAttrs = { \"aria-autocomplete\": \"list\" };\nconst noAttrs = {};\nfunction makeAttrs(id, selected) {\n\tlet result = {\n\t\t\"aria-autocomplete\": \"list\",\n\t\t\"aria-haspopup\": \"listbox\",\n\t\t\"aria-controls\": id\n\t};\n\tif (selected > -1) result[\"aria-activedescendant\"] = id + \"-\" + selected;\n\treturn result;\n}\nconst none$1 = [];\nfunction getUpdateType(tr, conf) {\n\tif (tr.isUserEvent(\"input.complete\")) {\n\t\tlet completion = tr.annotation(pickedCompletion);\n\t\tif (completion && conf.activateOnCompletion(completion)) return 12;\n\t}\n\tlet typing = tr.isUserEvent(\"input.type\");\n\treturn typing && conf.activateOnTyping ? 5 : typing ? 1 : tr.isUserEvent(\"delete.backward\") ? 2 : tr.selection ? 8 : tr.docChanged ? 16 : 0;\n}\nvar ActiveSource = class ActiveSource {\n\tconstructor(source, state, explicit = false) {\n\t\tthis.source = source;\n\t\tthis.state = state;\n\t\tthis.explicit = explicit;\n\t}\n\thasResult() {\n\t\treturn false;\n\t}\n\tget isPending() {\n\t\treturn this.state == 1;\n\t}\n\tupdate(tr, conf) {\n\t\tlet type = getUpdateType(tr, conf), value = this;\n\t\tif (type & 8 || type & 16 && this.touches(tr)) value = new ActiveSource(value.source, 0);\n\t\tif (type & 4 && value.state == 0) value = new ActiveSource(this.source, 1);\n\t\tvalue = value.updateFor(tr, type);\n\t\tfor (let effect of tr.effects) if (effect.is(startCompletionEffect)) value = new ActiveSource(value.source, 1, effect.value);\n\t\telse if (effect.is(closeCompletionEffect)) value = new ActiveSource(value.source, 0);\n\t\telse if (effect.is(setActiveEffect)) {\n\t\t\tfor (let active of effect.value) if (active.source == value.source) value = active;\n\t\t}\n\t\treturn value;\n\t}\n\tupdateFor(tr, type) {\n\t\treturn this.map(tr.changes);\n\t}\n\tmap(changes) {\n\t\treturn this;\n\t}\n\ttouches(tr) {\n\t\treturn tr.changes.touchesRange(cur(tr.state));\n\t}\n};\nvar ActiveResult = class ActiveResult extends ActiveSource {\n\tconstructor(source, explicit, limit, result, from, to) {\n\t\tsuper(source, 3, explicit);\n\t\tthis.limit = limit;\n\t\tthis.result = result;\n\t\tthis.from = from;\n\t\tthis.to = to;\n\t}\n\thasResult() {\n\t\treturn true;\n\t}\n\tupdateFor(tr, type) {\n\t\tvar _a;\n\t\tif (!(type & 3)) return this.map(tr.changes);\n\t\tlet result = this.result;\n\t\tif (result.map && !tr.changes.empty) result = result.map(result, tr.changes);\n\t\tlet from = tr.changes.mapPos(this.from), to = tr.changes.mapPos(this.to, 1);\n\t\tlet pos = cur(tr.state);\n\t\tif (pos > to || !result || type & 2 && (cur(tr.startState) == this.from || pos < this.limit)) return new ActiveSource(this.source, type & 4 ? 1 : 0);\n\t\tlet limit = tr.changes.mapPos(this.limit);\n\t\tif (checkValid(result.validFor, tr.state, from, to)) return new ActiveResult(this.source, this.explicit, limit, result, from, to);\n\t\tif (result.update && (result = result.update(result, from, to, new CompletionContext(tr.state, pos, false)))) return new ActiveResult(this.source, this.explicit, limit, result, result.from, (_a = result.to) !== null && _a !== void 0 ? _a : cur(tr.state));\n\t\treturn new ActiveSource(this.source, 1, this.explicit);\n\t}\n\tmap(mapping) {\n\t\tif (mapping.empty) return this;\n\t\tif (!(this.result.map ? this.result.map(this.result, mapping) : this.result)) return new ActiveSource(this.source, 0);\n\t\treturn new ActiveResult(this.source, this.explicit, mapping.mapPos(this.limit), this.result, mapping.mapPos(this.from), mapping.mapPos(this.to, 1));\n\t}\n\ttouches(tr) {\n\t\treturn tr.changes.touchesRange(this.from, this.to);\n\t}\n};\nfunction checkValid(validFor, state, from, to) {\n\tif (!validFor) return false;\n\tlet text = state.sliceDoc(from, to);\n\treturn typeof validFor == \"function\" ? validFor(text, from, to, state) : ensureAnchor(validFor, true).test(text);\n}\nconst setActiveEffect = /* @__PURE__ */ StateEffect.define({ map(sources, mapping) {\n\treturn sources.map((s) => s.map(mapping));\n} });\nconst setSelectedEffect = /* @__PURE__ */ StateEffect.define();\nconst completionState = /* @__PURE__ */ StateField.define({\n\tcreate() {\n\t\treturn CompletionState.start();\n\t},\n\tupdate(value, tr) {\n\t\treturn value.update(tr);\n\t},\n\tprovide: (f) => [showTooltip.from(f, (val) => val.tooltip), EditorView.contentAttributes.from(f, (state) => state.attrs)]\n});\nfunction applyCompletion(view, option) {\n\tconst apply = option.completion.apply || option.completion.label;\n\tlet result = view.state.field(completionState).active.find((a) => a.source == option.source);\n\tif (!(result instanceof ActiveResult)) return false;\n\tif (typeof apply == \"string\") view.dispatch(Object.assign(Object.assign({}, insertCompletionText(view.state, apply, result.from, result.to)), { annotations: pickedCompletion.of(option.completion) }));\n\telse apply(view, option.completion, result.from, result.to);\n\treturn true;\n}\nconst createTooltip = /* @__PURE__ */ completionTooltip(completionState, applyCompletion);\n/**\nReturns a command that moves the completion selection forward or\nbackward by the given amount.\n*/\nfunction moveCompletionSelection(forward, by = \"option\") {\n\treturn (view) => {\n\t\tlet cState = view.state.field(completionState, false);\n\t\tif (!cState || !cState.open || cState.open.disabled || Date.now() - cState.open.timestamp < view.state.facet(completionConfig).interactionDelay) return false;\n\t\tlet step = 1, tooltip;\n\t\tif (by == \"page\" && (tooltip = getTooltip(view, cState.open.tooltip))) step = Math.max(2, Math.floor(tooltip.dom.offsetHeight / tooltip.dom.querySelector(\"li\").offsetHeight) - 1);\n\t\tlet { length } = cState.open.options;\n\t\tlet selected = cState.open.selected > -1 ? cState.open.selected + step * (forward ? 1 : -1) : forward ? 0 : length - 1;\n\t\tif (selected < 0) selected = by == \"page\" ? 0 : length - 1;\n\t\telse if (selected >= length) selected = by == \"page\" ? length - 1 : 0;\n\t\tview.dispatch({ effects: setSelectedEffect.of(selected) });\n\t\treturn true;\n\t};\n}\n/**\nAccept the current completion.\n*/\nconst acceptCompletion = (view) => {\n\tlet cState = view.state.field(completionState, false);\n\tif (view.state.readOnly || !cState || !cState.open || cState.open.selected < 0 || cState.open.disabled || Date.now() - cState.open.timestamp < view.state.facet(completionConfig).interactionDelay) return false;\n\treturn applyCompletion(view, cState.open.options[cState.open.selected]);\n};\n/**\nExplicitly start autocompletion.\n*/\nconst startCompletion = (view) => {\n\tif (!view.state.field(completionState, false)) return false;\n\tview.dispatch({ effects: startCompletionEffect.of(true) });\n\treturn true;\n};\n/**\nClose the currently active completion.\n*/\nconst closeCompletion = (view) => {\n\tlet cState = view.state.field(completionState, false);\n\tif (!cState || !cState.active.some((a) => a.state != 0)) return false;\n\tview.dispatch({ effects: closeCompletionEffect.of(null) });\n\treturn true;\n};\nvar RunningQuery = class {\n\tconstructor(active, context) {\n\t\tthis.active = active;\n\t\tthis.context = context;\n\t\tthis.time = Date.now();\n\t\tthis.updates = [];\n\t\tthis.done = void 0;\n\t}\n};\nconst MaxUpdateCount = 50, MinAbortTime = 1e3;\nconst completionPlugin = /* @__PURE__ */ ViewPlugin.fromClass(class {\n\tconstructor(view) {\n\t\tthis.view = view;\n\t\tthis.debounceUpdate = -1;\n\t\tthis.running = [];\n\t\tthis.debounceAccept = -1;\n\t\tthis.pendingStart = false;\n\t\tthis.composing = 0;\n\t\tfor (let active of view.state.field(completionState).active) if (active.isPending) this.startQuery(active);\n\t}\n\tupdate(update) {\n\t\tlet cState = update.state.field(completionState);\n\t\tlet conf = update.state.facet(completionConfig);\n\t\tif (!update.selectionSet && !update.docChanged && update.startState.field(completionState) == cState) return;\n\t\tlet doesReset = update.transactions.some((tr) => {\n\t\t\tlet type = getUpdateType(tr, conf);\n\t\t\treturn type & 8 || (tr.selection || tr.docChanged) && !(type & 3);\n\t\t});\n\t\tfor (let i = 0; i < this.running.length; i++) {\n\t\t\tlet query = this.running[i];\n\t\t\tif (doesReset || query.context.abortOnDocChange && update.docChanged || query.updates.length + update.transactions.length > MaxUpdateCount && Date.now() - query.time > MinAbortTime) {\n\t\t\t\tfor (let handler of query.context.abortListeners) try {\n\t\t\t\t\thandler();\n\t\t\t\t} catch (e) {\n\t\t\t\t\tlogException(this.view.state, e);\n\t\t\t\t}\n\t\t\t\tquery.context.abortListeners = null;\n\t\t\t\tthis.running.splice(i--, 1);\n\t\t\t} else query.updates.push(...update.transactions);\n\t\t}\n\t\tif (this.debounceUpdate > -1) clearTimeout(this.debounceUpdate);\n\t\tif (update.transactions.some((tr) => tr.effects.some((e) => e.is(startCompletionEffect)))) this.pendingStart = true;\n\t\tlet delay = this.pendingStart ? 50 : conf.activateOnTypingDelay;\n\t\tthis.debounceUpdate = cState.active.some((a) => a.isPending && !this.running.some((q) => q.active.source == a.source)) ? setTimeout(() => this.startUpdate(), delay) : -1;\n\t\tif (this.composing != 0) {\n\t\t\tfor (let tr of update.transactions) if (tr.isUserEvent(\"input.type\")) this.composing = 2;\n\t\t\telse if (this.composing == 2 && tr.selection) this.composing = 3;\n\t\t}\n\t}\n\tstartUpdate() {\n\t\tthis.debounceUpdate = -1;\n\t\tthis.pendingStart = false;\n\t\tlet { state } = this.view, cState = state.field(completionState);\n\t\tfor (let active of cState.active) if (active.isPending && !this.running.some((r) => r.active.source == active.source)) this.startQuery(active);\n\t\tif (this.running.length && cState.open && cState.open.disabled) this.debounceAccept = setTimeout(() => this.accept(), this.view.state.facet(completionConfig).updateSyncTime);\n\t}\n\tstartQuery(active) {\n\t\tlet { state } = this.view;\n\t\tlet context = new CompletionContext(state, cur(state), active.explicit, this.view);\n\t\tlet pending = new RunningQuery(active, context);\n\t\tthis.running.push(pending);\n\t\tPromise.resolve(active.source(context)).then((result) => {\n\t\t\tif (!pending.context.aborted) {\n\t\t\t\tpending.done = result || null;\n\t\t\t\tthis.scheduleAccept();\n\t\t\t}\n\t\t}, (err) => {\n\t\t\tthis.view.dispatch({ effects: closeCompletionEffect.of(null) });\n\t\t\tlogException(this.view.state, err);\n\t\t});\n\t}\n\tscheduleAccept() {\n\t\tif (this.running.every((q) => q.done !== void 0)) this.accept();\n\t\telse if (this.debounceAccept < 0) this.debounceAccept = setTimeout(() => this.accept(), this.view.state.facet(completionConfig).updateSyncTime);\n\t}\n\taccept() {\n\t\tvar _a;\n\t\tif (this.debounceAccept > -1) clearTimeout(this.debounceAccept);\n\t\tthis.debounceAccept = -1;\n\t\tlet updated = [];\n\t\tlet conf = this.view.state.facet(completionConfig), cState = this.view.state.field(completionState);\n\t\tfor (let i = 0; i < this.running.length; i++) {\n\t\t\tlet query = this.running[i];\n\t\t\tif (query.done === void 0) continue;\n\t\t\tthis.running.splice(i--, 1);\n\t\t\tif (query.done) {\n\t\t\t\tlet pos = cur(query.updates.length ? query.updates[0].startState : this.view.state);\n\t\t\t\tlet limit = Math.min(pos, query.done.from + (query.active.explicit ? 0 : 1));\n\t\t\t\tlet active = new ActiveResult(query.active.source, query.active.explicit, limit, query.done, query.done.from, (_a = query.done.to) !== null && _a !== void 0 ? _a : pos);\n\t\t\t\tfor (let tr of query.updates) active = active.update(tr, conf);\n\t\t\t\tif (active.hasResult()) {\n\t\t\t\t\tupdated.push(active);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\tlet current = cState.active.find((a) => a.source == query.active.source);\n\t\t\tif (current && current.isPending) if (query.done == null) {\n\t\t\t\tlet active = new ActiveSource(query.active.source, 0);\n\t\t\t\tfor (let tr of query.updates) active = active.update(tr, conf);\n\t\t\t\tif (!active.isPending) updated.push(active);\n\t\t\t} else this.startQuery(current);\n\t\t}\n\t\tif (updated.length || cState.open && cState.open.disabled) this.view.dispatch({ effects: setActiveEffect.of(updated) });\n\t}\n}, { eventHandlers: {\n\tblur(event) {\n\t\tlet state = this.view.state.field(completionState, false);\n\t\tif (state && state.tooltip && this.view.state.facet(completionConfig).closeOnBlur) {\n\t\t\tlet dialog = state.open && getTooltip(this.view, state.open.tooltip);\n\t\t\tif (!dialog || !dialog.dom.contains(event.relatedTarget)) setTimeout(() => this.view.dispatch({ effects: closeCompletionEffect.of(null) }), 10);\n\t\t}\n\t},\n\tcompositionstart() {\n\t\tthis.composing = 1;\n\t},\n\tcompositionend() {\n\t\tif (this.composing == 3) setTimeout(() => this.view.dispatch({ effects: startCompletionEffect.of(false) }), 20);\n\t\tthis.composing = 0;\n\t}\n} });\nconst windows = typeof navigator == \"object\" && /* @__PURE__ */ /Win/.test(navigator.platform);\nconst commitCharacters = /* @__PURE__ */ Prec.highest(/* @__PURE__ */ EditorView.domEventHandlers({ keydown(event, view) {\n\tlet field = view.state.field(completionState, false);\n\tif (!field || !field.open || field.open.disabled || field.open.selected < 0 || event.key.length > 1 || event.ctrlKey && !(windows && event.altKey) || event.metaKey) return false;\n\tlet option = field.open.options[field.open.selected];\n\tlet result = field.active.find((a) => a.source == option.source);\n\tlet commitChars = option.completion.commitCharacters || result.result.commitCharacters;\n\tif (commitChars && commitChars.indexOf(event.key) > -1) applyCompletion(view, option);\n\treturn false;\n} }));\nconst baseTheme$2 = /* @__PURE__ */ EditorView.baseTheme({\n\t\".cm-tooltip.cm-tooltip-autocomplete\": { \"& > ul\": {\n\t\tfontFamily: \"monospace\",\n\t\twhiteSpace: \"nowrap\",\n\t\toverflow: \"hidden auto\",\n\t\tmaxWidth_fallback: \"700px\",\n\t\tmaxWidth: \"min(700px, 95vw)\",\n\t\tminWidth: \"250px\",\n\t\tmaxHeight: \"10em\",\n\t\theight: \"100%\",\n\t\tlistStyle: \"none\",\n\t\tmargin: 0,\n\t\tpadding: 0,\n\t\t\"& > li, & > completion-section\": {\n\t\t\tpadding: \"1px 3px\",\n\t\t\tlineHeight: 1.2\n\t\t},\n\t\t\"& > li\": {\n\t\t\toverflowX: \"hidden\",\n\t\t\ttextOverflow: \"ellipsis\",\n\t\t\tcursor: \"pointer\"\n\t\t},\n\t\t\"& > completion-section\": {\n\t\t\tdisplay: \"list-item\",\n\t\t\tborderBottom: \"1px solid silver\",\n\t\t\tpaddingLeft: \"0.5em\",\n\t\t\topacity: .7\n\t\t}\n\t} },\n\t\"&light .cm-tooltip-autocomplete ul li[aria-selected]\": {\n\t\tbackground: \"#17c\",\n\t\tcolor: \"white\"\n\t},\n\t\"&light .cm-tooltip-autocomplete-disabled ul li[aria-selected]\": { background: \"#777\" },\n\t\"&dark .cm-tooltip-autocomplete ul li[aria-selected]\": {\n\t\tbackground: \"#347\",\n\t\tcolor: \"white\"\n\t},\n\t\"&dark .cm-tooltip-autocomplete-disabled ul li[aria-selected]\": { background: \"#444\" },\n\t\".cm-completionListIncompleteTop:before, .cm-completionListIncompleteBottom:after\": {\n\t\tcontent: \"\\\"···\\\"\",\n\t\topacity: .5,\n\t\tdisplay: \"block\",\n\t\ttextAlign: \"center\"\n\t},\n\t\".cm-tooltip.cm-completionInfo\": {\n\t\tposition: \"absolute\",\n\t\tpadding: \"3px 9px\",\n\t\twidth: \"max-content\",\n\t\tmaxWidth: `400px`,\n\t\tboxSizing: \"border-box\",\n\t\twhiteSpace: \"pre-line\"\n\t},\n\t\".cm-completionInfo.cm-completionInfo-left\": { right: \"100%\" },\n\t\".cm-completionInfo.cm-completionInfo-right\": { left: \"100%\" },\n\t\".cm-completionInfo.cm-completionInfo-left-narrow\": { right: `30px` },\n\t\".cm-completionInfo.cm-completionInfo-right-narrow\": { left: `30px` },\n\t\"&light .cm-snippetField\": { backgroundColor: \"#00000022\" },\n\t\"&dark .cm-snippetField\": { backgroundColor: \"#ffffff22\" },\n\t\".cm-snippetFieldPosition\": {\n\t\tverticalAlign: \"text-top\",\n\t\twidth: 0,\n\t\theight: \"1.15em\",\n\t\tdisplay: \"inline-block\",\n\t\tmargin: \"0 -0.7px -.7em\",\n\t\tborderLeft: \"1.4px dotted #888\"\n\t},\n\t\".cm-completionMatchedText\": { textDecoration: \"underline\" },\n\t\".cm-completionDetail\": {\n\t\tmarginLeft: \"0.5em\",\n\t\tfontStyle: \"italic\"\n\t},\n\t\".cm-completionIcon\": {\n\t\tfontSize: \"90%\",\n\t\twidth: \".8em\",\n\t\tdisplay: \"inline-block\",\n\t\ttextAlign: \"center\",\n\t\tpaddingRight: \".6em\",\n\t\topacity: \"0.6\",\n\t\tboxSizing: \"content-box\"\n\t},\n\t\".cm-completionIcon-function, .cm-completionIcon-method\": { \"&:after\": { content: \"'ƒ'\" } },\n\t\".cm-completionIcon-class\": { \"&:after\": { content: \"'○'\" } },\n\t\".cm-completionIcon-interface\": { \"&:after\": { content: \"'◌'\" } },\n\t\".cm-completionIcon-variable\": { \"&:after\": { content: \"'𝑥'\" } },\n\t\".cm-completionIcon-constant\": { \"&:after\": { content: \"'𝐶'\" } },\n\t\".cm-completionIcon-type\": { \"&:after\": { content: \"'𝑡'\" } },\n\t\".cm-completionIcon-enum\": { \"&:after\": { content: \"'∪'\" } },\n\t\".cm-completionIcon-property\": { \"&:after\": { content: \"'□'\" } },\n\t\".cm-completionIcon-keyword\": { \"&:after\": { content: \"'🔑︎'\" } },\n\t\".cm-completionIcon-namespace\": { \"&:after\": { content: \"'▢'\" } },\n\t\".cm-completionIcon-text\": { \"&:after\": {\n\t\tcontent: \"'abc'\",\n\t\tfontSize: \"50%\",\n\t\tverticalAlign: \"middle\"\n\t} }\n});\nconst defaults = {\n\tbrackets: [\n\t\t\"(\",\n\t\t\"[\",\n\t\t\"{\",\n\t\t\"'\",\n\t\t\"\\\"\"\n\t],\n\tbefore: \")]}:;>\",\n\tstringPrefixes: []\n};\nconst closeBracketEffect = /* @__PURE__ */ StateEffect.define({ map(value, mapping) {\n\tlet mapped = mapping.mapPos(value, -1, MapMode.TrackAfter);\n\treturn mapped == null ? void 0 : mapped;\n} });\nconst closedBracket = /* @__PURE__ */ new class extends RangeValue {}();\nclosedBracket.startSide = 1;\nclosedBracket.endSide = -1;\nconst bracketState = /* @__PURE__ */ StateField.define({\n\tcreate() {\n\t\treturn RangeSet.empty;\n\t},\n\tupdate(value, tr) {\n\t\tvalue = value.map(tr.changes);\n\t\tif (tr.selection) {\n\t\t\tlet line = tr.state.doc.lineAt(tr.selection.main.head);\n\t\t\tvalue = value.update({ filter: (from) => from >= line.from && from <= line.to });\n\t\t}\n\t\tfor (let effect of tr.effects) if (effect.is(closeBracketEffect)) value = value.update({ add: [closedBracket.range(effect.value, effect.value + 1)] });\n\t\treturn value;\n\t}\n});\n/**\nExtension to enable bracket-closing behavior. When a closeable\nbracket is typed, its closing bracket is immediately inserted\nafter the cursor. When closing a bracket directly in front of a\nclosing bracket inserted by the extension, the cursor moves over\nthat bracket.\n*/\nfunction closeBrackets() {\n\treturn [inputHandler, bracketState];\n}\nconst definedClosing = \"()[]{}<>«»»«[]{}\";\nfunction closing(ch) {\n\tfor (let i = 0; i < 16; i += 2) if (definedClosing.charCodeAt(i) == ch) return definedClosing.charAt(i + 1);\n\treturn fromCodePoint(ch < 128 ? ch : ch + 1);\n}\nfunction config(state, pos) {\n\treturn state.languageDataAt(\"closeBrackets\", pos)[0] || defaults;\n}\nconst android = typeof navigator == \"object\" && /* @__PURE__ */ /Android\\b/.test(navigator.userAgent);\nconst inputHandler = /* @__PURE__ */ EditorView.inputHandler.of((view, from, to, insert) => {\n\tif ((android ? view.composing : view.compositionStarted) || view.state.readOnly) return false;\n\tlet sel = view.state.selection.main;\n\tif (insert.length > 2 || insert.length == 2 && codePointSize(codePointAt(insert, 0)) == 1 || from != sel.from || to != sel.to) return false;\n\tlet tr = insertBracket(view.state, insert);\n\tif (!tr) return false;\n\tview.dispatch(tr);\n\treturn true;\n});\n/**\nCommand that implements deleting a pair of matching brackets when\nthe cursor is between them.\n*/\nconst deleteBracketPair = ({ state, dispatch }) => {\n\tif (state.readOnly) return false;\n\tlet tokens = config(state, state.selection.main.head).brackets || defaults.brackets;\n\tlet dont = null, changes = state.changeByRange((range) => {\n\t\tif (range.empty) {\n\t\t\tlet before = prevChar(state.doc, range.head);\n\t\t\tfor (let token of tokens) if (token == before && nextChar(state.doc, range.head) == closing(codePointAt(token, 0))) return {\n\t\t\t\tchanges: {\n\t\t\t\t\tfrom: range.head - token.length,\n\t\t\t\t\tto: range.head + token.length\n\t\t\t\t},\n\t\t\t\trange: EditorSelection.cursor(range.head - token.length)\n\t\t\t};\n\t\t}\n\t\treturn { range: dont = range };\n\t});\n\tif (!dont) dispatch(state.update(changes, {\n\t\tscrollIntoView: true,\n\t\tuserEvent: \"delete.backward\"\n\t}));\n\treturn !dont;\n};\n/**\nClose-brackets related key bindings. Binds Backspace to\n[`deleteBracketPair`](https://codemirror.net/6/docs/ref/#autocomplete.deleteBracketPair).\n*/\nconst closeBracketsKeymap = [{\n\tkey: \"Backspace\",\n\trun: deleteBracketPair\n}];\n/**\nImplements the extension's behavior on text insertion. If the\ngiven string counts as a bracket in the language around the\nselection, and replacing the selection with it requires custom\nbehavior (inserting a closing version or skipping past a\npreviously-closed bracket), this function returns a transaction\nrepresenting that custom behavior. (You only need this if you want\nto programmatically insert brackets—the\n[`closeBrackets`](https://codemirror.net/6/docs/ref/#autocomplete.closeBrackets) extension will\ntake care of running this for user input.)\n*/\nfunction insertBracket(state, bracket) {\n\tlet conf = config(state, state.selection.main.head);\n\tlet tokens = conf.brackets || defaults.brackets;\n\tfor (let tok of tokens) {\n\t\tlet closed = closing(codePointAt(tok, 0));\n\t\tif (bracket == tok) return closed == tok ? handleSame(state, tok, tokens.indexOf(tok + tok + tok) > -1, conf) : handleOpen(state, tok, closed, conf.before || defaults.before);\n\t\tif (bracket == closed && closedBracketAt(state, state.selection.main.from)) return handleClose(state, tok, closed);\n\t}\n\treturn null;\n}\nfunction closedBracketAt(state, pos) {\n\tlet found = false;\n\tstate.field(bracketState).between(0, state.doc.length, (from) => {\n\t\tif (from == pos) found = true;\n\t});\n\treturn found;\n}\nfunction nextChar(doc, pos) {\n\tlet next = doc.sliceString(pos, pos + 2);\n\treturn next.slice(0, codePointSize(codePointAt(next, 0)));\n}\nfunction prevChar(doc, pos) {\n\tlet prev = doc.sliceString(pos - 2, pos);\n\treturn codePointSize(codePointAt(prev, 0)) == prev.length ? prev : prev.slice(1);\n}\nfunction handleOpen(state, open, close, closeBefore) {\n\tlet dont = null, changes = state.changeByRange((range) => {\n\t\tif (!range.empty) return {\n\t\t\tchanges: [{\n\t\t\t\tinsert: open,\n\t\t\t\tfrom: range.from\n\t\t\t}, {\n\t\t\t\tinsert: close,\n\t\t\t\tfrom: range.to\n\t\t\t}],\n\t\t\teffects: closeBracketEffect.of(range.to + open.length),\n\t\t\trange: EditorSelection.range(range.anchor + open.length, range.head + open.length)\n\t\t};\n\t\tlet next = nextChar(state.doc, range.head);\n\t\tif (!next || /\\s/.test(next) || closeBefore.indexOf(next) > -1) return {\n\t\t\tchanges: {\n\t\t\t\tinsert: open + close,\n\t\t\t\tfrom: range.head\n\t\t\t},\n\t\t\teffects: closeBracketEffect.of(range.head + open.length),\n\t\t\trange: EditorSelection.cursor(range.head + open.length)\n\t\t};\n\t\treturn { range: dont = range };\n\t});\n\treturn dont ? null : state.update(changes, {\n\t\tscrollIntoView: true,\n\t\tuserEvent: \"input.type\"\n\t});\n}\nfunction handleClose(state, _open, close) {\n\tlet dont = null, changes = state.changeByRange((range) => {\n\t\tif (range.empty && nextChar(state.doc, range.head) == close) return {\n\t\t\tchanges: {\n\t\t\t\tfrom: range.head,\n\t\t\t\tto: range.head + close.length,\n\t\t\t\tinsert: close\n\t\t\t},\n\t\t\trange: EditorSelection.cursor(range.head + close.length)\n\t\t};\n\t\treturn dont = { range };\n\t});\n\treturn dont ? null : state.update(changes, {\n\t\tscrollIntoView: true,\n\t\tuserEvent: \"input.type\"\n\t});\n}\nfunction handleSame(state, token, allowTriple, config) {\n\tlet stringPrefixes = config.stringPrefixes || defaults.stringPrefixes;\n\tlet dont = null, changes = state.changeByRange((range) => {\n\t\tif (!range.empty) return {\n\t\t\tchanges: [{\n\t\t\t\tinsert: token,\n\t\t\t\tfrom: range.from\n\t\t\t}, {\n\t\t\t\tinsert: token,\n\t\t\t\tfrom: range.to\n\t\t\t}],\n\t\t\teffects: closeBracketEffect.of(range.to + token.length),\n\t\t\trange: EditorSelection.range(range.anchor + token.length, range.head + token.length)\n\t\t};\n\t\tlet pos = range.head, next = nextChar(state.doc, pos), start;\n\t\tif (next == token) {\n\t\t\tif (nodeStart(state, pos)) return {\n\t\t\t\tchanges: {\n\t\t\t\t\tinsert: token + token,\n\t\t\t\t\tfrom: pos\n\t\t\t\t},\n\t\t\t\teffects: closeBracketEffect.of(pos + token.length),\n\t\t\t\trange: EditorSelection.cursor(pos + token.length)\n\t\t\t};\n\t\t\telse if (closedBracketAt(state, pos)) {\n\t\t\t\tlet content = allowTriple && state.sliceDoc(pos, pos + token.length * 3) == token + token + token ? token + token + token : token;\n\t\t\t\treturn {\n\t\t\t\t\tchanges: {\n\t\t\t\t\t\tfrom: pos,\n\t\t\t\t\t\tto: pos + content.length,\n\t\t\t\t\t\tinsert: content\n\t\t\t\t\t},\n\t\t\t\t\trange: EditorSelection.cursor(pos + content.length)\n\t\t\t\t};\n\t\t\t}\n\t\t} else if (allowTriple && state.sliceDoc(pos - 2 * token.length, pos) == token + token && (start = canStartStringAt(state, pos - 2 * token.length, stringPrefixes)) > -1 && nodeStart(state, start)) return {\n\t\t\tchanges: {\n\t\t\t\tinsert: token + token + token + token,\n\t\t\t\tfrom: pos\n\t\t\t},\n\t\t\teffects: closeBracketEffect.of(pos + token.length),\n\t\t\trange: EditorSelection.cursor(pos + token.length)\n\t\t};\n\t\telse if (state.charCategorizer(pos)(next) != CharCategory.Word) {\n\t\t\tif (canStartStringAt(state, pos, stringPrefixes) > -1 && !probablyInString(state, pos, token, stringPrefixes)) return {\n\t\t\t\tchanges: {\n\t\t\t\t\tinsert: token + token,\n\t\t\t\t\tfrom: pos\n\t\t\t\t},\n\t\t\t\teffects: closeBracketEffect.of(pos + token.length),\n\t\t\t\trange: EditorSelection.cursor(pos + token.length)\n\t\t\t};\n\t\t}\n\t\treturn { range: dont = range };\n\t});\n\treturn dont ? null : state.update(changes, {\n\t\tscrollIntoView: true,\n\t\tuserEvent: \"input.type\"\n\t});\n}\nfunction nodeStart(state, pos) {\n\tlet tree = syntaxTree(state).resolveInner(pos + 1);\n\treturn tree.parent && tree.from == pos;\n}\nfunction probablyInString(state, pos, quoteToken, prefixes) {\n\tlet node = syntaxTree(state).resolveInner(pos, -1);\n\tlet maxPrefix = prefixes.reduce((m, p) => Math.max(m, p.length), 0);\n\tfor (let i = 0; i < 5; i++) {\n\t\tlet start = state.sliceDoc(node.from, Math.min(node.to, node.from + quoteToken.length + maxPrefix));\n\t\tlet quotePos = start.indexOf(quoteToken);\n\t\tif (!quotePos || quotePos > -1 && prefixes.indexOf(start.slice(0, quotePos)) > -1) {\n\t\t\tlet first = node.firstChild;\n\t\t\twhile (first && first.from == node.from && first.to - first.from > quoteToken.length + quotePos) {\n\t\t\t\tif (state.sliceDoc(first.to - quoteToken.length, first.to) == quoteToken) return false;\n\t\t\t\tfirst = first.firstChild;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\tlet parent = node.to == pos && node.parent;\n\t\tif (!parent) break;\n\t\tnode = parent;\n\t}\n\treturn false;\n}\nfunction canStartStringAt(state, pos, prefixes) {\n\tlet charCat = state.charCategorizer(pos);\n\tif (charCat(state.sliceDoc(pos - 1, pos)) != CharCategory.Word) return pos;\n\tfor (let prefix of prefixes) {\n\t\tlet start = pos - prefix.length;\n\t\tif (state.sliceDoc(start, pos) == prefix && charCat(state.sliceDoc(start - 1, start)) != CharCategory.Word) return start;\n\t}\n\treturn -1;\n}\n/**\nReturns an extension that enables autocompletion.\n*/\nfunction autocompletion(config = {}) {\n\treturn [\n\t\tcommitCharacters,\n\t\tcompletionState,\n\t\tcompletionConfig.of(config),\n\t\tcompletionPlugin,\n\t\tcompletionKeymapExt,\n\t\tbaseTheme$2\n\t];\n}\n/**\nBasic keybindings for autocompletion.\n\n- Ctrl-Space (and Alt-\\` on macOS): [`startCompletion`](https://codemirror.net/6/docs/ref/#autocomplete.startCompletion)\n- Escape: [`closeCompletion`](https://codemirror.net/6/docs/ref/#autocomplete.closeCompletion)\n- ArrowDown: [`moveCompletionSelection`](https://codemirror.net/6/docs/ref/#autocomplete.moveCompletionSelection)`(true)`\n- ArrowUp: [`moveCompletionSelection`](https://codemirror.net/6/docs/ref/#autocomplete.moveCompletionSelection)`(false)`\n- PageDown: [`moveCompletionSelection`](https://codemirror.net/6/docs/ref/#autocomplete.moveCompletionSelection)`(true, \"page\")`\n- PageDown: [`moveCompletionSelection`](https://codemirror.net/6/docs/ref/#autocomplete.moveCompletionSelection)`(true, \"page\")`\n- Enter: [`acceptCompletion`](https://codemirror.net/6/docs/ref/#autocomplete.acceptCompletion)\n*/\nconst completionKeymap = [\n\t{\n\t\tkey: \"Ctrl-Space\",\n\t\trun: startCompletion\n\t},\n\t{\n\t\tmac: \"Alt-`\",\n\t\trun: startCompletion\n\t},\n\t{\n\t\tkey: \"Escape\",\n\t\trun: closeCompletion\n\t},\n\t{\n\t\tkey: \"ArrowDown\",\n\t\trun: /* @__PURE__ */ moveCompletionSelection(true)\n\t},\n\t{\n\t\tkey: \"ArrowUp\",\n\t\trun: /* @__PURE__ */ moveCompletionSelection(false)\n\t},\n\t{\n\t\tkey: \"PageDown\",\n\t\trun: /* @__PURE__ */ moveCompletionSelection(true, \"page\")\n\t},\n\t{\n\t\tkey: \"PageUp\",\n\t\trun: /* @__PURE__ */ moveCompletionSelection(false, \"page\")\n\t},\n\t{\n\t\tkey: \"Enter\",\n\t\trun: acceptCompletion\n\t}\n];\nconst completionKeymapExt = /* @__PURE__ */ Prec.highest(/* @__PURE__ */ keymap.computeN([completionConfig], (state) => state.facet(completionConfig).defaultKeymap ? [completionKeymap] : []));\n//#endregion\n//#region ../../node_modules/.pnpm/@codemirror+commands@6.8.1/node_modules/@codemirror/commands/dist/index.js\n/**\nComment or uncomment the current selection. Will use line comments\nif available, otherwise falling back to block comments.\n*/\nconst toggleComment = (target) => {\n\tlet { state } = target, line = state.doc.lineAt(state.selection.main.from), config = getConfig(target.state, line.from);\n\treturn config.line ? toggleLineComment(target) : config.block ? toggleBlockCommentByLine(target) : false;\n};\nfunction command(f, option) {\n\treturn ({ state, dispatch }) => {\n\t\tif (state.readOnly) return false;\n\t\tlet tr = f(option, state);\n\t\tif (!tr) return false;\n\t\tdispatch(state.update(tr));\n\t\treturn true;\n\t};\n}\n/**\nComment or uncomment the current selection using line comments.\nThe line comment syntax is taken from the\n[`commentTokens`](https://codemirror.net/6/docs/ref/#commands.CommentTokens) [language\ndata](https://codemirror.net/6/docs/ref/#state.EditorState.languageDataAt).\n*/\nconst toggleLineComment = /* @__PURE__ */ command(changeLineComment, 0);\n/**\nComment or uncomment the current selection using block comments.\nThe block comment syntax is taken from the\n[`commentTokens`](https://codemirror.net/6/docs/ref/#commands.CommentTokens) [language\ndata](https://codemirror.net/6/docs/ref/#state.EditorState.languageDataAt).\n*/\nconst toggleBlockComment = /* @__PURE__ */ command(changeBlockComment, 0);\n/**\nComment or uncomment the lines around the current selection using\nblock comments.\n*/\nconst toggleBlockCommentByLine = /* @__PURE__ */ command((o, s) => changeBlockComment(o, s, selectedLineRanges(s)), 0);\nfunction getConfig(state, pos) {\n\tlet data = state.languageDataAt(\"commentTokens\", pos, 1);\n\treturn data.length ? data[0] : {};\n}\nconst SearchMargin = 50;\n/**\nDetermines if the given range is block-commented in the given\nstate.\n*/\nfunction findBlockComment(state, { open, close }, from, to) {\n\tlet textBefore = state.sliceDoc(from - SearchMargin, from);\n\tlet textAfter = state.sliceDoc(to, to + SearchMargin);\n\tlet spaceBefore = /\\s*$/.exec(textBefore)[0].length, spaceAfter = /^\\s*/.exec(textAfter)[0].length;\n\tlet beforeOff = textBefore.length - spaceBefore;\n\tif (textBefore.slice(beforeOff - open.length, beforeOff) == open && textAfter.slice(spaceAfter, spaceAfter + close.length) == close) return {\n\t\topen: {\n\t\t\tpos: from - spaceBefore,\n\t\t\tmargin: spaceBefore && 1\n\t\t},\n\t\tclose: {\n\t\t\tpos: to + spaceAfter,\n\t\t\tmargin: spaceAfter && 1\n\t\t}\n\t};\n\tlet startText, endText;\n\tif (to - from <= 2 * SearchMargin) startText = endText = state.sliceDoc(from, to);\n\telse {\n\t\tstartText = state.sliceDoc(from, from + SearchMargin);\n\t\tendText = state.sliceDoc(to - SearchMargin, to);\n\t}\n\tlet startSpace = /^\\s*/.exec(startText)[0].length, endSpace = /\\s*$/.exec(endText)[0].length;\n\tlet endOff = endText.length - endSpace - close.length;\n\tif (startText.slice(startSpace, startSpace + open.length) == open && endText.slice(endOff, endOff + close.length) == close) return {\n\t\topen: {\n\t\t\tpos: from + startSpace + open.length,\n\t\t\tmargin: /\\s/.test(startText.charAt(startSpace + open.length)) ? 1 : 0\n\t\t},\n\t\tclose: {\n\t\t\tpos: to - endSpace - close.length,\n\t\t\tmargin: /\\s/.test(endText.charAt(endOff - 1)) ? 1 : 0\n\t\t}\n\t};\n\treturn null;\n}\nfunction selectedLineRanges(state) {\n\tlet ranges = [];\n\tfor (let r of state.selection.ranges) {\n\t\tlet fromLine = state.doc.lineAt(r.from);\n\t\tlet toLine = r.to <= fromLine.to ? fromLine : state.doc.lineAt(r.to);\n\t\tif (toLine.from > fromLine.from && toLine.from == r.to) toLine = r.to == fromLine.to + 1 ? fromLine : state.doc.lineAt(r.to - 1);\n\t\tlet last = ranges.length - 1;\n\t\tif (last >= 0 && ranges[last].to > fromLine.from) ranges[last].to = toLine.to;\n\t\telse ranges.push({\n\t\t\tfrom: fromLine.from + /^\\s*/.exec(fromLine.text)[0].length,\n\t\t\tto: toLine.to\n\t\t});\n\t}\n\treturn ranges;\n}\nfunction changeBlockComment(option, state, ranges = state.selection.ranges) {\n\tlet tokens = ranges.map((r) => getConfig(state, r.from).block);\n\tif (!tokens.every((c) => c)) return null;\n\tlet comments = ranges.map((r, i) => findBlockComment(state, tokens[i], r.from, r.to));\n\tif (option != 2 && !comments.every((c) => c)) return { changes: state.changes(ranges.map((range, i) => {\n\t\tif (comments[i]) return [];\n\t\treturn [{\n\t\t\tfrom: range.from,\n\t\t\tinsert: tokens[i].open + \" \"\n\t\t}, {\n\t\t\tfrom: range.to,\n\t\t\tinsert: \" \" + tokens[i].close\n\t\t}];\n\t})) };\n\telse if (option != 1 && comments.some((c) => c)) {\n\t\tlet changes = [];\n\t\tfor (let i = 0, comment; i < comments.length; i++) if (comment = comments[i]) {\n\t\t\tlet token = tokens[i], { open, close } = comment;\n\t\t\tchanges.push({\n\t\t\t\tfrom: open.pos - token.open.length,\n\t\t\t\tto: open.pos + open.margin\n\t\t\t}, {\n\t\t\t\tfrom: close.pos - close.margin,\n\t\t\t\tto: close.pos + token.close.length\n\t\t\t});\n\t\t}\n\t\treturn { changes };\n\t}\n\treturn null;\n}\nfunction changeLineComment(option, state, ranges = state.selection.ranges) {\n\tlet lines = [];\n\tlet prevLine = -1;\n\tfor (let { from, to } of ranges) {\n\t\tlet startI = lines.length, minIndent = 1e9;\n\t\tlet token = getConfig(state, from).line;\n\t\tif (!token) continue;\n\t\tfor (let pos = from; pos <= to;) {\n\t\t\tlet line = state.doc.lineAt(pos);\n\t\t\tif (line.from > prevLine && (from == to || to > line.from)) {\n\t\t\t\tprevLine = line.from;\n\t\t\t\tlet indent = /^\\s*/.exec(line.text)[0].length;\n\t\t\t\tlet empty = indent == line.length;\n\t\t\t\tlet comment = line.text.slice(indent, indent + token.length) == token ? indent : -1;\n\t\t\t\tif (indent < line.text.length && indent < minIndent) minIndent = indent;\n\t\t\t\tlines.push({\n\t\t\t\t\tline,\n\t\t\t\t\tcomment,\n\t\t\t\t\ttoken,\n\t\t\t\t\tindent,\n\t\t\t\t\tempty,\n\t\t\t\t\tsingle: false\n\t\t\t\t});\n\t\t\t}\n\t\t\tpos = line.to + 1;\n\t\t}\n\t\tif (minIndent < 1e9) {\n\t\t\tfor (let i = startI; i < lines.length; i++) if (lines[i].indent < lines[i].line.text.length) lines[i].indent = minIndent;\n\t\t}\n\t\tif (lines.length == startI + 1) lines[startI].single = true;\n\t}\n\tif (option != 2 && lines.some((l) => l.comment < 0 && (!l.empty || l.single))) {\n\t\tlet changes = [];\n\t\tfor (let { line, token, indent, empty, single } of lines) if (single || !empty) changes.push({\n\t\t\tfrom: line.from + indent,\n\t\t\tinsert: token + \" \"\n\t\t});\n\t\tlet changeSet = state.changes(changes);\n\t\treturn {\n\t\t\tchanges: changeSet,\n\t\t\tselection: state.selection.map(changeSet, 1)\n\t\t};\n\t} else if (option != 1 && lines.some((l) => l.comment >= 0)) {\n\t\tlet changes = [];\n\t\tfor (let { line, comment, token } of lines) if (comment >= 0) {\n\t\t\tlet from = line.from + comment, to = from + token.length;\n\t\t\tif (line.text[to - line.from] == \" \") to++;\n\t\t\tchanges.push({\n\t\t\t\tfrom,\n\t\t\t\tto\n\t\t\t});\n\t\t}\n\t\treturn { changes };\n\t}\n\treturn null;\n}\nconst fromHistory = /* @__PURE__ */ Annotation.define();\n/**\nTransaction annotation that will prevent that transaction from\nbeing combined with other transactions in the undo history. Given\n`\"before\"`, it'll prevent merging with previous transactions. With\n`\"after\"`, subsequent transactions won't be combined with this\none. With `\"full\"`, the transaction is isolated on both sides.\n*/\nconst isolateHistory = /* @__PURE__ */ Annotation.define();\n/**\nThis facet provides a way to register functions that, given a\ntransaction, provide a set of effects that the history should\nstore when inverting the transaction. This can be used to\nintegrate some kinds of effects in the history, so that they can\nbe undone (and redone again).\n*/\nconst invertedEffects = /* @__PURE__ */ Facet.define();\nconst historyConfig = /* @__PURE__ */ Facet.define({ combine(configs) {\n\treturn combineConfig(configs, {\n\t\tminDepth: 100,\n\t\tnewGroupDelay: 500,\n\t\tjoinToEvent: (_t, isAdjacent) => isAdjacent\n\t}, {\n\t\tminDepth: Math.max,\n\t\tnewGroupDelay: Math.min,\n\t\tjoinToEvent: (a, b) => (tr, adj) => a(tr, adj) || b(tr, adj)\n\t});\n} });\nconst historyField_ = /* @__PURE__ */ StateField.define({\n\tcreate() {\n\t\treturn HistoryState.empty;\n\t},\n\tupdate(state, tr) {\n\t\tlet config = tr.state.facet(historyConfig);\n\t\tlet fromHist = tr.annotation(fromHistory);\n\t\tif (fromHist) {\n\t\t\tlet item = HistEvent.fromTransaction(tr, fromHist.selection), from = fromHist.side;\n\t\t\tlet other = from == 0 ? state.undone : state.done;\n\t\t\tif (item) other = updateBranch(other, other.length, config.minDepth, item);\n\t\t\telse other = addSelection(other, tr.startState.selection);\n\t\t\treturn new HistoryState(from == 0 ? fromHist.rest : other, from == 0 ? other : fromHist.rest);\n\t\t}\n\t\tlet isolate = tr.annotation(isolateHistory);\n\t\tif (isolate == \"full\" || isolate == \"before\") state = state.isolate();\n\t\tif (tr.annotation(Transaction.addToHistory) === false) return !tr.changes.empty ? state.addMapping(tr.changes.desc) : state;\n\t\tlet event = HistEvent.fromTransaction(tr);\n\t\tlet time = tr.annotation(Transaction.time), userEvent = tr.annotation(Transaction.userEvent);\n\t\tif (event) state = state.addChanges(event, time, userEvent, config, tr);\n\t\telse if (tr.selection) state = state.addSelection(tr.startState.selection, time, userEvent, config.newGroupDelay);\n\t\tif (isolate == \"full\" || isolate == \"after\") state = state.isolate();\n\t\treturn state;\n\t},\n\ttoJSON(value) {\n\t\treturn {\n\t\t\tdone: value.done.map((e) => e.toJSON()),\n\t\t\tundone: value.undone.map((e) => e.toJSON())\n\t\t};\n\t},\n\tfromJSON(json) {\n\t\treturn new HistoryState(json.done.map(HistEvent.fromJSON), json.undone.map(HistEvent.fromJSON));\n\t}\n});\n/**\nCreate a history extension with the given configuration.\n*/\nfunction history(config = {}) {\n\treturn [\n\t\thistoryField_,\n\t\thistoryConfig.of(config),\n\t\tEditorView.domEventHandlers({ beforeinput(e, view) {\n\t\t\tlet command = e.inputType == \"historyUndo\" ? undo : e.inputType == \"historyRedo\" ? redo : null;\n\t\t\tif (!command) return false;\n\t\t\te.preventDefault();\n\t\t\treturn command(view);\n\t\t} })\n\t];\n}\nfunction cmd(side, selection) {\n\treturn function({ state, dispatch }) {\n\t\tif (!selection && state.readOnly) return false;\n\t\tlet historyState = state.field(historyField_, false);\n\t\tif (!historyState) return false;\n\t\tlet tr = historyState.pop(side, state, selection);\n\t\tif (!tr) return false;\n\t\tdispatch(tr);\n\t\treturn true;\n\t};\n}\n/**\nUndo a single group of history events. Returns false if no group\nwas available.\n*/\nconst undo = /* @__PURE__ */ cmd(0, false);\n/**\nRedo a group of history events. Returns false if no group was\navailable.\n*/\nconst redo = /* @__PURE__ */ cmd(1, false);\n/**\nUndo a change or selection change.\n*/\nconst undoSelection = /* @__PURE__ */ cmd(0, true);\n/**\nRedo a change or selection change.\n*/\nconst redoSelection = /* @__PURE__ */ cmd(1, true);\nvar HistEvent = class HistEvent {\n\tconstructor(changes, effects, mapped, startSelection, selectionsAfter) {\n\t\tthis.changes = changes;\n\t\tthis.effects = effects;\n\t\tthis.mapped = mapped;\n\t\tthis.startSelection = startSelection;\n\t\tthis.selectionsAfter = selectionsAfter;\n\t}\n\tsetSelAfter(after) {\n\t\treturn new HistEvent(this.changes, this.effects, this.mapped, this.startSelection, after);\n\t}\n\ttoJSON() {\n\t\tvar _a, _b, _c;\n\t\treturn {\n\t\t\tchanges: (_a = this.changes) === null || _a === void 0 ? void 0 : _a.toJSON(),\n\t\t\tmapped: (_b = this.mapped) === null || _b === void 0 ? void 0 : _b.toJSON(),\n\t\t\tstartSelection: (_c = this.startSelection) === null || _c === void 0 ? void 0 : _c.toJSON(),\n\t\t\tselectionsAfter: this.selectionsAfter.map((s) => s.toJSON())\n\t\t};\n\t}\n\tstatic fromJSON(json) {\n\t\treturn new HistEvent(json.changes && ChangeSet.fromJSON(json.changes), [], json.mapped && ChangeDesc.fromJSON(json.mapped), json.startSelection && EditorSelection.fromJSON(json.startSelection), json.selectionsAfter.map(EditorSelection.fromJSON));\n\t}\n\tstatic fromTransaction(tr, selection) {\n\t\tlet effects = none;\n\t\tfor (let invert of tr.startState.facet(invertedEffects)) {\n\t\t\tlet result = invert(tr);\n\t\t\tif (result.length) effects = effects.concat(result);\n\t\t}\n\t\tif (!effects.length && tr.changes.empty) return null;\n\t\treturn new HistEvent(tr.changes.invert(tr.startState.doc), effects, void 0, selection || tr.startState.selection, none);\n\t}\n\tstatic selection(selections) {\n\t\treturn new HistEvent(void 0, none, void 0, void 0, selections);\n\t}\n};\nfunction updateBranch(branch, to, maxLen, newEvent) {\n\tlet start = to + 1 > maxLen + 20 ? to - maxLen - 1 : 0;\n\tlet newBranch = branch.slice(start, to);\n\tnewBranch.push(newEvent);\n\treturn newBranch;\n}\nfunction isAdjacent(a, b) {\n\tlet ranges = [], isAdjacent = false;\n\ta.iterChangedRanges((f, t) => ranges.push(f, t));\n\tb.iterChangedRanges((_f, _t, f, t) => {\n\t\tfor (let i = 0; i < ranges.length;) {\n\t\t\tlet from = ranges[i++], to = ranges[i++];\n\t\t\tif (t >= from && f <= to) isAdjacent = true;\n\t\t}\n\t});\n\treturn isAdjacent;\n}\nfunction eqSelectionShape(a, b) {\n\treturn a.ranges.length == b.ranges.length && a.ranges.filter((r, i) => r.empty != b.ranges[i].empty).length === 0;\n}\nfunction conc(a, b) {\n\treturn !a.length ? b : !b.length ? a : a.concat(b);\n}\nconst none = [];\nconst MaxSelectionsPerEvent = 200;\nfunction addSelection(branch, selection) {\n\tif (!branch.length) return [HistEvent.selection([selection])];\n\telse {\n\t\tlet lastEvent = branch[branch.length - 1];\n\t\tlet sels = lastEvent.selectionsAfter.slice(Math.max(0, lastEvent.selectionsAfter.length - MaxSelectionsPerEvent));\n\t\tif (sels.length && sels[sels.length - 1].eq(selection)) return branch;\n\t\tsels.push(selection);\n\t\treturn updateBranch(branch, branch.length - 1, 1e9, lastEvent.setSelAfter(sels));\n\t}\n}\nfunction popSelection(branch) {\n\tlet last = branch[branch.length - 1];\n\tlet newBranch = branch.slice();\n\tnewBranch[branch.length - 1] = last.setSelAfter(last.selectionsAfter.slice(0, last.selectionsAfter.length - 1));\n\treturn newBranch;\n}\nfunction addMappingToBranch(branch, mapping) {\n\tif (!branch.length) return branch;\n\tlet length = branch.length, selections = none;\n\twhile (length) {\n\t\tlet event = mapEvent(branch[length - 1], mapping, selections);\n\t\tif (event.changes && !event.changes.empty || event.effects.length) {\n\t\t\tlet result = branch.slice(0, length);\n\t\t\tresult[length - 1] = event;\n\t\t\treturn result;\n\t\t} else {\n\t\t\tmapping = event.mapped;\n\t\t\tlength--;\n\t\t\tselections = event.selectionsAfter;\n\t\t}\n\t}\n\treturn selections.length ? [HistEvent.selection(selections)] : none;\n}\nfunction mapEvent(event, mapping, extraSelections) {\n\tlet selections = conc(event.selectionsAfter.length ? event.selectionsAfter.map((s) => s.map(mapping)) : none, extraSelections);\n\tif (!event.changes) return HistEvent.selection(selections);\n\tlet mappedChanges = event.changes.map(mapping), before = mapping.mapDesc(event.changes, true);\n\tlet fullMapping = event.mapped ? event.mapped.composeDesc(before) : before;\n\treturn new HistEvent(mappedChanges, StateEffect.mapEffects(event.effects, mapping), fullMapping, event.startSelection.map(before), selections);\n}\nconst joinableUserEvent = /^(input\\.type|delete)($|\\.)/;\nvar HistoryState = class HistoryState {\n\tconstructor(done, undone, prevTime = 0, prevUserEvent = void 0) {\n\t\tthis.done = done;\n\t\tthis.undone = undone;\n\t\tthis.prevTime = prevTime;\n\t\tthis.prevUserEvent = prevUserEvent;\n\t}\n\tisolate() {\n\t\treturn this.prevTime ? new HistoryState(this.done, this.undone) : this;\n\t}\n\taddChanges(event, time, userEvent, config, tr) {\n\t\tlet done = this.done, lastEvent = done[done.length - 1];\n\t\tif (lastEvent && lastEvent.changes && !lastEvent.changes.empty && event.changes && (!userEvent || joinableUserEvent.test(userEvent)) && (!lastEvent.selectionsAfter.length && time - this.prevTime < config.newGroupDelay && config.joinToEvent(tr, isAdjacent(lastEvent.changes, event.changes)) || userEvent == \"input.type.compose\")) done = updateBranch(done, done.length - 1, config.minDepth, new HistEvent(event.changes.compose(lastEvent.changes), conc(StateEffect.mapEffects(event.effects, lastEvent.changes), lastEvent.effects), lastEvent.mapped, lastEvent.startSelection, none));\n\t\telse done = updateBranch(done, done.length, config.minDepth, event);\n\t\treturn new HistoryState(done, none, time, userEvent);\n\t}\n\taddSelection(selection, time, userEvent, newGroupDelay) {\n\t\tlet last = this.done.length ? this.done[this.done.length - 1].selectionsAfter : none;\n\t\tif (last.length > 0 && time - this.prevTime < newGroupDelay && userEvent == this.prevUserEvent && userEvent && /^select($|\\.)/.test(userEvent) && eqSelectionShape(last[last.length - 1], selection)) return this;\n\t\treturn new HistoryState(addSelection(this.done, selection), this.undone, time, userEvent);\n\t}\n\taddMapping(mapping) {\n\t\treturn new HistoryState(addMappingToBranch(this.done, mapping), addMappingToBranch(this.undone, mapping), this.prevTime, this.prevUserEvent);\n\t}\n\tpop(side, state, onlySelection) {\n\t\tlet branch = side == 0 ? this.done : this.undone;\n\t\tif (branch.length == 0) return null;\n\t\tlet event = branch[branch.length - 1], selection = event.selectionsAfter[0] || state.selection;\n\t\tif (onlySelection && event.selectionsAfter.length) return state.update({\n\t\t\tselection: event.selectionsAfter[event.selectionsAfter.length - 1],\n\t\t\tannotations: fromHistory.of({\n\t\t\t\tside,\n\t\t\t\trest: popSelection(branch),\n\t\t\t\tselection\n\t\t\t}),\n\t\t\tuserEvent: side == 0 ? \"select.undo\" : \"select.redo\",\n\t\t\tscrollIntoView: true\n\t\t});\n\t\telse if (!event.changes) return null;\n\t\telse {\n\t\t\tlet rest = branch.length == 1 ? none : branch.slice(0, branch.length - 1);\n\t\t\tif (event.mapped) rest = addMappingToBranch(rest, event.mapped);\n\t\t\treturn state.update({\n\t\t\t\tchanges: event.changes,\n\t\t\t\tselection: event.startSelection,\n\t\t\t\teffects: event.effects,\n\t\t\t\tannotations: fromHistory.of({\n\t\t\t\t\tside,\n\t\t\t\t\trest,\n\t\t\t\t\tselection\n\t\t\t\t}),\n\t\t\t\tfilter: false,\n\t\t\t\tuserEvent: side == 0 ? \"undo\" : \"redo\",\n\t\t\t\tscrollIntoView: true\n\t\t\t});\n\t\t}\n\t}\n};\nHistoryState.empty = /* @__PURE__ */ new HistoryState(none, none);\n/**\nDefault key bindings for the undo history.\n\n- Mod-z: [`undo`](https://codemirror.net/6/docs/ref/#commands.undo).\n- Mod-y (Mod-Shift-z on macOS) + Ctrl-Shift-z on Linux: [`redo`](https://codemirror.net/6/docs/ref/#commands.redo).\n- Mod-u: [`undoSelection`](https://codemirror.net/6/docs/ref/#commands.undoSelection).\n- Alt-u (Mod-Shift-u on macOS): [`redoSelection`](https://codemirror.net/6/docs/ref/#commands.redoSelection).\n*/\nconst historyKeymap = [\n\t{\n\t\tkey: \"Mod-z\",\n\t\trun: undo,\n\t\tpreventDefault: true\n\t},\n\t{\n\t\tkey: \"Mod-y\",\n\t\tmac: \"Mod-Shift-z\",\n\t\trun: redo,\n\t\tpreventDefault: true\n\t},\n\t{\n\t\tlinux: \"Ctrl-Shift-z\",\n\t\trun: redo,\n\t\tpreventDefault: true\n\t},\n\t{\n\t\tkey: \"Mod-u\",\n\t\trun: undoSelection,\n\t\tpreventDefault: true\n\t},\n\t{\n\t\tkey: \"Alt-u\",\n\t\tmac: \"Mod-Shift-u\",\n\t\trun: redoSelection,\n\t\tpreventDefault: true\n\t}\n];\nfunction updateSel(sel, by) {\n\treturn EditorSelection.create(sel.ranges.map(by), sel.mainIndex);\n}\nfunction setSel(state, selection) {\n\treturn state.update({\n\t\tselection,\n\t\tscrollIntoView: true,\n\t\tuserEvent: \"select\"\n\t});\n}\nfunction moveSel({ state, dispatch }, how) {\n\tlet selection = updateSel(state.selection, how);\n\tif (selection.eq(state.selection, true)) return false;\n\tdispatch(setSel(state, selection));\n\treturn true;\n}\nfunction rangeEnd(range, forward) {\n\treturn EditorSelection.cursor(forward ? range.to : range.from);\n}\nfunction cursorByChar(view, forward) {\n\treturn moveSel(view, (range) => range.empty ? view.moveByChar(range, forward) : rangeEnd(range, forward));\n}\nfunction ltrAtCursor(view) {\n\treturn view.textDirectionAt(view.state.selection.main.head) == Direction.LTR;\n}\n/**\nMove the selection one character to the left (which is backward in\nleft-to-right text, forward in right-to-left text).\n*/\nconst cursorCharLeft = (view) => cursorByChar(view, !ltrAtCursor(view));\n/**\nMove the selection one character to the right.\n*/\nconst cursorCharRight = (view) => cursorByChar(view, ltrAtCursor(view));\nfunction cursorByGroup(view, forward) {\n\treturn moveSel(view, (range) => range.empty ? view.moveByGroup(range, forward) : rangeEnd(range, forward));\n}\n/**\nMove the selection to the left across one group of word or\nnon-word (but also non-space) characters.\n*/\nconst cursorGroupLeft = (view) => cursorByGroup(view, !ltrAtCursor(view));\n/**\nMove the selection one group to the right.\n*/\nconst cursorGroupRight = (view) => cursorByGroup(view, ltrAtCursor(view));\ntypeof Intl != \"undefined\" && Intl.Segmenter;\nfunction interestingNode(state, node, bracketProp) {\n\tif (node.type.prop(bracketProp)) return true;\n\tlet len = node.to - node.from;\n\treturn len && (len > 2 || /[^\\s,.;:]/.test(state.sliceDoc(node.from, node.to))) || node.firstChild;\n}\nfunction moveBySyntax(state, start, forward) {\n\tlet pos = syntaxTree(state).resolveInner(start.head);\n\tlet bracketProp = forward ? NodeProp.closedBy : NodeProp.openedBy;\n\tfor (let at = start.head;;) {\n\t\tlet next = forward ? pos.childAfter(at) : pos.childBefore(at);\n\t\tif (!next) break;\n\t\tif (interestingNode(state, next, bracketProp)) pos = next;\n\t\telse at = forward ? next.to : next.from;\n\t}\n\tlet bracket = pos.type.prop(bracketProp), match, newPos;\n\tif (bracket && (match = forward ? matchBrackets(state, pos.from, 1) : matchBrackets(state, pos.to, -1)) && match.matched) newPos = forward ? match.end.to : match.end.from;\n\telse newPos = forward ? pos.to : pos.from;\n\treturn EditorSelection.cursor(newPos, forward ? -1 : 1);\n}\n/**\nMove the cursor over the next syntactic element to the left.\n*/\nconst cursorSyntaxLeft = (view) => moveSel(view, (range) => moveBySyntax(view.state, range, !ltrAtCursor(view)));\n/**\nMove the cursor over the next syntactic element to the right.\n*/\nconst cursorSyntaxRight = (view) => moveSel(view, (range) => moveBySyntax(view.state, range, ltrAtCursor(view)));\nfunction cursorByLine(view, forward) {\n\treturn moveSel(view, (range) => {\n\t\tif (!range.empty) return rangeEnd(range, forward);\n\t\tlet moved = view.moveVertically(range, forward);\n\t\treturn moved.head != range.head ? moved : view.moveToLineBoundary(range, forward);\n\t});\n}\n/**\nMove the selection one line up.\n*/\nconst cursorLineUp = (view) => cursorByLine(view, false);\n/**\nMove the selection one line down.\n*/\nconst cursorLineDown = (view) => cursorByLine(view, true);\nfunction pageInfo(view) {\n\tlet selfScroll = view.scrollDOM.clientHeight < view.scrollDOM.scrollHeight - 2;\n\tlet marginTop = 0, marginBottom = 0, height;\n\tif (selfScroll) {\n\t\tfor (let source of view.state.facet(EditorView.scrollMargins)) {\n\t\t\tlet margins = source(view);\n\t\t\tif (margins === null || margins === void 0 ? void 0 : margins.top) marginTop = Math.max(margins === null || margins === void 0 ? void 0 : margins.top, marginTop);\n\t\t\tif (margins === null || margins === void 0 ? void 0 : margins.bottom) marginBottom = Math.max(margins === null || margins === void 0 ? void 0 : margins.bottom, marginBottom);\n\t\t}\n\t\theight = view.scrollDOM.clientHeight - marginTop - marginBottom;\n\t} else height = (view.dom.ownerDocument.defaultView || window).innerHeight;\n\treturn {\n\t\tmarginTop,\n\t\tmarginBottom,\n\t\tselfScroll,\n\t\theight: Math.max(view.defaultLineHeight, height - 5)\n\t};\n}\nfunction cursorByPage(view, forward) {\n\tlet page = pageInfo(view);\n\tlet { state } = view, selection = updateSel(state.selection, (range) => {\n\t\treturn range.empty ? view.moveVertically(range, forward, page.height) : rangeEnd(range, forward);\n\t});\n\tif (selection.eq(state.selection)) return false;\n\tlet effect;\n\tif (page.selfScroll) {\n\t\tlet startPos = view.coordsAtPos(state.selection.main.head);\n\t\tlet scrollRect = view.scrollDOM.getBoundingClientRect();\n\t\tlet scrollTop = scrollRect.top + page.marginTop, scrollBottom = scrollRect.bottom - page.marginBottom;\n\t\tif (startPos && startPos.top > scrollTop && startPos.bottom < scrollBottom) effect = EditorView.scrollIntoView(selection.main.head, {\n\t\t\ty: \"start\",\n\t\t\tyMargin: startPos.top - scrollTop\n\t\t});\n\t}\n\tview.dispatch(setSel(state, selection), { effects: effect });\n\treturn true;\n}\n/**\nMove the selection one page up.\n*/\nconst cursorPageUp = (view) => cursorByPage(view, false);\n/**\nMove the selection one page down.\n*/\nconst cursorPageDown = (view) => cursorByPage(view, true);\nfunction moveByLineBoundary(view, start, forward) {\n\tlet line = view.lineBlockAt(start.head), moved = view.moveToLineBoundary(start, forward);\n\tif (moved.head == start.head && moved.head != (forward ? line.to : line.from)) moved = view.moveToLineBoundary(start, forward, false);\n\tif (!forward && moved.head == line.from && line.length) {\n\t\tlet space = /^\\s*/.exec(view.state.sliceDoc(line.from, Math.min(line.from + 100, line.to)))[0].length;\n\t\tif (space && start.head != line.from + space) moved = EditorSelection.cursor(line.from + space);\n\t}\n\treturn moved;\n}\n/**\nMove the selection to the next line wrap point, or to the end of\nthe line if there isn't one left on this line.\n*/\nconst cursorLineBoundaryForward = (view) => moveSel(view, (range) => moveByLineBoundary(view, range, true));\n/**\nMove the selection to previous line wrap point, or failing that to\nthe start of the line. If the line is indented, and the cursor\nisn't already at the end of the indentation, this will move to the\nend of the indentation instead of the start of the line.\n*/\nconst cursorLineBoundaryBackward = (view) => moveSel(view, (range) => moveByLineBoundary(view, range, false));\n/**\nMove the selection one line wrap point to the left.\n*/\nconst cursorLineBoundaryLeft = (view) => moveSel(view, (range) => moveByLineBoundary(view, range, !ltrAtCursor(view)));\n/**\nMove the selection one line wrap point to the right.\n*/\nconst cursorLineBoundaryRight = (view) => moveSel(view, (range) => moveByLineBoundary(view, range, ltrAtCursor(view)));\n/**\nMove the selection to the start of the line.\n*/\nconst cursorLineStart = (view) => moveSel(view, (range) => EditorSelection.cursor(view.lineBlockAt(range.head).from, 1));\n/**\nMove the selection to the end of the line.\n*/\nconst cursorLineEnd = (view) => moveSel(view, (range) => EditorSelection.cursor(view.lineBlockAt(range.head).to, -1));\nfunction toMatchingBracket(state, dispatch, extend) {\n\tlet found = false, selection = updateSel(state.selection, (range) => {\n\t\tlet matching = matchBrackets(state, range.head, -1) || matchBrackets(state, range.head, 1) || range.head > 0 && matchBrackets(state, range.head - 1, 1) || range.head < state.doc.length && matchBrackets(state, range.head + 1, -1);\n\t\tif (!matching || !matching.end) return range;\n\t\tfound = true;\n\t\tlet head = matching.start.from == range.head ? matching.end.to : matching.end.from;\n\t\treturn extend ? EditorSelection.range(range.anchor, head) : EditorSelection.cursor(head);\n\t});\n\tif (!found) return false;\n\tdispatch(setSel(state, selection));\n\treturn true;\n}\n/**\nMove the selection to the bracket matching the one it is currently\non, if any.\n*/\nconst cursorMatchingBracket = ({ state, dispatch }) => toMatchingBracket(state, dispatch, false);\nfunction extendSel(target, how) {\n\tlet selection = updateSel(target.state.selection, (range) => {\n\t\tlet head = how(range);\n\t\treturn EditorSelection.range(range.anchor, head.head, head.goalColumn, head.bidiLevel || void 0);\n\t});\n\tif (selection.eq(target.state.selection)) return false;\n\ttarget.dispatch(setSel(target.state, selection));\n\treturn true;\n}\nfunction selectByChar(view, forward) {\n\treturn extendSel(view, (range) => view.moveByChar(range, forward));\n}\n/**\nMove the selection head one character to the left, while leaving\nthe anchor in place.\n*/\nconst selectCharLeft = (view) => selectByChar(view, !ltrAtCursor(view));\n/**\nMove the selection head one character to the right.\n*/\nconst selectCharRight = (view) => selectByChar(view, ltrAtCursor(view));\nfunction selectByGroup(view, forward) {\n\treturn extendSel(view, (range) => view.moveByGroup(range, forward));\n}\n/**\nMove the selection head one [group](https://codemirror.net/6/docs/ref/#commands.cursorGroupLeft) to\nthe left.\n*/\nconst selectGroupLeft = (view) => selectByGroup(view, !ltrAtCursor(view));\n/**\nMove the selection head one group to the right.\n*/\nconst selectGroupRight = (view) => selectByGroup(view, ltrAtCursor(view));\n/**\nMove the selection head over the next syntactic element to the left.\n*/\nconst selectSyntaxLeft = (view) => extendSel(view, (range) => moveBySyntax(view.state, range, !ltrAtCursor(view)));\n/**\nMove the selection head over the next syntactic element to the right.\n*/\nconst selectSyntaxRight = (view) => extendSel(view, (range) => moveBySyntax(view.state, range, ltrAtCursor(view)));\nfunction selectByLine(view, forward) {\n\treturn extendSel(view, (range) => view.moveVertically(range, forward));\n}\n/**\nMove the selection head one line up.\n*/\nconst selectLineUp = (view) => selectByLine(view, false);\n/**\nMove the selection head one line down.\n*/\nconst selectLineDown = (view) => selectByLine(view, true);\nfunction selectByPage(view, forward) {\n\treturn extendSel(view, (range) => view.moveVertically(range, forward, pageInfo(view).height));\n}\n/**\nMove the selection head one page up.\n*/\nconst selectPageUp = (view) => selectByPage(view, false);\n/**\nMove the selection head one page down.\n*/\nconst selectPageDown = (view) => selectByPage(view, true);\n/**\nMove the selection head to the next line boundary.\n*/\nconst selectLineBoundaryForward = (view) => extendSel(view, (range) => moveByLineBoundary(view, range, true));\n/**\nMove the selection head to the previous line boundary.\n*/\nconst selectLineBoundaryBackward = (view) => extendSel(view, (range) => moveByLineBoundary(view, range, false));\n/**\nMove the selection head one line boundary to the left.\n*/\nconst selectLineBoundaryLeft = (view) => extendSel(view, (range) => moveByLineBoundary(view, range, !ltrAtCursor(view)));\n/**\nMove the selection head one line boundary to the right.\n*/\nconst selectLineBoundaryRight = (view) => extendSel(view, (range) => moveByLineBoundary(view, range, ltrAtCursor(view)));\n/**\nMove the selection head to the start of the line.\n*/\nconst selectLineStart = (view) => extendSel(view, (range) => EditorSelection.cursor(view.lineBlockAt(range.head).from));\n/**\nMove the selection head to the end of the line.\n*/\nconst selectLineEnd = (view) => extendSel(view, (range) => EditorSelection.cursor(view.lineBlockAt(range.head).to));\n/**\nMove the selection to the start of the document.\n*/\nconst cursorDocStart = ({ state, dispatch }) => {\n\tdispatch(setSel(state, { anchor: 0 }));\n\treturn true;\n};\n/**\nMove the selection to the end of the document.\n*/\nconst cursorDocEnd = ({ state, dispatch }) => {\n\tdispatch(setSel(state, { anchor: state.doc.length }));\n\treturn true;\n};\n/**\nMove the selection head to the start of the document.\n*/\nconst selectDocStart = ({ state, dispatch }) => {\n\tdispatch(setSel(state, {\n\t\tanchor: state.selection.main.anchor,\n\t\thead: 0\n\t}));\n\treturn true;\n};\n/**\nMove the selection head to the end of the document.\n*/\nconst selectDocEnd = ({ state, dispatch }) => {\n\tdispatch(setSel(state, {\n\t\tanchor: state.selection.main.anchor,\n\t\thead: state.doc.length\n\t}));\n\treturn true;\n};\n/**\nSelect the entire document.\n*/\nconst selectAll = ({ state, dispatch }) => {\n\tdispatch(state.update({\n\t\tselection: {\n\t\t\tanchor: 0,\n\t\t\thead: state.doc.length\n\t\t},\n\t\tuserEvent: \"select\"\n\t}));\n\treturn true;\n};\n/**\nExpand the selection to cover entire lines.\n*/\nconst selectLine = ({ state, dispatch }) => {\n\tlet ranges = selectedLineBlocks(state).map(({ from, to }) => EditorSelection.range(from, Math.min(to + 1, state.doc.length)));\n\tdispatch(state.update({\n\t\tselection: EditorSelection.create(ranges),\n\t\tuserEvent: \"select\"\n\t}));\n\treturn true;\n};\n/**\nSelect the next syntactic construct that is larger than the\nselection. Note that this will only work insofar as the language\n[provider](https://codemirror.net/6/docs/ref/#language.language) you use builds up a full\nsyntax tree.\n*/\nconst selectParentSyntax = ({ state, dispatch }) => {\n\tlet selection = updateSel(state.selection, (range) => {\n\t\tlet tree = syntaxTree(state), stack = tree.resolveStack(range.from, 1);\n\t\tif (range.empty) {\n\t\t\tlet stackBefore = tree.resolveStack(range.from, -1);\n\t\t\tif (stackBefore.node.from >= stack.node.from && stackBefore.node.to <= stack.node.to) stack = stackBefore;\n\t\t}\n\t\tfor (let cur = stack; cur; cur = cur.next) {\n\t\t\tlet { node } = cur;\n\t\t\tif ((node.from < range.from && node.to >= range.to || node.to > range.to && node.from <= range.from) && cur.next) return EditorSelection.range(node.to, node.from);\n\t\t}\n\t\treturn range;\n\t});\n\tif (selection.eq(state.selection)) return false;\n\tdispatch(setSel(state, selection));\n\treturn true;\n};\n/**\nSimplify the current selection. When multiple ranges are selected,\nreduce it to its main range. Otherwise, if the selection is\nnon-empty, convert it to a cursor selection.\n*/\nconst simplifySelection = ({ state, dispatch }) => {\n\tlet cur = state.selection, selection = null;\n\tif (cur.ranges.length > 1) selection = EditorSelection.create([cur.main]);\n\telse if (!cur.main.empty) selection = EditorSelection.create([EditorSelection.cursor(cur.main.head)]);\n\tif (!selection) return false;\n\tdispatch(setSel(state, selection));\n\treturn true;\n};\nfunction deleteBy(target, by) {\n\tif (target.state.readOnly) return false;\n\tlet event = \"delete.selection\", { state } = target;\n\tlet changes = state.changeByRange((range) => {\n\t\tlet { from, to } = range;\n\t\tif (from == to) {\n\t\t\tlet towards = by(range);\n\t\t\tif (towards < from) {\n\t\t\t\tevent = \"delete.backward\";\n\t\t\t\ttowards = skipAtomic(target, towards, false);\n\t\t\t} else if (towards > from) {\n\t\t\t\tevent = \"delete.forward\";\n\t\t\t\ttowards = skipAtomic(target, towards, true);\n\t\t\t}\n\t\t\tfrom = Math.min(from, towards);\n\t\t\tto = Math.max(to, towards);\n\t\t} else {\n\t\t\tfrom = skipAtomic(target, from, false);\n\t\t\tto = skipAtomic(target, to, true);\n\t\t}\n\t\treturn from == to ? { range } : {\n\t\t\tchanges: {\n\t\t\t\tfrom,\n\t\t\t\tto\n\t\t\t},\n\t\t\trange: EditorSelection.cursor(from, from < range.head ? -1 : 1)\n\t\t};\n\t});\n\tif (changes.changes.empty) return false;\n\ttarget.dispatch(state.update(changes, {\n\t\tscrollIntoView: true,\n\t\tuserEvent: event,\n\t\teffects: event == \"delete.selection\" ? EditorView.announce.of(state.phrase(\"Selection deleted\")) : void 0\n\t}));\n\treturn true;\n}\nfunction skipAtomic(target, pos, forward) {\n\tif (target instanceof EditorView) for (let ranges of target.state.facet(EditorView.atomicRanges).map((f) => f(target))) ranges.between(pos, pos, (from, to) => {\n\t\tif (from < pos && to > pos) pos = forward ? to : from;\n\t});\n\treturn pos;\n}\nconst deleteByChar = (target, forward, byIndentUnit) => deleteBy(target, (range) => {\n\tlet pos = range.from, { state } = target, line = state.doc.lineAt(pos), before, targetPos;\n\tif (byIndentUnit && !forward && pos > line.from && pos < line.from + 200 && !/[^ \\t]/.test(before = line.text.slice(0, pos - line.from))) {\n\t\tif (before[before.length - 1] == \"\t\") return pos - 1;\n\t\tlet drop = countColumn(before, state.tabSize) % getIndentUnit(state) || getIndentUnit(state);\n\t\tfor (let i = 0; i < drop && before[before.length - 1 - i] == \" \"; i++) pos--;\n\t\ttargetPos = pos;\n\t} else {\n\t\ttargetPos = findClusterBreak(line.text, pos - line.from, forward, forward) + line.from;\n\t\tif (targetPos == pos && line.number != (forward ? state.doc.lines : 1)) targetPos += forward ? 1 : -1;\n\t\telse if (!forward && /[\\ufe00-\\ufe0f]/.test(line.text.slice(targetPos - line.from, pos - line.from))) targetPos = findClusterBreak(line.text, targetPos - line.from, false, false) + line.from;\n\t}\n\treturn targetPos;\n});\n/**\nDelete the selection, or, for cursor selections, the character or\nindentation unit before the cursor.\n*/\nconst deleteCharBackward = (view) => deleteByChar(view, false, true);\n/**\nDelete the selection or the character after the cursor.\n*/\nconst deleteCharForward = (view) => deleteByChar(view, true, false);\nconst deleteByGroup = (target, forward) => deleteBy(target, (range) => {\n\tlet pos = range.head, { state } = target, line = state.doc.lineAt(pos);\n\tlet categorize = state.charCategorizer(pos);\n\tfor (let cat = null;;) {\n\t\tif (pos == (forward ? line.to : line.from)) {\n\t\t\tif (pos == range.head && line.number != (forward ? state.doc.lines : 1)) pos += forward ? 1 : -1;\n\t\t\tbreak;\n\t\t}\n\t\tlet next = findClusterBreak(line.text, pos - line.from, forward) + line.from;\n\t\tlet nextChar = line.text.slice(Math.min(pos, next) - line.from, Math.max(pos, next) - line.from);\n\t\tlet nextCat = categorize(nextChar);\n\t\tif (cat != null && nextCat != cat) break;\n\t\tif (nextChar != \" \" || pos != range.head) cat = nextCat;\n\t\tpos = next;\n\t}\n\treturn pos;\n});\n/**\nDelete the selection or backward until the end of the next\n[group](https://codemirror.net/6/docs/ref/#view.EditorView.moveByGroup), only skipping groups of\nwhitespace when they consist of a single space.\n*/\nconst deleteGroupBackward = (target) => deleteByGroup(target, false);\n/**\nDelete the selection or forward until the end of the next group.\n*/\nconst deleteGroupForward = (target) => deleteByGroup(target, true);\n/**\nDelete the selection, or, if it is a cursor selection, delete to\nthe end of the line. If the cursor is directly at the end of the\nline, delete the line break after it.\n*/\nconst deleteToLineEnd = (view) => deleteBy(view, (range) => {\n\tlet lineEnd = view.lineBlockAt(range.head).to;\n\treturn range.head < lineEnd ? lineEnd : Math.min(view.state.doc.length, range.head + 1);\n});\n/**\nDelete the selection, or, if it is a cursor selection, delete to\nthe start of the line or the next line wrap before the cursor.\n*/\nconst deleteLineBoundaryBackward = (view) => deleteBy(view, (range) => {\n\tlet lineStart = view.moveToLineBoundary(range, false).head;\n\treturn range.head > lineStart ? lineStart : Math.max(0, range.head - 1);\n});\n/**\nDelete the selection, or, if it is a cursor selection, delete to\nthe end of the line or the next line wrap after the cursor.\n*/\nconst deleteLineBoundaryForward = (view) => deleteBy(view, (range) => {\n\tlet lineStart = view.moveToLineBoundary(range, true).head;\n\treturn range.head < lineStart ? lineStart : Math.min(view.state.doc.length, range.head + 1);\n});\n/**\nReplace each selection range with a line break, leaving the cursor\non the line before the break.\n*/\nconst splitLine = ({ state, dispatch }) => {\n\tif (state.readOnly) return false;\n\tlet changes = state.changeByRange((range) => {\n\t\treturn {\n\t\t\tchanges: {\n\t\t\t\tfrom: range.from,\n\t\t\t\tto: range.to,\n\t\t\t\tinsert: Text.of([\"\", \"\"])\n\t\t\t},\n\t\t\trange: EditorSelection.cursor(range.from)\n\t\t};\n\t});\n\tdispatch(state.update(changes, {\n\t\tscrollIntoView: true,\n\t\tuserEvent: \"input\"\n\t}));\n\treturn true;\n};\n/**\nFlip the characters before and after the cursor(s).\n*/\nconst transposeChars = ({ state, dispatch }) => {\n\tif (state.readOnly) return false;\n\tlet changes = state.changeByRange((range) => {\n\t\tif (!range.empty || range.from == 0 || range.from == state.doc.length) return { range };\n\t\tlet pos = range.from, line = state.doc.lineAt(pos);\n\t\tlet from = pos == line.from ? pos - 1 : findClusterBreak(line.text, pos - line.from, false) + line.from;\n\t\tlet to = pos == line.to ? pos + 1 : findClusterBreak(line.text, pos - line.from, true) + line.from;\n\t\treturn {\n\t\t\tchanges: {\n\t\t\t\tfrom,\n\t\t\t\tto,\n\t\t\t\tinsert: state.doc.slice(pos, to).append(state.doc.slice(from, pos))\n\t\t\t},\n\t\t\trange: EditorSelection.cursor(to)\n\t\t};\n\t});\n\tif (changes.changes.empty) return false;\n\tdispatch(state.update(changes, {\n\t\tscrollIntoView: true,\n\t\tuserEvent: \"move.character\"\n\t}));\n\treturn true;\n};\nfunction selectedLineBlocks(state) {\n\tlet blocks = [], upto = -1;\n\tfor (let range of state.selection.ranges) {\n\t\tlet startLine = state.doc.lineAt(range.from), endLine = state.doc.lineAt(range.to);\n\t\tif (!range.empty && range.to == endLine.from) endLine = state.doc.lineAt(range.to - 1);\n\t\tif (upto >= startLine.number) {\n\t\t\tlet prev = blocks[blocks.length - 1];\n\t\t\tprev.to = endLine.to;\n\t\t\tprev.ranges.push(range);\n\t\t} else blocks.push({\n\t\t\tfrom: startLine.from,\n\t\t\tto: endLine.to,\n\t\t\tranges: [range]\n\t\t});\n\t\tupto = endLine.number + 1;\n\t}\n\treturn blocks;\n}\nfunction moveLine(state, dispatch, forward) {\n\tif (state.readOnly) return false;\n\tlet changes = [], ranges = [];\n\tfor (let block of selectedLineBlocks(state)) {\n\t\tif (forward ? block.to == state.doc.length : block.from == 0) continue;\n\t\tlet nextLine = state.doc.lineAt(forward ? block.to + 1 : block.from - 1);\n\t\tlet size = nextLine.length + 1;\n\t\tif (forward) {\n\t\t\tchanges.push({\n\t\t\t\tfrom: block.to,\n\t\t\t\tto: nextLine.to\n\t\t\t}, {\n\t\t\t\tfrom: block.from,\n\t\t\t\tinsert: nextLine.text + state.lineBreak\n\t\t\t});\n\t\t\tfor (let r of block.ranges) ranges.push(EditorSelection.range(Math.min(state.doc.length, r.anchor + size), Math.min(state.doc.length, r.head + size)));\n\t\t} else {\n\t\t\tchanges.push({\n\t\t\t\tfrom: nextLine.from,\n\t\t\t\tto: block.from\n\t\t\t}, {\n\t\t\t\tfrom: block.to,\n\t\t\t\tinsert: state.lineBreak + nextLine.text\n\t\t\t});\n\t\t\tfor (let r of block.ranges) ranges.push(EditorSelection.range(r.anchor - size, r.head - size));\n\t\t}\n\t}\n\tif (!changes.length) return false;\n\tdispatch(state.update({\n\t\tchanges,\n\t\tscrollIntoView: true,\n\t\tselection: EditorSelection.create(ranges, state.selection.mainIndex),\n\t\tuserEvent: \"move.line\"\n\t}));\n\treturn true;\n}\n/**\nMove the selected lines up one line.\n*/\nconst moveLineUp = ({ state, dispatch }) => moveLine(state, dispatch, false);\n/**\nMove the selected lines down one line.\n*/\nconst moveLineDown = ({ state, dispatch }) => moveLine(state, dispatch, true);\nfunction copyLine(state, dispatch, forward) {\n\tif (state.readOnly) return false;\n\tlet changes = [];\n\tfor (let block of selectedLineBlocks(state)) if (forward) changes.push({\n\t\tfrom: block.from,\n\t\tinsert: state.doc.slice(block.from, block.to) + state.lineBreak\n\t});\n\telse changes.push({\n\t\tfrom: block.to,\n\t\tinsert: state.lineBreak + state.doc.slice(block.from, block.to)\n\t});\n\tdispatch(state.update({\n\t\tchanges,\n\t\tscrollIntoView: true,\n\t\tuserEvent: \"input.copyline\"\n\t}));\n\treturn true;\n}\n/**\nCreate a copy of the selected lines. Keep the selection in the top copy.\n*/\nconst copyLineUp = ({ state, dispatch }) => copyLine(state, dispatch, false);\n/**\nCreate a copy of the selected lines. Keep the selection in the bottom copy.\n*/\nconst copyLineDown = ({ state, dispatch }) => copyLine(state, dispatch, true);\n/**\nDelete selected lines.\n*/\nconst deleteLine = (view) => {\n\tif (view.state.readOnly) return false;\n\tlet { state } = view, changes = state.changes(selectedLineBlocks(state).map(({ from, to }) => {\n\t\tif (from > 0) from--;\n\t\telse if (to < state.doc.length) to++;\n\t\treturn {\n\t\t\tfrom,\n\t\t\tto\n\t\t};\n\t}));\n\tlet selection = updateSel(state.selection, (range) => {\n\t\tlet dist = void 0;\n\t\tif (view.lineWrapping) {\n\t\t\tlet block = view.lineBlockAt(range.head), pos = view.coordsAtPos(range.head, range.assoc || 1);\n\t\t\tif (pos) dist = block.bottom + view.documentTop - pos.bottom + view.defaultLineHeight / 2;\n\t\t}\n\t\treturn view.moveVertically(range, true, dist);\n\t}).map(changes);\n\tview.dispatch({\n\t\tchanges,\n\t\tselection,\n\t\tscrollIntoView: true,\n\t\tuserEvent: \"delete.line\"\n\t});\n\treturn true;\n};\nfunction isBetweenBrackets(state, pos) {\n\tif (/\\(\\)|\\[\\]|\\{\\}/.test(state.sliceDoc(pos - 1, pos + 1))) return {\n\t\tfrom: pos,\n\t\tto: pos\n\t};\n\tlet context = syntaxTree(state).resolveInner(pos);\n\tlet before = context.childBefore(pos), after = context.childAfter(pos), closedBy;\n\tif (before && after && before.to <= pos && after.from >= pos && (closedBy = before.type.prop(NodeProp.closedBy)) && closedBy.indexOf(after.name) > -1 && state.doc.lineAt(before.to).from == state.doc.lineAt(after.from).from && !/\\S/.test(state.sliceDoc(before.to, after.from))) return {\n\t\tfrom: before.to,\n\t\tto: after.from\n\t};\n\treturn null;\n}\n/**\nReplace the selection with a newline and indent the newly created\nline(s). If the current line consists only of whitespace, this\nwill also delete that whitespace. When the cursor is between\nmatching brackets, an additional newline will be inserted after\nthe cursor.\n*/\nconst insertNewlineAndIndent = /* @__PURE__ */ newlineAndIndent(false);\n/**\nCreate a blank, indented line below the current line.\n*/\nconst insertBlankLine = /* @__PURE__ */ newlineAndIndent(true);\nfunction newlineAndIndent(atEof) {\n\treturn ({ state, dispatch }) => {\n\t\tif (state.readOnly) return false;\n\t\tlet changes = state.changeByRange((range) => {\n\t\t\tlet { from, to } = range, line = state.doc.lineAt(from);\n\t\t\tlet explode = !atEof && from == to && isBetweenBrackets(state, from);\n\t\t\tif (atEof) from = to = (to <= line.to ? line : state.doc.lineAt(to)).to;\n\t\t\tlet cx = new IndentContext(state, {\n\t\t\t\tsimulateBreak: from,\n\t\t\t\tsimulateDoubleBreak: !!explode\n\t\t\t});\n\t\t\tlet indent = getIndentation(cx, from);\n\t\t\tif (indent == null) indent = countColumn(/^\\s*/.exec(state.doc.lineAt(from).text)[0], state.tabSize);\n\t\t\twhile (to < line.to && /\\s/.test(line.text[to - line.from])) to++;\n\t\t\tif (explode) ({from, to} = explode);\n\t\t\telse if (from > line.from && from < line.from + 100 && !/\\S/.test(line.text.slice(0, from))) from = line.from;\n\t\t\tlet insert = [\"\", indentString(state, indent)];\n\t\t\tif (explode) insert.push(indentString(state, cx.lineIndent(line.from, -1)));\n\t\t\treturn {\n\t\t\t\tchanges: {\n\t\t\t\t\tfrom,\n\t\t\t\t\tto,\n\t\t\t\t\tinsert: Text.of(insert)\n\t\t\t\t},\n\t\t\t\trange: EditorSelection.cursor(from + 1 + insert[1].length)\n\t\t\t};\n\t\t});\n\t\tdispatch(state.update(changes, {\n\t\t\tscrollIntoView: true,\n\t\t\tuserEvent: \"input\"\n\t\t}));\n\t\treturn true;\n\t};\n}\nfunction changeBySelectedLine(state, f) {\n\tlet atLine = -1;\n\treturn state.changeByRange((range) => {\n\t\tlet changes = [];\n\t\tfor (let pos = range.from; pos <= range.to;) {\n\t\t\tlet line = state.doc.lineAt(pos);\n\t\t\tif (line.number > atLine && (range.empty || range.to > line.from)) {\n\t\t\t\tf(line, changes, range);\n\t\t\t\tatLine = line.number;\n\t\t\t}\n\t\t\tpos = line.to + 1;\n\t\t}\n\t\tlet changeSet = state.changes(changes);\n\t\treturn {\n\t\t\tchanges,\n\t\t\trange: EditorSelection.range(changeSet.mapPos(range.anchor, 1), changeSet.mapPos(range.head, 1))\n\t\t};\n\t});\n}\n/**\nAuto-indent the selected lines. This uses the [indentation service\nfacet](https://codemirror.net/6/docs/ref/#language.indentService) as source for auto-indent\ninformation.\n*/\nconst indentSelection = ({ state, dispatch }) => {\n\tif (state.readOnly) return false;\n\tlet updated = Object.create(null);\n\tlet context = new IndentContext(state, { overrideIndentation: (start) => {\n\t\tlet found = updated[start];\n\t\treturn found == null ? -1 : found;\n\t} });\n\tlet changes = changeBySelectedLine(state, (line, changes, range) => {\n\t\tlet indent = getIndentation(context, line.from);\n\t\tif (indent == null) return;\n\t\tif (!/\\S/.test(line.text)) indent = 0;\n\t\tlet cur = /^\\s*/.exec(line.text)[0];\n\t\tlet norm = indentString(state, indent);\n\t\tif (cur != norm || range.from < line.from + cur.length) {\n\t\t\tupdated[line.from] = indent;\n\t\t\tchanges.push({\n\t\t\t\tfrom: line.from,\n\t\t\t\tto: line.from + cur.length,\n\t\t\t\tinsert: norm\n\t\t\t});\n\t\t}\n\t});\n\tif (!changes.changes.empty) dispatch(state.update(changes, { userEvent: \"indent\" }));\n\treturn true;\n};\n/**\nAdd a [unit](https://codemirror.net/6/docs/ref/#language.indentUnit) of indentation to all selected\nlines.\n*/\nconst indentMore = ({ state, dispatch }) => {\n\tif (state.readOnly) return false;\n\tdispatch(state.update(changeBySelectedLine(state, (line, changes) => {\n\t\tchanges.push({\n\t\t\tfrom: line.from,\n\t\t\tinsert: state.facet(indentUnit)\n\t\t});\n\t}), { userEvent: \"input.indent\" }));\n\treturn true;\n};\n/**\nRemove a [unit](https://codemirror.net/6/docs/ref/#language.indentUnit) of indentation from all\nselected lines.\n*/\nconst indentLess = ({ state, dispatch }) => {\n\tif (state.readOnly) return false;\n\tdispatch(state.update(changeBySelectedLine(state, (line, changes) => {\n\t\tlet space = /^\\s*/.exec(line.text)[0];\n\t\tif (!space) return;\n\t\tlet col = countColumn(space, state.tabSize), keep = 0;\n\t\tlet insert = indentString(state, Math.max(0, col - getIndentUnit(state)));\n\t\twhile (keep < space.length && keep < insert.length && space.charCodeAt(keep) == insert.charCodeAt(keep)) keep++;\n\t\tchanges.push({\n\t\t\tfrom: line.from + keep,\n\t\t\tto: line.from + space.length,\n\t\t\tinsert: insert.slice(keep)\n\t\t});\n\t}), { userEvent: \"delete.dedent\" }));\n\treturn true;\n};\n/**\nEnables or disables\n[tab-focus mode](https://codemirror.net/6/docs/ref/#view.EditorView.setTabFocusMode). While on, this\nprevents the editor's key bindings from capturing Tab or\nShift-Tab, making it possible for the user to move focus out of\nthe editor with the keyboard.\n*/\nconst toggleTabFocusMode = (view) => {\n\tview.setTabFocusMode();\n\treturn true;\n};\n/**\nArray of key bindings containing the Emacs-style bindings that are\navailable on macOS by default.\n\n- Ctrl-b: [`cursorCharLeft`](https://codemirror.net/6/docs/ref/#commands.cursorCharLeft) ([`selectCharLeft`](https://codemirror.net/6/docs/ref/#commands.selectCharLeft) with Shift)\n- Ctrl-f: [`cursorCharRight`](https://codemirror.net/6/docs/ref/#commands.cursorCharRight) ([`selectCharRight`](https://codemirror.net/6/docs/ref/#commands.selectCharRight) with Shift)\n- Ctrl-p: [`cursorLineUp`](https://codemirror.net/6/docs/ref/#commands.cursorLineUp) ([`selectLineUp`](https://codemirror.net/6/docs/ref/#commands.selectLineUp) with Shift)\n- Ctrl-n: [`cursorLineDown`](https://codemirror.net/6/docs/ref/#commands.cursorLineDown) ([`selectLineDown`](https://codemirror.net/6/docs/ref/#commands.selectLineDown) with Shift)\n- Ctrl-a: [`cursorLineStart`](https://codemirror.net/6/docs/ref/#commands.cursorLineStart) ([`selectLineStart`](https://codemirror.net/6/docs/ref/#commands.selectLineStart) with Shift)\n- Ctrl-e: [`cursorLineEnd`](https://codemirror.net/6/docs/ref/#commands.cursorLineEnd) ([`selectLineEnd`](https://codemirror.net/6/docs/ref/#commands.selectLineEnd) with Shift)\n- Ctrl-d: [`deleteCharForward`](https://codemirror.net/6/docs/ref/#commands.deleteCharForward)\n- Ctrl-h: [`deleteCharBackward`](https://codemirror.net/6/docs/ref/#commands.deleteCharBackward)\n- Ctrl-k: [`deleteToLineEnd`](https://codemirror.net/6/docs/ref/#commands.deleteToLineEnd)\n- Ctrl-Alt-h: [`deleteGroupBackward`](https://codemirror.net/6/docs/ref/#commands.deleteGroupBackward)\n- Ctrl-o: [`splitLine`](https://codemirror.net/6/docs/ref/#commands.splitLine)\n- Ctrl-t: [`transposeChars`](https://codemirror.net/6/docs/ref/#commands.transposeChars)\n- Ctrl-v: [`cursorPageDown`](https://codemirror.net/6/docs/ref/#commands.cursorPageDown)\n- Alt-v: [`cursorPageUp`](https://codemirror.net/6/docs/ref/#commands.cursorPageUp)\n*/\nconst emacsStyleKeymap = [\n\t{\n\t\tkey: \"Ctrl-b\",\n\t\trun: cursorCharLeft,\n\t\tshift: selectCharLeft,\n\t\tpreventDefault: true\n\t},\n\t{\n\t\tkey: \"Ctrl-f\",\n\t\trun: cursorCharRight,\n\t\tshift: selectCharRight\n\t},\n\t{\n\t\tkey: \"Ctrl-p\",\n\t\trun: cursorLineUp,\n\t\tshift: selectLineUp\n\t},\n\t{\n\t\tkey: \"Ctrl-n\",\n\t\trun: cursorLineDown,\n\t\tshift: selectLineDown\n\t},\n\t{\n\t\tkey: \"Ctrl-a\",\n\t\trun: cursorLineStart,\n\t\tshift: selectLineStart\n\t},\n\t{\n\t\tkey: \"Ctrl-e\",\n\t\trun: cursorLineEnd,\n\t\tshift: selectLineEnd\n\t},\n\t{\n\t\tkey: \"Ctrl-d\",\n\t\trun: deleteCharForward\n\t},\n\t{\n\t\tkey: \"Ctrl-h\",\n\t\trun: deleteCharBackward\n\t},\n\t{\n\t\tkey: \"Ctrl-k\",\n\t\trun: deleteToLineEnd\n\t},\n\t{\n\t\tkey: \"Ctrl-Alt-h\",\n\t\trun: deleteGroupBackward\n\t},\n\t{\n\t\tkey: \"Ctrl-o\",\n\t\trun: splitLine\n\t},\n\t{\n\t\tkey: \"Ctrl-t\",\n\t\trun: transposeChars\n\t},\n\t{\n\t\tkey: \"Ctrl-v\",\n\t\trun: cursorPageDown\n\t}\n];\n/**\nAn array of key bindings closely sticking to platform-standard or\nwidely used bindings. (This includes the bindings from\n[`emacsStyleKeymap`](https://codemirror.net/6/docs/ref/#commands.emacsStyleKeymap), with their `key`\nproperty changed to `mac`.)\n\n- ArrowLeft: [`cursorCharLeft`](https://codemirror.net/6/docs/ref/#commands.cursorCharLeft) ([`selectCharLeft`](https://codemirror.net/6/docs/ref/#commands.selectCharLeft) with Shift)\n- ArrowRight: [`cursorCharRight`](https://codemirror.net/6/docs/ref/#commands.cursorCharRight) ([`selectCharRight`](https://codemirror.net/6/docs/ref/#commands.selectCharRight) with Shift)\n- Ctrl-ArrowLeft (Alt-ArrowLeft on macOS): [`cursorGroupLeft`](https://codemirror.net/6/docs/ref/#commands.cursorGroupLeft) ([`selectGroupLeft`](https://codemirror.net/6/docs/ref/#commands.selectGroupLeft) with Shift)\n- Ctrl-ArrowRight (Alt-ArrowRight on macOS): [`cursorGroupRight`](https://codemirror.net/6/docs/ref/#commands.cursorGroupRight) ([`selectGroupRight`](https://codemirror.net/6/docs/ref/#commands.selectGroupRight) with Shift)\n- Cmd-ArrowLeft (on macOS): [`cursorLineStart`](https://codemirror.net/6/docs/ref/#commands.cursorLineStart) ([`selectLineStart`](https://codemirror.net/6/docs/ref/#commands.selectLineStart) with Shift)\n- Cmd-ArrowRight (on macOS): [`cursorLineEnd`](https://codemirror.net/6/docs/ref/#commands.cursorLineEnd) ([`selectLineEnd`](https://codemirror.net/6/docs/ref/#commands.selectLineEnd) with Shift)\n- ArrowUp: [`cursorLineUp`](https://codemirror.net/6/docs/ref/#commands.cursorLineUp) ([`selectLineUp`](https://codemirror.net/6/docs/ref/#commands.selectLineUp) with Shift)\n- ArrowDown: [`cursorLineDown`](https://codemirror.net/6/docs/ref/#commands.cursorLineDown) ([`selectLineDown`](https://codemirror.net/6/docs/ref/#commands.selectLineDown) with Shift)\n- Cmd-ArrowUp (on macOS): [`cursorDocStart`](https://codemirror.net/6/docs/ref/#commands.cursorDocStart) ([`selectDocStart`](https://codemirror.net/6/docs/ref/#commands.selectDocStart) with Shift)\n- Cmd-ArrowDown (on macOS): [`cursorDocEnd`](https://codemirror.net/6/docs/ref/#commands.cursorDocEnd) ([`selectDocEnd`](https://codemirror.net/6/docs/ref/#commands.selectDocEnd) with Shift)\n- Ctrl-ArrowUp (on macOS): [`cursorPageUp`](https://codemirror.net/6/docs/ref/#commands.cursorPageUp) ([`selectPageUp`](https://codemirror.net/6/docs/ref/#commands.selectPageUp) with Shift)\n- Ctrl-ArrowDown (on macOS): [`cursorPageDown`](https://codemirror.net/6/docs/ref/#commands.cursorPageDown) ([`selectPageDown`](https://codemirror.net/6/docs/ref/#commands.selectPageDown) with Shift)\n- PageUp: [`cursorPageUp`](https://codemirror.net/6/docs/ref/#commands.cursorPageUp) ([`selectPageUp`](https://codemirror.net/6/docs/ref/#commands.selectPageUp) with Shift)\n- PageDown: [`cursorPageDown`](https://codemirror.net/6/docs/ref/#commands.cursorPageDown) ([`selectPageDown`](https://codemirror.net/6/docs/ref/#commands.selectPageDown) with Shift)\n- Home: [`cursorLineBoundaryBackward`](https://codemirror.net/6/docs/ref/#commands.cursorLineBoundaryBackward) ([`selectLineBoundaryBackward`](https://codemirror.net/6/docs/ref/#commands.selectLineBoundaryBackward) with Shift)\n- End: [`cursorLineBoundaryForward`](https://codemirror.net/6/docs/ref/#commands.cursorLineBoundaryForward) ([`selectLineBoundaryForward`](https://codemirror.net/6/docs/ref/#commands.selectLineBoundaryForward) with Shift)\n- Ctrl-Home (Cmd-Home on macOS): [`cursorDocStart`](https://codemirror.net/6/docs/ref/#commands.cursorDocStart) ([`selectDocStart`](https://codemirror.net/6/docs/ref/#commands.selectDocStart) with Shift)\n- Ctrl-End (Cmd-Home on macOS): [`cursorDocEnd`](https://codemirror.net/6/docs/ref/#commands.cursorDocEnd) ([`selectDocEnd`](https://codemirror.net/6/docs/ref/#commands.selectDocEnd) with Shift)\n- Enter and Shift-Enter: [`insertNewlineAndIndent`](https://codemirror.net/6/docs/ref/#commands.insertNewlineAndIndent)\n- Ctrl-a (Cmd-a on macOS): [`selectAll`](https://codemirror.net/6/docs/ref/#commands.selectAll)\n- Backspace: [`deleteCharBackward`](https://codemirror.net/6/docs/ref/#commands.deleteCharBackward)\n- Delete: [`deleteCharForward`](https://codemirror.net/6/docs/ref/#commands.deleteCharForward)\n- Ctrl-Backspace (Alt-Backspace on macOS): [`deleteGroupBackward`](https://codemirror.net/6/docs/ref/#commands.deleteGroupBackward)\n- Ctrl-Delete (Alt-Delete on macOS): [`deleteGroupForward`](https://codemirror.net/6/docs/ref/#commands.deleteGroupForward)\n- Cmd-Backspace (macOS): [`deleteLineBoundaryBackward`](https://codemirror.net/6/docs/ref/#commands.deleteLineBoundaryBackward).\n- Cmd-Delete (macOS): [`deleteLineBoundaryForward`](https://codemirror.net/6/docs/ref/#commands.deleteLineBoundaryForward).\n*/\nconst standardKeymap = /* @__PURE__ */ [\n\t{\n\t\tkey: \"ArrowLeft\",\n\t\trun: cursorCharLeft,\n\t\tshift: selectCharLeft,\n\t\tpreventDefault: true\n\t},\n\t{\n\t\tkey: \"Mod-ArrowLeft\",\n\t\tmac: \"Alt-ArrowLeft\",\n\t\trun: cursorGroupLeft,\n\t\tshift: selectGroupLeft,\n\t\tpreventDefault: true\n\t},\n\t{\n\t\tmac: \"Cmd-ArrowLeft\",\n\t\trun: cursorLineBoundaryLeft,\n\t\tshift: selectLineBoundaryLeft,\n\t\tpreventDefault: true\n\t},\n\t{\n\t\tkey: \"ArrowRight\",\n\t\trun: cursorCharRight,\n\t\tshift: selectCharRight,\n\t\tpreventDefault: true\n\t},\n\t{\n\t\tkey: \"Mod-ArrowRight\",\n\t\tmac: \"Alt-ArrowRight\",\n\t\trun: cursorGroupRight,\n\t\tshift: selectGroupRight,\n\t\tpreventDefault: true\n\t},\n\t{\n\t\tmac: \"Cmd-ArrowRight\",\n\t\trun: cursorLineBoundaryRight,\n\t\tshift: selectLineBoundaryRight,\n\t\tpreventDefault: true\n\t},\n\t{\n\t\tkey: \"ArrowUp\",\n\t\trun: cursorLineUp,\n\t\tshift: selectLineUp,\n\t\tpreventDefault: true\n\t},\n\t{\n\t\tmac: \"Cmd-ArrowUp\",\n\t\trun: cursorDocStart,\n\t\tshift: selectDocStart\n\t},\n\t{\n\t\tmac: \"Ctrl-ArrowUp\",\n\t\trun: cursorPageUp,\n\t\tshift: selectPageUp\n\t},\n\t{\n\t\tkey: \"ArrowDown\",\n\t\trun: cursorLineDown,\n\t\tshift: selectLineDown,\n\t\tpreventDefault: true\n\t},\n\t{\n\t\tmac: \"Cmd-ArrowDown\",\n\t\trun: cursorDocEnd,\n\t\tshift: selectDocEnd\n\t},\n\t{\n\t\tmac: \"Ctrl-ArrowDown\",\n\t\trun: cursorPageDown,\n\t\tshift: selectPageDown\n\t},\n\t{\n\t\tkey: \"PageUp\",\n\t\trun: cursorPageUp,\n\t\tshift: selectPageUp\n\t},\n\t{\n\t\tkey: \"PageDown\",\n\t\trun: cursorPageDown,\n\t\tshift: selectPageDown\n\t},\n\t{\n\t\tkey: \"Home\",\n\t\trun: cursorLineBoundaryBackward,\n\t\tshift: selectLineBoundaryBackward,\n\t\tpreventDefault: true\n\t},\n\t{\n\t\tkey: \"Mod-Home\",\n\t\trun: cursorDocStart,\n\t\tshift: selectDocStart\n\t},\n\t{\n\t\tkey: \"End\",\n\t\trun: cursorLineBoundaryForward,\n\t\tshift: selectLineBoundaryForward,\n\t\tpreventDefault: true\n\t},\n\t{\n\t\tkey: \"Mod-End\",\n\t\trun: cursorDocEnd,\n\t\tshift: selectDocEnd\n\t},\n\t{\n\t\tkey: \"Enter\",\n\t\trun: insertNewlineAndIndent,\n\t\tshift: insertNewlineAndIndent\n\t},\n\t{\n\t\tkey: \"Mod-a\",\n\t\trun: selectAll\n\t},\n\t{\n\t\tkey: \"Backspace\",\n\t\trun: deleteCharBackward,\n\t\tshift: deleteCharBackward\n\t},\n\t{\n\t\tkey: \"Delete\",\n\t\trun: deleteCharForward\n\t},\n\t{\n\t\tkey: \"Mod-Backspace\",\n\t\tmac: \"Alt-Backspace\",\n\t\trun: deleteGroupBackward\n\t},\n\t{\n\t\tkey: \"Mod-Delete\",\n\t\tmac: \"Alt-Delete\",\n\t\trun: deleteGroupForward\n\t},\n\t{\n\t\tmac: \"Mod-Backspace\",\n\t\trun: deleteLineBoundaryBackward\n\t},\n\t{\n\t\tmac: \"Mod-Delete\",\n\t\trun: deleteLineBoundaryForward\n\t}\n].concat(/* @__PURE__ */ emacsStyleKeymap.map((b) => ({\n\tmac: b.key,\n\trun: b.run,\n\tshift: b.shift\n})));\n/**\nThe default keymap. Includes all bindings from\n[`standardKeymap`](https://codemirror.net/6/docs/ref/#commands.standardKeymap) plus the following:\n\n- Alt-ArrowLeft (Ctrl-ArrowLeft on macOS): [`cursorSyntaxLeft`](https://codemirror.net/6/docs/ref/#commands.cursorSyntaxLeft) ([`selectSyntaxLeft`](https://codemirror.net/6/docs/ref/#commands.selectSyntaxLeft) with Shift)\n- Alt-ArrowRight (Ctrl-ArrowRight on macOS): [`cursorSyntaxRight`](https://codemirror.net/6/docs/ref/#commands.cursorSyntaxRight) ([`selectSyntaxRight`](https://codemirror.net/6/docs/ref/#commands.selectSyntaxRight) with Shift)\n- Alt-ArrowUp: [`moveLineUp`](https://codemirror.net/6/docs/ref/#commands.moveLineUp)\n- Alt-ArrowDown: [`moveLineDown`](https://codemirror.net/6/docs/ref/#commands.moveLineDown)\n- Shift-Alt-ArrowUp: [`copyLineUp`](https://codemirror.net/6/docs/ref/#commands.copyLineUp)\n- Shift-Alt-ArrowDown: [`copyLineDown`](https://codemirror.net/6/docs/ref/#commands.copyLineDown)\n- Escape: [`simplifySelection`](https://codemirror.net/6/docs/ref/#commands.simplifySelection)\n- Ctrl-Enter (Cmd-Enter on macOS): [`insertBlankLine`](https://codemirror.net/6/docs/ref/#commands.insertBlankLine)\n- Alt-l (Ctrl-l on macOS): [`selectLine`](https://codemirror.net/6/docs/ref/#commands.selectLine)\n- Ctrl-i (Cmd-i on macOS): [`selectParentSyntax`](https://codemirror.net/6/docs/ref/#commands.selectParentSyntax)\n- Ctrl-[ (Cmd-[ on macOS): [`indentLess`](https://codemirror.net/6/docs/ref/#commands.indentLess)\n- Ctrl-] (Cmd-] on macOS): [`indentMore`](https://codemirror.net/6/docs/ref/#commands.indentMore)\n- Ctrl-Alt-\\\\ (Cmd-Alt-\\\\ on macOS): [`indentSelection`](https://codemirror.net/6/docs/ref/#commands.indentSelection)\n- Shift-Ctrl-k (Shift-Cmd-k on macOS): [`deleteLine`](https://codemirror.net/6/docs/ref/#commands.deleteLine)\n- Shift-Ctrl-\\\\ (Shift-Cmd-\\\\ on macOS): [`cursorMatchingBracket`](https://codemirror.net/6/docs/ref/#commands.cursorMatchingBracket)\n- Ctrl-/ (Cmd-/ on macOS): [`toggleComment`](https://codemirror.net/6/docs/ref/#commands.toggleComment).\n- Shift-Alt-a: [`toggleBlockComment`](https://codemirror.net/6/docs/ref/#commands.toggleBlockComment).\n- Ctrl-m (Alt-Shift-m on macOS): [`toggleTabFocusMode`](https://codemirror.net/6/docs/ref/#commands.toggleTabFocusMode).\n*/\nconst defaultKeymap = /* @__PURE__ */ [\n\t{\n\t\tkey: \"Alt-ArrowLeft\",\n\t\tmac: \"Ctrl-ArrowLeft\",\n\t\trun: cursorSyntaxLeft,\n\t\tshift: selectSyntaxLeft\n\t},\n\t{\n\t\tkey: \"Alt-ArrowRight\",\n\t\tmac: \"Ctrl-ArrowRight\",\n\t\trun: cursorSyntaxRight,\n\t\tshift: selectSyntaxRight\n\t},\n\t{\n\t\tkey: \"Alt-ArrowUp\",\n\t\trun: moveLineUp\n\t},\n\t{\n\t\tkey: \"Shift-Alt-ArrowUp\",\n\t\trun: copyLineUp\n\t},\n\t{\n\t\tkey: \"Alt-ArrowDown\",\n\t\trun: moveLineDown\n\t},\n\t{\n\t\tkey: \"Shift-Alt-ArrowDown\",\n\t\trun: copyLineDown\n\t},\n\t{\n\t\tkey: \"Escape\",\n\t\trun: simplifySelection\n\t},\n\t{\n\t\tkey: \"Mod-Enter\",\n\t\trun: insertBlankLine\n\t},\n\t{\n\t\tkey: \"Alt-l\",\n\t\tmac: \"Ctrl-l\",\n\t\trun: selectLine\n\t},\n\t{\n\t\tkey: \"Mod-i\",\n\t\trun: selectParentSyntax,\n\t\tpreventDefault: true\n\t},\n\t{\n\t\tkey: \"Mod-[\",\n\t\trun: indentLess\n\t},\n\t{\n\t\tkey: \"Mod-]\",\n\t\trun: indentMore\n\t},\n\t{\n\t\tkey: \"Mod-Alt-\\\\\",\n\t\trun: indentSelection\n\t},\n\t{\n\t\tkey: \"Shift-Mod-k\",\n\t\trun: deleteLine\n\t},\n\t{\n\t\tkey: \"Shift-Mod-\\\\\",\n\t\trun: cursorMatchingBracket\n\t},\n\t{\n\t\tkey: \"Mod-/\",\n\t\trun: toggleComment\n\t},\n\t{\n\t\tkey: \"Alt-A\",\n\t\trun: toggleBlockComment\n\t},\n\t{\n\t\tkey: \"Ctrl-m\",\n\t\tmac: \"Shift-Alt-m\",\n\t\trun: toggleTabFocusMode\n\t}\n].concat(standardKeymap);\n/**\nA binding that binds Tab to [`indentMore`](https://codemirror.net/6/docs/ref/#commands.indentMore) and\nShift-Tab to [`indentLess`](https://codemirror.net/6/docs/ref/#commands.indentLess).\nPlease see the [Tab example](../../examples/tab/) before using\nthis.\n*/\nconst indentWithTab = {\n\tkey: \"Tab\",\n\trun: indentMore,\n\tshift: indentLess\n};\n//#endregion\n//#region ../../node_modules/.pnpm/@codemirror+search@6.5.10/node_modules/@codemirror/search/dist/index.js\nconst basicNormalize = typeof String.prototype.normalize == \"function\" ? (x) => x.normalize(\"NFKD\") : (x) => x;\n/**\nA search cursor provides an iterator over text matches in a\ndocument.\n*/\nvar SearchCursor = class {\n\t/**\n\tCreate a text cursor. The query is the search string, `from` to\n\t`to` provides the region to search.\n\t\n\tWhen `normalize` is given, it will be called, on both the query\n\tstring and the content it is matched against, before comparing.\n\tYou can, for example, create a case-insensitive search by\n\tpassing `s => s.toLowerCase()`.\n\t\n\tText is always normalized with\n\t[`.normalize(\"NFKD\")`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize)\n\t(when supported).\n\t*/\n\tconstructor(text, query, from = 0, to = text.length, normalize, test) {\n\t\tthis.test = test;\n\t\t/**\n\t\tThe current match (only holds a meaningful value after\n\t\t[`next`](https://codemirror.net/6/docs/ref/#search.SearchCursor.next) has been called and when\n\t\t`done` is false).\n\t\t*/\n\t\tthis.value = {\n\t\t\tfrom: 0,\n\t\t\tto: 0\n\t\t};\n\t\t/**\n\t\tWhether the end of the iterated region has been reached.\n\t\t*/\n\t\tthis.done = false;\n\t\tthis.matches = [];\n\t\tthis.buffer = \"\";\n\t\tthis.bufferPos = 0;\n\t\tthis.iter = text.iterRange(from, to);\n\t\tthis.bufferStart = from;\n\t\tthis.normalize = normalize ? (x) => normalize(basicNormalize(x)) : basicNormalize;\n\t\tthis.query = this.normalize(query);\n\t}\n\tpeek() {\n\t\tif (this.bufferPos == this.buffer.length) {\n\t\t\tthis.bufferStart += this.buffer.length;\n\t\t\tthis.iter.next();\n\t\t\tif (this.iter.done) return -1;\n\t\t\tthis.bufferPos = 0;\n\t\t\tthis.buffer = this.iter.value;\n\t\t}\n\t\treturn codePointAt(this.buffer, this.bufferPos);\n\t}\n\t/**\n\tLook for the next match. Updates the iterator's\n\t[`value`](https://codemirror.net/6/docs/ref/#search.SearchCursor.value) and\n\t[`done`](https://codemirror.net/6/docs/ref/#search.SearchCursor.done) properties. Should be called\n\tat least once before using the cursor.\n\t*/\n\tnext() {\n\t\twhile (this.matches.length) this.matches.pop();\n\t\treturn this.nextOverlapping();\n\t}\n\t/**\n\tThe `next` method will ignore matches that partially overlap a\n\tprevious match. This method behaves like `next`, but includes\n\tsuch matches.\n\t*/\n\tnextOverlapping() {\n\t\tfor (;;) {\n\t\t\tlet next = this.peek();\n\t\t\tif (next < 0) {\n\t\t\t\tthis.done = true;\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\tlet str = fromCodePoint(next), start = this.bufferStart + this.bufferPos;\n\t\t\tthis.bufferPos += codePointSize(next);\n\t\t\tlet norm = this.normalize(str);\n\t\t\tif (norm.length) for (let i = 0, pos = start;; i++) {\n\t\t\t\tlet code = norm.charCodeAt(i);\n\t\t\t\tlet match = this.match(code, pos, this.bufferPos + this.bufferStart);\n\t\t\t\tif (i == norm.length - 1) {\n\t\t\t\t\tif (match) {\n\t\t\t\t\t\tthis.value = match;\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (pos == start && i < str.length && str.charCodeAt(i) == code) pos++;\n\t\t\t}\n\t\t}\n\t}\n\tmatch(code, pos, end) {\n\t\tlet match = null;\n\t\tfor (let i = 0; i < this.matches.length; i += 2) {\n\t\t\tlet index = this.matches[i], keep = false;\n\t\t\tif (this.query.charCodeAt(index) == code) if (index == this.query.length - 1) match = {\n\t\t\t\tfrom: this.matches[i + 1],\n\t\t\t\tto: end\n\t\t\t};\n\t\t\telse {\n\t\t\t\tthis.matches[i]++;\n\t\t\t\tkeep = true;\n\t\t\t}\n\t\t\tif (!keep) {\n\t\t\t\tthis.matches.splice(i, 2);\n\t\t\t\ti -= 2;\n\t\t\t}\n\t\t}\n\t\tif (this.query.charCodeAt(0) == code) if (this.query.length == 1) match = {\n\t\t\tfrom: pos,\n\t\t\tto: end\n\t\t};\n\t\telse this.matches.push(1, pos);\n\t\tif (match && this.test && !this.test(match.from, match.to, this.buffer, this.bufferStart)) match = null;\n\t\treturn match;\n\t}\n};\nif (typeof Symbol != \"undefined\") SearchCursor.prototype[Symbol.iterator] = function() {\n\treturn this;\n};\nconst empty = {\n\tfrom: -1,\n\tto: -1,\n\tmatch: /* @__PURE__ */ /.*/.exec(\"\")\n};\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*/\nvar RegExpCursor = class {\n\t/**\n\tCreate a cursor that will search the given range in the given\n\tdocument. `query` should be the raw pattern (as you'd pass it to\n\t`new RegExp`).\n\t*/\n\tconstructor(text, query, options, from = 0, to = text.length) {\n\t\tthis.text = text;\n\t\tthis.to = to;\n\t\tthis.curLine = \"\";\n\t\t/**\n\t\tSet to `true` when the cursor has reached the end of the search\n\t\trange.\n\t\t*/\n\t\tthis.done = false;\n\t\t/**\n\t\tWill contain an object with the extent of the match and the\n\t\tmatch object when [`next`](https://codemirror.net/6/docs/ref/#search.RegExpCursor.next)\n\t\tsucessfully finds a match.\n\t\t*/\n\t\tthis.value = empty;\n\t\tif (/\\\\[sWDnr]|\\n|\\r|\\[\\^/.test(query)) return new MultilineRegExpCursor(text, query, options, from, to);\n\t\tthis.re = new RegExp(query, baseFlags + ((options === null || options === void 0 ? void 0 : options.ignoreCase) ? \"i\" : \"\"));\n\t\tthis.test = options === null || options === void 0 ? void 0 : options.test;\n\t\tthis.iter = text.iter();\n\t\tthis.curLineStart = text.lineAt(from).from;\n\t\tthis.matchPos = toCharEnd(text, from);\n\t\tthis.getLine(this.curLineStart);\n\t}\n\tgetLine(skip) {\n\t\tthis.iter.next(skip);\n\t\tif (this.iter.lineBreak) this.curLine = \"\";\n\t\telse {\n\t\t\tthis.curLine = this.iter.value;\n\t\t\tif (this.curLineStart + this.curLine.length > this.to) this.curLine = this.curLine.slice(0, this.to - this.curLineStart);\n\t\t\tthis.iter.next();\n\t\t}\n\t}\n\tnextLine() {\n\t\tthis.curLineStart = this.curLineStart + this.curLine.length + 1;\n\t\tif (this.curLineStart > this.to) this.curLine = \"\";\n\t\telse this.getLine(0);\n\t}\n\t/**\n\tMove to the next match, if there is one.\n\t*/\n\tnext() {\n\t\tfor (let off = this.matchPos - this.curLineStart;;) {\n\t\t\tthis.re.lastIndex = off;\n\t\t\tlet match = this.matchPos <= this.to && this.re.exec(this.curLine);\n\t\t\tif (match) {\n\t\t\t\tlet from = this.curLineStart + match.index, to = from + match[0].length;\n\t\t\t\tthis.matchPos = toCharEnd(this.text, to + (from == to ? 1 : 0));\n\t\t\t\tif (from == this.curLineStart + this.curLine.length) this.nextLine();\n\t\t\t\tif ((from < to || from > this.value.to) && (!this.test || this.test(from, to, match))) {\n\t\t\t\t\tthis.value = {\n\t\t\t\t\t\tfrom,\n\t\t\t\t\t\tto,\n\t\t\t\t\t\tmatch\n\t\t\t\t\t};\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\toff = this.matchPos - this.curLineStart;\n\t\t\t} else if (this.curLineStart + this.curLine.length < this.to) {\n\t\t\t\tthis.nextLine();\n\t\t\t\toff = 0;\n\t\t\t} else {\n\t\t\t\tthis.done = true;\n\t\t\t\treturn this;\n\t\t\t}\n\t\t}\n\t}\n};\nconst flattened = /* @__PURE__ */ new WeakMap();\nvar FlattenedDoc = class FlattenedDoc {\n\tconstructor(from, text) {\n\t\tthis.from = from;\n\t\tthis.text = text;\n\t}\n\tget to() {\n\t\treturn this.from + this.text.length;\n\t}\n\tstatic get(doc, from, to) {\n\t\tlet cached = flattened.get(doc);\n\t\tif (!cached || cached.from >= to || cached.to <= from) {\n\t\t\tlet flat = new FlattenedDoc(from, doc.sliceString(from, to));\n\t\t\tflattened.set(doc, flat);\n\t\t\treturn flat;\n\t\t}\n\t\tif (cached.from == from && cached.to == to) return cached;\n\t\tlet { text, from: cachedFrom } = cached;\n\t\tif (cachedFrom > from) {\n\t\t\ttext = doc.sliceString(from, cachedFrom) + text;\n\t\t\tcachedFrom = from;\n\t\t}\n\t\tif (cached.to < to) text += doc.sliceString(cached.to, to);\n\t\tflattened.set(doc, new FlattenedDoc(cachedFrom, text));\n\t\treturn new FlattenedDoc(from, text.slice(from - cachedFrom, to - cachedFrom));\n\t}\n};\nvar MultilineRegExpCursor = class {\n\tconstructor(text, query, options, from, to) {\n\t\tthis.text = text;\n\t\tthis.to = to;\n\t\tthis.done = false;\n\t\tthis.value = empty;\n\t\tthis.matchPos = toCharEnd(text, from);\n\t\tthis.re = new RegExp(query, baseFlags + ((options === null || options === void 0 ? void 0 : options.ignoreCase) ? \"i\" : \"\"));\n\t\tthis.test = options === null || options === void 0 ? void 0 : options.test;\n\t\tthis.flat = FlattenedDoc.get(text, from, this.chunkEnd(from + 5e3));\n\t}\n\tchunkEnd(pos) {\n\t\treturn pos >= this.to ? this.to : this.text.lineAt(pos).to;\n\t}\n\tnext() {\n\t\tfor (;;) {\n\t\t\tlet off = this.re.lastIndex = this.matchPos - this.flat.from;\n\t\t\tlet match = this.re.exec(this.flat.text);\n\t\t\tif (match && !match[0] && match.index == off) {\n\t\t\t\tthis.re.lastIndex = off + 1;\n\t\t\t\tmatch = this.re.exec(this.flat.text);\n\t\t\t}\n\t\t\tif (match) {\n\t\t\t\tlet from = this.flat.from + match.index, to = from + match[0].length;\n\t\t\t\tif ((this.flat.to >= this.to || match.index + match[0].length <= this.flat.text.length - 10) && (!this.test || this.test(from, to, match))) {\n\t\t\t\t\tthis.value = {\n\t\t\t\t\t\tfrom,\n\t\t\t\t\t\tto,\n\t\t\t\t\t\tmatch\n\t\t\t\t\t};\n\t\t\t\t\tthis.matchPos = toCharEnd(this.text, to + (from == to ? 1 : 0));\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.flat.to == this.to) {\n\t\t\t\tthis.done = true;\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\tthis.flat = FlattenedDoc.get(this.text, this.flat.from, this.chunkEnd(this.flat.from + this.flat.text.length * 2));\n\t\t}\n\t}\n};\nif (typeof Symbol != \"undefined\") RegExpCursor.prototype[Symbol.iterator] = MultilineRegExpCursor.prototype[Symbol.iterator] = function() {\n\treturn this;\n};\nfunction validRegExp(source) {\n\ttry {\n\t\tnew RegExp(source, baseFlags);\n\t\treturn true;\n\t} catch (_a) {\n\t\treturn false;\n\t}\n}\nfunction toCharEnd(text, pos) {\n\tif (pos >= text.length) return pos;\n\tlet line = text.lineAt(pos), next;\n\twhile (pos < line.to && (next = line.text.charCodeAt(pos - line.from)) >= 56320 && next < 57344) pos++;\n\treturn pos;\n}\nfunction createLineDialog(view) {\n\tlet input = crelt(\"input\", {\n\t\tclass: \"cm-textfield\",\n\t\tname: \"line\",\n\t\tvalue: String(view.state.doc.lineAt(view.state.selection.main.head).number)\n\t});\n\tlet dom = crelt(\"form\", {\n\t\tclass: \"cm-gotoLine\",\n\t\tonkeydown: (event) => {\n\t\t\tif (event.keyCode == 27) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tview.dispatch({ effects: dialogEffect.of(false) });\n\t\t\t\tview.focus();\n\t\t\t} else if (event.keyCode == 13) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tgo();\n\t\t\t}\n\t\t},\n\t\tonsubmit: (event) => {\n\t\t\tevent.preventDefault();\n\t\t\tgo();\n\t\t}\n\t}, crelt(\"label\", view.state.phrase(\"Go to line\"), \": \", input), \" \", crelt(\"button\", {\n\t\tclass: \"cm-button\",\n\t\ttype: \"submit\"\n\t}, view.state.phrase(\"go\")), crelt(\"button\", {\n\t\tname: \"close\",\n\t\tonclick: () => {\n\t\t\tview.dispatch({ effects: dialogEffect.of(false) });\n\t\t\tview.focus();\n\t\t},\n\t\t\"aria-label\": view.state.phrase(\"close\"),\n\t\ttype: \"button\"\n\t}, [\"×\"]));\n\tfunction go() {\n\t\tlet match = /^([+-])?(\\d+)?(:\\d+)?(%)?$/.exec(input.value);\n\t\tif (!match) return;\n\t\tlet { state } = view, startLine = state.doc.lineAt(state.selection.main.head);\n\t\tlet [, sign, ln, cl, percent] = match;\n\t\tlet col = cl ? +cl.slice(1) : 0;\n\t\tlet line = ln ? +ln : startLine.number;\n\t\tif (ln && percent) {\n\t\t\tlet pc = line / 100;\n\t\t\tif (sign) pc = pc * (sign == \"-\" ? -1 : 1) + startLine.number / state.doc.lines;\n\t\t\tline = Math.round(state.doc.lines * pc);\n\t\t} else if (ln && sign) line = line * (sign == \"-\" ? -1 : 1) + startLine.number;\n\t\tlet docLine = state.doc.line(Math.max(1, Math.min(state.doc.lines, line)));\n\t\tlet selection = EditorSelection.cursor(docLine.from + Math.max(0, Math.min(col, docLine.length)));\n\t\tview.dispatch({\n\t\t\teffects: [dialogEffect.of(false), EditorView.scrollIntoView(selection.from, { y: \"center\" })],\n\t\t\tselection\n\t\t});\n\t\tview.focus();\n\t}\n\treturn { dom };\n}\nconst dialogEffect = /* @__PURE__ */ StateEffect.define();\nconst dialogField = /* @__PURE__ */ StateField.define({\n\tcreate() {\n\t\treturn true;\n\t},\n\tupdate(value, tr) {\n\t\tfor (let e of tr.effects) if (e.is(dialogEffect)) value = e.value;\n\t\treturn value;\n\t},\n\tprovide: (f) => showPanel.from(f, (val) => val ? createLineDialog : null)\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\tlet panel = getPanel(view, createLineDialog);\n\tif (!panel) {\n\t\tlet effects = [dialogEffect.of(true)];\n\t\tif (view.state.field(dialogField, false) == null) effects.push(StateEffect.appendConfig.of([dialogField, baseTheme$1]));\n\t\tview.dispatch({ effects });\n\t\tpanel = getPanel(view, createLineDialog);\n\t}\n\tif (panel) panel.dom.querySelector(\"input\").select();\n\treturn true;\n};\nconst baseTheme$1 = /* @__PURE__ */ EditorView.baseTheme({ \".cm-panel.cm-gotoLine\": {\n\tpadding: \"2px 6px 4px\",\n\tposition: \"relative\",\n\t\"& label\": { fontSize: \"80%\" },\n\t\"& [name=close]\": {\n\t\tposition: \"absolute\",\n\t\ttop: \"0\",\n\t\tbottom: \"0\",\n\t\tright: \"4px\",\n\t\tbackgroundColor: \"inherit\",\n\t\tborder: \"none\",\n\t\tfont: \"inherit\",\n\t\tpadding: \"0\"\n\t}\n} });\nconst defaultHighlightOptions = {\n\thighlightWordAroundCursor: false,\n\tminSelectionLength: 1,\n\tmaxMatches: 100,\n\twholeWords: false\n};\nconst highlightConfig = /* @__PURE__ */ Facet.define({ combine(options) {\n\treturn combineConfig(options, defaultHighlightOptions, {\n\t\thighlightWordAroundCursor: (a, b) => a || b,\n\t\tminSelectionLength: Math.min,\n\t\tmaxMatches: Math.min\n\t});\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\tlet ext = [defaultTheme, matchHighlighter];\n\tif (options) ext.push(highlightConfig.of(options));\n\treturn ext;\n}\nconst matchDeco = /* @__PURE__ */ Decoration.mark({ class: \"cm-selectionMatch\" });\nconst mainMatchDeco = /* @__PURE__ */ Decoration.mark({ class: \"cm-selectionMatch cm-selectionMatch-main\" });\nfunction insideWordBoundaries(check, state, from, to) {\n\treturn (from == 0 || check(state.sliceDoc(from - 1, from)) != CharCategory.Word) && (to == state.doc.length || check(state.sliceDoc(to, to + 1)) != CharCategory.Word);\n}\nfunction insideWord(check, state, from, to) {\n\treturn check(state.sliceDoc(from, from + 1)) == CharCategory.Word && check(state.sliceDoc(to - 1, to)) == CharCategory.Word;\n}\nconst matchHighlighter = /* @__PURE__ */ ViewPlugin.fromClass(class {\n\tconstructor(view) {\n\t\tthis.decorations = this.getDeco(view);\n\t}\n\tupdate(update) {\n\t\tif (update.selectionSet || update.docChanged || update.viewportChanged) this.decorations = this.getDeco(update.view);\n\t}\n\tgetDeco(view) {\n\t\tlet conf = view.state.facet(highlightConfig);\n\t\tlet { state } = view, sel = state.selection;\n\t\tif (sel.ranges.length > 1) return Decoration.none;\n\t\tlet range = sel.main, query, check = null;\n\t\tif (range.empty) {\n\t\t\tif (!conf.highlightWordAroundCursor) return Decoration.none;\n\t\t\tlet word = state.wordAt(range.head);\n\t\t\tif (!word) return Decoration.none;\n\t\t\tcheck = state.charCategorizer(range.head);\n\t\t\tquery = state.sliceDoc(word.from, word.to);\n\t\t} else {\n\t\t\tlet len = range.to - range.from;\n\t\t\tif (len < conf.minSelectionLength || len > 200) return Decoration.none;\n\t\t\tif (conf.wholeWords) {\n\t\t\t\tquery = state.sliceDoc(range.from, range.to);\n\t\t\t\tcheck = state.charCategorizer(range.head);\n\t\t\t\tif (!(insideWordBoundaries(check, state, range.from, range.to) && insideWord(check, state, range.from, range.to))) return Decoration.none;\n\t\t\t} else {\n\t\t\t\tquery = state.sliceDoc(range.from, range.to);\n\t\t\t\tif (!query) return Decoration.none;\n\t\t\t}\n\t\t}\n\t\tlet deco = [];\n\t\tfor (let part of view.visibleRanges) {\n\t\t\tlet cursor = new SearchCursor(state.doc, query, part.from, part.to);\n\t\t\twhile (!cursor.next().done) {\n\t\t\t\tlet { from, to } = cursor.value;\n\t\t\t\tif (!check || insideWordBoundaries(check, state, from, to)) {\n\t\t\t\t\tif (range.empty && from <= range.from && to >= range.to) deco.push(mainMatchDeco.range(from, to));\n\t\t\t\t\telse if (from >= range.to || to <= range.from) deco.push(matchDeco.range(from, to));\n\t\t\t\t\tif (deco.length > conf.maxMatches) return Decoration.none;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn Decoration.set(deco);\n\t}\n}, { decorations: (v) => v.decorations });\nconst defaultTheme = /* @__PURE__ */ EditorView.baseTheme({\n\t\".cm-selectionMatch\": { backgroundColor: \"#99ff7780\" },\n\t\".cm-searchMatch .cm-selectionMatch\": { backgroundColor: \"transparent\" }\n});\nconst selectWord = ({ state, dispatch }) => {\n\tlet { selection } = state;\n\tlet newSel = EditorSelection.create(selection.ranges.map((range) => state.wordAt(range.head) || EditorSelection.cursor(range.head)), selection.mainIndex);\n\tif (newSel.eq(selection)) return false;\n\tdispatch(state.update({ selection: newSel }));\n\treturn true;\n};\nfunction findNextOccurrence(state, query) {\n\tlet { main, ranges } = state.selection;\n\tlet word = state.wordAt(main.head), fullWord = word && word.from == main.from && word.to == main.to;\n\tfor (let cycled = false, cursor = new SearchCursor(state.doc, query, ranges[ranges.length - 1].to);;) {\n\t\tcursor.next();\n\t\tif (cursor.done) {\n\t\t\tif (cycled) return null;\n\t\t\tcursor = new SearchCursor(state.doc, query, 0, Math.max(0, ranges[ranges.length - 1].from - 1));\n\t\t\tcycled = true;\n\t\t} else {\n\t\t\tif (cycled && ranges.some((r) => r.from == cursor.value.from)) continue;\n\t\t\tif (fullWord) {\n\t\t\t\tlet word = state.wordAt(cursor.value.from);\n\t\t\t\tif (!word || word.from != cursor.value.from || word.to != cursor.value.to) continue;\n\t\t\t}\n\t\t\treturn cursor.value;\n\t\t}\n\t}\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\tlet { ranges } = state.selection;\n\tif (ranges.some((sel) => sel.from === sel.to)) return selectWord({\n\t\tstate,\n\t\tdispatch\n\t});\n\tlet searchedText = state.sliceDoc(ranges[0].from, ranges[0].to);\n\tif (state.selection.ranges.some((r) => state.sliceDoc(r.from, r.to) != searchedText)) return false;\n\tlet range = findNextOccurrence(state, searchedText);\n\tif (!range) return false;\n\tdispatch(state.update({\n\t\tselection: state.selection.addRange(EditorSelection.range(range.from, range.to), false),\n\t\teffects: EditorView.scrollIntoView(range.to)\n\t}));\n\treturn true;\n};\nconst searchConfigFacet = /* @__PURE__ */ Facet.define({ combine(configs) {\n\treturn combineConfig(configs, {\n\t\ttop: false,\n\t\tcaseSensitive: false,\n\t\tliteral: false,\n\t\tregexp: false,\n\t\twholeWord: false,\n\t\tcreatePanel: (view) => new SearchPanel(view),\n\t\tscrollToMatch: (range) => EditorView.scrollIntoView(range)\n\t});\n} });\n/**\nA search query. Part of the editor's search state.\n*/\nvar SearchQuery = class {\n\t/**\n\tCreate a query object.\n\t*/\n\tconstructor(config) {\n\t\tthis.search = config.search;\n\t\tthis.caseSensitive = !!config.caseSensitive;\n\t\tthis.literal = !!config.literal;\n\t\tthis.regexp = !!config.regexp;\n\t\tthis.replace = config.replace || \"\";\n\t\tthis.valid = !!this.search && (!this.regexp || validRegExp(this.search));\n\t\tthis.unquoted = this.unquote(this.search);\n\t\tthis.wholeWord = !!config.wholeWord;\n\t}\n\t/**\n\t@internal\n\t*/\n\tunquote(text) {\n\t\treturn this.literal ? text : text.replace(/\\\\([nrt\\\\])/g, (_, ch) => ch == \"n\" ? \"\\n\" : ch == \"r\" ? \"\\r\" : ch == \"t\" ? \"\t\" : \"\\\\\");\n\t}\n\t/**\n\tCompare this query to another query.\n\t*/\n\teq(other) {\n\t\treturn this.search == other.search && this.replace == other.replace && this.caseSensitive == other.caseSensitive && this.regexp == other.regexp && this.wholeWord == other.wholeWord;\n\t}\n\t/**\n\t@internal\n\t*/\n\tcreate() {\n\t\treturn this.regexp ? new RegExpQuery(this) : new StringQuery(this);\n\t}\n\t/**\n\tGet a search cursor for this query, searching through the given\n\trange in the given state.\n\t*/\n\tgetCursor(state, from = 0, to) {\n\t\tlet st = state.doc ? state : EditorState.create({ doc: state });\n\t\tif (to == null) to = st.doc.length;\n\t\treturn this.regexp ? regexpCursor(this, st, from, to) : stringCursor(this, st, from, to);\n\t}\n};\nvar QueryType = class {\n\tconstructor(spec) {\n\t\tthis.spec = spec;\n\t}\n};\nfunction stringCursor(spec, state, from, to) {\n\treturn new SearchCursor(state.doc, spec.unquoted, from, to, spec.caseSensitive ? void 0 : (x) => x.toLowerCase(), spec.wholeWord ? stringWordTest(state.doc, state.charCategorizer(state.selection.main.head)) : void 0);\n}\nfunction stringWordTest(doc, categorizer) {\n\treturn (from, to, buf, bufPos) => {\n\t\tif (bufPos > from || bufPos + buf.length < to) {\n\t\t\tbufPos = Math.max(0, from - 2);\n\t\t\tbuf = doc.sliceString(bufPos, Math.min(doc.length, to + 2));\n\t\t}\n\t\treturn (categorizer(charBefore(buf, from - bufPos)) != CharCategory.Word || categorizer(charAfter(buf, from - bufPos)) != CharCategory.Word) && (categorizer(charAfter(buf, to - bufPos)) != CharCategory.Word || categorizer(charBefore(buf, to - bufPos)) != CharCategory.Word);\n\t};\n}\nvar StringQuery = class extends QueryType {\n\tconstructor(spec) {\n\t\tsuper(spec);\n\t}\n\tnextMatch(state, curFrom, curTo) {\n\t\tlet cursor = stringCursor(this.spec, state, curTo, state.doc.length).nextOverlapping();\n\t\tif (cursor.done) {\n\t\t\tlet end = Math.min(state.doc.length, curFrom + this.spec.unquoted.length);\n\t\t\tcursor = stringCursor(this.spec, state, 0, end).nextOverlapping();\n\t\t}\n\t\treturn cursor.done || cursor.value.from == curFrom && cursor.value.to == curTo ? null : cursor.value;\n\t}\n\tprevMatchInRange(state, from, to) {\n\t\tfor (let pos = to;;) {\n\t\t\tlet start = Math.max(from, pos - 1e4 - this.spec.unquoted.length);\n\t\t\tlet cursor = stringCursor(this.spec, state, start, pos), range = null;\n\t\t\twhile (!cursor.nextOverlapping().done) range = cursor.value;\n\t\t\tif (range) return range;\n\t\t\tif (start == from) return null;\n\t\t\tpos -= 1e4;\n\t\t}\n\t}\n\tprevMatch(state, curFrom, curTo) {\n\t\tlet found = this.prevMatchInRange(state, 0, curFrom);\n\t\tif (!found) found = this.prevMatchInRange(state, Math.max(0, curTo - this.spec.unquoted.length), state.doc.length);\n\t\treturn found && (found.from != curFrom || found.to != curTo) ? found : null;\n\t}\n\tgetReplacement(_result) {\n\t\treturn this.spec.unquote(this.spec.replace);\n\t}\n\tmatchAll(state, limit) {\n\t\tlet cursor = stringCursor(this.spec, state, 0, state.doc.length), ranges = [];\n\t\twhile (!cursor.next().done) {\n\t\t\tif (ranges.length >= limit) return null;\n\t\t\tranges.push(cursor.value);\n\t\t}\n\t\treturn ranges;\n\t}\n\thighlight(state, from, to, add) {\n\t\tlet cursor = stringCursor(this.spec, state, Math.max(0, from - this.spec.unquoted.length), Math.min(to + this.spec.unquoted.length, state.doc.length));\n\t\twhile (!cursor.next().done) add(cursor.value.from, cursor.value.to);\n\t}\n};\nfunction regexpCursor(spec, state, from, to) {\n\treturn new RegExpCursor(state.doc, spec.search, {\n\t\tignoreCase: !spec.caseSensitive,\n\t\ttest: spec.wholeWord ? regexpWordTest(state.charCategorizer(state.selection.main.head)) : void 0\n\t}, from, to);\n}\nfunction charBefore(str, index) {\n\treturn str.slice(findClusterBreak(str, index, false), index);\n}\nfunction charAfter(str, index) {\n\treturn str.slice(index, findClusterBreak(str, index));\n}\nfunction regexpWordTest(categorizer) {\n\treturn (_from, _to, match) => !match[0].length || (categorizer(charBefore(match.input, match.index)) != CharCategory.Word || categorizer(charAfter(match.input, match.index)) != CharCategory.Word) && (categorizer(charAfter(match.input, match.index + match[0].length)) != CharCategory.Word || categorizer(charBefore(match.input, match.index + match[0].length)) != CharCategory.Word);\n}\nvar RegExpQuery = class extends QueryType {\n\tnextMatch(state, curFrom, curTo) {\n\t\tlet cursor = regexpCursor(this.spec, state, curTo, state.doc.length).next();\n\t\tif (cursor.done) cursor = regexpCursor(this.spec, state, 0, curFrom).next();\n\t\treturn cursor.done ? null : cursor.value;\n\t}\n\tprevMatchInRange(state, from, to) {\n\t\tfor (let size = 1;; size++) {\n\t\t\tlet start = Math.max(from, to - size * 1e4);\n\t\t\tlet cursor = regexpCursor(this.spec, state, start, to), range = null;\n\t\t\twhile (!cursor.next().done) range = cursor.value;\n\t\t\tif (range && (start == from || range.from > start + 10)) return range;\n\t\t\tif (start == from) return null;\n\t\t}\n\t}\n\tprevMatch(state, curFrom, curTo) {\n\t\treturn this.prevMatchInRange(state, 0, curFrom) || this.prevMatchInRange(state, curTo, state.doc.length);\n\t}\n\tgetReplacement(result) {\n\t\treturn this.spec.unquote(this.spec.replace).replace(/\\$([$&]|\\d+)/g, (m, i) => {\n\t\t\tif (i == \"&\") return result.match[0];\n\t\t\tif (i == \"$\") return \"$\";\n\t\t\tfor (let l = i.length; l > 0; l--) {\n\t\t\t\tlet n = +i.slice(0, l);\n\t\t\t\tif (n > 0 && n < result.match.length) return result.match[n] + i.slice(l);\n\t\t\t}\n\t\t\treturn m;\n\t\t});\n\t}\n\tmatchAll(state, limit) {\n\t\tlet cursor = regexpCursor(this.spec, state, 0, state.doc.length), ranges = [];\n\t\twhile (!cursor.next().done) {\n\t\t\tif (ranges.length >= limit) return null;\n\t\t\tranges.push(cursor.value);\n\t\t}\n\t\treturn ranges;\n\t}\n\thighlight(state, from, to, add) {\n\t\tlet cursor = regexpCursor(this.spec, state, Math.max(0, from - 250), Math.min(to + 250, state.doc.length));\n\t\twhile (!cursor.next().done) add(cursor.value.from, cursor.value.to);\n\t}\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\tcreate(state) {\n\t\treturn new SearchState(defaultQuery(state).create(), null);\n\t},\n\tupdate(value, tr) {\n\t\tfor (let effect of tr.effects) if (effect.is(setSearchQuery)) value = new SearchState(effect.value.create(), value.panel);\n\t\telse if (effect.is(togglePanel)) value = new SearchState(value.query, effect.value ? createSearchPanel : null);\n\t\treturn value;\n\t},\n\tprovide: (f) => showPanel.from(f, (val) => val.panel)\n});\nvar SearchState = class {\n\tconstructor(query, panel) {\n\t\tthis.query = query;\n\t\tthis.panel = panel;\n\t}\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\tconstructor(view) {\n\t\tthis.view = view;\n\t\tthis.decorations = this.highlight(view.state.field(searchState));\n\t}\n\tupdate(update) {\n\t\tlet state = update.state.field(searchState);\n\t\tif (state != update.startState.field(searchState) || update.docChanged || update.selectionSet || update.viewportChanged) this.decorations = this.highlight(state);\n\t}\n\thighlight({ query, panel }) {\n\t\tif (!panel || !query.spec.valid) return Decoration.none;\n\t\tlet { view } = this;\n\t\tlet builder = new RangeSetBuilder();\n\t\tfor (let i = 0, ranges = view.visibleRanges, l = ranges.length; i < l; i++) {\n\t\t\tlet { from, to } = ranges[i];\n\t\t\twhile (i < l - 1 && to > ranges[i + 1].from - 500) to = ranges[++i].to;\n\t\t\tquery.highlight(view.state, from, to, (from, to) => {\n\t\t\t\tlet selected = view.state.selection.ranges.some((r) => r.from == from && r.to == to);\n\t\t\t\tbuilder.add(from, to, selected ? selectedMatchMark : matchMark);\n\t\t\t});\n\t\t}\n\t\treturn builder.finish();\n\t}\n}, { decorations: (v) => v.decorations });\nfunction searchCommand(f) {\n\treturn (view) => {\n\t\tlet state = view.state.field(searchState, false);\n\t\treturn state && state.query.spec.valid ? f(view, state) : openSearchPanel(view);\n\t};\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\tlet { to } = view.state.selection.main;\n\tlet next = query.nextMatch(view.state, to, to);\n\tif (!next) return false;\n\tlet selection = EditorSelection.single(next.from, next.to);\n\tlet config = view.state.facet(searchConfigFacet);\n\tview.dispatch({\n\t\tselection,\n\t\teffects: [announceMatch(view, next), config.scrollToMatch(selection.main, view)],\n\t\tuserEvent: \"select.search\"\n\t});\n\tselectSearchInput(view);\n\treturn 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\tlet { state } = view, { from } = state.selection.main;\n\tlet prev = query.prevMatch(state, from, from);\n\tif (!prev) return false;\n\tlet selection = EditorSelection.single(prev.from, prev.to);\n\tlet config = view.state.facet(searchConfigFacet);\n\tview.dispatch({\n\t\tselection,\n\t\teffects: [announceMatch(view, prev), config.scrollToMatch(selection.main, view)],\n\t\tuserEvent: \"select.search\"\n\t});\n\tselectSearchInput(view);\n\treturn true;\n});\n/**\nSelect all instances of the search query.\n*/\nconst selectMatches = /* @__PURE__ */ searchCommand((view, { query }) => {\n\tlet ranges = query.matchAll(view.state, 1e3);\n\tif (!ranges || !ranges.length) return false;\n\tview.dispatch({\n\t\tselection: EditorSelection.create(ranges.map((r) => EditorSelection.range(r.from, r.to))),\n\t\tuserEvent: \"select.search.matches\"\n\t});\n\treturn true;\n});\n/**\nSelect all instances of the currently selected text.\n*/\nconst selectSelectionMatches = ({ state, dispatch }) => {\n\tlet sel = state.selection;\n\tif (sel.ranges.length > 1 || sel.main.empty) return false;\n\tlet { from, to } = sel.main;\n\tlet ranges = [], main = 0;\n\tfor (let cur = new SearchCursor(state.doc, state.sliceDoc(from, to)); !cur.next().done;) {\n\t\tif (ranges.length > 1e3) return false;\n\t\tif (cur.value.from == from) main = ranges.length;\n\t\tranges.push(EditorSelection.range(cur.value.from, cur.value.to));\n\t}\n\tdispatch(state.update({\n\t\tselection: EditorSelection.create(ranges, main),\n\t\tuserEvent: \"select.search.matches\"\n\t}));\n\treturn true;\n};\n/**\nReplace the current match of the search query.\n*/\nconst replaceNext = /* @__PURE__ */ searchCommand((view, { query }) => {\n\tlet { state } = view, { from, to } = state.selection.main;\n\tif (state.readOnly) return false;\n\tlet match = query.nextMatch(state, from, from);\n\tif (!match) return false;\n\tlet next = match;\n\tlet changes = [], selection, replacement;\n\tlet effects = [];\n\tif (next.from == from && next.to == to) {\n\t\treplacement = state.toText(query.getReplacement(next));\n\t\tchanges.push({\n\t\t\tfrom: next.from,\n\t\t\tto: next.to,\n\t\t\tinsert: replacement\n\t\t});\n\t\tnext = query.nextMatch(state, next.from, next.to);\n\t\teffects.push(EditorView.announce.of(state.phrase(\"replaced match on line $\", state.doc.lineAt(from).number) + \".\"));\n\t}\n\tif (next) {\n\t\tlet off = changes.length == 0 || changes[0].from >= match.to ? 0 : match.to - match.from - replacement.length;\n\t\tselection = EditorSelection.single(next.from - off, next.to - off);\n\t\teffects.push(announceMatch(view, next));\n\t\teffects.push(state.facet(searchConfigFacet).scrollToMatch(selection.main, view));\n\t}\n\tview.dispatch({\n\t\tchanges,\n\t\tselection,\n\t\teffects,\n\t\tuserEvent: \"input.replace\"\n\t});\n\treturn true;\n});\n/**\nReplace all instances of the search query with the given\nreplacement.\n*/\nconst replaceAll = /* @__PURE__ */ searchCommand((view, { query }) => {\n\tif (view.state.readOnly) return false;\n\tlet changes = query.matchAll(view.state, 1e9).map((match) => {\n\t\tlet { from, to } = match;\n\t\treturn {\n\t\t\tfrom,\n\t\t\tto,\n\t\t\tinsert: query.getReplacement(match)\n\t\t};\n\t});\n\tif (!changes.length) return false;\n\tlet announceText = view.state.phrase(\"replaced $ matches\", changes.length) + \".\";\n\tview.dispatch({\n\t\tchanges,\n\t\teffects: EditorView.announce.of(announceText),\n\t\tuserEvent: \"input.replace.all\"\n\t});\n\treturn true;\n});\nfunction createSearchPanel(view) {\n\treturn view.state.facet(searchConfigFacet).createPanel(view);\n}\nfunction defaultQuery(state, fallback) {\n\tvar _a, _b, _c, _d, _e;\n\tlet sel = state.selection.main;\n\tlet selText = sel.empty || sel.to > sel.from + 100 ? \"\" : state.sliceDoc(sel.from, sel.to);\n\tif (fallback && !selText) return fallback;\n\tlet config = state.facet(searchConfigFacet);\n\treturn new SearchQuery({\n\t\tsearch: ((_a = fallback === null || fallback === void 0 ? void 0 : fallback.literal) !== null && _a !== void 0 ? _a : config.literal) ? selText : selText.replace(/\\n/g, \"\\\\n\"),\n\t\tcaseSensitive: (_b = fallback === null || fallback === void 0 ? void 0 : fallback.caseSensitive) !== null && _b !== void 0 ? _b : config.caseSensitive,\n\t\tliteral: (_c = fallback === null || fallback === void 0 ? void 0 : fallback.literal) !== null && _c !== void 0 ? _c : config.literal,\n\t\tregexp: (_d = fallback === null || fallback === void 0 ? void 0 : fallback.regexp) !== null && _d !== void 0 ? _d : config.regexp,\n\t\twholeWord: (_e = fallback === null || fallback === void 0 ? void 0 : fallback.wholeWord) !== null && _e !== void 0 ? _e : config.wholeWord\n\t});\n}\nfunction getSearchInput(view) {\n\tlet panel = getPanel(view, createSearchPanel);\n\treturn panel && panel.dom.querySelector(\"[main-field]\");\n}\nfunction selectSearchInput(view) {\n\tlet input = getSearchInput(view);\n\tif (input && input == view.root.activeElement) input.select();\n}\n/**\nMake sure the search panel is open and focused.\n*/\nconst openSearchPanel = (view) => {\n\tlet state = view.state.field(searchState, false);\n\tif (state && state.panel) {\n\t\tlet searchInput = getSearchInput(view);\n\t\tif (searchInput && searchInput != view.root.activeElement) {\n\t\t\tlet query = defaultQuery(view.state, state.query.spec);\n\t\t\tif (query.valid) view.dispatch({ effects: setSearchQuery.of(query) });\n\t\t\tsearchInput.focus();\n\t\t\tsearchInput.select();\n\t\t}\n\t} else view.dispatch({ effects: [togglePanel.of(true), state ? setSearchQuery.of(defaultQuery(view.state, state.query.spec)) : StateEffect.appendConfig.of(searchExtensions)] });\n\treturn true;\n};\n/**\nClose the search panel.\n*/\nconst closeSearchPanel = (view) => {\n\tlet state = view.state.field(searchState, false);\n\tif (!state || !state.panel) return false;\n\tlet panel = getPanel(view, createSearchPanel);\n\tif (panel && panel.dom.contains(view.root.activeElement)) view.focus();\n\tview.dispatch({ effects: togglePanel.of(false) });\n\treturn 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\t{\n\t\tkey: \"Mod-f\",\n\t\trun: openSearchPanel,\n\t\tscope: \"editor search-panel\"\n\t},\n\t{\n\t\tkey: \"F3\",\n\t\trun: findNext,\n\t\tshift: findPrevious,\n\t\tscope: \"editor search-panel\",\n\t\tpreventDefault: true\n\t},\n\t{\n\t\tkey: \"Mod-g\",\n\t\trun: findNext,\n\t\tshift: findPrevious,\n\t\tscope: \"editor search-panel\",\n\t\tpreventDefault: true\n\t},\n\t{\n\t\tkey: \"Escape\",\n\t\trun: closeSearchPanel,\n\t\tscope: \"editor search-panel\"\n\t},\n\t{\n\t\tkey: \"Mod-Shift-l\",\n\t\trun: selectSelectionMatches\n\t},\n\t{\n\t\tkey: \"Mod-Alt-g\",\n\t\trun: gotoLine\n\t},\n\t{\n\t\tkey: \"Mod-d\",\n\t\trun: selectNextOccurrence,\n\t\tpreventDefault: true\n\t}\n];\nvar SearchPanel = class {\n\tconstructor(view) {\n\t\tthis.view = view;\n\t\tlet query = this.query = view.state.field(searchState).query.spec;\n\t\tthis.commit = this.commit.bind(this);\n\t\tthis.searchField = crelt(\"input\", {\n\t\t\tvalue: query.search,\n\t\t\tplaceholder: phrase(view, \"Find\"),\n\t\t\t\"aria-label\": phrase(view, \"Find\"),\n\t\t\tclass: \"cm-textfield\",\n\t\t\tname: \"search\",\n\t\t\tform: \"\",\n\t\t\t\"main-field\": \"true\",\n\t\t\tonchange: this.commit,\n\t\t\tonkeyup: this.commit\n\t\t});\n\t\tthis.replaceField = crelt(\"input\", {\n\t\t\tvalue: query.replace,\n\t\t\tplaceholder: phrase(view, \"Replace\"),\n\t\t\t\"aria-label\": phrase(view, \"Replace\"),\n\t\t\tclass: \"cm-textfield\",\n\t\t\tname: \"replace\",\n\t\t\tform: \"\",\n\t\t\tonchange: this.commit,\n\t\t\tonkeyup: this.commit\n\t\t});\n\t\tthis.caseField = crelt(\"input\", {\n\t\t\ttype: \"checkbox\",\n\t\t\tname: \"case\",\n\t\t\tform: \"\",\n\t\t\tchecked: query.caseSensitive,\n\t\t\tonchange: this.commit\n\t\t});\n\t\tthis.reField = crelt(\"input\", {\n\t\t\ttype: \"checkbox\",\n\t\t\tname: \"re\",\n\t\t\tform: \"\",\n\t\t\tchecked: query.regexp,\n\t\t\tonchange: this.commit\n\t\t});\n\t\tthis.wordField = crelt(\"input\", {\n\t\t\ttype: \"checkbox\",\n\t\t\tname: \"word\",\n\t\t\tform: \"\",\n\t\t\tchecked: query.wholeWord,\n\t\t\tonchange: this.commit\n\t\t});\n\t\tfunction button(name, onclick, content) {\n\t\t\treturn crelt(\"button\", {\n\t\t\t\tclass: \"cm-button\",\n\t\t\t\tname,\n\t\t\t\tonclick,\n\t\t\t\ttype: \"button\"\n\t\t\t}, content);\n\t\t}\n\t\tthis.dom = crelt(\"div\", {\n\t\t\tonkeydown: (e) => this.keydown(e),\n\t\t\tclass: \"cm-search\"\n\t\t}, [\n\t\t\tthis.searchField,\n\t\t\tbutton(\"next\", () => findNext(view), [phrase(view, \"next\")]),\n\t\t\tbutton(\"prev\", () => findPrevious(view), [phrase(view, \"previous\")]),\n\t\t\tbutton(\"select\", () => selectMatches(view), [phrase(view, \"all\")]),\n\t\t\tcrelt(\"label\", null, [this.caseField, phrase(view, \"match case\")]),\n\t\t\tcrelt(\"label\", null, [this.reField, phrase(view, \"regexp\")]),\n\t\t\tcrelt(\"label\", null, [this.wordField, phrase(view, \"by word\")]),\n\t\t\t...view.state.readOnly ? [] : [\n\t\t\t\tcrelt(\"br\"),\n\t\t\t\tthis.replaceField,\n\t\t\t\tbutton(\"replace\", () => replaceNext(view), [phrase(view, \"replace\")]),\n\t\t\t\tbutton(\"replaceAll\", () => replaceAll(view), [phrase(view, \"replace all\")])\n\t\t\t],\n\t\t\tcrelt(\"button\", {\n\t\t\t\tname: \"close\",\n\t\t\t\tonclick: () => closeSearchPanel(view),\n\t\t\t\t\"aria-label\": phrase(view, \"close\"),\n\t\t\t\ttype: \"button\"\n\t\t\t}, [\"×\"])\n\t\t]);\n\t}\n\tcommit() {\n\t\tlet query = new SearchQuery({\n\t\t\tsearch: this.searchField.value,\n\t\t\tcaseSensitive: this.caseField.checked,\n\t\t\tregexp: this.reField.checked,\n\t\t\twholeWord: this.wordField.checked,\n\t\t\treplace: this.replaceField.value\n\t\t});\n\t\tif (!query.eq(this.query)) {\n\t\t\tthis.query = query;\n\t\t\tthis.view.dispatch({ effects: setSearchQuery.of(query) });\n\t\t}\n\t}\n\tkeydown(e) {\n\t\tif (runScopeHandlers(this.view, e, \"search-panel\")) e.preventDefault();\n\t\telse if (e.keyCode == 13 && e.target == this.searchField) {\n\t\t\te.preventDefault();\n\t\t\t(e.shiftKey ? findPrevious : findNext)(this.view);\n\t\t} else if (e.keyCode == 13 && e.target == this.replaceField) {\n\t\t\te.preventDefault();\n\t\t\treplaceNext(this.view);\n\t\t}\n\t}\n\tupdate(update) {\n\t\tfor (let tr of update.transactions) for (let effect of tr.effects) if (effect.is(setSearchQuery) && !effect.value.eq(this.query)) this.setQuery(effect.value);\n\t}\n\tsetQuery(query) {\n\t\tthis.query = query;\n\t\tthis.searchField.value = query.search;\n\t\tthis.replaceField.value = query.replace;\n\t\tthis.caseField.checked = query.caseSensitive;\n\t\tthis.reField.checked = query.regexp;\n\t\tthis.wordField.checked = query.wholeWord;\n\t}\n\tmount() {\n\t\tthis.searchField.select();\n\t}\n\tget pos() {\n\t\treturn 80;\n\t}\n\tget top() {\n\t\treturn this.view.state.facet(searchConfigFacet).top;\n\t}\n};\nfunction phrase(view, phrase) {\n\treturn view.state.phrase(phrase);\n}\nconst AnnounceMargin = 30;\nconst Break = /[\\s\\.,:;?!]/;\nfunction announceMatch(view, { from, to }) {\n\tlet line = view.state.doc.lineAt(from), lineEnd = view.state.doc.lineAt(to).to;\n\tlet start = Math.max(line.from, from - AnnounceMargin), end = Math.min(lineEnd, to + AnnounceMargin);\n\tlet text = view.state.sliceDoc(start, end);\n\tif (start != line.from) {\n\t\tfor (let i = 0; i < AnnounceMargin; i++) if (!Break.test(text[i + 1]) && Break.test(text[i])) {\n\t\t\ttext = text.slice(i);\n\t\t\tbreak;\n\t\t}\n\t}\n\tif (end != lineEnd) {\n\t\tfor (let i = text.length - 1; i > text.length - AnnounceMargin; i--) if (!Break.test(text[i - 1]) && Break.test(text[i])) {\n\t\t\ttext = text.slice(0, i);\n\t\t\tbreak;\n\t\t}\n\t}\n\treturn EditorView.announce.of(`${view.state.phrase(\"current match\")}. ${text} ${view.state.phrase(\"on line\")} ${line.number}.`);\n}\nconst baseTheme = /* @__PURE__ */ EditorView.baseTheme({\n\t\".cm-panel.cm-search\": {\n\t\tpadding: \"2px 6px 4px\",\n\t\tposition: \"relative\",\n\t\t\"& [name=close]\": {\n\t\t\tposition: \"absolute\",\n\t\t\ttop: \"0\",\n\t\t\tright: \"4px\",\n\t\t\tbackgroundColor: \"inherit\",\n\t\t\tborder: \"none\",\n\t\t\tfont: \"inherit\",\n\t\t\tpadding: 0,\n\t\t\tmargin: 0\n\t\t},\n\t\t\"& input, & button, & label\": { margin: \".2em .6em .2em 0\" },\n\t\t\"& input[type=checkbox]\": { marginRight: \".2em\" },\n\t\t\"& label\": {\n\t\t\tfontSize: \"80%\",\n\t\t\twhiteSpace: \"pre\"\n\t\t}\n\t},\n\t\"&light .cm-searchMatch\": { backgroundColor: \"#ffff0054\" },\n\t\"&dark .cm-searchMatch\": { backgroundColor: \"#00ffff8a\" },\n\t\"&light .cm-searchMatch-selected\": { backgroundColor: \"#ff6a0054\" },\n\t\"&dark .cm-searchMatch-selected\": { backgroundColor: \"#ff00ff8a\" }\n});\nconst searchExtensions = [\n\tsearchState,\n\t/* @__PURE__ */ Prec.low(searchHighlighter),\n\tbaseTheme\n];\n//#endregion\n//#region editors/document-model-editor/components/code-editors/constants.ts\nconst baseKeymap = [\n\t...closeBracketsKeymap,\n\t...defaultKeymap,\n\t...searchKeymap,\n\t...historyKeymap,\n\t...foldKeymap,\n\t...completionKeymap,\n\t...lintKeymap,\n\tindentWithTab\n];\nconst baseEditorExtensions = [\n\tlineNumbers(),\n\thighlightActiveLineGutter(),\n\thighlightSpecialChars(),\n\thistory(),\n\tfoldGutter(),\n\tdrawSelection(),\n\tdropCursor(),\n\tEditorState.allowMultipleSelections.of(true),\n\tindentOnInput(),\n\tsyntaxHighlighting(defaultHighlightStyle, { fallback: true }),\n\tbracketMatching(),\n\tcloseBrackets(),\n\tautocompletion(),\n\trectangularSelection(),\n\tcrosshairCursor(),\n\thighlightActiveLine(),\n\thighlightSelectionMatches(),\n\tEditorView.lineWrapping\n];\n//#endregion\n//#region editors/document-model-editor/components/code-editors/factories.ts\nfunction makeUpdateHandler(readonly, timeoutRef, updateDocumentInModel) {\n\treturn EditorView.updateListener.of((update) => {\n\t\tif (!!readonly || !update.docChanged) return;\n\t\tif (update.transactions.some((tr) => tr.annotation(Transaction.userEvent) === \"external\")) return;\n\t\tconst newDoc = update.state.doc.toString();\n\t\tif (timeoutRef.current) clearTimeout(timeoutRef.current);\n\t\ttimeoutRef.current = setTimeout(() => {\n\t\t\tupdateDocumentInModel?.(newDoc);\n\t\t}, updateTimeout);\n\t});\n}\nfunction makeFocusHandler(readonly, timeoutRef, updateDocumentInModel) {\n\treturn EditorView.focusChangeEffect.of((state, focusing) => {\n\t\tif (!!readonly || focusing) return null;\n\t\tif (timeoutRef.current) clearTimeout(timeoutRef.current);\n\t\tconst newDoc = state.doc.toString();\n\t\tupdateDocumentInModel?.(newDoc);\n\t\treturn null;\n\t});\n}\nfunction makePasteHandler(readonly, timeoutRef, updateDocumentInModel) {\n\treturn EditorView.domEventHandlers({ paste: (event, view) => {\n\t\tif (readonly) return false;\n\t\tconst newDoc = view.state.doc.toString();\n\t\tif (timeoutRef.current) clearTimeout(timeoutRef.current);\n\t\tupdateDocumentInModel?.(newDoc);\n\t\tforceLinting(view);\n\t\treturn false;\n\t} });\n}\n//#endregion\n//#region editors/document-model-editor/components/code-editors/hooks.ts\nfunction useEditorRefs() {\n\treturn {\n\t\teditorRef: useRef(null),\n\t\tviewRef: useRef(null),\n\t\tupdateListenerCompartment: useRef(new Compartment()),\n\t\tfocusHandlerCompartment: useRef(new Compartment()),\n\t\tpasteHandlerCompartment: useRef(new Compartment()),\n\t\ttimeoutRef: useRef(null)\n\t};\n}\nfunction useEditorCleanup(viewRef) {\n\tuseEffect(() => {\n\t\treturn () => {\n\t\t\tif (viewRef.current) {\n\t\t\t\tviewRef.current.destroy();\n\t\t\t\tviewRef.current = null;\n\t\t\t}\n\t\t};\n\t}, []);\n}\nfunction useHandlerReconfiguration(view, readonly, timeoutRef, updateDocumentInModel, compartments) {\n\tuseEffect(() => {\n\t\tif (!view) return;\n\t\tview.dispatch({ effects: [\n\t\t\tcompartments.updateListener.reconfigure(makeUpdateHandler(readonly, timeoutRef, updateDocumentInModel)),\n\t\t\tcompartments.focusHandler.reconfigure(makeFocusHandler(readonly, timeoutRef, updateDocumentInModel)),\n\t\t\tcompartments.pasteHandler.reconfigure(makePasteHandler(readonly, timeoutRef, updateDocumentInModel))\n\t\t] });\n\t\tforceLinting(view);\n\t}, [readonly, updateDocumentInModel]);\n}\nfunction useDocumentSync(view, doc) {\n\tuseEffect(() => {\n\t\tif (!view) return;\n\t\tconst currentDoc = view.state.doc.toString();\n\t\tif (currentDoc !== doc) {\n\t\t\tview.dispatch({\n\t\t\t\tchanges: {\n\t\t\t\t\tfrom: 0,\n\t\t\t\t\tto: currentDoc.length,\n\t\t\t\t\tinsert: doc\n\t\t\t\t},\n\t\t\t\tannotations: [Transaction.userEvent.of(\"external\")]\n\t\t\t});\n\t\t\tforceLinting(view);\n\t\t}\n\t}, [doc]);\n}\n//#endregion\nexport { EditorView as C, StateEffect as D, EditorState as E, StateField as O, linter as S, Compartment as T, indentNodeProp as _, makeFocusHandler as a, LRParser as b, baseEditorExtensions as c, LRLanguage as d, LanguageSupport as f, foldNodeProp as g, foldInside as h, useHandlerReconfiguration as i, baseKeymap as l, delimitedIndent as m, useEditorCleanup as n, makePasteHandler as o, continuedIndent as p, useEditorRefs as r, makeUpdateHandler as s, useDocumentSync as t, ayuLight as u, styleTags as v, keymap as w, forceLinting as x, tags as y };\n\n//# sourceMappingURL=hooks-DcjZbCsk.js.map"],"x_google_ignoreList":[0],"mappings":"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K,EAAI,EAAO,WAAW,EAAK,EAAE,IACzG,EAAQ,KAAK,CACZ,KAAM,EAAK,KAAO,EAClB,GAAI,EAAK,KAAO,EAAM,OACtB,OAAQ,EAAO,MAAM,EAAK,CAC1B,CAAC,EACD,CAAE,CAAE,UAAW,gBAAiB,CAAC,CAAC,CAC7B,IASF,GAAsB,IAC3B,EAAK,iBAAiB,CACf,IAqBF,GAAmB,CACxB,CACC,IAAK,SACL,IAAK,GACL,MAAO,GACP,eAAgB,GAChB,CACD,CACC,IAAK,SACL,IAAK,GACL,MAAO,GACP,CACD,CACC,IAAK,SACL,IAAK,GACL,MAAO,GACP,CACD,CACC,IAAK,SACL,IAAK,GACL,MAAO,GACP,CACD,CACC,IAAK,SACL,IAAK,GACL,MAAO,GACP,CACD,CACC,IAAK,SACL,IAAK,GACL,MAAO,GACP,CACD,CACC,IAAK,SACL,IAAK,GACL,CACD,CACC,IAAK,SACL,IAAK,GACL,CACD,CACC,IAAK,SACL,IAAK,GACL,CACD,CACC,IAAK,aACL,IAAK,GACL,CACD,CACC,IAAK,SACL,IAAK,GACL,CACD,CACC,IAAK,SACL,IAAK,GACL,CACD,CACC,IAAK,SACL,IAAK,GACL,CACD,CAkCK,GAAiC,CACtC,CACC,IAAK,YACL,IAAK,GACL,MAAO,GACP,eAAgB,GAChB,CACD,CACC,IAAK,gBACL,IAAK,gBACL,IAAK,GACL,MAAO,GACP,eAAgB,GAChB,CACD,CACC,IAAK,gBACL,IAAK,GACL,MAAO,GACP,eAAgB,GAChB,CACD,CACC,IAAK,aACL,IAAK,GACL,MAAO,GACP,eAAgB,GAChB,CACD,CACC,IAAK,iBACL,IAAK,iBACL,IAAK,GACL,MAAO,GACP,eAAgB,GAChB,CACD,CACC,IAAK,iBACL,IAAK,GACL,MAAO,GACP,eAAgB,GAChB,CACD,CACC,IAAK,UACL,IAAK,GACL,MAAO,GACP,eAAgB,GAChB,CACD,CACC,IAAK,cACL,IAAK,GACL,MAAO,GACP,CACD,CACC,IAAK,eACL,IAAK,GACL,MAAO,GACP,CACD,CACC,IAAK,YACL,IAAK,GACL,MAAO,GACP,eAAgB,GAChB,CACD,CACC,IAAK,gBACL,IAAK,GACL,MAAO,GACP,CACD,CACC,IAAK,iBACL,IAAK,GACL,MAAO,GACP,CACD,CACC,IAAK,SACL,IAAK,GACL,MAAO,GACP,CACD,CACC,IAAK,WACL,IAAK,GACL,MAAO,GACP,CACD,CACC,IAAK,OACL,IAAK,GACL,MAAO,GACP,eAAgB,GAChB,CACD,CACC,IAAK,WACL,IAAK,GACL,MAAO,GACP,CACD,CACC,IAAK,MACL,IAAK,GACL,MAAO,GACP,eAAgB,GAChB,CACD,CACC,IAAK,UACL,IAAK,GACL,MAAO,GACP,CACD,CACC,IAAK,QACL,IAAK,GACL,MAAO,GACP,CACD,CACC,IAAK,QACL,IAAK,GACL,CACD,CACC,IAAK,YACL,IAAK,GACL,MAAO,GACP,CACD,CACC,IAAK,SACL,IAAK,GACL,CACD,CACC,IAAK,gBACL,IAAK,gBACL,IAAK,GACL,CACD,CACC,IAAK,aACL,IAAK,aACL,IAAK,GACL,CACD,CACC,IAAK,gBACL,IAAK,GACL,CACD,CACC,IAAK,aACL,IAAK,GACL,CACD,CAAC,OAAuB,GAAiB,IAAK,IAAO,CACrD,IAAK,EAAE,IACP,IAAK,EAAE,IACP,MAAO,EAAE,MACT,EAAE,CAAC,CAwBE,GAAgC,CACrC,CACC,IAAK,gBACL,IAAK,iBACL,IAAK,GACL,MAAO,GACP,CACD,CACC,IAAK,iBACL,IAAK,kBACL,IAAK,GACL,MAAO,GACP,CACD,CACC,IAAK,cACL,IAAK,GACL,CACD,CACC,IAAK,oBACL,IAAK,GACL,CACD,CACC,IAAK,gBACL,IAAK,GACL,CACD,CACC,IAAK,sBACL,IAAK,GACL,CACD,CACC,IAAK,SACL,IAAK,GACL,CACD,CACC,IAAK,YACL,IAAK,GACL,CACD,CACC,IAAK,QACL,IAAK,SACL,IAAK,GACL,CACD,CACC,IAAK,QACL,IAAK,GACL,eAAgB,GAChB,CACD,CACC,IAAK,QACL,IAAK,GACL,CACD,CACC,IAAK,QACL,IAAK,GACL,CACD,CACC,IAAK,aAC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"}