hammoc 1.4.0 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (252) hide show
  1. package/README.md +422 -405
  2. package/bin/hammoc.js +0 -6
  3. package/package.json +100 -94
  4. package/packages/client/dist/assets/agentExampleHighlight-BgwTm15v.js +1 -0
  5. package/packages/client/dist/assets/commandTokenHighlight-BljHwnrK.js +1 -0
  6. package/packages/client/dist/assets/index-CjyjnXB8.css +32 -0
  7. package/packages/client/dist/assets/index-D3LxqW3f.js +2 -0
  8. package/packages/client/dist/assets/index-NqJdhlek.js +1498 -0
  9. package/packages/client/dist/assets/snippetTokenHighlight-DWsaQXX0.js +1 -0
  10. package/packages/client/dist/index.html +2 -2
  11. package/packages/client/dist/sw.js +1 -1
  12. package/packages/server/dist/app.d.ts.map +1 -1
  13. package/packages/server/dist/app.js +13 -21
  14. package/packages/server/dist/app.js.map +1 -1
  15. package/packages/server/dist/controllers/claudeMdController.d.ts +26 -0
  16. package/packages/server/dist/controllers/claudeMdController.d.ts.map +1 -0
  17. package/packages/server/dist/controllers/claudeMdController.js +158 -0
  18. package/packages/server/dist/controllers/claudeMdController.js.map +1 -0
  19. package/packages/server/dist/controllers/harnessAgentController.d.ts +28 -0
  20. package/packages/server/dist/controllers/harnessAgentController.d.ts.map +1 -0
  21. package/packages/server/dist/controllers/harnessAgentController.js +339 -0
  22. package/packages/server/dist/controllers/harnessAgentController.js.map +1 -0
  23. package/packages/server/dist/controllers/harnessCommandController.d.ts +28 -0
  24. package/packages/server/dist/controllers/harnessCommandController.d.ts.map +1 -0
  25. package/packages/server/dist/controllers/harnessCommandController.js +382 -0
  26. package/packages/server/dist/controllers/harnessCommandController.js.map +1 -0
  27. package/packages/server/dist/controllers/harnessController.d.ts +21 -0
  28. package/packages/server/dist/controllers/harnessController.d.ts.map +1 -0
  29. package/packages/server/dist/controllers/harnessController.js +176 -0
  30. package/packages/server/dist/controllers/harnessController.js.map +1 -0
  31. package/packages/server/dist/controllers/harnessHookController.d.ts +32 -0
  32. package/packages/server/dist/controllers/harnessHookController.d.ts.map +1 -0
  33. package/packages/server/dist/controllers/harnessHookController.js +363 -0
  34. package/packages/server/dist/controllers/harnessHookController.js.map +1 -0
  35. package/packages/server/dist/controllers/harnessLintController.d.ts +18 -0
  36. package/packages/server/dist/controllers/harnessLintController.d.ts.map +1 -0
  37. package/packages/server/dist/controllers/harnessLintController.js +72 -0
  38. package/packages/server/dist/controllers/harnessLintController.js.map +1 -0
  39. package/packages/server/dist/controllers/harnessMcpController.d.ts +28 -0
  40. package/packages/server/dist/controllers/harnessMcpController.d.ts.map +1 -0
  41. package/packages/server/dist/controllers/harnessMcpController.js +310 -0
  42. package/packages/server/dist/controllers/harnessMcpController.js.map +1 -0
  43. package/packages/server/dist/controllers/harnessPluginController.d.ts +17 -0
  44. package/packages/server/dist/controllers/harnessPluginController.d.ts.map +1 -0
  45. package/packages/server/dist/controllers/harnessPluginController.js +115 -0
  46. package/packages/server/dist/controllers/harnessPluginController.js.map +1 -0
  47. package/packages/server/dist/controllers/harnessShareScopeController.d.ts +15 -0
  48. package/packages/server/dist/controllers/harnessShareScopeController.d.ts.map +1 -0
  49. package/packages/server/dist/controllers/harnessShareScopeController.js +73 -0
  50. package/packages/server/dist/controllers/harnessShareScopeController.js.map +1 -0
  51. package/packages/server/dist/controllers/harnessSkillController.d.ts +32 -0
  52. package/packages/server/dist/controllers/harnessSkillController.d.ts.map +1 -0
  53. package/packages/server/dist/controllers/harnessSkillController.js +453 -0
  54. package/packages/server/dist/controllers/harnessSkillController.js.map +1 -0
  55. package/packages/server/dist/controllers/projectController.d.ts.map +1 -1
  56. package/packages/server/dist/controllers/projectController.js +11 -0
  57. package/packages/server/dist/controllers/projectController.js.map +1 -1
  58. package/packages/server/dist/controllers/snippetController.d.ts +35 -0
  59. package/packages/server/dist/controllers/snippetController.d.ts.map +1 -0
  60. package/packages/server/dist/controllers/snippetController.js +294 -0
  61. package/packages/server/dist/controllers/snippetController.js.map +1 -0
  62. package/packages/server/dist/handlers/websocket.d.ts +15 -0
  63. package/packages/server/dist/handlers/websocket.d.ts.map +1 -1
  64. package/packages/server/dist/handlers/websocket.js +79 -0
  65. package/packages/server/dist/handlers/websocket.js.map +1 -1
  66. package/packages/server/dist/index.js +5 -0
  67. package/packages/server/dist/index.js.map +1 -1
  68. package/packages/server/dist/locales/en/server.json +37 -4
  69. package/packages/server/dist/locales/es/server.json +0 -4
  70. package/packages/server/dist/locales/ja/server.json +0 -4
  71. package/packages/server/dist/locales/ko/server.json +0 -4
  72. package/packages/server/dist/locales/pt/server.json +0 -4
  73. package/packages/server/dist/locales/zh-CN/server.json +0 -4
  74. package/packages/server/dist/routes/harness.d.ts +8 -0
  75. package/packages/server/dist/routes/harness.d.ts.map +1 -0
  76. package/packages/server/dist/routes/harness.js +92 -0
  77. package/packages/server/dist/routes/harness.js.map +1 -0
  78. package/packages/server/dist/routes/projects.d.ts.map +1 -1
  79. package/packages/server/dist/routes/projects.js +5 -60
  80. package/packages/server/dist/routes/projects.js.map +1 -1
  81. package/packages/server/dist/routes/snippets.d.ts +14 -0
  82. package/packages/server/dist/routes/snippets.d.ts.map +1 -0
  83. package/packages/server/dist/routes/snippets.js +27 -0
  84. package/packages/server/dist/routes/snippets.js.map +1 -0
  85. package/packages/server/dist/services/bmadStatusService.d.ts +6 -2
  86. package/packages/server/dist/services/bmadStatusService.d.ts.map +1 -1
  87. package/packages/server/dist/services/bmadStatusService.js +88 -32
  88. package/packages/server/dist/services/bmadStatusService.js.map +1 -1
  89. package/packages/server/dist/services/chatService.d.ts +3 -0
  90. package/packages/server/dist/services/chatService.d.ts.map +1 -1
  91. package/packages/server/dist/services/chatService.js +27 -6
  92. package/packages/server/dist/services/chatService.js.map +1 -1
  93. package/packages/server/dist/services/claudeMdService.d.ts +48 -0
  94. package/packages/server/dist/services/claudeMdService.d.ts.map +1 -0
  95. package/packages/server/dist/services/claudeMdService.js +240 -0
  96. package/packages/server/dist/services/claudeMdService.js.map +1 -0
  97. package/packages/server/dist/services/commandService.d.ts +10 -0
  98. package/packages/server/dist/services/commandService.d.ts.map +1 -1
  99. package/packages/server/dist/services/commandService.js +129 -4
  100. package/packages/server/dist/services/commandService.js.map +1 -1
  101. package/packages/server/dist/services/fileWatcherService.d.ts +24 -0
  102. package/packages/server/dist/services/fileWatcherService.d.ts.map +1 -1
  103. package/packages/server/dist/services/fileWatcherService.js +192 -1
  104. package/packages/server/dist/services/fileWatcherService.js.map +1 -1
  105. package/packages/server/dist/services/harnessAgentService.d.ts +79 -0
  106. package/packages/server/dist/services/harnessAgentService.d.ts.map +1 -0
  107. package/packages/server/dist/services/harnessAgentService.js +933 -0
  108. package/packages/server/dist/services/harnessAgentService.js.map +1 -0
  109. package/packages/server/dist/services/harnessCommandService.d.ts +60 -0
  110. package/packages/server/dist/services/harnessCommandService.d.ts.map +1 -0
  111. package/packages/server/dist/services/harnessCommandService.js +853 -0
  112. package/packages/server/dist/services/harnessCommandService.js.map +1 -0
  113. package/packages/server/dist/services/harnessHookService.d.ts +55 -0
  114. package/packages/server/dist/services/harnessHookService.d.ts.map +1 -0
  115. package/packages/server/dist/services/harnessHookService.js +1060 -0
  116. package/packages/server/dist/services/harnessHookService.js.map +1 -0
  117. package/packages/server/dist/services/harnessLintService.d.ts +49 -0
  118. package/packages/server/dist/services/harnessLintService.d.ts.map +1 -0
  119. package/packages/server/dist/services/harnessLintService.js +628 -0
  120. package/packages/server/dist/services/harnessLintService.js.map +1 -0
  121. package/packages/server/dist/services/harnessMcpService.d.ts +77 -0
  122. package/packages/server/dist/services/harnessMcpService.d.ts.map +1 -0
  123. package/packages/server/dist/services/harnessMcpService.js +814 -0
  124. package/packages/server/dist/services/harnessMcpService.js.map +1 -0
  125. package/packages/server/dist/services/harnessPluginService.d.ts +66 -0
  126. package/packages/server/dist/services/harnessPluginService.d.ts.map +1 -0
  127. package/packages/server/dist/services/harnessPluginService.js +559 -0
  128. package/packages/server/dist/services/harnessPluginService.js.map +1 -0
  129. package/packages/server/dist/services/harnessService.d.ts +40 -0
  130. package/packages/server/dist/services/harnessService.d.ts.map +1 -0
  131. package/packages/server/dist/services/harnessService.js +222 -0
  132. package/packages/server/dist/services/harnessService.js.map +1 -0
  133. package/packages/server/dist/services/harnessShareScopeService.d.ts +31 -0
  134. package/packages/server/dist/services/harnessShareScopeService.d.ts.map +1 -0
  135. package/packages/server/dist/services/harnessShareScopeService.js +93 -0
  136. package/packages/server/dist/services/harnessShareScopeService.js.map +1 -0
  137. package/packages/server/dist/services/harnessSkillService.d.ts +70 -0
  138. package/packages/server/dist/services/harnessSkillService.d.ts.map +1 -0
  139. package/packages/server/dist/services/harnessSkillService.js +636 -0
  140. package/packages/server/dist/services/harnessSkillService.js.map +1 -0
  141. package/packages/server/dist/services/issueService.d.ts.map +1 -1
  142. package/packages/server/dist/services/issueService.js +2 -1
  143. package/packages/server/dist/services/issueService.js.map +1 -1
  144. package/packages/server/dist/services/manualSyncService.d.ts +19 -0
  145. package/packages/server/dist/services/manualSyncService.d.ts.map +1 -0
  146. package/packages/server/dist/services/manualSyncService.js +110 -0
  147. package/packages/server/dist/services/manualSyncService.js.map +1 -0
  148. package/packages/server/dist/services/queueService.d.ts.map +1 -1
  149. package/packages/server/dist/services/queueService.js +45 -2
  150. package/packages/server/dist/services/queueService.js.map +1 -1
  151. package/packages/server/dist/services/snippetService.d.ts +54 -0
  152. package/packages/server/dist/services/snippetService.d.ts.map +1 -0
  153. package/packages/server/dist/services/snippetService.js +371 -0
  154. package/packages/server/dist/services/snippetService.js.map +1 -0
  155. package/packages/server/dist/services/utils/applyYamlFrontmatterPatch.d.ts +46 -0
  156. package/packages/server/dist/services/utils/applyYamlFrontmatterPatch.d.ts.map +1 -0
  157. package/packages/server/dist/services/utils/applyYamlFrontmatterPatch.js +125 -0
  158. package/packages/server/dist/services/utils/applyYamlFrontmatterPatch.js.map +1 -0
  159. package/packages/server/dist/snippets/split-commit +9 -0
  160. package/packages/server/dist/utils/applySecretsPolicy.d.ts +53 -0
  161. package/packages/server/dist/utils/applySecretsPolicy.d.ts.map +1 -0
  162. package/packages/server/dist/utils/applySecretsPolicy.js +204 -0
  163. package/packages/server/dist/utils/applySecretsPolicy.js.map +1 -0
  164. package/packages/server/dist/utils/assertNoSecretOnShared.d.ts +40 -0
  165. package/packages/server/dist/utils/assertNoSecretOnShared.d.ts.map +1 -0
  166. package/packages/server/dist/utils/assertNoSecretOnShared.js +47 -0
  167. package/packages/server/dist/utils/assertNoSecretOnShared.js.map +1 -0
  168. package/packages/server/dist/utils/gitignoreFilter.d.ts +23 -0
  169. package/packages/server/dist/utils/gitignoreFilter.d.ts.map +1 -0
  170. package/packages/server/dist/utils/gitignoreFilter.js +42 -0
  171. package/packages/server/dist/utils/gitignoreFilter.js.map +1 -0
  172. package/packages/server/dist/utils/harnessBundleSchema.d.ts +105 -0
  173. package/packages/server/dist/utils/harnessBundleSchema.d.ts.map +1 -0
  174. package/packages/server/dist/utils/harnessBundleSchema.js +79 -0
  175. package/packages/server/dist/utils/harnessBundleSchema.js.map +1 -0
  176. package/packages/server/dist/utils/harnessPaths.d.ts +34 -0
  177. package/packages/server/dist/utils/harnessPaths.d.ts.map +1 -0
  178. package/packages/server/dist/utils/harnessPaths.js +124 -0
  179. package/packages/server/dist/utils/harnessPaths.js.map +1 -0
  180. package/packages/server/dist/utils/secretHeuristic.d.ts +72 -0
  181. package/packages/server/dist/utils/secretHeuristic.d.ts.map +1 -0
  182. package/packages/server/dist/utils/secretHeuristic.js +163 -0
  183. package/packages/server/dist/utils/secretHeuristic.js.map +1 -0
  184. package/packages/server/dist/utils/secretPlaceholderNamer.d.ts +41 -0
  185. package/packages/server/dist/utils/secretPlaceholderNamer.d.ts.map +1 -0
  186. package/packages/server/dist/utils/secretPlaceholderNamer.js +81 -0
  187. package/packages/server/dist/utils/secretPlaceholderNamer.js.map +1 -0
  188. package/packages/server/dist/utils/serverPathResolver.d.ts +29 -0
  189. package/packages/server/dist/utils/serverPathResolver.d.ts.map +1 -0
  190. package/packages/server/dist/utils/serverPathResolver.js +59 -0
  191. package/packages/server/dist/utils/serverPathResolver.js.map +1 -0
  192. package/packages/server/dist/utils/snippetPaths.d.ts +61 -0
  193. package/packages/server/dist/utils/snippetPaths.d.ts.map +1 -0
  194. package/packages/server/dist/utils/snippetPaths.js +123 -0
  195. package/packages/server/dist/utils/snippetPaths.js.map +1 -0
  196. package/packages/server/dist/utils/structuredEditor.d.ts +34 -0
  197. package/packages/server/dist/utils/structuredEditor.d.ts.map +1 -0
  198. package/packages/server/dist/utils/structuredEditor.js +111 -0
  199. package/packages/server/dist/utils/structuredEditor.js.map +1 -0
  200. package/packages/server/package.json +4 -1
  201. package/packages/server/resources/internals/INDEX.md +23 -0
  202. package/packages/server/resources/internals/harness-files.md +63 -0
  203. package/packages/server/resources/internals/image-storage.md +43 -0
  204. package/packages/server/resources/manual/01-getting-started.md +104 -0
  205. package/packages/server/resources/manual/02-chat.md +285 -0
  206. package/packages/server/resources/manual/03-sessions.md +48 -0
  207. package/packages/server/resources/manual/04-slash-commands-favorites.md +152 -0
  208. package/packages/server/resources/manual/05-projects.md +74 -0
  209. package/packages/server/resources/manual/06-file-explorer-editor.md +90 -0
  210. package/packages/server/resources/manual/07-git.md +94 -0
  211. package/packages/server/resources/manual/08-terminal.md +59 -0
  212. package/packages/server/resources/manual/09-queue-runner.md +262 -0
  213. package/packages/server/resources/manual/10-project-board.md +193 -0
  214. package/packages/server/resources/manual/11-bmad-method-integration.md +128 -0
  215. package/packages/server/resources/manual/12-harness-workbench.md +175 -0
  216. package/packages/server/resources/manual/13-settings.md +241 -0
  217. package/packages/server/resources/manual/14-keyboard-shortcuts.md +68 -0
  218. package/packages/server/resources/manual/15-environment-variables.md +28 -0
  219. package/packages/server/resources/manual/16-troubleshooting.md +110 -0
  220. package/packages/server/resources/manual/INDEX.md +60 -0
  221. package/packages/shared/dist/index.d.ts +3 -0
  222. package/packages/shared/dist/index.d.ts.map +1 -1
  223. package/packages/shared/dist/index.js +6 -0
  224. package/packages/shared/dist/index.js.map +1 -1
  225. package/packages/shared/dist/types/command.d.ts +3 -3
  226. package/packages/shared/dist/types/command.d.ts.map +1 -1
  227. package/packages/shared/dist/types/harness.d.ts +1211 -0
  228. package/packages/shared/dist/types/harness.d.ts.map +1 -0
  229. package/packages/shared/dist/types/harness.js +107 -0
  230. package/packages/shared/dist/types/harness.js.map +1 -0
  231. package/packages/shared/dist/types/harnessBundle.d.ts +170 -0
  232. package/packages/shared/dist/types/harnessBundle.d.ts.map +1 -0
  233. package/packages/shared/dist/types/harnessBundle.js +18 -0
  234. package/packages/shared/dist/types/harnessBundle.js.map +1 -0
  235. package/packages/shared/dist/types/preferences.d.ts +2 -0
  236. package/packages/shared/dist/types/preferences.d.ts.map +1 -1
  237. package/packages/shared/dist/types/preferences.js.map +1 -1
  238. package/packages/shared/dist/types/queue.d.ts +9 -0
  239. package/packages/shared/dist/types/queue.d.ts.map +1 -1
  240. package/packages/shared/dist/types/websocket.d.ts +10 -0
  241. package/packages/shared/dist/types/websocket.d.ts.map +1 -1
  242. package/packages/shared/dist/utils/markdownSections.d.ts +50 -0
  243. package/packages/shared/dist/utils/markdownSections.d.ts.map +1 -0
  244. package/packages/shared/dist/utils/markdownSections.js +111 -0
  245. package/packages/shared/dist/utils/markdownSections.js.map +1 -0
  246. package/packages/shared/dist/utils/queueParser.d.ts.map +1 -1
  247. package/packages/shared/dist/utils/queueParser.js +104 -0
  248. package/packages/shared/dist/utils/queueParser.js.map +1 -1
  249. package/scripts/build-manual-shards.mjs +100 -0
  250. package/packages/client/dist/assets/index-6jREnVYd.js +0 -2
  251. package/packages/client/dist/assets/index-BFF0iqyW.css +0 -32
  252. package/packages/client/dist/assets/index-BcI4y-fU.js +0 -1454
