@ohos-ports/html2canvas-pro 0.0.0-stage → 2.3.2-beta.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 (344) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +86 -2
  3. package/dist/html2canvas-pro.cjs +11191 -0
  4. package/dist/html2canvas-pro.cjs.map +1 -0
  5. package/dist/html2canvas-pro.esm.js +11182 -0
  6. package/dist/html2canvas-pro.esm.js.map +1 -0
  7. package/dist/html2canvas-pro.js +11196 -0
  8. package/dist/html2canvas-pro.js.map +1 -0
  9. package/dist/html2canvas-pro.min.js +10 -0
  10. package/dist/lib/config.js +49 -0
  11. package/dist/lib/core/abort-helper.js +20 -0
  12. package/dist/lib/core/background-parser.js +41 -0
  13. package/dist/lib/core/bitwise.js +5 -0
  14. package/dist/lib/core/cache-storage.js +268 -0
  15. package/dist/lib/core/config-assembler.js +88 -0
  16. package/dist/lib/core/constants.js +25 -0
  17. package/dist/lib/core/context.js +19 -0
  18. package/dist/lib/core/debugger.js +27 -0
  19. package/dist/lib/core/features.js +190 -0
  20. package/dist/lib/core/logger.js +56 -0
  21. package/dist/lib/core/lru-map.js +66 -0
  22. package/dist/lib/core/origin-checker.js +53 -0
  23. package/dist/lib/core/performance-monitor.js +185 -0
  24. package/dist/lib/core/render-element.js +132 -0
  25. package/dist/lib/core/util.js +4 -0
  26. package/dist/lib/core/validator.js +500 -0
  27. package/dist/lib/css/grouped/background-styles.js +36 -0
  28. package/dist/lib/css/grouped/border-styles.js +75 -0
  29. package/dist/lib/css/grouped/font-styles.js +93 -0
  30. package/dist/lib/css/grouped/layout-styles.js +127 -0
  31. package/dist/lib/css/index.js +330 -0
  32. package/dist/lib/css/layout/bounds.js +52 -0
  33. package/dist/lib/css/layout/text.js +133 -0
  34. package/dist/lib/css/property-descriptor.js +2 -0
  35. package/dist/lib/css/property-descriptors/background-blend-mode.js +41 -0
  36. package/dist/lib/css/property-descriptors/background-clip.js +23 -0
  37. package/dist/lib/css/property-descriptors/background-color.js +10 -0
  38. package/dist/lib/css/property-descriptors/background-image.js +24 -0
  39. package/dist/lib/css/property-descriptors/background-origin.js +23 -0
  40. package/dist/lib/css/property-descriptors/background-position.js +19 -0
  41. package/dist/lib/css/property-descriptors/background-repeat.js +33 -0
  42. package/dist/lib/css/property-descriptors/background-size.js +23 -0
  43. package/dist/lib/css/property-descriptors/border-color.js +14 -0
  44. package/dist/lib/css/property-descriptors/border-image-repeat.js +42 -0
  45. package/dist/lib/css/property-descriptors/border-image-slice.js +45 -0
  46. package/dist/lib/css/property-descriptors/border-image-source.js +22 -0
  47. package/dist/lib/css/property-descriptors/border-radius.js +15 -0
  48. package/dist/lib/css/property-descriptors/border-style.js +26 -0
  49. package/dist/lib/css/property-descriptors/border-width.js +20 -0
  50. package/dist/lib/css/property-descriptors/box-decoration-break.js +18 -0
  51. package/dist/lib/css/property-descriptors/box-shadow.js +54 -0
  52. package/dist/lib/css/property-descriptors/clip-path.js +189 -0
  53. package/dist/lib/css/property-descriptors/color.js +10 -0
  54. package/dist/lib/css/property-descriptors/content.js +19 -0
  55. package/dist/lib/css/property-descriptors/counter-increment.js +35 -0
  56. package/dist/lib/css/property-descriptors/counter-reset.js +18 -0
  57. package/dist/lib/css/property-descriptors/direction.js +18 -0
  58. package/dist/lib/css/property-descriptors/display.js +81 -0
  59. package/dist/lib/css/property-descriptors/duration.js +14 -0
  60. package/dist/lib/css/property-descriptors/filter.js +76 -0
  61. package/dist/lib/css/property-descriptors/float.js +22 -0
  62. package/dist/lib/css/property-descriptors/font-family.js +32 -0
  63. package/dist/lib/css/property-descriptors/font-size.js +10 -0
  64. package/dist/lib/css/property-descriptors/font-style.js +20 -0
  65. package/dist/lib/css/property-descriptors/font-variant-ligatures.js +34 -0
  66. package/dist/lib/css/property-descriptors/font-variant.js +13 -0
  67. package/dist/lib/css/property-descriptors/font-weight.js +25 -0
  68. package/dist/lib/css/property-descriptors/image-rendering.js +33 -0
  69. package/dist/lib/css/property-descriptors/letter-spacing.js +21 -0
  70. package/dist/lib/css/property-descriptors/line-break.js +23 -0
  71. package/dist/lib/css/property-descriptors/line-height.js +24 -0
  72. package/dist/lib/css/property-descriptors/list-style-image.js +17 -0
  73. package/dist/lib/css/property-descriptors/list-style-position.js +18 -0
  74. package/dist/lib/css/property-descriptors/list-style-type.js +122 -0
  75. package/dist/lib/css/property-descriptors/margin.js +13 -0
  76. package/dist/lib/css/property-descriptors/mix-blend-mode.js +31 -0
  77. package/dist/lib/css/property-descriptors/object-fit.js +28 -0
  78. package/dist/lib/css/property-descriptors/object-position.js +42 -0
  79. package/dist/lib/css/property-descriptors/opacity.js +16 -0
  80. package/dist/lib/css/property-descriptors/overflow-wrap.js +18 -0
  81. package/dist/lib/css/property-descriptors/overflow.js +27 -0
  82. package/dist/lib/css/property-descriptors/padding.js +14 -0
  83. package/dist/lib/css/property-descriptors/paint-order.js +33 -0
  84. package/dist/lib/css/property-descriptors/position.js +22 -0
  85. package/dist/lib/css/property-descriptors/quotes.js +41 -0
  86. package/dist/lib/css/property-descriptors/rotate.js +27 -0
  87. package/dist/lib/css/property-descriptors/text-align.js +21 -0
  88. package/dist/lib/css/property-descriptors/text-decoration-color.js +10 -0
  89. package/dist/lib/css/property-descriptors/text-decoration-line.js +28 -0
  90. package/dist/lib/css/property-descriptors/text-decoration-style.js +24 -0
  91. package/dist/lib/css/property-descriptors/text-decoration-thickness.js +26 -0
  92. package/dist/lib/css/property-descriptors/text-overflow.js +18 -0
  93. package/dist/lib/css/property-descriptors/text-shadow.js +46 -0
  94. package/dist/lib/css/property-descriptors/text-transform.js +20 -0
  95. package/dist/lib/css/property-descriptors/text-underline-offset.js +23 -0
  96. package/dist/lib/css/property-descriptors/transform-origin.js +24 -0
  97. package/dist/lib/css/property-descriptors/transform.js +57 -0
  98. package/dist/lib/css/property-descriptors/visibility.js +20 -0
  99. package/dist/lib/css/property-descriptors/webkit-line-clamp.js +26 -0
  100. package/dist/lib/css/property-descriptors/webkit-text-stroke-color.js +10 -0
  101. package/dist/lib/css/property-descriptors/webkit-text-stroke-width.js +16 -0
  102. package/dist/lib/css/property-descriptors/word-break.js +26 -0
  103. package/dist/lib/css/property-descriptors/writing-mode.js +28 -0
  104. package/dist/lib/css/property-descriptors/z-index.js +19 -0
  105. package/dist/lib/css/property-descriptors/zoom.js +18 -0
  106. package/dist/lib/css/syntax/parser.js +140 -0
  107. package/dist/lib/css/syntax/token-constants.js +214 -0
  108. package/dist/lib/css/syntax/token-singletons.js +36 -0
  109. package/dist/lib/css/syntax/token-types.js +10 -0
  110. package/dist/lib/css/syntax/tokenizer.js +502 -0
  111. package/dist/lib/css/type-descriptor.js +2 -0
  112. package/dist/lib/css/types/angle.js +80 -0
  113. package/dist/lib/css/types/color-math.js +25 -0
  114. package/dist/lib/css/types/color-spaces/a98.js +78 -0
  115. package/dist/lib/css/types/color-spaces/p3.js +86 -0
  116. package/dist/lib/css/types/color-spaces/pro-photo.js +83 -0
  117. package/dist/lib/css/types/color-spaces/rec2020.js +85 -0
  118. package/dist/lib/css/types/color-spaces/srgb.js +79 -0
  119. package/dist/lib/css/types/color-utilities.js +342 -0
  120. package/dist/lib/css/types/color.js +400 -0
  121. package/dist/lib/css/types/functions/-prefix-linear-gradient.js +32 -0
  122. package/dist/lib/css/types/functions/-prefix-radial-gradient.js +83 -0
  123. package/dist/lib/css/types/functions/-webkit-gradient.js +59 -0
  124. package/dist/lib/css/types/functions/counter.js +367 -0
  125. package/dist/lib/css/types/functions/gradient.js +163 -0
  126. package/dist/lib/css/types/functions/linear-gradient.js +27 -0
  127. package/dist/lib/css/types/functions/radial-gradient.js +90 -0
  128. package/dist/lib/css/types/functions/repeating-linear-gradient.js +9 -0
  129. package/dist/lib/css/types/image.js +62 -0
  130. package/dist/lib/css/types/index.js +2 -0
  131. package/dist/lib/css/types/length-percentage.js +197 -0
  132. package/dist/lib/css/types/length.js +5 -0
  133. package/dist/lib/css/types/safe-eval.js +80 -0
  134. package/dist/lib/css/types/time.js +17 -0
  135. package/dist/lib/dom/document-cloner.js +597 -0
  136. package/dist/lib/dom/dom-normalizer.js +115 -0
  137. package/dist/lib/dom/element-container.js +56 -0
  138. package/dist/lib/dom/elements/li-element-container.js +11 -0
  139. package/dist/lib/dom/elements/ol-element-container.js +12 -0
  140. package/dist/lib/dom/elements/select-element-container.js +12 -0
  141. package/dist/lib/dom/elements/textarea-element-container.js +11 -0
  142. package/dist/lib/dom/node-parser.js +112 -0
  143. package/dist/lib/dom/node-type-guards.js +81 -0
  144. package/dist/lib/dom/replaced-elements/canvas-element-container.js +13 -0
  145. package/dist/lib/dom/replaced-elements/iframe-element-container.js +38 -0
  146. package/dist/lib/dom/replaced-elements/image-element-container.js +14 -0
  147. package/dist/lib/dom/replaced-elements/index.js +2 -0
  148. package/dist/lib/dom/replaced-elements/input-element-container.js +89 -0
  149. package/dist/lib/dom/replaced-elements/svg-element-container.js +19 -0
  150. package/dist/lib/dom/slot-cloner.js +176 -0
  151. package/dist/lib/dom/text-container.js +35 -0
  152. package/dist/lib/index.js +49 -0
  153. package/dist/lib/options.js +2 -0
  154. package/dist/lib/render/background.js +188 -0
  155. package/dist/lib/render/bezier-curve.js +34 -0
  156. package/dist/lib/render/border.js +104 -0
  157. package/dist/lib/render/bound-curves.js +188 -0
  158. package/dist/lib/render/box-sizing.js +20 -0
  159. package/dist/lib/render/canvas/background-renderer.js +327 -0
  160. package/dist/lib/render/canvas/border-image-renderer.js +153 -0
  161. package/dist/lib/render/canvas/border-renderer.js +184 -0
  162. package/dist/lib/render/canvas/canvas-path.js +25 -0
  163. package/dist/lib/render/canvas/canvas-renderer.js +312 -0
  164. package/dist/lib/render/canvas/content-renderer.js +204 -0
  165. package/dist/lib/render/canvas/effects-renderer.js +171 -0
  166. package/dist/lib/render/canvas/font-utils.js +29 -0
  167. package/dist/lib/render/canvas/foreignobject-renderer.js +38 -0
  168. package/dist/lib/render/canvas/text/text-decoration-renderer.js +99 -0
  169. package/dist/lib/render/canvas/text-renderer.js +485 -0
  170. package/dist/lib/render/effects.js +231 -0
  171. package/dist/lib/render/font-metrics.js +53 -0
  172. package/dist/lib/render/object-fit.js +91 -0
  173. package/dist/lib/render/path.js +26 -0
  174. package/dist/lib/render/renderer-interface.js +2 -0
  175. package/dist/lib/render/stacking-context.js +340 -0
  176. package/dist/lib/render/vector.js +16 -0
  177. package/dist/types/config.d.ts +44 -0
  178. package/dist/types/core/abort-helper.d.ts +12 -0
  179. package/dist/types/core/background-parser.d.ts +16 -0
  180. package/dist/types/core/bitwise.d.ts +1 -0
  181. package/dist/types/core/cache-storage.d.ts +68 -0
  182. package/dist/types/core/config-assembler.d.ts +28 -0
  183. package/dist/types/core/constants.d.ts +22 -0
  184. package/dist/types/core/context.d.ts +22 -0
  185. package/dist/types/core/debugger.d.ts +8 -0
  186. package/dist/types/core/features.d.ts +12 -0
  187. package/dist/types/core/logger.d.ts +18 -0
  188. package/dist/types/core/lru-map.d.ts +37 -0
  189. package/dist/types/core/origin-checker.d.ts +33 -0
  190. package/dist/types/core/performance-monitor.d.ts +120 -0
  191. package/dist/types/core/render-element.d.ts +3 -0
  192. package/dist/types/core/util.d.ts +1 -0
  193. package/dist/types/core/validator.d.ts +130 -0
  194. package/dist/types/css/grouped/background-styles.d.ts +16 -0
  195. package/dist/types/css/grouped/border-styles.d.ts +31 -0
  196. package/dist/types/css/grouped/font-styles.d.ts +35 -0
  197. package/dist/types/css/grouped/layout-styles.d.ts +46 -0
  198. package/dist/types/css/index.d.ts +185 -0
  199. package/dist/types/css/layout/bounds.d.ts +14 -0
  200. package/dist/types/css/layout/text.d.ts +10 -0
  201. package/dist/types/css/property-descriptor.d.ts +40 -0
  202. package/dist/types/css/property-descriptors/background-blend-mode.d.ts +23 -0
  203. package/dist/types/css/property-descriptors/background-clip.d.ts +8 -0
  204. package/dist/types/css/property-descriptors/background-color.d.ts +2 -0
  205. package/dist/types/css/property-descriptors/background-image.d.ts +3 -0
  206. package/dist/types/css/property-descriptors/background-origin.d.ts +8 -0
  207. package/dist/types/css/property-descriptors/background-position.d.ts +5 -0
  208. package/dist/types/css/property-descriptors/background-repeat.d.ts +9 -0
  209. package/dist/types/css/property-descriptors/background-size.d.ts +11 -0
  210. package/dist/types/css/property-descriptors/border-color.d.ts +5 -0
  211. package/dist/types/css/property-descriptors/border-image-repeat.d.ts +12 -0
  212. package/dist/types/css/property-descriptors/border-image-slice.d.ts +10 -0
  213. package/dist/types/css/property-descriptors/border-image-source.d.ts +4 -0
  214. package/dist/types/css/property-descriptors/border-radius.d.ts +7 -0
  215. package/dist/types/css/property-descriptors/border-style.d.ts +12 -0
  216. package/dist/types/css/property-descriptors/border-width.d.ts +5 -0
  217. package/dist/types/css/property-descriptors/box-decoration-break.d.ts +6 -0
  218. package/dist/types/css/property-descriptors/box-shadow.d.ts +14 -0
  219. package/dist/types/css/property-descriptors/clip-path.d.ts +62 -0
  220. package/dist/types/css/property-descriptors/color.d.ts +2 -0
  221. package/dist/types/css/property-descriptors/content.d.ts +4 -0
  222. package/dist/types/css/property-descriptors/counter-increment.d.ts +10 -0
  223. package/dist/types/css/property-descriptors/counter-reset.d.ts +7 -0
  224. package/dist/types/css/property-descriptors/direction.d.ts +6 -0
  225. package/dist/types/css/property-descriptors/display.d.ts +35 -0
  226. package/dist/types/css/property-descriptors/duration.d.ts +2 -0
  227. package/dist/types/css/property-descriptors/filter.d.ts +3 -0
  228. package/dist/types/css/property-descriptors/float.d.ts +9 -0
  229. package/dist/types/css/property-descriptors/font-family.d.ts +4 -0
  230. package/dist/types/css/property-descriptors/font-size.d.ts +2 -0
  231. package/dist/types/css/property-descriptors/font-style.d.ts +7 -0
  232. package/dist/types/css/property-descriptors/font-variant-ligatures.d.ts +14 -0
  233. package/dist/types/css/property-descriptors/font-variant.d.ts +2 -0
  234. package/dist/types/css/property-descriptors/font-weight.d.ts +2 -0
  235. package/dist/types/css/property-descriptors/image-rendering.d.ts +8 -0
  236. package/dist/types/css/property-descriptors/letter-spacing.d.ts +2 -0
  237. package/dist/types/css/property-descriptors/line-break.d.ts +6 -0
  238. package/dist/types/css/property-descriptors/line-height.d.ts +4 -0
  239. package/dist/types/css/property-descriptors/list-style-image.d.ts +3 -0
  240. package/dist/types/css/property-descriptors/list-style-position.d.ts +6 -0
  241. package/dist/types/css/property-descriptors/list-style-type.d.ts +58 -0
  242. package/dist/types/css/property-descriptors/margin.d.ts +5 -0
  243. package/dist/types/css/property-descriptors/mix-blend-mode.d.ts +21 -0
  244. package/dist/types/css/property-descriptors/object-fit.d.ts +10 -0
  245. package/dist/types/css/property-descriptors/object-position.d.ts +4 -0
  246. package/dist/types/css/property-descriptors/opacity.d.ts +2 -0
  247. package/dist/types/css/property-descriptors/overflow-wrap.d.ts +6 -0
  248. package/dist/types/css/property-descriptors/overflow.d.ts +9 -0
  249. package/dist/types/css/property-descriptors/padding.d.ts +5 -0
  250. package/dist/types/css/property-descriptors/paint-order.d.ts +8 -0
  251. package/dist/types/css/property-descriptors/position.d.ts +9 -0
  252. package/dist/types/css/property-descriptors/quotes.d.ts +8 -0
  253. package/dist/types/css/property-descriptors/rotate.d.ts +3 -0
  254. package/dist/types/css/property-descriptors/text-align.d.ts +7 -0
  255. package/dist/types/css/property-descriptors/text-decoration-color.d.ts +2 -0
  256. package/dist/types/css/property-descriptors/text-decoration-line.d.ts +10 -0
  257. package/dist/types/css/property-descriptors/text-decoration-style.d.ts +9 -0
  258. package/dist/types/css/property-descriptors/text-decoration-thickness.d.ts +3 -0
  259. package/dist/types/css/property-descriptors/text-overflow.d.ts +6 -0
  260. package/dist/types/css/property-descriptors/text-shadow.d.ts +12 -0
  261. package/dist/types/css/property-descriptors/text-transform.d.ts +8 -0
  262. package/dist/types/css/property-descriptors/text-underline-offset.d.ts +3 -0
  263. package/dist/types/css/property-descriptors/transform-origin.d.ts +4 -0
  264. package/dist/types/css/property-descriptors/transform.d.ts +4 -0
  265. package/dist/types/css/property-descriptors/visibility.d.ts +7 -0
  266. package/dist/types/css/property-descriptors/webkit-line-clamp.d.ts +7 -0
  267. package/dist/types/css/property-descriptors/webkit-text-stroke-color.d.ts +2 -0
  268. package/dist/types/css/property-descriptors/webkit-text-stroke-width.d.ts +2 -0
  269. package/dist/types/css/property-descriptors/word-break.d.ts +7 -0
  270. package/dist/types/css/property-descriptors/writing-mode.d.ts +11 -0
  271. package/dist/types/css/property-descriptors/z-index.d.ts +7 -0
  272. package/dist/types/css/property-descriptors/zoom.d.ts +3 -0
  273. package/dist/types/css/syntax/parser.d.ts +34 -0
  274. package/dist/types/css/syntax/token-constants.d.ts +74 -0
  275. package/dist/types/css/syntax/token-singletons.d.ts +22 -0
  276. package/dist/types/css/syntax/token-types.d.ts +72 -0
  277. package/dist/types/css/syntax/tokenizer.d.ts +32 -0
  278. package/dist/types/css/type-descriptor.d.ts +6 -0
  279. package/dist/types/css/types/angle.d.ts +7 -0
  280. package/dist/types/css/types/color-math.d.ts +12 -0
  281. package/dist/types/css/types/color-spaces/a98.d.ts +39 -0
  282. package/dist/types/css/types/color-spaces/p3.d.ts +45 -0
  283. package/dist/types/css/types/color-spaces/pro-photo.d.ts +45 -0
  284. package/dist/types/css/types/color-spaces/rec2020.d.ts +45 -0
  285. package/dist/types/css/types/color-spaces/srgb.d.ts +38 -0
  286. package/dist/types/css/types/color-utilities.d.ts +107 -0
  287. package/dist/types/css/types/color.d.ts +8 -0
  288. package/dist/types/css/types/functions/-prefix-linear-gradient.d.ts +4 -0
  289. package/dist/types/css/types/functions/-prefix-radial-gradient.d.ts +4 -0
  290. package/dist/types/css/types/functions/-webkit-gradient.d.ts +4 -0
  291. package/dist/types/css/types/functions/counter.d.ts +10 -0
  292. package/dist/types/css/types/functions/gradient.d.ts +7 -0
  293. package/dist/types/css/types/functions/linear-gradient.d.ts +4 -0
  294. package/dist/types/css/types/functions/radial-gradient.d.ts +12 -0
  295. package/dist/types/css/types/functions/repeating-linear-gradient.d.ts +4 -0
  296. package/dist/types/css/types/image.d.ts +56 -0
  297. package/dist/types/css/types/index.d.ts +1 -0
  298. package/dist/types/css/types/length-percentage.d.ts +62 -0
  299. package/dist/types/css/types/length.d.ts +4 -0
  300. package/dist/types/css/types/safe-eval.d.ts +8 -0
  301. package/dist/types/css/types/time.d.ts +2 -0
  302. package/dist/types/dom/document-cloner.d.ts +57 -0
  303. package/dist/types/dom/dom-normalizer.d.ts +62 -0
  304. package/dist/types/dom/element-container.d.ts +31 -0
  305. package/dist/types/dom/elements/li-element-container.d.ts +6 -0
  306. package/dist/types/dom/elements/ol-element-container.d.ts +7 -0
  307. package/dist/types/dom/elements/select-element-container.d.ts +6 -0
  308. package/dist/types/dom/elements/textarea-element-container.d.ts +6 -0
  309. package/dist/types/dom/node-parser.d.ts +3 -0
  310. package/dist/types/dom/node-type-guards.d.ts +32 -0
  311. package/dist/types/dom/replaced-elements/canvas-element-container.d.ts +8 -0
  312. package/dist/types/dom/replaced-elements/iframe-element-container.d.ts +14 -0
  313. package/dist/types/dom/replaced-elements/image-element-container.d.ts +8 -0
  314. package/dist/types/dom/replaced-elements/index.d.ts +4 -0
  315. package/dist/types/dom/replaced-elements/input-element-container.d.ts +14 -0
  316. package/dist/types/dom/replaced-elements/svg-element-container.d.ts +8 -0
  317. package/dist/types/dom/slot-cloner.d.ts +66 -0
  318. package/dist/types/dom/text-container.d.ts +8 -0
  319. package/dist/types/index.d.ts +36 -0
  320. package/dist/types/options.d.ts +62 -0
  321. package/dist/types/render/background.d.ts +16 -0
  322. package/dist/types/render/bezier-curve.d.ts +14 -0
  323. package/dist/types/render/border.d.ts +6 -0
  324. package/dist/types/render/bound-curves.d.ts +32 -0
  325. package/dist/types/render/box-sizing.d.ts +4 -0
  326. package/dist/types/render/canvas/background-renderer.d.ts +94 -0
  327. package/dist/types/render/canvas/border-image-renderer.d.ts +18 -0
  328. package/dist/types/render/canvas/border-renderer.d.ts +67 -0
  329. package/dist/types/render/canvas/canvas-path.d.ts +3 -0
  330. package/dist/types/render/canvas/canvas-renderer.d.ts +60 -0
  331. package/dist/types/render/canvas/content-renderer.d.ts +43 -0
  332. package/dist/types/render/canvas/effects-renderer.d.ts +90 -0
  333. package/dist/types/render/canvas/font-utils.d.ts +19 -0
  334. package/dist/types/render/canvas/foreignobject-renderer.d.ts +10 -0
  335. package/dist/types/render/canvas/text/text-decoration-renderer.d.ts +18 -0
  336. package/dist/types/render/canvas/text-renderer.d.ts +103 -0
  337. package/dist/types/render/effects.d.ts +112 -0
  338. package/dist/types/render/font-metrics.d.ts +11 -0
  339. package/dist/types/render/object-fit.d.ts +19 -0
  340. package/dist/types/render/path.d.ts +13 -0
  341. package/dist/types/render/renderer-interface.d.ts +28 -0
  342. package/dist/types/render/stacking-context.d.ts +49 -0
  343. package/dist/types/render/vector.d.ts +9 -0
  344. package/package.json +139 -4
@@ -0,0 +1,66 @@
1
+ import { Context } from '../core/context';
2
+ /** Options subset needed by SlotCloner */
3
+ export interface SlotClonerOptions {
4
+ ignoreElements?: (element: Element) => boolean;
5
+ copyStyles: boolean;
6
+ }
7
+ /** Exported for reuse in document-cloner.ts */
8
+ export declare const IGNORE_ATTRIBUTE = "data-html2canvas-ignore";
9
+ /**
10
+ * Handles shadow DOM child cloning, slot assignment, and light DOM traversal.
11
+ * Extracted from DocumentCloner to reduce file size and improve separation of concerns.
12
+ */
13
+ export declare class SlotCloner {
14
+ private readonly cloneNodeFn;
15
+ private readonly options;
16
+ private readonly context;
17
+ constructor(cloneNodeFn: (node: Node, copyStyles: boolean) => Node, options: SlotClonerOptions, context: Context);
18
+ appendChildNode(clone: HTMLElement | SVGElement, child: Node, copyStyles: boolean): void;
19
+ /**
20
+ * Clone child nodes from source element to clone element.
21
+ * Handles shadow DOM, slots, and light DOM appropriately.
22
+ */
23
+ cloneChildNodes(node: Element, clone: HTMLElement | SVGElement, copyStyles: boolean): void;
24
+ /**
25
+ * Check if a child node should be cloned based on filtering rules.
26
+ * Filters out: scripts, ignored elements, and optionally styles.
27
+ */
28
+ private shouldCloneChild;
29
+ /**
30
+ * Check if a style element should be cloned based on copyStyles option.
31
+ */
32
+ private shouldCloneStyleElement;
33
+ /**
34
+ * Safely append a cloned child to a target, applying all filtering rules.
35
+ */
36
+ private safeAppendClonedChild;
37
+ /**
38
+ * Clone assigned nodes from a slot element to the target.
39
+ */
40
+ private cloneAssignedNodes;
41
+ /**
42
+ * Clone fallback content from a slot element when no nodes are assigned.
43
+ */
44
+ private cloneSlotFallbackContent;
45
+ /**
46
+ * Handle cloning of a slot element, including assigned nodes or fallback content.
47
+ */
48
+ private cloneSlotElement;
49
+ /**
50
+ * Clone shadow DOM children to the target shadow root.
51
+ */
52
+ private cloneShadowDOMChildren;
53
+ /**
54
+ * Clone light DOM children to the target element.
55
+ */
56
+ private cloneLightDOMChildren;
57
+ /**
58
+ * Clone slot element as light DOM when shadow root creation failed.
59
+ */
60
+ private cloneSlotElementAsLightDOM;
61
+ /**
62
+ * Clone shadow DOM content as light DOM when shadow root creation failed.
63
+ * This is a fallback mechanism to ensure content is not lost.
64
+ */
65
+ private cloneShadowDOMAsLightDOM;
66
+ }
@@ -0,0 +1,8 @@
1
+ import { CSSParsedDeclaration } from '../css/index';
2
+ import { TextBounds } from '../css/layout/text';
3
+ import { Context } from '../core/context';
4
+ export declare class TextContainer {
5
+ text: string;
6
+ textBounds: TextBounds[];
7
+ constructor(context: Context, node: Text, styles: CSSParsedDeclaration);
8
+ }
@@ -0,0 +1,36 @@
1
+ import { Html2CanvasConfig, type ConfigOptions } from './config';
2
+ import { createDefaultValidator, Validator, type ValidationResult } from './core/validator';
3
+ import { PerformanceMonitor } from './core/performance-monitor';
4
+ import type { Options } from './options';
5
+ export type { Options };
6
+ /**
7
+ * Renders an HTML element to a `<canvas>` element.
8
+ *
9
+ * The function clones the target element and its subtree into a hidden iframe,
10
+ * resolves all computed styles, and paints the result onto a canvas —
11
+ * producing a visual snapshot of the DOM as it appears in the browser.
12
+ *
13
+ * @example
14
+ * ```ts
15
+ * import html2canvas from 'html2canvas-pro';
16
+ *
17
+ * const canvas = await html2canvas(document.body, {
18
+ * backgroundColor: '#ffffff',
19
+ * scale: 2,
20
+ * useCORS: true
21
+ * });
22
+ * document.body.appendChild(canvas);
23
+ * ```
24
+ *
25
+ * @param element - The root HTMLElement to render.
26
+ * @param options - Rendering options.
27
+ * @param config - Advanced configuration. In most cases this is auto-created;
28
+ * only pass it if you need to share a cache across multiple calls.
29
+ * @returns A promise that resolves to the rendered HTMLCanvasElement.
30
+ *
31
+ * @throws {Error} If the element is not attached to a document.
32
+ * @throws {DOMException} If an {@link Options.signal|AbortSignal} was provided and the operation was aborted.
33
+ */
34
+ declare const html2canvas: (element: HTMLElement, options?: Partial<Options>, config?: Html2CanvasConfig) => Promise<HTMLCanvasElement>;
35
+ export default html2canvas;
36
+ export { html2canvas, Html2CanvasConfig, ConfigOptions, Validator, ValidationResult, createDefaultValidator, PerformanceMonitor };
@@ -0,0 +1,62 @@
1
+ import { CloneOptions, WindowOptions } from './dom/document-cloner';
2
+ import { RenderOptions } from './render/canvas/canvas-renderer';
3
+ import { ContextOptions } from './core/context';
4
+ import { Validator } from './core/validator';
5
+ /**
6
+ * Options passed to {@link html2canvas}.
7
+ *
8
+ * Combines clone, window, render, and context configuration into a single
9
+ * options object. All properties are optional.
10
+ */
11
+ export type Options = CloneOptions & WindowOptions & RenderOptions & ContextOptions & {
12
+ /** Background color for the resulting canvas. Use `null` for transparent. */
13
+ backgroundColor: string | null;
14
+ /** Use foreignObject rendering (SVG-based) instead of the default Canvas 2D pipeline. */
15
+ foreignObjectRendering: boolean;
16
+ /** Whether to remove the cloned iframe after rendering. @default true */
17
+ removeContainer?: boolean;
18
+ /** CSP nonce for inline style elements. */
19
+ cspNonce?: string;
20
+ /** Custom input validator. */
21
+ validator?: Validator;
22
+ /** Skip pre-render validation of element and options. */
23
+ skipValidation?: boolean;
24
+ /** Enable performance monitoring and log a timing summary. */
25
+ enablePerformanceMonitoring?: boolean;
26
+ /**
27
+ * An AbortSignal that can be used to cancel an in-progress render.
28
+ * When the signal is aborted, the returned promise rejects with an
29
+ * `AbortError` DOMException.
30
+ */
31
+ signal?: AbortSignal;
32
+ /**
33
+ * Enable/disable image smoothing (anti-aliasing) globally.
34
+ * - `false`: Pixel-perfect rendering for pixel art, sprites, and retro graphics
35
+ * - `true`: Smooth rendering for photos and high-quality images
36
+ * - CSS `image-rendering` property on individual elements takes precedence
37
+ * @default true (browser default)
38
+ */
39
+ imageSmoothing?: boolean;
40
+ /**
41
+ * Image smoothing quality level when imageSmoothing is enabled.
42
+ * - `'low'`: Faster, lower quality (good for preview)
43
+ * - `'medium'`: Balanced (default in most browsers)
44
+ * - `'high'`: Slower, best quality (good for final export)
45
+ *
46
+ * Browser support: Chrome 54+, Firefox 94+, Safari 17+
47
+ * Falls back gracefully in older browsers.
48
+ * @default browser default (usually 'low' or 'medium')
49
+ */
50
+ imageSmoothingQuality?: 'low' | 'medium' | 'high';
51
+ /**
52
+ * Called when a resource fails to load (image, font, iframe, etc.).
53
+ * The render continues — this is a notification hook, not an abort.
54
+ */
55
+ onError?: (error: Error) => void;
56
+ /**
57
+ * Called at key milestones during the render pipeline.
58
+ * `phase` is one of: 'clone', 'parse', 'layout', 'render'.
59
+ * `progress` is 0..100 percentage estimate.
60
+ */
61
+ onProgress?: (phase: string, progress: number) => void;
62
+ };
@@ -0,0 +1,16 @@
1
+ import { Bounds } from '../css/layout/bounds';
2
+ import { BACKGROUND_ORIGIN } from '../css/property-descriptors/background-origin';
3
+ import { ElementContainer } from '../dom/element-container';
4
+ import { BackgroundSizeInfo } from '../css/property-descriptors/background-size';
5
+ import { Vector } from './vector';
6
+ import { BACKGROUND_REPEAT } from '../css/property-descriptors/background-repeat';
7
+ import { CSSValue } from '../css/syntax/parser';
8
+ import { Path } from './path';
9
+ import { BACKGROUND_CLIP } from '../css/property-descriptors/background-clip';
10
+ export declare const calculateBackgroundPositioningArea: (backgroundOrigin: BACKGROUND_ORIGIN, element: ElementContainer) => Bounds;
11
+ export declare const calculateBackgroundPaintingArea: (backgroundClip: BACKGROUND_CLIP, element: ElementContainer) => Bounds;
12
+ export declare const calculateBackgroundRendering: (container: ElementContainer, index: number, intrinsicSize: [number | null, number | null, number | null]) => [Path[], number, number, number, number];
13
+ export declare const isAuto: (token: CSSValue) => boolean;
14
+ export declare const calculateBackgroundSize: (size: BackgroundSizeInfo[], [intrinsicWidth, intrinsicHeight, intrinsicProportion]: [number | null, number | null, number | null], bounds: Bounds) => [number, number];
15
+ export declare const getBackgroundValueForIndex: <T>(values: T[], index: number) => T;
16
+ export declare const calculateBackgroundRepeatPath: (repeat: BACKGROUND_REPEAT, [x, y]: [number, number], [width, height]: [number, number], backgroundPositioningArea: Bounds, backgroundPaintingArea: Bounds) => [Vector, Vector, Vector, Vector];
@@ -0,0 +1,14 @@
1
+ import { Vector } from './vector';
2
+ import { IPath, PathType, Path } from './path';
3
+ export declare class BezierCurve implements IPath {
4
+ type: PathType;
5
+ start: Vector;
6
+ startControl: Vector;
7
+ endControl: Vector;
8
+ end: Vector;
9
+ constructor(start: Vector, startControl: Vector, endControl: Vector, end: Vector);
10
+ subdivide(t: number, firstHalf: boolean): BezierCurve;
11
+ add(deltaX: number, deltaY: number): BezierCurve;
12
+ reverse(): BezierCurve;
13
+ }
14
+ export declare const isBezierCurve: (path: Path) => path is BezierCurve;
@@ -0,0 +1,6 @@
1
+ import { Path } from './path';
2
+ import { BoundCurves } from './bound-curves';
3
+ export declare const parsePathForBorder: (curves: BoundCurves, borderSide: number) => Path[];
4
+ export declare const parsePathForBorderDoubleOuter: (curves: BoundCurves, borderSide: number) => Path[];
5
+ export declare const parsePathForBorderDoubleInner: (curves: BoundCurves, borderSide: number) => Path[];
6
+ export declare const parsePathForBorderStroke: (curves: BoundCurves, borderSide: number) => Path[];
@@ -0,0 +1,32 @@
1
+ import { ElementContainer } from '../dom/element-container';
2
+ import { Path } from './path';
3
+ export declare class BoundCurves {
4
+ readonly topLeftBorderDoubleOuterBox: Path;
5
+ readonly topRightBorderDoubleOuterBox: Path;
6
+ readonly bottomRightBorderDoubleOuterBox: Path;
7
+ readonly bottomLeftBorderDoubleOuterBox: Path;
8
+ readonly topLeftBorderDoubleInnerBox: Path;
9
+ readonly topRightBorderDoubleInnerBox: Path;
10
+ readonly bottomRightBorderDoubleInnerBox: Path;
11
+ readonly bottomLeftBorderDoubleInnerBox: Path;
12
+ readonly topLeftBorderStroke: Path;
13
+ readonly topRightBorderStroke: Path;
14
+ readonly bottomRightBorderStroke: Path;
15
+ readonly bottomLeftBorderStroke: Path;
16
+ readonly topLeftBorderBox: Path;
17
+ readonly topRightBorderBox: Path;
18
+ readonly bottomRightBorderBox: Path;
19
+ readonly bottomLeftBorderBox: Path;
20
+ readonly topLeftPaddingBox: Path;
21
+ readonly topRightPaddingBox: Path;
22
+ readonly bottomRightPaddingBox: Path;
23
+ readonly bottomLeftPaddingBox: Path;
24
+ readonly topLeftContentBox: Path;
25
+ readonly topRightContentBox: Path;
26
+ readonly bottomRightContentBox: Path;
27
+ readonly bottomLeftContentBox: Path;
28
+ constructor(element: ElementContainer);
29
+ }
30
+ export declare const calculateBorderBoxPath: (curves: BoundCurves) => Path[];
31
+ export declare const calculateContentBoxPath: (curves: BoundCurves) => Path[];
32
+ export declare const calculatePaddingBoxPath: (curves: BoundCurves) => Path[];
@@ -0,0 +1,4 @@
1
+ import { Bounds } from '../css/layout/bounds';
2
+ import { ElementContainer } from '../dom/element-container';
3
+ export declare const paddingBox: (element: ElementContainer) => Bounds;
4
+ export declare const contentBox: (element: ElementContainer) => Bounds;
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Background Renderer
3
+ *
4
+ * Handles rendering of element backgrounds including:
5
+ * - Background colors
6
+ * - Background images (URL)
7
+ * - Linear gradients
8
+ * - Radial gradients
9
+ * - Background patterns and repeats
10
+ */
11
+ import { Context } from '../../core/context';
12
+ import { ElementContainer } from '../../dom/element-container';
13
+ /**
14
+ * Dependencies required for BackgroundRenderer
15
+ */
16
+ export interface BackgroundRendererDependencies {
17
+ ctx: CanvasRenderingContext2D;
18
+ context: Context;
19
+ canvas: HTMLCanvasElement;
20
+ options: {
21
+ width: number;
22
+ height: number;
23
+ scale: number;
24
+ };
25
+ }
26
+ /**
27
+ * Background Renderer
28
+ *
29
+ * Specialized renderer for element backgrounds.
30
+ * Extracted from CanvasRenderer to improve code organization and maintainability.
31
+ */
32
+ export declare class BackgroundRenderer {
33
+ private readonly ctx;
34
+ private readonly context;
35
+ private readonly canvas;
36
+ /**
37
+ * Instance-level LRU cache for background-image patterns.
38
+ * CanvasPatterns are tied to the rendering context and must not be
39
+ * shared across different render passes. This cache lives for the
40
+ * duration of one html2canvas() call.
41
+ */
42
+ private readonly patternCache;
43
+ constructor(deps: BackgroundRendererDependencies);
44
+ /**
45
+ * Render background images for a container
46
+ * Supports URL images, linear gradients, and radial gradients
47
+ *
48
+ * @param container - Element container with background styles
49
+ */
50
+ renderBackgroundImage(container: ElementContainer): Promise<void>;
51
+ /**
52
+ * Render a URL-based background image
53
+ */
54
+ private renderBackgroundURLImage;
55
+ /**
56
+ * Render a repeating linear gradient background.
57
+ * Renders one cycle of the gradient to a pattern canvas, then fills
58
+ * the background area using createPattern('repeat').
59
+ */
60
+ private renderRepeatingLinearGradient;
61
+ /**
62
+ * Render a linear gradient background
63
+ */
64
+ private renderLinearGradient;
65
+ /**
66
+ * Render a radial gradient background
67
+ */
68
+ private renderRadialGradient;
69
+ /**
70
+ * Render a repeating pattern with offset
71
+ *
72
+ * @param path - Path to fill
73
+ * @param pattern - Canvas pattern or gradient
74
+ * @param offsetX - X offset for pattern
75
+ * @param offsetY - Y offset for pattern
76
+ */
77
+ private renderRepeat;
78
+ /**
79
+ * Resize an image to target dimensions
80
+ *
81
+ * @param image - Source image
82
+ * @param width - Target width
83
+ * @param height - Target height
84
+ * @param imageRendering - CSS image-rendering property value
85
+ * @returns Resized canvas or original image
86
+ */
87
+ private resizeImage;
88
+ /**
89
+ * Create a canvas path from path array
90
+ *
91
+ * @param paths - Array of path points
92
+ */
93
+ private path;
94
+ }
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Border Image Renderer
3
+ *
4
+ * Renders CSS border-image using 9-slice scaling.
5
+ * The source image is divided into 9 regions (4 corners, 4 edges, 1 center)
6
+ * based on border-image-slice values, then each region is drawn to the
7
+ * corresponding area of the element's border box.
8
+ */
9
+ import { BorderImageSlice } from '../../css/property-descriptors/border-image-slice';
10
+ import { BorderImageRepeat } from '../../css/property-descriptors/border-image-repeat';
11
+ import { Bounds } from '../../css/layout/bounds';
12
+ export declare class BorderImageRenderer {
13
+ private readonly ctx;
14
+ constructor(ctx: CanvasRenderingContext2D);
15
+ renderBorderImage(bounds: Bounds, image: HTMLImageElement, slice: BorderImageSlice, repeat: BorderImageRepeat, borderTopWidth: number, borderRightWidth: number, borderBottomWidth: number, borderLeftWidth: number): void;
16
+ private drawRegion;
17
+ private drawRepeatedEdge;
18
+ }
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Border Renderer
3
+ *
4
+ * Handles rendering of element borders including:
5
+ * - Solid borders
6
+ * - Double borders
7
+ * - Dashed borders
8
+ * - Dotted borders
9
+ */
10
+ import { Color } from '../../css/types/color';
11
+ import { BoundCurves } from '../bound-curves';
12
+ import { BORDER_STYLE } from '../../css/property-descriptors/border-style';
13
+ import { Path } from '../path';
14
+ /**
15
+ * Dependencies required for BorderRenderer
16
+ */
17
+ export interface BorderRendererDependencies {
18
+ ctx: CanvasRenderingContext2D;
19
+ }
20
+ /**
21
+ * Path creation callbacks
22
+ * The main CanvasRenderer retains path() and formatPath() methods,
23
+ * so we inject them as callbacks to avoid duplication
24
+ */
25
+ export interface PathCallbacks {
26
+ path(paths: Path[]): void;
27
+ formatPath(paths: Path[]): void;
28
+ }
29
+ /**
30
+ * Border Renderer
31
+ *
32
+ * Specialized renderer for element borders.
33
+ * Extracted from CanvasRenderer to improve code organization and maintainability.
34
+ */
35
+ export declare class BorderRenderer {
36
+ private readonly ctx;
37
+ private pathCallbacks;
38
+ constructor(deps: BorderRendererDependencies, pathCallbacks: PathCallbacks);
39
+ /**
40
+ * Render a solid border
41
+ *
42
+ * @param color - Border color
43
+ * @param side - Border side (0=top, 1=right, 2=bottom, 3=left)
44
+ * @param curvePoints - Border curve points
45
+ */
46
+ renderSolidBorder(color: Color, side: number, curvePoints: BoundCurves): Promise<void>;
47
+ /**
48
+ * Render a double border
49
+ * Falls back to solid border if width is too small
50
+ *
51
+ * @param color - Border color
52
+ * @param width - Border width
53
+ * @param side - Border side (0=top, 1=right, 2=bottom, 3=left)
54
+ * @param curvePoints - Border curve points
55
+ */
56
+ renderDoubleBorder(color: Color, width: number, side: number, curvePoints: BoundCurves): Promise<void>;
57
+ /**
58
+ * Render a dashed or dotted border
59
+ *
60
+ * @param color - Border color
61
+ * @param width - Border width
62
+ * @param side - Border side (0=top, 1=right, 2=bottom, 3=left)
63
+ * @param curvePoints - Border curve points
64
+ * @param style - Border style (DASHED or DOTTED)
65
+ */
66
+ renderDashedDottedBorder(color: Color, width: number, side: number, curvePoints: BoundCurves, style: BORDER_STYLE): Promise<void>;
67
+ }
@@ -0,0 +1,3 @@
1
+ import { Path } from '../path';
2
+ export declare const formatCanvasPath: (ctx: CanvasRenderingContext2D, paths: Path[]) => void;
3
+ export declare const createCanvasPath: (ctx: CanvasRenderingContext2D, paths: Path[]) => void;
@@ -0,0 +1,60 @@
1
+ import { ElementPaint, StackingContext } from '../stacking-context';
2
+ import { Color } from '../../css/types/color';
3
+ import { ElementContainer } from '../../dom/element-container';
4
+ import { Path } from '../path';
5
+ import { BoundCurves } from '../bound-curves';
6
+ import { ReplacedElementContainer } from '../../dom/replaced-elements';
7
+ import { Context } from '../../core/context';
8
+ export type RenderConfigurations = RenderOptions & {
9
+ backgroundColor: Color | null;
10
+ signal?: AbortSignal;
11
+ /**
12
+ * Enable/disable image smoothing (anti-aliasing).
13
+ * When disabled, images are rendered with pixel-perfect sharpness (no interpolation).
14
+ * CSS `image-rendering` property on individual elements takes precedence.
15
+ * @default browser default (usually true)
16
+ */
17
+ imageSmoothing?: boolean;
18
+ /**
19
+ * Image smoothing quality level when imageSmoothing is enabled.
20
+ * Higher quality may be slower for large images.
21
+ * Only supported in modern browsers (Chrome 54+, Firefox 94+, Safari 17+).
22
+ * Falls back gracefully in older browsers.
23
+ * @default browser default
24
+ */
25
+ imageSmoothingQuality?: 'low' | 'medium' | 'high';
26
+ };
27
+ export interface RenderOptions {
28
+ scale: number;
29
+ canvas?: HTMLCanvasElement;
30
+ x: number;
31
+ y: number;
32
+ width: number;
33
+ height: number;
34
+ }
35
+ export declare class CanvasRenderer {
36
+ canvas: HTMLCanvasElement;
37
+ ctx: CanvasRenderingContext2D;
38
+ private readonly context;
39
+ private readonly options;
40
+ private readonly backgroundRenderer;
41
+ private readonly borderRenderer;
42
+ private readonly borderImageRenderer;
43
+ private readonly effectsRenderer;
44
+ private readonly textRenderer;
45
+ constructor(context: Context, options: RenderConfigurations);
46
+ renderStack(stack: StackingContext): Promise<void>;
47
+ renderNode(paint: ElementPaint): Promise<void>;
48
+ /**
49
+ * Helper method to render text with paint order support
50
+ * Reduces code duplication in line-clamp and normal rendering
51
+ */
52
+ renderReplacedElement(container: ReplacedElementContainer, curves: BoundCurves, image: HTMLImageElement | HTMLCanvasElement): void;
53
+ renderNodeContent(paint: ElementPaint): Promise<void>;
54
+ renderStackContent(stack: StackingContext): Promise<void>;
55
+ mask(paths: Path[]): void;
56
+ path(paths: Path[]): void;
57
+ formatPath(paths: Path[]): void;
58
+ renderNodeBackgroundAndBorders(paint: ElementPaint): Promise<void>;
59
+ render(element: ElementContainer): Promise<HTMLCanvasElement>;
60
+ }
@@ -0,0 +1,43 @@
1
+ import { ElementPaint } from '../stacking-context';
2
+ import { ReplacedElementContainer } from '../../dom/replaced-elements';
3
+ import { ElementContainer } from '../../dom/element-container';
4
+ import { BoundCurves } from '../bound-curves';
5
+ import { Vector } from '../vector';
6
+ import { Context } from '../../core/context';
7
+ import { TextRenderer } from './text-renderer';
8
+ import { Color } from '../../css/types/color';
9
+ import { CSSParsedDeclaration } from '../../css/index';
10
+ /**
11
+ * Factory type for creating an iframe canvas renderer — avoids circular import
12
+ * from canvas-renderer.ts which in turn imports content-renderer.ts.
13
+ */
14
+ type IframeRendererFactory = (context: Context, options: {
15
+ scale: number;
16
+ backgroundColor: Color | null;
17
+ x: number;
18
+ y: number;
19
+ width: number;
20
+ height: number;
21
+ }) => {
22
+ render: (element: ElementContainer) => Promise<HTMLCanvasElement>;
23
+ };
24
+ /**
25
+ * Render replaced elements: Image, Canvas, SVG, IFrame.
26
+ */
27
+ export declare function renderReplacedElements(ctx: CanvasRenderingContext2D, context: Context, options: {
28
+ scale: number;
29
+ backgroundColor: Color | null;
30
+ x: number;
31
+ y: number;
32
+ width: number;
33
+ height: number;
34
+ }, iframeRendererFactory: IframeRendererFactory, container: ElementContainer, curves: BoundCurves, styles: CSSParsedDeclaration, renderReplacedElementFn: (container: ReplacedElementContainer, curves: BoundCurves, image: HTMLImageElement | HTMLCanvasElement) => void): Promise<void>;
35
+ /**
36
+ * Render form element content: checkbox, radio, text input.
37
+ */
38
+ export declare function renderFormElements(ctx: CanvasRenderingContext2D, textRenderer: TextRenderer, pathFn: (paths: Vector[]) => void, container: ElementContainer, styles: CSSParsedDeclaration): void;
39
+ /**
40
+ * Render list-item marker (image or text).
41
+ */
42
+ export declare function renderListMarker(ctx: CanvasRenderingContext2D, context: Context, textRenderer: TextRenderer, paint: ElementPaint, container: ElementContainer, styles: CSSParsedDeclaration): Promise<void>;
43
+ export {};
@@ -0,0 +1,90 @@
1
+ /**
2
+ * Effects Renderer
3
+ *
4
+ * Handles rendering effects including:
5
+ * - Opacity effects
6
+ * - Transform effects (matrix transformations)
7
+ * - Clip effects (overflow / border-radius clipping via Path[])
8
+ * - Clip-path effects (CSS clip-path shapes: inset, circle, ellipse, polygon, path)
9
+ * - Blend effects (mix-blend-mode)
10
+ * - Filter effects (CSS filter functions)
11
+ */
12
+ import { IElementEffect } from '../effects';
13
+ import { Path } from '../path';
14
+ /**
15
+ * Dependencies required for EffectsRenderer
16
+ */
17
+ export interface EffectsRendererDependencies {
18
+ ctx: CanvasRenderingContext2D;
19
+ }
20
+ /**
21
+ * Path callback for clip effects
22
+ */
23
+ export interface EffectsPathCallback {
24
+ path(paths: Path[]): void;
25
+ }
26
+ /**
27
+ * Effects Renderer
28
+ *
29
+ * Manages rendering effects stack including opacity, transforms, and clipping.
30
+ * Extracted from CanvasRenderer to improve code organization and maintainability.
31
+ *
32
+ * ## Save/restore optimisation
33
+ *
34
+ * Canvas `save()` / `restore()` snapshot and restore the entire canvas state
35
+ * (transform matrix, clip region, compositing mode, filter, shadow, …) which
36
+ * is relatively expensive. The old implementation called `save()` / `restore()`
37
+ * for every single effect unconditionally.
38
+ *
39
+ * This implementation does a **batch pre-scan** before applying effects:
40
+ *
41
+ * | Effect type | Modifies | Reversible? | Needs save? |
42
+ * |--------------------|----------------------|---------------|-------------|
43
+ * | TransformEffect | transform matrix | ❌ irreversible | **YES** |
44
+ * | ClipEffect | clip region | ❌ cumulative | **YES** |
45
+ * | ClipPathEffect | clip region | ❌ cumulative | **YES** |
46
+ * | OpacityEffect | globalAlpha | ✅ scalar | NO |
47
+ * | BlendEffect | globalCompositeOp | ✅ scalar | NO |
48
+ * | FilterEffect | filter + shadow | ✅ string+vec | NO |
49
+ *
50
+ * When the batch contains *only* lightweight effects (opacity / blend / filter)
51
+ * we skip `save()` entirely and manually reset properties on pop.
52
+ *
53
+ * When the batch contains at least one heavyweight effect (transform / clip /
54
+ * clip-path) we call `save()` **once** before the first heavyweight effect and
55
+ * `restore()` **once** when that effect is popped.
56
+ */
57
+ export declare class EffectsRenderer {
58
+ private readonly ctx;
59
+ private readonly pathCallback;
60
+ private readonly activeEffects;
61
+ /** Whether a canvas state save was performed for the current batch. */
62
+ private didSave;
63
+ /** Index (0-based, from start of activeEffects array) of the last
64
+ * heavyweight effect in the batch — the one whose pop triggers
65
+ * restore(). Set to -1 when no save was performed. */
66
+ private saveAtDepth;
67
+ constructor(deps: EffectsRendererDependencies, pathCallback: EffectsPathCallback);
68
+ /**
69
+ * Apply multiple effects.
70
+ * Clears existing effects and applies new ones.
71
+ */
72
+ applyEffects(effects: IElementEffect[]): void;
73
+ /**
74
+ * Apply a single effect (called internally by applyEffects).
75
+ */
76
+ private applyEffect;
77
+ /**
78
+ * Remove the most recent effect.
79
+ * Restores canvas state if needed.
80
+ */
81
+ private popEffect;
82
+ /**
83
+ * Get the current number of active effects.
84
+ */
85
+ getActiveEffectCount(): number;
86
+ /**
87
+ * Check if there are any active effects.
88
+ */
89
+ hasActiveEffects(): boolean;
90
+ }
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Font measurement utility
3
+ *
4
+ * Provides Canvas API-based baseline measurement that works correctly with
5
+ * webfonts (which may not be loaded in the original document) and system fonts.
6
+ *
7
+ * Fallback chain:
8
+ * 1. fontBoundingBoxAscent — font-level metric (Chrome 99+, FF 116+, Safari 17.4+)
9
+ * 2. actualBoundingBoxAscent — glyph-level metric (widely supported)
10
+ * 3. fallback value — coarse CSS fallback
11
+ */
12
+ /**
13
+ * Measure the baseline ascent for the currently set font.
14
+ *
15
+ * @param ctx - Canvas 2D rendering context with ctx.font already set
16
+ * @param fallback - Fallback value when no metrics are available (e.g. fontSize.number)
17
+ * @returns The distance from the text baseline to the top of the bounding box
18
+ */
19
+ export declare const measureBaseline: (ctx: CanvasRenderingContext2D, fallback: number) => number;
@@ -0,0 +1,10 @@
1
+ import { RenderConfigurations } from './canvas-renderer';
2
+ import { Context } from '../../core/context';
3
+ export declare class ForeignObjectRenderer {
4
+ canvas: HTMLCanvasElement;
5
+ ctx: CanvasRenderingContext2D;
6
+ options: RenderConfigurations;
7
+ private readonly context;
8
+ constructor(context: Context, options: RenderConfigurations);
9
+ render(element: HTMLElement): Promise<HTMLCanvasElement>;
10
+ }