@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,18 @@
1
+ /**
2
+ * Text Decoration Renderer
3
+ *
4
+ * Handles rendering of text-decoration lines:
5
+ * - underline, overline, line-through
6
+ * - solid, double, dotted, dashed, wavy styles
7
+ * Extracted from TextRenderer to reduce file size.
8
+ */
9
+ import { Bounds } from '../../../css/layout/bounds';
10
+ import { CSSParsedDeclaration } from '../../../css';
11
+ export declare class TextDecorationRenderer {
12
+ private readonly ctx;
13
+ constructor(ctx: CanvasRenderingContext2D);
14
+ render(bounds: Bounds, styles: CSSParsedDeclaration): void;
15
+ private draw;
16
+ private drawPattern;
17
+ private drawWavy;
18
+ }
@@ -0,0 +1,103 @@
1
+ /**
2
+ * Text Renderer
3
+ *
4
+ * Handles rendering of text content including:
5
+ * - Text with letter spacing
6
+ * - Text decorations (underline, overline, line-through)
7
+ * - Text shadows
8
+ * - Webkit line clamp
9
+ * - Text overflow ellipsis
10
+ * - Paint order (fill/stroke)
11
+ * - Font styles
12
+ */
13
+ import { TextContainer } from '../../dom/text-container';
14
+ import { CSSParsedDeclaration } from '../../css';
15
+ import { Bounds } from '../../css/layout/bounds';
16
+ import { TextBounds } from '../../css/layout/text';
17
+ import { WRITING_MODE } from '../../css/property-descriptors/writing-mode';
18
+ /**
19
+ * Dependencies required for TextRenderer
20
+ */
21
+ export interface TextRendererDependencies {
22
+ ctx: CanvasRenderingContext2D;
23
+ options: {
24
+ scale: number;
25
+ };
26
+ }
27
+ export declare const hasCJKCharacters: (text: string) => boolean;
28
+ /**
29
+ * Text Renderer
30
+ *
31
+ * Specialized renderer for text content.
32
+ * Extracted from CanvasRenderer to improve code organization and maintainability.
33
+ */
34
+ export declare class TextRenderer {
35
+ private readonly ctx;
36
+ private readonly options;
37
+ private readonly decorationRenderer;
38
+ /**
39
+ * Per-render glyph width cache. Keyed by glyph + font string,
40
+ * avoids redundant `measureText` calls when letter-spacing is non-zero.
41
+ * Cleared at the start of each renderTextNode call.
42
+ */
43
+ private glyphWidthCache;
44
+ constructor(deps: TextRendererDependencies);
45
+ /**
46
+ * Returns the cached width for a glyph+font pair, measuring via
47
+ * measureText if not yet cached. Only used when letterSpacing !== 0
48
+ * (the `canRenderWholeText` fast path handles the zero-spacing case).
49
+ */
50
+ private cachedMeasureText;
51
+ /**
52
+ * Iterate grapheme clusters one-by-one, applying correct letter-spacing and
53
+ * per-script baseline for each character.
54
+ *
55
+ * Issue #73: When letter-spacing is non-zero, text must be rendered character by
56
+ * character. This helper centralises two fixes applied during that iteration:
57
+ * 1. Add `letterSpacing` to each character's advance width (was previously
58
+ * omitted, causing characters to render without any spacing).
59
+ * 2. Switch to the ideographic baseline for CJK glyphs so their vertical
60
+ * position matches how browsers lay them out in the DOM.
61
+ *
62
+ * The `renderFn` callback receives (letter, x, y) and performs the actual draw
63
+ * call (fillText or strokeText), allowing fill and stroke paths to share one
64
+ * implementation.
65
+ */
66
+ private iterateLettersWithLetterSpacing;
67
+ private iterateVerticalGlyphs;
68
+ /**
69
+ * Render text with letter-spacing applied (fill pass).
70
+ * When letterSpacing is 0 the whole string is drawn in one call; otherwise each
71
+ * grapheme is drawn individually so spacing and CJK baseline are applied correctly.
72
+ */
73
+ renderTextWithLetterSpacing(text: TextBounds, letterSpacing: number, baseline: number, writingMode?: WRITING_MODE): void;
74
+ private canRenderWholeText;
75
+ private renderFillText;
76
+ private renderStrokeText;
77
+ private renderTextStrokeWithStyle;
78
+ private renderTextFillWithShadows;
79
+ /**
80
+ * Helper method to render text with paint order support
81
+ * Reduces code duplication in line-clamp and normal rendering
82
+ */
83
+ private renderTextBoundWithPaintOrder;
84
+ private renderTextDecoration;
85
+ private truncateTextWithEllipsis;
86
+ /**
87
+ * Create font style array
88
+ * Public method used by list rendering
89
+ */
90
+ createFontStyle(styles: CSSParsedDeclaration): string[];
91
+ /**
92
+ * Render text with -webkit-line-clamp truncation.
93
+ * Groups text bounds by their Y position into visual lines, then renders
94
+ * only the first N-1 complete lines followed by an ellipsis on the Nth line.
95
+ */
96
+ private renderLineClampedText;
97
+ /**
98
+ * Render single-line text with text-overflow: ellipsis.
99
+ * Returns true if ellipsis was applied (caller should skip normal rendering).
100
+ */
101
+ private renderEllipsisText;
102
+ renderTextNode(text: TextContainer, styles: CSSParsedDeclaration, containerBounds?: Bounds): Promise<void>;
103
+ }
@@ -0,0 +1,112 @@
1
+ import { Matrix } from '../css/property-descriptors/transform';
2
+ import { MixBlendMode } from '../css/property-descriptors/mix-blend-mode';
3
+ import { Path } from './path';
4
+ export declare const enum EffectType {
5
+ TRANSFORM = 0,
6
+ CLIP = 1,
7
+ OPACITY = 2,
8
+ CLIP_PATH = 3,
9
+ BLEND = 4,
10
+ FILTER = 5
11
+ }
12
+ export declare const enum EffectTarget {
13
+ BACKGROUND_BORDERS = 2,
14
+ CONTENT = 4
15
+ }
16
+ export interface IElementEffect {
17
+ readonly type: EffectType;
18
+ readonly target: number;
19
+ }
20
+ export declare class TransformEffect implements IElementEffect {
21
+ readonly offsetX: number;
22
+ readonly offsetY: number;
23
+ readonly matrix: Matrix;
24
+ readonly type: EffectType;
25
+ readonly target: number;
26
+ constructor(offsetX: number, offsetY: number, matrix: Matrix);
27
+ }
28
+ export declare class ClipEffect implements IElementEffect {
29
+ readonly path: Path[];
30
+ readonly target: EffectTarget;
31
+ readonly type: EffectType;
32
+ constructor(path: Path[], target: EffectTarget);
33
+ }
34
+ export declare class OpacityEffect implements IElementEffect {
35
+ readonly opacity: number;
36
+ readonly type: EffectType;
37
+ readonly target: number;
38
+ constructor(opacity: number);
39
+ }
40
+ /**
41
+ * Clips the element and all its descendants to an arbitrary canvas-drawn shape.
42
+ * The `applyClip` callback is responsible for calling beginPath, the shape
43
+ * operations, and ctx.clip() — giving each shape type full control over how
44
+ * the path is constructed (arc, ellipse, lineTo, Path2D, etc.).
45
+ */
46
+ export declare class ClipPathEffect implements IElementEffect {
47
+ readonly applyClip: (ctx: CanvasRenderingContext2D) => void;
48
+ readonly type: EffectType;
49
+ readonly target: number;
50
+ constructor(applyClip: (ctx: CanvasRenderingContext2D) => void);
51
+ }
52
+ export declare class BlendEffect implements IElementEffect {
53
+ readonly mixBlendMode: MixBlendMode;
54
+ readonly type: EffectType;
55
+ readonly target: number;
56
+ readonly compositeOperation: GlobalCompositeOperation;
57
+ constructor(mixBlendMode: MixBlendMode);
58
+ }
59
+ export declare class FilterEffect implements IElementEffect {
60
+ readonly type: EffectType;
61
+ readonly target: number;
62
+ /** CSS filter string with drop-shadow() stripped (safe for ctx.filter). */
63
+ readonly safeFilterString: string;
64
+ /** Shadow params for drop-shadow(), if present and successfully parsed. */
65
+ readonly shadow?: {
66
+ offsetX: number;
67
+ offsetY: number;
68
+ blur: number;
69
+ color: string;
70
+ };
71
+ constructor(filterString: string);
72
+ /**
73
+ * Parse a CSS filter string, extracting drop-shadow() parameters for
74
+ * rendering via ctx.shadow* (which avoids canvas taint), and producing
75
+ * a safe filter string with all drop-shadow() calls removed.
76
+ *
77
+ * Uses paren-depth tracking to correctly handle nested function
78
+ * arguments — e.g. rgba() / hsla() inside drop-shadow() — which
79
+ * the previous regex-based approach ([^)]+) could not handle.
80
+ *
81
+ * Per CSS spec the shadow value is: <color>? && <length>{2,3}
82
+ * (components can appear in any order).
83
+ */
84
+ private static parseDropShadow;
85
+ /**
86
+ * Find all drop-shadow() function calls in a CSS filter string.
87
+ * Uses paren-depth tracking to correctly skip over nested
88
+ * parentheses (e.g. rgba(0, 0, 0, 0.15)).
89
+ */
90
+ private static findDropShadows;
91
+ /**
92
+ * Parse the body of a single drop-shadow() function.
93
+ * Body format (order-independent): <offsetX> <offsetY> [<blur>] [<color>?]
94
+ */
95
+ private static parseDropShadowBody;
96
+ /**
97
+ * Split whitespace-separated tokens while keeping parenthesised
98
+ * expressions intact.
99
+ *
100
+ * e.g. "rgba(0, 0, 0, 0.15) 0px 1px 2px"
101
+ * → ["rgba(0, 0, 0, 0.15)", "0px", "1px", "2px"]
102
+ */
103
+ private static tokenizeFilterArgs;
104
+ /** True when token looks like a CSS length: number with optional unit. */
105
+ private static isCSSLength;
106
+ }
107
+ export declare const isTransformEffect: (effect: IElementEffect) => effect is TransformEffect;
108
+ export declare const isClipEffect: (effect: IElementEffect) => effect is ClipEffect;
109
+ export declare const isOpacityEffect: (effect: IElementEffect) => effect is OpacityEffect;
110
+ export declare const isClipPathEffect: (effect: IElementEffect) => effect is ClipPathEffect;
111
+ export declare const isBlendEffect: (effect: IElementEffect) => effect is BlendEffect;
112
+ export declare const isFilterEffect: (effect: IElementEffect) => effect is FilterEffect;
@@ -0,0 +1,11 @@
1
+ export interface FontMetric {
2
+ baseline: number;
3
+ middle: number;
4
+ }
5
+ export declare class FontMetrics {
6
+ private readonly _data;
7
+ private readonly _document;
8
+ constructor(document: Document);
9
+ private parseMetrics;
10
+ getMetrics(fontFamily: string, fontSize: string): FontMetric;
11
+ }
@@ -0,0 +1,19 @@
1
+ import { ObjectFit } from '../css/property-descriptors/object-fit';
2
+ import { LengthPercentage } from '../css/types/length-percentage';
3
+ export interface ObjectFitBox {
4
+ left: number;
5
+ top: number;
6
+ width: number;
7
+ height: number;
8
+ }
9
+ export interface ObjectFitRendering {
10
+ sx: number;
11
+ sy: number;
12
+ sw: number;
13
+ sh: number;
14
+ dx: number;
15
+ dy: number;
16
+ dw: number;
17
+ dh: number;
18
+ }
19
+ export declare const calculateObjectFitRendering: (intrinsicWidth: number, intrinsicHeight: number, box: ObjectFitBox, objectFit: ObjectFit, objectPosition?: [LengthPercentage, LengthPercentage]) => ObjectFitRendering;
@@ -0,0 +1,13 @@
1
+ import { BezierCurve } from './bezier-curve';
2
+ import { Vector } from './vector';
3
+ export declare const enum PathType {
4
+ VECTOR = 0,
5
+ BEZIER_CURVE = 1
6
+ }
7
+ export interface IPath {
8
+ type: PathType;
9
+ add(deltaX: number, deltaY: number): IPath;
10
+ }
11
+ export declare const equalPath: (a: Path[], b: Path[]) => boolean;
12
+ export declare const transformPath: (path: Path[], deltaX: number, deltaY: number, deltaW: number, deltaH: number) => Path[];
13
+ export type Path = Vector | BezierCurve;
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Base interface for all specialized renderers.
3
+ * Each renderer is responsible for rendering a specific aspect of an element.
4
+ *
5
+ * @internal This interface is a structural contract; prefer using concrete
6
+ * renderer classes (BackgroundRenderer, BorderRenderer, etc.)
7
+ * directly rather than relying on the generic IRenderer shape.
8
+ */
9
+ export interface IRenderer {
10
+ render(...args: unknown[]): void | Promise<void>;
11
+ }
12
+ /**
13
+ * Common dependencies required by renderers.
14
+ * RenderConfigurations from canvas-renderer.ts provides a concrete type.
15
+ */
16
+ export interface RendererDependencies {
17
+ ctx: CanvasRenderingContext2D;
18
+ scale: number;
19
+ options: Record<string, unknown>;
20
+ }
21
+ /**
22
+ * Performance tracking for renderers.
23
+ */
24
+ export interface RenderMetrics {
25
+ renderCount: number;
26
+ totalTime: number;
27
+ averageTime: number;
28
+ }
@@ -0,0 +1,49 @@
1
+ import { ElementContainer } from '../dom/element-container';
2
+ import { BoundCurves } from './bound-curves';
3
+ import { ClipPathEffect, EffectTarget, IElementEffect } from './effects';
4
+ import { Bounds } from '../css/layout/bounds';
5
+ import { ClipPathValue, ShapeRadius } from '../css/property-descriptors/clip-path';
6
+ export declare class StackingContext {
7
+ element: ElementPaint;
8
+ negativeZIndex: StackingContext[];
9
+ zeroOrAutoZIndexOrTransformedOrOpacity: StackingContext[];
10
+ positiveZIndex: StackingContext[];
11
+ nonPositionedFloats: StackingContext[];
12
+ nonPositionedInlineLevel: StackingContext[];
13
+ inlineLevel: ElementPaint[];
14
+ nonInlineLevel: ElementPaint[];
15
+ constructor(container: ElementPaint);
16
+ }
17
+ export declare class ElementPaint {
18
+ readonly container: ElementContainer;
19
+ readonly parent: ElementPaint | null;
20
+ readonly effects: IElementEffect[];
21
+ readonly curves: BoundCurves;
22
+ listValue?: string;
23
+ constructor(container: ElementContainer, parent: ElementPaint | null);
24
+ getEffects(target: EffectTarget): IElementEffect[];
25
+ }
26
+ /** @internal – exported for testing only. */
27
+ export declare const hasOverflowClip: (styles: ElementContainer["styles"]) => boolean;
28
+ /**
29
+ * Resolve a `closest-side` or `farthest-side` shape-radius keyword to pixels
30
+ * for a single axis. Used by both `circle()` (per-axis) and `ellipse()`.
31
+ *
32
+ * @param r - The ShapeRadius (keyword or length-percentage).
33
+ * @param center - Absolute center coordinate on this axis (cx or cy).
34
+ * @param start - Absolute start of the reference box on this axis.
35
+ * @param end - Absolute end of the reference box on this axis.
36
+ * @param dimRef - Reference dimension for resolving a length-percentage value.
37
+ * @internal – exported for testing only.
38
+ */
39
+ export declare const resolveAxisRadius: (r: ShapeRadius, center: number, start: number, end: number, dimRef: number) => number;
40
+ /**
41
+ * Convert a parsed ClipPathValue + element bounds into a ClipPathEffect whose
42
+ * `applyClip` callback draws the clip shape directly onto the canvas context.
43
+ *
44
+ * All coordinates are computed in page-absolute space at construction time so
45
+ * the callback itself is allocation-free and executes synchronously.
46
+ * @internal – exported for testing only.
47
+ */
48
+ export declare const buildClipPathEffect: (clipPath: ClipPathValue, bounds: Bounds) => ClipPathEffect | null;
49
+ export declare const parseStackingContexts: (container: ElementContainer) => StackingContext;
@@ -0,0 +1,9 @@
1
+ import { IPath, Path, PathType } from './path';
2
+ export declare class Vector implements IPath {
3
+ type: PathType;
4
+ x: number;
5
+ y: number;
6
+ constructor(x: number, y: number);
7
+ add(deltaX: number, deltaY: number): Vector;
8
+ }
9
+ export declare const isVector: (path: Path) => path is Vector;
package/package.json CHANGED
@@ -1,6 +1,141 @@
1
1
  {
2
2
  "name": "@ohos-ports/html2canvas-pro",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
3
+ "description": "Screenshots with JavaScript. Next generation!",
4
+ "type": "module",
5
+ "main": "dist/html2canvas-pro.cjs",
6
+ "module": "dist/html2canvas-pro.esm.js",
7
+ "typings": "dist/types/index.d.ts",
8
+ "browser": "dist/html2canvas-pro.esm.js",
9
+ "sideEffects": false,
10
+ "files": [
11
+ "dist/",
12
+ "LICENSE"
13
+ ],
14
+ "exports": {
15
+ ".": {
16
+ "types": "./dist/types/index.d.ts",
17
+ "import": "./dist/html2canvas-pro.esm.js",
18
+ "require": "./dist/html2canvas-pro.cjs",
19
+ "default": "./dist/html2canvas-pro.esm.js"
20
+ }
21
+ },
22
+ "version": "2.3.2-beta.0",
23
+ "author": {
24
+ "name": "yorickshan",
25
+ "email": "yorickshan@gmail.com",
26
+ "url": "https://github.com/yorickshan"
27
+ },
28
+ "license": "MIT",
29
+ "keywords": [
30
+ "html2canvas",
31
+ "screenshot"
32
+ ],
33
+ "engines": {
34
+ "node": ">=16.0.0"
35
+ },
36
+ "homepage": "https://yorickshan.github.io/html2canvas-pro/",
37
+ "repository": {
38
+ "type": "git",
39
+ "url": "https://github.com/ohos-ports/ohos-ports.git",
40
+ "directory": "ports/html2canvas-pro/2.3.2"
41
+ },
42
+ "devDependencies": {
43
+ "@commitlint/cli": "^20.3.0",
44
+ "@commitlint/config-conventional": "^20.2.0",
45
+ "@types/chai": "^5.2.3",
46
+ "@types/express": "^5.0.6",
47
+ "@types/karma": "^6.3.0",
48
+ "@types/mocha": "^10.0.7",
49
+ "@types/node": "^25.0.3",
50
+ "@types/platform": "^1.3.4",
51
+ "@types/pngjs": "^6.0.5",
52
+ "@types/serve-index": "^1.9.4",
53
+ "@typescript-eslint/eslint-plugin": "^8.50.0",
54
+ "@typescript-eslint/parser": "^8.50.0",
55
+ "@vitest/coverage-v8": "^3.2.6",
56
+ "appium-ios-simulator": "^8.0.9",
57
+ "base64-arraybuffer": "1.0.2",
58
+ "body-parser": "^2.2.1",
59
+ "chai": "6.2.2",
60
+ "change-case": "^5.4.4",
61
+ "conventional-changelog": "^7.2.1",
62
+ "conventional-changelog-conventionalcommits": "^9.3.1",
63
+ "cors": "^2.8.5",
64
+ "cz-conventional-changelog": "^3.3.0",
65
+ "eslint": "^9.13.0",
66
+ "eslint-config-prettier": "^10.1.8",
67
+ "eslint-plugin-prettier": "^5.5.4",
68
+ "express": "^5.2.1",
69
+ "filenamify-url": "4.0.0",
70
+ "glob": "^13.0.0",
71
+ "husky": "^9.1.7",
72
+ "jsdom": "^29.1.1",
73
+ "karma": "^6.3.2",
74
+ "karma-chrome-launcher": "^3.1.0",
75
+ "karma-edge-launcher": "^0.4.2",
76
+ "karma-firefox-launcher": "^2.1.0",
77
+ "karma-ie-launcher": "^1.0.0",
78
+ "karma-junit-reporter": "^2.0.1",
79
+ "karma-mocha": "^2.0.1",
80
+ "karma-safarinative-launcher": "^1.1.0",
81
+ "lint-staged": "^16.2.7",
82
+ "mocha": "^11.7.5",
83
+ "node-simctl": "^8.1.2",
84
+ "pixelmatch": "^7.2.0",
85
+ "platform": "^1.3.6",
86
+ "pngjs": "^7.0.0",
87
+ "prettier": "^3.3.3",
88
+ "puppeteer": "^25.6.0-beta.0",
89
+ "replace-in-file": "^8.4.0",
90
+ "rimraf": "^6.0.1",
91
+ "rolldown": "^1.2.6-beta.4",
92
+ "serve-index": "^1.9.1",
93
+ "slash": "5.1.0",
94
+ "ts-node": "^10.9.2",
95
+ "tsx": "^4.22.4-beta.4",
96
+ "typedoc": "^0.28.19",
97
+ "typescript": "^5.5.4",
98
+ "vitepress": "^1.6.4",
99
+ "vitest": "^5.0.1-beta.0",
100
+ "yargs": "^18.0.0"
101
+ },
102
+ "dependencies": {
103
+ "css-line-break": "^2.1.0",
104
+ "text-segmentation": "^1.0.3"
105
+ },
106
+ "lint-staged": {
107
+ "{src,tests}/**/*.ts": [
108
+ "prettier --write",
109
+ "eslint --fix"
110
+ ]
111
+ },
112
+ "scripts": {
113
+ "prebuild": "rimraf dist/ && rimraf build/ && mkdir -p dist && mkdir -p build",
114
+ "build": "tsc --module commonjs -p tsconfig.build.json && rolldown -c rolldown.config.ts && pnpm build:create-reftest-list && rolldown -c tests/rolldown.testrunner.config.ts",
115
+ "build:testrunner": "rolldown -c tests/rolldown.testrunner.config.ts",
116
+ "build:reftest-result-list": "tsx scripts/create-reftest-result-list.ts",
117
+ "build:create-reftest-list": "tsx scripts/create-reftest-list.ts tests/reftests/ignore.txt build/reftests.js",
118
+ "release": "sh scripts/version-upgrade.sh",
119
+ "format": "prettier --write \"{src,tests,scripts}/**/*.ts\"",
120
+ "lint": "eslint src/**/*.ts --max-warnings 0",
121
+ "test": "pnpm lint && pnpm unittest && pnpm karma",
122
+ "unittest": "vitest run",
123
+ "unittest:coverage": "vitest run --coverage",
124
+ "bench:css-parse": "tsx scripts/benchmarks/css-parse.bench.ts",
125
+ "reftests-diff": "mkdir -p tmp/snapshots && vitest run --config vitest.reftest.config.ts",
126
+ "prekarma": "node scripts/ensure-karma-prereqs.mjs",
127
+ "karma": "tsx tests/karma",
128
+ "watch": "rolldown -w",
129
+ "watch:unittest": "vitest",
130
+ "start": "tsx tests/server --port=8080 --cors=8081",
131
+ "commitlint": "commitlint --config .commitlintrc.json -e -V",
132
+ "docs:dev": "vitepress dev docs",
133
+ "docs:build": "vitepress build docs",
134
+ "docs:preview": "vitepress preview docs",
135
+ "docs:api": "typedoc",
136
+ "docs:api:watch": "typedoc --watch"
137
+ },
138
+ "bugs": {
139
+ "url": "https://github.com/ohos-ports/ohos-ports/issues"
140
+ }
141
+ }