myrole-docx-editor 0.1.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 (308) hide show
  1. package/README.md +107 -0
  2. package/dist/chunks/sdk-BKkeAoJT.js +15065 -0
  3. package/dist/chunks/sdk-BKkeAoJT.js.map +1 -0
  4. package/dist/chunks/vars-blockly-C-cJRHx8.js +42 -0
  5. package/dist/chunks/vars-blockly-C-cJRHx8.js.map +1 -0
  6. package/dist/index.js +53 -0
  7. package/dist/index.js.map +1 -0
  8. package/dist/react.js +36 -0
  9. package/dist/react.js.map +1 -0
  10. package/dist/types/packages/docx-editor/src/chrome.d.ts +28 -0
  11. package/dist/types/packages/docx-editor/src/commands.d.ts +16 -0
  12. package/dist/types/packages/docx-editor/src/comments.d.ts +24 -0
  13. package/dist/types/packages/docx-editor/src/editor.d.ts +293 -0
  14. package/dist/types/packages/docx-editor/src/embed.d.ts +7 -0
  15. package/dist/types/packages/docx-editor/src/font-manifest.d.ts +7 -0
  16. package/dist/types/packages/docx-editor/src/fonts.d.ts +5 -0
  17. package/dist/types/packages/docx-editor/src/html.d.ts +13 -0
  18. package/dist/types/packages/docx-editor/src/index.d.ts +20 -0
  19. package/dist/types/packages/docx-editor/src/inspector-ui.d.ts +6 -0
  20. package/dist/types/packages/docx-editor/src/inspector.d.ts +101 -0
  21. package/dist/types/packages/docx-editor/src/react.d.ts +24 -0
  22. package/dist/types/packages/docx-editor/src/ruler.d.ts +4 -0
  23. package/dist/types/packages/docx-editor/src/sdk.d.ts +85 -0
  24. package/dist/types/packages/docx-editor/src/ui/icons.d.ts +2 -0
  25. package/dist/types/packages/docx-editor/src/ui/shell.d.ts +57 -0
  26. package/dist/types/packages/docx-editor/src/variables.d.ts +68 -0
  27. package/dist/types/packages/docx-editor/src/vars-blockly.d.ts +9 -0
  28. package/dist/types/packages/docx-editor/src/vars-complete.d.ts +60 -0
  29. package/dist/types/packages/docx-editor/src/vars-library.d.ts +59 -0
  30. package/dist/types/packages/docx-editor/src/vars-panel.d.ts +38 -0
  31. package/dist/types/packages/docx-model/src/edit.d.ts +64 -0
  32. package/dist/types/packages/docx-model/src/editor.d.ts +254 -0
  33. package/dist/types/packages/docx-model/src/fonts.d.ts +60 -0
  34. package/dist/types/packages/docx-model/src/heal.d.ts +28 -0
  35. package/dist/types/packages/docx-model/src/index.d.ts +113 -0
  36. package/dist/types/packages/docx-model/src/insert.d.ts +30 -0
  37. package/dist/types/packages/docx-model/src/layout.d.ts +411 -0
  38. package/dist/types/packages/docx-model/src/numbering.d.ts +63 -0
  39. package/dist/types/packages/docx-model/src/paste.d.ts +51 -0
  40. package/dist/types/packages/docx-model/src/rels.d.ts +18 -0
  41. package/dist/types/packages/docx-model/src/spans.d.ts +69 -0
  42. package/dist/types/packages/docx-model/src/styles.d.ts +42 -0
  43. package/dist/types/packages/docx-model/src/tables.d.ts +196 -0
  44. package/dist/types/packages/docx-model/src/textbox.d.ts +61 -0
  45. package/dist/types/packages/docx-render/src/border.d.ts +39 -0
  46. package/dist/types/packages/docx-render/src/document.d.ts +55 -0
  47. package/dist/types/packages/docx-render/src/font-advances.d.ts +1 -0
  48. package/dist/types/packages/docx-render/src/hit.d.ts +94 -0
  49. package/dist/types/packages/docx-render/src/index.d.ts +12 -0
  50. package/dist/types/packages/docx-render/src/metrics.d.ts +6 -0
  51. package/dist/types/packages/docx-render/src/node-ctx.d.ts +36 -0
  52. package/dist/types/packages/docx-render/src/paragraph.d.ts +18 -0
  53. package/dist/types/packages/docx-render/src/parts.d.ts +40 -0
  54. package/dist/types/packages/docx-render/src/renderer.d.ts +251 -0
  55. package/dist/types/packages/docx-render/src/table.d.ts +15 -0
  56. package/dist/types/packages/docx-render/src/text.d.ts +396 -0
  57. package/dist/types/packages/docx-render/src/types.d.ts +514 -0
  58. package/dist/types/packages/docx-tags/src/add-comments.d.ts +2 -0
  59. package/dist/types/packages/docx-tags/src/comments.d.ts +19 -0
  60. package/dist/types/packages/docx-tags/src/grammar.d.ts +71 -0
  61. package/dist/types/packages/docx-tags/src/highlight.d.ts +22 -0
  62. package/dist/types/packages/docx-tags/src/index.d.ts +4 -0
  63. package/dist/types/packages/docx-tags/src/scan.d.ts +27 -0
  64. package/dist/types/packages/docx-vars/src/audit.d.ts +44 -0
  65. package/dist/types/packages/docx-vars/src/blockify.d.ts +61 -0
  66. package/dist/types/packages/docx-vars/src/blocks.d.ts +46 -0
  67. package/dist/types/packages/docx-vars/src/describe.d.ts +21 -0
  68. package/dist/types/packages/docx-vars/src/generate.d.ts +11 -0
  69. package/dist/types/packages/docx-vars/src/icons.d.ts +52 -0
  70. package/dist/types/packages/docx-vars/src/idioms.d.ts +36 -0
  71. package/dist/types/packages/docx-vars/src/index.d.ts +31 -0
  72. package/dist/types/packages/docx-vars/src/labels.d.ts +42 -0
  73. package/dist/types/packages/docx-vars/src/library.d.ts +47 -0
  74. package/dist/types/packages/docx-vars/src/phrase.d.ts +3 -0
  75. package/dist/types/packages/docx-vars/src/picker.d.ts +19 -0
  76. package/dist/types/packages/docx-vars/src/plugin.d.ts +126 -0
  77. package/dist/types/packages/docx-vars/src/plugins.d.ts +29 -0
  78. package/dist/types/packages/docx-vars/src/preview.d.ts +25 -0
  79. package/dist/types/packages/docx-vars/src/scenario.d.ts +20 -0
  80. package/dist/types/packages/docx-vars/src/substitute.d.ts +28 -0
  81. package/dist/types/packages/docx-vars/src/sync.d.ts +56 -0
  82. package/dist/types/packages/docx-vars/src/target-canvas.d.ts +66 -0
  83. package/dist/types/packages/docx-vars/src/tokens.d.ts +18 -0
  84. package/dist/types/packages/fonts/src/advances.d.ts +90 -0
  85. package/dist/types/packages/fonts/src/aliases.d.ts +27 -0
  86. package/dist/types/packages/fonts/src/families.d.ts +1 -0
  87. package/dist/types/packages/fonts/src/load.d.ts +25 -0
  88. package/dist/types/packages/fonts/src/metrics.d.ts +44 -0
  89. package/fonts/ttf/abadi-mt-condensed-extra-bold-400-normal.ttf +0 -0
  90. package/fonts/ttf/abadi-mt-condensed-light-400-normal.ttf +0 -0
  91. package/fonts/ttf/angsana-new-400-italic.ttf +0 -0
  92. package/fonts/ttf/angsana-new-400-normal.ttf +0 -0
  93. package/fonts/ttf/angsana-new-700-italic.ttf +0 -0
  94. package/fonts/ttf/angsana-new-700-normal.ttf +0 -0
  95. package/fonts/ttf/apple-color-emoji-400-normal.ttf +0 -0
  96. package/fonts/ttf/apple-symbols-400-normal.ttf +0 -0
  97. package/fonts/ttf/aptos-400-italic.ttf +0 -0
  98. package/fonts/ttf/aptos-400-normal.ttf +0 -0
  99. package/fonts/ttf/aptos-700-italic.ttf +0 -0
  100. package/fonts/ttf/aptos-700-normal.ttf +0 -0
  101. package/fonts/ttf/aptos-narrow-400-italic.ttf +0 -0
  102. package/fonts/ttf/aptos-narrow-400-normal.ttf +0 -0
  103. package/fonts/ttf/aptos-narrow-700-italic.ttf +0 -0
  104. package/fonts/ttf/aptos-narrow-700-normal.ttf +0 -0
  105. package/fonts/ttf/arial-400-italic.ttf +0 -0
  106. package/fonts/ttf/arial-400-normal.ttf +0 -0
  107. package/fonts/ttf/arial-700-italic.ttf +0 -0
  108. package/fonts/ttf/arial-700-normal.ttf +0 -0
  109. package/fonts/ttf/arial-black-700-normal.ttf +0 -0
  110. package/fonts/ttf/arial-hebrew-400-normal.ttf +0 -0
  111. package/fonts/ttf/arial-hebrew-700-normal.ttf +0 -0
  112. package/fonts/ttf/arial-narrow-400-italic.ttf +0 -0
  113. package/fonts/ttf/arial-narrow-400-normal.ttf +0 -0
  114. package/fonts/ttf/arial-narrow-700-italic.ttf +0 -0
  115. package/fonts/ttf/arial-narrow-700-normal.ttf +0 -0
  116. package/fonts/ttf/arial-rounded-mt-bold-400-normal.ttf +0 -0
  117. package/fonts/ttf/arial-unicode-ms-400-normal.ttf +0 -0
  118. package/fonts/ttf/avenir-400-italic.ttf +0 -0
  119. package/fonts/ttf/avenir-400-normal.ttf +0 -0
  120. package/fonts/ttf/avenir-700-normal.ttf +0 -0
  121. package/fonts/ttf/avenir-black-700-normal.ttf +0 -0
  122. package/fonts/ttf/avenir-book-400-normal.ttf +0 -0
  123. package/fonts/ttf/avenir-heavy-700-italic.ttf +0 -0
  124. package/fonts/ttf/avenir-heavy-700-normal.ttf +0 -0
  125. package/fonts/ttf/avenir-light-400-italic.ttf +0 -0
  126. package/fonts/ttf/avenir-light-400-normal.ttf +0 -0
  127. package/fonts/ttf/avenir-next-400-italic.ttf +0 -0
  128. package/fonts/ttf/avenir-next-400-normal.ttf +0 -0
  129. package/fonts/ttf/avenir-next-700-italic.ttf +0 -0
  130. package/fonts/ttf/avenir-next-700-normal.ttf +0 -0
  131. package/fonts/ttf/baskerville-old-face-400-normal.ttf +0 -0
  132. package/fonts/ttf/batang-400-normal.ttf +0 -0
  133. package/fonts/ttf/bauhaus-93-400-normal.ttf +0 -0
  134. package/fonts/ttf/big-caslon-400-normal.ttf +0 -0
  135. package/fonts/ttf/bookman-old-style-400-italic.ttf +0 -0
  136. package/fonts/ttf/bookman-old-style-400-normal.ttf +0 -0
  137. package/fonts/ttf/bookman-old-style-700-italic.ttf +0 -0
  138. package/fonts/ttf/bookman-old-style-700-normal.ttf +0 -0
  139. package/fonts/ttf/calibri-400-italic.ttf +0 -0
  140. package/fonts/ttf/calibri-400-normal.ttf +0 -0
  141. package/fonts/ttf/calibri-700-italic.ttf +0 -0
  142. package/fonts/ttf/calibri-700-normal.ttf +0 -0
  143. package/fonts/ttf/calibri-light-400-italic.ttf +0 -0
  144. package/fonts/ttf/calibri-light-400-normal.ttf +0 -0
  145. package/fonts/ttf/cambria-400-italic.ttf +0 -0
  146. package/fonts/ttf/cambria-400-normal.ttf +0 -0
  147. package/fonts/ttf/cambria-700-italic.ttf +0 -0
  148. package/fonts/ttf/cambria-700-normal.ttf +0 -0
  149. package/fonts/ttf/cambria-math-400-normal.ttf +0 -0
  150. package/fonts/ttf/candara-400-italic.ttf +0 -0
  151. package/fonts/ttf/candara-400-normal.ttf +0 -0
  152. package/fonts/ttf/candara-700-italic.ttf +0 -0
  153. package/fonts/ttf/candara-700-normal.ttf +0 -0
  154. package/fonts/ttf/century-400-normal.ttf +0 -0
  155. package/fonts/ttf/century-gothic-400-italic.ttf +0 -0
  156. package/fonts/ttf/century-gothic-400-normal.ttf +0 -0
  157. package/fonts/ttf/century-gothic-700-italic.ttf +0 -0
  158. package/fonts/ttf/century-gothic-700-normal.ttf +0 -0
  159. package/fonts/ttf/century-schoolbook-400-italic.ttf +0 -0
  160. package/fonts/ttf/century-schoolbook-400-normal.ttf +0 -0
  161. package/fonts/ttf/century-schoolbook-700-italic.ttf +0 -0
  162. package/fonts/ttf/century-schoolbook-700-normal.ttf +0 -0
  163. package/fonts/ttf/comic-sans-ms-400-normal.ttf +0 -0
  164. package/fonts/ttf/comic-sans-ms-700-normal.ttf +0 -0
  165. package/fonts/ttf/consolas-400-italic.ttf +0 -0
  166. package/fonts/ttf/consolas-400-normal.ttf +0 -0
  167. package/fonts/ttf/consolas-700-normal.ttf +0 -0
  168. package/fonts/ttf/corbel-400-italic.ttf +0 -0
  169. package/fonts/ttf/corbel-400-normal.ttf +0 -0
  170. package/fonts/ttf/corbel-700-italic.ttf +0 -0
  171. package/fonts/ttf/corbel-700-normal.ttf +0 -0
  172. package/fonts/ttf/cordia-new-400-italic.ttf +0 -0
  173. package/fonts/ttf/cordia-new-400-normal.ttf +0 -0
  174. package/fonts/ttf/cordia-new-700-italic.ttf +0 -0
  175. package/fonts/ttf/cordia-new-700-normal.ttf +0 -0
  176. package/fonts/ttf/courier-400-normal.ttf +0 -0
  177. package/fonts/ttf/courier-new-400-italic.ttf +0 -0
  178. package/fonts/ttf/courier-new-400-normal.ttf +0 -0
  179. package/fonts/ttf/courier-new-700-normal.ttf +0 -0
  180. package/fonts/ttf/dengxian-400-normal.ttf +0 -0
  181. package/fonts/ttf/dengxian-700-normal.ttf +0 -0
  182. package/fonts/ttf/dengxian-light-400-normal.ttf +0 -0
  183. package/fonts/ttf/didot-400-italic.ttf +0 -0
  184. package/fonts/ttf/didot-400-normal.ttf +0 -0
  185. package/fonts/ttf/didot-700-normal.ttf +0 -0
  186. package/fonts/ttf/edwardian-script-itc-400-normal.ttf +0 -0
  187. package/fonts/ttf/euphemia-ucas-400-italic.ttf +0 -0
  188. package/fonts/ttf/euphemia-ucas-400-normal.ttf +0 -0
  189. package/fonts/ttf/euphemia-ucas-700-normal.ttf +0 -0
  190. package/fonts/ttf/eurostile-400-normal.ttf +0 -0
  191. package/fonts/ttf/eurostile-700-normal.ttf +0 -0
  192. package/fonts/ttf/franklin-gothic-book-400-italic.ttf +0 -0
  193. package/fonts/ttf/franklin-gothic-book-400-normal.ttf +0 -0
  194. package/fonts/ttf/franklin-gothic-demi-400-italic.ttf +0 -0
  195. package/fonts/ttf/franklin-gothic-demi-400-normal.ttf +0 -0
  196. package/fonts/ttf/franklin-gothic-demi-cond-400-normal.ttf +0 -0
  197. package/fonts/ttf/franklin-gothic-medium-400-italic.ttf +0 -0
  198. package/fonts/ttf/franklin-gothic-medium-400-normal.ttf +0 -0
  199. package/fonts/ttf/franklin-gothic-medium-cond-400-normal.ttf +0 -0
  200. package/fonts/ttf/futura-400-italic.ttf +0 -0
  201. package/fonts/ttf/futura-400-normal.ttf +0 -0
  202. package/fonts/ttf/futura-700-normal.ttf +0 -0
  203. package/fonts/ttf/garamond-400-italic.ttf +0 -0
  204. package/fonts/ttf/garamond-400-normal.ttf +0 -0
  205. package/fonts/ttf/garamond-700-italic.ttf +0 -0
  206. package/fonts/ttf/garamond-700-normal.ttf +0 -0
  207. package/fonts/ttf/geneva-400-normal.ttf +0 -0
  208. package/fonts/ttf/georgia-400-italic.ttf +0 -0
  209. package/fonts/ttf/georgia-400-normal.ttf +0 -0
  210. package/fonts/ttf/georgia-700-normal.ttf +0 -0
  211. package/fonts/ttf/gill-sans-400-italic.ttf +0 -0
  212. package/fonts/ttf/gill-sans-400-normal.ttf +0 -0
  213. package/fonts/ttf/gill-sans-700-italic.ttf +0 -0
  214. package/fonts/ttf/gill-sans-700-normal.ttf +0 -0
  215. package/fonts/ttf/gill-sans-light-400-italic.ttf +0 -0
  216. package/fonts/ttf/gill-sans-light-400-normal.ttf +0 -0
  217. package/fonts/ttf/gill-sans-mt-400-italic.ttf +0 -0
  218. package/fonts/ttf/gill-sans-mt-400-normal.ttf +0 -0
  219. package/fonts/ttf/gill-sans-mt-700-italic.ttf +0 -0
  220. package/fonts/ttf/gill-sans-mt-700-normal.ttf +0 -0
  221. package/fonts/ttf/helvetica-400-italic.ttf +0 -0
  222. package/fonts/ttf/helvetica-400-normal.ttf +0 -0
  223. package/fonts/ttf/helvetica-700-italic.ttf +0 -0
  224. package/fonts/ttf/helvetica-700-normal.ttf +0 -0
  225. package/fonts/ttf/helvetica-neue-400-italic.ttf +0 -0
  226. package/fonts/ttf/helvetica-neue-400-normal.ttf +0 -0
  227. package/fonts/ttf/helvetica-neue-700-italic.ttf +0 -0
  228. package/fonts/ttf/helvetica-neue-700-normal.ttf +0 -0
  229. package/fonts/ttf/hoefler-text-400-italic.ttf +0 -0
  230. package/fonts/ttf/hoefler-text-400-normal.ttf +0 -0
  231. package/fonts/ttf/hoefler-text-700-italic.ttf +0 -0
  232. package/fonts/ttf/hoefler-text-700-normal.ttf +0 -0
  233. package/fonts/ttf/lucida-grande-400-normal.ttf +0 -0
  234. package/fonts/ttf/lucida-grande-700-normal.ttf +0 -0
  235. package/fonts/ttf/lucida-sans-400-italic.ttf +0 -0
  236. package/fonts/ttf/lucida-sans-400-normal.ttf +0 -0
  237. package/fonts/ttf/lucida-sans-700-italic.ttf +0 -0
  238. package/fonts/ttf/lucida-sans-700-normal.ttf +0 -0
  239. package/fonts/ttf/lucida-sans-unicode-400-normal.ttf +0 -0
  240. package/fonts/ttf/malgun-gothic-400-normal.ttf +0 -0
  241. package/fonts/ttf/malgun-gothic-700-normal.ttf +0 -0
  242. package/fonts/ttf/mangal-400-normal.ttf +0 -0
  243. package/fonts/ttf/mangal-700-normal.ttf +0 -0
  244. package/fonts/ttf/microsoft-sans-serif-400-normal.ttf +0 -0
  245. package/fonts/ttf/microsoft-yahei-400-normal.ttf +0 -0
  246. package/fonts/ttf/microsoft-yahei-700-normal.ttf +0 -0
  247. package/fonts/ttf/microsoft-yi-baiti-400-normal.ttf +0 -0
  248. package/fonts/ttf/monotype-sorts-400-normal.ttf +0 -0
  249. package/fonts/ttf/ms-gothic-400-normal.ttf +0 -0
  250. package/fonts/ttf/ms-mincho-400-normal.ttf +0 -0
  251. package/fonts/ttf/ms-ui-gothic-400-normal.ttf +0 -0
  252. package/fonts/ttf/new-york-400-italic.ttf +0 -0
  253. package/fonts/ttf/new-york-400-normal.ttf +0 -0
  254. package/fonts/ttf/news-gothic-mt-400-italic.ttf +0 -0
  255. package/fonts/ttf/news-gothic-mt-400-normal.ttf +0 -0
  256. package/fonts/ttf/news-gothic-mt-700-italic.ttf +0 -0
  257. package/fonts/ttf/news-gothic-mt-700-normal.ttf +0 -0
  258. package/fonts/ttf/nsimsun-400-normal.ttf +0 -0
  259. package/fonts/ttf/optima-400-italic.ttf +0 -0
  260. package/fonts/ttf/optima-400-normal.ttf +0 -0
  261. package/fonts/ttf/optima-700-italic.ttf +0 -0
  262. package/fonts/ttf/optima-700-normal.ttf +0 -0
  263. package/fonts/ttf/palatino-400-italic.ttf +0 -0
  264. package/fonts/ttf/palatino-400-normal.ttf +0 -0
  265. package/fonts/ttf/palatino-700-italic.ttf +0 -0
  266. package/fonts/ttf/palatino-700-normal.ttf +0 -0
  267. package/fonts/ttf/palatino-linotype-400-italic.ttf +0 -0
  268. package/fonts/ttf/palatino-linotype-400-normal.ttf +0 -0
  269. package/fonts/ttf/palatino-linotype-700-italic.ttf +0 -0
  270. package/fonts/ttf/palatino-linotype-700-normal.ttf +0 -0
  271. package/fonts/ttf/pmingliu-400-normal.ttf +0 -0
  272. package/fonts/ttf/pt-mono-400-normal.ttf +0 -0
  273. package/fonts/ttf/pt-mono-700-normal.ttf +0 -0
  274. package/fonts/ttf/segoe-ui-symbol-400-normal.ttf +0 -0
  275. package/fonts/ttf/simsun-400-normal.ttf +0 -0
  276. package/fonts/ttf/skia-400-normal.ttf +0 -0
  277. package/fonts/ttf/stencil-400-normal.ttf +0 -0
  278. package/fonts/ttf/symbol-400-normal.ttf +0 -0
  279. package/fonts/ttf/tahoma-400-normal.ttf +0 -0
  280. package/fonts/ttf/tahoma-700-normal.ttf +0 -0
  281. package/fonts/ttf/times-400-italic.ttf +0 -0
  282. package/fonts/ttf/times-400-normal.ttf +0 -0
  283. package/fonts/ttf/times-700-italic.ttf +0 -0
  284. package/fonts/ttf/times-700-normal.ttf +0 -0
  285. package/fonts/ttf/times-new-roman-400-italic.ttf +0 -0
  286. package/fonts/ttf/times-new-roman-400-normal.ttf +0 -0
  287. package/fonts/ttf/times-new-roman-700-italic.ttf +0 -0
  288. package/fonts/ttf/times-new-roman-700-normal.ttf +0 -0
  289. package/fonts/ttf/trebuchet-ms-400-italic.ttf +0 -0
  290. package/fonts/ttf/trebuchet-ms-400-normal.ttf +0 -0
  291. package/fonts/ttf/trebuchet-ms-700-italic.ttf +0 -0
  292. package/fonts/ttf/trebuchet-ms-700-normal.ttf +0 -0
  293. package/fonts/ttf/tw-cen-mt-400-normal.ttf +0 -0
  294. package/fonts/ttf/tw-cen-mt-700-normal.ttf +0 -0
  295. package/fonts/ttf/tw-cen-mt-condensed-400-normal.ttf +0 -0
  296. package/fonts/ttf/tw-cen-mt-condensed-700-normal.ttf +0 -0
  297. package/fonts/ttf/verdana-400-italic.ttf +0 -0
  298. package/fonts/ttf/verdana-400-normal.ttf +0 -0
  299. package/fonts/ttf/verdana-700-italic.ttf +0 -0
  300. package/fonts/ttf/verdana-700-normal.ttf +0 -0
  301. package/fonts/ttf/webdings-400-normal.ttf +0 -0
  302. package/fonts/ttf/wingdings-2-400-normal.ttf +0 -0
  303. package/fonts/ttf/wingdings-3-400-normal.ttf +0 -0
  304. package/fonts/ttf/wingdings-400-normal.ttf +0 -0
  305. package/fonts/ttf/yu-gothic-light-400-normal.ttf +0 -0
  306. package/fonts/ttf/yu-mincho-400-normal.ttf +0 -0
  307. package/fonts/ttf/yu-mincho-700-normal.ttf +0 -0
  308. package/package.json +63 -0
