dom-docx 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 (132) hide show
  1. package/API.md +533 -0
  2. package/LICENSE +21 -0
  3. package/README.md +236 -0
  4. package/dist/browser.d.ts +34 -0
  5. package/dist/browser.d.ts.map +1 -0
  6. package/dist/browser.js +35 -0
  7. package/dist/browser.js.map +1 -0
  8. package/dist/cli.d.ts +3 -0
  9. package/dist/cli.d.ts.map +1 -0
  10. package/dist/cli.js +118 -0
  11. package/dist/cli.js.map +1 -0
  12. package/dist/converter/bordered-block.d.ts +54 -0
  13. package/dist/converter/bordered-block.d.ts.map +1 -0
  14. package/dist/converter/bordered-block.js +124 -0
  15. package/dist/converter/bordered-block.js.map +1 -0
  16. package/dist/converter/build-docx.d.ts +46 -0
  17. package/dist/converter/build-docx.d.ts.map +1 -0
  18. package/dist/converter/build-docx.js +161 -0
  19. package/dist/converter/build-docx.js.map +1 -0
  20. package/dist/converter/computed-style-snapshot.browser.js +73 -0
  21. package/dist/converter/computed-style-snapshot.d.ts +10 -0
  22. package/dist/converter/computed-style-snapshot.d.ts.map +1 -0
  23. package/dist/converter/computed-style-snapshot.js +78 -0
  24. package/dist/converter/computed-style-snapshot.js.map +1 -0
  25. package/dist/converter/constants.d.ts +51 -0
  26. package/dist/converter/constants.d.ts.map +1 -0
  27. package/dist/converter/constants.js +163 -0
  28. package/dist/converter/constants.js.map +1 -0
  29. package/dist/converter/css.d.ts +112 -0
  30. package/dist/converter/css.d.ts.map +1 -0
  31. package/dist/converter/css.js +621 -0
  32. package/dist/converter/css.js.map +1 -0
  33. package/dist/converter/flex.d.ts +59 -0
  34. package/dist/converter/flex.d.ts.map +1 -0
  35. package/dist/converter/flex.js +252 -0
  36. package/dist/converter/flex.js.map +1 -0
  37. package/dist/converter/image.d.ts +38 -0
  38. package/dist/converter/image.d.ts.map +1 -0
  39. package/dist/converter/image.js +159 -0
  40. package/dist/converter/image.js.map +1 -0
  41. package/dist/converter/inline.d.ts +18 -0
  42. package/dist/converter/inline.d.ts.map +1 -0
  43. package/dist/converter/inline.js +213 -0
  44. package/dist/converter/inline.js.map +1 -0
  45. package/dist/converter/ooxml-patch.d.ts +23 -0
  46. package/dist/converter/ooxml-patch.d.ts.map +1 -0
  47. package/dist/converter/ooxml-patch.js +54 -0
  48. package/dist/converter/ooxml-patch.js.map +1 -0
  49. package/dist/converter/style-path.d.ts +4 -0
  50. package/dist/converter/style-path.d.ts.map +1 -0
  51. package/dist/converter/style-path.js +17 -0
  52. package/dist/converter/style-path.js.map +1 -0
  53. package/dist/converter/style-resolver-node.d.ts +7 -0
  54. package/dist/converter/style-resolver-node.d.ts.map +1 -0
  55. package/dist/converter/style-resolver-node.js +26 -0
  56. package/dist/converter/style-resolver-node.js.map +1 -0
  57. package/dist/converter/style-resolver.d.ts +24 -0
  58. package/dist/converter/style-resolver.d.ts.map +1 -0
  59. package/dist/converter/style-resolver.js +122 -0
  60. package/dist/converter/style-resolver.js.map +1 -0
  61. package/dist/converter/svg.d.ts +11 -0
  62. package/dist/converter/svg.d.ts.map +1 -0
  63. package/dist/converter/svg.js +116 -0
  64. package/dist/converter/svg.js.map +1 -0
  65. package/dist/converter/table.d.ts +8 -0
  66. package/dist/converter/table.d.ts.map +1 -0
  67. package/dist/converter/table.js +745 -0
  68. package/dist/converter/table.js.map +1 -0
  69. package/dist/converter/text-metrics.d.ts +17 -0
  70. package/dist/converter/text-metrics.d.ts.map +1 -0
  71. package/dist/converter/text-metrics.js +51 -0
  72. package/dist/converter/text-metrics.js.map +1 -0
  73. package/dist/converter/types.d.ts +82 -0
  74. package/dist/converter/types.d.ts.map +1 -0
  75. package/dist/converter/types.js +9 -0
  76. package/dist/converter/types.js.map +1 -0
  77. package/dist/converter/visitor.d.ts +11 -0
  78. package/dist/converter/visitor.d.ts.map +1 -0
  79. package/dist/converter/visitor.js +910 -0
  80. package/dist/converter/visitor.js.map +1 -0
  81. package/dist/converter.d.ts +28 -0
  82. package/dist/converter.d.ts.map +1 -0
  83. package/dist/converter.js +44 -0
  84. package/dist/converter.js.map +1 -0
  85. package/dist/html-wrap.d.ts +3 -0
  86. package/dist/html-wrap.d.ts.map +1 -0
  87. package/dist/html-wrap.js +26 -0
  88. package/dist/html-wrap.js.map +1 -0
  89. package/dist/index.d.ts +17 -0
  90. package/dist/index.d.ts.map +1 -0
  91. package/dist/index.js +16 -0
  92. package/dist/index.js.map +1 -0
  93. package/examples/README.md +39 -0
  94. package/examples/balance-sheet/compare_side_by_side.png +0 -0
  95. package/examples/balance-sheet/input.html +41 -0
  96. package/examples/balance-sheet/output.docx +0 -0
  97. package/examples/balance-sheet/preview.png +0 -0
  98. package/examples/invoice/compare_side_by_side.png +0 -0
  99. package/examples/invoice/input.html +88 -0
  100. package/examples/invoice/logo.png +0 -0
  101. package/examples/invoice/output.docx +0 -0
  102. package/examples/invoice/preview.png +0 -0
  103. package/examples/javascript-essay/compare_side_by_side.png +0 -0
  104. package/examples/javascript-essay/input.html +39 -0
  105. package/examples/javascript-essay/output.docx +0 -0
  106. package/examples/javascript-essay/preview.png +0 -0
  107. package/examples/product-launch-brief/compare_side_by_side.png +0 -0
  108. package/examples/product-launch-brief/input.html +120 -0
  109. package/examples/product-launch-brief/output.docx +0 -0
  110. package/examples/product-launch-brief/preview.png +0 -0
  111. package/examples/quarterly-financials/compare_side_by_side.png +0 -0
  112. package/examples/quarterly-financials/input.html +27 -0
  113. package/examples/quarterly-financials/output.docx +0 -0
  114. package/examples/quarterly-financials/preview.png +0 -0
  115. package/examples/react-dashboard/compare_side_by_side.png +0 -0
  116. package/examples/react-dashboard/input.html +1 -0
  117. package/examples/react-dashboard/output.docx +0 -0
  118. package/examples/react-dashboard/preview.html +107 -0
  119. package/examples/react-dashboard/preview.png +0 -0
  120. package/examples/regional-sales-dashboard/compare_side_by_side.png +0 -0
  121. package/examples/regional-sales-dashboard/input.html +129 -0
  122. package/examples/regional-sales-dashboard/output.docx +0 -0
  123. package/examples/regional-sales-dashboard/preview.png +0 -0
  124. package/examples/sales-contract/compare_side_by_side.png +0 -0
  125. package/examples/sales-contract/input.html +68 -0
  126. package/examples/sales-contract/output.docx +0 -0
  127. package/examples/sales-contract/preview.png +0 -0
  128. package/examples/sprint-retrospective/compare_side_by_side.png +0 -0
  129. package/examples/sprint-retrospective/input.html +51 -0
  130. package/examples/sprint-retrospective/output.docx +0 -0
  131. package/examples/sprint-retrospective/preview.png +0 -0
  132. package/package.json +108 -0
