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,6 +1,7 @@
1
1
  /**
2
2
  * Pro Photo related functions
3
3
  */
4
+ import { RGB3, RGBA4 } from '../color-math';
4
5
  /**
5
6
  * Convert linear-light display-p3 to XYZ D65
6
7
  *
@@ -18,19 +19,19 @@ export declare const xyzToProPhotoLinear: (xyz: [number, number, number]) => [nu
18
19
  *
19
20
  * @param p3
20
21
  */
21
- export declare const proPhotoToProPhotoLinear: (p3: [number, number, number]) => number[];
22
+ export declare const proPhotoToProPhotoLinear: (p3: RGB3) => RGB3;
22
23
  /**
23
24
  * Convert Pro-Photo Linear to Pro-Photo
24
25
  *
25
26
  * @param p3
26
27
  */
27
- export declare const proPhotoLinearToProPhoto: (p3: [number, number, number]) => number[];
28
+ export declare const proPhotoLinearToProPhoto: (p3: RGB3) => RGB3;
28
29
  /**
29
30
  * Convert Pro-Photo to XYZ
30
31
  *
31
32
  * @param args
32
33
  */
33
- export declare const proPhotoToXYZ: (args: number[]) => [number, number, number];
34
+ export declare const proPhotoToXYZ: (args: RGB3) => RGB3;
34
35
  /**
35
36
  * Convert XYZ to Pro-Photo
36
37
  *
@@ -42,4 +43,4 @@ export declare const proPhotoFromXYZ: (args: [number, number, number, number]) =
42
43
  *
43
44
  * @param args
44
45
  */
45
- export declare const convertProPhoto: (args: number[]) => number;
46
+ export declare const convertProPhoto: (args: RGBA4) => number;
@@ -1,18 +1,19 @@
1
1
  /**
2
2
  * REC2020 related functions
3
3
  */
4
+ import { RGB3, RGBA4 } from '../color-math';
4
5
  /**
5
6
  * Convert rec2020 to rec2020 linear
6
7
  *
7
8
  * @param rgb
8
9
  */
9
- export declare const rec20202rec2020Linear: (rgb: [number, number, number]) => number[];
10
+ export declare const rec20202rec2020Linear: (rgb: RGB3) => RGB3;
10
11
  /**
11
12
  * Convert rec2020 linear to rec2020
12
13
  *
13
14
  * @param rgb
14
15
  */
15
- export declare const rec2020Linear2rec2020: (rgb: [number, number, number]) => number[];
16
+ export declare const rec2020Linear2rec2020: (rgb: RGB3) => RGB3;
16
17
  /**
17
18
  * Convert rec2020 linear to XYZ D65
18
19
  *
@@ -30,7 +31,7 @@ export declare const xyzToRec2020Linear: (xyz: [number, number, number]) => [num
30
31
  *
31
32
  * @param args
32
33
  */
33
- export declare const rec2020ToXYZ: (args: number[]) => [number, number, number];
34
+ export declare const rec2020ToXYZ: (args: RGB3) => RGB3;
34
35
  /**
35
36
  * Convert XYZ to Rec2020
36
37
  *
@@ -42,4 +43,4 @@ export declare const rec2020FromXYZ: (args: [number, number, number, number]) =>
42
43
  *
43
44
  * @param args
44
45
  */
45
- export declare const convertRec2020: (args: number[]) => number;
46
+ export declare const convertRec2020: (args: RGBA4) => number;
@@ -1,6 +1,7 @@
1
1
  /**
2
2
  * SRGB related functions
3
3
  */
4
+ import { RGB3, RGBA4 } from '../color-math';
4
5
  /**
5
6
  * Convert XYZ to linear-light sRGB
6
7
  *
@@ -18,21 +19,21 @@ export declare const rgbLinear2xyz: (xyz: [number, number, number]) => [number,
18
19
  *
19
20
  * @param rgb
20
21
  */
