html2canvas-pro 2.4.5 → 2.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 (228) hide show
  1. package/README.md +115 -13
  2. package/dist/html2canvas-pro.cjs +3058 -1607
  3. package/dist/html2canvas-pro.cjs.map +1 -1
  4. package/dist/html2canvas-pro.esm.js +3058 -1607
  5. package/dist/html2canvas-pro.esm.js.map +1 -1
  6. package/dist/html2canvas-pro.js +3055 -1604
  7. package/dist/html2canvas-pro.js.map +1 -1
  8. package/dist/html2canvas-pro.min.js +5 -5
  9. package/dist/types/core/cache-storage.d.ts +4 -1
  10. package/dist/types/core/context.d.ts +10 -1
  11. package/dist/types/core/render-element.d.ts +11 -0
  12. package/dist/types/core/util.d.ts +6 -0
  13. package/dist/types/css/index.d.ts +77 -46
  14. package/dist/types/css/parse.d.ts +15 -0
  15. package/dist/types/css/property-descriptors/accent-color.d.ts +5 -0
  16. package/dist/types/css/property-descriptors/backdrop-filter.d.ts +9 -0
  17. package/dist/types/css/property-descriptors/background-blend-mode.d.ts +16 -16
  18. package/dist/types/css/property-descriptors/border-image-width.d.ts +36 -0
  19. package/dist/types/css/property-descriptors/clip-path.d.ts +16 -2
  20. package/dist/types/css/property-descriptors/isolation.d.ts +6 -0
  21. package/dist/types/css/property-descriptors/mask.d.ts +25 -0
  22. package/dist/types/css/property-descriptors/mix-blend-mode.d.ts +16 -16
  23. package/dist/types/css/property-descriptors/outline.d.ts +15 -0
  24. package/dist/types/css/property-descriptors/text-emphasis.d.ts +22 -0
  25. package/dist/types/css/property-descriptors/text-shadow.d.ts +1 -1
  26. package/dist/types/css/property-descriptors/webkit-box-reflect.d.ts +19 -0
  27. package/dist/types/css/property-descriptors/webkit-text-fill-color.d.ts +9 -0
  28. package/dist/types/css/syntax/token-constants.d.ts +1 -1
  29. package/dist/types/css/types/color-math.d.ts +7 -1
  30. package/dist/types/css/types/color-spaces/a98.d.ts +2 -1
  31. package/dist/types/css/types/color-spaces/p3.d.ts +5 -4
  32. package/dist/types/css/types/color-spaces/pro-photo.d.ts +5 -4
  33. package/dist/types/css/types/color-spaces/rec2020.d.ts +5 -4
  34. package/dist/types/css/types/color-spaces/srgb.d.ts +5 -4
  35. package/dist/types/css/types/color-utilities.d.ts +11 -11
  36. package/dist/types/css/types/color.d.ts +1 -0
  37. package/dist/types/css/types/functions/conic-gradient.d.ts +11 -0
  38. package/dist/types/css/types/functions/image-set.d.ts +11 -0
  39. package/dist/types/css/types/functions/repeating-radial-gradient.d.ts +8 -0
  40. package/dist/types/css/types/image.d.ts +15 -2
  41. package/dist/types/css/types/safe-eval.d.ts +0 -6
  42. package/dist/types/dom/copy-css-styles.d.ts +8 -0
  43. package/dist/types/dom/document-cloner.d.ts +3 -13
  44. package/dist/types/dom/iframe-mount.d.ts +37 -0
  45. package/dist/types/dom/pseudo-content.d.ts +33 -0
  46. package/dist/types/dom/replaced-elements/iframe-element-container.d.ts +2 -2
  47. package/dist/types/options.d.ts +8 -2
  48. package/dist/types/render/canvas/background-renderer.d.ts +19 -0
  49. package/dist/types/render/canvas/border-image-renderer.d.ts +50 -1
  50. package/dist/types/render/canvas/canvas-renderer.d.ts +21 -15
  51. package/dist/types/render/canvas/mask-renderer.d.ts +36 -0
  52. package/dist/types/render/canvas/text-clip-renderer.d.ts +36 -0
  53. package/dist/types/render/canvas/text-renderer.d.ts +22 -0
  54. package/dist/types/render/stacking-context.d.ts +4 -1
  55. package/package.json +39 -40
  56. package/dist/lib/config.js +0 -49
  57. package/dist/lib/core/abort-helper.js +0 -20
  58. package/dist/lib/core/background-parser.js +0 -41
  59. package/dist/lib/core/bitwise.js +0 -5
  60. package/dist/lib/core/cache-storage.js +0 -283
  61. package/dist/lib/core/config-assembler.js +0 -88
  62. package/dist/lib/core/constants.js +0 -25
  63. package/dist/lib/core/context.js +0 -19
  64. package/dist/lib/core/debugger.js +0 -27
  65. package/dist/lib/core/features.js +0 -190
  66. package/dist/lib/core/logger.js +0 -56
  67. package/dist/lib/core/lru-map.js +0 -66
  68. package/dist/lib/core/origin-checker.js +0 -53
  69. package/dist/lib/core/performance-monitor.js +0 -185
  70. package/dist/lib/core/render-element.js +0 -131
  71. package/dist/lib/core/util.js +0 -4
  72. package/dist/lib/core/validator.js +0 -500
  73. package/dist/lib/css/grouped/background-styles.js +0 -36
  74. package/dist/lib/css/grouped/border-styles.js +0 -75
  75. package/dist/lib/css/grouped/font-styles.js +0 -93
  76. package/dist/lib/css/grouped/layout-styles.js +0 -127
  77. package/dist/lib/css/index.js +0 -339
  78. package/dist/lib/css/layout/bounds.js +0 -52
  79. package/dist/lib/css/layout/text.js +0 -133
  80. package/dist/lib/css/property-descriptor.js +0 -2
  81. package/dist/lib/css/property-descriptors/background-blend-mode.js +0 -41
  82. package/dist/lib/css/property-descriptors/background-clip.js +0 -25
  83. package/dist/lib/css/property-descriptors/background-color.js +0 -10
  84. package/dist/lib/css/property-descriptors/background-image.js +0 -24
  85. package/dist/lib/css/property-descriptors/background-origin.js +0 -23
  86. package/dist/lib/css/property-descriptors/background-position.js +0 -19
  87. package/dist/lib/css/property-descriptors/background-repeat.js +0 -33
  88. package/dist/lib/css/property-descriptors/background-size.js +0 -23
  89. package/dist/lib/css/property-descriptors/border-color.js +0 -14
  90. package/dist/lib/css/property-descriptors/border-image-repeat.js +0 -42
  91. package/dist/lib/css/property-descriptors/border-image-slice.js +0 -45
  92. package/dist/lib/css/property-descriptors/border-image-source.js +0 -22
  93. package/dist/lib/css/property-descriptors/border-radius.js +0 -15
  94. package/dist/lib/css/property-descriptors/border-style.js +0 -26
  95. package/dist/lib/css/property-descriptors/border-width.js +0 -20
  96. package/dist/lib/css/property-descriptors/box-decoration-break.js +0 -18
  97. package/dist/lib/css/property-descriptors/box-shadow.js +0 -54
  98. package/dist/lib/css/property-descriptors/clip-path.js +0 -189
  99. package/dist/lib/css/property-descriptors/color.js +0 -10
  100. package/dist/lib/css/property-descriptors/content.js +0 -19
  101. package/dist/lib/css/property-descriptors/counter-increment.js +0 -35
  102. package/dist/lib/css/property-descriptors/counter-reset.js +0 -18
  103. package/dist/lib/css/property-descriptors/direction.js +0 -18
  104. package/dist/lib/css/property-descriptors/display.js +0 -81
  105. package/dist/lib/css/property-descriptors/duration.js +0 -14
  106. package/dist/lib/css/property-descriptors/filter.js +0 -86
  107. package/dist/lib/css/property-descriptors/float.js +0 -22
  108. package/dist/lib/css/property-descriptors/font-family.js +0 -47
  109. package/dist/lib/css/property-descriptors/font-size.js +0 -10
  110. package/dist/lib/css/property-descriptors/font-style.js +0 -20
  111. package/dist/lib/css/property-descriptors/font-variant-ligatures.js +0 -34
  112. package/dist/lib/css/property-descriptors/font-variant.js +0 -13
  113. package/dist/lib/css/property-descriptors/font-weight.js +0 -25
  114. package/dist/lib/css/property-descriptors/image-rendering.js +0 -33
  115. package/dist/lib/css/property-descriptors/letter-spacing.js +0 -21
  116. package/dist/lib/css/property-descriptors/line-break.js +0 -23
  117. package/dist/lib/css/property-descriptors/line-height.js +0 -24
  118. package/dist/lib/css/property-descriptors/list-style-image.js +0 -17
  119. package/dist/lib/css/property-descriptors/list-style-position.js +0 -18
  120. package/dist/lib/css/property-descriptors/list-style-type.js +0 -122
  121. package/dist/lib/css/property-descriptors/margin.js +0 -13
  122. package/dist/lib/css/property-descriptors/mix-blend-mode.js +0 -31
  123. package/dist/lib/css/property-descriptors/object-fit.js +0 -28
  124. package/dist/lib/css/property-descriptors/object-position.js +0 -42
  125. package/dist/lib/css/property-descriptors/opacity.js +0 -16
  126. package/dist/lib/css/property-descriptors/overflow-wrap.js +0 -18
  127. package/dist/lib/css/property-descriptors/overflow.js +0 -27
  128. package/dist/lib/css/property-descriptors/padding.js +0 -14
  129. package/dist/lib/css/property-descriptors/paint-order.js +0 -33
  130. package/dist/lib/css/property-descriptors/position.js +0 -22
  131. package/dist/lib/css/property-descriptors/quotes.js +0 -41
  132. package/dist/lib/css/property-descriptors/rotate.js +0 -27
  133. package/dist/lib/css/property-descriptors/text-align.js +0 -21
  134. package/dist/lib/css/property-descriptors/text-decoration-color.js +0 -10
  135. package/dist/lib/css/property-descriptors/text-decoration-line.js +0 -28
  136. package/dist/lib/css/property-descriptors/text-decoration-style.js +0 -24
  137. package/dist/lib/css/property-descriptors/text-decoration-thickness.js +0 -26
  138. package/dist/lib/css/property-descriptors/text-overflow.js +0 -18
  139. package/dist/lib/css/property-descriptors/text-shadow.js +0 -46
  140. package/dist/lib/css/property-descriptors/text-transform.js +0 -20
  141. package/dist/lib/css/property-descriptors/text-underline-offset.js +0 -23
  142. package/dist/lib/css/property-descriptors/transform-origin.js +0 -24
  143. package/dist/lib/css/property-descriptors/transform.js +0 -57
  144. package/dist/lib/css/property-descriptors/visibility.js +0 -20
  145. package/dist/lib/css/property-descriptors/webkit-line-clamp.js +0 -26
  146. package/dist/lib/css/property-descriptors/webkit-text-stroke-color.js +0 -10
  147. package/dist/lib/css/property-descriptors/webkit-text-stroke-width.js +0 -16
  148. package/dist/lib/css/property-descriptors/white-space.js +0 -32
  149. package/dist/lib/css/property-descriptors/word-break.js +0 -26
  150. package/dist/lib/css/property-descriptors/writing-mode.js +0 -28
  151. package/dist/lib/css/property-descriptors/z-index.js +0 -19
  152. package/dist/lib/css/property-descriptors/zoom.js +0 -18
  153. package/dist/lib/css/syntax/parser.js +0 -141
  154. package/dist/lib/css/syntax/token-constants.js +0 -214
  155. package/dist/lib/css/syntax/token-singletons.js +0 -36
  156. package/dist/lib/css/syntax/token-types.js +0 -10
  157. package/dist/lib/css/syntax/tokenizer.js +0 -502
  158. package/dist/lib/css/type-descriptor.js +0 -2
  159. package/dist/lib/css/types/angle.js +0 -80
  160. package/dist/lib/css/types/color-math.js +0 -25
  161. package/dist/lib/css/types/color-spaces/a98.js +0 -78
  162. package/dist/lib/css/types/color-spaces/p3.js +0 -86
  163. package/dist/lib/css/types/color-spaces/pro-photo.js +0 -83
  164. package/dist/lib/css/types/color-spaces/rec2020.js +0 -85
  165. package/dist/lib/css/types/color-spaces/srgb.js +0 -79
  166. package/dist/lib/css/types/color-utilities.js +0 -342
  167. package/dist/lib/css/types/color.js +0 -400
  168. package/dist/lib/css/types/functions/-prefix-linear-gradient.js +0 -32
  169. package/dist/lib/css/types/functions/-prefix-radial-gradient.js +0 -83
  170. package/dist/lib/css/types/functions/-webkit-gradient.js +0 -59
  171. package/dist/lib/css/types/functions/counter.js +0 -367
  172. package/dist/lib/css/types/functions/gradient.js +0 -163
  173. package/dist/lib/css/types/functions/linear-gradient.js +0 -27
  174. package/dist/lib/css/types/functions/radial-gradient.js +0 -90
  175. package/dist/lib/css/types/functions/repeating-linear-gradient.js +0 -9
  176. package/dist/lib/css/types/image.js +0 -62
  177. package/dist/lib/css/types/index.js +0 -2
  178. package/dist/lib/css/types/length-percentage.js +0 -197
  179. package/dist/lib/css/types/length.js +0 -5
  180. package/dist/lib/css/types/safe-eval.js +0 -80
  181. package/dist/lib/css/types/time.js +0 -17
  182. package/dist/lib/dom/document-cloner.js +0 -618
  183. package/dist/lib/dom/dom-normalizer.js +0 -115
  184. package/dist/lib/dom/element-container.js +0 -71
  185. package/dist/lib/dom/elements/li-element-container.js +0 -11
  186. package/dist/lib/dom/elements/ol-element-container.js +0 -12
  187. package/dist/lib/dom/elements/select-element-container.js +0 -12
  188. package/dist/lib/dom/elements/textarea-element-container.js +0 -11
  189. package/dist/lib/dom/node-parser.js +0 -125
  190. package/dist/lib/dom/node-type-guards.js +0 -81
  191. package/dist/lib/dom/replaced-elements/canvas-element-container.js +0 -13
  192. package/dist/lib/dom/replaced-elements/iframe-element-container.js +0 -38
  193. package/dist/lib/dom/replaced-elements/image-element-container.js +0 -14
  194. package/dist/lib/dom/replaced-elements/index.js +0 -2
  195. package/dist/lib/dom/replaced-elements/input-element-container.js +0 -89
  196. package/dist/lib/dom/replaced-elements/svg-element-container.js +0 -57
  197. package/dist/lib/dom/slot-cloner.js +0 -176
  198. package/dist/lib/dom/text-container.js +0 -35
  199. package/dist/lib/index.js +0 -49
  200. package/dist/lib/options.js +0 -2
  201. package/dist/lib/render/background.js +0 -188
  202. package/dist/lib/render/bezier-curve.js +0 -34
  203. package/dist/lib/render/border.js +0 -104
  204. package/dist/lib/render/bound-curves.js +0 -188
  205. package/dist/lib/render/box-sizing.js +0 -20
  206. package/dist/lib/render/canvas/background-renderer.js +0 -338
  207. package/dist/lib/render/canvas/border-image-renderer.js +0 -153
  208. package/dist/lib/render/canvas/border-renderer.js +0 -184
  209. package/dist/lib/render/canvas/box-shadow-geometry.js +0 -52
  210. package/dist/lib/render/canvas/box-shadow-painter.js +0 -194
  211. package/dist/lib/render/canvas/box-shadow-transform.js +0 -42
  212. package/dist/lib/render/canvas/canvas-path.js +0 -25
  213. package/dist/lib/render/canvas/canvas-renderer.js +0 -610
  214. package/dist/lib/render/canvas/content-renderer.js +0 -270
  215. package/dist/lib/render/canvas/effects-renderer.js +0 -171
  216. package/dist/lib/render/canvas/filter-surface.js +0 -270
  217. package/dist/lib/render/canvas/font-utils.js +0 -46
  218. package/dist/lib/render/canvas/foreignobject-renderer.js +0 -38
  219. package/dist/lib/render/canvas/surface-bounds.js +0 -64
  220. package/dist/lib/render/canvas/text/text-decoration-renderer.js +0 -99
  221. package/dist/lib/render/canvas/text-renderer.js +0 -486
  222. package/dist/lib/render/effects.js +0 -231
  223. package/dist/lib/render/font-metrics.js +0 -53
  224. package/dist/lib/render/object-fit.js +0 -91
  225. package/dist/lib/render/path.js +0 -26
  226. package/dist/lib/render/renderer-interface.js +0 -2
  227. package/dist/lib/render/stacking-context.js +0 -341
  228. package/dist/lib/render/vector.js +0 -16
