@notectl/core 1.0.5 → 1.0.6

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 (63) hide show
  1. package/README.md +2 -1
  2. package/dist/chunks/{ToolbarPlugin-D5VqeBPT.mjs → ToolbarPlugin-sJTiZr-S.mjs} +2 -2
  3. package/dist/chunks/ToolbarPlugin-sJTiZr-S.mjs.map +1 -0
  4. package/dist/chunks/index-QvKiO9_4.mjs +538 -0
  5. package/dist/chunks/index-QvKiO9_4.mjs.map +1 -0
  6. package/dist/editor/EditorDOM.d.ts.map +1 -1
  7. package/dist/editor/NotectlEditor.d.ts +5 -1
  8. package/dist/editor/NotectlEditor.d.ts.map +1 -1
  9. package/dist/index.d.ts +2 -0
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/notectl-core.mjs +1846 -1712
  12. package/dist/notectl-core.mjs.map +1 -1
  13. package/dist/notectl-core.umd.js +1050 -966
  14. package/dist/notectl-core.umd.js.map +1 -1
  15. package/dist/plugins/PluginManager.d.ts +3 -1
  16. package/dist/plugins/PluginManager.d.ts.map +1 -1
  17. package/dist/plugins/code-block/CodeBlockCommands.d.ts +5 -0
  18. package/dist/plugins/code-block/CodeBlockCommands.d.ts.map +1 -0
  19. package/dist/plugins/code-block/CodeBlockKeyboardHandlers.d.ts +10 -0
  20. package/dist/plugins/code-block/CodeBlockKeyboardHandlers.d.ts.map +1 -0
  21. package/dist/plugins/code-block/CodeBlockNodeView.d.ts +1 -1
  22. package/dist/plugins/code-block/CodeBlockNodeView.d.ts.map +1 -1
  23. package/dist/plugins/code-block/CodeBlockPlugin.d.ts +3 -111
  24. package/dist/plugins/code-block/CodeBlockPlugin.d.ts.map +1 -1
  25. package/dist/plugins/code-block/CodeBlockService.d.ts +5 -0
  26. package/dist/plugins/code-block/CodeBlockService.d.ts.map +1 -0
  27. package/dist/plugins/code-block/CodeBlockTypes.d.ts +69 -0
  28. package/dist/plugins/code-block/CodeBlockTypes.d.ts.map +1 -0
  29. package/dist/plugins/code-block.mjs +1 -1
  30. package/dist/plugins/font-size/FontSizeOperations.d.ts +22 -0
  31. package/dist/plugins/font-size/FontSizeOperations.d.ts.map +1 -0
  32. package/dist/plugins/font-size/FontSizePlugin.d.ts +1 -10
  33. package/dist/plugins/font-size/FontSizePlugin.d.ts.map +1 -1
  34. package/dist/plugins/font-size/FontSizePopup.d.ts +9 -0
  35. package/dist/plugins/font-size/FontSizePopup.d.ts.map +1 -0
  36. package/dist/plugins/font-size.mjs +146 -162
  37. package/dist/plugins/font-size.mjs.map +1 -1
  38. package/dist/plugins/font.mjs +1 -1
  39. package/dist/plugins/heading.mjs +1 -1
  40. package/dist/plugins/image/ImageNodeView.d.ts.map +1 -1
  41. package/dist/plugins/image.mjs +1 -1
  42. package/dist/plugins/image.mjs.map +1 -1
  43. package/dist/plugins/print/PrintContentPreparer.d.ts +12 -0
  44. package/dist/plugins/print/PrintContentPreparer.d.ts.map +1 -0
  45. package/dist/plugins/print/PrintPlugin.d.ts +12 -0
  46. package/dist/plugins/print/PrintPlugin.d.ts.map +1 -0
  47. package/dist/plugins/print/PrintServiceImpl.d.ts +7 -0
  48. package/dist/plugins/print/PrintServiceImpl.d.ts.map +1 -0
  49. package/dist/plugins/print/PrintStyleCollector.d.ts +10 -0
  50. package/dist/plugins/print/PrintStyleCollector.d.ts.map +1 -0
  51. package/dist/plugins/print/PrintTypes.d.ts +56 -0
  52. package/dist/plugins/print/PrintTypes.d.ts.map +1 -0
  53. package/dist/plugins/table/TableControls.d.ts.map +1 -1
  54. package/dist/plugins/table/TableControlsDOM.d.ts.map +1 -1
  55. package/dist/plugins/table.mjs +13 -13
  56. package/dist/plugins/table.mjs.map +1 -1
  57. package/dist/plugins/toolbar/ToolbarPlugin.d.ts.map +1 -1
  58. package/dist/plugins/toolbar.mjs +1 -1
  59. package/dist/view/Reconciler.d.ts.map +1 -1
  60. package/package.json +1 -1
  61. package/dist/chunks/ToolbarPlugin-D5VqeBPT.mjs.map +0 -1
  62. package/dist/chunks/index-CPPb-Jah.mjs +0 -569
  63. package/dist/chunks/index-CPPb-Jah.mjs.map +0 -1