21
- export declare const srgbLinear2rgb: (rgb: [number, number, number]) => number[];
22
+ export declare const srgbLinear2rgb: (rgb: RGB3) => RGB3;
22
23
  /**
23
24
  * Convert RGB to sRGB
24
25
  *
25
26
  * @param rgb
26
27
  */
27
- export declare const rgb2rgbLinear: (rgb: [number, number, number]) => number[];
28
+ export declare const rgb2rgbLinear: (rgb: RGB3) => RGB3;
28
29
  /**
29
30
  * XYZ to SRGB
30
31
  *
31
32
  * @param args
32
33
  */
33
- export declare const srgbFromXYZ: (args: [number, number, number, number]) => [number, number, number, number];
34
+ export declare const srgbFromXYZ: (args: RGBA4) => RGBA4;
34
35
  /**
35
36
  * XYZ to SRGB-Linear
36
37
  * @param args
37
38
  */
38
- export declare const srgbLinearFromXYZ: (args: [number, number, number, number]) => [number, number, number, number];
39
+ export declare const srgbLinearFromXYZ: (args: RGBA4) => RGBA4;
@@ -1,6 +1,6 @@
1
1
  import { Context } from '../../core/context';
2
2
  import { CSSValue } from '../syntax/parser';
3
- import { clamp, multiplyMatrices } from './color-math';
3
+ import { clamp, multiplyMatrices, RGB3, RGBA4 } from './color-math';
4
4
  type Color = number;
5
5
  export declare const isTransparent: (color: Color) => boolean;
6
6
  export declare const asString: (color: Color) => string;
@@ -8,18 +8,18 @@ export declare const pack: (r: number, g: number, b: number, a: number) => Color
8
8
  export declare const getTokenColorValue: (token: CSSValue, i: number) => number;
9
9
  export declare const isRelativeTransform: (tokens: CSSValue[]) => boolean;
10
10
  export { clamp, multiplyMatrices };
11
- export declare const packSrgb: (args: number[]) => number;
12
- export declare const packSrgbLinear: ([r, g, b, a]: [number, number, number, number]) => number;
13
- export declare const packXYZ: (args: number[]) => number;
11
+ export declare const packSrgb: (args: RGBA4) => number;
12
+ export declare const packSrgbLinear: (args: RGBA4) => number;
13
+ export declare const packXYZ: (args: RGBA4) => number;
14
14
  export declare const packLab: (_context: Context, args: CSSValue[]) => number;
15
15
  export declare const packOkLab: (_context: Context, args: CSSValue[]) => number;
16
16
  export declare const packOkLch: (_context: Context, args: CSSValue[]) => number;
17
17
  export declare const packLch: (_context: Context, args: CSSValue[]) => number;
18
- export declare const extractHslComponents: (context: Context, args: CSSValue[]) => [number, number, number, number];
18
+ export declare const extractHslComponents: (context: Context, args: CSSValue[]) => RGBA4;
19
19
  export declare const packHSL: (context: Context, args: CSSValue[]) => number;
20
- export declare const extractLchComponents: (args: CSSValue[]) => [number, number, number, number];
21
- export declare const extractLabComponents: (args: CSSValue[]) => [number, number, number, number];
22
- export declare const extractOkLchComponents: (args: CSSValue[]) => [number, number, number, number];
20
+ export declare const extractLchComponents: (args: CSSValue[]) => RGBA4;
21
+ export declare const extractLabComponents: (args: CSSValue[]) => RGBA4;
22
+ export declare const extractOkLchComponents: (args: CSSValue[]) => RGBA4;
23
23
  /**
24
24
  * Convert D65 to D50
25
25
  *
@@ -80,7 +80,7 @@ export declare const oklabToXyz: (_context: Context, args: CSSValue[]) => [numbe
80
80
  *
81
81
  * @param args
82
82
  */
83
- export declare const xyz50ToXYZ: (args: number[]) => [number, number, number];
83
+ export declare const xyz50ToXYZ: (args: RGBA4 | RGB3) => RGB3;
84
84
  /**
85
85
  * Does nothing, required for SUPPORTED_COLOR_SPACES_FROM_XYZ in the _color() function
86
86
  *
@@ -98,10 +98,10 @@ export declare const xyz50FromXYZ: (args: [number, number, number, number]) => [
98
98
  *
99
99
  * @param args
100
100
  */
