@inkandswitch/patchwork-pkg-base 0.0.123 → 0.0.125

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 (60) hide show
  1. package/module-settings-url +1 -1
  2. package/package.json +1 -1
  3. package/packages/codemirror-markdown/dist/{chunk-IJCIGXUN.js → chunk-3U6A6M3C.js} +3 -3
  4. package/packages/codemirror-markdown/dist/{chunk-IJCIGXUN.js.map → chunk-3U6A6M3C.js.map} +2 -2
  5. package/packages/codemirror-markdown/dist/{chunk-DQNB5ERJ.js → chunk-AOCXO46Z.js} +4 -4
  6. package/packages/codemirror-markdown/dist/{chunk-4ZTKTN2T.js → chunk-BK6BYU4X.js} +3 -3
  7. package/packages/codemirror-markdown/dist/{chunk-4RNBFSBX.js → chunk-JCGWNVO7.js} +2 -2
  8. package/packages/codemirror-markdown/dist/{chunk-6JHOS434.js → chunk-ZMDZRV6X.js} +2 -2
  9. package/packages/codemirror-markdown/dist/{dist-5FW47RX2.js → dist-3WYN573Y.js} +2 -2
  10. package/packages/codemirror-markdown/dist/{dist-XVLR6T5U.js → dist-4STDX7WZ.js} +5 -5
  11. package/packages/codemirror-markdown/dist/{dist-PAVPWBMY.js → dist-66V2OZNR.js} +2 -2
  12. package/packages/codemirror-markdown/dist/{dist-D27NTZAI.js → dist-7EHN4UZA.js} +5 -5
  13. package/packages/codemirror-markdown/dist/{dist-STDOJSRA.js → dist-D4E7IXYD.js} +5 -5
  14. package/packages/codemirror-markdown/dist/{dist-EG4ZREHT.js → dist-E6QAN4VQ.js} +2 -2
  15. package/packages/codemirror-markdown/dist/{dist-4N6A6FHO.js → dist-E72K6GKZ.js} +2 -2
  16. package/packages/codemirror-markdown/dist/{dist-B5G4LYVR.js → dist-EVYTVY4T.js} +5 -5
  17. package/packages/codemirror-markdown/dist/{dist-6BZJTPMQ.js → dist-ITLHNFUL.js} +2 -2
  18. package/packages/codemirror-markdown/dist/{dist-YSRXNTXV.js → dist-KLLOFSEO.js} +3 -3
  19. package/packages/codemirror-markdown/dist/{dist-6NY2CMU2.js → dist-LCUXA5AJ.js} +3 -3
  20. package/packages/codemirror-markdown/dist/{dist-HB4M34TX.js → dist-NFD5VVC6.js} +6 -6
  21. package/packages/codemirror-markdown/dist/{dist-SFP5SWTJ.js → dist-O6G7IUZY.js} +2 -2
  22. package/packages/codemirror-markdown/dist/{dist-TYTABVEN.js → dist-OU44YTSZ.js} +2 -2
  23. package/packages/codemirror-markdown/dist/{dist-XM4FBMZA.js → dist-RCBHVDL7.js} +2 -2
  24. package/packages/codemirror-markdown/dist/{dist-DX7TJIOI.js → dist-RUK5SWS5.js} +2 -2
  25. package/packages/codemirror-markdown/dist/{dist-VYHSBFVD.js → dist-TFWDIHAP.js} +5 -5
  26. package/packages/codemirror-markdown/dist/{dist-BYFOH52X.js → dist-VBHD2NRU.js} +3 -3
  27. package/packages/codemirror-markdown/dist/{dist-TV5CSRQ2.js → dist-XL62MJER.js} +5 -5
  28. package/packages/codemirror-markdown/dist/{dist-ITGX4OZJ.js → dist-YK6XD4UJ.js} +3 -3
  29. package/packages/codemirror-markdown/dist/{dist-KBGGPCDW.js → dist-YNO26IAD.js} +2 -2
  30. package/packages/codemirror-markdown/dist/extensions/links.js +6 -1
  31. package/packages/codemirror-markdown/dist/extensions/links.js.map +2 -2
  32. package/packages/codemirror-markdown/dist/extensions/markdown.js +510 -166
  33. package/packages/codemirror-markdown/dist/extensions/markdown.js.map +4 -4
  34. package/packages/codemirror-markdown/package.json +1 -1
  35. package/plugin-registry-url +1 -1
  36. /package/packages/codemirror-markdown/dist/{chunk-DQNB5ERJ.js.map → chunk-AOCXO46Z.js.map} +0 -0
  37. /package/packages/codemirror-markdown/dist/{chunk-4ZTKTN2T.js.map → chunk-BK6BYU4X.js.map} +0 -0
  38. /package/packages/codemirror-markdown/dist/{chunk-4RNBFSBX.js.map → chunk-JCGWNVO7.js.map} +0 -0
  39. /package/packages/codemirror-markdown/dist/{chunk-6JHOS434.js.map → chunk-ZMDZRV6X.js.map} +0 -0
  40. /package/packages/codemirror-markdown/dist/{dist-5FW47RX2.js.map → dist-3WYN573Y.js.map} +0 -0
  41. /package/packages/codemirror-markdown/dist/{dist-HB4M34TX.js.map → dist-4STDX7WZ.js.map} +0 -0
  42. /package/packages/codemirror-markdown/dist/{dist-PAVPWBMY.js.map → dist-66V2OZNR.js.map} +0 -0
  43. /package/packages/codemirror-markdown/dist/{dist-D27NTZAI.js.map → dist-7EHN4UZA.js.map} +0 -0
  44. /package/packages/codemirror-markdown/dist/{dist-STDOJSRA.js.map → dist-D4E7IXYD.js.map} +0 -0
  45. /package/packages/codemirror-markdown/dist/{dist-EG4ZREHT.js.map → dist-E6QAN4VQ.js.map} +0 -0
  46. /package/packages/codemirror-markdown/dist/{dist-4N6A6FHO.js.map → dist-E72K6GKZ.js.map} +0 -0
  47. /package/packages/codemirror-markdown/dist/{dist-B5G4LYVR.js.map → dist-EVYTVY4T.js.map} +0 -0
  48. /package/packages/codemirror-markdown/dist/{dist-6BZJTPMQ.js.map → dist-ITLHNFUL.js.map} +0 -0
  49. /package/packages/codemirror-markdown/dist/{dist-ITGX4OZJ.js.map → dist-KLLOFSEO.js.map} +0 -0
  50. /package/packages/codemirror-markdown/dist/{dist-6NY2CMU2.js.map → dist-LCUXA5AJ.js.map} +0 -0
  51. /package/packages/codemirror-markdown/dist/{dist-XVLR6T5U.js.map → dist-NFD5VVC6.js.map} +0 -0
  52. /package/packages/codemirror-markdown/dist/{dist-SFP5SWTJ.js.map → dist-O6G7IUZY.js.map} +0 -0
  53. /package/packages/codemirror-markdown/dist/{dist-TYTABVEN.js.map → dist-OU44YTSZ.js.map} +0 -0
  54. /package/packages/codemirror-markdown/dist/{dist-XM4FBMZA.js.map → dist-RCBHVDL7.js.map} +0 -0
  55. /package/packages/codemirror-markdown/dist/{dist-DX7TJIOI.js.map → dist-RUK5SWS5.js.map} +0 -0
  56. /package/packages/codemirror-markdown/dist/{dist-VYHSBFVD.js.map → dist-TFWDIHAP.js.map} +0 -0
  57. /package/packages/codemirror-markdown/dist/{dist-BYFOH52X.js.map → dist-VBHD2NRU.js.map} +0 -0
  58. /package/packages/codemirror-markdown/dist/{dist-TV5CSRQ2.js.map → dist-XL62MJER.js.map} +0 -0
  59. /package/packages/codemirror-markdown/dist/{dist-YSRXNTXV.js.map → dist-YK6XD4UJ.js.map} +0 -0
  60. /package/packages/codemirror-markdown/dist/{dist-KBGGPCDW.js.map → dist-YNO26IAD.js.map} +0 -0
