html2canvas-pro 2.0.3 → 2.1.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 (631) hide show
  1. package/README.md +8 -6
  2. package/dist/html2canvas-pro.esm.js +6754 -6599
  3. package/dist/html2canvas-pro.esm.js.map +1 -1
  4. package/dist/html2canvas-pro.js +6753 -6599
  5. package/dist/html2canvas-pro.js.map +1 -1
  6. package/dist/html2canvas-pro.min.js +5 -5
  7. package/dist/lib/config.js +3 -4
  8. package/dist/lib/core/bitwise.js +0 -1
  9. package/dist/lib/core/cache-storage.js +34 -48
  10. package/dist/lib/core/context.js +0 -1
  11. package/dist/lib/core/debugger.js +0 -1
  12. package/dist/lib/core/features.js +0 -1
  13. package/dist/lib/core/logger.js +0 -1
  14. package/dist/lib/core/origin-checker.js +0 -1
  15. package/dist/lib/core/performance-monitor.js +1 -24
  16. package/dist/lib/core/render-element.js +210 -0
  17. package/dist/lib/core/util.js +0 -1
  18. package/dist/lib/core/validator.js +0 -1
  19. package/dist/lib/css/index.js +150 -89
  20. package/dist/lib/css/layout/bounds.js +0 -1
  21. package/dist/lib/css/layout/text.js +4 -1
  22. package/dist/lib/css/{ITypeDescriptor.js → property-descriptor.js} +0 -1
  23. package/dist/lib/css/property-descriptors/background-clip.js +0 -1
  24. package/dist/lib/css/property-descriptors/background-color.js +0 -1
  25. package/dist/lib/css/property-descriptors/background-image.js +0 -1
  26. package/dist/lib/css/property-descriptors/background-origin.js +0 -1
  27. package/dist/lib/css/property-descriptors/background-position.js +0 -1
  28. package/dist/lib/css/property-descriptors/background-repeat.js +0 -1
  29. package/dist/lib/css/property-descriptors/background-size.js +0 -1
  30. package/dist/lib/css/property-descriptors/border-color.js +0 -1
  31. package/dist/lib/css/property-descriptors/border-radius.js +0 -1
  32. package/dist/lib/css/property-descriptors/border-style.js +0 -1
  33. package/dist/lib/css/property-descriptors/border-width.js +0 -1
  34. package/dist/lib/css/property-descriptors/box-shadow.js +0 -1
  35. package/dist/lib/css/property-descriptors/clip-path.js +0 -1
  36. package/dist/lib/css/property-descriptors/color.js +0 -1
  37. package/dist/lib/css/property-descriptors/content.js +0 -1
  38. package/dist/lib/css/property-descriptors/counter-increment.js +0 -1
  39. package/dist/lib/css/property-descriptors/counter-reset.js +0 -1
  40. package/dist/lib/css/property-descriptors/direction.js +0 -1
  41. package/dist/lib/css/property-descriptors/display.js +0 -1
  42. package/dist/lib/css/property-descriptors/duration.js +0 -1
  43. package/dist/lib/css/property-descriptors/float.js +0 -1
  44. package/dist/lib/css/property-descriptors/font-family.js +0 -1
  45. package/dist/lib/css/property-descriptors/font-size.js +0 -1
  46. package/dist/lib/css/property-descriptors/font-style.js +0 -1
  47. package/dist/lib/css/property-descriptors/font-variant.js +0 -1
  48. package/dist/lib/css/property-descriptors/font-weight.js +0 -1
  49. package/dist/lib/css/property-descriptors/image-rendering.js +0 -1
  50. package/dist/lib/css/property-descriptors/letter-spacing.js +0 -1
  51. package/dist/lib/css/property-descriptors/line-break.js +0 -1
  52. package/dist/lib/css/property-descriptors/line-height.js +0 -1
  53. package/dist/lib/css/property-descriptors/list-style-image.js +0 -1
  54. package/dist/lib/css/property-descriptors/list-style-position.js +0 -1
  55. package/dist/lib/css/property-descriptors/list-style-type.js +0 -1
  56. package/dist/lib/css/property-descriptors/margin.js +0 -1
  57. package/dist/lib/css/property-descriptors/mix-blend-mode.js +31 -0
  58. package/dist/lib/css/property-descriptors/object-fit.js +0 -1
  59. package/dist/lib/css/property-descriptors/opacity.js +0 -1
  60. package/dist/lib/css/property-descriptors/overflow-wrap.js +0 -1
  61. package/dist/lib/css/property-descriptors/overflow.js +0 -1
  62. package/dist/lib/css/property-descriptors/padding.js +0 -1
  63. package/dist/lib/css/property-descriptors/paint-order.js +0 -1
  64. package/dist/lib/css/property-descriptors/position.js +0 -1
  65. package/dist/lib/css/property-descriptors/quotes.js +0 -1
  66. package/dist/lib/css/property-descriptors/rotate.js +0 -1
  67. package/dist/lib/css/property-descriptors/text-align.js +0 -1
  68. package/dist/lib/css/property-descriptors/text-decoration-color.js +0 -1
  69. package/dist/lib/css/property-descriptors/text-decoration-line.js +0 -1
  70. package/dist/lib/css/property-descriptors/text-decoration-style.js +0 -1
  71. package/dist/lib/css/property-descriptors/text-decoration-thickness.js +0 -1
  72. package/dist/lib/css/property-descriptors/text-overflow.js +0 -1
  73. package/dist/lib/css/property-descriptors/text-shadow.js +0 -1
  74. package/dist/lib/css/property-descriptors/text-transform.js +0 -1
  75. package/dist/lib/css/property-descriptors/text-underline-offset.js +0 -1
  76. package/dist/lib/css/property-descriptors/transform-origin.js +0 -1
  77. package/dist/lib/css/property-descriptors/transform.js +0 -1
  78. package/dist/lib/css/property-descriptors/visibility.js +0 -1
  79. package/dist/lib/css/property-descriptors/webkit-line-clamp.js +0 -1
  80. package/dist/lib/css/property-descriptors/webkit-text-stroke-color.js +0 -1
  81. package/dist/lib/css/property-descriptors/webkit-text-stroke-width.js +0 -1
  82. package/dist/lib/css/property-descriptors/word-break.js +0 -1
  83. package/dist/lib/css/property-descriptors/writing-mode.js +28 -0
  84. package/dist/lib/css/property-descriptors/z-index.js +0 -1
  85. package/dist/lib/css/syntax/parser.js +0 -1
  86. package/dist/lib/css/syntax/tokenizer.js +14 -1
  87. package/dist/lib/css/{IPropertyDescriptor.js → type-descriptor.js} +0 -1
  88. package/dist/lib/css/types/angle.js +0 -1
  89. package/dist/lib/css/types/color-math.js +0 -1
  90. package/dist/lib/css/types/color-spaces/a98.js +0 -1
  91. package/dist/lib/css/types/color-spaces/p3.js +0 -1
  92. package/dist/lib/css/types/color-spaces/pro-photo.js +0 -1
  93. package/dist/lib/css/types/color-spaces/rec2020.js +0 -1
  94. package/dist/lib/css/types/color-spaces/srgb.js +0 -1
  95. package/dist/lib/css/types/color-utilities.js +0 -1
  96. package/dist/lib/css/types/color.js +0 -1
  97. package/dist/lib/css/types/functions/-prefix-linear-gradient.js +0 -1
  98. package/dist/lib/css/types/functions/-prefix-radial-gradient.js +0 -1
  99. package/dist/lib/css/types/functions/-webkit-gradient.js +0 -1
  100. package/dist/lib/css/types/functions/counter.js +0 -1
  101. package/dist/lib/css/types/functions/gradient.js +0 -1
  102. package/dist/lib/css/types/functions/linear-gradient.js +0 -1
  103. package/dist/lib/css/types/functions/radial-gradient.js +0 -1
  104. package/dist/lib/css/types/image.js +0 -1
  105. package/dist/lib/css/types/index.js +0 -1
  106. package/dist/lib/css/types/length-percentage.js +0 -1
  107. package/dist/lib/css/types/length.js +0 -1
  108. package/dist/lib/css/types/time.js +0 -1
  109. package/dist/lib/dom/document-cloner.js +27 -22
  110. package/dist/lib/dom/dom-normalizer.js +0 -1
  111. package/dist/lib/dom/element-container.js +7 -6
  112. package/dist/lib/dom/elements/li-element-container.js +0 -1
  113. package/dist/lib/dom/elements/ol-element-container.js +0 -1
  114. package/dist/lib/dom/elements/select-element-container.js +0 -1
  115. package/dist/lib/dom/elements/textarea-element-container.js +0 -1
  116. package/dist/lib/dom/node-parser.js +37 -53
  117. package/dist/lib/dom/node-type-guards.js +62 -25
  118. package/dist/lib/dom/replaced-elements/canvas-element-container.js +0 -1
  119. package/dist/lib/dom/replaced-elements/iframe-element-container.js +0 -1
  120. package/dist/lib/dom/replaced-elements/image-element-container.js +0 -1
  121. package/dist/lib/dom/replaced-elements/index.js +0 -1
  122. package/dist/lib/dom/replaced-elements/input-element-container.js +0 -1
  123. package/dist/lib/dom/replaced-elements/pseudo-elements.js +0 -1
  124. package/dist/lib/dom/replaced-elements/svg-element-container.js +0 -1
  125. package/dist/lib/dom/text-container.js +5 -1
  126. package/dist/lib/index.js +32 -210
  127. package/dist/lib/invariant.js +0 -1
  128. package/dist/lib/options.js +2 -0
  129. package/dist/lib/render/background.js +0 -1
  130. package/dist/lib/render/bezier-curve.js +0 -1
  131. package/dist/lib/render/border.js +0 -1
  132. package/dist/lib/render/bound-curves.js +0 -1
  133. package/dist/lib/render/box-sizing.js +0 -1
  134. package/dist/lib/render/canvas/background-renderer.js +2 -24
  135. package/dist/lib/render/canvas/border-renderer.js +0 -1
  136. package/dist/lib/render/canvas/canvas-path.js +25 -0
  137. package/dist/lib/render/canvas/canvas-renderer.js +25 -98
  138. package/dist/lib/render/canvas/effects-renderer.js +3 -1
  139. package/dist/lib/render/canvas/foreignobject-renderer.js +8 -16
  140. package/dist/lib/render/canvas/text-renderer.js +92 -121
  141. package/dist/lib/render/effects.js +11 -2
  142. package/dist/lib/render/font-metrics.js +0 -1
  143. package/dist/lib/render/object-fit.js +87 -0
  144. package/dist/lib/render/path.js +0 -1
  145. package/dist/lib/render/renderer-interface.js +0 -1
  146. package/dist/lib/render/stacking-context.js +16 -8
  147. package/dist/lib/render/vector.js +0 -1
  148. package/dist/types/core/cache-storage.d.ts +5 -6
  149. package/dist/types/core/performance-monitor.d.ts +0 -11
  150. package/dist/types/core/render-element.d.ts +3 -0
  151. package/dist/types/css/index.d.ts +5 -0
  152. package/dist/types/css/property-descriptors/background-clip.d.ts +1 -1
  153. package/dist/types/css/property-descriptors/background-color.d.ts +1 -1
  154. package/dist/types/css/property-descriptors/background-image.d.ts +1 -1
  155. package/dist/types/css/property-descriptors/background-origin.d.ts +1 -1
  156. package/dist/types/css/property-descriptors/background-position.d.ts +1 -1
  157. package/dist/types/css/property-descriptors/background-repeat.d.ts +1 -1
  158. package/dist/types/css/property-descriptors/background-size.d.ts +1 -1
  159. package/dist/types/css/property-descriptors/border-color.d.ts +1 -1
  160. package/dist/types/css/property-descriptors/border-radius.d.ts +1 -1
  161. package/dist/types/css/property-descriptors/border-style.d.ts +1 -1
  162. package/dist/types/css/property-descriptors/border-width.d.ts +1 -1
  163. package/dist/types/css/property-descriptors/box-shadow.d.ts +1 -1
  164. package/dist/types/css/property-descriptors/clip-path.d.ts +1 -1
  165. package/dist/types/css/property-descriptors/color.d.ts +1 -1
  166. package/dist/types/css/property-descriptors/content.d.ts +1 -1
  167. package/dist/types/css/property-descriptors/counter-increment.d.ts +1 -1
  168. package/dist/types/css/property-descriptors/counter-reset.d.ts +1 -1
  169. package/dist/types/css/property-descriptors/direction.d.ts +1 -1
  170. package/dist/types/css/property-descriptors/display.d.ts +1 -1
  171. package/dist/types/css/property-descriptors/duration.d.ts +1 -1
  172. package/dist/types/css/property-descriptors/float.d.ts +1 -1
  173. package/dist/types/css/property-descriptors/font-family.d.ts +1 -1
  174. package/dist/types/css/property-descriptors/font-size.d.ts +1 -1
  175. package/dist/types/css/property-descriptors/font-style.d.ts +1 -1
  176. package/dist/types/css/property-descriptors/font-variant.d.ts +1 -1
  177. package/dist/types/css/property-descriptors/font-weight.d.ts +1 -1
  178. package/dist/types/css/property-descriptors/image-rendering.d.ts +1 -1
  179. package/dist/types/css/property-descriptors/letter-spacing.d.ts +1 -1
  180. package/dist/types/css/property-descriptors/line-break.d.ts +1 -1
  181. package/dist/types/css/property-descriptors/line-height.d.ts +1 -1
  182. package/dist/types/css/property-descriptors/list-style-image.d.ts +1 -1
  183. package/dist/types/css/property-descriptors/list-style-position.d.ts +1 -1
  184. package/dist/types/css/property-descriptors/list-style-type.d.ts +1 -1
  185. package/dist/types/css/property-descriptors/margin.d.ts +1 -1
  186. package/dist/types/css/property-descriptors/mix-blend-mode.d.ts +21 -0
  187. package/dist/types/css/property-descriptors/object-fit.d.ts +1 -1
  188. package/dist/types/css/property-descriptors/opacity.d.ts +1 -1
  189. package/dist/types/css/property-descriptors/overflow-wrap.d.ts +1 -1
  190. package/dist/types/css/property-descriptors/overflow.d.ts +1 -1
  191. package/dist/types/css/property-descriptors/padding.d.ts +1 -1
  192. package/dist/types/css/property-descriptors/paint-order.d.ts +1 -1
  193. package/dist/types/css/property-descriptors/position.d.ts +1 -1
  194. package/dist/types/css/property-descriptors/quotes.d.ts +1 -1
  195. package/dist/types/css/property-descriptors/rotate.d.ts +1 -1
  196. package/dist/types/css/property-descriptors/text-align.d.ts +1 -1
  197. package/dist/types/css/property-descriptors/text-decoration-color.d.ts +1 -1
  198. package/dist/types/css/property-descriptors/text-decoration-line.d.ts +1 -1
  199. package/dist/types/css/property-descriptors/text-decoration-style.d.ts +1 -1
  200. package/dist/types/css/property-descriptors/text-decoration-thickness.d.ts +1 -1
  201. package/dist/types/css/property-descriptors/text-overflow.d.ts +1 -1
  202. package/dist/types/css/property-descriptors/text-shadow.d.ts +1 -1
  203. package/dist/types/css/property-descriptors/text-transform.d.ts +1 -1
  204. package/dist/types/css/property-descriptors/text-underline-offset.d.ts +1 -1
  205. package/dist/types/css/property-descriptors/transform-origin.d.ts +1 -1
  206. package/dist/types/css/property-descriptors/transform.d.ts +1 -1
  207. package/dist/types/css/property-descriptors/visibility.d.ts +1 -1
  208. package/dist/types/css/property-descriptors/webkit-line-clamp.d.ts +1 -1
  209. package/dist/types/css/property-descriptors/webkit-text-stroke-color.d.ts +1 -1
  210. package/dist/types/css/property-descriptors/webkit-text-stroke-width.d.ts +1 -1
  211. package/dist/types/css/property-descriptors/word-break.d.ts +1 -1
  212. package/dist/types/css/property-descriptors/writing-mode.d.ts +11 -0
  213. package/dist/types/css/property-descriptors/z-index.d.ts +1 -1
  214. package/dist/types/css/syntax/tokenizer.d.ts +5 -0
  215. package/dist/types/css/types/angle.d.ts +1 -1
  216. package/dist/types/css/types/color.d.ts +1 -1
  217. package/dist/types/css/types/image.d.ts +1 -1
  218. package/dist/types/css/types/time.d.ts +1 -1
  219. package/dist/types/dom/element-container.d.ts +4 -11
  220. package/dist/types/dom/node-parser.d.ts +2 -15
  221. package/dist/types/dom/node-type-guards.d.ts +21 -22
  222. package/dist/types/index.d.ts +28 -48
  223. package/dist/types/options.d.ts +51 -0
  224. package/dist/types/render/canvas/background-renderer.d.ts +0 -6
  225. package/dist/types/render/canvas/canvas-path.d.ts +3 -0
  226. package/dist/types/render/canvas/canvas-renderer.d.ts +4 -2
  227. package/dist/types/render/canvas/foreignobject-renderer.d.ts +2 -3
  228. package/dist/types/render/canvas/text-renderer.d.ts +8 -1
  229. package/dist/types/render/effects.d.ts +9 -1
  230. package/dist/types/render/object-fit.d.ts +18 -0
  231. package/package.json +43 -35
  232. package/src/__tests__/index.ts +99 -0
  233. package/src/config.ts +107 -0
  234. package/src/core/__mocks__/cache-storage.ts +1 -0
  235. package/src/core/__mocks__/context.ts +19 -0
  236. package/{dist/lib/core/__mocks__/features.js → src/core/__mocks__/features.ts} +1 -5
  237. package/src/core/__mocks__/logger.ts +17 -0
  238. package/{dist/lib/core/__tests__/cache-storage.test.js → src/core/__tests__/cache-storage.test.ts} +95 -48
  239. package/{dist/lib/core/__tests__/cache-storage.js → src/core/__tests__/cache-storage.ts} +117 -64
  240. package/{dist/lib/core/__tests__/logger.js → src/core/__tests__/logger.ts} +10 -8
  241. package/{dist/lib/core/__tests__/validator.js → src/core/__tests__/validator.ts} +161 -98
  242. package/src/core/bitwise.ts +1 -0
  243. package/src/core/cache-storage.ts +315 -0
  244. package/src/core/context.ts +31 -0
  245. package/src/core/debugger.ts +32 -0
  246. package/src/core/features.ts +222 -0
  247. package/src/core/logger.ts +64 -0
  248. package/src/core/origin-checker.ts +57 -0
  249. package/src/core/performance-monitor.ts +241 -0
  250. package/src/core/render-element.ts +272 -0
  251. package/src/core/util.ts +1 -0
  252. package/src/core/validator.ts +593 -0
  253. package/src/css/index.ts +427 -0
  254. package/src/css/layout/__mocks__/bounds.ts +6 -0
  255. package/src/css/layout/bounds.ts +79 -0
  256. package/src/css/layout/text.ts +161 -0
  257. package/src/css/property-descriptor.ts +49 -0
  258. package/src/css/property-descriptors/__tests__/background-tests.ts +65 -0
  259. package/src/css/property-descriptors/__tests__/clip-path.test.ts +280 -0
  260. package/src/css/property-descriptors/__tests__/font-family.ts +25 -0
  261. package/src/css/property-descriptors/__tests__/image-rendering-integration.test.ts +153 -0
  262. package/{dist/lib/css/property-descriptors/__tests__/image-rendering-performance.test.js → src/css/property-descriptors/__tests__/image-rendering-performance.test.ts} +74 -66
  263. package/src/css/property-descriptors/__tests__/image-rendering.test.ts +72 -0
  264. package/src/css/property-descriptors/__tests__/paint-order.ts +87 -0
  265. package/src/css/property-descriptors/__tests__/text-shadow.ts +94 -0
  266. package/src/css/property-descriptors/__tests__/transform-tests.ts +18 -0
  267. package/src/css/property-descriptors/background-clip.ts +30 -0
  268. package/src/css/property-descriptors/background-color.ts +9 -0
  269. package/src/css/property-descriptors/background-image.ts +27 -0
  270. package/src/css/property-descriptors/background-origin.ts +31 -0
  271. package/src/css/property-descriptors/background-position.ts +38 -0
  272. package/src/css/property-descriptors/background-repeat.ts +44 -0
  273. package/src/css/property-descriptors/background-size.ts +27 -0
  274. package/src/css/property-descriptors/border-color.ts +13 -0
  275. package/src/css/property-descriptors/border-radius.ts +19 -0
  276. package/src/css/property-descriptors/border-style.ts +34 -0
  277. package/src/css/property-descriptors/border-width.ts +20 -0
  278. package/src/css/property-descriptors/box-shadow.ts +60 -0
  279. package/src/css/property-descriptors/clip-path.ts +271 -0
  280. package/src/css/property-descriptors/color.ts +9 -0
  281. package/src/css/property-descriptors/content.ts +26 -0
  282. package/src/css/property-descriptors/counter-increment.ts +43 -0
  283. package/src/css/property-descriptors/counter-reset.ts +36 -0
  284. package/src/css/property-descriptors/direction.ts +23 -0
  285. package/src/css/property-descriptors/display.ts +117 -0
  286. package/src/css/property-descriptors/duration.ts +14 -0
  287. package/src/css/property-descriptors/float.ts +29 -0
  288. package/src/css/property-descriptors/font-family.ts +38 -0
  289. package/src/css/property-descriptors/font-size.ts +9 -0
  290. package/src/css/property-descriptors/font-style.ts +25 -0
  291. package/src/css/property-descriptors/font-variant.ts +12 -0
  292. package/src/css/property-descriptors/font-weight.ts +26 -0
  293. package/src/css/property-descriptors/image-rendering.ts +33 -0
  294. package/src/css/property-descriptors/letter-spacing.ts +25 -0
  295. package/src/css/property-descriptors/line-break.ts +22 -0
  296. package/src/css/property-descriptors/line-height.ts +22 -0
  297. package/src/css/property-descriptors/list-style-image.ts +19 -0
  298. package/src/css/property-descriptors/list-style-position.ts +22 -0
  299. package/src/css/property-descriptors/list-style-type.ts +179 -0
  300. package/src/css/property-descriptors/margin.ts +13 -0
  301. package/src/css/property-descriptors/mix-blend-mode.ts +35 -0
  302. package/src/css/property-descriptors/object-fit.ts +39 -0
  303. package/src/css/property-descriptors/opacity.ts +15 -0
  304. package/src/css/property-descriptors/overflow-wrap.ts +22 -0
  305. package/src/css/property-descriptors/overflow.ts +34 -0
  306. package/src/css/property-descriptors/padding.ts +14 -0
  307. package/src/css/property-descriptors/paint-order.ts +42 -0
  308. package/src/css/property-descriptors/position.ts +30 -0
  309. package/src/css/property-descriptors/quotes.ts +57 -0
  310. package/src/css/property-descriptors/rotate.ts +34 -0
  311. package/src/css/property-descriptors/text-align.ts +26 -0
  312. package/src/css/property-descriptors/text-decoration-color.ts +9 -0
  313. package/src/css/property-descriptors/text-decoration-line.ts +38 -0
  314. package/src/css/property-descriptors/text-decoration-style.ts +32 -0
  315. package/src/css/property-descriptors/text-decoration-thickness.ts +30 -0
  316. package/src/css/property-descriptors/text-overflow.ts +23 -0
  317. package/src/css/property-descriptors/text-shadow.ts +52 -0
  318. package/src/css/property-descriptors/text-transform.ts +27 -0
  319. package/src/css/property-descriptors/text-underline-offset.ts +27 -0
  320. package/src/css/property-descriptors/transform-origin.ts +29 -0
  321. package/src/css/property-descriptors/transform.ts +74 -0
  322. package/src/css/property-descriptors/visibility.ts +25 -0
  323. package/src/css/property-descriptors/webkit-line-clamp.ts +30 -0
  324. package/src/css/property-descriptors/webkit-text-stroke-color.ts +8 -0
  325. package/src/css/property-descriptors/webkit-text-stroke-width.ts +15 -0
  326. package/src/css/property-descriptors/word-break.ts +25 -0
  327. package/src/css/property-descriptors/writing-mode.ts +37 -0
  328. package/src/css/property-descriptors/z-index.ts +27 -0
  329. package/src/css/syntax/__tests__/tokernizer-tests.ts +29 -0
  330. package/src/css/syntax/parser.ts +188 -0
  331. package/src/css/syntax/tokenizer.ts +822 -0
  332. package/src/css/type-descriptor.ts +7 -0
  333. package/src/css/types/__tests__/color-tests.ts +147 -0
  334. package/src/css/types/__tests__/image-tests.ts +239 -0
  335. package/src/css/types/angle.ts +86 -0
  336. package/src/css/types/color-math.ts +22 -0
  337. package/src/css/types/color-spaces/a98.ts +86 -0
  338. package/src/css/types/color-spaces/p3.ts +92 -0
  339. package/src/css/types/color-spaces/pro-photo.ts +87 -0
  340. package/src/css/types/color-spaces/rec2020.ts +90 -0
  341. package/src/css/types/color-spaces/srgb.ts +87 -0
  342. package/src/css/types/color-utilities.ts +452 -0
  343. package/src/css/types/color.ts +485 -0
  344. package/src/css/types/functions/-prefix-linear-gradient.ts +35 -0
  345. package/src/css/types/functions/-prefix-radial-gradient.ts +106 -0
  346. package/src/css/types/functions/-webkit-gradient.ts +69 -0
  347. package/src/css/types/functions/__tests__/radial-gradient.ts +69 -0
  348. package/src/css/types/functions/counter.ts +511 -0
  349. package/src/css/types/functions/gradient.ts +206 -0
  350. package/src/css/types/functions/linear-gradient.ts +28 -0
  351. package/src/css/types/functions/radial-gradient.ts +101 -0
  352. package/src/css/types/image.ts +120 -0
  353. package/src/css/types/index.ts +1 -0
  354. package/src/css/types/length-percentage.ts +137 -0
  355. package/src/css/types/length.ts +7 -0
  356. package/src/css/types/time.ts +20 -0
  357. package/src/dom/__mocks__/document-cloner.ts +22 -0
  358. package/{dist/lib/dom/__tests__/dom-normalizer.test.js → src/dom/__tests__/dom-normalizer.test.ts} +64 -44
  359. package/src/dom/__tests__/element-container.test.ts +129 -0
  360. package/src/dom/document-cloner.ts +929 -0
  361. package/src/dom/dom-normalizer.ts +133 -0
  362. package/src/dom/element-container.ts +75 -0
  363. package/src/dom/elements/li-element-container.ts +10 -0
  364. package/src/dom/elements/ol-element-container.ts +12 -0
  365. package/src/dom/elements/select-element-container.ts +10 -0
  366. package/src/dom/elements/textarea-element-container.ts +9 -0
  367. package/src/dom/node-parser.ts +177 -0
  368. package/src/dom/node-type-guards.ts +70 -0
  369. package/src/dom/replaced-elements/canvas-element-container.ts +15 -0
  370. package/src/dom/replaced-elements/iframe-element-container.ts +55 -0
  371. package/src/dom/replaced-elements/image-element-container.ts +16 -0
  372. package/src/dom/replaced-elements/index.ts +5 -0
  373. package/src/dom/replaced-elements/input-element-container.ts +105 -0
  374. package/src/dom/replaced-elements/pseudo-elements.ts +0 -0
  375. package/src/dom/replaced-elements/svg-element-container.ts +23 -0
  376. package/src/dom/text-container.ts +42 -0
  377. package/src/global.d.ts +19 -0
  378. package/src/index.ts +82 -0
  379. package/src/invariant.ts +5 -0
  380. package/src/options.ts +55 -0
  381. package/src/render/__tests__/object-fit.test.ts +85 -0
  382. package/src/render/background.ts +298 -0
  383. package/src/render/bezier-curve.ts +47 -0
  384. package/src/render/border.ts +165 -0
  385. package/src/render/bound-curves.ts +388 -0
  386. package/src/render/box-sizing.ts +31 -0
  387. package/{dist/lib/render/canvas/__tests__/background-renderer.test.js → src/render/canvas/__tests__/background-renderer.test.ts} +32 -25
  388. package/src/render/canvas/__tests__/border-renderer.test.ts +24 -0
  389. package/src/render/canvas/__tests__/effects-renderer.test.ts +32 -0
  390. package/src/render/canvas/__tests__/text-renderer.test.ts +471 -0
  391. package/src/render/canvas/background-renderer.ts +271 -0
  392. package/src/render/canvas/border-renderer.ts +224 -0
  393. package/src/render/canvas/canvas-path.ts +31 -0
  394. package/src/render/canvas/canvas-renderer.ts +641 -0
  395. package/src/render/canvas/effects-renderer.ts +130 -0
  396. package/src/render/canvas/foreignobject-renderer.ts +53 -0
  397. package/src/render/canvas/text-renderer.ts +700 -0
  398. package/src/render/effects.ts +75 -0
  399. package/src/render/font-metrics.ts +72 -0
  400. package/src/render/object-fit.ts +100 -0
  401. package/src/render/path.ts +37 -0
  402. package/src/render/renderer-interface.ts +28 -0
  403. package/src/render/stacking-context.ts +386 -0
  404. package/src/render/vector.ts +19 -0
  405. package/demo/image-smoothing-demo.html +0 -256
  406. package/demo/refactoring-test.html +0 -602
  407. package/dist/lib/__tests__/index.js +0 -85
  408. package/dist/lib/__tests__/index.js.map +0 -1
  409. package/dist/lib/config.js.map +0 -1
  410. package/dist/lib/core/__mocks__/cache-storage.js +0 -7
  411. package/dist/lib/core/__mocks__/cache-storage.js.map +0 -1
  412. package/dist/lib/core/__mocks__/context.js +0 -19
  413. package/dist/lib/core/__mocks__/context.js.map +0 -1
  414. package/dist/lib/core/__mocks__/features.js.map +0 -1
  415. package/dist/lib/core/__mocks__/logger.js +0 -16
  416. package/dist/lib/core/__mocks__/logger.js.map +0 -1
  417. package/dist/lib/core/__tests__/cache-storage.js.map +0 -1
  418. package/dist/lib/core/__tests__/cache-storage.test.js.map +0 -1
  419. package/dist/lib/core/__tests__/logger.js.map +0 -1
  420. package/dist/lib/core/__tests__/validator.js.map +0 -1
  421. package/dist/lib/core/bitwise.js.map +0 -1
  422. package/dist/lib/core/cache-storage.js.map +0 -1
  423. package/dist/lib/core/context.js.map +0 -1
  424. package/dist/lib/core/debugger.js.map +0 -1
  425. package/dist/lib/core/features.js.map +0 -1
  426. package/dist/lib/core/logger.js.map +0 -1
  427. package/dist/lib/core/origin-checker.js.map +0 -1
  428. package/dist/lib/core/performance-monitor.js.map +0 -1
  429. package/dist/lib/core/util.js.map +0 -1
  430. package/dist/lib/core/validator.js.map +0 -1
  431. package/dist/lib/css/IPropertyDescriptor.js.map +0 -1
  432. package/dist/lib/css/ITypeDescriptor.js.map +0 -1
  433. package/dist/lib/css/index.js.map +0 -1
  434. package/dist/lib/css/layout/__mocks__/bounds.js +0 -9
  435. package/dist/lib/css/layout/__mocks__/bounds.js.map +0 -1
  436. package/dist/lib/css/layout/bounds.js.map +0 -1
  437. package/dist/lib/css/layout/text.js.map +0 -1
  438. package/dist/lib/css/property-descriptors/__tests__/background-tests.js +0 -49
  439. package/dist/lib/css/property-descriptors/__tests__/background-tests.js.map +0 -1
  440. package/dist/lib/css/property-descriptors/__tests__/clip-path.test.js +0 -273
  441. package/dist/lib/css/property-descriptors/__tests__/clip-path.test.js.map +0 -1
  442. package/dist/lib/css/property-descriptors/__tests__/font-family.js +0 -19
  443. package/dist/lib/css/property-descriptors/__tests__/font-family.js.map +0 -1
  444. package/dist/lib/css/property-descriptors/__tests__/image-rendering-integration.test.js +0 -143
  445. package/dist/lib/css/property-descriptors/__tests__/image-rendering-integration.test.js.map +0 -1
  446. package/dist/lib/css/property-descriptors/__tests__/image-rendering-performance.test.js.map +0 -1
  447. package/dist/lib/css/property-descriptors/__tests__/image-rendering.test.js +0 -61
  448. package/dist/lib/css/property-descriptors/__tests__/image-rendering.test.js.map +0 -1
  449. package/dist/lib/css/property-descriptors/__tests__/paint-order.js +0 -66
  450. package/dist/lib/css/property-descriptors/__tests__/paint-order.js.map +0 -1
  451. package/dist/lib/css/property-descriptors/__tests__/text-shadow.js +0 -82
  452. package/dist/lib/css/property-descriptors/__tests__/text-shadow.js.map +0 -1
  453. package/dist/lib/css/property-descriptors/__tests__/transform-tests.js +0 -14
  454. package/dist/lib/css/property-descriptors/__tests__/transform-tests.js.map +0 -1
  455. package/dist/lib/css/property-descriptors/background-clip.js.map +0 -1
  456. package/dist/lib/css/property-descriptors/background-color.js.map +0 -1
  457. package/dist/lib/css/property-descriptors/background-image.js.map +0 -1
  458. package/dist/lib/css/property-descriptors/background-origin.js.map +0 -1
  459. package/dist/lib/css/property-descriptors/background-position.js.map +0 -1
  460. package/dist/lib/css/property-descriptors/background-repeat.js.map +0 -1
  461. package/dist/lib/css/property-descriptors/background-size.js.map +0 -1
  462. package/dist/lib/css/property-descriptors/border-color.js.map +0 -1
  463. package/dist/lib/css/property-descriptors/border-radius.js.map +0 -1
  464. package/dist/lib/css/property-descriptors/border-style.js.map +0 -1
  465. package/dist/lib/css/property-descriptors/border-width.js.map +0 -1
  466. package/dist/lib/css/property-descriptors/box-shadow.js.map +0 -1
  467. package/dist/lib/css/property-descriptors/clip-path.js.map +0 -1
  468. package/dist/lib/css/property-descriptors/color.js.map +0 -1
  469. package/dist/lib/css/property-descriptors/content.js.map +0 -1
  470. package/dist/lib/css/property-descriptors/counter-increment.js.map +0 -1
  471. package/dist/lib/css/property-descriptors/counter-reset.js.map +0 -1
  472. package/dist/lib/css/property-descriptors/direction.js.map +0 -1
  473. package/dist/lib/css/property-descriptors/display.js.map +0 -1
  474. package/dist/lib/css/property-descriptors/duration.js.map +0 -1
  475. package/dist/lib/css/property-descriptors/float.js.map +0 -1
  476. package/dist/lib/css/property-descriptors/font-family.js.map +0 -1
  477. package/dist/lib/css/property-descriptors/font-size.js.map +0 -1
  478. package/dist/lib/css/property-descriptors/font-style.js.map +0 -1
  479. package/dist/lib/css/property-descriptors/font-variant.js.map +0 -1
  480. package/dist/lib/css/property-descriptors/font-weight.js.map +0 -1
  481. package/dist/lib/css/property-descriptors/image-rendering.js.map +0 -1
  482. package/dist/lib/css/property-descriptors/letter-spacing.js.map +0 -1
  483. package/dist/lib/css/property-descriptors/line-break.js.map +0 -1
  484. package/dist/lib/css/property-descriptors/line-height.js.map +0 -1
  485. package/dist/lib/css/property-descriptors/list-style-image.js.map +0 -1
  486. package/dist/lib/css/property-descriptors/list-style-position.js.map +0 -1
  487. package/dist/lib/css/property-descriptors/list-style-type.js.map +0 -1
  488. package/dist/lib/css/property-descriptors/margin.js.map +0 -1
  489. package/dist/lib/css/property-descriptors/object-fit.js.map +0 -1
  490. package/dist/lib/css/property-descriptors/opacity.js.map +0 -1
  491. package/dist/lib/css/property-descriptors/overflow-wrap.js.map +0 -1
  492. package/dist/lib/css/property-descriptors/overflow.js.map +0 -1
  493. package/dist/lib/css/property-descriptors/padding.js.map +0 -1
  494. package/dist/lib/css/property-descriptors/paint-order.js.map +0 -1
  495. package/dist/lib/css/property-descriptors/position.js.map +0 -1
  496. package/dist/lib/css/property-descriptors/quotes.js.map +0 -1
  497. package/dist/lib/css/property-descriptors/rotate.js.map +0 -1
  498. package/dist/lib/css/property-descriptors/text-align.js.map +0 -1
  499. package/dist/lib/css/property-descriptors/text-decoration-color.js.map +0 -1
  500. package/dist/lib/css/property-descriptors/text-decoration-line.js.map +0 -1
  501. package/dist/lib/css/property-descriptors/text-decoration-style.js.map +0 -1
  502. package/dist/lib/css/property-descriptors/text-decoration-thickness.js.map +0 -1
  503. package/dist/lib/css/property-descriptors/text-overflow.js.map +0 -1
  504. package/dist/lib/css/property-descriptors/text-shadow.js.map +0 -1
  505. package/dist/lib/css/property-descriptors/text-transform.js.map +0 -1
  506. package/dist/lib/css/property-descriptors/text-underline-offset.js.map +0 -1
  507. package/dist/lib/css/property-descriptors/transform-origin.js.map +0 -1
  508. package/dist/lib/css/property-descriptors/transform.js.map +0 -1
  509. package/dist/lib/css/property-descriptors/visibility.js.map +0 -1
  510. package/dist/lib/css/property-descriptors/webkit-line-clamp.js.map +0 -1
  511. package/dist/lib/css/property-descriptors/webkit-text-stroke-color.js.map +0 -1
  512. package/dist/lib/css/property-descriptors/webkit-text-stroke-width.js.map +0 -1
  513. package/dist/lib/css/property-descriptors/word-break.js.map +0 -1
  514. package/dist/lib/css/property-descriptors/z-index.js.map +0 -1
  515. package/dist/lib/css/syntax/__tests__/tokernizer-tests.js +0 -26
  516. package/dist/lib/css/syntax/__tests__/tokernizer-tests.js.map +0 -1
  517. package/dist/lib/css/syntax/parser.js.map +0 -1
  518. package/dist/lib/css/syntax/tokenizer.js.map +0 -1
  519. package/dist/lib/css/types/__tests__/color-tests.js +0 -111
  520. package/dist/lib/css/types/__tests__/color-tests.js.map +0 -1
  521. package/dist/lib/css/types/__tests__/image-tests.js +0 -215
  522. package/dist/lib/css/types/__tests__/image-tests.js.map +0 -1
  523. package/dist/lib/css/types/angle.js.map +0 -1
  524. package/dist/lib/css/types/color-math.js.map +0 -1
  525. package/dist/lib/css/types/color-spaces/a98.js.map +0 -1
  526. package/dist/lib/css/types/color-spaces/p3.js.map +0 -1
  527. package/dist/lib/css/types/color-spaces/pro-photo.js.map +0 -1
  528. package/dist/lib/css/types/color-spaces/rec2020.js.map +0 -1
  529. package/dist/lib/css/types/color-spaces/srgb.js.map +0 -1
  530. package/dist/lib/css/types/color-utilities.js.map +0 -1
  531. package/dist/lib/css/types/color.js.map +0 -1
  532. package/dist/lib/css/types/functions/-prefix-linear-gradient.js.map +0 -1
  533. package/dist/lib/css/types/functions/-prefix-radial-gradient.js.map +0 -1
  534. package/dist/lib/css/types/functions/-webkit-gradient.js.map +0 -1
  535. package/dist/lib/css/types/functions/__tests__/radial-gradient.js +0 -63
  536. package/dist/lib/css/types/functions/__tests__/radial-gradient.js.map +0 -1
  537. package/dist/lib/css/types/functions/counter.js.map +0 -1
  538. package/dist/lib/css/types/functions/gradient.js.map +0 -1
  539. package/dist/lib/css/types/functions/linear-gradient.js.map +0 -1
  540. package/dist/lib/css/types/functions/radial-gradient.js.map +0 -1
  541. package/dist/lib/css/types/image.js.map +0 -1
  542. package/dist/lib/css/types/index.js.map +0 -1
  543. package/dist/lib/css/types/length-percentage.js.map +0 -1
  544. package/dist/lib/css/types/length.js.map +0 -1
  545. package/dist/lib/css/types/time.js.map +0 -1
  546. package/dist/lib/dom/__mocks__/document-cloner.js +0 -23
  547. package/dist/lib/dom/__mocks__/document-cloner.js.map +0 -1
  548. package/dist/lib/dom/__tests__/dom-normalizer.test.js.map +0 -1
  549. package/dist/lib/dom/__tests__/element-container.test.js +0 -109
  550. package/dist/lib/dom/__tests__/element-container.test.js.map +0 -1
  551. package/dist/lib/dom/document-cloner.js.map +0 -1
  552. package/dist/lib/dom/dom-normalizer.js.map +0 -1
  553. package/dist/lib/dom/element-container.js.map +0 -1
  554. package/dist/lib/dom/elements/li-element-container.js.map +0 -1
  555. package/dist/lib/dom/elements/ol-element-container.js.map +0 -1
  556. package/dist/lib/dom/elements/select-element-container.js.map +0 -1
  557. package/dist/lib/dom/elements/textarea-element-container.js.map +0 -1
  558. package/dist/lib/dom/node-parser.js.map +0 -1
  559. package/dist/lib/dom/node-type-guards.js.map +0 -1
  560. package/dist/lib/dom/replaced-elements/canvas-element-container.js.map +0 -1
  561. package/dist/lib/dom/replaced-elements/iframe-element-container.js.map +0 -1
  562. package/dist/lib/dom/replaced-elements/image-element-container.js.map +0 -1
  563. package/dist/lib/dom/replaced-elements/index.js.map +0 -1
  564. package/dist/lib/dom/replaced-elements/input-element-container.js.map +0 -1
  565. package/dist/lib/dom/replaced-elements/pseudo-elements.js.map +0 -1
  566. package/dist/lib/dom/replaced-elements/svg-element-container.js.map +0 -1
  567. package/dist/lib/dom/text-container.js.map +0 -1
  568. package/dist/lib/index.js.map +0 -1
  569. package/dist/lib/invariant.js.map +0 -1
  570. package/dist/lib/render/background.js.map +0 -1
  571. package/dist/lib/render/bezier-curve.js.map +0 -1
  572. package/dist/lib/render/border.js.map +0 -1
  573. package/dist/lib/render/bound-curves.js.map +0 -1
  574. package/dist/lib/render/box-sizing.js.map +0 -1
  575. package/dist/lib/render/canvas/__tests__/background-renderer.test.js.map +0 -1
  576. package/dist/lib/render/canvas/__tests__/border-renderer.test.js +0 -23
  577. package/dist/lib/render/canvas/__tests__/border-renderer.test.js.map +0 -1
  578. package/dist/lib/render/canvas/__tests__/effects-renderer.test.js +0 -30
  579. package/dist/lib/render/canvas/__tests__/effects-renderer.test.js.map +0 -1
  580. package/dist/lib/render/canvas/__tests__/text-renderer.test.js +0 -310
  581. package/dist/lib/render/canvas/__tests__/text-renderer.test.js.map +0 -1
  582. package/dist/lib/render/canvas/background-renderer.js.map +0 -1
  583. package/dist/lib/render/canvas/border-renderer.js.map +0 -1
  584. package/dist/lib/render/canvas/canvas-renderer.js.map +0 -1
  585. package/dist/lib/render/canvas/effects-renderer.js.map +0 -1
  586. package/dist/lib/render/canvas/foreignobject-renderer.js.map +0 -1
  587. package/dist/lib/render/canvas/text-renderer.js.map +0 -1
  588. package/dist/lib/render/effects.js.map +0 -1
  589. package/dist/lib/render/font-metrics.js.map +0 -1
  590. package/dist/lib/render/path.js.map +0 -1
  591. package/dist/lib/render/renderer-interface.js.map +0 -1
  592. package/dist/lib/render/renderer.js +0 -11
  593. package/dist/lib/render/renderer.js.map +0 -1
  594. package/dist/lib/render/stacking-context.js.map +0 -1
  595. package/dist/lib/render/vector.js.map +0 -1
  596. package/dist/types/__tests__/index.d.ts +0 -1
  597. package/dist/types/core/__mocks__/cache-storage.d.ts +0 -2
  598. package/dist/types/core/__mocks__/context.d.ts +0 -9
  599. package/dist/types/core/__mocks__/features.d.ts +0 -8
  600. package/dist/types/core/__mocks__/logger.d.ts +0 -9
  601. package/dist/types/core/__tests__/cache-storage.d.ts +0 -1
  602. package/dist/types/core/__tests__/cache-storage.test.d.ts +0 -1
  603. package/dist/types/core/__tests__/logger.d.ts +0 -1
  604. package/dist/types/core/__tests__/validator.d.ts +0 -1
  605. package/dist/types/css/layout/__mocks__/bounds.d.ts +0 -2
  606. package/dist/types/css/property-descriptors/__tests__/background-tests.d.ts +0 -1
  607. package/dist/types/css/property-descriptors/__tests__/clip-path.test.d.ts +0 -1
  608. package/dist/types/css/property-descriptors/__tests__/font-family.d.ts +0 -1
  609. package/dist/types/css/property-descriptors/__tests__/image-rendering-integration.test.d.ts +0 -1
  610. package/dist/types/css/property-descriptors/__tests__/image-rendering-performance.test.d.ts +0 -1
  611. package/dist/types/css/property-descriptors/__tests__/image-rendering.test.d.ts +0 -1
  612. package/dist/types/css/property-descriptors/__tests__/paint-order.d.ts +0 -1
  613. package/dist/types/css/property-descriptors/__tests__/text-shadow.d.ts +0 -1
  614. package/dist/types/css/property-descriptors/__tests__/transform-tests.d.ts +0 -1
  615. package/dist/types/css/syntax/__tests__/tokernizer-tests.d.ts +0 -1
  616. package/dist/types/css/types/__tests__/color-tests.d.ts +0 -1
  617. package/dist/types/css/types/__tests__/image-tests.d.ts +0 -1
  618. package/dist/types/css/types/functions/__tests__/radial-gradient.d.ts +0 -1
  619. package/dist/types/dom/__mocks__/document-cloner.d.ts +0 -6
  620. package/dist/types/dom/__tests__/dom-normalizer.test.d.ts +0 -1
  621. package/dist/types/dom/__tests__/element-container.test.d.ts +0 -1
  622. package/dist/types/render/canvas/__tests__/background-renderer.test.d.ts +0 -1
  623. package/dist/types/render/canvas/__tests__/border-renderer.test.d.ts +0 -1
  624. package/dist/types/render/canvas/__tests__/effects-renderer.test.d.ts +0 -1
  625. package/dist/types/render/canvas/__tests__/text-renderer.test.d.ts +0 -1
  626. package/dist/types/render/renderer.d.ts +0 -7
  627. package/eslint.config.js +0 -35
  628. package/jest.config.cjs +0 -5
  629. package/karma.conf.cjs +0 -300
  630. /package/dist/types/css/{IPropertyDescriptor.d.ts → property-descriptor.d.ts} +0 -0
  631. /package/dist/types/css/{ITypeDescriptor.d.ts → type-descriptor.d.ts} +0 -0
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isSlotElement = exports.isSelectElement = exports.isTextareaElement = exports.isScriptElement = exports.isStyleElement = exports.isIFrameElement = exports.isImageElement = exports.isVideoElement = exports.isCanvasElement = exports.isBodyElement = exports.isSVGElement = exports.isHTMLElement = exports.isInputElement = exports.parseTree = exports.isCustomElement = exports.isOLElement = exports.isLIElement = exports.isHTMLElementNode = exports.isSVGElementNode = exports.isTextNode = exports.isElementNode = void 0;
3
+ exports.parseTree = exports.isVideoElement = exports.isTextNode = exports.isTextareaElement = exports.isSVGElementNode = exports.isSVGElement = exports.isStyleElement = exports.isSlotElement = exports.isSelectElement = exports.isScriptElement = exports.isOLElement = exports.isLIElement = exports.isInputElement = exports.isImageElement = exports.isIFrameElement = exports.isHTMLElementNode = exports.isHTMLElement = exports.isElementNode = exports.isCustomElement = exports.isCanvasElement = exports.isBodyElement = void 0;
4
4
  const element_container_1 = require("./element-container");
