html2canvas-pro 2.4.4 → 2.5.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 (228) hide show
  1. package/README.md +115 -13
  2. package/dist/html2canvas-pro.cjs +3246 -1601
  3. package/dist/html2canvas-pro.cjs.map +1 -1
  4. package/dist/html2canvas-pro.esm.js +3246 -1601
  5. package/dist/html2canvas-pro.esm.js.map +1 -1
  6. package/dist/html2canvas-pro.js +3242 -1597
  7. package/dist/html2canvas-pro.js.map +1 -1
  8. package/dist/html2canvas-pro.min.js +5 -5
  9. package/dist/types/core/cache-storage.d.ts +4 -1
  10. package/dist/types/core/context.d.ts +10 -1
  11. package/dist/types/core/render-element.d.ts +11 -0
  12. package/dist/types/core/util.d.ts +6 -0
  13. package/dist/types/css/index.d.ts +77 -46
  14. package/dist/types/css/parse.d.ts +15 -0
  15. package/dist/types/css/property-descriptors/accent-color.d.ts +5 -0
  16. package/dist/types/css/property-descriptors/backdrop-filter.d.ts +9 -0
  17. package/dist/types/css/property-descriptors/background-blend-mode.d.ts +16 -16
  18. package/dist/types/css/property-descriptors/border-image-width.d.ts +36 -0
  19. package/dist/types/css/property-descriptors/clip-path.d.ts +16 -2
  20. package/dist/types/css/property-descriptors/isolation.d.ts +6 -0
  21. package/dist/types/css/property-descriptors/mask.d.ts +25 -0
  22. package/dist/types/css/property-descriptors/mix-blend-mode.d.ts +16 -16
  23. package/dist/types/css/property-descriptors/outline.d.ts +15 -0
  24. package/dist/types/css/property-descriptors/text-emphasis.d.ts +22 -0
  25. package/dist/types/css/property-descriptors/text-shadow.d.ts +1 -1
  26. package/dist/types/css/property-descriptors/webkit-box-reflect.d.ts +19 -0
  27. package/dist/types/css/property-descriptors/webkit-text-fill-color.d.ts +9 -0
  28. package/dist/types/css/syntax/token-constants.d.ts +1 -1
  29. package/dist/types/css/types/color-math.d.ts +7 -1
  30. package/dist/types/css/types/color-spaces/a98.d.ts +2 -1
  31. package/dist/types/css/types/color-spaces/p3.d.ts +5 -4
  32. package/dist/types/css/types/color-spaces/pro-photo.d.ts +5 -4
  33. package/dist/types/css/types/color-spaces/rec2020.d.ts +5 -4
  34. package/dist/types/css/types/color-spaces/srgb.d.ts +5 -4
  35. package/dist/types/css/types/color-utilities.d.ts +11 -11
  36. package/dist/types/css/types/color.d.ts +1 -0
  37. package/dist/types/css/types/functions/conic-gradient.d.ts +11 -0
  38. package/dist/types/css/types/functions/image-set.d.ts +11 -0
  39. package/dist/types/css/types/functions/repeating-radial-gradient.d.ts +8 -0
  40. package/dist/types/css/types/image.d.ts +15 -2
  41. package/dist/types/css/types/safe-eval.d.ts +0 -6
  42. package/dist/types/dom/copy-css-styles.d.ts +8 -0
  43. package/dist/types/dom/document-cloner.d.ts +3 -13
  44. package/dist/types/dom/iframe-mount.d.ts +37 -0
  45. package/dist/types/dom/pseudo-content.d.ts +33 -0
  46. package/dist/types/dom/replaced-elements/iframe-element-container.d.ts +2 -2
  47. package/dist/types/options.d.ts +8 -2
  48. package/dist/types/render/canvas/background-renderer.d.ts +19 -0
  49. package/dist/types/render/canvas/border-image-renderer.d.ts +50 -1
  50. package/dist/types/render/canvas/box-shadow-geometry.d.ts +3 -0
  51. package/dist/types/render/canvas/box-shadow-painter.d.ts +13 -0
  52. package/dist/types/render/canvas/box-shadow-transform.d.ts +16 -0
  53. package/dist/types/render/canvas/canvas-renderer.d.ts +21 -15
  54. package/dist/types/render/canvas/mask-renderer.d.ts +36 -0
  55. package/dist/types/render/canvas/text-clip-renderer.d.ts +36 -0
  56. package/dist/types/render/canvas/text-renderer.d.ts +22 -0
  57. package/dist/types/render/stacking-context.d.ts +4 -1
  58. package/package.json +39 -40
  59. package/dist/lib/config.js +0 -49
  60. package/dist/lib/core/abort-helper.js +0 -20
  61. package/dist/lib/core/background-parser.js +0 -41
  62. package/dist/lib/core/bitwise.js +0 -5
  63. package/dist/lib/core/cache-storage.js +0 -283
  64. package/dist/lib/core/config-assembler.js +0 -88
  65. package/dist/lib/core/constants.js +0 -25
  66. package/dist/lib/core/context.js +0 -19
  67. package/dist/lib/core/debugger.js +0 -27
  68. package/dist/lib/core/features.js +0 -190
  69. package/dist/lib/core/logger.js +0 -56
  70. package/dist/lib/core/lru-map.js +0 -66
  71. package/dist/lib/core/origin-checker.js +0 -53
  72. package/dist/lib/core/performance-monitor.js +0 -185
  73. package/dist/lib/core/render-element.js +0 -131
  74. package/dist/lib/core/util.js +0 -4
  75. package/dist/lib/core/validator.js +0 -500
  76. package/dist/lib/css/grouped/background-styles.js +0 -36
  77. package/dist/lib/css/grouped/border-styles.js +0 -75
  78. package/dist/lib/css/grouped/font-styles.js +0 -93
  79. package/dist/lib/css/grouped/layout-styles.js +0 -127
  80. package/dist/lib/css/index.js +0 -339
  81. package/dist/lib/css/layout/bounds.js +0 -52
  82. package/dist/lib/css/layout/text.js +0 -133
  83. package/dist/lib/css/property-descriptor.js +0 -2
  84. package/dist/lib/css/property-descriptors/background-blend-mode.js +0 -41
  85. package/dist/lib/css/property-descriptors/background-clip.js +0 -25
  86. package/dist/lib/css/property-descriptors/background-color.js +0 -10
  87. package/dist/lib/css/property-descriptors/background-image.js +0 -24
  88. package/dist/lib/css/property-descriptors/background-origin.js +0 -23
  89. package/dist/lib/css/property-descriptors/background-position.js +0 -19
  90. package/dist/lib/css/property-descriptors/background-repeat.js +0 -33
  91. package/dist/lib/css/property-descriptors/background-size.js +0 -23
  92. package/dist/lib/css/property-descriptors/border-color.js +0 -14
  93. package/dist/lib/css/property-descriptors/border-image-repeat.js +0 -42
  94. package/dist/lib/css/property-descriptors/border-image-slice.js +0 -45
  95. package/dist/lib/css/property-descriptors/border-image-source.js +0 -22
  96. package/dist/lib/css/property-descriptors/border-radius.js +0 -15
  97. package/dist/lib/css/property-descriptors/border-style.js +0 -26
  98. package/dist/lib/css/property-descriptors/border-width.js +0 -20
  99. package/dist/lib/css/property-descriptors/box-decoration-break.js +0 -18
  100. package/dist/lib/css/property-descriptors/box-shadow.js +0 -54
  101. package/dist/lib/css/property-descriptors/clip-path.js +0 -189
  102. package/dist/lib/css/property-descriptors/color.js +0 -10
  103. package/dist/lib/css/property-descriptors/content.js +0 -19
  104. package/dist/lib/css/property-descriptors/counter-increment.js +0 -35
  105. package/dist/lib/css/property-descriptors/counter-reset.js +0 -18
  106. package/dist/lib/css/property-descriptors/direction.js +0 -18
  107. package/dist/lib/css/property-descriptors/display.js +0 -81
  108. package/dist/lib/css/property-descriptors/duration.js +0 -14
  109. package/dist/lib/css/property-descriptors/filter.js +0 -86
  110. package/dist/lib/css/property-descriptors/float.js +0 -22
  111. package/dist/lib/css/property-descriptors/font-family.js +0 -47
  112. package/dist/lib/css/property-descriptors/font-size.js +0 -10
  113. package/dist/lib/css/property-descriptors/font-style.js +0 -20
  114. package/dist/lib/css/property-descriptors/font-variant-ligatures.js +0 -34
  115. package/dist/lib/css/property-descriptors/font-variant.js +0 -13
  116. package/dist/lib/css/property-descriptors/font-weight.js +0 -25
  117. package/dist/lib/css/property-descriptors/image-rendering.js +0 -33
  118. package/dist/lib/css/property-descriptors/letter-spacing.js +0 -21
  119. package/dist/lib/css/property-descriptors/line-break.js +0 -23
  120. package/dist/lib/css/property-descriptors/line-height.js +0 -24
  121. package/dist/lib/css/property-descriptors/list-style-image.js +0 -17
  122. package/dist/lib/css/property-descriptors/list-style-position.js +0 -18
  123. package/dist/lib/css/property-descriptors/list-style-type.js +0 -122
  124. package/dist/lib/css/property-descriptors/margin.js +0 -13
  125. package/dist/lib/css/property-descriptors/mix-blend-mode.js +0 -31
  126. package/dist/lib/css/property-descriptors/object-fit.js +0 -28
  127. package/dist/lib/css/property-descriptors/object-position.js +0 -42
  128. package/dist/lib/css/property-descriptors/opacity.js +0 -16
  129. package/dist/lib/css/property-descriptors/overflow-wrap.js +0 -18
  130. package/dist/lib/css/property-descriptors/overflow.js +0 -27
  131. package/dist/lib/css/property-descriptors/padding.js +0 -14
  132. package/dist/lib/css/property-descriptors/paint-order.js +0 -33
  133. package/dist/lib/css/property-descriptors/position.js +0 -22
  134. package/dist/lib/css/property-descriptors/quotes.js +0 -41
  135. package/dist/lib/css/property-descriptors/rotate.js +0 -27
  136. package/dist/lib/css/property-descriptors/text-align.js +0 -21
  137. package/dist/lib/css/property-descriptors/text-decoration-color.js +0 -10
  138. package/dist/lib/css/property-descriptors/text-decoration-line.js +0 -28
  139. package/dist/lib/css/property-descriptors/text-decoration-style.js +0 -24
  140. package/dist/lib/css/property-descriptors/text-decoration-thickness.js +0 -26
  141. package/dist/lib/css/property-descriptors/text-overflow.js +0 -18
  142. package/dist/lib/css/property-descriptors/text-shadow.js +0 -46
  143. package/dist/lib/css/property-descriptors/text-transform.js +0 -20
  144. package/dist/lib/css/property-descriptors/text-underline-offset.js +0 -23
  145. package/dist/lib/css/property-descriptors/transform-origin.js +0 -24
  146. package/dist/lib/css/property-descriptors/transform.js +0 -57
  147. package/dist/lib/css/property-descriptors/visibility.js +0 -20
  148. package/dist/lib/css/property-descriptors/webkit-line-clamp.js +0 -26
  149. package/dist/lib/css/property-descriptors/webkit-text-stroke-color.js +0 -10
  150. package/dist/lib/css/property-descriptors/webkit-text-stroke-width.js +0 -16
  151. package/dist/lib/css/property-descriptors/white-space.js +0 -32
  152. package/dist/lib/css/property-descriptors/word-break.js +0 -26
  153. package/dist/lib/css/property-descriptors/writing-mode.js +0 -28
  154. package/dist/lib/css/property-descriptors/z-index.js +0 -19
  155. package/dist/lib/css/property-descriptors/zoom.js +0 -18
  156. package/dist/lib/css/syntax/parser.js +0 -141
  157. package/dist/lib/css/syntax/token-constants.js +0 -214
  158. package/dist/lib/css/syntax/token-singletons.js +0 -36
  159. package/dist/lib/css/syntax/token-types.js +0 -10
  160. package/dist/lib/css/syntax/tokenizer.js +0 -502
  161. package/dist/lib/css/type-descriptor.js +0 -2
  162. package/dist/lib/css/types/angle.js +0 -80
  163. package/dist/lib/css/types/color-math.js +0 -25
  164. package/dist/lib/css/types/color-spaces/a98.js +0 -78
  165. package/dist/lib/css/types/color-spaces/p3.js +0 -86
  166. package/dist/lib/css/types/color-spaces/pro-photo.js +0 -83
  167. package/dist/lib/css/types/color-spaces/rec2020.js +0 -85
  168. package/dist/lib/css/types/color-spaces/srgb.js +0 -79
  169. package/dist/lib/css/types/color-utilities.js +0 -342
  170. package/dist/lib/css/types/color.js +0 -400
  171. package/dist/lib/css/types/functions/-prefix-linear-gradient.js +0 -32
  172. package/dist/lib/css/types/functions/-prefix-radial-gradient.js +0 -83
  173. package/dist/lib/css/types/functions/-webkit-gradient.js +0 -59
  174. package/dist/lib/css/types/functions/counter.js +0 -367
  175. package/dist/lib/css/types/functions/gradient.js +0 -163
  176. package/dist/lib/css/types/functions/linear-gradient.js +0 -27
  177. package/dist/lib/css/types/functions/radial-gradient.js +0 -90
  178. package/dist/lib/css/types/functions/repeating-linear-gradient.js +0 -9
  179. package/dist/lib/css/types/image.js +0 -62
  180. package/dist/lib/css/types/index.js +0 -2
  181. package/dist/lib/css/types/length-percentage.js +0 -197
  182. package/dist/lib/css/types/length.js +0 -5
  183. package/dist/lib/css/types/safe-eval.js +0 -80
  184. package/dist/lib/css/types/time.js +0 -17
  185. package/dist/lib/dom/document-cloner.js +0 -618
  186. package/dist/lib/dom/dom-normalizer.js +0 -115
  187. package/dist/lib/dom/element-container.js +0 -71
  188. package/dist/lib/dom/elements/li-element-container.js +0 -11
  189. package/dist/lib/dom/elements/ol-element-container.js +0 -12
  190. package/dist/lib/dom/elements/select-element-container.js +0 -12
  191. package/dist/lib/dom/elements/textarea-element-container.js +0 -11
  192. package/dist/lib/dom/node-parser.js +0 -125
  193. package/dist/lib/dom/node-type-guards.js +0 -81
  194. package/dist/lib/dom/replaced-elements/canvas-element-container.js +0 -13
  195. package/dist/lib/dom/replaced-elements/iframe-element-container.js +0 -38
  196. package/dist/lib/dom/replaced-elements/image-element-container.js +0 -14
  197. package/dist/lib/dom/replaced-elements/index.js +0 -2
  198. package/dist/lib/dom/replaced-elements/input-element-container.js +0 -89
  199. package/dist/lib/dom/replaced-elements/svg-element-container.js +0 -57
  200. package/dist/lib/dom/slot-cloner.js +0 -176
  201. package/dist/lib/dom/text-container.js +0 -35
  202. package/dist/lib/index.js +0 -49
  203. package/dist/lib/options.js +0 -2
  204. package/dist/lib/render/background.js +0 -188
  205. package/dist/lib/render/bezier-curve.js +0 -34
  206. package/dist/lib/render/border.js +0 -104
  207. package/dist/lib/render/bound-curves.js +0 -188
  208. package/dist/lib/render/box-sizing.js +0 -20
  209. package/dist/lib/render/canvas/background-renderer.js +0 -338
  210. package/dist/lib/render/canvas/border-image-renderer.js +0 -153
  211. package/dist/lib/render/canvas/border-renderer.js +0 -184
  212. package/dist/lib/render/canvas/canvas-path.js +0 -25
  213. package/dist/lib/render/canvas/canvas-renderer.js +0 -633
  214. package/dist/lib/render/canvas/content-renderer.js +0 -270
  215. package/dist/lib/render/canvas/effects-renderer.js +0 -171
  216. package/dist/lib/render/canvas/filter-surface.js +0 -270
  217. package/dist/lib/render/canvas/font-utils.js +0 -46
  218. package/dist/lib/render/canvas/foreignobject-renderer.js +0 -38
  219. package/dist/lib/render/canvas/surface-bounds.js +0 -64
  220. package/dist/lib/render/canvas/text/text-decoration-renderer.js +0 -99
  221. package/dist/lib/render/canvas/text-renderer.js +0 -486
  222. package/dist/lib/render/effects.js +0 -231
  223. package/dist/lib/render/font-metrics.js +0 -53
  224. package/dist/lib/render/object-fit.js +0 -91
  225. package/dist/lib/render/path.js +0 -26
  226. package/dist/lib/render/renderer-interface.js +0 -2
  227. package/dist/lib/render/stacking-context.js +0 -341
  228. package/dist/lib/render/vector.js +0 -16
