@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,127 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LayoutStyles = void 0;
4
+ /**
5
+ * Read-only grouped accessor for layout/display/positioning CSS properties.
6
+ */
7
+ class LayoutStyles {
8
+ constructor(styles) {
9
+ this.styles = styles;
10
+ }
11
+ get display() {
12
+ return this.styles.display;
13
+ }
14
+ get position() {
15
+ return this.styles.position;
16
+ }
17
+ get float() {
18
+ return this.styles.float;
19
+ }
20
+ // Explicit return type avoids name clash with z-index descriptor export.
21
+ get zIndex() {
22
+ return this.styles.zIndex;
23
+ }
24
+ get marginTop() {
25
+ return this.styles.marginTop;
26
+ }
27
+ get marginRight() {
28
+ return this.styles.marginRight;
29
+ }
30
+ get marginBottom() {
31
+ return this.styles.marginBottom;
32
+ }
33
+ get marginLeft() {
34
+ return this.styles.marginLeft;
35
+ }
36
+ get paddingTop() {
37
+ return this.styles.paddingTop;
38
+ }
39
+ get paddingRight() {
40
+ return this.styles.paddingRight;
41
+ }
42
+ get paddingBottom() {
43
+ return this.styles.paddingBottom;
44
+ }
45
+ get paddingLeft() {
46
+ return this.styles.paddingLeft;
47
+ }
48
+ get overflowX() {
49
+ return this.styles.overflowX;
50
+ }
51
+ get overflowY() {
52
+ return this.styles.overflowY;
53
+ }
54
+ get opacity() {
55
+ return this.styles.opacity;
56
+ }
57
+ get visibility() {
58
+ return this.styles.visibility;
59
+ }
60
+ get transform() {
61
+ return this.styles.transform;
62
+ }
63
+ get transformOrigin() {
64
+ return this.styles.transformOrigin;
65
+ }
66
+ get rotate() {
67
+ return this.styles.rotate;
68
+ }
69
+ get zoom() {
70
+ return this.styles.zoom;
71
+ }
72
+ get clipPath() {
73
+ return this.styles.clipPath;
74
+ }
75
+ get mixBlendMode() {
76
+ return this.styles.mixBlendMode;
77
+ }
78
+ get filter() {
79
+ return this.styles.filter;
80
+ }
81
+ get imageRendering() {
82
+ return this.styles.imageRendering;
83
+ }
84
+ get objectFit() {
85
+ return this.styles.objectFit;
86
+ }
87
+ get objectPosition() {
88
+ return this.styles.objectPosition;
89
+ }
90
+ get boxDecorationBreak() {
91
+ return this.styles.boxDecorationBreak;
92
+ }
93
+ get listStyleImage() {
94
+ return this.styles.listStyleImage;
95
+ }
96
+ get listStylePosition() {
97
+ return this.styles.listStylePosition;
98
+ }
99
+ get listStyleType() {
100
+ return this.styles.listStyleType;
101
+ }
102
+ get animationDuration() {
103
+ return this.styles.animationDuration;
104
+ }
105
+ isVisible() {
106
+ return this.styles.isVisible();
107
+ }
108
+ isTransparent() {
109
+ return this.styles.isTransparent();
110
+ }
111
+ isTransformed() {
112
+ return this.styles.isTransformed();
113
+ }
114
+ isPositioned() {
115
+ return this.styles.isPositioned();
116
+ }
117
+ isPositionedWithZIndex() {
118
+ return this.styles.isPositionedWithZIndex();
119
+ }
120
+ isFloating() {
121
+ return this.styles.isFloating();
122
+ }
123
+ isInlineLevel() {
124
+ return this.styles.isInlineLevel();
125
+ }
126
+ }
127
+ exports.LayoutStyles = LayoutStyles;
@@ -0,0 +1,330 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CSSParsedCounterDeclaration = exports.CSSParsedPseudoDeclaration = exports.CSSParsedDeclaration = void 0;
4
+ const background_clip_1 = require("./property-descriptors/background-clip");
5
+ const background_color_1 = require("./property-descriptors/background-color");
6
+ const background_image_1 = require("./property-descriptors/background-image");
7
+ const background_origin_1 = require("./property-descriptors/background-origin");
8
+ const background_position_1 = require("./property-descriptors/background-position");
9
+ const background_repeat_1 = require("./property-descriptors/background-repeat");
10
+ const background_size_1 = require("./property-descriptors/background-size");
11
+ const border_color_1 = require("./property-descriptors/border-color");
12
+ const border_radius_1 = require("./property-descriptors/border-radius");
13
+ const border_style_1 = require("./property-descriptors/border-style");
14
+ const border_width_1 = require("./property-descriptors/border-width");
15
+ const clip_path_1 = require("./property-descriptors/clip-path");
16
+ const color_1 = require("./property-descriptors/color");
17
+ const direction_1 = require("./property-descriptors/direction");
18
+ const display_1 = require("./property-descriptors/display");
19
+ const float_1 = require("./property-descriptors/float");
20
+ const letter_spacing_1 = require("./property-descriptors/letter-spacing");
21
+ const line_break_1 = require("./property-descriptors/line-break");
22
+ const line_height_1 = require("./property-descriptors/line-height");
23
+ const list_style_image_1 = require("./property-descriptors/list-style-image");
24
+ const list_style_position_1 = require("./property-descriptors/list-style-position");
25
+ const list_style_type_1 = require("./property-descriptors/list-style-type");
26
+ const margin_1 = require("./property-descriptors/margin");
27
+ const overflow_1 = require("./property-descriptors/overflow");
28
+ const overflow_wrap_1 = require("./property-descriptors/overflow-wrap");
29
+ const padding_1 = require("./property-descriptors/padding");
30
+ const text_align_1 = require("./property-descriptors/text-align");
31
+ const position_1 = require("./property-descriptors/position");
32
+ const text_shadow_1 = require("./property-descriptors/text-shadow");
33
+ const text_transform_1 = require("./property-descriptors/text-transform");
34
+ const transform_1 = require("./property-descriptors/transform");
35
+ const transform_origin_1 = require("./property-descriptors/transform-origin");
36
+ const rotate_1 = require("./property-descriptors/rotate");
37
+ const visibility_1 = require("./property-descriptors/visibility");
38
+ const word_break_1 = require("./property-descriptors/word-break");
39
+ const writing_mode_1 = require("./property-descriptors/writing-mode");
40
+ const z_index_1 = require("./property-descriptors/z-index");
41
+ const parser_1 = require("./syntax/parser");
42
+ const tokenizer_1 = require("./syntax/tokenizer");
43
+ const color_2 = require("./types/color");
44
+ const color_utilities_1 = require("./types/color-utilities");
45
+ const angle_1 = require("./types/angle");
46
+ const image_1 = require("./types/image");
47
+ const time_1 = require("./types/time");
48
+ const opacity_1 = require("./property-descriptors/opacity");
49
+ const text_decoration_color_1 = require("./property-descriptors/text-decoration-color");
50
+ const text_decoration_line_1 = require("./property-descriptors/text-decoration-line");
51
+ const text_decoration_style_1 = require("./property-descriptors/text-decoration-style");
52
+ const text_decoration_thickness_1 = require("./property-descriptors/text-decoration-thickness");
53
+ const text_underline_offset_1 = require("./property-descriptors/text-underline-offset");
54
+ const length_percentage_1 = require("./types/length-percentage");
55
+ const font_family_1 = require("./property-descriptors/font-family");
56
+ const font_size_1 = require("./property-descriptors/font-size");
57
+ const length_1 = require("./types/length");
58
+ const font_weight_1 = require("./property-descriptors/font-weight");
59
+ const font_variant_1 = require("./property-descriptors/font-variant");
60
+ const font_style_1 = require("./property-descriptors/font-style");
61
+ const bitwise_1 = require("../core/bitwise");
62
+ const content_1 = require("./property-descriptors/content");
63
+ const counter_increment_1 = require("./property-descriptors/counter-increment");
64
+ const counter_reset_1 = require("./property-descriptors/counter-reset");
65
+ const duration_1 = require("./property-descriptors/duration");
66
+ const quotes_1 = require("./property-descriptors/quotes");
67
+ const box_shadow_1 = require("./property-descriptors/box-shadow");
68
+ const paint_order_1 = require("./property-descriptors/paint-order");
69
+ const webkit_text_stroke_color_1 = require("./property-descriptors/webkit-text-stroke-color");
70
+ const webkit_text_stroke_width_1 = require("./property-descriptors/webkit-text-stroke-width");
71
+ const webkit_line_clamp_1 = require("./property-descriptors/webkit-line-clamp");
72
+ const object_fit_1 = require("./property-descriptors/object-fit");
73
+ const text_overflow_1 = require("./property-descriptors/text-overflow");
74
+ const image_rendering_1 = require("./property-descriptors/image-rendering");
75
+ const mix_blend_mode_1 = require("./property-descriptors/mix-blend-mode");
76
+ const filter_1 = require("./property-descriptors/filter");
77
+ const font_variant_ligatures_1 = require("./property-descriptors/font-variant-ligatures");
78
+ const zoom_1 = require("./property-descriptors/zoom");
79
+ const object_position_1 = require("./property-descriptors/object-position");
80
+ const background_blend_mode_1 = require("./property-descriptors/background-blend-mode");
81
+ const border_image_source_1 = require("./property-descriptors/border-image-source");
82
+ const border_image_slice_1 = require("./property-descriptors/border-image-slice");
83
+ const border_image_repeat_1 = require("./property-descriptors/border-image-repeat");
84
+ const box_decoration_break_1 = require("./property-descriptors/box-decoration-break");
85
+ const constants_1 = require("../core/constants");
86
+ const border_styles_1 = require("./grouped/border-styles");
87
+ const background_styles_1 = require("./grouped/background-styles");
88
+ const font_styles_1 = require("./grouped/font-styles");
89
+ const layout_styles_1 = require("./grouped/layout-styles");
90
+ class CSSParsedDeclaration {
91
+ get border() {
92
+ return this._border ?? (this._border = new border_styles_1.BorderStyles(this));
93
+ }
94
+ get background() {
95
+ return this._background ?? (this._background = new background_styles_1.BackgroundStyles(this));
96
+ }
97
+ get font() {
98
+ return this._font ?? (this._font = new font_styles_1.FontStyles(this));
99
+ }
100
+ get layout() {
101
+ return this._layout ?? (this._layout = new layout_styles_1.LayoutStyles(this));
102
+ }
103
+ constructor(context, declaration) {
104
+ const standardProps = CSSParsedDeclaration.standardProps;
105
+ // Fast path: display:none elements are invisible and their descendants
106
+ // are never rendered. Parse only initial values instead of full computed styles.
107
+ if (declaration.display === 'none') {
108
+ this.display = 0 /* DISPLAY.NONE */;
109
+ for (const [key, descriptor] of standardProps) {
110
+ if (key !== 'display') {
111
+ this[key] = parse(context, descriptor, undefined);
112
+ }
113
+ }
114
+ this.float = parse(context, float_1.float, undefined);
115
+ this.textDecorationColor = parse(context, text_decoration_color_1.textDecorationColor, undefined);
116
+ this.textDecorationLine = parse(context, text_decoration_line_1.textDecorationLine, undefined);
117
+ const overflowTuple = parse(context, overflow_1.overflow, undefined);
118
+ this.overflowX = overflowTuple[0];
119
+ this.overflowY = overflowTuple[overflowTuple.length > 1 ? 1 : 0];
120
+ return;
121
+ }
122
+ for (const [key, descriptor, cssProp] of standardProps) {
123
+ this[key] = parse(context, descriptor, declaration[cssProp]);
124
+ }
125
+ // Special cases that need different CSS property names or fallback values
126
+ this.float = parse(context, float_1.float, declaration.cssFloat);
127
+ this.textDecorationColor = parse(context, text_decoration_color_1.textDecorationColor, declaration.textDecorationColor ?? declaration.color);
128
+ this.textDecorationLine = parse(context, text_decoration_line_1.textDecorationLine, declaration.textDecorationLine ?? declaration.textDecoration);
129
+ // overflow returns a tuple that must be split into X/Y
130
+ const overflowTuple = parse(context, overflow_1.overflow, declaration.overflow);
131
+ this.overflowX = overflowTuple[0];
132
+ this.overflowY = overflowTuple[overflowTuple.length > 1 ? 1 : 0];
133
+ }
134
+ isVisible() {
135
+ return this.display > 0 && this.opacity > 0 && this.visibility === 0 /* VISIBILITY.VISIBLE */;
136
+ }
137
+ isTransparent() {
138
+ return (0, color_utilities_1.isTransparent)(this.backgroundColor);
139
+ }
140
+ isTransformed() {
141
+ return this.transform !== null || this.rotate !== null;
142
+ }
143
+ isPositioned() {
144
+ return this.position !== 0 /* POSITION.STATIC */;
145
+ }
146
+ isPositionedWithZIndex() {
147
+ return this.isPositioned() && !this.zIndex.auto;
148
+ }
149
+ isFloating() {
150
+ return this.float !== 0 /* FLOAT.NONE */;
151
+ }
152
+ isInlineLevel() {
153
+ return ((0, bitwise_1.contains)(this.display, 4 /* DISPLAY.INLINE */) ||
154
+ (0, bitwise_1.contains)(this.display, 33554432 /* DISPLAY.INLINE_BLOCK */) ||
155
+ (0, bitwise_1.contains)(this.display, 268435456 /* DISPLAY.INLINE_FLEX */) ||
156
+ (0, bitwise_1.contains)(this.display, 536870912 /* DISPLAY.INLINE_GRID */) ||
157
+ (0, bitwise_1.contains)(this.display, 67108864 /* DISPLAY.INLINE_LIST_ITEM */) ||
158
+ (0, bitwise_1.contains)(this.display, 134217728 /* DISPLAY.INLINE_TABLE */));
159
+ }
160
+ }
161
+ exports.CSSParsedDeclaration = CSSParsedDeclaration;
162
+ CSSParsedDeclaration.standardProps = [
163
+ ['animationDuration', duration_1.duration, 'animationDuration'],
164
+ ['backgroundClip', background_clip_1.backgroundClip, 'backgroundClip'],
165
+ ['backgroundColor', background_color_1.backgroundColor, 'backgroundColor'],
166
+ ['backgroundImage', background_image_1.backgroundImage, 'backgroundImage'],
167
+ ['backgroundOrigin', background_origin_1.backgroundOrigin, 'backgroundOrigin'],
168
+ ['backgroundPosition', background_position_1.backgroundPosition, 'backgroundPosition'],
169
+ ['backgroundRepeat', background_repeat_1.backgroundRepeat, 'backgroundRepeat'],
170
+ ['backgroundSize', background_size_1.backgroundSize, 'backgroundSize'],
171
+ ['borderTopColor', border_color_1.borderTopColor, 'borderTopColor'],
172
+ ['borderRightColor', border_color_1.borderRightColor, 'borderRightColor'],
173
+ ['borderBottomColor', border_color_1.borderBottomColor, 'borderBottomColor'],
174
+ ['borderLeftColor', border_color_1.borderLeftColor, 'borderLeftColor'],
175
+ ['borderTopLeftRadius', border_radius_1.borderTopLeftRadius, 'borderTopLeftRadius'],
176
+ ['borderTopRightRadius', border_radius_1.borderTopRightRadius, 'borderTopRightRadius'],
177
+ ['borderBottomRightRadius', border_radius_1.borderBottomRightRadius, 'borderBottomRightRadius'],
178
+ ['borderBottomLeftRadius', border_radius_1.borderBottomLeftRadius, 'borderBottomLeftRadius'],
179
+ ['borderTopStyle', border_style_1.borderTopStyle, 'borderTopStyle'],
180
+ ['borderRightStyle', border_style_1.borderRightStyle, 'borderRightStyle'],
181
+ ['borderBottomStyle', border_style_1.borderBottomStyle, 'borderBottomStyle'],
182
+ ['borderLeftStyle', border_style_1.borderLeftStyle, 'borderLeftStyle'],
183
+ ['borderTopWidth', border_width_1.borderTopWidth, 'borderTopWidth'],
184
+ ['borderRightWidth', border_width_1.borderRightWidth, 'borderRightWidth'],
185
+ ['borderBottomWidth', border_width_1.borderBottomWidth, 'borderBottomWidth'],
186
+ ['borderLeftWidth', border_width_1.borderLeftWidth, 'borderLeftWidth'],
187
+ ['boxShadow', box_shadow_1.boxShadow, 'boxShadow'],
188
+ ['clipPath', clip_path_1.clipPath, 'clipPath'],
189
+ ['color', color_1.color, 'color'],
190
+ ['direction', direction_1.direction, 'direction'],
191
+ ['display', display_1.display, 'display'],
192
+ ['fontFamily', font_family_1.fontFamily, 'fontFamily'],
193
+ ['fontSize', font_size_1.fontSize, 'fontSize'],
194
+ ['fontStyle', font_style_1.fontStyle, 'fontStyle'],
195
+ ['fontVariant', font_variant_1.fontVariant, 'fontVariant'],
196
+ ['fontWeight', font_weight_1.fontWeight, 'fontWeight'],
197
+ ['letterSpacing', letter_spacing_1.letterSpacing, 'letterSpacing'],
198
+ ['lineBreak', line_break_1.lineBreak, 'lineBreak'],
199
+ ['lineHeight', line_height_1.lineHeight, 'lineHeight'],
200
+ ['listStyleImage', list_style_image_1.listStyleImage, 'listStyleImage'],
201
+ ['listStylePosition', list_style_position_1.listStylePosition, 'listStylePosition'],
202
+ ['listStyleType', list_style_type_1.listStyleType, 'listStyleType'],
203
+ ['marginTop', margin_1.marginTop, 'marginTop'],
204
+ ['marginRight', margin_1.marginRight, 'marginRight'],
205
+ ['marginBottom', margin_1.marginBottom, 'marginBottom'],
206
+ ['marginLeft', margin_1.marginLeft, 'marginLeft'],
207
+ ['opacity', opacity_1.opacity, 'opacity'],
208
+ ['overflowWrap', overflow_wrap_1.overflowWrap, 'overflowWrap'],
209
+ ['paddingTop', padding_1.paddingTop, 'paddingTop'],
210
+ ['paddingRight', padding_1.paddingRight, 'paddingRight'],
211
+ ['paddingBottom', padding_1.paddingBottom, 'paddingBottom'],
212
+ ['paddingLeft', padding_1.paddingLeft, 'paddingLeft'],
213
+ ['paintOrder', paint_order_1.paintOrder, 'paintOrder'],
214
+ ['position', position_1.position, 'position'],
215
+ ['textAlign', text_align_1.textAlign, 'textAlign'],
216
+ ['textDecorationStyle', text_decoration_style_1.textDecorationStyle, 'textDecorationStyle'],
217
+ ['textDecorationThickness', text_decoration_thickness_1.textDecorationThickness, 'textDecorationThickness'],
218
+ ['textUnderlineOffset', text_underline_offset_1.textUnderlineOffset, 'textUnderlineOffset'],
219
+ ['textShadow', text_shadow_1.textShadow, 'textShadow'],
220
+ ['textTransform', text_transform_1.textTransform, 'textTransform'],
221
+ ['textOverflow', text_overflow_1.textOverflow, 'textOverflow'],
222
+ ['transform', transform_1.transform, 'transform'],
223
+ ['transformOrigin', transform_origin_1.transformOrigin, 'transformOrigin'],
224
+ ['rotate', rotate_1.rotate, 'rotate'],
225
+ ['visibility', visibility_1.visibility, 'visibility'],
226
+ ['webkitTextStrokeColor', webkit_text_stroke_color_1.webkitTextStrokeColor, 'webkitTextStrokeColor'],
227
+ ['webkitTextStrokeWidth', webkit_text_stroke_width_1.webkitTextStrokeWidth, 'webkitTextStrokeWidth'],
228
+ ['webkitLineClamp', webkit_line_clamp_1.webkitLineClamp, 'webkitLineClamp'],
229
+ ['wordBreak', word_break_1.wordBreak, 'wordBreak'],
230
+ ['writingMode', writing_mode_1.writingMode, 'writingMode'],
231
+ ['zIndex', z_index_1.zIndex, 'zIndex'],
232
+ ['objectFit', object_fit_1.objectFit, 'objectFit'],
233
+ ['imageRendering', image_rendering_1.imageRendering, 'imageRendering'],
234
+ ['mixBlendMode', mix_blend_mode_1.mixBlendMode, 'mixBlendMode'],
235
+ ['filter', filter_1.filter, 'filter'],
236
+ ['fontVariantLigatures', font_variant_ligatures_1.fontVariantLigatures, 'fontVariantLigatures'],
237
+ ['zoom', zoom_1.zoom, 'zoom'],
238
+ ['objectPosition', object_position_1.objectPosition, 'objectPosition'],
239
+ ['backgroundBlendMode', background_blend_mode_1.backgroundBlendMode, 'backgroundBlendMode'],
240
+ ['borderImageSource', border_image_source_1.borderImageSource, 'borderImageSource'],
241
+ ['borderImageSlice', border_image_slice_1.borderImageSlice, 'borderImageSlice'],
242
+ ['borderImageRepeat', border_image_repeat_1.borderImageRepeat, 'borderImageRepeat'],
243
+ ['boxDecorationBreak', box_decoration_break_1.boxDecorationBreak, 'boxDecorationBreak']
244
+ ];
245
+ class CSSParsedPseudoDeclaration {
246
+ constructor(context, declaration) {
247
+ this.content = parse(context, content_1.content, declaration.content);
248
+ this.quotes = parse(context, quotes_1.quotes, declaration.quotes);
249
+ }
250
+ }
251
+ exports.CSSParsedPseudoDeclaration = CSSParsedPseudoDeclaration;
252
+ class CSSParsedCounterDeclaration {
253
+ constructor(context, declaration) {
254
+ this.counterIncrement = parse(context, counter_increment_1.counterIncrement, declaration.counterIncrement);
255
+ this.counterReset = parse(context, counter_reset_1.counterReset, declaration.counterReset);
256
+ }
257
+ }
258
+ exports.CSSParsedCounterDeclaration = CSSParsedCounterDeclaration;
259
+ const parseCache = new Map();
260
+ const parse = (context, descriptor, style) => {
261
+ const rawValue = style !== null && typeof style !== 'undefined' ? style.toString() : descriptor.initialValue;
262
+ let valueCache = parseCache.get(descriptor);
263
+ if (valueCache) {
264
+ const cached = valueCache.get(rawValue);
265
+ if (cached !== undefined) {
266
+ valueCache.delete(rawValue);
267
+ valueCache.set(rawValue, cached);
268
+ return cached;
269
+ }
270
+ }
271
+ const tokenizer = tokenizer_1.Tokenizer.get();
272
+ tokenizer.write(rawValue);
273
+ const parser = new parser_1.Parser(tokenizer.read());
274
+ tokenizer_1.Tokenizer.release(tokenizer);
275
+ // Use IIFE so TS infers the return type of each branch (no `let result: any`)
276
+ const result = (() => {
277
+ switch (descriptor.type) {
278
+ case 2 /* PropertyDescriptorParsingType.IDENT_VALUE */: {
279
+ const token = parser.parseComponentValue();
280
+ return descriptor.parse(context, (0, parser_1.isIdentToken)(token) ? token.value : descriptor.initialValue);
281
+ }
282
+ case 0 /* PropertyDescriptorParsingType.VALUE */:
283
+ return descriptor.parse(context, parser.parseComponentValue());
284
+ case 1 /* PropertyDescriptorParsingType.LIST */:
285
+ return descriptor.parse(context, parser.parseComponentValues());
286
+ case 4 /* PropertyDescriptorParsingType.TOKEN_VALUE */:
287
+ return parser.parseComponentValue();
288
+ case 3 /* PropertyDescriptorParsingType.TYPE_VALUE */:
289
+ switch (descriptor.format) {
290
+ case 'angle':
291
+ return angle_1.angle.parse(context, parser.parseComponentValue());
292
+ case 'color':
293
+ return color_2.color.parse(context, parser.parseComponentValue());
294
+ case 'image':
295
+ return image_1.image.parse(context, parser.parseComponentValue());
296
+ case 'length': {
297
+ const length = parser.parseComponentValue();
298
+ return (0, length_1.isLength)(length) ? length : length_percentage_1.ZERO_LENGTH;
299
+ }
300
+ case 'length-percentage': {
301
+ const value = parser.parseComponentValue();
302
+ return (0, length_percentage_1.isLengthPercentage)(value) ? value : length_percentage_1.ZERO_LENGTH;
303
+ }
304
+ case 'time':
305
+ return time_1.time.parse(context, parser.parseComponentValue());
306
+ }
307
+ }
308
+ })();
309
+ if (!valueCache) {
310
+ valueCache = new Map();
311
+ parseCache.set(descriptor, valueCache);
312
+ }
313
+ // Skip caching for descriptors whose parse() has the critical side effect
314
+ // of calling context.cache.addImage() which must run on every render pass
315
+ // (different cache instances per html2canvas call). Two paths:
316
+ // 1. Per-descriptor skipCache flag (backgroundImage, listStyleImage,
317
+ // borderImageSource — all call image.parse() internally).
318
+ // 2. TYPE_VALUE + format 'image' — the image type descriptor itself,
319
+ // which calls addImage() directly.
320
+ const skipCache = descriptor.skipCache ||
321
+ (descriptor.type === 3 /* PropertyDescriptorParsingType.TYPE_VALUE */ && descriptor.format === 'image');
322
+ if (!skipCache) {
323
+ if (valueCache.size >= constants_1.PARSE_CACHE_MAX_PER_DESCRIPTOR) {
324
+ const oldestKey = valueCache.keys().next().value;
325
+ valueCache.delete(oldestKey);
326
+ }
327
+ valueCache.set(rawValue, result);
328
+ }
329
+ return result;
330
+ };
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseDocumentSize = exports.parseBounds = exports.Bounds = void 0;
4
+ class Bounds {
5
+ constructor(left, top, width, height) {
6
+ this.left = left;
7
+ this.top = top;
8
+ this.width = width;
9
+ this.height = height;
10
+ }
11
+ add(x, y, w, h) {
12
+ return new Bounds(this.left + x, this.top + y, this.width + w, this.height + h);
13
+ }
14
+ static fromClientRect(context, clientRect) {
15
+ return new Bounds(clientRect.left + context.windowBounds.left, clientRect.top + context.windowBounds.top, clientRect.width, clientRect.height);
16
+ }
17
+ static fromDOMRectList(context, domRectList) {
18
+ const rects = Array.from(domRectList);
19
+ // First try to find a rect with non-zero width
20
+ let domRect = rects.find((rect) => rect.width !== 0);
21
+ // If not found, try to find a rect with non-zero height
22
+ // This handles cases like inline-flex with single child where width might be 0
23
+ if (!domRect) {
24
+ domRect = rects.find((rect) => rect.height !== 0);
25
+ }
26
+ // If still not found but rects exist, use the first rect
27
+ // Position info (left, top) might still be valid even if dimensions are 0
28
+ if (!domRect && rects.length > 0) {
29
+ domRect = rects[0];
30
+ }
31
+ return domRect
32
+ ? new Bounds(domRect.left + context.windowBounds.left, domRect.top + context.windowBounds.top, domRect.width, domRect.height)
33
+ : Bounds.EMPTY;
34
+ }
35
+ }
36
+ exports.Bounds = Bounds;
37
+ Bounds.EMPTY = new Bounds(0, 0, 0, 0);
38
+ const parseBounds = (context, node) => {
39
+ return Bounds.fromClientRect(context, node.getBoundingClientRect());
40
+ };
41
+ exports.parseBounds = parseBounds;
42
+ const parseDocumentSize = (document) => {
43
+ const body = document.body;
44
+ const documentElement = document.documentElement;
45
+ if (!body || !documentElement) {
46
+ throw new Error(`Unable to get document size`);
47
+ }
48
+ const width = Math.max(Math.max(body.scrollWidth, documentElement.scrollWidth), Math.max(body.offsetWidth, documentElement.offsetWidth), Math.max(body.clientWidth, documentElement.clientWidth));
49
+ const height = Math.max(Math.max(body.scrollHeight, documentElement.scrollHeight), Math.max(body.offsetHeight, documentElement.offsetHeight), Math.max(body.clientHeight, documentElement.clientHeight));
50
+ return new Bounds(0, 0, width, height);
51
+ };
52
+ exports.parseDocumentSize = parseDocumentSize;
@@ -0,0 +1,133 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.segmentGraphemes = exports.parseTextBounds = exports.TextBounds = void 0;
4
+ const css_line_break_1 = require("css-line-break");
5
+ const text_segmentation_1 = require("text-segmentation");
6
+ const bounds_1 = require("./bounds");
7
+ const features_1 = require("../../core/features");
8
+ const writing_mode_1 = require("../property-descriptors/writing-mode");
9
+ class TextBounds {
10
+ constructor(text, bounds) {
11
+ this.text = text;
12
+ this.bounds = bounds;
13
+ }
14
+ }
15
+ exports.TextBounds = TextBounds;
16
+ const parseTextBounds = (context, value, styles, node) => {
17
+ const textList = breakText(value, styles);
18
+ const textBounds = [];
19
+ let offset = 0;
20
+ textList.forEach((text) => {
21
+ if (styles.textDecorationLine.length || text.trim().length > 0) {
22
+ if (features_1.FEATURES.SUPPORT_RANGE_BOUNDS) {
23
+ const clientRects = createRange(node, offset, text.length).getClientRects();
24
+ if (clientRects.length > 1) {
25
+ const subSegments = (0, exports.segmentGraphemes)(text);
26
+ let subOffset = 0;
27
+ subSegments.forEach((subSegment) => {
28
+ textBounds.push(new TextBounds(subSegment, bounds_1.Bounds.fromDOMRectList(context, createRange(node, subOffset + offset, subSegment.length).getClientRects())));
29
+ subOffset += subSegment.length;
30
+ });
31
+ }
32
+ else {
33
+ textBounds.push(new TextBounds(text, bounds_1.Bounds.fromDOMRectList(context, clientRects)));
34
+ }
35
+ }
36
+ else {
37
+ const replacementNode = node.splitText(text.length);
38
+ textBounds.push(new TextBounds(text, getWrapperBounds(context, node)));
39
+ node = replacementNode;
40
+ }
41
+ }
42
+ else if (!features_1.FEATURES.SUPPORT_RANGE_BOUNDS) {
43
+ node = node.splitText(text.length);
44
+ }
45
+ offset += text.length;
46
+ });
47
+ return textBounds;
48
+ };
49
+ exports.parseTextBounds = parseTextBounds;
50
+ const getWrapperBounds = (context, node) => {
51
+ const ownerDocument = node.ownerDocument;
52
+ if (ownerDocument) {
53
+ const wrapper = ownerDocument.createElement('html2canvaswrapper');
54
+ wrapper.appendChild(node.cloneNode(true));
55
+ const parentNode = node.parentNode;
56
+ if (parentNode) {
57
+ parentNode.replaceChild(wrapper, node);
58
+ const bounds = (0, bounds_1.parseBounds)(context, wrapper);
59
+ if (wrapper.firstChild) {
60
+ parentNode.replaceChild(wrapper.firstChild, wrapper);
61
+ }
62
+ return bounds;
63
+ }
64
+ }
65
+ return bounds_1.Bounds.EMPTY;
66
+ };
67
+ const createRange = (node, offset, length) => {
68
+ const ownerDocument = node.ownerDocument;
69
+ if (!ownerDocument) {
70
+ throw new Error('Node has no owner document');
71
+ }
72
+ const range = ownerDocument.createRange();
73
+ range.setStart(node, offset);
74
+ range.setEnd(node, offset + length);
75
+ return range;
76
+ };
77
+ const segmentGraphemes = (value) => {
78
+ if (features_1.FEATURES.SUPPORT_NATIVE_TEXT_SEGMENTATION) {
79
+ // Intl.Segmenter is TC39 Stage 4 but not yet in TS lib types
80
+ const Segmenter = Intl;
81
+ const seg = new Segmenter.Segmenter(void 0, { granularity: 'grapheme' });
82
+ return Array.from(seg.segment(value)).map((s) => s.segment);
83
+ }
84
+ return (0, text_segmentation_1.splitGraphemes)(value);
85
+ };
86
+ exports.segmentGraphemes = segmentGraphemes;
87
+ const segmentWords = (value, styles) => {
88
+ if (features_1.FEATURES.SUPPORT_NATIVE_TEXT_SEGMENTATION) {
89
+ const Segmenter = Intl;
90
+ const seg = new Segmenter.Segmenter(void 0, { granularity: 'word' });
91
+ return Array.from(seg.segment(value)).map((s) => s.segment);
92
+ }
93
+ return breakWords(value, styles);
94
+ };
95
+ const breakText = (value, styles) => {
96
+ if ((0, writing_mode_1.isVerticalWritingMode)(styles.writingMode)) {
97
+ return (0, exports.segmentGraphemes)(value);
98
+ }
99
+ return styles.letterSpacing !== 0 ? (0, exports.segmentGraphemes)(value) : segmentWords(value, styles);
100
+ };
101
+ // https://drafts.csswg.org/css-text/#word-separator
102
+ const wordSeparators = [0x0020, 0x00a0, 0x1361, 0x10100, 0x10101, 0x1039, 0x1091];
103
+ const breakWords = (str, styles) => {
104
+ const breaker = (0, css_line_break_1.LineBreaker)(str, {
105
+ lineBreak: styles.lineBreak,
106
+ wordBreak: styles.overflowWrap === "break-word" /* OVERFLOW_WRAP.BREAK_WORD */ ? 'break-word' : styles.wordBreak
107
+ });
108
+ const words = [];
109
+ let bk;
110
+ while (!(bk = breaker.next()).done) {
111
+ if (bk.value) {
112
+ const value = bk.value.slice();
113
+ const codePoints = (0, css_line_break_1.toCodePoints)(value);
114
+ let word = '';
115
+ codePoints.forEach((codePoint) => {
116
+ if (wordSeparators.indexOf(codePoint) === -1) {
117
+ word += (0, css_line_break_1.fromCodePoint)(codePoint);
118
+ }
119
+ else {
120
+ if (word.length) {
121
+ words.push(word);
122
+ }
123
+ words.push((0, css_line_break_1.fromCodePoint)(codePoint));
124
+ word = '';
125
+ }
126
+ });
127
+ if (word.length) {
128
+ words.push(word);
129
+ }
130
+ }
131
+ }
132
+ return words;
133
+ };
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });