html2canvas-pro 2.1.0 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (266) hide show
  1. package/dist/html2canvas-pro.esm.js +10226 -10526
  2. package/dist/html2canvas-pro.esm.js.map +1 -1
  3. package/dist/html2canvas-pro.js +10869 -11171
  4. package/dist/html2canvas-pro.js.map +1 -1
  5. package/dist/html2canvas-pro.min.js +8 -8
  6. package/dist/lib/config.js +0 -22
  7. package/dist/lib/core/cache-storage.js +3 -40
  8. package/dist/lib/core/constants.js +25 -0
  9. package/dist/lib/core/context.js +1 -0
  10. package/dist/lib/core/features.js +3 -2
  11. package/dist/lib/core/validator.js +3 -3
  12. package/dist/lib/css/grouped/background-styles.js +36 -0
  13. package/dist/lib/css/grouped/border-styles.js +75 -0
  14. package/dist/lib/css/grouped/font-styles.js +93 -0
  15. package/dist/lib/css/grouped/layout-styles.js +127 -0
  16. package/dist/lib/css/index.js +74 -46
  17. package/dist/lib/css/layout/text.js +7 -6
  18. package/dist/lib/css/property-descriptors/background-blend-mode.js +41 -0
  19. package/dist/lib/css/property-descriptors/border-image-repeat.js +42 -0
  20. package/dist/lib/css/property-descriptors/border-image-slice.js +45 -0
  21. package/dist/lib/css/property-descriptors/border-image-source.js +21 -0
  22. package/dist/lib/css/property-descriptors/border-radius.js +1 -1
  23. package/dist/lib/css/property-descriptors/box-decoration-break.js +18 -0
  24. package/dist/lib/css/property-descriptors/counter-increment.js +17 -12
  25. package/dist/lib/css/property-descriptors/counter-reset.js +4 -12
  26. package/dist/lib/css/property-descriptors/filter.js +76 -0
  27. package/dist/lib/css/property-descriptors/font-variant-ligatures.js +34 -0
  28. package/dist/lib/css/property-descriptors/object-fit.js +1 -1
  29. package/dist/lib/css/property-descriptors/object-position.js +42 -0
  30. package/dist/lib/css/property-descriptors/visibility.js +1 -1
  31. package/dist/lib/css/property-descriptors/zoom.js +18 -0
  32. package/dist/lib/css/syntax/parser.js +0 -1
  33. package/dist/lib/css/types/color.js +5 -1
  34. package/dist/lib/css/types/functions/repeating-linear-gradient.js +9 -0
  35. package/dist/lib/css/types/image.js +12 -2
  36. package/dist/lib/css/types/length-percentage.js +6 -2
  37. package/dist/lib/css/types/safe-eval.js +80 -0
  38. package/dist/lib/dom/document-cloner.js +23 -163
  39. package/dist/lib/dom/slot-cloner.js +176 -0
  40. package/dist/lib/index.js +1 -17
  41. package/dist/lib/render/canvas/background-renderer.js +169 -30
  42. package/dist/lib/render/canvas/border-image-renderer.js +153 -0
  43. package/dist/lib/render/canvas/canvas-renderer.js +39 -190
  44. package/dist/lib/render/canvas/content-renderer.js +202 -0
  45. package/dist/lib/render/canvas/effects-renderer.js +3 -0
  46. package/dist/lib/render/canvas/foreignobject-renderer.js +5 -1
  47. package/dist/lib/render/canvas/text/text-decoration-renderer.js +99 -0
  48. package/dist/lib/render/canvas/text-renderer.js +100 -224
  49. package/dist/lib/render/effects.js +38 -3
  50. package/dist/lib/render/object-fit.js +19 -15
  51. package/dist/lib/render/stacking-context.js +11 -0
  52. package/dist/types/config.d.ts +0 -10
  53. package/dist/types/core/cache-storage.d.ts +0 -24
  54. package/dist/types/core/constants.d.ts +22 -0
  55. package/dist/types/core/context.d.ts +3 -0
  56. package/dist/types/core/performance-monitor.d.ts +4 -4
  57. package/dist/types/core/validator.d.ts +6 -8
  58. package/dist/types/css/grouped/background-styles.d.ts +16 -0
  59. package/dist/types/css/grouped/border-styles.d.ts +31 -0
  60. package/dist/types/css/grouped/font-styles.d.ts +35 -0
  61. package/dist/types/css/grouped/layout-styles.d.ts +46 -0
  62. package/dist/types/css/index.d.ts +30 -0
  63. package/dist/types/css/property-descriptors/background-blend-mode.d.ts +23 -0
  64. package/dist/types/css/property-descriptors/border-image-repeat.d.ts +12 -0
  65. package/dist/types/css/property-descriptors/border-image-slice.d.ts +10 -0
  66. package/dist/types/css/property-descriptors/border-image-source.d.ts +4 -0
  67. package/dist/types/css/property-descriptors/box-decoration-break.d.ts +6 -0
  68. package/dist/types/css/property-descriptors/counter-increment.d.ts +3 -0
  69. package/dist/types/css/property-descriptors/filter.d.ts +3 -0
  70. package/dist/types/css/property-descriptors/font-variant-ligatures.d.ts +14 -0
  71. package/dist/types/css/property-descriptors/object-position.d.ts +4 -0
  72. package/dist/types/css/property-descriptors/zoom.d.ts +3 -0
  73. package/dist/types/css/types/functions/repeating-linear-gradient.d.ts +4 -0
  74. package/dist/types/css/types/image.d.ts +4 -2
  75. package/dist/types/css/types/safe-eval.d.ts +8 -0
  76. package/dist/types/dom/document-cloner.d.ts +3 -44
  77. package/dist/types/dom/slot-cloner.d.ts +66 -0
  78. package/dist/types/index.d.ts +3 -7
  79. package/dist/types/options.d.ts +11 -0
  80. package/dist/types/render/canvas/background-renderer.d.ts +23 -0
  81. package/dist/types/render/canvas/border-image-renderer.d.ts +18 -0
  82. package/dist/types/render/canvas/canvas-renderer.d.ts +1 -0
  83. package/dist/types/render/canvas/content-renderer.d.ts +44 -0
  84. package/dist/types/render/canvas/text/text-decoration-renderer.d.ts +18 -0
  85. package/dist/types/render/canvas/text-renderer.d.ts +12 -1
  86. package/dist/types/render/effects.d.ts +12 -2
  87. package/dist/types/render/object-fit.d.ts +2 -1
  88. package/dist/types/render/renderer-interface.d.ts +11 -9
  89. package/package.json +7 -20
  90. package/dist/lib/dom/replaced-elements/pseudo-elements.js +0 -0
  91. package/dist/lib/invariant.js +0 -9
  92. package/dist/types/dom/replaced-elements/pseudo-elements.d.ts +0 -0
  93. package/dist/types/invariant.d.ts +0 -1
  94. package/src/__tests__/index.ts +0 -99
  95. package/src/config.ts +0 -107
  96. package/src/core/__mocks__/cache-storage.ts +0 -1
  97. package/src/core/__mocks__/context.ts +0 -19
  98. package/src/core/__mocks__/features.ts +0 -8
  99. package/src/core/__mocks__/logger.ts +0 -17
  100. package/src/core/__tests__/cache-storage.test.ts +0 -205
  101. package/src/core/__tests__/cache-storage.ts +0 -278
  102. package/src/core/__tests__/logger.ts +0 -29
  103. package/src/core/__tests__/validator.ts +0 -359
  104. package/src/core/bitwise.ts +0 -1
  105. package/src/core/cache-storage.ts +0 -315
  106. package/src/core/context.ts +0 -31
  107. package/src/core/debugger.ts +0 -32
  108. package/src/core/features.ts +0 -222
  109. package/src/core/logger.ts +0 -64
  110. package/src/core/origin-checker.ts +0 -57
  111. package/src/core/performance-monitor.ts +0 -241
  112. package/src/core/render-element.ts +0 -272
  113. package/src/core/util.ts +0 -1
  114. package/src/core/validator.ts +0 -593
  115. package/src/css/index.ts +0 -427
  116. package/src/css/layout/__mocks__/bounds.ts +0 -6
  117. package/src/css/layout/bounds.ts +0 -79
  118. package/src/css/layout/text.ts +0 -161
  119. package/src/css/property-descriptor.ts +0 -49
  120. package/src/css/property-descriptors/__tests__/background-tests.ts +0 -65
  121. package/src/css/property-descriptors/__tests__/clip-path.test.ts +0 -280
  122. package/src/css/property-descriptors/__tests__/font-family.ts +0 -25
  123. package/src/css/property-descriptors/__tests__/image-rendering-integration.test.ts +0 -153
  124. package/src/css/property-descriptors/__tests__/image-rendering-performance.test.ts +0 -175
  125. package/src/css/property-descriptors/__tests__/image-rendering.test.ts +0 -72
  126. package/src/css/property-descriptors/__tests__/paint-order.ts +0 -87
  127. package/src/css/property-descriptors/__tests__/text-shadow.ts +0 -94
  128. package/src/css/property-descriptors/__tests__/transform-tests.ts +0 -18
  129. package/src/css/property-descriptors/background-clip.ts +0 -30
  130. package/src/css/property-descriptors/background-color.ts +0 -9
  131. package/src/css/property-descriptors/background-image.ts +0 -27
  132. package/src/css/property-descriptors/background-origin.ts +0 -31
  133. package/src/css/property-descriptors/background-position.ts +0 -38
  134. package/src/css/property-descriptors/background-repeat.ts +0 -44
  135. package/src/css/property-descriptors/background-size.ts +0 -27
  136. package/src/css/property-descriptors/border-color.ts +0 -13
  137. package/src/css/property-descriptors/border-radius.ts +0 -19
  138. package/src/css/property-descriptors/border-style.ts +0 -34
  139. package/src/css/property-descriptors/border-width.ts +0 -20
  140. package/src/css/property-descriptors/box-shadow.ts +0 -60
  141. package/src/css/property-descriptors/clip-path.ts +0 -271
  142. package/src/css/property-descriptors/color.ts +0 -9
  143. package/src/css/property-descriptors/content.ts +0 -26
  144. package/src/css/property-descriptors/counter-increment.ts +0 -43
  145. package/src/css/property-descriptors/counter-reset.ts +0 -36
  146. package/src/css/property-descriptors/direction.ts +0 -23
  147. package/src/css/property-descriptors/display.ts +0 -117
  148. package/src/css/property-descriptors/duration.ts +0 -14
  149. package/src/css/property-descriptors/float.ts +0 -29
  150. package/src/css/property-descriptors/font-family.ts +0 -38
  151. package/src/css/property-descriptors/font-size.ts +0 -9
  152. package/src/css/property-descriptors/font-style.ts +0 -25
  153. package/src/css/property-descriptors/font-variant.ts +0 -12
  154. package/src/css/property-descriptors/font-weight.ts +0 -26
  155. package/src/css/property-descriptors/image-rendering.ts +0 -33
  156. package/src/css/property-descriptors/letter-spacing.ts +0 -25
  157. package/src/css/property-descriptors/line-break.ts +0 -22
  158. package/src/css/property-descriptors/line-height.ts +0 -22
  159. package/src/css/property-descriptors/list-style-image.ts +0 -19
  160. package/src/css/property-descriptors/list-style-position.ts +0 -22
  161. package/src/css/property-descriptors/list-style-type.ts +0 -179
  162. package/src/css/property-descriptors/margin.ts +0 -13
  163. package/src/css/property-descriptors/mix-blend-mode.ts +0 -35
  164. package/src/css/property-descriptors/object-fit.ts +0 -39
  165. package/src/css/property-descriptors/opacity.ts +0 -15
  166. package/src/css/property-descriptors/overflow-wrap.ts +0 -22
  167. package/src/css/property-descriptors/overflow.ts +0 -34
  168. package/src/css/property-descriptors/padding.ts +0 -14
  169. package/src/css/property-descriptors/paint-order.ts +0 -42
  170. package/src/css/property-descriptors/position.ts +0 -30
  171. package/src/css/property-descriptors/quotes.ts +0 -57
  172. package/src/css/property-descriptors/rotate.ts +0 -34
  173. package/src/css/property-descriptors/text-align.ts +0 -26
  174. package/src/css/property-descriptors/text-decoration-color.ts +0 -9
  175. package/src/css/property-descriptors/text-decoration-line.ts +0 -38
  176. package/src/css/property-descriptors/text-decoration-style.ts +0 -32
  177. package/src/css/property-descriptors/text-decoration-thickness.ts +0 -30
  178. package/src/css/property-descriptors/text-overflow.ts +0 -23
  179. package/src/css/property-descriptors/text-shadow.ts +0 -52
  180. package/src/css/property-descriptors/text-transform.ts +0 -27
  181. package/src/css/property-descriptors/text-underline-offset.ts +0 -27
  182. package/src/css/property-descriptors/transform-origin.ts +0 -29
  183. package/src/css/property-descriptors/transform.ts +0 -74
  184. package/src/css/property-descriptors/visibility.ts +0 -25
  185. package/src/css/property-descriptors/webkit-line-clamp.ts +0 -30
  186. package/src/css/property-descriptors/webkit-text-stroke-color.ts +0 -8
  187. package/src/css/property-descriptors/webkit-text-stroke-width.ts +0 -15
  188. package/src/css/property-descriptors/word-break.ts +0 -25
  189. package/src/css/property-descriptors/writing-mode.ts +0 -37
  190. package/src/css/property-descriptors/z-index.ts +0 -27
  191. package/src/css/syntax/__tests__/tokernizer-tests.ts +0 -29
  192. package/src/css/syntax/parser.ts +0 -188
  193. package/src/css/syntax/tokenizer.ts +0 -822
  194. package/src/css/type-descriptor.ts +0 -7
  195. package/src/css/types/__tests__/color-tests.ts +0 -147
  196. package/src/css/types/__tests__/image-tests.ts +0 -239
  197. package/src/css/types/angle.ts +0 -86
  198. package/src/css/types/color-math.ts +0 -22
  199. package/src/css/types/color-spaces/a98.ts +0 -86
  200. package/src/css/types/color-spaces/p3.ts +0 -92
  201. package/src/css/types/color-spaces/pro-photo.ts +0 -87
  202. package/src/css/types/color-spaces/rec2020.ts +0 -90
  203. package/src/css/types/color-spaces/srgb.ts +0 -87
  204. package/src/css/types/color-utilities.ts +0 -452
  205. package/src/css/types/color.ts +0 -485
  206. package/src/css/types/functions/-prefix-linear-gradient.ts +0 -35
  207. package/src/css/types/functions/-prefix-radial-gradient.ts +0 -106
  208. package/src/css/types/functions/-webkit-gradient.ts +0 -69
  209. package/src/css/types/functions/__tests__/radial-gradient.ts +0 -69
  210. package/src/css/types/functions/counter.ts +0 -511
  211. package/src/css/types/functions/gradient.ts +0 -206
  212. package/src/css/types/functions/linear-gradient.ts +0 -28
  213. package/src/css/types/functions/radial-gradient.ts +0 -101
  214. package/src/css/types/image.ts +0 -120
  215. package/src/css/types/index.ts +0 -1
  216. package/src/css/types/length-percentage.ts +0 -137
  217. package/src/css/types/length.ts +0 -7
  218. package/src/css/types/time.ts +0 -20
  219. package/src/dom/__mocks__/document-cloner.ts +0 -22
  220. package/src/dom/__tests__/dom-normalizer.test.ts +0 -133
  221. package/src/dom/__tests__/element-container.test.ts +0 -129
  222. package/src/dom/document-cloner.ts +0 -929
  223. package/src/dom/dom-normalizer.ts +0 -133
  224. package/src/dom/element-container.ts +0 -75
  225. package/src/dom/elements/li-element-container.ts +0 -10
  226. package/src/dom/elements/ol-element-container.ts +0 -12
  227. package/src/dom/elements/select-element-container.ts +0 -10
  228. package/src/dom/elements/textarea-element-container.ts +0 -9
  229. package/src/dom/node-parser.ts +0 -177
  230. package/src/dom/node-type-guards.ts +0 -70
  231. package/src/dom/replaced-elements/canvas-element-container.ts +0 -15
  232. package/src/dom/replaced-elements/iframe-element-container.ts +0 -55
  233. package/src/dom/replaced-elements/image-element-container.ts +0 -16
  234. package/src/dom/replaced-elements/index.ts +0 -5
  235. package/src/dom/replaced-elements/input-element-container.ts +0 -105
  236. package/src/dom/replaced-elements/pseudo-elements.ts +0 -0
  237. package/src/dom/replaced-elements/svg-element-container.ts +0 -23
  238. package/src/dom/text-container.ts +0 -42
  239. package/src/global.d.ts +0 -19
  240. package/src/index.ts +0 -82
  241. package/src/invariant.ts +0 -5
  242. package/src/options.ts +0 -55
  243. package/src/render/__tests__/object-fit.test.ts +0 -85
  244. package/src/render/background.ts +0 -298
  245. package/src/render/bezier-curve.ts +0 -47
  246. package/src/render/border.ts +0 -165
  247. package/src/render/bound-curves.ts +0 -388
  248. package/src/render/box-sizing.ts +0 -31
  249. package/src/render/canvas/__tests__/background-renderer.test.ts +0 -72
  250. package/src/render/canvas/__tests__/border-renderer.test.ts +0 -24
  251. package/src/render/canvas/__tests__/effects-renderer.test.ts +0 -32
  252. package/src/render/canvas/__tests__/text-renderer.test.ts +0 -471
  253. package/src/render/canvas/background-renderer.ts +0 -271
  254. package/src/render/canvas/border-renderer.ts +0 -224
  255. package/src/render/canvas/canvas-path.ts +0 -31
  256. package/src/render/canvas/canvas-renderer.ts +0 -641
  257. package/src/render/canvas/effects-renderer.ts +0 -130
  258. package/src/render/canvas/foreignobject-renderer.ts +0 -53
  259. package/src/render/canvas/text-renderer.ts +0 -700
  260. package/src/render/effects.ts +0 -75
  261. package/src/render/font-metrics.ts +0 -72
  262. package/src/render/object-fit.ts +0 -100
  263. package/src/render/path.ts +0 -37
  264. package/src/render/renderer-interface.ts +0 -28
  265. package/src/render/stacking-context.ts +0 -386
  266. package/src/render/vector.ts +0 -19
