@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":"selection-sync.js","sourceRoot":"","sources":["../../src/view/selection-sync.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import type { EditorView } from './editor-view.js';
2
+ /**
3
+ * Pointer-driven column-width resize for tables.
4
+ *
5
+ * Hot zone: within 5px of the right edge of a `.dx-table-cell`.
6
+ *
7
+ * Strategy:
8
+ * - On pointerdown inside the hot zone, capture the starting clientX, the
9
+ * cell element, its column index (count `<td>` siblings before it in its
10
+ * `<tr>`), the host `<table>` element, and the table's absolute [open]
11
+ * position in the model (read from a NodeRef attached by the renderer).
12
+ * - During the drag, we mutate the DOM directly — writing
13
+ * `cell.style.width = '${newWidth}px'` on every cell in the affected
14
+ * column. This avoids history bloat from per-pixel AttrStep transactions
15
+ * and avoids racing with the MutationObserver mid-drag.
16
+ * - On pointerup we dispatch a SINGLE `setCellWidth(tableStart, col, final)`
17
+ * transaction. The view re-renders from the new doc, which restores any
18
+ * direct DOM mutations (they're now reflected in the model).
19
+ *
20
+ * The MutationObserver's snapshot mechanism (see `mutation-observer.ts`)
21
+ * treats the dispatched re-render as authorized because `view.state.doc`
22
+ * advances. The DOM writes that happened during the drag fire MutationRecords
23
+ * too, but those are observed asynchronously — by the time the observer
24
+ * callback runs, the doc has usually already advanced from the pointerup
25
+ * dispatch, so the observer sees `view.state.doc !== lastDocSnapshot` and
26
+ * skips reverting. (A rare race where the observer fires between a
27
+ * drag-time DOM write and the pointerup dispatch is theoretically
28
+ * possible but unobserved in practice; if it appears, the fix is to
29
+ * tag drag-time writes via a dataset attribute the observer ignores.)
30
+ *
31
+ * v0.3c: Drag-time DOM writes are coalesced through `requestAnimationFrame`.
32
+ * Pointermove updates the pending width and (if no frame is already queued)
33
+ * schedules a single rAF callback that flushes the latest width to every cell
34
+ * in the column. This caps DOM writes at the browser's frame rate (~60 Hz)
35
+ * instead of firing on every pointermove (which can be 240+/sec on
36
+ * high-refresh displays). On pointerup the pending frame is cancelled and the
37
+ * final width is written synchronously before dispatching the AttrStep
38
+ * transaction — preserving the existing one-commit-on-pointerup invariant.
39
+ */
40
+ export declare function installTableResize(view: EditorView): () => void;
41
+ //# sourceMappingURL=table-resize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table-resize.d.ts","sourceRoot":"","sources":["../../src/view/table-resize.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAGlD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,IAAI,CAsL/D"}
@@ -0,0 +1,216 @@
1
+ import { setCellWidth } from '../commands/table-commands.js';
2
+ import { getNodeRef } from './renderer.js';
3
+ /**
4
+ * Pointer-driven column-width resize for tables.
5
+ *
6
+ * Hot zone: within 5px of the right edge of a `.dx-table-cell`.
7
+ *
8
+ * Strategy:
9
+ * - On pointerdown inside the hot zone, capture the starting clientX, the
10
+ * cell element, its column index (count `<td>` siblings before it in its
11
+ * `<tr>`), the host `<table>` element, and the table's absolute [open]
12
+ * position in the model (read from a NodeRef attached by the renderer).
13
+ * - During the drag, we mutate the DOM directly — writing
14
+ * `cell.style.width = '${newWidth}px'` on every cell in the affected
15
+ * column. This avoids history bloat from per-pixel AttrStep transactions
16
+ * and avoids racing with the MutationObserver mid-drag.
17
+ * - On pointerup we dispatch a SINGLE `setCellWidth(tableStart, col, final)`
18
+ * transaction. The view re-renders from the new doc, which restores any
19
+ * direct DOM mutations (they're now reflected in the model).
20
+ *
21
+ * The MutationObserver's snapshot mechanism (see `mutation-observer.ts`)
22
+ * treats the dispatched re-render as authorized because `view.state.doc`
23
+ * advances. The DOM writes that happened during the drag fire MutationRecords
24
+ * too, but those are observed asynchronously — by the time the observer
25
+ * callback runs, the doc has usually already advanced from the pointerup
26
+ * dispatch, so the observer sees `view.state.doc !== lastDocSnapshot` and
27
+ * skips reverting. (A rare race where the observer fires between a
28
+ * drag-time DOM write and the pointerup dispatch is theoretically
29
+ * possible but unobserved in practice; if it appears, the fix is to
30
+ * tag drag-time writes via a dataset attribute the observer ignores.)
31
+ *
32
+ * v0.3c: Drag-time DOM writes are coalesced through `requestAnimationFrame`.
33
+ * Pointermove updates the pending width and (if no frame is already queued)
34
+ * schedules a single rAF callback that flushes the latest width to every cell
35
+ * in the column. This caps DOM writes at the browser's frame rate (~60 Hz)
36
+ * instead of firing on every pointermove (which can be 240+/sec on
37
+ * high-refresh displays). On pointerup the pending frame is cancelled and the
38
+ * final width is written synchronously before dispatching the AttrStep
39
+ * transaction — preserving the existing one-commit-on-pointerup invariant.
40
+ */
41
+ export function installTableResize(view) {
42
+ const HOT_ZONE_PX = 5;
43
+ const MIN_WIDTH_PX = 48;
44
+ let drag = null;
45
+ // rAF-coalesced live DOM writes. `pendingWidth` holds the most-recent
46
+ // computed width from pointermove; `pendingFrame` is the requestAnimationFrame
47
+ // handle if a flush is queued. Additional pointermoves while a frame is
48
+ // pending simply update `pendingWidth` — the queued callback will see the
49
+ // latest value when it runs.
50
+ let pendingFrame = null;
51
+ let pendingWidth = null;
52
+ function getRaf() {
53
+ const win = view.dom.ownerDocument.defaultView;
54
+ if (win && typeof win.requestAnimationFrame === 'function') {
55
+ return {
56
+ request: win.requestAnimationFrame.bind(win),
57
+ cancel: win.cancelAnimationFrame.bind(win),
58
+ };
59
+ }
60
+ // Fallback (e.g. happy-dom without rAF): synchronous flush so behavior
61
+ // remains observable in tests, matching the pre-coalescing semantics.
62
+ return {
63
+ request: (cb) => {
64
+ cb(0);
65
+ return 0;
66
+ },
67
+ cancel: () => {
68
+ /* no-op */
69
+ },
70
+ };
71
+ }
72
+ function flushPendingWidth() {
73
+ pendingFrame = null;
74
+ if (!drag || pendingWidth == null)
75
+ return;
76
+ applyDragWidthToColumn(drag.table, drag.columnIndex, pendingWidth);
77
+ }
78
+ function cancelPendingFrame() {
79
+ if (pendingFrame != null) {
80
+ getRaf().cancel(pendingFrame);
81
+ pendingFrame = null;
82
+ }
83
+ pendingWidth = null;
84
+ }
85
+ function findCellWithinHotZone(target, clientX) {
86
+ if (!(target instanceof Element))
87
+ return null;
88
+ const cell = target.closest('.dx-table-cell');
89
+ if (!cell)
90
+ return null;
91
+ if (!view.dom.contains(cell))
92
+ return null;
93
+ const rect = cell.getBoundingClientRect();
94
+ if (clientX >= rect.right - HOT_ZONE_PX && clientX <= rect.right + HOT_ZONE_PX) {
95
+ return cell;
96
+ }
97
+ return null;
98
+ }
99
+ function columnIndexOf(cell) {
100
+ let idx = 0;
101
+ let sib = cell.previousElementSibling;
102
+ while (sib) {
103
+ if (sib.tagName === 'TD')
104
+ idx++;
105
+ sib = sib.previousElementSibling;
106
+ }
107
+ return idx;
108
+ }
109
+ function tableStartFromCell(cell) {
110
+ const table = cell.closest('table.dx-table');
111
+ if (!table)
112
+ return null;
113
+ const ref = getNodeRef(table);
114
+ if (!ref || ref.pos < 0)
115
+ return null;
116
+ return { table, tableStart: ref.pos };
117
+ }
118
+ function applyDragWidthToColumn(table, columnIndex, widthPx) {
119
+ const rows = table.querySelectorAll('tr.dx-table-row');
120
+ rows.forEach((row) => {
121
+ const cells = row.querySelectorAll(':scope > td.dx-table-cell');
122
+ const target = cells.item(columnIndex);
123
+ if (target)
124
+ target.style.width = `${widthPx}px`;
125
+ });
126
+ }
127
+ function onPointerMove(event) {
128
+ if (drag) {
129
+ const delta = event.clientX - drag.startX;
130
+ const newWidth = Math.max(MIN_WIDTH_PX, Math.round(drag.startWidth + delta));
131
+ drag.finalWidth = newWidth;
132
+ pendingWidth = newWidth;
133
+ if (pendingFrame == null) {
134
+ pendingFrame = getRaf().request(flushPendingWidth);
135
+ }
136
+ event.preventDefault();
137
+ return;
138
+ }
139
+ const hit = findCellWithinHotZone(event.target, event.clientX);
140
+ view.dom.style.cursor = hit ? 'col-resize' : '';
141
+ }
142
+ function onPointerDown(event) {
143
+ if (event.button !== 0)
144
+ return;
145
+ const hit = findCellWithinHotZone(event.target, event.clientX);
146
+ if (!hit)
147
+ return;
148
+ const tableInfo = tableStartFromCell(hit);
149
+ if (!tableInfo)
150
+ return;
151
+ const columnIndex = columnIndexOf(hit);
152
+ const startWidth = hit.getBoundingClientRect().width;
153
+ const captureTarget = (event.target instanceof HTMLElement ? event.target : view.dom);
154
+ try {
155
+ captureTarget.setPointerCapture(event.pointerId);
156
+ }
157
+ catch { /* ignore */ }
158
+ drag = {
159
+ cell: hit,
160
+ table: tableInfo.table,
161
+ columnIndex,
162
+ tableStart: tableInfo.tableStart,
163
+ startX: event.clientX,
164
+ startWidth,
165
+ pointerId: event.pointerId,
166
+ captureTarget,
167
+ finalWidth: startWidth,
168
+ };
169
+ event.preventDefault();
170
+ }
171
+ function onPointerUp(event) {
172
+ if (!drag)
173
+ return;
174
+ const finished = drag;
175
+ drag = null;
176
+ // Cancel any pending rAF flush and apply the final width synchronously so
177
+ // the post-dispatch render sees a consistent DOM state.
178
+ cancelPendingFrame();
179
+ applyDragWidthToColumn(finished.table, finished.columnIndex, finished.finalWidth);
180
+ try {
181
+ finished.captureTarget.releasePointerCapture(finished.pointerId);
182
+ }
183
+ catch { /* ignore */ }
184
+ view.dom.style.cursor = '';
185
+ const cmd = setCellWidth(finished.tableStart, finished.columnIndex, finished.finalWidth);
186
+ cmd(view.state, (tr) => view.dispatch(tr));
187
+ event.preventDefault();
188
+ }
189
+ function onPointerCancel(_event) {
190
+ if (!drag)
191
+ return;
192
+ const cancelled = drag;
193
+ drag = null;
194
+ cancelPendingFrame();
195
+ try {
196
+ cancelled.captureTarget.releasePointerCapture(cancelled.pointerId);
197
+ }
198
+ catch { /* ignore */ }
199
+ view.dom.style.cursor = '';
200
+ // Re-render from current model state to undo any direct DOM mutations.
201
+ view.forceRender();
202
+ }
203
+ view.dom.addEventListener('pointermove', onPointerMove);
204
+ view.dom.addEventListener('pointerdown', onPointerDown);
205
+ view.dom.addEventListener('pointerup', onPointerUp);
206
+ view.dom.addEventListener('pointercancel', onPointerCancel);
207
+ return () => {
208
+ cancelPendingFrame();
209
+ view.dom.removeEventListener('pointermove', onPointerMove);
210
+ view.dom.removeEventListener('pointerdown', onPointerDown);
211
+ view.dom.removeEventListener('pointerup', onPointerUp);
212
+ view.dom.removeEventListener('pointercancel', onPointerCancel);
213
+ view.dom.style.cursor = '';
214
+ };
215
+ }
216
+ //# sourceMappingURL=table-resize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table-resize.js","sourceRoot":"","sources":["../../src/view/table-resize.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAA;AAE5D,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAE1C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAgB;IACjD,MAAM,WAAW,GAAG,CAAC,CAAA;IACrB,MAAM,YAAY,GAAG,EAAE,CAAA;IAcvB,IAAI,IAAI,GAAqB,IAAI,CAAA;IAEjC,sEAAsE;IACtE,+EAA+E;IAC/E,wEAAwE;IACxE,0EAA0E;IAC1E,6BAA6B;IAC7B,IAAI,YAAY,GAAkB,IAAI,CAAA;IACtC,IAAI,YAAY,GAAkB,IAAI,CAAA;IAEtC,SAAS,MAAM;QAIb,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,WAAW,CAAA;QAC9C,IAAI,GAAG,IAAI,OAAO,GAAG,CAAC,qBAAqB,KAAK,UAAU,EAAE,CAAC;YAC3D,OAAO;gBACL,OAAO,EAAE,GAAG,CAAC,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC;gBAC5C,MAAM,EAAE,GAAG,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC;aAC3C,CAAA;QACH,CAAC;QACD,uEAAuE;QACvE,sEAAsE;QACtE,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE;gBACd,EAAE,CAAC,CAAC,CAAC,CAAA;gBACL,OAAO,CAAC,CAAA;YACV,CAAC;YACD,MAAM,EAAE,GAAG,EAAE;gBACX,WAAW;YACb,CAAC;SACF,CAAA;IACH,CAAC;IAED,SAAS,iBAAiB;QACxB,YAAY,GAAG,IAAI,CAAA;QACnB,IAAI,CAAC,IAAI,IAAI,YAAY,IAAI,IAAI;YAAE,OAAM;QACzC,sBAAsB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAA;IACpE,CAAC;IAED,SAAS,kBAAkB;QACzB,IAAI,YAAY,IAAI,IAAI,EAAE,CAAC;YACzB,MAAM,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA;YAC7B,YAAY,GAAG,IAAI,CAAA;QACrB,CAAC;QACD,YAAY,GAAG,IAAI,CAAA;IACrB,CAAC;IAED,SAAS,qBAAqB,CAAC,MAA0B,EAAE,OAAe;QACxE,IAAI,CAAC,CAAC,MAAM,YAAY,OAAO,CAAC;YAAE,OAAO,IAAI,CAAA;QAC7C,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAuB,CAAA;QACnE,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAA;QACtB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAA;QACzC,MAAM,IAAI,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAA;QACzC,IAAI,OAAO,IAAI,IAAI,CAAC,KAAK,GAAG,WAAW,IAAI,OAAO,IAAI,IAAI,CAAC,KAAK,GAAG,WAAW,EAAE,CAAC;YAC/E,OAAO,IAAI,CAAA;QACb,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,SAAS,aAAa,CAAC,IAAiB;QACtC,IAAI,GAAG,GAAG,CAAC,CAAA;QACX,IAAI,GAAG,GAAG,IAAI,CAAC,sBAAsB,CAAA;QACrC,OAAO,GAAG,EAAE,CAAC;YACX,IAAI,GAAG,CAAC,OAAO,KAAK,IAAI;gBAAE,GAAG,EAAE,CAAA;YAC/B,GAAG,GAAG,GAAG,CAAC,sBAAsB,CAAA;QAClC,CAAC;QACD,OAAO,GAAG,CAAA;IACZ,CAAC;IAED,SAAS,kBAAkB,CAAC,IAAiB;QAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAuB,CAAA;QAClE,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAA;QACvB,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,CAAA;QAC7B,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC;YAAE,OAAO,IAAI,CAAA;QACpC,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,CAAC,GAAG,EAAE,CAAA;IACvC,CAAC;IAED,SAAS,sBAAsB,CAAC,KAAkB,EAAE,WAAmB,EAAE,OAAe;QACtF,MAAM,IAAI,GAAG,KAAK,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,CAAA;QACtD,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YACnB,MAAM,KAAK,GAAG,GAAG,CAAC,gBAAgB,CAAC,2BAA2B,CAAC,CAAA;YAC/D,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,CAAuB,CAAA;YAC5D,IAAI,MAAM;gBAAE,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,OAAO,IAAI,CAAA;QACjD,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,SAAS,aAAa,CAAC,KAAmB;QACxC,IAAI,IAAI,EAAE,CAAC;YACT,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAA;YACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,CAAC,CAAA;YAC5E,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAA;YAC1B,YAAY,GAAG,QAAQ,CAAA;YACvB,IAAI,YAAY,IAAI,IAAI,EAAE,CAAC;gBACzB,YAAY,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAA;YACpD,CAAC;YACD,KAAK,CAAC,cAAc,EAAE,CAAA;YACtB,OAAM;QACR,CAAC;QACD,MAAM,GAAG,GAAG,qBAAqB,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,CAAA;QAC9D,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAA;IACjD,CAAC;IAED,SAAS,aAAa,CAAC,KAAmB;QACxC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAM;QAC9B,MAAM,GAAG,GAAG,qBAAqB,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,CAAA;QAC9D,IAAI,CAAC,GAAG;YAAE,OAAM;QAChB,MAAM,SAAS,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAA;QACzC,IAAI,CAAC,SAAS;YAAE,OAAM;QACtB,MAAM,WAAW,GAAG,aAAa,CAAC,GAAG,CAAC,CAAA;QACtC,MAAM,UAAU,GAAG,GAAG,CAAC,qBAAqB,EAAE,CAAC,KAAK,CAAA;QACpD,MAAM,aAAa,GAAG,CAAC,KAAK,CAAC,MAAM,YAAY,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACrF,IAAI,CAAC;YAAC,aAAa,CAAC,iBAAiB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;QAC/E,IAAI,GAAG;YACL,IAAI,EAAE,GAAG;YACT,KAAK,EAAE,SAAS,CAAC,KAAK;YACtB,WAAW;YACX,UAAU,EAAE,SAAS,CAAC,UAAU;YAChC,MAAM,EAAE,KAAK,CAAC,OAAO;YACrB,UAAU;YACV,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,aAAa;YACb,UAAU,EAAE,UAAU;SACvB,CAAA;QACD,KAAK,CAAC,cAAc,EAAE,CAAA;IACxB,CAAC;IAED,SAAS,WAAW,CAAC,KAAmB;QACtC,IAAI,CAAC,IAAI;YAAE,OAAM;QACjB,MAAM,QAAQ,GAAG,IAAI,CAAA;QACrB,IAAI,GAAG,IAAI,CAAA;QACX,0EAA0E;QAC1E,wDAAwD;QACxD,kBAAkB,EAAE,CAAA;QACpB,sBAAsB,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAA;QACjF,IAAI,CAAC;YAAC,QAAQ,CAAC,aAAa,CAAC,qBAAqB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;QAC/F,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,CAAA;QAC1B,MAAM,GAAG,GAAG,YAAY,CAAC,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAA;QACxF,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAA;QAC1C,KAAK,CAAC,cAAc,EAAE,CAAA;IACxB,CAAC;IAED,SAAS,eAAe,CAAC,MAAoB;QAC3C,IAAI,CAAC,IAAI;YAAE,OAAM;QACjB,MAAM,SAAS,GAAG,IAAI,CAAA;QACtB,IAAI,GAAG,IAAI,CAAA;QACX,kBAAkB,EAAE,CAAA;QACpB,IAAI,CAAC;YAAC,SAAS,CAAC,aAAa,CAAC,qBAAqB,CAAC,SAAS,CAAC,SAAS,CAAC,CAAA;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;QACjG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,CAAA;QAC1B,uEAAuE;QACvE,IAAI,CAAC,WAAW,EAAE,CAAA;IACpB,CAAC;IAED,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,aAAa,EAAE,aAAa,CAAC,CAAA;IACvD,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,aAAa,EAAE,aAAa,CAAC,CAAA;IACvD,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAA;IACnD,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,eAAe,EAAE,eAAe,CAAC,CAAA;IAE3D,OAAO,GAAG,EAAE;QACV,kBAAkB,EAAE,CAAA;QACpB,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,aAAa,EAAE,aAAa,CAAC,CAAA;QAC1D,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,aAAa,EAAE,aAAa,CAAC,CAAA;QAC1D,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAA;QACtD,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,eAAe,EAAE,eAAe,CAAC,CAAA;QAC9D,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,CAAA;IAC5B,CAAC,CAAA;AACH,CAAC"}
package/package.json ADDED
@@ -0,0 +1,93 @@
1
+ {
2
+ "name": "@doxi/core",
3
+ "version": "0.11.0",
4
+ "description": "Doxiva core: engine, model, view, plugins.",
5
+ "license": "MIT",
6
+ "author": "Mahbub Hasan",
7
+ "homepage": "https://github.com/mahbub-hasaan/doxiva#readme",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "git+https://github.com/mahbub-hasaan/doxiva.git",
11
+ "directory": "packages/core"
12
+ },
13
+ "bugs": {
14
+ "url": "https://github.com/mahbub-hasaan/doxiva/issues"
15
+ },
16
+ "keywords": ["editor", "rich-text", "wysiwyg", "document", "typescript", "doxiva"],
17
+ "publishConfig": {
18
+ "access": "public"
19
+ },
20
+ "type": "module",
21
+ "sideEffects": ["*.css"],
22
+ "files": ["dist", "styles", "README.md", "LICENSE"],
23
+ "exports": {
24
+ ".": {
25
+ "types": "./dist/index.d.ts",
26
+ "import": "./dist/index.js"
27
+ },
28
+ "./model": {
29
+ "types": "./dist/model/index.d.ts",
30
+ "import": "./dist/model/index.js"
31
+ },
32
+ "./transform": {
33
+ "types": "./dist/transform/index.d.ts",
34
+ "import": "./dist/transform/index.js"
35
+ },
36
+ "./state": {
37
+ "types": "./dist/state/index.d.ts",
38
+ "import": "./dist/state/index.js"
39
+ },
40
+ "./plugin": {
41
+ "types": "./dist/plugin/index.d.ts",
42
+ "import": "./dist/plugin/index.js"
43
+ },
44
+ "./history": {
45
+ "types": "./dist/history/index.d.ts",
46
+ "import": "./dist/history/index.js"
47
+ },
48
+ "./commands": {
49
+ "types": "./dist/commands/index.d.ts",
50
+ "import": "./dist/commands/index.js"
51
+ },
52
+ "./view": {
53
+ "types": "./dist/view/index.d.ts",
54
+ "import": "./dist/view/index.js"
55
+ },
56
+ "./layout": {
57
+ "types": "./dist/layout/index.d.ts",
58
+ "import": "./dist/layout/index.js"
59
+ },
60
+ "./schema": {
61
+ "types": "./dist/schema/index.d.ts",
62
+ "import": "./dist/schema/index.js"
63
+ },
64
+ "./serialize": {
65
+ "types": "./dist/serialize/index.d.ts",
66
+ "import": "./dist/serialize/index.js"
67
+ },
68
+ "./html": {
69
+ "types": "./dist/html/index.d.ts",
70
+ "import": "./dist/html/index.js"
71
+ },
72
+ "./collab": {
73
+ "types": "./dist/collab/port.d.ts",
74
+ "import": "./dist/collab/port.js"
75
+ },
76
+ "./styles/base.css": "./styles/base.css",
77
+ "./styles/light.css": "./styles/light.css",
78
+ "./styles/dark.css": "./styles/dark.css",
79
+ "./styles/page.css": "./styles/page.css",
80
+ "./styles/print.css": "./styles/print.css",
81
+ "./styles/print-a4.css": "./styles/print-a4.css"
82
+ },
83
+ "scripts": {
84
+ "build": "tsc -p tsconfig.json",
85
+ "typecheck": "tsc -p tsconfig.typecheck.json",
86
+ "test": "vitest run",
87
+ "test:watch": "vitest",
88
+ "clean": "rimraf dist"
89
+ },
90
+ "devDependencies": {
91
+ "rimraf": "6.0.1"
92
+ }
93
+ }
@@ -0,0 +1,269 @@
1
+ /* @doxi/core base.css — structural rules; theming via CSS variables. */
2
+
3
+ :root {
4
+ --dx-font-family: "Inter", system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
5
+ --dx-font-size: 16px;
6
+ --dx-line-height: 1.6;
7
+ --dx-color-text: #1a1a1a;
8
+ --dx-color-muted: #6b7280;
9
+ --dx-color-bg: #ffffff;
10
+ --dx-color-selection: #b3d7ff;
11
+ --dx-color-accent: #2563eb;
12
+ --dx-color-border: #e5e7eb;
13
+ --dx-spacing-paragraph: 0.75em;
14
+ --dx-spacing-heading-top: 1.2em;
15
+ --dx-spacing-heading-bottom: 0.4em;
16
+ --dx-radius: 6px;
17
+ --dx-page-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);
18
+ --dx-toolbar-bg: #f9fafb;
19
+ --dx-toolbar-fg: #111827;
20
+ }
21
+
22
+ .dx-editor {
23
+ font-family: var(--dx-font-family);
24
+ font-size: var(--dx-font-size);
25
+ line-height: var(--dx-line-height);
26
+ color: var(--dx-color-text);
27
+ background: var(--dx-color-bg);
28
+ caret-color: var(--dx-color-accent);
29
+ outline: none;
30
+ white-space: pre-wrap;
31
+ word-break: break-word;
32
+ tab-size: 4;
33
+ }
34
+
35
+ .dx-editor::selection,
36
+ .dx-editor *::selection {
37
+ background: var(--dx-color-selection);
38
+ }
39
+
40
+ .dx-editor p,
41
+ .dx-editor .dx-paragraph {
42
+ margin: 0 0 var(--dx-spacing-paragraph) 0;
43
+ }
44
+
45
+ .dx-editor h1,
46
+ .dx-editor h2,
47
+ .dx-editor h3,
48
+ .dx-editor h4,
49
+ .dx-editor h5,
50
+ .dx-editor h6,
51
+ .dx-editor .dx-heading {
52
+ margin: var(--dx-spacing-heading-top) 0 var(--dx-spacing-heading-bottom) 0;
53
+ font-weight: 600;
54
+ line-height: 1.3;
55
+ }
56
+
57
+ .dx-editor h1 { font-size: 2.0em; }
58
+ .dx-editor h2 { font-size: 1.5em; }
59
+ .dx-editor h3 { font-size: 1.25em; }
60
+ .dx-editor h4 { font-size: 1.1em; }
61
+ .dx-editor h5 { font-size: 1.0em; }
62
+ .dx-editor h6 { font-size: 0.9em; color: var(--dx-color-muted); }
63
+
64
+ .dx-editor ul,
65
+ .dx-editor ol,
66
+ .dx-editor .dx-list {
67
+ margin: 0 0 var(--dx-spacing-paragraph) 0;
68
+ padding-left: 1.5em;
69
+ }
70
+
71
+ .dx-editor li,
72
+ .dx-editor .dx-list-item {
73
+ margin: 0.15em 0;
74
+ }
75
+
76
+ .dx-editor blockquote,
77
+ .dx-editor .dx-blockquote {
78
+ margin: var(--dx-spacing-paragraph) 0;
79
+ padding: 0 1em;
80
+ border-left: 3px solid var(--dx-color-border);
81
+ color: var(--dx-color-muted);
82
+ }
83
+
84
+ .dx-editor hr,
85
+ .dx-editor .dx-hr {
86
+ border: none;
87
+ border-top: 1px solid var(--dx-color-border);
88
+ margin: 1.5em 0;
89
+ }
90
+
91
+ .dx-editor a,
92
+ .dx-editor .dx-link {
93
+ color: var(--dx-color-accent);
94
+ text-decoration: underline;
95
+ text-underline-offset: 2px;
96
+ }
97
+
98
+ .dx-editor img,
99
+ .dx-editor .dx-image {
100
+ max-width: 100%;
101
+ height: auto;
102
+ display: inline-block;
103
+ border-radius: var(--dx-radius);
104
+ }
105
+
106
+ .dx-image.dx-image-selected {
107
+ outline: 2px solid #1a73e8;
108
+ outline-offset: 2px;
109
+ }
110
+
111
+ .dx-toolbar {
112
+ display: flex;
113
+ flex-wrap: wrap;
114
+ gap: 4px;
115
+ padding: 6px 8px;
116
+ background: var(--dx-toolbar-bg);
117
+ color: var(--dx-toolbar-fg);
118
+ border: 1px solid var(--dx-color-border);
119
+ border-radius: var(--dx-radius);
120
+ font: 14px/1 var(--dx-font-family);
121
+ }
122
+
123
+ .dx-toolbar-btn {
124
+ appearance: none;
125
+ background: transparent;
126
+ border: 1px solid transparent;
127
+ border-radius: 4px;
128
+ padding: 4px 8px;
129
+ color: inherit;
130
+ cursor: pointer;
131
+ }
132
+
133
+ .dx-toolbar-btn[aria-pressed="true"] {
134
+ background: var(--dx-color-selection);
135
+ border-color: var(--dx-color-accent);
136
+ }
137
+
138
+ .dx-toolbar-btn:disabled {
139
+ opacity: 0.5;
140
+ cursor: not-allowed;
141
+ }
142
+
143
+ /*
144
+ * Focus-visible outlines (v0.9 a11y). Browsers expose :focus-visible only
145
+ * when the focus came from keyboard nav (Tab / arrow keys) and not from
146
+ * a pointer click, so mouse users don't see the outline.
147
+ */
148
+ .dx-toolbar-btn:focus-visible,
149
+ .dx-toolbar-select:focus-visible,
150
+ .dx-toolbar-swatch:focus-visible {
151
+ outline: 2px solid var(--dx-color-accent, #1a73e8);
152
+ outline-offset: 2px;
153
+ }
154
+
155
+ /*
156
+ * The contenteditable surface itself receives focus on click — for
157
+ * keyboard users we want a subtle visible cue. The default browser
158
+ * outline (typically the user-agent's blue ring) is fine; we only
159
+ * tighten it so it doesn't clash with the page chrome.
160
+ */
161
+ .dx-editor:focus-visible {
162
+ outline: 2px solid var(--dx-color-accent, #1a73e8);
163
+ outline-offset: -2px;
164
+ }
165
+
166
+ /* Document container (used when pagination is off — v0.1) */
167
+ .dx-doc {
168
+ max-width: 800px;
169
+ margin: 0 auto;
170
+ padding: 2em 1em;
171
+ }
172
+
173
+ /* Tables (v0.3b) */
174
+ .dx-editor table,
175
+ .dx-editor .dx-table {
176
+ border-collapse: collapse;
177
+ width: 100%;
178
+ margin: 0.75em 0;
179
+ table-layout: fixed;
180
+ }
181
+ .dx-editor td,
182
+ .dx-editor .dx-table-cell {
183
+ border: 1px solid var(--dx-color-border);
184
+ padding: 6px 10px;
185
+ vertical-align: top;
186
+ min-width: 48px;
187
+ position: relative;
188
+ }
189
+ .dx-editor .dx-table-cell > * { margin: 0; }
190
+ .dx-editor .dx-table-cell > * + * { margin-top: 0.5em; }
191
+
192
+ /* Bundled DoxivaEditor (v0.11) — wrapper shell + top action row + page chrome.
193
+ * These rules are framework-agnostic so both the React `<DoxivaEditor>` and
194
+ * the Angular `<dx-doxiva-editor>` can render identical chrome.
195
+ */
196
+ .dx-doxiva-shell {
197
+ display: flex;
198
+ flex-direction: column;
199
+ background: var(--dx-color-bg);
200
+ color: var(--dx-color-text);
201
+ font-family: var(--dx-font-family);
202
+ }
203
+ .dx-doxiva-toprow {
204
+ display: flex;
205
+ gap: 6px;
206
+ padding: 6px 8px;
207
+ border-bottom: 1px solid var(--dx-color-border);
208
+ }
209
+ .dx-doxiva-toprow button {
210
+ height: 28px;
211
+ padding: 0 12px;
212
+ border: 1px solid var(--dx-color-border);
213
+ border-radius: 4px;
214
+ background: var(--dx-color-bg);
215
+ color: var(--dx-color-text);
216
+ cursor: pointer;
217
+ font: 500 13px/1 inherit;
218
+ }
219
+ .dx-doxiva-toprow button:hover { background: var(--dx-toolbar-bg, #f1f3f4); }
220
+ .dx-doxiva-toprow button:disabled { opacity: 0.5; cursor: not-allowed; }
221
+ .dx-doxiva-editor-wrap {
222
+ border: 1px solid var(--dx-color-border);
223
+ border-radius: 0 0 6px 6px;
224
+ overflow-y: auto;
225
+ max-height: 80vh;
226
+ }
227
+ .dx-doxiva-shell .dx-page-header { min-height: var(--dx-header-height, 24px); }
228
+ .dx-doxiva-shell .dx-page-footer { min-height: var(--dx-footer-height, 24px); }
229
+ .dx-doxiva-shell.no-header .dx-page-header { display: none; }
230
+ .dx-doxiva-shell.no-footer .dx-page-footer { display: none; }
231
+ .dx-doxiva-import-warnings {
232
+ margin: 8px 12px;
233
+ padding: 8px 12px;
234
+ background: #fef7e0;
235
+ border-left: 3px solid #f9ab00;
236
+ font-size: 12px;
237
+ color: var(--dx-color-muted);
238
+ }
239
+ .dx-doxiva-import-warnings ul { margin: 4px 0 0 0; padding-left: 20px; }
240
+
241
+ @media print {
242
+ .dx-doxiva-shell .dx-doxiva-toprow,
243
+ .dx-doxiva-shell .dx-toolbar,
244
+ .dx-doxiva-shell .dx-doxiva-import-warnings { display: none !important; }
245
+ .dx-doxiva-shell .dx-doxiva-editor-wrap {
246
+ max-height: none !important; overflow: visible !important; height: auto !important;
247
+ border: none !important; border-radius: 0 !important;
248
+ }
249
+ }
250
+
251
+ .dx-page-break {
252
+ height: 1px;
253
+ background: var(--dx-color-border);
254
+ margin: 1em 0;
255
+ position: relative;
256
+ }
257
+ .dx-page-break::after {
258
+ content: 'Page break';
259
+ position: absolute;
260
+ top: -0.6em;
261
+ left: 50%;
262
+ transform: translateX(-50%);
263
+ background: var(--dx-color-bg);
264
+ padding: 0 8px;
265
+ font-size: 11px;
266
+ color: var(--dx-color-muted);
267
+ font-variant: small-caps;
268
+ letter-spacing: 0.5px;
269
+ }