html2canvas-pro 2.1.0 → 2.2.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 (266) hide show
  1. package/dist/html2canvas-pro.esm.js +10226 -10526
  2. package/dist/html2canvas-pro.esm.js.map +1 -1
  3. package/dist/html2canvas-pro.js +10869 -11171
  4. package/dist/html2canvas-pro.js.map +1 -1
  5. package/dist/html2canvas-pro.min.js +8 -8
  6. package/dist/lib/config.js +0 -22
  7. package/dist/lib/core/cache-storage.js +3 -40
  8. package/dist/lib/core/constants.js +25 -0
  9. package/dist/lib/core/context.js +1 -0
  10. package/dist/lib/core/features.js +3 -2
  11. package/dist/lib/core/validator.js +3 -3
  12. package/dist/lib/css/grouped/background-styles.js +36 -0
  13. package/dist/lib/css/grouped/border-styles.js +75 -0
  14. package/dist/lib/css/grouped/font-styles.js +93 -0
  15. package/dist/lib/css/grouped/layout-styles.js +127 -0
  16. package/dist/lib/css/index.js +74 -46
  17. package/dist/lib/css/layout/text.js +7 -6
  18. package/dist/lib/css/property-descriptors/background-blend-mode.js +41 -0
  19. package/dist/lib/css/property-descriptors/border-image-repeat.js +42 -0
  20. package/dist/lib/css/property-descriptors/border-image-slice.js +45 -0
  21. package/dist/lib/css/property-descriptors/border-image-source.js +21 -0
  22. package/dist/lib/css/property-descriptors/border-radius.js +1 -1
  23. package/dist/lib/css/property-descriptors/box-decoration-break.js +18 -0
  24. package/dist/lib/css/property-descriptors/counter-increment.js +17 -12
  25. package/dist/lib/css/property-descriptors/counter-reset.js +4 -12
  26. package/dist/lib/css/property-descriptors/filter.js +76 -0
  27. package/dist/lib/css/property-descriptors/font-variant-ligatures.js +34 -0
  28. package/dist/lib/css/property-descriptors/object-fit.js +1 -1
  29. package/dist/lib/css/property-descriptors/object-position.js +42 -0
  30. package/dist/lib/css/property-descriptors/visibility.js +1 -1
  31. package/dist/lib/css/property-descriptors/zoom.js +18 -0
  32. package/dist/lib/css/syntax/parser.js +0 -1
  33. package/dist/lib/css/types/color.js +5 -1
  34. package/dist/lib/css/types/functions/repeating-linear-gradient.js +9 -0
  35. package/dist/lib/css/types/image.js +12 -2
  36. package/dist/lib/css/types/length-percentage.js +6 -2
  37. package/dist/lib/css/types/safe-eval.js +80 -0
  38. package/dist/lib/dom/document-cloner.js +23 -163
  39. package/dist/lib/dom/slot-cloner.js +176 -0
  40. package/dist/lib/index.js +1 -17
  41. package/dist/lib/render/canvas/background-renderer.js +169 -30
  42. package/dist/lib/render/canvas/border-image-renderer.js +153 -0
  43. package/dist/lib/render/canvas/canvas-renderer.js +39 -190
  44. package/dist/lib/render/canvas/content-renderer.js +202 -0
  45. package/dist/lib/render/canvas/effects-renderer.js +3 -0
  46. package/dist/lib/render/canvas/foreignobject-renderer.js +5 -1
  47. package/dist/lib/render/canvas/text/text-decoration-renderer.js +99 -0
  48. package/dist/lib/render/canvas/text-renderer.js +100 -224
  49. package/dist/lib/render/effects.js +38 -3
  50. package/dist/lib/render/object-fit.js +19 -15
  51. package/dist/lib/render/stacking-context.js +11 -0
  52. package/dist/types/config.d.ts +0 -10
  53. package/dist/types/core/cache-storage.d.ts +0 -24
  54. package/dist/types/core/constants.d.ts +22 -0
  55. package/dist/types/core/context.d.ts +3 -0
  56. package/dist/types/core/performance-monitor.d.ts +4 -4
  57. package/dist/types/core/validator.d.ts +6 -8
  58. package/dist/types/css/grouped/background-styles.d.ts +16 -0
  59. package/dist/types/css/grouped/border-styles.d.ts +31 -0
  60. package/dist/types/css/grouped/font-styles.d.ts +35 -0
  61. package/dist/types/css/grouped/layout-styles.d.ts +46 -0
  62. package/dist/types/css/index.d.ts +30 -0
  63. package/dist/types/css/property-descriptors/background-blend-mode.d.ts +23 -0
  64. package/dist/types/css/property-descriptors/border-image-repeat.d.ts +12 -0
  65. package/dist/types/css/property-descriptors/border-image-slice.d.ts +10 -0
  66. package/dist/types/css/property-descriptors/border-image-source.d.ts +4 -0
  67. package/dist/types/css/property-descriptors/box-decoration-break.d.ts +6 -0
  68. package/dist/types/css/property-descriptors/counter-increment.d.ts +3 -0
  69. package/dist/types/css/property-descriptors/filter.d.ts +3 -0
  70. package/dist/types/css/property-descriptors/font-variant-ligatures.d.ts +14 -0
  71. package/dist/types/css/property-descriptors/object-position.d.ts +4 -0
  72. package/dist/types/css/property-descriptors/zoom.d.ts +3 -0
  73. package/dist/types/css/types/functions/repeating-linear-gradient.d.ts +4 -0
  74. package/dist/types/css/types/image.d.ts +4 -2
  75. package/dist/types/css/types/safe-eval.d.ts +8 -0
  76. package/dist/types/dom/document-cloner.d.ts +3 -44
  77. package/dist/types/dom/slot-cloner.d.ts +66 -0
  78. package/dist/types/index.d.ts +3 -7
  79. package/dist/types/options.d.ts +11 -0
  80. package/dist/types/render/canvas/background-renderer.d.ts +23 -0
  81. package/dist/types/render/canvas/border-image-renderer.d.ts +18 -0
  82. package/dist/types/render/canvas/canvas-renderer.d.ts +1 -0
  83. package/dist/types/render/canvas/content-renderer.d.ts +44 -0
  84. package/dist/types/render/canvas/text/text-decoration-renderer.d.ts +18 -0
  85. package/dist/types/render/canvas/text-renderer.d.ts +12 -1
  86. package/dist/types/render/effects.d.ts +12 -2
  87. package/dist/types/render/object-fit.d.ts +2 -1
  88. package/dist/types/render/renderer-interface.d.ts +11 -9
  89. package/package.json +7 -20
  90. package/dist/lib/dom/replaced-elements/pseudo-elements.js +0 -0
  91. package/dist/lib/invariant.js +0 -9
  92. package/dist/types/dom/replaced-elements/pseudo-elements.d.ts +0 -0
  93. package/dist/types/invariant.d.ts +0 -1
  94. package/src/__tests__/index.ts +0 -99
  95. package/src/config.ts +0 -107
  96. package/src/core/__mocks__/cache-storage.ts +0 -1
  97. package/src/core/__mocks__/context.ts +0 -19
  98. package/src/core/__mocks__/features.ts +0 -8
  99. package/src/core/__mocks__/logger.ts +0 -17
  100. package/src/core/__tests__/cache-storage.test.ts +0 -205
  101. package/src/core/__tests__/cache-storage.ts +0 -278
  102. package/src/core/__tests__/logger.ts +0 -29
  103. package/src/core/__tests__/validator.ts +0 -359
  104. package/src/core/bitwise.ts +0 -1
  105. package/src/core/cache-storage.ts +0 -315
  106. package/src/core/context.ts +0 -31
  107. package/src/core/debugger.ts +0 -32
  108. package/src/core/features.ts +0 -222
  109. package/src/core/logger.ts +0 -64
  110. package/src/core/origin-checker.ts +0 -57
  111. package/src/core/performance-monitor.ts +0 -241
  112. package/src/core/render-element.ts +0 -272
  113. package/src/core/util.ts +0 -1
  114. package/src/core/validator.ts +0 -593
  115. package/src/css/index.ts +0 -427
  116. package/src/css/layout/__mocks__/bounds.ts +0 -6
  117. package/src/css/layout/bounds.ts +0 -79
  118. package/src/css/layout/text.ts +0 -161
  119. package/src/css/property-descriptor.ts +0 -49
  120. package/src/css/property-descriptors/__tests__/background-tests.ts +0 -65
  121. package/src/css/property-descriptors/__tests__/clip-path.test.ts +0 -280
  122. package/src/css/property-descriptors/__tests__/font-family.ts +0 -25
  123. package/src/css/property-descriptors/__tests__/image-rendering-integration.test.ts +0 -153
  124. package/src/css/property-descriptors/__tests__/image-rendering-performance.test.ts +0 -175
  125. package/src/css/property-descriptors/__tests__/image-rendering.test.ts +0 -72
  126. package/src/css/property-descriptors/__tests__/paint-order.ts +0 -87
  127. package/src/css/property-descriptors/__tests__/text-shadow.ts +0 -94
  128. package/src/css/property-descriptors/__tests__/transform-tests.ts +0 -18
  129. package/src/css/property-descriptors/background-clip.ts +0 -30
  130. package/src/css/property-descriptors/background-color.ts +0 -9
  131. package/src/css/property-descriptors/background-image.ts +0 -27
  132. package/src/css/property-descriptors/background-origin.ts +0 -31
  133. package/src/css/property-descriptors/background-position.ts +0 -38
  134. package/src/css/property-descriptors/background-repeat.ts +0 -44
  135. package/src/css/property-descriptors/background-size.ts +0 -27
  136. package/src/css/property-descriptors/border-color.ts +0 -13
  137. package/src/css/property-descriptors/border-radius.ts +0 -19
  138. package/src/css/property-descriptors/border-style.ts +0 -34
  139. package/src/css/property-descriptors/border-width.ts +0 -20
  140. package/src/css/property-descriptors/box-shadow.ts +0 -60
  141. package/src/css/property-descriptors/clip-path.ts +0 -271
  142. package/src/css/property-descriptors/color.ts +0 -9
  143. package/src/css/property-descriptors/content.ts +0 -26
  144. package/src/css/property-descriptors/counter-increment.ts +0 -43
  145. package/src/css/property-descriptors/counter-reset.ts +0 -36
  146. package/src/css/property-descriptors/direction.ts +0 -23
  147. package/src/css/property-descriptors/display.ts +0 -117
  148. package/src/css/property-descriptors/duration.ts +0 -14
  149. package/src/css/property-descriptors/float.ts +0 -29
  150. package/src/css/property-descriptors/font-family.ts +0 -38
  151. package/src/css/property-descriptors/font-size.ts +0 -9
  152. package/src/css/property-descriptors/font-style.ts +0 -25
  153. package/src/css/property-descriptors/font-variant.ts +0 -12
  154. package/src/css/property-descriptors/font-weight.ts +0 -26
  155. package/src/css/property-descriptors/image-rendering.ts +0 -33
  156. package/src/css/property-descriptors/letter-spacing.ts +0 -25
  157. package/src/css/property-descriptors/line-break.ts +0 -22
  158. package/src/css/property-descriptors/line-height.ts +0 -22
  159. package/src/css/property-descriptors/list-style-image.ts +0 -19
  160. package/src/css/property-descriptors/list-style-position.ts +0 -22
  161. package/src/css/property-descriptors/list-style-type.ts +0 -179
  162. package/src/css/property-descriptors/margin.ts +0 -13
  163. package/src/css/property-descriptors/mix-blend-mode.ts +0 -35
  164. package/src/css/property-descriptors/object-fit.ts +0 -39
  165. package/src/css/property-descriptors/opacity.ts +0 -15
  166. package/src/css/property-descriptors/overflow-wrap.ts +0 -22
  167. package/src/css/property-descriptors/overflow.ts +0 -34
  168. package/src/css/property-descriptors/padding.ts +0 -14
  169. package/src/css/property-descriptors/paint-order.ts +0 -42
  170. package/src/css/property-descriptors/position.ts +0 -30
  171. package/src/css/property-descriptors/quotes.ts +0 -57
  172. package/src/css/property-descriptors/rotate.ts +0 -34
  173. package/src/css/property-descriptors/text-align.ts +0 -26
  174. package/src/css/property-descriptors/text-decoration-color.ts +0 -9
  175. package/src/css/property-descriptors/text-decoration-line.ts +0 -38
  176. package/src/css/property-descriptors/text-decoration-style.ts +0 -32
  177. package/src/css/property-descriptors/text-decoration-thickness.ts +0 -30
  178. package/src/css/property-descriptors/text-overflow.ts +0 -23
  179. package/src/css/property-descriptors/text-shadow.ts +0 -52
  180. package/src/css/property-descriptors/text-transform.ts +0 -27
  181. package/src/css/property-descriptors/text-underline-offset.ts +0 -27
  182. package/src/css/property-descriptors/transform-origin.ts +0 -29
  183. package/src/css/property-descriptors/transform.ts +0 -74
  184. package/src/css/property-descriptors/visibility.ts +0 -25
  185. package/src/css/property-descriptors/webkit-line-clamp.ts +0 -30
  186. package/src/css/property-descriptors/webkit-text-stroke-color.ts +0 -8
  187. package/src/css/property-descriptors/webkit-text-stroke-width.ts +0 -15
  188. package/src/css/property-descriptors/word-break.ts +0 -25
  189. package/src/css/property-descriptors/writing-mode.ts +0 -37
  190. package/src/css/property-descriptors/z-index.ts +0 -27
  191. package/src/css/syntax/__tests__/tokernizer-tests.ts +0 -29
  192. package/src/css/syntax/parser.ts +0 -188
  193. package/src/css/syntax/tokenizer.ts +0 -822
  194. package/src/css/type-descriptor.ts +0 -7
  195. package/src/css/types/__tests__/color-tests.ts +0 -147
  196. package/src/css/types/__tests__/image-tests.ts +0 -239
  197. package/src/css/types/angle.ts +0 -86
  198. package/src/css/types/color-math.ts +0 -22
  199. package/src/css/types/color-spaces/a98.ts +0 -86
  200. package/src/css/types/color-spaces/p3.ts +0 -92
  201. package/src/css/types/color-spaces/pro-photo.ts +0 -87
  202. package/src/css/types/color-spaces/rec2020.ts +0 -90
  203. package/src/css/types/color-spaces/srgb.ts +0 -87
  204. package/src/css/types/color-utilities.ts +0 -452
  205. package/src/css/types/color.ts +0 -485
  206. package/src/css/types/functions/-prefix-linear-gradient.ts +0 -35
  207. package/src/css/types/functions/-prefix-radial-gradient.ts +0 -106
  208. package/src/css/types/functions/-webkit-gradient.ts +0 -69
  209. package/src/css/types/functions/__tests__/radial-gradient.ts +0 -69
  210. package/src/css/types/functions/counter.ts +0 -511
  211. package/src/css/types/functions/gradient.ts +0 -206
  212. package/src/css/types/functions/linear-gradient.ts +0 -28
  213. package/src/css/types/functions/radial-gradient.ts +0 -101
  214. package/src/css/types/image.ts +0 -120
  215. package/src/css/types/index.ts +0 -1
  216. package/src/css/types/length-percentage.ts +0 -137
  217. package/src/css/types/length.ts +0 -7
  218. package/src/css/types/time.ts +0 -20
  219. package/src/dom/__mocks__/document-cloner.ts +0 -22
  220. package/src/dom/__tests__/dom-normalizer.test.ts +0 -133
  221. package/src/dom/__tests__/element-container.test.ts +0 -129
  222. package/src/dom/document-cloner.ts +0 -929
  223. package/src/dom/dom-normalizer.ts +0 -133
  224. package/src/dom/element-container.ts +0 -75
  225. package/src/dom/elements/li-element-container.ts +0 -10
  226. package/src/dom/elements/ol-element-container.ts +0 -12
  227. package/src/dom/elements/select-element-container.ts +0 -10
  228. package/src/dom/elements/textarea-element-container.ts +0 -9
  229. package/src/dom/node-parser.ts +0 -177
  230. package/src/dom/node-type-guards.ts +0 -70
  231. package/src/dom/replaced-elements/canvas-element-container.ts +0 -15
  232. package/src/dom/replaced-elements/iframe-element-container.ts +0 -55
  233. package/src/dom/replaced-elements/image-element-container.ts +0 -16
  234. package/src/dom/replaced-elements/index.ts +0 -5
  235. package/src/dom/replaced-elements/input-element-container.ts +0 -105
  236. package/src/dom/replaced-elements/pseudo-elements.ts +0 -0
  237. package/src/dom/replaced-elements/svg-element-container.ts +0 -23
  238. package/src/dom/text-container.ts +0 -42
  239. package/src/global.d.ts +0 -19
  240. package/src/index.ts +0 -82
  241. package/src/invariant.ts +0 -5
  242. package/src/options.ts +0 -55
  243. package/src/render/__tests__/object-fit.test.ts +0 -85
  244. package/src/render/background.ts +0 -298
  245. package/src/render/bezier-curve.ts +0 -47
  246. package/src/render/border.ts +0 -165
  247. package/src/render/bound-curves.ts +0 -388
  248. package/src/render/box-sizing.ts +0 -31
  249. package/src/render/canvas/__tests__/background-renderer.test.ts +0 -72
  250. package/src/render/canvas/__tests__/border-renderer.test.ts +0 -24
  251. package/src/render/canvas/__tests__/effects-renderer.test.ts +0 -32
  252. package/src/render/canvas/__tests__/text-renderer.test.ts +0 -471
  253. package/src/render/canvas/background-renderer.ts +0 -271
  254. package/src/render/canvas/border-renderer.ts +0 -224
  255. package/src/render/canvas/canvas-path.ts +0 -31
  256. package/src/render/canvas/canvas-renderer.ts +0 -641
  257. package/src/render/canvas/effects-renderer.ts +0 -130
  258. package/src/render/canvas/foreignobject-renderer.ts +0 -53
  259. package/src/render/canvas/text-renderer.ts +0 -700
  260. package/src/render/effects.ts +0 -75
  261. package/src/render/font-metrics.ts +0 -72
  262. package/src/render/object-fit.ts +0 -100
  263. package/src/render/path.ts +0 -37
  264. package/src/render/renderer-interface.ts +0 -28
  265. package/src/render/stacking-context.ts +0 -386
  266. package/src/render/vector.ts +0 -19
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Text Decoration Renderer
3
+ *
4
+ * Handles rendering of text-decoration lines:
5
+ * - underline, overline, line-through
6
+ * - solid, double, dotted, dashed, wavy styles
7
+ * Extracted from TextRenderer to reduce file size.
8
+ */
9
+ import { Bounds } from '../../../css/layout/bounds';
10
+ import { CSSParsedDeclaration } from '../../../css';
11
+ export declare class TextDecorationRenderer {
12
+ private readonly ctx;
13
+ constructor(ctx: CanvasRenderingContext2D);
14
+ render(bounds: Bounds, styles: CSSParsedDeclaration): void;
15
+ private draw;
16
+ private drawPattern;
17
+ private drawWavy;
18
+ }
@@ -36,6 +36,7 @@ export declare const hasCJKCharacters: (text: string) => boolean;
36
36
  export declare class TextRenderer {
37
37
  private readonly ctx;
38
38
  private readonly options;
39
+ private readonly decorationRenderer;
39
40
  constructor(deps: TextRendererDependencies);
40
41
  /**
41
42
  * Iterate grapheme clusters one-by-one, applying correct letter-spacing and
@@ -71,12 +72,22 @@ export declare class TextRenderer {
71
72
  */
72
73
  private renderTextBoundWithPaintOrder;
73
74
  private renderTextDecoration;
74
- private drawDecorationLine;
75
75
  private truncateTextWithEllipsis;
76
76
  /**
77
77
  * Create font style array
78
78
  * Public method used by list rendering
79
79
  */
80
80
  createFontStyle(styles: CSSParsedDeclaration): string[];
81
+ /**
82
+ * Render text with -webkit-line-clamp truncation.
83
+ * Groups text bounds by their Y position into visual lines, then renders
84
+ * only the first N-1 complete lines followed by an ellipsis on the Nth line.
85
+ */
86
+ private renderLineClampedText;
87
+ /**
88
+ * Render single-line text with text-overflow: ellipsis.
89
+ * Returns true if ellipsis was applied (caller should skip normal rendering).
90
+ */
91
+ private renderEllipsisText;
81
92
  renderTextNode(text: TextContainer, styles: CSSParsedDeclaration, containerBounds?: Bounds): Promise<void>;
82
93
  }
