@doxi/core 0.11.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 (317) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +81 -0
  3. package/dist/collab/port.d.ts +46 -0
  4. package/dist/collab/port.d.ts.map +1 -0
  5. package/dist/collab/port.js +11 -0
  6. package/dist/collab/port.js.map +1 -0
  7. package/dist/commands/block-commands.d.ts +62 -0
  8. package/dist/commands/block-commands.d.ts.map +1 -0
  9. package/dist/commands/block-commands.js +208 -0
  10. package/dist/commands/block-commands.js.map +1 -0
  11. package/dist/commands/command.d.ts +13 -0
  12. package/dist/commands/command.d.ts.map +1 -0
  13. package/dist/commands/command.js +13 -0
  14. package/dist/commands/command.js.map +1 -0
  15. package/dist/commands/edit-commands.d.ts +5 -0
  16. package/dist/commands/edit-commands.d.ts.map +1 -0
  17. package/dist/commands/edit-commands.js +147 -0
  18. package/dist/commands/edit-commands.js.map +1 -0
  19. package/dist/commands/image-commands.d.ts +31 -0
  20. package/dist/commands/image-commands.d.ts.map +1 -0
  21. package/dist/commands/image-commands.js +130 -0
  22. package/dist/commands/image-commands.js.map +1 -0
  23. package/dist/commands/index.d.ts +11 -0
  24. package/dist/commands/index.d.ts.map +1 -0
  25. package/dist/commands/index.js +11 -0
  26. package/dist/commands/index.js.map +1 -0
  27. package/dist/commands/keymap.d.ts +34 -0
  28. package/dist/commands/keymap.d.ts.map +1 -0
  29. package/dist/commands/keymap.js +84 -0
  30. package/dist/commands/keymap.js.map +1 -0
  31. package/dist/commands/link-commands.d.ts +54 -0
  32. package/dist/commands/link-commands.d.ts.map +1 -0
  33. package/dist/commands/link-commands.js +151 -0
  34. package/dist/commands/link-commands.js.map +1 -0
  35. package/dist/commands/list-commands.d.ts +42 -0
  36. package/dist/commands/list-commands.d.ts.map +1 -0
  37. package/dist/commands/list-commands.js +316 -0
  38. package/dist/commands/list-commands.js.map +1 -0
  39. package/dist/commands/mark-commands.d.ts +53 -0
  40. package/dist/commands/mark-commands.d.ts.map +1 -0
  41. package/dist/commands/mark-commands.js +181 -0
  42. package/dist/commands/mark-commands.js.map +1 -0
  43. package/dist/commands/selection-commands.d.ts +3 -0
  44. package/dist/commands/selection-commands.d.ts.map +1 -0
  45. package/dist/commands/selection-commands.js +11 -0
  46. package/dist/commands/selection-commands.js.map +1 -0
  47. package/dist/commands/table-commands.d.ts +109 -0
  48. package/dist/commands/table-commands.d.ts.map +1 -0
  49. package/dist/commands/table-commands.js +884 -0
  50. package/dist/commands/table-commands.js.map +1 -0
  51. package/dist/history/history.d.ts +40 -0
  52. package/dist/history/history.d.ts.map +1 -0
  53. package/dist/history/history.js +139 -0
  54. package/dist/history/history.js.map +1 -0
  55. package/dist/history/index.d.ts +2 -0
  56. package/dist/history/index.d.ts.map +1 -0
  57. package/dist/history/index.js +2 -0
  58. package/dist/history/index.js.map +1 -0
  59. package/dist/html/index.d.ts +3 -0
  60. package/dist/html/index.d.ts.map +1 -0
  61. package/dist/html/index.js +3 -0
  62. package/dist/html/index.js.map +1 -0
  63. package/dist/html/parse.d.ts +4 -0
  64. package/dist/html/parse.d.ts.map +1 -0
  65. package/dist/html/parse.js +0 -0
  66. package/dist/html/parse.js.map +1 -0
  67. package/dist/html/serialize.d.ts +4 -0
  68. package/dist/html/serialize.d.ts.map +1 -0
  69. package/dist/html/serialize.js +75 -0
  70. package/dist/html/serialize.js.map +1 -0
  71. package/dist/index.d.ts +13 -0
  72. package/dist/index.d.ts.map +1 -0
  73. package/dist/index.js +13 -0
  74. package/dist/index.js.map +1 -0
  75. package/dist/layout/index.d.ts +6 -0
  76. package/dist/layout/index.d.ts.map +1 -0
  77. package/dist/layout/index.js +6 -0
  78. package/dist/layout/index.js.map +1 -0
  79. package/dist/layout/layout-engine.d.ts +20 -0
  80. package/dist/layout/layout-engine.d.ts.map +1 -0
  81. package/dist/layout/layout-engine.js +198 -0
  82. package/dist/layout/layout-engine.js.map +1 -0
  83. package/dist/layout/measure.d.ts +9 -0
  84. package/dist/layout/measure.d.ts.map +1 -0
  85. package/dist/layout/measure.js +37 -0
  86. package/dist/layout/measure.js.map +1 -0
  87. package/dist/layout/split-paragraph.d.ts +28 -0
  88. package/dist/layout/split-paragraph.d.ts.map +1 -0
  89. package/dist/layout/split-paragraph.js +122 -0
  90. package/dist/layout/split-paragraph.js.map +1 -0
  91. package/dist/layout/split-table.d.ts +46 -0
  92. package/dist/layout/split-table.d.ts.map +1 -0
  93. package/dist/layout/split-table.js +84 -0
  94. package/dist/layout/split-table.js.map +1 -0
  95. package/dist/layout/types.d.ts +73 -0
  96. package/dist/layout/types.d.ts.map +1 -0
  97. package/dist/layout/types.js +36 -0
  98. package/dist/layout/types.js.map +1 -0
  99. package/dist/layout/widow-orphan.d.ts +15 -0
  100. package/dist/layout/widow-orphan.d.ts.map +1 -0
  101. package/dist/layout/widow-orphan.js +14 -0
  102. package/dist/layout/widow-orphan.js.map +1 -0
  103. package/dist/model/content-expr.d.ts +32 -0
  104. package/dist/model/content-expr.d.ts.map +1 -0
  105. package/dist/model/content-expr.js +106 -0
  106. package/dist/model/content-expr.js.map +1 -0
  107. package/dist/model/fragment.d.ts +17 -0
  108. package/dist/model/fragment.d.ts.map +1 -0
  109. package/dist/model/fragment.js +44 -0
  110. package/dist/model/fragment.js.map +1 -0
  111. package/dist/model/index.d.ts +10 -0
  112. package/dist/model/index.d.ts.map +1 -0
  113. package/dist/model/index.js +10 -0
  114. package/dist/model/index.js.map +1 -0
  115. package/dist/model/mark.d.ts +35 -0
  116. package/dist/model/mark.d.ts.map +1 -0
  117. package/dist/model/mark.js +89 -0
  118. package/dist/model/mark.js.map +1 -0
  119. package/dist/model/node-type.d.ts +36 -0
  120. package/dist/model/node-type.d.ts.map +1 -0
  121. package/dist/model/node-type.js +14 -0
  122. package/dist/model/node-type.js.map +1 -0
  123. package/dist/model/node.d.ts +36 -0
  124. package/dist/model/node.d.ts.map +1 -0
  125. package/dist/model/node.js +192 -0
  126. package/dist/model/node.js.map +1 -0
  127. package/dist/model/position.d.ts +66 -0
  128. package/dist/model/position.d.ts.map +1 -0
  129. package/dist/model/position.js +158 -0
  130. package/dist/model/position.js.map +1 -0
  131. package/dist/model/schema.d.ts +28 -0
  132. package/dist/model/schema.d.ts.map +1 -0
  133. package/dist/model/schema.js +195 -0
  134. package/dist/model/schema.js.map +1 -0
  135. package/dist/model/slice.d.ts +26 -0
  136. package/dist/model/slice.d.ts.map +1 -0
  137. package/dist/model/slice.js +56 -0
  138. package/dist/model/slice.js.map +1 -0
  139. package/dist/model/table-grid.d.ts +71 -0
  140. package/dist/model/table-grid.d.ts.map +1 -0
  141. package/dist/model/table-grid.js +130 -0
  142. package/dist/model/table-grid.js.map +1 -0
  143. package/dist/plugin/index.d.ts +3 -0
  144. package/dist/plugin/index.d.ts.map +1 -0
  145. package/dist/plugin/index.js +3 -0
  146. package/dist/plugin/index.js.map +1 -0
  147. package/dist/plugin/plugin-key.d.ts +13 -0
  148. package/dist/plugin/plugin-key.d.ts.map +1 -0
  149. package/dist/plugin/plugin-key.js +13 -0
  150. package/dist/plugin/plugin-key.js.map +1 -0
  151. package/dist/plugin/plugin-state.d.ts +2 -0
  152. package/dist/plugin/plugin-state.d.ts.map +1 -0
  153. package/dist/plugin/plugin-state.js +3 -0
  154. package/dist/plugin/plugin-state.js.map +1 -0
  155. package/dist/plugin/plugin.d.ts +39 -0
  156. package/dist/plugin/plugin.d.ts.map +1 -0
  157. package/dist/plugin/plugin.js +10 -0
  158. package/dist/plugin/plugin.js.map +1 -0
  159. package/dist/schema/default.d.ts +163 -0
  160. package/dist/schema/default.d.ts.map +1 -0
  161. package/dist/schema/default.js +94 -0
  162. package/dist/schema/default.js.map +1 -0
  163. package/dist/schema/index.d.ts +2 -0
  164. package/dist/schema/index.d.ts.map +1 -0
  165. package/dist/schema/index.js +2 -0
  166. package/dist/schema/index.js.map +1 -0
  167. package/dist/serialize/index.d.ts +2 -0
  168. package/dist/serialize/index.d.ts.map +1 -0
  169. package/dist/serialize/index.js +2 -0
  170. package/dist/serialize/index.js.map +1 -0
  171. package/dist/serialize/json.d.ts +15 -0
  172. package/dist/serialize/json.d.ts.map +1 -0
  173. package/dist/serialize/json.js +23 -0
  174. package/dist/serialize/json.js.map +1 -0
  175. package/dist/state/all-selection.d.ts +11 -0
  176. package/dist/state/all-selection.d.ts.map +1 -0
  177. package/dist/state/all-selection.js +17 -0
  178. package/dist/state/all-selection.js.map +1 -0
  179. package/dist/state/cell-selection.d.ts +30 -0
  180. package/dist/state/cell-selection.d.ts.map +1 -0
  181. package/dist/state/cell-selection.js +38 -0
  182. package/dist/state/cell-selection.js.map +1 -0
  183. package/dist/state/editor-state.d.ts +46 -0
  184. package/dist/state/editor-state.d.ts.map +1 -0
  185. package/dist/state/editor-state.js +211 -0
  186. package/dist/state/editor-state.js.map +1 -0
  187. package/dist/state/index.d.ts +7 -0
  188. package/dist/state/index.d.ts.map +1 -0
  189. package/dist/state/index.js +7 -0
  190. package/dist/state/index.js.map +1 -0
  191. package/dist/state/node-selection.d.ts +16 -0
  192. package/dist/state/node-selection.d.ts.map +1 -0
  193. package/dist/state/node-selection.js +51 -0
  194. package/dist/state/node-selection.js.map +1 -0
  195. package/dist/state/selection.d.ts +29 -0
  196. package/dist/state/selection.d.ts.map +1 -0
  197. package/dist/state/selection.js +24 -0
  198. package/dist/state/selection.js.map +1 -0
  199. package/dist/state/text-selection.d.ts +10 -0
  200. package/dist/state/text-selection.d.ts.map +1 -0
  201. package/dist/state/text-selection.js +26 -0
  202. package/dist/state/text-selection.js.map +1 -0
  203. package/dist/transform/attr-step.d.ts +16 -0
  204. package/dist/transform/attr-step.d.ts.map +1 -0
  205. package/dist/transform/attr-step.js +98 -0
  206. package/dist/transform/attr-step.js.map +1 -0
  207. package/dist/transform/index.d.ts +10 -0
  208. package/dist/transform/index.d.ts.map +1 -0
  209. package/dist/transform/index.js +10 -0
  210. package/dist/transform/index.js.map +1 -0
  211. package/dist/transform/mapping.d.ts +44 -0
  212. package/dist/transform/mapping.d.ts.map +1 -0
  213. package/dist/transform/mapping.js +101 -0
  214. package/dist/transform/mapping.js.map +1 -0
  215. package/dist/transform/mark-step.d.ts +27 -0
  216. package/dist/transform/mark-step.d.ts.map +1 -0
  217. package/dist/transform/mark-step.js +146 -0
  218. package/dist/transform/mark-step.js.map +1 -0
  219. package/dist/transform/replace-around-step.d.ts +35 -0
  220. package/dist/transform/replace-around-step.d.ts.map +1 -0
  221. package/dist/transform/replace-around-step.js +144 -0
  222. package/dist/transform/replace-around-step.js.map +1 -0
  223. package/dist/transform/replace-step.d.ts +17 -0
  224. package/dist/transform/replace-step.d.ts.map +1 -0
  225. package/dist/transform/replace-step.js +72 -0
  226. package/dist/transform/replace-step.js.map +1 -0
  227. package/dist/transform/replace.d.ts +18 -0
  228. package/dist/transform/replace.d.ts.map +1 -0
  229. package/dist/transform/replace.js +132 -0
  230. package/dist/transform/replace.js.map +1 -0
  231. package/dist/transform/set-page-meta-step.d.ts +42 -0
  232. package/dist/transform/set-page-meta-step.d.ts.map +1 -0
  233. package/dist/transform/set-page-meta-step.js +75 -0
  234. package/dist/transform/set-page-meta-step.js.map +1 -0
  235. package/dist/transform/step.d.ts +34 -0
  236. package/dist/transform/step.d.ts.map +1 -0
  237. package/dist/transform/step.js +23 -0
  238. package/dist/transform/step.js.map +1 -0
  239. package/dist/transform/transaction.d.ts +20 -0
  240. package/dist/transform/transaction.d.ts.map +1 -0
  241. package/dist/transform/transaction.js +38 -0
  242. package/dist/transform/transaction.js.map +1 -0
  243. package/dist/version.d.ts +2 -0
  244. package/dist/version.d.ts.map +1 -0
  245. package/dist/version.js +5 -0
  246. package/dist/version.js.map +1 -0
  247. package/dist/view/cell-drag.d.ts +33 -0
  248. package/dist/view/cell-drag.d.ts.map +1 -0
  249. package/dist/view/cell-drag.js +177 -0
  250. package/dist/view/cell-drag.js.map +1 -0
  251. package/dist/view/clipboard.d.ts +5 -0
  252. package/dist/view/clipboard.d.ts.map +1 -0
  253. package/dist/view/clipboard.js +97 -0
  254. package/dist/view/clipboard.js.map +1 -0
  255. package/dist/view/default-renderer.d.ts +3 -0
  256. package/dist/view/default-renderer.d.ts.map +1 -0
  257. package/dist/view/default-renderer.js +142 -0
  258. package/dist/view/default-renderer.js.map +1 -0
  259. package/dist/view/dom-spec.d.ts +11 -0
  260. package/dist/view/dom-spec.d.ts.map +1 -0
  261. package/dist/view/dom-spec.js +32 -0
  262. package/dist/view/dom-spec.js.map +1 -0
  263. package/dist/view/editor-view.d.ts +55 -0
  264. package/dist/view/editor-view.d.ts.map +1 -0
  265. package/dist/view/editor-view.js +143 -0
  266. package/dist/view/editor-view.js.map +1 -0
  267. package/dist/view/image-resize.d.ts +37 -0
  268. package/dist/view/image-resize.d.ts.map +1 -0
  269. package/dist/view/image-resize.js +191 -0
  270. package/dist/view/image-resize.js.map +1 -0
  271. package/dist/view/index.d.ts +15 -0
  272. package/dist/view/index.d.ts.map +1 -0
  273. package/dist/view/index.js +15 -0
  274. package/dist/view/index.js.map +1 -0
  275. package/dist/view/input-pipeline.d.ts +24 -0
  276. package/dist/view/input-pipeline.d.ts.map +1 -0
  277. package/dist/view/input-pipeline.js +226 -0
  278. package/dist/view/input-pipeline.js.map +1 -0
  279. package/dist/view/mutation-observer.d.ts +17 -0
  280. package/dist/view/mutation-observer.d.ts.map +1 -0
  281. package/dist/view/mutation-observer.js +62 -0
  282. package/dist/view/mutation-observer.js.map +1 -0
  283. package/dist/view/page-slots.d.ts +56 -0
  284. package/dist/view/page-slots.d.ts.map +1 -0
  285. package/dist/view/page-slots.js +230 -0
  286. package/dist/view/page-slots.js.map +1 -0
  287. package/dist/view/paginator.d.ts +17 -0
  288. package/dist/view/paginator.d.ts.map +1 -0
  289. package/dist/view/paginator.js +93 -0
  290. package/dist/view/paginator.js.map +1 -0
  291. package/dist/view/print.d.ts +42 -0
  292. package/dist/view/print.d.ts.map +1 -0
  293. package/dist/view/print.js +70 -0
  294. package/dist/view/print.js.map +1 -0
  295. package/dist/view/reconcile.d.ts +16 -0
  296. package/dist/view/reconcile.d.ts.map +1 -0
  297. package/dist/view/reconcile.js +158 -0
  298. package/dist/view/reconcile.js.map +1 -0
  299. package/dist/view/renderer.d.ts +31 -0
  300. package/dist/view/renderer.d.ts.map +1 -0
  301. package/dist/view/renderer.js +89 -0
  302. package/dist/view/renderer.js.map +1 -0
  303. package/dist/view/selection-sync.d.ts +35 -0
  304. package/dist/view/selection-sync.d.ts.map +1 -0
  305. package/dist/view/selection-sync.js +324 -0
  306. package/dist/view/selection-sync.js.map +1 -0
  307. package/dist/view/table-resize.d.ts +41 -0
  308. package/dist/view/table-resize.d.ts.map +1 -0
  309. package/dist/view/table-resize.js +216 -0
  310. package/dist/view/table-resize.js.map +1 -0
  311. package/package.json +93 -0
  312. package/styles/base.css +269 -0
  313. package/styles/dark.css +36 -0
  314. package/styles/light.css +13 -0
  315. package/styles/page.css +93 -0
  316. package/styles/print-a4.css +87 -0
  317. package/styles/print.css +88 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edit-commands.js","sourceRoot":"","sources":["../../src/commands/edit-commands.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import type { Schema } from '../model/schema.js';