@@ -0,0 +1,112 @@
1
+ import { ShadingType, type IParagraphStylePropertiesOptions } from "docx";
2
+ import type { Element } from "domhandler";
3
+ import type { StyleResolver } from "./style-resolver.js";
4
+ import type { BlockLayout, RunTypography } from "./types.js";
5
+ export interface ParsedBorder {
6
+ widthPx: number;
7
+ color?: string;
8
+ }
9
+ export interface ParsedCss {
10
+ color?: string;
11
+ backgroundColor?: string;
12
+ display?: string;
13
+ flexDirection?: string;
14
+ gap?: number;
15
+ textAlign?: string;
16
+ /** `font-family` mapped to a Word-safe installed font (first recognized family wins). */
17
+ fontFamily?: string;
18
+ /** `border-collapse` keyword — separate (default) tables get UA border-spacing gaps. */
19
+ borderCollapse?: string;
20
+ /** `text-transform` keyword (uppercase → Word all-caps display property). */
21
+ textTransform?: string;
22
+ /** `letter-spacing` in twips (absolute units). */
23
+ letterSpacingTwips?: number;
24
+ /** `letter-spacing` in em (resolved against font size at typography build). */
25
+ letterSpacingEm?: number;
26
+ fontSize?: number;
27
+ fontWeight?: string;
28
+ fontStyle?: string;
29
+ listStyleType?: string;
30
+ marginTop?: number;
31
+ marginRight?: number;
32
+ marginBottom?: number;
33
+ marginLeft?: number;
34
+ paddingTop?: number;
35
+ paddingRight?: number;
36
+ paddingBottom?: number;
37
+ paddingLeft?: number;
38
+ /** Explicit CSS height in twips (px/pt/em) — used for color-bar sizing. */
39
+ heightTwips?: number;
40
+ /** Explicit CSS width: absolute in twips, or percentage of the containing block. */
41
+ widthTwips?: number;
42
+ widthPercent?: number;
43
+ maxWidthTwips?: number;
44
+ maxHeightTwips?: number;
45
+ visibility?: string;
46
+ opacity?: number;
47
+ overflow?: string;
48
+ border?: ParsedBorder;
49
+ /** `border-color` — color override for borders declared elsewhere (attr or shorthand). */
50
+ borderColor?: string;
51
+ borderTop?: ParsedBorder;
52
+ borderRight?: ParsedBorder;
53
+ borderBottom?: ParsedBorder;
54
+ borderLeft?: ParsedBorder;
55
+ }
56
+ export declare function pxToTwips(px: number): number;
57
+ export declare function pxToHalfPoints(px: number): number;
58
+ /** Flex gap in twips from px or bare number (treated as px). */
59
+ export declare function parseGap(value: string | undefined): number | undefined;
60
+ export declare function parseColor(value: string | undefined): string | undefined;
61
+ export declare function parseFontSize(value: string | undefined): number | undefined;
62
+ export declare function parseInlineStyle(style: string | undefined): ParsedCss;
63
+ /**
64
+ * Element is invisible in a browser — skip it entirely. Covers `display:none`,
65
+ * `visibility:hidden`, `opacity:0`, and the email-preheader idiom
66
+ * (`max-height:0` + `overflow:hidden`).
67
+ */
68
+ export declare function isHiddenCss(css: ParsedCss): boolean;
69
+ export declare function isHiddenElement(element: Element, resolver?: StyleResolver): boolean;
70
+ /**
71
+ * Legacy presentational attributes (`bgcolor`, `<font color/size/face>`,
72
+ * `align`, `<center>`) → their CSS equivalents. Inline `style=""` wins over
73
+ * attributes, matching browser precedence.
74
+ */
75
+ export declare function presentationalAttributesCss(element: Element): ParsedCss;
76
+ /** Block if tag is structural block OR display is block / inline-block. */
77
+ export declare function isBlockElement(element: Element, resolver?: StyleResolver): boolean;
78
+ export declare function mapTextAlign(value: string | undefined): BlockLayout["alignment"];
79
+ export declare function pxPaddingToBorderSpace(paddingTwips: number | undefined): number;
80
+ /** Block containers: background-color → paragraph shading only. */
81
+ export declare function cssToBlockLayout(css: ParsedCss): BlockLayout;
82
+ /** Block foreground typography — never carries background-color. */
83
+ export declare function cssToBlockTypography(css: ParsedCss): RunTypography;
84
+ /** Inline elements: background-color → TextRun shading only. */
85
+ export declare function cssToInlineRunTypography(css: ParsedCss): RunTypography;
86
+ export declare function layoutFromElement(element: Element, resolver?: StyleResolver): BlockLayout;
87
+ /** Nearest `font-family` up the ancestor chain (CSS inheritance), if any. */
88
+ export declare function inheritedFontFamily(element: Element, resolver?: StyleResolver): string | undefined;
89
+ export declare function typographyFromBlockElement(element: Element, resolver?: StyleResolver): RunTypography;
90
+ /** Native shaded block: keep padding fields for makeParagraph; no indent/spacing bleed. */
91
+ export declare function layoutForNativeShadedBlock(layout: BlockLayout): BlockLayout;
92
+ /** Normalize fill hex for consistent LO PDF rendering. */
93
+ export declare function runShadingForFill(fill: string): {
94
+ type: typeof ShadingType.CLEAR;
95
+ fill: string;
96
+ color: string;
97
+ };
98
+ /**
99
+ * Vertical padding inside a shaded paragraph band.
100
+ * Embed all padding in one EXACT line — LO paints spacing.before outside w:shd.
101
+ */
102
+ export declare function shadedBlockParagraphSpacing(layout: BlockLayout): IParagraphStylePropertiesOptions["spacing"];
103
+ export declare function blockLayoutToParagraphProps(layout: BlockLayout): IParagraphStylePropertiesOptions;
104
+ /** @deprecated */
105
+ export declare function cssToBlockStyle(css: ParsedCss): BlockLayout;
106
+ /** @deprecated */
107
+ export declare function cssToRunTypography(_css: ParsedCss, _tag?: string): RunTypography;
108
+ /** @deprecated */
109
+ export declare function cssToRunStyle(css: ParsedCss, tag?: string): RunTypography;
110
+ /** @deprecated */
111
+ export declare function blockStyleToParagraphProps(layout: BlockLayout): IParagraphStylePropertiesOptions;
112
+ //# sourceMappingURL=css.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"css.d.ts","sourceRoot":"","sources":["../../src/converter/css.ts"],"names":[],"mappings":"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"}