@@ -1,231 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isFilterEffect = exports.isBlendEffect = exports.isClipPathEffect = exports.isOpacityEffect = exports.isClipEffect = exports.isTransformEffect = exports.FilterEffect = exports.BlendEffect = exports.ClipPathEffect = exports.OpacityEffect = exports.ClipEffect = exports.TransformEffect = void 0;
4
- const mix_blend_mode_1 = require("../css/property-descriptors/mix-blend-mode");
5
- class TransformEffect {
6
- constructor(offsetX, offsetY, matrix) {
7
- this.offsetX = offsetX;
8
- this.offsetY = offsetY;
9
- this.matrix = matrix;
10
- this.type = 0 /* EffectType.TRANSFORM */;
11
- this.target = 2 /* EffectTarget.BACKGROUND_BORDERS */ | 4 /* EffectTarget.CONTENT */;
12
- }
13
- }
14
- exports.TransformEffect = TransformEffect;
15
- class ClipEffect {
16
- constructor(path, target) {
17
- this.path = path;
18
- this.target = target;
19
- this.type = 1 /* EffectType.CLIP */;
20
- }
21
- }
22
- exports.ClipEffect = ClipEffect;
23
- class OpacityEffect {
24
- constructor(opacity) {
25
- this.opacity = opacity;
26
- this.type = 2 /* EffectType.OPACITY */;
27
- this.target = 2 /* EffectTarget.BACKGROUND_BORDERS */ | 4 /* EffectTarget.CONTENT */;
28
- }
29
- }
30
- exports.OpacityEffect = OpacityEffect;
31
- /**
32
- * Clips the element and all its descendants to an arbitrary canvas-drawn shape.
33
- * The `applyClip` callback is responsible for calling beginPath, the shape
34
- * operations, and ctx.clip() — giving each shape type full control over how
35
- * the path is constructed (arc, ellipse, lineTo, Path2D, etc.).
36
- */
37
- class ClipPathEffect {
38
- constructor(applyClip) {
39
- this.applyClip = applyClip;
40
- this.type = 3 /* EffectType.CLIP_PATH */;
41
- this.target = 2 /* EffectTarget.BACKGROUND_BORDERS */ | 4 /* EffectTarget.CONTENT */;
42
- }
43
- }
44
- exports.ClipPathEffect = ClipPathEffect;
45
- /**
46
- * Maps a CSS mix-blend-mode value to the corresponding Canvas {@link GlobalCompositeOperation}.
47
- * All CSS blend mode values are supported by the Canvas 2D API except 'normal',
48
- * which maps to the default 'source-over'.
49
- */
50
- const MIX_BLEND_MODE_TO_COMPOSITE = {
51
- [mix_blend_mode_1.MIX_BLEND_MODE.NORMAL]: 'source-over',
52
- [mix_blend_mode_1.MIX_BLEND_MODE.MULTIPLY]: 'multiply',
53
- [mix_blend_mode_1.MIX_BLEND_MODE.SCREEN]: 'screen',
54
- [mix_blend_mode_1.MIX_BLEND_MODE.OVERLAY]: 'overlay',
55
- [mix_blend_mode_1.MIX_BLEND_MODE.DARKEN]: 'darken',
56
- [mix_blend_mode_1.MIX_BLEND_MODE.LIGHTEN]: 'lighten',
57
- [mix_blend_mode_1.MIX_BLEND_MODE.COLOR_DODGE]: 'color-dodge',
58
- [mix_blend_mode_1.MIX_BLEND_MODE.COLOR_BURN]: 'color-burn',
59
- [mix_blend_mode_1.MIX_BLEND_MODE.HARD_LIGHT]: 'hard-light',
60
- [mix_blend_mode_1.MIX_BLEND_MODE.SOFT_LIGHT]: 'soft-light',
61
- [mix_blend_mode_1.MIX_BLEND_MODE.DIFFERENCE]: 'difference',
62
- [mix_blend_mode_1.MIX_BLEND_MODE.EXCLUSION]: 'exclusion',
63
- [mix_blend_mode_1.MIX_BLEND_MODE.HUE]: 'hue',
64
- [mix_blend_mode_1.MIX_BLEND_MODE.SATURATION]: 'saturation',
65
- [mix_blend_mode_1.MIX_BLEND_MODE.COLOR]: 'color',
66
- [mix_blend_mode_1.MIX_BLEND_MODE.LUMINOSITY]: 'luminosity'
67
- };
68
- class BlendEffect {
69
- constructor(mixBlendMode) {
70
- this.mixBlendMode = mixBlendMode;
71
- this.type = 4 /* EffectType.BLEND */;
72
- this.target = 2 /* EffectTarget.BACKGROUND_BORDERS */ | 4 /* EffectTarget.CONTENT */;
73
- this.compositeOperation = MIX_BLEND_MODE_TO_COMPOSITE[mixBlendMode];
74
- }
75
- }
76
- exports.BlendEffect = BlendEffect;
77
- class FilterEffect {
78
- constructor(filterString) {
79
- this.type = 5 /* EffectType.FILTER */;
80
- this.target = 2 /* EffectTarget.BACKGROUND_BORDERS */ | 4 /* EffectTarget.CONTENT */;
81
- const parsed = FilterEffect.parseDropShadow(filterString);
82
- this.shadow = parsed.shadow;
83
- this.safeFilterString = parsed.safeFilterString;
84
- }
85
- /**
86
- * Parse a CSS filter string, extracting drop-shadow() parameters for
87
- * rendering via ctx.shadow* (which avoids canvas taint), and producing
88
- * a safe filter string with all drop-shadow() calls removed.
89
- *
90
- * Uses paren-depth tracking to correctly handle nested function
91
- * arguments — e.g. rgba() / hsla() inside drop-shadow() — which
92
- * the previous regex-based approach ([^)]+) could not handle.
93
- *
94
- * Per CSS spec the shadow value is: <color>? && <length>{2,3}
95
- * (components can appear in any order).
96
- */
97
- static parseDropShadow(filterString) {
98
- if (!filterString) {
99
- return { safeFilterString: '' };
100
- }
101
- const matches = FilterEffect.findDropShadows(filterString);
102
- if (matches.length === 0) {
103
- return { safeFilterString: filterString };
104
- }
105
- // Parse the first drop-shadow body to extract shadow params
106
- const shadow = FilterEffect.parseDropShadowBody(matches[0].body);
107
- // Build safe filter string by removing ALL drop-shadow() occurrences
108
- let result = '';
109
- let lastEnd = 0;
110
- for (const m of matches) {
111
- result += filterString.slice(lastEnd, m.start);
112
- lastEnd = m.end;
113
- }
114
- result += filterString.slice(lastEnd);
115
- return {
116
- shadow,
117
- safeFilterString: result.replace(/\s+/g, ' ').trim()
118
- };
119
- }
120
- /**
121
- * Find all drop-shadow() function calls in a CSS filter string.
122
- * Uses paren-depth tracking to correctly skip over nested
123
- * parentheses (e.g. rgba(0, 0, 0, 0.15)).
124
- */
125
- static findDropShadows(str) {
126
- const results = [];
127
- const re = /drop-shadow\(/gi;
128
- let m;
129
- while ((m = re.exec(str)) !== null) {
130
- const openParen = m.index + 'drop-shadow('.length - 1; // position of '('
131
- const start = m.index;
132
- let depth = 1;
133
- let pos = openParen + 1;
134
- while (pos < str.length && depth > 0) {
135
- const ch = str[pos];
136
- if (ch === '(')
137
- depth++;
138
- else if (ch === ')')
139
- depth--;
140
- pos++;
141
- }
142
- if (depth !== 0)
143
- break; // malformed — stop scanning
144
- const body = str.slice(openParen + 1, pos - 1);
145
- results.push({ body, start, end: pos });
146
- }
147
- return results;
148
- }
149
- /**
150
- * Parse the body of a single drop-shadow() function.
151
- * Body format (order-independent): <offsetX> <offsetY> [<blur>] [<color>?]
152
- */
153
- static parseDropShadowBody(body) {
154
- const tokens = FilterEffect.tokenizeFilterArgs(body.trim());
155
- const lengths = [];
156
- let color;
157
- for (const token of tokens) {
158
- if (FilterEffect.isCSSLength(token)) {
159
- lengths.push(parseFloat(token));
160
- }
161
- else if (token) {
162
- color = token;
163
- }
164
- }
165
- if (lengths.length < 2 || lengths.length > 3) {
166
- return undefined;
167
- }
168
- return {
169
- offsetX: lengths[0],
170
- offsetY: lengths[1],
171
- blur: lengths[2] ?? 0,
172
- color: color ?? 'rgba(0,0,0,1)'
173
- };
174
- }
175
- /**
176
- * Split whitespace-separated tokens while keeping parenthesised
177
- * expressions intact.
178
- *
179
- * e.g. "rgba(0, 0, 0, 0.15) 0px 1px 2px"
180
- * → ["rgba(0, 0, 0, 0.15)", "0px", "1px", "2px"]
181
- */
182
- static tokenizeFilterArgs(str) {
183
- const tokens = [];
184
- let current = '';
185
- let depth = 0;
186
- for (let i = 0; i < str.length; i++) {
187
- const ch = str[i];
188
- if (ch === '(') {
189
- depth++;
190
- current += ch;
191
- }
192
- else if (ch === ')') {
193
- depth--;
194
- current += ch;
195
- }
196
- else if (/\s/.test(ch)) {
197
- if (depth > 0) {
198
- current += ch;
199
- }
200
- else if (current) {
201
- tokens.push(current);
202
- current = '';
203
- }
204
- }
205
- else {
206
- current += ch;
207
- }
208
- }
209
- if (current) {
210
- tokens.push(current);
211
- }
212
- return tokens;
213
- }
214
- /** True when token looks like a CSS length: number with optional unit. */
215
- static isCSSLength(token) {
216
- return /^-?[\d.]+(px|em|rem|pt|cm|mm|in|pc|ex|ch|vw|vh|vmin|vmax|%)?$/i.test(token);
217
- }
218
- }
219
- exports.FilterEffect = FilterEffect;
220
- const isTransformEffect = (effect) => effect.type === 0 /* EffectType.TRANSFORM */;
221
- exports.isTransformEffect = isTransformEffect;
222
- const isClipEffect = (effect) => effect.type === 1 /* EffectType.CLIP */;
223
- exports.isClipEffect = isClipEffect;
224
- const isOpacityEffect = (effect) => effect.type === 2 /* EffectType.OPACITY */;
225
- exports.isOpacityEffect = isOpacityEffect;
226
- const isClipPathEffect = (effect) => effect.type === 3 /* EffectType.CLIP_PATH */;
227
- exports.isClipPathEffect = isClipPathEffect;
228
- const isBlendEffect = (effect) => effect.type === 4 /* EffectType.BLEND */;
229
- exports.isBlendEffect = isBlendEffect;
230
- const isFilterEffect = (effect) => effect.type === 5 /* EffectType.FILTER */;
231
- exports.isFilterEffect = isFilterEffect;
@@ -1,53 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.FontMetrics = void 0;
4
- const util_1 = require("../core/util");
5
- const SAMPLE_TEXT = 'Hidden Text';
6
- class FontMetrics {
7
- constructor(document) {
8
- this._data = {};
9
- this._document = document;
10
- }
11
- parseMetrics(fontFamily, fontSize) {
12
- const container = this._document.createElement('div');
13
- const img = this._document.createElement('img');
14
- const span = this._document.createElement('span');
15
- const body = this._document.body;
16
- container.style.visibility = 'hidden';
17
- container.style.fontFamily = fontFamily;
18
- container.style.fontSize = fontSize;
19
- container.style.margin = '0';
20
- container.style.padding = '0';
21
- container.style.whiteSpace = 'nowrap';
22
- body.appendChild(container);
23
- img.src = util_1.SMALL_IMAGE;
24
- img.width = 1;
25
- img.height = 1;
26
- img.style.margin = '0';
27
- img.style.padding = '0';
28
- img.style.verticalAlign = 'baseline';
29
- span.style.fontFamily = fontFamily;
30
- span.style.fontSize = fontSize;
31
- span.style.margin = '0';
32
- span.style.padding = '0';
33
- span.appendChild(this._document.createTextNode(SAMPLE_TEXT));
34
- container.appendChild(span);
35
- container.appendChild(img);
36
- const baseline = img.offsetTop - span.offsetTop + 2;
37
- container.removeChild(span);
38
- container.appendChild(this._document.createTextNode(SAMPLE_TEXT));
39
- container.style.lineHeight = 'normal';
40
- img.style.verticalAlign = 'super';
41
- const middle = img.offsetTop - container.offsetTop + 2;
42
- body.removeChild(container);
43
- return { baseline, middle };
44
- }
45
- getMetrics(fontFamily, fontSize) {
46
- const key = `${fontFamily} ${fontSize}`;
47
- if (typeof this._data[key] === 'undefined') {
48
- this._data[key] = this.parseMetrics(fontFamily, fontSize);
49
- }
50
- return this._data[key];
51
- }
52
- }
53
- exports.FontMetrics = FontMetrics;
@@ -1,91 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.calculateObjectFitRendering = void 0;
4
- const length_percentage_1 = require("../css/types/length-percentage");
5
- const calculateObjectFitRendering = (intrinsicWidth, intrinsicHeight, box, objectFit, objectPosition) => {
6
- let sx = 0;
7
- let sy = 0;
8
- let sw = intrinsicWidth;
9
- let sh = intrinsicHeight;
10
- let dx = box.left;
11
- let dy = box.top;
12
- let dw = box.width;
13
- let dh = box.height;
14
- const boxRatio = dw / dh;
15
- const imgRatio = sw / sh;
16
- // Resolve object-position offsets (default: 50% 50% = center)
17
- const posX = objectPosition ? (0, length_percentage_1.getAbsoluteValue)(objectPosition[0], 1) : 0.5;
18
- const posY = objectPosition ? (0, length_percentage_1.getAbsoluteValue)(objectPosition[1], 1) : 0.5;
19
- if (objectFit === 2 /* OBJECT_FIT.CONTAIN */) {
20
- if (imgRatio > boxRatio) {
21
- dh = dw / imgRatio;
22
- dy += (box.height - dh) * posY;
23
- }
24
- else {
25
- dw = dh * imgRatio;
26
- dx += (box.width - dw) * posX;
27
- }
28
- }
29
- else if (objectFit === 4 /* OBJECT_FIT.COVER */) {
30
- if (imgRatio > boxRatio) {
31
- sw = sh * boxRatio;
32
- sx += (intrinsicWidth - sw) * posX;
33
- }
34
- else {
35
- sh = sw / boxRatio;
36
- sy += (intrinsicHeight - sh) * posY;
37
- }
38
- }
39
- else if (objectFit === 8 /* OBJECT_FIT.NONE */) {
40
- if (sw > dw) {
41
- sx += (sw - dw) * posX;
42
- sw = dw;
43
- }
44
- else {
45
- dx += (dw - sw) * posX;
46
- dw = sw;
47
- }
48
- if (sh > dh) {
49
- sy += (sh - dh) * posY;
50
- sh = dh;
51
- }
52
- else {
53
- dy += (dh - sh) * posY;
54
- dh = sh;
55
- }
56
- }
57
- else if (objectFit === 16 /* OBJECT_FIT.SCALE_DOWN */) {
58
- const containW = imgRatio > boxRatio ? dw : dh * imgRatio;
59
- const noneW = sw > dw ? sw : dw;
60
- if (containW < noneW) {
61
- if (imgRatio > boxRatio) {
62
- dh = dw / imgRatio;
63
- dy += (box.height - dh) * posY;
64
- }
65
- else {
66
- dw = dh * imgRatio;
67
- dx += (box.width - dw) * posX;
68
- }
69
- }
70
- else {
71
- if (sw > dw) {
72
- sx += (sw - dw) * posX;
73
- sw = dw;
74
- }
75
- else {
76
- dx += (dw - sw) * posX;
77
- dw = sw;
78
- }
79
- if (sh > dh) {
80
- sy += (sh - dh) * posY;
81
- sh = dh;
82
- }
83
- else {
84
- dy += (dh - sh) * posY;
85
- dh = sh;
86
- }
87
- }
88
- }
89
- return { sx, sy, sw, sh, dx, dy, dw, dh };
90
- };
91
- exports.calculateObjectFitRendering = calculateObjectFitRendering;
@@ -1,26 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.transformPath = exports.equalPath = void 0;
4
- const equalPath = (a, b) => {
5
- if (a.length === b.length) {
6
- return a.some((v, i) => v === b[i]);
7
- }
8
- return false;
9
- };
10
- exports.equalPath = equalPath;
11
- const transformPath = (path, deltaX, deltaY, deltaW, deltaH) => {
12
- return path.map((point, index) => {
13
- switch (index) {
14
- case 0:
15
- return point.add(deltaX, deltaY);
16
- case 1:
17
- return point.add(deltaX + deltaW, deltaY);
18
- case 2:
19
- return point.add(deltaX + deltaW, deltaY + deltaH);
20
- case 3:
21
- return point.add(deltaX, deltaY + deltaH);
22
- }
23
- return point;
24
- });
25
- };
26
- exports.transformPath = transformPath;
@@ -1,2 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });