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
@@ -1,272 +0,0 @@
1
- import { Bounds, parseBounds, parseDocumentSize } from '../css/layout/bounds';
2
- import { COLORS, parseColor } from '../css/types/color';
3
- import { isTransparent } from '../css/types/color-utilities';
4
- import { CloneConfigurations, DocumentCloner } from '../dom/document-cloner';
5
- import { isBodyElement, isHTMLElement, parseTree } from '../dom/node-parser';
6
- import { ElementContainer } from '../dom/element-container';
7
- import { CanvasRenderer, RenderConfigurations } from '../render/canvas/canvas-renderer';
8
- import { ForeignObjectRenderer } from '../render/canvas/foreignobject-renderer';
9
- import { Context } from './context';
10
- import { Html2CanvasConfig } from '../config';
11
- import { createDefaultValidator } from './validator';
12
- import { PerformanceMonitor } from './performance-monitor';
13
- import type { Options } from '../options';
14
-
15
- const coerceNumberOptions = (opts: Partial<Options>): void => {
16
- const numKeys: (keyof Options)[] = [
17
- 'scale',
18
- 'width',
19
- 'height',
20
- 'imageTimeout',
21
- 'x',
22
- 'y',
23
- 'windowWidth',
24
- 'windowHeight',
25
- 'scrollX',
26
- 'scrollY'
27
- ];
28
- numKeys.forEach((key) => {
29
- const v = opts[key];
30
- if (v !== undefined && v !== null && typeof v !== 'number') {
31
- const n = Number(v);
32
- if (!Number.isNaN(n)) {
33
- (opts as Record<string, unknown>)[key] = n;
34
- }
35
- }
36
- });
37
- };
38
-
39
- export const renderElement = async (
40
- element: HTMLElement,
41
- opts: Partial<Options>,
42
- config: Html2CanvasConfig
43
- ): Promise<HTMLCanvasElement> => {
44
- coerceNumberOptions(opts);
45
-
46
- // Input validation (unless explicitly skipped)
47
- if (!opts.skipValidation) {
48
- const validator = opts.validator || createDefaultValidator();
49
-
50
- const elementValidation = validator.validateElement(element);
51
- if (!elementValidation.valid) {
52
- throw new Error(elementValidation.error);
53
- }
54
-
55
- const optionsValidation = validator.validateOptions(opts);
56
- if (!optionsValidation.valid) {
57
- throw new Error(`Invalid options: ${optionsValidation.error}`);
58
- }
59
- }
60
-
61
- if (!element || typeof element !== 'object') {
62
- throw new Error('Invalid element provided as first argument');
63
- }
64
- const ownerDocument = element.ownerDocument;
65
-
66
- if (!ownerDocument) {
67
- throw new Error(`Element is not attached to a Document`);
68
- }
69
-
70
- const defaultView = ownerDocument.defaultView;
71
-
72
- if (!defaultView) {
73
- throw new Error(`Document is not attached to a Window`);
74
- }
75
-
76
- const resourceOptions = {
77
- allowTaint: opts.allowTaint ?? false,
78
- imageTimeout: opts.imageTimeout ?? 15000,
79
- proxy: opts.proxy,
80
- useCORS: opts.useCORS ?? false,
81
- customIsSameOrigin: opts.customIsSameOrigin
82
- };
83
-
84
- const contextOptions = {
85
- logging: opts.logging ?? true,
86
- cache: opts.cache ?? config.cache,
87
- ...resourceOptions
88
- };
89
-
90
- const DEFAULT_WINDOW_WIDTH = 800;
91
- const DEFAULT_WINDOW_HEIGHT = 600;
92
- const DEFAULT_SCROLL = 0;
93
- const win = defaultView as Window & {
94
- innerWidth?: number;
95
- innerHeight?: number;
96
- pageXOffset?: number;
97
- pageYOffset?: number;
98
- };
99
- const windowOptions = {
100
- windowWidth: opts.windowWidth ?? win.innerWidth ?? DEFAULT_WINDOW_WIDTH,
101
- windowHeight: opts.windowHeight ?? win.innerHeight ?? DEFAULT_WINDOW_HEIGHT,
102
- scrollX: opts.scrollX ?? win.pageXOffset ?? DEFAULT_SCROLL,
103
- scrollY: opts.scrollY ?? win.pageYOffset ?? DEFAULT_SCROLL
104
- };
105
-
106
- const windowBounds = new Bounds(
107
- windowOptions.scrollX,
108
- windowOptions.scrollY,
109
- windowOptions.windowWidth,
110
- windowOptions.windowHeight
111
- );
112
-
113
- const context = new Context(contextOptions, windowBounds, config);
114
-
115
- const performanceMonitoring = opts.enablePerformanceMonitoring ?? opts.logging ?? false;
116
- const perfMonitor = new PerformanceMonitor(context, performanceMonitoring);
117
-
118
- perfMonitor.start('total', {
119
- width: windowOptions.windowWidth,
120
- height: windowOptions.windowHeight
121
- });
122
-
123
- const signal = opts.signal;
124
-
125
- if (signal?.aborted) {
126
- throw new DOMException('The operation was aborted.', 'AbortError');
127
- }
128
-
129
- const foreignObjectRendering = opts.foreignObjectRendering ?? false;
130
-
131
- const cloneOptions: CloneConfigurations = {
132
- allowTaint: opts.allowTaint ?? false,
133
- onclone: opts.onclone,
134
- ignoreElements: opts.ignoreElements,
135
- iframeContainer: opts.iframeContainer,
136
- inlineImages: foreignObjectRendering,
137
- copyStyles: foreignObjectRendering,
138
- cspNonce: opts.cspNonce ?? config.cspNonce
139
- };
140
-
141
- context.logger.debug(
142
- `Starting document clone with size ${windowBounds.width}x${
143
- windowBounds.height
144
- } scrolled to ${-windowBounds.left},${-windowBounds.top}`
145
- );
146
-
147
- perfMonitor.start('clone');
148
- const documentCloner = new DocumentCloner(context, element, cloneOptions);
149
- const clonedElement = documentCloner.clonedReferenceElement;
150
- if (!clonedElement) {
151
- throw new Error('Unable to find element in cloned iframe');
152
- }
153
-
154
- const container = await documentCloner.toIFrame(ownerDocument, windowBounds);
155
- perfMonitor.end('clone');
156
-
157
- if (signal?.aborted) {
158
- if (opts.removeContainer ?? true) {
159
- DocumentCloner.destroy(container);
160
- }
161
- throw new DOMException('The operation was aborted.', 'AbortError');
162
- }
163
-
164
- const { width, height, left, top } =
165
- isBodyElement(clonedElement) || isHTMLElement(clonedElement)
166
- ? parseDocumentSize(clonedElement.ownerDocument)
167
- : parseBounds(context, clonedElement);
168
-
169
- const backgroundColor = parseBackgroundColor(context, clonedElement, opts.backgroundColor);
170
-
171
- const renderOptions: RenderConfigurations = {
172
- canvas: opts.canvas,
173
- backgroundColor,
174
- signal,
175
- scale: opts.scale ?? defaultView.devicePixelRatio ?? 1,
176
- x: (opts.x ?? 0) + left,
177
- y: (opts.y ?? 0) + top,
178
- width: opts.width ?? Math.ceil(width),
179
- height: opts.height ?? Math.ceil(height),
180
- imageSmoothing: opts.imageSmoothing,
181
- imageSmoothingQuality: opts.imageSmoothingQuality
182
- };
183
-
184
- let canvas;
185
-
186
- let root: ElementContainer | undefined;
187
-
188
- try {
189
- if (foreignObjectRendering) {
190
- context.logger.debug(`Document cloned, using foreign object rendering`);
191
- perfMonitor.start('render-foreignobject');
192
- const renderer = new ForeignObjectRenderer(context, renderOptions);
193
- canvas = await renderer.render(clonedElement);
194
- perfMonitor.end('render-foreignobject');
195
- } else {
196
- context.logger.debug(
197
- `Document cloned, element located at ${left},${top} with size ${width}x${height} using computed rendering`
198
- );
199
-
200
- context.logger.debug(`Starting DOM parsing`);
201
- perfMonitor.start('parse');
202
- if (signal?.aborted) {
203
- throw new DOMException('The operation was aborted.', 'AbortError');
204
- }
205
- root = parseTree(context, clonedElement);
206
- perfMonitor.end('parse');
207
-
208
- if (backgroundColor === root.styles.backgroundColor) {
209
- root.styles.backgroundColor = COLORS.TRANSPARENT;
210
- }
211
-
212
- context.logger.debug(
213
- `Starting renderer for element at ${renderOptions.x},${renderOptions.y} with size ${renderOptions.width}x${renderOptions.height}`
214
- );
215
-
216
- perfMonitor.start('render');
217
- if (signal?.aborted) {
218
- throw new DOMException('The operation was aborted.', 'AbortError');
219
- }
220
- const renderer = new CanvasRenderer(context, renderOptions);
221
- canvas = await renderer.render(root);
222
- perfMonitor.end('render');
223
- }
224
-
225
- perfMonitor.start('cleanup');
226
- if (opts.removeContainer ?? true) {
227
- if (!DocumentCloner.destroy(container)) {
228
- context.logger.error(`Cannot detach cloned iframe as it is not in the DOM anymore`);
229
- }
230
- }
231
- perfMonitor.end('cleanup');
232
-
233
- perfMonitor.end('total');
234
- context.logger.debug(`Finished rendering`);
235
-
236
- if (performanceMonitoring) {
237
- perfMonitor.logSummary();
238
- }
239
-
240
- return canvas;
241
- } finally {
242
- if (root) {
243
- root.restoreTree();
244
- }
245
- }
246
- };
247
-
248
- const parseBackgroundColor = (context: Context, element: HTMLElement, backgroundColorOverride?: string | null) => {
249
- const ownerDocument = element.ownerDocument;
250
- // http://www.w3.org/TR/css3-background/#special-backgrounds
251
- const documentBackgroundColor = ownerDocument.documentElement
252
- ? parseColor(context, getComputedStyle(ownerDocument.documentElement).backgroundColor as string)
253
- : COLORS.TRANSPARENT;
254
- const bodyBackgroundColor = ownerDocument.body
255
- ? parseColor(context, getComputedStyle(ownerDocument.body).backgroundColor as string)
256
- : COLORS.TRANSPARENT;
257
-
258
- const defaultBackgroundColor =
259
- typeof backgroundColorOverride === 'string'
260
- ? parseColor(context, backgroundColorOverride)
261
- : backgroundColorOverride === null
262
- ? COLORS.TRANSPARENT
263
- : 0xffffffff;
264
-
265
- return element === ownerDocument.documentElement
266
- ? isTransparent(documentBackgroundColor)
267
- ? isTransparent(bodyBackgroundColor)
268
- ? defaultBackgroundColor
269
- : bodyBackgroundColor
270
- : documentBackgroundColor
271
- : defaultBackgroundColor;
272
- };
package/src/core/util.ts DELETED
@@ -1 +0,0 @@
1
- export const SMALL_IMAGE = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';