101
- export declare const convertXyz: (args: number[]) => number;
101
+ export declare const convertXyz: (args: RGBA4) => number;
102
102
  /**
103
103
  * Convert XYZ-50 to SRGB and Pack
104
104
  *
105
105
  * @param args
106
106
  */
107
- export declare const convertXyz50: (args: number[]) => number;
107
+ export declare const convertXyz50: (args: RGBA4) => number;
@@ -3,6 +3,7 @@ import { Context } from '../../core/context';
3
3
  export type Color = number;
4
4
  export declare const color: ITypeDescriptor<Color>;
5
5
  export declare const parseColor: (context: Context, value: string) => Color;
6
+ export declare const TRANSPARENT_COLOR: Color;
6
7
  export declare const COLORS: {
7
8
  [key: string]: Color;
8
9
  };
@@ -0,0 +1,11 @@
1
+ import { CSSValue } from '../../syntax/parser';
2
+ import { CSSConicGradientImage } from '../image';
3
+ import { Context } from '../../../core/context';
4
+ /**
5
+ * conic-gradient( [ from <angle> ]? [ at <position> ]?, <color-stop-list> )
6
+ *
7
+ * The gradient sweeps clockwise from `from <angle>` (0deg = 12 o'clock)
8
+ * around `at <position>` (default: center). The first comma-separated group
9
+ * may carry the from/at clauses; every following group is a color stop.
10
+ */
11
+ export declare const conicGradient: (context: Context, tokens: CSSValue[]) => CSSConicGradientImage;
@@ -0,0 +1,11 @@
1
+ import { CSSValue } from '../../syntax/parser';
2
+ import { ICSSImage } from '../image';
3
+ import { Context } from '../../../core/context';
4
+ /**
5
+ * image-set(url(a.png) 1x, url(b.png) 2x)
6
+ *
7
+ * Browsers keep image-set in the computed value, so the candidate matching
8
+ * the current devicePixelRatio is selected here: the smallest resolution >=
9
+ * DPR, falling back to the largest candidate below it.
10
+ */
11
+ export declare const imageSet: (context: Context, tokens: CSSValue[]) => ICSSImage;
@@ -0,0 +1,8 @@
1
+ import { CSSValue } from '../../syntax/parser';
2
+ import { CSSRadialGradientImage } from '../image';
3
+ import { Context } from '../../../core/context';
4
+ /**
5
+ * repeating-radial-gradient shares the radial-gradient grammar exactly; only
6
+ * the image type differs, which switches the renderer to periodic stops.
7
+ */
8
+ export declare const repeatingRadialGradient: (context: Context, tokens: CSSValue[]) => CSSRadialGradientImage;
@@ -6,11 +6,15 @@ export declare const enum CSSImageType {
6
6
  URL = 0,
7
7
  LINEAR_GRADIENT = 1,
8
8
  RADIAL_GRADIENT = 2,
9
- REPEATING_LINEAR_GRADIENT = 3
9
+ REPEATING_LINEAR_GRADIENT = 3,
10
+ REPEATING_RADIAL_GRADIENT = 4,
11
+ CONIC_GRADIENT = 5
10
12
  }
11
13
  export declare const isLinearGradient: (background: ICSSImage) => background is CSSLinearGradientImage;
12
14
  export declare const isRadialGradient: (background: ICSSImage) => background is CSSRadialGradientImage;
13
15
  export declare const isRepeatingLinearGradient: (background: ICSSImage) => background is CSSLinearGradientImage;
