@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":"image-resize.js","sourceRoot":"","sources":["../../src/view/image-resize.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ export { type Attrs, type DOMSpec, HOLE, HOLE_MARKER_ATTR, renderSpec, } from './dom-spec.js';
2
+ export { Renderer, renderNode, getNodeRef, type NodeRenderFn, type MarkRenderFn, type RendererSpec, type NodeRef, } from './renderer.js';
3
+ export { defaultRenderer } from './default-renderer.js';
4
+ export { renderSelection, resolveDOMSelection, locateDomFromModelPos, type DomLoc } from './selection-sync.js';
5
+ export { EditorView, type EditorViewProps } from './editor-view.js';
6
+ export { reconcile } from './reconcile.js';
7
+ export { installInputPipeline, type InputPipelineOptions } from './input-pipeline.js';
8
+ export { installClipboardHandlers, type ClipboardHandlersOptions } from './clipboard.js';
9
+ export { installMutationObserver, type MutationObserverOptions } from './mutation-observer.js';
10
+ export { installTableResize } from './table-resize.js';
11
+ export { installImageResize } from './image-resize.js';
12
+ export { paginate } from './paginator.js';
13
+ export { installPageSlots, type PageSlotsController } from './page-slots.js';
14
+ export { printDocument, setPrintPageSize, type PrintOptions } from './print.js';
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/view/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,KAAK,EACV,KAAK,OAAO,EACZ,IAAI,EACJ,gBAAgB,EAChB,UAAU,GACX,MAAM,eAAe,CAAA;AACtB,OAAO,EACL,QAAQ,EACR,UAAU,EACV,UAAU,EACV,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,OAAO,GACb,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAC9G,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAA;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAE,oBAAoB,EAAE,KAAK,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AACrF,OAAO,EAAE,wBAAwB,EAAE,KAAK,wBAAwB,EAAE,MAAM,gBAAgB,CAAA;AACxF,OAAO,EAAE,uBAAuB,EAAE,KAAK,uBAAuB,EAAE,MAAM,wBAAwB,CAAA;AAC9F,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,gBAAgB,EAAE,KAAK,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AAC5E,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAA"}
@@ -0,0 +1,15 @@
1
+ export { HOLE, HOLE_MARKER_ATTR, renderSpec, } from './dom-spec.js';
2
+ export { Renderer, renderNode, getNodeRef, } from './renderer.js';
3
+ export { defaultRenderer } from './default-renderer.js';
4
+ export { renderSelection, resolveDOMSelection, locateDomFromModelPos } from './selection-sync.js';
5
+ export { EditorView } from './editor-view.js';
6
+ export { reconcile } from './reconcile.js';
7
+ export { installInputPipeline } from './input-pipeline.js';
8
+ export { installClipboardHandlers } from './clipboard.js';
9
+ export { installMutationObserver } from './mutation-observer.js';
10
+ export { installTableResize } from './table-resize.js';
11
+ export { installImageResize } from './image-resize.js';
12
+ export { paginate } from './paginator.js';
13
+ export { installPageSlots } from './page-slots.js';
14
+ export { printDocument, setPrintPageSize } from './print.js';
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/view/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,IAAI,EACJ,gBAAgB,EAChB,UAAU,GACX,MAAM,eAAe,CAAA;AACtB,OAAO,EACL,QAAQ,EACR,UAAU,EACV,UAAU,GAKX,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,qBAAqB,EAAe,MAAM,qBAAqB,CAAA;AAC9G,OAAO,EAAE,UAAU,EAAwB,MAAM,kBAAkB,CAAA;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAE,oBAAoB,EAA6B,MAAM,qBAAqB,CAAA;AACrF,OAAO,EAAE,wBAAwB,EAAiC,MAAM,gBAAgB,CAAA;AACxF,OAAO,EAAE,uBAAuB,EAAgC,MAAM,wBAAwB,CAAA;AAC9F,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,gBAAgB,EAA4B,MAAM,iBAAiB,CAAA;AAC5E,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAqB,MAAM,YAAY,CAAA"}
@@ -0,0 +1,24 @@
1
+ import type { EditorView } from './editor-view.js';
2
+ export interface InputPipelineOptions {
3
+ /**
4
+ * Optional KeymapHandler-compatible function. Receives (event, state, dispatch)
5
+ * and returns true if the key was handled. If omitted, no keydown commands fire.
6
+ */
7
+ keymap?: (event: KeyboardEvent, state: EditorView['state'], dispatch: (tr: import('../transform/transaction.js').Transaction) => void) => boolean;
8
+ }
9
+ /**
10
+ * Attach the v0.1 input pipeline to a view's contenteditable surface.
11
+ *
12
+ * Listens for:
13
+ * - beforeinput (insertText / insertParagraph / deleteContentBackward)
14
+ * - keydown (routed to opts.keymap if provided)
15
+ * - compositionstart / compositionend (IME suspend/resume)
16
+ *
17
+ * Returns an uninstall() function that removes all listeners.
18
+ *
19
+ * The pipeline is intentionally opt-in: EditorView's constructor does NOT call
20
+ * this. Phase 6 ships installInputPipeline as a separate export so the View
21
+ * remains a pure render target by default.
22
+ */
23
+ export declare function installInputPipeline(view: EditorView, opts?: InputPipelineOptions): () => void;
24
+ //# sourceMappingURL=input-pipeline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input-pipeline.d.ts","sourceRoot":"","sources":["../../src/view/input-pipeline.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAclD,MAAM,WAAW,oBAAoB;IACnC;;;OAGG;IACH,MAAM,CAAC,EAAE,CACP,KAAK,EAAE,aAAa,EACpB,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC,EAC1B,QAAQ,EAAE,CAAC,EAAE,EAAE,OAAO,6BAA6B,EAAE,WAAW,KAAK,IAAI,KACtE,OAAO,CAAA;CACb;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,GAAE,oBAAyB,GAAG,MAAM,IAAI,CAyKlG"}
@@ -0,0 +1,226 @@
1
+ import { deleteSelection, joinBackward, splitBlock } from '../commands/edit-commands.js';
2
+ import { Fragment } from '../model/fragment.js';
3
+ import { resolve } from '../model/position.js';
4
+ import { Slice } from '../model/slice.js';
5
+ import { CellSelection } from '../state/cell-selection.js';
6
+ import { TextSelection } from '../state/text-selection.js';
7
+ import { ReplaceStep } from '../transform/replace-step.js';
8
+ import { installMutationObserver } from './mutation-observer.js';
9
+ import { resolveDOMSelection } from './selection-sync.js';
10
+ function charBackspace(view) {
11
+ const state = view.state;
12
+ const { from, to } = state.selection;
13
+ if (from !== to)
14
+ return false;
15
+ if (from === 0)
16
+ return false;
17
+ const tr = state.tr.step(new ReplaceStep(from - 1, from, Slice.empty));
18
+ view.dispatch(tr);
19
+ return true;
20
+ }
21
+ /**
22
+ * Attach the v0.1 input pipeline to a view's contenteditable surface.
23
+ *
24
+ * Listens for:
25
+ * - beforeinput (insertText / insertParagraph / deleteContentBackward)
26
+ * - keydown (routed to opts.keymap if provided)
27
+ * - compositionstart / compositionend (IME suspend/resume)
28
+ *
29
+ * Returns an uninstall() function that removes all listeners.
30
+ *
31
+ * The pipeline is intentionally opt-in: EditorView's constructor does NOT call
32
+ * this. Phase 6 ships installInputPipeline as a separate export so the View
33
+ * remains a pure render target by default.
34
+ */
35
+ export function installInputPipeline(view, opts = {}) {
36
+ const handlers = [];
37
+ function on(type, listener) {
38
+ view.dom.addEventListener(type, listener);
39
+ handlers.push([type, listener]);
40
+ }
41
+ let composing = false;
42
+ let compositionAnchor = null;
43
+ // Subsequent tasks fill in these handlers.
44
+ on('beforeinput', (event) => {
45
+ const e = event;
46
+ if (composing) {
47
+ event.preventDefault();
48
+ return;
49
+ }
50
+ const type = e.inputType;
51
+ const state = view.state;
52
+ const sel = state.selection;
53
+ if (type === 'insertText') {
54
+ if (!e.data) {
55
+ event.preventDefault();
56
+ return;
57
+ }
58
+ const slice = new Slice(Fragment.from([state.schema.text(e.data)]), 1, 1);
59
+ const tr = state.tr.step(new ReplaceStep(sel.from, sel.to, slice));
60
+ event.preventDefault();
61
+ view.dispatch(tr);
62
+ }
63
+ else if (type === 'insertParagraph') {
64
+ event.preventDefault();
65
+ splitBlock(state, (tr) => view.dispatch(tr));
66
+ }
67
+ else if (type === 'deleteContentBackward') {
68
+ event.preventDefault();
69
+ // Try join (cursor at start of block), then delete-selection, then char-delete.
70
+ if (joinBackward(state, (tr) => view.dispatch(tr)))
71
+ return;
72
+ if (deleteSelection(state, (tr) => view.dispatch(tr)))
73
+ return;
74
+ charBackspace(view);
75
+ }
76
+ else if (type === 'deleteContentForward') {
77
+ event.preventDefault();
78
+ if (deleteSelection(state, (tr) => view.dispatch(tr)))
79
+ return;
80
+ const { from } = state.selection;
81
+ if (from >= state.doc.content.size)
82
+ return;
83
+ const tr = state.tr.step(new ReplaceStep(from, from + 1, Slice.empty));
84
+ view.dispatch(tr);
85
+ }
86
+ else if (type === 'insertFromPaste') {
87
+ // Handled by clipboard handler; ignore here to avoid double-handling.
88
+ }
89
+ else {
90
+ // Unhandled: cancel to avoid silent DOM divergence.
91
+ event.preventDefault();
92
+ }
93
+ });
94
+ on('keydown', (event) => {
95
+ if (!opts.keymap)
96
+ return;
97
+ const handled = opts.keymap(event, view.state, (tr) => view.dispatch(tr));
98
+ if (handled)
99
+ event.preventDefault();
100
+ });
101
+ on('compositionstart', () => {
102
+ composing = true;
103
+ compositionAnchor = view.state.selection.from;
104
+ });
105
+ on('compositionend', (event) => {
106
+ composing = false;
107
+ const e = event;
108
+ const data = e.data ?? '';
109
+ const anchor = compositionAnchor;
110
+ compositionAnchor = null;
111
+ if (!data || anchor === null)
112
+ return;
113
+ const state = view.state;
114
+ const slice = new Slice(Fragment.from([state.schema.text(data)]), 1, 1);
115
+ const tr = state.tr.step(new ReplaceStep(anchor, anchor, slice));
116
+ view.dispatch(tr);
117
+ });
118
+ // Propagate DOM selection changes (mouse click, arrow keys, triple-click) to
119
+ // the model.
120
+ //
121
+ // Skip rules (each protects against a real failure mode discovered during v0.2 e2e):
122
+ // 1. composition in progress — model selection is set on compositionend.
123
+ // 2. focus is outside the editor — clicking a toolbar button shouldn't move
124
+ // the model cursor to the (typically position-0) sentinel the browser
125
+ // assigns when the editor isn't focused.
126
+ // 3. anchorNode or focusNode IS view.dom itself — when the contenteditable
127
+ // element is focused but no text node is selected, the browser sometimes
128
+ // reports the element with offset 0. We don't treat that as a real
129
+ // selection; it would resolve to model position 0 (between blocks) and
130
+ // poison subsequent typing (depths 0/0 errors in replace()).
131
+ // 4. resolveDOMSelection returns null — happens for selections outside the
132
+ // editor or in regions without NodeRefs.
133
+ // 5. resolved positions equal current model selection — loop guard. Our own
134
+ // dispatch -> renderSelection -> selectionchange cycle would otherwise
135
+ // re-dispatch forever.
136
+ // 6. collapsed selection that resolves to depth 0 (between blocks) — same
137
+ // reasoning as #3: depth-0 cursors are not editable positions in v0.2.
138
+ const onSelectionChange = () => {
139
+ if (composing)
140
+ return;
141
+ const doc = view.dom.ownerDocument;
142
+ const active = doc.activeElement;
143
+ if (active && active !== view.dom && !view.dom.contains(active))
144
+ return;
145
+ const win = doc.defaultView;
146
+ if (!win)
147
+ return;
148
+ const domSel = win.getSelection();
149
+ if (!domSel || domSel.rangeCount === 0)
150
+ return;
151
+ if (domSel.anchorNode === view.dom || domSel.focusNode === view.dom)
152
+ return;
153
+ // While a CellSelection is active (e.g. during cross-cell drag), the
154
+ // browser keeps mutating the DOM range as the pointer moves. Don't
155
+ // demote the model selection back to a TextSelection on every
156
+ // selectionchange tick — the cell-drag controller (and Escape) are the
157
+ // canonical exits from a CellSelection. Re-render to clear any DOM
158
+ // range the browser just established.
159
+ if (view.state.selection instanceof CellSelection) {
160
+ domSel.removeAllRanges();
161
+ return;
162
+ }
163
+ const resolved = resolveDOMSelection(view.dom, view.state.doc);
164
+ if (!resolved)
165
+ return;
166
+ const current = view.state.selection;
167
+ if (current instanceof TextSelection &&
168
+ current.anchor === resolved.anchor &&
169
+ current.head === resolved.head) {
170
+ return;
171
+ }
172
+ let next = resolved;
173
+ if (next.anchor === next.head) {
174
+ let pos = next.anchor;
175
+ let depth;
176
+ try {
177
+ depth = resolve(view.state.doc, pos).depth;
178
+ }
179
+ catch {
180
+ return;
181
+ }
182
+ if (depth === 0) {
183
+ // Nudge into the nearest editable position. Prefer left (end of
184
+ // previous block); fall back right (start of next block).
185
+ let nudged = -1;
186
+ if (pos > 0) {
187
+ try {
188
+ if (resolve(view.state.doc, pos - 1).depth >= 1)
189
+ nudged = pos - 1;
190
+ }
191
+ catch { /* ignore */ }
192
+ }
193
+ if (nudged < 0 && pos < view.state.doc.content.size) {
194
+ try {
195
+ if (resolve(view.state.doc, pos + 1).depth >= 1)
196
+ nudged = pos + 1;
197
+ }
198
+ catch { /* ignore */ }
199
+ }
200
+ if (nudged < 0)
201
+ return;
202
+ next = new TextSelection(nudged, nudged);
203
+ if (current instanceof TextSelection &&
204
+ current.anchor === next.anchor &&
205
+ current.head === next.head)
206
+ return;
207
+ }
208
+ }
209
+ const tr = view.state.tr;
210
+ tr.selectionOverride = next;
211
+ view.dispatch(tr);
212
+ };
213
+ const documentEl = view.dom.ownerDocument;
214
+ documentEl.addEventListener('selectionchange', onSelectionChange);
215
+ const uninstallObserver = installMutationObserver(view, {
216
+ shouldIgnore: () => composing,
217
+ });
218
+ return () => {
219
+ for (const [type, listener] of handlers) {
220
+ view.dom.removeEventListener(type, listener);
221
+ }
222
+ documentEl.removeEventListener('selectionchange', onSelectionChange);
223
+ uninstallObserver();
224
+ };
225
+ }
226
+ //# sourceMappingURL=input-pipeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input-pipeline.js","sourceRoot":"","sources":["../../src/view/input-pipeline.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { EditorView } from './editor-view.js';
2
+ export interface MutationObserverOptions {
3
+ /** Predicate consulted before reverting. Return true to ignore the mutation batch. */
4
+ shouldIgnore?: () => boolean;
5
+ }
6
+ /**
7
+ * Attach a MutationObserver to the editor's DOM that reverts any mutation
8
+ * the input pipeline didn't authorize, by triggering a full re-render from
9
+ * the current state. Returns an uninstall function.
10
+ *
11
+ * Authorized vs. unauthorized is decided by snapshotting view.state.doc on
12
+ * each observer fire. If doc has advanced since the last fire, the DOM is the
13
+ * result of our own updateState — skip reverting. If doc is unchanged but DOM
14
+ * mutated, the browser made an unauthorized change — revert.
15
+ */
16
+ export declare function installMutationObserver(view: EditorView, opts?: MutationObserverOptions): () => void;
17
+ //# sourceMappingURL=mutation-observer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mutation-observer.d.ts","sourceRoot":"","sources":["../../src/view/mutation-observer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAElD,MAAM,WAAW,uBAAuB;IACtC,sFAAsF;IACtF,YAAY,CAAC,EAAE,MAAM,OAAO,CAAA;CAC7B;AAED;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,UAAU,EAChB,IAAI,GAAE,uBAA4B,GACjC,MAAM,IAAI,CAoCZ"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Attach a MutationObserver to the editor's DOM that reverts any mutation
3
+ * the input pipeline didn't authorize, by triggering a full re-render from
4
+ * the current state. Returns an uninstall function.
5
+ *
6
+ * Authorized vs. unauthorized is decided by snapshotting view.state.doc on
7
+ * each observer fire. If doc has advanced since the last fire, the DOM is the
8
+ * result of our own updateState — skip reverting. If doc is unchanged but DOM
9
+ * mutated, the browser made an unauthorized change — revert.
10
+ */
11
+ export function installMutationObserver(view, opts = {}) {
12
+ let installed = true;
13
+ let lastDocSnapshot = view.state.doc;
14
+ const observer = new MutationObserver((mutations) => {
15
+ if (!installed)
16
+ return;
17
+ if (opts.shouldIgnore && opts.shouldIgnore())
18
+ return;
19
+ if (mutations.length === 0)
20
+ return;
21
+ if (view.state.doc !== lastDocSnapshot) {
22
+ lastDocSnapshot = view.state.doc;
23
+ return;
24
+ }
25
+ // Filter out mutations that originate inside a page header/footer
26
+ // slot. Those slots are edited via their own SetPageMetaStep
27
+ // dispatch path (see installPageSlots) and live OUTSIDE the main
28
+ // doc's content model — they should never trigger a forceRender,
29
+ // which would tear down the focused slot mid-keystroke.
30
+ if (mutations.every((m) => isInsidePageSlot(m.target))) {
31
+ return;
32
+ }
33
+ view.forceRender();
34
+ lastDocSnapshot = view.state.doc;
35
+ observer.takeRecords();
36
+ });
37
+ observer.observe(view.dom, {
38
+ childList: true,
39
+ subtree: true,
40
+ characterData: true,
41
+ characterDataOldValue: true,
42
+ });
43
+ return () => {
44
+ installed = false;
45
+ observer.disconnect();
46
+ };
47
+ }
48
+ /** True if `node` is, or is a descendant of, a `.dx-page-header` / `.dx-page-footer` slot. */
49
+ function isInsidePageSlot(node) {
50
+ let n = node;
51
+ while (n) {
52
+ if (n.nodeType === 1) {
53
+ const el = n;
54
+ if (el.classList.contains('dx-page-header') || el.classList.contains('dx-page-footer')) {
55
+ return true;
56
+ }
57
+ }
58
+ n = n.parentNode;
59
+ }
60
+ return false;
61
+ }
62
+ //# sourceMappingURL=mutation-observer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mutation-observer.js","sourceRoot":"","sources":["../../src/view/mutation-observer.ts"],"names":[],"mappings":"AAQA;;;;;;;;;GASG;AACH,MAAM,UAAU,uBAAuB,CACrC,IAAgB,EAChB,OAAgC,EAAE;IAElC,IAAI,SAAS,GAAG,IAAI,CAAA;IACpB,IAAI,eAAe,GAAW,IAAI,CAAC,KAAK,CAAC,GAAG,CAAA;IAE5C,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC,CAAC,SAAS,EAAE,EAAE;QAClD,IAAI,CAAC,SAAS;YAAE,OAAM;QACtB,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,EAAE;YAAE,OAAM;QACpD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;YAAE,OAAM;QAClC,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,eAAe,EAAE,CAAC;YACvC,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAA;YAChC,OAAM;QACR,CAAC;QACD,kEAAkE;QAClE,6DAA6D;QAC7D,iEAAiE;QACjE,iEAAiE;QACjE,wDAAwD;QACxD,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;YACvD,OAAM;QACR,CAAC;QACD,IAAI,CAAC,WAAW,EAAE,CAAA;QAClB,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAA;QAChC,QAAQ,CAAC,WAAW,EAAE,CAAA;IACxB,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE;QACzB,SAAS,EAAE,IAAI;QACf,OAAO,EAAE,IAAI;QACb,aAAa,EAAE,IAAI;QACnB,qBAAqB,EAAE,IAAI;KAC5B,CAAC,CAAA;IAEF,OAAO,GAAG,EAAE;QACV,SAAS,GAAG,KAAK,CAAA;QACjB,QAAQ,CAAC,UAAU,EAAE,CAAA;IACvB,CAAC,CAAA;AACH,CAAC;AAED,8FAA8F;AAC9F,SAAS,gBAAgB,CAAC,IAAiB;IACzC,IAAI,CAAC,GAAgB,IAAI,CAAA;IACzB,OAAO,CAAC,EAAE,CAAC;QACT,IAAI,CAAC,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;YACrB,MAAM,EAAE,GAAG,CAAY,CAAA;YACvB,IAAI,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;gBACvF,OAAO,IAAI,CAAA;YACb,CAAC;QACH,CAAC;QACD,CAAC,GAAG,CAAC,CAAC,UAAU,CAAA;IAClB,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC"}
@@ -0,0 +1,56 @@
1
+ import type { EditorView } from './editor-view.js';
2
+ /**
3
+ * Controller that mounts editable header/footer "slots" into each
4
+ * `.dx-page` emitted by the Paginator.
5
+ *
6
+ * v0.4 simplifications:
7
+ * - The header/footer schema is restricted to "either empty OR a single
8
+ * `paragraph` containing inline content (text leaves + `page_var`
9
+ * atoms)". No headings, lists, tables, marks. This is the smallest
10
+ * shape that lets us ship the pageMeta-edit pipeline + page-number
11
+ * variables; richer header content is a v0.4b polish.
12
+ * - The first page's header and footer divs become `contenteditable`
13
+ * DOM nodes. Their `input` events read `slot.textContent` and
14
+ * dispatch a `SetPageMetaStep` through the main view. Other pages'
15
+ * slots are read-only mirrors re-rendered on every `refresh()`.
16
+ * - We deliberately do NOT mount a secondary EditorView per slot. A
17
+ * full sub-EditorView would let us reuse marks, decorations, the
18
+ * input pipeline — but it's a heavy lift relative to the v0.4 ship
19
+ * bar. The contenteditable + manual dispatch path is the cheapest
20
+ * way to drive the same `SetPageMetaStep` machinery so undo/redo
21
+ * crosses doc + header edits.
22
+ *
23
+ * v0.4 Track B — `page_var` substitution:
24
+ * - When the fragment contains `page_var` inline atoms with
25
+ * `kind: 'pageNumber'` or `kind: 'totalPages'`, we render those as
26
+ * `<span class="dx-page-var" data-kind="…">N</span>` with the
27
+ * per-page number substituted in. The displayed page number is
28
+ * `pageIndex + (pageMeta.pageNumberStartAt ?? 1)`. `totalPages` is
29
+ * the count of `.dx-page` elements emitted by the Paginator.
30
+ * - On the EDITABLE first-page slot we ALSO render `page_var` spans
31
+ * live (so users see "Page 1 of 3" rather than a literal "#"). The
32
+ * input handler still rebuilds the fragment from `slot.textContent`
33
+ * — which means typing into a slot that contains `page_var` nodes
34
+ * will replace those atoms with their last-rendered numeric text
35
+ * (e.g. "Page 1 of 3" becomes three text leaves). That's a known
36
+ * v0.4 limitation; programmatic insertion via
37
+ * `setHeaderWithPageNumber()` / `setFooterWithPageNumber()` is the
38
+ * supported authoring path until v0.4b adds a slot-aware toolbar.
39
+ */
40
+ export interface PageSlotsController {
41
+ /**
42
+ * Called by EditorView after each paginate() pass with the freshly
43
+ * emitted page elements. Mounts the editable slot on the first page
44
+ * and renders read-only mirrors on the rest.
45
+ */
46
+ attach(pages: HTMLElement[]): void;
47
+ /**
48
+ * Re-render every slot from the current `view.state.pageMeta`. Called
49
+ * after the main view updates, including selection-only updates that
50
+ * skip pagination.
51
+ */
52
+ refresh(): void;
53
+ destroy(): void;
54
+ }
55
+ export declare function installPageSlots(view: EditorView): PageSlotsController;
56
+ //# sourceMappingURL=page-slots.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-slots.d.ts","sourceRoot":"","sources":["../../src/view/page-slots.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAElD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;;OAIG;IACH,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,IAAI,CAAA;IAClC;;;;OAIG;IACH,OAAO,IAAI,IAAI,CAAA;IACf,OAAO,IAAI,IAAI,CAAA;CAChB;AAgJD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,mBAAmB,CAkGtE"}