apexify.js 5.1.1 → 5.2.1

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 (236) hide show
  1. package/CHANGELOG.md +240 -0
  2. package/README.md +244 -1101
  3. package/dist/cjs/Canvas/ApexPainter.d.ts +183 -204
  4. package/dist/cjs/Canvas/ApexPainter.d.ts.map +1 -1
  5. package/dist/cjs/Canvas/ApexPainter.js +524 -1282
  6. package/dist/cjs/Canvas/ApexPainter.js.map +1 -1
  7. package/dist/cjs/Canvas/extended/CanvasCreator.d.ts +33 -0
  8. package/dist/cjs/Canvas/extended/CanvasCreator.d.ts.map +1 -0
  9. package/dist/cjs/Canvas/extended/CanvasCreator.js +223 -0
  10. package/dist/cjs/Canvas/extended/CanvasCreator.js.map +1 -0
  11. package/dist/cjs/Canvas/extended/ChartCreator.d.ts +26 -0
  12. package/dist/cjs/Canvas/extended/ChartCreator.d.ts.map +1 -0
  13. package/dist/cjs/Canvas/extended/ChartCreator.js +50 -0
  14. package/dist/cjs/Canvas/extended/ChartCreator.js.map +1 -0
  15. package/dist/cjs/Canvas/extended/GIFCreator.d.ts +43 -0
  16. package/dist/cjs/Canvas/extended/GIFCreator.d.ts.map +1 -0
  17. package/dist/cjs/Canvas/extended/GIFCreator.js +157 -0
  18. package/dist/cjs/Canvas/extended/GIFCreator.js.map +1 -0
  19. package/dist/cjs/Canvas/extended/ImageCreator.d.ts +83 -0
  20. package/dist/cjs/Canvas/extended/ImageCreator.d.ts.map +1 -0
  21. package/dist/cjs/Canvas/extended/ImageCreator.js +479 -0
  22. package/dist/cjs/Canvas/extended/ImageCreator.js.map +1 -0
  23. package/dist/cjs/Canvas/extended/TextCreator.d.ts +35 -0
  24. package/dist/cjs/Canvas/extended/TextCreator.d.ts.map +1 -0
  25. package/dist/cjs/Canvas/extended/TextCreator.js +98 -0
  26. package/dist/cjs/Canvas/extended/TextCreator.js.map +1 -0
  27. package/dist/cjs/Canvas/extended/VideoCreator.d.ts +370 -0
  28. package/dist/cjs/Canvas/extended/VideoCreator.d.ts.map +1 -0
  29. package/dist/cjs/Canvas/extended/VideoCreator.js +478 -0
  30. package/dist/cjs/Canvas/extended/VideoCreator.js.map +1 -0
  31. package/dist/cjs/Canvas/utils/Background/bg.d.ts +1 -1
  32. package/dist/cjs/Canvas/utils/Background/bg.d.ts.map +1 -1
  33. package/dist/cjs/Canvas/utils/Background/bg.js +43 -7
  34. package/dist/cjs/Canvas/utils/Background/bg.js.map +1 -1
  35. package/dist/cjs/Canvas/utils/Charts/barchart.d.ts +230 -0
  36. package/dist/cjs/Canvas/utils/Charts/barchart.d.ts.map +1 -0
  37. package/dist/cjs/Canvas/utils/Charts/barchart.js +1891 -0
  38. package/dist/cjs/Canvas/utils/Charts/barchart.js.map +1 -0
  39. package/dist/cjs/Canvas/utils/Charts/comparisonchart.d.ts +103 -0
  40. package/dist/cjs/Canvas/utils/Charts/comparisonchart.d.ts.map +1 -0
  41. package/dist/cjs/Canvas/utils/Charts/comparisonchart.js +368 -0
  42. package/dist/cjs/Canvas/utils/Charts/comparisonchart.js.map +1 -0
  43. package/dist/cjs/Canvas/utils/Charts/horizontalbarchart.d.ts +181 -0
  44. package/dist/cjs/Canvas/utils/Charts/horizontalbarchart.d.ts.map +1 -0
  45. package/dist/cjs/Canvas/utils/Charts/horizontalbarchart.js +1389 -0
  46. package/dist/cjs/Canvas/utils/Charts/horizontalbarchart.js.map +1 -0
  47. package/dist/cjs/Canvas/utils/Charts/index.d.ts +45 -0
  48. package/dist/cjs/Canvas/utils/Charts/index.d.ts.map +1 -0
  49. package/dist/cjs/Canvas/utils/Charts/index.js +17 -0
  50. package/dist/cjs/Canvas/utils/Charts/index.js.map +1 -0
  51. package/dist/cjs/Canvas/utils/Charts/linechart.d.ts +216 -0
  52. package/dist/cjs/Canvas/utils/Charts/linechart.d.ts.map +1 -0
  53. package/dist/cjs/Canvas/utils/Charts/linechart.js +1761 -0
  54. package/dist/cjs/Canvas/utils/Charts/linechart.js.map +1 -0
  55. package/dist/cjs/Canvas/utils/Charts/piechart.d.ts +167 -0
  56. package/dist/cjs/Canvas/utils/Charts/piechart.d.ts.map +1 -0
  57. package/dist/cjs/Canvas/utils/Charts/piechart.js +794 -0
  58. package/dist/cjs/Canvas/utils/Charts/piechart.js.map +1 -0
  59. package/dist/cjs/Canvas/utils/General/batchOperations.d.ts.map +1 -1
  60. package/dist/cjs/Canvas/utils/General/batchOperations.js +3 -4
  61. package/dist/cjs/Canvas/utils/General/batchOperations.js.map +1 -1
  62. package/dist/cjs/Canvas/utils/General/general functions.d.ts.map +1 -1
  63. package/dist/cjs/Canvas/utils/General/general functions.js +62 -33
  64. package/dist/cjs/Canvas/utils/General/general functions.js.map +1 -1
  65. package/dist/cjs/Canvas/utils/General/imageStitching.d.ts.map +1 -1
  66. package/dist/cjs/Canvas/utils/General/imageStitching.js +3 -6
  67. package/dist/cjs/Canvas/utils/General/imageStitching.js.map +1 -1
  68. package/dist/cjs/Canvas/utils/Image/imageMasking.d.ts.map +1 -1
  69. package/dist/cjs/Canvas/utils/Image/imageMasking.js +5 -12
  70. package/dist/cjs/Canvas/utils/Image/imageMasking.js.map +1 -1
  71. package/dist/cjs/Canvas/utils/Image/imageProperties.d.ts +4 -4
  72. package/dist/cjs/Canvas/utils/Image/imageProperties.d.ts.map +1 -1
  73. package/dist/cjs/Canvas/utils/Image/imageProperties.js +44 -9
  74. package/dist/cjs/Canvas/utils/Image/imageProperties.js.map +1 -1
  75. package/dist/cjs/Canvas/utils/Texts/enhancedTextRenderer.d.ts +5 -0
  76. package/dist/cjs/Canvas/utils/Texts/enhancedTextRenderer.d.ts.map +1 -1
  77. package/dist/cjs/Canvas/utils/Texts/enhancedTextRenderer.js +48 -5
  78. package/dist/cjs/Canvas/utils/Texts/enhancedTextRenderer.js.map +1 -1
  79. package/dist/cjs/Canvas/utils/Texts/textProperties.d.ts +1 -1
  80. package/dist/cjs/Canvas/utils/Texts/textProperties.d.ts.map +1 -1
  81. package/dist/cjs/Canvas/utils/Texts/textProperties.js +48 -5
  82. package/dist/cjs/Canvas/utils/Texts/textProperties.js.map +1 -1
  83. package/dist/cjs/Canvas/utils/Video/videoHelpers.d.ts +489 -0
  84. package/dist/cjs/Canvas/utils/Video/videoHelpers.d.ts.map +1 -0
  85. package/dist/cjs/Canvas/utils/Video/videoHelpers.js +1835 -0
  86. package/dist/cjs/Canvas/utils/Video/videoHelpers.js.map +1 -0
  87. package/dist/cjs/Canvas/utils/errorUtils.d.ts +15 -0
  88. package/dist/cjs/Canvas/utils/errorUtils.d.ts.map +1 -0
  89. package/dist/cjs/Canvas/utils/errorUtils.js +26 -0
  90. package/dist/cjs/Canvas/utils/errorUtils.js.map +1 -0
  91. package/dist/cjs/Canvas/utils/types.d.ts +17 -178
  92. package/dist/cjs/Canvas/utils/types.d.ts.map +1 -1
  93. package/dist/cjs/Canvas/utils/types.js.map +1 -1
  94. package/dist/cjs/Canvas/utils/utils.d.ts +4 -3
  95. package/dist/cjs/Canvas/utils/utils.d.ts.map +1 -1
  96. package/dist/cjs/Canvas/utils/utils.js +40 -6
  97. package/dist/cjs/Canvas/utils/utils.js.map +1 -1
  98. package/dist/cjs/index.d.ts +1 -8
  99. package/dist/cjs/index.d.ts.map +1 -1
  100. package/dist/cjs/index.js +14 -45
  101. package/dist/cjs/index.js.map +1 -1
  102. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  103. package/dist/esm/Canvas/ApexPainter.d.ts +183 -204
  104. package/dist/esm/Canvas/ApexPainter.d.ts.map +1 -1
  105. package/dist/esm/Canvas/ApexPainter.js +524 -1282
  106. package/dist/esm/Canvas/ApexPainter.js.map +1 -1
  107. package/dist/esm/Canvas/extended/CanvasCreator.d.ts +33 -0
  108. package/dist/esm/Canvas/extended/CanvasCreator.d.ts.map +1 -0
  109. package/dist/esm/Canvas/extended/CanvasCreator.js +223 -0
  110. package/dist/esm/Canvas/extended/CanvasCreator.js.map +1 -0
  111. package/dist/esm/Canvas/extended/ChartCreator.d.ts +26 -0
  112. package/dist/esm/Canvas/extended/ChartCreator.d.ts.map +1 -0
  113. package/dist/esm/Canvas/extended/ChartCreator.js +50 -0
  114. package/dist/esm/Canvas/extended/ChartCreator.js.map +1 -0
  115. package/dist/esm/Canvas/extended/GIFCreator.d.ts +43 -0
  116. package/dist/esm/Canvas/extended/GIFCreator.d.ts.map +1 -0
  117. package/dist/esm/Canvas/extended/GIFCreator.js +157 -0
  118. package/dist/esm/Canvas/extended/GIFCreator.js.map +1 -0
  119. package/dist/esm/Canvas/extended/ImageCreator.d.ts +83 -0
  120. package/dist/esm/Canvas/extended/ImageCreator.d.ts.map +1 -0
  121. package/dist/esm/Canvas/extended/ImageCreator.js +479 -0
  122. package/dist/esm/Canvas/extended/ImageCreator.js.map +1 -0
  123. package/dist/esm/Canvas/extended/TextCreator.d.ts +35 -0
  124. package/dist/esm/Canvas/extended/TextCreator.d.ts.map +1 -0
  125. package/dist/esm/Canvas/extended/TextCreator.js +98 -0
  126. package/dist/esm/Canvas/extended/TextCreator.js.map +1 -0
  127. package/dist/esm/Canvas/extended/VideoCreator.d.ts +370 -0
  128. package/dist/esm/Canvas/extended/VideoCreator.d.ts.map +1 -0
  129. package/dist/esm/Canvas/extended/VideoCreator.js +478 -0
  130. package/dist/esm/Canvas/extended/VideoCreator.js.map +1 -0
  131. package/dist/esm/Canvas/utils/Background/bg.d.ts +1 -1
  132. package/dist/esm/Canvas/utils/Background/bg.d.ts.map +1 -1
  133. package/dist/esm/Canvas/utils/Background/bg.js +43 -7
  134. package/dist/esm/Canvas/utils/Background/bg.js.map +1 -1
  135. package/dist/esm/Canvas/utils/Charts/barchart.d.ts +230 -0
  136. package/dist/esm/Canvas/utils/Charts/barchart.d.ts.map +1 -0
  137. package/dist/esm/Canvas/utils/Charts/barchart.js +1891 -0
  138. package/dist/esm/Canvas/utils/Charts/barchart.js.map +1 -0
  139. package/dist/esm/Canvas/utils/Charts/comparisonchart.d.ts +103 -0
  140. package/dist/esm/Canvas/utils/Charts/comparisonchart.d.ts.map +1 -0
  141. package/dist/esm/Canvas/utils/Charts/comparisonchart.js +368 -0
  142. package/dist/esm/Canvas/utils/Charts/comparisonchart.js.map +1 -0
  143. package/dist/esm/Canvas/utils/Charts/horizontalbarchart.d.ts +181 -0
  144. package/dist/esm/Canvas/utils/Charts/horizontalbarchart.d.ts.map +1 -0
  145. package/dist/esm/Canvas/utils/Charts/horizontalbarchart.js +1389 -0
  146. package/dist/esm/Canvas/utils/Charts/horizontalbarchart.js.map +1 -0
  147. package/dist/esm/Canvas/utils/Charts/index.d.ts +45 -0
  148. package/dist/esm/Canvas/utils/Charts/index.d.ts.map +1 -0
  149. package/dist/esm/Canvas/utils/Charts/index.js +17 -0
  150. package/dist/esm/Canvas/utils/Charts/index.js.map +1 -0
  151. package/dist/esm/Canvas/utils/Charts/linechart.d.ts +216 -0
  152. package/dist/esm/Canvas/utils/Charts/linechart.d.ts.map +1 -0
  153. package/dist/esm/Canvas/utils/Charts/linechart.js +1761 -0
  154. package/dist/esm/Canvas/utils/Charts/linechart.js.map +1 -0
  155. package/dist/esm/Canvas/utils/Charts/piechart.d.ts +167 -0
  156. package/dist/esm/Canvas/utils/Charts/piechart.d.ts.map +1 -0
  157. package/dist/esm/Canvas/utils/Charts/piechart.js +794 -0
  158. package/dist/esm/Canvas/utils/Charts/piechart.js.map +1 -0
  159. package/dist/esm/Canvas/utils/General/batchOperations.d.ts.map +1 -1
  160. package/dist/esm/Canvas/utils/General/batchOperations.js +3 -4
  161. package/dist/esm/Canvas/utils/General/batchOperations.js.map +1 -1
  162. package/dist/esm/Canvas/utils/General/general functions.d.ts.map +1 -1
  163. package/dist/esm/Canvas/utils/General/general functions.js +62 -33
  164. package/dist/esm/Canvas/utils/General/general functions.js.map +1 -1
  165. package/dist/esm/Canvas/utils/General/imageStitching.d.ts.map +1 -1
  166. package/dist/esm/Canvas/utils/General/imageStitching.js +3 -6
  167. package/dist/esm/Canvas/utils/General/imageStitching.js.map +1 -1
  168. package/dist/esm/Canvas/utils/Image/imageMasking.d.ts.map +1 -1
  169. package/dist/esm/Canvas/utils/Image/imageMasking.js +5 -12
  170. package/dist/esm/Canvas/utils/Image/imageMasking.js.map +1 -1
  171. package/dist/esm/Canvas/utils/Image/imageProperties.d.ts +4 -4
  172. package/dist/esm/Canvas/utils/Image/imageProperties.d.ts.map +1 -1
  173. package/dist/esm/Canvas/utils/Image/imageProperties.js +44 -9
  174. package/dist/esm/Canvas/utils/Image/imageProperties.js.map +1 -1
  175. package/dist/esm/Canvas/utils/Texts/enhancedTextRenderer.d.ts +5 -0
  176. package/dist/esm/Canvas/utils/Texts/enhancedTextRenderer.d.ts.map +1 -1
  177. package/dist/esm/Canvas/utils/Texts/enhancedTextRenderer.js +48 -5
  178. package/dist/esm/Canvas/utils/Texts/enhancedTextRenderer.js.map +1 -1
  179. package/dist/esm/Canvas/utils/Texts/textProperties.d.ts +1 -1
  180. package/dist/esm/Canvas/utils/Texts/textProperties.d.ts.map +1 -1
  181. package/dist/esm/Canvas/utils/Texts/textProperties.js +48 -5
  182. package/dist/esm/Canvas/utils/Texts/textProperties.js.map +1 -1
  183. package/dist/esm/Canvas/utils/Video/videoHelpers.d.ts +489 -0
  184. package/dist/esm/Canvas/utils/Video/videoHelpers.d.ts.map +1 -0
  185. package/dist/esm/Canvas/utils/Video/videoHelpers.js +1835 -0
  186. package/dist/esm/Canvas/utils/Video/videoHelpers.js.map +1 -0
  187. package/dist/esm/Canvas/utils/errorUtils.d.ts +15 -0
  188. package/dist/esm/Canvas/utils/errorUtils.d.ts.map +1 -0
  189. package/dist/esm/Canvas/utils/errorUtils.js +26 -0
  190. package/dist/esm/Canvas/utils/errorUtils.js.map +1 -0
  191. package/dist/esm/Canvas/utils/types.d.ts +17 -178
  192. package/dist/esm/Canvas/utils/types.d.ts.map +1 -1
  193. package/dist/esm/Canvas/utils/types.js.map +1 -1
  194. package/dist/esm/Canvas/utils/utils.d.ts +4 -3
  195. package/dist/esm/Canvas/utils/utils.d.ts.map +1 -1
  196. package/dist/esm/Canvas/utils/utils.js +40 -6
  197. package/dist/esm/Canvas/utils/utils.js.map +1 -1
  198. package/dist/esm/index.d.ts +1 -8
  199. package/dist/esm/index.d.ts.map +1 -1
  200. package/dist/esm/index.js +14 -45
  201. package/dist/esm/index.js.map +1 -1
  202. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  203. package/package.json +235 -198
  204. package/dist/cjs/Canvas/utils/Charts/charts.d.ts +0 -13
  205. package/dist/cjs/Canvas/utils/Charts/charts.d.ts.map +0 -1
  206. package/dist/cjs/Canvas/utils/Charts/charts.js +0 -466
  207. package/dist/cjs/Canvas/utils/Charts/charts.js.map +0 -1
  208. package/dist/esm/Canvas/utils/Charts/charts.d.ts +0 -13
  209. package/dist/esm/Canvas/utils/Charts/charts.d.ts.map +0 -1
  210. package/dist/esm/Canvas/utils/Charts/charts.js +0 -466
  211. package/dist/esm/Canvas/utils/Charts/charts.js.map +0 -1
  212. package/lib/Canvas/ApexPainter.ts +0 -5414
  213. package/lib/Canvas/utils/Background/bg.ts +0 -285
  214. package/lib/Canvas/utils/Charts/charts.ts +0 -548
  215. package/lib/Canvas/utils/Custom/advancedLines.ts +0 -387
  216. package/lib/Canvas/utils/Custom/customLines.ts +0 -206
  217. package/lib/Canvas/utils/General/batchOperations.ts +0 -103
  218. package/lib/Canvas/utils/General/conversion.ts +0 -34
  219. package/lib/Canvas/utils/General/general functions.ts +0 -726
  220. package/lib/Canvas/utils/General/imageCompression.ts +0 -316
  221. package/lib/Canvas/utils/General/imageStitching.ts +0 -252
  222. package/lib/Canvas/utils/Image/imageEffects.ts +0 -175
  223. package/lib/Canvas/utils/Image/imageFilters.ts +0 -356
  224. package/lib/Canvas/utils/Image/imageMasking.ts +0 -335
  225. package/lib/Canvas/utils/Image/imageProperties.ts +0 -587
  226. package/lib/Canvas/utils/Image/professionalImageFilters.ts +0 -391
  227. package/lib/Canvas/utils/Image/simpleProfessionalFilters.ts +0 -229
  228. package/lib/Canvas/utils/Patterns/enhancedPatternRenderer.ts +0 -455
  229. package/lib/Canvas/utils/Shapes/shapes.ts +0 -528
  230. package/lib/Canvas/utils/Texts/enhancedTextRenderer.ts +0 -716
  231. package/lib/Canvas/utils/Texts/textPathRenderer.ts +0 -320
  232. package/lib/Canvas/utils/Texts/textProperties.ts +0 -231
  233. package/lib/Canvas/utils/types.ts +0 -983
  234. package/lib/Canvas/utils/utils.ts +0 -135
  235. package/lib/index.ts +0 -81
  236. package/lib/utils.ts +0 -5