@@ -1,569 +0,0 @@
1
- import { p as t, g as e, b as o, j as n, k as r } from "./Document-CI3iCwEP.mjs";
2
- import { e as c } from "./HTMLUtils-0wvCRvJc.mjs";
3
- import { f as s } from "./NodeResolver-D68ZLXti.mjs";
4
- import { c as l } from "./NodeSpec-NZVvcCuH.mjs";
5
- import { i, a, c as d } from "./Selection-D5ZjXoB7.mjs";
6
- import { n as u } from "./TypeBrands-C09nE2qO.mjs";
7
- import { S as f } from "./Plugin-B9OZ6Y4c.mjs";
8
- import { f as g } from "./ToolbarItem-ugDymuXi.mjs";
9
- function h(t2, e2) {
10
- switch (t2.type) {
11
- case "inline":
12
- return (function(t3, e3) {
13
- switch (e3.type) {
14
- case "insertText":
15
- return (function(t4, e4) {
16
- if (t4.blockId !== e4.blockId) return t4;
17
- const o2 = e4.text.length, n2 = t4.from > e4.offset ? t4.from + o2 : t4.from, r2 = t4.to >= e4.offset ? t4.to + o2 : t4.to;
18
- return n2 === t4.from && r2 === t4.to ? t4 : { ...t4, from: n2, to: r2 };
19
- })(t3, e3);
20
- case "deleteText":
21
- return (function(t4, e4) {
22
- if (t4.blockId !== e4.blockId) return t4;
23
- const o2 = e4.to - e4.from, n2 = p(t4.from, e4.from, e4.to, o2), r2 = p(t4.to, e4.from, e4.to, o2);
24
- return n2 >= r2 ? null : n2 === t4.from && r2 === t4.to ? t4 : { ...t4, from: n2, to: r2 };
25
- })(t3, e3);
26
- case "splitBlock":
27
- return (function(t4, e4) {
28
- if (t4.blockId !== e4.blockId) return t4;
29
- if (t4.to <= e4.offset) return t4;
30
- if (t4.from >= e4.offset) return { ...t4, blockId: e4.newBlockId, from: t4.from - e4.offset, to: t4.to - e4.offset };
31
- return [{ ...t4, to: e4.offset }, { ...t4, blockId: e4.newBlockId, from: 0, to: t4.to - e4.offset }];
32
- })(t3, e3);
33
- case "mergeBlocks":
34
- return (function(t4, e4) {
35
- return t4.blockId !== e4.sourceBlockId ? t4 : { ...t4, blockId: e4.targetBlockId, from: t4.from + e4.targetLengthBefore, to: t4.to + e4.targetLengthBefore };
36
- })(t3, e3);
37
- case "removeNode":
38
- return k(t3, e3);
39
- default:
40
- return t3;
41
- }
42
- })(t2, e2);
43
- case "widget":
44
- return (function(t3, e3) {
45
- switch (e3.type) {
46
- case "insertText":
47
- return (function(t4, e4) {
48
- if (t4.blockId !== e4.blockId) return t4;
49
- const o2 = e4.text.length;
50
- return t4.offset > e4.offset || t4.offset === e4.offset && t4.side >= 1 ? { ...t4, offset: t4.offset + o2 } : t4;
51
- })(t3, e3);
52
- case "deleteText":
53
- return (function(t4, e4) {
54
- if (t4.blockId !== e4.blockId) return t4;
55
- if (t4.offset > e4.from && t4.offset < e4.to) return null;
56
- const o2 = e4.to - e4.from;
57
- return t4.offset >= e4.to ? { ...t4, offset: t4.offset - o2 } : t4;
58
- })(t3, e3);
59
- case "splitBlock":
60
- return (function(t4, e4) {
61
- return t4.blockId !== e4.blockId || t4.offset < e4.offset ? t4 : t4.offset > e4.offset ? { ...t4, blockId: e4.newBlockId, offset: t4.offset - e4.offset } : t4.side >= 1 ? { ...t4, blockId: e4.newBlockId, offset: 0 } : t4;
62
- })(t3, e3);
63
- case "mergeBlocks":
64
- return (function(t4, e4) {
65
- return t4.blockId !== e4.sourceBlockId ? t4 : { ...t4, blockId: e4.targetBlockId, offset: t4.offset + e4.targetLengthBefore };
66
- })(t3, e3);
67
- case "removeNode":
68
- return k(t3, e3);
69
- default:
70
- return t3;
71
- }
72
- })(t2, e2);
73
- case "node":
74
- return (function(t3, e3) {
75
- switch (e3.type) {
76
- case "mergeBlocks":
77
- return (function(t4, e4) {
78
- return t4.blockId === e4.sourceBlockId ? null : t4;
79
- })(t3, e3);
80
- case "removeNode":
81
- return k(t3, e3);
82
- default:
83
- return t3;
84
- }
85
- })(t2, e2);
86
- }
87
- }
88
- function k(t2, e2) {
89
- return t2.blockId === e2.removedNode.id ? null : t2;
90
- }
91
- function p(t2, e2, o2, n2) {
92
- return t2 <= e2 ? t2 : t2 >= o2 ? t2 - n2 : e2;
93
- }
94
- function b(t2, e2, o2, n2) {
95
- return { type: "inline", blockId: t2, from: e2, to: o2, attrs: n2 };
96
- }
97
- function m(t2, e2) {
98
- return { type: "node", blockId: t2, attrs: e2 };
99
- }
100
- function y(t2, e2, o2, n2) {
101
- return { type: "widget", blockId: t2, offset: e2, toDOM: o2, side: n2?.side ?? -1, key: n2?.key };
102
- }
103
- class B {
104
- constructor(t2) {
105
- this.byBlock = t2;
106
- }
107
- static empty = new B(/* @__PURE__ */ new Map());
108
- static create(t2) {
109
- if (0 === t2.length) return B.empty;
110
- const e2 = /* @__PURE__ */ new Map();
111
- for (const o2 of t2) {
112
- const t3 = e2.get(o2.blockId);
113
- t3 ? t3.push(o2) : e2.set(o2.blockId, [o2]);
114
- }
115
- return new B(e2);
116
- }
117
- find(t2) {
118
- return this.byBlock.get(t2) ?? [];
119
- }
120
- findInline(t2) {
121
- const e2 = this.byBlock.get(t2);
122
- return e2 ? e2.filter((t3) => "inline" === t3.type) : [];
123
- }
124
- findNode(t2) {
125
- const e2 = this.byBlock.get(t2);
126
- return e2 ? e2.filter((t3) => "node" === t3.type) : [];
127
- }
128
- findWidget(t2) {
129
- const e2 = this.byBlock.get(t2);
130
- return e2 ? e2.filter((t3) => "widget" === t3.type) : [];
131
- }
132
- add(t2) {
133
- if (0 === t2.length) return this;
134
- if (this.isEmpty) return B.create(t2);
135
- const e2 = /* @__PURE__ */ new Map();
136
- for (const [t3, o2] of this.byBlock) e2.set(t3, [...o2]);
137
- for (const o2 of t2) {
138
- const t3 = e2.get(o2.blockId);
139
- t3 ? t3.push(o2) : e2.set(o2.blockId, [o2]);
140
- }
141
- return new B(e2);
142
- }
143
- remove(t2) {
144
- const e2 = /* @__PURE__ */ new Map();
145
- let o2 = false;
146
- for (const [n2, r2] of this.byBlock) {
147
- const c2 = r2.filter((e3) => !t2(e3));
148
- c2.length !== r2.length && (o2 = true), c2.length > 0 && e2.set(n2, c2);
149
- }
150
- return o2 ? 0 === e2.size ? B.empty : new B(e2) : this;
151
- }
152
- merge(t2) {
153
- if (t2.isEmpty) return this;
154
- if (this.isEmpty) return t2;
155
- const e2 = /* @__PURE__ */ new Map();
156
- for (const [t3, o2] of this.byBlock) e2.set(t3, [...o2]);
157
- for (const [o2, n2] of t2.byBlock) {
158
- const t3 = e2.get(o2);
159
- t3 ? t3.push(...n2) : e2.set(o2, [...n2]);
160
- }
161
- return new B(e2);
162
- }
163
- equals(t2) {
164
- if (this === t2) return true;
165
- if (this.byBlock.size !== t2.byBlock.size) return false;
166
- for (const [e2, o2] of this.byBlock) {
167
- const n2 = t2.byBlock.get(e2);
168
- if (!n2) return false;
169
- if (!I(o2, n2)) return false;
170
- }
171
- return true;
172
- }
173
- get isEmpty() {
174
- return 0 === this.byBlock.size;
175
- }
176
- map(t2) {
177
- if (this.isEmpty || 0 === t2.steps.length) return this;
178
- let e2 = [];
179
- for (const t3 of this.byBlock.values()) for (const o2 of t3) e2.push(o2);
180
- for (const o2 of t2.steps) {
181
- const t3 = [];
182
- for (const n2 of e2) {
183
- const e3 = h(n2, o2);
184
- if (null !== e3) if (Array.isArray(e3)) for (const o3 of e3) t3.push(o3);
185
- else t3.push(e3);
186
- }
187
- e2 = t3;
188
- }
189
- return 0 === e2.length ? B.empty : B.create(e2);
190
- }
191
- }
192
- function I(t2, e2) {
193
- if (t2 === e2) return true;
194
- if (t2.length !== e2.length) return false;
195
- for (let o2 = 0; o2 < t2.length; o2++) {
196
- const n2 = t2[o2], r2 = e2[o2];
197
- if (!n2 || !r2 || !x(n2, r2)) return false;
198
- }
199
- return true;
200
- }
201
- function x(t2, e2) {
202
- if (t2.type !== e2.type) return false;
203
- if (t2.blockId !== e2.blockId) return false;
204
- switch (t2.type) {
205
- case "inline": {
206
- const o2 = e2;
207
- return t2.from === o2.from && t2.to === o2.to && w(t2.attrs, o2.attrs);
208
- }
209
- case "node": {
210
- const o2 = e2;
211
- return w(t2.attrs, o2.attrs);
212
- }
213
- case "widget": {
214
- const o2 = e2;
215
- return t2.offset === o2.offset && t2.side === o2.side && t2.key === o2.key && t2.toDOM === o2.toDOM;
216
- }
217
- }
218
- }
219
- function w(t2, e2) {
220
- if (t2 === e2) return true;
221
- const o2 = Object.keys(t2), n2 = Object.keys(e2);
222
- if (o2.length !== n2.length) return false;
223
- for (const n3 of o2) if (t2[n3] !== e2[n3]) return false;
224
- return true;
225
- }
226
- const C = { insertAfter: "Mod-Enter", toggle: "Mod-Shift-M" }, S = { defaultLanguage: "", useSpaces: false, spaceCount: 2, showCopyButton: true }, _ = new f("codeBlock");
227
- class v {
228
- id = "code-block";
229
- name = "Code Block";
230
- priority = 36;
231
- config;
232
- resolvedKeymap;
233
- context = null;
234
- constructor(t2) {
235
- this.config = { ...S, ...t2 }, this.resolvedKeymap = { ...C, ...t2?.keymap };
236
- }
237
- init(t2) {
238
- t2.registerStyleSheet("\n/* Code Block — uses theme custom properties */\n.notectl-code-block {\n position: relative;\n margin: 8px 0;\n border-radius: 6px;\n background: var(--notectl-code-block-bg);\n color: var(--notectl-code-block-color);\n font-family: 'SF Mono', 'Fira Code', 'Cascadia Code', Menlo, Consolas, monospace;\n font-size: 14px;\n line-height: 1.5;\n overflow: hidden;\n}\n\n.notectl-code-block__header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 6px 12px;\n background: var(--notectl-code-block-header-bg);\n border-bottom: 1px solid var(--notectl-code-block-header-border);\n font-size: 12px;\n color: var(--notectl-code-block-header-color);\n user-select: none;\n}\n\n.notectl-code-block__language {\n font-weight: 500;\n letter-spacing: 0.02em;\n}\n\n.notectl-code-block__copy {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n border: none;\n border-radius: 4px;\n background: transparent;\n color: var(--notectl-code-block-header-color);\n cursor: pointer;\n padding: 0;\n transition: background 0.15s, color 0.15s;\n}\n\n.notectl-code-block__copy:hover {\n background: rgba(128, 128, 128, 0.15);\n color: var(--notectl-code-block-color);\n}\n\n.notectl-code-block__copy svg {\n fill: currentColor;\n}\n\n.notectl-code-block__content {\n display: block;\n padding: 12px 16px;\n white-space: pre-wrap;\n word-wrap: break-word;\n tab-size: 4;\n -moz-tab-size: 4;\n outline: none;\n min-height: 1.5em;\n}\n\n.notectl-code-block--selected {\n outline: 2px solid var(--notectl-primary);\n outline-offset: 2px;\n}\n\n.notectl-code-block__esc-hint {\n display: none;\n position: absolute;\n bottom: 4px;\n right: 8px;\n font-size: 11px;\n color: var(--notectl-code-block-header-color);\n opacity: 0.5;\n pointer-events: none;\n user-select: none;\n font-family: system-ui, sans-serif;\n}\n\n.notectl-code-block--focused .notectl-code-block__esc-hint {\n display: block;\n}\n"), this.context = t2, this.registerNodeSpec(t2), this.registerNodeView(t2), this.registerCommands(t2), this.registerKeymaps(t2), this.registerInputRule(t2), this.registerToolbarItem(t2), this.registerMiddleware(t2), this.registerService(t2), this.patchTableCellContent(t2);
239
- }
240
- destroy() {
241
- this.context = null;
242
- }
243
- onStateChange(t2, e2, o2) {
244
- if (!this.context) return;
245
- const n2 = i(t2.selection) ? null : t2.selection.anchor.blockId, r2 = i(e2.selection) ? null : e2.selection.anchor.blockId, c2 = n2 ? t2.getBlock(n2) : void 0, s2 = r2 ? e2.getBlock(r2) : void 0, l2 = "code_block" === c2?.type, a2 = "code_block" === s2?.type;
246
- l2 && n2 && this.setBlockFocused(n2, false), a2 && r2 && this.setBlockFocused(r2, true), !l2 && a2 ? this.context.announce("Entered code block. Press Escape to exit.") : l2 && !a2 && this.context.announce("Left code block.");
247
- }
248
- decorations(e2) {
249
- if (!this.config.highlighter) return B.empty;
250
- const o2 = [], n2 = this.config.highlighter;
251
- for (const r2 of e2.getBlockOrder()) {
252
- const c2 = e2.getBlock(r2);
253
- if (!c2 || "code_block" !== c2.type) continue;
254
- const s2 = c2.attrs?.language ?? "";
255
- if (!s2) continue;
256
- const l2 = t(c2);
257
- if (!l2) continue;
258
- const i2 = n2.tokenize(l2, s2);
259
- for (const t2 of i2) o2.push(b(r2, t2.from, t2.to, { class: `notectl-token--${t2.type}` }));
260
- }
261
- return B.create(o2);
262
- }
263
- registerNodeSpec(t2) {
264
- t2.registerNodeSpec({ type: "code_block", group: "block", content: { allow: ["text"] }, selectable: true, attrs: { language: { default: "" }, backgroundColor: { default: "" } }, toDOM(t3) {
265
- const e2 = l("pre", t3.id);
266
- e2.className = "notectl-code-block";
267
- const o2 = document.createElement("code");
268
- return o2.className = "notectl-code-block__content", e2.appendChild(o2), e2;
269
- }, toHTML(t3, e2) {
270
- const o2 = c(t3.attrs?.language ?? ""), n2 = c(t3.attrs?.backgroundColor ?? "");
271
- return `<pre${n2 ? ` style="background-color: ${n2}"` : ""}><code${o2 ? ` data-language="${o2}"` : ""}>${e2 || ""}</code></pre>`;
272
- }, parseHTML: [{ tag: "pre", getAttrs(t3) {
273
- const e2 = t3.querySelector("code"), o2 = e2?.className.match(/language-(\S+)/)?.[1] ?? "";
274
- return { language: (e2?.getAttribute("data-language") ?? "") || o2 };
275
- } }], sanitize: { tags: ["pre", "code"], attrs: ["data-language", "class", "style"] } });
276
- }
277
- registerNodeView(e2) {
278
- var o2;
279
- e2.registerNodeView("code_block", (o2 = this.config, (e3, n2, r2) => {
280
- const c2 = document.createElement("pre");
281
- c2.className = "notectl-code-block", c2.setAttribute("data-block-id", e3.id), c2.setAttribute("role", "group"), c2.setAttribute("aria-roledescription", "code block");
282
- const s2 = document.createElement("div");
283
- s2.className = "notectl-code-block__header", s2.setAttribute("contenteditable", "false");
284
- const l2 = document.createElement("span");
285
- l2.className = "notectl-code-block__language";
286
- let i2 = null;
287
- false !== o2.showCopyButton && (i2 = document.createElement("button"), i2.className = "notectl-code-block__copy", i2.setAttribute("aria-label", "Copy code"), i2.type = "button", i2.innerHTML = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="14" height="14"><path d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z"/></svg>');
288
- const a2 = document.createElement("span");
289
- a2.className = "notectl-sr-only", a2.setAttribute("aria-live", "assertive"), a2.setAttribute("aria-atomic", "true"), s2.appendChild(l2), i2 && s2.appendChild(i2), s2.appendChild(a2);
290
- const d2 = document.createElement("code");
291
- d2.className = "notectl-code-block__content";
292
- const u2 = document.createElement("div");
293
- u2.className = "notectl-code-block__esc-hint", u2.setAttribute("contenteditable", "false"), u2.setAttribute("aria-hidden", "true"), u2.textContent = "Esc to exit", c2.appendChild(s2), c2.appendChild(d2), c2.appendChild(u2), o2.background && c2.style.setProperty("--notectl-code-block-bg", o2.background), o2.headerBackground && c2.style.setProperty("--notectl-code-block-header-bg", o2.headerBackground), o2.textColor && c2.style.setProperty("--notectl-code-block-color", o2.textColor), o2.headerColor && c2.style.setProperty("--notectl-code-block-header-color", o2.headerColor);
294
- let f2 = e3.id;
295
- function g2(t2) {
296
- const e4 = t2.attrs?.language ?? "", o3 = e4 || "plain";
297
- l2.textContent = o3, c2.setAttribute("aria-label", `${o3} code block. Press Escape to exit.`), e4 ? d2.setAttribute("data-language", e4) : d2.removeAttribute("data-language");
298
- const n3 = t2.attrs?.backgroundColor ?? "";
299
- c2.style.backgroundColor = n3 || "";
300
- }
301
- return g2(e3), i2 && i2.addEventListener("click", (e4) => {
302
- e4.preventDefault(), e4.stopPropagation();
303
- const o3 = n2().getBlock(f2);
304
- if (!o3) return;
305
- const r3 = t(o3);
306
- navigator.clipboard.writeText(r3), a2.textContent = "Copied to clipboard", setTimeout(() => {
307
- a2.textContent = "";
308
- }, 1e3);
309
- }), { dom: c2, contentDOM: d2, update: (t2) => "code_block" === t2.type && (f2 = t2.id, c2.setAttribute("data-block-id", t2.id), g2(t2), true), selectNode() {
310
- c2.classList.add("notectl-code-block--selected");
311
- }, deselectNode() {
312
- c2.classList.remove("notectl-code-block--selected");
313
- }, destroy() {
314
- } };
315
- }));
316
- }
317
- registerCommands(t2) {
318
- t2.registerCommand("toggleCodeBlock", () => this.toggleCodeBlock(t2)), t2.registerCommand("insertCodeBlock", () => this.insertCodeBlock(t2)), t2.registerCommand("setCodeBlockLanguage", () => false), t2.registerCommand("setCodeBlockBackground", () => false), t2.registerCommand("exitCodeBlock", () => this.handleEscape(t2));
319
- }
320
- registerKeymaps(t2) {
321
- const e2 = { Enter: () => this.handleEnter(t2), Backspace: () => this.handleBackspace(t2), Tab: () => this.handleTab(t2), "Shift-Tab": () => this.handleShiftTab(t2), Escape: () => this.handleEscape(t2), ArrowDown: () => this.handleArrowDown(t2), ArrowUp: () => this.handleArrowUp(t2), ArrowRight: () => this.handleArrowRight(t2), ArrowLeft: () => this.handleArrowLeft(t2) }, { insertAfter: o2, toggle: n2 } = this.resolvedKeymap;
322
- o2 && (e2[o2] = () => this.handleModEnter(t2)), n2 && (e2[n2] = () => t2.executeCommand("toggleCodeBlock")), t2.registerKeymap(e2);
323
- }
324
- registerInputRule(t2) {
325
- t2.registerInputRule({ pattern: /^```(\w*) $/, handler: (t3, e2, o2, n2) => {
326
- const r2 = t3.selection;
327
- if (i(r2)) return null;
328
- if (!a(r2)) return null;
329
- const c2 = t3.getBlock(r2.anchor.blockId);
330
- if (!c2 || "paragraph" !== c2.type) return null;
331
- const s2 = { language: e2[1] ?? "", backgroundColor: "" };
332
- return t3.transaction("input").deleteTextAt(r2.anchor.blockId, o2, o2 + e2[0].length).setBlockType(r2.anchor.blockId, u("code_block"), s2).setSelection(d(r2.anchor.blockId, 0)).build();
333
- } });
334
- }
335
- registerToolbarItem(t2) {
336
- t2.registerToolbarItem({ id: "code_block", group: "block", icon: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.4 16.6L4.8 12l4.6-4.6L8 6l-6 6 6 6 1.4-1.4zm5.2 0l4.6-4.6-4.6-4.6L16 6l6 6-6 6-1.4-1.4z"/></svg>', label: "Code Block", tooltip: this.resolvedKeymap.toggle ? `Code Block (${g(this.resolvedKeymap.toggle)})` : "Code Block", command: "toggleCodeBlock", priority: 56, separatorAfter: this.config.separatorAfter, isActive: (t3) => {
337
- if (i(t3.selection)) return false;
338
- const e2 = t3.getBlock(t3.selection.anchor.blockId);
339
- return "code_block" === e2?.type;
340
- } });
341
- }
342
- registerMiddleware(t2) {
343
- t2.registerMiddleware((t3, e2, o2) => {
344
- if (!t3.steps.some((t4) => {
345
- if ("addMark" !== t4.type) return false;
346
- const o3 = e2.getBlock(t4.blockId);
347
- return "code_block" === o3?.type;
348
- })) return void o2(t3);
349
- const n2 = t3.steps.filter((t4) => {
350
- if ("addMark" !== t4.type) return true;
351
- const o3 = e2.getBlock(t4.blockId);
352
- return "code_block" !== o3?.type;
353
- });
354
- o2({ ...t3, steps: n2 });
355
- }, 50);
356
- }
357
- registerService(t2) {
358
- const e2 = this;
359
- t2.registerService(_, { setLanguage(o2, n2) {
360
- e2.setAttr(t2, o2, "language", n2);
361
- }, getLanguage(t3) {
362
- const o2 = e2.context;
363
- if (!o2) return "";
364
- const n2 = o2.getState().getBlock(t3);
365
- return n2 && "code_block" === n2.type ? n2.attrs?.language ?? "" : "";
366
- }, setBackground(o2, n2) {
367
- e2.setAttr(t2, o2, "backgroundColor", n2);
368
- }, getBackground(t3) {
369
- const o2 = e2.context;
370
- if (!o2) return "";
371
- const n2 = o2.getState().getBlock(t3);
372
- return n2 && "code_block" === n2.type ? n2.attrs?.backgroundColor ?? "" : "";
373
- }, isCodeBlock(t3) {
374
- const o2 = e2.context;
375
- if (!o2) return false;
376
- const n2 = o2.getState().getBlock(t3);
377
- return "code_block" === n2?.type;
378
- }, getSupportedLanguages: () => e2.config.highlighter ? e2.config.highlighter.getSupportedLanguages() : [] });
379
- }
380
- patchTableCellContent(t2) {
381
- const e2 = t2.getSchemaRegistry(), o2 = e2.getNodeSpec("table_cell");
382
- if (!o2?.content) return;
383
- const n2 = o2.content.allow ?? [];
384
- n2.includes("code_block") || (e2.removeNodeSpec("table_cell"), e2.registerNodeSpec({ ...o2, content: { ...o2.content, allow: [...n2, "code_block"] } }));
385
- }
386
- handleBackspace(t2) {
387
- const e2 = t2.getState(), o2 = e2.selection;
388
- if (i(o2)) return false;
389
- if (!a(o2)) return false;
390
- const n2 = e2.getBlock(o2.anchor.blockId);
391
- if (!n2 || "code_block" !== n2.type) return false;
392
- if (0 !== o2.anchor.offset) return false;
393
- const r2 = e2.transaction("input").setBlockType(o2.anchor.blockId, u("paragraph")).setSelection(o2).build();
394
- return t2.dispatch(r2), true;
395
- }
396
- handleEnter(e2) {
397
- const o2 = e2.getState(), n2 = o2.selection;
398
- if (i(n2)) return false;
399
- if (!a(n2)) return false;
400
- const r2 = o2.getBlock(n2.anchor.blockId);
401
- if (!r2 || "code_block" !== r2.type) return false;
402
- const c2 = t(r2), s2 = n2.anchor.offset;
403
- if (c2.endsWith("\n") && s2 === c2.length) return this.exitOnDoubleEnter(e2, n2.anchor.blockId, c2);
404
- const l2 = o2.transaction("input").insertText(n2.anchor.blockId, s2, "\n", []).setSelection(d(n2.anchor.blockId, s2 + 1)).build();
405
- return e2.dispatch(l2), true;
406
- }
407
- handleTab(t2) {
408
- const e2 = t2.getState(), o2 = e2.selection;
409
- if (i(o2)) return false;
410
- const n2 = e2.getBlock(o2.anchor.blockId);
411
- if (!n2 || "code_block" !== n2.type) return false;
412
- const r2 = this.config.useSpaces ? " ".repeat(this.config.spaceCount ?? 2) : " ", c2 = o2.anchor.offset, s2 = e2.transaction("input").insertText(o2.anchor.blockId, c2, r2, []).setSelection(d(o2.anchor.blockId, c2 + r2.length)).build();
413
- return t2.dispatch(s2), true;
414
- }
415
- handleShiftTab(e2) {
416
- const o2 = e2.getState(), n2 = o2.selection;
417
- if (i(n2)) return false;
418
- const r2 = o2.getBlock(n2.anchor.blockId);
419
- if (!r2 || "code_block" !== r2.type) return false;
420
- const c2 = t(r2), s2 = n2.anchor.offset, l2 = c2.lastIndexOf("\n", s2 - 1) + 1;
421
- if (this.config.useSpaces) {
422
- const t2 = this.config.spaceCount ?? 2;
423
- if (c2.slice(l2, l2 + t2) === " ".repeat(t2)) {
424
- const r3 = o2.transaction("input").deleteTextAt(n2.anchor.blockId, l2, l2 + t2).setSelection(d(n2.anchor.blockId, Math.max(l2, s2 - t2))).build();
425
- return e2.dispatch(r3), true;
426
- }
427
- } else if (" " === c2[l2]) {
428
- const t2 = o2.transaction("input").deleteTextAt(n2.anchor.blockId, l2, l2 + 1).setSelection(d(n2.anchor.blockId, Math.max(l2, s2 - 1))).build();
429
- return e2.dispatch(t2), true;
430
- }
431
- return true;
432
- }
433
- handleEscape(t2) {
434
- const e2 = t2.getState(), o2 = e2.selection;
435
- if (i(o2)) return false;
436
- const n2 = e2.getBlock(o2.anchor.blockId);
437
- if (!n2 || "code_block" !== n2.type) return false;
438
- const r2 = e2.getBlockOrder(), c2 = r2.indexOf(o2.anchor.blockId);
439
- if (c2 < r2.length - 1) {
440
- const o3 = r2[c2 + 1], n3 = e2.transaction("command").setSelection(d(o3, 0)).build();
441
- t2.dispatch(n3);
442
- } else this.insertParagraphAfter(t2, o2.anchor.blockId);
443
- return true;
444
- }
445
- handleArrowDown(e2) {
446
- const o2 = e2.getState(), n2 = o2.selection;
447
- if (i(n2)) return false;
448
- if (!a(n2)) return false;
449
- const r2 = o2.getBlock(n2.anchor.blockId);
450
- if (!r2 || "code_block" !== r2.type) return false;
451
- const c2 = t(r2), s2 = n2.anchor.offset;
452
- if (-1 !== c2.indexOf("\n", s2)) return false;
453
- const l2 = o2.getBlockOrder(), u2 = l2.indexOf(n2.anchor.blockId);
454
- if (u2 < l2.length - 1) {
455
- const t2 = l2[u2 + 1], n3 = o2.transaction("command").setSelection(d(t2, 0)).build();
456
- e2.dispatch(n3);
457
- } else this.insertParagraphAfter(e2, n2.anchor.blockId);
458
- return true;
459
- }
460
- handleArrowUp(o2) {
461
- const n2 = o2.getState(), r2 = n2.selection;
462
- if (i(r2)) return false;
463
- if (!a(r2)) return false;
464
- const c2 = n2.getBlock(r2.anchor.blockId);
465
- if (!c2 || "code_block" !== c2.type) return false;
466
- const s2 = t(c2), l2 = r2.anchor.offset, u2 = s2.indexOf("\n");
467
- if (-1 !== u2 && l2 > u2) return false;
468
- const f2 = n2.getBlockOrder(), g2 = f2.indexOf(r2.anchor.blockId);
469
- if (g2 > 0) {
470
- const t2 = f2[g2 - 1], r3 = n2.getBlock(t2), c3 = r3 ? e(r3) : 0, s3 = n2.transaction("command").setSelection(d(t2, c3)).build();
471
- return o2.dispatch(s3), true;
472
- }
473
- return false;
474
- }
475
- handleArrowRight(e2) {
476
- const o2 = e2.getState(), n2 = o2.selection;
477
- if (i(n2)) return false;
478
- if (!a(n2)) return false;
479
- const r2 = o2.getBlock(n2.anchor.blockId);
480
- if (!r2 || "code_block" !== r2.type) return false;
481
- const c2 = t(r2);
482
- if (n2.anchor.offset !== c2.length) return false;
483
- const s2 = o2.getBlockOrder(), l2 = s2.indexOf(n2.anchor.blockId);
484
- if (l2 < s2.length - 1) {
485
- const t2 = s2[l2 + 1], n3 = o2.transaction("command").setSelection(d(t2, 0)).build();
486
- e2.dispatch(n3);
487
- } else this.insertParagraphAfter(e2, n2.anchor.blockId);
488
- return true;
489
- }
490
- handleArrowLeft(t2) {
491
- const o2 = t2.getState(), n2 = o2.selection;
492
- if (i(n2)) return false;
493
- if (!a(n2)) return false;
494
- const r2 = o2.getBlock(n2.anchor.blockId);
495
- if (!r2 || "code_block" !== r2.type) return false;
496
- if (0 !== n2.anchor.offset) return false;
497
- const c2 = o2.getBlockOrder(), s2 = c2.indexOf(n2.anchor.blockId);
498
- if (s2 > 0) {
499
- const n3 = c2[s2 - 1], r3 = o2.getBlock(n3), l2 = r3 ? e(r3) : 0, i2 = o2.transaction("command").setSelection(d(n3, l2)).build();
500
- return t2.dispatch(i2), true;
501
- }
502
- return false;
503
- }
504
- handleModEnter(t2) {
505
- const e2 = t2.getState(), o2 = e2.selection;
506
- if (i(o2)) return false;
507
- const n2 = e2.getBlock(o2.anchor.blockId);
508
- return !(!n2 || "code_block" !== n2.type || (this.insertParagraphAfter(t2, o2.anchor.blockId), 0));
509
- }
510
- setBlockFocused(t2, e2) {
511
- if (!this.context) return;
512
- const o2 = this.context.getContainer().querySelector(`[data-block-id="${t2}"]`);
513
- o2 && o2.classList.toggle("notectl-code-block--focused", e2);
514
- }
515
- toggleCodeBlock(t2) {
516
- const e2 = t2.getState();
517
- if (i(e2.selection)) return false;
518
- const o2 = e2.getBlock(e2.selection.anchor.blockId);
519
- if (!o2) return false;
520
- if ("code_block" === o2.type) {
521
- const o3 = e2.transaction("command").setBlockType(e2.selection.anchor.blockId, u("paragraph")).setSelection(e2.selection).build();
522
- return t2.dispatch(o3), true;
523
- }
524
- return this.insertCodeBlock(t2);
525
- }
526
- insertCodeBlock(t2) {
527
- const e2 = t2.getState(), o2 = e2.selection;
528
- if (i(o2)) return false;
529
- const n2 = e2.getBlock(o2.anchor.blockId);
530
- if (!n2 || "code_block" === n2.type) return false;
531
- const r2 = { language: this.config.defaultLanguage ?? "", backgroundColor: "" }, c2 = e2.transaction("command");
532
- return this.stripAllMarks(c2, n2), c2.setBlockType(o2.anchor.blockId, u("code_block"), r2).setSelection(d(o2.anchor.blockId, 0)), t2.dispatch(c2.build()), true;
533
- }
534
- exitOnDoubleEnter(t2, e2, n2) {
535
- const r2 = t2.getState(), c2 = n2.length - 1, s2 = o(), l2 = r2.transaction("input").deleteTextAt(e2, c2, n2.length).splitBlock(e2, c2, s2).setBlockType(s2, u("paragraph")).setSelection(d(s2, 0)).build();
536
- return t2.dispatch(l2), true;
537
- }
538
- insertParagraphAfter(t2, n2) {
539
- const r2 = t2.getState(), c2 = e(r2.getBlock(n2)), s2 = o(), l2 = r2.transaction("command").splitBlock(n2, c2, s2).setBlockType(s2, u("paragraph")).setSelection(d(s2, 0)).build();
540
- t2.dispatch(l2);
541
- }
542
- setAttr(t2, e2, o2, n2) {
543
- const r2 = t2.getState(), c2 = r2.getBlock(e2);
544
- if (!c2 || "code_block" !== c2.type) return;
545
- const l2 = s(r2.doc, e2);
546
- if (!l2) return;
547
- const i2 = { ...c2.attrs, [o2]: n2 }, a2 = r2.transaction("command").setNodeAttr(l2, i2).build();
548
- t2.dispatch(a2);
549
- }
550
- stripAllMarks(t2, o2) {
551
- if (0 === e(o2)) return;
552
- const c2 = n(o2);
553
- let s2 = 0;
554
- for (const e2 of c2) if (r(e2)) {
555
- if (e2.text.length > 0) for (const n2 of e2.marks) t2.removeMark(o2.id, s2, s2 + e2.text.length, n2);
556
- s2 += e2.text.length;
557
- } else s2 += 1;
558
- }
559
- }
560
- export {
561
- _ as C,
562
- B as D,
563
- v as a,
564
- I as d,
565
- b as i,
566
- m as n,
567
- y as w
568
- };
569
- //# sourceMappingURL=index-CPPb-Jah.mjs.map