@@ -1,153 +0,0 @@
1
- "use strict";
2
- /**
3
- * Border Image Renderer
4
- *
5
- * Renders CSS border-image using 9-slice scaling.
6
- * The source image is divided into 9 regions (4 corners, 4 edges, 1 center)
7
- * based on border-image-slice values, then each region is drawn to the
8
- * corresponding area of the element's border box.
9
- */
10
- Object.defineProperty(exports, "__esModule", { value: true });
11
- exports.BorderImageRenderer = void 0;
12
- const border_image_repeat_1 = require("../../css/property-descriptors/border-image-repeat");
13
- class BorderImageRenderer {
14
- constructor(ctx) {
15
- this.ctx = ctx;
16
- }
17
- renderBorderImage(bounds, image, slice, repeat, borderTopWidth, borderRightWidth, borderBottomWidth, borderLeftWidth) {
18
- const imgW = image.naturalWidth || image.width;
19
- const imgH = image.naturalHeight || image.height;
20
- if (imgW <= 0 || imgH <= 0) {
21
- return;
22
- }
23
- // Calculate source slice positions in image pixel space
24
- const sT = Math.min(slice.unit === 'percent' ? (slice.top / 100) * imgH : Math.min(slice.top, imgH), imgH);
25
- const sR = Math.min(slice.unit === 'percent' ? (slice.right / 100) * imgW : Math.min(slice.right, imgW), imgW);
26
- const sB = Math.min(slice.unit === 'percent' ? (slice.bottom / 100) * imgH : Math.min(slice.bottom, imgH), imgH);
27
- const sL = Math.min(slice.unit === 'percent' ? (slice.left / 100) * imgW : Math.min(slice.left, imgW), imgW);
28
- const { left, top, width, height } = bounds;
29
- if (width <= 0 || height <= 0) {
30
- return;
31
- }
32
- // Clamp border widths to available box dimensions
33
- const dT = Math.min(borderTopWidth, height);
34
- const dR = Math.min(borderRightWidth, width);
35
- const dB = Math.min(borderBottomWidth, height - dT);
36
- const dL = Math.min(borderLeftWidth, width - dR);
37
- // Draw corners
38
- this.drawRegion(image, 0, 0, sL, sT, left, top, dL, dT);
39
- this.drawRegion(image, imgW - sR, 0, sR, sT, left + width - dR, top, dR, dT);
40
- this.drawRegion(image, imgW - sR, imgH - sB, sR, sB, left + width - dR, top + height - dB, dR, dB);
41
- this.drawRegion(image, 0, imgH - sB, sL, sB, left, top + height - dB, dL, dB);
42
- // Draw edges
43
- const edges = [
44
- {
45
- sx: sL,
46
- sy: 0,
47
- sw: imgW - sL - sR,
48
- sh: sT,
49
- dx: left + dL,
50
- dy: top,
51
- dw: width - dL - dR,
52
- dh: dT,
53
- repeat: repeat.horizontal
54
- },
55
- {
56
- sx: imgW - sR,
57
- sy: sT,
58
- sw: sR,
59
- sh: imgH - sT - sB,
60
- dx: left + width - dR,
61
- dy: top + dT,
62
- dw: dR,
63
- dh: height - dT - dB,
64
- repeat: repeat.vertical
65
- },
66
- {
67
- sx: sL,
68
- sy: imgH - sB,
69
- sw: imgW - sL - sR,
70
- sh: sB,
71
- dx: left + dL,
72
- dy: top + height - dB,
73
- dw: width - dL - dR,
74
- dh: dB,
75
- repeat: repeat.horizontal
76
- },
77
- {
78
- sx: 0,
79
- sy: sT,
80
- sw: sL,
81
- sh: imgH - sT - sB,
82
- dx: left,
83
- dy: top + dT,
84
- dw: dL,
85
- dh: height - dT - dB,
86
- repeat: repeat.vertical
87
- }
88
- ];
89
- for (const edge of edges) {
90
- if (edge.sw <= 0 || edge.sh <= 0 || edge.dw <= 0 || edge.dh <= 0)
91
- continue;
92
- const isHorizontal = edge.dw >= edge.dh;
93
- if (edge.repeat === border_image_repeat_1.BORDER_IMAGE_REPEAT.STRETCH) {
94
- this.ctx.drawImage(image, edge.sx, edge.sy, edge.sw, edge.sh, edge.dx, edge.dy, edge.dw, edge.dh);
95
- }
96
- else if (edge.repeat === border_image_repeat_1.BORDER_IMAGE_REPEAT.REPEAT || edge.repeat === border_image_repeat_1.BORDER_IMAGE_REPEAT.ROUND) {
97
- this.drawRepeatedEdge(image, edge, isHorizontal, edge.repeat === border_image_repeat_1.BORDER_IMAGE_REPEAT.ROUND);
98
- }
99
- }
100
- // Draw center if fill is specified
101
- if (slice.fill) {
102
- const cx = sL;
103
- const cy = sT;
104
- const cw = imgW - sL - sR;
105
- const ch = imgH - sT - sB;
106
- const tcx = left + dL;
107
- const tcy = top + dT;
108
- const tcw = width - dL - dR;
109
- const tch = height - dT - dB;
110
- this.drawRegion(image, cx, cy, cw, ch, tcx, tcy, tcw, tch);
111
- }
112
- }
113
- drawRegion(image, sx, sy, sw, sh, dx, dy, dw, dh) {
114
- if (sw > 0 && sh > 0 && dw > 0 && dh > 0) {
115
- this.ctx.drawImage(image, sx, sy, sw, sh, dx, dy, dw, dh);
116
- }
117
- }
118
- drawRepeatedEdge(image, edge, isHorizontal, round) {
119
- const srcLength = isHorizontal ? edge.sw : edge.sh;
120
- const tgLength = isHorizontal ? edge.dw : edge.dh;
121
- if (srcLength <= 0 || tgLength <= 0)
122
- return;
123
- let tileSize;
124
- let tileCount;
125
- if (round) {
126
- tileCount = Math.max(1, Math.round(tgLength / srcLength));
127
- tileSize = tgLength / tileCount;
128
- }
129
- else {
130
- tileSize = srcLength;
131
- tileCount = Math.ceil(tgLength / tileSize);
132
- }
133
- this.ctx.save();
134
- this.ctx.beginPath();
135
- this.ctx.rect(edge.dx, edge.dy, edge.dw, edge.dh);
136
- this.ctx.clip();
137
- for (let i = 0; i < tileCount; i++) {
138
- const offset = i * tileSize;
139
- const remaining = tgLength - offset;
140
- const clampedSize = Math.min(tileSize, remaining);
141
- if (clampedSize <= 0)
142
- break;
143
- if (isHorizontal) {
144
- this.ctx.drawImage(image, edge.sx, edge.sy, edge.sw, edge.sh, edge.dx + offset, edge.dy, clampedSize, edge.dh);
145
- }
146
- else {
147
- this.ctx.drawImage(image, edge.sx, edge.sy, edge.sw, edge.sh, edge.dx, edge.dy + offset, edge.dw, clampedSize);
148
- }
149
- }
150
- this.ctx.restore();
151
- }
152
- }
153
- exports.BorderImageRenderer = BorderImageRenderer;
@@ -1,184 +0,0 @@
1
- "use strict";
2
- /**
3
- * Border Renderer
4
- *
5
- * Handles rendering of element borders including:
6
- * - Solid borders
7
- * - Double borders
8
- * - Dashed borders
9
- * - Dotted borders
10
- */
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.BorderRenderer = void 0;
13
- const color_utilities_1 = require("../../css/types/color-utilities");
14
- const border_1 = require("../border");
15
- const bezier_curve_1 = require("../bezier-curve");
16
- const vector_1 = require("../vector");
17
- /**
18
- * Border Renderer
19
- *
20
- * Specialized renderer for element borders.
21
- * Extracted from CanvasRenderer to improve code organization and maintainability.
22
- */
23
- class BorderRenderer {
24
- constructor(deps, pathCallbacks) {
25
- this.ctx = deps.ctx;
26
- this.pathCallbacks = pathCallbacks;
27
- }
28
- /**
29
- * Render a solid border
30
- *
31
- * @param color - Border color
32
- * @param side - Border side (0=top, 1=right, 2=bottom, 3=left)
33
- * @param curvePoints - Border curve points
34
- */
35
- async renderSolidBorder(color, side, curvePoints) {
36
- this.pathCallbacks.path((0, border_1.parsePathForBorder)(curvePoints, side));
37
- this.ctx.fillStyle = (0, color_utilities_1.asString)(color);
38
- this.ctx.fill();
39
- }
40
- /**
41
- * Render a double border
42
- * Falls back to solid border if width is too small
43
- *
44
- * @param color - Border color
45
- * @param width - Border width
46
- * @param side - Border side (0=top, 1=right, 2=bottom, 3=left)
47
- * @param curvePoints - Border curve points
48
- */
49
- async renderDoubleBorder(color, width, side, curvePoints) {
50
- if (width < 3) {
51
- await this.renderSolidBorder(color, side, curvePoints);
52
- return;
53
- }
54
- const outerPaths = (0, border_1.parsePathForBorderDoubleOuter)(curvePoints, side);
55
- this.pathCallbacks.path(outerPaths);
56
- this.ctx.fillStyle = (0, color_utilities_1.asString)(color);
57
- this.ctx.fill();
58
- const innerPaths = (0, border_1.parsePathForBorderDoubleInner)(curvePoints, side);
59
- this.pathCallbacks.path(innerPaths);
60
- this.ctx.fill();
61
- }
62
- /**
63
- * Render a dashed or dotted border
64
- *
65
- * @param color - Border color
66
- * @param width - Border width
67
- * @param side - Border side (0=top, 1=right, 2=bottom, 3=left)
68
- * @param curvePoints - Border curve points
69
- * @param style - Border style (DASHED or DOTTED)
70
- */
71
- async renderDashedDottedBorder(color, width, side, curvePoints, style) {
72
- this.ctx.save();
73
- const strokePaths = (0, border_1.parsePathForBorderStroke)(curvePoints, side);
74
- const boxPaths = (0, border_1.parsePathForBorder)(curvePoints, side);
75
- if (style === 2 /* BORDER_STYLE.DASHED */) {
76
- this.pathCallbacks.path(boxPaths);
77
- this.ctx.clip();
78
- }
79
- // Extract start and end coordinates
80
- let startX, startY, endX, endY;
81
- if ((0, bezier_curve_1.isBezierCurve)(boxPaths[0])) {
82
- startX = boxPaths[0].start.x;
83
- startY = boxPaths[0].start.y;
84
- }
85
- else {
86
- startX = boxPaths[0].x;
87
- startY = boxPaths[0].y;
88
- }
89
- if ((0, bezier_curve_1.isBezierCurve)(boxPaths[1])) {
90
- endX = boxPaths[1].end.x;
91
- endY = boxPaths[1].end.y;
92
- }
93
- else {
94
- endX = boxPaths[1].x;
95
- endY = boxPaths[1].y;
96
- }
97
- // Calculate border length
98
- let length;
99
- if (side === 0 || side === 2) {
100
- length = Math.abs(startX - endX);
101
- }
102
- else {
103
- length = Math.abs(startY - endY);
104
- }
105
- this.ctx.beginPath();
106
- if (style === 3 /* BORDER_STYLE.DOTTED */) {
107
- this.pathCallbacks.formatPath(strokePaths);
108
- }
109
- else {
110
- this.pathCallbacks.formatPath(boxPaths.slice(0, 2));
111
- }
112
- // Calculate dash and space lengths
113
- let dashLength = width < 3 ? width * 3 : width * 2;
114
- let spaceLength = width < 3 ? width * 2 : width;
115
- if (style === 3 /* BORDER_STYLE.DOTTED */) {
116
- dashLength = width;
117
- spaceLength = width;
118
- }
119
- // Adjust dash pattern for border length
120
- let useLineDash = true;
121
- if (length <= dashLength * 2) {
122
- useLineDash = false;
123
- }
124
- else if (length <= dashLength * 2 + spaceLength) {
125
- const multiplier = length / (2 * dashLength + spaceLength);
126
- dashLength *= multiplier;
127
- spaceLength *= multiplier;
128
- }
129
- else {
130
- const numberOfDashes = Math.floor((length + spaceLength) / (dashLength + spaceLength));
131
- const minSpace = (length - numberOfDashes * dashLength) / (numberOfDashes - 1);
132
- const maxSpace = (length - (numberOfDashes + 1) * dashLength) / numberOfDashes;
133
- spaceLength =
134
- maxSpace <= 0 || Math.abs(spaceLength - minSpace) < Math.abs(spaceLength - maxSpace)
135
- ? minSpace
136
- : maxSpace;
137
- }
138
- // Apply line dash pattern
139
- if (useLineDash) {
140
- if (style === 3 /* BORDER_STYLE.DOTTED */) {
141
- this.ctx.setLineDash([0, dashLength + spaceLength]);
142
- }
143
- else {
144
- this.ctx.setLineDash([dashLength, spaceLength]);
145
- }
146
- }
147
- // Set line style and stroke
148
- if (style === 3 /* BORDER_STYLE.DOTTED */) {
149
- this.ctx.lineCap = 'round';
150
- this.ctx.lineWidth = width;
151
- }
152
- else {
153
- this.ctx.lineWidth = width * 2 + 1.1;
154
- }
155
- this.ctx.strokeStyle = (0, color_utilities_1.asString)(color);
156
- this.ctx.stroke();
157
- this.ctx.setLineDash([]);
158
- // Fill dashed round edge gaps
159
- if (style === 2 /* BORDER_STYLE.DASHED */) {
160
- if ((0, bezier_curve_1.isBezierCurve)(boxPaths[0])) {
161
- const path1 = boxPaths[3];
162
- const path2 = boxPaths[0];
163
- this.ctx.beginPath();
164
- this.pathCallbacks.formatPath([
165
- new vector_1.Vector(path1.end.x, path1.end.y),
166
- new vector_1.Vector(path2.start.x, path2.start.y)
167
- ]);
168
- this.ctx.stroke();
169
- }
170
- if ((0, bezier_curve_1.isBezierCurve)(boxPaths[1])) {
171
- const path1 = boxPaths[1];
172
- const path2 = boxPaths[2];
173
- this.ctx.beginPath();
174
- this.pathCallbacks.formatPath([
175
- new vector_1.Vector(path1.end.x, path1.end.y),
176
- new vector_1.Vector(path2.start.x, path2.start.y)
177
- ]);
178
- this.ctx.stroke();
179
- }
180
- }
181
- this.ctx.restore();
182
- }
183
- }
184
- exports.BorderRenderer = BorderRenderer;
@@ -1,25 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createCanvasPath = exports.formatCanvasPath = void 0;
4
- const bezier_curve_1 = require("../bezier-curve");
5
- const formatCanvasPath = (ctx, paths) => {
6
- paths.forEach((point, index) => {
7
- const start = (0, bezier_curve_1.isBezierCurve)(point) ? point.start : point;
8
- if (index === 0) {
9
- ctx.moveTo(start.x, start.y);
10
- }
11
- else {
12
- ctx.lineTo(start.x, start.y);
13
- }
14
- if ((0, bezier_curve_1.isBezierCurve)(point)) {
15
- ctx.bezierCurveTo(point.startControl.x, point.startControl.y, point.endControl.x, point.endControl.y, point.end.x, point.end.y);
16
- }
17
- });
18
- };
19
- exports.formatCanvasPath = formatCanvasPath;
20
- const createCanvasPath = (ctx, paths) => {
21
- ctx.beginPath();
22
- (0, exports.formatCanvasPath)(ctx, paths);
23
- ctx.closePath();
24
- };
25
- exports.createCanvasPath = createCanvasPath;