@@ -1,285 +0,0 @@
1
- import { createCanvas, loadImage, SKRSContext2D } from "@napi-rs/canvas";
2
- import { CanvasConfig, gradient } from "../types";
3
- import path from "path";
4
-
5
- export type AlignMode =
6
- | 'center' | 'top' | 'bottom' | 'left' | 'right'
7
- | 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';
8
-
9
- export type FitMode = 'fill' | 'contain' | 'cover';
10
-
11
- /**
12
- * Draws a gradient background on the canvas with optional zoom support.
13
- * @param ctx The canvas rendering context.
14
- * @param canvas The canvas configuration object.
15
- * @param zoom Optional zoom configuration.
16
- */
17
- export async function drawBackgroundGradient(
18
- ctx: SKRSContext2D,
19
- canvas: CanvasConfig
20
- ) {
21
- if (!canvas.gradientBg) return;
22
- const width = canvas.width ?? 500;
23
- const height = canvas.height ?? 500;
24
-
25
- const grad = buildCanvasGradient(ctx, {
26
- gradient: canvas.gradientBg,
27
- width, height
28
- });
29
-
30
- if (canvas.blur) ctx.filter = `blur(${canvas.blur}px)`;
31
- ctx.fillStyle = grad;
32
- ctx.fillRect(0, 0, width, height);
33
- ctx.filter = 'none';
34
- }
35
-
36
- /**
37
- * Draws a solid background color on the canvas with optional zoom effect.
38
- * @param ctx The canvas rendering context.
39
- * @param canvas The canvas configuration object.
40
- * @param zoom Optional zoom configuration.
41
- */
42
- export async function drawBackgroundColor(
43
- ctx: SKRSContext2D,
44
- canvas: CanvasConfig
45
- ): Promise<void> {
46
- const W = canvas.width ?? 500;
47
- const H = canvas.height ?? 500;
48
-
49
- if (canvas.blur) ctx.filter = `blur(${canvas.blur}px)`;
50
- if (canvas.colorBg !== 'transparent') {
51
- ctx.fillStyle = (canvas.colorBg ?? '#000') as string;
52
- ctx.fillRect(0, 0, W, H);
53
- }
54
- ctx.filter = 'none';
55
- }
56
-
57
- /**
58
- * Draws a custom background image on the canvas with optional zoom functionality.
59
- * @param ctx The canvas rendering context.
60
- * @param canvas The canvas configuration object.
61
- * @param zoom Optional zoom configuration.
62
- */
63
- export async function customBackground(
64
- ctx: SKRSContext2D,
65
- canvas: CanvasConfig
66
- ): Promise<void> {
67
- const cfg = canvas.customBg;
68
- if (!cfg) return;
69
-
70
- let imagePath = cfg.source;
71
- if (!/^https?:\/\//i.test(imagePath)) {
72
- imagePath = path.join(process.cwd(), imagePath);
73
- }
74
-
75
- try {
76
- const img = await loadImage(imagePath);
77
- // Canvas size (createCanvas may have overridden via inherit)
78
- const W = canvas.width ?? img.width;
79
- const H = canvas.height ?? img.height;
80
-
81
- if (canvas.blur) ctx.filter = `blur(${canvas.blur}px)`;
82
-
83
- if (cfg.inherit) {
84
- // Canvas was resized to image size in createCanvas; just draw 1:1
85
- ctx.drawImage(img, 0, 0);
86
- } else {
87
- // scale by fit + align
88
- const fit: FitMode = cfg.fit ?? 'fill';
89
- let dx = 0, dy = 0, dw = W, dh = H;
90
-
91
- if (fit === 'contain' || fit === 'cover') {
92
- const s = fit === 'contain'
93
- ? Math.min(W / img.width, H / img.height)
94
- : Math.max(W / img.width, H / img.height);
95
- dw = img.width * s;
96
- dh = img.height * s;
97
- // alignment
98
- const align: AlignMode = cfg.align ?? 'center';
99
- ({ dx, dy } = alignInto(W, H, dw, dh, align));
100
- } else {
101
- // 'fill' stretches image to exactly W x H (may distort)
102
- dx = 0; dy = 0; dw = W; dh = H;
103
- }
104
-
105
- ctx.drawImage(img, dx, dy, dw, dh);
106
- }
107
-
108
- ctx.filter = 'none';
109
- } catch (e: any) {
110
- console.error('customBackground: failed to load', e?.message ?? e);
111
- }
112
- }
113
-
114
- // helper to place the fitted rect inside canvas by alignment keyword
115
- function alignInto(
116
- W: number, H: number, w: number, h: number, align: AlignMode
117
- ): { dx: number; dy: number } {
118
- const cx = (W - w) / 2;
119
- const cy = (H - h) / 2;
120
- switch (align) {
121
- case 'top-left': return { dx: 0, dy: 0 };
122
- case 'top': return { dx: cx, dy: 0 };
123
- case 'top-right': return { dx: W-w, dy: 0 };
124
- case 'left': return { dx: 0, dy: cy };
125
- case 'center': return { dx: cx, dy: cy };
126
- case 'right': return { dx: W-w, dy: cy };
127
- case 'bottom-left': return { dx: 0, dy: H-h };
128
- case 'bottom': return { dx: cx, dy: H-h };
129
- case 'bottom-right': return { dx: W-w, dy: H-h };
130
- default: return { dx: cx, dy: cy };
131
- }
132
- }
133
-
134
-
135
-
136
- export function buildPathbg(
137
- ctx: SKRSContext2D,
138
- x: number,
139
- y: number,
140
- width: number,
141
- height: number,
142
- borderRadius: number | "circular" = 0,
143
- borderPosition: string = "all"
144
- ): void {
145
- ctx.beginPath();
146
-
147
- if (borderRadius === "circular") {
148
- const r = Math.min(width, height) / 2;
149
- ctx.arc(x + width / 2, y + height / 2, r, 0, 2 * Math.PI);
150
- } else if (typeof borderRadius === "number" && borderRadius > 0) {
151
- const br = Math.min(borderRadius, width / 2, height / 2);
152
- const selected = new Set(borderPosition.toLowerCase().split(",").map(s => s.trim()));
153
-
154
- const roundTL = selected.has("all") || selected.has("top-left") || (selected.has("top") && selected.has("left"));
155
- const roundTR = selected.has("all") || selected.has("top-right") || (selected.has("top") && selected.has("right"));
156
- const roundBR = selected.has("all") || selected.has("bottom-right") || (selected.has("bottom") && selected.has("right"));
157
- const roundBL = selected.has("all") || selected.has("bottom-left") || (selected.has("bottom") && selected.has("left"));
158
-
159
- const tl = roundTL ? br : 0;
160
- const tr = roundTR ? br : 0;
161
- const brR = roundBR ? br : 0;
162
- const bl = roundBL ? br : 0;
163
-
164
- ctx.moveTo(x + tl, y);
165
- ctx.lineTo(x + width - tr, y);
166
- if (tr) ctx.arcTo(x + width, y, x + width, y + tr, tr);
167
- ctx.lineTo(x + width, y + height - brR);
168
- if (brR) ctx.arcTo(x + width, y + height, x + width - brR, y + height, brR);
169
- ctx.lineTo(x + bl, y + height);
170
- if (bl) ctx.arcTo(x, y + height, x, y + height - bl, bl);
171
- ctx.lineTo(x, y + tl);
172
- if (tl) ctx.arcTo(x, y, x + tl, y, tl);
173
- } else {
174
- ctx.rect(x, y, width, height);
175
- }
176
-
177
- ctx.closePath();
178
- }
179
-
180
-
181
-
182
- export function applyNoise(ctx: SKRSContext2D, width: number, height: number, intensity = 0.05) {
183
- const noiseCanvas = createCanvas(width, height);
184
- const nctx = noiseCanvas.getContext("2d");
185
- const imageData = nctx.createImageData(width, height);
186
- for (let i = 0; i < imageData.data.length; i += 4) {
187
- const v = (Math.random() * 255) | 0;
188
- imageData.data[i] = v;
189
- imageData.data[i+1] = v;
190
- imageData.data[i+2] = v;
191
- imageData.data[i+3] = 255 * intensity;
192
- }
193
- nctx.putImageData(imageData, 0, 0);
194
- ctx.drawImage(noiseCanvas, 0, 0);
195
- }
196
-
197
- export async function drawPattern(
198
- ctx: SKRSContext2D,
199
- { source, repeat = "repeat", opacity = 1 }: { source: string; repeat?: 'repeat'|'repeat-x'|'repeat-y'|'no-repeat'; opacity?: number },
200
- width: number,
201
- height: number
202
- ) {
203
- const img = await loadImage(source);
204
- const pattern = ctx.createPattern(img, repeat);
205
- if (!pattern) return;
206
- ctx.save();
207
- ctx.globalAlpha = opacity;
208
- ctx.fillStyle = pattern as any;
209
- ctx.fillRect(0, 0, width, height);
210
- ctx.restore();
211
- }
212
-
213
- function rotatePoint(
214
- x: number, y: number,
215
- pivotX: number, pivotY: number,
216
- deg: number
217
- ): [number, number] {
218
- if (!deg) return [x, y];
219
- const a = (deg * Math.PI) / 180;
220
- const dx = x - pivotX, dy = y - pivotY;
221
- const rx = dx * Math.cos(a) - dy * Math.sin(a);
222
- const ry = dx * Math.sin(a) + dy * Math.cos(a);
223
- return [pivotX + rx, pivotY + ry];
224
- }
225
-
226
- export function applyCanvasZoom(
227
- ctx: SKRSContext2D,
228
- width: number,
229
- height: number,
230
- zoom?: { scale?: number; centerX?: number; centerY?: number }
231
- ) {
232
- if (!zoom) return;
233
-
234
- const scale = zoom.scale ?? 1;
235
- if (scale === 1) return; // nothing to do
236
-
237
- const cx = zoom.centerX ?? width / 2;
238
- const cy = zoom.centerY ?? height / 2;
239
-
240
- ctx.translate(cx, cy);
241
- ctx.scale(scale, scale);
242
- ctx.translate(-cx, -cy);
243
- }
244
-
245
-
246
- export function buildCanvasGradient(
247
- ctx: SKRSContext2D,
248
- cfg: { gradient: gradient; width: number; height: number }
249
- ): CanvasGradient {
250
- const { gradient, width, height } = cfg;
251
-
252
- if (gradient.type === 'linear') {
253
- const {
254
- startX = 0, startY = 0,
255
- endX = width, endY = 0,
256
- rotate = 0,
257
- pivotX = width/2, pivotY = height/2,
258
- colors
259
- } = gradient;
260
-
261
- const [sx, sy] = rotatePoint(startX, startY, pivotX, pivotY, rotate);
262
- const [ex, ey] = rotatePoint(endX, endY, pivotX, pivotY, rotate);
263
-
264
- const g = ctx.createLinearGradient(sx, sy, ex, ey);
265
- for (const { stop, color } of colors) g.addColorStop(stop, color);
266
- return g;
267
- }
268
-
269
- // radial
270
- const {
271
- startX = width/2, startY = height/2, startRadius = 0,
272
- endX = width/2, endY = height/2, endRadius = Math.max(width, height)/2,
273
- rotate = 0,
274
- pivotX = width/2, pivotY = height/2,
275
- colors
276
- } = gradient;
277
-
278
- // If centers differ, rotation will rotate both centers around pivot.
279
- const [sx, sy] = rotatePoint(startX, startY, pivotX, pivotY, rotate);
280
- const [ex, ey] = rotatePoint(endX, endY, pivotX, pivotY, rotate);
281
-
282
- const g = ctx.createRadialGradient(sx, sy, startRadius, ex, ey, endRadius);
283
- for (const { stop, color } of colors) g.addColorStop(stop, color);
284
- return g;
285
- }