@aster-editor/word 0.4.3 → 0.5.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 (250) hide show
  1. package/README.md +204 -82
  2. package/dist/docx/compare/align.d.ts +24 -0
  3. package/dist/docx/compare/align.d.ts.map +1 -0
  4. package/dist/docx/compare/align.js +217 -0
  5. package/dist/docx/compare/align.js.map +1 -0
  6. package/dist/docx/compare/compare-blocks.d.ts +29 -0
  7. package/dist/docx/compare/compare-blocks.d.ts.map +1 -0
  8. package/dist/docx/compare/compare-blocks.js +234 -0
  9. package/dist/docx/compare/compare-blocks.js.map +1 -0
  10. package/dist/docx/compare/compare-context.d.ts +25 -0
  11. package/dist/docx/compare/compare-context.d.ts.map +1 -0
  12. package/dist/docx/compare/compare-context.js +31 -0
  13. package/dist/docx/compare/compare-context.js.map +1 -0
  14. package/dist/docx/compare/compare-docx.d.ts +4 -0
  15. package/dist/docx/compare/compare-docx.d.ts.map +1 -0
  16. package/dist/docx/compare/compare-docx.js +173 -0
  17. package/dist/docx/compare/compare-docx.js.map +1 -0
  18. package/dist/docx/compare/compare-tables.d.ts +13 -0
  19. package/dist/docx/compare/compare-tables.d.ts.map +1 -0
  20. package/dist/docx/compare/compare-tables.js +47 -0
  21. package/dist/docx/compare/compare-tables.js.map +1 -0
  22. package/dist/docx/compare/model-borders.d.ts +27 -0
  23. package/dist/docx/compare/model-borders.d.ts.map +1 -0
  24. package/dist/docx/compare/model-borders.js +41 -0
  25. package/dist/docx/compare/model-borders.js.map +1 -0
  26. package/dist/docx/compare/model-paragraph.d.ts +25 -0
  27. package/dist/docx/compare/model-paragraph.d.ts.map +1 -0
  28. package/dist/docx/compare/model-paragraph.js +309 -0
  29. package/dist/docx/compare/model-paragraph.js.map +1 -0
  30. package/dist/docx/compare/model-sections.d.ts +11 -0
  31. package/dist/docx/compare/model-sections.d.ts.map +1 -0
  32. package/dist/docx/compare/model-sections.js +97 -0
  33. package/dist/docx/compare/model-sections.js.map +1 -0
  34. package/dist/docx/compare/model.d.ts +113 -0
  35. package/dist/docx/compare/model.d.ts.map +1 -0
  36. package/dist/docx/compare/model.js +214 -0
  37. package/dist/docx/compare/model.js.map +1 -0
  38. package/dist/docx/compare/parts.d.ts +40 -0
  39. package/dist/docx/compare/parts.d.ts.map +1 -0
  40. package/dist/docx/compare/parts.js +113 -0
  41. package/dist/docx/compare/parts.js.map +1 -0
  42. package/dist/docx/compare/tally.d.ts +23 -0
  43. package/dist/docx/compare/tally.d.ts.map +1 -0
  44. package/dist/docx/compare/tally.js +94 -0
  45. package/dist/docx/compare/tally.js.map +1 -0
  46. package/dist/docx/compare/types.d.ts +55 -0
  47. package/dist/docx/compare/types.d.ts.map +1 -0
  48. package/dist/docx/compare/types.js +2 -0
  49. package/dist/docx/compare/types.js.map +1 -0
  50. package/dist/docx/compare/values.d.ts +13 -0
  51. package/dist/docx/compare/values.d.ts.map +1 -0
  52. package/dist/docx/compare/values.js +44 -0
  53. package/dist/docx/compare/values.js.map +1 -0
  54. package/dist/docx/import-docx.d.ts.map +1 -1
  55. package/dist/docx/import-docx.js +57 -2
  56. package/dist/docx/import-docx.js.map +1 -1
  57. package/dist/docx/preprocess/variables.d.ts.map +1 -1
  58. package/dist/docx/preprocess/variables.js +2 -2
  59. package/dist/docx/preprocess/variables.js.map +1 -1
  60. package/dist/docx/preprocess/xml-utils.d.ts +7 -0
  61. package/dist/docx/preprocess/xml-utils.d.ts.map +1 -1
  62. package/dist/docx/preprocess/xml-utils.js +9 -0
  63. package/dist/docx/preprocess/xml-utils.js.map +1 -1
  64. package/dist/docx/reader/headers.d.ts +17 -0
  65. package/dist/docx/reader/headers.d.ts.map +1 -0
  66. package/dist/docx/reader/headers.js +64 -0
  67. package/dist/docx/reader/headers.js.map +1 -0
  68. package/dist/docx/reader/html.d.ts +12 -0
  69. package/dist/docx/reader/html.d.ts.map +1 -0
  70. package/dist/docx/reader/html.js +27 -0
  71. package/dist/docx/reader/html.js.map +1 -0
  72. package/dist/docx/reader/images.d.ts +27 -0
  73. package/dist/docx/reader/images.d.ts.map +1 -0
  74. package/dist/docx/reader/images.js +288 -0
  75. package/dist/docx/reader/images.js.map +1 -0
  76. package/dist/docx/reader/index.d.ts +10 -0
  77. package/dist/docx/reader/index.d.ts.map +1 -0
  78. package/dist/docx/reader/index.js +177 -0
  79. package/dist/docx/reader/index.js.map +1 -0
  80. package/dist/docx/reader/lists.d.ts +44 -0
  81. package/dist/docx/reader/lists.d.ts.map +1 -0
  82. package/dist/docx/reader/lists.js +360 -0
  83. package/dist/docx/reader/lists.js.map +1 -0
  84. package/dist/docx/reader/lost.d.ts +30 -0
  85. package/dist/docx/reader/lost.d.ts.map +1 -0
  86. package/dist/docx/reader/lost.js +215 -0
  87. package/dist/docx/reader/lost.js.map +1 -0
  88. package/dist/docx/reader/notes.d.ts +4 -0
  89. package/dist/docx/reader/notes.d.ts.map +1 -0
  90. package/dist/docx/reader/notes.js +112 -0
  91. package/dist/docx/reader/notes.js.map +1 -0
  92. package/dist/docx/reader/package.d.ts +16 -0
  93. package/dist/docx/reader/package.d.ts.map +1 -0
  94. package/dist/docx/reader/package.js +138 -0
  95. package/dist/docx/reader/package.js.map +1 -0
  96. package/dist/docx/reader/paragraphs.d.ts +15 -0
  97. package/dist/docx/reader/paragraphs.d.ts.map +1 -0
  98. package/dist/docx/reader/paragraphs.js +162 -0
  99. package/dist/docx/reader/paragraphs.js.map +1 -0
  100. package/dist/docx/reader/properties.d.ts +90 -0
  101. package/dist/docx/reader/properties.d.ts.map +1 -0
  102. package/dist/docx/reader/properties.js +402 -0
  103. package/dist/docx/reader/properties.js.map +1 -0
  104. package/dist/docx/reader/runs.d.ts +49 -0
  105. package/dist/docx/reader/runs.d.ts.map +1 -0
  106. package/dist/docx/reader/runs.js +442 -0
  107. package/dist/docx/reader/runs.js.map +1 -0
  108. package/dist/docx/reader/sections.d.ts +36 -0
  109. package/dist/docx/reader/sections.d.ts.map +1 -0
  110. package/dist/docx/reader/sections.js +158 -0
  111. package/dist/docx/reader/sections.js.map +1 -0
  112. package/dist/docx/reader/styles.d.ts +24 -0
  113. package/dist/docx/reader/styles.d.ts.map +1 -0
  114. package/dist/docx/reader/styles.js +383 -0
  115. package/dist/docx/reader/styles.js.map +1 -0
  116. package/dist/docx/reader/tables.d.ts +6 -0
  117. package/dist/docx/reader/tables.d.ts.map +1 -0
  118. package/dist/docx/reader/tables.js +175 -0
  119. package/dist/docx/reader/tables.js.map +1 -0
  120. package/dist/docx/reader/test-support.d.ts +25 -0
  121. package/dist/docx/reader/test-support.d.ts.map +1 -0
  122. package/dist/docx/reader/test-support.js +135 -0
  123. package/dist/docx/reader/test-support.js.map +1 -0
  124. package/dist/docx/reader/testing-blocks.d.ts +50 -0
  125. package/dist/docx/reader/testing-blocks.d.ts.map +1 -0
  126. package/dist/docx/reader/testing-blocks.js +302 -0
  127. package/dist/docx/reader/testing-blocks.js.map +1 -0
  128. package/dist/docx/reader/types.d.ts +181 -0
  129. package/dist/docx/reader/types.d.ts.map +1 -0
  130. package/dist/docx/reader/types.js +2 -0
  131. package/dist/docx/reader/types.js.map +1 -0
  132. package/dist/docx/reader/units-blocks.d.ts +75 -0
  133. package/dist/docx/reader/units-blocks.d.ts.map +1 -0
  134. package/dist/docx/reader/units-blocks.js +254 -0
  135. package/dist/docx/reader/units-blocks.js.map +1 -0
  136. package/dist/docx/reader/units.d.ts +72 -0
  137. package/dist/docx/reader/units.d.ts.map +1 -0
  138. package/dist/docx/reader/units.js +177 -0
  139. package/dist/docx/reader/units.js.map +1 -0
  140. package/dist/docx/types.d.ts +40 -2
  141. package/dist/docx/types.d.ts.map +1 -1
  142. package/dist/docx/writer/content-types.d.ts +30 -0
  143. package/dist/docx/writer/content-types.d.ts.map +1 -0
  144. package/dist/docx/writer/content-types.js +81 -0
  145. package/dist/docx/writer/content-types.js.map +1 -0
  146. package/dist/docx/writer/core-properties.d.ts +16 -0
  147. package/dist/docx/writer/core-properties.d.ts.map +1 -0
  148. package/dist/docx/writer/core-properties.js +64 -0
  149. package/dist/docx/writer/core-properties.js.map +1 -0
  150. package/dist/docx/writer/footnotes-merge.d.ts +30 -0
  151. package/dist/docx/writer/footnotes-merge.d.ts.map +1 -0
  152. package/dist/docx/writer/footnotes-merge.js +71 -0
  153. package/dist/docx/writer/footnotes-merge.js.map +1 -0
  154. package/dist/docx/writer/graft.d.ts +41 -0
  155. package/dist/docx/writer/graft.d.ts.map +1 -0
  156. package/dist/docx/writer/graft.js +277 -0
  157. package/dist/docx/writer/graft.js.map +1 -0
  158. package/dist/docx/writer/header-footer-graft.d.ts +34 -0
  159. package/dist/docx/writer/header-footer-graft.d.ts.map +1 -0
  160. package/dist/docx/writer/header-footer-graft.js +155 -0
  161. package/dist/docx/writer/header-footer-graft.js.map +1 -0
  162. package/dist/docx/writer/header-footer-variables.d.ts +25 -0
  163. package/dist/docx/writer/header-footer-variables.d.ts.map +1 -0
  164. package/dist/docx/writer/header-footer-variables.js +101 -0
  165. package/dist/docx/writer/header-footer-variables.js.map +1 -0
  166. package/dist/docx/writer/media.d.ts +32 -0
  167. package/dist/docx/writer/media.d.ts.map +1 -0
  168. package/dist/docx/writer/media.js +88 -0
  169. package/dist/docx/writer/media.js.map +1 -0
  170. package/dist/docx/writer/numbering-merge.d.ts +37 -0
  171. package/dist/docx/writer/numbering-merge.d.ts.map +1 -0
  172. package/dist/docx/writer/numbering-merge.js +140 -0
  173. package/dist/docx/writer/numbering-merge.js.map +1 -0
  174. package/dist/docx/writer/relationships.d.ts +63 -0
  175. package/dist/docx/writer/relationships.d.ts.map +1 -0
  176. package/dist/docx/writer/relationships.js +127 -0
  177. package/dist/docx/writer/relationships.js.map +1 -0
  178. package/dist/docx/writer/settings-merge.d.ts +21 -0
  179. package/dist/docx/writer/settings-merge.d.ts.map +1 -0
  180. package/dist/docx/writer/settings-merge.js +165 -0
  181. package/dist/docx/writer/settings-merge.js.map +1 -0
  182. package/dist/docx/writer/style-reconcile.d.ts +29 -0
  183. package/dist/docx/writer/style-reconcile.d.ts.map +1 -0
  184. package/dist/docx/writer/style-reconcile.js +319 -0
  185. package/dist/docx/writer/style-reconcile.js.map +1 -0
  186. package/dist/docx/writer/style-strip.d.ts +33 -0
  187. package/dist/docx/writer/style-strip.d.ts.map +1 -0
  188. package/dist/docx/writer/style-strip.js +267 -0
  189. package/dist/docx/writer/style-strip.js.map +1 -0
  190. package/dist/docx/writer/styles-merge.d.ts +57 -0
  191. package/dist/docx/writer/styles-merge.d.ts.map +1 -0
  192. package/dist/docx/writer/styles-merge.js +184 -0
  193. package/dist/docx/writer/styles-merge.js.map +1 -0
  194. package/dist/docx/writer/template.d.ts +48 -0
  195. package/dist/docx/writer/template.d.ts.map +1 -0
  196. package/dist/docx/writer/template.js +280 -0
  197. package/dist/docx/writer/template.js.map +1 -0
  198. package/dist/docx/writer/testing.d.ts +52 -0
  199. package/dist/docx/writer/testing.d.ts.map +1 -0
  200. package/dist/docx/writer/testing.js +318 -0
  201. package/dist/docx/writer/testing.js.map +1 -0
  202. package/dist/docx/writer/xml-io.d.ts +90 -0
  203. package/dist/docx/writer/xml-io.d.ts.map +1 -0
  204. package/dist/docx/writer/xml-io.js +215 -0
  205. package/dist/docx/writer/xml-io.js.map +1 -0
  206. package/dist/export/blocks.d.ts.map +1 -1
  207. package/dist/export/blocks.js +149 -12
  208. package/dist/export/blocks.js.map +1 -1
  209. package/dist/export/context.d.ts +34 -2
  210. package/dist/export/context.d.ts.map +1 -1
  211. package/dist/export/context.js +28 -2
  212. package/dist/export/context.js.map +1 -1
  213. package/dist/export/css.d.ts +58 -0
  214. package/dist/export/css.d.ts.map +1 -1
  215. package/dist/export/css.js +194 -0
  216. package/dist/export/css.js.map +1 -1
  217. package/dist/export/dom.d.ts +2 -0
  218. package/dist/export/dom.d.ts.map +1 -1
  219. package/dist/export/dom.js +2 -0
  220. package/dist/export/dom.js.map +1 -1
  221. package/dist/export/export-docx.d.ts +4 -0
  222. package/dist/export/export-docx.d.ts.map +1 -1
  223. package/dist/export/export-docx.js +57 -4
  224. package/dist/export/export-docx.js.map +1 -1
  225. package/dist/export/header-footer.d.ts +15 -1
  226. package/dist/export/header-footer.d.ts.map +1 -1
  227. package/dist/export/header-footer.js +37 -0
  228. package/dist/export/header-footer.js.map +1 -1
  229. package/dist/export/html-to-docx.d.ts +20 -2
  230. package/dist/export/html-to-docx.d.ts.map +1 -1
  231. package/dist/export/html-to-docx.js +40 -14
  232. package/dist/export/html-to-docx.js.map +1 -1
  233. package/dist/export/inline.d.ts +25 -3
  234. package/dist/export/inline.d.ts.map +1 -1
  235. package/dist/export/inline.js +91 -34
  236. package/dist/export/inline.js.map +1 -1
  237. package/dist/export/styles.d.ts +51 -7
  238. package/dist/export/styles.d.ts.map +1 -1
  239. package/dist/export/styles.js +121 -16
  240. package/dist/export/styles.js.map +1 -1
  241. package/dist/export/tables.d.ts.map +1 -1
  242. package/dist/export/tables.js +140 -12
  243. package/dist/export/tables.js.map +1 -1
  244. package/dist/export/types.d.ts +44 -5
  245. package/dist/export/types.d.ts.map +1 -1
  246. package/dist/index.d.ts +5 -2
  247. package/dist/index.d.ts.map +1 -1
  248. package/dist/index.js +1 -0
  249. package/dist/index.js.map +1 -1
  250. package/package.json +2 -2