16
+ export declare const isRepeatingRadialGradient: (background: ICSSImage) => background is CSSRadialGradientImage;
17
+ export declare const isConicGradient: (background: ICSSImage) => background is CSSConicGradientImage;
14
18
  export interface UnprocessedGradientColorStop {
15
19
  color: Color;
16
20
  stop: LengthPercentage | null;
@@ -46,11 +50,20 @@ export declare const enum CSSRadialExtent {
46
50
  }
47
51
  export type CSSRadialSize = CSSRadialExtent | LengthPercentage[];
48
52
  export interface CSSRadialGradientImage extends ICSSGradientImage {
49
- type: CSSImageType.RADIAL_GRADIENT;
53
+ type: CSSImageType.RADIAL_GRADIENT | CSSImageType.REPEATING_RADIAL_GRADIENT;
50
54
  shape: CSSRadialShape;
51
55
  size: CSSRadialSize;
52
56
  position: LengthPercentage[];
53
57
  }
58
+ /**
59
+ * conic-gradient( [ from <angle> ]? [ at <position> ]?, <color-stop-list> )
60
+ * `angle` is the `from` angle in radians, measured clockwise from 12 o'clock.
61
+ */
62
+ export interface CSSConicGradientImage extends ICSSGradientImage {
63
+ type: CSSImageType.CONIC_GRADIENT;
64
+ angle: number;
65
+ position: LengthPercentage[];
66
+ }
54
67
  export declare const image: ITypeDescriptor<ICSSImage>;
55
68
  export declare function isSupportedImage(value: CSSValue): boolean;
56
69
  export {};
@@ -1,8 +1,2 @@
1
- /**
2
- * Safe arithmetic expression evaluator — replaces `new Function()`.
3
- *
4
- * Supports only: numbers, +, -, *, /, parentheses.
5
- * Does NOT execute arbitrary code. Returns NaN on any illegal token.
6
- */
7
1
  declare const safeEvalArithmetic: (expr: string) => number;
8
2
  export default safeEvalArithmetic;
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Computed-style copying for cloned elements.
3
+ *
4
+ * Copies every computed CSS property of the source element onto the clone's
5
+ * inline style so the clone renders identically without stylesheets (the
6
+ * clone iframe only carries the <style> tags the cloner could read).
7
+ */
8
+ export declare const copyCSSStyles: <T extends HTMLElement | SVGElement>(style: CSSStyleDeclaration, target: T) => T;
@@ -1,5 +1,7 @@
1
1
  import { Bounds } from '../css/layout/bounds';
2
2
  import { Context } from '../core/context';
3
+ export { copyCSSStyles } from './copy-css-styles';
4
+ export { serializeDoctype } from './iframe-mount';
3
5
  export interface CloneOptions {
4
6
  ignoreElements?: (element: Element) => boolean;
5
7
  onclone?: (document: Document, element: HTMLElement) => void;
@@ -25,8 +27,8 @@ export declare class DocumentCloner {
25
27
  clonedReferenceElement?: HTMLElement;
26
28
  private readonly documentElement;
27
29
  private readonly counters;
30
+ private readonly pseudoContents;
28
31
  private readonly slotCloner;
29
- private quoteDepth;
30
32
  constructor(context: Context, element: HTMLElement, options: CloneConfigurations);
31
33
  toIFrame(ownerDocument: Document, windowSize: Bounds): Promise<HTMLIFrameElement>;
32
34
  createElementClone<T extends HTMLElement | SVGElement>(node: T): HTMLElement | SVGElement;
@@ -41,17 +43,5 @@ export declare class DocumentCloner {
41
43
  */
42
44
  cloneChildNodes(node: Element, clone: HTMLElement | SVGElement, copyStyles: boolean): void;
43
45
  cloneNode(node: Node, copyStyles: boolean): Node;
44
- resolvePseudoContent(node: Element, clone: Element, style: CSSStyleDeclaration, pseudoElt: PseudoElementType): HTMLElement | void;
45
46
  static destroy(container: HTMLIFrameElement): boolean;
46
47
  }
47
- declare enum PseudoElementType {
48
- BEFORE = 0,
49
- AFTER = 1
50
- }
51
- export declare const copyCSSStyles: <T extends HTMLElement | SVGElement>(style: CSSStyleDeclaration, target: T) => T;
52
- /**
53
- * Serialise a document type declaration to an HTML string.
54
- * @internal – exported for testing only, not part of the public API.
55
- */
56
- export declare const serializeDoctype: (doctype?: DocumentType | null) => string;
57
- export {};
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Mounts the cloned document into a hidden iframe and waits for it to become
3
+ * paintable.
4
+ *
5
+ * Extracted from DocumentCloner so the cloner only owns node-cloning strategy;
6
+ * this module owns the iframe lifecycle: container creation, document.write,
7
+ * Trusted Types, load polling, webfont/image readiness, the onclone hook and
8
+ * WebKit scroll-anchoring compensation.
9
+ */
10
+ import { Bounds } from '../css/layout/bounds';
11
+ import { Context } from '../core/context';
12
+ export interface CloneMountOptions {
13
+ /** Cloned <html> root to adopt into the iframe document. */
14
+ documentElement: HTMLElement;
15
+ /** Clone of the render target; must exist before mounting. */
16
+ clonedReferenceElement: HTMLElement | undefined;
17
+ /** nodeName of the original render target, for error messages. */
18
+ referenceElementName: string;
19
+ /** [clonedNode, scrollLeft, scrollTop] pairs captured during cloning. */
20
+ scrolledElements: [Element, number, number][];
21
+ /** Consumer hook, invoked with the cloned document before measuring. */
22
+ onclone?: (document: Document, element: HTMLElement) => void;
23
+ /** Mount the iframe inside a shadow root instead of <body>. */
24
+ container?: HTMLElement | ShadowRoot;
25
+ }
26
+ export declare const createIFrameContainer: (ownerDocument: Document, bounds: Bounds, customContainer?: HTMLElement | ShadowRoot) => HTMLIFrameElement;
27
+ /**
28
+ * Serialise a document type declaration to an HTML string.
29
+ * @internal – exported for testing only, not part of the public API.
30
+ */
31
+ export declare const serializeDoctype: (doctype?: DocumentType | null) => string;
32
+ /**
33
+ * Point the clone's relative URLs at the source document.
34
+ * @internal – exported for testing only, not part of the public API.
35
+ */
36
+ export declare const addBase: (targetELement: HTMLElement, baseUri: string) => void;
37
+ export declare const mountCloneInIFrame: (context: Context, ownerDocument: Document, windowSize: Bounds, mount: CloneMountOptions) => Promise<HTMLIFrameElement>;
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Pseudo-element (::before / ::after) content resolution.
3
+ *
4
+ * Extracted from DocumentCloner: the cloner creates surrogate
5
+ * `<html2canvaspseudoelement>` nodes carrying the pseudo's computed styles and
6
+ * resolved content tokens (strings, url() images, attr(), counter(s), and
7
+ * quotes) as children of the cloning element. The hide classes ensure the
8
+ * surrogate itself is never painted; only its children are.
9
+ */
10
+ import { CounterState } from '../css/types/functions/counter';
11
+ import { Context } from '../core/context';
12
+ export declare enum PseudoElementType {
13
+ BEFORE = 0,
14
+ AFTER = 1
15
+ }
16
+ /**
17
+ * Inject the stylesheet that hides pseudo-element surrogate containers.
18
+ * Called on the cloned <body> so the surrogates themselves never render.
19
+ */
20
+ export declare const createPseudoHideStyles: (body: HTMLElement, cspNonce?: string) => void;
21
+ /**
22
+ * Resolves computed `content` of ::before/::after into surrogate DOM nodes.
23
+ *
24
+ * One instance per DocumentCloner: `quoteDepth` tracks open-quote/close-quote
25
+ * pairing across the whole clone walk, shared with the cloner's counter state.
26
+ */
27
+ export declare class PseudoContentResolver {
28
+ private readonly context;
29
+ private readonly counters;
30
+ private quoteDepth;
31
+ constructor(context: Context, counters: CounterState);
32
+ resolvePseudoContent(node: Element, clone: Element, style: CSSStyleDeclaration, pseudoElt: PseudoElementType): HTMLElement | void;
33
+ }
@@ -1,7 +1,7 @@
1
1
  import { ElementContainer } from '../element-container';
2
- import { Color } from '../../css/types/color';
2
+ import { type Color } from '../../css/types/color';
3
3
  import { Context } from '../../core/context';
4
- type ParseTreeFunction = (context: Context, node: Node) => ElementContainer;
4
+ type ParseTreeFunction = (context: Context, node: HTMLElement) => ElementContainer;
5
5
  export declare class IFrameElementContainer extends ElementContainer {
6
6
  src: string;
7
7
  width: number;
@@ -55,8 +55,14 @@ export type Options = CloneOptions & WindowOptions & RenderOptions & ContextOpti
55
55
  onError?: (error: Error) => void;
56
56
  /**
57
57
  * Called at key milestones during the render pipeline.
58
- * `phase` is one of: 'clone', 'parse', 'layout', 'render'.
59
- * `progress` is 0..100 percentage estimate.
58
+ * `phase` is one of: 'clone' | 'parse' | 'preload' | 'layout' | 'render'.
59
+ * `progress` is a coarse 0–100 estimate. Milestones:
60
+ * clone 10 (cloning starts), clone 30 (cloned document ready),
61
+ * parse 50 (style/DOM parse done),
62
+ * preload 50–60 (image fetching; one event per settled batch),
63
+ * layout 60 (bounds + images ready),
64
+ * render 90 (canvas painted), render 100 (cleanup done).
65
+ * Callback exceptions are caught and logged, never fatal.
60
66
  */
61
67
  onProgress?: (phase: string, progress: number) => void;
62
68
  };
@@ -66,6 +66,25 @@ export declare class BackgroundRenderer {
66
66
  * Render a radial gradient background
67
67
  */
68
68
  private renderRadialGradient;
69
+ /**
70
+ * Render a repeating radial gradient.
71
+ *
72
+ * Canvas radial gradients have no native repeat mode, so the stop list is
73
+ * stacked: with period p (the last stop position) the stops are re-added
74
+ * k*p + s for k = 0..ceil(radius / p) - 1, clipped to the [0, 1] gradient
75
+ * range. The full repeating gradient is then rasterised with the same
76
+ * ellipse pattern trick as the plain radial renderer.
77
+ */
78
+ private renderRepeatingRadialGradient;
79
+ /**
80
+ * Render a conic gradient.
81
+ *
82
+ * Color stops are angular: percentages of the full 360° sweep, normalised
83
+ * by processing against a line length of 1. Canvas createConicGradient
84
+ * measures its start angle in the same clockwise-from-12-o'clock space as
85
+ * CSS `from <angle>`.
86
+ */
87
+ private renderConicGradient;
69
88
  /**
70
89
  * Render a repeating pattern with offset
71
90
  *
@@ -9,10 +9,59 @@
9
9
  import { BorderImageSlice } from '../../css/property-descriptors/border-image-slice';
10
10
  import { BorderImageRepeat } from '../../css/property-descriptors/border-image-repeat';
11
11
  import { Bounds } from '../../css/layout/bounds';
12
+ export interface BorderImageSides {
13
+ top: number;
14
+ right: number;
15
+ bottom: number;
16
+ left: number;
17
+ }
18
+ /**
19
+ * Resolve border-image-width to per-side pixel widths. `auto` uses the
20
+ * corresponding border width, numbers multiply it, lengths are absolute and
21
+ * percentages refer to the border image area (width for left/right, height
22
+ * for top/bottom).
23
+ */
24
+ export declare const resolveBorderImageWidths: (width: {
25
+ top: {
26
+ kind: string;
27
+ value?: number;
28
+ };
29
+ right: {
30
+ kind: string;
31
+ value?: number;
32
+ };
33
+ bottom: {
34
+ kind: string;
35
+ value?: number;
36
+ };
37
+ left: {
38
+ kind: string;
39
+ value?: number;
40
+ };
41
+ } | null, borderWidths: [number, number, number, number], area: Bounds) => [number, number, number, number];
42
+ /** Resolve border-image-outset to per-side pixel offsets (numbers multiply the border width). */
43
+ export declare const resolveBorderImageOutset: (outset: {
44
+ top: {
45
+ kind: string;
46
+ value?: number;
47
+ };
48
+ right: {
49
+ kind: string;
50
+ value?: number;
51
+ };
52
+ bottom: {
53
+ kind: string;
54
+ value?: number;
55
+ };
56
+ left: {
57
+ kind: string;
58
+ value?: number;
59
+ };
60
+ } | null, borderWidths: [number, number, number, number]) => BorderImageSides;
12
61
  export declare class BorderImageRenderer {
13
62
  private readonly ctx;
14
63
  constructor(ctx: CanvasRenderingContext2D);
15
- renderBorderImage(bounds: Bounds, image: HTMLImageElement, slice: BorderImageSlice, repeat: BorderImageRepeat, borderTopWidth: number, borderRightWidth: number, borderBottomWidth: number, borderLeftWidth: number): void;
64
+ renderBorderImage(bounds: Bounds, image: HTMLImageElement, slice: BorderImageSlice, repeat: BorderImageRepeat, borderTopWidth: number, borderRightWidth: number, borderBottomWidth: number, borderLeftWidth: number, outset?: BorderImageSides): void;
16
65
  private drawRegion;
17
66
  private drawRepeatedEdge;
18
67
  }
@@ -45,11 +45,24 @@ export declare class CanvasRenderer {
45
45
  private readonly borderImageRenderer;
46
46
  private readonly effectsRenderer;
47
47
  private readonly textRenderer;
48
+ private readonly textClipRenderer;
48
49
  private legacySubtree;
49
50
  constructor(context: Context, options: RenderConfigurations, surfaceRoot?: ElementPaint | undefined, surfaceBudget?: SurfaceBudget);
50
51
  renderStack(stack: StackingContext): Promise<void>;
51
52
  private canComposite;
52
53
  private renderCompositedStack;
54
+ /**
55
+ * Composite an alpha mask onto a finished element surface: all mask
56
+ * layers are painted additively into a mask surface, then kept pixels are
57
+ * selected with destination-in.
58
+ */
59
+ private applyMask;
60
+ /**
61
+ * Mirror the element surface in the given direction and offset, optionally
62
+ * masked (the -webkit-box-reflect mask applies in element space, so it is
63
+ * composited in the mirrored space where the reflection was drawn).
64
+ */
65
+ private drawReflection;
53
66
  renderNode(paint: ElementPaint): Promise<void>;
54
67
  /**
55
68
  * Helper method to render text with paint order support
@@ -63,23 +76,16 @@ export declare class CanvasRenderer {
63
76
  formatPath(paths: Path[]): void;
64
77
  private renderSurfaceBoxShadow;
65
78
  renderNodeBackgroundAndBorders(paint: ElementPaint): Promise<void>;
66
- render(element: ElementContainer): Promise<HTMLCanvasElement>;
67
79
  /**
68
- * Render background clipped to text shape using offscreen canvas with destination-in compositing.
69
- * This implements background-clip: text support.
70
- *
71
- * Algorithm:
72
- * 1. Draw background (color + images) onto an offscreen canvas
73
- * 2. Use destination-in compositing to clip the background to the text glyph shapes
74
- * 3. Composite the result back onto the main canvas
75
- *
76
- * The offscreen canvas uses CSS-pixel dimensions (not device-pixel) because the
77
- * background renderer handles scaling internally via BackgroundRenderer options.
80
+ * Draw the element outline: a single closed stroke around the border box,
81
+ * offset outwards. Outlines paint atop content and do not affect layout.
78
82
  */
79
- private renderTextClippedBackground;
83
+ private renderOutline;
80
84
  /**
81
- * Render text glyphs one-by-one as a mask, applying letter-spacing between characters.
82
- * This ensures the mask matches how the text renderer lays out the characters.
85
+ * Filter the already-painted content beneath the element's border box and
86
+ * paint the result back, approximating CSS backdrop-filter for the
87
+ * blur/drop-shadow subset supported by parseSimpleFilter.
83
88
  */
84
- private renderTextMaskWithLetterSpacing;
89
+ private renderBackdropFilter;
90
+ render(element: ElementContainer): Promise<HTMLCanvasElement>;
85
91
  }
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Mask Renderer
3
+ *
4
+ * Paints CSS mask-image layers into a mask surface (alpha mask) which the
5
+ * caller composites onto the element surface via `destination-in`.
6
+ *
7
+ * Value grammars are shared with background-image (position/size/repeat), so
8
+ * the layer maths mirrors the background renderer but works in the local
9
+ * coordinate space of the mask positioning area (default: border box) and
10
+ * always fills the whole area — a mask surface is about alpha coverage, not
11
+ * about what is visible underneath.
12
+ *
13
+ * Limitations (v1): repeating gradients render their base cycle; mask-mode is
14
+ * alpha-only; layers composite with source-over (≈ the default `add`).
15
+ */
16
+ import { ICSSImage } from '../../css/types/image';
17
+ import { LengthPercentage } from '../../css/types/length-percentage';
18
+ import { BACKGROUND_REPEAT } from '../../css/property-descriptors/background-repeat';
19
+ import { BackgroundSizeInfo } from '../../css/property-descriptors/background-size';
20
+ export interface MaskLayerStyles {
21
+ maskPosition: LengthPercentage[][];
22
+ maskRepeat: BACKGROUND_REPEAT[];
23
+ maskSize: BackgroundSizeInfo[][];
24
+ }
25
+ export interface MaskArea {
26
+ left: number;
27
+ top: number;
28
+ width: number;
29
+ height: number;
30
+ }
31
+ export type MaskImageSource = HTMLImageElement | HTMLCanvasElement;
32
+ /**
33
+ * Paint every mask layer into `ctx` (expected to already be scaled to device
34
+ * pixels and translated so the page origin maps correctly).
35
+ */
36
+ export declare const paintMaskLayers: (ctx: CanvasRenderingContext2D, layers: ICSSImage[], styles: MaskLayerStyles, area: MaskArea, matchImage: (url: string) => Promise<MaskImageSource | undefined>) => Promise<void>;
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Text Clip Renderer
3
+ *
4
+ * Implements `background-clip: text` — paints the element's background
5
+ * (color + images) to an offscreen canvas and clips it to the text glyph
6
+ * shapes with destination-in compositing, then composites the result back
7
+ * onto the main canvas.
8
+ *
9
+ * Extracted from CanvasRenderer to keep paint orchestration separate from
10
+ * this self-contained compositing algorithm.
11
+ *
12
+ * The offscreen canvas uses CSS-pixel dimensions (not device-pixel) because the
13
+ * background renderer handles scaling internally via BackgroundRenderer options.
14
+ */
15
+ import { ElementPaint } from '../stacking-context';
16
+ import { CSSParsedDeclaration } from '../../css';
17
+ import { Context } from '../../core/context';
18
+ export interface TextClipRendererDependencies {
19
+ /** Main canvas context the clipped background is composited onto. */
20
+ ctx: CanvasRenderingContext2D;
21
+ context: Context;
22
+ /** Font builder shared with the text renderer so both use identical fonts. */
23
+ createFontStyle: (styles: CSSParsedDeclaration) => string[];
24
+ }
25
+ export declare class TextClipRenderer {
26
+ private readonly ctx;
27
+ private readonly context;
28
+ private readonly createFontStyle;
29
+ constructor(deps: TextClipRendererDependencies);
30
+ render(paint: ElementPaint): Promise<void>;
31
+ /**
32
+ * Render text glyphs one-by-one as a mask, applying letter-spacing between characters.
33
+ * This ensures the mask matches how the text renderer lays out the characters.
34
+ */
35
+ private renderTextMaskWithLetterSpacing;
36
+ }