apexify.js 4.9.25 → 4.9.27

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 (198) hide show
  1. package/README.md +358 -47
  2. package/dist/cjs/Canvas/ApexPainter.d.ts +189 -0
  3. package/dist/cjs/Canvas/ApexPainter.d.ts.map +1 -0
  4. package/dist/{esm/canvas → cjs/Canvas}/ApexPainter.js +461 -352
  5. package/dist/cjs/Canvas/ApexPainter.js.map +1 -0
  6. package/dist/cjs/Canvas/utils/Background/bg.d.ts +43 -0
  7. package/dist/cjs/Canvas/utils/Background/bg.d.ts.map +1 -0
  8. package/dist/cjs/Canvas/utils/Background/bg.js +228 -0
  9. package/dist/cjs/Canvas/utils/Background/bg.js.map +1 -0
  10. package/dist/cjs/{canvas → Canvas}/utils/Charts/charts.d.ts.map +1 -1
  11. package/dist/{esm/canvas → cjs/Canvas}/utils/Charts/charts.js.map +1 -1
  12. package/dist/cjs/{canvas → Canvas}/utils/Custom/customLines.d.ts.map +1 -1
  13. package/dist/{esm/canvas → cjs/Canvas}/utils/Custom/customLines.js +2 -2
  14. package/dist/cjs/Canvas/utils/Custom/customLines.js.map +1 -0
  15. package/dist/cjs/{canvas → Canvas}/utils/General/conversion.d.ts.map +1 -1
  16. package/dist/cjs/{canvas → Canvas}/utils/General/conversion.js.map +1 -1
  17. package/dist/cjs/{canvas → Canvas}/utils/General/general functions.d.ts.map +1 -1
  18. package/dist/{esm/canvas → cjs/Canvas}/utils/General/general functions.js.map +1 -1
  19. package/dist/cjs/Canvas/utils/Image/imageFilters.d.ts +11 -0
  20. package/dist/cjs/Canvas/utils/Image/imageFilters.d.ts.map +1 -0
  21. package/dist/cjs/Canvas/utils/Image/imageFilters.js +307 -0
  22. package/dist/cjs/Canvas/utils/Image/imageFilters.js.map +1 -0
  23. package/dist/cjs/Canvas/utils/Image/imageProperties.d.ts +50 -0
  24. package/dist/cjs/Canvas/utils/Image/imageProperties.d.ts.map +1 -0
  25. package/dist/cjs/Canvas/utils/Image/imageProperties.js +271 -0
  26. package/dist/cjs/Canvas/utils/Image/imageProperties.js.map +1 -0
  27. package/dist/cjs/Canvas/utils/Image/professionalImageFilters.d.ts +11 -0
  28. package/dist/cjs/Canvas/utils/Image/professionalImageFilters.d.ts.map +1 -0
  29. package/dist/cjs/Canvas/utils/Image/professionalImageFilters.js +351 -0
  30. package/dist/cjs/Canvas/utils/Image/professionalImageFilters.js.map +1 -0
  31. package/dist/cjs/Canvas/utils/Image/simpleProfessionalFilters.d.ts +11 -0
  32. package/dist/cjs/Canvas/utils/Image/simpleProfessionalFilters.d.ts.map +1 -0
  33. package/dist/cjs/Canvas/utils/Image/simpleProfessionalFilters.js +215 -0
  34. package/dist/cjs/Canvas/utils/Image/simpleProfessionalFilters.js.map +1 -0
  35. package/dist/cjs/Canvas/utils/Patterns/enhancedPatternRenderer.d.ts +71 -0
  36. package/dist/cjs/Canvas/utils/Patterns/enhancedPatternRenderer.d.ts.map +1 -0
  37. package/dist/cjs/Canvas/utils/Patterns/enhancedPatternRenderer.js +392 -0
  38. package/dist/cjs/Canvas/utils/Patterns/enhancedPatternRenderer.js.map +1 -0
  39. package/dist/cjs/Canvas/utils/Shapes/shapes.d.ts +29 -0
  40. package/dist/cjs/Canvas/utils/Shapes/shapes.d.ts.map +1 -0
  41. package/dist/cjs/Canvas/utils/Shapes/shapes.js +334 -0
  42. package/dist/cjs/Canvas/utils/Shapes/shapes.js.map +1 -0
  43. package/dist/cjs/Canvas/utils/Texts/enhancedTextRenderer.d.ts +127 -0
  44. package/dist/cjs/Canvas/utils/Texts/enhancedTextRenderer.d.ts.map +1 -0
  45. package/dist/cjs/Canvas/utils/Texts/enhancedTextRenderer.js +365 -0
  46. package/dist/cjs/Canvas/utils/Texts/enhancedTextRenderer.js.map +1 -0
  47. package/dist/cjs/{canvas → Canvas}/utils/Texts/textProperties.d.ts.map +1 -1
  48. package/dist/{esm/canvas → cjs/Canvas}/utils/Texts/textProperties.js.map +1 -1
  49. package/dist/{esm/canvas → cjs/Canvas}/utils/types.d.ts +227 -131
  50. package/dist/cjs/Canvas/utils/types.d.ts.map +1 -0
  51. package/dist/cjs/{canvas → Canvas}/utils/types.js +0 -1
  52. package/dist/cjs/Canvas/utils/types.js.map +1 -0
  53. package/dist/cjs/Canvas/utils/utils.d.ts +22 -0
  54. package/dist/cjs/Canvas/utils/utils.d.ts.map +1 -0
  55. package/dist/{esm/canvas → cjs/Canvas}/utils/utils.js +17 -7
  56. package/dist/cjs/Canvas/utils/utils.js.map +1 -0
  57. package/dist/cjs/index.d.ts +6 -3
  58. package/dist/cjs/index.d.ts.map +1 -1
  59. package/dist/cjs/index.js +8 -6
  60. package/dist/cjs/index.js.map +1 -1
  61. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  62. package/dist/cjs/utils.d.ts +1 -1
  63. package/dist/cjs/utils.js +1 -1
  64. package/dist/esm/Canvas/ApexPainter.d.ts +189 -0
  65. package/dist/esm/Canvas/ApexPainter.d.ts.map +1 -0
  66. package/dist/{cjs/canvas → esm/Canvas}/ApexPainter.js +461 -352
  67. package/dist/esm/Canvas/ApexPainter.js.map +1 -0
  68. package/dist/esm/Canvas/utils/Background/bg.d.ts +43 -0
  69. package/dist/esm/Canvas/utils/Background/bg.d.ts.map +1 -0
  70. package/dist/esm/Canvas/utils/Background/bg.js +228 -0
  71. package/dist/esm/Canvas/utils/Background/bg.js.map +1 -0
  72. package/dist/esm/{canvas → Canvas}/utils/Charts/charts.d.ts.map +1 -1
  73. package/dist/{cjs/canvas → esm/Canvas}/utils/Charts/charts.js.map +1 -1
  74. package/dist/esm/{canvas → Canvas}/utils/Custom/customLines.d.ts.map +1 -1
  75. package/dist/{cjs/canvas → esm/Canvas}/utils/Custom/customLines.js +2 -2
  76. package/dist/esm/Canvas/utils/Custom/customLines.js.map +1 -0
  77. package/dist/esm/{canvas → Canvas}/utils/General/conversion.d.ts.map +1 -1
  78. package/dist/esm/{canvas → Canvas}/utils/General/conversion.js.map +1 -1
  79. package/dist/esm/{canvas → Canvas}/utils/General/general functions.d.ts.map +1 -1
  80. package/dist/{cjs/canvas → esm/Canvas}/utils/General/general functions.js.map +1 -1
  81. package/dist/esm/Canvas/utils/Image/imageFilters.d.ts +11 -0
  82. package/dist/esm/Canvas/utils/Image/imageFilters.d.ts.map +1 -0
  83. package/dist/esm/Canvas/utils/Image/imageFilters.js +307 -0
  84. package/dist/esm/Canvas/utils/Image/imageFilters.js.map +1 -0
  85. package/dist/esm/Canvas/utils/Image/imageProperties.d.ts +50 -0
  86. package/dist/esm/Canvas/utils/Image/imageProperties.d.ts.map +1 -0
  87. package/dist/esm/Canvas/utils/Image/imageProperties.js +271 -0
  88. package/dist/esm/Canvas/utils/Image/imageProperties.js.map +1 -0
  89. package/dist/esm/Canvas/utils/Image/professionalImageFilters.d.ts +11 -0
  90. package/dist/esm/Canvas/utils/Image/professionalImageFilters.d.ts.map +1 -0
  91. package/dist/esm/Canvas/utils/Image/professionalImageFilters.js +351 -0
  92. package/dist/esm/Canvas/utils/Image/professionalImageFilters.js.map +1 -0
  93. package/dist/esm/Canvas/utils/Image/simpleProfessionalFilters.d.ts +11 -0
  94. package/dist/esm/Canvas/utils/Image/simpleProfessionalFilters.d.ts.map +1 -0
  95. package/dist/esm/Canvas/utils/Image/simpleProfessionalFilters.js +215 -0
  96. package/dist/esm/Canvas/utils/Image/simpleProfessionalFilters.js.map +1 -0
  97. package/dist/esm/Canvas/utils/Patterns/enhancedPatternRenderer.d.ts +71 -0
  98. package/dist/esm/Canvas/utils/Patterns/enhancedPatternRenderer.d.ts.map +1 -0
  99. package/dist/esm/Canvas/utils/Patterns/enhancedPatternRenderer.js +392 -0
  100. package/dist/esm/Canvas/utils/Patterns/enhancedPatternRenderer.js.map +1 -0
  101. package/dist/esm/Canvas/utils/Shapes/shapes.d.ts +29 -0
  102. package/dist/esm/Canvas/utils/Shapes/shapes.d.ts.map +1 -0
  103. package/dist/esm/Canvas/utils/Shapes/shapes.js +334 -0
  104. package/dist/esm/Canvas/utils/Shapes/shapes.js.map +1 -0
  105. package/dist/esm/Canvas/utils/Texts/enhancedTextRenderer.d.ts +127 -0
  106. package/dist/esm/Canvas/utils/Texts/enhancedTextRenderer.d.ts.map +1 -0
  107. package/dist/esm/Canvas/utils/Texts/enhancedTextRenderer.js +365 -0
  108. package/dist/esm/Canvas/utils/Texts/enhancedTextRenderer.js.map +1 -0
  109. package/dist/esm/{canvas → Canvas}/utils/Texts/textProperties.d.ts.map +1 -1
  110. package/dist/{cjs/canvas → esm/Canvas}/utils/Texts/textProperties.js.map +1 -1
  111. package/dist/{cjs/canvas → esm/Canvas}/utils/types.d.ts +227 -131
  112. package/dist/esm/Canvas/utils/types.d.ts.map +1 -0
  113. package/dist/esm/{canvas → Canvas}/utils/types.js +0 -1
  114. package/dist/esm/Canvas/utils/types.js.map +1 -0
  115. package/dist/esm/Canvas/utils/utils.d.ts +22 -0
  116. package/dist/esm/Canvas/utils/utils.d.ts.map +1 -0
  117. package/dist/{cjs/canvas → esm/Canvas}/utils/utils.js +17 -7
  118. package/dist/esm/Canvas/utils/utils.js.map +1 -0
  119. package/dist/esm/index.d.ts +6 -3
  120. package/dist/esm/index.d.ts.map +1 -1
  121. package/dist/esm/index.js +8 -6
  122. package/dist/esm/index.js.map +1 -1
  123. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  124. package/dist/esm/utils.d.ts +1 -1
  125. package/dist/esm/utils.js +1 -1
  126. package/lib/{canvas → Canvas}/ApexPainter.ts +1325 -1218
  127. package/lib/Canvas/utils/Background/bg.ts +285 -0
  128. package/lib/{canvas → Canvas}/utils/Custom/customLines.ts +3 -3
  129. package/lib/Canvas/utils/Image/imageFilters.ts +356 -0
  130. package/lib/Canvas/utils/Image/imageProperties.ts +382 -0
  131. package/lib/Canvas/utils/Image/professionalImageFilters.ts +391 -0
  132. package/lib/Canvas/utils/Image/simpleProfessionalFilters.ts +229 -0
  133. package/lib/Canvas/utils/Patterns/enhancedPatternRenderer.ts +444 -0
  134. package/lib/Canvas/utils/Shapes/shapes.ts +528 -0
  135. package/lib/Canvas/utils/Texts/enhancedTextRenderer.ts +478 -0
  136. package/lib/{canvas → Canvas}/utils/types.ts +301 -117
  137. package/lib/{canvas → Canvas}/utils/utils.ts +85 -72
  138. package/lib/index.ts +8 -9
  139. package/lib/utils.ts +1 -1
  140. package/package.json +107 -191
  141. package/dist/cjs/canvas/ApexPainter.d.ts +0 -145
  142. package/dist/cjs/canvas/ApexPainter.d.ts.map +0 -1
  143. package/dist/cjs/canvas/ApexPainter.js.map +0 -1
  144. package/dist/cjs/canvas/utils/Background/bg.d.ts +0 -31
  145. package/dist/cjs/canvas/utils/Background/bg.d.ts.map +0 -1
  146. package/dist/cjs/canvas/utils/Background/bg.js +0 -161
  147. package/dist/cjs/canvas/utils/Background/bg.js.map +0 -1
  148. package/dist/cjs/canvas/utils/Custom/customLines.js.map +0 -1
  149. package/dist/cjs/canvas/utils/Image/imageProperties.d.ts +0 -115
  150. package/dist/cjs/canvas/utils/Image/imageProperties.d.ts.map +0 -1
  151. package/dist/cjs/canvas/utils/Image/imageProperties.js +0 -602
  152. package/dist/cjs/canvas/utils/Image/imageProperties.js.map +0 -1
  153. package/dist/cjs/canvas/utils/types.d.ts.map +0 -1
  154. package/dist/cjs/canvas/utils/types.js.map +0 -1
  155. package/dist/cjs/canvas/utils/utils.d.ts +0 -19
  156. package/dist/cjs/canvas/utils/utils.d.ts.map +0 -1
  157. package/dist/cjs/canvas/utils/utils.js.map +0 -1
  158. package/dist/esm/canvas/ApexPainter.d.ts +0 -145
  159. package/dist/esm/canvas/ApexPainter.d.ts.map +0 -1
  160. package/dist/esm/canvas/ApexPainter.js.map +0 -1
  161. package/dist/esm/canvas/utils/Background/bg.d.ts +0 -31
  162. package/dist/esm/canvas/utils/Background/bg.d.ts.map +0 -1
  163. package/dist/esm/canvas/utils/Background/bg.js +0 -161
  164. package/dist/esm/canvas/utils/Background/bg.js.map +0 -1
  165. package/dist/esm/canvas/utils/Custom/customLines.js.map +0 -1
  166. package/dist/esm/canvas/utils/Image/imageProperties.d.ts +0 -115
  167. package/dist/esm/canvas/utils/Image/imageProperties.d.ts.map +0 -1
  168. package/dist/esm/canvas/utils/Image/imageProperties.js +0 -602
  169. package/dist/esm/canvas/utils/Image/imageProperties.js.map +0 -1
  170. package/dist/esm/canvas/utils/types.d.ts.map +0 -1
  171. package/dist/esm/canvas/utils/types.js.map +0 -1
  172. package/dist/esm/canvas/utils/utils.d.ts +0 -19
  173. package/dist/esm/canvas/utils/utils.d.ts.map +0 -1
  174. package/dist/esm/canvas/utils/utils.js.map +0 -1
  175. package/lib/canvas/utils/Background/bg.ts +0 -211
  176. package/lib/canvas/utils/Image/imageProperties.ts +0 -835
  177. /package/dist/cjs/{canvas → Canvas}/utils/Charts/charts.d.ts +0 -0
  178. /package/dist/cjs/{canvas → Canvas}/utils/Charts/charts.js +0 -0
  179. /package/dist/cjs/{canvas → Canvas}/utils/Custom/customLines.d.ts +0 -0
  180. /package/dist/cjs/{canvas → Canvas}/utils/General/conversion.d.ts +0 -0
  181. /package/dist/cjs/{canvas → Canvas}/utils/General/conversion.js +0 -0
  182. /package/dist/cjs/{canvas → Canvas}/utils/General/general functions.d.ts +0 -0
  183. /package/dist/cjs/{canvas → Canvas}/utils/General/general functions.js +0 -0
  184. /package/dist/cjs/{canvas → Canvas}/utils/Texts/textProperties.d.ts +0 -0
  185. /package/dist/cjs/{canvas → Canvas}/utils/Texts/textProperties.js +0 -0
  186. /package/dist/esm/{canvas → Canvas}/utils/Charts/charts.d.ts +0 -0
  187. /package/dist/esm/{canvas → Canvas}/utils/Charts/charts.js +0 -0
  188. /package/dist/esm/{canvas → Canvas}/utils/Custom/customLines.d.ts +0 -0
  189. /package/dist/esm/{canvas → Canvas}/utils/General/conversion.d.ts +0 -0
  190. /package/dist/esm/{canvas → Canvas}/utils/General/conversion.js +0 -0
  191. /package/dist/esm/{canvas → Canvas}/utils/General/general functions.d.ts +0 -0
  192. /package/dist/esm/{canvas → Canvas}/utils/General/general functions.js +0 -0
  193. /package/dist/esm/{canvas → Canvas}/utils/Texts/textProperties.d.ts +0 -0
  194. /package/dist/esm/{canvas → Canvas}/utils/Texts/textProperties.js +0 -0
  195. /package/lib/{canvas → Canvas}/utils/Charts/charts.ts +0 -0
  196. /package/lib/{canvas → Canvas}/utils/General/conversion.ts +0 -0
  197. /package/lib/{canvas → Canvas}/utils/General/general functions.ts +0 -0
  198. /package/lib/{canvas → Canvas}/utils/Texts/textProperties.ts +0 -0