@@ -1,388 +0,0 @@
1
- import { ElementContainer } from '../dom/element-container';
2
- import { getAbsoluteValue, getAbsoluteValueForTuple } from '../css/types/length-percentage';
3
- import { Vector } from './vector';
4
- import { BezierCurve } from './bezier-curve';
5
- import { Path } from './path';
6
-
7
- export class BoundCurves {
8
- readonly topLeftBorderDoubleOuterBox: Path;
9
- readonly topRightBorderDoubleOuterBox: Path;
10
- readonly bottomRightBorderDoubleOuterBox: Path;
11
- readonly bottomLeftBorderDoubleOuterBox: Path;
12
- readonly topLeftBorderDoubleInnerBox: Path;
13
- readonly topRightBorderDoubleInnerBox: Path;
14
- readonly bottomRightBorderDoubleInnerBox: Path;
15
- readonly bottomLeftBorderDoubleInnerBox: Path;
16
- readonly topLeftBorderStroke: Path;
17
- readonly topRightBorderStroke: Path;
18
- readonly bottomRightBorderStroke: Path;
19
- readonly bottomLeftBorderStroke: Path;
20
- readonly topLeftBorderBox: Path;
21
- readonly topRightBorderBox: Path;
22
- readonly bottomRightBorderBox: Path;
23
- readonly bottomLeftBorderBox: Path;
24
- readonly topLeftPaddingBox: Path;
25
- readonly topRightPaddingBox: Path;
26
- readonly bottomRightPaddingBox: Path;
27
- readonly bottomLeftPaddingBox: Path;
28
- readonly topLeftContentBox: Path;
29
- readonly topRightContentBox: Path;
30
- readonly bottomRightContentBox: Path;
31
- readonly bottomLeftContentBox: Path;
32
-
33
- constructor(element: ElementContainer) {
34
- const styles = element.styles;
35
- const bounds = element.bounds;
36
-
37
- let [tlh, tlv] = getAbsoluteValueForTuple(styles.borderTopLeftRadius, bounds.width, bounds.height);
38
- let [trh, trv] = getAbsoluteValueForTuple(styles.borderTopRightRadius, bounds.width, bounds.height);
39
- let [brh, brv] = getAbsoluteValueForTuple(styles.borderBottomRightRadius, bounds.width, bounds.height);
40
- let [blh, blv] = getAbsoluteValueForTuple(styles.borderBottomLeftRadius, bounds.width, bounds.height);
41
-
42
- const factors = [];
43
- factors.push((tlh + trh) / bounds.width);
44
- factors.push((blh + brh) / bounds.width);
45
- factors.push((tlv + blv) / bounds.height);
46
- factors.push((trv + brv) / bounds.height);
47
- const maxFactor = Math.max(...factors);
48
-
49
- if (maxFactor > 1) {
50
- tlh /= maxFactor;
51
- tlv /= maxFactor;
52
- trh /= maxFactor;
53
- trv /= maxFactor;
54
- brh /= maxFactor;
55
- brv /= maxFactor;
56
- blh /= maxFactor;
57
- blv /= maxFactor;
58
- }
59
-
60
- const topWidth = bounds.width - trh;
61
- const rightHeight = bounds.height - brv;
62
- const bottomWidth = bounds.width - brh;
63
- const leftHeight = bounds.height - blv;
64
-
65
- const borderTopWidth = styles.borderTopWidth;
66
- const borderRightWidth = styles.borderRightWidth;
67
- const borderBottomWidth = styles.borderBottomWidth;
68
- const borderLeftWidth = styles.borderLeftWidth;
69
-
70
- const paddingTop = getAbsoluteValue(styles.paddingTop, element.bounds.width);
71
- const paddingRight = getAbsoluteValue(styles.paddingRight, element.bounds.width);
72
- const paddingBottom = getAbsoluteValue(styles.paddingBottom, element.bounds.width);
73
- const paddingLeft = getAbsoluteValue(styles.paddingLeft, element.bounds.width);
74
-
75
- this.topLeftBorderDoubleOuterBox =
76
- tlh > 0 || tlv > 0
77
- ? getCurvePoints(
78
- bounds.left + borderLeftWidth / 3,
79
- bounds.top + borderTopWidth / 3,
80
- tlh - borderLeftWidth / 3,
81
- tlv - borderTopWidth / 3,
82
- CORNER.TOP_LEFT
83
- )
84
- : new Vector(bounds.left + borderLeftWidth / 3, bounds.top + borderTopWidth / 3);
85
- this.topRightBorderDoubleOuterBox =
86
- tlh > 0 || tlv > 0
87
- ? getCurvePoints(
88
- bounds.left + topWidth,
89
- bounds.top + borderTopWidth / 3,
90
- trh - borderRightWidth / 3,
91
- trv - borderTopWidth / 3,
92
- CORNER.TOP_RIGHT
93
- )
94
- : new Vector(bounds.left + bounds.width - borderRightWidth / 3, bounds.top + borderTopWidth / 3);
95
- this.bottomRightBorderDoubleOuterBox =
96
- brh > 0 || brv > 0
97
- ? getCurvePoints(
98
- bounds.left + bottomWidth,
99
- bounds.top + rightHeight,
100
- brh - borderRightWidth / 3,
101
- brv - borderBottomWidth / 3,
102
- CORNER.BOTTOM_RIGHT
103
- )
104
- : new Vector(
105
- bounds.left + bounds.width - borderRightWidth / 3,
106
- bounds.top + bounds.height - borderBottomWidth / 3
107
- );
108
- this.bottomLeftBorderDoubleOuterBox =
109
- blh > 0 || blv > 0
110
- ? getCurvePoints(
111
- bounds.left + borderLeftWidth / 3,
112
- bounds.top + leftHeight,
113
- blh - borderLeftWidth / 3,
114
- blv - borderBottomWidth / 3,
115
- CORNER.BOTTOM_LEFT
116
- )
117
- : new Vector(bounds.left + borderLeftWidth / 3, bounds.top + bounds.height - borderBottomWidth / 3);
118
- this.topLeftBorderDoubleInnerBox =
119
- tlh > 0 || tlv > 0
120
- ? getCurvePoints(
121
- bounds.left + (borderLeftWidth * 2) / 3,
122
- bounds.top + (borderTopWidth * 2) / 3,
123
- tlh - (borderLeftWidth * 2) / 3,
124
- tlv - (borderTopWidth * 2) / 3,
125
- CORNER.TOP_LEFT
126
- )
127
- : new Vector(bounds.left + (borderLeftWidth * 2) / 3, bounds.top + (borderTopWidth * 2) / 3);
128
- this.topRightBorderDoubleInnerBox =
129
- tlh > 0 || tlv > 0
130
- ? getCurvePoints(
131
- bounds.left + topWidth,
132
- bounds.top + (borderTopWidth * 2) / 3,
133
- trh - (borderRightWidth * 2) / 3,
134
- trv - (borderTopWidth * 2) / 3,
135
- CORNER.TOP_RIGHT
136
- )
137
- : new Vector(
138
- bounds.left + bounds.width - (borderRightWidth * 2) / 3,
139
- bounds.top + (borderTopWidth * 2) / 3
140
- );
141
- this.bottomRightBorderDoubleInnerBox =
142
- brh > 0 || brv > 0
143
- ? getCurvePoints(
144
- bounds.left + bottomWidth,
145
- bounds.top + rightHeight,
146
- brh - (borderRightWidth * 2) / 3,
147
- brv - (borderBottomWidth * 2) / 3,
148
- CORNER.BOTTOM_RIGHT
149
- )
150
- : new Vector(
151
- bounds.left + bounds.width - (borderRightWidth * 2) / 3,
152
- bounds.top + bounds.height - (borderBottomWidth * 2) / 3
153
- );
154
- this.bottomLeftBorderDoubleInnerBox =
155
- blh > 0 || blv > 0
156
- ? getCurvePoints(
157
- bounds.left + (borderLeftWidth * 2) / 3,
158
- bounds.top + leftHeight,
159
- blh - (borderLeftWidth * 2) / 3,
160
- blv - (borderBottomWidth * 2) / 3,
161
- CORNER.BOTTOM_LEFT
162
- )
163
- : new Vector(
164
- bounds.left + (borderLeftWidth * 2) / 3,
165
- bounds.top + bounds.height - (borderBottomWidth * 2) / 3
166
- );
167
- this.topLeftBorderStroke =
168
- tlh > 0 || tlv > 0
169
- ? getCurvePoints(
170
- bounds.left + borderLeftWidth / 2,
171
- bounds.top + borderTopWidth / 2,
172
- tlh - borderLeftWidth / 2,
173
- tlv - borderTopWidth / 2,
174
- CORNER.TOP_LEFT
175
- )
176
- : new Vector(bounds.left + borderLeftWidth / 2, bounds.top + borderTopWidth / 2);
177
- this.topRightBorderStroke =
178
- tlh > 0 || tlv > 0
179
- ? getCurvePoints(
180
- bounds.left + topWidth,
181
- bounds.top + borderTopWidth / 2,
182
- trh - borderRightWidth / 2,
183
- trv - borderTopWidth / 2,
184
- CORNER.TOP_RIGHT
185
- )
186
- : new Vector(bounds.left + bounds.width - borderRightWidth / 2, bounds.top + borderTopWidth / 2);
187
- this.bottomRightBorderStroke =
188
- brh > 0 || brv > 0
189
- ? getCurvePoints(
190
- bounds.left + bottomWidth,
191
- bounds.top + rightHeight,
192
- brh - borderRightWidth / 2,
193
- brv - borderBottomWidth / 2,
194
- CORNER.BOTTOM_RIGHT
195
- )
196
- : new Vector(
197
- bounds.left + bounds.width - borderRightWidth / 2,
198
- bounds.top + bounds.height - borderBottomWidth / 2
199
- );
200
- this.bottomLeftBorderStroke =
201
- blh > 0 || blv > 0
202
- ? getCurvePoints(
203
- bounds.left + borderLeftWidth / 2,
204
- bounds.top + leftHeight,
205
- blh - borderLeftWidth / 2,
206
- blv - borderBottomWidth / 2,
207
- CORNER.BOTTOM_LEFT
208
- )
209
- : new Vector(bounds.left + borderLeftWidth / 2, bounds.top + bounds.height - borderBottomWidth / 2);
210
- this.topLeftBorderBox =
211
- tlh > 0 || tlv > 0
212
- ? getCurvePoints(bounds.left, bounds.top, tlh, tlv, CORNER.TOP_LEFT)
213
- : new Vector(bounds.left, bounds.top);
214
- this.topRightBorderBox =
215
- trh > 0 || trv > 0
216
- ? getCurvePoints(bounds.left + topWidth, bounds.top, trh, trv, CORNER.TOP_RIGHT)
217
- : new Vector(bounds.left + bounds.width, bounds.top);
218
- this.bottomRightBorderBox =
219
- brh > 0 || brv > 0
220
- ? getCurvePoints(bounds.left + bottomWidth, bounds.top + rightHeight, brh, brv, CORNER.BOTTOM_RIGHT)
221
- : new Vector(bounds.left + bounds.width, bounds.top + bounds.height);
222
- this.bottomLeftBorderBox =
223
- blh > 0 || blv > 0
224
- ? getCurvePoints(bounds.left, bounds.top + leftHeight, blh, blv, CORNER.BOTTOM_LEFT)
225
- : new Vector(bounds.left, bounds.top + bounds.height);
226
- this.topLeftPaddingBox =
227
- tlh > 0 || tlv > 0
228
- ? getCurvePoints(
229
- bounds.left + borderLeftWidth,
230
- bounds.top + borderTopWidth,
231
- Math.max(0, tlh - borderLeftWidth),
232
- Math.max(0, tlv - borderTopWidth),
233
- CORNER.TOP_LEFT
234
- )
235
- : new Vector(bounds.left + borderLeftWidth, bounds.top + borderTopWidth);
236
- this.topRightPaddingBox =
237
- trh > 0 || trv > 0
238
- ? getCurvePoints(
239
- bounds.left + Math.min(topWidth, bounds.width - borderRightWidth),
240
- bounds.top + borderTopWidth,
241
- topWidth > bounds.width + borderRightWidth ? 0 : Math.max(0, trh - borderRightWidth),
242
- Math.max(0, trv - borderTopWidth),
243
- CORNER.TOP_RIGHT
244
- )
245
- : new Vector(bounds.left + bounds.width - borderRightWidth, bounds.top + borderTopWidth);
246
- this.bottomRightPaddingBox =
247
- brh > 0 || brv > 0
248
- ? getCurvePoints(
249
- bounds.left + Math.min(bottomWidth, bounds.width - borderLeftWidth),
250
- bounds.top + Math.min(rightHeight, bounds.height - borderBottomWidth),
251
- Math.max(0, brh - borderRightWidth),
252
- Math.max(0, brv - borderBottomWidth),
253
- CORNER.BOTTOM_RIGHT
254
- )
255
- : new Vector(
256
- bounds.left + bounds.width - borderRightWidth,
257
- bounds.top + bounds.height - borderBottomWidth
258
- );
259
- this.bottomLeftPaddingBox =
260
- blh > 0 || blv > 0
261
- ? getCurvePoints(
262
- bounds.left + borderLeftWidth,
263
- bounds.top + Math.min(leftHeight, bounds.height - borderBottomWidth),
264
- Math.max(0, blh - borderLeftWidth),
265
- Math.max(0, blv - borderBottomWidth),
266
- CORNER.BOTTOM_LEFT
267
- )
268
- : new Vector(bounds.left + borderLeftWidth, bounds.top + bounds.height - borderBottomWidth);
269
- this.topLeftContentBox =
270
- tlh > 0 || tlv > 0
271
- ? getCurvePoints(
272
- bounds.left + borderLeftWidth + paddingLeft,
273
- bounds.top + borderTopWidth + paddingTop,
274
- Math.max(0, tlh - (borderLeftWidth + paddingLeft)),
275
- Math.max(0, tlv - (borderTopWidth + paddingTop)),
276
- CORNER.TOP_LEFT
277
- )
278
- : new Vector(bounds.left + borderLeftWidth + paddingLeft, bounds.top + borderTopWidth + paddingTop);
279
- this.topRightContentBox =
280
- trh > 0 || trv > 0
281
- ? getCurvePoints(
282
- bounds.left + Math.min(topWidth, bounds.width + borderLeftWidth + paddingLeft),
283
- bounds.top + borderTopWidth + paddingTop,
284
- topWidth > bounds.width + borderLeftWidth + paddingLeft ? 0 : trh - borderLeftWidth + paddingLeft,
285
- trv - (borderTopWidth + paddingTop),
286
- CORNER.TOP_RIGHT
287
- )
288
- : new Vector(
289
- bounds.left + bounds.width - (borderRightWidth + paddingRight),
290
- bounds.top + borderTopWidth + paddingTop
291
- );
292
- this.bottomRightContentBox =
293
- brh > 0 || brv > 0
294
- ? getCurvePoints(
295
- bounds.left + Math.min(bottomWidth, bounds.width - (borderLeftWidth + paddingLeft)),
296
- bounds.top + Math.min(rightHeight, bounds.height + borderTopWidth + paddingTop),
297
- Math.max(0, brh - (borderRightWidth + paddingRight)),
298
- brv - (borderBottomWidth + paddingBottom),
299
- CORNER.BOTTOM_RIGHT
300
- )
301
- : new Vector(
302
- bounds.left + bounds.width - (borderRightWidth + paddingRight),
303
- bounds.top + bounds.height - (borderBottomWidth + paddingBottom)
304
- );
305
- this.bottomLeftContentBox =
306
- blh > 0 || blv > 0
307
- ? getCurvePoints(
308
- bounds.left + borderLeftWidth + paddingLeft,
309
- bounds.top + leftHeight,
310
- Math.max(0, blh - (borderLeftWidth + paddingLeft)),
311
- blv - (borderBottomWidth + paddingBottom),
312
- CORNER.BOTTOM_LEFT
313
- )
314
- : new Vector(
315
- bounds.left + borderLeftWidth + paddingLeft,
316
- bounds.top + bounds.height - (borderBottomWidth + paddingBottom)
317
- );
318
- }
319
- }
320
-
321
- enum CORNER {
322
- TOP_LEFT = 0,
323
- TOP_RIGHT = 1,
324
- BOTTOM_RIGHT = 2,
325
- BOTTOM_LEFT = 3
326
- }
327
-
328
- const getCurvePoints = (x: number, y: number, r1: number, r2: number, position: CORNER): BezierCurve => {
329
- const kappa = 4 * ((Math.sqrt(2) - 1) / 3);
330
- const ox = r1 * kappa; // control point offset horizontal
331
- const oy = r2 * kappa; // control point offset vertical
332
- const xm = x + r1; // x-middle
333
- const ym = y + r2; // y-middle
334
-
335
- switch (position) {
336
- case CORNER.TOP_LEFT:
337
- return new BezierCurve(
338
- new Vector(x, ym),
339
- new Vector(x, ym - oy),
340
- new Vector(xm - ox, y),
341
- new Vector(xm, y)
342
- );
343
- case CORNER.TOP_RIGHT:
344
- return new BezierCurve(
345
- new Vector(x, y),
346
- new Vector(x + ox, y),
347
- new Vector(xm, ym - oy),
348
- new Vector(xm, ym)
349
- );
350
- case CORNER.BOTTOM_RIGHT:
351
- return new BezierCurve(
352
- new Vector(xm, y),
353
- new Vector(xm, y + oy),
354
- new Vector(x + ox, ym),
355
- new Vector(x, ym)
356
- );
357
- case CORNER.BOTTOM_LEFT:
358
- default:
359
- return new BezierCurve(
360
- new Vector(xm, ym),
361
- new Vector(xm - ox, ym),
362
- new Vector(x, y + oy),
363
- new Vector(x, y)
364
- );
365
- }
366
- };
367
-
368
- export const calculateBorderBoxPath = (curves: BoundCurves): Path[] => {
369
- return [curves.topLeftBorderBox, curves.topRightBorderBox, curves.bottomRightBorderBox, curves.bottomLeftBorderBox];
370
- };
371
-
372
- export const calculateContentBoxPath = (curves: BoundCurves): Path[] => {
373
- return [
374
- curves.topLeftContentBox,
375
- curves.topRightContentBox,
376
- curves.bottomRightContentBox,
377
- curves.bottomLeftContentBox
378
- ];
379
- };
380
-
381
- export const calculatePaddingBoxPath = (curves: BoundCurves): Path[] => {
382
- return [
383
- curves.topLeftPaddingBox,
384
- curves.topRightPaddingBox,
385
- curves.bottomRightPaddingBox,
386
- curves.bottomLeftPaddingBox
387
- ];
388
- };
@@ -1,31 +0,0 @@
1
- import { getAbsoluteValue } from '../css/types/length-percentage';
2
- import { Bounds } from '../css/layout/bounds';
3
- import { ElementContainer } from '../dom/element-container';
4
-
5
- export const paddingBox = (element: ElementContainer): Bounds => {
6
- const bounds = element.bounds;
7
- const styles = element.styles;
8
- return bounds.add(
9
- styles.borderLeftWidth,
10
- styles.borderTopWidth,
11
- -(styles.borderRightWidth + styles.borderLeftWidth),
12
- -(styles.borderTopWidth + styles.borderBottomWidth)
13
- );
14
- };
15
-
16
- export const contentBox = (element: ElementContainer): Bounds => {
17
- const styles = element.styles;
18
- const bounds = element.bounds;
19
-
20
- const paddingLeft = getAbsoluteValue(styles.paddingLeft, bounds.width);
21
- const paddingRight = getAbsoluteValue(styles.paddingRight, bounds.width);
22
- const paddingTop = getAbsoluteValue(styles.paddingTop, bounds.width);
23
- const paddingBottom = getAbsoluteValue(styles.paddingBottom, bounds.width);
24
-
25
- return bounds.add(
26
- paddingLeft + styles.borderLeftWidth,
27
- paddingTop + styles.borderTopWidth,
28
- -(styles.borderRightWidth + styles.borderLeftWidth + paddingLeft + paddingRight),
29
- -(styles.borderTopWidth + styles.borderBottomWidth + paddingTop + paddingBottom)
30
- );
31
- };
@@ -1,72 +0,0 @@
1
- import { ok } from 'assert';
2
- import { BackgroundRenderer, BackgroundRendererDependencies } from '../background-renderer';
3
- import { Context } from '../../../core/context';
4
- import { Bounds } from '../../../css/layout/bounds';
5
- import { Html2CanvasConfig } from '../../../config';
6
-
7
- describe('BackgroundRenderer', () => {
8
- it('should be instantiated', () => {
9
- const mockWindow = {
10
- document: {
11
- createElement: (_name: string) => {
12
- let _href = '';
13
- return {
14
- set href(value: string) {
15
- _href = value;
16
- },
17
- get href() {
18
- return _href;
19
- },
20
- get protocol() {
21
- return 'http:';
22
- },
23
- get hostname() {
24
- return 'localhost';
25
- },
26
- get port() {
27
- return '';
28
- }
29
- };
30
- }
31
- },
32
- location: { href: 'http://localhost/' }
33
- } as unknown as Window;
34
-
35
- const config = new Html2CanvasConfig({ window: mockWindow });
36
- const context = new Context(
37
- {
38
- logging: false,
39
- imageTimeout: 15000,
40
- useCORS: false,
41
- allowTaint: false
42
- },
43
- new Bounds(0, 0, 800, 600),
44
- config
45
- );
46
-
47
- const canvas = {
48
- width: 800,
49
- height: 600
50
- } as unknown as HTMLCanvasElement;
51
-
52
- const ctx = {
53
- fillStyle: '',
54
- save: () => {},
55
- restore: () => {}
56
- } as unknown as CanvasRenderingContext2D;
57
-
58
- const deps: BackgroundRendererDependencies = {
59
- ctx,
60
- context,
61
- canvas,
62
- options: {
63
- width: 800,
64
- height: 600,
65
- scale: 1
66
- }
67
- };
68
-
69
- const renderer = new BackgroundRenderer(deps);
70
- ok(renderer);
71
- });
72
- });
@@ -1,24 +0,0 @@
1
- import { ok } from 'assert';
2
- import { BorderRenderer, BorderRendererDependencies, PathCallbacks } from '../border-renderer';
3
-
4
- describe('BorderRenderer', () => {
5
- it('should be instantiated', () => {
6
- const ctx = {
7
- strokeStyle: '',
8
- save: () => {},
9
- restore: () => {}
10
- } as unknown as CanvasRenderingContext2D;
11
-
12
- const deps: BorderRendererDependencies = {
13
- ctx
14
- };
15
-
16
- const pathCallbacks: PathCallbacks = {
17
- path: () => {},
18
- formatPath: () => {}
19
- };
20
-
21
- const renderer = new BorderRenderer(deps, pathCallbacks);
22
- ok(renderer);
23
- });
24
- });
@@ -1,32 +0,0 @@
1
- import { ok, strictEqual } from 'assert';
2
- import { EffectsRenderer, EffectsRendererDependencies, EffectsPathCallback } from '../effects-renderer';
3
-
4
- describe('EffectsRenderer', () => {
5
- it('should be instantiated', () => {
6
- const ctx = {
7
- shadowOffsetX: 0,
8
- shadowOffsetY: 0,
9
- shadowBlur: 0,
10
- shadowColor: '',
11
- globalAlpha: 1,
12
- save: () => {},
13
- restore: () => {}
14
- } as unknown as CanvasRenderingContext2D;
15
-
16
- const deps: EffectsRendererDependencies = {
17
- ctx
18
- };
19
-
20
- const pathCallback: EffectsPathCallback = {
21
- path: () => {}
22
- };
23
-
24
- const renderer = new EffectsRenderer(deps, pathCallback);
25
- ok(renderer);
26
-
27
- // Test public methods exist
28
- strictEqual(typeof renderer.applyEffects, 'function');
29
- strictEqual(typeof renderer.applyEffect, 'function');
30
- strictEqual(typeof renderer.popEffect, 'function');
31
- });
32
- });