@@ -1,11 +1,13 @@
1
1
  import { Matrix } from '../css/property-descriptors/transform';
2
+ import { MixBlendMode } from '../css/property-descriptors/mix-blend-mode';
2
3
  import { Path } from './path';
3
4
  export declare const enum EffectType {
4
5
  TRANSFORM = 0,
5
6
  CLIP = 1,
6
7
  OPACITY = 2,
7
8
  CLIP_PATH = 3,
8
- BLEND = 4
9
+ BLEND = 4,
10
+ FILTER = 5
9
11
  }
10
12
  export declare const enum EffectTarget {
11
13
  BACKGROUND_BORDERS = 2,
@@ -48,13 +50,21 @@ export declare class ClipPathEffect implements IElementEffect {
48
50
  constructor(applyClip: (ctx: CanvasRenderingContext2D) => void);
49
51
  }
50
52
  export declare class BlendEffect implements IElementEffect {
53
+ readonly mixBlendMode: MixBlendMode;
54
+ readonly type: EffectType;
55
+ readonly target: number;
51
56
  readonly compositeOperation: GlobalCompositeOperation;
57
+ constructor(mixBlendMode: MixBlendMode);
58
+ }
59
+ export declare class FilterEffect implements IElementEffect {
60
+ readonly filterString: string;
52
61
  readonly type: EffectType;
53
62
  readonly target: number;
54
- constructor(compositeOperation: GlobalCompositeOperation);
63
+ constructor(filterString: string);
55
64
  }
56
65
  export declare const isTransformEffect: (effect: IElementEffect) => effect is TransformEffect;
57
66
  export declare const isClipEffect: (effect: IElementEffect) => effect is ClipEffect;
58
67
  export declare const isOpacityEffect: (effect: IElementEffect) => effect is OpacityEffect;
59
68
  export declare const isClipPathEffect: (effect: IElementEffect) => effect is ClipPathEffect;
60
69
  export declare const isBlendEffect: (effect: IElementEffect) => effect is BlendEffect;
70
+ export declare const isFilterEffect: (effect: IElementEffect) => effect is FilterEffect;
@@ -1,4 +1,5 @@
1
1
  import { ObjectFit } from '../css/property-descriptors/object-fit';
2
+ import { LengthPercentage } from '../css/types/length-percentage';
2
3
  export interface ObjectFitBox {
3
4
  left: number;
4
5
  top: number;
@@ -15,4 +16,4 @@ export interface ObjectFitRendering {
15
16
  dw: number;
16
17
  dh: number;
17
18
  }
18
- export declare const calculateObjectFitRendering: (intrinsicWidth: number, intrinsicHeight: number, box: ObjectFitBox, objectFit: ObjectFit) => ObjectFitRendering;
19
+ export declare const calculateObjectFitRendering: (intrinsicWidth: number, intrinsicHeight: number, box: ObjectFitBox, objectFit: ObjectFit, objectPosition?: [LengthPercentage, LengthPercentage]) => ObjectFitRendering;
@@ -1,23 +1,25 @@
1
1
  /**
2
- * Base interface for all specialized renderers
3
- * Each renderer is responsible for rendering a specific aspect of an element
2
+ * Base interface for all specialized renderers.
3
+ * Each renderer is responsible for rendering a specific aspect of an element.
4
+ *
5
+ * @internal This interface is a structural contract; prefer using concrete
6
+ * renderer classes (BackgroundRenderer, BorderRenderer, etc.)
7
+ * directly rather than relying on the generic IRenderer shape.
4
8
  */
5
9
  export interface IRenderer {
6
- /**
7
- * Render the specified aspect of the element
8
- */
9
- render(...args: any[]): void | Promise<void>;
10
+ render(...args: unknown[]): void | Promise<void>;
10
11
  }
11
12
  /**
12
- * Common dependencies required by renderers
13
+ * Common dependencies required by renderers.
14
+ * RenderConfigurations from canvas-renderer.ts provides a concrete type.
13
15
  */
14
16
  export interface RendererDependencies {
15
17
  ctx: CanvasRenderingContext2D;
16
18
  scale: number;
17
- options: any;
19
+ options: Record<string, unknown>;
18
20
  }
19
21
  /**
20
- * Performance tracking for renderers
22
+ * Performance tracking for renderers.
21
23
  */
22
24
  export interface RenderMetrics {
23
25
  renderCount: number;
package/package.json CHANGED
@@ -9,7 +9,6 @@
9
9
  "sideEffects": false,
10
10
  "files": [
11
11
  "dist/",
12
- "src/",
13
12
  "LICENSE"
14
13
  ],
15
14
  "exports": {
@@ -20,7 +19,7 @@
20
19
  "default": "./dist/html2canvas-pro.esm.js"
21
20
  }
22
21
  },
23
- "version": "2.1.0",
22
+ "version": "2.2.0",
24
23
  "author": {
25
24
  "name": "yorickshan",
26
25
  "email": "yorickshan@gmail.com",
@@ -42,20 +41,13 @@
42
41
  "devDependencies": {
43
42
  "@commitlint/cli": "^20.3.0",
44
43
  "@commitlint/config-conventional": "^20.2.0",
45
- "@rollup/plugin-commonjs": "^29.0.0",
46
- "@rollup/plugin-json": "^6.1.0",
47
- "@rollup/plugin-node-resolve": "^16.0.3",
48
- "@rollup/plugin-typescript": "^12.3.0",
49
44
  "@types/chai": "^5.2.3",
50
45
  "@types/express": "^5.0.6",
51
- "@types/filenamify-url": "^2.0.1",
52
- "@types/glob": "^9.0.0",
53
46
  "@types/karma": "^6.3.0",
54
47
  "@types/mocha": "^10.0.7",
55
48
  "@types/node": "^25.0.3",
56
49
  "@types/platform": "^1.3.4",
57
50
  "@types/pngjs": "^6.0.5",
58
- "@types/promise-polyfill": "^6.0.3",
59
51
  "@types/serve-index": "^1.9.4",
60
52
  "@typescript-eslint/eslint-plugin": "^8.50.0",
61
53
  "@typescript-eslint/parser": "^8.50.0",
@@ -65,10 +57,10 @@
65
57
  "body-parser": "^2.2.1",
66
58
  "chai": "6.2.2",
67
59
  "change-case": "^5.4.4",
68
- "conventional-changelog-cli": "^5.0.0",
60
+ "conventional-changelog": "^7.2.1",
61
+ "conventional-changelog-conventionalcommits": "^9.3.1",
69
62
  "cors": "^2.8.5",
70
63
  "cz-conventional-changelog": "^3.3.0",
71
- "es6-promise": "^4.2.8",
72
64
  "eslint": "^9.13.0",
73
65
  "eslint-config-prettier": "^10.1.8",
74
66
  "eslint-plugin-prettier": "^5.5.4",
@@ -76,8 +68,6 @@
76
68
  "filenamify-url": "4.0.0",
77
69
  "glob": "^13.0.0",
78
70
  "husky": "^9.1.7",
79
- "jquery": "^3.5.1",
80
- "js-polyfills": "^0.1.42",
81
71
  "jsdom": "^29.1.1",
82
72
  "karma": "^6.3.2",
83
73
  "karma-chrome-launcher": "^3.1.0",
@@ -97,11 +87,9 @@
97
87
  "puppeteer": "^24.34.0",
98
88
  "replace-in-file": "^8.4.0",
99
89
  "rimraf": "^6.0.1",
100
- "rollup": "^4.24.2",
101
- "rollup-plugin-sourcemaps": "^0.6.3",
90
+ "rolldown": "^1.1.2",
102
91
  "serve-index": "^1.9.1",
103
92
  "slash": "5.1.0",
104
- "standard-version": "^9.5.0",
105
93
  "ts-node": "^10.9.2",
106
94
  "tsx": "^4.22.3",
107
95
  "typedoc": "^0.28.19",
@@ -123,8 +111,8 @@
123
111
  },
124
112
  "scripts": {
125
113
  "prebuild": "rimraf dist/ && rimraf build/ && mkdir -p dist && mkdir -p build",
126
- "build": "tsc --module commonjs -p tsconfig.build.json && rollup --configPlugin typescript -c rollup.config.ts && pnpm build:create-reftest-list && rollup --configPlugin typescript -c tests/rollup.config.ts && pnpm build:minify",
127
- "build:testrunner": "rollup --configPlugin typescript -c tests/rollup.config.ts",
114
+ "build": "tsc --module commonjs -p tsconfig.build.json && rolldown -c rolldown.config.ts && pnpm build:create-reftest-list && rolldown -c tests/rolldown.testrunner.config.ts && pnpm build:minify",
115
+ "build:testrunner": "rolldown -c tests/rolldown.testrunner.config.ts",
128
116
  "build:minify": "uglifyjs --compress --comments /^!/ -o dist/html2canvas-pro.min.js --mangle -- dist/html2canvas-pro.js",
129
117
  "build:reftest-result-list": "tsx scripts/create-reftest-result-list.ts",
130
118
  "build:create-reftest-list": "tsx scripts/create-reftest-list.ts tests/reftests/ignore.txt build/reftests.js",
@@ -138,11 +126,10 @@
138
126
  "reftests-diff": "mkdir -p tmp/snapshots && vitest run --config vitest.reftest.config.ts",
139
127
  "prekarma": "node scripts/ensure-karma-prereqs.mjs",
140
128
  "karma": "tsx tests/karma",
141
- "watch": "rollup --configPlugin typescript -c rollup.config.ts -w",
129
+ "watch": "rolldown -w",
142
130
  "watch:unittest": "vitest",
143
131
  "start": "tsx tests/server --port=8080 --cors=8081",
144
132
  "commitlint": "commitlint --config .commitlintrc.json -e -V",
145
- "tag": "sh scripts/create-tag.sh",
146
133
  "docs:dev": "vitepress dev docs",
147
134
  "docs:build": "vitepress build docs",
148
135
  "docs:preview": "vitepress preview docs",
File without changes
@@ -1,9 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.invariant = void 0;
4
- const invariant = (assertion, error) => {
5
- if (!assertion) {
6
- console.error(error);
7
- }
8
- };
9
- exports.invariant = invariant;
@@ -1 +0,0 @@
1
- export declare const invariant: (assertion: boolean, error: string) => void;
@@ -1,99 +0,0 @@
1
- import html2canvas from '../index';
2
-
3
- import { CanvasRenderer } from '../render/canvas/canvas-renderer';
4
- import { DocumentCloner } from '../dom/document-cloner';
5
- import { COLORS } from '../css/types/color';
6
-
7
- vi.mock('../core/logger');
8
- vi.mock('../css/layout/bounds');
9
- vi.mock('../dom/document-cloner');
10
- vi.mock('../dom/node-parser', () => {
11
- return {
12
- isBodyElement: () => false,
13
- isHTMLElement: () => false,
14
- parseTree: vi.fn().mockImplementation(() => {
15
- return { styles: {}, restoreTree: vi.fn() };
16
- })
17
- };
18
- });
19
-
20
- vi.mock('../render/stacking-context');
21
- vi.mock('../render/canvas/canvas-renderer');
22
-
23
- describe('html2canvas', () => {
24
- const element = {
25
- ownerDocument: {
26
- defaultView: {
27
- document: {
28
- createElement: () => ({ href: '' })
29
- },
30
- location: { href: 'http://localhost/' },
31
- pageXOffset: 12,
32
- pageYOffset: 34,
33
- innerWidth: 800,
34
- innerHeight: 600
35
- }
36
- }
37
- } as unknown as HTMLElement;
38
-
39
- it('should render with an element', async () => {
40
- DocumentCloner.destroy = vi.fn().mockReturnValue(true);
41
- await html2canvas(element);
42
- expect(CanvasRenderer).toHaveBeenLastCalledWith(
43
- expect.objectContaining({
44
- cache: expect.any(Object),
45
- logger: expect.any(Object),
46
- windowBounds: expect.objectContaining({ left: 12, top: 34 })
47
- }),
48
- expect.objectContaining({
49
- backgroundColor: 0xffffffff,
50
- scale: 1,
51
- height: 50,
52
- width: 200,
53
- x: 0,
54
- y: 0,
55
- canvas: undefined
56
- })
57
- );
58
- expect(DocumentCloner.destroy).toBeCalled();
59
- });
60
-
61
- it('should have transparent background with backgroundColor: null', async () => {
62
- await html2canvas(element, { backgroundColor: null });
63
- expect(CanvasRenderer).toHaveBeenLastCalledWith(
64
- expect.anything(),
65
- expect.objectContaining({
66
- backgroundColor: COLORS.TRANSPARENT
67
- })
68
- );
69
- });
70
-
71
- it('should use existing canvas when given as option', async () => {
72
- const canvas = {} as HTMLCanvasElement;
73
- await html2canvas(element, { canvas });
74
- expect(CanvasRenderer).toHaveBeenLastCalledWith(
75
- expect.anything(),
76
- expect.objectContaining({
77
- canvas
78
- })
79
- );
80
- });
81
-
82
- it('should not remove cloned window when removeContainer: false', async () => {
83
- DocumentCloner.destroy = vi.fn();
84
- await html2canvas(element, { removeContainer: false });
85
- expect(CanvasRenderer).toHaveBeenLastCalledWith(
86
- expect.anything(),
87
- expect.objectContaining({
88
- backgroundColor: 0xffffffff,
89
- scale: 1,
90
- height: 50,
91
- width: 200,
92
- x: 0,
93
- y: 0,
94
- canvas: undefined
95
- })
96
- );
97
- expect(DocumentCloner.destroy).not.toBeCalled();
98
- });
99
- });
package/src/config.ts DELETED
@@ -1,107 +0,0 @@
1
- import { Cache } from './core/cache-storage';
2
-
3
- /**
4
- * Configuration options for Html2Canvas
5
- *
6
- * This class manages global configuration without using module-level static variables.
7
- * Each html2canvas invocation can have its own configuration instance.
8
- */
9
- export interface ConfigOptions {
10
- /**
11
- * Window object to use for DOM operations
12
- */
13
- window?: Window;
14
-
15
- /**
16
- * CSP nonce for inline styles
17
- * See: https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP
18
- */
19
- cspNonce?: string;
20
-
21
- /**
22
- * Cache instance to reuse across multiple calls
23
- * Useful for avoiding redundant image loads
24
- */
25
- cache?: Cache;
26
- }
27
-
28
- /**
29
- * Html2Canvas Configuration
30
- *
31
- * Manages configuration state for html2canvas rendering.
32
- * Eliminates the need for global static variables.
33
- */
34
- export class Html2CanvasConfig {
35
- readonly window: Window;
36
- readonly cspNonce?: string;
37
- readonly cache?: Cache;
38
-
39
- constructor(options: ConfigOptions = {}) {
40
- const resolvedWindow = options.window || (typeof window !== 'undefined' ? window : undefined);
41
-
42
- if (!resolvedWindow) {
43
- throw new Error('Window object is required but not available');
44
- }
45
-
46
- this.window = resolvedWindow;
47
- this.cspNonce = options.cspNonce;
48
- this.cache = options.cache;
49
- }
50
-
51
- /**
52
- * Create configuration from an element
53
- * Extracts window from element's owner document
54
- */
55
- static fromElement(element: HTMLElement, options: Partial<ConfigOptions> = {}): Html2CanvasConfig {
56
- const ownerDocument = element.ownerDocument;
57
-
58
- if (!ownerDocument) {
59
- throw new Error('Element is not attached to a document');
60
- }
61
-
62
- const defaultView = ownerDocument.defaultView;
63
-
64
- if (!defaultView) {
65
- throw new Error('Document is not attached to a window');
66
- }
67
-
68
- return new Html2CanvasConfig({
69
- window: defaultView,
70
- ...options
71
- });
72
- }
73
-
74
- /**
75
- * Clone configuration with override options
76
- */
77
- clone(options: Partial<ConfigOptions> = {}): Html2CanvasConfig {
78
- return new Html2CanvasConfig({
79
- window: options.window || this.window,
80
- cspNonce: options.cspNonce ?? this.cspNonce,
81
- cache: options.cache ?? this.cache
82
- });
83
- }
84
- }
85
-
86
- /**
87
- * Default global configuration (for backward compatibility)
88
- * @deprecated Use Html2CanvasConfig instances instead
89
- */
90
- let _defaultConfig: Html2CanvasConfig | null = null;
91
-
92
- /**
93
- * Set default configuration
94
- * @deprecated Pass configuration directly to html2canvas instead
95
- */
96
- export function setDefaultConfig(config: Html2CanvasConfig): void {
97
- console.warn('[html2canvas-pro] setDefaultConfig is deprecated. Pass configuration to html2canvas directly.');
98
- _defaultConfig = config;
99
- }
100
-
101
- /**
102
- * Get default configuration
103
- * @deprecated Pass configuration directly to html2canvas instead
104
- */
105
- export function getDefaultConfig(): Html2CanvasConfig | null {
106
- return _defaultConfig;
107
- }
@@ -1 +0,0 @@
1
- export class CacheStorage {}
@@ -1,19 +0,0 @@
1
- import { logger, Logger } from './logger';
2
-
3
- export class Context {
4
- readonly logger: Logger = logger;
5
-
6
- readonly _cache: { [key: string]: Promise<any> } = {};
7
-
8
- readonly cache: any;
9
-
10
- constructor() {
11
- this.cache = {
12
- addImage: vi.fn().mockImplementation((src: string): Promise<void> => {
13
- const result = Promise.resolve();
14
- this._cache[src] = result;
15
- return result;
16
- })
17
- };
18
- }
19
- }
@@ -1,8 +0,0 @@
1
- export const FEATURES = {
2
- SUPPORT_RANGE_BOUNDS: true,
3
- SUPPORT_SVG_DRAWING: true,
4
- SUPPORT_FOREIGNOBJECT_DRAWING: true,
5
- SUPPORT_CORS_IMAGES: true,
6
- SUPPORT_RESPONSE_TYPE: true,
7
- SUPPORT_CORS_XHR: true
8
- };
@@ -1,17 +0,0 @@
1
- export class Logger {
2
- debug(): void {}
3
-
4
- static create(): void {}
5
-
6
- static destroy(): void {}
7
-
8
- static getInstance(): Logger {
9
- return logger;
10
- }
11
-
12
- info(): void {}
13
-
14
- error(): void {}
15
- }
16
-
17
- export const logger = new Logger();