@@ -0,0 +1,271 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.buildPath = buildPath;
7
+ exports.applyRotation = applyRotation;
8
+ exports.createGradientFill = createGradientFill;
9
+ exports.fitInto = fitInto;
10
+ exports.loadImageCached = loadImageCached;
11
+ exports.applyShadow = applyShadow;
12
+ exports.applyStroke = applyStroke;
13
+ exports.drawBoxBackground = drawBoxBackground;
14
+ function buildPath(ctx, x, y, w, h, radius = 0, borderPos = "all") {
15
+ ctx.beginPath();
16
+ if (radius === "circular") {
17
+ const r = Math.min(w, h) / 2;
18
+ ctx.arc(x + w / 2, y + h / 2, r, 0, Math.PI * 2);
19
+ ctx.closePath();
20
+ return;
21
+ }
22
+ if (!radius || radius <= 0) {
23
+ ctx.rect(x, y, w, h);
24
+ ctx.closePath();
25
+ return;
26
+ }
27
+ const br = Math.min(radius, w / 2, h / 2);
28
+ const sel = new Set(borderPos.toLowerCase().split(",").map(s => s.trim()));
29
+ const has = (name) => sel.has("all") || sel.has(name) ||
30
+ (name === "top-left" && (sel.has("top") || sel.has("left"))) ||
31
+ (name === "top-right" && (sel.has("top") || sel.has("right"))) ||
32
+ (name === "bottom-right" && (sel.has("bottom") || sel.has("right"))) ||
33
+ (name === "bottom-left" && (sel.has("bottom") || sel.has("left")));
34
+ const tl = has("top-left") ? br : 0;
35
+ const tr = has("top-right") ? br : 0;
36
+ const brR = has("bottom-right") ? br : 0;
37
+ const bl = has("bottom-left") ? br : 0;
38
+ ctx.moveTo(x + tl, y);
39
+ ctx.lineTo(x + w - tr, y);
40
+ if (tr)
41
+ ctx.arcTo(x + w, y, x + w, y + tr, tr);
42
+ ctx.lineTo(x + w, y + h - brR);
43
+ if (brR)
44
+ ctx.arcTo(x + w, y + h, x + w - brR, y + h, brR);
45
+ ctx.lineTo(x + bl, y + h);
46
+ if (bl)
47
+ ctx.arcTo(x, y + h, x, y + h - bl, bl);
48
+ ctx.lineTo(x, y + tl);
49
+ if (tl)
50
+ ctx.arcTo(x, y, x + tl, y, tl);
51
+ ctx.closePath();
52
+ }
53
+ function applyRotation(ctx, deg, x, y, w, h) {
54
+ if (!deg)
55
+ return;
56
+ const cx = x + w / 2, cy = y + h / 2;
57
+ ctx.translate(cx, cy);
58
+ ctx.rotate((deg * Math.PI) / 180);
59
+ ctx.translate(-cx, -cy);
60
+ }
61
+ function rotatePoint(x, y, px, py, deg = 0) {
62
+ if (!deg)
63
+ return [x, y];
64
+ const a = (deg * Math.PI) / 180;
65
+ const dx = x - px, dy = y - py;
66
+ return [px + dx * Math.cos(a) - dy * Math.sin(a),
67
+ py + dx * Math.sin(a) + dy * Math.cos(a)];
68
+ }
69
+ /**
70
+ * Build a gradient in **rect-local coordinates**:
71
+ * - Defaults for coords use rect {w,h}
72
+ * - Rotation pivot defaults to rect center
73
+ * - Offsets are applied by adding rect.x/rect.y to all points
74
+ */
75
+ function createGradientFill(ctx, g, rect) {
76
+ const { x, y, w, h } = rect;
77
+ if (g.type === "linear") {
78
+ const { startX = 0, startY = 0, endX = w, endY = 0, rotate = 0, pivotX = w / 2, pivotY = h / 2, colors } = g;
79
+ const [sx, sy] = rotatePoint(startX, startY, pivotX, pivotY, rotate);
80
+ const [ex, ey] = rotatePoint(endX, endY, pivotX, pivotY, rotate);
81
+ const grad = ctx.createLinearGradient(x + sx, y + sy, x + ex, y + ey);
82
+ colors.forEach(cs => grad.addColorStop(cs.stop, cs.color));
83
+ return grad;
84
+ }
85
+ // radial
86
+ const { startX = w / 2, startY = h / 2, startRadius = 0, endX = w / 2, endY = h / 2, endRadius = Math.max(w, h) / 2, rotate = 0, pivotX = w / 2, pivotY = h / 2, colors } = g;
87
+ const [sx, sy] = rotatePoint(startX, startY, pivotX, pivotY, rotate);
88
+ const [ex, ey] = rotatePoint(endX, endY, pivotX, pivotY, rotate);
89
+ const grad = ctx.createRadialGradient(x + sx, y + sy, startRadius, x + ex, y + ey, endRadius);
90
+ colors.forEach(cs => grad.addColorStop(cs.stop, cs.color));
91
+ return grad;
92
+ }
93
+ function fitInto(boxX, boxY, boxW, boxH, imgW, imgH, fit = "fill", align = "center") {
94
+ let dx = boxX, dy = boxY, dw = boxW, dh = boxH, sx = 0, sy = 0, sw = imgW, sh = imgH;
95
+ if (fit === "fill") {
96
+ return { dx, dy, dw, dh, sx, sy, sw, sh };
97
+ }
98
+ const s = fit === "contain"
99
+ ? Math.min(boxW / imgW, boxH / imgH)
100
+ : Math.max(boxW / imgW, boxH / imgH);
101
+ dw = imgW * s;
102
+ dh = imgH * s;
103
+ const cx = boxX + (boxW - dw) / 2;
104
+ const cy = boxY + (boxH - dh) / 2;
105
+ switch (align) {
106
+ case "top-left":
107
+ dx = boxX;
108
+ dy = boxY;
109
+ break;
110
+ case "top":
111
+ dx = cx;
112
+ dy = boxY;
113
+ break;
114
+ case "top-right":
115
+ dx = boxX + boxW - dw;
116
+ dy = boxY;
117
+ break;
118
+ case "left":
119
+ dx = boxX;
120
+ dy = cy;
121
+ break;
122
+ case "center":
123
+ dx = cx;
124
+ dy = cy;
125
+ break;
126
+ case "right":
127
+ dx = boxX + boxW - dw;
128
+ dy = cy;
129
+ break;
130
+ case "bottom-left":
131
+ dx = boxX;
132
+ dy = boxY + boxH - dh;
133
+ break;
134
+ case "bottom":
135
+ dx = cx;
136
+ dy = boxY + boxH - dh;
137
+ break;
138
+ case "bottom-right":
139
+ dx = boxX + boxW - dw;
140
+ dy = boxY + boxH - dh;
141
+ break;
142
+ default:
143
+ dx = cx;
144
+ dy = cy;
145
+ break;
146
+ }
147
+ return { dx, dy, dw, dh, sx, sy, sw, sh };
148
+ }
149
+ // utils/imageCache.ts
150
+ const canvas_1 = require("@napi-rs/canvas");
151
+ const path_1 = __importDefault(require("path"));
152
+ const cache = new Map();
153
+ function loadImageCached(src) {
154
+ if (Buffer.isBuffer(src))
155
+ return (0, canvas_1.loadImage)(src);
156
+ const key = src.startsWith("http") ? src : path_1.default.resolve(process.cwd(), src);
157
+ if (!cache.has(key))
158
+ cache.set(key, (0, canvas_1.loadImage)(key));
159
+ return cache.get(key);
160
+ }
161
+ // Single implementation handling both
162
+ function applyShadow(ctx, a, b, c, d, e, f, g) {
163
+ let rect;
164
+ let shadow;
165
+ let radius;
166
+ let borderPos;
167
+ // Detect which overload we’re in
168
+ if (typeof a === "object" && "x" in a && "w" in a) {
169
+ // (ctx, rect, shadow)
170
+ rect = a;
171
+ shadow = b;
172
+ radius = shadow?.borderRadius ?? 0;
173
+ borderPos = shadow?.borderPosition ?? "all";
174
+ }
175
+ else {
176
+ // (ctx, shadow, x, y, w, h, radius?, borderPos?)
177
+ shadow = a;
178
+ rect = { x: b, y: c, w: d, h: e };
179
+ radius = f ?? shadow?.borderRadius ?? 0;
180
+ borderPos = g ?? shadow?.borderPosition ?? "all";
181
+ }
182
+ if (!shadow)
183
+ return;
184
+ const { color = "rgba(0,0,0,1)", gradient, opacity = 0.4, offsetX = 0, offsetY = 0, blur = 20 } = shadow;
185
+ const r = { x: rect.x + offsetX, y: rect.y + offsetY, w: rect.w, h: rect.h };
186
+ ctx.save();
187
+ ctx.globalAlpha = opacity;
188
+ if (blur > 0)
189
+ ctx.filter = `blur(${blur}px)`;
190
+ buildPath(ctx, r.x, r.y, r.w, r.h, radius, borderPos);
191
+ if (gradient) {
192
+ const gfill = createGradientFill(ctx, gradient, r);
193
+ ctx.fillStyle = gfill;
194
+ }
195
+ else {
196
+ ctx.fillStyle = color;
197
+ }
198
+ ctx.fill();
199
+ ctx.filter = "none";
200
+ ctx.globalAlpha = 1;
201
+ ctx.restore();
202
+ }
203
+ // Single implementation handling both
204
+ function applyStroke(ctx, a, b, c, d, e, f, g) {
205
+ let rect;
206
+ let stroke;
207
+ let radius;
208
+ let borderPos;
209
+ if (typeof a === "object" && "x" in a && "w" in a) {
210
+ // (ctx, rect, stroke)
211
+ rect = a;
212
+ stroke = b;
213
+ radius = stroke?.borderRadius ?? 0;
214
+ borderPos = stroke?.borderPosition ?? "all";
215
+ }
216
+ else {
217
+ // (ctx, stroke, x, y, w, h, radius?, borderPos?)
218
+ stroke = a;
219
+ rect = { x: b, y: c, w: d, h: e };
220
+ radius = f ?? stroke?.borderRadius ?? 0;
221
+ borderPos = g ?? stroke?.borderPosition ?? "all";
222
+ }
223
+ if (!stroke)
224
+ return;
225
+ const { color = "#000", gradient, width = 2, position = 0, blur = 0, opacity = 1 } = stroke;
226
+ // expand/shrink by `position`
227
+ const r = {
228
+ x: rect.x - position,
229
+ y: rect.y - position,
230
+ w: rect.w + position * 2,
231
+ h: rect.h + position * 2
232
+ };
233
+ ctx.save();
234
+ if (blur > 0)
235
+ ctx.filter = `blur(${blur}px)`;
236
+ ctx.globalAlpha = opacity;
237
+ buildPath(ctx, r.x, r.y, r.w, r.h, radius, borderPos);
238
+ ctx.lineWidth = width;
239
+ if (gradient) {
240
+ const gstroke = createGradientFill(ctx, gradient, r);
241
+ ctx.strokeStyle = gstroke;
242
+ }
243
+ else {
244
+ ctx.strokeStyle = color;
245
+ }
246
+ ctx.stroke();
247
+ ctx.filter = "none";
248
+ ctx.globalAlpha = 1;
249
+ ctx.restore();
250
+ }
251
+ /** Optional “box background” under the bitmap, inside the image clip */
252
+ function drawBoxBackground(ctx, rect, boxBg, borderRadius, borderPosition) {
253
+ if (!boxBg)
254
+ return;
255
+ const { color, gradient } = boxBg;
256
+ // clip to the box radius, then fill
257
+ ctx.save();
258
+ buildPath(ctx, rect.x, rect.y, rect.w, rect.h, borderRadius ?? 0, borderPosition ?? "all");
259
+ ctx.clip();
260
+ if (gradient) {
261
+ const g = createGradientFill(ctx, gradient, rect);
262
+ ctx.fillStyle = g;
263
+ ctx.fillRect(rect.x, rect.y, rect.w, rect.h);
264
+ }
265
+ else if (color && color !== "transparent") {
266
+ ctx.fillStyle = color;
267
+ ctx.fillRect(rect.x, rect.y, rect.w, rect.h);
268
+ }
269
+ ctx.restore();
270
+ }
271
+ //# sourceMappingURL=imageProperties.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"imageProperties.js","sourceRoot":"","sources":["../../../../../lib/Canvas/utils/Image/imageProperties.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { SKRSContext2D } from '@napi-rs/canvas';
2
+ import { ImageFilter } from '../types';
3
+ /**
4
+ * Applies professional image filters using Sharp and Jimp
5
+ * @param ctx Canvas 2D context
6
+ * @param filters Array of filters to apply
7
+ * @param width Canvas width
8
+ * @param height Canvas height
9
+ */
10
+ export declare function applyProfessionalImageFilters(ctx: SKRSContext2D, filters: ImageFilter[], width: number, height: number): Promise<void>;
11
+ //# sourceMappingURL=professionalImageFilters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"professionalImageFilters.d.ts","sourceRoot":"","sources":["../../../../../lib/Canvas/utils/Image/professionalImageFilters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAIvC;;;;;;GAMG;AACH,wBAAsB,6BAA6B,CACjD,GAAG,EAAE,aAAa,EAClB,OAAO,EAAE,WAAW,EAAE,EACtB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,CAoFf"}
@@ -0,0 +1,351 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.applyProfessionalImageFilters = applyProfessionalImageFilters;
7
+ const sharp_1 = __importDefault(require("sharp"));
8
+ const jimp_1 = require("jimp");
9
+ /**
10
+ * Applies professional image filters using Sharp and Jimp
11
+ * @param ctx Canvas 2D context
12
+ * @param filters Array of filters to apply
13
+ * @param width Canvas width
14
+ * @param height Canvas height
15
+ */
16
+ async function applyProfessionalImageFilters(ctx, filters, width, height) {
17
+ if (!filters || filters.length === 0)
18
+ return;
19
+ try {
20
+ // Get current canvas data
21
+ const imageData = ctx.getImageData(0, 0, width, height);
22
+ const buffer = Buffer.from(new Uint8Array(imageData.data.buffer));
23
+ // Convert to Sharp-compatible format
24
+ let sharpImage = (0, sharp_1.default)(buffer, {
25
+ raw: {
26
+ width: width,
27
+ height: height,
28
+ channels: 4
29
+ }
30
+ });
31
+ // Apply each filter using Sharp
32
+ for (const filter of filters) {
33
+ switch (filter.type) {
34
+ case 'gaussianBlur':
35
+ sharpImage = await applyGaussianBlurSharp(sharpImage, filter.intensity || 0);
36
+ break;
37
+ case 'motionBlur':
38
+ sharpImage = await applyMotionBlurSharp(sharpImage, filter.intensity || 0, filter.angle || 0);
39
+ break;
40
+ case 'radialBlur':
41
+ sharpImage = await applyRadialBlurSharp(sharpImage, filter.intensity || 0, filter.centerX || width / 2, filter.centerY || height / 2);
42
+ break;
43
+ case 'sharpen':
44
+ sharpImage = await applySharpenSharp(sharpImage, filter.intensity || 0);
45
+ break;
46
+ case 'brightness':
47
+ sharpImage = await applyBrightnessSharp(sharpImage, filter.value || 0);
48
+ break;
49
+ case 'contrast':
50
+ sharpImage = await applyContrastSharp(sharpImage, filter.value || 0);
51
+ break;
52
+ case 'saturation':
53
+ sharpImage = await applySaturationSharp(sharpImage, filter.value || 0);
54
+ break;
55
+ case 'hueShift':
56
+ sharpImage = await applyHueShiftSharp(sharpImage, filter.value || 0);
57
+ break;
58
+ case 'grayscale':
59
+ sharpImage = await applyGrayscaleSharp(sharpImage);
60
+ break;
61
+ case 'sepia':
62
+ sharpImage = await applySepiaSharp(sharpImage);
63
+ break;
64
+ case 'invert':
65
+ sharpImage = await applyInvertSharp(sharpImage);
66
+ break;
67
+ case 'posterize':
68
+ sharpImage = await applyPosterizeSharp(sharpImage, filter.levels || 4);
69
+ break;
70
+ case 'pixelate':
71
+ sharpImage = await applyPixelateSharp(sharpImage, filter.size || 10);
72
+ break;
73
+ case 'noise':
74
+ sharpImage = await applyNoiseSharp(sharpImage, filter.intensity || 0.1);
75
+ break;
76
+ case 'grain':
77
+ sharpImage = await applyGrainSharp(sharpImage, filter.intensity || 0.05);
78
+ break;
79
+ case 'edgeDetection':
80
+ sharpImage = await applyEdgeDetectionSharp(sharpImage, filter.intensity || 1);
81
+ break;
82
+ case 'emboss':
83
+ sharpImage = await applyEmbossSharp(sharpImage, filter.intensity || 1);
84
+ break;
85
+ }
86
+ }
87
+ // Convert back to canvas format
88
+ const { data } = await sharpImage.raw().toBuffer({ resolveWithObject: true });
89
+ const newImageData = new ImageData(new Uint8ClampedArray(data), width, height);
90
+ ctx.putImageData(newImageData, 0, 0);
91
+ }
92
+ catch (error) {
93
+ console.error('Error applying professional filters:', error);
94
+ // Fallback to basic filters if Sharp fails
95
+ applyBasicFilters(ctx, filters, width, height);
96
+ }
97
+ }
98
+ // Sharp-based filter implementations
99
+ async function applyGaussianBlurSharp(image, intensity) {
100
+ if (intensity > 0) {
101
+ return image.blur(intensity);
102
+ }
103
+ return image;
104
+ }
105
+ async function applyMotionBlurSharp(image, intensity, angle) {
106
+ if (intensity > 0) {
107
+ // Motion blur using convolution
108
+ const kernel = createMotionBlurKernel(intensity, angle);
109
+ return image.convolve(kernel);
110
+ }
111
+ return image;
112
+ }
113
+ async function applyRadialBlurSharp(image, intensity, centerX, centerY) {
114
+ if (intensity > 0) {
115
+ // Radial blur using custom kernel
116
+ const kernel = createRadialBlurKernel(intensity, centerX, centerY);
117
+ return image.convolve(kernel);
118
+ }
119
+ return image;
120
+ }
121
+ async function applySharpenSharp(image, intensity) {
122
+ if (intensity > 0) {
123
+ return image.sharpen(intensity, 1, 2);
124
+ }
125
+ return image;
126
+ }
127
+ async function applyBrightnessSharp(image, value) {
128
+ if (value !== 0) {
129
+ const brightness = Math.max(0, Math.min(2, 1 + value / 100));
130
+ return image.modulate({ brightness });
131
+ }
132
+ return image;
133
+ }
134
+ async function applyContrastSharp(image, value) {
135
+ if (value !== 0) {
136
+ const contrast = Math.max(0, Math.min(2, 1 + value / 100));
137
+ return image.linear(contrast, -(128 * contrast) + 128);
138
+ }
139
+ return image;
140
+ }
141
+ async function applySaturationSharp(image, value) {
142
+ if (value !== 0) {
143
+ const saturation = Math.max(0, Math.min(2, 1 + value / 100));
144
+ return image.modulate({ saturation });
145
+ }
146
+ return image;
147
+ }
148
+ async function applyHueShiftSharp(image, value) {
149
+ if (value !== 0) {
150
+ return image.modulate({ hue: value });
151
+ }
152
+ return image;
153
+ }
154
+ async function applyGrayscaleSharp(image) {
155
+ return image.grayscale();
156
+ }
157
+ async function applySepiaSharp(image) {
158
+ return image.recomb([
159
+ [0.393, 0.769, 0.189],
160
+ [0.349, 0.686, 0.168],
161
+ [0.272, 0.534, 0.131]
162
+ ]);
163
+ }
164
+ async function applyInvertSharp(image) {
165
+ return image.negate();
166
+ }
167
+ async function applyPosterizeSharp(image, levels) {
168
+ if (levels > 1) {
169
+ const step = 255 / (levels - 1);
170
+ return image.threshold(128).modulate({ saturation: 0 });
171
+ }
172
+ return image;
173
+ }
174
+ async function applyPixelateSharp(image, size) {
175
+ if (size > 1) {
176
+ const { width, height } = await image.metadata();
177
+ const scale = Math.max(1, Math.floor(Math.min(width || 1, height || 1) / size));
178
+ return image.resize({ width: scale, height: scale, kernel: sharp_1.default.kernel.nearest })
179
+ .resize({ width: width, height: height, kernel: sharp_1.default.kernel.nearest });
180
+ }
181
+ return image;
182
+ }
183
+ async function applyNoiseSharp(image, intensity) {
184
+ if (intensity > 0) {
185
+ // Add noise using Jimp for better control
186
+ const buffer = await image.png().toBuffer();
187
+ const jimpImage = await jimp_1.Jimp.read(buffer);
188
+ jimpImage.scan(0, 0, jimpImage.width, jimpImage.height, function (x, y, idx) {
189
+ const noise = (Math.random() - 0.5) * intensity * 255;
190
+ this.bitmap.data[idx] = Math.max(0, Math.min(255, this.bitmap.data[idx] + noise)); // R
191
+ this.bitmap.data[idx + 1] = Math.max(0, Math.min(255, this.bitmap.data[idx + 1] + noise)); // G
192
+ this.bitmap.data[idx + 2] = Math.max(0, Math.min(255, this.bitmap.data[idx + 2] + noise)); // B
193
+ });
194
+ const jimpBuffer = await jimpImage.getBuffer('image/png');
195
+ return (0, sharp_1.default)(jimpBuffer);
196
+ }
197
+ return image;
198
+ }
199
+ async function applyGrainSharp(image, intensity) {
200
+ if (intensity > 0) {
201
+ // Add grain using Jimp
202
+ const buffer = await image.png().toBuffer();
203
+ const jimpImage = await jimp_1.Jimp.read(buffer);
204
+ jimpImage.scan(0, 0, jimpImage.width, jimpImage.height, function (x, y, idx) {
205
+ const grain = (Math.random() - 0.5) * intensity * 100;
206
+ this.bitmap.data[idx] = Math.max(0, Math.min(255, this.bitmap.data[idx] + grain)); // R
207
+ this.bitmap.data[idx + 1] = Math.max(0, Math.min(255, this.bitmap.data[idx + 1] + grain)); // G
208
+ this.bitmap.data[idx + 2] = Math.max(0, Math.min(255, this.bitmap.data[idx + 2] + grain)); // B
209
+ });
210
+ const jimpBuffer = await jimpImage.getBuffer('image/png');
211
+ return (0, sharp_1.default)(jimpBuffer);
212
+ }
213
+ return image;
214
+ }
215
+ async function applyEdgeDetectionSharp(image, intensity) {
216
+ if (intensity > 0) {
217
+ // Edge detection using Sobel kernel
218
+ const kernel = createSobelKernel(intensity);
219
+ return image.convolve(kernel).grayscale();
220
+ }
221
+ return image;
222
+ }
223
+ async function applyEmbossSharp(image, intensity) {
224
+ if (intensity > 0) {
225
+ // Emboss using custom kernel
226
+ const kernel = createEmbossKernel(intensity);
227
+ return image.convolve(kernel);
228
+ }
229
+ return image;
230
+ }
231
+ // Kernel creation functions
232
+ function createMotionBlurKernel(intensity, angle) {
233
+ const size = Math.max(3, Math.floor(intensity));
234
+ const kernel = Array(size * size).fill(0);
235
+ const center = Math.floor(size / 2);
236
+ // Create motion blur kernel based on angle
237
+ const radians = (angle * Math.PI) / 180;
238
+ const dx = Math.cos(radians);
239
+ const dy = Math.sin(radians);
240
+ for (let i = 0; i < size; i++) {
241
+ const x = Math.round(center + dx * (i - center));
242
+ const y = Math.round(center + dy * (i - center));
243
+ if (x >= 0 && x < size && y >= 0 && y < size) {
244
+ kernel[y * size + x] = 1 / size;
245
+ }
246
+ }
247
+ return {
248
+ width: size,
249
+ height: size,
250
+ kernel: kernel,
251
+ scale: 1,
252
+ offset: 0
253
+ };
254
+ }
255
+ function createRadialBlurKernel(intensity, centerX, centerY) {
256
+ const size = Math.max(3, Math.floor(intensity));
257
+ const kernel = Array(size * size).fill(0);
258
+ const center = Math.floor(size / 2);
259
+ for (let y = 0; y < size; y++) {
260
+ for (let x = 0; x < size; x++) {
261
+ const distance = Math.sqrt((x - center) ** 2 + (y - center) ** 2);
262
+ const weight = Math.max(0, 1 - distance / center);
263
+ kernel[y * size + x] = weight;
264
+ }
265
+ }
266
+ // Normalize kernel
267
+ const sum = kernel.reduce((a, b) => a + b, 0);
268
+ for (let i = 0; i < kernel.length; i++) {
269
+ kernel[i] /= sum;
270
+ }
271
+ return {
272
+ width: size,
273
+ height: size,
274
+ kernel: kernel,
275
+ scale: 1,
276
+ offset: 0
277
+ };
278
+ }
279
+ function createSobelKernel(intensity) {
280
+ // Sobel X kernel for edge detection
281
+ const kernel = [
282
+ -1, 0, 1,
283
+ -2, 0, 2,
284
+ -1, 0, 1
285
+ ].map(v => v * intensity);
286
+ return {
287
+ width: 3,
288
+ height: 3,
289
+ kernel: kernel,
290
+ scale: 1,
291
+ offset: 128
292
+ };
293
+ }
294
+ function createEmbossKernel(intensity) {
295
+ const kernel = [
296
+ -2, -1, 0,
297
+ -1, 1, 1,
298
+ 0, 1, 2
299
+ ].map(v => v * intensity);
300
+ return {
301
+ width: 3,
302
+ height: 3,
303
+ kernel: kernel,
304
+ scale: 1,
305
+ offset: 128
306
+ };
307
+ }
308
+ // Fallback basic filters
309
+ function applyBasicFilters(ctx, filters, width, height) {
310
+ ctx.save();
311
+ for (const filter of filters) {
312
+ switch (filter.type) {
313
+ case 'gaussianBlur':
314
+ if (filter.intensity && filter.intensity > 0) {
315
+ ctx.filter = `blur(${filter.intensity}px)`;
316
+ }
317
+ break;
318
+ case 'brightness':
319
+ if (filter.value !== undefined) {
320
+ ctx.filter = `brightness(${100 + filter.value}%)`;
321
+ }
322
+ break;
323
+ case 'contrast':
324
+ if (filter.value !== undefined) {
325
+ ctx.filter = `contrast(${100 + filter.value}%)`;
326
+ }
327
+ break;
328
+ case 'saturation':
329
+ if (filter.value !== undefined) {
330
+ ctx.filter = `saturate(${100 + filter.value}%)`;
331
+ }
332
+ break;
333
+ case 'hueShift':
334
+ if (filter.value !== undefined) {
335
+ ctx.filter = `hue-rotate(${filter.value}deg)`;
336
+ }
337
+ break;
338
+ case 'grayscale':
339
+ ctx.filter = 'grayscale(100%)';
340
+ break;
341
+ case 'sepia':
342
+ ctx.filter = 'sepia(100%)';
343
+ break;
344
+ case 'invert':
345
+ ctx.filter = 'invert(100%)';
346
+ break;
347
+ }
348
+ }
349
+ ctx.restore();
350
+ }
351
+ //# sourceMappingURL=professionalImageFilters.js.map