@@ -0,0 +1,514 @@
1
+ import type { StyledParagraph, BodyBlock, TableInfo } from '../../docx-model/src/index';
2
+ /** Carte des images pré-chargées, indexée par chemin cible dans le .docx. */
3
+ export type ImageMap = Map<string, ImageBitmap>;
4
+ export declare const PT_PX: number;
5
+ /** Numéro de page courant et total, pour recalculer les champs PAGE/NUMPAGES. */
6
+ export interface PageNums {
7
+ page: number;
8
+ total: number;
9
+ /** `w:pgNumType w:fmt` — `decimal` par défaut, `numberInDash` écrit « - 3 - » */
10
+ fmt?: string;
11
+ }
12
+ /**
13
+ * Tout ce dont un dessinateur a besoin, et qu'il fait avancer.
14
+ *
15
+ * `y` et `ctx` sont mutables et le RESTENT : après un saut de page, `ctx`
16
+ * désigne un autre canvas. Un dessinateur qui en garde une copie locale peint
17
+ * sur la page précédente — c'est le bug le plus coûteux qu'ait connu ce module.
18
+ */
19
+ export interface DrawCtx {
20
+ /** on compose DÉJÀ l'intérieur d'un `w:framePr` — ne pas le re-sortir du fil */
21
+ inFrame?: boolean;
22
+ /**
23
+ * Rien n'a encore été dessiné en haut de cette PAGE.
24
+ *
25
+ * Word y jette tout l'espacement vertical — l'« après » du paragraphe qui
26
+ * portait le saut comme l'« avant » de celui qui ouvre la page. Mesuré au
27
+ * banc, sondes `hautpage-*` : la première ligne de la page 2 tombe à y57,0
28
+ * dans les trois cas, avec ou sans 8 pt déclarés.
29
+ *
30
+ * En tête de COLONNE c'est l'inverse — sondes `hautcol-*` : y69,7 sans
31
+ * espacement, y77,6 avec, les 8 pt bien posés. D'où ce drapeau plutôt qu'une
32
+ * règle unique.
33
+ */
34
+ atPageTop?: boolean;
35
+ /**
36
+ * Bas atteint par les paragraphes ENCADRÉS dont le texte est habillé
37
+ * (`w:framePr` sans `w:wrap="none"`).
38
+ *
39
+ * Un cadre ne fait jamais avancer le fil — Word y fait passer le texte à
40
+ * côté, pas dessous. Mais la HAUTEUR D'UN EN-TÊTE ou d'un pied, elle, doit
41
+ * l'englober : sur Vanished, le numéro de page encadré de l'en-tête descend
42
+ * le corps de 12 pt sur chaque page. Le réserver dans le fil du CORPS, en
43
+ * revanche, coûtait 52 points à Andersons.
44
+ */
45
+ frameBottom?: number;
46
+ ctx: CanvasRenderingContext2D;
47
+ def: {
48
+ font: string;
49
+ sizePt: number;
50
+ };
51
+ y: number;
52
+ contentLeft: number;
53
+ contentWidth: number;
54
+ pageBottom: number;
55
+ /**
56
+ * Passe à la page (ou colonne) suivante.
57
+ *
58
+ * `force` réclame une vraie PAGE : un `w:br w:type="page"` ne se contente pas
59
+ * de la colonne d'à côté.
60
+ */
61
+ onPageBreak?: (force?: boolean, cause?: string) => void;
62
+ images?: ImageMap;
63
+ /** page courante, pour situer les rectangles remontés — 1 par défaut */
64
+ page?: number;
65
+ onMark?(rect: MarkRect): void;
66
+ /**
67
+ * Un appel de note vient d'être composé sur la page `page`.
68
+ *
69
+ * Le moteur s'en sert pour savoir quelles notes vont au bas de quelle page —
70
+ * ce qui décide de la place qu'il faut leur réserver, donc de tout ce qui
71
+ * tient sur la page.
72
+ */
73
+ onFootnote?(n: number, page: number): void;
74
+ /**
75
+ * Bas utile de la page `page`, réserve des notes comprise.
76
+ *
77
+ * `pageBottom` est figé à la création du contexte, ce qui suffit au fil
78
+ * principal — il en refait un par bloc — mais pas à une CELLULE, qui traverse
79
+ * les pages avec le sien. Sans cette fonction, une cellule qui passe sur une
80
+ * page portant des notes ignorait leur réserve.
81
+ */
82
+ bottomOf?(page: number): number;
83
+ /** On compose le contenu d'une CELLULE — Word y ignore le saut de page explicite. */
84
+ inCell?: boolean;
85
+ /**
86
+ * Le bas atteint par un rang de tableau IMBRIQUÉ sur chaque page traversée.
87
+ *
88
+ * Un rang se ferme sous sa dernière ligne, et la cellule qui le porte ne sait
89
+ * où celle-ci est tombée que par son propre `onPageBreak` — qu'un tableau
90
+ * imbriqué ne déclenche JAMAIS, puisqu'il change de page tout seul. Sur
91
+ * « CREW CINE SKYLARK » page 18, le rang ANNEXE se refermait donc à 502,6 pt
92
+ * quand ses tableaux imbriqués descendaient à 519,2 : le filet passait
93
+ * PAR-DESSUS ses deux dernières lignes.
94
+ */
95
+ onRowBottom?(page: number, y: number): void;
96
+ /**
97
+ * Densité de la surface, pour accrocher les FILETS à la grille de pixels.
98
+ *
99
+ * Un trait tracé est CENTRÉ sur son chemin : un filet de 0,5 pt posé sur une
100
+ * ligne de grille déborde d'un quart de point de chaque côté et tombe à cheval
101
+ * sur deux rangées de pixels, à n'importe quelle densité. Word ne les trace
102
+ * pas — son PDF les REMPLIT (108 opérateurs `f`, zéro `w` dans le flux de la
103
+ * page 1 de « Cascadeur BRIARCLIFF ») — et leurs arêtes tombent sur des
104
+ * pixels entiers. Connaître la densité ici permet d'en faire autant.
105
+ */
106
+ dpr?: number;
107
+ /** trace de layout — publie chaque ligne dessinée pour comparaison avec Word */
108
+ onLine?(line: LineTrace): void;
109
+ /** publie le rectangle de chaque image dessinée — la souris n'a que ça */
110
+ onImage?(rect: ImageRect): void;
111
+ /** Chaque TRAIT dessiné — voir `RuleTrace`. */
112
+ onRule?(rule: RuleTrace): void;
113
+ /**
114
+ * Un RANG de tableau composé, avec la hauteur que nous lui donnons.
115
+ *
116
+ * Word publie la sienne dans son rendu (l'écart entre la première ligne d'un
117
+ * rang et celle du suivant) : sans ce rappel, les deux ne se comparaient
118
+ * qu'indirectement, en changeant une règle et en regardant le score bouger.
119
+ */
120
+ onRow?(row: RowTrace): void;
121
+ /**
122
+ * Chaque changement de page ou de colonne, avec sa cause.
123
+ *
124
+ * Sans elle, un document qui fabrique des pages ne se diagnostique qu'à
125
+ * tâtons : le rendu tourne dans le navigateur, on ne voit que le résultat. Ce
126
+ * rapport dit QUI a coupé, et à quelle hauteur — c'est la moitié du travail.
127
+ */
128
+ onBreak?(b: {
129
+ page: number;
130
+ y: number;
131
+ cause: string;
132
+ bloc?: number;
133
+ }): void;
134
+ /** Bloc en cours de composition, reporté sur chaque ligne publiée. */
135
+ blockIdx?: number;
136
+ /** zone dessinée — 'body' par défaut */
137
+ part?: 'body' | 'header' | 'footer';
138
+ /** w:defaultTabStop du document, en points (36 par défaut) */
139
+ defaultTabPt?: number;
140
+ /**
141
+ * `w:doNotExpandShiftReturn` — une ligne justifiée qui finit par un `w:br`
142
+ * n'est pas étirée à la colonne. 115 des 400 documents mesurés le posent.
143
+ */
144
+ noExpandShiftReturn?: boolean;
145
+ /**
146
+ * compatibilityMode < 15 — Word 2010 and earlier never condense the blanks
147
+ * of a justified line to keep its last word; only Word 2013+ does (`keepsWord`).
148
+ * Measured on 4 400 of Word's own decisions in 39 such documents: the
149
+ * condensing rule agrees with 75.8 % of them, "send the word down whenever it
150
+ * overflows" with 98.7 %. 134 corpus documents are in a legacy mode.
151
+ */
152
+ legacyWrap?: boolean;
153
+ /** `w:ulTrailSpace` — le soulignement couvre l'espace de fin de ligne */
154
+ ulTrailSpace?: boolean;
155
+ /** numéro de page courant et total, pour les champs PAGE/NUMPAGES */
156
+ nums?: PageNums;
157
+ /**
158
+ * Contexte de la page `idx` (0-based), créée au besoin.
159
+ *
160
+ * Un rang de tableau plus haut qu'une page doit continuer sur la suivante,
161
+ * colonne par colonne : chaque cellule a besoin de revenir sur la même page
162
+ * que ses voisines. Sans ça, tout ce qui dépassait était dessiné hors du
163
+ * canvas — donc perdu (mesuré à 680 pt hors page sur un contrat bilingue).
164
+ */
165
+ pageAt?(idx: number): {
166
+ ctx: CanvasRenderingContext2D;
167
+ top: number;
168
+ };
169
+ /**
170
+ * Annonce le début d'un rang de tableau, et le rang du premier paragraphe
171
+ * qu'il porte. Un contrat de 42 pages ne compte que dix blocs — sans ce
172
+ * repère, la composition incrémentale n'aurait aucun point où reprendre.
173
+ */
174
+ onRowStart?(row: number, para: number): void;
175
+ /**
176
+ * Publie le rectangle d'un TABLEAU, un par page qu'il occupe.
177
+ *
178
+ * Un tableau ne s'attrape pas par son texte : le curseur y tombe toujours
179
+ * dans une cellule. Sans ce rectangle, on ne peut ni le prendre comme un
180
+ * tout, ni lui poser une poignée. Le rang dans `tables()` est ajouté par le
181
+ * renderer, qui seul sait quel bloc il dessine.
182
+ */
183
+ onTable?(rect: {
184
+ page: number;
185
+ x: number;
186
+ y: number;
187
+ width: number;
188
+ height: number;
189
+ }): void;
190
+ /**
191
+ * Le contrôle des orphelines s'applique-t-il dans ce flux ?
192
+ *
193
+ * Le renderer le décide pour le corps (il le désactive en multi-colonnes, où
194
+ * il se bat avec l'équilibrage) ; les cellules en héritent. Sans lui, tout
195
+ * document dont le corps tient dans un tableau n'avait aucun contrôle des
196
+ * orphelines — « Vanished » laissait une première ligne seule en bas de page
197
+ * et perdait une page entière de correspondance.
198
+ */
199
+ widowControl?: boolean;
200
+ /**
201
+ * `w:spacing w:after` déjà appliqué par le paragraphe précédent.
202
+ *
203
+ * Word ne CUMULE pas l'espacement après un paragraphe et celui avant le
204
+ * suivant : il prend le plus grand des deux (mesuré au banc de sondes —
205
+ * before=6pt et after=6pt donnent 6 pt, pas 12). On garde donc ce qui a déjà
206
+ * été posé pour ne compléter que la différence.
207
+ */
208
+ prevSpaceAfter?: number;
209
+ /**
210
+ * Haut du corps de page, en pixels.
211
+ *
212
+ * Sert à savoir ce qu'une page ENTIÈRE peut contenir, et donc si changer de
213
+ * page servirait à quelque chose : une ligne de tableau plus haute qu'une
214
+ * page ne tiendra pas mieux sur la suivante.
215
+ */
216
+ bodyTop?: number;
217
+ /** style du paragraphe précédent — `w:contextualSpacing` ne joue qu'entre égaux */
218
+ prevStyleId?: string;
219
+ /** le paragraphe précédent déclarait-il `w:contextualSpacing` ? */
220
+ prevContextual?: boolean;
221
+ /**
222
+ * Rang du paragraphe en cours de dessin dans `paragraphs`.
223
+ *
224
+ * C'est la moitié de l'adresse qu'un curseur réclame — l'autre moitié est le
225
+ * rang du caractère, que le jeton porte. `undefined` pour ce qui ne vit pas
226
+ * dans le fil du corps : en-tête, pied, zone de texte ancrée. Ces
227
+ * paragraphes-là ne sont pas dans `paragraphs(doc)`, donc pas adressables.
228
+ */
229
+ paraIndex?: number;
230
+ /**
231
+ * Fichier du zip où vit le paragraphe dessiné — `undefined` pour le corps.
232
+ *
233
+ * Un en-tête est fait des mêmes `w:p` dans un autre fichier. Sans ce chemin,
234
+ * son rang de paragraphe désignerait le corps, et le curseur écrirait dans
235
+ * un tout autre texte.
236
+ */
237
+ partPath?: string;
238
+ /**
239
+ * Publier aussi les lignes SANS texte.
240
+ *
241
+ * Un paragraphe vide n'a rien à comparer au PDF de Word : le banc l'ignore, et
242
+ * l'ajouter à ses appariements fausserait ses mesures. L'éditeur, lui, en a
243
+ * besoin — sans sa géométrie, on ne peut pas poser un curseur sur une ligne
244
+ * vide, et ces matrices en comptent des centaines.
245
+ */
246
+ traceEmpty?: boolean;
247
+ /**
248
+ * Facteur correctif Canvas→hmtx par police.
249
+ *
250
+ * Canvas (CoreText/macOS) mesure les glyphes ~1% plus large que les avances
251
+ * du TTF. Multiplier `measureText().width` par ce facteur corrige la mesure
252
+ * sans toucher au dessin — la justification étire/comprime ensuite.
253
+ */
254
+ widthCorrections?: Record<string, number>;
255
+ }
256
+ /** Un rang de tableau composé, pour comparer sa hauteur à celle de Word. */
257
+ export interface RowTrace {
258
+ /** index du BLOC du corps qui porte ce tableau */
259
+ bloc?: number;
260
+ page: number;
261
+ /** haut du rang, en px CSS */
262
+ y: number;
263
+ /** hauteur du rang, en px CSS — trait compris, comme chez Word */
264
+ height: number;
265
+ rowIdx: number;
266
+ rows: number;
267
+ /** premier texte non vide du rang, pour l'apparier au rendu de Word */
268
+ text: string;
269
+ }
270
+ /** Une ligne dessinée sur le canvas, pour comparer avec pdftotext -bbox */
271
+ /**
272
+ * Un TRAIT dessiné — bordure de tableau, de paragraphe, de run, soulignement.
273
+ *
274
+ * Ni la bordure ni la fusion de cellules ne produisent de TEXTE : le banc de
275
+ * référence, qui apparie des lignes de texte, ne peut pas les voir. C'est le
276
+ * même angle mort que `w:w`, où 1 912 lignes illisibles laissaient le score
277
+ * inchangé au centième. Le PDF de Word publie ses traits en vectoriel
278
+ * (`mutool draw -F trace`) ; il fallait que nous publiions les nôtres.
279
+ */
280
+ export interface RuleTrace {
281
+ page: number;
282
+ /** extrémités du trait, en px CSS, comme `LineTrace` */
283
+ x1: number;
284
+ y1: number;
285
+ x2: number;
286
+ y2: number;
287
+ /** épaisseur en px CSS */
288
+ widthPx: number;
289
+ kind: 'table' | 'para' | 'run' | 'underline' | 'strike' | 'footnote';
290
+ }
291
+ /** Les notes de bas de page d'un document, prêtes à composer. */
292
+ export interface Footnotes {
293
+ /** les paragraphes de toutes les notes, à la suite */
294
+ paragraphs: StyledParagraph[];
295
+ /** `[start, end)` dans `paragraphs`, indexé par NUMÉRO d'appel — 0 inutilisé */
296
+ ranges: Array<{
297
+ start: number;
298
+ end: number;
299
+ }>;
300
+ }
301
+ export interface LineTrace {
302
+ /**
303
+ * Index du BLOC dont vient cette ligne.
304
+ *
305
+ * Sans lui, `bench breaks` ne pouvait imputer un désaccord de page qu'à « la
306
+ * rupture publiée juste avant », heuristique qui a déjà fait lire deux fois
307
+ * de suite une cause pour une autre (voir mesure.md). Avec lui, on remonte de
308
+ * la dernière ligne d'une page de Word au bloc qui la porte, donc à la
309
+ * rupture qui décide vraiment.
310
+ */
311
+ bloc?: number;
312
+ page: number;
313
+ /** position Y de la baseline, en px CSS */
314
+ y: number;
315
+ /** haut de la boîte de ligne, en px CSS — `pdftotext -bbox` donne un haut de
316
+ * glyphe, pas une baseline : comparer l'un à l'autre inventait 8 pt d'écart */
317
+ top: number;
318
+ /** hauteur de la boîte de ligne, en px CSS */
319
+ height: number;
320
+ /** position X de départ, en px CSS */
321
+ x: number;
322
+ /** largeur totale de la ligne */
323
+ width: number;
324
+ /**
325
+ * Largeur NATURELLE de la ligne, avant justification et hors tabulations.
326
+ *
327
+ * `width` est la largeur DESSINÉE : sur une ligne justifiée elle vaut la
328
+ * colonne, et sur une ligne tabulée elle comprend les blancs des taquets.
329
+ * Aucune des deux ne se compare à la somme des avances que Word publie dans
330
+ * son PDF — et c'est cette somme-là qui juge nos métriques.
331
+ */
332
+ naturalWidth: number;
333
+ /**
334
+ * Échelle horizontale des glyphes (`w:rPr/w:w`), 1 par défaut.
335
+ *
336
+ * Publiée pour le banc : `mutool` rapporte pour chaque ligne une taille qui
337
+ * vaut `sqrt(sx × sy)` — la moyenne géométrique du matriciel de texte — donc
338
+ * PAS le corps composé dès que Word étire les glyphes. Sans elle, 990 lignes
339
+ * du « Contrat Runner Multilingue » passaient pour composées à 8 pt là où
340
+ * Word en annonçait 8,8, alors que les deux valent 8.
341
+ */
342
+ scaleX?: number;
343
+ /** texte de la ligne */
344
+ text: string;
345
+ /** taille de police dominante */
346
+ fontPx: number;
347
+ /**
348
+ * Famille et couleur DOMINANTES de la ligne — celles du jeton le plus gros.
349
+ *
350
+ * Word publie dans son PDF la police qu'il a RÉELLEMENT composée, y compris
351
+ * quand il en a substitué une (Times y sort en TimesNewRomanPSMT). Sans ces
352
+ * deux champs de notre côté, la comparaison ne peut porter que sur des
353
+ * positions : une page rendue dans la mauvaise police, au bon endroit,
354
+ * marquait cent pour cent.
355
+ */
356
+ fontFamily?: string;
357
+ color?: string;
358
+ /** zone de la page — `pdftotext` mélange les trois, il faut pouvoir trier */
359
+ part: 'body' | 'header' | 'footer';
360
+ /**
361
+ * Rang du paragraphe dessiné — `undefined` hors du fil du corps.
362
+ *
363
+ * Avec l'`off` des mots, c'est ce qui fait de la trace une carte cliquable :
364
+ * le renderer publie non seulement où il a dessiné, mais QUOI.
365
+ */
366
+ para?: number;
367
+ /** fichier du zip d'où vient ce paragraphe — `undefined` pour le corps */
368
+ partPath?: string;
369
+ /**
370
+ * Position de chaque mot dessiné, en px CSS.
371
+ *
372
+ * `pdftotext -bbox` donne la boîte de chaque mot : comparer mot à mot plutôt
373
+ * que ligne à ligne, c'est la différence entre une mesure qui a un gradient et
374
+ * une qui n'en a pas. Une césure différente déplace deux ou trois mots, elle
375
+ * ne rend pas faux tout le paragraphe.
376
+ *
377
+ * `off` est le rang du premier caractère du mot dans le texte du paragraphe,
378
+ * et `font` la police avec laquelle il a été mesuré — de quoi retrouver un
379
+ * rang de caractère à l'intérieur du mot, sans le redemander au modèle.
380
+ */
381
+ words: Array<{
382
+ x: number;
383
+ width: number;
384
+ text: string;
385
+ off?: number;
386
+ font?: string;
387
+ }>;
388
+ }
389
+ /**
390
+ * Rectangle d'une IMAGE dessinée, en px CSS relatifs à sa page.
391
+ *
392
+ * Une image n'occupe aucun caractère : elle n'a donc pas d'adresse où poser un
393
+ * curseur, et le hit-test du texte ne la trouvera jamais. Sans ce rectangle,
394
+ * elle est invisible à la souris — on ne peut ni la sélectionner ni la
395
+ * redimensionner. `index` est son rang parmi les images de son paragraphe,
396
+ * le même que celui du contexte.
397
+ */
398
+ export interface ImageRect {
399
+ para: number;
400
+ index: number;
401
+ page: number;
402
+ x: number;
403
+ y: number;
404
+ width: number;
405
+ height: number;
406
+ /** posée hors du fil (`wp:anchor`) plutôt qu'entre deux mots */
407
+ anchored: boolean;
408
+ }
409
+ /**
410
+ * Rectangle d'un TABLEAU sur une page, en px CSS relatifs à elle.
411
+ *
412
+ * Un par page : un tableau qui enjambe trois feuilles en produit trois.
413
+ */
414
+ export interface TableRect {
415
+ table: number;
416
+ page: number;
417
+ x: number;
418
+ y: number;
419
+ width: number;
420
+ height: number;
421
+ }
422
+ /** Rectangle dessiné pour un run marqué, en px CSS relatifs à sa page. */
423
+ export interface MarkRect {
424
+ mark: string;
425
+ page: number;
426
+ x: number;
427
+ y: number;
428
+ width: number;
429
+ height: number;
430
+ /** taille de police du run marqué — un calque peut s'y accorder */
431
+ fontPx: number;
432
+ }
433
+ /**
434
+ * Zone de texte ancrée, prête à dessiner.
435
+ *
436
+ * Posée à ses coordonnées quand on dessine le paragraphe qui porte son ancre :
437
+ * elle ne prend aucune place dans le fil et ne compte pas dans la pagination.
438
+ */
439
+ export interface PlacedTextBox {
440
+ paraIndex: number;
441
+ xPt: number;
442
+ yPt: number;
443
+ relH: string;
444
+ relV: string;
445
+ widthPt: number;
446
+ heightPt: number;
447
+ /**
448
+ * Marges INTERNES du cadre (`a:bodyPr`), en points — 7,2 à gauche et à droite,
449
+ * 3,6 en haut chez Word par défaut. Elles décalent le texte DANS le cadre.
450
+ */
451
+ insetLeftPt: number;
452
+ insetTopPt: number;
453
+ insetRightPt: number;
454
+ /** `none` = flotte sans prendre de place ; sinon Word réserve sa hauteur */
455
+ wrap: 'none' | 'square' | 'topAndBottom' | 'tight' | 'through';
456
+ paragraphs: StyledParagraph[];
457
+ /** `wp:inline` : la zone part du RETRAIT de son paragraphe, pas de la marge */
458
+ inline?: boolean;
459
+ }
460
+ /** Contenu d'une part composé comme un corps : blocs dans l'ordre, plus les tableaux. */
461
+ export interface PartBlocks {
462
+ blocks: BodyBlock[];
463
+ tables: TableInfo[];
464
+ }
465
+ /** En-têtes et pieds résolus pour une section, dans l'ordre de `sections`. */
466
+ export interface SectionParts {
467
+ /**
468
+ * En-tête de la PREMIÈRE page.
469
+ *
470
+ * Word ne le pose que si la section déclare `w:titlePg` ; c'est à l'appelant
471
+ * de le vérifier avant de le fournir. Le PIED de première page, lui, n'est
472
+ * pas encore posé — voir docs/boucle-fidelite.md, « Le pied de première
473
+ * page ».
474
+ */
475
+ firstPageHeader?: StyledParagraph[];
476
+ defaultHeader?: StyledParagraph[];
477
+ defaultFooter?: StyledParagraph[];
478
+ /**
479
+ * Blocs et tableaux de chaque part, quand elle en porte.
480
+ *
481
+ * Un en-tête sans tableau se dessine très bien comme une suite de
482
+ * paragraphes ; un en-tête AVEC tableau, non — ses cellules s'empilent au
483
+ * lieu de se ranger côte à côte, et sa hauteur double. Ces champs ne sont
484
+ * donc renseignés que dans ce cas, et le dessinateur retombe sur la liste de
485
+ * paragraphes quand ils manquent.
486
+ */
487
+ firstPageHeaderBlocks?: PartBlocks;
488
+ /** `w:titlePg` : la première page a ses PROPRES en-tête et pied — AUCUN s'ils ne sont pas déclarés. */
489
+ titlePg?: boolean;
490
+ firstPageFooter?: StyledParagraph[];
491
+ firstPageFooterBoxes?: PlacedTextBox[];
492
+ /** Parts des pages PAIRES — servies seulement si `w:evenAndOddHeaders`. */
493
+ evenHeader?: StyledParagraph[];
494
+ evenHeaderBlocks?: PartBlocks;
495
+ evenFooter?: StyledParagraph[];
496
+ evenFooterBoxes?: PlacedTextBox[];
497
+ defaultHeaderBlocks?: PartBlocks;
498
+ defaultFooterBlocks?: PartBlocks;
499
+ /**
500
+ * Zones de texte ancrées du PIED, posées à leurs coordonnées.
501
+ *
502
+ * Le paraphe des contrats en est une. Exclue du fil pour ne pas surgir à
503
+ * gauche, elle n'était dessinée nulle part et manquait à chaque page.
504
+ */
505
+ defaultFooterBoxes?: PlacedTextBox[];
506
+ /**
507
+ * Chemins des parts d'en-tête et de pied dans le zip.
508
+ *
509
+ * Sans eux, un paragraphe d'en-tête n'a pas d'adresse : son rang désignerait
510
+ * le corps, et le curseur écrirait dans un tout autre texte.
511
+ */
512
+ headerPath?: string;
513
+ footerPath?: string;
514
+ }
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env tsx
2
+ export {};
@@ -0,0 +1,19 @@
1
+ import { type DocxDocument } from '../../docx-model/src/index';
2
+ export interface DocxComment {
3
+ id: string;
4
+ author: string;
5
+ initials: string;
6
+ date: string;
7
+ text: string;
8
+ /** indices of the paragraphs the comment range covers */
9
+ paras: number[];
10
+ }
11
+ /**
12
+ * Word comments live in `word/comments.xml`; the body carries the anchors
13
+ * (`w:commentRangeStart` / `w:commentRangeEnd` / `w:commentReference`).
14
+ *
15
+ * They are the only place in a matrix where you can write something the reader
16
+ * of the generated document will never see — which is exactly what the brief
17
+ * says is missing today.
18
+ */
19
+ export declare function readComments(doc: DocxDocument): DocxComment[];
@@ -0,0 +1,71 @@
1
+ /**
2
+ * Canonical LumiClone template grammar.
3
+ *
4
+ * Ported from `lumiclone/src/engine/pipeline/{canonical-tags,modifier-parser,tag-parser}.ts`.
5
+ * LumiClone is the engine that actually renders these matrices; the editor MUST
6
+ * read them the same way, or it shows the user something the generator will not do.
7
+ * Keep this file a faithful mirror — behaviour differences belong in a changelog,
8
+ * not in a silent divergence.
9
+ *
10
+ * ponytail: ported rather than imported — LumiClone is a server-side Fastify app
11
+ * (xmldom, better-sqlite3, exceljs). This is the browser-safe subset.
12
+ */
13
+ /** Block directives, mapped to a structural role. */
14
+ export declare const DIRECTIVES: {
15
+ readonly 'conditional-section': "open";
16
+ readonly 'repeating-section': "open";
17
+ readonly 'signature-section': "open";
18
+ readonly 'inline-section': "open";
19
+ readonly 'style-section': "open";
20
+ readonly 'else-section': "middle";
21
+ readonly 'end-section': "close";
22
+ readonly 'table-start': "open";
23
+ readonly 'table-end': "close";
24
+ readonly 'grid-start': "open";
25
+ readonly 'grid-end': "close";
26
+ readonly 'repeating-columns': "open";
27
+ readonly 'end-columns': "close";
28
+ readonly 'line-break': "standalone";
29
+ readonly 'page-section': "standalone";
30
+ };
31
+ export type Directive = keyof typeof DIRECTIVES;
32
+ export type Role = (typeof DIRECTIVES)[Directive];
33
+ /** Which close directive terminates which open directive. */
34
+ export declare const CLOSED_BY: Partial<Record<Directive, Directive>>;
35
+ /** Value-tag modifiers. Longest names first — parsing peels from the right. */
36
+ export declare const MODIFIERS: readonly ["default-val", "discard-if-empty", "discard-row-if", "discard-if", "cell-extension", "char-style", "optional", "prefix", "size", "inline", "per-page", "eval", "css"];
37
+ export type ModifierName = (typeof MODIFIERS)[number];
38
+ export interface Modifier {
39
+ name: string;
40
+ args: string[];
41
+ }
42
+ /**
43
+ * Rich-text editors silently substitute ASCII with Unicode lookalikes.
44
+ * Word turns ' into ’ (JSONata then reads it as a *field name*, with no error,
45
+ * and the tag renders empty) and inserts NBSP before ? % : (the tokenizer
46
+ * rejects them).
47
+ *
48
+ * Applied to the whole raw content, string literals included — that is what
49
+ * LumiClone does, so a NBSP typed inside a literal does not survive generation.
50
+ */
51
+ export declare function normalizeTagContent(raw: string): string;
52
+ /**
53
+ * Normalise a JSONata expression: stray spaces around dots, and `!` negation
54
+ * (which JSONata has no operator for) rewritten to `$not(...)`.
55
+ */
56
+ export declare function normalizeExpression(expr: string): string;
57
+ /** Peel `:modifier(args)` suffixes from the right of a tag body. */
58
+ export declare function parseModifiers(raw: string): {
59
+ expression: string;
60
+ modifiers: Modifier[];
61
+ };
62
+ export declare function parseValueTag(content: string): {
63
+ expression: string;
64
+ modifiers: Modifier[];
65
+ };
66
+ export declare function parseBlockTag(content: string): {
67
+ directive: string;
68
+ expression: string;
69
+ modifiers: Modifier[];
70
+ };
71
+ export declare const isDirective: (name: string) => name is Directive;
@@ -0,0 +1,22 @@
1
+ import type { Tag } from './scan';
2
+ /**
3
+ * Surlignage des valeurs substituées — portage de
4
+ * `lumiclone/src/engine/highlight/highlight-config.ts`.
5
+ *
6
+ * Même palette et même règle de classement que le moteur : ce que l'éditeur
7
+ * colore en aperçu est exactement ce que la génération colorerait avec
8
+ * `highlight: { enabled: true }`.
9
+ */
10
+ export type HighlightKind = 'text' | 'calcul' | 'conditional' | 'repeating' | 'signature';
11
+ /** Hex à 6 caractères, sans `#`, comme dans LumiClone. */
12
+ export declare const HIGHLIGHT_PALETTE: Record<HighlightKind, string>;
13
+ export declare const HIGHLIGHT_LABEL: Record<HighlightKind, string>;
14
+ export declare const cssColor: (kind: HighlightKind) => string;
15
+ export declare function categorizeByExpression(expression: string): HighlightKind;
16
+ /**
17
+ * Genre de surlignage de chaque tag de valeur.
18
+ *
19
+ * Le bloc englobant le plus proche l'emporte sur l'expression — c'est la pile
20
+ * `hlStack` du renderer LumiClone.
21
+ */
22
+ export declare function highlightKinds(tags: Tag[]): Map<number, HighlightKind>;
@@ -0,0 +1,4 @@
1
+ export * from './grammar';
2
+ export * from './scan';
3
+ export * from './comments';
4
+ export * from './highlight';
@@ -0,0 +1,27 @@
1
+ import { type Role, type Modifier } from './grammar';
2
+ export type TagKind = 'value' | 'signature' | 'block';
3
+ export interface Tag {
4
+ id: number;
5
+ para: number;
6
+ start: number;
7
+ end: number;
8
+ raw: string;
9
+ kind: TagKind;
10
+ /** block tags only */
11
+ directive?: string;
12
+ role?: Role;
13
+ expression: string;
14
+ modifiers: Modifier[];
15
+ /** nesting depth of enclosing blocks */
16
+ depth: number;
17
+ /** open ↔ close, and open → else */
18
+ match?: number;
19
+ elseId?: number;
20
+ /** signature target, e.g. `EMPLOYEE` */
21
+ target?: string;
22
+ paths: string[];
23
+ functions: string[];
24
+ error?: string;
25
+ }
26
+ /** Scan a document's paragraph texts into a flat, paired list of tags. */
27
+ export declare function scanTags(paragraphs: string[]): Tag[];