@@ -0,0 +1,181 @@
1
+ import type { BlockBorder, CellVerticalAlign, DecorationStyle, DocumentLayout, OrderedListType, UploadHandler } from '@aster-editor/core';
2
+ import type { DocxImportWarning, DocxLostObject, DocxLostWhere } from '../types';
3
+ /**
4
+ * Types du lecteur OOXML (session 3). Figés en phase 0 : `index.ts` orchestre, chaque
5
+ * module (`styles`, `runs`, `paragraphs`, `tables`, `lists`, `images`, `notes`,
6
+ * `headers`, `sections`, `lost`) implémente une de ces interfaces et ne connaît les
7
+ * autres que par le `ConverterContext`.
8
+ */
9
+ /** Parseur XML injectable (`DOMParser` global par défaut), jamais le `document`. */
10
+ export type XmlParse = (xml: string) => Document;
11
+ export interface ReaderOptions {
12
+ readonly upload?: UploadHandler;
13
+ /** Conserver les notes en liste finale. */
14
+ readonly footnotes: boolean;
15
+ readonly emptyParagraphs: 'keep' | 'drop';
16
+ readonly parseXml: XmlParse;
17
+ }
18
+ export interface ReaderResult {
19
+ readonly html: string;
20
+ readonly layout: DocumentLayout;
21
+ readonly lost: readonly DocxLostObject[];
22
+ readonly warnings: readonly DocxImportWarning[];
23
+ }
24
+ /** Relation d'une partie (`_rels/*.rels`). `target` est déjà résolu en chemin absolu du zip. */
25
+ export interface Relationship {
26
+ readonly id: string;
27
+ readonly type: string;
28
+ readonly target: string;
29
+ readonly external: boolean;
30
+ }
31
+ /** Accès en lecture au paquet `.docx` : parties XML parsées (en cache), binaires, relations. */
32
+ export interface DocxPackage {
33
+ /** Chemin de la partie principale, en général `word/document.xml`. */
34
+ readonly mainPart: string;
35
+ has(path: string): boolean;
36
+ /** Partie XML parsée, `null` si absente ou illisible (avertissement posé par l'appelant). */
37
+ part(path: string): Promise<Document | null>;
38
+ binary(path: string): Promise<Uint8Array | null>;
39
+ /** Relations de la partie donnée, vide si elle n'en a pas. */
40
+ rels(partPath: string): Promise<ReadonlyMap<string, Relationship>>;
41
+ /** Partie liée par type (suffixe de l'URI, ex. `styles`, `numbering`, `footnotes`). */
42
+ related(partPath: string, typeSuffix: string): Promise<string | null>;
43
+ }
44
+ /** Propriétés de run résolues (style de caractère + style de paragraphe + défauts + directes). */
45
+ export interface ResolvedRunProps {
46
+ readonly fontFamily?: string;
47
+ readonly fontSizePt?: number;
48
+ readonly bold?: boolean;
49
+ readonly italic?: boolean;
50
+ readonly underline?: DecorationStyle | null;
51
+ readonly strike?: DecorationStyle | null;
52
+ readonly color?: string;
53
+ readonly highlight?: string;
54
+ readonly superscript?: boolean;
55
+ readonly subscript?: boolean;
56
+ readonly letterSpacingPt?: number;
57
+ readonly caps?: 'all' | 'small';
58
+ readonly runStyle?: string;
59
+ readonly lang?: string;
60
+ }
61
+ export type HeadingLevel = 1 | 2 | 3 | 4 | 5 | 6;
62
+ export type ParagraphAlign = 'left' | 'center' | 'right' | 'justify';
63
+ /** Propriétés de paragraphe résolues (style hérité + propriétés directes). */
64
+ export interface ResolvedParagraphProps {
65
+ readonly styleId?: string;
66
+ readonly headingLevel?: HeadingLevel;
67
+ readonly align?: ParagraphAlign;
68
+ readonly lineHeight?: number;
69
+ readonly lineHeightPt?: number;
70
+ readonly spacingBeforePt?: number;
71
+ readonly spacingAfterPt?: number;
72
+ readonly indentLeftPt?: number;
73
+ readonly indentRightPt?: number;
74
+ readonly indentFirstLinePt?: number;
75
+ readonly borders?: readonly BlockBorder[];
76
+ readonly shading?: string;
77
+ readonly keepWithNext?: boolean;
78
+ readonly pageBreakBefore?: boolean;
79
+ readonly numbering?: {
80
+ readonly numId: string;
81
+ readonly level: number;
82
+ };
83
+ /** Défauts de run hérités du style de paragraphe, base de la résolution des runs. */
84
+ readonly runDefaults: ResolvedRunProps;
85
+ }
86
+ export interface TableStyleProps {
87
+ readonly borders?: readonly BlockBorder[];
88
+ readonly cellBorders?: readonly BlockBorder[];
89
+ readonly cellShading?: string;
90
+ readonly cellPaddingPt?: readonly [number, number, number, number];
91
+ readonly runDefaults?: ResolvedRunProps;
92
+ }
93
+ /** Résolution des styles (`styles.xml`, `docDefaults`, thème). Implémenté par `styles.ts` (L24). */
94
+ export interface StyleResolver {
95
+ paragraph(pPr: Element | null): ResolvedParagraphProps;
96
+ run(rPr: Element | null, paragraph: ResolvedParagraphProps): ResolvedRunProps;
97
+ tableStyle(styleId: string | null): TableStyleProps | null;
98
+ defaultFont(): {
99
+ readonly family?: string;
100
+ readonly sizePt?: number;
101
+ };
102
+ }
103
+ export type ListFormat = 'bullet' | OrderedListType | 'none';
104
+ export interface ListLevel {
105
+ readonly level: number;
106
+ readonly format: ListFormat;
107
+ /** Puce ou modèle de texte (`%1.`), tel que Word le donne. */
108
+ readonly text: string;
109
+ readonly start: number;
110
+ readonly indentLeftPt?: number;
111
+ readonly hangingPt?: number;
112
+ }
113
+ export interface ListDefinition {
114
+ readonly numId: string;
115
+ readonly levels: readonly ListLevel[];
116
+ }
117
+ /** Résolution de `numbering.xml`. Implémenté par `lists.ts` (L25). */
118
+ export interface NumberingResolver {
119
+ definition(numId: string): ListDefinition | null;
120
+ }
121
+ export interface ParagraphBlock {
122
+ readonly kind: 'paragraph';
123
+ /** HTML complet du bloc (`<p …>…</p>` ou `<hN …>…</hN>`). */
124
+ readonly html: string;
125
+ readonly numbering?: {
126
+ readonly numId: string;
127
+ readonly level: number;
128
+ };
129
+ readonly isEmpty: boolean;
130
+ }
131
+ export interface TableBlock {
132
+ readonly kind: 'table';
133
+ readonly html: string;
134
+ }
135
+ /** Bloc déjà rendu : saut de page (`<hr data-page-break>`), texte d'un objet perdu… */
136
+ export interface RawBlock {
137
+ readonly kind: 'raw';
138
+ readonly html: string;
139
+ }
140
+ export type Block = ParagraphBlock | TableBlock | RawBlock;
141
+ /** Conversion des dessins. Implémenté par `images.ts` (L25). */
142
+ export interface ImageConverter {
143
+ /** `<img …>` ou chaîne vide si l'image est ignorée (avertissement posé). */
144
+ drawing(drawing: Element, ctx: ConverterContext): Promise<string>;
145
+ }
146
+ /** Notes de bas de page et de fin. Implémenté par `notes.ts` (L25). */
147
+ export interface NoteRegistry {
148
+ /** HTML inline de l'appel de note (`<sup data-footnote-ref="n">n</sup>`). */
149
+ reference(id: string, kind: 'footnote' | 'endnote', ctx: ConverterContext): string;
150
+ /** Liste finale des notes référencées, vide s'il n'y en a pas ou si `footnotes` est faux. */
151
+ render(ctx: ConverterContext): Promise<string>;
152
+ }
153
+ /** Points d'entrée de conversion, pour que les modules s'appellent sans dépendre des fichiers. */
154
+ export interface BlockConverters {
155
+ paragraph(p: Element, ctx: ConverterContext): Promise<ParagraphBlock>;
156
+ table(tbl: Element, ctx: ConverterContext): Promise<TableBlock>;
157
+ /** Enfants bloc d'un conteneur (`w:body`, `w:tc`, `w:sdtContent`, `w:footnote`…). */
158
+ blocks(container: Element, ctx: ConverterContext): Promise<Block[]>;
159
+ /** Rendu HTML d'une suite de blocs, listes regroupées. */
160
+ render(blocks: readonly Block[], ctx: ConverterContext): string;
161
+ }
162
+ export interface ConverterContext {
163
+ readonly pkg: DocxPackage;
164
+ /** Partie en cours de lecture (chemin zip), pour les relations et les images. */
165
+ readonly part: string;
166
+ readonly where: DocxLostWhere;
167
+ readonly styles: StyleResolver;
168
+ readonly numbering: NumberingResolver;
169
+ readonly images: ImageConverter;
170
+ readonly notes: NoteRegistry;
171
+ readonly convert: BlockConverters;
172
+ readonly options: ReaderOptions;
173
+ readonly warnings: DocxImportWarning[];
174
+ readonly lost: DocxLostObject[];
175
+ /** Style de tableau courant (cellules), `null` hors tableau. */
176
+ readonly tableStyle: TableStyleProps | null;
177
+ readonly cellVerticalAlign?: CellVerticalAlign;
178
+ }
179
+ /** Contexte dérivé pour une autre partie (en-tête, note) ou un autre conteneur. */
180
+ export type ContextPatch = Partial<Pick<ConverterContext, 'part' | 'where' | 'tableStyle' | 'cellVerticalAlign'>>;
181
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/docx/reader/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/docx/reader/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,75 @@
1
+ import type { BlockBorder, BorderSide, BorderStyle } from '@aster-editor/core';
2
+ /** Arrondi à deux décimales, pour ne jamais sortir `12.700000000000001`. */
3
+ export declare function round2(value: number): number;
4
+ /** Twips (1/20 pt) → points. */
5
+ export declare function twipsToPt(twips: number): number;
6
+ /** Twips → millimètres, deux décimales (`1134` → `20.0`, `720` → `12.7`). */
7
+ export declare function twipsToMm(twips: number): number;
8
+ /** Twips → pixels entiers (largeurs de colonnes Tiptap). */
9
+ export declare function twipsToPx(twips: number): number;
10
+ /** EMU (914 400 par pouce) → pixels entiers à 96 dpi. */
11
+ export declare function emuToPx(emu: number): number;
12
+ /** Points → pixels entiers à 96 dpi (dimensions VML `style="width:72pt"`). */
13
+ export declare function ptToPx(points: number): number;
14
+ /** Huitièmes de point (`w:sz` des bordures) → points. */
15
+ export declare function eighthsToPt(eighths: number): number;
16
+ /**
17
+ * Nombre lu dans un attribut `w:…`, `undefined` si absent ou non numérique. Volontairement
18
+ * tolérant (`Number()`) : les modules de blocs (L25) bornent ensuite les valeurs et
19
+ * avertissent (`1e12` → « hors des bornes ») ; le strict `numberAttr` d'`units.ts` sert
20
+ * aux runs et paragraphes.
21
+ */
22
+ export declare function numericAttribute(element: Element | null, name: string): number | undefined;
23
+ /** Vrai pour un attribut booléen Word absent (`<w:tblHeader/>` = vrai) ou valant `1`/`true`/`on`. */
24
+ export declare function booleanAttribute(element: Element | null): boolean;
25
+ /**
26
+ * Style CSS d'une bordure Word (`w:val`). `nil`/`none` → `null` (pas de bordure) ; les
27
+ * dizaines de styles décoratifs de Word sont ramenés aux quatre du contrat.
28
+ */
29
+ export declare function borderStyleOf(value: string): BorderStyle | null;
30
+ /** Couleur Word (`000000`, `auto`) → CSS `#rrggbb`, `auto` ou invalide → repli. */
31
+ export declare function cssColor(value: string, fallback?: string): string;
32
+ /** Couleur de fond d'un `w:shd` (`w:fill`), `undefined` si absente, `auto` ou non hexadécimale. */
33
+ export declare function shadingColor(shd: Element | null): string | undefined;
34
+ /** Noms des bordures d'un conteneur Word, côtés plus bordures intérieures de tableau. */
35
+ export type BorderName = 'top' | 'right' | 'bottom' | 'left' | 'insideH' | 'insideV';
36
+ /** Bordures lues : `null` = explicitement sans bordure (`nil`), absent = non précisé. */
37
+ export type BorderMap = Partial<Record<BorderName, BlockBorder | null>>;
38
+ /** Côtés CSS dans l'ordre de sérialisation du contrat. */
39
+ export declare const CSS_SIDES: readonly BorderSide[];
40
+ /** Bordure d'un élément `w:top`, `w:left`… `null` si `nil`/`none`. */
41
+ export declare function readBorderElement(element: Element, side: BorderSide): BlockBorder | null;
42
+ /**
43
+ * Lit `w:tblBorders`, `w:tcBorders` ou `w:pBdr`. Les bordures intérieures (`insideH`,
44
+ * `insideV`) sont rangées sous leur nom avec un côté provisoire, à re-côté par l'appelant.
45
+ */
46
+ export declare function readBorders(container: Element | null): BorderMap;
47
+ /** Bordure recôtée (`insideH` appliquée au bas d'une cellule, par exemple). */
48
+ export declare function withSide(border: BlockBorder, side: BorderSide): BlockBorder;
49
+ /** Liste de bordures → table par côté, pour fusionner style et propriétés directes. */
50
+ export declare function bordersBySide(borders: readonly BlockBorder[] | undefined): Partial<Record<BorderSide, BlockBorder>>;
51
+ /**
52
+ * Déclarations CSS `border-top: 0.5pt solid #000000`… dans l'ordre du contrat
53
+ * (`top`, `right`, `bottom`, `left`), les côtés absents étant omis.
54
+ */
55
+ export declare function borderDeclarations(borders: Partial<Record<BorderSide, BlockBorder | null | undefined>>): (readonly [string, string | undefined])[];
56
+ /** Marges `top right bottom left` en points. */
57
+ export type PaddingPt = readonly [number, number, number, number];
58
+ /** Marges partielles lues dans `w:tblCellMar` ou `w:tcMar`, en points. */
59
+ export type PartialPadding = Partial<Record<BorderSide, number>>;
60
+ /**
61
+ * Lit `w:tblCellMar` / `w:tcMar` : `w:top`, `w:left` (ou `w:start`), `w:bottom`, `w:right`
62
+ * (ou `w:end`) avec `w:w` en twips (`w:type="dxa"`) ou `nil` (0).
63
+ */
64
+ export declare function readCellMargins(container: Element | null): PartialPadding;
65
+ /**
66
+ * Fusionne des marges partielles, de la moins prioritaire à la plus prioritaire. Retourne
67
+ * `undefined` si aucune n'est définie (l'éditeur garde son défaut), sinon complète les
68
+ * côtés manquants avec les défauts de Word.
69
+ */
70
+ export declare function mergePadding(base: PaddingPt | undefined, ...layers: readonly PartialPadding[]): PaddingPt | undefined;
71
+ /** `padding: 2pt 4pt 2pt 4pt`, valeur CSS d'un `PaddingPt`. */
72
+ export declare function paddingValue(padding: PaddingPt | undefined): string | undefined;
73
+ /** Largeurs de colonnes `w:tblGrid/w:gridCol` en pixels entiers, vide sans grille. */
74
+ export declare function readGridColumns(table: Element): number[];
75
+ //# sourceMappingURL=units-blocks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"units-blocks.d.ts","sourceRoot":"","sources":["../../../src/docx/reader/units-blocks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,254 @@
1
+ import { childrenNamed, wordAttribute } from '../preprocess/xml-utils';
2
+ import { pt } from './html';
3
+ /**
4
+ * Conversions d'unités et lecture des bordures et fonds pour les blocs du lecteur
5
+ * (tableaux, images, sections). Lot L25 ; L24 écrit ses propres conversions pour les
6
+ * runs et paragraphes dans `units.ts` : doublon assumé le temps de la vague, à fusionner
7
+ * par l'orchestrateur.
8
+ */
9
+ const TWIPS_PER_PT = 20;
10
+ const TWIPS_PER_INCH = 1440;
11
+ const MM_PER_INCH = 25.4;
12
+ const EMU_PER_INCH = 914400;
13
+ const PX_PER_INCH = 96;
14
+ const PT_PER_INCH = 72;
15
+ /** Un twip = 1/15 px à 96 dpi, ce que Tiptap attend pour `colwidth`. */
16
+ const TWIPS_PER_PX = 15;
17
+ /** Arrondi à deux décimales, pour ne jamais sortir `12.700000000000001`. */
18
+ export function round2(value) {
19
+ return Math.round(value * 100) / 100;
20
+ }
21
+ /** Twips (1/20 pt) → points. */
22
+ export function twipsToPt(twips) {
23
+ return round2(twips / TWIPS_PER_PT);
24
+ }
25
+ /** Twips → millimètres, deux décimales (`1134` → `20.0`, `720` → `12.7`). */
26
+ export function twipsToMm(twips) {
27
+ return round2((twips / TWIPS_PER_INCH) * MM_PER_INCH);
28
+ }
29
+ /** Twips → pixels entiers (largeurs de colonnes Tiptap). */
30
+ export function twipsToPx(twips) {
31
+ return Math.round(twips / TWIPS_PER_PX);
32
+ }
33
+ /** EMU (914 400 par pouce) → pixels entiers à 96 dpi. */
34
+ export function emuToPx(emu) {
35
+ return Math.round((emu / EMU_PER_INCH) * PX_PER_INCH);
36
+ }
37
+ /** Points → pixels entiers à 96 dpi (dimensions VML `style="width:72pt"`). */
38
+ export function ptToPx(points) {
39
+ return Math.round((points / PT_PER_INCH) * PX_PER_INCH);
40
+ }
41
+ /** Huitièmes de point (`w:sz` des bordures) → points. */
42
+ export function eighthsToPt(eighths) {
43
+ return round2(eighths / 8);
44
+ }
45
+ /**
46
+ * Nombre lu dans un attribut `w:…`, `undefined` si absent ou non numérique. Volontairement
47
+ * tolérant (`Number()`) : les modules de blocs (L25) bornent ensuite les valeurs et
48
+ * avertissent (`1e12` → « hors des bornes ») ; le strict `numberAttr` d'`units.ts` sert
49
+ * aux runs et paragraphes.
50
+ */
51
+ export function numericAttribute(element, name) {
52
+ if (!element)
53
+ return undefined;
54
+ const raw = wordAttribute(element, name);
55
+ if (raw === '')
56
+ return undefined;
57
+ const value = Number(raw);
58
+ return Number.isFinite(value) ? value : undefined;
59
+ }
60
+ /** Largeur de bordure maximale acceptée par Word : 12 pt (96 huitièmes). */
61
+ const BORDER_MAX_PT = 12;
62
+ /** Vrai pour un attribut booléen Word absent (`<w:tblHeader/>` = vrai) ou valant `1`/`true`/`on`. */
63
+ export function booleanAttribute(element) {
64
+ if (!element)
65
+ return false;
66
+ const value = wordAttribute(element, 'val').toLowerCase();
67
+ return value === '' || value === '1' || value === 'true' || value === 'on';
68
+ }
69
+ const DASHED_STYLES = new Set([
70
+ 'dashed',
71
+ 'dashSmallGap',
72
+ 'dotDash',
73
+ 'dotDotDash',
74
+ 'dashDotStroked',
75
+ ]);
76
+ const DOTTED_STYLES = new Set(['dotted']);
77
+ const DOUBLE_STYLES = new Set([
78
+ 'double',
79
+ 'triple',
80
+ 'doubleWave',
81
+ 'thinThickSmallGap',
82
+ 'thickThinSmallGap',
83
+ 'thinThickThinSmallGap',
84
+ 'thinThickMediumGap',
85
+ 'thickThinMediumGap',
86
+ 'thinThickThinMediumGap',
87
+ 'thinThickLargeGap',
88
+ 'thickThinLargeGap',
89
+ 'thinThickThinLargeGap',
90
+ ]);
91
+ /**
92
+ * Style CSS d'une bordure Word (`w:val`). `nil`/`none` → `null` (pas de bordure) ; les
93
+ * dizaines de styles décoratifs de Word sont ramenés aux quatre du contrat.
94
+ */
95
+ export function borderStyleOf(value) {
96
+ if (value === '' || value === 'nil' || value === 'none')
97
+ return null;
98
+ if (DASHED_STYLES.has(value))
99
+ return 'dashed';
100
+ if (DOTTED_STYLES.has(value))
101
+ return 'dotted';
102
+ if (DOUBLE_STYLES.has(value))
103
+ return 'double';
104
+ return 'solid';
105
+ }
106
+ const HEX_COLOR = /^[0-9a-f]{6}$/i;
107
+ /** Couleur Word (`000000`, `auto`) → CSS `#rrggbb`, `auto` ou invalide → repli. */
108
+ export function cssColor(value, fallback = '#000000') {
109
+ const trimmed = value.trim();
110
+ return HEX_COLOR.test(trimmed) ? `#${trimmed.toLowerCase()}` : fallback;
111
+ }
112
+ /** Couleur de fond d'un `w:shd` (`w:fill`), `undefined` si absente, `auto` ou non hexadécimale. */
113
+ export function shadingColor(shd) {
114
+ if (!shd)
115
+ return undefined;
116
+ const fill = wordAttribute(shd, 'fill');
117
+ if (HEX_COLOR.test(fill))
118
+ return `#${fill.toLowerCase()}`;
119
+ // `w:val="solid"` : le motif plein prend la couleur `w:color`.
120
+ if (wordAttribute(shd, 'val') === 'solid') {
121
+ const color = wordAttribute(shd, 'color');
122
+ if (HEX_COLOR.test(color))
123
+ return `#${color.toLowerCase()}`;
124
+ }
125
+ return undefined;
126
+ }
127
+ /** Côtés CSS dans l'ordre de sérialisation du contrat. */
128
+ export const CSS_SIDES = ['top', 'right', 'bottom', 'left'];
129
+ const BORDER_ELEMENTS = new Map([
130
+ ['top', 'top'],
131
+ ['right', 'right'],
132
+ ['end', 'right'],
133
+ ['bottom', 'bottom'],
134
+ ['left', 'left'],
135
+ ['start', 'left'],
136
+ ['insideH', 'insideH'],
137
+ ['insideV', 'insideV'],
138
+ ]);
139
+ /** Bordure d'un élément `w:top`, `w:left`… `null` si `nil`/`none`. */
140
+ export function readBorderElement(element, side) {
141
+ const style = borderStyleOf(wordAttribute(element, 'val'));
142
+ if (!style)
143
+ return null;
144
+ const size = numericAttribute(element, 'sz') ?? 0;
145
+ const widthPt = eighthsToPt(size);
146
+ return {
147
+ side,
148
+ style,
149
+ // Un `w:sz` absent, nul ou hors bornes (> 12 pt) avec un style visible : filet fin.
150
+ widthPt: widthPt > 0 && widthPt <= BORDER_MAX_PT ? widthPt : 0.5,
151
+ color: cssColor(wordAttribute(element, 'color')),
152
+ };
153
+ }
154
+ /**
155
+ * Lit `w:tblBorders`, `w:tcBorders` ou `w:pBdr`. Les bordures intérieures (`insideH`,
156
+ * `insideV`) sont rangées sous leur nom avec un côté provisoire, à re-côté par l'appelant.
157
+ */
158
+ export function readBorders(container) {
159
+ const map = {};
160
+ if (!container)
161
+ return map;
162
+ for (const child of Array.from(container.children)) {
163
+ const name = BORDER_ELEMENTS.get(child.localName);
164
+ if (!name)
165
+ continue;
166
+ const side = name === 'insideH' ? 'top' : name === 'insideV' ? 'left' : name;
167
+ map[name] = readBorderElement(child, side);
168
+ }
169
+ return map;
170
+ }
171
+ /** Bordure recôtée (`insideH` appliquée au bas d'une cellule, par exemple). */
172
+ export function withSide(border, side) {
173
+ return border.side === side ? border : { ...border, side };
174
+ }
175
+ /** Liste de bordures → table par côté, pour fusionner style et propriétés directes. */
176
+ export function bordersBySide(borders) {
177
+ const map = {};
178
+ for (const border of borders ?? [])
179
+ map[border.side] = border;
180
+ return map;
181
+ }
182
+ /**
183
+ * Déclarations CSS `border-top: 0.5pt solid #000000`… dans l'ordre du contrat
184
+ * (`top`, `right`, `bottom`, `left`), les côtés absents étant omis.
185
+ */
186
+ export function borderDeclarations(borders) {
187
+ return CSS_SIDES.map((side) => {
188
+ const border = borders[side];
189
+ return [
190
+ `border-${side}`,
191
+ border ? `${pt(border.widthPt)} ${border.style} ${border.color}` : undefined,
192
+ ];
193
+ });
194
+ }
195
+ /**
196
+ * Lit `w:tblCellMar` / `w:tcMar` : `w:top`, `w:left` (ou `w:start`), `w:bottom`, `w:right`
197
+ * (ou `w:end`) avec `w:w` en twips (`w:type="dxa"`) ou `nil` (0).
198
+ */
199
+ export function readCellMargins(container) {
200
+ const result = {};
201
+ if (!container)
202
+ return result;
203
+ for (const child of Array.from(container.children)) {
204
+ const name = BORDER_ELEMENTS.get(child.localName);
205
+ if (!name || name === 'insideH' || name === 'insideV')
206
+ continue;
207
+ const type = wordAttribute(child, 'type');
208
+ if (type === 'nil') {
209
+ result[name] = 0;
210
+ continue;
211
+ }
212
+ const width = numericAttribute(child, 'w');
213
+ if (width !== undefined)
214
+ result[name] = twipsToPt(width);
215
+ }
216
+ return result;
217
+ }
218
+ /** Marges de cellule par défaut de Word : 0 en haut et en bas, 108 twips (5,4 pt) à gauche et à droite. */
219
+ const WORD_DEFAULT_PADDING = [0, 5.4, 0, 5.4];
220
+ /**
221
+ * Fusionne des marges partielles, de la moins prioritaire à la plus prioritaire. Retourne
222
+ * `undefined` si aucune n'est définie (l'éditeur garde son défaut), sinon complète les
223
+ * côtés manquants avec les défauts de Word.
224
+ */
225
+ export function mergePadding(base, ...layers) {
226
+ const merged = base
227
+ ? { top: base[0], right: base[1], bottom: base[2], left: base[3] }
228
+ : {};
229
+ for (const layer of layers)
230
+ Object.assign(merged, layer);
231
+ if (Object.keys(merged).length === 0)
232
+ return undefined;
233
+ return [
234
+ merged.top ?? WORD_DEFAULT_PADDING[0],
235
+ merged.right ?? WORD_DEFAULT_PADDING[1],
236
+ merged.bottom ?? WORD_DEFAULT_PADDING[2],
237
+ merged.left ?? WORD_DEFAULT_PADDING[3],
238
+ ];
239
+ }
240
+ /** `padding: 2pt 4pt 2pt 4pt`, valeur CSS d'un `PaddingPt`. */
241
+ export function paddingValue(padding) {
242
+ return padding ? padding.map((value) => pt(value)).join(' ') : undefined;
243
+ }
244
+ /** Largeurs de colonnes `w:tblGrid/w:gridCol` en pixels entiers, vide sans grille. */
245
+ export function readGridColumns(table) {
246
+ const grid = childrenNamed(table, 'tblGrid')[0];
247
+ if (!grid)
248
+ return [];
249
+ return childrenNamed(grid, 'gridCol')
250
+ .map((col) => numericAttribute(col, 'w'))
251
+ .filter((width) => width !== undefined)
252
+ .map(twipsToPx);
253
+ }
254
+ //# sourceMappingURL=units-blocks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"units-blocks.js","sourceRoot":"","sources":["../../../src/docx/reader/units-blocks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,72 @@
1
+ import type { BorderStyle } from '@aster-editor/core';
2
+ /** Arrondi à deux décimales, sans flottement (`0.1 + 0.2`). */
3
+ export declare function round2(value: number): number;
4
+ /**
5
+ * Entier d'un attribut OOXML, `undefined` si absent ou non numérique. Les valeurs
6
+ * décimales (`"12.5"`, tolérées par certains producteurs) sont acceptées ; tout ce que
7
+ * `Number()` accepterait en plus (hexadécimal, exposant, espaces internes) est rejeté.
8
+ */
9
+ export declare function numberAttr(value: string | null | undefined): number | undefined;
10
+ /**
11
+ * Bornes de Word (ce que son interface accepte), en points : une valeur hors de ces
12
+ * bornes vient d'un producteur cassé ou d'un document hostile et est ignorée, comme une
13
+ * valeur non numérique — jamais écrite en CSS, jamais une exception.
14
+ */
15
+ export declare const WORD_LIMITS: {
16
+ /** Taille de police `w:sz` : 1 à 1638 pt. */
17
+ readonly fontSizeMinPt: 1;
18
+ readonly fontSizeMaxPt: 1638;
19
+ /** Largeur de bordure `w:sz` (huitièmes) : 12 pt au plus. */
20
+ readonly borderMaxPt: 12;
21
+ /** Retraits, espacements avant/après, interligne exact, espacement de caractères : ±1584 pt. */
22
+ readonly distanceMaxPt: 1584;
23
+ /** Interligne multiple (`w:lineRule="auto"`) : 132 lignes au plus. */
24
+ readonly lineMultipleMax: 132;
25
+ };
26
+ /** `value` s'il est dans `[min, max]`, sinon `undefined` (valeur hors bornes ignorée). */
27
+ export declare function bounded(value: number | undefined, min: number, max: number): number | undefined;
28
+ /** Distance signée (retrait, espacement) bornée à ±1584 pt. */
29
+ export declare function boundedDistancePt(value: number | undefined): number | undefined;
30
+ /** Nom de police validé et épuré des espaces de bord, `undefined` s'il est irrecevable. */
31
+ export declare function fontName(value: string | null | undefined): string | undefined;
32
+ /**
33
+ * Valeur CSS de `font-family` pour un nom validé par `fontName` : citée entre guillemets
34
+ * dès qu'elle n'est pas un identifiant CSS (`"Wingdings 2"`, `"Arial Narrow"`), sinon
35
+ * telle quelle (`Calibri`). Le nom ne contient ni `"` ni `\`, aucun échappement n'est
36
+ * nécessaire ; le core relit la valeur citée telle quelle et la ré-émet à l'identique.
37
+ */
38
+ export declare function cssFontFamily(name: string): string;
39
+ /** Twips → points (`240` → `12`). */
40
+ export declare function twipsToPt(twips: number): number;
41
+ /** Twips → millimètres (`1440` → `25.4`). */
42
+ export declare function twipsToMm(twips: number): number;
43
+ /** Demi-points (`w:sz`) → points (`22` → `11`). */
44
+ export declare function halfPointsToPt(halfPoints: number): number;
45
+ /** Huitièmes de point (`w:sz` des bordures) → points (`4` → `0.5`). */
46
+ export declare function eighthPointsToPt(eighths: number): number;
47
+ /** EMU → points (`127000` → `10`). */
48
+ export declare function emuToPt(emu: number): number;
49
+ /** EMU → pixels CSS à 96 dpi (`952500` → `100`). */
50
+ export declare function emuToPx(emu: number): number;
51
+ /** Cinquantièmes de pour cent (`w:w w:type="pct"`, `5000` → `100`). */
52
+ export declare function fiftiethsToPercent(fiftieths: number): number;
53
+ /** Interligne multiple `w:line` en 240e (`276` → `1.15`). */
54
+ export declare function lineToMultiple(line: number): number;
55
+ /** Couleur `#rrggbb` minuscule : `RRGGBB` → `#rrggbb` ; `auto`, `none`, vide ou invalide → `undefined`. */
56
+ export declare function hexColor(value: string | null | undefined): string | undefined;
57
+ /** Couleur de bordure : comme `hexColor` mais `auto` (et absent) → noir, comme Word l'affiche. */
58
+ export declare function borderColor(value: string | null | undefined): string;
59
+ /** Surlignage nommé → `#rrggbb`, `none` ou inconnu → `undefined`. */
60
+ export declare function highlightColor(name: string | null | undefined): string | undefined;
61
+ /**
62
+ * Style de bordure OOXML (`w:val`) → style du contrat. `nil`/`none` → `null` (pas de
63
+ * bordure, annule une bordure héritée). Les motifs exotiques (3D, artistiques) sont
64
+ * ramenés au trait le plus proche.
65
+ */
66
+ export declare function borderStyleOf(value: string | null | undefined): BorderStyle | null;
67
+ /**
68
+ * Booléen OOXML (`w:b`, `w:i`, `w:keepNext`…) : l'élément présent sans `w:val` vaut
69
+ * vrai ; `0`, `false`, `off` valent faux (et annulent la valeur héritée).
70
+ */
71
+ export declare function onOff(value: string | null | undefined): boolean;
72
+ //# sourceMappingURL=units.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"units.d.ts","sourceRoot":"","sources":["../../../src/docx/reader/units.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AActD,+DAA+D;AAC/D,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE5C;AAKD;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAM/E;AAED;;;;GAIG;AACH,eAAO,MAAM,WAAW;IACtB,6CAA6C;;;IAG7C,6DAA6D;;IAE7D,gGAAgG;;IAEhG,sEAAsE;;CAE9D,CAAC;AAEX,0FAA0F;AAC1F,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAE/F;AAED,+DAA+D;AAC/D,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAE/E;AASD,2FAA2F;AAC3F,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAG7E;AAKD;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAElD;AAED,qCAAqC;AACrC,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED,6CAA6C;AAC7C,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED,mDAAmD;AACnD,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED,uEAAuE;AACvE,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAExD;AAED,sCAAsC;AACtC,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE3C;AAED,oDAAoD;AACpD,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE3C;AAED,uEAAuE;AACvE,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED,6DAA6D;AAC7D,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,2GAA2G;AAC3G,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAK7E;AAED,kGAAkG;AAClG,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAEpE;AA0BD,qEAAqE;AACrE,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAGlF;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,WAAW,GAAG,IAAI,CASlF;AAED;;;GAGG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAG/D"}