@@ -1,16 +1,17 @@
1
1
  import {
2
2
  markdown,
3
3
  markdownLanguage
4
- } from "../chunk-4ZTKTN2T.js";
5
- import "../chunk-DQNB5ERJ.js";
6
- import "../chunk-4RNBFSBX.js";
7
- import "../chunk-6JHOS434.js";
4
+ } from "../chunk-BK6BYU4X.js";
5
+ import "../chunk-AOCXO46Z.js";
6
+ import "../chunk-JCGWNVO7.js";
7
+ import "../chunk-ZMDZRV6X.js";
8
8
  import {
9
9
  completionKeymap
10
10
  } from "../chunk-UQ2NFKSJ.js";
11
11
  import {
12
+ styleTags,
12
13
  tags
13
- } from "../chunk-IJCIGXUN.js";
14
+ } from "../chunk-3U6A6M3C.js";
14
15
 
15
16
  // src/extensions/markdown.ts
16
17
  import { defaultKeymap, indentWithTab } from "@codemirror/commands";
@@ -22,7 +23,7 @@ function legacy(parser) {
22
23
  return new LanguageSupport(StreamLanguage.define(parser));
23
24
  }
24
25
  function sql(dialectName) {
25
- return import("../dist-5FW47RX2.js").then((m) => m.sql({ dialect: m[dialectName] }));
26
+ return import("../dist-3WYN573Y.js").then((m) => m.sql({ dialect: m[dialectName] }));
26
27
  }
27
28
  var languages = [
28
29
  // New-style language modes
@@ -30,7 +31,7 @@ var languages = [
30
31
  name: "C",
31
32
  extensions: ["c", "h", "ino"],
32
33
  load() {
33
- return import("../dist-PAVPWBMY.js").then((m) => m.cpp());
34
+ return import("../dist-66V2OZNR.js").then((m) => m.cpp());
34
35
  }
35
36
  }),