@@ -0,0 +1,111 @@
1
+ /**
2
+ * Story 29.1: Markdown H2 split/append helpers shared between server and
3
+ * client.
4
+ *
5
+ * Server uses these to perform a section-append copy (read source → split →
6
+ * append selected sections → write target). Client uses them to render the
7
+ * H2 checkbox preview list inside the copy modal without a server round-trip
8
+ * (zero-latency UX). Both consumers MUST agree on what counts as an H2 and
9
+ * how a section's body is bounded; placing the implementation in `@hammoc/shared`
10
+ * is what guarantees that agreement.
11
+ *
12
+ * Rules:
13
+ * - An H2 is a line whose first non-CR characters match `## <heading text>`.
14
+ * Lines inside fenced code blocks (```...``` or ~~~...~~~) are NOT
15
+ * considered headings even if they start with `## `.
16
+ * - A section's body extends from the line AFTER its heading to the line
17
+ * BEFORE the next H2 (or end of file). Trailing newline normalization is
18
+ * preserved when appending so round-tripping is idempotent.
19
+ * - Heading text is the raw line including the `## ` prefix (preserved
20
+ * verbatim) so callers can render it identically to the source.
21
+ */
22
+ /**
23
+ * Split a markdown string into its top-level H2 sections. Returns an empty
24
+ * array when no H2 is found anywhere in the document — callers (the copy
25
+ * modal) interpret this as "section append unavailable, switch to overwrite".
26
+ */
27
+ export function splitMarkdownByH2(raw) {
28
+ const lines = raw.replace(/\r\n/g, '\n').split('\n');
29
+ const sections = [];
30
+ let inFence = false;
31
+ let fenceMarker = null;
32
+ let currentHeading = null;
33
+ let currentBody = [];
34
+ const flush = () => {
35
+ if (currentHeading !== null) {
36
+ // Trim trailing empty lines from the section body so re-appending later
37
+ // does not accumulate blank lines per round trip.
38
+ while (currentBody.length > 0 && currentBody[currentBody.length - 1] === '') {
39
+ currentBody.pop();
40
+ }
41
+ sections.push({ heading: currentHeading, body: currentBody.join('\n') });
42
+ }
43
+ };
44
+ for (const line of lines) {
45
+ // Track fenced code blocks first — headings inside fences must not split.
46
+ const fenceMatch = /^(\s*)(```|~~~)/.exec(line);
47
+ if (fenceMatch) {
48
+ const marker = fenceMatch[2][0];
49
+ if (!inFence) {
50
+ inFence = true;
51
+ fenceMarker = marker;
52
+ }
53
+ else if (fenceMarker === marker) {
54
+ inFence = false;
55
+ fenceMarker = null;
56
+ }
57
+ // Fence delimiters belong to whichever section they're in.
58
+ if (currentHeading !== null) {
59
+ currentBody.push(line);
60
+ }
61
+ continue;
62
+ }
63
+ if (!inFence && /^##\s+\S/.test(line)) {
64
+ // New H2 — finalize the previous section and start a new one.
65
+ flush();
66
+ currentHeading = line;
67
+ currentBody = [];
68
+ continue;
69
+ }
70
+ if (currentHeading !== null) {
71
+ currentBody.push(line);
72
+ }
73
+ // Lines before the first H2 are document preamble (often the H1 +
74
+ // intro paragraph) and are intentionally dropped — they are NOT a
75
+ // section and the copy modal does not surface them. Callers wanting the
76
+ // whole document use the overwrite mode, not section-append.
77
+ }
78
+ flush();
79
+ return sections;
80
+ }
81
+ /**
82
+ * Append the given sections to the end of `target`. The result preserves the
83
+ * target's existing content verbatim and inserts a single blank line between
84
+ * the existing content and the first appended heading (when the target is
85
+ * non-empty and does not already end in a blank line). Sections themselves are
86
+ * separated by exactly one blank line so they read as siblings, not nested.
87
+ *
88
+ * Output normalization:
89
+ * - Always ends with a single trailing newline.
90
+ * - Existing CRLF input is preserved as LF in the output (CRLF-only files
91
+ * are uncommon in CLAUDE.md; round-tripping LF is the simplest invariant).
92
+ */
93
+ export function appendMarkdownSections(target, sections) {
94
+ if (sections.length === 0) {
95
+ // No-op — but normalize trailing newline so callers do not have to.
96
+ if (target.length === 0)
97
+ return '';
98
+ return target.endsWith('\n') ? target : target + '\n';
99
+ }
100
+ const normalized = target.replace(/\r\n/g, '\n');
101
+ const trailing = normalized.length === 0 || normalized.endsWith('\n\n')
102
+ ? ''
103
+ : normalized.endsWith('\n')
104
+ ? '\n'
105
+ : '\n\n';
106
+ const sectionTexts = sections.map((s) => s.body.length > 0 ? `${s.heading}\n${s.body}` : s.heading);
107
+ const appended = sectionTexts.join('\n\n');
108
+ // Final newline ensures the file always ends in a newline (POSIX-friendly).
109
+ return `${normalized}${trailing}${appended}\n`;
110
+ }
111
+ //# sourceMappingURL=markdownSections.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdownSections.js","sourceRoot":"","sources":["../../src/utils/markdownSections.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"queueParser.d.ts","sourceRoot":"","sources":["../../src/utils/queueParser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAqB,MAAM,mBAAmB,CAAC;AAExF,8EAA8E;AAC9E,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,MAAM,CAgC9D;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,gBAAgB,CAwWjE"}
1
+ {"version":3,"file":"queueParser.d.ts","sourceRoot":"","sources":["../../src/utils/queueParser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAqB,MAAM,mBAAmB,CAAC;AAExF,8EAA8E;AAC9E,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,MAAM,CAkC9D;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,gBAAgB,CA+cjE"}
@@ -24,6 +24,10 @@ export function serializeQueueItems(items) {
24
24
  return `@load ${item.loadSessionName}`;
25
25
  if (item.delayMs != null)
26
26
  return `@delay ${item.delayMs}`;
27
+ if (item.label)
28
+ return `@label ${item.label}`;
29
+ if (item.jumpIf)
30
+ return `@jumpif "${item.jumpIf.token}" ${item.jumpIf.target}`;
27
31
  const parts = [];
28
32
  if (item.isNewSession)
29
33
  parts.push('@new');
@@ -61,6 +65,10 @@ export function parseQueueScript(script) {
61
65
  let nestedLoopDepth = 0;
62
66
  // Track active pauseword for cross-validation
63
67
  let activePauseword;
68
+ // Track defined labels and pending @jumpif targets for forward-only / missing-label validation
69
+ const definedLabels = new Set();
70
+ const pendingJumpIfTargets = [];
71
+ const LABEL_NAME_RE = /^[a-zA-Z_][a-zA-Z0-9_-]*$/;
64
72
  // Helper to push items to the correct target (top-level or loop inner)
65
73
  const pushItem = (item) => {
66
74
  (inLoopBlock ? loopItems : items).push(item);
@@ -328,6 +336,93 @@ export function parseQueueScript(script) {
328
336
  multilineStartLine = lineNum;
329
337
  multilineContent = [];
330
338
  break;
339
+ case '@label': {
340
+ if (inLoopBlock) {
341
+ warnings.push({ line: lineNum, message: '@label is not allowed inside @loop blocks' });
342
+ break;
343
+ }
344
+ if (!argStr) {
345
+ warnings.push({ line: lineNum, message: '@label requires a name' });
346
+ break;
347
+ }
348
+ if (!LABEL_NAME_RE.test(argStr)) {
349
+ warnings.push({
350
+ line: lineNum,
351
+ message: `@label name "${argStr}" is invalid (must start with a letter or underscore and contain only letters, digits, underscore, or hyphen)`,
352
+ });
353
+ break;
354
+ }
355
+ if (definedLabels.has(argStr)) {
356
+ warnings.push({ line: lineNum, message: `@label "${argStr}" is already defined — duplicate ignored` });
357
+ break;
358
+ }
359
+ definedLabels.add(argStr);
360
+ items.push({
361
+ prompt: '',
362
+ isNewSession: false,
363
+ label: argStr,
364
+ });
365
+ break;
366
+ }
367
+ case '@jumpif': {
368
+ if (inLoopBlock) {
369
+ warnings.push({ line: lineNum, message: '@jumpif is not allowed inside @loop blocks' });
370
+ break;
371
+ }
372
+ // Parse: "TOKEN" target
373
+ const tokens = argStr.split(/\s+/).filter(t => t !== '');
374
+ if (tokens.length < 2) {
375
+ warnings.push({
376
+ line: lineNum,
377
+ message: '@jumpif requires a quoted token and a target label: @jumpif "TOKEN" name',
378
+ });
379
+ break;
380
+ }
381
+ const tokenPart = tokens[0];
382
+ const targetName = tokens[1];
383
+ let parsedToken;
384
+ if (tokenPart.startsWith('"') && tokenPart.endsWith('"') && tokenPart.length > 1) {
385
+ const inner = tokenPart.slice(1, -1);
386
+ if (inner)
387
+ parsedToken = inner;
388
+ }
389
+ else if (tokenPart.startsWith('"')) {
390
+ warnings.push({ line: lineNum, message: '@jumpif token has mismatched quotes' });
391
+ break;
392
+ }
393
+ else {
394
+ warnings.push({ line: lineNum, message: '@jumpif token must be wrapped in double quotes' });
395
+ break;
396
+ }
397
+ if (!parsedToken) {
398
+ warnings.push({ line: lineNum, message: '@jumpif token cannot be empty' });
399
+ break;
400
+ }
401
+ if (!LABEL_NAME_RE.test(targetName)) {
402
+ warnings.push({
403
+ line: lineNum,
404
+ message: `@jumpif target "${targetName}" is not a valid label name`,
405
+ });
406
+ break;
407
+ }
408
+ if (definedLabels.has(targetName)) {
409
+ warnings.push({
410
+ line: lineNum,
411
+ message: `@jumpif target "${targetName}" is already defined earlier — backward jumps are not allowed`,
412
+ });
413
+ break;
414
+ }
415
+ pendingJumpIfTargets.push({ line: lineNum, target: targetName });
416
+ items.push({
417
+ prompt: '',
418
+ isNewSession: false,
419
+ jumpIf: {
420
+ token: parsedToken,
421
+ target: targetName,
422
+ },
423
+ });
424
+ break;
425
+ }
331
426
  default:
332
427
  // Unknown directive
333
428
  warnings.push({ line: lineNum, message: `Unknown directive: ${directive}` });
@@ -357,6 +452,15 @@ export function parseQueueScript(script) {
357
452
  isMultiline: true,
358
453
  });
359
454
  }
455
+ // Validate that all @jumpif targets were eventually defined as labels
456
+ for (const pending of pendingJumpIfTargets) {
457
+ if (!definedLabels.has(pending.target)) {
458
+ warnings.push({
459
+ line: pending.line,
460
+ message: `@jumpif target "${pending.target}" is not defined — the jump will be skipped at runtime`,
461
+ });
462
+ }
463
+ }
360
464
  // Unclosed loop block
361
465
  if (inLoopBlock) {
362
466
  warnings.push({
@@ -1 +1 @@
1
- {"version":3,"file":"queueParser.js","sourceRoot":"","sources":["../../src/utils/queueParser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"queueParser.js","sourceRoot":"","sources":["../../src/utils/queueParser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,100 @@
1
+ #!/usr/bin/env node
2
+ // Build sharded manual chapters from docs/MANUAL.md.
3
+ // Output: packages/server/resources/manual/{NN}-{slug}.md (+ INDEX.md chapter list block)
4
+
5
+ import {
6
+ readFileSync,
7
+ writeFileSync,
8
+ mkdirSync,
9
+ rmSync,
10
+ existsSync,
11
+ readdirSync,
12
+ } from 'node:fs';
13
+ import { dirname, join, resolve } from 'node:path';
14
+ import { fileURLToPath } from 'node:url';
15
+
16
+ const __dirname = dirname(fileURLToPath(import.meta.url));
17
+ const ROOT = resolve(__dirname, '..');
18
+ const MANUAL_PATH = join(ROOT, 'docs', 'MANUAL.md');
19
+ const OUT_DIR = join(ROOT, 'packages', 'server', 'resources', 'manual');
20
+
21
+ const CHAPTER_RE = /^## (\d+)\. (.+)$/gm;
22
+
23
+ function slugify(title) {
24
+ return title
25
+ .toLowerCase()
26
+ .replace(/[^a-z0-9\s-]/g, '')
27
+ .trim()
28
+ .replace(/\s+/g, '-');
29
+ }
30
+
31
+ function main() {
32
+ if (!existsSync(MANUAL_PATH)) {
33
+ console.error(`✗ MANUAL.md not found at ${MANUAL_PATH}`);
34
+ process.exit(1);
35
+ }
36
+
37
+ const src = readFileSync(MANUAL_PATH, 'utf8');
38
+ const matches = [...src.matchAll(CHAPTER_RE)];
39
+ if (matches.length === 0) {
40
+ console.error('✗ No chapters found (expected `## N. ...` headings)');
41
+ process.exit(1);
42
+ }
43
+
44
+ // Reset shard files but preserve INDEX.md so its hand-curated metadata survives
45
+ if (existsSync(OUT_DIR)) {
46
+ for (const f of readdirSync(OUT_DIR)) {
47
+ if (f === 'INDEX.md') continue;
48
+ rmSync(join(OUT_DIR, f));
49
+ }
50
+ } else {
51
+ mkdirSync(OUT_DIR, { recursive: true });
52
+ }
53
+
54
+ const chapters = [];
55
+ for (let i = 0; i < matches.length; i++) {
56
+ const m = matches[i];
57
+ const num = m[1].padStart(2, '0');
58
+ const title = m[2].trim();
59
+ const slug = slugify(title);
60
+ const filename = `${num}-${slug}.md`;
61
+
62
+ const start = m.index;
63
+ const end = i + 1 < matches.length ? matches[i + 1].index : src.length;
64
+ // Drop the chapter-separator horizontal rule that lives at the end of each chapter
65
+ const body = src.slice(start, end).trimEnd().replace(/\n+---\s*$/, '');
66
+
67
+ writeFileSync(join(OUT_DIR, filename), body + '\n', 'utf8');
68
+ chapters.push({ num: m[1], title, filename });
69
+ console.log(` wrote ${filename}`);
70
+ }
71
+
72
+ // Auto-update the chapter-list block inside INDEX.md
73
+ const indexPath = join(OUT_DIR, 'INDEX.md');
74
+ const listBlock = chapters
75
+ .map((c) => `- ${c.num}. [${c.title}](./${c.filename})`)
76
+ .join('\n');
77
+ const wrappedBlock = `<!-- chapter-list:start -->\n${listBlock}\n<!-- chapter-list:end -->`;
78
+
79
+ if (existsSync(indexPath)) {
80
+ const idx = readFileSync(indexPath, 'utf8');
81
+ if (idx.includes('<!-- chapter-list:start -->')) {
82
+ const updated = idx.replace(
83
+ /<!-- chapter-list:start -->[\s\S]*?<!-- chapter-list:end -->/,
84
+ wrappedBlock,
85
+ );
86
+ writeFileSync(indexPath, updated, 'utf8');
87
+ console.log(' updated INDEX.md chapter list');
88
+ } else {
89
+ console.warn(' INDEX.md exists but lacks <!-- chapter-list:start --> markers; left untouched');
90
+ }
91
+ } else {
92
+ const seed = `# Hammoc Manual Index (Sharded)\n\n${wrappedBlock}\n`;
93
+ writeFileSync(indexPath, seed, 'utf8');
94
+ console.log(' seeded INDEX.md');
95
+ }
96
+
97
+ console.log(`\n✓ ${chapters.length} chapters built into ${OUT_DIR}`);
98
+ }
99
+
100
+ main();
@@ -1,2 +0,0 @@
1
- import{E as k,a as d,I as Dt,S as Qe,T as Fe,F as de,c as Ee,g as Bt,b as je,i as Ce,d as Et,s as Ye,m as te,f as _,e as F,C as On,h as Wn,A as Ze,N as Ue,D as Pn,j as ze,k as Tt,l as Xe,n as Fn,o as wt,P as Nn,p as qn,q as Hn,r as Vn,V as Rt,t as C,u as ce,R as It,v as T,w as S,x as Un,y as zn,W as Kn,z as Gn,B as $n,G as Jn,H as _n,J as Qn,K as Ot,L as jn,M as Wt,O as Yn,Q as Zn,U as Pt,X as Ft,Y as Xn,Z as er,_ as tr,$ as nr,a0 as rr,a1 as ir,a2 as et,a3 as sr,a4 as lr,a5 as A,a6 as or,a7 as ar}from"./index-BcI4y-fU.js";import{a8 as vs,a9 as Ms,aa as As,ab as Ls,ac as Ds,ad as Bs,ae as Es,af as Ts,ag as ws,ah as Rs,ai as Is,aj as Os,ak as Ws,al as Ps,am as Fs,an as Ns,ao as qs,ap as Hs,aq as Vs,ar as Us,as as zs,at as Ks,au as Gs,av as $s,aw as Js,ax as _s,ay as Qs,az as js,aA as Ys,aB as Zs,aC as Xs,aD as el,aE as tl,aF as nl,aG as rl,aH as il,aI as sl,aJ as ll,aK as ol,aL as al,aM as cl,aN as hl}from"./index-BcI4y-fU.js";function cr(t,e){if(t==null)return{};var r={};for(var n in t)if({}.hasOwnProperty.call(t,n)){if(e.indexOf(n)!==-1)continue;r[n]=t[n]}return r}const hr=t=>{let{state:e}=t,r=e.doc.lineAt(e.selection.main.from),n=nt(t.state,r.from);return n.line?ur(t):n.block?dr(t):!1};function tt(t,e){return({state:r,dispatch:n})=>{if(r.readOnly)return!1;let i=t(e,r);return i?(n(r.update(i)),!0):!1}}const ur=tt(pr,0),fr=tt(Nt,0),dr=tt((t,e)=>Nt(t,e,gr(e)),0);function nt(t,e){let r=t.languageDataAt("commentTokens",e,1);return r.length?r[0]:{}}const ae=50;function mr(t,{open:e,close:r},n,i){let s=t.sliceDoc(n-ae,n),l=t.sliceDoc(i,i+ae),o=/\s*$/.exec(s)[0].length,a=/^\s*/.exec(l)[0].length,c=s.length-o;if(s.slice(c-e.length,c)==e&&l.slice(a,a+r.length)==r)return{open:{pos:n-o,margin:o&&1},close:{pos:i+a,margin:a&&1}};let h,u;i-n<=2*ae?h=u=t.sliceDoc(n,i):(h=t.sliceDoc(n,n+ae),u=t.sliceDoc(i-ae,i));let f=/^\s*/.exec(h)[0].length,m=/\s*$/.exec(u)[0].length,g=u.length-m-r.length;return h.slice(f,f+e.length)==e&&u.slice(g,g+r.length)==r?{open:{pos:n+f+e.length,margin:/\s/.test(h.charAt(f+e.length))?1:0},close:{pos:i-m-r.length,margin:/\s/.test(u.charAt(g-1))?1:0}}:null}function gr(t){let e=[];for(let r of t.selection.ranges){let n=t.doc.lineAt(r.from),i=r.to<=n.to?n:t.doc.lineAt(r.to);i.from>n.from&&i.from==r.to&&(i=r.to==n.to+1?n:t.doc.lineAt(r.to-1));let s=e.length-1;s>=0&&e[s].to>n.from?e[s].to=i.to:e.push({from:n.from+/^\s*/.exec(n.text)[0].length,to:i.to})}return e}function Nt(t,e,r=e.selection.ranges){let n=r.map(s=>nt(e,s.from).block);if(!n.every(s=>s))return null;let i=r.map((s,l)=>mr(e,n[l],s.from,s.to));if(t!=2&&!i.every(s=>s))return{changes:e.changes(r.map((s,l)=>i[l]?[]:[{from:s.from,insert:n[l].open+" "},{from:s.to,insert:" "+n[l].close}]))};if(t!=1&&i.some(s=>s)){let s=[];for(let l=0,o;l<i.length;l++)if(o=i[l]){let a=n[l],{open:c,close:h}=o;s.push({from:c.pos-a.open.length,to:c.pos+c.margin},{from:h.pos-h.margin,to:h.pos+a.close.length})}return{changes:s}}return null}function pr(t,e,r=e.selection.ranges){let n=[],i=-1;e:for(let{from:s,to:l}of r){let o=n.length,a=1e9,c;for(let h=s;h<=l;){let u=e.doc.lineAt(h);if(c==null&&(c=nt(e,u.from).line,!c))continue e;if(u.from>i&&(s==l||l>u.from)){i=u.from;let f=/^\s*/.exec(u.text)[0].length,m=f==u.length,g=u.text.slice(f,f+c.length)==c?f:-1;f<u.text.length&&f<a&&(a=f),n.push({line:u,comment:g,token:c,indent:f,empty:m,single:!1})}h=u.to+1}if(a<1e9)for(let h=o;h<n.length;h++)n[h].indent<n[h].line.text.length&&(n[h].indent=a);n.length==o+1&&(n[o].single=!0)}if(t!=2&&n.some(s=>s.comment<0&&(!s.empty||s.single))){let s=[];for(let{line:o,token:a,indent:c,empty:h,single:u}of n)(u||!h)&&s.push({from:o.from+c,insert:a+" "});let l=e.changes(s);return{changes:l,selection:e.selection.map(l,1)}}else if(t!=1&&n.some(s=>s.comment>=0)){let s=[];for(let{line:l,comment:o,token:a}of n)if(o>=0){let c=l.from+o,h=c+a.length;l.text[h-l.from]==" "&&h++,s.push({from:c,to:h})}return{changes:s}}return null}const Ke=Ze.define(),yr=Ze.define(),xr=de.define(),qt=de.define({combine(t){return Ee(t,{minDepth:100,newGroupDelay:500,joinToEvent:(e,r)=>r},{minDepth:Math.max,newGroupDelay:Math.min,joinToEvent:(e,r)=>(n,i)=>e(n,i)||r(n,i)})}}),Ht=Qe.define({create(){return P.empty},update(t,e){let r=e.state.facet(qt),n=e.annotation(Ke);if(n){let a=L.fromTransaction(e,n.selection),c=n.side,h=c==0?t.undone:t.done;return a?h=ve(h,h.length,r.minDepth,a):h=Kt(h,e.startState.selection),new P(c==0?n.rest:h,c==0?h:n.rest)}let i=e.annotation(yr);if((i=="full"||i=="before")&&(t=t.isolate()),e.annotation(Fe.addToHistory)===!1)return e.changes.empty?t:t.addMapping(e.changes.desc);let s=L.fromTransaction(e),l=e.annotation(Fe.time),o=e.annotation(Fe.userEvent);return s?t=t.addChanges(s,l,o,r,e):e.selection&&(t=t.addSelection(e.startState.selection,l,o,r.newGroupDelay)),(i=="full"||i=="after")&&(t=t.isolate()),t},toJSON(t){return{done:t.done.map(e=>e.toJSON()),undone:t.undone.map(e=>e.toJSON())}},fromJSON(t){return new P(t.done.map(L.fromJSON),t.undone.map(L.fromJSON))}});function Vt(t={}){return[Ht,qt.of(t),k.domEventHandlers({beforeinput(e,r){let n=e.inputType=="historyUndo"?Ut:e.inputType=="historyRedo"?Ge:null;return n?(e.preventDefault(),n(r)):!1}})]}function Te(t,e){return function({state:r,dispatch:n}){if(!e&&r.readOnly)return!1;let i=r.field(Ht,!1);if(!i)return!1;let s=i.pop(t,r,e);return s?(n(s),!0):!1}}const Ut=Te(0,!1),Ge=Te(1,!1),kr=Te(0,!0),Sr=Te(1,!0);class L{constructor(e,r,n,i,s){this.changes=e,this.effects=r,this.mapped=n,this.startSelection=i,this.selectionsAfter=s}setSelAfter(e){return new L(this.changes,this.effects,this.mapped,this.startSelection,e)}toJSON(){var e,r,n;return{changes:(e=this.changes)===null||e===void 0?void 0:e.toJSON(),mapped:(r=this.mapped)===null||r===void 0?void 0:r.toJSON(),startSelection:(n=this.startSelection)===null||n===void 0?void 0:n.toJSON(),selectionsAfter:this.selectionsAfter.map(i=>i.toJSON())}}static fromJSON(e){return new L(e.changes&&On.fromJSON(e.changes),[],e.mapped&&Wn.fromJSON(e.mapped),e.startSelection&&d.fromJSON(e.startSelection),e.selectionsAfter.map(d.fromJSON))}static fromTransaction(e,r){let n=w;for(let i of e.startState.facet(xr)){let s=i(e);s.length&&(n=n.concat(s))}return!n.length&&e.changes.empty?null:new L(e.changes.invert(e.startState.doc),n,void 0,r||e.startState.selection,w)}static selection(e){return new L(void 0,w,void 0,void 0,e)}}function ve(t,e,r,n){let i=e+1>r+20?e-r-1:0,s=t.slice(i,e);return s.push(n),s}function br(t,e){let r=[],n=!1;return t.iterChangedRanges((i,s)=>r.push(i,s)),e.iterChangedRanges((i,s,l,o)=>{for(let a=0;a<r.length;){let c=r[a++],h=r[a++];o>=c&&l<=h&&(n=!0)}}),n}function Cr(t,e){return t.ranges.length==e.ranges.length&&t.ranges.filter((r,n)=>r.empty!=e.ranges[n].empty).length===0}function zt(t,e){return t.length?e.length?t.concat(e):t:e}const w=[],vr=200;function Kt(t,e){if(t.length){let r=t[t.length-1],n=r.selectionsAfter.slice(Math.max(0,r.selectionsAfter.length-vr));return n.length&&n[n.length-1].eq(e)?t:(n.push(e),ve(t,t.length-1,1e9,r.setSelAfter(n)))}else return[L.selection([e])]}function Mr(t){let e=t[t.length-1],r=t.slice();return r[t.length-1]=e.setSelAfter(e.selectionsAfter.slice(0,e.selectionsAfter.length-1)),r}function Ne(t,e){if(!t.length)return t;let r=t.length,n=w;for(;r;){let i=Ar(t[r-1],e,n);if(i.changes&&!i.changes.empty||i.effects.length){let s=t.slice(0,r);return s[r-1]=i,s}else e=i.mapped,r--,n=i.selectionsAfter}return n.length?[L.selection(n)]:w}function Ar(t,e,r){let n=zt(t.selectionsAfter.length?t.selectionsAfter.map(o=>o.map(e)):w,r);if(!t.changes)return L.selection(n);let i=t.changes.map(e),s=e.mapDesc(t.changes,!0),l=t.mapped?t.mapped.composeDesc(s):s;return new L(i,F.mapEffects(t.effects,e),l,t.startSelection.map(s),n)}const Lr=/^(input\.type|delete)($|\.)/;class P{constructor(e,r,n=0,i=void 0){this.done=e,this.undone=r,this.prevTime=n,this.prevUserEvent=i}isolate(){return this.prevTime?new P(this.done,this.undone):this}addChanges(e,r,n,i,s){let l=this.done,o=l[l.length-1];return o&&o.changes&&!o.changes.empty&&e.changes&&(!n||Lr.test(n))&&(!o.selectionsAfter.length&&r-this.prevTime<i.newGroupDelay&&i.joinToEvent(s,br(o.changes,e.changes))||n=="input.type.compose")?l=ve(l,l.length-1,i.minDepth,new L(e.changes.compose(o.changes),zt(F.mapEffects(e.effects,o.changes),o.effects),o.mapped,o.startSelection,w)):l=ve(l,l.length,i.minDepth,e),new P(l,w,r,n)}addSelection(e,r,n,i){let s=this.done.length?this.done[this.done.length-1].selectionsAfter:w;return s.length>0&&r-this.prevTime<i&&n==this.prevUserEvent&&n&&/^select($|\.)/.test(n)&&Cr(s[s.length-1],e)?this:new P(Kt(this.done,e),this.undone,r,n)}addMapping(e){return new P(Ne(this.done,e),Ne(this.undone,e),this.prevTime,this.prevUserEvent)}pop(e,r,n){let i=e==0?this.done:this.undone;if(i.length==0)return null;let s=i[i.length-1],l=s.selectionsAfter[0]||(s.startSelection?s.startSelection.map(s.changes.invertedDesc,1):r.selection);if(n&&s.selectionsAfter.length)return r.update({selection:s.selectionsAfter[s.selectionsAfter.length-1],annotations:Ke.of({side:e,rest:Mr(i),selection:l}),userEvent:e==0?"select.undo":"select.redo",scrollIntoView:!0});if(s.changes){let o=i.length==1?w:i.slice(0,i.length-1);return s.mapped&&(o=Ne(o,s.mapped)),r.update({changes:s.changes,selection:s.startSelection,effects:s.effects,annotations:Ke.of({side:e,rest:o,selection:l}),filter:!1,userEvent:e==0?"undo":"redo",scrollIntoView:!0})}else return null}}P.empty=new P(w,w);const Gt=[{key:"Mod-z",run:Ut,preventDefault:!0},{key:"Mod-y",mac:"Mod-Shift-z",run:Ge,preventDefault:!0},{linux:"Ctrl-Shift-z",run:Ge,preventDefault:!0},{key:"Mod-u",run:kr,preventDefault:!0},{key:"Alt-u",mac:"Mod-Shift-u",run:Sr,preventDefault:!0}];function ie(t,e){return d.create(t.ranges.map(e),t.mainIndex)}function I(t,e){return t.update({selection:e,scrollIntoView:!0,userEvent:"select"})}function O({state:t,dispatch:e},r){let n=ie(t.selection,r);return n.eq(t.selection,!0)?!1:(e(I(t,n)),!0)}function we(t,e){return d.cursor(e?t.to:t.from)}function $t(t,e){return O(t,r=>r.empty?t.moveByChar(r,e):we(r,e))}function v(t){return t.textDirectionAt(t.state.selection.main.head)==Pn.LTR}const Jt=t=>$t(t,!v(t)),_t=t=>$t(t,v(t));function Qt(t,e){return O(t,r=>r.empty?t.moveByGroup(r,e):we(r,e))}const Dr=t=>Qt(t,!v(t)),Br=t=>Qt(t,v(t));function Er(t,e,r){if(e.type.prop(r))return!0;let n=e.to-e.from;return n&&(n>2||/[^\s,.;:]/.test(t.sliceDoc(e.from,e.to)))||e.firstChild}function Re(t,e,r){let n=Ye(t).resolveInner(e.head),i=r?Ue.closedBy:Ue.openedBy;for(let a=e.head;;){let c=r?n.childAfter(a):n.childBefore(a);if(!c)break;Er(t,c,i)?n=c:a=r?c.to:c.from}let s=n.type.prop(i),l,o;return s&&(l=r?te(t,n.from,1):te(t,n.to,-1))&&l.matched?o=r?l.end.to:l.end.from:o=r?n.to:n.from,d.cursor(o,r?-1:1)}const Tr=t=>O(t,e=>Re(t.state,e,!v(t))),wr=t=>O(t,e=>Re(t.state,e,v(t)));function jt(t,e){return O(t,r=>{if(!r.empty)return we(r,e);let n=t.moveVertically(r,e);return n.head!=r.head?n:t.moveToLineBoundary(r,e)})}const Yt=t=>jt(t,!1),Zt=t=>jt(t,!0);function Xt(t){let e=t.scrollDOM.clientHeight<t.scrollDOM.scrollHeight-2,r=0,n=0,i;if(e){for(let s of t.state.facet(k.scrollMargins)){let l=s(t);l!=null&&l.top&&(r=Math.max(l==null?void 0:l.top,r)),l!=null&&l.bottom&&(n=Math.max(l==null?void 0:l.bottom,n))}i=t.scrollDOM.clientHeight-r-n}else i=(t.dom.ownerDocument.defaultView||window).innerHeight;return{marginTop:r,marginBottom:n,selfScroll:e,height:Math.max(t.defaultLineHeight,i-5)}}function en(t,e){let r=Xt(t),{state:n}=t,i=ie(n.selection,l=>l.empty?t.moveVertically(l,e,r.height):we(l,e));if(i.eq(n.selection))return!1;let s;if(r.selfScroll){let l=t.coordsAtPos(n.selection.main.head),o=t.scrollDOM.getBoundingClientRect(),a=o.top+r.marginTop,c=o.bottom-r.marginBottom;l&&l.top>a&&l.bottom<c&&(s=k.scrollIntoView(i.main.head,{y:"start",yMargin:l.top-a}))}return t.dispatch(I(n,i),{effects:s}),!0}const ct=t=>en(t,!1),$e=t=>en(t,!0);function U(t,e,r){let n=t.lineBlockAt(e.head),i=t.moveToLineBoundary(e,r);if(i.head==e.head&&i.head!=(r?n.to:n.from)&&(i=t.moveToLineBoundary(e,r,!1)),!r&&i.head==n.from&&n.length){let s=/^\s*/.exec(t.state.sliceDoc(n.from,Math.min(n.from+100,n.to)))[0].length;s&&e.head!=n.from+s&&(i=d.cursor(n.from+s))}return i}const Rr=t=>O(t,e=>U(t,e,!0)),Ir=t=>O(t,e=>U(t,e,!1)),Or=t=>O(t,e=>U(t,e,!v(t))),Wr=t=>O(t,e=>U(t,e,v(t))),Pr=t=>O(t,e=>d.cursor(t.lineBlockAt(e.head).from,1)),Fr=t=>O(t,e=>d.cursor(t.lineBlockAt(e.head).to,-1));function Nr(t,e,r){let n=!1,i=ie(t.selection,s=>{let l=te(t,s.head,-1)||te(t,s.head,1)||s.head>0&&te(t,s.head-1,1)||s.head<t.doc.length&&te(t,s.head+1,-1);if(!l||!l.end)return s;n=!0;let o=l.start.from==s.head?l.end.to:l.end.from;return d.cursor(o)});return n?(e(I(t,i)),!0):!1}const qr=({state:t,dispatch:e})=>Nr(t,e);function R(t,e){let r=ie(t.state.selection,n=>{let i=e(n);return d.range(n.anchor,i.head,i.goalColumn,i.bidiLevel||void 0,i.assoc)});return r.eq(t.state.selection)?!1:(t.dispatch(I(t.state,r)),!0)}function tn(t,e){return R(t,r=>t.moveByChar(r,e))}const nn=t=>tn(t,!v(t)),rn=t=>tn(t,v(t));function sn(t,e){return R(t,r=>t.moveByGroup(r,e))}const Hr=t=>sn(t,!v(t)),Vr=t=>sn(t,v(t)),Ur=t=>R(t,e=>Re(t.state,e,!v(t))),zr=t=>R(t,e=>Re(t.state,e,v(t)));function ln(t,e){return R(t,r=>t.moveVertically(r,e))}const on=t=>ln(t,!1),an=t=>ln(t,!0);function cn(t,e){return R(t,r=>t.moveVertically(r,e,Xt(t).height))}const ht=t=>cn(t,!1),ut=t=>cn(t,!0),Kr=t=>R(t,e=>U(t,e,!0)),Gr=t=>R(t,e=>U(t,e,!1)),$r=t=>R(t,e=>U(t,e,!v(t))),Jr=t=>R(t,e=>U(t,e,v(t))),_r=t=>R(t,e=>d.cursor(t.lineBlockAt(e.head).from)),Qr=t=>R(t,e=>d.cursor(t.lineBlockAt(e.head).to)),ft=({state:t,dispatch:e})=>(e(I(t,{anchor:0})),!0),dt=({state:t,dispatch:e})=>(e(I(t,{anchor:t.doc.length})),!0),mt=({state:t,dispatch:e})=>(e(I(t,{anchor:t.selection.main.anchor,head:0})),!0),gt=({state:t,dispatch:e})=>(e(I(t,{anchor:t.selection.main.anchor,head:t.doc.length})),!0),jr=({state:t,dispatch:e})=>(e(t.update({selection:{anchor:0,head:t.doc.length},userEvent:"select"})),!0),Yr=({state:t,dispatch:e})=>{let r=Ie(t).map(({from:n,to:i})=>d.range(n,Math.min(i+1,t.doc.length)));return e(t.update({selection:d.create(r),userEvent:"select"})),!0},Zr=({state:t,dispatch:e})=>{let r=ie(t.selection,n=>{let i=Ye(t),s=i.resolveStack(n.from,1);if(n.empty){let l=i.resolveStack(n.from,-1);l.node.from>=s.node.from&&l.node.to<=s.node.to&&(s=l)}for(let l=s;l;l=l.next){let{node:o}=l;if((o.from<n.from&&o.to>=n.to||o.to>n.to&&o.from<=n.from)&&l.next)return d.range(o.to,o.from)}return n});return r.eq(t.selection)?!1:(e(I(t,r)),!0)};function hn(t,e){let{state:r}=t,n=r.selection,i=r.selection.ranges.slice();for(let s of r.selection.ranges){let l=r.doc.lineAt(s.head);if(e?l.to<t.state.doc.length:l.from>0)for(let o=s;;){let a=t.moveVertically(o,e);if(a.head<l.from||a.head>l.to){i.some(c=>c.head==a.head)||i.push(a);break}else{if(a.head==o.head)break;o=a}}}return i.length==n.ranges.length?!1:(t.dispatch(I(r,d.create(i,i.length-1))),!0)}const Xr=t=>hn(t,!1),ei=t=>hn(t,!0),ti=({state:t,dispatch:e})=>{let r=t.selection,n=null;return r.ranges.length>1?n=d.create([r.main]):r.main.empty||(n=d.create([d.cursor(r.main.head)])),n?(e(I(t,n)),!0):!1};function me(t,e){if(t.state.readOnly)return!1;let r="delete.selection",{state:n}=t,i=n.changeByRange(s=>{let{from:l,to:o}=s;if(l==o){let a=e(s);a<l?(r="delete.backward",a=xe(t,a,!1)):a>l&&(r="delete.forward",a=xe(t,a,!0)),l=Math.min(l,a),o=Math.max(o,a)}else l=xe(t,l,!1),o=xe(t,o,!0);return l==o?{range:s}:{changes:{from:l,to:o},range:d.cursor(l,l<s.head?-1:1)}});return i.changes.empty?!1:(t.dispatch(n.update(i,{scrollIntoView:!0,userEvent:r,effects:r=="delete.selection"?k.announce.of(n.phrase("Selection deleted")):void 0})),!0)}function xe(t,e,r){if(t instanceof k)for(let n of t.state.facet(k.atomicRanges).map(i=>i(t)))n.between(e,e,(i,s)=>{i<e&&s>e&&(e=r?s:i)});return e}const un=(t,e,r)=>me(t,n=>{let i=n.from,{state:s}=t,l=s.doc.lineAt(i),o,a;if(r&&!e&&i>l.from&&i<l.from+200&&!/[^ \t]/.test(o=l.text.slice(0,i-l.from))){if(o[o.length-1]==" ")return i-1;let c=je(o,s.tabSize),h=c%ze(s)||ze(s);for(let u=0;u<h&&o[o.length-1-u]==" ";u++)i--;a=i}else a=_(l.text,i-l.from,e,e)+l.from,a==i&&l.number!=(e?s.doc.lines:1)?a+=e?1:-1:!e&&/[\ufe00-\ufe0f]/.test(l.text.slice(a-l.from,i-l.from))&&(a=_(l.text,a-l.from,!1,!1)+l.from);return a}),Je=t=>un(t,!1,!0),fn=t=>un(t,!0,!1),dn=(t,e)=>me(t,r=>{let n=r.head,{state:i}=t,s=i.doc.lineAt(n),l=i.charCategorizer(n);for(let o=null;;){if(n==(e?s.to:s.from)){n==r.head&&s.number!=(e?i.doc.lines:1)&&(n+=e?1:-1);break}let a=_(s.text,n-s.from,e)+s.from,c=s.text.slice(Math.min(n,a)-s.from,Math.max(n,a)-s.from),h=l(c);if(o!=null&&h!=o)break;(c!=" "||n!=r.head)&&(o=h),n=a}return n}),mn=t=>dn(t,!1),ni=t=>dn(t,!0),ri=t=>me(t,e=>{let r=t.lineBlockAt(e.head).to;return e.head<r?r:Math.min(t.state.doc.length,e.head+1)}),ii=t=>me(t,e=>{let r=t.moveToLineBoundary(e,!1).head;return e.head>r?r:Math.max(0,e.head-1)}),si=t=>me(t,e=>{let r=t.moveToLineBoundary(e,!0).head;return e.head<r?r:Math.min(t.state.doc.length,e.head+1)}),li=({state:t,dispatch:e})=>{if(t.readOnly)return!1;let r=t.changeByRange(n=>({changes:{from:n.from,to:n.to,insert:Et.of(["",""])},range:d.cursor(n.from)}));return e(t.update(r,{scrollIntoView:!0,userEvent:"input"})),!0},oi=({state:t,dispatch:e})=>{if(t.readOnly)return!1;let r=t.changeByRange(n=>{if(!n.empty||n.from==0||n.from==t.doc.length)return{range:n};let i=n.from,s=t.doc.lineAt(i),l=i==s.from?i-1:_(s.text,i-s.from,!1)+s.from,o=i==s.to?i+1:_(s.text,i-s.from,!0)+s.from;return{changes:{from:l,to:o,insert:t.doc.slice(i,o).append(t.doc.slice(l,i))},range:d.cursor(o)}});return r.changes.empty?!1:(e(t.update(r,{scrollIntoView:!0,userEvent:"move.character"})),!0)};function Ie(t){let e=[],r=-1;for(let n of t.selection.ranges){let i=t.doc.lineAt(n.from),s=t.doc.lineAt(n.to);if(!n.empty&&n.to==s.from&&(s=t.doc.lineAt(n.to-1)),r>=i.number){let l=e[e.length-1];l.to=s.to,l.ranges.push(n)}else e.push({from:i.from,to:s.to,ranges:[n]});r=s.number+1}return e}function gn(t,e,r){if(t.readOnly)return!1;let n=[],i=[];for(let s of Ie(t)){if(r?s.to==t.doc.length:s.from==0)continue;let l=t.doc.lineAt(r?s.to+1:s.from-1),o=l.length+1;if(r){n.push({from:s.to,to:l.to},{from:s.from,insert:l.text+t.lineBreak});for(let a of s.ranges)i.push(d.range(Math.min(t.doc.length,a.anchor+o),Math.min(t.doc.length,a.head+o)))}else{n.push({from:l.from,to:s.from},{from:s.to,insert:t.lineBreak+l.text});for(let a of s.ranges)i.push(d.range(a.anchor-o,a.head-o))}}return n.length?(e(t.update({changes:n,scrollIntoView:!0,selection:d.create(i,t.selection.mainIndex),userEvent:"move.line"})),!0):!1}const ai=({state:t,dispatch:e})=>gn(t,e,!1),ci=({state:t,dispatch:e})=>gn(t,e,!0);function pn(t,e,r){if(t.readOnly)return!1;let n=[];for(let s of Ie(t))r?n.push({from:s.from,insert:t.doc.slice(s.from,s.to)+t.lineBreak}):n.push({from:s.to,insert:t.lineBreak+t.doc.slice(s.from,s.to)});let i=t.changes(n);return e(t.update({changes:i,selection:t.selection.map(i,r?1:-1),scrollIntoView:!0,userEvent:"input.copyline"})),!0}const hi=({state:t,dispatch:e})=>pn(t,e,!1),ui=({state:t,dispatch:e})=>pn(t,e,!0),fi=t=>{if(t.state.readOnly)return!1;let{state:e}=t,r=e.changes(Ie(e).map(({from:i,to:s})=>(i>0?i--:s<e.doc.length&&s++,{from:i,to:s}))),n=ie(e.selection,i=>{let s;if(t.lineWrapping){let l=t.lineBlockAt(i.head),o=t.coordsAtPos(i.head,i.assoc||1);o&&(s=l.bottom+t.documentTop-o.bottom+t.defaultLineHeight/2)}return t.moveVertically(i,!0,s)}).map(r);return t.dispatch({changes:r,selection:n,scrollIntoView:!0,userEvent:"delete.line"}),!0};function di(t,e){if(/\(\)|\[\]|\{\}/.test(t.sliceDoc(e-1,e+1)))return{from:e,to:e};let r=Ye(t).resolveInner(e),n=r.childBefore(e),i=r.childAfter(e),s;return n&&i&&n.to<=e&&i.from>=e&&(s=n.type.prop(Ue.closedBy))&&s.indexOf(i.name)>-1&&t.doc.lineAt(n.to).from==t.doc.lineAt(i.from).from&&!/\S/.test(t.sliceDoc(n.to,i.from))?{from:n.to,to:i.from}:null}const pt=yn(!1),mi=yn(!0);function yn(t){return({state:e,dispatch:r})=>{if(e.readOnly)return!1;let n=e.changeByRange(i=>{let{from:s,to:l}=i,o=e.doc.lineAt(s),a=!t&&s==l&&di(e,s);t&&(s=l=(l<=o.to?o:e.doc.lineAt(l)).to);let c=new Dt(e,{simulateBreak:s,simulateDoubleBreak:!!a}),h=Bt(c,s);for(h==null&&(h=je(/^\s*/.exec(e.doc.lineAt(s).text)[0],e.tabSize));l<o.to&&/\s/.test(o.text[l-o.from]);)l++;a?{from:s,to:l}=a:s>o.from&&s<o.from+100&&!/\S/.test(o.text.slice(0,s))&&(s=o.from);let u=["",Ce(e,h)];return a&&u.push(Ce(e,c.lineIndent(o.from,-1))),{changes:{from:s,to:l,insert:Et.of(u)},range:d.cursor(s+1+u[1].length)}});return r(e.update(n,{scrollIntoView:!0,userEvent:"input"})),!0}}function rt(t,e){let r=-1;return t.changeByRange(n=>{let i=[];for(let l=n.from;l<=n.to;){let o=t.doc.lineAt(l);o.number>r&&(n.empty||n.to>o.from)&&(e(o,i,n),r=o.number),l=o.to+1}let s=t.changes(i);return{changes:i,range:d.range(s.mapPos(n.anchor,1),s.mapPos(n.head,1))}})}const gi=({state:t,dispatch:e})=>{if(t.readOnly)return!1;let r=Object.create(null),n=new Dt(t,{overrideIndentation:s=>{let l=r[s];return l??-1}}),i=rt(t,(s,l,o)=>{let a=Bt(n,s.from);if(a==null)return;/\S/.test(s.text)||(a=0);let c=/^\s*/.exec(s.text)[0],h=Ce(t,a);(c!=h||o.from<s.from+c.length)&&(r[s.from]=a,l.push({from:s.from,to:s.from+c.length,insert:h}))});return i.changes.empty||e(t.update(i,{userEvent:"indent"})),!0},xn=({state:t,dispatch:e})=>t.readOnly?!1:(e(t.update(rt(t,(r,n)=>{n.push({from:r.from,insert:t.facet(Tt)})}),{userEvent:"input.indent"})),!0),kn=({state:t,dispatch:e})=>t.readOnly?!1:(e(t.update(rt(t,(r,n)=>{let i=/^\s*/.exec(r.text)[0];if(!i)return;let s=je(i,t.tabSize),l=0,o=Ce(t,Math.max(0,s-ze(t)));for(;l<i.length&&l<o.length&&i.charCodeAt(l)==o.charCodeAt(l);)l++;n.push({from:r.from+l,to:r.from+i.length,insert:o.slice(l)})}),{userEvent:"delete.dedent"})),!0),pi=t=>(t.setTabFocusMode(),!0),yi=[{key:"Ctrl-b",run:Jt,shift:nn,preventDefault:!0},{key:"Ctrl-f",run:_t,shift:rn},{key:"Ctrl-p",run:Yt,shift:on},{key:"Ctrl-n",run:Zt,shift:an},{key:"Ctrl-a",run:Pr,shift:_r},{key:"Ctrl-e",run:Fr,shift:Qr},{key:"Ctrl-d",run:fn},{key:"Ctrl-h",run:Je},{key:"Ctrl-k",run:ri},{key:"Ctrl-Alt-h",run:mn},{key:"Ctrl-o",run:li},{key:"Ctrl-t",run:oi},{key:"Ctrl-v",run:$e}],xi=[{key:"ArrowLeft",run:Jt,shift:nn,preventDefault:!0},{key:"Mod-ArrowLeft",mac:"Alt-ArrowLeft",run:Dr,shift:Hr,preventDefault:!0},{mac:"Cmd-ArrowLeft",run:Or,shift:$r,preventDefault:!0},{key:"ArrowRight",run:_t,shift:rn,preventDefault:!0},{key:"Mod-ArrowRight",mac:"Alt-ArrowRight",run:Br,shift:Vr,preventDefault:!0},{mac:"Cmd-ArrowRight",run:Wr,shift:Jr,preventDefault:!0},{key:"ArrowUp",run:Yt,shift:on,preventDefault:!0},{mac:"Cmd-ArrowUp",run:ft,shift:mt},{mac:"Ctrl-ArrowUp",run:ct,shift:ht},{key:"ArrowDown",run:Zt,shift:an,preventDefault:!0},{mac:"Cmd-ArrowDown",run:dt,shift:gt},{mac:"Ctrl-ArrowDown",run:$e,shift:ut},{key:"PageUp",run:ct,shift:ht},{key:"PageDown",run:$e,shift:ut},{key:"Home",run:Ir,shift:Gr,preventDefault:!0},{key:"Mod-Home",run:ft,shift:mt},{key:"End",run:Rr,shift:Kr,preventDefault:!0},{key:"Mod-End",run:dt,shift:gt},{key:"Enter",run:pt,shift:pt},{key:"Mod-a",run:jr},{key:"Backspace",run:Je,shift:Je,preventDefault:!0},{key:"Delete",run:fn,preventDefault:!0},{key:"Mod-Backspace",mac:"Alt-Backspace",run:mn,preventDefault:!0},{key:"Mod-Delete",mac:"Alt-Delete",run:ni,preventDefault:!0},{mac:"Mod-Backspace",run:ii,preventDefault:!0},{mac:"Mod-Delete",run:si,preventDefault:!0}].concat(yi.map(t=>({mac:t.key,run:t.run,shift:t.shift}))),Sn=[{key:"Alt-ArrowLeft",mac:"Ctrl-ArrowLeft",run:Tr,shift:Ur},{key:"Alt-ArrowRight",mac:"Ctrl-ArrowRight",run:wr,shift:zr},{key:"Alt-ArrowUp",run:ai},{key:"Shift-Alt-ArrowUp",run:hi},{key:"Alt-ArrowDown",run:ci},{key:"Shift-Alt-ArrowDown",run:ui},{key:"Mod-Alt-ArrowUp",run:Xr},{key:"Mod-Alt-ArrowDown",run:ei},{key:"Escape",run:ti},{key:"Mod-Enter",run:mi},{key:"Alt-l",mac:"Ctrl-l",run:Yr},{key:"Mod-i",run:Zr,preventDefault:!0},{key:"Mod-[",run:kn},{key:"Mod-]",run:xn},{key:"Mod-Alt-\\",run:gi},{key:"Shift-Mod-k",run:fi},{key:"Shift-Mod-\\",run:qr},{key:"Mod-/",run:hr},{key:"Alt-A",run:fr},{key:"Ctrl-m",mac:"Shift-Alt-m",run:pi}].concat(xi),ki={key:"Tab",run:xn,shift:kn},yt=typeof String.prototype.normalize=="function"?t=>t.normalize("NFKD"):t=>t;class re{constructor(e,r,n=0,i=e.length,s,l){this.test=l,this.value={from:0,to:0},this.done=!1,this.matches=[],this.buffer="",this.bufferPos=0,this.iter=e.iterRange(n,i),this.bufferStart=n,this.normalize=s?o=>s(yt(o)):yt,this.query=this.normalize(r)}peek(){if(this.bufferPos==this.buffer.length){if(this.bufferStart+=this.buffer.length,this.iter.next(),this.iter.done)return-1;this.bufferPos=0,this.buffer=this.iter.value}return qn(this.buffer,this.bufferPos)}next(){for(;this.matches.length;)this.matches.pop();return this.nextOverlapping()}nextOverlapping(){for(;;){let e=this.peek();if(e<0)return this.done=!0,this;let r=Hn(e),n=this.bufferStart+this.bufferPos;this.bufferPos+=Vn(e);let i=this.normalize(r);if(i.length)for(let s=0,l=n;;s++){let o=i.charCodeAt(s),a=this.match(o,l,this.bufferPos+this.bufferStart);if(s==i.length-1){if(a)return this.value=a,this;break}l==n&&s<r.length&&r.charCodeAt(s)==o&&l++}}}match(e,r,n){let i=null;for(let s=0;s<this.matches.length;s+=2){let l=this.matches[s],o=!1;this.query.charCodeAt(l)==e&&(l==this.query.length-1?i={from:this.matches[s+1],to:n}:(this.matches[s]++,o=!0)),o||(this.matches.splice(s,2),s-=2)}return this.query.charCodeAt(0)==e&&(this.query.length==1?i={from:r,to:n}:this.matches.push(1,r)),i&&this.test&&!this.test(i.from,i.to,this.buffer,this.bufferStart)&&(i=null),i}}typeof Symbol<"u"&&(re.prototype[Symbol.iterator]=function(){return this});const bn={from:-1,to:-1,match:/.*/.exec("")},it="gm"+(/x/.unicode==null?"":"u");class Cn{constructor(e,r,n,i=0,s=e.length){if(this.text=e,this.to=s,this.curLine="",this.done=!1,this.value=bn,/\\[sWDnr]|\n|\r|\[\^/.test(r))return new vn(e,r,n,i,s);this.re=new RegExp(r,it+(n!=null&&n.ignoreCase?"i":"")),this.test=n==null?void 0:n.test,this.iter=e.iter();let l=e.lineAt(i);this.curLineStart=l.from,this.matchPos=Me(e,i),this.getLine(this.curLineStart)}getLine(e){this.iter.next(e),this.iter.lineBreak?this.curLine="":(this.curLine=this.iter.value,this.curLineStart+this.curLine.length>this.to&&(this.curLine=this.curLine.slice(0,this.to-this.curLineStart)),this.iter.next())}nextLine(){this.curLineStart=this.curLineStart+this.curLine.length+1,this.curLineStart>this.to?this.curLine="":this.getLine(0)}next(){for(let e=this.matchPos-this.curLineStart;;){this.re.lastIndex=e;let r=this.matchPos<=this.to&&this.re.exec(this.curLine);if(r){let n=this.curLineStart+r.index,i=n+r[0].length;if(this.matchPos=Me(this.text,i+(n==i?1:0)),n==this.curLineStart+this.curLine.length&&this.nextLine(),(n<i||n>this.value.to)&&(!this.test||this.test(n,i,r)))return this.value={from:n,to:i,match:r},this;e=this.matchPos-this.curLineStart}else if(this.curLineStart+this.curLine.length<this.to)this.nextLine(),e=0;else return this.done=!0,this}}}const qe=new WeakMap;class ne{constructor(e,r){this.from=e,this.text=r}get to(){return this.from+this.text.length}static get(e,r,n){let i=qe.get(e);if(!i||i.from>=n||i.to<=r){let o=new ne(r,e.sliceString(r,n));return qe.set(e,o),o}if(i.from==r&&i.to==n)return i;let{text:s,from:l}=i;return l>r&&(s=e.sliceString(r,l)+s,l=r),i.to<n&&(s+=e.sliceString(i.to,n)),qe.set(e,new ne(l,s)),new ne(r,s.slice(r-l,n-l))}}class vn{constructor(e,r,n,i,s){this.text=e,this.to=s,this.done=!1,this.value=bn,this.matchPos=Me(e,i),this.re=new RegExp(r,it+(n!=null&&n.ignoreCase?"i":"")),this.test=n==null?void 0:n.test,this.flat=ne.get(e,i,this.chunkEnd(i+5e3))}chunkEnd(e){return e>=this.to?this.to:this.text.lineAt(e).to}next(){for(;;){let e=this.re.lastIndex=this.matchPos-this.flat.from,r=this.re.exec(this.flat.text);if(r&&!r[0]&&r.index==e&&(this.re.lastIndex=e+1,r=this.re.exec(this.flat.text)),r){let n=this.flat.from+r.index,i=n+r[0].length;if((this.flat.to>=this.to||r.index+r[0].length<=this.flat.text.length-10)&&(!this.test||this.test(n,i,r)))return this.value={from:n,to:i,match:r},this.matchPos=Me(this.text,i+(n==i?1:0)),this}if(this.flat.to==this.to)return this.done=!0,this;this.flat=ne.get(this.text,this.flat.from,this.chunkEnd(this.flat.from+this.flat.text.length*2))}}}typeof Symbol<"u"&&(Cn.prototype[Symbol.iterator]=vn.prototype[Symbol.iterator]=function(){return this});function Si(t){try{return new RegExp(t,it),!0}catch{return!1}}function Me(t,e){if(e>=t.length)return e;let r=t.lineAt(e),n;for(;e<r.to&&(n=r.text.charCodeAt(e-r.from))>=56320&&n<57344;)e++;return e}const bi=t=>{let{state:e}=t,r=String(e.doc.lineAt(t.state.selection.main.head).number),{close:n,result:i}=Fn(t,{label:e.phrase("Go to line"),input:{type:"text",name:"line",value:r},focus:!0,submitLabel:e.phrase("go")});return i.then(s=>{let l=s&&/^([+-])?(\d+)?(:\d+)?(%)?$/.exec(s.elements.line.value);if(!l){t.dispatch({effects:n});return}let o=e.doc.lineAt(e.selection.main.head),[,a,c,h,u]=l,f=h?+h.slice(1):0,m=c?+c:o.number;if(c&&u){let y=m/100;a&&(y=y*(a=="-"?-1:1)+o.number/e.doc.lines),m=Math.round(e.doc.lines*y)}else c&&a&&(m=m*(a=="-"?-1:1)+o.number);let g=e.doc.line(Math.max(1,Math.min(e.doc.lines,m))),x=d.cursor(g.from+Math.max(0,Math.min(f,g.length)));t.dispatch({effects:[n,k.scrollIntoView(x.from,{y:"center"})],selection:x})}),!0},Ci={highlightWordAroundCursor:!1,minSelectionLength:1,maxMatches:100,wholeWords:!1},vi=de.define({combine(t){return Ee(t,Ci,{highlightWordAroundCursor:(e,r)=>e||r,minSelectionLength:Math.min,maxMatches:Math.min})}});function Mi(t){return[Ei,Bi]}const Ai=C.mark({class:"cm-selectionMatch"}),Li=C.mark({class:"cm-selectionMatch cm-selectionMatch-main"});function xt(t,e,r,n){return(r==0||t(e.sliceDoc(r-1,r))!=T.Word)&&(n==e.doc.length||t(e.sliceDoc(n,n+1))!=T.Word)}function Di(t,e,r,n){return t(e.sliceDoc(r,r+1))==T.Word&&t(e.sliceDoc(n-1,n))==T.Word}const Bi=Rt.fromClass(class{constructor(t){this.decorations=this.getDeco(t)}update(t){(t.selectionSet||t.docChanged||t.viewportChanged)&&(this.decorations=this.getDeco(t.view))}getDeco(t){let e=t.state.facet(vi),{state:r}=t,n=r.selection;if(n.ranges.length>1)return C.none;let i=n.main,s,l=null;if(i.empty){if(!e.highlightWordAroundCursor)return C.none;let a=r.wordAt(i.head);if(!a)return C.none;l=r.charCategorizer(i.head),s=r.sliceDoc(a.from,a.to)}else{let a=i.to-i.from;if(a<e.minSelectionLength||a>200)return C.none;if(e.wholeWords){if(s=r.sliceDoc(i.from,i.to),l=r.charCategorizer(i.head),!(xt(l,r,i.from,i.to)&&Di(l,r,i.from,i.to)))return C.none}else if(s=r.sliceDoc(i.from,i.to),!s)return C.none}let o=[];for(let a of t.visibleRanges){let c=new re(r.doc,s,a.from,a.to);for(;!c.next().done;){let{from:h,to:u}=c.value;if((!l||xt(l,r,h,u))&&(i.empty&&h<=i.from&&u>=i.to?o.push(Li.range(h,u)):(h>=i.to||u<=i.from)&&o.push(Ai.range(h,u)),o.length>e.maxMatches))return C.none}}return C.set(o)}},{decorations:t=>t.decorations}),Ei=k.baseTheme({".cm-selectionMatch":{backgroundColor:"#99ff7780"},".cm-searchMatch .cm-selectionMatch":{backgroundColor:"transparent"}}),Ti=({state:t,dispatch:e})=>{let{selection:r}=t,n=d.create(r.ranges.map(i=>t.wordAt(i.head)||d.cursor(i.head)),r.mainIndex);return n.eq(r)?!1:(e(t.update({selection:n})),!0)};function wi(t,e){let{main:r,ranges:n}=t.selection,i=t.wordAt(r.head),s=i&&i.from==r.from&&i.to==r.to;for(let l=!1,o=new re(t.doc,e,n[n.length-1].to);;)if(o.next(),o.done){if(l)return null;o=new re(t.doc,e,0,Math.max(0,n[n.length-1].from-1)),l=!0}else{if(l&&n.some(a=>a.from==o.value.from))continue;if(s){let a=t.wordAt(o.value.from);if(!a||a.from!=o.value.from||a.to!=o.value.to)continue}return o.value}}const Ri=({state:t,dispatch:e})=>{let{ranges:r}=t.selection;if(r.some(s=>s.from===s.to))return Ti({state:t,dispatch:e});let n=t.sliceDoc(r[0].from,r[0].to);if(t.selection.ranges.some(s=>t.sliceDoc(s.from,s.to)!=n))return!1;let i=wi(t,n);return i?(e(t.update({selection:t.selection.addRange(d.range(i.from,i.to),!1),effects:k.scrollIntoView(i.to)})),!0):!1},se=de.define({combine(t){return Ee(t,{top:!1,caseSensitive:!1,literal:!1,regexp:!1,wholeWord:!1,createPanel:e=>new $i(e),scrollToMatch:e=>k.scrollIntoView(e)})}});class Mn{constructor(e){this.search=e.search,this.caseSensitive=!!e.caseSensitive,this.literal=!!e.literal,this.regexp=!!e.regexp,this.replace=e.replace||"",this.valid=!!this.search&&(!this.regexp||Si(this.search)),this.unquoted=this.unquote(this.search),this.wholeWord=!!e.wholeWord,this.test=e.test}unquote(e){return this.literal?e:e.replace(/\\([nrt\\])/g,(r,n)=>n=="n"?`
2
- `:n=="r"?"\r":n=="t"?" ":"\\")}eq(e){return this.search==e.search&&this.replace==e.replace&&this.caseSensitive==e.caseSensitive&&this.regexp==e.regexp&&this.wholeWord==e.wholeWord&&this.test==e.test}create(){return this.regexp?new Ni(this):new Wi(this)}getCursor(e,r=0,n){let i=e.doc?e:ce.create({doc:e});return n==null&&(n=i.doc.length),this.regexp?ee(this,i,r,n):X(this,i,r,n)}}class An{constructor(e){this.spec=e}}function Ii(t,e,r){return(n,i,s,l)=>{if(r&&!r(n,i,s,l))return!1;let o=n>=l&&i<=l+s.length?s.slice(n-l,i-l):e.doc.sliceString(n,i);return t(o,e,n,i)}}function X(t,e,r,n){let i;return t.wholeWord&&(i=Oi(e.doc,e.charCategorizer(e.selection.main.head))),t.test&&(i=Ii(t.test,e,i)),new re(e.doc,t.unquoted,r,n,t.caseSensitive?void 0:s=>s.toLowerCase(),i)}function Oi(t,e){return(r,n,i,s)=>((s>r||s+i.length<n)&&(s=Math.max(0,r-2),i=t.sliceString(s,Math.min(t.length,n+2))),(e(Ae(i,r-s))!=T.Word||e(Le(i,r-s))!=T.Word)&&(e(Le(i,n-s))!=T.Word||e(Ae(i,n-s))!=T.Word))}class Wi extends An{constructor(e){super(e)}nextMatch(e,r,n){let i=X(this.spec,e,n,e.doc.length).nextOverlapping();if(i.done){let s=Math.min(e.doc.length,r+this.spec.unquoted.length);i=X(this.spec,e,0,s).nextOverlapping()}return i.done||i.value.from==r&&i.value.to==n?null:i.value}prevMatchInRange(e,r,n){for(let i=n;;){let s=Math.max(r,i-1e4-this.spec.unquoted.length),l=X(this.spec,e,s,i),o=null;for(;!l.nextOverlapping().done;)o=l.value;if(o)return o;if(s==r)return null;i-=1e4}}prevMatch(e,r,n){let i=this.prevMatchInRange(e,0,r);return i||(i=this.prevMatchInRange(e,Math.max(0,n-this.spec.unquoted.length),e.doc.length)),i&&(i.from!=r||i.to!=n)?i:null}getReplacement(e){return this.spec.unquote(this.spec.replace)}matchAll(e,r){let n=X(this.spec,e,0,e.doc.length),i=[];for(;!n.next().done;){if(i.length>=r)return null;i.push(n.value)}return i}highlight(e,r,n,i){let s=X(this.spec,e,Math.max(0,r-this.spec.unquoted.length),Math.min(n+this.spec.unquoted.length,e.doc.length));for(;!s.next().done;)i(s.value.from,s.value.to)}}function Pi(t,e,r){return(n,i,s)=>(!r||r(n,i,s))&&t(s[0],e,n,i)}function ee(t,e,r,n){let i;return t.wholeWord&&(i=Fi(e.charCategorizer(e.selection.main.head))),t.test&&(i=Pi(t.test,e,i)),new Cn(e.doc,t.search,{ignoreCase:!t.caseSensitive,test:i},r,n)}function Ae(t,e){return t.slice(_(t,e,!1),e)}function Le(t,e){return t.slice(e,_(t,e))}function Fi(t){return(e,r,n)=>!n[0].length||(t(Ae(n.input,n.index))!=T.Word||t(Le(n.input,n.index))!=T.Word)&&(t(Le(n.input,n.index+n[0].length))!=T.Word||t(Ae(n.input,n.index+n[0].length))!=T.Word)}class Ni extends An{nextMatch(e,r,n){let i=ee(this.spec,e,n,e.doc.length).next();return i.done&&(i=ee(this.spec,e,0,r).next()),i.done?null:i.value}prevMatchInRange(e,r,n){for(let i=1;;i++){let s=Math.max(r,n-i*1e4),l=ee(this.spec,e,s,n),o=null;for(;!l.next().done;)o=l.value;if(o&&(s==r||o.from>s+10))return o;if(s==r)return null}}prevMatch(e,r,n){return this.prevMatchInRange(e,0,r)||this.prevMatchInRange(e,n,e.doc.length)}getReplacement(e){return this.spec.unquote(this.spec.replace).replace(/\$([$&]|\d+)/g,(r,n)=>{if(n=="&")return e.match[0];if(n=="$")return"$";for(let i=n.length;i>0;i--){let s=+n.slice(0,i);if(s>0&&s<e.match.length)return e.match[s]+n.slice(i)}return r})}matchAll(e,r){let n=ee(this.spec,e,0,e.doc.length),i=[];for(;!n.next().done;){if(i.length>=r)return null;i.push(n.value)}return i}highlight(e,r,n,i){let s=ee(this.spec,e,Math.max(0,r-250),Math.min(n+250,e.doc.length));for(;!s.next().done;)i(s.value.from,s.value.to)}}const he=F.define(),st=F.define(),H=Qe.define({create(t){return new He(_e(t).create(),null)},update(t,e){for(let r of e.effects)r.is(he)?t=new He(r.value.create(),t.panel):r.is(st)&&(t=new He(t.query,r.value?lt:null));return t},provide:t=>wt.from(t,e=>e.panel)});class He{constructor(e,r){this.query=e,this.panel=r}}const qi=C.mark({class:"cm-searchMatch"}),Hi=C.mark({class:"cm-searchMatch cm-searchMatch-selected"}),Vi=Rt.fromClass(class{constructor(t){this.view=t,this.decorations=this.highlight(t.state.field(H))}update(t){let e=t.state.field(H);(e!=t.startState.field(H)||t.docChanged||t.selectionSet||t.viewportChanged)&&(this.decorations=this.highlight(e))}highlight({query:t,panel:e}){if(!e||!t.spec.valid)return C.none;let{view:r}=this,n=new It;for(let i=0,s=r.visibleRanges,l=s.length;i<l;i++){let{from:o,to:a}=s[i];for(;i<l-1&&a>s[i+1].from-500;)a=s[++i].to;t.highlight(r.state,o,a,(c,h)=>{let u=r.state.selection.ranges.some(f=>f.from==c&&f.to==h);n.add(c,h,u?Hi:qi)})}return n.finish()}},{decorations:t=>t.decorations});function ge(t){return e=>{let r=e.state.field(H,!1);return r&&r.query.spec.valid?t(e,r):Bn(e)}}const De=ge((t,{query:e})=>{let{to:r}=t.state.selection.main,n=e.nextMatch(t.state,r,r);if(!n)return!1;let i=d.single(n.from,n.to),s=t.state.facet(se);return t.dispatch({selection:i,effects:[ot(t,n),s.scrollToMatch(i.main,t)],userEvent:"select.search"}),Dn(t),!0}),Be=ge((t,{query:e})=>{let{state:r}=t,{from:n}=r.selection.main,i=e.prevMatch(r,n,n);if(!i)return!1;let s=d.single(i.from,i.to),l=t.state.facet(se);return t.dispatch({selection:s,effects:[ot(t,i),l.scrollToMatch(s.main,t)],userEvent:"select.search"}),Dn(t),!0}),Ui=ge((t,{query:e})=>{let r=e.matchAll(t.state,1e3);return!r||!r.length?!1:(t.dispatch({selection:d.create(r.map(n=>d.range(n.from,n.to))),userEvent:"select.search.matches"}),!0)}),zi=({state:t,dispatch:e})=>{let r=t.selection;if(r.ranges.length>1||r.main.empty)return!1;let{from:n,to:i}=r.main,s=[],l=0;for(let o=new re(t.doc,t.sliceDoc(n,i));!o.next().done;){if(s.length>1e3)return!1;o.value.from==n&&(l=s.length),s.push(d.range(o.value.from,o.value.to))}return e(t.update({selection:d.create(s,l),userEvent:"select.search.matches"})),!0},kt=ge((t,{query:e})=>{let{state:r}=t,{from:n,to:i}=r.selection.main;if(r.readOnly)return!1;let s=e.nextMatch(r,n,n);if(!s)return!1;let l=s,o=[],a,c,h=[];l.from==n&&l.to==i&&(c=r.toText(e.getReplacement(l)),o.push({from:l.from,to:l.to,insert:c}),l=e.nextMatch(r,l.from,l.to),h.push(k.announce.of(r.phrase("replaced match on line $",r.doc.lineAt(n).number)+".")));let u=t.state.changes(o);return l&&(a=d.single(l.from,l.to).map(u),h.push(ot(t,l)),h.push(r.facet(se).scrollToMatch(a.main,t))),t.dispatch({changes:u,selection:a,effects:h,userEvent:"input.replace"}),!0}),Ki=ge((t,{query:e})=>{if(t.state.readOnly)return!1;let r=e.matchAll(t.state,1e9).map(i=>{let{from:s,to:l}=i;return{from:s,to:l,insert:e.getReplacement(i)}});if(!r.length)return!1;let n=t.state.phrase("replaced $ matches",r.length)+".";return t.dispatch({changes:r,effects:k.announce.of(n),userEvent:"input.replace.all"}),!0});function lt(t){return t.state.facet(se).createPanel(t)}function _e(t,e){var r,n,i,s,l;let o=t.selection.main,a=o.empty||o.to>o.from+100?"":t.sliceDoc(o.from,o.to);if(e&&!a)return e;let c=t.facet(se);return new Mn({search:((r=e==null?void 0:e.literal)!==null&&r!==void 0?r:c.literal)?a:a.replace(/\n/g,"\\n"),caseSensitive:(n=e==null?void 0:e.caseSensitive)!==null&&n!==void 0?n:c.caseSensitive,literal:(i=e==null?void 0:e.literal)!==null&&i!==void 0?i:c.literal,regexp:(s=e==null?void 0:e.regexp)!==null&&s!==void 0?s:c.regexp,wholeWord:(l=e==null?void 0:e.wholeWord)!==null&&l!==void 0?l:c.wholeWord})}function Ln(t){let e=Xe(t,lt);return e&&e.dom.querySelector("[main-field]")}function Dn(t){let e=Ln(t);e&&e==t.root.activeElement&&e.select()}const Bn=t=>{let e=t.state.field(H,!1);if(e&&e.panel){let r=Ln(t);if(r&&r!=t.root.activeElement){let n=_e(t.state,e.query.spec);n.valid&&t.dispatch({effects:he.of(n)}),r.focus(),r.select()}}else t.dispatch({effects:[st.of(!0),e?he.of(_e(t.state,e.query.spec)):F.appendConfig.of(_i)]});return!0},En=t=>{let e=t.state.field(H,!1);if(!e||!e.panel)return!1;let r=Xe(t,lt);return r&&r.dom.contains(t.root.activeElement)&&t.focus(),t.dispatch({effects:st.of(!1)}),!0},Gi=[{key:"Mod-f",run:Bn,scope:"editor search-panel"},{key:"F3",run:De,shift:Be,scope:"editor search-panel",preventDefault:!0},{key:"Mod-g",run:De,shift:Be,scope:"editor search-panel",preventDefault:!0},{key:"Escape",run:En,scope:"editor search-panel"},{key:"Mod-Shift-l",run:zi},{key:"Mod-Alt-g",run:bi},{key:"Mod-d",run:Ri,preventDefault:!0}];class $i{constructor(e){this.view=e;let r=this.query=e.state.field(H).query.spec;this.commit=this.commit.bind(this),this.searchField=S("input",{value:r.search,placeholder:D(e,"Find"),"aria-label":D(e,"Find"),class:"cm-textfield",name:"search",form:"","main-field":"true",onchange:this.commit,onkeyup:this.commit}),this.replaceField=S("input",{value:r.replace,placeholder:D(e,"Replace"),"aria-label":D(e,"Replace"),class:"cm-textfield",name:"replace",form:"",onchange:this.commit,onkeyup:this.commit}),this.caseField=S("input",{type:"checkbox",name:"case",form:"",checked:r.caseSensitive,onchange:this.commit}),this.reField=S("input",{type:"checkbox",name:"re",form:"",checked:r.regexp,onchange:this.commit}),this.wordField=S("input",{type:"checkbox",name:"word",form:"",checked:r.wholeWord,onchange:this.commit});function n(i,s,l){return S("button",{class:"cm-button",name:i,onclick:s,type:"button"},l)}this.dom=S("div",{onkeydown:i=>this.keydown(i),class:"cm-search"},[this.searchField,n("next",()=>De(e),[D(e,"next")]),n("prev",()=>Be(e),[D(e,"previous")]),n("select",()=>Ui(e),[D(e,"all")]),S("label",null,[this.caseField,D(e,"match case")]),S("label",null,[this.reField,D(e,"regexp")]),S("label",null,[this.wordField,D(e,"by word")]),...e.state.readOnly?[]:[S("br"),this.replaceField,n("replace",()=>kt(e),[D(e,"replace")]),n("replaceAll",()=>Ki(e),[D(e,"replace all")])],S("button",{name:"close",onclick:()=>En(e),"aria-label":D(e,"close"),type:"button"},["×"])])}commit(){let e=new Mn({search:this.searchField.value,caseSensitive:this.caseField.checked,regexp:this.reField.checked,wholeWord:this.wordField.checked,replace:this.replaceField.value});e.eq(this.query)||(this.query=e,this.view.dispatch({effects:he.of(e)}))}keydown(e){Un(this.view,e,"search-panel")?e.preventDefault():e.keyCode==13&&e.target==this.searchField?(e.preventDefault(),(e.shiftKey?Be:De)(this.view)):e.keyCode==13&&e.target==this.replaceField&&(e.preventDefault(),kt(this.view))}update(e){for(let r of e.transactions)for(let n of r.effects)n.is(he)&&!n.value.eq(this.query)&&this.setQuery(n.value)}setQuery(e){this.query=e,this.searchField.value=e.search,this.replaceField.value=e.replace,this.caseField.checked=e.caseSensitive,this.reField.checked=e.regexp,this.wordField.checked=e.wholeWord}mount(){this.searchField.select()}get pos(){return 80}get top(){return this.view.state.facet(se).top}}function D(t,e){return t.state.phrase(e)}const ke=30,Se=/[\s\.,:;?!]/;function ot(t,{from:e,to:r}){let n=t.state.doc.lineAt(e),i=t.state.doc.lineAt(r).to,s=Math.max(n.from,e-ke),l=Math.min(i,r+ke),o=t.state.sliceDoc(s,l);if(s!=n.from){for(let a=0;a<ke;a++)if(!Se.test(o[a+1])&&Se.test(o[a])){o=o.slice(a);break}}if(l!=i){for(let a=o.length-1;a>o.length-ke;a--)if(!Se.test(o[a-1])&&Se.test(o[a])){o=o.slice(0,a);break}}return k.announce.of(`${t.state.phrase("current match")}. ${o} ${t.state.phrase("on line")} ${n.number}.`)}const Ji=k.baseTheme({".cm-panel.cm-search":{padding:"2px 6px 4px",position:"relative","& [name=close]":{position:"absolute",top:"0",right:"4px",backgroundColor:"inherit",border:"none",font:"inherit",padding:0,margin:0},"& input, & button, & label":{margin:".2em .6em .2em 0"},"& input[type=checkbox]":{marginRight:".2em"},"& label":{fontSize:"80%",whiteSpace:"pre"}},"&light .cm-searchMatch":{backgroundColor:"#ffff0054"},"&dark .cm-searchMatch":{backgroundColor:"#00ffff8a"},"&light .cm-searchMatch-selected":{backgroundColor:"#ff6a0054"},"&dark .cm-searchMatch-selected":{backgroundColor:"#ff00ff8a"}}),_i=[H,Nn.low(Vi),Ji];class St{constructor(e,r,n){this.from=e,this.to=r,this.diagnostic=n}}class J{constructor(e,r,n){this.diagnostics=e,this.panel=r,this.selected=n}static init(e,r,n){let i=n.facet(ue).markerFilter;i&&(e=i(e,n));let s=e.slice().sort((m,g)=>m.from-g.from||m.to-g.to),l=new It,o=[],a=0,c=n.doc.iter(),h=0,u=n.doc.length;for(let m=0;;){let g=m==s.length?null:s[m];if(!g&&!o.length)break;let x,y;if(o.length)x=a,y=o.reduce((p,M)=>Math.min(p,M.to),g&&g.from>x?g.from:1e8);else{if(x=g.from,x>u)break;y=g.to,o.push(g),m++}for(;m<s.length;){let p=s[m];if(p.from==x&&(p.to>p.from||p.to==x))o.push(p),m++,y=Math.min(p.to,y);else{y=Math.min(p.from,y);break}}y=Math.min(y,u);let N=!1;if(o.some(p=>p.from==x&&(p.to==y||y==u))&&(N=x==y,!N&&y-x<10)){let p=x-(h+c.value.length);p>0&&(c.next(p),h=x);for(let M=x;;){if(M>=y){N=!0;break}if(!c.lineBreak&&h+c.value.length>M)break;M=h+c.value.length,h+=c.value.length,c.next()}}let z=os(o);if(N)l.add(x,x,C.widget({widget:new rs(z),diagnostics:o.slice()}));else{let p=o.reduce((M,Q)=>Q.markClass?M+" "+Q.markClass:M,"");l.add(x,y,C.mark({class:"cm-lintRange cm-lintRange-"+z+p,diagnostics:o.slice(),inclusiveEnd:o.some(M=>M.to>y)}))}if(a=y,a==u)break;for(let p=0;p<o.length;p++)o[p].to<=a&&o.splice(p--,1)}let f=l.finish();return new J(f,r,V(f))}}function V(t,e=null,r=0){let n=null;return t.between(r,1e9,(i,s,{spec:l})=>{if(!(e&&l.diagnostics.indexOf(e)<0))if(!n)n=new St(i,s,e||l.diagnostics[0]);else{if(l.diagnostics.indexOf(n.diagnostic)<0)return!1;n=new St(n.from,s,n.diagnostic)}}),n}function Qi(t,e){let r=e.pos,n=e.end||r,i=t.state.facet(ue).hideOn(t,r,n);if(i!=null)return i;let s=t.startState.doc.lineAt(e.pos);return!!(t.effects.some(l=>l.is(Tn))||t.changes.touchesRange(s.from,Math.max(s.to,n)))}function ji(t,e){return t.field(B,!1)?e:e.concat(F.appendConfig.of(as))}const Tn=F.define(),at=F.define(),wn=F.define(),B=Qe.define({create(){return new J(C.none,null,null)},update(t,e){if(e.docChanged&&t.diagnostics.size){let r=t.diagnostics.map(e.changes),n=null,i=t.panel;if(t.selected){let s=e.changes.mapPos(t.selected.from,1);n=V(r,t.selected.diagnostic,s)||V(r,null,s)}!r.size&&i&&e.state.facet(ue).autoPanel&&(i=null),t=new J(r,i,n)}for(let r of e.effects)if(r.is(Tn)){let n=e.state.facet(ue).autoPanel?r.value.length?fe.open:null:t.panel;t=J.init(r.value,n,e.state)}else r.is(at)?t=new J(t.diagnostics,r.value?fe.open:null,t.selected):r.is(wn)&&(t=new J(t.diagnostics,t.panel,r.value));return t},provide:t=>[wt.from(t,e=>e.panel),k.decorations.from(t,e=>e.diagnostics)]}),Yi=C.mark({class:"cm-lintRange cm-lintRange-active"});function Zi(t,e,r){let{diagnostics:n}=t.state.field(B),i,s=-1,l=-1;n.between(e-(r<0?1:0),e+(r>0?1:0),(a,c,{spec:h})=>{if(e>=a&&e<=c&&(a==c||(e>a||r>0)&&(e<c||r<0)))return i=h.diagnostics,s=a,l=c,!1});let o=t.state.facet(ue).tooltipFilter;return i&&o&&(i=o(i,t.state)),i?{pos:s,end:l,above:t.state.doc.lineAt(s).to<l,create(){return{dom:Xi(t,i)}}}:null}function Xi(t,e){return S("ul",{class:"cm-tooltip-lint"},e.map(r=>In(t,r,!1)))}const es=t=>{let e=t.state.field(B,!1);(!e||!e.panel)&&t.dispatch({effects:ji(t.state,[at.of(!0)])});let r=Xe(t,fe.open);return r&&r.dom.querySelector(".cm-panel-lint ul").focus(),!0},bt=t=>{let e=t.state.field(B,!1);return!e||!e.panel?!1:(t.dispatch({effects:at.of(!1)}),!0)},ts=t=>{let e=t.state.field(B,!1);if(!e)return!1;let r=t.state.selection.main,n=V(e.diagnostics,null,r.to+1);return!n&&(n=V(e.diagnostics,null,0),!n||n.from==r.from&&n.to==r.to)?!1:(t.dispatch({selection:{anchor:n.from,head:n.to},scrollIntoView:!0}),!0)},ns=[{key:"Mod-Shift-m",run:es,preventDefault:!0},{key:"F8",run:ts}],ue=de.define({combine(t){return{sources:t.map(e=>e.source).filter(e=>e!=null),...Ee(t.map(e=>e.config),{delay:750,markerFilter:null,tooltipFilter:null,needsRefresh:null,hideOn:()=>null},{delay:Math.max,markerFilter:Ct,tooltipFilter:Ct,needsRefresh:(e,r)=>e?r?n=>e(n)||r(n):e:r,hideOn:(e,r)=>e?r?(n,i,s)=>e(n,i,s)||r(n,i,s):e:r,autoPanel:(e,r)=>e||r})}}});function Ct(t,e){return t?e?(r,n)=>e(t(r,n),n):t:e}function Rn(t){let e=[];if(t)e:for(let{name:r}of t){for(let n=0;n<r.length;n++){let i=r[n];if(/[a-zA-Z]/.test(i)&&!e.some(s=>s.toLowerCase()==i.toLowerCase())){e.push(i);continue e}}e.push("")}return e}function In(t,e,r){var n;let i=r?Rn(e.actions):[];return S("li",{class:"cm-diagnostic cm-diagnostic-"+e.severity},S("span",{class:"cm-diagnosticText"},e.renderMessage?e.renderMessage(t):e.message),(n=e.actions)===null||n===void 0?void 0:n.map((s,l)=>{let o=!1,a=m=>{if(m.preventDefault(),o)return;o=!0;let g=V(t.state.field(B).diagnostics,e);g&&s.apply(t,g.from,g.to)},{name:c}=s,h=i[l]?c.indexOf(i[l]):-1,u=h<0?c:[c.slice(0,h),S("u",c.slice(h,h+1)),c.slice(h+1)],f=s.markClass?" "+s.markClass:"";return S("button",{type:"button",class:"cm-diagnosticAction"+f,onclick:a,onmousedown:a,"aria-label":` Action: ${c}${h<0?"":` (access key "${i[l]})"`}.`},u)}),e.source&&S("div",{class:"cm-diagnosticSource"},e.source))}class rs extends Kn{constructor(e){super(),this.sev=e}eq(e){return e.sev==this.sev}toDOM(){return S("span",{class:"cm-lintPoint cm-lintPoint-"+this.sev})}}class vt{constructor(e,r){this.diagnostic=r,this.id="item_"+Math.floor(Math.random()*4294967295).toString(16),this.dom=In(e,r,!0),this.dom.id=this.id,this.dom.setAttribute("role","option")}}class fe{constructor(e){this.view=e,this.items=[];let r=i=>{if(!(i.ctrlKey||i.altKey||i.metaKey)){if(i.keyCode==27)bt(this.view),this.view.focus();else if(i.keyCode==38||i.keyCode==33)this.moveSelection((this.selectedIndex-1+this.items.length)%this.items.length);else if(i.keyCode==40||i.keyCode==34)this.moveSelection((this.selectedIndex+1)%this.items.length);else if(i.keyCode==36)this.moveSelection(0);else if(i.keyCode==35)this.moveSelection(this.items.length-1);else if(i.keyCode==13)this.view.focus();else if(i.keyCode>=65&&i.keyCode<=90&&this.selectedIndex>=0){let{diagnostic:s}=this.items[this.selectedIndex],l=Rn(s.actions);for(let o=0;o<l.length;o++)if(l[o].toUpperCase().charCodeAt(0)==i.keyCode){let a=V(this.view.state.field(B).diagnostics,s);a&&s.actions[o].apply(e,a.from,a.to)}}else return;i.preventDefault()}},n=i=>{for(let s=0;s<this.items.length;s++)this.items[s].dom.contains(i.target)&&this.moveSelection(s)};this.list=S("ul",{tabIndex:0,role:"listbox","aria-label":this.view.state.phrase("Diagnostics"),onkeydown:r,onclick:n}),this.dom=S("div",{class:"cm-panel-lint"},this.list,S("button",{type:"button",name:"close","aria-label":this.view.state.phrase("close"),onclick:()=>bt(this.view)},"×")),this.update()}get selectedIndex(){let e=this.view.state.field(B).selected;if(!e)return-1;for(let r=0;r<this.items.length;r++)if(this.items[r].diagnostic==e.diagnostic)return r;return-1}update(){let{diagnostics:e,selected:r}=this.view.state.field(B),n=0,i=!1,s=null,l=new Set;for(e.between(0,this.view.state.doc.length,(o,a,{spec:c})=>{for(let h of c.diagnostics){if(l.has(h))continue;l.add(h);let u=-1,f;for(let m=n;m<this.items.length;m++)if(this.items[m].diagnostic==h){u=m;break}u<0?(f=new vt(this.view,h),this.items.splice(n,0,f),i=!0):(f=this.items[u],u>n&&(this.items.splice(n,u-n),i=!0)),r&&f.diagnostic==r.diagnostic?f.dom.hasAttribute("aria-selected")||(f.dom.setAttribute("aria-selected","true"),s=f):f.dom.hasAttribute("aria-selected")&&f.dom.removeAttribute("aria-selected"),n++}});n<this.items.length&&!(this.items.length==1&&this.items[0].diagnostic.from<0);)i=!0,this.items.pop();this.items.length==0&&(this.items.push(new vt(this.view,{from:-1,to:-1,severity:"info",message:this.view.state.phrase("No diagnostics")})),i=!0),s?(this.list.setAttribute("aria-activedescendant",s.id),this.view.requestMeasure({key:this,read:()=>({sel:s.dom.getBoundingClientRect(),panel:this.list.getBoundingClientRect()}),write:({sel:o,panel:a})=>{let c=a.height/this.list.offsetHeight;o.top<a.top?this.list.scrollTop-=(a.top-o.top)/c:o.bottom>a.bottom&&(this.list.scrollTop+=(o.bottom-a.bottom)/c)}})):this.selectedIndex<0&&this.list.removeAttribute("aria-activedescendant"),i&&this.sync()}sync(){let e=this.list.firstChild;function r(){let n=e;e=n.nextSibling,n.remove()}for(let n of this.items)if(n.dom.parentNode==this.list){for(;e!=n.dom;)r();e=n.dom.nextSibling}else this.list.insertBefore(n.dom,e);for(;e;)r()}moveSelection(e){if(this.selectedIndex<0)return;let r=this.view.state.field(B),n=V(r.diagnostics,this.items[e].diagnostic);n&&this.view.dispatch({selection:{anchor:n.from,head:n.to},scrollIntoView:!0,effects:wn.of(n)})}static open(e){return new fe(e)}}function is(t,e='viewBox="0 0 40 40"'){return`url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" ${e}>${encodeURIComponent(t)}</svg>')`}function be(t){return is(`<path d="m0 2.5 l2 -1.5 l1 0 l2 1.5 l1 0" stroke="${t}" fill="none" stroke-width=".7"/>`,'width="6" height="3"')}const ss=k.baseTheme({".cm-diagnostic":{padding:"3px 6px 3px 8px",marginLeft:"-1px",display:"block",whiteSpace:"pre-wrap"},".cm-diagnostic-error":{borderLeft:"5px solid #d11"},".cm-diagnostic-warning":{borderLeft:"5px solid orange"},".cm-diagnostic-info":{borderLeft:"5px solid #999"},".cm-diagnostic-hint":{borderLeft:"5px solid #66d"},".cm-diagnosticAction":{font:"inherit",border:"none",padding:"2px 4px",backgroundColor:"#444",color:"white",borderRadius:"3px",marginLeft:"8px",cursor:"pointer"},".cm-diagnosticSource":{fontSize:"70%",opacity:.7},".cm-lintRange":{backgroundPosition:"left bottom",backgroundRepeat:"repeat-x",paddingBottom:"0.7px"},".cm-lintRange-error":{backgroundImage:be("#d11")},".cm-lintRange-warning":{backgroundImage:be("orange")},".cm-lintRange-info":{backgroundImage:be("#999")},".cm-lintRange-hint":{backgroundImage:be("#66d")},".cm-lintRange-active":{backgroundColor:"#ffdd9980"},".cm-tooltip-lint":{padding:0,margin:0},".cm-lintPoint":{position:"relative","&:after":{content:'""',position:"absolute",bottom:0,left:"-2px",borderLeft:"3px solid transparent",borderRight:"3px solid transparent",borderBottom:"4px solid #d11"}},".cm-lintPoint-warning":{"&:after":{borderBottomColor:"orange"}},".cm-lintPoint-info":{"&:after":{borderBottomColor:"#999"}},".cm-lintPoint-hint":{"&:after":{borderBottomColor:"#66d"}},".cm-panel.cm-panel-lint":{position:"relative","& ul":{maxHeight:"100px",overflowY:"auto","& [aria-selected]":{backgroundColor:"#ddd","& u":{textDecoration:"underline"}},"&:focus [aria-selected]":{background_fallback:"#bdf",backgroundColor:"Highlight",color_fallback:"white",color:"HighlightText"},"& u":{textDecoration:"none"},padding:0,margin:0},"& [name=close]":{position:"absolute",top:"0",right:"2px",background:"inherit",border:"none",font:"inherit",padding:0,margin:0}},"&dark .cm-lintRange-active":{backgroundColor:"#86714a80"},"&dark .cm-panel.cm-panel-lint ul":{"& [aria-selected]":{backgroundColor:"#2e343e"}}});function ls(t){return t=="error"?4:t=="warning"?3:t=="info"?2:1}function os(t){let e="hint",r=1;for(let n of t){let i=ls(n.severity);i>r&&(r=i,e=n.severity)}return e}const as=[B,k.decorations.compute([B],t=>{let{selected:e,panel:r}=t.field(B);return!e||!r||e.from==e.to?C.none:C.set([Yi.range(e.from,e.to)])}),zn(Zi,{hideOn:Qi}),ss];var Mt=function(e){e===void 0&&(e={});var{crosshairCursor:r=!1}=e,n=[];e.closeBracketsKeymap!==!1&&(n=n.concat(Gn)),e.defaultKeymap!==!1&&(n=n.concat(Sn)),e.searchKeymap!==!1&&(n=n.concat(Gi)),e.historyKeymap!==!1&&(n=n.concat(Gt)),e.foldKeymap!==!1&&(n=n.concat($n)),e.completionKeymap!==!1&&(n=n.concat(Jn)),e.lintKeymap!==!1&&(n=n.concat(ns));var i=[];return e.lineNumbers!==!1&&i.push(_n()),e.highlightActiveLineGutter!==!1&&i.push(Qn()),e.highlightSpecialChars!==!1&&i.push(Ot()),e.history!==!1&&i.push(Vt()),e.foldGutter!==!1&&i.push(jn()),e.drawSelection!==!1&&i.push(Wt()),e.dropCursor!==!1&&i.push(Yn()),e.allowMultipleSelections!==!1&&i.push(ce.allowMultipleSelections.of(!0)),e.indentOnInput!==!1&&i.push(Zn()),e.syntaxHighlighting!==!1&&i.push(Pt(Ft,{fallback:!0})),e.bracketMatching!==!1&&i.push(Xn()),e.closeBrackets!==!1&&i.push(er()),e.autocompletion!==!1&&i.push(tr()),e.rectangularSelection!==!1&&i.push(nr()),r!==!1&&i.push(rr()),e.highlightActiveLine!==!1&&i.push(ir()),e.highlightSelectionMatches!==!1&&i.push(Mi()),e.tabSize&&typeof e.tabSize=="number"&&i.push(Tt.of(" ".repeat(e.tabSize))),i.concat([et.of(n.flat())]).filter(Boolean)},Ss=function(e){e===void 0&&(e={});var r=[];e.defaultKeymap!==!1&&(r=r.concat(Sn)),e.historyKeymap!==!1&&(r=r.concat(Gt));var n=[];return e.highlightSpecialChars!==!1&&n.push(Ot()),e.history!==!1&&n.push(Vt()),e.drawSelection!==!1&&n.push(Wt()),e.syntaxHighlighting!==!1&&n.push(Pt(Ft,{fallback:!0})),n.concat([et.of(r.flat())]).filter(Boolean)},cs=k.theme({"&":{backgroundColor:"#fff"}},{dark:!1}),hs=function(e){e===void 0&&(e={});var{indentWithTab:r=!0,editable:n=!0,readOnly:i=!1,theme:s="light",placeholder:l="",basicSetup:o=!0}=e,a=[];switch(r&&a.unshift(et.of([ki])),o&&(typeof o=="boolean"?a.unshift(Mt()):a.unshift(Mt(o))),l&&a.unshift(sr(l)),s){case"light":a.push(cs);break;case"dark":a.push(lr);break;case"none":break;default:a.push(s);break}return n===!1&&a.push(k.editable.of(!1)),i&&a.push(ce.readOnly.of(!0)),[...a]},us=t=>({line:t.state.doc.lineAt(t.state.selection.main.from),lineCount:t.state.doc.lines,lineBreak:t.state.lineBreak,length:t.state.doc.length,readOnly:t.state.readOnly,tabSize:t.state.tabSize,selection:t.state.selection,selectionAsSingle:t.state.selection.asSingle().main,ranges:t.state.selection.ranges,selectionCode:t.state.sliceDoc(t.state.selection.main.from,t.state.selection.main.to),selections:t.state.selection.ranges.map(e=>t.state.sliceDoc(e.from,e.to)),selectedText:t.state.selection.ranges.some(e=>!e.empty)});class fs{constructor(e,r){this.timeLeftMS=void 0,this.timeoutMS=void 0,this.isCancelled=!1,this.isTimeExhausted=!1,this.callbacks=[],this.timeLeftMS=r,this.timeoutMS=r,this.callbacks.push(e)}tick(){if(!this.isCancelled&&!this.isTimeExhausted&&(this.timeLeftMS--,this.timeLeftMS<=0)){this.isTimeExhausted=!0;var e=this.callbacks.slice();this.callbacks.length=0,e.forEach(r=>{try{r()}catch(n){console.error("TimeoutLatch callback error:",n)}})}}cancel(){this.isCancelled=!0,this.callbacks.length=0}reset(){this.timeLeftMS=this.timeoutMS,this.isCancelled=!1,this.isTimeExhausted=!1}get isDone(){return this.isCancelled||this.isTimeExhausted}}class At{constructor(){this.interval=null,this.latches=new Set}add(e){this.latches.add(e),this.start()}remove(e){this.latches.delete(e),this.latches.size===0&&this.stop()}start(){this.interval===null&&(this.interval=setInterval(()=>{this.latches.forEach(e=>{e.tick(),e.isDone&&this.remove(e)})},1))}stop(){this.interval!==null&&(clearInterval(this.interval),this.interval=null)}}var Ve=null,ds=()=>typeof window>"u"?new At:(Ve||(Ve=new At),Ve),Lt=Ze.define(),ms=200,gs=[];function ps(t){var{value:e,selection:r,onChange:n,onStatistics:i,onCreateEditor:s,onUpdate:l,extensions:o=gs,autoFocus:a,theme:c="light",height:h=null,minHeight:u=null,maxHeight:f=null,width:m=null,minWidth:g=null,maxWidth:x=null,placeholder:y="",editable:N=!0,readOnly:z=!1,indentWithTab:p=!0,basicSetup:M=!0,root:Q,initialState:le}=t,[j,pe]=A.useState(),[b,q]=A.useState(),[Y,Z]=A.useState(),E=A.useState(()=>({current:null}))[0],K=A.useState(()=>({current:null}))[0],Oe=k.theme({"&":{height:h,minHeight:u,maxHeight:f,width:m,minWidth:g,maxWidth:x},"& .cm-scroller":{height:"100% !important"}}),We=k.updateListener.of(W=>{if(W.docChanged&&typeof n=="function"&&!W.transactions.some(Pe=>Pe.annotation(Lt))){E.current?E.current.reset():(E.current=new fs(()=>{if(K.current){var Pe=K.current;K.current=null,Pe()}E.current=null},ms),ds().add(E.current));var G=W.state.doc,$=G.toString();n($,W)}i&&i(us(W))}),ye=hs({theme:c,editable:N,readOnly:z,placeholder:y,indentWithTab:p,basicSetup:M}),oe=[We,Oe,...ye];return l&&typeof l=="function"&&oe.push(k.updateListener.of(l)),oe=oe.concat(o),A.useLayoutEffect(()=>{if(j&&!Y){var W={doc:e,selection:r,extensions:oe},G=le?ce.fromJSON(le.json,W,le.fields):ce.create(W);if(Z(G),!b){var $=new k({state:G,parent:j,root:Q});q($),s&&s($,G)}}return()=>{b&&(Z(void 0),q(void 0))}},[j,Y]),A.useEffect(()=>{t.container&&pe(t.container)},[t.container]),A.useEffect(()=>()=>{b&&(b.destroy(),q(void 0)),E.current&&(E.current.cancel(),E.current=null)},[b]),A.useEffect(()=>{a&&b&&b.focus()},[a,b]),A.useEffect(()=>{b&&b.dispatch({effects:F.reconfigure.of(oe)})},[c,o,h,u,f,m,g,x,y,N,z,p,M,n,l]),A.useEffect(()=>{if(e!==void 0){var W=b?b.state.doc.toString():"";if(b&&e!==W){var G=E.current&&!E.current.isDone,$=()=>{b&&e!==b.state.doc.toString()&&b.dispatch({changes:{from:0,to:b.state.doc.toString().length,insert:e||""},annotations:[Lt.of(!0)]})};G?K.current=$:$()}}},[e,b]),{state:Y,setState:Z,view:b,setView:q,container:j,setContainer:pe}}var ys=["className","value","selection","extensions","onChange","onStatistics","onCreateEditor","onUpdate","autoFocus","theme","height","minHeight","maxHeight","width","minWidth","maxWidth","basicSetup","placeholder","indentWithTab","editable","readOnly","root","initialState"],xs=A.forwardRef((t,e)=>{var{className:r,value:n="",selection:i,extensions:s=[],onChange:l,onStatistics:o,onCreateEditor:a,onUpdate:c,autoFocus:h,theme:u="light",height:f,minHeight:m,maxHeight:g,width:x,minWidth:y,maxWidth:N,basicSetup:z,placeholder:p,indentWithTab:M,editable:Q,readOnly:le,root:j,initialState:pe}=t,b=cr(t,ys),q=A.useRef(null),{state:Y,view:Z,container:E,setContainer:K}=ps({root:j,value:n,autoFocus:h,theme:u,height:f,minHeight:m,maxHeight:g,width:x,minWidth:y,maxWidth:N,basicSetup:z,placeholder:p,indentWithTab:M,editable:Q,readOnly:le,selection:i,onChange:l,onStatistics:o,onCreateEditor:a,onUpdate:c,extensions:s,initialState:pe});A.useImperativeHandle(e,()=>({editor:q.current,state:Y,view:Z}),[q,E,Y,Z]);var Oe=A.useCallback(ye=>{q.current=ye,K(ye)},[K]);if(typeof n!="string")throw new Error("value must be typeof string but got "+typeof n);var We=typeof u=="string"?"cm-theme-"+u:"cm-theme";return or.jsx("div",ar({ref:Oe,className:""+We+(r?" "+r:"")},b))});xs.displayName="CodeMirror";export{Ze as Annotation,vs as AnnotationType,Ms as BidiSpan,As as BlockInfo,Ls as BlockType,Ds as BlockWrapper,Wn as ChangeDesc,On as ChangeSet,T as CharCategory,Bs as Compartment,C as Decoration,Pn as Direction,d as EditorSelection,ce as EditorState,k as EditorView,Lt as ExternalChange,de as Facet,Es as GutterMarker,Ts as Line,ws as MapMode,Rs as MatchDecorator,Nn as Prec,Is as Range,Os as RangeSet,It as RangeSetBuilder,Ws as RangeValue,Ps as RectangleMarker,Fs as SelectionRange,F as StateEffect,Ns as StateEffectType,Qe as StateField,Et as Text,Fe as Transaction,Rt as ViewPlugin,qs as ViewUpdate,Kn as WidgetType,Hs as __test,Mt as basicSetup,Vs as closeHoverTooltips,qn as codePointAt,Vn as codePointSize,Us as color,Ee as combineConfig,je as countColumn,rr as crosshairCursor,xs as default,cs as defaultLightThemeOption,Wt as drawSelection,Yn as dropCursor,_ as findClusterBreak,zs as findColumn,Hn as fromCodePoint,hs as getDefaultExtensions,Ks as getDialog,Gs as getDrawSelectionConfig,Xe as getPanel,us as getStatistics,$s as getTooltip,Js as gutter,_s as gutterLineClass,Qs as gutterWidgetClass,js as gutters,Ys as hasHoverTooltips,ir as highlightActiveLine,Qn as highlightActiveLineGutter,Ot as highlightSpecialChars,Zs as highlightTrailingWhitespace,Xs as highlightWhitespace,zn as hoverTooltip,et as keymap,el as layer,tl as lineNumberMarkers,nl as lineNumberWidgetMarker,_n as lineNumbers,rl as logException,Ss as minimalSetup,lr as oneDark,il as oneDarkHighlightStyle,sl as oneDarkTheme,ll as panels,sr as placeholder,nr as rectangularSelection,ol as repositionTooltips,Un as runScopeHandlers,al as scrollPastEnd,Fn as showDialog,wt as showPanel,cl as showTooltip,hl as tooltips,ps as useCodeMirror};