2
+ import type { Command } from './command.js';
3
+ /**
4
+ * Insert an image at the cursor. Replaces any non-collapsed selection.
5
+ * Cursor lands AFTER the inserted image.
6
+ *
7
+ * `attrs.src` is required; `alt` and `widthPx` are optional.
8
+ *
9
+ * Returns false when the schema lacks `image` or cursor depth < 1.
10
+ */
11
+ export declare function insertImage(schema: Schema, attrs: {
12
+ src: string;
13
+ alt?: string;
14
+ widthPx?: number | null;
15
+ }): Command;
16
+ /**
17
+ * Set `widthPx` on the image at `pos`. Single AttrStep.
18
+ * Returns false if the node at `pos` is not an image.
19
+ */
20
+ export declare function setImageWidth(pos: number, widthPx: number | null): Command;
21
+ /**
22
+ * Set `src` on the image at `pos`. Used by upload hooks.
23
+ * Returns false if the node at `pos` is not an image.
24
+ */
25
+ export declare function setImageSrc(pos: number, src: string): Command;
26
+ /**
27
+ * Set `alt` on the image at `pos`.
28
+ * Returns false if the node at `pos` is not an image.
29
+ */
30
+ export declare function setImageAlt(pos: number, alt: string): Command;
31
+ //# sourceMappingURL=image-commands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-commands.d.ts","sourceRoot":"","sources":["../../src/commands/image-commands.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAOhD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAuC3C;;;;;;;GAOG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAC5D,OAAO,CA0BT;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAS1E;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAS7D;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAS7D"}
@@ -0,0 +1,130 @@
1
+ import { resolve } from '../model/position.js';
2
+ import { Fragment } from '../model/fragment.js';
3
+ import { Slice } from '../model/slice.js';
4
+ import { TextSelection } from '../state/text-selection.js';
5
+ import { AttrStep } from '../transform/attr-step.js';
6
+ import { ReplaceStep } from '../transform/replace-step.js';
7
+ /**
8
+ * Image commands.
9
+ *
10
+ * The default schema declares:
11
+ * image: { group: 'inline', inline: true, isAtom: true,
12
+ * attrs: { src, alt, widthPx } }
13
+ *
14
+ * `widthPx` was added in v0.3d Track 0.
15
+ */
16
+ function setOverride(tr, pos) {
17
+ ;
18
+ tr.selectionOverride =
19
+ new TextSelection(pos, pos);
20
+ }
21
+ /**
22
+ * Find the child node of `rp.parent` whose [open] boundary sits at `pos`.
23
+ * Mirrors the AttrStep.apply boundary-resolution logic. Returns null when
24
+ * `pos` is not at a node boundary or points past the last child.
25
+ */
26
+ function nodeAtBoundary(doc, pos) {
27
+ try {
28
+ const rp = resolve(doc, pos);
29
+ const parent = rp.parent;
30
+ let offset = 0;
31
+ for (let i = 0; i < parent.content.childCount; i++) {
32
+ if (offset === rp.parentOffset) {
33
+ return parent.content.child(i);
34
+ }
35
+ offset += parent.content.child(i).nodeSize;
36
+ }
37
+ return null;
38
+ }
39
+ catch {
40
+ return null;
41
+ }
42
+ }
43
+ /**
44
+ * Insert an image at the cursor. Replaces any non-collapsed selection.
45
+ * Cursor lands AFTER the inserted image.
46
+ *
47
+ * `attrs.src` is required; `alt` and `widthPx` are optional.
48
+ *
49
+ * Returns false when the schema lacks `image` or cursor depth < 1.
50
+ */
51
+ export function insertImage(schema, attrs) {
52
+ return (state, dispatch) => {
53
+ const imageType = schema.nodes.image;
54
+ if (!imageType)
55
+ return false;
56
+ const { from, to } = state.selection;
57
+ let rp;
58
+ try {
59
+ rp = resolve(state.doc, from);
60
+ }
61
+ catch {
62
+ return false;
63
+ }
64
+ if (rp.depth < 1)
65
+ return false;
66
+ if (!dispatch)
67
+ return true;
68
+ const image = schema.node('image', {
69
+ src: attrs.src,
70
+ alt: attrs.alt ?? '',
71
+ widthPx: attrs.widthPx ?? null,
72
+ });
73
+ const slice = new Slice(Fragment.from([image]), 0, 0);
74
+ const tr = state.tr.step(new ReplaceStep(from, to, slice));
75
+ // Cursor lands AFTER the image (image.nodeSize = 1 since it's an atom).
76
+ const after = from + image.nodeSize;
77
+ setOverride(tr, after);
78
+ dispatch(tr);
79
+ return true;
80
+ };
81
+ }
82
+ /**
83
+ * Set `widthPx` on the image at `pos`. Single AttrStep.
84
+ * Returns false if the node at `pos` is not an image.
85
+ */
86
+ export function setImageWidth(pos, widthPx) {
87
+ return (state, dispatch) => {
88
+ const target = nodeAtBoundary(state.doc, pos);
89
+ if (!target || target.type.name !== 'image')
90
+ return false;
91
+ if (!dispatch)
92
+ return true;
93
+ const tr = state.tr.step(new AttrStep(pos, 'widthPx', widthPx));
94
+ dispatch(tr);
95
+ return true;
96
+ };
97
+ }
98
+ /**
99
+ * Set `src` on the image at `pos`. Used by upload hooks.
100
+ * Returns false if the node at `pos` is not an image.
101
+ */
102
+ export function setImageSrc(pos, src) {
103
+ return (state, dispatch) => {
104
+ const target = nodeAtBoundary(state.doc, pos);
105
+ if (!target || target.type.name !== 'image')
106
+ return false;
107
+ if (!dispatch)
108
+ return true;
109
+ const tr = state.tr.step(new AttrStep(pos, 'src', src));
110
+ dispatch(tr);
111
+ return true;
112
+ };
113
+ }
114
+ /**
115
+ * Set `alt` on the image at `pos`.
116
+ * Returns false if the node at `pos` is not an image.
117
+ */
118
+ export function setImageAlt(pos, alt) {
119
+ return (state, dispatch) => {
120
+ const target = nodeAtBoundary(state.doc, pos);
121
+ if (!target || target.type.name !== 'image')
122
+ return false;
123
+ if (!dispatch)
124
+ return true;
125
+ const tr = state.tr.step(new AttrStep(pos, 'alt', alt));
126
+ dispatch(tr);
127
+ return true;
128
+ };
129
+ }
130
+ //# sourceMappingURL=image-commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-commands.js","sourceRoot":"","sources":["../../src/commands/image-commands.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export { type Command, chain } from './command.js';
2
+ export { toggleMark, markActive, setMark, clearMark, activeMarkAttr, probeMarkAttr, type MarkAttrProbe, } from './mark-commands.js';
3
+ export { setBlockType, setBlockAttr, setAlignment, setLineHeight, wrapInBlockquote, insertHr, insertPageBreak, type AlignValue, } from './block-commands.js';
4
+ export { wrapInList, liftListItem, sinkListItem, toggleList, } from './list-commands.js';
5
+ export { insertTable, addRowAbove, addRowBelow, addColumnLeft, addColumnRight, deleteRow, deleteColumn, deleteTable, tabToNextCell, tabToPrevCell, setCellWidth, mergeCells, splitCell, toggleHeaderRow, } from './table-commands.js';
6
+ export { setLink, unsetLink, getLinkAt, linkRangeAt } from './link-commands.js';
7
+ export { insertImage, setImageWidth, setImageSrc, setImageAlt, } from './image-commands.js';
8
+ export { deleteSelection, joinBackward, splitBlock } from './edit-commands.js';
9
+ export { selectAll } from './selection-commands.js';
10
+ export { keymap, normalizeKey, defaultKeymap, defaultKeymapBindings, type KeyEventLike, type Platform, type KeymapHandler, type KeymapBindings, } from './keymap.js';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAA;AAClD,OAAO,EACL,UAAU,EACV,UAAU,EACV,OAAO,EACP,SAAS,EACT,cAAc,EACd,aAAa,EACb,KAAK,aAAa,GACnB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,QAAQ,EACR,eAAe,EACf,KAAK,UAAU,GAChB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EACL,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,UAAU,GACX,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EACL,WAAW,EACX,WAAW,EACX,WAAW,EACX,aAAa,EACb,cAAc,EACd,SAAS,EACT,YAAY,EACZ,WAAW,EACX,aAAa,EACb,aAAa,EACb,YAAY,EACZ,UAAU,EACV,SAAS,EACT,eAAe,GAChB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAC/E,OAAO,EACL,WAAW,EACX,aAAa,EACb,WAAW,EACX,WAAW,GACZ,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAC9E,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACnD,OAAO,EACL,MAAM,EACN,YAAY,EACZ,aAAa,EACb,qBAAqB,EACrB,KAAK,YAAY,EACjB,KAAK,QAAQ,EACb,KAAK,aAAa,EAClB,KAAK,cAAc,GACpB,MAAM,aAAa,CAAA"}
@@ -0,0 +1,11 @@
1
+ export { chain } from './command.js';
2
+ export { toggleMark, markActive, setMark, clearMark, activeMarkAttr, probeMarkAttr, } from './mark-commands.js';
3
+ export { setBlockType, setBlockAttr, setAlignment, setLineHeight, wrapInBlockquote, insertHr, insertPageBreak, } from './block-commands.js';
4
+ export { wrapInList, liftListItem, sinkListItem, toggleList, } from './list-commands.js';
5
+ export { insertTable, addRowAbove, addRowBelow, addColumnLeft, addColumnRight, deleteRow, deleteColumn, deleteTable, tabToNextCell, tabToPrevCell, setCellWidth, mergeCells, splitCell, toggleHeaderRow, } from './table-commands.js';
6
+ export { setLink, unsetLink, getLinkAt, linkRangeAt } from './link-commands.js';
7
+ export { insertImage, setImageWidth, setImageSrc, setImageAlt, } from './image-commands.js';
8
+ export { deleteSelection, joinBackward, splitBlock } from './edit-commands.js';
9
+ export { selectAll } from './selection-commands.js';
10
+ export { keymap, normalizeKey, defaultKeymap, defaultKeymapBindings, } from './keymap.js';
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,EAAE,MAAM,cAAc,CAAA;AAClD,OAAO,EACL,UAAU,EACV,UAAU,EACV,OAAO,EACP,SAAS,EACT,cAAc,EACd,aAAa,GAEd,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,QAAQ,EACR,eAAe,GAEhB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EACL,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,UAAU,GACX,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EACL,WAAW,EACX,WAAW,EACX,WAAW,EACX,aAAa,EACb,cAAc,EACd,SAAS,EACT,YAAY,EACZ,WAAW,EACX,aAAa,EACb,aAAa,EACb,YAAY,EACZ,UAAU,EACV,SAAS,EACT,eAAe,GAChB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAC/E,OAAO,EACL,WAAW,EACX,aAAa,EACb,WAAW,EACX,WAAW,GACZ,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAC9E,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACnD,OAAO,EACL,MAAM,EACN,YAAY,EACZ,aAAa,EACb,qBAAqB,GAKtB,MAAM,aAAa,CAAA"}
@@ -0,0 +1,34 @@
1
+ import type { Schema } from '../model/schema.js';
2
+ import type { EditorState } from '../state/editor-state.js';
3
+ import type { Transaction } from '../transform/transaction.js';
4
+ import { type Command } from './command.js';
5
+ export interface KeyEventLike {
6
+ readonly key: string;
7
+ readonly ctrlKey: boolean;
8
+ readonly metaKey: boolean;
9
+ readonly shiftKey: boolean;
10
+ readonly altKey: boolean;
11
+ }
12
+ export type Platform = 'mac' | 'win';
13
+ export type KeymapHandler = (event: KeyEventLike, state: EditorState, dispatch?: (tr: Transaction) => void, platform?: Platform) => boolean;
14
+ export interface KeymapBindings {
15
+ readonly [key: string]: Command;
16
+ }
17
+ export declare function normalizeKey(event: KeyEventLike, platform?: Platform): string;
18
+ export declare function keymap(bindings: KeymapBindings): KeymapHandler;
19
+ /**
20
+ * The default keymap shipped with v0.1.
21
+ *
22
+ * Returns a KeymapHandler. The caller picks up undo/redo by composing this
23
+ * with the History plugin's own keymap entries, e.g.:
24
+ *
25
+ * const history = historyPlugin()
26
+ * const combined = keymap({
27
+ * ...defaultKeymapBindings(schema),
28
+ * 'Mod-z': history.commands.undo,
29
+ * 'Mod-Shift-z': history.commands.redo,
30
+ * })
31
+ */
32
+ export declare function defaultKeymapBindings(schema: Schema): KeymapBindings;
33
+ export declare function defaultKeymap(schema: Schema): KeymapHandler;
34
+ //# sourceMappingURL=keymap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keymap.d.ts","sourceRoot":"","sources":["../../src/commands/keymap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AAE9D,OAAO,EAAS,KAAK,OAAO,EAAE,MAAM,cAAc,CAAA;AAMlD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;IAC1B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;CACzB;AAED,MAAM,MAAM,QAAQ,GAAG,KAAK,GAAG,KAAK,CAAA;AAEpC,MAAM,MAAM,aAAa,GAAG,CAC1B,KAAK,EAAE,YAAY,EACnB,KAAK,EAAE,WAAW,EAClB,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,WAAW,KAAK,IAAI,EACpC,QAAQ,CAAC,EAAE,QAAQ,KAChB,OAAO,CAAA;AAEZ,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAChC;AAQD,wBAAgB,YAAY,CAAC,KAAK,EAAE,YAAY,EAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,MAAM,CAkB7E;AAED,wBAAgB,MAAM,CAAC,QAAQ,EAAE,cAAc,GAAG,aAAa,CAO9D;AAOD;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc,CAapE;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,CAE3D"}
@@ -0,0 +1,84 @@
1
+ import { insertPageBreak } from './block-commands.js';
2
+ import { chain } from './command.js';
3
+ import { deleteSelection, joinBackward, splitBlock } from './edit-commands.js';
4
+ import { liftListItem, sinkListItem } from './list-commands.js';
5
+ import { toggleMark } from './mark-commands.js';
6
+ import { tabToNextCell, tabToPrevCell } from './table-commands.js';
7
+ const NAMED_KEY_PASSTHROUGH = new Set([
8
+ 'Enter', 'Backspace', 'Delete', 'Tab', 'Escape',
9
+ 'ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown',
10
+ 'Home', 'End', 'PageUp', 'PageDown',
11
+ ]);
12
+ export function normalizeKey(event, platform) {
13
+ const parts = [];
14
+ const isMac = platform === 'mac' || (platform === undefined && detectMac());
15
+ const modPressed = isMac ? event.metaKey : event.ctrlKey;
16
+ const altPressed = event.altKey;
17
+ const shiftPressed = event.shiftKey;
18
+ if (modPressed)
19
+ parts.push('Mod');
20
+ if (altPressed)
21
+ parts.push('Alt');
22
+ if (shiftPressed)
23
+ parts.push('Shift');
24
+ const key = event.key;
25
+ if (NAMED_KEY_PASSTHROUGH.has(key)) {
26
+ parts.push(key);
27
+ }
28
+ else if (key.length === 1) {
29
+ parts.push(key.toLowerCase());
30
+ }
31
+ else {
32
+ parts.push(key);
33
+ }
34
+ return parts.join('-');
35
+ }
36
+ export function keymap(bindings) {
37
+ return (event, state, dispatch, platform) => {
38
+ const key = normalizeKey(event, platform);
39
+ const cmd = bindings[key];
40
+ if (!cmd)
41
+ return false;
42
+ return cmd(state, dispatch);
43
+ };
44
+ }
45
+ function detectMac() {
46
+ if (typeof navigator === 'undefined')
47
+ return false;
48
+ return /Mac/i.test(navigator.platform ?? '');
49
+ }
50
+ /**
51
+ * The default keymap shipped with v0.1.
52
+ *
53
+ * Returns a KeymapHandler. The caller picks up undo/redo by composing this
54
+ * with the History plugin's own keymap entries, e.g.:
55
+ *
56
+ * const history = historyPlugin()
57
+ * const combined = keymap({
58
+ * ...defaultKeymapBindings(schema),
59
+ * 'Mod-z': history.commands.undo,
60
+ * 'Mod-Shift-z': history.commands.redo,
61
+ * })
62
+ */
63
+ export function defaultKeymapBindings(schema) {
64
+ const out = {
65
+ 'Enter': splitBlock,
66
+ 'Backspace': chain(joinBackward, deleteSelection),
67
+ 'Tab': chain(tabToNextCell(), sinkListItem()),
68
+ 'Shift-Tab': chain(tabToPrevCell(), liftListItem()),
69
+ };
70
+ if (schema.marks.bold)
71
+ out['Mod-b'] = toggleMark(schema.marks.bold);
72
+ if (schema.marks.italic)
73
+ out['Mod-i'] = toggleMark(schema.marks.italic);
74
+ if (schema.marks.underline)
75
+ out['Mod-u'] = toggleMark(schema.marks.underline);
76
+ const pageBreakType = schema.nodes.page_break;
77
+ if (pageBreakType)
78
+ out['Mod-Enter'] = insertPageBreak(pageBreakType);
79
+ return out;
80
+ }
81
+ export function defaultKeymap(schema) {
82
+ return keymap(defaultKeymapBindings(schema));
83
+ }
84
+ //# sourceMappingURL=keymap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keymap.js","sourceRoot":"","sources":["../../src/commands/keymap.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ import type { Mark, MarkType } from '../model/mark.js';
2
+ import type { EditorState } from '../state/editor-state.js';
3
+ import type { Command } from './command.js';
4
+ /**
5
+ * Apply a `linkType` mark with `attrs` to the selection range. Wraps
6
+ * {@link setMark}, which already replaces any pre-existing mark of the
7
+ * same type before adding the new one — so switching href works in one call.
8
+ *
9
+ * Returns false for a collapsed selection.
10
+ */
11
+ export declare function setLink(linkType: MarkType, attrs: {
12
+ href: string;
13
+ }): Command;
14
+ /**
15
+ * Remove every `linkType` mark from the selection range.
16
+ *
17
+ * - For a non-empty selection: behaves like {@link clearMark} — removes
18
+ * the link from the selected range.
19
+ * - For a collapsed selection inside an existing link: expands to the
20
+ * contiguous text-node range carrying the same link mark (compared by
21
+ * `Mark.eq`), then removes the mark. This lets the link popover's
22
+ * Remove button work even when the user just clicked into the link.
23
+ * - Returns false when no link mark covers the position (collapsed
24
+ * selection in plain text) or the range produces no change.
25
+ */
26
+ export declare function unsetLink(linkType: MarkType): Command;
27
+ /**
28
+ * Return the contiguous range `[from, to)` of text nodes around `pos` that
29
+ * all carry the same `linkType` mark (compared by {@link Mark.eq}), plus
30
+ * the mark itself. Returns null when the position isn't inside a text node
31
+ * carrying the link mark.
32
+ *
33
+ * Walks left and right across sibling text nodes within the same parent
34
+ * block — does not cross block boundaries. Suitable for "expand selection
35
+ * to the current link" behaviour.
36
+ */
37
+ export declare function linkRangeAt(state: EditorState, linkType: MarkType, pos?: number): {
38
+ from: number;
39
+ to: number;
40
+ mark: Mark;
41
+ } | null;
42
+ /**
43
+ * Return the first `linkType` mark on the text node at `pos`, or null when:
44
+ * - `pos` is not inside a depth-1 (or deeper) block, OR
45
+ * - the position lands on a non-text child (e.g. between blocks, on an
46
+ * atom node like hr), OR
47
+ * - the text node carries no mark of `linkType`.
48
+ *
49
+ * `pos` defaults to the current cursor (`state.selection.from`). Used by the
50
+ * link popover to prefill the URL input when the cursor is inside an
51
+ * existing link.
52
+ */
53
+ export declare function getLinkAt(state: EditorState, linkType: MarkType, pos?: number): Mark | null;
54
+ //# sourceMappingURL=link-commands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link-commands.d.ts","sourceRoot":"","sources":["../../src/commands/link-commands.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAGtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAI3D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAG3C;;;;;;GAMG;AACH,wBAAgB,OAAO,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAE5E;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAiBrD;AAED;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,WAAW,EAClB,QAAQ,EAAE,QAAQ,EAClB,GAAG,GAAE,MAA6B,GACjC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,IAAI,CAAA;CAAE,GAAG,IAAI,CA+CjD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,SAAS,CACvB,KAAK,EAAE,WAAW,EAClB,QAAQ,EAAE,QAAQ,EAClB,GAAG,GAAE,MAA6B,GACjC,IAAI,GAAG,IAAI,CAyBb"}
@@ -0,0 +1,151 @@
1
+ import { resolve } from '../model/position.js';
2
+ import { TextSelection } from '../state/text-selection.js';
3
+ import { RemoveMarkStep } from '../transform/mark-step.js';
4
+ import { clearMark, setMark } from './mark-commands.js';
5
+ /**
6
+ * Apply a `linkType` mark with `attrs` to the selection range. Wraps
7
+ * {@link setMark}, which already replaces any pre-existing mark of the
8
+ * same type before adding the new one — so switching href works in one call.
9
+ *
10
+ * Returns false for a collapsed selection.
11
+ */
12
+ export function setLink(linkType, attrs) {
13
+ return setMark(linkType, attrs);
14
+ }
15
+ /**
16
+ * Remove every `linkType` mark from the selection range.
17
+ *
18
+ * - For a non-empty selection: behaves like {@link clearMark} — removes
19
+ * the link from the selected range.
20
+ * - For a collapsed selection inside an existing link: expands to the
21
+ * contiguous text-node range carrying the same link mark (compared by
22
+ * `Mark.eq`), then removes the mark. This lets the link popover's
23
+ * Remove button work even when the user just clicked into the link.
24
+ * - Returns false when no link mark covers the position (collapsed
25
+ * selection in plain text) or the range produces no change.
26
+ */
27
+ export function unsetLink(linkType) {
28
+ return (state, dispatch) => {
29
+ const sel = state.selection;
30
+ if (sel.from !== sel.to)
31
+ return clearMark(linkType)(state, dispatch);
32
+ const range = linkRangeAt(state, linkType, sel.from);
33
+ if (!range)
34
+ return false;
35
+ if (!dispatch)
36
+ return true;
37
+ const tr = state.tr.step(new RemoveMarkStep(range.from, range.to, range.mark));
38
+ tr.selectionOverride =
39
+ new TextSelection(sel.from, sel.to);
40
+ dispatch(tr);
41
+ return true;
42
+ };
43
+ }
44
+ /**
45
+ * Return the contiguous range `[from, to)` of text nodes around `pos` that
46
+ * all carry the same `linkType` mark (compared by {@link Mark.eq}), plus
47
+ * the mark itself. Returns null when the position isn't inside a text node
48
+ * carrying the link mark.
49
+ *
50
+ * Walks left and right across sibling text nodes within the same parent
51
+ * block — does not cross block boundaries. Suitable for "expand selection
52
+ * to the current link" behaviour.
53
+ */
54
+ export function linkRangeAt(state, linkType, pos = state.selection.from) {
55
+ if (pos < 0 || pos > state.doc.content.size)
56
+ return null;
57
+ const rp = resolve(state.doc, pos);
58
+ if (rp.depth < 1)
59
+ return null;
60
+ const parent = rp.parent;
61
+ const parentOffset = rp.parentOffset;
62
+ const parentStart = rp.start(rp.depth);
63
+ // Find the child index containing `pos` and the mark on it.
64
+ let offset = 0;
65
+ let childIdx = -1;
66
+ let mark = null;
67
+ for (let i = 0; i < parent.content.childCount; i++) {
68
+ const child = parent.content.child(i);
69
+ const end = offset + child.nodeSize;
70
+ const insideLeft = parentOffset > offset || (i === 0 && parentOffset === 0);
71
+ const insideRight = parentOffset <= end;
72
+ if (insideLeft && insideRight) {
73
+ if (!child.isText)
74
+ return null;
75
+ const m = child.marks.find((mk) => mk.type === linkType) ?? null;
76
+ if (!m)
77
+ return null;
78
+ childIdx = i;
79
+ mark = m;
80
+ break;
81
+ }
82
+ offset = end;
83
+ }
84
+ if (childIdx < 0 || mark === null)
85
+ return null;
86
+ // Sweep left: include preceding text siblings whose link mark eq's `mark`.
87
+ let leftStart = offset;
88
+ for (let i = childIdx - 1; i >= 0; i--) {
89
+ const sib = parent.content.child(i);
90
+ if (!sib.isText)
91
+ break;
92
+ const sibMark = sib.marks.find((mk) => mk.type === linkType);
93
+ if (!sibMark || !sibMark.eq(mark))
94
+ break;
95
+ leftStart -= sib.nodeSize;
96
+ }
97
+ // Sweep right: include following text siblings whose link mark eq's `mark`.
98
+ const childAtIdx = parent.content.child(childIdx);
99
+ let rightEnd = offset + childAtIdx.nodeSize;
100
+ for (let i = childIdx + 1; i < parent.content.childCount; i++) {
101
+ const sib = parent.content.child(i);
102
+ if (!sib.isText)
103
+ break;
104
+ const sibMark = sib.marks.find((mk) => mk.type === linkType);
105
+ if (!sibMark || !sibMark.eq(mark))
106
+ break;
107
+ rightEnd += sib.nodeSize;
108
+ }
109
+ return { from: parentStart + leftStart, to: parentStart + rightEnd, mark };
110
+ }
111
+ /**
112
+ * Return the first `linkType` mark on the text node at `pos`, or null when:
113
+ * - `pos` is not inside a depth-1 (or deeper) block, OR
114
+ * - the position lands on a non-text child (e.g. between blocks, on an
115
+ * atom node like hr), OR
116
+ * - the text node carries no mark of `linkType`.
117
+ *
118
+ * `pos` defaults to the current cursor (`state.selection.from`). Used by the
119
+ * link popover to prefill the URL input when the cursor is inside an
120
+ * existing link.
121
+ */
122
+ export function getLinkAt(state, linkType, pos = state.selection.from) {
123
+ if (pos < 0 || pos > state.doc.content.size)
124
+ return null;
125
+ const rp = resolve(state.doc, pos);
126
+ if (rp.depth < 1)
127
+ return null;
128
+ const parent = rp.parent;
129
+ const parentOffset = rp.parentOffset;
130
+ let offset = 0;
131
+ for (let i = 0; i < parent.content.childCount; i++) {
132
+ const child = parent.content.child(i);
133
+ const end = offset + child.nodeSize;
134
+ // Sticky-left: a position exactly on the boundary between two text nodes
135
+ // belongs to the node ending there. The cursor is "inside" `child` when
136
+ // parentOffset is in (offset, end] — i.e. strictly past the start AND
137
+ // up to and including the end. For the very first child we also include
138
+ // the start boundary (offset === 0) to handle pos at the start of the
139
+ // parent's content (parentOffset === 0).
140
+ const insideLeft = parentOffset > offset || (i === 0 && parentOffset === 0);
141
+ const insideRight = parentOffset <= end;
142
+ if (insideLeft && insideRight) {
143
+ if (!child.isText)
144
+ return null;
145
+ return child.marks.find((m) => m.type === linkType) ?? null;
146
+ }
147
+ offset = end;
148
+ }
149
+ return null;
150
+ }
151
+ //# sourceMappingURL=link-commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link-commands.js","sourceRoot":"","sources":["../../src/commands/link-commands.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import type { NodeType } from '../model/node-type.js';
2
+ import type { Command } from './command.js';
3
+ /**
4
+ * Wrap the depth-1 block containing the cursor (or contiguous run covered by
5
+ * the selection) into a `listType` of the given ordered-ness. Each wrapped
6
+ * block becomes the body of a new `list_item`.
7
+ *
8
+ * - If cursor is already inside a list of the same ordered-ness — no-op.
9
+ * - If cursor is inside a list of opposite ordered-ness — switch the list's
10
+ * `ordered` attr via AttrStep (cheap, preserves DOM in incremental mode).
11
+ * - Otherwise — splice the depth-1 run with a single new list.
12
+ */
13
+ export declare function wrapInList(listType: NodeType, attrs: {
14
+ ordered: boolean;
15
+ }): Command;
16
+ /**
17
+ * Unwrap the list_item containing the cursor. Items before the lifted one
18
+ * stay in the original list; items after split into a new list of the same
19
+ * ordered-ness; the lifted item's children become siblings of the (former)
20
+ * list slot. If the list ends up empty (single item lifted), the whole list
21
+ * is replaced by the lifted children.
22
+ *
23
+ * Returns false when the cursor is not inside a list_item.
24
+ */
25
+ export declare function liftListItem(): Command;
26
+ /**
27
+ * Nest the list_item containing the cursor under its previous sibling
28
+ * list_item. If the previous sibling already ends with a nested list of the
29
+ * same ordered-ness, append to it; otherwise create a new nested list.
30
+ *
31
+ * Returns false when there is no previous sibling list_item or when the
32
+ * cursor is not in a list_item.
33
+ */
34
+ export declare function sinkListItem(): Command;
35
+ /**
36
+ * Toggle: if cursor is already inside a list of `attrs.ordered` parity, lift
37
+ * the current list_item; otherwise wrap.
38
+ */
39
+ export declare function toggleList(listType: NodeType, attrs: {
40
+ ordered: boolean;
41
+ }): Command;
42
+ //# sourceMappingURL=list-commands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-commands.d.ts","sourceRoot":"","sources":["../../src/commands/list-commands.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAOrD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAmB3C;;;;;;;;;GASG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CA8DnF;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,IAAI,OAAO,CAwEtC;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,IAAI,OAAO,CAqGtC;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAanF"}