36
37
  /* @__PURE__ */ LanguageDescription.of({
@@ -38,7 +39,7 @@ var languages = [
38
39
  alias: ["cpp"],
39
40
  extensions: ["cpp", "c++", "cc", "cxx", "hpp", "h++", "hh", "hxx"],
40
41
  load() {
41
- return import("../dist-PAVPWBMY.js").then((m) => m.cpp());
42
+ return import("../dist-66V2OZNR.js").then((m) => m.cpp());
42
43
  }
43
44
  }),
44
45
  /* @__PURE__ */ LanguageDescription.of({
@@ -53,14 +54,14 @@ var languages = [
53
54
  name: "CSS",
54
55
  extensions: ["css"],
55
56
  load() {
56
- return import("../dist-ITGX4OZJ.js").then((m) => m.css());
57
+ return import("../dist-YK6XD4UJ.js").then((m) => m.css());
57
58
  }
58
59
  }),
59
60
  /* @__PURE__ */ LanguageDescription.of({
60
61
  name: "Go",
61
62
  extensions: ["go"],
62
63
  load() {
63
- return import("../dist-6BZJTPMQ.js").then((m) => m.go());
64
+ return import("../dist-ITLHNFUL.js").then((m) => m.go());
64
65
  }
65
66
  }),
66
67
  /* @__PURE__ */ LanguageDescription.of({
@@ -68,14 +69,14 @@ var languages = [
68
69
  alias: ["xhtml"],
69
70
  extensions: ["html", "htm", "handlebars", "hbs"],
70
71
  load() {
71
- return import("../dist-XVLR6T5U.js").then((m) => m.html());
72
+ return import("../dist-4STDX7WZ.js").then((m) => m.html());
72
73
  }
73
74
  }),
74
75
  /* @__PURE__ */ LanguageDescription.of({
75
76
  name: "Java",
76
77
  extensions: ["java"],
77
78
  load() {
78
- return import("../dist-TYTABVEN.js").then((m) => m.java());
79
+ return import("../dist-OU44YTSZ.js").then((m) => m.java());
79
80
  }
80
81
  }),
81
82
  /* @__PURE__ */ LanguageDescription.of({
@@ -83,14 +84,14 @@ var languages = [
83
84
  alias: ["ecmascript", "js", "node"],
84
85
  extensions: ["js", "mjs", "cjs"],
85
86
  load() {
86
- return import("../dist-YSRXNTXV.js").then((m) => m.javascript());
87
+ return import("../dist-KLLOFSEO.js").then((m) => m.javascript());
87
88
  }
88
89
  }),
89
90
  /* @__PURE__ */ LanguageDescription.of({
90
91
  name: "Jinja",
91
92
  extensions: ["j2", "jinja", "jinja2"],
92
93
  load() {
93
- return import("../dist-B5G4LYVR.js").then((m) => m.jinja());
94
+ return import("../dist-EVYTVY4T.js").then((m) => m.jinja());
94
95
  }
95
96
  }),
96
97
  /* @__PURE__ */ LanguageDescription.of({
@@ -98,28 +99,28 @@ var languages = [
98
99
  alias: ["json5"],
99
100
  extensions: ["json", "map"],
100
101
  load() {
101
- return import("../dist-KBGGPCDW.js").then((m) => m.json());
102
+ return import("../dist-YNO26IAD.js").then((m) => m.json());
102
103
  }
103
104
  }),
104
105
  /* @__PURE__ */ LanguageDescription.of({
105
106
  name: "JSX",
106
107
  extensions: ["jsx"],
107
108
  load() {
108
- return import("../dist-YSRXNTXV.js").then((m) => m.javascript({ jsx: true }));
109
+ return import("../dist-KLLOFSEO.js").then((m) => m.javascript({ jsx: true }));
109
110
  }
110
111
  }),
111
112
  /* @__PURE__ */ LanguageDescription.of({
112
113
  name: "LESS",
113
114
  extensions: ["less"],
114
115
  load() {
115
- return import("../dist-BYFOH52X.js").then((m) => m.less());
116
+ return import("../dist-VBHD2NRU.js").then((m) => m.less());
116
117
  }
117
118
  }),
118
119
  /* @__PURE__ */ LanguageDescription.of({
119
120
  name: "Liquid",
120
121
  extensions: ["liquid"],
121
122
  load() {
122
- return import("../dist-D27NTZAI.js").then((m) => m.liquid());
123
+ return import("../dist-7EHN4UZA.js").then((m) => m.liquid());
123
124
  }
124
125
  }),
125
126
  /* @__PURE__ */ LanguageDescription.of({
@@ -132,7 +133,7 @@ var languages = [
132
133
  name: "Markdown",
133
134
  extensions: ["md", "markdown", "mkd"],
134
135
  load() {
135
- return import("../dist-HB4M34TX.js").then((m) => m.markdown());
136
+ return import("../dist-NFD5VVC6.js").then((m) => m.markdown());
136
137
  }
137
138
  }),
138
139
  /* @__PURE__ */ LanguageDescription.of({
@@ -151,7 +152,7 @@ var languages = [
151
152
  name: "PHP",
152
153
  extensions: ["php", "php3", "php4", "php5", "php7", "phtml"],
153
154
  load() {
154
- return import("../dist-TV5CSRQ2.js").then((m) => m.php());
155
+ return import("../dist-XL62MJER.js").then((m) => m.php());
155
156
  }
156
157
  }),
157
158
  /* @__PURE__ */ LanguageDescription.of({
@@ -172,28 +173,28 @@ var languages = [
172
173
  extensions: ["BUILD", "bzl", "py", "pyw"],
173
174
  filename: /^(BUCK|BUILD)$/,
174
175
  load() {
175
- return import("../dist-DX7TJIOI.js").then((m) => m.python());
176
+ return import("../dist-RUK5SWS5.js").then((m) => m.python());
176
177
  }
177
178
  }),
178
179
  /* @__PURE__ */ LanguageDescription.of({
179
180
  name: "Rust",
180
181
  extensions: ["rs"],
181
182
  load() {
182
- return import("../dist-SFP5SWTJ.js").then((m) => m.rust());
183
+ return import("../dist-O6G7IUZY.js").then((m) => m.rust());
183
184
  }
184
185
  }),
185
186
  /* @__PURE__ */ LanguageDescription.of({
186
187
  name: "Sass",
187
188
  extensions: ["sass"],
188
189
  load() {
189
- return import("../dist-6NY2CMU2.js").then((m) => m.sass({ indented: true }));
190
+ return import("../dist-LCUXA5AJ.js").then((m) => m.sass({ indented: true }));
190
191
  }
191
192
  }),
192
193
  /* @__PURE__ */ LanguageDescription.of({
193
194
  name: "SCSS",
194
195
  extensions: ["scss"],
195
196
  load() {
196
- return import("../dist-6NY2CMU2.js").then((m) => m.sass());
197
+ return import("../dist-LCUXA5AJ.js").then((m) => m.sass());
197
198
  }
198
199
  }),
199
200
  /* @__PURE__ */ LanguageDescription.of({
@@ -213,7 +214,7 @@ var languages = [
213
214
  name: "TSX",
214
215
  extensions: ["tsx"],
215
216
  load() {
216
- return import("../dist-YSRXNTXV.js").then((m) => m.javascript({ jsx: true, typescript: true }));
217
+ return import("../dist-KLLOFSEO.js").then((m) => m.javascript({ jsx: true, typescript: true }));
217
218
  }
218
219
  }),
219
220
  /* @__PURE__ */ LanguageDescription.of({
@@ -221,14 +222,14 @@ var languages = [
221
222
  alias: ["ts"],
222
223
  extensions: ["ts", "mts", "cts"],
223
224
  load() {
224
- return import("../dist-YSRXNTXV.js").then((m) => m.javascript({ typescript: true }));
225
+ return import("../dist-KLLOFSEO.js").then((m) => m.javascript({ typescript: true }));
225
226
  }
226
227
  }),
227
228
  /* @__PURE__ */ LanguageDescription.of({
228
229
  name: "WebAssembly",
229
230
  extensions: ["wat", "wast"],
230
231
  load() {
231
- return import("../dist-XM4FBMZA.js").then((m) => m.wast());
232
+ return import("../dist-RCBHVDL7.js").then((m) => m.wast());
232
233
  }
233
234
  }),
234
235
  /* @__PURE__ */ LanguageDescription.of({
@@ -236,7 +237,7 @@ var languages = [
236
237
  alias: ["rss", "wsdl", "xsd"],
237
238
  extensions: ["xml", "xsl", "xsd", "svg"],
238
239
  load() {
239
- return import("../dist-4N6A6FHO.js").then((m) => m.xml());
240
+ return import("../dist-E72K6GKZ.js").then((m) => m.xml());
240
241
  }
241
242
  }),
242
243
  /* @__PURE__ */ LanguageDescription.of({
@@ -244,7 +245,7 @@ var languages = [
244
245
  alias: ["yml"],
245
246
  extensions: ["yaml", "yml"],
246
247
  load() {
247
- return import("../dist-EG4ZREHT.js").then((m) => m.yaml());
248
+ return import("../dist-E6QAN4VQ.js").then((m) => m.yaml());
248
249
  }
249
250
  }),
250
251
  // Legacy modes ported from CodeMirror 5
@@ -1033,13 +1034,13 @@ var languages = [
1033
1034
  name: "Vue",
1034
1035
  extensions: ["vue"],
1035
1036
  load() {
1036
- return import("../dist-VYHSBFVD.js").then((m) => m.vue());
1037
+ return import("../dist-TFWDIHAP.js").then((m) => m.vue());
1037
1038
  }
1038
1039
  }),
1039
1040
  /* @__PURE__ */ LanguageDescription.of({
1040
1041
  name: "Angular Template",
1041
1042
  load() {
1042
- return import("../dist-STDOJSRA.js").then((m) => m.angular());
1043
+ return import("../dist-D4E7IXYD.js").then((m) => m.angular());
1043
1044
  }
1044
1045
  })
1045
1046
  ];
@@ -2065,7 +2066,7 @@ var searchExtensions = [
2065
2066
  ];
2066
2067
 
2067
2068
  // src/extensions/markdown.ts
2068
- import { EditorView as EditorView5, keymap as keymap2 } from "@codemirror/view";
2069
+ import { EditorView as EditorView6, keymap as keymap3 } from "@codemirror/view";
2069
2070
 
2070
2071
  // src/extensions/formatting.ts
2071
2072
  import { EditorSelection as EditorSelection2 } from "@codemirror/state";
@@ -2225,18 +2226,433 @@ var taskCheckboxes = ViewPlugin2.fromClass(
2225
2226
  { decorations: (v) => v.decorations }
2226
2227
  );
2227
2228
 
2228
- // src/extensions/zoom.ts
2229
- import { Prec as Prec2 } from "@codemirror/state";
2229
+ // src/extensions/margin.ts
2230
+ import { syntaxTree as syntaxTree2 } from "@codemirror/language";
2231
+ import {
2232
+ Decoration as Decoration3,
2233
+ EditorView as EditorView3,
2234
+ ViewPlugin as ViewPlugin3,
2235
+ WidgetType as WidgetType2
2236
+ } from "@codemirror/view";
2237
+ var numberMark = Decoration3.mark({ class: "cm-md-hang cm-md-hang-number" });
2238
+ var quoteMark = Decoration3.mark({ class: "cm-md-hang cm-md-hang-quote" });
2239
+ var hidden = Decoration3.replace({});
2240
+ var taskMark = Decoration3.mark({ class: "cm-md-hang", inclusive: true });
2241
+ var HeadingLabel = class extends WidgetType2 {
2242
+ constructor(level) {
2243
+ super();
2244
+ this.level = level;
2245
+ }
2246
+ eq(other) {
2247
+ return other.level === this.level;
2248
+ }
2249
+ toDOM() {
2250
+ const span = document.createElement("span");
2251
+ span.className = "cm-md-hang cm-md-heading-label";
2252
+ span.setAttribute("aria-hidden", "true");
2253
+ const n = document.createElement("span");
2254
+ n.className = "cm-md-heading-level";
2255
+ n.textContent = String(this.level);
2256
+ span.append("H", n);
2257
+ return span;
2258
+ }
2259
+ };
2260
+ var Bullet = class extends WidgetType2 {
2261
+ eq() {
2262
+ return true;
2263
+ }
2264
+ toDOM() {
2265
+ const span = document.createElement("span");
2266
+ span.className = "cm-md-hang";
2267
+ const dot = document.createElement("span");
2268
+ dot.className = "cm-bullet";
2269
+ span.append(dot);
2270
+ return span;
2271
+ }
2272
+ };
2273
+ var NumberLabel = class extends WidgetType2 {
2274
+ constructor(text) {
2275
+ super();
2276
+ this.text = text;
2277
+ }
2278
+ eq(other) {
2279
+ return other.text === this.text;
2280
+ }
2281
+ toDOM() {
2282
+ const span = document.createElement("span");
2283
+ span.className = "cm-md-hang cm-md-hang-number";
2284
+ span.textContent = this.text;
2285
+ return span;
2286
+ }
2287
+ };
2288
+ function renderedNumber(state, mark) {
2289
+ const text = state.doc.sliceString(mark.from, mark.to);
2290
+ const delimiter = text.slice(-1);
2291
+ let item = mark.parent;
2292
+ if (!item || item.name !== "ListItem") return text;
2293
+ let index = 0;
2294
+ let first = item;
2295
+ for (let prev = item.prevSibling; prev; prev = prev.prevSibling) {
2296
+ if (prev.name !== "ListItem") continue;
2297
+ index++;
2298
+ first = prev;
2299
+ }
2300
+ const firstMark = first.getChild("ListMark");
2301
+ const start = firstMark ? parseInt(state.doc.sliceString(firstMark.from, firstMark.to), 10) : 1;
2302
+ return `${(Number.isNaN(start) ? 1 : start) + index}${delimiter}`;
2303
+ }
2304
+ function caretLines(state) {
2305
+ const lines = /* @__PURE__ */ new Set();
2306
+ for (const r of state.selection.ranges) {
2307
+ const first = state.doc.lineAt(r.from).number;
2308
+ const last = state.doc.lineAt(r.to).number;
2309
+ for (let n = first; n <= last; n++) lines.add(n);
2310
+ }
2311
+ return lines;
2312
+ }
2313
+ function skipSpaces(state, pos) {
2314
+ const line = state.doc.lineAt(pos);
2315
+ while (pos < line.to && state.doc.sliceString(pos, pos + 1) === " ") pos++;
2316
+ return pos;
2317
+ }
2318
+ function build2(view) {
2319
+ const { state } = view;
2320
+ const { doc } = state;
2321
+ const editing = caretLines(state);
2322
+ const decos = [];
2323
+ for (const { from, to } of view.visibleRanges) {
2324
+ syntaxTree2(state).iterate({
2325
+ from,
2326
+ to,
2327
+ enter: (node) => {
2328
+ const name = node.name;
2329
+ const heading = /^ATXHeading(\d)$/.exec(name);
2330
+ if (heading) {
2331
+ const mark = node.node.firstChild;
2332
+ if (!mark || mark.name !== "HeaderMark" || mark.from !== node.from)
2333
+ return;
2334
+ decos.push(
2335
+ Decoration3.replace({
2336
+ widget: new HeadingLabel(Number(heading[1]))
2337
+ }).range(mark.from, skipSpaces(state, mark.to))
2338
+ );
2339
+ return;
2340
+ }
2341
+ if (name === "ListMark") {
2342
+ const end = skipSpaces(state, node.to);
2343
+ const char = doc.sliceString(node.from, node.to);
2344
+ const bullet = ["-", "+", "*"].includes(char);
2345
+ const task = node.node.nextSibling?.firstChild;
2346
+ const isTask = bullet && task?.name === "TaskMarker" && doc.sliceString(end, task.from).trim() === "";
2347
+ if (isTask && task) {
2348
+ if (end > node.from) decos.push(hidden.range(node.from, end));
2349
+ decos.push(taskMark.range(task.from, skipSpaces(state, task.to)));
2350
+ return;
2351
+ }
2352
+ if (bullet) {
2353
+ decos.push(
2354
+ Decoration3.replace({ widget: new Bullet() }).range(node.from, end)
2355
+ );
2356
+ } else if (editing.has(doc.lineAt(node.from).number)) {
2357
+ decos.push(numberMark.range(node.from, end));
2358
+ } else {
2359
+ decos.push(
2360
+ Decoration3.replace({
2361
+ widget: new NumberLabel(renderedNumber(state, node.node))
2362
+ }).range(node.from, end)
2363
+ );
2364
+ }
2365
+ return;
2366
+ }
2367
+ if (name === "Blockquote") {
2368
+ for (let p = node.node.parent; p; p = p.parent)
2369
+ if (p.name === "Blockquote") return;
2370
+ const first = doc.lineAt(node.from).number;
2371
+ const last = doc.lineAt(node.to).number;
2372
+ for (let n = first; n <= last; n++) {
2373
+ const line = doc.line(n);
2374
+ const classes = ["cm-md-quote"];
2375
+ if (n === first) classes.push("cm-md-quote-first");
2376
+ if (n === last) classes.push("cm-md-quote-last");
2377
+ decos.push(
2378
+ Decoration3.line({ class: classes.join(" ") }).range(line.from)
2379
+ );
2380
+ }
2381
+ return;
2382
+ }
2383
+ if (name === "QuoteMark") {
2384
+ const line = doc.lineAt(node.from);
2385
+ const before = doc.sliceString(line.from, node.from);
2386
+ if (before.trim() !== "") return;
2387
+ let end = node.to;
2388
+ for (; ; ) {
2389
+ const next = skipSpaces(state, end);
2390
+ if (doc.sliceString(next, next + 1) !== ">") break;
2391
+ end = next + 1;
2392
+ }
2393
+ end = skipSpaces(state, end);
2394
+ decos.push(
2395
+ (editing.has(line.number) ? quoteMark : hidden).range(
2396
+ line.from,
2397
+ end
2398
+ )
2399
+ );
2400
+ }
2401
+ }
2402
+ });
2403
+ }
2404
+ return Decoration3.set(decos, true);
2405
+ }
2406
+ var marginPlugin = ViewPlugin3.fromClass(
2407
+ class {
2408
+ decorations;
2409
+ constructor(view) {
2410
+ this.decorations = build2(view);
2411
+ }
2412
+ update(update) {
2413
+ if (update.docChanged || update.selectionSet || update.viewportChanged || syntaxTree2(update.startState) !== syntaxTree2(update.state)) {
2414
+ this.decorations = build2(update.view);
2415
+ }
2416
+ }
2417
+ },
2418
+ { decorations: (v) => v.decorations }
2419
+ );
2420
+ var zoomed = (length) => `calc(${length} * var(--markdown-zoom, 1))`;
2421
+ var marginTheme = EditorView3.baseTheme({
2422
+ ".cm-content": {
2423
+ "--markdown-hang": zoomed("2.5rem")
2424
+ },
2425
+ ".cm-md-hang": {
2426
+ display: "inline-flex",
2427
+ justifyContent: "flex-end",
2428
+ alignItems: "baseline",
2429
+ boxSizing: "border-box",
2430
+ width: "var(--markdown-hang)",
2431
+ marginLeft: "calc(-1 * var(--markdown-hang))",
2432
+ paddingRight: zoomed("0.6rem"),
2433
+ whiteSpace: "pre",
2434
+ // a heading's raw `## ` shrinks to label size so it fits the margin.
2435
+ fontSize: zoomed("0.8rem"),
2436
+ color: "var(--text-editor-line-offset-40, #999)",
2437
+ fontWeight: "normal",
2438
+ fontStyle: "normal",
2439
+ textDecoration: "none"
2440
+ },
2441
+ // highlight spans inside the box (a heading's `##`) keep their own size and
2442
+ // margins otherwise, and as flex items those margins would push the line.
2443
+ ".cm-md-hang *": {
2444
+ fontSize: "inherit",
2445
+ margin: "0"
2446
+ },
2447
+ ".cm-md-hang-number": {
2448
+ fontSize: "inherit",
2449
+ color: "inherit",
2450
+ fontVariantNumeric: "tabular-nums"
2451
+ },
2452
+ ".cm-md-heading-label": {
2453
+ fontFamily: "var(--markdown-body-family, inherit)",
2454
+ letterSpacing: "0.02em"
2455
+ },
2456
+ ".cm-md-heading-level": {
2457
+ fontSize: "0.75em",
2458
+ verticalAlign: "-0.15em"
2459
+ },
2460
+ ".cm-md-hang .cm-bullet": {
2461
+ display: "inline-block",
2462
+ width: "0.4em",
2463
+ height: "0.4em",
2464
+ borderRadius: "50%",
2465
+ background: "var(--syntax-list-marker, currentColor)",
2466
+ color: "var(--text-editor-line)",
2467
+ alignSelf: "center"
2468
+ },
2469
+ ".cm-md-hang .cm-task": {
2470
+ margin: "0"
2471
+ },
2472
+ ".cm-md-quote": {
2473
+ position: "relative"
2474
+ },
2475
+ ".cm-md-quote::before": {
2476
+ content: '""',
2477
+ position: "absolute",
2478
+ // centred in the left half of the margin, clear of a hung `>`.
2479
+ left: "calc(-0.5 * var(--markdown-hang))",
2480
+ top: "0",
2481
+ bottom: "0",
2482
+ width: "3px",
2483
+ background: "var(--syntax-quote-bar, var(--studio-link, currentColor))",
2484
+ opacity: "0.6"
2485
+ },
2486
+ ".cm-md-quote-first::before": {
2487
+ top: "0.2em",
2488
+ borderTopLeftRadius: "3px",
2489
+ borderTopRightRadius: "3px"
2490
+ },
2491
+ ".cm-md-quote-last::before": {
2492
+ bottom: "0.2em",
2493
+ borderBottomLeftRadius: "3px",
2494
+ borderBottomRightRadius: "3px"
2495
+ }
2496
+ });
2497
+ var margin = [marginPlugin, marginTheme];
2498
+
2499
+ // src/extensions/headings.ts
2500
+ import { syntaxTree as syntaxTree3 } from "@codemirror/language";
2501
+ import {
2502
+ EditorSelection as EditorSelection3,
2503
+ EditorState as EditorState2,
2504
+ Prec as Prec2
2505
+ } from "@codemirror/state";
2230
2506
  import { keymap } from "@codemirror/view";
2507
+ function headingPrefix(state, line) {
2508
+ for (let node = syntaxTree3(state).resolveInner(line.from, 1); node; node = node.parent) {
2509
+ const m = /^ATXHeading(\d)$/.exec(node.name);
2510
+ if (!m) continue;
2511
+ if (state.doc.lineAt(node.from).number !== line.number) return null;
2512
+ const mark = node.firstChild;
2513
+ if (!mark || mark.name !== "HeaderMark") return null;
2514
+ let to = mark.to;
2515
+ while (to < line.to && state.doc.sliceString(to, to + 1) === " ") to++;
2516
+ return { from: line.from, to, level: Number(m[1]) };
2517
+ }
2518
+ return null;
2519
+ }
2520
+ var keepOutOfPrefix = EditorState2.transactionFilter.of((tr) => {
2521
+ if (!tr.selection) return tr;
2522
+ const { state } = tr;
2523
+ const before = tr.startState.selection;
2524
+ let moved = false;
2525
+ const ranges = tr.selection.ranges.map((r, i) => {
2526
+ if (!r.empty) return r;
2527
+ const line = state.doc.lineAt(r.head);
2528
+ if (r.head >= line.to && line.length > 0) return r;
2529
+ const prefix = headingPrefix(state, line);
2530
+ if (!prefix || r.head >= prefix.to) return r;
2531
+ const old = before.ranges[i] ?? before.main;
2532
+ const leaving = !tr.docChanged && old.empty && old.head === prefix.to && line.from > 0;
2533
+ moved = true;
2534
+ return EditorSelection3.cursor(leaving ? line.from - 1 : prefix.to);
2535
+ });
2536
+ if (!moved) return tr;
2537
+ return [
2538
+ tr,
2539
+ {
2540
+ selection: EditorSelection3.create(ranges, tr.selection.mainIndex),
2541
+ sequential: true
2542
+ }
2543
+ ];
2544
+ });
2545
+ function selectedLines(state) {
2546
+ const seen = /* @__PURE__ */ new Set();
2547
+ const lines = [];
2548
+ for (const r of state.selection.ranges) {
2549
+ for (let n = state.doc.lineAt(r.from).number; n <= state.doc.lineAt(r.to).number; n++) {
2550
+ if (seen.has(n)) continue;
2551
+ seen.add(n);
2552
+ lines.push(state.doc.line(n));
2553
+ }
2554
+ }
2555
+ return lines;
2556
+ }
2557
+ var setHeading = (level) => ({ state, dispatch }) => {
2558
+ const lines = selectedLines(state);
2559
+ const prefixes = lines.map((line) => headingPrefix(state, line));
2560
+ const already = level > 0 && prefixes.every((p) => p && p.level === level);
2561
+ const target = already ? 0 : level;
2562
+ const insert = target ? "#".repeat(target) + " " : "";
2563
+ const changes = lines.map((line, i) => {
2564
+ const p = prefixes[i];
2565
+ return { from: line.from, to: p ? p.to : line.from, insert };
2566
+ });
2567
+ dispatch(
2568
+ state.update({
2569
+ changes,
2570
+ scrollIntoView: true,
2571
+ userEvent: "input.format"
2572
+ })
2573
+ );
2574
+ return true;
2575
+ };
2576
+ function atHeadingStart(state) {
2577
+ const sel = state.selection;
2578
+ if (sel.ranges.length !== 1 || !sel.main.empty) return null;
2579
+ const line = state.doc.lineAt(sel.main.head);
2580
+ const prefix = headingPrefix(state, line);
2581
+ return prefix && sel.main.head === prefix.to ? prefix : null;
2582
+ }
2583
+ var backspace = ({ state, dispatch }) => {
2584
+ const prefix = atHeadingStart(state);
2585
+ if (!prefix) return false;
2586
+ dispatch(
2587
+ state.update({
2588
+ changes: { from: prefix.from, to: prefix.to },
2589
+ selection: EditorSelection3.cursor(prefix.from),
2590
+ userEvent: "delete.backward"
2591
+ })
2592
+ );
2593
+ return true;
2594
+ };
2595
+ var enter = ({ state, dispatch }) => {
2596
+ const prefix = atHeadingStart(state);
2597
+ if (!prefix) return false;
2598
+ const line = state.doc.lineAt(prefix.from);
2599
+ if (prefix.to >= line.to) return false;
2600
+ dispatch(
2601
+ state.update({
2602
+ changes: { from: line.from, insert: "\n" },
2603
+ selection: EditorSelection3.cursor(prefix.to + 1),
2604
+ scrollIntoView: true,
2605
+ userEvent: "input"
2606
+ })
2607
+ );
2608
+ return true;
2609
+ };
2610
+ var deleteForward = ({ state, dispatch }) => {
2611
+ const sel = state.selection;
2612
+ if (sel.ranges.length !== 1 || !sel.main.empty) return false;
2613
+ const line = state.doc.lineAt(sel.main.head);
2614
+ if (sel.main.head !== line.to || line.number >= state.doc.lines) return false;
2615
+ const prefix = headingPrefix(state, state.doc.line(line.number + 1));
2616
+ if (!prefix) return false;
2617
+ dispatch(
2618
+ state.update({
2619
+ changes: { from: line.to, to: prefix.to },
2620
+ userEvent: "delete.forward"
2621
+ })
2622
+ );
2623
+ return true;
2624
+ };
2625
+ var headings = [
2626
+ keepOutOfPrefix,
2627
+ // above lang-markdown's own (Prec.high) Enter and Backspace.
2628
+ Prec2.highest(
2629
+ keymap.of([
2630
+ { key: "Backspace", run: backspace },
2631
+ { key: "Enter", run: enter },
2632
+ { key: "Delete", run: deleteForward },
2633
+ { key: "Mod-Shift-h", run: setHeading(2), preventDefault: true },
2634
+ { key: "Mod-Shift-j", run: setHeading(3), preventDefault: true },
2635
+ { key: "Mod-Shift-b", run: setHeading(0), preventDefault: true },
2636
+ { key: "Mod-Alt-1", run: setHeading(1), preventDefault: true },
2637
+ { key: "Mod-Alt-2", run: setHeading(2), preventDefault: true },
2638
+ { key: "Mod-Alt-3", run: setHeading(3), preventDefault: true },
2639
+ { key: "Mod-Alt-0", run: setHeading(0), preventDefault: true }
2640
+ ])
2641
+ )
2642
+ ];
2643
+
2644
+ // src/extensions/zoom.ts
2645
+ import { Prec as Prec3 } from "@codemirror/state";
2646
+ import { keymap as keymap2 } from "@codemirror/view";
2231
2647
  var MIN_FONT_SIZE = 6;
2232
2648
  var FALLBACK_FONT_SIZE = 16;
2233
2649
  var px = (value) => parseFloat(value) || FALLBACK_FONT_SIZE;
2234
2650
  function baseSize(view) {
2235
2651
  const { style } = view.dom;
2236
- const zoomed2 = style.fontSize;
2652
+ const zoomed3 = style.fontSize;
2237
2653
  style.fontSize = "";
2238
2654
  const base = px(getComputedStyle(view.dom).fontSize);
2239
- style.fontSize = zoomed2;
2655
+ style.fontSize = zoomed3;
2240
2656
  return base;
2241
2657
  }
2242
2658
  function step(view, by) {
@@ -2256,8 +2672,8 @@ function step(view, by) {
2256
2672
  var zoomIn = (view) => step(view, 1);
2257
2673
  var zoomOut = (view) => step(view, -1);
2258
2674
  var zoomReset = (view) => step(view, 0);
2259
- var markdownZoom = Prec2.high(
2260
- keymap.of([
2675
+ var markdownZoom = Prec3.high(
2676
+ keymap2.of([
2261
2677
  // `+` and `_` are the shifted keys, for keyboards that need Shift.
2262
2678
  { key: "Mod-=", run: zoomIn, preventDefault: true },
2263
2679
  { key: "Mod-+", run: zoomIn, preventDefault: true },
@@ -2268,20 +2684,10 @@ var markdownZoom = Prec2.high(
2268
2684
  );
2269
2685
 
2270
2686
  // src/themes/markdown.ts
2271
- import {
2272
- HighlightStyle,
2273
- syntaxHighlighting,
2274
- syntaxTree as syntaxTree2
2275
- } from "@codemirror/language";
2276
- import { RangeSetBuilder as RangeSetBuilder3 } from "@codemirror/state";
2277
- import {
2278
- Decoration as Decoration3,
2279
- EditorView as EditorView4,
2280
- ViewPlugin as ViewPlugin3,
2281
- WidgetType as WidgetType2
2282
- } from "@codemirror/view";
2687
+ import { HighlightStyle, syntaxHighlighting } from "@codemirror/language";
2688
+ import { EditorView as EditorView5 } from "@codemirror/view";
2283
2689
  var bodyFont = (style) => style == "serif" ? 'var(--text-editor-family-serif, "Merriweather", serif)' : "var(--text-editor-family-sans)";
2284
- var zoomed = (length) => `calc(${length} * var(--markdown-zoom, 1))`;
2690
+ var zoomed2 = (length) => `calc(${length} * var(--markdown-zoom, 1))`;
2285
2691
  var markdownStyles = (style) => ({
2286
2692
  "&": {},
2287
2693
  "&.cm-editor.cm-focused": {
@@ -2301,20 +2707,24 @@ var markdownStyles = (style) => ({
2301
2707
  background: "transparent"
2302
2708
  },
2303
2709
  ".cm-content": {
2710
+ // for things outside the highlighter (the link widget) to match the text.
2711
+ "--markdown-body-family": bodyFont(style),
2304
2712
  // Justified text makes it look more like the I&S web essay template,
2305
2713
  // but doesn't feel right for most documents.
2306
2714
  // textAlign: "justify",
2307
2715
  textWrap: "pretty",
2308
2716
  fontFamily: bodyFont(style),
2309
- lineHeight: zoomed("1.5rem"),
2717
+ lineHeight: zoomed2("1.5rem"),
2310
2718
  color: "var(--text-editor-line)",
2311
2719
  caretColor: "var(--text-editor-cursor-fill)",
2312
2720
  background: "var(--text-editor-fill)",
2313
- marginBlock: zoomed("2rem"),
2721
+ marginBlock: zoomed2("2rem"),
2314
2722
  marginInline: "auto",
2315
2723
  // lol i guess this is the same as box-sizing: content-box
2316
- maxWidth: `calc(var(--max-text-line-width, 100ex) - ${zoomed("2rem")})`,
2317
- padding: zoomed("2rem"),
2724
+ maxWidth: `calc(var(--max-text-line-width, 100ex) - ${zoomed2("2rem")})`,
2725
+ padding: zoomed2("2rem"),
2726
+ // room for the markers hung in the margin (extensions/margin.ts).
2727
+ paddingLeft: `calc(${zoomed2("2rem")} + var(--markdown-hang, 0px))`,
2318
2728
  boxShadow: "none",
2319
2729
  marginBottom: "8em",
2320
2730
  borderRadius: "8px"
@@ -2322,20 +2732,6 @@ var markdownStyles = (style) => ({
2322
2732
  ".cm-content li": {
2323
2733
  marginBottom: 0
2324
2734
  },
2325
- ".cm-bullet": {
2326
- display: "inline-block",
2327
- width: "1ch"
2328
- },
2329
- ".cm-bullet::before": {
2330
- content: '""',
2331
- display: "inline-block",
2332
- width: "0.4em",
2333
- height: "0.4em",
2334
- borderRadius: "50%",
2335
- background: "currentColor",
2336
- color: "var(--text-editor-line)",
2337
- verticalAlign: "0.15em"
2338
- },
2339
2735
  ".cm-task": {
2340
2736
  margin: "0 0.1em",
2341
2737
  verticalAlign: "-0.1em",
@@ -2351,7 +2747,7 @@ var markdownStyles = (style) => ({
2351
2747
  backgroundColor: "inherit"
2352
2748
  },
2353
2749
  ".frontmatter, .frontmatter *": {
2354
- fontSize: zoomed("14px"),
2750
+ fontSize: zoomed2("14px"),
2355
2751
  fontFamily: "var(--text-editor-family-code)",
2356
2752
  color: "var(--syntax-comment, #666)",
2357
2753
  textDecoration: "none",
@@ -2380,9 +2776,6 @@ var markdownStyles = (style) => ({
2380
2776
  },
2381
2777
  ".cm-folded-range": {
2382
2778
  background: "var(--text-editor-fill)"
2383
- },
2384
- ".codeblock": {
2385
- background: "orange"
2386
2779
  }
2387
2780
  });
2388
2781
  var baseHeadingStyles = {
@@ -2395,7 +2788,12 @@ var baseCodeStyles = {
2395
2788
  fontSize: "1em"
2396
2789
  };
2397
2790
  var markdownSyntaxHighlighting = (style) => HighlightStyle.define([
2398
- // this is how you ensure that codeblocks are still monospace
2791
+ // this is how you ensure that codeblocks are still monospace.
2792
+ // a node's own class *replaces* its parent's in the highlighter, so text
2793
+ // inside **bold**, *italic* and ~~struck~~ loses this one and falls back to
2794
+ // `.cm-content`, which the patchwork theme sets to the code font. those
2795
+ // rules set the body font again; inline code inside them still wins,
2796
+ // being later in this list.
2399
2797
  {
2400
2798
  tag: tags.content,
2401
2799
  fontFamily: bodyFont(style)
@@ -2403,33 +2801,33 @@ var markdownSyntaxHighlighting = (style) => HighlightStyle.define([
2403
2801
  {
2404
2802
  tag: tags.heading1,
2405
2803
  ...baseHeadingStyles,
2406
- fontSize: `var(--studio-heading-size-1, ${zoomed("1.5rem")})`,
2407
- lineHeight: zoomed("2rem"),
2408
- marginBottom: zoomed("1rem"),
2409
- marginTop: zoomed("2rem")
2804
+ fontSize: `var(--studio-heading-size-1, ${zoomed2("1.5rem")})`,
2805
+ lineHeight: zoomed2("2rem"),
2806
+ marginBottom: zoomed2("1rem"),
2807
+ marginTop: zoomed2("2rem")
2410
2808
  },
2411
2809
  {
2412
2810
  tag: tags.heading2,
2413
2811
  ...baseHeadingStyles,
2414
- fontSize: `var(--studio-heading-size-2, ${zoomed("1.5rem")})`,
2415
- lineHeight: zoomed("2rem"),
2416
- marginBottom: zoomed("1rem"),
2417
- marginTop: zoomed("2rem")
2812
+ fontSize: `var(--studio-heading-size-2, ${zoomed2("1.5rem")})`,
2813
+ lineHeight: zoomed2("2rem"),
2814
+ marginBottom: zoomed2("1rem"),
2815
+ marginTop: zoomed2("2rem")
2418
2816
  },
2419
2817
  {
2420
2818
  tag: tags.heading3,
2421
2819
  ...baseHeadingStyles,
2422
- fontSize: `var(--studio-heading-size-3, ${zoomed("1.25rem")})`,
2423
- lineHeight: zoomed("1.75rem"),
2424
- marginBottom: zoomed("1rem"),
2425
- marginTop: zoomed("2rem")
2820
+ fontSize: `var(--studio-heading-size-3, ${zoomed2("1.25rem")})`,
2821
+ lineHeight: zoomed2("1.75rem"),
2822
+ marginBottom: zoomed2("1rem"),
2823
+ marginTop: zoomed2("2rem")
2426
2824
  },
2427
2825
  {
2428
2826
  tag: tags.heading4,
2429
2827
  ...baseHeadingStyles,
2430
- fontSize: `var(--studio-heading-size-4, ${zoomed("1.1rem")})`,
2431
- marginBottom: zoomed("1rem"),
2432
- marginTop: zoomed("2rem")
2828
+ fontSize: `var(--studio-heading-size-4, ${zoomed2("1.1rem")})`,
2829
+ marginBottom: zoomed2("1rem"),
2830
+ marginTop: zoomed2("2rem")
2433
2831
  },
2434
2832
  {
2435
2833
  tag: tags.processingInstruction,
@@ -2443,14 +2841,17 @@ var markdownSyntaxHighlighting = (style) => HighlightStyle.define([
2443
2841
  { tag: tags.quote, fontStyle: "var(--syntax-style-quote, italic)" },
2444
2842
  {
2445
2843
  tag: tags.strong,
2844
+ fontFamily: bodyFont(style),
2446
2845
  fontWeight: "var(--syntax-weight-strong, bold)"
2447
2846
  },
2448
2847
  {
2449
2848
  tag: tags.emphasis,
2849
+ fontFamily: bodyFont(style),
2450
2850
  fontStyle: "var(--syntax-style-emphasis, italic)"
2451
2851
  },
2452
2852
  {
2453
2853
  tag: tags.strikethrough,
2854
+ fontFamily: bodyFont(style),
2454
2855
  textDecoration: "line-through"
2455
2856
  },
2456
2857
  {
@@ -2499,81 +2900,9 @@ var markdownSyntaxHighlighting = (style) => HighlightStyle.define([
2499
2900
  { tag: tags.monospace, ...baseCodeStyles }
2500
2901
  ]);
2501
2902
  var theme = (style) => [
2502
- EditorView4.theme(markdownStyles(style)),
2503
- syntaxHighlighting(markdownSyntaxHighlighting(style)),
2504
- bullets,
2505
- codeblocks
2903
+ EditorView5.theme(markdownStyles(style)),
2904
+ syntaxHighlighting(markdownSyntaxHighlighting(style))
2506
2905
  ];
2507
- var bullets = ViewPlugin3.fromClass(
2508
- class {
2509
- decorations;
2510
- view;
2511
- constructor(view) {
2512
- this.view = view;
2513
- this.decorations = this.build();
2514
- }
2515
- update(update) {
2516
- if (update.docChanged || update.viewportChanged) {
2517
- this.decorations = this.build();
2518
- }
2519
- }
2520
- build() {
2521
- const builder = new RangeSetBuilder3();
2522
- const doc = this.view.state.doc;
2523
- syntaxTree2(this.view.state).iterate({
2524
- enter: ({ type, from }) => {
2525
- if (type.name === "ListMark") {
2526
- const char = doc.sliceString(from, from + 1);
2527
- if (["-", "+", "*"].includes(char)) {
2528
- builder.add(
2529
- from,
2530
- from + 1,
2531
- Decoration3.replace({ widget: new BulletWidget() })
2532
- );
2533
- }
2534
- }
2535
- }
2536
- });
2537
- return builder.finish();
2538
- }
2539
- },
2540
- {
2541
- decorations: (v) => v.decorations
2542
- }
2543
- );
2544
- var BulletWidget = class extends WidgetType2 {
2545
- toDOM() {
2546
- const span = document.createElement("span");
2547
- span.className = "cm-bullet";
2548
- return span;
2549
- }
2550
- };
2551
- var codeblocks = ViewPlugin3.fromClass(
2552
- class BlockquotePlugin {
2553
- decorations = Decoration3.none;
2554
- constructor(view) {
2555
- this.buildDeco(view);
2556
- }
2557
- update(update) {
2558
- this.buildDeco(update.view);
2559
- }
2560
- buildDeco(view) {
2561
- const builder = new RangeSetBuilder3();
2562
- view.viewportLineBlocks.forEach((line) => {
2563
- const lineObj = view.state.doc.lineAt(line.from);
2564
- const match = /^>.*/g.exec(lineObj.text);
2565
- if (match && match[0]) {
2566
- builder.add(
2567
- line.from,
2568
- line.from,
2569
- Decoration3.line({ class: "codeblock" })
2570
- );
2571
- }
2572
- });
2573
- this.decorations = builder.finish();
2574
- }
2575
- }
2576
- );
2577
2906
 
2578
2907
  // src/extensions/markdown.ts
2579
2908
  function markdownExtensions() {
@@ -2581,7 +2910,7 @@ function markdownExtensions() {
2581
2910
  ...theme("sans"),
2582
2911
  indentOnInput(),
2583
2912
  markdownZoom,
2584
- keymap2.of([
2913
+ keymap3.of([
2585
2914
  ...markdownFormattingKeymap,
2586
2915
  ...defaultKeymap,
2587
2916
  ...searchKeymap,
@@ -2589,14 +2918,29 @@ function markdownExtensions() {
2589
2918
  ...completionKeymap,
2590
2919
  indentWithTab
2591
2920
  ]),
2592
- EditorView5.lineWrapping,
2921
+ EditorView6.lineWrapping,
2593
2922
  // GFM base: task lists, tables, strikethrough, autolinks.
2594
- markdown({ base: markdownLanguage, codeLanguages: languages }),
2923
+ markdown({
2924
+ base: markdownLanguage,
2925
+ codeLanguages: languages,
2926
+ extensions: [bareUrls]
2927
+ }),
2595
2928
  taskCheckboxes,
2929
+ margin,
2930
+ headings,
2596
2931
  indentUnit.of(" ")
2597
2932
  ];
2598
2933
  }
2934
+ var bareUrls = {
2935
+ props: [
2936
+ styleTags({
2937
+ URL: tags.link,
2938
+ "Link/URL Image/URL Autolink/URL LinkReference/URL": tags.url
2939
+ })
2940
+ ]
2941
+ };
2599
2942
  export {
2943
+ bareUrls,
2600
2944
  markdownExtensions
2601
2945
  };
2602
2946
  //# sourceMappingURL=markdown.js.map