5
5
  const text_container_1 = require("./text-container");
6
6
  const image_element_container_1 = require("./replaced-elements/image-element-container");
@@ -12,15 +12,28 @@ const input_element_container_1 = require("./replaced-elements/input-element-con
12
12
  const select_element_container_1 = require("./elements/select-element-container");
13
13
  const textarea_element_container_1 = require("./elements/textarea-element-container");
14
14
  const iframe_element_container_1 = require("./replaced-elements/iframe-element-container");
15
- const bitwise_1 = require("../core/bitwise");
16
15
  const node_type_guards_1 = require("./node-type-guards");
16
+ Object.defineProperty(exports, "isBodyElement", { enumerable: true, get: function () { return node_type_guards_1.isBodyElement; } });
17
+ Object.defineProperty(exports, "isCanvasElement", { enumerable: true, get: function () { return node_type_guards_1.isCanvasElement; } });
18
+ Object.defineProperty(exports, "isCustomElement", { enumerable: true, get: function () { return node_type_guards_1.isCustomElement; } });
17
19
  Object.defineProperty(exports, "isElementNode", { enumerable: true, get: function () { return node_type_guards_1.isElementNode; } });
18
- Object.defineProperty(exports, "isTextNode", { enumerable: true, get: function () { return node_type_guards_1.isTextNode; } });
19
- Object.defineProperty(exports, "isSVGElementNode", { enumerable: true, get: function () { return node_type_guards_1.isSVGElementNode; } });
20
+ Object.defineProperty(exports, "isHTMLElement", { enumerable: true, get: function () { return node_type_guards_1.isHTMLElement; } });
20
21
  Object.defineProperty(exports, "isHTMLElementNode", { enumerable: true, get: function () { return node_type_guards_1.isHTMLElementNode; } });
22
+ Object.defineProperty(exports, "isIFrameElement", { enumerable: true, get: function () { return node_type_guards_1.isIFrameElement; } });
23
+ Object.defineProperty(exports, "isImageElement", { enumerable: true, get: function () { return node_type_guards_1.isImageElement; } });
24
+ Object.defineProperty(exports, "isInputElement", { enumerable: true, get: function () { return node_type_guards_1.isInputElement; } });
21
25
  Object.defineProperty(exports, "isLIElement", { enumerable: true, get: function () { return node_type_guards_1.isLIElement; } });
22
26
  Object.defineProperty(exports, "isOLElement", { enumerable: true, get: function () { return node_type_guards_1.isOLElement; } });
23
- Object.defineProperty(exports, "isCustomElement", { enumerable: true, get: function () { return node_type_guards_1.isCustomElement; } });
27
+ Object.defineProperty(exports, "isScriptElement", { enumerable: true, get: function () { return node_type_guards_1.isScriptElement; } });
28
+ Object.defineProperty(exports, "isSelectElement", { enumerable: true, get: function () { return node_type_guards_1.isSelectElement; } });
29
+ Object.defineProperty(exports, "isSlotElement", { enumerable: true, get: function () { return node_type_guards_1.isSlotElement; } });
30
+ Object.defineProperty(exports, "isStyleElement", { enumerable: true, get: function () { return node_type_guards_1.isStyleElement; } });
31
+ Object.defineProperty(exports, "isSVGElement", { enumerable: true, get: function () { return node_type_guards_1.isSVGElement; } });
32
+ Object.defineProperty(exports, "isSVGElementNode", { enumerable: true, get: function () { return node_type_guards_1.isSVGElementNode; } });
33
+ Object.defineProperty(exports, "isTextareaElement", { enumerable: true, get: function () { return node_type_guards_1.isTextareaElement; } });
34
+ Object.defineProperty(exports, "isTextNode", { enumerable: true, get: function () { return node_type_guards_1.isTextNode; } });
35
+ Object.defineProperty(exports, "isVideoElement", { enumerable: true, get: function () { return node_type_guards_1.isVideoElement; } });
36
+ const bitwise_1 = require("../core/bitwise");
24
37
  const LIST_OWNERS = ['OL', 'UL', 'MENU'];
25
38
  const parseNodeTree = (context, node, parent, root) => {
26
39
  for (let childNode = node.firstChild, nextNode; childNode; childNode = nextNode) {
@@ -30,29 +43,30 @@ const parseNodeTree = (context, node, parent, root) => {
30
43
  parent.textNodes.push(new text_container_1.TextContainer(context, childNode, parent.styles));
31
44
  }
32
45
  else if ((0, node_type_guards_1.isElementNode)(childNode)) {
33
- if ((0, exports.isSlotElement)(childNode) && childNode.assignedNodes) {
34
- childNode.assignedNodes().forEach((childNode) => parseNodeTree(context, childNode, parent, root));
46
+ if ((0, node_type_guards_1.isSlotElement)(childNode) && childNode.assignedNodes) {
47
+ childNode
48
+ .assignedNodes()
49
+ .forEach((assignedNode) => parseNodeTree(context, assignedNode, parent, root));
35
50
  }
36
51
  else {
37
52
  const container = createContainer(context, childNode);
38
53
  if (container.styles.isVisible()) {
39
54
  if (createsRealStackingContext(childNode, container, root)) {
40
- container.flags |= 4 /* FLAGS.CREATES_REAL_STACKING_CONTEXT */;
55
+ container.createsRealStackingContext = true;
41
56
  }
42
57
  else if (createsStackingContext(container.styles)) {
43
- container.flags |= 2 /* FLAGS.CREATES_STACKING_CONTEXT */;
58
+ container.createsStackingContext = true;
44
59
  }
45
60
  if (LIST_OWNERS.indexOf(childNode.tagName) !== -1) {
46
- container.flags |= 8 /* FLAGS.IS_LIST_OWNER */;
61
+ container.isListOwner = true;
47
62
  }
48
63
  parent.elements.push(container);
49
- childNode.slot;
50
64
  if (childNode.shadowRoot) {
51
65
  parseNodeTree(context, childNode.shadowRoot, container, root);
52
66
  }
53
- else if (!(0, exports.isTextareaElement)(childNode) &&
54
- !(0, exports.isSVGElement)(childNode) &&
55
- !(0, exports.isSelectElement)(childNode)) {
67
+ else if (!(0, node_type_guards_1.isTextareaElement)(childNode) &&
68
+ !(0, node_type_guards_1.isSVGElement)(childNode) &&
69
+ !(0, node_type_guards_1.isSelectElement)(childNode)) {
56
70
  parseNodeTree(context, childNode, container, root);
57
71
  }
58
72
  }
@@ -61,13 +75,13 @@ const parseNodeTree = (context, node, parent, root) => {
61
75
  }
62
76
  };
63
77
  const createContainer = (context, element) => {
64
- if ((0, exports.isImageElement)(element)) {
78
+ if ((0, node_type_guards_1.isImageElement)(element)) {
65
79
  return new image_element_container_1.ImageElementContainer(context, element);
66
80
  }
67
- if ((0, exports.isCanvasElement)(element)) {
81
+ if ((0, node_type_guards_1.isCanvasElement)(element)) {
68
82
  return new canvas_element_container_1.CanvasElementContainer(context, element);
69
83
  }
70
- if ((0, exports.isSVGElement)(element)) {
84
+ if ((0, node_type_guards_1.isSVGElement)(element)) {
71
85
  return new svg_element_container_1.SVGElementContainer(context, element);
72
86
  }
73
87
  if ((0, node_type_guards_1.isLIElement)(element)) {
@@ -76,23 +90,23 @@ const createContainer = (context, element) => {
76
90
  if ((0, node_type_guards_1.isOLElement)(element)) {
77
91
  return new ol_element_container_1.OLElementContainer(context, element);
78
92
  }
79
- if ((0, exports.isInputElement)(element)) {
93
+ if ((0, node_type_guards_1.isInputElement)(element)) {
80
94
  return new input_element_container_1.InputElementContainer(context, element);
81
95
  }
82
- if ((0, exports.isSelectElement)(element)) {
96
+ if ((0, node_type_guards_1.isSelectElement)(element)) {
83
97
  return new select_element_container_1.SelectElementContainer(context, element);
84
98
  }
85
- if ((0, exports.isTextareaElement)(element)) {
99
+ if ((0, node_type_guards_1.isTextareaElement)(element)) {
86
100
  return new textarea_element_container_1.TextareaElementContainer(context, element);
87
101
  }
88
- if ((0, exports.isIFrameElement)(element)) {
102
+ if ((0, node_type_guards_1.isIFrameElement)(element)) {
89
103
  return new iframe_element_container_1.IFrameElementContainer(context, element, exports.parseTree);
90
104
  }
91
105
  return new element_container_1.ElementContainer(context, element);
92
106
  };
93
107
  const parseTree = (context, element) => {
94
108
  const container = createContainer(context, element);
95
- container.flags |= 4 /* FLAGS.CREATES_REAL_STACKING_CONTEXT */;
109
+ container.createsRealStackingContext = true;
96
110
  parseNodeTree(context, element, container, container);
97
111
  return container;
98
112
  };
@@ -101,7 +115,7 @@ const createsRealStackingContext = (node, container, root) => {
101
115
  return (container.styles.isPositionedWithZIndex() ||
102
116
  container.styles.opacity < 1 ||
103
117
  container.styles.isTransformed() ||
104
- ((0, exports.isBodyElement)(node) && root.styles.isTransparent()));
118
+ ((0, node_type_guards_1.isBodyElement)(node) && root.styles.isTransparent()));
105
119
  };
106
120
  const createsStackingContext = (styles) => {
107
121
  // Positioned and floating elements create stacking contexts
@@ -116,33 +130,3 @@ const createsStackingContext = (styles) => {
116
130
  (0, bitwise_1.contains)(styles.display, 536870912 /* DISPLAY.INLINE_GRID */) ||
117
131
  (0, bitwise_1.contains)(styles.display, 134217728 /* DISPLAY.INLINE_TABLE */));
118
132
  };
119
- // Type guards moved to node-type-guards.ts and re-exported above
120
- const isInputElement = (node) => node.tagName === 'INPUT';
121
- exports.isInputElement = isInputElement;
122
- const isHTMLElement = (node) => node.tagName === 'HTML';
123
- exports.isHTMLElement = isHTMLElement;
124
- const isSVGElement = (node) => node.tagName === 'svg';
125
- exports.isSVGElement = isSVGElement;
126
- const isBodyElement = (node) => node.tagName === 'BODY';
127
- exports.isBodyElement = isBodyElement;
128
- const isCanvasElement = (node) => node.tagName === 'CANVAS';
129
- exports.isCanvasElement = isCanvasElement;
130
- const isVideoElement = (node) => node.tagName === 'VIDEO';
131
- exports.isVideoElement = isVideoElement;
132
- const isImageElement = (node) => node.tagName === 'IMG';
133
- exports.isImageElement = isImageElement;
134
- const isIFrameElement = (node) => node.tagName === 'IFRAME';
135
- exports.isIFrameElement = isIFrameElement;
136
- const isStyleElement = (node) => node.tagName === 'STYLE';
137
- exports.isStyleElement = isStyleElement;
138
- const isScriptElement = (node) => node.tagName === 'SCRIPT';
139
- exports.isScriptElement = isScriptElement;
140
- const isTextareaElement = (node) => node.tagName === 'TEXTAREA';
141
- exports.isTextareaElement = isTextareaElement;
142
- const isSelectElement = (node) => node.tagName === 'SELECT';
143
- exports.isSelectElement = isSelectElement;
144
- const isSlotElement = (node) => node.tagName === 'SLOT';
145
- exports.isSlotElement = isSlotElement;
146
- // https://html.spec.whatwg.org/multipage/custom-elements.html#valid-custom-element-name
147
- // isCustomElement moved to node-type-guards.ts and re-exported above
148
- //# sourceMappingURL=node-parser.js.map
@@ -1,44 +1,81 @@
1
1
  "use strict";
2
2
  /**
3
3
  * DOM Node Type Guards
4
- * Extracted to break circular dependencies
4
+ *
5
+ * All DOM node type guards consolidated here to eliminate duplication
6
+ * and provide a single source of truth for node type checking.
5
7
  */
6
8
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.isCustomElement = exports.isOLElement = exports.isLIElement = exports.isHTMLElementNode = exports.isSVGElementNode = exports.isTextNode = exports.isElementNode = void 0;
8
- /**
9
- * Check if node is an Element
10
- */
9
+ exports.canHavePseudoElements = exports.isCustomElement = exports.isOLElement = exports.isLIElement = exports.isSlotElement = exports.isSelectElement = exports.isTextareaElement = exports.isScriptElement = exports.isStyleElement = exports.isIFrameElement = exports.isImageElement = exports.isVideoElement = exports.isCanvasElement = exports.isBodyElement = exports.isSVGElement = exports.isHTMLElement = exports.isInputElement = exports.isHTMLElementNode = exports.isSVGElementNode = exports.isTextNode = exports.isElementNode = void 0;
10
+ // --- Generic node type guards ---
11
11
  const isElementNode = (node) => node.nodeType === Node.ELEMENT_NODE;
12
12
  exports.isElementNode = isElementNode;
13
- /**
14
- * Check if node is a Text node
15
- */
16
13
  const isTextNode = (node) => node.nodeType === Node.TEXT_NODE;
17
14
  exports.isTextNode = isTextNode;
18
- /**
19
- * Check if element is an SVG element
20
- */
21
15
  const isSVGElementNode = (element) => typeof element.className === 'object';
22
16
  exports.isSVGElementNode = isSVGElementNode;
23
- /**
24
- * Check if node is an HTML element
25
- */
26
17
  const isHTMLElementNode = (node) => (0, exports.isElementNode)(node) && typeof node.style !== 'undefined' && !(0, exports.isSVGElementNode)(node);
27
18
  exports.isHTMLElementNode = isHTMLElementNode;
28
- /**
29
- * Check if node is an LI element
30
- */
19
+ // --- Tag name based type guards ---
20
+ const isInputElement = (node) => node.tagName === 'INPUT';
21
+ exports.isInputElement = isInputElement;
22
+ const isHTMLElement = (node) => node.tagName === 'HTML';
23
+ exports.isHTMLElement = isHTMLElement;
24
+ const isSVGElement = (node) => node.tagName === 'svg';
25
+ exports.isSVGElement = isSVGElement;
26
+ const isBodyElement = (node) => node.tagName === 'BODY';
27
+ exports.isBodyElement = isBodyElement;
28
+ const isCanvasElement = (node) => node.tagName === 'CANVAS';
29
+ exports.isCanvasElement = isCanvasElement;
30
+ const isVideoElement = (node) => node.tagName === 'VIDEO';
31
+ exports.isVideoElement = isVideoElement;
32
+ const isImageElement = (node) => node.tagName === 'IMG';
33
+ exports.isImageElement = isImageElement;
34
+ const isIFrameElement = (node) => node.tagName === 'IFRAME';
35
+ exports.isIFrameElement = isIFrameElement;
36
+ const isStyleElement = (node) => node.tagName === 'STYLE';
37
+ exports.isStyleElement = isStyleElement;
38
+ const isScriptElement = (node) => node.tagName === 'SCRIPT';
39
+ exports.isScriptElement = isScriptElement;
40
+ const isTextareaElement = (node) => node.tagName === 'TEXTAREA';
41
+ exports.isTextareaElement = isTextareaElement;
42
+ const isSelectElement = (node) => node.tagName === 'SELECT';
43
+ exports.isSelectElement = isSelectElement;
44
+ const isSlotElement = (node) => node.tagName === 'SLOT';
45
+ exports.isSlotElement = isSlotElement;
31
46
  const isLIElement = (node) => node.tagName === 'LI';
32
47
  exports.isLIElement = isLIElement;
33
- /**
34
- * Check if node is an OL element
35
- */
36
48
  const isOLElement = (node) => node.tagName === 'OL';
37
49
  exports.isOLElement = isOLElement;
38
- /**
39
- * Check if element is a custom element
40
- * Custom elements must have a hyphen and cannot be SVG elements
41
- */
42
50
  const isCustomElement = (element) => !(0, exports.isSVGElementNode)(element) && element.tagName.indexOf('-') > 0;
43
51
  exports.isCustomElement = isCustomElement;
44
- //# sourceMappingURL=node-type-guards.js.map
52
+ const VOID_OR_REPLACED_TAGS = new Set([
53
+ 'IMG',
54
+ 'VIDEO',
55
+ 'AUDIO',
56
+ 'CANVAS',
57
+ 'IFRAME',
58
+ 'INPUT',
59
+ 'TEXTAREA',
60
+ 'SELECT',
61
+ 'BR',
62
+ 'HR',
63
+ 'META',
64
+ 'LINK',
65
+ 'BASE',
66
+ 'COL',
67
+ 'SOURCE',
68
+ 'TRACK',
69
+ 'WBR',
70
+ 'AREA',
71
+ 'PARAM',
72
+ 'EMBED',
73
+ 'OBJECT'
74
+ ]);
75
+ /**
76
+ * Check if an element can have ::before / ::after pseudo-elements.
77
+ * Per the CSS spec, replaced elements and void elements cannot have pseudo-elements.
78
+ * SVG elements also do not support pseudo-elements.
79
+ */
80
+ const canHavePseudoElements = (element) => !(0, exports.isSVGElementNode)(element) && !VOID_OR_REPLACED_TAGS.has(element.tagName);
81
+ exports.canHavePseudoElements = canHavePseudoElements;
@@ -11,4 +11,3 @@ class CanvasElementContainer extends element_container_1.ElementContainer {
11
11
  }
12
12
  }
13
13
  exports.CanvasElementContainer = CanvasElementContainer;
14
- //# sourceMappingURL=canvas-element-container.js.map
@@ -36,4 +36,3 @@ class IFrameElementContainer extends element_container_1.ElementContainer {
36
36
  }
37
37
  }
38
38
  exports.IFrameElementContainer = IFrameElementContainer;
39
- //# sourceMappingURL=iframe-element-container.js.map
@@ -12,4 +12,3 @@ class ImageElementContainer extends element_container_1.ElementContainer {
12
12
  }
13
13
  }
14
14
  exports.ImageElementContainer = ImageElementContainer;
15
- //# sourceMappingURL=image-element-container.js.map
@@ -1,3 +1,2 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=index.js.map
@@ -87,4 +87,3 @@ class InputElementContainer extends element_container_1.ElementContainer {
87
87
  }
88
88
  }
89
89
  exports.InputElementContainer = InputElementContainer;
90
- //# sourceMappingURL=input-element-container.js.map
@@ -1 +0,0 @@
1
- //# sourceMappingURL=pseudo-elements.js.map
@@ -17,4 +17,3 @@ class SVGElementContainer extends element_container_1.ElementContainer {
17
17
  }
18
18
  }
19
19
  exports.SVGElementContainer = SVGElementContainer;
20
- //# sourceMappingURL=svg-element-container.js.map
@@ -5,6 +5,11 @@ const text_1 = require("../css/layout/text");
5
5
  class TextContainer {
6
6
  constructor(context, node, styles) {
7
7
  this.text = transform(node.data, styles.textTransform);
8
+ // Range offsets below are based on transformed text; keep the node in sync
9
+ // when casing changes string length, for example "ß".toUpperCase() === "SS".
10
+ if (this.text.length !== node.data.length) {
11
+ node.data = this.text;
12
+ }
8
13
  this.textBounds = (0, text_1.parseTextBounds)(context, this.text, styles, node);
9
14
  }
10
15
  }
@@ -28,4 +33,3 @@ const capitalize = (m, p1, p2) => {
28
33
  }
29
34
  return m;
30
35
  };
31
- //# sourceMappingURL=text-container.js.map
package/dist/lib/index.js CHANGED
@@ -1,14 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.IMAGE_RENDERING = exports.PerformanceMonitor = exports.createDefaultValidator = exports.Validator = exports.Html2CanvasConfig = exports.setCspNonce = exports.html2canvas = void 0;
4
- const bounds_1 = require("./css/layout/bounds");
5
- const color_1 = require("./css/types/color");
6
- const color_utilities_1 = require("./css/types/color-utilities");
7
- const document_cloner_1 = require("./dom/document-cloner");
8
- const node_parser_1 = require("./dom/node-parser");
9
- const canvas_renderer_1 = require("./render/canvas/canvas-renderer");
10
- const foreignobject_renderer_1 = require("./render/canvas/foreignobject-renderer");
11
- const context_1 = require("./core/context");
3
+ exports.IMAGE_RENDERING = exports.PerformanceMonitor = exports.createDefaultValidator = exports.Validator = exports.Html2CanvasConfig = exports.html2canvas = void 0;
12
4
  const config_1 = require("./config");
13
5
  Object.defineProperty(exports, "Html2CanvasConfig", { enumerable: true, get: function () { return config_1.Html2CanvasConfig; } });
14
6
  const validator_1 = require("./core/validator");
@@ -16,228 +8,58 @@ Object.defineProperty(exports, "createDefaultValidator", { enumerable: true, get
16
8
  Object.defineProperty(exports, "Validator", { enumerable: true, get: function () { return validator_1.Validator; } });
17
9
  const performance_monitor_1 = require("./core/performance-monitor");
18
10
  Object.defineProperty(exports, "PerformanceMonitor", { enumerable: true, get: function () { return performance_monitor_1.PerformanceMonitor; } });
11
+ const render_element_1 = require("./core/render-element");
19
12
  /**
20
- * Main html2canvas function with improved configuration management
13
+ * Renders an HTML element to a `<canvas>` element.
21
14
  *
22
- * @param element - Element to render
23
- * @param options - Rendering options
24
- * @param config - Optional configuration (for advanced use cases)
25
- * @returns Promise resolving to rendered canvas
15
+ * The function clones the target element and its subtree into a hidden iframe,
16
+ * resolves all computed styles, and paints the result onto a canvas —
17
+ * producing a visual snapshot of the DOM as it appears in the browser.
18
+ *
19
+ * @example
20
+ * ```ts
21
+ * import html2canvas from 'html2canvas-pro';
22
+ *
23
+ * const canvas = await html2canvas(document.body, {
24
+ * backgroundColor: '#ffffff',
25
+ * scale: 2,
26
+ * useCORS: true
27
+ * });
28
+ * document.body.appendChild(canvas);
29
+ * ```
30
+ *
31
+ * @param element - The root HTMLElement to render.
32
+ * @param options - Rendering options.
33
+ * @param config - Advanced configuration. In most cases this is auto-created;
34
+ * only pass it if you need to share a cache across multiple calls.
35
+ * @returns A promise that resolves to the rendered HTMLCanvasElement.
36
+ *
37
+ * @throws {Error} If the element is not attached to a document.
38
+ * @throws {DOMException} If an {@link Options.signal|AbortSignal} was provided and the operation was aborted.
26
39
  */
27
40
  const html2canvas = (element, options = {}, config) => {
28
- // Create configuration from element if not provided
29
41
  const finalConfig = config ||
30
42
  config_1.Html2CanvasConfig.fromElement(element, {
31
43
  cspNonce: options.cspNonce,
32
44
  cache: options.cache
33
45
  });
34
- return renderElement(element, options, finalConfig);
46
+ return (0, render_element_1.renderElement)(element, options, finalConfig);
35
47
  };
36
48
  exports.html2canvas = html2canvas;
37
49
  /**
38
- * Set CSP nonce for inline styles
39
- * @deprecated Use options.cspNonce instead
50
+ * Set CSP nonce for inline styles.
51
+ *
52
+ * @deprecated Since 2.0.0. Pass `cspNonce` in options instead:
53
+ * `html2canvas(element, { cspNonce: '...' })`
40
54
  */
41
55
  const setCspNonce = (nonce) => {
42
56
  console.warn('[html2canvas-pro] setCspNonce is deprecated. ' +
43
57
  'Pass cspNonce in options instead: html2canvas(element, { cspNonce: "..." })');
44
- // For backward compatibility, set default config
45
58
  if (typeof window !== 'undefined') {
46
59
  (0, config_1.setDefaultConfig)(new config_1.Html2CanvasConfig({ window, cspNonce: nonce }));
47
60
  }
48
61
  };
49
- exports.setCspNonce = setCspNonce;
50
62
  html2canvas.setCspNonce = setCspNonce;
51
63
  exports.default = html2canvas;
52
64
  var image_rendering_1 = require("./css/property-descriptors/image-rendering");
53
65
  Object.defineProperty(exports, "IMAGE_RENDERING", { enumerable: true, get: function () { return image_rendering_1.IMAGE_RENDERING; } });
54
- /**
55
- * Coerce number-like option values for backward compatibility (e.g. string "2" from form/query).
56
- * Mutates opts in place; callers should avoid reusing the same options object if they rely on original types.
57
- */
58
- const coerceNumberOptions = (opts) => {
59
- const numKeys = [
60
- 'scale',
61
- 'width',
62
- 'height',
63
- 'imageTimeout',
64
- 'x',
65
- 'y',
66
- 'windowWidth',
67
- 'windowHeight',
68
- 'scrollX',
69
- 'scrollY'
70
- ];
71
- numKeys.forEach((key) => {
72
- const v = opts[key];
73
- if (v !== undefined && v !== null && typeof v !== 'number') {
74
- const n = Number(v);
75
- if (!Number.isNaN(n)) {
76
- opts[key] = n;
77
- }
78
- }
79
- });
80
- };
81
- const renderElement = async (element, opts, config) => {
82
- coerceNumberOptions(opts);
83
- // Input validation (unless explicitly skipped)
84
- if (!opts.skipValidation) {
85
- const validator = opts.validator || (0, validator_1.createDefaultValidator)();
86
- // Validate element
87
- const elementValidation = validator.validateElement(element);
88
- if (!elementValidation.valid) {
89
- throw new Error(elementValidation.error);
90
- }
91
- // Validate options
92
- const optionsValidation = validator.validateOptions(opts);
93
- if (!optionsValidation.valid) {
94
- throw new Error(`Invalid options: ${optionsValidation.error}`);
95
- }
96
- }
97
- if (!element || typeof element !== 'object') {
98
- throw new Error('Invalid element provided as first argument');
99
- }
100
- const ownerDocument = element.ownerDocument;
101
- if (!ownerDocument) {
102
- throw new Error(`Element is not attached to a Document`);
103
- }
104
- const defaultView = ownerDocument.defaultView;
105
- if (!defaultView) {
106
- throw new Error(`Document is not attached to a Window`);
107
- }
108
- const resourceOptions = {
109
- allowTaint: opts.allowTaint ?? false,
110
- imageTimeout: opts.imageTimeout ?? 15000,
111
- proxy: opts.proxy,
112
- useCORS: opts.useCORS ?? false,
113
- customIsSameOrigin: opts.customIsSameOrigin
114
- };
115
- const contextOptions = {
116
- logging: opts.logging ?? true,
117
- cache: opts.cache ?? config.cache,
118
- ...resourceOptions
119
- };
120
- // Fallbacks for minimal window (e.g. element-like mocks) so we don't get NaN
121
- const DEFAULT_WINDOW_WIDTH = 800;
122
- const DEFAULT_WINDOW_HEIGHT = 600;
123
- const DEFAULT_SCROLL = 0;
124
- const win = defaultView;
125
- const windowOptions = {
126
- windowWidth: opts.windowWidth ?? win.innerWidth ?? DEFAULT_WINDOW_WIDTH,
127
- windowHeight: opts.windowHeight ?? win.innerHeight ?? DEFAULT_WINDOW_HEIGHT,
128
- scrollX: opts.scrollX ?? win.pageXOffset ?? DEFAULT_SCROLL,
129
- scrollY: opts.scrollY ?? win.pageYOffset ?? DEFAULT_SCROLL
130
- };
131
- const windowBounds = new bounds_1.Bounds(windowOptions.scrollX, windowOptions.scrollY, windowOptions.windowWidth, windowOptions.windowHeight);
132
- const context = new context_1.Context(contextOptions, windowBounds, config);
133
- // Initialize performance monitoring if enabled
134
- const performanceMonitoring = opts.enablePerformanceMonitoring ?? opts.logging ?? false;
135
- const perfMonitor = new performance_monitor_1.PerformanceMonitor(context, performanceMonitoring);
136
- perfMonitor.start('total', {
137
- width: windowOptions.windowWidth,
138
- height: windowOptions.windowHeight
139
- });
140
- const foreignObjectRendering = opts.foreignObjectRendering ?? false;
141
- const cloneOptions = {
142
- allowTaint: opts.allowTaint ?? false,
143
- onclone: opts.onclone,
144
- ignoreElements: opts.ignoreElements,
145
- iframeContainer: opts.iframeContainer,
146
- inlineImages: foreignObjectRendering,
147
- copyStyles: foreignObjectRendering,
148
- cspNonce: opts.cspNonce ?? config.cspNonce
149
- };
150
- context.logger.debug(`Starting document clone with size ${windowBounds.width}x${windowBounds.height} scrolled to ${-windowBounds.left},${-windowBounds.top}`);
151
- perfMonitor.start('clone');
152
- const documentCloner = new document_cloner_1.DocumentCloner(context, element, cloneOptions);
153
- const clonedElement = documentCloner.clonedReferenceElement;
154
- if (!clonedElement) {
155
- throw new Error('Unable to find element in cloned iframe');
156
- }
157
- const container = await documentCloner.toIFrame(ownerDocument, windowBounds);
158
- perfMonitor.end('clone');
159
- const { width, height, left, top } = (0, node_parser_1.isBodyElement)(clonedElement) || (0, node_parser_1.isHTMLElement)(clonedElement)
160
- ? (0, bounds_1.parseDocumentSize)(clonedElement.ownerDocument)
161
- : (0, bounds_1.parseBounds)(context, clonedElement);
162
- const backgroundColor = parseBackgroundColor(context, clonedElement, opts.backgroundColor);
163
- const renderOptions = {
164
- canvas: opts.canvas,
165
- backgroundColor,
166
- scale: opts.scale ?? defaultView.devicePixelRatio ?? 1,
167
- x: (opts.x ?? 0) + left,
168
- y: (opts.y ?? 0) + top,
169
- width: opts.width ?? Math.ceil(width),
170
- height: opts.height ?? Math.ceil(height),
171
- imageSmoothing: opts.imageSmoothing,
172
- imageSmoothingQuality: opts.imageSmoothingQuality
173
- };
174
- let canvas;
175
- let root;
176
- try {
177
- if (foreignObjectRendering) {
178
- context.logger.debug(`Document cloned, using foreign object rendering`);
179
- perfMonitor.start('render-foreignobject');
180
- const renderer = new foreignobject_renderer_1.ForeignObjectRenderer(context, renderOptions);
181
- canvas = await renderer.render(clonedElement);
182
- perfMonitor.end('render-foreignobject');
183
- }
184
- else {
185
- context.logger.debug(`Document cloned, element located at ${left},${top} with size ${width}x${height} using computed rendering`);
186
- context.logger.debug(`Starting DOM parsing`);
187
- perfMonitor.start('parse');
188
- root = (0, node_parser_1.parseTree)(context, clonedElement);
189
- perfMonitor.end('parse');
190
- if (backgroundColor === root.styles.backgroundColor) {
191
- root.styles.backgroundColor = color_1.COLORS.TRANSPARENT;
192
- }
193
- context.logger.debug(`Starting renderer for element at ${renderOptions.x},${renderOptions.y} with size ${renderOptions.width}x${renderOptions.height}`);
194
- perfMonitor.start('render');
195
- const renderer = new canvas_renderer_1.CanvasRenderer(context, renderOptions);
196
- canvas = await renderer.render(root);
197
- perfMonitor.end('render');
198
- }
199
- perfMonitor.start('cleanup');
200
- if (opts.removeContainer ?? true) {
201
- if (!document_cloner_1.DocumentCloner.destroy(container)) {
202
- context.logger.error(`Cannot detach cloned iframe as it is not in the DOM anymore`);
203
- }
204
- }
205
- perfMonitor.end('cleanup');
206
- perfMonitor.end('total');
207
- context.logger.debug(`Finished rendering`);
208
- // Log performance summary if monitoring is enabled
209
- if (performanceMonitoring) {
210
- perfMonitor.logSummary();
211
- }
212
- return canvas;
213
- }
214
- finally {
215
- // Restore DOM modifications (animations, transforms) in cloned document
216
- if (root) {
217
- root.restoreTree();
218
- }
219
- }
220
- };
221
- const parseBackgroundColor = (context, element, backgroundColorOverride) => {
222
- const ownerDocument = element.ownerDocument;
223
- // http://www.w3.org/TR/css3-background/#special-backgrounds
224
- const documentBackgroundColor = ownerDocument.documentElement
225
- ? (0, color_1.parseColor)(context, getComputedStyle(ownerDocument.documentElement).backgroundColor)
226
- : color_1.COLORS.TRANSPARENT;
227
- const bodyBackgroundColor = ownerDocument.body
228
- ? (0, color_1.parseColor)(context, getComputedStyle(ownerDocument.body).backgroundColor)
229
- : color_1.COLORS.TRANSPARENT;
230
- const defaultBackgroundColor = typeof backgroundColorOverride === 'string'
231
- ? (0, color_1.parseColor)(context, backgroundColorOverride)
232
- : backgroundColorOverride === null
233
- ? color_1.COLORS.TRANSPARENT
234
- : 0xffffffff;
235
- return element === ownerDocument.documentElement
236
- ? (0, color_utilities_1.isTransparent)(documentBackgroundColor)
237
- ? (0, color_utilities_1.isTransparent)(bodyBackgroundColor)
238
- ? defaultBackgroundColor
239
- : bodyBackgroundColor
240
- : documentBackgroundColor
241
- : defaultBackgroundColor;
242
- };
243
- //# sourceMappingURL=index.js.map
@@ -7,4 +7,3 @@ const invariant = (assertion, error) => {
7
7
  }
8
8
  };
9
9
  exports.invariant = invariant;
10
- //# sourceMappingURL=invariant.js.map
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -183,4 +183,3 @@ const calculateBackgroundRepeatPath = (repeat, [x, y], [width, height], backgrou
183
183
  }
184
184
  };
185
185
  exports.calculateBackgroundRepeatPath = calculateBackgroundRepeatPath;
186
- //# sourceMappingURL=background.js.map
@@ -32,4 +32,3 @@ class BezierCurve {
32
32
  exports.BezierCurve = BezierCurve;
33
33
  const isBezierCurve = (path) => path.type === 1 /* PathType.BEZIER_CURVE */;
34
34
  exports.isBezierCurve = isBezierCurve;
35
- //# sourceMappingURL=bezier-curve.js.map
@@ -102,4 +102,3 @@ const createPathFromCurves = (outer1, inner1, outer2, inner2) => {
102
102
  }
103
103
  return path;
104
104
  };
105
- //# sourceMappingURL=border.js.map
@@ -186,4 +186,3 @@ const calculatePaddingBoxPath = (curves) => {
186
186
  ];
187
187
  };
188
188
  exports.calculatePaddingBoxPath = calculatePaddingBoxPath;
189
- //# sourceMappingURL=bound-curves.js.map
@@ -18,4 +18,3 @@ const contentBox = (element) => {
18
18
  return bounds.add(paddingLeft + styles.borderLeftWidth, paddingTop + styles.borderTopWidth, -(styles.borderRightWidth + styles.borderLeftWidth + paddingLeft + paddingRight), -(styles.borderTopWidth + styles.borderBottomWidth + paddingTop + paddingBottom));
19
19
  };
20
20
  exports.contentBox = contentBox;
21
- //# sourceMappingURL=box-sizing.js.map