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,341 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.parseStackingContexts = exports.buildClipPathEffect = exports.resolveAxisRadius = exports.hasOverflowClip = exports.ElementPaint = exports.StackingContext = void 0;
4
- const bitwise_1 = require("../core/bitwise");
5
- const bound_curves_1 = require("./bound-curves");
6
- const effects_1 = require("./effects");
7
- const path_1 = require("./path");
8
- const ol_element_container_1 = require("../dom/elements/ol-element-container");
9
- const li_element_container_1 = require("../dom/elements/li-element-container");
10
- const counter_1 = require("../css/types/functions/counter");
11
- const length_percentage_1 = require("../css/types/length-percentage");
12
- const mix_blend_mode_1 = require("../css/property-descriptors/mix-blend-mode");
13
- class StackingContext {
14
- constructor(container) {
15
- this.element = container;
16
- this.inlineLevel = [];
17
- this.nonInlineLevel = [];
18
- this.negativeZIndex = [];
19
- this.zeroOrAutoZIndexOrTransformedOrOpacity = [];
20
- this.positiveZIndex = [];
21
- this.nonPositionedFloats = [];
22
- this.nonPositionedInlineLevel = [];
23
- }
24
- }
25
- exports.StackingContext = StackingContext;
26
- class ElementPaint {
27
- constructor(container, parent) {
28
- this.container = container;
29
- this.parent = parent;
30
- this.effects = [];
31
- this.curves = new bound_curves_1.BoundCurves(this.container);
32
- if (this.container.styles.opacity < 1) {
33
- this.effects.push(new effects_1.OpacityEffect(this.container.styles.opacity));
34
- }
35
- if (this.container.styles.rotate !== null) {
36
- const origin = this.container.styles.transformOrigin;
37
- const offsetX = this.container.bounds.left + (0, length_percentage_1.getAbsoluteValue)(origin[0], this.container.bounds.width);
38
- const offsetY = this.container.bounds.top + (0, length_percentage_1.getAbsoluteValue)(origin[1], this.container.bounds.height);
39
- // Apply rotate property if present
40
- const angle = this.container.styles.rotate;
41
- const rad = (angle * Math.PI) / 180;
42
- const cos = Math.cos(rad);
43
- const sin = Math.sin(rad);
44
- const rotateMatrix = [cos, sin, -sin, cos, 0, 0];
45
- this.effects.push(new effects_1.TransformEffect(offsetX, offsetY, rotateMatrix));
46
- }
47
- if (this.container.styles.transform !== null) {
48
- const origin = this.container.styles.transformOrigin;
49
- const offsetX = this.container.bounds.left + (0, length_percentage_1.getAbsoluteValue)(origin[0], this.container.bounds.width);
50
- const offsetY = this.container.bounds.top + (0, length_percentage_1.getAbsoluteValue)(origin[1], this.container.bounds.height);
51
- const matrix = this.container.styles.transform;
52
- this.effects.push(new effects_1.TransformEffect(offsetX, offsetY, matrix));
53
- }
54
- if ((0, exports.hasOverflowClip)(this.container.styles)) {
55
- const borderBox = (0, bound_curves_1.calculateBorderBoxPath)(this.curves);
56
- const paddingBox = (0, bound_curves_1.calculatePaddingBoxPath)(this.curves);
57
- if ((0, path_1.equalPath)(borderBox, paddingBox)) {
58
- this.effects.push(new effects_1.ClipEffect(borderBox, 2 /* EffectTarget.BACKGROUND_BORDERS */ | 4 /* EffectTarget.CONTENT */));
59
- }
60
- else {
61
- this.effects.push(new effects_1.ClipEffect(borderBox, 2 /* EffectTarget.BACKGROUND_BORDERS */));
62
- this.effects.push(new effects_1.ClipEffect(paddingBox, 4 /* EffectTarget.CONTENT */));
63
- }
64
- }
65
- if (this.container.styles.clipPath.type !== 0 /* CLIP_PATH_TYPE.NONE */) {
66
- const clipPathEffect = (0, exports.buildClipPathEffect)(this.container.styles.clipPath, this.container.bounds);
67
- if (clipPathEffect) {
68
- this.effects.push(clipPathEffect);
69
- }
70
- }
71
- if (this.container.styles.mixBlendMode !== mix_blend_mode_1.MIX_BLEND_MODE.NORMAL) {
72
- this.effects.push(new effects_1.BlendEffect(this.container.styles.mixBlendMode));
73
- }
74
- if (this.container.styles.filter !== null) {
75
- this.effects.push(new effects_1.FilterEffect(this.container.styles.filter));
76
- }
77
- if (this.container.styles.zoom !== 1) {
78
- const origin = this.container.styles.transformOrigin;
79
- const offsetX = this.container.bounds.left + (0, length_percentage_1.getAbsoluteValue)(origin[0], this.container.bounds.width);
80
- const offsetY = this.container.bounds.top + (0, length_percentage_1.getAbsoluteValue)(origin[1], this.container.bounds.height);
81
- const z = this.container.styles.zoom;
82
- const zoomMatrix = [z, 0, 0, z, 0, 0];
83
- this.effects.push(new effects_1.TransformEffect(offsetX, offsetY, zoomMatrix));
84
- }
85
- }
86
- getEffects(target, surfaceRoot) {
87
- let inFlow = [2 /* POSITION.ABSOLUTE */, 3 /* POSITION.FIXED */].indexOf(this.container.styles.position) === -1;
88
- let parent = this === surfaceRoot ? null : this.parent;
89
- const sourceEffects = (paint) => paint.effects.filter((effect) => paint !== surfaceRoot || (!(0, effects_1.isFilterEffect)(effect) && !(0, effects_1.isOpacityEffect)(effect)));
90
- const effects = sourceEffects(this);
91
- while (parent) {
92
- const croplessEffects = sourceEffects(parent).filter((effect) => !(0, effects_1.isClipEffect)(effect));
93
- if (inFlow || parent.container.styles.position !== 0 /* POSITION.STATIC */ || !parent.parent) {
94
- inFlow = [2 /* POSITION.ABSOLUTE */, 3 /* POSITION.FIXED */].indexOf(parent.container.styles.position) === -1;
95
- if ((0, exports.hasOverflowClip)(parent.container.styles)) {
96
- const borderBox = (0, bound_curves_1.calculateBorderBoxPath)(parent.curves);
97
- const paddingBox = (0, bound_curves_1.calculatePaddingBoxPath)(parent.curves);
98
- if (!(0, path_1.equalPath)(borderBox, paddingBox)) {
99
- effects.unshift(new effects_1.ClipEffect(paddingBox, 2 /* EffectTarget.BACKGROUND_BORDERS */ | 4 /* EffectTarget.CONTENT */));
100
- }
101
- }
102
- effects.unshift(...croplessEffects);
103
- }
104
- else {
105
- effects.unshift(...croplessEffects);
106
- }
107
- parent = parent === surfaceRoot ? null : parent.parent;
108
- }
109
- return effects.filter((effect) => (0, bitwise_1.contains)(effect.target, target));
110
- }
111
- }
112
- exports.ElementPaint = ElementPaint;
113
- /** @internal – exported for testing only. */
114
- const hasOverflowClip = (styles) => styles.overflowX !== 0 /* OVERFLOW.VISIBLE */ || styles.overflowY !== 0 /* OVERFLOW.VISIBLE */;
115
- exports.hasOverflowClip = hasOverflowClip;
116
- /**
117
- * Resolve a `closest-side` or `farthest-side` shape-radius keyword to pixels
118
- * for a single axis. Used by both `circle()` (per-axis) and `ellipse()`.
119
- *
120
- * @param r - The ShapeRadius (keyword or length-percentage).
121
- * @param center - Absolute center coordinate on this axis (cx or cy).
122
- * @param start - Absolute start of the reference box on this axis.
123
- * @param end - Absolute end of the reference box on this axis.
124
- * @param dimRef - Reference dimension for resolving a length-percentage value.
125
- * @internal – exported for testing only.
126
- */
127
- const resolveAxisRadius = (r, center, start, end, dimRef) => {
128
- if (r === 'closest-side')
129
- return Math.min(center - start, end - center);
130
- if (r === 'farthest-side')
131
- return Math.max(center - start, end - center);
132
- return (0, length_percentage_1.getAbsoluteValue)(r, dimRef);
133
- };
134
- exports.resolveAxisRadius = resolveAxisRadius;
135
- /**
136
- * Convert a parsed ClipPathValue + element bounds into a ClipPathEffect whose
137
- * `applyClip` callback draws the clip shape directly onto the canvas context.
138
- *
139
- * All coordinates are computed in page-absolute space at construction time so
140
- * the callback itself is allocation-free and executes synchronously.
141
- * @internal – exported for testing only.
142
- */
143
- const buildClipPathEffect = (clipPath, bounds) => {
144
- const { left: bLeft, top: bTop, width: bWidth, height: bHeight } = bounds;
145
- switch (clipPath.type) {
146
- case 1 /* CLIP_PATH_TYPE.INSET */: {
147
- const iLeft = (0, length_percentage_1.getAbsoluteValue)(clipPath.left, bWidth);
148
- const iTop = (0, length_percentage_1.getAbsoluteValue)(clipPath.top, bHeight);
149
- const x = bLeft + iLeft;
150
- const y = bTop + iTop;
151
- // Clamp to zero: per CSS spec, overlapping insets produce an empty shape.
152
- const w = Math.max(0, bWidth - iLeft - (0, length_percentage_1.getAbsoluteValue)(clipPath.right, bWidth));
153
- const h = Math.max(0, bHeight - iTop - (0, length_percentage_1.getAbsoluteValue)(clipPath.bottom, bHeight));
154
- return new effects_1.ClipPathEffect((ctx) => {
155
- ctx.beginPath();
156
- ctx.rect(x, y, w, h);
157
- ctx.clip();
158
- });
159
- }
160
- case 2 /* CLIP_PATH_TYPE.CIRCLE */: {
161
- const cx = bLeft + (0, length_percentage_1.getAbsoluteValue)(clipPath.cx, bWidth);
162
- const cy = bTop + (0, length_percentage_1.getAbsoluteValue)(clipPath.cy, bHeight);
163
- let r;
164
- if (clipPath.radius === 'closest-side') {
165
- r = Math.min(cx - bLeft, cy - bTop, bLeft + bWidth - cx, bTop + bHeight - cy);
166
- }
167
- else if (clipPath.radius === 'farthest-side') {
168
- r = Math.max(cx - bLeft, cy - bTop, bLeft + bWidth - cx, bTop + bHeight - cy);
169
- }
170
- else {
171
- // Per CSS spec, percentage is relative to sqrt(w² + h²) / sqrt(2).
172
- r = (0, length_percentage_1.getAbsoluteValue)(clipPath.radius, Math.sqrt(bWidth * bWidth + bHeight * bHeight) / Math.SQRT2);
173
- }
174
- return new effects_1.ClipPathEffect((ctx) => {
175
- ctx.beginPath();
176
- ctx.arc(cx, cy, Math.max(0, r), 0, Math.PI * 2);
177
- ctx.clip();
178
- });
179
- }
180
- case 3 /* CLIP_PATH_TYPE.ELLIPSE */: {
181
- const cx = bLeft + (0, length_percentage_1.getAbsoluteValue)(clipPath.cx, bWidth);
182
- const cy = bTop + (0, length_percentage_1.getAbsoluteValue)(clipPath.cy, bHeight);
183
- const rx = (0, exports.resolveAxisRadius)(clipPath.rx, cx, bLeft, bLeft + bWidth, bWidth);
184
- const ry = (0, exports.resolveAxisRadius)(clipPath.ry, cy, bTop, bTop + bHeight, bHeight);
185
- return new effects_1.ClipPathEffect((ctx) => {
186
- ctx.beginPath();
187
- ctx.ellipse(cx, cy, Math.max(0, rx), Math.max(0, ry), 0, 0, Math.PI * 2);
188
- ctx.clip();
189
- });
190
- }
191
- case 4 /* CLIP_PATH_TYPE.POLYGON */: {
192
- // Pre-compute all vertices in page-absolute coordinates.
193
- const absPoints = clipPath.points.map(([px, py]) => [bLeft + (0, length_percentage_1.getAbsoluteValue)(px, bWidth), bTop + (0, length_percentage_1.getAbsoluteValue)(py, bHeight)]);
194
- return new effects_1.ClipPathEffect((ctx) => {
195
- ctx.beginPath();
196
- if (absPoints.length > 0) {
197
- ctx.moveTo(absPoints[0][0], absPoints[0][1]);
198
- for (let i = 1; i < absPoints.length; i++) {
199
- ctx.lineTo(absPoints[i][0], absPoints[i][1]);
200
- }
201
- ctx.closePath();
202
- }
203
- // Calling clip() with an empty path (zero points) is intentional:
204
- // it clips the entire region to nothing, which is the correct
205
- // behaviour for a degenerate polygon() per the CSS spec.
206
- ctx.clip();
207
- });
208
- }
209
- case 5 /* CLIP_PATH_TYPE.PATH */: {
210
- // path() coordinates are in the element's local space (0,0 = element top-left).
211
- // We temporarily translate the canvas origin to the element's position, clip
212
- // with the Path2D, then restore only the transform matrix (not the clipping
213
- // region) via setTransform so the clip persists for the enclosing
214
- // ctx.save() / ctx.restore() pair managed by EffectsRenderer.
215
- //
216
- // When the element also has a CSS transform, that transform was already applied
217
- // by a preceding TransformEffect, so the path coordinates end up correctly in
218
- // the element's transformed local space — matching browser behaviour.
219
- const { d } = clipPath;
220
- let cachedPath = null;
221
- return new effects_1.ClipPathEffect((ctx) => {
222
- try {
223
- if (!cachedPath) {
224
- cachedPath = new Path2D(d);
225
- }
226
- const savedTransform = ctx.getTransform();
227
- ctx.translate(bLeft, bTop);
228
- ctx.clip(cachedPath);
229
- ctx.setTransform(savedTransform);
230
- }
231
- catch (_e) {
232
- // Path2D or getTransform/setTransform not supported in this environment.
233
- }
234
- });
235
- }
236
- case 0 /* CLIP_PATH_TYPE.NONE */:
237
- return null;
238
- default: {
239
- // Exhaustiveness guard: if a new CLIP_PATH_TYPE is added in the future
240
- // without a corresponding case above, TypeScript will raise a compile-time
241
- // error here rather than silently falling through.
242
- const _exhaustive = clipPath;
243
- void _exhaustive;
244
- return null;
245
- }
246
- }
247
- };
248
- exports.buildClipPathEffect = buildClipPathEffect;
249
- const parseStackTree = (parent, stackingContext, realStackingContext, listItems) => {
250
- parent.container.elements.forEach((child) => {
251
- const treatAsRealStackingContext = child.createsRealStackingContext;
252
- const createsStackingContext = child.createsStackingContext;
253
- const paintContainer = new ElementPaint(child, parent);
254
- if ((0, bitwise_1.contains)(child.styles.display, 2048 /* DISPLAY.LIST_ITEM */)) {
255
- listItems.push(paintContainer);
256
- }
257
- const listOwnerItems = child.isListOwner ? [] : listItems;
258
- if (treatAsRealStackingContext || createsStackingContext) {
259
- const parentStack = treatAsRealStackingContext || child.styles.isPositioned() ? realStackingContext : stackingContext;
260
- const stack = new StackingContext(paintContainer);
261
- if (child.styles.isPositioned() || child.styles.opacity < 1 || child.styles.isTransformed()) {
262
- const order = child.styles.zIndex.order;
263
- if (order < 0) {
264
- let index = 0;
265
- parentStack.negativeZIndex.some((current, i) => {
266
- if (order > current.element.container.styles.zIndex.order) {
267
- index = i;
268
- return false;
269
- }
270
- else if (index > 0) {
271
- return true;
272
- }
273
- return false;
274
- });
275
- parentStack.negativeZIndex.splice(index, 0, stack);
276
- }
277
- else if (order > 0) {
278
- let index = 0;
279
- parentStack.positiveZIndex.some((current, i) => {
280
- if (order >= current.element.container.styles.zIndex.order) {
281
- index = i + 1;
282
- return false;
283
- }
284
- else if (index > 0) {
285
- return true;
286
- }
287
- return false;
288
- });
289
- parentStack.positiveZIndex.splice(index, 0, stack);
290
- }
291
- else {
292
- parentStack.zeroOrAutoZIndexOrTransformedOrOpacity.push(stack);
293
- }
294
- }
295
- else {
296
- if (child.styles.isFloating()) {
297
- parentStack.nonPositionedFloats.push(stack);
298
- }
299
- else {
300
- parentStack.nonPositionedInlineLevel.push(stack);
301
- }
302
- }
303
- parseStackTree(paintContainer, stack, treatAsRealStackingContext ? stack : realStackingContext, listOwnerItems);
304
- }
305
- else {
306
- if (child.styles.isInlineLevel()) {
307
- stackingContext.inlineLevel.push(paintContainer);
308
- }
309
- else {
310
- stackingContext.nonInlineLevel.push(paintContainer);
311
- }
312
- parseStackTree(paintContainer, stackingContext, realStackingContext, listOwnerItems);
313
- }
314
- if (child.isListOwner) {
315
- processListItems(child, listOwnerItems);
316
- }
317
- });
318
- };
319
- const processListItems = (owner, elements) => {
320
- let numbering = owner instanceof ol_element_container_1.OLElementContainer ? owner.start : 1;
321
- const reversed = owner instanceof ol_element_container_1.OLElementContainer ? owner.reversed : false;
322
- for (let i = 0; i < elements.length; i++) {
323
- const item = elements[i];
324
- if (item.container instanceof li_element_container_1.LIElementContainer &&
325
- typeof item.container.value === 'number' &&
326
- item.container.value !== 0) {
327
- numbering = item.container.value;
328
- }
329
- item.listValue = (0, counter_1.createCounterText)(numbering, item.container.styles.listStyleType, true);
330
- numbering += reversed ? -1 : 1;
331
- }
332
- };
333
- const parseStackingContexts = (container) => {
334
- const paintContainer = new ElementPaint(container, null);
335
- const root = new StackingContext(paintContainer);
336
- const listItems = [];
337
- parseStackTree(paintContainer, root, root, listItems);
338
- processListItems(paintContainer.container, listItems);
339
- return root;
340
- };
341
- exports.parseStackingContexts = parseStackingContexts;
@@ -1,16 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isVector = exports.Vector = void 0;
4
- class Vector {
5
- constructor(x, y) {
6
- this.type = 0 /* PathType.VECTOR */;
7
- this.x = x;
8
- this.y = y;
9
- }
10
- add(deltaX, deltaY) {
11
- return new Vector(this.x + deltaX, this.y + deltaY);
12
- }
13
- }
14
- exports.Vector = Vector;
15
- const isVector = (path) => path.type === 0 /* PathType.VECTOR */;
16
- exports.isVector = isVector;